5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
9 tinymce.create('tinymce.plugins.Layer', {
10 init : function(ed, url) {
16 ed.addCommand('mceInsertLayer', t._insertLayer, t);
18 ed.addCommand('mceMoveForward', function() {
22 ed.addCommand('mceMoveBackward', function() {
26 ed.addCommand('mceMakeAbsolute', function() {
31 ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'});
32 ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'});
33 ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'});
34 ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'});
36 ed.onInit.add(function() {
38 ed.getDoc().execCommand('2D-Position', false, true);
41 ed.onNodeChange.add(t._nodeChange, t);
42 ed.onVisualAid.add(t._visualAid, t);
45 getInfo : function() {
48 author : 'Moxiecode Systems AB',
49 authorurl : 'http://tinymce.moxiecode.com',
50 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',
51 version : tinymce.majorVersion + "." + tinymce.minorVersion
57 _nodeChange : function(ed, cm, n) {
60 le = this._getParentLayer(n);
61 p = ed.dom.getParent(n, 'DIV,P,IMG');
64 cm.setDisabled('absolute', 1);
65 cm.setDisabled('moveforward', 1);
66 cm.setDisabled('movebackward', 1);
68 cm.setDisabled('absolute', 0);
69 cm.setDisabled('moveforward', !le);
70 cm.setDisabled('movebackward', !le);
71 cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute");
77 _visualAid : function(ed, e, s) {
80 tinymce.each(dom.select('div,p', e), function(e) {
81 if (/^(absolute|relative|static)$/i.test(e.style.position)) {
83 dom.addClass(e, 'mceItemVisualAid');
85 dom.removeClass(e, 'mceItemVisualAid');
91 var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl;
94 tinymce.walk(ed.getBody(), function(n) {
95 if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position))
100 for (i=0; i<nl.length; i++) {
101 z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;
103 if (ci < 0 && nl[i] == le)
110 // Try find a lower one
111 for (i=0; i<z.length; i++) {
119 nl[ci].style.zIndex = z[fi];
120 nl[fi].style.zIndex = z[ci];
123 nl[ci].style.zIndex = z[ci] - 1;
128 // Try find a higher one
129 for (i=0; i<z.length; i++) {
137 nl[ci].style.zIndex = z[fi];
138 nl[fi].style.zIndex = z[ci];
140 nl[ci].style.zIndex = z[ci] + 1;
143 ed.execCommand('mceRepaint');
146 _getParentLayer : function(n) {
147 return this.editor.dom.getParent(n, function(n) {
148 return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position);
152 _insertLayer : function() {
153 var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*'));
155 ed.dom.add(ed.getBody(), 'div', {
157 position : 'absolute',
159 top : (p.y > 20 ? p.y : 20),
163 'class' : 'mceItemVisualAid'
164 }, ed.selection.getContent() || ed.getLang('layer.content'));
167 _toggleAbsolute : function() {
168 var ed = this.editor, le = this._getParentLayer(ed.selection.getNode());
171 le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG');
174 if (le.style.position.toLowerCase() == "absolute") {
175 ed.dom.setStyles(le, {
183 ed.dom.removeClass(le, 'mceItemVisualAid');
185 if (le.style.left == "")
186 le.style.left = 20 + 'px';
188 if (le.style.top == "")
189 le.style.top = 20 + 'px';
191 if (le.style.width == "")
192 le.style.width = le.width ? (le.width + 'px') : '100px';
194 if (le.style.height == "")
195 le.style.height = le.height ? (le.height + 'px') : '100px';
197 le.style.position = "absolute";
198 ed.addVisual(ed.getBody());
201 ed.execCommand('mceRepaint');
208 tinymce.PluginManager.add('layer', tinymce.plugins.Layer);