Вход Регистрация
Файл: mailist/wys/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js
Строк: 302
<?php
/**
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 */

/* Import plugin specific language pack */
tinyMCE.importPluginLanguagePack('layer');

var 
TinyMCE_LayerPlugin = {
    
getInfo : function() {
        return {
            
longname 'Layer',
            
author 'Moxiecode Systems AB',
            
authorurl 'http://tinymce.moxiecode.com',
            
infourl 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',
            
version tinyMCE.majorVersion "." tinyMCE.minorVersion
        
};
    },

    
initInstance : function(inst) {
        if (
tinyMCE.isMSIE && !tinyMCE.isOpera)
            
inst.getDoc().execCommand('2D-Position');
    },

    
handleEvent : function(e) {
        var 
inst tinyMCE.selectedInstance;
        var 
inst.getWin(), le inst._lastStyleElme;

        if (
tinyMCE.isGecko) {
            
this._getParentLayer(inst.getFocusElement());

            if (
e) {
                if (!
inst._lastStyleElm) {
                    
e.style.overflow 'auto';
                    
inst._lastStyleElm e;
                }
            } else if (
le) {
                
le inst._lastStyleElm;
                
le.style.width le.scrollWidth 'px';
                
le.style.height le.scrollHeight 'px';
                
le.style.overflow '';
                
inst._lastStyleElm null;
            }
        }

        return 
true;
    },

    
handleVisualAid : function(eldeepstateinst) {
        var 
nl inst.getDoc().getElementsByTagName("div"), i;

        for (
i=0i<nl.lengthi++) {
            if (new 
RegExp('absolute|relative|static''gi').test(nl[i].style.position)) {
                if (
state)
                    
tinyMCE.addCSSClass(nl[i], 'mceVisualAid');
                else
                    
tinyMCE.removeCSSClass(nl[i], 'mceVisualAid');                    
            }
        }
    },

    
getControlHTML : function(cn) {
        switch (
cn) {
            case 
"moveforward":
                return 
tinyMCE.getButtonHTML(cn'lang_layer_forward_desc''{$pluginurl}/images/moveforward.gif''mceMoveForward'true);

            case 
"movebackward":
                return 
tinyMCE.getButtonHTML(cn'lang_layer_backward_desc''{$pluginurl}/images/movebackward.gif''mceMoveBackward'true);

            case 
"absolute":
                return 
tinyMCE.getButtonHTML(cn'lang_layer_absolute_desc''{$pluginurl}/images/absolute.gif''mceMakeAbsolute'true);

            case 
"insertlayer":
                return 
tinyMCE.getButtonHTML(cn'lang_layer_insertlayer_desc''{$pluginurl}/images/insertlayer.gif''mceInsertLayer'true);
        }

        return 
"";
    },

    
execCommand : function(editor_idelementcommanduser_interfacevalue) {
        
// Handle commands
        
switch (command) {
            case 
"mceInsertLayer":
                
this._insertLayer();
                return 
true;

            case 
"mceMoveForward":
                
this._move(1);
                return 
true;

            case 
"mceMoveBackward":
                
this._move(-1);
                return 
true;

            case 
"mceMakeAbsolute":
                
this._toggleAbsolute();
                return 
true;
        }

        
// Pass to next handler in chain
        
return false;
    },

    
handleNodeChange : function(editor_idnodeundo_indexundo_levelsvisual_aidany_selection) {
        var 
inst tinyMCE.getInstanceById(editor_id);
        var 
le this._getParentLayer(inst.getFocusElement());
        var 
tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img');

        
tinyMCE.switchClass(editor_id '_absolute''mceButtonDisabled');
        
tinyMCE.switchClass(editor_id '_moveforward''mceButtonDisabled');
        
tinyMCE.switchClass(editor_id '_movebackward''mceButtonDisabled');

        if (
p)
            
tinyMCE.switchClass(editor_id '_absolute''mceButtonNormal');

        if (
le && le.style.position.toLowerCase() == "absolute") {
            
tinyMCE.switchClass(editor_id '_absolute''mceButtonSelected');
            
tinyMCE.switchClass(editor_id '_moveforward''mceButtonNormal');
            
tinyMCE.switchClass(editor_id '_movebackward''mceButtonNormal');
        }
    },

    
// Private plugin specific methods

    
_move : function(d) {
        var 
inst tinyMCE.selectedInstancei= new Array();
        var 
le this._getParentLayer(inst.getFocusElement()), ci = -1fi = -1;
        var 
nl tinyMCE.selectNodes(inst.getBody(), function(n) {
            return 
n.nodeType == && new RegExp('absolute|relative|static''gi').test(n.style.position);
        });

        
// Find z-indexes
        
for (i=0i<nl.lengthi++) {
            
z[i] = nl[i].style.zIndex parseInt(nl[i].style.zIndex) : 0;

            if (
ci && nl[i] == le)
                
ci i;
        }

        if (
0) {
            
// Move back

            // Try find a lower one
            
for (i=0i<z.lengthi++) {
                if (
z[i] < z[ci]) {
                    
fi i;
                    break;
                }
            }

            if (
fi > -1) {
                
nl[ci].style.zIndex z[fi];
                
nl[fi].style.zIndex z[ci];
            } else {
                if (
z[ci] > 0)
                    
nl[ci].style.zIndex z[ci] - 1;
            }
        } else {
            
// Move forward

            // Try find a higher one
            
for (i=0i<z.lengthi++) {
                if (
z[i] > z[ci]) {
                    
fi i;
                    break;
                }
            }

            if (
fi > -1) {
                
nl[ci].style.zIndex z[fi];
                
nl[fi].style.zIndex z[ci];
            } else
                
nl[ci].style.zIndex z[ci] + 1;
        }

        
inst.repaint();
    },

    
_getParentLayer : function(n) {
        return 
tinyMCE.getParentNode(n, function(n) {
            return 
n.nodeType == && new RegExp('absolute|relative|static''gi').test(n.style.position);
        });
    },

    
_insertLayer : function() {
        var 
inst tinyMCE.selectedInstance;
        var 
tinyMCE.getParentElement(inst.getFocusElement());
        var 
tinyMCE.getAbsPosition(e);
        var 
inst.getDoc();
        var 
ne d.createElement('div');
        var 
inst.selection.getSelectedHTML();

        
// Move div
        
ne.style.position 'absolute';
        
ne.style.left p.absLeft 'px';
        
ne.style.top = (p.absTop 20 p.absTop 20) + 'px';
        
ne.style.width '100px';
        
ne.style.height '100px';
        
ne.className 'mceVisualAid';

        if (!
h)
            
tinyMCE.getLang('lang_layer_content');

        
ne.innerHTML h;

        
// Add it
        
d.body.appendChild(ne);
    },

    
_toggleAbsolute : function() {
        var 
inst tinyMCE.selectedInstance;
        var 
le this._getParentLayer(inst.getFocusElement());

        if (
le == null)
            
le tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img');

        if (
le) {
            if (
le.style.position.toLowerCase() == "absolute") {
                
le.style.position "";
                
le.style.left "";
                
le.style.top "";
            } else {
                
le.style.position "absolute";

                if (
le.style.left == "")
                    
le.style.left 20 'px';

                if (
le.style.top == "")
                    
le.style.top 20 'px';

                if (
le.style.width == "")
                    
le.style.width le.width ? (le.width 'px') : '100px';

                if (
le.style.height == "")
                    
le.style.height le.height ? (le.height 'px') : '100px';

                
tinyMCE.handleVisualAid(inst.getBody(), trueinst.visualAidinst);
            }

            
inst.repaint();
            
tinyMCE.triggerNodeChange();
        }
    }
};

tinyMCE.addPlugin("layer"TinyMCE_LayerPlugin);
?>
Онлайн: 2
Реклама