| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | /** * 段落格式 * @file * @since 1.2.6.1 *//** * 段落对齐方式 * @command justify * @method execCommand * @param { String } cmd 命令字符串 * @param { String } align 对齐方式:left => 居左,right => 居右,center => 居中,justify => 两端对齐 * @example * ```javascript * editor.execCommand( 'justify', 'center' ); * ``` *//** * 如果选区所在位置是段落区域,返回当前段落对齐方式 * @command justify * @method queryCommandValue * @param { String } cmd 命令字符串 * @return { String } 返回段落对齐方式 * @example * ```javascript * editor.queryCommandValue( 'justify' ); * ``` */UE.plugins['justify']=function(){    var me=this,        block = domUtils.isBlockElm,        defaultValue = {            left:1,            right:1,            center:1,            justify:1        },        doJustify = function (range, style) {            var bookmark = range.createBookmark(),                filterFn = function (node) {                    return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' && !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node);                };            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);                    var common = tmpRange.getCommonAncestor();                    if (!domUtils.isBody(common) && block(common)) {                        domUtils.setStyles(common, utils.isString(style) ? {'text-align':style} : style);                        current = common;                    } else {                        var p = range.document.createElement('p');                        domUtils.setStyles(p, utils.isString(style) ? {'text-align':style} : style);                        var frag = tmpRange.extractContents();                        p.appendChild(frag);                        tmpRange.insertNode(p);                        current = p;                    }                    current = domUtils.getNextDomNode(current, false, filterFn);                } else {                    current = domUtils.getNextDomNode(current, true, filterFn);                }            }            return range.moveToBookmark(bookmark2).moveToBookmark(bookmark);        };    UE.commands['justify'] = {        execCommand:function (cmdName, align) {            var range = this.selection.getRange(),                txt;            //闭合时单独处理            if (range.collapsed) {                txt = this.document.createTextNode('p');                range.insertNode(txt);            }            doJustify(range, align);            if (txt) {                range.setStartBefore(txt).collapse(true);                domUtils.remove(txt);            }            range.select();            return true;        },        queryCommandValue:function () {            var startNode = this.selection.getStart(),                value = domUtils.getComputedStyle(startNode, 'text-align');            return defaultValue[value] ? value : 'left';        },        queryCommandState:function () {            var start = this.selection.getStart(),                cell = start && domUtils.findParentByTagName(start, ["td", "th","caption"], true);            return cell? -1:0;        }    };};
 |