~kosova/+junk/tuxfamily-twiki

« back to all changes in this revision

Viewing changes to foswiki/pub/System/TinyMCEPlugin/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js

  • Committer: James Michael DuPont
  • Date: 2009-07-18 19:58:49 UTC
  • Revision ID: jamesmikedupont@gmail.com-20090718195849-vgbmaht2ys791uo2
added foswiki

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 
3
 *
 
4
 * @author Moxiecode
 
5
 * @copyright Copyright ďż˝ 2004-2007, Moxiecode Systems AB, All rights reserved.
 
6
 */
 
7
 
 
8
/* Import plugin specific language pack */
 
9
tinyMCE.importPluginLanguagePack('layer');
 
10
 
 
11
var TinyMCE_LayerPlugin = {
 
12
        getInfo : function() {
 
13
                return {
 
14
                        longname : 'Layer',
 
15
                        author : 'Moxiecode Systems AB',
 
16
                        authorurl : 'http://tinymce.moxiecode.com',
 
17
                        infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',
 
18
                        version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
 
19
                };
 
20
        },
 
21
 
 
22
        initInstance : function(inst) {
 
23
                if (tinyMCE.isMSIE && !tinyMCE.isOpera)
 
24
                        inst.getDoc().execCommand('2D-Position');
 
25
        },
 
26
 
 
27
        handleEvent : function(e) {
 
28
                var inst = tinyMCE.selectedInstance;
 
29
                var w = inst.getWin(), le = inst._lastStyleElm, e;
 
30
 
 
31
                if (tinyMCE.isGecko) {
 
32
                        e = this._getParentLayer(inst.getFocusElement());
 
33
 
 
34
                        if (e) {
 
35
                                if (!inst._lastStyleElm) {
 
36
                                        e.style.overflow = 'auto';
 
37
                                        inst._lastStyleElm = e;
 
38
                                }
 
39
                        } else if (le) {
 
40
                                le = inst._lastStyleElm;
 
41
                                le.style.width = le.scrollWidth + 'px';
 
42
                                le.style.height = le.scrollHeight + 'px';
 
43
                                le.style.overflow = '';
 
44
                                inst._lastStyleElm = null;
 
45
                        }
 
46
                }
 
47
 
 
48
                return true;
 
49
        },
 
50
 
 
51
        handleVisualAid : function(el, deep, state, inst) {
 
52
                var nl = inst.getDoc().getElementsByTagName("div"), i;
 
53
 
 
54
                for (i=0; i<nl.length; i++) {
 
55
                        if (new RegExp('absolute|relative|static', 'gi').test(nl[i].style.position)) {
 
56
                                if (state)
 
57
                                        tinyMCE.addCSSClass(nl[i], 'mceVisualAid');
 
58
                                else
 
59
                                        tinyMCE.removeCSSClass(nl[i], 'mceVisualAid');                                  
 
60
                        }
 
61
                }
 
62
        },
 
63
 
 
64
        getControlHTML : function(cn) {
 
65
                switch (cn) {
 
66
                        case "moveforward":
 
67
                                return tinyMCE.getButtonHTML(cn, 'lang_layer_forward_desc', '{$pluginurl}/images/moveforward.gif', 'mceMoveForward', true);
 
68
 
 
69
                        case "movebackward":
 
70
                                return tinyMCE.getButtonHTML(cn, 'lang_layer_backward_desc', '{$pluginurl}/images/movebackward.gif', 'mceMoveBackward', true);
 
71
 
 
72
                        case "absolute":
 
73
                                return tinyMCE.getButtonHTML(cn, 'lang_layer_absolute_desc', '{$pluginurl}/images/absolute.gif', 'mceMakeAbsolute', true);
 
74
 
 
75
                        case "insertlayer":
 
76
                                return tinyMCE.getButtonHTML(cn, 'lang_layer_insertlayer_desc', '{$pluginurl}/images/insertlayer.gif', 'mceInsertLayer', true);
 
77
                }
 
78
 
 
79
                return "";
 
80
        },
 
81
 
 
82
        execCommand : function(editor_id, element, command, user_interface, value) {
 
83
                // Handle commands
 
84
                switch (command) {
 
85
                        case "mceInsertLayer":
 
86
                                this._insertLayer();
 
87
                                return true;
 
88
 
 
89
                        case "mceMoveForward":
 
90
                                this._move(1);
 
91
                                return true;
 
92
 
 
93
                        case "mceMoveBackward":
 
94
                                this._move(-1);
 
95
                                return true;
 
96
 
 
97
                        case "mceMakeAbsolute":
 
98
                                this._toggleAbsolute();
 
99
                                return true;
 
100
                }
 
101
 
 
102
                // Pass to next handler in chain
 
103
                return false;
 
104
        },
 
105
 
 
106
        handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
 
107
                var inst = tinyMCE.getInstanceById(editor_id);
 
108
                var le = this._getParentLayer(inst.getFocusElement());
 
109
                var p = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img');
 
110
 
 
111
                tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonDisabled');
 
112
                tinyMCE.switchClass(editor_id + '_moveforward', 'mceButtonDisabled');
 
113
                tinyMCE.switchClass(editor_id + '_movebackward', 'mceButtonDisabled');
 
114
 
 
115
                if (p)
 
116
                        tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonNormal');
 
117
 
 
118
                if (le && le.style.position.toLowerCase() == "absolute") {
 
119
                        tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonSelected');
 
120
                        tinyMCE.switchClass(editor_id + '_moveforward', 'mceButtonNormal');
 
121
                        tinyMCE.switchClass(editor_id + '_movebackward', 'mceButtonNormal');
 
122
                }
 
123
        },
 
