首页 > 编程 > JavaScript > 正文

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

2019-11-20 12:46:50
字体:
来源:转载
供稿:网友

kindeditor一些个人修改

1.替换script里面的内容的问题
2.颜色选择器扩展,复制的fck编辑器选颜色
3.swfupload.swf上传前图片预览功能

kindeditor.js

function _formatHtml(html, htmlTags, urlType, wellFormatted, indentChar) {    if (html == null) {      html = '';    }    //2015-03-25    html = html.replace(/textarea__/ig, "textarea");    urlType = urlType || '';    wellFormatted = _undef(wellFormatted, false);    indentChar = _undef(indentChar, '/t');    var fontSizeList = 'xx-small,x-small,small,medium,large,x-large,xx-large'.split(',');     //2015-04-02将script里面的数据读取处理    var obj = {};    var index = 0;    html = html.replace(/(<script/s[^>]*>)([/s/S]*?)(<//script>)/ig, function ($0, $1, $2, $3) {      var value = $2 + '';      if (value) {        var key = "{$script__" + index + "$}";        obj[key] = value;        index++;        return $1 + key + $3;      } else {        return $0;      }    });    html = html.replace(/(<(?:pre|pre/s[^>]*)>)([/s/S]*?)(<//pre>)/ig, function ($0, $1, $2, $3) {      return $1 + $2.replace(/<(?:br|br/s[^>]*)>/ig, '/n') + $3;    });    html = html.replace(/<(?:br|br/s[^>]*)/s*//?>/s*<//p>/ig, '</p>');    html = html.replace(/(<(?:p|p/s[^>]*)>)/s*(<//p>)/ig, '$1<br />$2');    html = html.replace(//u200B/g, '');    html = html.replace(//u00A9/g, '©');    html = html.replace(//u00AE/g, '®');    html = html.replace(/<[^>]+/g, function ($0) {      return $0.replace(//s+/g, ' ');    });    var htmlTagMap = {};    if (htmlTags) {      _each(htmlTags, function (key, val) {        var arr = key.split(',');        for (var i = 0, len = arr.length; i < len; i++) {          htmlTagMap[arr[i]] = _toMap(val);        }      });      if (!htmlTagMap.script) {        html = html.replace(/(<(?:script|script/s[^>]*)>)([/s/S]*?)(<//script>)/ig, '');      }      if (!htmlTagMap.style) {        html = html.replace(/(<(?:style|style/s[^>]*)>)([/s/S]*?)(<//style>)/ig, '');      }    }    var re = /(/s*)<(//)?([/w/-:]+)((?:/s+|(?:/s+[/w/-:]+)|(?:/s+[/w/-:]+=[^/s"'<>]+)|(?:/s+[/w/-:"]+="[^"]*")|(?:/s+[/w/-:"]+='[^']*'))*)(//)?>(/s*)/g;    var tagStack = [];    html = html.replace(re, function ($0, $1, $2, $3, $4, $5, $6) {      var full = $0,      startNewline = $1 || '',      startSlash = $2 || '',      tagName = $3.toLowerCase(),      attr = $4 || '',      endSlash = $5 ? ' ' + $5 : '',      endNewline = $6 || '';      if (htmlTags && !htmlTagMap[tagName]) {        return '';      }      if (endSlash === '' && _SINGLE_TAG_MAP[tagName]) {        endSlash = ' /';      }      if (_INLINE_TAG_MAP[tagName]) {        if (startNewline) {          startNewline = ' ';        }        if (endNewline) {          endNewline = ' ';        }      }      if (_PRE_TAG_MAP[tagName]) {        if (startSlash) {          endNewline = '/n';        } else {          startNewline = '/n';        }      }      if (wellFormatted && tagName == 'br') {        endNewline = '/n';      }      if (_BLOCK_TAG_MAP[tagName] && !_PRE_TAG_MAP[tagName]) {        if (wellFormatted) {          if (startSlash && tagStack.length > 0 && tagStack[tagStack.length - 1] === tagName) {            tagStack.pop();          } else {            tagStack.push(tagName);          }          startNewline = '/n';          endNewline = '/n';          for (var i = 0, len = startSlash ? tagStack.length : tagStack.length - 1; i < len; i++) {            startNewline += indentChar;            if (!startSlash) {              endNewline += indentChar;            }          }          if (endSlash) {            tagStack.pop();          } else if (!startSlash) {            endNewline += indentChar;          }        } else {          startNewline = endNewline = '';        }      }      if (attr !== '') {        var attrMap = _getAttrList(full);        if (tagName === 'font') {          var fontStyleMap = {}, fontStyle = '';          _each(attrMap, function (key, val) {            if (key === 'color') {              fontStyleMap.color = val;              delete attrMap[key];            }            if (key === 'size') {              fontStyleMap['font-size'] = fontSizeList[parseInt(val, 10) - 1] || '';              delete attrMap[key];            }            if (key === 'face') {              fontStyleMap['font-family'] = val;              delete attrMap[key];            }            if (key === 'style') {              fontStyle = val;            }          });          if (fontStyle && !/;$/.test(fontStyle)) {            fontStyle += ';';          }          _each(fontStyleMap, function (key, val) {            if (val === '') {              return;            }            if (//s/.test(val)) {              val = "'" + val + "'";            }            fontStyle += key + ':' + val + ';';          });          attrMap.style = fontStyle;        }        _each(attrMap, function (key, val) {          if (_FILL_ATTR_MAP[key]) {            attrMap[key] = key;          }          if (_inArray(key, ['src', 'href']) >= 0) {            attrMap[key] = _formatUrl(val, urlType);          }          if (htmlTags && key !== 'style' && !htmlTagMap[tagName]['*'] && !htmlTagMap[tagName][key] ||          tagName === 'body' && key === 'contenteditable' ||          /^kindeditor_/d+$/.test(key)) {            delete attrMap[key];          }          if (key === 'style' && val !== '') {            var styleMap = _getCssList(val);            _each(styleMap, function (k, v) {              if (htmlTags && !htmlTagMap[tagName].style && !htmlTagMap[tagName]['.' + k]) {                delete styleMap[k];              }            });            var style = '';            _each(styleMap, function (k, v) {              style += k + ':' + v + ';';            });            attrMap.style = style;          }        });        attr = '';        _each(attrMap, function (key, val) {          if (key === 'style' && val === '') {            return;          }          val = val.replace(/"/g, '"');          attr += ' ' + key + '="' + val + '"';        });      }      if (tagName === 'font') {        tagName = 'span';      }      return startNewline + '<' + startSlash + tagName + attr + endSlash + '>' + endNewline;    });    html = html.replace(/(<(?:pre|pre/s[^>]*)>)([/s/S]*?)(<//pre>)/ig, function ($0, $1, $2, $3) {      return $1 + $2.replace(//n/g, '<span id="__kindeditor_pre_newline__">/n') + $3;    });    html = html.replace(//n/s*/n/g, '/n');    html = html.replace(/<span id="__kindeditor_pre_newline__">/n/g, '/n');    for (var key in obj) {      html = html.replace(key, obj[key]);    }    //alert(html);    return _trim(html);  }

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

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