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 (
,