Mercurial > public > sg101
comparison media/js/tiny_mce/plugins/layer/editor_plugin_src.js @ 45:a5b4c5ce0658
Breaking down and controlling all media files, including javascript libraries.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Fri, 19 Jun 2009 03:16:03 +0000 |
parents | |
children | 149c3567fec1 |
comparison
equal
deleted
inserted
replaced
44:08cd19c1ee50 | 45:a5b4c5ce0658 |
---|---|
1 /** | |
2 * $Id: editor_plugin_src.js 652 2008-02-29 13:09:46Z spocke $ | |
3 * | |
4 * @author Moxiecode | |
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. | |
6 */ | |
7 | |
8 (function() { | |
9 tinymce.create('tinymce.plugins.Layer', { | |
10 init : function(ed, url) { | |
11 var t = this; | |
12 | |
13 t.editor = ed; | |
14 | |
15 // Register commands | |
16 ed.addCommand('mceInsertLayer', t._insertLayer, t); | |
17 | |
18 ed.addCommand('mceMoveForward', function() { | |
19 t._move(1); | |
20 }); | |
21 | |
22 ed.addCommand('mceMoveBackward', function() { | |
23 t._move(-1); | |
24 }); | |
25 | |
26 ed.addCommand('mceMakeAbsolute', function() { | |
27 t._toggleAbsolute(); | |
28 }); | |
29 | |
30 // Register buttons | |
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'}); | |
35 | |
36 ed.onInit.add(function() { | |
37 if (tinymce.isIE) | |
38 ed.getDoc().execCommand('2D-Position', false, true); | |
39 }); | |
40 | |
41 ed.onNodeChange.add(t._nodeChange, t); | |
42 ed.onVisualAid.add(t._visualAid, t); | |
43 }, | |
44 | |
45 getInfo : function() { | |
46 return { | |
47 longname : 'Layer', | |
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 | |
52 }; | |
53 }, | |
54 | |
55 // Private methods | |
56 | |
57 _nodeChange : function(ed, cm, n) { | |
58 var le, p; | |
59 | |
60 le = this._getParentLayer(n); | |
61 p = ed.dom.getParent(n, 'DIV,P,IMG'); | |
62 | |
63 if (!p) { | |
64 cm.setDisabled('absolute', 1); | |
65 cm.setDisabled('moveforward', 1); | |
66 cm.setDisabled('movebackward', 1); | |
67 } else { | |
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"); | |
72 } | |
73 }, | |
74 | |
75 // Private methods | |
76 | |
77 _visualAid : function(ed, e, s) { | |
78 var dom = ed.dom; | |
79 | |
80 tinymce.each(dom.select('div,p', e), function(e) { | |
81 if (/^(absolute|relative|static)$/i.test(e.style.position)) { | |
82 if (s) | |
83 dom.addClass(e, 'mceItemVisualAid'); | |
84 else | |
85 dom.removeClass(e, 'mceItemVisualAid'); | |
86 } | |
87 }); | |
88 }, | |
89 | |
90 _move : function(d) { | |
91 var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl; | |
92 | |
93 nl = []; | |
94 tinymce.walk(ed.getBody(), function(n) { | |
95 if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position)) | |
96 nl.push(n); | |
97 }, 'childNodes'); | |
98 | |
99 // Find z-indexes | |
100 for (i=0; i<nl.length; i++) { | |
101 z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0; | |
102 | |
103 if (ci < 0 && nl[i] == le) | |
104 ci = i; | |
105 } | |
106 | |
107 if (d < 0) { | |
108 // Move back | |
109 | |
110 // Try find a lower one | |
111 for (i=0; i<z.length; i++) { | |
112 if (z[i] < z[ci]) { | |
113 fi = i; | |
114 break; | |
115 } | |
116 } | |
117 | |
118 if (fi > -1) { | |
119 nl[ci].style.zIndex = z[fi]; | |
120 nl[fi].style.zIndex = z[ci]; | |
121 } else { | |
122 if (z[ci] > 0) | |
123 nl[ci].style.zIndex = z[ci] - 1; | |
124 } | |
125 } else { | |
126 // Move forward | |
127 | |
128 // Try find a higher one | |
129 for (i=0; i<z.length; i++) { | |
130 if (z[i] > z[ci]) { | |
131 fi = i; | |
132 break; | |
133 } | |
134 } | |
135 | |
136 if (fi > -1) { | |
137 nl[ci].style.zIndex = z[fi]; | |
138 nl[fi].style.zIndex = z[ci]; | |
139 } else | |
140 nl[ci].style.zIndex = z[ci] + 1; | |
141 } | |
142 | |
143 ed.execCommand('mceRepaint'); | |
144 }, | |
145 | |
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); | |
149 }); | |
150 }, | |
151 | |
152 _insertLayer : function() { | |
153 var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*')); | |
154 | |
155 ed.dom.add(ed.getBody(), 'div', { | |
156 style : { | |
157 position : 'absolute', | |
158 left : p.x, | |
159 top : (p.y > 20 ? p.y : 20), | |
160 width : 100, | |
161 height : 100 | |
162 }, | |
163 'class' : 'mceItemVisualAid' | |
164 }, ed.selection.getContent() || ed.getLang('layer.content')); | |
165 }, | |
166 | |
167 _toggleAbsolute : function() { | |
168 var ed = this.editor, le = this._getParentLayer(ed.selection.getNode()); | |
169 | |
170 if (!le) | |
171 le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG'); | |
172 | |
173 if (le) { | |
174 if (le.style.position.toLowerCase() == "absolute") { | |
175 ed.dom.setStyles(le, { | |
176 position : '', | |
177 left : '', | |
178 top : '', | |
179 width : '', | |
180 height : '' | |
181 }); | |
182 | |
183 ed.dom.removeClass(le, 'mceItemVisualAid'); | |
184 } else { | |
185 if (le.style.left == "") | |
186 le.style.left = 20 + 'px'; | |
187 | |
188 if (le.style.top == "") | |
189 le.style.top = 20 + 'px'; | |
190 | |
191 if (le.style.width == "") | |
192 le.style.width = le.width ? (le.width + 'px') : '100px'; | |
193 | |
194 if (le.style.height == "") | |
195 le.style.height = le.height ? (le.height + 'px') : '100px'; | |
196 | |
197 le.style.position = "absolute"; | |
198 ed.addVisual(ed.getBody()); | |
199 } | |
200 | |
201 ed.execCommand('mceRepaint'); | |
202 ed.nodeChanged(); | |
203 } | |
204 } | |
205 }); | |
206 | |
207 // Register plugin | |
208 tinymce.PluginManager.add('layer', tinymce.plugins.Layer); | |
209 })(); |