You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.7 KiB
84 lines
2.7 KiB
odoo.define('web.web_widget_color', function(require) {
|
|
"use strict";
|
|
|
|
var core = require('web.core');
|
|
var widget = require('web.form_widgets');
|
|
var FormView = require('web.FormView');
|
|
|
|
var QWeb = core.qweb;
|
|
var _lt = core._lt;
|
|
|
|
var _super_getDir = jscolor.getDir.prototype;
|
|
jscolor.getDir = function () {
|
|
var dir = _super_getDir.constructor();
|
|
if (dir.indexOf('web_widget_color') === -1) {
|
|
jscolor.dir = 'web_widget_color/static/lib/jscolor/';
|
|
}
|
|
return jscolor.dir;
|
|
};
|
|
|
|
var FieldColor = widget.FieldChar.extend({
|
|
template: 'FieldColor',
|
|
widget_class: 'oe_form_field_color',
|
|
is_syntax_valid: function () {
|
|
var $input = this.$('input');
|
|
if (!this.get("effective_readonly") && $input.size() > 0) {
|
|
var val = $input.val();
|
|
var isOk = /^#[0-9A-F]{6}$/i.test(val);
|
|
if (!isOk) {
|
|
return false;
|
|
}
|
|
try {
|
|
this.parse_value(this.$('input').val(), '');
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
store_dom_value: function() {
|
|
if (!this.silent) {
|
|
if (!this.get('effective_readonly') &&
|
|
this.$('input').val() !== '' &&
|
|
this.is_syntax_valid()) {
|
|
// We use internal_set_value because we were called by
|
|
// ``.commit_value()`` which is called by a ``.set_value()``
|
|
// itself called because of a ``onchange`` event
|
|
this.internal_set_value(
|
|
this.parse_value(
|
|
this.$('input').val())
|
|
);
|
|
}
|
|
}
|
|
},
|
|
render_value: function () {
|
|
var show_value = this.format_value(this.get('value'), '');
|
|
if (!this.get("effective_readonly")) {
|
|
var $input = this.$el.find('input');
|
|
$input.val(show_value);
|
|
$input.css("background-color", show_value);
|
|
jscolor.init(this.$el[0]);
|
|
} else {
|
|
this.$(".oe_form_char_content").text(show_value);
|
|
this.$('div').css("background-color", show_value);
|
|
}
|
|
}
|
|
});
|
|
|
|
core.form_widget_registry.add('color', FieldColor);
|
|
|
|
/*
|
|
* Init jscolor for each editable mode on view form
|
|
*/
|
|
FormView.include({
|
|
to_edit_mode: function () {
|
|
this._super();
|
|
jscolor.init(this.$el[0]);
|
|
}
|
|
});
|
|
|
|
return {
|
|
FieldColor: FieldColor
|
|
};
|
|
});
|