首页 > 语言 > JavaScript > 正文

kindeditor修复会替换script内容的问题

2024-05-06 16:18:17
字体:
来源:转载
供稿:网友

这里给大家分享的是个人修改的kindeditor的代码,主要是修复了一些BUG,添加了些常用功能,推荐给大家,有需要的小伙伴可以参考下。

kindeditor一些个人修改

1.替换script里面的内容的问题

2.颜色选择器扩展,复制的fck编辑器选颜色

3.swfupload.swf上传前图片预览功能

kindeditor.js

 

 
  1. function _formatHtml(html, htmlTags, urlType, wellFormatted, indentChar) { 
  2. if (html == null) { 
  3. html = ''
  4. //2015-03-25 
  5. html = html.replace(/textarea__/ig, "textarea"); 
  6. urlType = urlType || ''
  7. wellFormatted = _undef(wellFormatted, false); 
  8. indentChar = _undef(indentChar, '/t'); 
  9. var fontSizeList = 'xx-small,x-small,small,medium,large,x-large,xx-large'.split(','); 
  10.  
  11. //2015-04-02将script里面的数据读取处理 
  12. var obj = {}; 
  13. var index = 0; 
  14. html = html.replace(/(<script/s[^>]*>)([/s/S]*?)(<//script>)/ig, function ($0, $1, $2, $3) { 
  15. var value = $2 + ''
  16. if (value) { 
  17. var key = "{$script__" + index + "$}"
  18. obj[key] = value; 
  19. index++; 
  20. return $1 + key + $3; 
  21. else { 
  22. return $0; 
  23. }); 
  24. html = html.replace(/(<(?:pre|pre/s[^>]*)>)([/s/S]*?)(<//pre>)/ig, function ($0, $1, $2, $3) { 
  25. return $1 + $2.replace(/<(?:br|br/s[^>]*)>/ig, '/n') + $3; 
  26. }); 
  27. html = html.replace(/<(?:br|br/s[^>]*)/s*//?>/s*<//p>/ig, '</p>'); 
  28. html = html.replace(/(<(?:p|p/s[^>]*)>)/s*(<//p>)/ig, '$1<br />$2'); 
  29. html = html.replace(//u200B/g, ''); 
  30. html = html.replace(//u00A9/g, '©'); 
  31. html = html.replace(//u00AE/g, '®'); 
  32. html = html.replace(/<[^>]+/g, function ($0) { 
  33. return $0.replace(//s+/g, ' '); 
  34. }); 
  35. var htmlTagMap = {}; 
  36. if (htmlTags) { 
  37. _each(htmlTags, function (key, val) { 
  38. var arr = key.split(','); 
  39. for (var i = 0, len = arr.length; i < len; i++) { 
  40. htmlTagMap[arr[i]] = _toMap(val); 
  41. }); 
  42. if (!htmlTagMap.script) { 
  43. html = html.replace(/(<(?:script|script/s[^>]*)>)([/s/S]*?)(<//script>)/ig, ''); 
  44. if (!htmlTagMap.style) { 
  45. html = html.replace(/(<(?:style|style/s[^>]*)>)([/s/S]*?)(<//style>)/ig, ''); 
  46. var re = /(/s*)<(//)?([/w/-:]+)((?:/s+|(?:/s+[/w/-:]+)|(?:/s+[/w/-:]+=[^/s"'<>]+)|(?:/s+[/w/-:"]+="[^"]*")|(?:/s+[/w/-:"]+='[^']*'))*)(//)?>(/s*)/g; 
  47. var tagStack = []; 
  48. html = html.replace(re, function ($0, $1, $2, $3, $4, $5, $6) { 
  49. var full = $0, 
  50. startNewline = $1 || ''
  51. startSlash = $2 || ''
  52. tagName = $3.toLowerCase(), 
  53. attr = $4 || ''
  54. endSlash = $5 ? ' ' + $5 : ''
  55. endNewline = $6 || ''
  56. if (htmlTags && !htmlTagMap[tagName]) { 
  57. return ''
  58. if (endSlash === '' && _SINGLE_TAG_MAP[tagName]) { 
  59. endSlash = ' /'
  60. if (_INLINE_TAG_MAP[tagName]) { 
  61. if (startNewline) { 
  62. startNewline = ' '
  63. if (endNewline) { 
  64. endNewline = ' '
  65. if (_PRE_TAG_MAP[tagName]) { 
  66. if (startSlash) { 
  67. endNewline = '/n'
  68. else { 
  69. startNewline = '/n'
  70. if (wellFormatted && tagName == 'br') { 
  71. endNewline = '/n'
  72. if (_BLOCK_TAG_MAP[tagName] && !_PRE_TAG_MAP[tagName]) { 
  73. if (wellFormatted) { 
  74. if (startSlash && tagStack.length > 0 && tagStack[tagStack.length - 1] === tagName) { 
  75. tagStack.pop(); 
  76. else { 
  77. tagStack.push(tagName); 
  78. startNewline = '/n'
  79. endNewline = '/n'
  80. for (var i = 0, len = startSlash ? tagStack.length : tagStack.length - 1; i < len; i++) { 
  81. startNewline += indentChar; 
  82. if (!startSlash) { 
  83. endNewline += indentChar; 
  84. if (endSlash) { 
  85. tagStack.pop(); 
  86. else if (!startSlash) { 
  87. endNewline += indentChar; 
  88. else { 
  89. startNewline = endNewline = ''
  90. if (attr !== '') { 
  91. var attrMap = _getAttrList(full); 
  92. if (tagName === 'font') { 
  93. var fontStyleMap = {}, fontStyle = ''
  94. _each(attrMap, function (key, val) { 
  95. if (key === 'color') { 
  96. fontStyleMap.color = val; 
  97. delete attrMap[key]; 
  98. if (key === 'size') { 
  99. fontStyleMap['font-size'] = fontSizeList[parseInt(val, 10) - 1] || ''
  100. delete attrMap[key]; 
  101. if (key === 'face') { 
  102. fontStyleMap['font-family'] = val; 
  103. delete attrMap[key]; 
  104. if (key === 'style') { 
  105. fontStyle = val; 
  106. }); 
  107. if (fontStyle && !/;$/.test(fontStyle)) { 
  108. fontStyle += ';'
  109. _each(fontStyleMap, function (key, val) { 
  110. if (val === '') { 
  111. return
  112. if (//s/.test(val)) { 
  113. val = "'" + val + "'"
  114. fontStyle += key + ':' + val + ';'
  115. }); 
  116. attrMap.style = fontStyle; 
  117. _each(attrMap, function (key, val) { 
  118. if (_FILL_ATTR_MAP[key]) { 
  119. attrMap[key] = key; 
  120. if (_inArray(key, ['src''href']) >= 0) { 
  121. attrMap[key] = _formatUrl(val, urlType); 
  122. if (htmlTags && key !== 'style' && !htmlTagMap[tagName]['*'] && !htmlTagMap[tagName][key] || 
  123. tagName === 'body' && key === 'contenteditable' || 
  124. /^kindeditor_/d+$/.test(key)) { 
  125. delete attrMap[key]; 
  126. if (key === 'style' && val !== '') { 
  127. var styleMap = _getCssList(val); 
  128. _each(styleMap, function (k, v) { 
  129. if (htmlTags && !htmlTagMap[tagName].style && !htmlTagMap[tagName]['.' + k]) { 
  130. delete styleMap[k]; 
  131. }); 
  132. var style = ''
  133. _each(styleMap, function (k, v) { 
  134. style += k + ':' + v + ';'
  135. }); 
  136. attrMap.style = style; 
  137. }); 
  138. attr = ''
  139. _each(attrMap, function (key, val) { 
  140. if (key === 'style' && val === '') { 
  141. return
  142. val = val.replace(/"/g, '"'); 
  143. attr += ' ' + key + '="' + val + '"'
  144. }); 
  145. if (tagName === 'font') { 
  146. tagName = 'span'
  147. return startNewline + '<' + startSlash + tagName + attr + endSlash + '>' + endNewline; 
  148. }); 
  149. html = html.replace(/(<(?:pre|pre/s[^>]*)>)([/s/S]*?)(<//pre>)/ig, function ($0, $1, $2, $3) { 
  150. return $1 + $2.replace(//n/g, '<span id="__kindeditor_pre_newline__">/n') + $3; 
  151. }); 
  152. html = html.replace(//n/s*/n/g, '/n'); 
  153. html = html.replace(/<span id="__kindeditor_pre_newline__">/n/g, '/n'); 
  154. for (var key in obj) { 
  155. html = html.replace(key, obj[key]); 
  156. //alert(html); 
  157. return _trim(html); 

以上所述就是修改的kindeditor的全部代码了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选