📄 rte.js
字号:
// Copyright (C) 2000, Microsoft, Corp. All rights reserved.
// File: rte.js
// Author: Scott Isaacs
// Contents: RTE Management Code
// EDITOR PUBLIC (API)
var isIE4 = (navigator.appVersion.indexOf("MSIE 4")>0)
function setHTML(szHTML)
{
if (szHTML=="") szHTML = L_DEFAULTHTML_TEXT
if (g_state.bMode)
idEditbox.document.body.innerHTML = szHTML
else
idEditbox.document.body.innerText = szHTML
if (g_state.bLoaded)
setSelection(true)
}
function set(szHTML)
{
idEditbox.document.body.innerHTML = szHTML
}
function getHTML()
{
var szRet = (g_state.bMode ? _CUtil_TrimCR(_CUtil_CleanHTML()) : _CUtil_TrimCR(idEditbox.document.body.innerText))
return szRet
}
function getText() {
var szRet = ""
if (g_state.bMode)
szRet = idEditbox.document.body.innerText
else {
setMode(true)
szRet = idEditbox.document.body.innerText
setMode(false)
}
return szRet
}
function getBody()
{
var oRet = idEditbox.document.body
return oRet
}
function getWidth()
{
var nRet = document.body.offsetWidth
return nRet
}
function getHeight()
{
var nRet = document.body.offsetHeight
return nRet
}
function insertHTML(szHTML)
{
var sType
var sel = g_state.GetSelection()
sType = sel.type
if (g_state.bMode) {
if (sType=="Control")
sel.item(0).outerHTML = szHTML
else
sel.pasteHTML(szHTML)
}
else
sel.text = szHTML
g_state.selection = null
}
function setFocus() {
idEditbox.focus()
}
function appendHTML(szHTML) {
if (g_state.bMode)
idEditbox.document.body.insertAdjacentHTML("beforeEnd",szHTML)
else
idEditbox.document.body.insertAdjacentText("beforeEnd",szHTML)
}
function setBGColor(szValue)
{
g_state.bgColor = szValue
if (g_state.bMode)
idEditbox.document.body.bgColor = g_state.bgColor
}
function setSelection(bDir) {
var tr = idEditbox.document.body.createTextRange()
tr.collapse(bDir)
tr.select()
g_state.SaveSelection()
}
function getBGColor()
{
var szRet = g_state.bgColor
return szRet
}
function setDefaultStyle(szValue)
{
g_state.css = szValue
if (g_state.bMode)
idEditbox.document.body.style.cssText = g_state.css
}
function getDefaultStyle()
{
var oRet = g_state.css
return oRet
}
function setSkin(szSkin)
{
if (szSkin == null)
document.styleSheets.skin.cssText = g_state.defaultSkin
else
document.styleSheets.skin.cssText = szSkin
document.styleSheets.skin.disabled = false
}
function appendSkin(szSkin)
{
document.styleSheets.appendSkin.cssText = szSkin
}
function setPopupSkin(szSkin)
{
if (szSkin == null)
document.styleSheets.popupSkin.cssText = g_state.popupSkin
else
document.styleSheets.popupSkin.cssText = szSkin
_CPopup_Init()
}
function setToolbar(id,g_state)
{
var el = document.all[id]
if (el)
el.style.display = (g_state) ? "" : "none"
if (id=="tbmode") {
_setSize()
}
}
function setLinks(arLinks)
{
g_state.aLinks = arLinks
}
function setBindings(aBindings)
{
if ((aBindings) && (aBindings.length>0))
{
g_state.aBindings = aBindings
for (var iField = DBSelect.length-1; iField > 0; iField--)
DBSelect[iField] = null
for (var iField = 0; iField < g_state.aBindings.length; iField++)
DBSelect.add(new Option(g_state.aBindings[iField]))
tbDBSelect.style.display = "inline"
}
else
tbDBSelect.style.display = ""
}
function setMode(bMode)
{
if (bMode!=g_state.bMode) {
g_state.bMode = bMode
var objBody = idEditbox.document.body
if (!bMode&& !g_state.bMode)
{
_CPopup_Hide()
objBody.bgColor = objBody.style.cssText = ""
if (g_state.customButtons)
idStandardBar.style.display = "none"
else
idToolbar.style.display = "none"
objBody.innerText = idEditbox.document.body.innerHTML
objBody.className = "textMode"
}
if ((bMode) && (g_state.bMode))
{
setDefaultStyle(g_state.css)
setBGColor(g_state.bgColor)
objBody.className = idStandardBar.style.display = idToolbar.style.display = ""
objBody.innerHTML = idEditbox.document.body.innerText
}
_setSize()
cbMode.checked = !bMode
setSelection(true)
setFocus()
}
return bMode
}
function addButton(sID,sButton)
{
if (!sID)
tbButtons.insertAdjacentHTML("beforeEnd","<BR>")
else
tbButtons.insertAdjacentHTML("beforeEnd","<BUTTON TYPE=\"button\" ONCLICK=\"_userButtonClick(this)\" CLASS=\"userButton\" ID=\"" + sID + "\">" + sButton + "\</BUTTON> ")
g_state.customButtons = true
return tbButtons.all[sID]
}
// EDITOR PRIVATE
function _Format(szHow, szValue) {
var oSel = g_state.GetSelection()
var sType = oSel.type
var oTarget = (sType == "None" ? idEditbox.document : oSel)
var oBlock = (oSel.parentElement != null ? _CUtil_GetBlock(oSel.parentElement()) : oSel.item(0))
setFocus()
switch(szHow)
{
case "BackColor":
var el = null
if (oSel.parentElement != null) {
el = _CUtil_GetElement(oSel.parentElement(),"TD")
if (!el) el = _CUtil_GetElement(oSel.parentElement(),"TH")
if (!el) el = _CUtil_GetElement(oSel.parentElement(),"TR")
if (!el) el = _CUtil_GetElement(oSel.parentElement(),"TABLE")
}
else
el = _CUtil_GetElement(oSel.item(0),"TABLE")
if (el)
el.bgColor = szValue
else
setBGColor(szValue)
break;
case "Justify":
if (oBlock)
{
oBlock.style.textAlign = ""
if (((oBlock.tagName=="TABLE") || (oBlock.tagName=="IMG")) && (("left"==oBlock.align) && ("Left"==szValue))) {
oBlock.align = ""
break;
}
oBlock.align = szValue
if ((oBlock.tagName=="HR") || ((oBlock.tagName=="IMG") && szValue!="Center")) break;
}
szHow=szHow+szValue
szValue=""
// Fall through
default:
oTarget.execCommand(szHow, false, szValue)
break
}
g_state.RestoreSelection()
setFocus()
return true
}
function _fireFocus() {
if (self.parent.RTEFocus)
self.parent.RTEFocus(self)
}
function _initEditor() {
g_state = new _CState()
window.onresize = _setSize
var sz = ""
sz += ""
+ "<STYLE>"
+ ".DataBound{border:1 solid #999999;margin:1;font-family:Courier;background:#F1F1F1}\n"
+ ".textMode {border-top: 1px black solid;font: 10pt courier}\n.NOBORDER TD {border:1px gray solid}"
+ "BODY {border: 1px black solid;border-top: none;}"
+ "</STYLE>"
+ "<BODY bgcolor=#FFFFFF ONCONTEXTMENU=\"return false\">"
+ L_DEFAULTHTML_TEXT
+ "</BODY>"
_CPopup_Init()
idEditbox.document.designMode = "on"
idEditbox.document.open("text/html","replace")
idEditbox.document.write(sz)
idEditbox.document.close()
idEditbox.document.body.onblur = idEditbox.onblur = g_state.SaveSelection
idEditbox.document.onkeydown = _Editor_KeyDownHandler
idEditbox.document.onmousedown = _Editor_ClickHandler
idEditbox.document.ondblclick = _Editor_DblClickHandler
setTimeout("_pageReady()",0)
}
function _Editor_ClickHandler() {
g_state.selection = null
}
function _Editor_KeyDownHandler() {
var ev = this.parentWindow.event
if ((ev.keyCode==78 || ev.keyCode==72) && ev.ctrlKey) {
if (ev.keyCode==78)
window.open(parent.location)
ev.keyCode=0;ev.returnValue=false
}
if (ev.keyCode==9)
g_state.SaveSelection()
else
g_state.selection=null
}
function _Editor_DblClickHandler() {
// Shortcuts
var el = this.parentWindow.event.srcElement
if (el.tagName=="IMG") {
el.removeAttribute("width")
el.removeAttribute("height")
el.style.removeAttribute("width")
el.style.removeAttribute("height")
el.width = el.width
el.height = el.height
}
if (el.tagName=="TABLE")
_CPopup_Show('Table')
}
function _setSize() {
document.all.idEditbox.style.pixelHeight = document.body.clientHeight - idToolbar.offsetHeight - document.all.idMode.offsetHeight
document.all.idPopup.style.pixelLeft = (document.body.clientWidth - idPopup.document.all.puRegion.offsetWidth) / 2
}
function _pageReady()
{
idEditbox.document.body.oncontextmenu = new Function("return false");
// if (g_state.GetSharedSubDomain()!="")
// idPopup.document.domain = idEditbox.document.domain = document.domain = g_state.szSharedSubDomain;
// else {
// // BUGBUG -- ARRRGGHH! What is this?
// // Already in same domain - force suffix so my photos work
// if (0 != location.href.indexOf('msn://')) {
// g_state.szSearch = _CUtil_DomainSuffix(location.hostname)
// alert('search set to = '+g_state.szSearch);
// if (g_state.szSearch!="")
// idPopup.document.domain = idEditbox.document.domain = document.domain = parent.document.domain = g_state.szSearch
// }
// else // we're in the MSN domain
// if (parent.location == self.location) parent.location.href = 'compose.htm'
// }
if (self.parent.RTELoaded)
self.parent.RTELoaded(self)
if (document.styleSheets.skin.disabled)
setSkin(null)
_setSize()
idEditor.style.visibility=""
g_state.bLoaded = true
var tr = idEditbox.document.body.createTextRange()
tr.select()
g_state.SaveSelection()
setSelection(false)
}
function _userButtonClick(el)
{
if (parent.RTEButton) parent.RTEButton(self, el.id)
}
//lxh add
function UrlEnco(url)
{
url = url + "";
var m_url = url;
var outstring = "";
var x1 = 0;
for(x1 = 0 ; x1 < (m_url.length) ; x1++)
{
chr = m_url.substr(x1,1);
if(chr=='<')
{
outstring += "<";
continue;
}
if(chr=='>')
{
outstring += ">";
continue;
}
if(chr=='"')
{
outstring += "";
continue;
}
if(chr=='\'')
{
outstring += "";
continue;
}
outstring += chr;
}
return outstring;
}
function insertImg()
{
//var DoA = getElem("A",g_state.selection.createRange().parentElement())
var oSel = g_state.GetSelection()
var oBlock = (oSel.parentElement != null ? _CUtil_GetBlock(oSel.parentElement()) : oSel.item(0))
var languageName = document.forms["newsPro"].elements["editlanguage"].value;
var editImageNum = document.forms["newsPro"].elements["editImageNum"].value;
var editRemNum = document.forms["newsPro"].elements["editRemNum"].value;
var openurl = "uploadPic.asp?language="+languageName+"&editImageNum="+editImageNum+"&editRemNum="+editRemNum;
if (oBlock.tagName=="IMG")
{
openurl = openurl+"&actionType=mod&picName="+oBlock.src;
}
var htmlStr
var str = showModalDialog(openurl,window,"dialogLeft:"+(event.screenX-245)+";dialogTop:"+(event.screenY+5)+";dialogWidth:350px; dialogHeight:230px; edge:raised;help:off;status:off;scroll:off")
if ((str != null))
{
insertHTML(str);
}
}
//lxh
//工具栏的书写
function _drawToolbar()
{
var aIds = new Array("cut","copy","paste","bar1","undo","redo","bar2","formatblock","fontstyle","fontsize","bar3","bold","italic","underline","bar4","left","center","right","bar5","orderedlist","unorderedlist","outdent","indent","bar6","line","link","table","bar7","bgcolor","textcolor","bar7")
var aTips = new Array(L_TIPCUT_TEXT,L_TIPCOPY_TEXT,L_TIPPASTE_TEXT,"",L_TIP_UNDO,L_TIP_REDO,"",L_TIPP_TEXT,L_TIPFSTYLE_TEXT,L_TIPFSIZE_TEXT,"",L_TIPB_TEXT,L_TIPI_TEXT,L_TIPU_TEXT,"",L_TIPLJ_TEXT,L_TIPCJ_TEXT,L_TIPRJ_TEXT,"",L_TIPOL_TEXT,L_TIPUL_TEXT,L_TIPDINDENT_TEXT,L_TIPIINDENT_TEXT,"",L_TIPLINE_TEXT,L_TIPLINK_TEXT,L_TIPTABLE_TEXT,"",L_TIPBGCOLOR_TEXT,L_TIPFGCOLOR_TEXT,"")
//var aCommand = new Array("_Format('cut')","_Format('copy')","_Format('paste')",null,"_Format('undo')","_Format('redo')","_CPopup_Show('formatblock')","_CPopup_Show('font')","_CPopup_Show('fontsize')",null,"_Format('bold')","_Format('italic')","_Format('underline')",null,"_Format('Justify','Left')","_Format('Justify','Center')","_Format('Justify','Right')",null,"_Format('insertorderedlist')","_Format('insertunorderedlist')","_Format('outdent')","_Format('indent')",null,"_Format('InsertHorizontalRule')","_CPopup_Show('Link')","_CPopup_Show('Table')",null,"_CPopup_Show('BackColor')","_CPopup_Show('ForeColor')",null)
var aCommand = new Array("_Format('cut')","_Format('copy')","_Format('paste')",null,"_Format('undo')","_Format('redo')",null,"_CPopup_Show('formatblock')","_CPopup_Show('font')","_CPopup_Show('fontsize')",null,"_Format('bold')","_Format('italic')","_Format('underline')",null,"_Format('Justify','Left')","_Format('Justify','Center')","_Format('Justify','Right')",null,"_Format('insertorderedlist')","_Format('insertunorderedlist')","_Format('outdent')","_Format('indent')",null,"_Format('InsertHorizontalRule')","_CPopup_Show('Link')","_CPopup_Show('Table')",null,"_CPopup_Show('BackColor')","_CPopup_Show('ForeColor')",null)
var sz = "<DIV ID=idStandardBar><NOBR>", iLeft=0, iHeight=24
for (var i = 0 ; i < aSizes.length; i++)
{
sz += ""
+ "<SPAN CLASS=tbButton ONKEYPRESS=\"if (event.keyCode==13) {" + aCommand[i] + ";event.keyCode=0}\" "
+ "ID=\"tb" + aIds[i] + "\" "
+ "STYLE=\"width: " + aSizes[i] + ";height:" + iHeight
+ "\""
+ ">"
+ "<SPAN " + (aTips[i]=="" ? "" : "TABINDEX=" + (i+2))
+ " STYLE=\""
+ "position:absolute;"
+ "width:" + aSizes[i] + ";height:" + iHeight + ";"
+ "clip: rect(0 " + aSizes[i] + " " + iHeight + " 0)"
+ "\""
+ ">"
+ "<IMG ALT=\"" + aTips[i] + "\" "
+ "TITLE=\"" + aTips[i] + "\" "
+ "ONCLICK=\"" + aCommand[i] + "; event.cancelBubble=true\" "
+ "ONMOUSEDOWN=\"if (event.button==1) this.style.pixelTop=-" + (iHeight*2) + "\" "
+ "ONMOUSEOVER=\"this.style.pixelTop=-" + iHeight + "\" "
+ "ONMOUSEOUT=\"this.style.pixelTop=0\" "
+ "ONMOUSEUP=\"this.style.pixelTop=-" + iHeight + "\" "
+ "SRC=\"" + L_TOOLBARGIF_TEXT + "\" "
+ "STYLE=\"position:absolute;top:0;left:-" + iLeft + "\""
+ ">"
+ "</SPAN>"
+ "</SPAN>"
+ (aTips[i]=="" ? "</NOBR><NOBR>" : "")
iLeft += aSizes[i]
}
sz += ""
+ "</NOBR>"
+ "<SPAN CLASS=tbButton ID=\"tbDBSelect\"><NOBR> "
+ L_TBDATALABEL_TEXT + " <SELECT "
+ "ID=DBSelect "
+ "ONCLICK='event.cancelBubble=true;' "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -