📄 editor.js
字号:
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:
if (event.keyCode==13){
var sel = eWebEditor.document.selection.createRange();
sel.pasteHTML("<BR>");
event.cancelBubble = true;
event.returnValue = false;
sel.select();
sel.moveEnd("character", 1);
sel.moveStart("character", 1);
sel.collapse(false);
return false;
}
if (event.ctrlKey){
// Ctrl+B,I,U
if ((key == "B")||(key == "I")||(key == "U")){
return false;
}
}
}
}
function GetClipboardHTML() {
var oDiv = document.getElementById("eWebEditor_Temp_HTML")
oDiv.innerHTML = "";
var oTextRange = document.body.createTextRange();
oTextRange.moveToElementText(oDiv);
oTextRange.execCommand("Paste");
var sData = oDiv.innerHTML;
oDiv.innerHTML = "";
return sData;
}
function cleanAndPaste( html ) {
html = html.replace(/<\/?SPAN[^>]*>/gi, "" );
html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");
html = html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3");
html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
html = html.replace(/<\\?\?xml[^>]*>/gi, "");
html = html.replace(/<\/?\w+:[^>]*>/gi, "");
html = html.replace(/ /, " " );
insertHTML( html );
}
function insertHTML(html) {
if (isModeView()) return false;
eWebEditor.focus();
if (eWebEditor.document.selection.type.toLowerCase() != "none"){
eWebEditor.document.selection.clear();
}
if (sCurrMode!="EDIT"){
html=HTMLEncode(html);
}
eWebEditor.document.selection.createRange().pasteHTML(html);
}
function setHTML(html) {
ContentEdit.value = html;
switch (sCurrMode){
case "CODE":
eWebEditor.document.designMode="On";
eWebEditor.document.open();
eWebEditor.document.write(getStyleEditorHeader());
eWebEditor.document.body.innerText=html;
eWebEditor.document.body.contentEditable="true";
eWebEditor.document.close();
bEditMode=false;
break;
case "EDIT":
eWebEditor.document.designMode="On";
eWebEditor.document.open();
eWebEditor.document.write(getStyleEditorHeader()+html);
eWebEditor.document.body.contentEditable="true";
eWebEditor.document.execCommand("2D-Position",true,true);
eWebEditor.document.execCommand("MultipleSelection", true, true);
eWebEditor.document.execCommand("LiveResize", true, true);
eWebEditor.document.close();
doZoom(nCurrZoomSize);
bEditMode=true;
eWebEditor.document.onselectionchange = function () { doToolbar();}
break;
case "TEXT":
eWebEditor.document.designMode="On";
eWebEditor.document.open();
eWebEditor.document.write(getStyleEditorHeader());
eWebEditor.document.body.innerText=html;
eWebEditor.document.body.contentEditable="true";
eWebEditor.document.close();
bEditMode=false;
break;
case "VIEW":
eWebEditor.document.designMode="off";
eWebEditor.document.open();
eWebEditor.document.write(getStyleEditorHeader()+html);
eWebEditor.document.body.contentEditable="false";
eWebEditor.document.close();
bEditMode=false;
break;
}
eWebEditor.document.body.onpaste = onPaste;
eWebEditor.document.body.onhelp = onHelp;
eWebEditor.document.onkeydown = new Function("return onKeyDown(eWebEditor.event);");
eWebEditor.document.oncontextmenu=new Function("return showContextMenu(eWebEditor.event);");
if ((borderShown != "0")&&bEditMode) {
borderShown = "0";
showBorders();
}
initHistory();
}
function getHTML() {
var html;
if((sCurrMode=="EDIT")||(sCurrMode=="VIEW")){
html = eWebEditor.document.body.innerHTML;
}else{
html = eWebEditor.document.body.innerText;
}
if (sCurrMode!="TEXT"){
if ((html.toLowerCase()=="<p> </p>")||(html.toLowerCase()=="<p></p>")){
html = "";
}
}
return html;
}
function appendHTML(html) {
if (isModeView()) return false;
if(sCurrMode=="EDIT"){
eWebEditor.document.body.innerHTML += html;
}else{
eWebEditor.document.body.innerText += html;
}
}
function PasteWord(){
if (!validateMode()) return;
eWebEditor.focus();
if (BrowserInfo.IsIE55OrMore)
cleanAndPaste( GetClipboardHTML() );
else if ( confirm( lang["MsgNotCompatiblePaste"] ) )
format("paste");
eWebEditor.focus();
}
function PasteText(){
if (!validateMode()) return;
eWebEditor.focus();
var sText = HTMLEncode( clipboardData.getData("Text") );
insertHTML(sText);
eWebEditor.focus();
}
function validateMode() {
if (sCurrMode=="EDIT") return true;
alert(lang["MsgOnlyInEditMode"]);
eWebEditor.focus();
return false;
}
function isModeView(){
if (sCurrMode=="VIEW"){
alert(lang["MsgCanotSetInViewMode"]);
return true;
}
return false;
}
function format(what,opt) {
if (!validateMode()) return;
eWebEditor.focus();
if (opt=="RemoveFormat") {
what=opt;
opt=null;
}
if (opt==null) eWebEditor.document.execCommand(what);
else eWebEditor.document.execCommand(what,"",opt);
eWebEditor.focus();
}
function VerifyFocus() {
if ( eWebEditor )
eWebEditor.focus();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -