editor.js

来自「八星瓢虫留言本特点:采用PHP+Access数据库实现」· JavaScript 代码 · 共 1,100 行 · 第 1/3 页

JS
1,100
字号
/*
*######################################
* eWebEditor v3.80 - Advanced online web based WYSIWYG HTML editor.
* Copyright (c) 2003-2006 eWebSoft.com
*
* For further information go to http://www.ewebsoft.com/
* This copyright notice MUST stay intact for use.
*######################################
*/

var sCurrMode = null;
var bEditMode = null;
var oLinkField = null;

var BrowserInfo = new Object() ;
BrowserInfo.MajorVer = navigator.appVersion.match(/MSIE (.)/)[1] ;
BrowserInfo.MinorVer = navigator.appVersion.match(/MSIE .\.(.)/)[1] ;
BrowserInfo.IsIE55OrMore = BrowserInfo.MajorVer >= 6 || ( BrowserInfo.MajorVer >= 5 && BrowserInfo.MinorVer >= 5 ) ;
config.IsSP2 = (navigator.userAgent.indexOf("SV1") != -1);

window.onresize = initWidths;

var yToolbars = new Array();

var bInitialized = false;
function document.onreadystatechange(){
    if (document.readyState!="complete") return;
    if (bInitialized) return;
    bInitialized = true;

    initWidths();

    oLinkField = parent.document.getElementsByName(sLinkFieldName)[0];

    if (!BrowserInfo.IsIE55OrMore){
        config.InitMode = "TEXT";
    }
    
    if (ContentFlag.value=="0") { 
        ContentEdit.value = oLinkField.value;
        ContentLoad.value = oLinkField.value;
        ModeEdit.value = config.InitMode;
        ContentFlag.value = "1";
    }

    setMode(ModeEdit.value);
    setLinkedField() ;
}

function initWidths(){
    var i, curr;
    for (i=0; i<document.body.all.length;i++){
        curr=document.body.all[i];
        if (curr.className == "yToolbar"){
            InitTB(curr);
            yToolbars[yToolbars.length] = curr;
        }
    }
}

function InitBtn(btn) {
    btn.onmouseover = BtnMouseOver;
    btn.onmouseout = BtnMouseOut;
    btn.onmousedown = BtnMouseDown;
    btn.onmouseup = BtnMouseUp;
    btn.ondragstart = YCancelEvent;
    btn.onselectstart = YCancelEvent;
    btn.onselect = YCancelEvent;
    btn.YUSERONCLICK = btn.onclick;
    btn.onclick = YCancelEvent;
    btn.YINITIALIZED = true;
    return true;
}

function InitTB(y) {
    y.TBWidth = 0;
    if (! PopulateTB(y)) return false;
    y.style.posWidth = y.TBWidth;
    return true;
}

function YCancelEvent() {
    event.returnValue=false;
    event.cancelBubble=true;
    return false;
}

function BtnMouseOver() {
    if (event.srcElement.tagName != "IMG") return false;
    var image = event.srcElement;
    var element = image.parentElement;
    
    if (image.className == "Ico") element.className = "BtnMouseOverUp";
    else if (image.className == "IcoDown") element.className = "BtnMouseOverDown";

    event.cancelBubble = true;
}

function BtnMouseOut() {
    if (event.srcElement.tagName != "IMG") {
        event.cancelBubble = true;
        return false;
    }

    var image = event.srcElement;
    var element = image.parentElement;
    yRaisedElement = null;
    
    element.className = "Btn";
    image.className = "Ico";

    event.cancelBubble = true;
}

function BtnMouseDown() {
    if (event.srcElement.tagName != "IMG") {
        event.cancelBubble = true;
        event.returnValue=false;
        return false;
    }

    var image = event.srcElement;
    var element = image.parentElement;

    element.className = "BtnMouseOverDown";
    image.className = "IcoDown";

    event.cancelBubble = true;
    event.returnValue=false;
    return false;
}

function BtnMouseUp() {
    if (event.srcElement.tagName != "IMG") {
        event.cancelBubble = true;
        return false;
    }

    var image = event.srcElement;
    var element = image.parentElement;

    if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()");

    element.className = "BtnMouseOverUp";
    image.className = "Ico";

    event.cancelBubble = true;
    return false;
}

function PopulateTB(y) {
    var i, elements, element;

    elements = y.children;
    for (i=0; i<elements.length; i++) {
        element = elements[i];
        if (element.tagName == "SCRIPT" || element.tagName == "!") continue;
        
        switch (element.className) {
        case "Btn":
            if (element.YINITIALIZED == null) {
                if (! InitBtn(element)) {
                    alert("Problem initializing:" + element.id);
                    return false;
                }
            }
            
            element.style.posLeft = y.TBWidth;
            y.TBWidth += element.offsetWidth + 1;
            break;
            
        case "TBGen":
            element.style.posLeft = y.TBWidth;
            y.TBWidth += element.offsetWidth + 1;
            break;
            
        case "TBSep":
            element.style.posLeft = y.TBWidth + 2;
            y.TBWidth += 5;
            break;
            
        case "TBHandle":
            element.style.posLeft = 2;
            y.TBWidth += element.offsetWidth + 7;
            break;
            
        default:
            alert("Invalid class: " + element.className + " on Element: " + element.id + " <" + element.tagName + ">");
            return false;
        }
    }

    y.TBWidth += 1;
    return true;
}


