diff -r c72b545f1304 -r 67bd3121a12e includes/clientside/tinymce/plugins/layer/editor_plugin_src.js --- a/includes/clientside/tinymce/plugins/layer/editor_plugin_src.js Wed Dec 26 00:37:26 2007 -0500 +++ b/includes/clientside/tinymce/plugins/layer/editor_plugin_src.js Thu Dec 27 22:09:33 2007 -0500 @@ -1,248 +1,209 @@ /** - * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ + * $Id: editor_plugin_src.js 372 2007-11-11 18:38:50Z spocke $ * * @author Moxiecode * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. */ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('layer'); +(function() { + tinymce.create('tinymce.plugins.Layer', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + // Register commands + ed.addCommand('mceInsertLayer', t._insertLayer, t); + + ed.addCommand('mceMoveForward', function() { + t._move(1); + }); + + ed.addCommand('mceMoveBackward', function() { + t._move(-1); + }); + + ed.addCommand('mceMakeAbsolute', function() { + t._toggleAbsolute(); + }); + + // Register buttons + ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'}); + ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'}); + ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'}); + ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'}); + + ed.onInit.add(function() { + if (tinymce.isIE) + ed.execCommand('2D-Position'); + }); + + ed.onNodeChange.add(t._nodeChange, t); + ed.onVisualAid.add(t._visualAid, t); + }, + + getInfo : function() { + return { + longname : 'Layer', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, -var TinyMCE_LayerPlugin = { - getInfo : function() { - return { - longname : 'Layer', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer', - version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion - }; - }, + // Private methods + + _nodeChange : function(ed, cm, n) { + var le, p; + + le = this._getParentLayer(n); + p = ed.dom.getParent(n, 'DIV,P,IMG'); + + if (!p) { + cm.setDisabled('absolute', 1); + cm.setDisabled('moveforward', 1); + cm.setDisabled('movebackward', 1); + } else { + cm.setDisabled('absolute', 0); + cm.setDisabled('moveforward', !le); + cm.setDisabled('movebackward', !le); + cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute"); + } + }, + + // Private methods - initInstance : function(inst) { - if (tinyMCE.isMSIE && !tinyMCE.isOpera) - inst.getDoc().execCommand('2D-Position'); - }, + _visualAid : function(ed, e, s) { + var dom = ed.dom; + + tinymce.each(dom.select('div,p', e), function(e) { + if (/^(absolute|relative|static)$/i.test(e.style.position)) { + if (s) + dom.addClass(e, 'mceVisualAid'); + else + dom.removeClass(e, 'mceVisualAid'); + } + }); + }, - handleEvent : function(e) { - var inst = tinyMCE.selectedInstance; - var w = inst.getWin(), le = inst._lastStyleElm, e; + _move : function(d) { + var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl; - if (tinyMCE.isGecko) { - e = this._getParentLayer(inst.getFocusElement()); + nl = []; + tinymce.walk(ed.getBody(), function(n) { + if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position)) + nl.push(n); + }, 'childNodes'); + + // Find z-indexes + for (i=0; i -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else { + if (z[ci] > 0) + nl[ci].style.zIndex = z[ci] - 1; + } + } else { + // Move forward + + // Try find a higher one + for (i=0; i z[ci]) { + fi = i; + break; + } + } + + if (fi > -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else + nl[ci].style.zIndex = z[ci] + 1; } - } + + ed.execCommand('mceRepaint'); + }, + + _getParentLayer : function(n) { + return this.editor.dom.getParent(n, function(n) { + return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position); + }); + }, + + _insertLayer : function() { + var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*')); - return true; - }, + ed.dom.add(ed.getBody(), 'div', { + style : { + position : 'absolute', + left : p.x, + top : (p.y > 20 ? p.y : 20), + width : 100, + height : 100 + }, + 'class' : 'mceVisualAid' + }, ed.selection.getContent() || ed.getLang('layer.content')); + }, + + _toggleAbsolute : function() { + var ed = this.editor, le = this._getParentLayer(ed.selection.getNode()); + + if (!le) + le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG'); - handleVisualAid : function(el, deep, state, inst) { - var nl = inst.getDoc().getElementsByTagName("div"), i; + if (le) { + if (le.style.position.toLowerCase() == "absolute") { + ed.dom.setStyles(le, { + position : '', + left : '', + top : '', + width : '', + height : '' + }); + + ed.dom.removeClass(le, 'mceVisualAid'); + } else { + if (le.style.left == "") + le.style.left = 20 + 'px'; - for (i=0; i -1) { - nl[ci].style.zIndex = z[fi]; - nl[fi].style.zIndex = z[ci]; - } else { - if (z[ci] > 0) - nl[ci].style.zIndex = z[ci] - 1; - } - } else { - // Move forward - - // Try find a higher one - for (i=0; i z[ci]) { - fi = i; - break; - } - } - - if (fi > -1) { - nl[ci].style.zIndex = z[fi]; - nl[fi].style.zIndex = z[ci]; - } else - nl[ci].style.zIndex = z[ci] + 1; - } - - inst.repaint(); - }, - - _getParentLayer : function(n) { - return tinyMCE.getParentNode(n, function(n) { - return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position); - }); - }, - - _insertLayer : function() { - var inst = tinyMCE.selectedInstance; - var e = tinyMCE.getParentElement(inst.getFocusElement()); - var p = tinyMCE.getAbsPosition(e); - var d = inst.getDoc(); - var ne = d.createElement('div'); - var h = inst.selection.getSelectedHTML(); - - // Move div - ne.style.position = 'absolute'; - ne.style.left = p.absLeft + 'px'; - ne.style.top = (p.absTop > 20 ? p.absTop : 20) + 'px'; - ne.style.width = '100px'; - ne.style.height = '100px'; - ne.className = 'mceVisualAid'; - - if (!h) - h = tinyMCE.getLang('lang_layer_content'); - - ne.innerHTML = h; - - // Add it - d.body.appendChild(ne); - }, - - _toggleAbsolute : function() { - var inst = tinyMCE.selectedInstance; - var le = this._getParentLayer(inst.getFocusElement()); - - if (le == null) - le = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img'); - - if (le) { - if (le.style.position.toLowerCase() == "absolute") { - le.style.position = ""; - le.style.left = ""; - le.style.top = ""; - } else { - le.style.position = "absolute"; - - if (le.style.left == "") - le.style.left = 20 + 'px'; - - if (le.style.top == "") - le.style.top = 20 + 'px'; - - if (le.style.width == "") - le.style.width = le.width ? (le.width + 'px') : '100px'; - - if (le.style.height == "") - le.style.height = le.height ? (le.height + 'px') : '100px'; - - tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst); - } - - inst.repaint(); - tinyMCE.triggerNodeChange(); - } - } -}; - -tinyMCE.addPlugin("layer", TinyMCE_LayerPlugin); + // Register plugin + tinymce.PluginManager.add('layer', tinymce.plugins.Layer); +})(); \ No newline at end of file