justify.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. ///import core
  2. ///commands 段落格式,居左,居右,居中,两端对齐
  3. ///commandsName JustifyLeft,JustifyCenter,JustifyRight,JustifyJustify
  4. ///commandsTitle 居左对齐,居中对齐,居右对齐,两端对齐
  5. /**
  6. * @description 居左右中
  7. * @name baidu.editor.execCommand
  8. * @param {String} cmdName justify执行对齐方式的命令
  9. * @param {String} align 对齐方式:left居左,right居右,center居中,justify两端对齐
  10. * @author zhanyi
  11. */
  12. UE.plugins['justify']=function(){
  13. var me=this,
  14. block = domUtils.isBlockElm,
  15. defaultValue = {
  16. left:1,
  17. right:1,
  18. center:1,
  19. justify:1
  20. },
  21. doJustify = function (range, style) {
  22. var bookmark = range.createBookmark(),
  23. filterFn = function (node) {
  24. return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' && !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node);
  25. };
  26. range.enlarge(true);
  27. var bookmark2 = range.createBookmark(),
  28. current = domUtils.getNextDomNode(bookmark2.start, false, filterFn),
  29. tmpRange = range.cloneRange(),
  30. tmpNode;
  31. while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) {
  32. if (current.nodeType == 3 || !block(current)) {
  33. tmpRange.setStartBefore(current);
  34. while (current && current !== bookmark2.end && !block(current)) {
  35. tmpNode = current;
  36. current = domUtils.getNextDomNode(current, false, null, function (node) {
  37. return !block(node);
  38. });
  39. }
  40. tmpRange.setEndAfter(tmpNode);
  41. var common = tmpRange.getCommonAncestor();
  42. if (!domUtils.isBody(common) && block(common)) {
  43. domUtils.setStyles(common, utils.isString(style) ? {'text-align':style} : style);
  44. current = common;
  45. } else {
  46. var p = range.document.createElement('p');
  47. domUtils.setStyles(p, utils.isString(style) ? {'text-align':style} : style);
  48. var frag = tmpRange.extractContents();
  49. p.appendChild(frag);
  50. tmpRange.insertNode(p);
  51. current = p;
  52. }
  53. current = domUtils.getNextDomNode(current, false, filterFn);
  54. } else {
  55. current = domUtils.getNextDomNode(current, true, filterFn);
  56. }
  57. }
  58. return range.moveToBookmark(bookmark2).moveToBookmark(bookmark);
  59. };
  60. UE.commands['justify'] = {
  61. execCommand:function (cmdName, align) {
  62. var range = this.selection.getRange(),
  63. txt;
  64. //闭合时单独处理
  65. if (range.collapsed) {
  66. txt = this.document.createTextNode('p');
  67. range.insertNode(txt);
  68. }
  69. doJustify(range, align);
  70. if (txt) {
  71. range.setStartBefore(txt).collapse(true);
  72. domUtils.remove(txt);
  73. }
  74. range.select();
  75. return true;
  76. },
  77. queryCommandValue:function () {
  78. var startNode = this.selection.getStart(),
  79. value = domUtils.getComputedStyle(startNode, 'text-align');
  80. return defaultValue[value] ? value : 'left';
  81. },
  82. queryCommandState:function () {
  83. return this.highlight ? -1 : 0;
  84. }
  85. };
  86. };