83 lines
2.5 KiB
JavaScript
83 lines
2.5 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { WysiwygAdapterComponent } from '@website/components/wysiwyg_adapter/wysiwyg_adapter';
|
|
import { patch } from "@web/core/utils/patch";
|
|
|
|
patch(WysiwygAdapterComponent.prototype, {
|
|
/**
|
|
* @override
|
|
*/
|
|
init() {
|
|
super.init(...arguments);
|
|
this.blogTagsPerBlogPost = {};
|
|
},
|
|
/**
|
|
* @override
|
|
*/
|
|
async startEdition() {
|
|
await super.startEdition(...arguments);
|
|
this.options.document.defaultView.$('.js_tweet, .js_comment').off('mouseup').trigger('mousedown');
|
|
},
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Public
|
|
//--------------------------------------------------------------------------
|
|
|
|
/**
|
|
* @override
|
|
*/
|
|
async _saveViewBlocks() {
|
|
const ret = await super._saveViewBlocks(...arguments);
|
|
await this._saveBlogTags(); // Note: important to be called after save otherwise cleanForSave is not called before
|
|
return ret;
|
|
},
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Private
|
|
//--------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Saves the blog tags in the database.
|
|
*
|
|
* @private
|
|
*/
|
|
async _saveBlogTags() {
|
|
for (const [key, tags] of Object.entries(this.blogTagsPerBlogPost)) {
|
|
const proms = tags.filter(tag => typeof tag.id === 'string').map(tag => {
|
|
return this.orm.create("blog.tag", [{
|
|
'name': tag.name,
|
|
}]);
|
|
});
|
|
const createdIDs = (await Promise.all(proms)).flat();
|
|
|
|
await this.orm.write("blog.post", [parseInt(key)], {
|
|
'tag_ids': [[6, 0, tags.filter(tag => typeof tag.id === 'number').map(tag => tag.id).concat(createdIDs)]],
|
|
});
|
|
}
|
|
},
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Handlers
|
|
//--------------------------------------------------------------------------
|
|
|
|
/**
|
|
* @private
|
|
* @param {OdooEvent} ev
|
|
*/
|
|
_onSetBlogPostUpdatedTags: function (ev) {
|
|
this.blogTagsPerBlogPost[ev.data.blogPostID] = ev.data.tags;
|
|
},
|
|
|
|
/**
|
|
* @override
|
|
*/
|
|
_trigger_up(ev) {
|
|
if (ev.name === 'set_blog_post_updated_tags') {
|
|
this._onSetBlogPostUpdatedTags(ev);
|
|
return;
|
|
} else {
|
|
return super._trigger_up(...arguments);
|
|
}
|
|
},
|
|
});
|