📄 ftb-freetextbox.js
字号:
case 1:
node = node.childNodes[pos];
node.parentNode.insertBefore(fragment, node);
range.setEnd(node, pos + fragment.length);
range.setStart(node, pos + fragment.length);
break;
}
selection.addRange(range);
}
}
/* ------------------------------------------------
START: Node and Selection Methods */
FTB_FreeTextBox.prototype.CheckTag = function(item,tagName) {
if (!item) return null;
if (item.tagName.search(tagName)!=-1) {
return item;
}
if (item.tagName=='BODY') {
return false;
}
item=item.parentElement;
return this.CheckTag(item,tagName);
}
FTB_FreeTextBox.prototype.GetParentElement = function() {
var sel = this.GetSelection();
var range = this.CreateRange(sel);
if (FTB_Browser.isIE) {
switch (sel.type) {
case "Text":
case "None":
return range.parentElement();
case "Control":
return range.item(0);
default:
return this.designEditor.document.body;
}
} else try {
var p = range.commonAncestorContainer;
if (!range.collapsed && range.startContainer == range.endContainer &&
range.startOffset - range.endOffset <= 1 && range.startContainer.hasChildNodes())
p = range.startContainer.childNodes[range.startOffset];
/*
alert(range.startContainer + ":" + range.startOffset + "\n" +
range.endContainer + ":" + range.endOffset);
*/
while (p.nodeType == 3) {
p = p.parentNode;
}
return p;
} catch (e) {
return null;
}
}
FTB_FreeTextBox.prototype.InsertNodeAtSelection = function(toBeInserted) {
if (!FTB_Browser.isIE) {
var sel = this.GetSelection();
var range = this.CreateRange(sel);
// remove the current selection
sel.removeAllRanges();
range.deleteContents();
var node = range.startContainer;
var pos = range.startOffset;
switch (node.nodeType) {
case 3: // Node.TEXT_NODE
// we have to split it at the caret position.
if (toBeInserted.nodeType == 3) {
// do optimized insertion
node.insertData(pos, toBeInserted.data);
range = this._createRange();
range.setEnd(node, pos + toBeInserted.length);
range.setStart(node, pos + toBeInserted.length);
sel.addRange(range);
} else {
node = node.splitText(pos);
var selnode = toBeInserted;
if (toBeInserted.nodeType == 11 /* Node.DOCUMENT_FRAGMENT_NODE */) {
selnode = selnode.firstChild;
}
node.parentNode.insertBefore(toBeInserted, node);
this.SelectNodeContents(selnode);
}
break;
case 1: // Node.ELEMENT_NODE
var selnode = toBeInserted;
if (toBeInserted.nodeType == 11 /* Node.DOCUMENT_FRAGMENT_NODE */) {
selnode = selnode.firstChild;
}
node.insertBefore(toBeInserted, node.childNodes[pos]);
this.SelectNodeContents(selnode);
break;
}
}
}
FTB_FreeTextBox.prototype.SelectNodeContents = function(node, pos) {
var range;
var collapsed = (typeof pos != "undefined");
if (isIE) {
range = this.designEditor.document.body.createTextRange();
range.moveToElementText(node);
(collapsed) && range.collapse(pos);
range.select();
} else {
var sel = this.GetSelection();
range = this.designEditor.document.createRange();
range.selectNodeContents(node);
(collapsed) && range.collapse(pos);
sel.removeAllRanges();
sel.addRange(range);
}
}
FTB_FreeTextBox.prototype.SelectNextNode = function(el) {
var node = el.nextSibling;
while (node && node.nodeType != 1) {
node = node.nextSibling;
}
if (!node) {
node = el.previousSibling;
while (node && node.nodeType != 1) {
node = node.previousSibling;
}
}
if (!node) {
node = el.parentNode;
}
this.SelectNodeContents(node);
}
FTB_FreeTextBox.prototype.GetSelection = function() {
if (FTB_Browser.isIE) {
return this.designEditor.document.selection;
} else {
return this.designEditor.getSelection();
}
}
FTB_FreeTextBox.prototype.CreateRange = function(sel) {
if (FTB_Browser.isIE) {
return sel.createRange();
} else {
if (typeof sel != "undefined") {
try {
return sel.getRangeAt(0);
} catch(e) {
return this.designEditor.document.createRange();
}
} else {
return this.designEditor.document.createRange();
}
}
}
FTB_FreeTextBox.prototype.SelectNodeContents = function(node, pos) {
var range;
var collapsed = (typeof pos != "undefined");
if (FTB_Browser.isIE) {
range = this.designEditor.document.body.createTextRange();
range.moveToElementText(node);
(collapsed) && range.collapse(pos);
range.select();
} else {
var sel = this.GetSelection();
range = this.designEditor.document.createRange();
range.selectNodeContents(node);
(collapsed) && range.collapse(pos);
sel.removeAllRanges();
sel.addRange(range);
}
}
FTB_FreeTextBox.prototype.GetNearest = function(tagName) {
var ancestors = this.GetAllAncestors();
var ret = null;
tagName = ("" + tagName).toLowerCase();
for (var i=0;i<ancestors.length;i++) {
var el = ancestors[i];
if (el) {
if (el.tagName.toLowerCase() == tagName) {
ret = el;
break;
}
}
}
return ret;
}
FTB_FreeTextBox.prototype.GetAllAncestors = function() {
var p = this.GetParentElement();
var a = [];
while (p && (p.nodeType == 1) && (p.tagName.toLowerCase() != 'body')) {
a.push(p);
p = p.parentNode;
}
a.push(this.designEditor.document.body);
return a;
}
FTB_FreeTextBox.prototype.GetStyle = function() {
var parent = this.GetParentElement();
return parent.className;
}
FTB_FreeTextBox.prototype.SetActiveTab = function(theTD) {
if (theTD) {
parentTR = theTD.parentElement;
parentTR = document.getElementById(this.id + "_TabRow");
selectedTab = 1;
totalButtons = parentTR.cells.length-1;
for (var i=1;i< totalButtons;i++) {
parentTR.cells[i].className = this.id + "_TabOffRight";
if (theTD == parentTR.cells[i]) { selectedTab = i; }
}
if (selectedTab==1) {
parentTR.cells[0].className = this.id + "_StartTabOn";
} else {
parentTR.cells[0].className = this.id + "_StartTabOff";
parentTR.cells[selectedTab-1].className = this.id + "_TabOffLeft";
}
theTD.className = this.id + "_TabOn";
}
}
FTB_FreeTextBox.prototype.Focus = function() {
if (this.mode == FTB_MODE_DESIGN) {
this.designEditor.focus();
this.UpdateToolbars();
} else if (this.mode == FTB_MODE_HTML) {
this.htmlEditor.focus();
}
this.hasFocus = true;
}
FTB_FreeTextBox.prototype.SetStyle = function(className) {
// retrieve parent element of the selection
var parent = this.GetParentElement();
var surround = true;
var isSpan = (parent && parent.tagName.toLowerCase() == "span");
/*
// remove class stuff??
if (isSpan && index == 0 && !/\S/.test(parent.style.cssText)) {
while (parent.firstChild) {
parent.parentNode.insertBefore(parent.firstChild, parent);
}
parent.parentNode.removeChild(parent);
this.UpdateToolbars();
return;
}
*/
// if we're already in a SPAN
if (isSpan) {
if (parent.childNodes.length == 1) {
parent.className = className;
surround = false;
this.UpdateToolbar();
return;
}
} else {
}
if (surround) {
this.SurroundHtml("<span class='" + className + "'>", "</span>");
}
}
FTB_FreeTextBox.prototype.GetHtml = function() {
if (this.mode == FTB_MODE_DESIGN)
this.CopyDesignToHtml();
return this.htmlEditor.value;
}
FTB_FreeTextBox.prototype.SetHtml = function(html) {
return this.htmlEditor.value = html;
this.GoToDesignMode();
}
/* START: Button Methods
-------------------------------- */
FTB_FreeTextBox.prototype.StoreHtml = function() {
if (this.mode == FTB_MODE_DESIGN)
this.CopyDesignToHtml();
return true;
}
FTB_FreeTextBox.prototype.DeleteContents = function() {
if (confirm('Do you want to delete all the HTML and text presently in the editor?')) {
this.designEditor.document.body.innerHTML = '';
this.htmlEditor.value='';
this.GoToDesignMode();
}
}
FTB_FreeTextBox.prototype.Cut = function() {
if (this.mode == FTB_MODE_DESIGN) {
try {
this.ExecuteCommand('cut');
} catch (e) {
alert('Your security settings to not allow you to use this command. Please visit http://www.mozilla.org/editor/midasdemo/securityprefs.html for more information.');
}
} else {
//alert("TODO");
}
}
FTB_FreeTextBox.prototype.Copy = function() {
if (this.mode == FTB_MODE_DESIGN) {
try {
this.ExecuteCommand('copy');
} catch (e) {
alert('Your security settings to not allow you to use this command. Please visit http://www.mozilla.org/editor/midasdemo/securityprefs.html for more information.');
}
} else {
//alert("TODO");
}
}
FTB_FreeTextBox.prototype.Paste = function() {
if (this.mode == FTB_MODE_DESIGN) this.CapturePaste();
}
FTB_FreeTextBox.prototype.SelectAll = function() {
if (this.mode == FTB_MODE_DESIGN) {
this.SelectNodeContents(this.designEditor.document.body);
}
}
FTB_FreeTextBox.prototype.Print = function() {
if (this.mode == FTB_MODE_DESIGN) {
if (FTB_Browser.isIE) {
this.ExecuteCommand('print');
} else {
this.designEditor.print();
}
} else {
printWindow = window.open('','','');
printWindow.document.open();
printWindow.document.write("<html><body><pre>" + this.HtmlEncode(this.htmlEditor.value) + "</code></body></html>");
printWindow.document.close();
printWindow.document.body.print();
printWindow.close();
}
}
FTB_FreeTextBox.prototype.CreateLink = function() {
if (FTB_Browser.isIE) {
this.ExecuteCommand('createlink','1',null);
} else {
var url = prompt('Enter a URL:', 'http://');
if ((url != null) && (url != '')) this.ExecuteCommand('createlink','1',url);
}
}
FTB_FreeTextBox.prototype.IeSpellCheck = function() {
if (!FTB_Browser.isIE) {
alert('IE Spell is not supported in Mozilla');
return;
}
try {
var tspell = new ActiveXObject('ieSpell.ieSpellExtension');
tspell.CheckAllLinkedDocuments(window.document);
} catch (err){
if (window.confirm('You need ieSpell to use spell check. Would you like to install it?')){
window.open('http://www.iespell.com/download.php');
};
}
}
FTB_FreeTextBox.prototype.NetSpell = function() {
if (typeof(checkSpellingById) == 'function') {
checkSpellingById(this.id + '_designEditor');
} else {
alert('Netspell libraries not properly linked.');
}
}
FTB_FreeTextBox.prototype.InsertImage = function() {
if (FTB_Browser.isIE) {
this.ExecuteCommand('insertimage','1',null);
} else {
var image = prompt('Enter an image location:', 'http://');
if ((image != null) && (image != '')) this.ExecuteCommand('insertimage','1',image);
}
}
FTB_FreeTextBox.prototype.SaveButton = function() {
this.StoreHtml();
dotNetName = this.id.split('_').join(':');
__doPostBack(dotNetName,'Save');
}
FTB_FreeTextBox.prototype.InsertImageFromGallery = function() {
url = this.imageGalleryUrl.replace(/\{0\}/g,this.imageGalleryPath);
url += "&ftb=" + this.id;
var gallery = window.open(url,'gallery','width=700,height=600,toolbars=0,resizable=1');
gallery.focus();
}
FTB_FreeTextBox.prototype.Preview = function() {
this.CopyDesignToHtml();
printWindow = window.open('','','toolbars=no');
printWindow.document.open();
printWindow.document.write("<html><head><link rel='stylesheet' href='" + this.designModeCss + "' type='text/css' />" + ((this.baseUrl != '') ? "<base href='" + this.baseUrl + "' />" : "") + "</head><body>" + this.htmlEditor.value + "</body></html>");
printWindow.document.close();
}
/* --------------------------------
END: Button Methods */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -