odoo10富文本编辑器是在web_editor模块中,使用的第三方编辑器summernote,其版本较老,应该是0.6版本的。
老版本summernote需要加载扩展js才有【输入联想】的功能,新版本自带此功能。
- 到github上下summernote0.6.12版本的完整包
- 找到summernote-ext-hint.js,复制到web_editor/static/src/js/
- web_editor/views/editor.xml中加载此js
- web_editor/static/src/js/backend.js自定义summernote设置项,代码段在下方。
- 使用$.getJSON从api获取你在odoo中提前设定的一些快捷短句,加载到内存中,这样用户在输入时便可以触发输入联想。
- 也可以写死一些快捷短语,比如快速输入时间。下方代码中有
this.$textarea.summernote({
focus: false,
height: 180,
toolbar: [
['style', ['style']],
['font', ['bold', 'italic', 'underline', 'clear']],
['fontsize', ['fontsize', 'superscript', 'subscript']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']],
['insert', ['link', 'picture']],
['history', ['undo', 'redo']]
],
prettifyHtml: false,
styleWithSpan: false,
inlinemedia: ['p'],
lang: "odoo",
plugin: {
hint: {
time_: function () {
var date = new Date();
return date.toLocaleString('chinese', {hour12: false})
},
reload_words: function () {
var self = this;
if (self.origin_words.length !== 0) {
return self.origin_words
}
// 加载快捷短语
$.getJSON('/your/api/', function (data) {
console.log("加载快捷短语")
self.origin_words = self.origin_words.concat(data);
console.log(self.origin_words)
console.log("加载快捷短语--ok")
});
// 加载时间
self.origin_words.push('time')
console.log('reload words succ.', self.origin_words)
return self.origin_words
},
update_words: function () {
var self = this;
self.words = [];
self.origin_words = self.reload_words()
self.words = self.words.concat(self.origin_words);
if (window.location.href.indexOf("model=eln.zhubiao") !== -1) {
// 拼接字符串等
$("td[data-field='name']").each(function () {
var name = $(this).text().trim();
var zhiliang = $(this).parent().find("td[data-field='shuliang']").text().trim();
var moerliang = $(this).parent().find("td[data-field='mmol']").text().trim();
var full_item = name + "(" + zhiliang + "g," + moerliang + "mmol)";
if (full_item && self.words.indexOf(full_item) === -1) {
self.words.push(full_item);
}
});
// 页面搜索关键词,塞到联想词池子中
$("td[data-field='rj_name']").each(function () {
var name = $(this).text().trim();
var tiji = $(this).parent().find("td[data-field='tiji']").text().trim();
var full_item = name + "(" + tiji + "mL)";
if (full_item && self.words.indexOf(full_item) === -1) {
self.words.push(full_item);
}
});
}
},
words: [], // 候选词
origin_words: [], // 初始候选词
match: /(.{1,10})$/,
searchKeyword: function (keyword, callback) {
if (this.match.test(keyword)) {
var matches = this.match.exec(keyword);
this.search(matches[1], callback);
} else {
callback();
}
},
load: function ($popover) {
$popover.css({});
},
content: function (item) {
if (item === 'time') {
return this.time_();
}
return item;
}, //输入的
template: function (item) {
// console.log("tem item", item)
if (item === 'time') {
return this.time_();
}
return item; // 显示的
},
search: function (keyword, callback) {
this.update_words();
callback($.grep(this.words, function (item) {
return item.indexOf(keyword) !== -1;
}));
}
}
},
onChange: function (value) {
self.internal_set_value(value);
self.trigger('changed_value');
}
});