[MERGE] forward port branch saas-11 up to f1583504ce
This commit is contained in:
@@ -28,6 +28,8 @@ var FormViewBarcodeHandler = common.AbstractField.extend(BarcodeHandlerMixin, {
|
||||
this.__quantity_listener = _.bind(this._set_quantity_listener, this);
|
||||
BarcodeHandlerMixin.init.apply(this, arguments);
|
||||
|
||||
this.process_barcode_mutex = new utils.Mutex();
|
||||
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
|
||||
@@ -153,25 +155,35 @@ var FormViewBarcodeHandler = common.AbstractField.extend(BarcodeHandlerMixin, {
|
||||
else if (this.form_view.get('actual_mode') === 'view')
|
||||
this._display_no_edit_mode_warning();
|
||||
else {
|
||||
// Call hook method possibly implemented by subclass
|
||||
this.pre_onchange_hook(barcode).then(function(proceed) {
|
||||
if (proceed === true) {
|
||||
// Wait for hypothetical ongoing onchange to finish
|
||||
self.form_view.onchanges_mutex.exec(function() {
|
||||
// A real onchange is triggered when a value actually changes (which can correspond
|
||||
// to a widget's blur event per example). Commit the value of fields before
|
||||
// programmatically triggering an onchange to be consistent with this.
|
||||
var mutex_commit_value = new utils.Mutex();
|
||||
_.each(self.form_view.fields, function(field) {
|
||||
mutex_commit_value.exec(_.bind(field.commit_value, field));
|
||||
});
|
||||
return mutex_commit_value.def.then(function(){
|
||||
// Trigger the barcode onchange
|
||||
self.set_value(barcode);
|
||||
});
|
||||
});
|
||||
var process_barcode = function () {
|
||||
// this function can be passed to `Mutex.exec` in order to make sure
|
||||
// that every ongoing onchanges in the form view are done
|
||||
var form_onchanges_mutex = function () {
|
||||
return self.form_view.onchanges_mutex.def;
|
||||
}
|
||||
});
|
||||
|
||||
// before setting the barcode field with the received barcode, we commit
|
||||
// every fields of the form view and we wait for their hypothetical ongoing
|
||||
// onchanges to finish
|
||||
var commit_mutex = new utils.Mutex();
|
||||
_.each(self.form_view.fields, function (field) {
|
||||
commit_mutex.exec(function () {
|
||||
return field.commit_value();
|
||||
});
|
||||
commit_mutex.exec(form_onchanges_mutex);
|
||||
});
|
||||
|
||||
return commit_mutex.def.then(function () {
|
||||
return self.pre_onchange_hook(barcode).then(function (proceed) {
|
||||
if (proceed) {
|
||||
self.set_value(barcode); // set the barcode field with the received one
|
||||
return form_onchanges_mutex(); // wait for its onchange to finish
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
this.process_barcode_mutex.exec(process_barcode);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -641,7 +641,8 @@ ListView.include(/** @lends instance.web.ListView# */{
|
||||
if (saveInfo.created) {
|
||||
return self.start_edition();
|
||||
}
|
||||
var record = self.records[next_record](saveInfo.record);
|
||||
var options = { wraparound: !self.is_action_enabled('create') };
|
||||
var record = self.records[next_record](saveInfo.record, options);
|
||||
if (record === undefined) {
|
||||
return self.start_edition();
|
||||
}
|
||||
|
||||
@@ -161,6 +161,11 @@ var FieldTextHtmlSimple = widget.extend({
|
||||
return !this.get('value') || this.get('value') === "<p><br/></p>" || !this.get('value').match(/\S/);
|
||||
},
|
||||
commit_value: function () {
|
||||
/* Switch to WYSIWYG mode if currently in code view */
|
||||
if (session.debug) {
|
||||
var layoutInfo = this.$textarea.data('layoutInfo');
|
||||
$.summernote.pluginEvents.codeview(undefined, undefined, layoutInfo, false);
|
||||
}
|
||||
if (this.options['style-inline']) {
|
||||
transcoder.class_to_style(this.$content);
|
||||
transcoder.font_to_img(this.$content);
|
||||
@@ -377,6 +382,11 @@ var FieldTextHtml = widget.extend({
|
||||
this._dirty_flag = false;
|
||||
return this.editor.save();
|
||||
} else if (this._dirty_flag && this.editor && this.editor.buildingBlock) {
|
||||
/* Switch to WYSIWYG mode if currently in code view */
|
||||
if (session.debug) {
|
||||
var layoutInfo = this.editor.rte.editable().data('layoutInfo');
|
||||
$.summernote.pluginEvents.codeview(undefined, undefined, layoutInfo, false);
|
||||
}
|
||||
this.editor.buildingBlock.clean_for_save();
|
||||
this.internal_set_value( this.$content.html() );
|
||||
}
|
||||
|
||||
@@ -511,12 +511,32 @@ function prettify_html(html) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
$.summernote.pluginEvents.codeview = function (event, editor, layoutInfo) {
|
||||
|
||||
/*
|
||||
* This override when clicking on the 'Code View' button has two aims:
|
||||
*
|
||||
* - have our own code view implementation for FieldTextHtml
|
||||
* - add an 'enable' paramater to call the function directly and allow us to
|
||||
* disable (false) or enable (true) the code view mode.
|
||||
*/
|
||||
$.summernote.pluginEvents.codeview = function (event, editor, layoutInfo, enable) {
|
||||
if (layoutInfo === undefined) {
|
||||
return;
|
||||
}
|
||||
if (layoutInfo.toolbar) {
|
||||
// if editor inline (FieldTextHtmlSimple)
|
||||
var is_activated = $.summernote.eventHandler.modules.codeview.isActivated(layoutInfo);
|
||||
if (is_activated === enable) {
|
||||
return;
|
||||
}
|
||||
return eventHandler.modules.codeview.toggle(layoutInfo);
|
||||
} else {
|
||||
// if editor iframe (FieldTextHtml)
|
||||
var $editor = layoutInfo.editor();
|
||||
var $textarea = $editor.prev('textarea');
|
||||
if ($textarea.is('textarea') === enable) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$textarea.length) {
|
||||
// init and create texarea
|
||||
|
||||
Reference in New Issue
Block a user