这里给大家分享的是个人修改的kindeditor的代码,主要是修复了一些BUG,添加了些常用功能,推荐给大家,有需要的小伙伴可以参考下。
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的全部代码了,希望大家能够喜欢。
新闻热点
疑难解答
图片精选