Вход Регистрация
Файл: mailist/wys/jscripts/tiny_mce/utils/mclayer.js
Строк: 138
<?php
/**
 * $Id: mclayer.js 162 2007-01-03 16:16:52Z spocke $
 *
 * Moxiecode floating layer script.
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 */

function MCLayer(id) {
    
this.id = id;
    
this.settings = new Array();
    
this.blockerElement = null;
    
this.isMSIE = navigator.appName == "Microsoft Internet Explorer";
    
this.events = false;
    
this.autoHideCallback = null;
}

MCLayer.prototype = {
    
moveRelativeTo : function(re, p, a) {
        var 
rep = this.getAbsPosition(re);
        var 
w = parseInt(re.offsetWidth);
        var 
h = parseInt(re.offsetHeight);
        var 
x, y;

        switch (
p) {
            case 
"tl":
                break;

            case 
"tr":
                
x = rep.absLeft + w;
                
y = rep.absTop;
                break;

            case 
"bl":
                break;

            case 
"br":
                break;
        }

        
this.moveTo(x, y);
    },

    
moveBy : function(dx, dy) {
        var 
e = this.getElement();
        var 
x = parseInt(e.style.left);
        var 
y = parseInt(e.style.top);

        
e.style.left = (x + dx) + "px";
        
e.style.top = (y + dy) + "px";

        
this.updateBlocker();
    },

    
moveTo : function(x, y) {
        var 
e = this.getElement();

        
e.style.left = x + "px";
        
e.style.top = y + "px";

        
this.updateBlocker();
    },

    
show : function() {
        
MCLayer.visibleLayer = this;

        
this.getElement().style.display = 'block';
        
this.updateBlocker();
    },

    
hide : function() {
        
this.getElement().style.display = 'none';
        
this.updateBlocker();
    },

    
setAutoHide : function(s, cb) {
        
this.autoHideCallback = cb;
        
this.registerEventHandlers();
    },

    
getElement : function() {
        return 
document.getElementById(this.id);
    },

    
updateBlocker : function() {
        if (!
this.isMSIE)
            return;

        var 
e = this.getElement();
        var 
b = this.getBlocker();
        var 
x = this.parseInt(e.style.left);
        var 
y = this.parseInt(e.style.top);
        var 
w = this.parseInt(e.offsetWidth);
        var 
h = this.parseInt(e.offsetHeight);

        
b.style.left = x + 'px';
        
b.style.top = y + 'px';
        
b.style.width = w + 'px';
        
b.style.height = h + 'px';
        
b.style.display = e.style.display;
    },

    
getBlocker : function() {
        if (!
this.blockerElement) {
            var 
d = document, b = d.createElement("iframe");

            
b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0';
            
b.src = 'javascript:false;';
            
b.frameBorder = '0';
            
b.scrolling = 'no';

            
d.body.appendChild(b);
            
this.blockerElement = b;
        }

        return 
this.blockerElement;
    },

    
getAbsPosition : function(n) {
        var 
p = {absLeft : 0, absTop : 0};

        while (
n) {
            
p.absLeft += n.offsetLeft;
            
p.absTop += n.offsetTop;
            
n = n.offsetParent;
        }

        return 
p;
    },

    
registerEventHandlers : function() {
        if (!
this.events) {
            var 
d = document;

            
this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown);

            
this.events = true;
        }
    },

    
addEvent : function(o, n, h) {
        if (
o.attachEvent)
            
o.attachEvent("on" + n, h);
        else
            
o.addEventListener(n, h, false);
    },

    
onMouseDown : function(e) {
        
e = typeof(e) == "undefined" ? window.event : e;
        var 
b = document.body;
        var 
l = MCLayer.visibleLayer;

        if (
l) {
            var 
mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX;
            var 
my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY;
            var 
el = l.getElement();
            var 
x = parseInt(el.style.left);
            var 
y = parseInt(el.style.top);
            var 
w = parseInt(el.offsetWidth);
            var 
h = parseInt(el.offsetHeight);

            if (!(
mx > x && mx < x + w && my > y && my < y + h)) {
                
MCLayer.visibleLayer = null;

                if (
l.autoHideCallback && l.autoHideCallback(l, e, mx, my))
                    return 
true;

                
l.hide();
            }
        }
    },

    
addCSSClass : function(e, c) {
        
this.removeCSSClass(e, c);
        var 
a = this.explode(' ', e.className);
        
a[a.length] = c;
        
e.className = a.join(' ');
    },

    
removeCSSClass : function(e, c) {
        var 
a = this.explode(' ', e.className), i;

        for (
i=0; i<a.length; i++) {
            if (
a[i] == c)
                
a[i] = '';
        }

        
e.className = a.join(' ');
    },

    
explode : function(d, s) {
        var 
ar = s.split(d);
        var 
oar = new Array();

        for (var 
i = 0; i<ar.length; i++) {
            if (
ar[i] != "")
                
oar[oar.length] = ar[i];
        }

        return 
oar;
    },

    
parseInt : function(s) {
        if (
s == null || s == '')
            return 
0;

        return 
parseInt(s);
    }
}
?>
Онлайн: 1
Реклама