Sys.Extended.UI.HtmlEditor.MSIE_list = function(listTg) { var paragraphs = this.get_paragraphs(), pars = this.getSelectionAfterOperation(paragraphs), currentParent = null, collectedParagraphs = [], editor = this, commonList = null, commonListItems = [], listTag = listTg.toUpperCase(), needJoiner = false; function operateList() { if(commonList != null) { var newList; newList = commonList.cloneNode(false); commonList.parentNode.insertBefore(newList, commonList); while(commonList.firstChild != commonListItems[0]) newList.appendChild(commonList.firstChild); if(newList.firstChild == null) newList.parentNode.removeChild(newList); if(commonList.tagName.toUpperCase() == listTag) { for(var i = 0; i < commonListItems.length; i++) { var element = commonListItems[i]; if(element.nodeType == 1 && element.tagName && element.tagName.toUpperCase() == "LI") { var good = false; commonList.parentNode.insertBefore(element, commonList); if(element.style.textAlign == "") element.style.textAlign = commonList.style.textAlign; if(commonList.childNodes.length == 0 && i == commonListItems.length - 1) { commonList.parentNode.removeChild(commonList); commonList = null; } if(element.style.textAlign == "" || (element.style.textAlign.toLowerCase() == "left" && !editor.rtlState()) || (element.style.textAlign.toLowerCase() == "right" && editor.rtlState())) { good = editor.tryUnWrap(element, pars); if(good) needJoiner = true; } if(!good) { var newP = editor._doc.createElement(editor.dfltBlockElement), attrs = element.attributes; for(var ik = 0; ik < attrs.length; ++ik) { var a = attrs.item(ik); if(!a.specified) continue; if(a.name.toLowerCase() == "style") continue; newP.setAttribute(a.name, a.value); } newP.style.cssText = element.style.cssText; if(newP.tagName.toUpperCase() == "P") newP.style.margin = "0px"; while(element.firstChild) newP.appendChild(element.firstChild); element.parentNode.insertBefore(newP, element); element.parentNode.removeChild(element); } } else commonList.parentNode.insertBefore(element, commonList); } } else { var newList = editor._doc.createElement(listTag), attrs = commonList.attributes; for(var ik = 0; ik < attrs.length; ++ik) { var a = attrs.item(ik); if(!a.specified) continue; if(a.name.toLowerCase() == "style") continue; newList.setAttribute(a.name, a.value); } newList.style.cssText = commonList.style.cssText; commonList.parentNode.insertBefore(newList, commonList); for(var i = 0; i < commonListItems.length; i++) { var element = commonListItems[i]; newList.appendChild(element); } } if(commonList != null) { newList = commonList.cloneNode(false); commonList.parentNode.insertBefore(newList, commonList); while(commonList.firstChild) newList.appendChild(commonList.firstChild); if(newList.firstChild == null) newList.parentNode.removeChild(newList); commonList.parentNode.removeChild(commonList); } } commonList = null; commonListItems = []; } function operateCollectedParagraphs() { var firstChild = currentParent.firstChild, lastChild = currentParent.lastChild, parTagName = currentParent.tagName.toUpperCase(); if( // if all paragraps(only) are in one parent already !Sys.Extended.UI.HtmlEditor.isInlineElement(currentParent) && collectedParagraphs[0][0] == firstChild && collectedParagraphs[collectedParagraphs.length - 1][collectedParagraphs[collectedParagraphs.length - 1].length - 1] == lastChild && (parTagName == "OL" || parTagName == "UL" || parTagName == "DL" || parTagName == "LI" || ((parTagName == "P" || parTagName == "DIV" || Sys.Extended.UI.HtmlEditor.isHeader(currentParent)) && parTagName == "LI") ) ) { operateList(); commonListItems = []; if(parTagName == "LI") { commonList = currentParent.parentNode; commonListItems.push(currentParent); } else if(parTagName == "P" || parTagName == "DIV" || Sys.Extended.UI.HtmlEditor.isHeader(currentParent)) { commonList = currentParent.parentNode.parentNode; commonListItems.push(currentParent.parentNode); } else { commonList = currentParent; for(var i = 0; i < collectedParagraphs.length; i++) { var paragraph = collectedParagraphs[i]; for(var j = 0; j < paragraph.length; j++) commonListItems.push(paragraph[j]); } } operateList(); } else { if(parTagName == "LI" && (collectedParagraphs.length < paragraphs.length)) { if(commonList != currentParent.parentNode) { operateList(); commonList = currentParent.parentNode; commonListItems = []; } commonListItems.push(currentParent); } else if(parTagName == "OL" || parTagName == "UL" || parTagName == "DL") { operateList(); commonList = currentParent; commonListItems = []; for(var i = 0; i < collectedParagraphs.length; i++) { var paragraph = collectedParagraphs[i]; for(var j = 0; j < paragraph.length; j++) commonListItems.push(paragraph[j]); } operateList(); } else { var li = null, list = null; function completeLi() { if(li != null) if(li.childNodes == 1 && (li.firstChild == pars[0] || li.firstChild == pars[1])) { li.parentNode.insertBefore(li.firstChild, li); li.parentNode.removeChild(li); } li = null; } if(commonList != null) operateList(); var colTagName = ""; if(collectedParagraphs.length == 1 && collectedParagraphs[0].length == 1 && collectedParagraphs[0][0].nodeType == 1 && collectedParagraphs[0][0].tagName) colTagName = collectedParagraphs[0][0].tagName.toUpperCase(); if(colTagName == "OL" || colTagName == "UL" || colTagName == "DL") { var element = collectedParagraphs[0][0]; commonList = element; commonListItems = []; for(var i = 0; i < element.childNodes.length; i++) { var el = element.childNodes.item(i); commonListItems.push(el); } operateList(); } else { for(var i = 0; i < collectedParagraphs.length; i++) { var paragraph = collectedParagraphs[i]; for(var j = 0; j < paragraph.length; j++) { var element = paragraph[j], elTagName = (element.tagName) ? element.tagName.toUpperCase() : ""; if(list == null) { list = editor._doc.createElement(listTag); element.parentNode.insertBefore(list, element); } if(!Sys.Extended.UI.HtmlEditor.isInlineElement(element) && elTagName != "BR") { if(li && li.firstChild) completeLi(); if(li == null) { li = editor._doc.createElement("LI"); list.appendChild(li); } li.appendChild(element); completeLi(); } else { if(li == null) { li = editor._doc.createElement("LI"); list.appendChild(li); } var actualLength = (paragraph[paragraph.length - 1] == pars[1]) ? paragraph.length - 1 : paragraph.length, actualStart = (paragraph[0] == pars[0]) ? 1 : 0; if(elTagName == "BR" && j == actualLength - 1 && j == actualStart) { if(Sys.Extended.UI.HtmlEditor.isIE) { li.appendChild(editor._doc.createTextNode(String.fromCharCode(160))); element.parentNode.removeChild(element); } else li.appendChild(element); } else if(elTagName == "BR" && j == actualLength - 1 && j > actualStart) element.parentNode.removeChild(element); else li.appendChild(element); if(elTagName == "BR" && j == paragraph.length - 1) { completeLi(); li = null; } if(element == pars[1] && j == paragraph.length - 1) { completeLi(); li = null; } } } if(li && li.firstChild) completeLi(); } } if(list != null) { var aligns = []; for(var j = 0; j < list.childNodes.length; j++) aligns.push(list.childNodes.item(j).style.textAlign); var jj = 1; for(; jj < aligns.length; jj++) if(aligns[jj - 1] != aligns[jj]) break; if(jj == aligns.length) { var align = ((aligns[0] == "left" && !editor.rtlState()) || (aligns[0] == "right" && editor.rtlState())) ? "" : aligns[0]; for(var j = 0; j < list.childNodes.length; j++) list.childNodes.item(j).style.textAlign = ""; list.style.textAlign = align; } } if(list != null) if(list.parentNode.tagName.toUpperCase() == "P" && list.parentNode.childNodes.length == 1) { var pp = list.parentNode, clone = pp.cloneNode(false); pp.parentNode.insertBefore(list, pp); pp.parentNode.removeChild(pp); if(list.childNodes.length == 1) { var item = list.firstChild; while(item.firstChild) clone.appendChild(item.firstChild); item.appendChild(clone); } else delete clone; } } } } for(var i = 0; i < paragraphs.length; i++) { var paragraph = paragraphs[i]; if(paragraph.length > 0) { if(paragraph[0].parentNode != currentParent) { // start new collection of paragraps if(collectedParagraphs.length > 0) operateCollectedParagraphs(); collectedParagraphs = []; currentParent = paragraph[0].parentNode; } collectedParagraphs.push(paragraph); } } if(collectedParagraphs.length > 0) operateCollectedParagraphs(); if(commonList != null) operateList(); this.setSelectionAfterOperation(pars, needJoiner); }; Sys.Extended.UI.HtmlEditor.MSIE_justify = function(textAlign, addParameter, addParameter1) { var paragraphs = this.get_paragraphs(), pars = this.getSelectionAfterOperation(paragraphs), currentParent = null, collectedParagraphs = [], editor = this, force = (typeof addParameter != "undefined" && addParameter) ? true : false, remainP = (typeof addParameter1 == "string") ? true : false, pTag = (typeof addParameter1 == "string") ? addParameter1 : "", needJoiner = false; function completeDiv(div) { if(div != null) if(div.childNodes == 1 && (div.firstChild == pars[0] || div.firstChild == pars[1])) { div.parentNode.insertBefore(div.firstChild, div); div.parentNode.removeChild(div); } } function operateCollectedParagraphs() { var firstChild = currentParent.firstChild, lastChild = currentParent.lastChild, single = false, curTagName; if(currentParent.tagName && !Sys.Extended.UI.HtmlEditor.isInlineElement(currentParent) && collectedParagraphs[0][0] == firstChild && collectedParagraphs[collectedParagraphs.length - 1][collectedParagraphs[collectedParagraphs.length - 1].length - 1] == lastChild ) { curTagName = currentParent.tagName.toUpperCase(); if(curTagName != "TD" && curTagName != "TH" && curTagName != "FIELDSET" && curTagName != "LEGEND") single = true; } if(single) { // if all paragraps(them only) are in one parent already var align = ""; if(currentParent.getAttribute("align") && currentParent.getAttribute("align").length > 0) align = currentParent.getAttribute("align"); if(currentParent.align && currentParent.align.length > 0) align = currentParent.align; if(currentParent.style.textAlign && currentParent.style.textAlign.length > 0) align = currentParent.style.textAlign; currentParent.align = ""; currentParent.setAttribute("align", ""); currentParent.removeAttribute("align"); // can we remove parent element? if((curTagName == "DIV" || curTagName == "P" || Sys.Extended.UI.HtmlEditor.isHeader(currentParent)) && textAlign == "left" && force) { if(editor.tryUnWrap(currentParent, pars, force)) needJoiner = true; } else { if(textAlign != "remain") { if(!(textAlign == "left" && force) || (curTagName == "LI" && currentParent.parentNode.style.textAlign.length > 0)) currentParent.style.textAlign = textAlign; else currentParent.style.textAlign = ""; } if(force) currentParent.style.margin = (curTagName == "P") ? "0px" : ""; if(curTagName == "LI") { var list = currentParent.parentNode, aligns = []; for(var jn = 0; jn < list.childNodes.length; jn++) if(list.childNodes.item(jn).nodeType == 1) aligns.push(list.childNodes.item(jn).style.textAlign); var jj = 1; for(; jj < aligns.length; jj++) if(aligns[jj - 1] != aligns[jj]) break; if(jj == aligns.length) { var align = (aligns[0] == "left" && force) ? "" : aligns[0]; for(var j = 0; j < list.childNodes.length; j++) if(list.childNodes.item(j).nodeType == 1) { list.childNodes.item(j).style.textAlign = ""; if(force) list.childNodes.item(j).style.margin = (list.childNodes.item(j).tagName.toUpperCase() == "P") ? "0px" : ""; } list.style.textAlign = align; } } if((curTagName == "DIV" || curTagName == "P" || Sys.Extended.UI.HtmlEditor.isHeader(currentParent)) && remainP && pTag.toUpperCase() != curTagName) { var nEl = editor._doc.createElement(pTag), attrs = currentParent.attributes; for(var k = 0; k < attrs.length; ++k) { var a = attrs.item(k); if(!a.specified) continue; if(a.name.toLowerCase() == "style") continue; nEl.setAttribute(a.name, a.value); } nEl.style.cssText = currentParent.style.cssText; while(currentParent.firstChild) nEl.appendChild(currentParent.firstChild); currentParent.parentNode.insertBefore(nEl, currentParent); currentParent.parentNode.removeChild(currentParent); } } } else { var div = null; for(var i = 0; i < collectedParagraphs.length ; i++) { if(!remainP) div = null; var paragraph = collectedParagraphs[i]; for(var j = 0; j < paragraph.length; j++) { var element = paragraph[j], elementTagName = (element.nodeType == 1 && element.tagName) ? element.tagName.toUpperCase() : null; if(elementTagName != null && (elementTagName == "UL" || elementTagName == "OL" || elementTagName == "DL" || elementTagName == "DIV" || Sys.Extended.UI.HtmlEditor.isHeader(element) || elementTagName == "P" || elementTagName == "LI" || elementTagName == "TABLE" ) ) { completeDiv(div); div = null; if(textAlign != "remain") if(elementTagName != "TABLE" && !force) element.style.textAlign = textAlign; if(force) element.style.margin = (elementTagName == "P") ? "0px" : ""; if(elementTagName == "UL" || elementTagName == "OL" || elementTagName == "DL") { for(var jk = 0; jk < element.childNodes.length; jk++) { var li = element.childNodes.item(jk); if(li.nodeType == 1) { li.style.textAlign = ""; if(force) li.style.margin = (li.tagName.toUpperCase() == "P") ? "0px" : ""; for(var kk = 0; kk < li.childNodes.length; kk++) { var child = li.childNodes.item(kk); if(child.nodeType == 1 && child.tagName) { var childTagName = child.tagName.toUpperCase(); if(force) child.style.margin = (childTagName == "P") ? "0px" : ""; if(childTagName == "DIV" || childTagName == "P" || Sys.Extended.UI.HtmlEditor.isHeader(child)) if(editor.tryUnWrap(child, pars, force)) needJoiner = true; } } } } if(textAlign == "left" && force) element.style.textAlign = ""; continue; } else if(elementTagName == "LI") { if(textAlign != "remain") if(!(textAlign == "left" && force) || element.parentNode.style.textAlign.length > 0) element.style.textAlign = textAlign; else element.style.textAlign = ""; if(force) element.style.margin = (elementTagName == "P") ? "0px" : ""; var list = element.parentNode, aligns = []; for(var jn = 0; jn < list.childNodes.length; jn++) if(list.childNodes.item(jn).nodeType == 1) aligns.push(list.childNodes.item(jn).style.textAlign); var jj = 1; for(; jj < aligns.length; jj++) if(aligns[jj - 1] != aligns[jj]) break; if(jj == aligns.length) { var align = (aligns[0] == "left" && force) ? "" : aligns[0]; for(var j = 0; j < list.childNodes.length; j++) if(list.childNodes.item(j).nodeType == 1) { list.childNodes.item(j).style.textAlign = ""; if(force) list.childNodes.item(j).style.margin = (list.childNodes.item(j).tagName.toUpperCase() == "P") ? "0px" : ""; } list.style.textAlign = align; } continue; } else if(elementTagName == "TABLE") { if(textAlign != "remain") { if(!(textAlign == "left" && force)) element.align = textAlign; else { element.align = ""; element.removeAttribute("align"); } } } // can we remove DIV or P ? if((elementTagName == "DIV" || elementTagName == "P" || Sys.Extended.UI.HtmlEditor.isHeader(element)) && textAlign == "left" && force) if(editor.tryUnWrap(element, pars, force)) needJoiner = true; if((elementTagName == "DIV" || elementTagName == "P" || Sys.Extended.UI.HtmlEditor.isHeader(element)) && remainP && pTag.toUpperCase() != elementTagName) { var nEl = editor._doc.createElement(pTag); var attrs = element.attributes; for(var k = 0; k < attrs.length; ++k) { var a = attrs.item(k); if(!a.specified) continue; if(a.name.toLowerCase() == "style") continue; nEl.setAttribute(a.name, a.value); } nEl.style.cssText = element.style.cssText; while(element.firstChild) nEl.appendChild(element.firstChild); element.parentNode.insertBefore(nEl, element); element.parentNode.removeChild(element); } } else { if(!(textAlign == "left" && force) || remainP) { if(div == null) { div = editor._doc.createElement(remainP ? pTag : editor.dfltBlockElement); if(editor.dfltBlockElement.toUpperCase() == "P" && !remainP) div.style.margin = "0px"; if(!remainP) div.style.textAlign = textAlign; element.parentNode.insertBefore(div, element); } var actualLength = (paragraph[paragraph.length - 1] == pars[1]) ? paragraph.length - 1 : paragraph.length, actualStart = (paragraph[0] == pars[0]) ? 1 : 0; if(elementTagName == "BR" && j == actualLength - 1 && j == actualStart) { if(Sys.Extended.UI.HtmlEditor.isIE) { div.appendChild(editor._doc.createTextNode(String.fromCharCode(160))); element.parentNode.removeChild(element); } else div.appendChild(element); } else if(elementTagName == "BR" && j == actualLength - 1 && j > actualStart && (!remainP || (element.nextSibling != null && element.nextSibling == pars[1]))) element.parentNode.removeChild(element); else div.appendChild(element); if(elementTagName == "BR" && j == paragraph.length - 1 && !remainP) { completeDiv(div); div = null; } if(element == pars[1] && j == paragraph.length - 1) { completeDiv(div); div = null; } } } } } } } for(var i = 0; i < paragraphs.length; i++) { var paragraph = paragraphs[i]; if(paragraph.length > 0) { if(paragraph[0].parentNode != currentParent) { // start new collection of paragraps if(collectedParagraphs.length > 0) operateCollectedParagraphs(); collectedParagraphs = []; currentParent = paragraph[0].parentNode; } collectedParagraphs.push(paragraph); } } if(collectedParagraphs.length > 0) operateCollectedParagraphs(); this.setSelectionAfterOperation(pars, needJoiner); } Sys.Extended.UI.HtmlEditor.MSIE_indent = function(increase) { var paragraphs = this.get_paragraphs(), pars = this.getSelectionAfterOperation(paragraphs), currentParent = null, collectedParagraphs = [], editor = this, needJoiner = false; function getMargin(el) { if(el.nodeType == 1) { var cssEl = (!editor.rtlState()) ? el.style.marginLeft : el.style.marginRight; if(cssEl.length > 0) return parseInt(cssEl); } return 0; } function setMargin(el, value) { if(el.nodeType == 1) { if(el.tagName.toUpperCase() == "P" && value == "") value = "0px"; if(!editor.rtlState()) el.style.marginLeft = value; else el.style.marginRight = value; } } function changeMargin(el) { if(increase) setMargin(el, (getMargin(el) + 40) + "px"); else { if(el.tagName.toUpperCase() == "P") { if(getMargin(el) >= 40) setMargin(el, (getMargin(el) - 40) + "px"); else setMargin(el, "0px"); } else { if(getMargin(el) > 40) setMargin(el, (getMargin(el) - 40) + "px"); else setMargin(el, ""); } } } function completeDiv(div) { if(div != null) if(div.childNodes == 1 && (div.firstChild == pars[0] || div.firstChild == pars[1])) { div.parentNode.insertBefore(div.firstChild, div); div.parentNode.removeChild(div); } } function operateCollectedParagraphs() { var firstChild = currentParent.firstChild, lastChild = currentParent.lastChild; if( // if all paragraps(them only) are in one parent already currentParent.tagName && !Sys.Extended.UI.HtmlEditor.isInlineElement(currentParent) && collectedParagraphs[0][0] == firstChild && collectedParagraphs[collectedParagraphs.length - 1][collectedParagraphs[collectedParagraphs.length - 1].length - 1] == lastChild ) { var textAlign = ""; if(currentParent.getAttribute("align") && currentParent.getAttribute("align").length > 0) textAlign = currentParent.getAttribute("align"); if(currentParent.align && currentParent.align.length > 0) textAlign = currentParent.align; if(currentParent.style.textAlign && currentParent.style.textAlign.length > 0) textAlign = currentParent.style.textAlign; if((textAlign.toLowerCase() == "left" && !editor.rtlState()) || (textAlign.toLowerCase() == "right" && editor.rtlState())) textAlign = ""; currentParent.align = ""; currentParent.setAttribute("align", ""); currentParent.removeAttribute("align"); changeMargin(currentParent); var curTagName = currentParent.tagName.toUpperCase(); // can we remove parent element? if((curTagName == "DIV" || curTagName == "P" || Sys.Extended.UI.HtmlEditor.isHeader(currentParent)) && textAlign == "") { if(editor.tryUnWrap(currentParent, pars)) needJoiner = true; } else { if(textAlign != "" || (curTagName == "LI" && currentParent.parentNode.style.textAlign.length > 0)) currentParent.style.textAlign = textAlign; else currentParent.style.textAlign = ""; if(curTagName == "LI") { var list = currentParent.parentNode, margins = []; for(var jn = 0; jn < list.childNodes.length; jn++) margins.push(getMargin(list.childNodes.item(jn))); var jj = 1; for(; jj < margins.length; jj++) if(margins[jj - 1] != margins[jj]) break; if(jj == margins.length) { var margin = (margins[0] == 0) ? "" : (margins[0] + "px"); for(var j = 0; j < list.childNodes.length; j++) setMargin(list.childNodes.item(j), ""); setMargin(list, margin); } } } } else { for(var i = 0; i < collectedParagraphs.length ; i++) { var div = null, paragraph = collectedParagraphs[i]; for(var j = 0; j < paragraph.length; j++) { var element = paragraph[j], elementTagName = (element.nodeType == 1 && element.tagName) ? element.tagName.toUpperCase() : null; if(elementTagName != null && (elementTagName == "UL" || elementTagName == "OL" || elementTagName == "DL" || elementTagName == "DIV" || Sys.Extended.UI.HtmlEditor.isHeader(element) || elementTagName == "P" || elementTagName == "LI" ) ) { completeDiv(div); div = null; changeMargin(element) if(elementTagName == "UL" || elementTagName == "OL" || elementTagName == "DL") { for(var jk = 0; jk < element.childNodes.length; jk++) { var li = element.childNodes.item(jk); if(li.nodeType == 1) { setMargin(li, ""); for(var kk = 0; kk < li.childNodes.length; kk++) { var child = li.childNodes.item(kk); var textAlign = (child.nodeType == 1) ? element.style.textAlign : ""; if((textAlign.toLowerCase() == "left" && !editor.rtlState()) || (textAlign.toLowerCase() == "right" && editor.rtlState())) textAlign = ""; if(child.nodeType == 1) { setMargin(child, ""); if(textAlign == "" && child.tagName) { var childTagName = child.tagName.toUpperCase(); if(childTagName == "DIV" || childTagName == "P") if(editor.tryUnWrap(child, pars)) needJoiner = true; } } } } } continue; } else if(elementTagName == "LI") { var list = element.parentNode, margins = []; for(var jn = 0; jn < list.childNodes.length; jn++) margins.push(getMargin(list.childNodes.item(jn))); var jj = 1; for(; jj < margins.length; jj++) if(margins[jj - 1] != margins[jj]) break; if(jj == margins.length) { var margin = (margins[0] == 0) ? "" : (margins[0] + "px"); for(var j = 0; j < list.childNodes.length; j++) setMargin(list.childNodes.item(j), ""); setMargin(list, margin); } continue; } var textAlign = element.style.textAlign; if((textAlign.toLowerCase() == "left" && !editor.rtlState()) || (textAlign.toLowerCase() == "right" && editor.rtlState())) textAlign = ""; // can we remove DIV or P ? if((elementTagName == "DIV" || elementTagName == "P" || Sys.Extended.UI.HtmlEditor.isHeader(element)) && textAlign == "") { if(editor.tryUnWrap(element, pars)) needJoiner = true; } } else { if(increase) { if(div == null) { div = editor._doc.createElement(editor.dfltBlockElement); if(editor.dfltBlockElement.toUpperCase() == "P") div.style.margin = "0px"; changeMargin(div); element.parentNode.insertBefore(div, element); } var actualLength = (paragraph[paragraph.length - 1] == pars[1]) ? paragraph.length - 1 : paragraph.length, actualStart = (paragraph[0] == pars[0]) ? 1 : 0; if(elementTagName == "BR" && j == actualLength - 1 && j == actualStart) { if(Sys.Extended.UI.HtmlEditor.isIE) { div.appendChild(editor._doc.createTextNode(String.fromCharCode(160))); element.parentNode.removeChild(element); } else div.appendChild(element); } else if(elementTagName == "BR" && j == actualLength - 1 && j > actualStart) element.parentNode.removeChild(element); else div.appendChild(element); if(elementTagName == "BR" && j == paragraph.length - 1) { completeDiv(div); div = null; } if(element == pars[1] && j == paragraph.length - 1) { completeDiv(div); div = null; } } } } } } } for(var i = 0; i < paragraphs.length; i++) { var paragraph = paragraphs[i]; if(paragraph.length > 0) { if(paragraph[0].parentNode != currentParent) { if(collectedParagraphs.length > 0) operateCollectedParagraphs(); collectedParagraphs = []; currentParent = paragraph[0].parentNode; } collectedParagraphs.push(paragraph); } } if(collectedParagraphs.length > 0) operateCollectedParagraphs(); this.setSelectionAfterOperation(pars, needJoiner); }; Sys.Extended.UI.HtmlEditor.getSelectionAfterOperation = function(paragraphs) { if(paragraphs.length == 0) return []; var lPoint = this._doc.createElement("SPAN"), rPoint = this._doc.createElement("SPAN"), initFirst = paragraphs[0][0], initLast = paragraphs[paragraphs.length - 1][paragraphs[paragraphs.length - 1].length - 1]; if(initFirst == initLast && initLast.nodeType == 1 && initLast.childNodes.length == 0 && Sys.Extended.UI.HtmlEditor.canHaveChildren(initLast)) { initLast.appendChild(lPoint); initLast.appendChild(rPoint); } else { var firstest = Sys.Extended.UI.HtmlEditor._getReallyFirst(initFirst); firstest.parentNode.insertBefore(lPoint, firstest); if(firstest == initFirst) { var sv = []; sv.push(lPoint); for(var i = 0; i < paragraphs[0].length; i++) sv.push(paragraphs[0][i]); paragraphs[0] = sv; } var lastest = Sys.Extended.UI.HtmlEditor._getReallyLast(initLast); if(lastest.nextSibling) lastest.parentNode.insertBefore(rPoint, lastest.nextSibling); else lastest.parentNode.appendChild(rPoint); if(lastest == initLast) paragraphs[paragraphs.length - 1].push(rPoint) } return [lPoint, rPoint]; }; Sys.Extended.UI.HtmlEditor.setSelectionAfterOperation = function(pars, needJoiner) { if(pars.length == 0) return; var lPoint = pars[0], rPoint = pars[1]; var sel = this._getSelection(), text1 = null, text2 = null; if(Sys.Extended.UI.HtmlEditor.isIE) { sel.empty(); sel = this._getSelection(); var range1 = this._createRange(sel), range2 = this._createRange(sel); try { if(lPoint != null && rPoint != null && lPoint.nextSibling == rPoint) { text1 = this._doc.createTextNode(" "); rPoint.parentNode.insertBefore(text1, rPoint); } this._TcurrentFormat = null; if(lPoint != null) range1.moveToElementText(lPoint); if(rPoint != null) range2.moveToElementText(rPoint); if(lPoint != null && rPoint != null) { range1.setEndPoint("EndToStart", range2); range1.select(); if(text1 != null) { range1.collapse(false); range1.select(); text1.parentNode.removeChild(text1); } } else if(lPoint != null) range1.select(); else if(rPoint != null) range2.select(); } catch(ex) { } } else { try { var range, next = lPoint.nextSibling, prev = rPoint.previousSibling this._TcurrentFormat = null; if(next == prev && next.nodeType == 1 && next.tagName.toUpperCase() == "BR") { var ind = Sys.Extended.UI.HtmlEditor.__getIndex(next); range = this._doc.createRange(); range.setStart(next.parentNode, ind); range.setEnd(next.parentNode, ind); } else { text1 = this._doc.createTextNode(""); text2 = this._doc.createTextNode(""); lPoint.parentNode.insertBefore(text1, lPoint); rPoint.parentNode.insertBefore(text2, rPoint); range = this._doc.createRange(); range.setStart(text1, 0); range.setEnd(text2, 0); } this._removeAllRanges(sel); this._selectRange(sel, range); } catch(ex) { } } var fnd = Sys.Extended.UI.HtmlEditor._commonTotalParent((lPoint == null) ? rPoint : lPoint, (rPoint == null) ? lPoint : rPoint), parent = null; if(fnd != null) parent = fnd.parent; if(lPoint != null) lPoint.parentNode.removeChild(lPoint); if(rPoint != null) rPoint.parentNode.removeChild(rPoint); if(needJoiner && parent != null) { Sys.Extended.UI.HtmlEditor.spanJoiner(parent, this._doc); if(!Sys.Extended.UI.HtmlEditor.isIE && text1 != null && text2 != null) { var range = this._doc.createRange(); range.setStart(text1, 0); range.setEnd(text2, 0); this._removeAllRanges(sel); this._selectRange(sel, range); } } }; Sys.Extended.UI.HtmlEditor.get_paragraphs = function() { this._TcurrentFormat = null; var paragraphs = this.getPseudoP(); if(paragraphs.length == 0) { try { var str = "
"; this.insertHTML(str); var lPoint = this._doc.getElementById(Sys.Extended.UI.HtmlEditor.smartClassName + "_ll"), rPoint = this._doc.getElementById(Sys.Extended.UI.HtmlEditor.smartClassName + "_rr"); var sv = this._TcurrentFormat; this._TcurrentFormat = null; this.setSelectionAfterOperation([lPoint, rPoint], false); this._TcurrentFormat = sv; paragraphs = this.getPseudoP(); } catch(ex) { } } return paragraphs; }; Sys.Extended.UI.HtmlEditor.getPseudoP = function() { var result = []; try { var sel = this._getSelection(), range = this._createRange(sel); // ids for bound markers var rn = Sys.Extended.UI.HtmlEditor.smartClassName + "_right", ln = Sys.Extended.UI.HtmlEditor.smartClassName + "_left"; // bound ranges var r_left = null, r_right = null; // get bound ranges if(Sys.Extended.UI.HtmlEditor.isIE) { if(sel.type.toLowerCase() != "control") { r_left = range.duplicate(); r_right = range.duplicate(); r_left.setEndPoint("EndToStart", range); r_right.setEndPoint("StartToEnd", range); } } else { r_left = range.cloneRange(); r_right = range.cloneRange(); r_left.setEnd(r_left.startContainer, r_left.startOffset); r_right.setStart(r_right.endContainer, r_right.endOffset); } var lPoint = null, rPoint = null; // insert markers if(Sys.Extended.UI.HtmlEditor.isIE && sel.type.toLowerCase() == "control") { var control = range.item(0), cspan; cspan = this._doc.createElement("SPAN"); cspan.id = ln; control.parentNode.insertBefore(cspan, control); cspan = this._doc.createElement("SPAN"); cspan.id = rn; if(control.nextSibling == null) control.parentNode.appendChild(cspan); else control.parentNode.insertBefore(cspan, control.nextSibling); } else { if(!this.insertHTML("", r_right)) return []; if(!this.insertHTML("", r_left)) { var rP = this._doc.getElementById(rn); if(rP != null) { temp = rP.parentNode; temp.removeChild(rP); } return []; } } // get markers lPoint = this._doc.getElementById(ln); rPoint = this._doc.getElementById(rn); if(lPoint != null && rPoint != null) while(lPoint.nextSibling == null) if(lPoint.parentNode.nextSibling) lPoint.parentNode.parentNode.insertBefore(lPoint, lPoint.parentNode.nextSibling); else lPoint.parentNode.parentNode.appendChild(lPoint); if(lPoint != null && rPoint != null) { while(rPoint.previousSibling == null) rPoint.parentNode.parentNode.insertBefore(rPoint, rPoint.parentNode); if(rPoint.previousSibling.nodeType == 1) { var tagName = rPoint.previousSibling.tagName.toUpperCase(); if(tagName != "BR" && tagName != "IMG") { var last = Sys.Extended.UI.HtmlEditor._getReallyLast(rPoint.previousSibling); if(last.nodeType == 1 && Sys.Extended.UI.HtmlEditor.canHaveChildren(last)) last.appendChild(rPoint); else last.parentNode.appendChild(rPoint); } } if(rPoint.previousSibling && rPoint.previousSibling.nodeType == 1 && rPoint.previousSibling.tagName.toUpperCase() == "BR") rPoint.parentNode.insertBefore(rPoint, rPoint.previousSibling); } if(lPoint == null) { var span = this._doc.createElement("SPAN"); span.id = ln; rPoint.parentNode.insertBefore(span, rPoint); lPoint = span; } if(rPoint == null) { var span = this._doc.createElement("SPAN"); span.id = rn; if(lPoint.nextSibling) lPoint.parentNode.insertBefore(span, lPoint.nextSibling); else lPoint.parentNode.appendChild(span); rPoint = span; } if(lPoint != null && rPoint != null) if(lPoint.parentNode == rPoint) { rPoint.parentNode.insertBefore(lPoint, rPoint); } else if(rPoint.parentNode == lPoint) { if(lPoint.nextSibling != null) lPoint.parentNode.insertBefore(rPoint, lPoint.nextSibling); else lPoint.parentNode.appendChild(rPoint); } while(lPoint.nextSibling != null && lPoint.nextSibling.nodeType == 3 && ("" + lPoint.nextSibling.data + "").length == 0) lPoint.parentNode.removeChild(lPoint.nextSibling); if(this._TcurrentFormat == null && lPoint != null && rPoint != null && lPoint.nextSibling == rPoint) { var par = rPoint.parentNode; this._TcurrentFormat = null; while(par && par.tagName.toUpperCase() != "BODY" && Sys.Extended.UI.HtmlEditor.isStyleTag(par.tagName)) { if(par.tagName.toUpperCase() != "A") { var temp = par.cloneNode(false); if(this._TcurrentFormat == null) { this._TcurrentFormat = temp; } else { temp.appendChild(this._TcurrentFormat); this._TcurrentFormat = temp; } } par = par.parentNode; } if(this._TcurrentFormat) { var sspan = this._doc.createElement("span"); sspan.appendChild(this._TcurrentFormat); this._TcurrentFormat = sspan.innerHTML; } } // try to move markers to pseudo paragraphs bounds var telem = lPoint; while(telem && telem.tagName && Sys.Extended.UI.HtmlEditor.isStyleTag(telem.tagName) && (telem.tagName.toUpperCase() != "A")) telem = telem.parentNode; if(telem != null && telem.tagName.toUpperCase() == "P") { if(telem.firstChild != null) telem.insertBefore(lPoint, telem.firstChild); else telem.appendChild(lPoint); } else Sys.Extended.UI.HtmlEditor.positionInParagraph(lPoint, lPoint.previousSibling, true, lPoint.parentNode); telem = rPoint; while(telem && telem.tagName && Sys.Extended.UI.HtmlEditor.isStyleTag(telem.tagName) && (telem.tagName.toUpperCase() != "A")) telem = telem.parentNode; if(telem != null && telem.tagName.toUpperCase() == "P") { telem.appendChild(rPoint); } else Sys.Extended.UI.HtmlEditor.positionInParagraph(rPoint, rPoint.nextSibling, false, rPoint.parentNode); result = this.getPseudoP_Recur(lPoint, rPoint, 0); var lpTagName = lPoint.parentNode.tagName.toUpperCase(); if(result.length == 0 && lPoint.previousSibling == null && rPoint.nextSibling == null && lPoint.nextSibling == rPoint && (lpTagName == "P" || llpTagName == "DIV" || lpTagName == "LI") ) result = [[lPoint.parentNode]]; // set selection if(Sys.Extended.UI.HtmlEditor.isIE) { sel.empty(); sel = this._getSelection(); var range1 = this._createRange(sel), range2 = this._createRange(sel); try { if(lPoint != null) range1.moveToElementText(lPoint); if(rPoint != null) range2.moveToElementText(rPoint); if(lPoint != null && rPoint != null) { range1.setEndPoint("EndToEnd", range2); range1.select(); } else if(lPoint != null) range1.select(); else if(rPoint != null) range2.select(); } catch(e) { } } // remobe bound markers if(lPoint != null) lPoint.parentNode.removeChild(lPoint); if(rPoint != null) rPoint.parentNode.removeChild(rPoint); } catch(e) { var spans = this._doc.getElementsByTagName("SPAN"), del = []; for(var i = 0; i < spans.length; i++) { var span = spans[i]; if(span.id && span.id.length > 0) { var reg = new RegExp(Sys.Extended.UI.HtmlEditor.smartClassName, "ig"); if(reg.test(span.id)) del.push(span); } } for(var i = 0; i < del.length; i++) del[i].parentNode.removeChild(del[i]); } return result; }; Sys.Extended.UI.HtmlEditor.getPseudoP_Recur = function(lPoint, rPoint, r_level) { var result = []; // bound elements var lBound = lPoint, rBound = (rPoint.nextSibling != null && rPoint.nextSibling.tagName && rPoint.nextSibling.tagName.toUpperCase() == "BR") ? rPoint.nextSibling : rPoint; // find coomon parent of the bound elements var fnd = null; if(lBound == null || rBound == null) { if(lBound != null) fnd = Sys.Extended.UI.HtmlEditor._commonTotalParent(lBound, lBound); if(rBound != null) fnd = Sys.Extended.UI.HtmlEditor._commonTotalParent(rBound, rBound); } else fnd = Sys.Extended.UI.HtmlEditor._commonTotalParent(lBound, rBound); if(fnd != null) { // common parent found //where are the bound elements? lBound = Sys.Extended.UI.HtmlEditor.getContainer(fnd.parent.childNodes.item(fnd.indexFirst), lBound); rBound = Sys.Extended.UI.HtmlEditor.getContainer(fnd.parent.childNodes.item(fnd.indexLast), rBound); // move them up Sys.Extended.UI.HtmlEditor.unStyle(lBound); Sys.Extended.UI.HtmlEditor.unStyle(rBound); while(lBound.parentNode != fnd.parent) lBound = lBound.parentNode; while(rBound.parentNode != fnd.parent) rBound = rBound.parentNode; // move up all non inline elements (
,
, ...) Sys.Extended.UI.HtmlEditor._moveTagsUp(lBound.nextSibling, rBound); fnd = null; // optimize spans if(lPoint == null || rPoint == null) { if(lPoint != null) fnd = Sys.Extended.UI.HtmlEditor._commonTotalParent(lPoint, lPoint); if(rPoint != null) fnd = Sys.Extended.UI.HtmlEditor._commonTotalParent(rPoint, rPoint); } else fnd = Sys.Extended.UI.HtmlEditor._commonTotalParent(lPoint, rPoint); if(fnd != null) Sys.Extended.UI.HtmlEditor.spanJoiner(fnd.parent, this._doc, fnd.indexFirst, fnd.indexLast + 1, true); // prepare output array function _dive1(next) { if(!Sys.Extended.UI.HtmlEditor.isInlineElement(next)) { return true; } else if(next.tagName && Sys.Extended.UI.HtmlEditor.isStyleTag(next.tagName) && (next.tagName.toUpperCase() != "A") && !Sys.Extended.UI.HtmlEditor.isTempElement(next)) { var nnn = next.firstChild; while(nnn != null) { nnnNext = nnn.nextSibling; var temp = _dive1(nnn); if(temp) return true; nnn = nnnNext; } } return false; } var arrIndex = 0, subArr = [], subIndex = 0; if(lBound.tagName && rBound.tagName) { var lBoundTagName = lBound.tagName.toUpperCase(), rBoundTagName = rBound.tagName.toUpperCase(); if((lBoundTagName == "TD" || lBoundTagName == "TR") && (rBoundTagName == "TD" || rBoundTagName == "TR") ) { while(lBound.tagName.toUpperCase() != "TABLE") lBound = lBound.parentNode; rBound = lBound; } else { if((lBoundTagName == "DD" || lBoundTagName == "DT") && (rBoundTagName == "DD" || rBoundTagName == "DT") ) { while(lBound.tagName && lBound.tagName.toUpperCase() != "DL") lBound = lBound.parentNode; rBound = lBound; } else { if((lBoundTagName == "LI") && (rBoundTagName == "LI")) { while(lBoundTagName != "UL" && lBoundTagName != "OL") { lBound = lBound.parentNode; lBoundTagName = (lBound.tagName) ? lBound.tagName.toUpperCase() : null; } rBound = lBound; } } } } var fromPoint = lPoint ? lPoint : rPoint, toPoint = rPoint ? rPoint : lPoint, next = lBound; while(true) { if(!Sys.Extended.UI.HtmlEditor.isTempElement(next)) { var isBlock = _dive1(next); if(!isBlock) { if(next.nodeType && next.nodeType == 3) { var str = "" + next.data + ""; if(str.length == 0 || /^[\n\r]+$/.test(str)) { var tempNext = next.nextSibling; next.parentNode.removeChild(next); if(next == rBound) break; next = tempNext; continue; } } subArr[subIndex] = next; subIndex++; } else { if(next.tagName && next.tagName.toUpperCase() == "BR") { subArr[subIndex] = next; result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } else if((next == rBound || next == lBound) && !((next == rBound && next == lBound) ? (Sys.Extended.UI.HtmlEditor._reallyFirst(next, fromPoint) && Sys.Extended.UI.HtmlEditor._reallyLast(next, toPoint)) : (Sys.Extended.UI.HtmlEditor._reallyFirst(next, fromPoint) || Sys.Extended.UI.HtmlEditor._reallyLast(next, toPoint)) ) ) { var nextTagName = (next.tagName) ? (next.tagName.toUpperCase()) : null; if(nextTagName == "TABLE" || nextTagName == "TBODY") { var table = next; while(table.tagName.toUpperCase() != "TABLE") table = table.parentNode; var fromCellIndex = 0, fromRowIndex = 0, toCellIndex = table.rows.item(table.rows.length - 1).cells.length - 1, toRowIndex = table.rows.length - 1; // find cells with start/end of selection in the Table for(var i = 0; i < table.rows.length; i++) { var row = table.rows.item(i), j = 0; for(; j < row.cells.length; j++) { var cell = row.cells.item(j); if(Sys.Extended.UI.HtmlEditor._lookChild(cell, fromPoint) >= 0) { fromCellIndex = j; fromRowIndex = i; } if(Sys.Extended.UI.HtmlEditor._lookChild(cell, toPoint) >= 0) { toCellIndex = j; toRowIndex = i; } } } // collect pseudo paragraps for(var i = fromRowIndex; i <= toRowIndex; i++) for(var j = ((i == fromRowIndex) ? fromCellIndex : 0) ; j <= ((i == toRowIndex) ? toCellIndex : (table.rows.item(i).cells.length - 1)) ; j++) { var cell = table.rows.item(i).cells.item(j); if(subIndex > 0) { result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } var is_lPoint = (Sys.Extended.UI.HtmlEditor._lookChild(cell, fromPoint) >= 0), is_rPoint = (Sys.Extended.UI.HtmlEditor._lookChild(cell, toPoint) >= 0); if(is_lPoint || is_rPoint) { // need recursion var r_lPoint = fromPoint, r_rPoint = toPoint, rn = Sys.Extended.UI.HtmlEditor.smartClassName + "_right_" + r_level, ln = Sys.Extended.UI.HtmlEditor.smartClassName + "_left_" + r_level; if(is_lPoint) { r_rPoint = this._doc.createElement("span"); r_rPoint.id = rn; cell.appendChild(r_rPoint); } if(is_rPoint) { r_lPoint = this._doc.createElement("span"); r_lPoint.id = ln; if(cell.firstChild) cell.insertBefore(r_lPoint, cell.firstChild); else cell.appendChild(r_lPoint); } var r_result = this.getPseudoP_Recur(r_lPoint, r_rPoint, r_level + 1); for(var cnt = 0; cnt < r_result.length; cnt++) { result[arrIndex] = r_result[cnt]; arrIndex++; } if(r_lPoint != fromPoint) r_lPoint.parentNode.removeChild(r_lPoint); if(r_rPoint != toPoint) r_rPoint.parentNode.removeChild(r_rPoint); } else { var fromEl = 0, toEl = cell.childNodes.length; for(var k = fromEl; k < toEl; k++) { var el = cell.childNodes.item(k); if(!Sys.Extended.UI.HtmlEditor.isTempElement(el)) { subArr[subIndex] = el; subIndex++; } } if(subArr.length > 0) { result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } } } } else if(nextTagName == "UL" || nextTagName == "OL" || nextTagName == "DL") { var list = next, fromIndex = 0, toIndex = list.childNodes.length - 1; // find itemss with start/end of selection in the list for(var i = 0; i < list.childNodes.length; i++) { var point = list.childNodes.item(i); if(point.nodeType == 1) { if(point == fromPoint || Sys.Extended.UI.HtmlEditor._lookChild(point, fromPoint) >= 0) fromIndex = i; if(point == toPoint || Sys.Extended.UI.HtmlEditor._lookChild(point, toPoint) >= 0) toIndex = i; } } // collect pseudo paragraps for(var i = fromIndex; i <= toIndex; i++) { var point = list.childNodes.item(i); if(subIndex > 0) { result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } var is_lPoint = (Sys.Extended.UI.HtmlEditor._lookChild(point, fromPoint) >= 0), is_rPoint = (Sys.Extended.UI.HtmlEditor._lookChild(point, toPoint) >= 0); if(is_lPoint || is_rPoint) { // need recursion var r_lPoint = fromPoint, r_rPoint = toPoint, rn = Sys.Extended.UI.HtmlEditor.smartClassName + "_right_" + r_level, ln = Sys.Extended.UI.HtmlEditor.smartClassName + "_left_" + r_level; if(is_lPoint) { r_rPoint = this._doc.createElement("span"); r_rPoint.id = rn; point.appendChild(r_rPoint); } if(is_rPoint) { r_lPoint = this._doc.createElement("span"); r_lPoint.id = ln; if(point.firstChild) point.insertBefore(r_lPoint, point.firstChild); else point.appendChild(r_lPoint); } var r_result = this.getPseudoP_Recur(r_lPoint, r_rPoint, r_level + 1); for(var cnt = 0; cnt < r_result.length; cnt++) { result[arrIndex] = r_result[cnt]; arrIndex++; } if(r_lPoint != fromPoint) r_lPoint.parentNode.removeChild(r_lPoint); if(r_rPoint != toPoint) r_rPoint.parentNode.removeChild(r_rPoint); } else { var fromEl = 0, toEl = point.childNodes.length; for(var k = fromEl; k < toEl; k++) { var el = point.childNodes.item(k); if(!Sys.Extended.UI.HtmlEditor.isTempElement(el)) { subArr[subIndex] = el; subIndex++; } } if(subArr.length > 0) { result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } } } } else { var is_lPoint = (Sys.Extended.UI.HtmlEditor._lookChild(next, fromPoint) >= 0), is_rPoint = (Sys.Extended.UI.HtmlEditor._lookChild(next, toPoint) >= 0); if(subIndex > 0) { result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } if(is_lPoint || is_rPoint) { // need recursion var r_lPoint = fromPoint, r_rPoint = toPoint, rn = Sys.Extended.UI.HtmlEditor.smartClassName + "_right_" + r_level, ln = Sys.Extended.UI.HtmlEditor.smartClassName + "_left_" + r_level; if(is_lPoint) { r_rPoint = this._doc.createElement("span"); r_rPoint.id = rn; next.appendChild(r_rPoint); } if(is_rPoint) { r_lPoint = this._doc.createElement("span"); r_lPoint.id = ln; if(next.firstChild) next.insertBefore(r_lPoint, next.firstChild); else next.appendChild(r_lPoint); } var r_result = this.getPseudoP_Recur(r_lPoint, r_rPoint, r_level + 1); for(var cnt = 0; cnt < r_result.length; cnt++) { result[arrIndex] = r_result[cnt]; arrIndex++; } if(r_lPoint != fromPoint) r_lPoint.parentNode.removeChild(r_lPoint); if(r_rPoint != toPoint) r_rPoint.parentNode.removeChild(r_rPoint); } else { var fromEl = 0, toEl = next.childNodes.length; for(var k = fromEl; k < toEl; k++) { var el = next.childNodes.item(k); if(!Sys.Extended.UI.HtmlEditor.isTempElement(el)) { subArr[subIndex] = el; subIndex++; } } if(subArr.length > 0) { result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } } } } else { if(subIndex > 0) { result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } subArr[subIndex] = next; result[arrIndex] = subArr; arrIndex++; subArr = []; subIndex = 0; } } } if(next == rBound) break; next = next.nextSibling; } if(subIndex > 0) result[arrIndex] = subArr; } return result; }; Sys.Extended.UI.HtmlEditor.unWrap = function(element, pars) { var editor = this; if(element.firstChild) { while(element.firstChild && element.firstChild.nodeType == 3 && ("" + element.firstChild.data + "") == "") element.removeChild(element.firstChild); var inner = []; while(element.firstChild) { if(element.firstChild != pars[0] && element.firstChild != pars[1]) inner.push(element.firstChild); element.parentNode.insertBefore(element.firstChild, element); } if(inner.length == 0) { var br = editor._doc.createElement("BR"); element.parentNode.insertBefore(br, element); } if(Sys.Extended.UI.HtmlEditor.isIE && inner.length == 1 && inner[0].nodeType == 3) { var str = "" + inner[0].data + ""; if(str.length == 1 && str.charCodeAt(0) == 160) { var br = editor._doc.createElement("BR"); inner[0].parentNode.insertBefore(br, inner[0]); inner[0].parentNode.removeChild(inner[0]); } } while(element.nextSibling && element.nextSibling.nodeType == 3 && ("" + element.nextSibling.data + "") == "") element.parentNode.removeChild(element.nextSibling); var previousSibling = (element.previousSibling && pars[1] == element.previousSibling) ? pars[1].previousSibling : element.previousSibling; if(previousSibling && Sys.Extended.UI.HtmlEditor.isInlineElement(previousSibling)) if(previousSibling.nodeType == 1 && previousSibling.childNodes.length > 0) previousSibling = Sys.Extended.UI.HtmlEditor._getReallyLast(previousSibling); if(Sys.Extended.UI.HtmlEditor.isInlineElement(previousSibling) && element.nextSibling != null) { var br = editor._doc.createElement("BR"); element.parentNode.insertBefore(br, element); } } else { var br = editor._doc.createElement("BR"); element.parentNode.insertBefore(br, element); } element.parentNode.removeChild(element); }; Sys.Extended.UI.HtmlEditor.tryUnWrap = function(element, pars, force) { var editor = this; element.style.textAlign = ""; var attrsNumber = 0, attrs = element.attributes; for(var k = 0; k < attrs.length; ++k) { var a = attrs.item(k); if(!a.specified) continue; if(a.name.toLowerCase() == "style") continue; attrsNumber++; } var save_css = element.style.cssText, margin = 0, mar, elementTagName = element.tagName.toUpperCase(); if(!(typeof force != "undefined" && force)) if(elementTagName != "LI") try { mar = parseInt(Sys.Extended.UI.HtmlEditor.getStyle(element, "margin-top")); if(isNaN(mar)) mar = elementTagName == "P" ? 1 : 0; margin += mar; mar = parseInt(Sys.Extended.UI.HtmlEditor.getStyle(element, "margin-bottom")); if(isNaN(mar)) mar = elementTagName == "P" ? 1 : 0; margin += mar; mar = parseInt(Sys.Extended.UI.HtmlEditor.getStyle(element, "margin-right")); if(isNaN(mar)) mar = elementTagName == "P" ? 1 : 0; margin += mar; mar = parseInt(Sys.Extended.UI.HtmlEditor.getStyle(element, "margin-left")); if(isNaN(mar)) mar = elementTagName == "P" ? 1 : 0; margin += mar; } catch(e) { margin = 1; } element.style.margin = ""; if((attrsNumber == 0 && element.style.cssText.length == 0 && margin == 0) || (typeof force != "undefined" && force && elementTagName != "LI")) { editor.unWrap(element, pars); return true; } else { element.style.cssText = save_css; return false; } }; Sys.Extended.UI.HtmlEditor._queryCommandValue = function(cmdID, _id) { var obj = this._rangeStartEnd(); if(obj == null) return ""; try { if(cmdID.toLowerCase() == "backcolor") { var el = obj.start; while(el) { var bckg = Sys.Extended.UI.HtmlEditor.getStyle(el, "background-color").toLowerCase(); if(bckg.length > 0 && bckg != "transparent") return bckg; el = el.parentNode; } return "#FFFFFF"; } var cssStyle = "none"; switch(cmdID.toLowerCase()) { case "forecolor": cssStyle = "color"; break; case "fontname": cssStyle = "font-family"; break; case "fontsize": cssStyle = "font-size"; break; } var ret; if((cssStyle == "font-size" || cssStyle == "font-family") && this._FontNotSet) { ret = ""; var par = obj.start; while(par != null) { if(cssStyle == "font-size") { if(par.style && par.style.fontSize && par.style.fontSize.length > 0) { ret = par.style.fontSize; break; } else if(par.tagName && par.tagName.toUpperCase() == "FONT" && par.size && par.size.length > 0) { ret = Sys.Extended.UI.HtmlEditor.fontSizeSeek(par.size); break; } } else { if(par.style && par.style.fontFamily && par.style.fontFamily.length > 0) { ret = par.style.fontFamily; break; } else if(par.tagName && par.tagName.toUpperCase() == "FONT" && par.face && par.face.length > 0) { ret = par.face; break; } } if(par.className && par.className.length > 0) { ret = Sys.Extended.UI.HtmlEditor.getStyle(par, cssStyle).toLowerCase(); if(cssStyle == "font-size") if(!Sys.Extended.UI.HtmlEditor.isIE) ret = Sys.Extended.UI.HtmlEditor._TryTransformFromPxToPt(ret, this, _id); break; } var parTagName = par.tagName.toUpperCase(); if(parTagName == "BODY" || parTagName == "TD") break; par = par.parentNode; } } else { ret = Sys.Extended.UI.HtmlEditor.getStyle(obj.start, cssStyle).toLowerCase(); if(cssStyle == "font-size") { if(!Sys.Extended.UI.HtmlEditor.isIE) { ret = Sys.Extended.UI.HtmlEditor._TryTransformFromPxToPt(ret, this, _id); var par = obj.start; while(par != null) { if(par.style && par.style.fontSize && par.style.fontSize.length > 0) { ret = par.style.fontSize; break; } if(par.className && par.className.length > 0) break; var parTagName = par.tagName.toUpperCase(); if(parTagName == "BODY" || parTagName == "TD") break; par = par.parentNode; } } } } if(this._StyleForTyping != null && this._StyleForTyping.length > 0) for(var i = 0; i < this._StyleForTyping.length; i++) { var curCss = this._StyleForTyping[i]; if(curCss.name == cssStyle) { ret = curCss.value; break; } } return ret; } catch(ex) { return ""; } };
Web hosting by Somee.com