image.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. ///import core
  2. ///import plugins\inserthtml.js
  3. ///commands 插入图片,操作图片的对齐方式
  4. ///commandsName InsertImage,ImageNone,ImageLeft,ImageRight,ImageCenter
  5. ///commandsTitle 图片,默认,居左,居右,居中
  6. ///commandsDialog dialogs\image
  7. /**
  8. * Created by .
  9. * User: zhanyi
  10. * for image
  11. */
  12. UE.commands['imagefloat'] = {
  13. execCommand:function (cmd, align) {
  14. var me = this,
  15. range = me.selection.getRange();
  16. if (!range.collapsed) {
  17. var img = range.getClosedNode();
  18. if (img && img.tagName == 'IMG') {
  19. switch (align) {
  20. case 'left':
  21. case 'right':
  22. case 'none':
  23. var pN = img.parentNode, tmpNode, pre, next;
  24. while (dtd.$inline[pN.tagName] || pN.tagName == 'A') {
  25. pN = pN.parentNode;
  26. }
  27. tmpNode = pN;
  28. if (tmpNode.tagName == 'P' && domUtils.getStyle(tmpNode, 'text-align') == 'center') {
  29. if (!domUtils.isBody(tmpNode) && domUtils.getChildCount(tmpNode, function (node) {
  30. return !domUtils.isBr(node) && !domUtils.isWhitespace(node);
  31. }) == 1) {
  32. pre = tmpNode.previousSibling;
  33. next = tmpNode.nextSibling;
  34. if (pre && next && pre.nodeType == 1 && next.nodeType == 1 && pre.tagName == next.tagName && domUtils.isBlockElm(pre)) {
  35. pre.appendChild(tmpNode.firstChild);
  36. while (next.firstChild) {
  37. pre.appendChild(next.firstChild);
  38. }
  39. domUtils.remove(tmpNode);
  40. domUtils.remove(next);
  41. } else {
  42. domUtils.setStyle(tmpNode, 'text-align', '');
  43. }
  44. }
  45. range.selectNode(img).select();
  46. }
  47. domUtils.setStyle(img, 'float', align == 'none' ? '' : align);
  48. if(align == 'none'){
  49. domUtils.removeAttributes(img,'align');
  50. }
  51. break;
  52. case 'center':
  53. if (me.queryCommandValue('imagefloat') != 'center') {
  54. pN = img.parentNode;
  55. domUtils.setStyle(img, 'float', '');
  56. domUtils.removeAttributes(img,'align');
  57. tmpNode = img;
  58. while (pN && domUtils.getChildCount(pN, function (node) {
  59. return !domUtils.isBr(node) && !domUtils.isWhitespace(node);
  60. }) == 1
  61. && (dtd.$inline[pN.tagName] || pN.tagName == 'A')) {
  62. tmpNode = pN;
  63. pN = pN.parentNode;
  64. }
  65. range.setStartBefore(tmpNode).setCursor(false);
  66. pN = me.document.createElement('div');
  67. pN.appendChild(tmpNode);
  68. domUtils.setStyle(tmpNode, 'float', '');
  69. me.execCommand('insertHtml', '<p id="_img_parent_tmp" style="text-align:center">' + pN.innerHTML + '</p>');
  70. tmpNode = me.document.getElementById('_img_parent_tmp');
  71. tmpNode.removeAttribute('id');
  72. tmpNode = tmpNode.firstChild;
  73. range.selectNode(tmpNode).select();
  74. //去掉后边多余的元素
  75. next = tmpNode.parentNode.nextSibling;
  76. if (next && domUtils.isEmptyNode(next)) {
  77. domUtils.remove(next);
  78. }
  79. }
  80. break;
  81. }
  82. }
  83. }
  84. },
  85. queryCommandValue:function () {
  86. var range = this.selection.getRange(),
  87. startNode, floatStyle;
  88. if (range.collapsed) {
  89. return 'none';
  90. }
  91. startNode = range.getClosedNode();
  92. if (startNode && startNode.nodeType == 1 && startNode.tagName == 'IMG') {
  93. floatStyle = startNode.getAttribute('align')||domUtils.getComputedStyle(startNode, 'float');
  94. if (floatStyle == 'none') {
  95. floatStyle = domUtils.getComputedStyle(startNode.parentNode, 'text-align') == 'center' ? 'center' : floatStyle;
  96. }
  97. return {
  98. left:1,
  99. right:1,
  100. center:1
  101. }[floatStyle] ? floatStyle : 'none';
  102. }
  103. return 'none';
  104. },
  105. queryCommandState:function () {
  106. var range = this.selection.getRange(),
  107. startNode;
  108. if (range.collapsed) return -1;
  109. startNode = range.getClosedNode();
  110. if (startNode && startNode.nodeType == 1 && startNode.tagName == 'IMG') {
  111. return 0;
  112. }
  113. return -1;
  114. }
  115. };
  116. UE.commands['insertimage'] = {
  117. execCommand:function (cmd, opt) {
  118. opt = utils.isArray(opt) ? opt : [opt];
  119. if (!opt.length) {
  120. return;
  121. }
  122. var me = this,
  123. range = me.selection.getRange(),
  124. img = range.getClosedNode();
  125. if (img && /img/i.test(img.tagName) && img.className != "edui-faked-video" && !img.getAttribute("word_img")) {
  126. var first = opt.shift();
  127. var floatStyle = first['floatStyle'];
  128. delete first['floatStyle'];
  129. //// img.style.border = (first.border||0) +"px solid #000";
  130. //// img.style.margin = (first.margin||0) +"px";
  131. // img.style.cssText += ';margin:' + (first.margin||0) +"px;" + 'border:' + (first.border||0) +"px solid #000";
  132. domUtils.setAttributes(img, first);
  133. me.execCommand('imagefloat', floatStyle);
  134. if (opt.length > 0) {
  135. range.setStartAfter(img).setCursor(false, true);
  136. me.execCommand('insertimage', opt);
  137. }
  138. } else {
  139. var html = [], str = '', ci;
  140. ci = opt[0];
  141. if (opt.length == 1) {
  142. str = '<img src="' + ci.src + '" ' + (ci.data_ue_src ? ' data_ue_src="' + ci.data_ue_src + '" ' : '') +
  143. (ci.width ? 'width="' + ci.width + '" ' : '') +
  144. (ci.height ? ' height="' + ci.height + '" ' : '') +
  145. (ci['floatStyle'] == 'left' || ci['floatStyle'] == 'right' ? ' style="float:' + ci['floatStyle'] + ';"' : '') +
  146. (ci.title && ci.title != "" ? ' title="' + ci.title + '"' : '') +
  147. (ci.border && ci.border != "0" ? ' border="' + ci.border + '"' : '') +
  148. (ci.alt && ci.alt != "" ? ' alt="' + ci.alt + '"' : '') +
  149. (ci.hspace && ci.hspace != "0" ? ' hspace = "' + ci.hspace + '"' : '') +
  150. (ci.vspace && ci.vspace != "0" ? ' vspace = "' + ci.vspace + '"' : '') + '/>';
  151. if (ci['floatStyle'] == 'center') {
  152. str = '<p style="text-align: center">' + str + '</p>';
  153. }
  154. html.push(str);
  155. } else {
  156. for (var i = 0; ci = opt[i++];) {
  157. str = '<p ' + (ci['floatStyle'] == 'center' ? 'style="text-align: center" ' : '') + '><img src="' + ci.src + '" ' +
  158. (ci.width ? 'width="' + ci.width + '" ' : '') + (ci.data_ue_src ? ' data_ue_src="' + ci.data_ue_src + '" ' : '') +
  159. (ci.height ? ' height="' + ci.height + '" ' : '') +
  160. ' style="' + (ci['floatStyle'] && ci['floatStyle'] != 'center' ? 'float:' + ci['floatStyle'] + ';' : '') +
  161. (ci.border || '') + '" ' +
  162. (ci.title ? ' title="' + ci.title + '"' : '') + ' /></p>';
  163. html.push(str);
  164. }
  165. }
  166. me.execCommand('insertHtml', html.join(''));
  167. }
  168. }
  169. };