diff options
Diffstat (limited to 'lib/scripts')
-rw-r--r-- | lib/scripts/drag.js | 55 | ||||
-rw-r--r-- | lib/scripts/edit.js | 5 | ||||
-rw-r--r-- | lib/scripts/script.js | 41 | ||||
-rw-r--r-- | lib/scripts/subscriptions.js | 46 | ||||
-rw-r--r-- | lib/scripts/toolbar.js | 4 |
5 files changed, 111 insertions, 40 deletions
diff --git a/lib/scripts/drag.js b/lib/scripts/drag.js index 4726b77de..fa249a996 100644 --- a/lib/scripts/drag.js +++ b/lib/scripts/drag.js @@ -1,8 +1,9 @@ /** * Makes a DOM object draggable * - * This is currently for movable DOM dialogs only. If needed it could be - * extended to execute callbacks on special events... + * If you just want to move objects around, use drag.attach. For full + * customization, drag can be used as a javascript prototype, it is + * inheritance-aware. * * @link http://nofunc.org/Drag_Drop/ */ @@ -26,33 +27,36 @@ var drag = { attach: function (obj,handle) { if(handle){ handle.dragobject = obj; - addEvent($(handle),'mousedown',drag.start); }else{ - addEvent($(obj),'mousedown',drag.start); + handle = obj; } + var _this = this; + addEvent($(handle),'mousedown',function (e) {return _this.start(e); }); }, /** * Starts the dragging operation */ start: function (e){ - drag.handle = e.target; - if(drag.handle.dragobject){ - drag.obj = drag.handle.dragobject; + this.handle = e.target; + if(this.handle.dragobject){ + this.obj = this.handle.dragobject; }else{ - drag.obj = drag.handle; + this.obj = this.handle; } - drag.handle.className += ' ondrag'; - drag.obj.className += ' ondrag'; + this.handle.className += ' ondrag'; + this.obj.className += ' ondrag'; - drag.oX = parseInt(drag.obj.style.left); - drag.oY = parseInt(drag.obj.style.top); - drag.eX = drag.evX(e); - drag.eY = drag.evY(e); + this.oX = parseInt(this.obj.style.left); + this.oY = parseInt(this.obj.style.top); + this.eX = drag.evX(e); + this.eY = drag.evY(e); - addEvent(document,'mousemove',drag.drag); - addEvent(document,'mouseup',drag.stop); + var _this = this; + this.mousehandlers = [function (e) {return _this.drag(e);}, function (e) {return _this.stop(e);}]; + addEvent(document,'mousemove', this.mousehandlers[0]); + addEvent(document,'mouseup', this.mousehandlers[1]); e.preventDefault(); e.stopPropagation(); @@ -63,21 +67,21 @@ var drag = { * Ends the dragging operation */ stop: function(){ - drag.handle.className = drag.handle.className.replace(/ ?ondrag/,''); - drag.obj.className = drag.obj.className.replace(/ ?ondrag/,''); - removeEvent(document,'mousemove',drag.drag); - removeEvent(document,'mouseup',drag.stop); - drag.obj = null; - drag.handle = null; + this.handle.className = this.handle.className.replace(/ ?ondrag/,''); + this.obj.className = this.obj.className.replace(/ ?ondrag/,''); + removeEvent(document,'mousemove', this.mousehandlers[0]); + removeEvent(document,'mouseup', this.mousehandlers[1]); + this.obj = null; + this.handle = null; }, /** * Moves the object during the dragging operation */ drag: function(e) { - if(drag.obj) { - drag.obj.style.top = (drag.evY(e)+drag.oY-drag.eY+'px'); - drag.obj.style.left = (drag.evX(e)+drag.oX-drag.eX+'px'); + if(this.obj) { + this.obj.style.top = (this.evY(e)+this.oY-this.eY+'px'); + this.obj.style.left = (this.evX(e)+this.oX-this.eX+'px'); } }, @@ -96,4 +100,3 @@ var drag = { } }; - diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js index d7391b7e7..4d8ead858 100644 --- a/lib/scripts/edit.js +++ b/lib/scripts/edit.js @@ -12,12 +12,15 @@ * * @author Andreas Gohr <andi@splitbrain.org> */ -function createToolButton(icon,label,key,id){ +function createToolButton(icon,label,key,id,classname){ var btn = document.createElement('button'); var ico = document.createElement('img'); // preapare the basic button stuff btn.className = 'toolbutton'; + if(classname){ + btn.className += ' '+classname; + } btn.title = label; if(key){ btn.title += ' ['+key.toUpperCase()+']'; diff --git a/lib/scripts/script.js b/lib/scripts/script.js index ccba82144..b611f980a 100644 --- a/lib/scripts/script.js +++ b/lib/scripts/script.js @@ -538,24 +538,41 @@ addInitEvent(function(){ var break_classes = new RegExp('secedit|toc|page'); var btns = getElementsByClass('btn_secedit',document,'form'); for(var i=0; i<btns.length; i++){ - addEvent(btns[i],'mouseover',function(e){ - var tgt = e.target; - if(tgt.form) tgt = tgt.form; - tgt = tgt.parentNode.previousSibling; - if(tgt.nodeName != "DIV") tgt = tgt.previousSibling; - while(!break_classes.test(tgt.className)) { - tgt.className += ' section_highlight'; - if (tgt.tagName == 'H1') break; - tgt = (tgt.previousSibling != null) ? tgt.previousSibling : tgt.parentNode; - } - }); + switch(btns[i].parentNode.className.match(/editbutton_(\w+)/)[1]) { + case 'plain': + addEvent(btns[i],'mouseover',function(e){ + var tgt = e.target.form.parentNode; + do { + tgt = tgt.previousSibling; + } while (tgt && !tgt.tagName); + if (!tgt) return; + if(tgt.nodeName != "DIV") tgt = tgt.previousSibling; + while(!break_classes.test(tgt.className)) { + tgt.className += ' section_highlight'; + if (tgt.tagName == 'H1') break; + tgt = (tgt.previousSibling != null) ? tgt.previousSibling : tgt.parentNode; + } + }); + break; + + case 'table': + addEvent(btns[i],'mouseover',function(e){ + var tgt = e.target.form.parentNode; + do { + tgt = tgt.previousSibling; + } while (tgt && !tgt.tagName); + if (tgt && tgt.tagName === 'TABLE') { + tgt.className += ' section_highlight'; + } + }); + break; + } addEvent(btns[i],'mouseout',function(e){ var secs = getElementsByClass('section_highlight'); for(var j=0; j<secs.length; j++){ secs[j].className = secs[j].className.replace(/section_highlight/,''); } - var secs = getElementsByClass('section_highlight'); }); } }); diff --git a/lib/scripts/subscriptions.js b/lib/scripts/subscriptions.js new file mode 100644 index 000000000..d701f258f --- /dev/null +++ b/lib/scripts/subscriptions.js @@ -0,0 +1,46 @@ +/** + * Hide list subscription style if target is a page + * + * @author Adrian Lang <lang@cosmocode.de> + */ + +addInitEvent(function () { + var form = $('subscribe__form'); + if (!form) { + return; + } + + var styleradios = {}; + + function update_state() { + if (!this.checked) { + return; + } + if (this.value.match(/:$/)) { + styleradios.list.parentNode.style.display = ''; + } else { + styleradios.list.parentNode.style.display = 'none'; + if (styleradios.list.checked) { + styleradios.digest.checked = 'checked'; + } + } + } + + var cur_sel = null; + + var inputs = form.getElementsByTagName('input'); + for (var i = 0; i < inputs.length ; ++i) { + switch (inputs[i].name) { + case 'sub_target': + addEvent(inputs[i], 'click', update_state); + if (inputs[i].checked) { + cur_sel = inputs[i]; + } + break; + case 'sub_style': + styleradios[inputs[i].value] = inputs[i]; + break; + } + } + update_state.call(cur_sel); +}); diff --git a/lib/scripts/toolbar.js b/lib/scripts/toolbar.js index 1e4a91864..99ad1bb9c 100644 --- a/lib/scripts/toolbar.js +++ b/lib/scripts/toolbar.js @@ -27,7 +27,9 @@ function initToolbar(tbid,edid,tb){ // create new button var btn = createToolButton(tb[i]['icon'], tb[i]['title'], - tb[i]['key']); + tb[i]['key'], + tb[i]['id'], + tb[i]['class']); // type is a tb function -> assign it as onclick |