124
 
 
125
        // Private plugin specific methods
 
126
 
 
127
        _move : function(d) {
 
128
                var inst = tinyMCE.selectedInstance, i, z = new Array();
 
129
                var le = this._getParentLayer(inst.getFocusElement()), ci = -1, fi = -1;
 
130
                var nl = tinyMCE.selectNodes(inst.getBody(), function(n) {
 
131
                        return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position);
 
132
                });
 
133
 
 
134
                // Find z-indexes
 
135
                for (i=0; i<nl.length; i++) {
 
136
                        z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;
 
137
 
 
138
                        if (ci < 0 && nl[i] == le)
 
139
                                ci = i;
 
140
                }
 
141
 
 
142
                if (d < 0) {
 
143
                        // Move back
 
144
 
 
145
                        // Try find a lower one
 
146
                        for (i=0; i<z.length; i++) {
 
147
                                if (z[i] < z[ci]) {
 
148
                                        fi = i;
 
149
                                        break;
 
150
                                }
 
151
                        }
 
152
 
 
153
                        if (fi > -1) {
 
154
                                nl[ci].style.zIndex = z[fi];
 
155
                                nl[fi].style.zIndex = z[ci];
 
156
                        } else {
 
157
                                if (z[ci] > 0)
 
158
                                        nl[ci].style.zIndex = z[ci] - 1;
 
159
                        }
 
160
                } else {
 
161
                        // Move forward
 
162
 
 
163
                        // Try find a higher one
 
164
                        for (i=0; i<z.length; i++) {
 
165
                                if (z[i] > z[ci]) {
 
166
                                        fi = i;
 
167
                                        break;
 
168
                                }
 
169
                        }
 
170
 
 
171
                        if (fi > -1) {
 
172
                                nl[ci].style.zIndex = z[fi];
 
173
                                nl[fi].style.zIndex = z[ci];
 
174
                        } else
 
175
                                nl[ci].style.zIndex = z[ci] + 1;
 
176
                }
 
177
 
 
178
                inst.repaint();
 
179
        },
 
180
 
 
181
        _getParentLayer : function(n) {
 
182
                return tinyMCE.getParentNode(n, function(n) {
 
183
                        return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position);
 
184
                });
 
185
        },
 
186
 
 
187
        _insertLayer : function() {
 
188
                var inst = tinyMCE.selectedInstance;
 
189
                var e = tinyMCE.getParentElement(inst.getFocusElement());
 
190
                var p = tinyMCE.getAbsPosition(e);
 
191
                var d = inst.getDoc();
 
192
                var ne = d.createElement('div');
 
193
                var h = inst.selection.getSelectedHTML();
 
194
 
 
195
                // Move div
 
196
                ne.style.position = 'absolute';
 
197
                ne.style.left = p.absLeft + 'px';
 
198
                ne.style.top = (p.absTop > 20 ? p.absTop : 20) + 'px';
 
199
                ne.style.width = '100px';
 
200
                ne.style.height = '100px';
 
201
                ne.className = 'mceVisualAid';
 
202
 
 
203
                if (!h)
 
204
                        h = tinyMCE.getLang('lang_layer_content');
 
205
 
 
206
                ne.innerHTML = h;
 
207
 
 
208
                // Add it
 
209
                d.body.appendChild(ne);
 
210
        },
 
211
 
 
212
        _toggleAbsolute : function() {
 
213
                var inst = tinyMCE.selectedInstance;
 
214
                var le = this._getParentLayer(inst.getFocusElement());
 
215
 
 
216
                if (le == null)
 
217
                        le = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img');
 
218
 
 
219
                if (le) {
 
220
                        if (le.style.position.toLowerCase() == "absolute") {
 
221
                                le.style.position = "";
 
222
                                le.style.left = "";
 
223
                                le.style.top = "";
 
224
                        } else {
 
225
                                le.style.position = "absolute";
 
226
 
 
227
                                if (le.style.left == "")
 
228
                                        le.style.left = 20 + 'px';
 
229
 
 
230
                                if (le.style.top == "")
 
231
                                        le.style.top = 20 + 'px';
 
232
 
 
233
                                if (le.style.width == "")
 
234
                                        le.style.width = le.width ? (le.width + 'px') : '100px';
 
235
 
 
236
                                if (le.style.height == "")
 
237
                                        le.style.height = le.height ? (le.height + 'px') : '100px';
 
238
 
 
239
                                tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
 
240
                        }
 
241
 
 
242
                        inst.repaint();
 
243
                        tinyMCE.triggerNodeChange();
 
244
                }
 
245
        }
 
246
};
 
247
 
 
248
tinyMCE.addPlugin("layer", TinyMCE_LayerPlugin);