123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- /**
- * 段落样式
- * @file
- * @since 1.2.6.1
- */
- /**
- * 段落格式
- * @command paragraph
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param {String} style 标签值为:'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'
- * @param {Object} attrs 标签的属性
- * @example
- * ```javascript
- * editor.execCommand( 'Paragraph','h1','{
- * class:'test'
- * }' );
- * ```
- */
- /**
- * 返回选区内节点标签名
- * @command paragraph
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { String } 节点标签名
- * @example
- * ```javascript
- * editor.queryCommandValue( 'Paragraph' );
- * ```
- */
- UE.plugins["paragraph"] = function() {
- var me = this,
- block = domUtils.isBlockElm,
- notExchange = ["TD", "LI", "PRE"],
- doParagraph = function(range, style, attrs, sourceCmdName) {
- var bookmark = range.createBookmark(),
- filterFn = function(node) {
- return node.nodeType == 1
- ? node.tagName.toLowerCase() != "br" &&
- !domUtils.isBookmarkNode(node)
- : !domUtils.isWhitespace(node);
- },
- para;
- range.enlarge(true);
- var bookmark2 = range.createBookmark(),
- current = domUtils.getNextDomNode(bookmark2.start, false, filterFn),
- tmpRange = range.cloneRange(),
- tmpNode;
- while (
- current &&
- !(
- domUtils.getPosition(current, bookmark2.end) &
- domUtils.POSITION_FOLLOWING
- )
- ) {
- if (current.nodeType == 3 || !block(current)) {
- tmpRange.setStartBefore(current);
- while (current && current !== bookmark2.end && !block(current)) {
- tmpNode = current;
- current = domUtils.getNextDomNode(current, false, null, function(
- node
- ) {
- return !block(node);
- });
- }
- tmpRange.setEndAfter(tmpNode);
- para = range.document.createElement(style);
- if (attrs) {
- domUtils.setAttributes(para, attrs);
- if (
- sourceCmdName &&
- sourceCmdName == "customstyle" &&
- attrs.style
- ) {
- para.style.cssText = attrs.style;
- }
- }
- para.appendChild(tmpRange.extractContents());
- //需要内容占位
- if (domUtils.isEmptyNode(para)) {
- domUtils.fillChar(range.document, para);
- }
- tmpRange.insertNode(para);
- var parent = para.parentNode;
- //如果para上一级是一个block元素且不是body,td就删除它
- if (
- block(parent) &&
- !domUtils.isBody(para.parentNode) &&
- utils.indexOf(notExchange, parent.tagName) == -1
- ) {
- //存储dir,style
- if (!(sourceCmdName && sourceCmdName == "customstyle")) {
- parent.getAttribute("dir") &&
- para.setAttribute("dir", parent.getAttribute("dir"));
- //trace:1070
- parent.style.cssText &&
- (para.style.cssText =
- parent.style.cssText + ";" + para.style.cssText);
- //trace:1030
- parent.style.textAlign &&
- !para.style.textAlign &&
- (para.style.textAlign = parent.style.textAlign);
- parent.style.textIndent &&
- !para.style.textIndent &&
- (para.style.textIndent = parent.style.textIndent);
- parent.style.padding &&
- !para.style.padding &&
- (para.style.padding = parent.style.padding);
- }
- //trace:1706 选择的就是h1-6要删除
- if (
- attrs &&
- /h\d/i.test(parent.tagName) &&
- !/h\d/i.test(para.tagName)
- ) {
- domUtils.setAttributes(parent, attrs);
- if (
- sourceCmdName &&
- sourceCmdName == "customstyle" &&
- attrs.style
- ) {
- parent.style.cssText = attrs.style;
- }
- domUtils.remove(para.parentNode, true);
- para = parent;
- } else {
- domUtils.remove(para.parentNode, true);
- }
- }
- if (utils.indexOf(notExchange, parent.tagName) != -1) {
- current = parent;
- } else {
- current = para;
- }
- current = domUtils.getNextDomNode(current, false, filterFn);
- } else {
- current = domUtils.getNextDomNode(current, true, filterFn);
- }
- }
- return range.moveToBookmark(bookmark2).moveToBookmark(bookmark);
- };
- me.setOpt("paragraph", {
- p: "",
- h1: "",
- h2: "",
- h3: "",
- h4: "",
- h5: "",
- h6: ""
- });
- me.commands["paragraph"] = {
- execCommand: function(cmdName, style, attrs, sourceCmdName) {
- var range = this.selection.getRange();
- //闭合时单独处理
- if (range.collapsed) {
- var txt = this.document.createTextNode("p");
- range.insertNode(txt);
- //去掉冗余的fillchar
- if (browser.ie) {
- var node = txt.previousSibling;
- if (node && domUtils.isWhitespace(node)) {
- domUtils.remove(node);
- }
- node = txt.nextSibling;
- if (node && domUtils.isWhitespace(node)) {
- domUtils.remove(node);
- }
- }
- }
- range = doParagraph(range, style, attrs, sourceCmdName);
- if (txt) {
- range.setStartBefore(txt).collapse(true);
- pN = txt.parentNode;
- domUtils.remove(txt);
- if (domUtils.isBlockElm(pN) && domUtils.isEmptyNode(pN)) {
- domUtils.fillNode(this.document, pN);
- }
- }
- if (
- browser.gecko &&
- range.collapsed &&
- range.startContainer.nodeType == 1
- ) {
- var child = range.startContainer.childNodes[range.startOffset];
- if (
- child &&
- child.nodeType == 1 &&
- child.tagName.toLowerCase() == style
- ) {
- range.setStart(child, 0).collapse(true);
- }
- }
- //trace:1097 原来有true,原因忘了,但去了就不能清除多余的占位符了
- range.select();
- return true;
- },
- queryCommandValue: function() {
- var node = domUtils.filterNodeList(
- this.selection.getStartElementPath(),
- "p h1 h2 h3 h4 h5 h6"
- );
- return node ? node.tagName.toLowerCase() : "";
- }
- };
- };
|