+++ /dev/null
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
- tinymce.create('tinymce.plugins.Layer', {\r
- init : function(ed, url) {\r
- var t = this;\r
-\r
- t.editor = ed;\r
-\r
- // Register commands\r
- ed.addCommand('mceInsertLayer', t._insertLayer, t);\r
-\r
- ed.addCommand('mceMoveForward', function() {\r
- t._move(1);\r
- });\r
-\r
- ed.addCommand('mceMoveBackward', function() {\r
- t._move(-1);\r
- });\r
-\r
- ed.addCommand('mceMakeAbsolute', function() {\r
- t._toggleAbsolute();\r
- });\r
-\r
- // Register buttons\r
- ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'});\r
- ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'});\r
- ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'});\r
- ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'});\r
-\r
- ed.onInit.add(function() {\r
- if (tinymce.isIE)\r
- ed.getDoc().execCommand('2D-Position', false, true);\r
- });\r
-\r
- ed.onNodeChange.add(t._nodeChange, t);\r
- ed.onVisualAid.add(t._visualAid, t);\r
- },\r
-\r
- getInfo : function() {\r
- return {\r
- longname : 'Layer',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',\r
- version : tinymce.majorVersion + "." + tinymce.minorVersion\r
- };\r
- },\r
-\r
- // Private methods\r
-\r
- _nodeChange : function(ed, cm, n) {\r
- var le, p;\r
-\r
- le = this._getParentLayer(n);\r
- p = ed.dom.getParent(n, 'DIV,P,IMG');\r
-\r
- if (!p) {\r
- cm.setDisabled('absolute', 1);\r
- cm.setDisabled('moveforward', 1);\r
- cm.setDisabled('movebackward', 1);\r
- } else {\r
- cm.setDisabled('absolute', 0);\r
- cm.setDisabled('moveforward', !le);\r
- cm.setDisabled('movebackward', !le);\r
- cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute");\r
- }\r
- },\r
-\r
- // Private methods\r
-\r
- _visualAid : function(ed, e, s) {\r
- var dom = ed.dom;\r
-\r
- tinymce.each(dom.select('div,p', e), function(e) {\r
- if (/^(absolute|relative|static)$/i.test(e.style.position)) {\r
- if (s)\r
- dom.addClass(e, 'mceItemVisualAid');\r
- else\r
- dom.removeClass(e, 'mceItemVisualAid'); \r
- }\r
- });\r
- },\r
-\r
- _move : function(d) {\r
- var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl;\r
-\r
- nl = [];\r
- tinymce.walk(ed.getBody(), function(n) {\r
- if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position))\r
- nl.push(n); \r
- }, 'childNodes');\r
-\r
- // Find z-indexes\r
- for (i=0; i<nl.length; i++) {\r
- z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;\r
-\r
- if (ci < 0 && nl[i] == le)\r
- ci = i;\r
- }\r
-\r
- if (d < 0) {\r
- // Move back\r
-\r
- // Try find a lower one\r
- for (i=0; i<z.length; i++) {\r
- if (z[i] < z[ci]) {\r
- fi = i;\r
- break;\r
- }\r
- }\r
-\r
- if (fi > -1) {\r
- nl[ci].style.zIndex = z[fi];\r
- nl[fi].style.zIndex = z[ci];\r
- } else {\r
- if (z[ci] > 0)\r
- nl[ci].style.zIndex = z[ci] - 1;\r
- }\r
- } else {\r
- // Move forward\r
-\r
- // Try find a higher one\r
- for (i=0; i<z.length; i++) {\r
- if (z[i] > z[ci]) {\r
- fi = i;\r
- break;\r
- }\r
- }\r
-\r
- if (fi > -1) {\r
- nl[ci].style.zIndex = z[fi];\r
- nl[fi].style.zIndex = z[ci];\r
- } else\r
- nl[ci].style.zIndex = z[ci] + 1;\r
- }\r
-\r
- ed.execCommand('mceRepaint');\r
- },\r
-\r
- _getParentLayer : function(n) {\r
- return this.editor.dom.getParent(n, function(n) {\r
- return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position);\r
- });\r
- },\r
-\r
- _insertLayer : function() {\r
- var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*'));\r
-\r
- ed.dom.add(ed.getBody(), 'div', {\r
- style : {\r
- position : 'absolute',\r
- left : p.x,\r
- top : (p.y > 20 ? p.y : 20),\r
- width : 100,\r
- height : 100\r
- },\r
- 'class' : 'mceItemVisualAid'\r
- }, ed.selection.getContent() || ed.getLang('layer.content'));\r
- },\r
-\r
- _toggleAbsolute : function() {\r
- var ed = this.editor, le = this._getParentLayer(ed.selection.getNode());\r
-\r
- if (!le)\r
- le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG');\r
-\r
- if (le) {\r
- if (le.style.position.toLowerCase() == "absolute") {\r
- ed.dom.setStyles(le, {\r
- position : '',\r
- left : '',\r
- top : '',\r
- width : '',\r
- height : ''\r
- });\r
-\r
- ed.dom.removeClass(le, 'mceItemVisualAid');\r
- } else {\r
- if (le.style.left == "")\r
- le.style.left = 20 + 'px';\r
-\r
- if (le.style.top == "")\r
- le.style.top = 20 + 'px';\r
-\r
- if (le.style.width == "")\r
- le.style.width = le.width ? (le.width + 'px') : '100px';\r
-\r
- if (le.style.height == "")\r
- le.style.height = le.height ? (le.height + 'px') : '100px';\r
-\r
- le.style.position = "absolute";\r
- ed.addVisual(ed.getBody());\r
- }\r
-\r
- ed.execCommand('mceRepaint');\r
- ed.nodeChanged();\r
- }\r
- }\r
- });\r
-\r
- // Register plugin\r
- tinymce.PluginManager.add('layer', tinymce.plugins.Layer);\r
-})();
\ No newline at end of file