- ace editor 乱码问题还存在, 不允许tinymce修改ace [ok]
- ace下html标签刷新会消失 [ok]
- 历史记录问题 有10份之后, 就不允许再添加了 [ok], 紧急!!
1. ace editor 乱码
因为tinymce对html结构进行了validate, 认为在pre下有div是不合法的, 让它变成合法即可!
tinymce源码: Editor.js中setContent()会先将内容过滤
/**
* Schema instance, enables you to validate elements and it's children.
*
* @property schema
* @type tinymce.html.Schema
*/
self.schema = new Schema(settings);
/**
* This class parses HTML code into a DOM like structure of nodes
* it will remove redundant whitespace and make
* sure that the node tree is valid according to the specified schema.
* @example
* var parser = new tinymce.html.DomParser({validate: true}, schema);
* var rootNode = parser.parse('content');
*/
self.parser = new DomParser(settings, self.schema);
self.serializer = new DomSerializer(settings, self);
// Editor.js
// Serializer == html/Serializer
setContent: function() {
if (args.format !== 'raw') {
content = new Serializer({}, self.schema).serialize(
self.parser.parse(content, {isRootContent: true})
);
}
}
serlf.parser.parse()会把变成"<pre><div>xx</div></pre>"变成"<div>xx</div>"解决: page.js, 使pre下可以存在div这种元素
http://www.tinymce.com/wiki.php/Configuration:valid_children
// 初始化编辑器
tinymce.init({
inline: true,
valid_children: "+pre[div|#text|p|span|textarea|i|b|strong]", // ace
...
});2. ace下html标签刷新会消失
<pre>下的<div><span>...都存实体, 所以在getEditoContent(), aceToPre()将< 转成 <
value.replace(/</g, '<').replace(/>/g, '>');
在setEditorContent()时也要转成实体(因为历史的<pre>值都没转)
LeaAce:initAceFromContent() {
...
value = value.replace(/ /g, " ").replace(/\<br *\/*\>/gi,"\n").replace(/</g, '<').replace(/>/g, '>');
pre.html(value);
var id = pre.attr('id');
if(!id) {
id = me.getAceId();
pre.attr('id', id);
}
me.initAce(id);
...3. 一个很低级的错误
func (this *NoteContentHistoryService) AddHistory(noteId, userId string, eachHistory info.EachHistory) {
...
if l >= maxSize {
// history.Histories = history.Histories[l-maxSize:] // BUG, 致使都是以前的
history.Histories = history.Histories[:maxSize]
}
...
}
life
life