[IMP] web_editor: split search out of MediaWidget

The search is not used on VideoWidget for example, so it makes more sense to
split it out of the basic MediaWidget.

PR: #33509
This commit is contained in:
Sébastien Theys
2019-05-27 16:32:52 +00:00
parent e378aebc24
commit d25d3324e2
2 changed files with 36 additions and 14 deletions
@@ -13,18 +13,17 @@ var _t = core._t;
var MediaWidget = Widget.extend({
xmlDependencies: ['/web_editor/static/src/xml/wysiwyg.xml'],
events: {
'input input.o_we_search': '_onSearchInput',
},
/**
* @constructor
* @param {Element} media: the target Element for which we select a media
* @param {Object} options: useful parameters such as res_id, res_model,
* context, user_id, ...
*/
init: function (parent, media, options) {
this._super.apply(this, arguments);
this.media = media;
this.$media = $(media);
this._onSearchInput = _.debounce(this._onSearchInput, 500);
},
//--------------------------------------------------------------------------
@@ -40,12 +39,6 @@ var MediaWidget = Widget.extend({
}
this._clear();
},
/**
* @abstract
* @param {string} needle
* @returns {Deferred}
*/
search: function (needle) {},
/**
* Saves the currently configured media on the target media.
*
@@ -62,6 +55,33 @@ var MediaWidget = Widget.extend({
* @abstract
*/
_clear: function () {},
});
var SearchableMediaWidget = MediaWidget.extend({
events: _.extend({}, MediaWidget.prototype.events || {}, {
'input .o_we_search': '_onSearchInput',
}),
/**
* @constructor
*/
init: function () {
this._super.apply(this, arguments);
this._onSearchInput = _.debounce(this._onSearchInput, 500);
},
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* Finds and displays existing attachments related to the target media.
*
* @abstract
* @param {string} needle: only return attachments matching this parameter
* @returns {Promise}
*/
search: function (needle) {},
//--------------------------------------------------------------------------
// Handlers
@@ -79,9 +99,9 @@ var MediaWidget = Widget.extend({
/**
* Let users choose an image, including uploading a new image in odoo.
*/
var ImageWidget = MediaWidget.extend({
var ImageWidget = SearchableMediaWidget.extend({
template: 'wysiwyg.widgets.image',
events: _.extend({}, MediaWidget.prototype.events || {}, {
events: _.extend({}, SearchableMediaWidget.prototype.events || {}, {
'click .o_upload_media_button': '_onUploadButtonClick',
'click .o_upload_media_button_no_optimization': '_onUploadButtonNoOptimizationClick',
'change input[type=file]': '_onImageSelection',
@@ -655,9 +675,9 @@ var ImageWidget = MediaWidget.extend({
* Let users choose a font awesome icon, support all font awesome loaded in the
* css files.
*/
var IconWidget = MediaWidget.extend({
var IconWidget = SearchableMediaWidget.extend({
template: 'wysiwyg.widgets.font-icons',
events: _.extend({}, MediaWidget.prototype.events || {}, {
events: _.extend({}, SearchableMediaWidget.prototype.events || {}, {
'click .font-icons-icon': '_onIconClick',
'dblclick .font-icons-icon': '_onIconDblClick',
}),
@@ -1097,6 +1117,7 @@ var VideoWidget = MediaWidget.extend({
return {
MediaWidget: MediaWidget,
SearchableMediaWidget: SearchableMediaWidget,
ImageWidget: ImageWidget,
IconWidget: IconWidget,
VideoWidget: VideoWidget,
@@ -19,6 +19,7 @@ return {
ColorpickerDialog: ColorpickerDialog,
MediaWidget: media.MediaWidget,
SearchableMediaWidget: media.SearchableMediaWidget,
ImageWidget: media.ImageWidget,
IconWidget: media.IconWidget,
VideoWidget: media.VideoWidget,