function setLinkedField() {
    if (! oLinkField) return ;
    var oForm = oLinkField.form ;
    if (!oForm) return ;

    oForm.attachEvent("onsubmit", AttachSubmit) ;
    if (! oForm.submitEditor) oForm.submitEditor = new Array() ;
    oForm.submitEditor[oForm.submitEditor.length] = AttachSubmit ;
    if (! oForm.originalSubmit) {
        oForm.originalSubmit = oForm.submit ;
        oForm.submit = function() {
            if (this.submitEditor) {
                for (var i = 0 ; i < this.submitEditor.length ; i++) {
                    this.submitEditor[i]() ;
                }
            }
            this.originalSubmit() ;
        }
    }

    oForm.attachEvent("onreset", AttachReset) ;
    if (! oForm.resetEditor) oForm.resetEditor = new Array() ;
    oForm.resetEditor[oForm.resetEditor.length] = AttachReset ;
    if (! oForm.originalReset) {
        oForm.originalReset = oForm.reset ;
        oForm.reset = function() {
            if (this.resetEditor) {
                for (var i = 0 ; i < this.resetEditor.length ; i++) {
                    this.resetEditor[i]() ;
                }
            }
            this.originalReset() ;
        }
    }
}

function AttachSubmit() { 
    var oForm = oLinkField.form ;
    if (!oForm) return;
    
    var html = getHTML();
    ContentEdit.value = html;
    if (sCurrMode=="TEXT"){
        html = HTMLEncode(html);
    }
    splitTextField(oLinkField, html);
} 

function doSubmit(){
    var oForm = oLinkField.form ;
    if (!oForm) return ;
    oForm.submit();
}

function AttachReset() {
    if(bEditMode){
        eWebEditor.document.body.innerHTML = ContentLoad.value;
    }else{
        eWebEditor.document.body.innerText = ContentLoad.value;
    }
}

function onHelp(){
    showDialog('help.htm');
    return false;
}

function onPaste() {
    if (sCurrMode=="VIEW") return false;

    if (sCurrMode=="EDIT"){
        var sHTML = GetClipboardHTML() ;
        if ((config.AutoDetectPasteFromWord=="1") && BrowserInfo.IsIE55OrMore) {
            var re = /<\w[^>]* class="?MsoNormal"?/gi ;
            if ( re.test(sHTML)){
                if ( confirm( lang["MsgPasteWordConfirm"] ) ){
                    cleanAndPaste( sHTML ) ;
                    return false ;
                }
            }
        }
        return true;
    }else{
        eWebEditor.document.selection.createRange().pasteHTML(HTMLEncode( clipboardData.getData("Text"))) ;
        return false;
    }
    
}

function onKeyDown(event){
    var key = String.fromCharCode(event.keyCode).toUpperCase();

    // F2
    if (event.keyCode==113){
        showBorders();
        return false;
    }
    if (event.ctrlKey){
        // Ctrl+Enter
        if (event.keyCode==10){
            doSubmit();
            return false;
        }
        // Ctrl++
        if (key=="+"){
            sizeChange(300);
            return false;
        }
        // Ctrl+-
        if (key=="-"){
            sizeChange(-300);
            return false;
        }
        // Ctrl+1
        if (key=="1"){
            setMode("CODE");
            return false;
        }
        // Ctrl+2
        if (key=="2"){
            setMode("EDIT");
            return false;
        }
        // Ctrl+3
        if (key=="3"){
            setMode("TEXT");
            return false;
        }
        // Ctrl+4
        if (key=="4"){
            setMode("VIEW");
            return false;
        }
    }

    switch(sCurrMode){
    case "VIEW":
        return true;
        break;
    case "EDIT":
        if (event.ctrlKey){
            // Ctrl+D
            if (key == "D"){
                PasteWord();
                return false;
            }
            // Ctrl+R
            if (key == "R"){
                findReplace();
                return false;
            }
            // Ctrl+Z
            if (key == "Z"){
                goHistory(-1);
                return false;
            }
            // Ctrl+Y
            if (key == "Y"){
                goHistory(1);
                return false;
            }
        }
        if(!event.ctrlKey && event.keyCode != 90 && event.keyCode != 89) {
            if (event.keyCode == 32 || event.keyCode == 13){
                saveHistory()
            }
        }
        return true;
        break;
    default:

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?