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

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

    
initInstance : function(inst) {
        
tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL "/plugins/noneditable/css/noneditable.css");

        
// Ugly hack
        
if (tinyMCE.isMSIE5_0)
            
tinyMCE.settings['plugins'] = tinyMCE.settings['plugins'].replace(/noneditable/gi'Noneditable');
    },

    
handleEvent : function(e) {
        return 
this._moveSelection(etinyMCE.selectedInstance);
    },

    
cleanup : function(typecontentinst) {
        switch (
type) {
            case 
"insert_to_editor_dom":
                var 
nodesieditClassnonEditClasseditableelm;

                
// Pass through Gecko
                
if (tinyMCE.isGecko)
                    return 
content;

                
nodes tinyMCE.getNodeTree(content, [], 1);

                
editClass tinyMCE.getParam("noneditable_editable_class""mceEditable");
                
nonEditClass tinyMCE.getParam("noneditable_noneditable_class""mceNonEditable");

                for (
i=0i<nodes.lengthi++) {
                    
elm nodes[i];

                    
// Convert contenteditable to classes
                    
editable tinyMCE.getAttrib(elm"contenteditable");
                    if (new 
RegExp("true|false","gi").test(editable))
                        
TinyMCE_NonEditablePlugin._setEditable(elmeditable == "true");

                    if (
tinyMCE.isIE) {
                        if (
tinyMCE.hasCSSClass(elmeditClass))
                            
elm.contentEditable true;

                        if (
tinyMCE.hasCSSClass(elmnonEditClass))
                            
elm.contentEditable false;
                    }
                }

                break;

            case 
"insert_to_editor":
                var 
editClass tinyMCE.getParam("noneditable_editable_class""mceEditable");
                var 
nonEditClass tinyMCE.getParam("noneditable_noneditable_class""mceNonEditable");

                
// Replace mceItem to new school
                
content content.replace(/mceItemEditable/geditClass);
                
content content.replace(/mceItemNonEditable/gnonEditClass);

                if (
tinyMCE.isIE && (content.indexOf(editClass) != -|| content.indexOf(nonEditClass) != -1)) {
                    
content content.replace(new RegExp("class="(.+)(" + editClass + ")"""gi"), 'class="$1$2" contenteditable="true"');
                    
content content.replace(new RegExp("class="(.+)(" + nonEditClass + ")"""gi"), 'class="$1$2" contenteditable="false"');
                    
content content.replace(new RegExp("class="(" + editClass + ")([^"]*)"", "gi"), 'class="$1$2" contenteditable="true"');
                    content = content.replace(new RegExp("
class="(" nonEditClass ")([^"]*)"""gi"), 'class="$1$2" contenteditable="false"');
                    
content content.replace(new RegExp("class="(.+)(" + editClass + ")([^"]*)"", "gi"), 'class="$1$2$3" contenteditable="true"');
                    content = content.replace(new RegExp("
class="(.+)(" nonEditClass ")([^"]*)"""gi"), 'class="$1$2$3" contenteditable="false"');
                }

                break;

            case 
"get_from_editor_dom":
                
// Pass through Gecko
                
if (tinyMCE.isGecko)
                    return 
content;

                if (
tinyMCE.getParam("noneditable_leave_contenteditable"false)) {
                    var 
nodes tinyMCE.getNodeTree(content, new Array(), 1);

                    for (var 
i=0i<nodes.lengthi++)
                        
nodes[i].removeAttribute("contenteditable");
                }

                break;
        }

        return 
content;
    },

    
_moveSelection : function(einst) {
        var 
srsceceltinyMCE.getParam('noneditable_editable_class''mceNonEditable');

        if (!
inst)
            return 
true;

        
// Always select whole element
        
if (tinyMCE.isGecko) {
            
inst.selection.getSel();
            
s.getRangeAt(0);
            
sc tinyMCE.getParentNode(r.startContainer, function (n) {return tinyMCE.hasCSSClass(nc);});
            
ec tinyMCE.getParentNode(r.endContainer, function (n) {return tinyMCE.hasCSSClass(nc);});

            
sc && r.setStartBefore(sc);
            
ec && r.setEndAfter(ec);

            if (
sc || ec) {
                if (
e.type == 'keypress' && e.keyCode == 39) {
                    
el sc || ec;

                    
// Try!!
                
}

                
s.removeAllRanges();
                
s.addRange(r);

                return 
tinyMCE.cancelEvent(e);
            }
        }

        return 
true;
    },

    
_setEditable : function(elmstate) {
        var 
editClass tinyMCE.getParam("noneditable_editable_class""mceEditable");
        var 
nonEditClass tinyMCE.getParam("noneditable_noneditable_class""mceNonEditable");

        var 
className elm.className elm.className "";

        if (
className.indexOf(editClass) != -|| className.indexOf(nonEditClass) != -1)
            return;

        if ((
className tinyMCE.getAttrib(elm"class")) != "")
            
className += " ";

        
className += state editClass nonEditClass;

        
elm.setAttribute("class"className);
        
elm.className className;
    }
};

tinyMCE.addPlugin("noneditable"TinyMCE_NonEditablePlugin);
?>
Онлайн: 0
Реклама