source: trunk/web/app/plugins/tinymce/jscripts/tiny_mce/utils/mclayer.js @ 3

Last change on this file since 3 was 1, checked in by dj3c1t, 13 years ago

import initial

File size: 4.2 KB
Line 
1/**
2 * $Id: mclayer.js 520 2008-01-07 16:30:32Z spocke $
3 *
4 * Moxiecode floating layer script.
5 *
6 * @author Moxiecode
7 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
8 */
9
10function MCLayer(id) {
11        this.id = id;
12        this.settings = new Array();
13        this.blockerElement = null;
14        this.isMSIE = navigator.appName == "Microsoft Internet Explorer";
15        this.events = false;
16        this.autoHideCallback = null;
17}
18
19MCLayer.prototype = {
20        moveRelativeTo : function(re, p, a) {
21                var rep = this.getAbsPosition(re);
22                var w = parseInt(re.offsetWidth);
23                var h = parseInt(re.offsetHeight);
24                var x, y;
25
26                switch (p) {
27                        case "tl":
28                                break;
29
30                        case "tr":
31                                x = rep.absLeft + w;
32                                y = rep.absTop;
33                                break;
34
35                        case "bl":
36                                break;
37
38                        case "br":
39                                break;
40                }
41
42                this.moveTo(x, y);
43        },
44
45        moveBy : function(dx, dy) {
46                var e = this.getElement();
47                var x = parseInt(e.style.left);
48                var y = parseInt(e.style.top);
49
50                e.style.left = (x + dx) + "px";
51                e.style.top = (y + dy) + "px";
52
53                this.updateBlocker();
54        },
55
56        moveTo : function(x, y) {
57                var e = this.getElement();
58
59                e.style.left = x + "px";
60                e.style.top = y + "px";
61
62                this.updateBlocker();
63        },
64
65        show : function() {
66                MCLayer.visibleLayer = this;
67
68                this.getElement().style.display = 'block';
69                this.updateBlocker();
70        },
71
72        hide : function() {
73                this.getElement().style.display = 'none';
74                this.updateBlocker();
75        },
76
77        setAutoHide : function(s, cb) {
78                this.autoHideCallback = cb;
79                this.registerEventHandlers();
80        },
81
82        getElement : function() {
83                return document.getElementById(this.id);
84        },
85
86        updateBlocker : function() {
87                if (!this.isMSIE)
88                        return;
89
90                var e = this.getElement();
91                var b = this.getBlocker();
92                var x = this.parseInt(e.style.left);
93                var y = this.parseInt(e.style.top);
94                var w = this.parseInt(e.offsetWidth);
95                var h = this.parseInt(e.offsetHeight);
96
97                b.style.left = x + 'px';
98                b.style.top = y + 'px';
99                b.style.width = w + 'px';
100                b.style.height = h + 'px';
101                b.style.display = e.style.display;
102        },
103
104        getBlocker : function() {
105                if (!this.blockerElement) {
106                        var d = document, b = d.createElement("iframe");
107
108                        b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0';
109                        b.src = 'javascript:false;';
110                        b.frameBorder = '0';
111                        b.scrolling = 'no';
112
113                        d.body.appendChild(b);
114                        this.blockerElement = b;
115                }
116
117                return this.blockerElement;
118        },
119
120        getAbsPosition : function(n) {
121                var p = {absLeft : 0, absTop : 0};
122
123                while (n) {
124                        p.absLeft += n.offsetLeft;
125                        p.absTop += n.offsetTop;
126                        n = n.offsetParent;
127                }
128
129                return p;
130        },
131
132        registerEventHandlers : function() {
133                if (!this.events) {
134                        var d = document;
135
136                        this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown);
137
138                        this.events = true;
139                }
140        },
141
142        addEvent : function(o, n, h) {
143                if (o.attachEvent)
144                        o.attachEvent("on" + n, h);
145                else
146                        o.addEventListener(n, h, false);
147        },
148
149        onMouseDown : function(e) {
150                e = typeof(e) == "undefined" ? window.event : e;
151                var b = document.body;
152                var l = MCLayer.visibleLayer;
153
154                if (l) {
155                        var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX;
156                        var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY;
157                        var el = l.getElement();
158                        var x = parseInt(el.style.left);
159                        var y = parseInt(el.style.top);
160                        var w = parseInt(el.offsetWidth);
161                        var h = parseInt(el.offsetHeight);
162
163                        if (!(mx > x && mx < x + w && my > y && my < y + h)) {
164                                MCLayer.visibleLayer = null;
165
166                                if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my))
167                                        return true;
168
169                                l.hide();
170                        }
171                }
172        },
173
174        addCSSClass : function(e, c) {
175                this.removeCSSClass(e, c);
176                var a = this.explode(' ', e.className);
177                a[a.length] = c;
178                e.className = a.join(' ');
179        },
180
181        removeCSSClass : function(e, c) {
182                var a = this.explode(' ', e.className), i;
183
184                for (i=0; i<a.length; i++) {
185                        if (a[i] == c)
186                                a[i] = '';
187                }
188
189                e.className = a.join(' ');
190        },
191
192        explode : function(d, s) {
193                var ar = s.split(d);
194                var oar = new Array();
195
196                for (var i = 0; i<ar.length; i++) {
197                        if (ar[i] != "")
198                                oar[oar.length] = ar[i];
199                }
200
201                return oar;
202        },
203
204        parseInt : function(s) {
205                if (s == null || s == '')
206                        return 0;
207
208                return parseInt(s);
209        }
210}
Note: See TracBrowser for help on using the repository browser.