summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/web_analytics/static/src/js/web_analytics.js532
-rw-r--r--addons/web_diagram/static/src/js/diagram.js51
-rw-r--r--addons/web_gantt/static/src/js/gantt.js58
-rw-r--r--addons/web_kanban_gauge/static/src/js/kanban_gauge.js20
-rw-r--r--addons/web_kanban_sparkline/static/src/js/kanban_sparkline.js19
-rw-r--r--addons/web_linkedin/static/src/js/linkedin.js968
-rw-r--r--addons/web_tests/static/src/js/web_tests.js78
-rw-r--r--addons/web_tests_demo/static/src/js/demo.js29
-rw-r--r--addons/web_tip/static/src/js/tip.js581
-rw-r--r--addons/web_view_editor/static/src/js/view_editor.js252
10 files changed, 1351 insertions, 1237 deletions
diff --git a/addons/web_analytics/static/src/js/web_analytics.js b/addons/web_analytics/static/src/js/web_analytics.js
index c8212f4d213..a81275d1b74 100644
--- a/addons/web_analytics/static/src/js/web_analytics.js
+++ b/addons/web_analytics/static/src/js/web_analytics.js
@@ -1,290 +1,296 @@
var _gaq = _gaq || []; // asynchronous stack used by google analytics
-openerp.web_analytics = function(instance) {
+odoo.define('web_analytics.web_analytics', ['web.ActionManager', 'web.core', 'web.CrashManager', 'web.FormView', 'web.Session', 'web.session', 'web.View', 'web.web_client', 'web.WebClient'], function (require) {
+"use strict";
- /*
- * The Web Analytics Module inserts the Google Analytics JS Snippet
- * at the top of the page, and sends to google an url each time the
- * openerp url is changed.
- * The pushes of the urls is made by triggering the 'state_pushed' event in the
- * web_client.do_push_state() method which is responsible of changing the openerp current url
- */
+var ActionManager = require('web.ActionManager');
+var CrashManager = require('web.CrashManager');
+var core = require('web.core');
+var FormView = require('web.FormView');
+var Session = require('web.Session');
+var session = require('web.session');
+var View = require('web.View');
+var web_client = require('web.web_client');
+var WebClient = require('web.WebClient');
+
+/*
+* The Web Analytics Module inserts the Google Analytics JS Snippet
+* at the top of the page, and sends to google an url each time the
+* openerp url is changed.
+* The pushes of the urls is made by triggering the 'state_pushed' event in the
+* web_client.do_push_state() method which is responsible of changing the openerp current url
+*/
- // Google Analytics Code snippet
- (function() {
- var ga = document.createElement('script');
- ga.type = 'text/javascript';
- ga.async = true;
- ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0];
- s.parentNode.insertBefore(ga,s);
- })();
+// Google Analytics Code snippet
+(function() {
+ var ga = document.createElement('script');
+ ga.type = 'text/javascript';
+ ga.async = true;
+ ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(ga,s);
+})();
- instance.web_analytics.Tracker = instance.web.Class.extend({
- /*
- * This method initializes the tracker
- */
- init: function(webclient) {
- var self = this;
- self.initialized = $.Deferred();
- _gaq.push(['_setAccount', 'UA-7333765-1']);
- _gaq.push(['_setDomainName', '.openerp.com']); // Allow multi-domain
- self.initialize_custom(webclient).then(function() {
- webclient.on('state_pushed', self, self.on_state_pushed);
- self.include_tracker();
+var Tracker = core.Class.extend({
+ /*
+ * This method initializes the tracker
+ */
+ init: function(webclient) {
+ var self = this;
+ self.initialized = $.Deferred();
+ _gaq.push(['_setAccount', 'UA-7333765-1']);
+ _gaq.push(['_setDomainName', '.openerp.com']); // Allow multi-domain
+ self.initialize_custom(webclient).then(function() {
+ webclient.on('state_pushed', self, self.on_state_pushed);
+ self.include_tracker();
+ });
+ },
+ /*
+ * This method MUST be overriden by saas_demo and saas_trial in order to
+ * set the correct user type. By default, the user connected is local to
+ * the DB (like in accounts).
+ */
+ _get_user_type: function() {
+ return 'Local User';
+ },
+ /*
+ * This method gets the user access level, to be used as CV in GA
+ */
+ _get_user_access_level: function() {
+ if (!session.session_is_valid()) {
+ return "Unauthenticated User";
+ }
+ if (session.uid === 1) {
+ return 'Admin User';
+ }
+ // Make the difference between portal users and anonymous users
+ if (session.username.indexOf('@') !== -1) {
+ return 'Portal User';
+ }
+ if (session.username === 'anonymous') {
+ return 'Anonymous User';
+ }
+ return 'Normal User';
+ },
+
+ /*
+ * This method contains the initialization of all user-related custom variables
+ * stored in GA. Also other modules can override it to add new custom variables
+ * Must be followed by a call to _push_*() in order to actually send the data
+ * to GA.
+ */
+ initialize_custom: function() {
+ var self = this;
+ session.rpc("/web/webclient/version_info", {})
+ .done(function(res) {
+ _gaq.push(['_setCustomVar', 5, 'Version', res.server_version, 3]);
+ self._push_customvars();
+ self.initialized.resolve(self);
});
- },
- /*
- * This method MUST be overriden by saas_demo and saas_trial in order to
- * set the correct user type. By default, the user connected is local to
- * the DB (like in accounts).
- */
- _get_user_type: function() {
- return 'Local User';
- },
- /*
- * This method gets the user access level, to be used as CV in GA
- */
- _get_user_access_level: function() {
- if (!instance.session.session_is_valid()) {
- return "Unauthenticated User";
- }
- if (instance.session.uid === 1) {
- return 'Admin User';
- }
- // Make the difference between portal users and anonymous users
- if (instance.session.username.indexOf('@') !== -1) {
- return 'Portal User';
- }
- if (instance.session.username === 'anonymous') {
- return 'Anonymous User';
- }
- return 'Normal User';
- },
-
- /*
- * This method contains the initialization of all user-related custom variables
- * stored in GA. Also other modules can override it to add new custom variables
- * Must be followed by a call to _push_*() in order to actually send the data
- * to GA.
- */
- initialize_custom: function() {
- var self = this;
- instance.session.rpc("/web/webclient/version_info", {})
- .done(function(res) {
- _gaq.push(['_setCustomVar', 5, 'Version', res.server_version, 3]);
- self._push_customvars();
- self.initialized.resolve(self);
- });
- return self.initialized;
- },
+ return self.initialized;
+ },
- /*
- * Method called in order to send _setCustomVar to GA
- */
- _push_customvars: function() {
- var self = this;
- // Track User Access Level, Custom Variable 4 in GA with visitor level scope
- // Values: 'Admin User', 'Normal User', 'Portal User', 'Anonymous User'
- _gaq.push(['_setCustomVar', 4, 'User Access Level', self._get_user_access_level(), 1]);
+ /*
+ * Method called in order to send _setCustomVar to GA
+ */
+ _push_customvars: function() {
+ var self = this;
+ // Track User Access Level, Custom Variable 4 in GA with visitor level scope
+ // Values: 'Admin User', 'Normal User', 'Portal User', 'Anonymous User'
+ _gaq.push(['_setCustomVar', 4, 'User Access Level', self._get_user_access_level(), 1]);
- // Track User Type Conversion, Custom Variable 3 in GA with session level scope
- // Values: 'Visitor', 'Demo', 'Online Trial', 'Online Paying', 'Local User'
- _gaq.push(['_setCustomVar', 1, 'User Type Conversion', self._get_user_type(), 2]);
- },
-
- /*
- * Method called in order to send _trackPageview to GA
- */
- _push_pageview: function(url) {
- _gaq.push(['_trackPageview', url]);
- },
- /*
- * Method called in order to send _trackEvent to GA
- */
- _push_event: function(options) {
- _gaq.push(['_trackEvent',
- options.category,
- options.action,
- options.label,
- options.value,
- options.noninteraction
- ]);
- },
- /*
- * Method called in order to send ecommerce transactions to GA
- */
- _push_ecommerce: function(trans_data, item_list) {
- _gaq.push(['_addTrans',
- trans_data.order_id,
- trans_data.store_name,
- trans_data.total,
- trans_data.tax,
- trans_data.shipping,
- trans_data.city,
- trans_data.state,
- trans_data.country,
+ // Track User Type Conversion, Custom Variable 3 in GA with session level scope
+ // Values: 'Visitor', 'Demo', 'Online Trial', 'Online Paying', 'Local User'
+ _gaq.push(['_setCustomVar', 1, 'User Type Conversion', self._get_user_type(), 2]);
+ },
+
+ /*
+ * Method called in order to send _trackPageview to GA
+ */
+ _push_pageview: function(url) {
+ _gaq.push(['_trackPageview', url]);
+ },
+ /*
+ * Method called in order to send _trackEvent to GA
+ */
+ _push_event: function(options) {
+ _gaq.push(['_trackEvent',
+ options.category,
+ options.action,
+ options.label,
+ options.value,
+ options.noninteraction
+ ]);
+ },
+ /*
+ * Method called in order to send ecommerce transactions to GA
+ */
+ _push_ecommerce: function(trans_data, item_list) {
+ _gaq.push(['_addTrans',
+ trans_data.order_id,
+ trans_data.store_name,
+ trans_data.total,
+ trans_data.tax,
+ trans_data.shipping,
+ trans_data.city,
+ trans_data.state,
+ trans_data.country,
+ ]);
+ _.each(item_list, function(item) {
+ _gaq.push(['_addItem',
+ item.order_id,
+ item.sku,
+ item.name,
+ item.category,
+ item.price,
+ item.quantity,
]);
- _.each(item_list, function(item) {
- _gaq.push(['_addItem',
- item.order_id,
- item.sku,
- item.name,
- item.category,
- item.price,
- item.quantity,
- ]);
- });
- _gaq.push(['_trackTrans']);
- },
- /*
- * This method contains the initialization of the object and view type
- * as an event in GA.
- */
- on_state_pushed: function(state) {
- // Track only pages corresponding to a 'normal' view of OpenERP, views
- // related to client actions are tracked by the action manager
- if (state.model && state.view_type) {
- // Track the page
- var url = instance.web_analytics.generateUrl({'model': state.model, 'view_type': state.view_type});
- this._push_event({
- 'category': state.model,
- 'action': state.view_type,
- 'label': url,
- });
- this._push_pageview(url);
- }
- },
- /*
- * This method includes the tracker into views and managers. It can be overriden
- * by other modules in order to extend tracking functionalities
- */
- include_tracker: function() {
- var t = this;
- // Track the events related with the creation and the modification of records,
- // the view type is always form
- instance.web.FormView.include({
- init: function(parent, dataset, view_id, options) {
- this._super.apply(this, arguments);
- var self = this;
- this.on('record_created', self, function(r) {
- var url = instance.web_analytics.generateUrl({'model': self.model, 'view_type': 'form'});
- t._push_event({
- 'category': self.model,
- 'action': 'create',
- 'label': url,
- 'noninteraction': true,
- });
- });
- this.on('record_saved', self, function(r) {
- var url = instance.web_analytics.generateUrl({'model': self.model, 'view_type': 'form'});
- t._push_event({
- 'category': self.model,
- 'action': 'save',
- 'label': url,
- 'noninteraction': true,
- });
- });
- }
- });
-
- // Track client actions
- instance.web.ActionManager.include({
- ir_actions_client: function (action, options) {
- var url = instance.web_analytics.generateUrl({'action': action.tag});
- t._push_event({
- 'category': action.type,
- 'action': action.tag,
- 'label': url,
- });
- t._push_pageview(url);
- return this._super.apply(this, arguments);
- },
+ });
+ _gaq.push(['_trackTrans']);
+ },
+ /*
+ * This method contains the initialization of the object and view type
+ * as an event in GA.
+ */
+ on_state_pushed: function(state) {
+ // Track only pages corresponding to a 'normal' view of OpenERP, views
+ // related to client actions are tracked by the action manager
+ if (state.model && state.view_type) {
+ // Track the page
+ var url = generateUrl({'model': state.model, 'view_type': state.view_type});
+ this._push_event({
+ 'category': state.model,
+ 'action': state.view_type,
+ 'label': url,
});
-
- // Track button events
- instance.web.View.include({
- do_execute_action: function(action_data, dataset, record_id, on_closed) {
- var category = this.model || dataset.model || '';
- var action;
- if (action_data.name && _.isNaN(action_data.name-0)) {
- action = action_data.name;
- } else {
- action = action_data.string || action_data.special || '';
- }
- var url = instance.web_analytics.generateUrl({'model': category, 'view_type': this.view_type});
+ this._push_pageview(url);
+ }
+ },
+ /*
+ * This method includes the tracker into views and managers. It can be overriden
+ * by other modules in order to extend tracking functionalities
+ */
+ include_tracker: function() {
+ var t = this;
+ // Track the events related with the creation and the modification of records,
+ // the view type is always form
+ FormView.include({
+ init: function(parent, dataset, view_id, options) {
+ this._super.apply(this, arguments);
+ var self = this;
+ this.on('record_created', self, function(r) {
+ var url = generateUrl({'model': self.model, 'view_type': 'form'});
t._push_event({
- 'category': category,
- 'action': action,
+ 'category': self.model,
+ 'action': 'create',
'label': url,
'noninteraction': true,
});
- return this._super.apply(this, arguments);
- },
- });
-
- // Track error events
- instance.web.CrashManager.include({
- show_error: function(error) {
- var hash = window.location.hash;
- var params = $.deparam(hash.substr(hash.indexOf('#')+1));
- var options = {};
- if (params.model && params.view_type) {
- options = {'model': params.model, 'view_type': params.view_type};
- } else {
- options = {'action': params.action};
- }
- var url = instance.web_analytics.generateUrl(options);
+ });
+ this.on('record_saved', self, function(r) {
+ var url = generateUrl({'model': self.model, 'view_type': 'form'});
t._push_event({
- 'category': options.model || "ir.actions.client",
- 'action': "error " + (error.code ? error.message + error.data.message : error.type + error.data.debug),
+ 'category': self.model,
+ 'action': 'save',
'label': url,
'noninteraction': true,
});
- this._super.apply(this, arguments);
- },
- });
- },
- });
+ });
+ }
+ });
- // ----------------------------------------------------------------
- // utility functions
- // ----------------------------------------------------------------
+ // Track client actions
+ ActionManager.include({
+ ir_actions_client: function (action, options) {
+ var url = generateUrl({'action': action.tag});
+ t._push_event({
+ 'category': action.type,
+ 'action': action.tag,
+ 'label': url,
+ });
+ t._push_pageview(url);
+ return this._super.apply(this, arguments);
+ },
+ });
- instance.web_analytics.generateUrl = function(options) {
- var url = '';
- var keys = _.keys(options);
- keys = _.sortBy(keys, function(i) { return i;});
- _.each(keys, function(key) {
- url += '/' + key + '/' + options[key];
+ // Track button events
+ View.include({
+ do_execute_action: function(action_data, dataset, record_id, on_closed) {
+ var category = this.model || dataset.model || '';
+ var action;
+ if (action_data.name && _.isNaN(action_data.name-0)) {
+ action = action_data.name;
+ } else {
+ action = action_data.string || action_data.special || '';
+ }
+ var url = generateUrl({'model': category, 'view_type': this.view_type});
+ t._push_event({
+ 'category': category,
+ 'action': action,
+ 'label': url,
+ 'noninteraction': true,
+ });
+ return this._super.apply(this, arguments);
+ },
});
- return url;
- };
- // kept for API compatibility
- instance.web_analytics.setupTracker = function(wc) {
- return wc.tracker.initialized;
- };
+ // Track error events
+ CrashManager.include({
+ show_error: function(error) {
+ var hash = window.location.hash;
+ var params = $.deparam(hash.substr(hash.indexOf('#')+1));
+ var options = {};
+ if (params.model && params.view_type) {
+ options = {'model': params.model, 'view_type': params.view_type};
+ } else {
+ options = {'action': params.action};
+ }
+ var url = generateUrl(options);
+ t._push_event({
+ 'category': options.model || "ir.actions.client",
+ 'action': "error " + (error.code ? error.message + error.data.message : error.type + error.data.debug),
+ 'label': url,
+ 'noninteraction': true,
+ });
+ this._super.apply(this, arguments);
+ },
+ });
+ },
+});
- instance.web.Client.include({
- bind_events: function() {
- this._super.apply(this, arguments);
- this.tracker = new instance.web_analytics.Tracker(this);
- },
- });
+// ----------------------------------------------------------------
+// utility functions
+// ----------------------------------------------------------------
- instance.web.Session.include({
- session_authenticate: function() {
- return $.when(this._super.apply(this, arguments)).then(function() {
- // the call to bind_events() may have been delayed in some embed
- // cases, and when that happens we can skip the push, as the
- // proper one will be done when bind_event is eventually called.
- if (instance.client && instance.client.tracker) {
- instance.client.tracker._push_customvars();
- }
- });
- },
+var generateUrl = function(options) {
+ var url = '';
+ var keys = _.keys(options);
+ keys = _.sortBy(keys, function(i) { return i;});
+ _.each(keys, function(key) {
+ url += '/' + key + '/' + options[key];
});
-
+ return url;
+};
+
+// kept for API compatibility
+var setupTracker = function(wc) {
+ return wc.tracker.initialized;
};
+
+WebClient.include({
+ bind_events: function() {
+ this._super.apply(this, arguments);
+ this.tracker = new Tracker(this);
+ },
+});
+
+Session.include({
+ session_authenticate: function() {
+ return $.when(this._super.apply(this, arguments)).then(function() {
+ web_client.tracker._push_customvars();
+ });
+ },
+});
+
+});
diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js
index 3ed3b450a57..4e543a2a0b2 100644
--- a/addons/web_diagram/static/src/js/diagram.js
+++ b/addons/web_diagram/static/src/js/diagram.js
@@ -1,13 +1,19 @@
+odoo.define('web_diagram.DiagramView', ['web.core', 'web.data', 'web.form_common', 'web.View'], function (require) {
/*---------------------------------------------------------
* OpenERP diagram library
*---------------------------------------------------------*/
+"use strict";
-openerp.web_diagram = function (instance) {
-var QWeb = instance.web.qweb,
- _t = instance.web._t,
- _lt = instance.web._lt;
-instance.web.views.add('diagram', 'instance.web.DiagramView');
-instance.web.DiagramView = instance.web.View.extend({
+var core = require('web.core');
+var data = require('web.data');
+var form_common = require('web.form_common');
+var View = require('web.View');
+
+var _t = core._t;
+var _lt = core._lt;
+var QWeb = core.qweb;
+
+var DiagramView = View.extend({
display_name: _lt('Diagram'),
view_type: 'diagram',
searchable: false,
@@ -54,9 +60,9 @@ instance.web.DiagramView = instance.web.View.extend({
this.$el.addClass(this.fields_view.arch.attrs['class']);
_.each(self.labels,function(label){
- html_label = '<p style="padding: 4px;">' + label.attrs.string + "</p>";
+ var html_label = '<p style="padding: 4px;">' + label.attrs.string + "</p>";
self.$el.find('.oe_diagram_header').append(html_label);
- })
+ });
this.init_pager();
@@ -90,16 +96,16 @@ instance.web.DiagramView = instance.web.View.extend({
_.each(this.nodes.children, function(child) {
if(child.attrs.invisible == '1')
- params['invisible_nodes'].push(child.attrs.name);
+ params.invisible_nodes.push(child.attrs.name);
else {
- params['visible_nodes'].push(child.attrs.name);
- params['node_fields'].push(self.fields[child.attrs.name]['string']|| this.toTitleCase(child.attrs.name));
+ params.visible_nodes.push(child.attrs.name);
+ params.node_fields.push(self.fields[child.attrs.name]['string']|| this.toTitleCase(child.attrs.name));
}
});
_.each(this.connectors.children, function(conn) {
- params['connectors_fields'].push(self.fields[conn.attrs.name]['string']|| this.toTitleCase(conn.attrs.name));
- params['connectors'].push(conn.attrs.name);
+ params.connectors_fields.push(self.fields[conn.attrs.name]['string']|| this.toTitleCase(conn.attrs.name));
+ params.connectors.push(conn.attrs.name);
});
this.rpc(
'/web_diagram/diagram/get_diagram_info',params).done(function(result) {
@@ -209,7 +215,7 @@ instance.web.DiagramView = instance.web.View.extend({
if(!confirm(_t("Deleting this node cannot be undone.\nIt will also delete all connected transitions.\n\nAre you sure ?"))){
return $.Deferred().reject().promise();
}
- return new instance.web.DataSet(self,self.node).unlink([cutenode.id]);
+ return new data.DataSet(self,self.node).unlink([cutenode.id]);
};
CuteEdge.double_click_callback = function(cuteedge){
self.edit_connector(cuteedge.id);
@@ -227,7 +233,7 @@ instance.web.DiagramView = instance.web.View.extend({
if(!confirm(_t("Deleting this transition cannot be undone.\n\nAre you sure ?"))){
return $.Deferred().reject().promise();
}
- return new instance.web.DataSet(self,self.connector).unlink([cuteedge.id]);
+ return new data.DataSet(self,self.connector).unlink([cuteedge.id]);
};
},
@@ -236,7 +242,7 @@ instance.web.DiagramView = instance.web.View.extend({
edit_node: function(node_id){
var self = this;
var title = _t('Activity');
- var pop = new instance.web.form.FormOpenPopup(self);
+ var pop = new form_common.FormOpenPopup(self);
pop.show_element(
self.node,
@@ -270,7 +276,7 @@ instance.web.DiagramView = instance.web.View.extend({
add_node: function(){
var self = this;
var title = _t('Activity');
- var pop = new instance.web.form.SelectCreatePopup(self);
+ var pop = new form_common.SelectCreatePopup(self);
pop.select_element(
self.node,
{
@@ -302,7 +308,7 @@ instance.web.DiagramView = instance.web.View.extend({
edit_connector: function(connector_id){
var self = this;
var title = _t('Transition');
- var pop = new instance.web.form.FormOpenPopup(self);
+ var pop = new form_common.FormOpenPopup(self);
pop.show_element(
self.connector,
parseInt(connector_id,10), //FIXME Isn't connector_id supposed to be an int ?
@@ -321,7 +327,7 @@ instance.web.DiagramView = instance.web.View.extend({
add_connector: function(node_source_id, node_dest_id, dummy_cuteedge){
var self = this;
var title = _t('Transition');
- var pop = new instance.web.form.SelectCreatePopup(self);
+ var pop = new form_common.SelectCreatePopup(self);
pop.select_element(
self.connector,
@@ -420,4 +426,9 @@ instance.web.DiagramView = instance.web.View.extend({
return $.when(this._super(), this.execute_pager_action('reload'));
}
});
-};
+
+core.view_registry.add('diagram', DiagramView);
+
+return DiagramView;
+
+});
diff --git a/addons/web_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js
index 47692571f4c..ce9bce91258 100644
--- a/addons/web_gantt/static/src/js/gantt.js
+++ b/addons/web_gantt/static/src/js/gantt.js
@@ -1,18 +1,25 @@
+odoo.define('web_gantt.GanttView', ['web.core', 'web.form_common', 'web.formats', 'web.Model', 'web.time', 'web.View'], function (require) {
+"use strict";
/*---------------------------------------------------------
- * OpenERP web_gantt
+ * Odoo web_gantt
*---------------------------------------------------------*/
-openerp.web_gantt = function (instance) {
-var _t = instance.web._t,
- _lt = instance.web._lt;
-var QWeb = instance.web.qweb;
-instance.web.views.add('gantt', 'instance.web_gantt.GanttView');
-instance.web_gantt.GanttView = instance.web.View.extend({
+var core = require('web.core');
+var form_common = require('web.form_common');
+var formats = require('web.formats');
+var Model = require('web.Model');
+var time = require('web.time');
+var View = require('web.View');
+
+var _lt = core._lt;
+var QWeb = core.qweb;
+
+
+var GanttView = View.extend({
display_name: _lt('Gantt'),
template: "GanttView",
view_type: "gantt",
init: function() {
- var self = this;
this._super.apply(this, arguments);
this.has_been_loaded = $.Deferred();
this.chart_id = _.uniqueId();
@@ -24,7 +31,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({
var self = this;
this.fields_view = fields_view_get;
this.$el.addClass(this.fields_view.arch.attrs['class']);
- return self.alive(new instance.web.Model(this.dataset.model)
+ return self.alive(new Model(this.dataset.model)
.call('fields_get')).then(function (fields) {
self.fields = fields;
self.has_been_loaded.resolve();
@@ -81,7 +88,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({
group_bys = [group_bys[0]];
}
// if there is no group by, simulate it
- if (group_bys.length == 0) {
+ if (group_bys.length === 0) {
group_bys = ["_pseudo_group_by"];
_.each(tasks, function(el) {
el._pseudo_group_by = "Gantt View";
@@ -107,7 +114,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({
group.tasks = split_groups(group.tasks, _.rest(group_bys));
});
return groups;
- }
+ };
var groups = split_groups(tasks, group_bys);
// track ids of task items for context menu
@@ -124,7 +131,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({
var task_infos = _.compact(_.map(task.tasks, function(sub_task) {
return generate_task_info(sub_task, level + 1);
}));
- if (task_infos.length == 0)
+ if (task_infos.length === 0)
return;
var task_start = _.reduce(_.pluck(task_infos, "task_start"), function(date, memo) {
return memo === undefined || date < memo ? date : memo;
@@ -133,8 +140,8 @@ instance.web_gantt.GanttView = instance.web.View.extend({
return memo === undefined || date > memo ? date : memo;
}, undefined);
var duration = (task_stop.getTime() - task_start.getTime()) / (1000 * 60 * 60);
- var group_name = task.name ? instance.web.format_value(task.name, self.fields[group_bys[level]]) : "-";
- if (level == 0) {
+ var group_name = task.name ? formats.format_value(task.name, self.fields[group_bys[level]]) : "-";
+ if (level === 0) {
var group = new GanttProjectInfo(_.uniqueId("gantt_project_"), group_name, task_start);
_.each(task_infos, function(el) {
group.addTask(el.task_info);
@@ -150,20 +157,20 @@ instance.web_gantt.GanttView = instance.web.View.extend({
} else {
var task_name = task.__name;
var duration_in_business_hours = false;
- var task_start = instance.web.auto_str_to_date(task[self.fields_view.arch.attrs.date_start]);
+ var task_start = time.auto_str_to_date(task[self.fields_view.arch.attrs.date_start]);
if (!task_start)
return;
var task_stop;
if (self.fields_view.arch.attrs.date_stop) {
- task_stop = instance.web.auto_str_to_date(task[self.fields_view.arch.attrs.date_stop]);
+ task_stop = time.auto_str_to_date(task[self.fields_view.arch.attrs.date_stop]);
if (!task_stop)
task_stop = task_start;
} else { // we assume date_duration is defined
- var tmp = instance.web.format_value(task[self.fields_view.arch.attrs.date_delay],
+ var tmp = formats.format_value(task[self.fields_view.arch.attrs.date_delay],
self.fields[self.fields_view.arch.attrs.date_delay]);
if (!tmp)
return;
- var m_task_start = moment(task_start).add(instance.web.parse_value(tmp, {type:"float"}), 'hours');
+ var m_task_start = moment(task_start).add(formats.parse_value(tmp, {type:"float"}), 'hours');
task_stop = m_task_start.toDate();
}
var duration = (task_stop.getTime() - task_start.getTime()) / (1000 * 60 * 60);
@@ -176,7 +183,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({
task_ids[id] = task_info;
return {task_info: task_info, task_start: task_start, task_stop: task_stop};
}
- }
+ };
var gantt = new GanttChart();
_.each(_.compact(_.map(groups, function(e) {return generate_task_info(e, 0);})), function(project) {
gantt.addProject(project);
@@ -220,10 +227,10 @@ instance.web_gantt.GanttView = instance.web.View.extend({
var end = moment(start).add(duration, 'hours').toDate();
var data = {};
data[self.fields_view.arch.attrs.date_start] =
- instance.web.auto_date_to_str(start, self.fields[self.fields_view.arch.attrs.date_start].type);
+ time.auto_date_to_str(start, self.fields[self.fields_view.arch.attrs.date_start].type);
if (self.fields_view.arch.attrs.date_stop) {
data[self.fields_view.arch.attrs.date_stop] =
- instance.web.auto_date_to_str(end, self.fields[self.fields_view.arch.attrs.date_stop].type);
+ time.auto_date_to_str(end, self.fields[self.fields_view.arch.attrs.date_stop].type);
} else { // we assume date_duration is defined
data[self.fields_view.arch.attrs.date_delay] = duration;
}
@@ -231,7 +238,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({
},
on_task_display: function(task) {
var self = this;
- var pop = new instance.web.form.FormOpenPopup(self);
+ var pop = new form_common.FormOpenPopup(self);
pop.on('write_completed',self,self.reload);
pop.show_element(
self.dataset.model,
@@ -242,7 +249,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({
},
on_task_create: function() {
var self = this;
- var pop = new instance.web.form.SelectCreatePopup(this);
+ var pop = new form_common.SelectCreatePopup(this);
pop.on("elements_selected", self, function() {
self.reload();
});
@@ -255,4 +262,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({
},
});
-};
+core.view_registry.add('gantt', GanttView);
+
+return GanttView;
+});
diff --git a/addons/web_kanban_gauge/static/src/js/kanban_gauge.js b/addons/web_kanban_gauge/static/src/js/kanban_gauge.js
index 27c83f285e2..5af9f4adf08 100644
--- a/addons/web_kanban_gauge/static/src/js/kanban_gauge.js
+++ b/addons/web_kanban_gauge/static/src/js/kanban_gauge.js
@@ -1,4 +1,12 @@
-openerp.web_kanban_gauge = function (instance) {
+odoo.define('web_kanban_gauge.widget', ['web.core', 'web_kanban.common'], function (require) {
+"use strict";
+
+var core = require('web.core');
+var kanban_common = require('web_kanban.common');
+
+var AbstractField = kanban_common.AbstractField;
+var fields_registry = kanban_common.registry;
+var _t = core._t;
/**
* Kanban widgets: GaugeWidget
@@ -17,10 +25,8 @@ openerp.web_kanban_gauge = function (instance) {
* - on_click_label: optional label of the input displayed when clicking
*
*/
-var _t = instance.web._t,
- _lt = instance.web._lt;
-instance.web_kanban.GaugeWidget = instance.web_kanban.AbstractField.extend({
+var GaugeWidget = AbstractField.extend({
className: "oe_gauge",
start: function() {
@@ -131,7 +137,7 @@ instance.web_kanban.GaugeWidget = instance.web_kanban.AbstractField.extend({
event.stopPropagation();
flag_open = false;
})
- .blur(function (event) {
+ .blur(function () {
if(!flag_open) {
self.$el.find(".oe_justgage_edit").remove();
$svg.fadeTo(0, 1);
@@ -156,6 +162,6 @@ instance.web_kanban.GaugeWidget = instance.web_kanban.AbstractField.extend({
},
});
-instance.web_kanban.fields_registry.add("gauge", "instance.web_kanban.GaugeWidget");
+fields_registry.add("gauge", GaugeWidget);
-}
+});
diff --git a/addons/web_kanban_sparkline/static/src/js/kanban_sparkline.js b/addons/web_kanban_sparkline/static/src/js/kanban_sparkline.js
index b8c7761d103..1c48fa3bb32 100644
--- a/addons/web_kanban_sparkline/static/src/js/kanban_sparkline.js
+++ b/addons/web_kanban_sparkline/static/src/js/kanban_sparkline.js
@@ -1,11 +1,17 @@
-openerp.web_kanban_sparkline = function (instance) {
+odoo.define(['web_kanban.common'], function (require) {
+"use strict";
+
+var kanban_common = require('web_kanban.common');
+
+var AbstractField = kanban_common.AbstractField;
+var fields_registry = kanban_common.registry;
/**
* Kanban widgets: Sparkline
*
*/
-instance.web_kanban.SparklineBarWidget = instance.web_kanban.AbstractField.extend({
+var SparklineBarWidget = AbstractField.extend({
className: "oe_sparkline_bar",
start: function() {
var self = this;
@@ -15,10 +21,9 @@ instance.web_kanban.SparklineBarWidget = instance.web_kanban.AbstractField.exten
var value = _.pluck(field_value, 'value');
var tooltips = _.pluck(field_value, 'tooltip');
var suffix = self.options.tooltip_suffix || "";
- var tooltipFormat = self.options.type == 'tristate' && '{{offset:offset}}' + suffix || '{{offset:offset}} {{value:value}}' + suffix
+ var tooltipFormat = self.options.type == 'tristate' && '{{offset:offset}}' + suffix || '{{offset:offset}} {{value:value}}' + suffix;
var sparkline_options = _.extend({
type: 'bar',
- barWidth: 5,
height: '20px',
barWidth: 4,
barSpacing: 1,
@@ -30,12 +35,12 @@ instance.web_kanban.SparklineBarWidget = instance.web_kanban.AbstractField.exten
}
}, self.options);
self.$el.sparkline(value, sparkline_options);
- self.$el.tooltip({delay: {show: self.options.delayIn || 0, hide: 0}, title: function(){return title}});
+ self.$el.tooltip({delay: {show: self.options.delayIn || 0, hide: 0}, title: function(){return title;}});
}, 0);
},
});
-instance.web_kanban.fields_registry.add("sparkline_bar", "instance.web_kanban.SparklineBarWidget");
+fields_registry.add("sparkline_bar", SparklineBarWidget);
-}
+});
diff --git a/addons/web_linkedin/static/src/js/linkedin.js b/addons/web_linkedin/static/src/js/linkedin.js
index 5253d731635..80425afff29 100644
--- a/addons/web_linkedin/static/src/js/linkedin.js
+++ b/addons/web_linkedin/static/src/js/linkedin.js
@@ -1,527 +1,537 @@
+odoo.define('web_linkedin.web_linkedin', ['web.core', 'web.data', 'web.Dialog', 'web.form_widgets', 'web.Model', 'web.utils', 'web.Widget'], function (require) {
+"use strict";
+
+var core = require('web.core');
+var data = require('web.data');
+var Dialog = require('web.Dialog');
+var form_widgets = require('web.form_widgets');
+var Model = require('web.Model');
+var utils = require('web.utils');
+var Widget = require('web.Widget');
+
/*---------------------------------------------------------
* OpenERP web_linkedin (module)
*---------------------------------------------------------*/
-openerp.web_linkedin = function(instance) {
- var QWeb = instance.web.qweb;
- var _t = instance.web._t;
-
- /*
- * instance.web_linkedin.tester.test_authentication()
- * Call check if the Linkedin session is open or open a connection popup
- * return a deferrer :
- * - resolve if the authentication is true
- * - reject if the authentication is wrong or when the user logout
- */
- instance.web_linkedin.LinkedinTester = instance.web.Class.extend({
- init: function() {
- this.linkedin_added = false;
- this.linkedin_def = $.Deferred();
- this.auth_def = $.Deferred();
- },
- error_catcher: function (callback) {
- var self = this;
- if (!this.realError) {
- this.realError = Error;
- this.window_onerror = window.onerror;
+var QWeb = core.qweb;
+var _t = core._t;
+
+/*
+* instance.web_linkedin.tester.test_authentication()
+* Call check if the Linkedin session is open or open a connection popup
+* return a deferrer :
+* - resolve if the authentication is true
+* - reject if the authentication is wrong or when the user logout
+*/
+var LinkedinTester = core.Class.extend({
+ init: function() {
+ this.linkedin_added = false;
+ this.linkedin_def = $.Deferred();
+ this.auth_def = $.Deferred();
+ },
+ error_catcher: function (callback) {
+ var self = this;
+ if (!this.realError) {
+ this.realError = Error;
+ this.window_onerror = window.onerror;
+ }
+ if (!callback) {
+ Error = self.realError;
+ return false;
+ }
+ this.callback = callback;
+ window.onerror = function(message, fileName, lineNumber) {
+ if (!window.onerror.prototype.catched) {
+ self.window_onerror(message, fileName, lineNumber);
}
- if (!callback) {
- Error = self.realError;
- return false;
+ if (self.realError != Error) {
+ window.onerror.prototype.catched = false;
+ } else {
+ window.onerror = self.window_onerror;
}
- this.callback = callback;
- window.onerror = function(message, fileName, lineNumber) {
- if (!window.onerror.prototype.catched) {
- self.window_onerror(message, fileName, lineNumber);
- }
- if (self.realError != Error) {
- window.onerror.prototype.catched = false;
+ };
+ window.onerror.prototype.catched = false;
+ Error = function (message, fileName, lineNumber) {
+ this.name = message;
+ this.message = message;
+ this.fileName = fileName;
+ this.lineNumber = lineNumber;
+ this.caller = Error.caller.toString();
+ window.onerror.prototype.catched = self.callback.apply(self, [this]);
+ return this;
+ };
+ Error.prototype.toString = function () {return this.name;};
+ },
+ linkedin_disabled: function(error) {
+ this.linkedin_def.reject();
+ this.auth_def.reject();
+ IN = false;
+ new Dialog(this, {
+ title: _t("LinkedIn is not enabled"),
+ buttons: [
+ {text: _t("Ok"), click: function() { this.parents('.modal').modal('hide'); }}
+ ],
+ }, QWeb.render('LinkedIn.DisabledWarning', {error: error})).open();
+ },
+ test_linkedin: function() {
+ var self = this;
+ return this.test_api_key().then(function() {
+ if (self.linkedin_added) {
+ return self.linkedin_def;
+ }
+ self.$linkedin = $('<div class="oe_linkedin_login_hidden" style="display:none;"><script type="in/Login"></script></div>');
+
+ self.error_catcher(function (error) {
+ if (!!error.caller.match(/API Key is invalid/)) {
+ self.linkedin_disabled(error);
+ self.$linkedin.remove();
+ console.debug("LinkedIn JavaScript removed.");
+ self.linkedin_added = false;
+ self.error_catcher(false);
+ return true;
} else {
- window.onerror = self.window_onerror;
- }
- };
- window.onerror.prototype.catched = false;
- Error = function (message, fileName, lineNumber) {
- this.name = message;
- this.message = message;
- this.fileName = fileName;
- this.lineNumber = lineNumber;
- this.caller = Error.caller.toString();
- window.onerror.prototype.catched = self.callback.apply(self, [this]);
- return this;
- };
- Error.prototype.toString = function () {return this.name;};
- },
- linkedin_disabled: function(error) {
- this.linkedin_def.reject();
- this.auth_def.reject();
- IN = false;
- var dialog = new instance.web.Dialog(this, {
- title: _t("LinkedIn is not enabled"),
- buttons: [
- {text: _t("Ok"), click: function() { this.parents('.modal').modal('hide'); }}
- ],
- }, QWeb.render('LinkedIn.DisabledWarning', {error: error})).open();
- },
- test_linkedin: function() {
- var self = this;
- return this.test_api_key().then(function() {
- if (self.linkedin_added) {
- return self.linkedin_def;
+ return false;
}
- self.$linkedin = $('<div class="oe_linkedin_login_hidden" style="display:none;"><script type="in/Login"></script></div>');
+ });
+ window.setTimeout(function () {self.error_catcher(false);}, 5000);
- self.error_catcher(function (error) {
- if (!!error.caller.match(/API Key is invalid/)) {
- self.linkedin_disabled(error);
- self.$linkedin.remove();
- console.debug("LinkedIn JavaScript removed.");
- self.linkedin_added = false;
- self.error_catcher(false);
- return true;
- } else {
- return false;
- }
+ $("body").append(self.$linkedin);
+ var tag = document.createElement('script');
+ tag.type = 'text/javascript';
+ tag.src = "https://platform.linkedin.com/in.js";
+ tag.innerHTML = 'api_key : ' + self.api_key + '\nauthorize : true\nscope: r_network r_basicprofile'; // r_contactinfo r_fullprofile r_emailaddress';
+
+ document.getElementsByTagName('head')[0].appendChild(tag);
+ self.linkedin_added = true;
+ $(tag).load(function(event) {
+ console.debug("LinkedIn JavaScript inserted.");
+ IN.Event.on(IN, "frameworkLoaded", function() {
+ self.error_catcher(false);
+ console.debug("LinkedIn DOM node inserted and frameworkLoaded.");
});
- window.setTimeout(function () {self.error_catcher(false);}, 5000);
+ IN.Event.on(IN, "systemReady", function() {
+ self.linkedin_def.resolve();
+ console.debug("LinkedIn systemReady.");
+ });
+ IN.Event.on(IN, "auth", function() {
+ self.auth_def.resolve();
+ });
+ IN.Event.on(IN, "logout", function() {
+ self.auth_def.reject();
+ self.auth_def = $.Deferred();
+ });
+ });
+ return self.linkedin_def.promise();
+ });
+ },
+ test_api_key: function() {
+ var self = this;
+ if (this.api_key) {
+ return $.when();
+ }
+ return new Model("ir.config_parameter").call("get_param", ["web.linkedin.apikey"]).then(function(a) {
+ if (!!a) {
+ self.api_key = a;
+ return true;
+ } else {
+ return $.Deferred().reject();
+ }
+ });
+ },
+ test_authentication: function() {
+ var self = this;
+ this.linkedin_def.done(function () {
+ if (IN.User.isAuthorized()) {
+ self.auth_def.resolve();
+ } else {
+ IN.User.authorize();
+ }
+ });
+ return this.auth_def.promise();
+ },
+});
- $("body").append(self.$linkedin);
- var tag = document.createElement('script');
- tag.type = 'text/javascript';
- tag.src = "https://platform.linkedin.com/in.js";
- tag.innerHTML = 'api_key : ' + self.api_key + '\nauthorize : true\nscope: r_network r_basicprofile'; // r_contactinfo r_fullprofile r_emailaddress';
-
- document.getElementsByTagName('head')[0].appendChild(tag);
- self.linkedin_added = true;
- $(tag).load(function(event) {
- console.debug("LinkedIn JavaScript inserted.");
- IN.Event.on(IN, "frameworkLoaded", function() {
- self.error_catcher(false);
- console.debug("LinkedIn DOM node inserted and frameworkLoaded.");
- });
- IN.Event.on(IN, "systemReady", function() {
- self.linkedin_def.resolve();
- console.debug("LinkedIn systemReady.");
- });
- IN.Event.on(IN, "auth", function() {
- self.auth_def.resolve();
- });
- IN.Event.on(IN, "logout", function() {
- self.auth_def.reject();
- self.auth_def = $.Deferred();
+var tester = new LinkedinTester();
+
+var Linkedin = form_widgets.FieldChar.extend({
+ init: function() {
+ this._super.apply(this, arguments);
+ this.display_dm = new utils.DropMisordered(true);
+ },
+ initialize_content: function() {
+ var $ht = $(QWeb.render("FieldChar.linkedin"));
+ var $in = this.$("input");
+ $in.replaceWith($ht);
+ this.$(".oe_linkedin_input").append($in);
+ this.$(".oe_linkedin_img").click(_.bind(this.search_linkedin, this));
+ this._super();
+ },
+ search_linkedin: function() {
+ var self = this;
+ if (!this.open_in_process) {
+ this.open_in_process = true;
+ this.display_dm.add(tester.test_linkedin()).done(function() {
+ self.open_in_process = false;
+ var text = (self.get("value") || "").replace(/^\s+|\s+$/g, "").replace(/\s+/g, " ");
+ tester.test_authentication().done(function() {
+ var pop = new LinkedinSearchPopup(self, text);
+ pop.open();
+ pop.on("selected", this, function(entity) {
+ self.selected_entity(entity);
});
});
- return self.linkedin_def.promise();
});
- },
- test_api_key: function() {
- var self = this;
- if (this.api_key) {
- return $.when();
- }
- return new instance.web.Model("ir.config_parameter").call("get_param", ["web.linkedin.apikey"]).then(function(a) {
- if (!!a) {
- self.api_key = a;
- return true;
- } else {
- return $.Deferred().reject();
+ }
+ },
+ selected_entity: function(entity) {
+ var self = this;
+ this.create_on_change(entity).done(function(to_change) {
+ var values = self.view.get_fields_values();
+ _.each(to_change, function (value, key) {
+ if (!/linkedin/.test(key) && !!values[key]) {
+ if(!_.isArray(values[key])) {
+ delete to_change[key];
+ }
}
});
- },
- test_authentication: function() {
- var self = this;
- this.linkedin_def.done(function () {
- if (IN.User.isAuthorized()) {
- self.auth_def.resolve();
- } else {
- IN.User.authorize();
- }
+ self.view.set_values(to_change);
+ });
+ },
+ create_on_change: function(entity) {
+ return entity.__type === "company" ? this.create_or_modify_company(entity) : this.create_or_modify_partner(entity);
+ },
+ create_or_modify_company: function (entity) {
+ var self = this;
+ var to_change = {};
+ var image_def = null;
+ to_change.is_company = true;
+ to_change.name = entity.name;
+ to_change.image = false;
+ if (entity.logoUrl) {
+ image_def = self.rpc('/web_linkedin/binary/url2binary',
+ {'url': entity.logoUrl}).then(function(data){
+ to_change.image = data;
});
- return this.auth_def.promise();
- },
- });
-
- instance.web_linkedin.tester = new instance.web_linkedin.LinkedinTester();
-
- instance.web_linkedin.Linkedin = instance.web.form.FieldChar.extend({
- init: function() {
- this._super.apply(this, arguments);
- this.display_dm = new instance.web.DropMisordered(true);
- },
- initialize_content: function() {
- var $ht = $(QWeb.render("FieldChar.linkedin"));
- var $in = this.$("input");
- $in.replaceWith($ht);
- this.$(".oe_linkedin_input").append($in);
- this.$(".oe_linkedin_img").click(_.bind(this.search_linkedin, this));
- this._super();
- },
- search_linkedin: function() {
- var self = this;
- if (!this.open_in_process) {
- this.open_in_process = true;
- this.display_dm.add(instance.web_linkedin.tester.test_linkedin()).done(function() {
- self.open_in_process = false;
- var text = (self.get("value") || "").replace(/^\s+|\s+$/g, "").replace(/\s+/g, " ");
- instance.web_linkedin.tester.test_authentication().done(function() {
- var pop = new instance.web_linkedin.LinkedinSearchPopup(self, text);
- pop.open();
- pop.on("selected", this, function(entity) {
- self.selected_entity(entity);
- });
- });
- });
+ }
+ to_change.website = entity.websiteUrl;
+ to_change.phone = false;
+ _.each((entity.locations || {}).values || [], function(el) {
+ to_change.phone = el.contactInfo.phone1;
+ });
+ to_change.linkedin_url = _.str.sprintf("http://www.linkedin.com/company/%d", entity.id);
+
+ _.each(to_change, function (val, key) {
+ if (self.field_manager.datarecord[key]) {
+ to_change[key] = self.field_manager.datarecord[key];
}
- },
- selected_entity: function(entity) {
- var self = this;
- this.create_on_change(entity).done(function(to_change) {
- var values = self.view.get_fields_values();
- _.each(to_change, function (value, key) {
- if (!/linkedin/.test(key) && !!values[key]) {
- if(!_.isArray(values[key])) {
- delete to_change[key];
- }
- }
- })
- self.view.set_values(to_change);
- });
- },
- create_on_change: function(entity) {
- return entity.__type === "company" ? this.create_or_modify_company(entity) : this.create_or_modify_partner(entity);
- },
- create_or_modify_company: function (entity) {
- var self = this;
- var to_change = {};
- var image_def = null;
- to_change.is_company = true;
- to_change.name = entity.name;
- to_change.image = false;
- if (entity.logoUrl) {
- image_def = self.rpc('/web_linkedin/binary/url2binary',
- {'url': entity.logoUrl}).then(function(data){
- to_change.image = data;
+ });
+
+ to_change.child_ids = [];
+ var children_def = $.Deferred();
+ IN.API.PeopleSearch().fields(commonPeopleFields).params({
+ "company-name" : entity.universalName,
+ "current-company": true,
+ "count": 50,
+ }).result(function (result) {
+ console.debug("Linkedin pepople in this company found :", result.numResults, "=>", result.people._count, result.people.values);
+ var result = _.reject(result.people.values || [], function(el) {
+ return ! el.formattedName;
});
- }
- to_change.website = entity.websiteUrl;
- to_change.phone = false;
- _.each((entity.locations || {}).values || [], function(el) {
- to_change.phone = el.contactInfo.phone1;
+ self.create_or_modify_company_partner(result).then(function (childs_to_change) {
+ _.each(childs_to_change, function (data) {
+ // [0,0,data] if it's a new partner
+ to_change.child_ids.push( data.id ? [1, data.id, data] : [0, 0, data] );
+ });
+ children_def.resolve();
+ });
+ }).error(function () {
+ children_def.reject();
});
- to_change.linkedin_url = _.str.sprintf("http://www.linkedin.com/company/%d", entity.id);
-
+
+ return $.when(image_def, children_def).then(function () {
+ return to_change;
+ });
+ },
+ create_or_modify_partner: function (entity, rpc_search_similar_partner) {
+ var self = this;
+ return this.create_or_modify_partner_change(entity).then(function (to_change) {
+ // find similar partners
_.each(to_change, function (val, key) {
if (self.field_manager.datarecord[key]) {
to_change[key] = self.field_manager.datarecord[key];
}
});
-
- to_change.child_ids = [];
- var children_def = $.Deferred();
- IN.API.PeopleSearch().fields(commonPeopleFields).params({
- "company-name" : entity.universalName,
- "current-company": true,
- "count": 50,
- }).result(function (result) {
- console.debug("Linkedin pepople in this company found :", result.numResults, "=>", result.people._count, result.people.values);
- var result = _.reject(result.people.values || [], function(el) {
- return ! el.formattedName;
- });
- self.create_or_modify_company_partner(result).then(function (childs_to_change) {
- _.each(childs_to_change, function (data) {
- // [0,0,data] if it's a new partner
- to_change.child_ids.push( data.id ? [1, data.id, data] : [0, 0, data] );
- });
- children_def.resolve();
- });
- }).error(function () {
- children_def.reject();
- });
-
- return $.when(image_def, children_def).then(function () {
- return to_change;
- });
- },
- create_or_modify_partner: function (entity, rpc_search_similar_partner) {
- var self = this;
- return this.create_or_modify_partner_change(entity).then(function (to_change) {
- // find similar partners
- _.each(to_change, function (val, key) {
- if (self.field_manager.datarecord[key]) {
- to_change[key] = self.field_manager.datarecord[key];
- }
- });
- });
- },
- create_or_modify_partner_change: function (entity) {
- var to_change = {};
- var defs = [];
- to_change.is_company = false;
- to_change.name = entity.formattedName;
- if (entity.pictureUrl) {
- defs.push(this.rpc('/web_linkedin/binary/url2binary',
- {'url': entity.pictureUrl}).then(function(data){
- to_change.image = data;
- }));
+ });
+ },
+ create_or_modify_partner_change: function (entity) {
+ var to_change = {};
+ var defs = [];
+ to_change.is_company = false;
+ to_change.name = entity.formattedName;
+ if (entity.pictureUrl) {
+ defs.push(this.rpc('/web_linkedin/binary/url2binary',
+ {'url': entity.pictureUrl}).then(function(data){
+ to_change.image = data;
+ }));
+ }
+ _.each((entity.phoneNumbers || {}).values || [], function(el) {
+ if (el.phoneType === "mobile") {
+ to_change.mobile = el.phoneNumber;
+ } else {
+ to_change.phone = el.phoneNumber;
}
- _.each((entity.phoneNumbers || {}).values || [], function(el) {
- if (el.phoneType === "mobile") {
- to_change.mobile = el.phoneNumber;
- } else {
- to_change.phone = el.phoneNumber;
- }
- });
- var positions = (entity.positions || {}).values || [];
- for (key in positions) {
- var position = positions[key];
- if (position.isCurrent) {
- var company_name = position.company ? position.company.name : false;
- if (!entity.parent_id && entity.parent_id !== 0 && company_name) {
- defs.push(new instance.web.DataSetSearch(this, 'res.partner').call("search", [[["name", "=", company_name]]]).then(function (data) {
- if(data[0]) to_change.parent_id = data[0];
- else position.title = position.title + ' (' + company_name + ') ';
- to_change.function = position.title;
- }));
- } else if (!entity.__company || !company_name || company_name == entity.__company) {
- to_change.function = position.title + (company_name ? ' (' + company_name + ') ':'');
- }
- break;
+ });
+ var positions = (entity.positions || {}).values || [];
+ for (var key in positions) {
+ var position = positions[key];
+ if (position.isCurrent) {
+ var company_name = position.company ? position.company.name : false;
+ if (!entity.parent_id && entity.parent_id !== 0 && company_name) {
+ defs.push(new data.DataSetSearch(this, 'res.partner').call("search", [[["name", "=", company_name]]]).then(function (data) {
+ if(data[0]) to_change.parent_id = data[0];
+ else position.title = position.title + ' (' + company_name + ') ';
+ to_change.function = position.title;
+ }));
+ } else if (!entity.__company || !company_name || company_name == entity.__company) {
+ to_change.function = position.title + (company_name ? ' (' + company_name + ') ':'');
}
- };
-
- if (entity.parent_id) {
- to_change.parent_id = entity.parent_id;
+ break;
}
- to_change.linkedin_url = to_change.linkedin_public_url = entity.publicProfileUrl || false;
- to_change.linkedin_id = entity.id || false;
+ }
- return $.when.apply($, defs).then(function () {
- return to_change;
- });
- },
- create_or_modify_company_partner: function (entities) {
- var self = this;
- var deferrer = $.Deferred();
- var defs = [];
- var childs_to_change = [];
+ if (entity.parent_id) {
+ to_change.parent_id = entity.parent_id;
+ }
+ to_change.linkedin_url = to_change.linkedin_public_url = entity.publicProfileUrl || false;
+ to_change.linkedin_id = entity.id || false;
- _.each(entities, function (entity, key) {
- var entity = _.extend(entity, {
- '__type': "people",
- '__company': entity.universalName,
- 'parent_id': self.field_manager.datarecord.id || 0
- });
- defs.push(self.create_or_modify_partner_change(entity).then(function (to_change) {
- childs_to_change[key] = to_change;
- }));
+ return $.when.apply($, defs).then(function () {
+ return to_change;
+ });
+ },
+ create_or_modify_company_partner: function (entities) {
+ var self = this;
+ var deferrer = $.Deferred();
+ var defs = [];
+ var childs_to_change = [];
+
+ _.each(entities, function (entity, key) {
+ var entity = _.extend(entity, {
+ '__type': "people",
+ '__company': entity.universalName,
+ 'parent_id': self.field_manager.datarecord.id || 0
});
- $.when.apply($, defs).then(function () {
- new instance.web.DataSetSearch(this, 'res.partner').call("linkedin_check_similar_partner", [entities]).then(function (partners) {
- _.each(partners, function (partner, i) {
- _.each(partner, function (val, key) {
- if (val) {
- childs_to_change[i][key] = val;
- }
- });
+ defs.push(self.create_or_modify_partner_change(entity).then(function (to_change) {
+ childs_to_change[key] = to_change;
+ }));
+ });
+ $.when.apply($, defs).then(function () {
+ new data.DataSetSearch(this, 'res.partner').call("linkedin_check_similar_partner", [entities]).then(function (partners) {
+ _.each(partners, function (partner, i) {
+ _.each(partner, function (val, key) {
+ if (val) {
+ childs_to_change[i][key] = val;
+ }
});
- deferrer.resolve(childs_to_change);
});
+ deferrer.resolve(childs_to_change);
});
- return deferrer;
- }
- });
- instance.web.form.widgets.add('linkedin', 'instance.web_linkedin.Linkedin');
-
- instance.web_linkedin.Linkedin_url = instance.web.form.FieldChar.extend({
- initialize_content: function() {
- this.$("input,span").replaceWith($(QWeb.render("FieldChar.linkedin_url")));
- this._super();
- },
- render_value: function() {
- this._super();
- this.$(".oe_linkedin_url").attr("href", this.field_manager.datarecord.linkedin_url || "#").toggle(!!this.field_manager.datarecord.linkedin_url);
- },
- });
- instance.web.form.widgets.add('linkedin_url', 'instance.web_linkedin.Linkedin_url');
-
+ });
+ return deferrer;
+ }
+});
+core.form_widget_registry.add('linkedin', Linkedin);
- var commonPeopleFields = ["id", "picture-url", "public-profile-url", "first-name", "last-name",
- "formatted-name", "location", "phone-numbers", "im-accounts",
- "main-address", "headline", "positions", "summary", "specialties"];
-
- instance.web_linkedin.LinkedinSearchPopup = instance.web.Dialog.extend({
- template: "Linkedin.popup",
- init: function(parent, search) {
- var self = this;
- if (!IN.User.isAuthorized()) {
- this.$buttons = $("<div/>");
- this.destroy();
- }
- this._super(parent, { 'title': QWeb.render('LinkedIn.AdvancedSearch', {'title': _t("LinkedIn search")}) });
- this.search = search;
- this.limit = 5;
- },
- start: function() {
- this._super();
- this.bind_event();
- this.display_account();
- this.do_search();
- },
- bind_event: function() {
- var self = this;
- this.$el.parents('.modal').on("click", ".oe_linkedin_logout", function () {
- IN.User.logout();
- self.destroy();
- });
- this.$search = this.$el.parents('.modal').find(".oe_linkedin_advanced_search" );
- this.$url = this.$search.find("input[name='search']" );
- this.$button = this.$search.find("button");
+var Linkedin_url = form_widgets.FieldChar.extend({
+ initialize_content: function() {
+ this.$("input,span").replaceWith($(QWeb.render("FieldChar.linkedin_url")));
+ this._super();
+ },
+ render_value: function() {
+ this._super();
+ this.$(".oe_linkedin_url").attr("href", this.field_manager.datarecord.linkedin_url || "#").toggle(!!this.field_manager.datarecord.linkedin_url);
+ },
+});
+core.form_widget_registry.add('linkedin_url', Linkedin_url);
- this.$button.on("click", function (e) {
- e.stopPropagation();
- self.do_search(self.$url.val() || '');
- });
- this.$url
- .on("click mousedown mouseup", function (e) {
- e.stopPropagation();
- }).on("keydown", function (e) {
- if(e.keyCode == 13) {
- $(e.target).blur();
- self.$button.click();
- }
- });
- },
- display_account: function() {
- var self = this;
- IN.API.Profile("me")
- .fields(["firstName", "lastName"])
- .result(function (result) {
- $(QWeb.render('LinkedIn.loginInformation', result.values[0])).appendTo(self.$el.parents('.modal').find(".oe_dialog_custom_buttons"));
- })
- },
- do_search: function(url) {
- if (!IN.User || !IN.User.isAuthorized()) {
- this.destroy();
- }
- var self = this;
- var deferrers = [];
- this.$(".oe_linkedin_pop_c, .oe_linkedin_pop_p").empty();
- if (url && url.length) {
- var deferrer_c = $.Deferred();
- var deferrer_p = $.Deferred();
- deferrers.push(deferrer_c, deferrer_p);
+var commonPeopleFields = ["id", "picture-url", "public-profile-url", "first-name", "last-name",
+ "formatted-name", "location", "phone-numbers", "im-accounts",
+ "main-address", "headline", "positions", "summary", "specialties"];
- var url = url.replace(/\/+$/, '');
- var uid = url.replace(/(.*linkedin\.com\/[a-z]+\/)|(^.*\/company\/)|(\&.*$)/gi, '');
+var LinkedinSearchPopup = Dialog.extend({
+ template: "Linkedin.popup",
+ init: function(parent, search) {
+ if (!IN.User.isAuthorized()) {
+ this.$buttons = $("<div/>");
+ this.destroy();
+ }
+ this._super(parent, { 'title': QWeb.render('LinkedIn.AdvancedSearch', {'title': _t("LinkedIn search")}) });
+ this.search = search;
+ this.limit = 5;
+ },
+ start: function() {
+ this._super();
+ this.bind_event();
+ this.display_account();
+ this.do_search();
+ },
+ bind_event: function() {
+ var self = this;
+ this.$el.parents('.modal').on("click", ".oe_linkedin_logout", function () {
+ IN.User.logout();
+ self.destroy();
+ });
+ this.$search = this.$el.parents('.modal').find(".oe_linkedin_advanced_search" );
+ this.$url = this.$search.find("input[name='search']" );
+ this.$button = this.$search.find("button");
- IN.API.Raw(_.str.sprintf(
- "companies/universal-name=%s:(id,name,logo-url,description,industry,website-url,locations,universal-name)",
- encodeURIComponent(uid.toLowerCase()))).result(function (result) {
- self.do_result_companies({'companies': {'values': [result]}});
- deferrer_c.resolve();
- }).error(function (error) {
- self.do_result_companies({});
- deferrer_c.resolve();
- });
+ this.$button.on("click", function (e) {
+ e.stopPropagation();
+ self.do_search(self.$url.val() || '');
+ });
+ this.$url
+ .on("click mousedown mouseup", function (e) {
+ e.stopPropagation();
+ }).on("keydown", function (e) {
+ if(e.keyCode == 13) {
+ $(e.target).blur();
+ self.$button.click();
+ }
+ });
+ },
+ display_account: function() {
+ var self = this;
+ IN.API.Profile("me")
+ .fields(["firstName", "lastName"])
+ .result(function (result) {
+ $(QWeb.render('LinkedIn.loginInformation', result.values[0])).appendTo(self.$el.parents('.modal').find(".oe_dialog_custom_buttons"));
+ });
+ },
+ do_search: function(url) {
+ if (!IN.User || !IN.User.isAuthorized()) {
+ this.destroy();
+ }
+ var self = this;
+ var deferrers = [];
+ this.$(".oe_linkedin_pop_c, .oe_linkedin_pop_p").empty();
- var url_public = "http://www.linkedin.com/pub/"+uid;
- IN.API.Profile("url="+ encodeURI(url_public).replace(/%2F/g, '/'))
- .fields(commonPeopleFields)
- .result(function(result) {
- self.do_result_people({'people': result});
- deferrer_p.resolve();
- }).error(function (error) {
- self.do_warn( _t("LinkedIn error"), _t("LinkedIn is temporary down for the searches by url."));
- self.do_result_people({});
- deferrer_p.resolve();
- });
+ if (url && url.length) {
+ var deferrer_c = $.Deferred();
+ var deferrer_p = $.Deferred();
+ deferrers.push(deferrer_c, deferrer_p);
- this.search = url;
- }
+ var url = url.replace(/\/+$/, '');
+ var uid = url.replace(/(.*linkedin\.com\/[a-z]+\/)|(^.*\/company\/)|(\&.*$)/gi, '');
- var deferrer_c_k = $.Deferred();
- var deferrer_p_k = $.Deferred();
- deferrers.push(deferrer_c_k, deferrer_p_k);
IN.API.Raw(_.str.sprintf(
- "company-search:(companies:" +
- "(id,name,logo-url,description,industry,website-url,locations,universal-name))?keywords=%s&count=%d",
- encodeURI(this.search), this.limit)).result(function (result) {
- self.do_result_companies(result);
- deferrer_c_k.resolve();
- });
- IN.API.PeopleSearch().fields(commonPeopleFields).params({"keywords": this.search, "count": this.limit}).result(function(result) {
- self.do_result_people(result);
- deferrer_p_k.resolve();
+ "companies/universal-name=%s:(id,name,logo-url,description,industry,website-url,locations,universal-name)",
+ encodeURIComponent(uid.toLowerCase()))).result(function (result) {
+ self.do_result_companies({'companies': {'values': [result]}});
+ deferrer_c.resolve();
+ }).error(function () {
+ self.do_result_companies({});
+ deferrer_c.resolve();
});
- return $.when.apply($, deferrers);
- },
- do_result_companies: function(companies) {
- var lst = (companies.companies || {}).values || [];
- lst = _.first(lst, this.limit);
- lst = _.map(lst, function(el) {
- el.__type = "company";
- return el;
- });
- console.debug("Linkedin companies found:", (companies.companies || {})._total, '=>', lst.length, lst);
- return this.display_result(lst, this.$(".oe_linkedin_pop_c"));
- },
- do_result_people: function(people) {
- var plst = (people.people || {}).values || [];
- plst = _.first(plst, this.limit);
- plst = _.map(plst, function(el) {
- el.__type = "people";
- return el;
- });
- console.debug("Linkedin people found:", people.numResults, '=>', plst.length, plst);
- return this.display_result(plst, this.$(".oe_linkedin_pop_p"));
- },
- display_result: function(result, $elem) {
- var self = this;
- var $row;
- $elem.find(".oe_no_result").remove();
- _.each(result, function(el) {
- var pc = new instance.web_linkedin.EntityWidget(self, el);
- if (!$elem.find("div").size() || $elem.find(" > div:last > div").size() >= 5) {
- $row = $("<div style='display: table-row;width:100%'/>");
- $row.appendTo($elem);
- }
- pc.appendTo($row);
- pc.$el.css("display", "table-cell");
- pc.$el.css("width", "20%");
- pc.on("selected", self, function(data) {
- self.trigger("selected", data);
- self.destroy();
- });
+ var url_public = "http://www.linkedin.com/pub/"+uid;
+ IN.API.Profile("url="+ encodeURI(url_public).replace(/%2F/g, '/'))
+ .fields(commonPeopleFields)
+ .result(function(result) {
+ self.do_result_people({'people': result});
+ deferrer_p.resolve();
+ }).error(function (error) {
+ self.do_warn( _t("LinkedIn error"), _t("LinkedIn is temporary down for the searches by url."));
+ self.do_result_people({});
+ deferrer_p.resolve();
});
- if (!$elem.find("div").size()) {
- $elem.append($('<div class="oe_no_result">').text(_t("No results found")));
+
+ this.search = url;
+ }
+
+ var deferrer_c_k = $.Deferred();
+ var deferrer_p_k = $.Deferred();
+ deferrers.push(deferrer_c_k, deferrer_p_k);
+ IN.API.Raw(_.str.sprintf(
+ "company-search:(companies:" +
+ "(id,name,logo-url,description,industry,website-url,locations,universal-name))?keywords=%s&count=%d",
+ encodeURI(this.search), this.limit)).result(function (result) {
+ self.do_result_companies(result);
+ deferrer_c_k.resolve();
+ });
+ IN.API.PeopleSearch().fields(commonPeopleFields).params({"keywords": this.search, "count": this.limit}).result(function(result) {
+ self.do_result_people(result);
+ deferrer_p_k.resolve();
+ });
+
+ return $.when.apply($, deferrers);
+ },
+ do_result_companies: function(companies) {
+ var lst = (companies.companies || {}).values || [];
+ lst = _.first(lst, this.limit);
+ lst = _.map(lst, function(el) {
+ el.__type = "company";
+ return el;
+ });
+ console.debug("Linkedin companies found:", (companies.companies || {})._total, '=>', lst.length, lst);
+ return this.display_result(lst, this.$(".oe_linkedin_pop_c"));
+ },
+ do_result_people: function(people) {
+ var plst = (people.people || {}).values || [];
+ plst = _.first(plst, this.limit);
+ plst = _.map(plst, function(el) {
+ el.__type = "people";
+ return el;
+ });
+ console.debug("Linkedin people found:", people.numResults, '=>', plst.length, plst);
+ return this.display_result(plst, this.$(".oe_linkedin_pop_p"));
+ },
+ display_result: function(result, $elem) {
+ var self = this;
+ var $row;
+ $elem.find(".oe_no_result").remove();
+ _.each(result, function(el) {
+ var pc = new EntityWidget(self, el);
+ if (!$elem.find("div").size() || $elem.find(" > div:last > div").size() >= 5) {
+ $row = $("<div style='display: table-row;width:100%'/>");
+ $row.appendTo($elem);
}
- },
-
- });
-
- instance.web_linkedin.EntityWidget = instance.web.Widget.extend({
- template: "Linkedin.EntityWidget",
- init: function(parent, data) {
- this._super(parent);
- this.data = data;
- },
- start: function() {
- var self = this;
- this.$el.click(function() {
- self.trigger("selected", self.data);
+ pc.appendTo($row);
+ pc.$el.css("display", "table-cell");
+ pc.$el.css("width", "20%");
+ pc.on("selected", self, function(data) {
+ self.trigger("selected", data);
+ self.destroy();
});
- if (this.data.__type === "company") {
- this.$("h3").text(this.data.name);
- self.$("img").attr("src", this.data.logoUrl);
- self.$(".oe_linkedin_entity_headline").text(this.data.industry);
- } else { // people
- this.$("h3").text(this.data.formattedName);
- self.$("img").attr("src", this.data.pictureUrl);
- self.$(".oe_linkedin_entity_headline").text(this.data.headline);
- }
- },
- });
-};
+ });
+ if (!$elem.find("div").size()) {
+ $elem.append($('<div class="oe_no_result">').text(_t("No results found")));
+ }
+ },
+
+});
+
+var EntityWidget = Widget.extend({
+ template: "Linkedin.EntityWidget",
+ init: function(parent, data) {
+ this._super(parent);
+ this.data = data;
+ },
+ start: function() {
+ var self = this;
+ this.$el.click(function() {
+ self.trigger("selected", self.data);
+ });
+ if (this.data.__type === "company") {
+ this.$("h3").text(this.data.name);
+ self.$("img").attr("src", this.data.logoUrl);
+ self.$(".oe_linkedin_entity_headline").text(this.data.industry);
+ } else { // people
+ this.$("h3").text(this.data.formattedName);
+ self.$("img").attr("src", this.data.pictureUrl);
+ self.$(".oe_linkedin_entity_headline").text(this.data.headline);
+ }
+ },
+});
+
+});
diff --git a/addons/web_tests/static/src/js/web_tests.js b/addons/web_tests/static/src/js/web_tests.js
index 281e360c872..9540b717d83 100644
--- a/addons/web_tests/static/src/js/web_tests.js
+++ b/addons/web_tests/static/src/js/web_tests.js
@@ -1,37 +1,43 @@
-openerp.web_tests = function (instance) {
- instance.web.client_actions.add(
- 'buncha-forms', 'instance.web_tests.BunchaForms');
- instance.web_tests = {};
- instance.web_tests.BunchaForms = instance.web.Widget.extend({
- init: function (parent) {
- this._super(parent);
- this.dataset = new instance.web.DataSetSearch(this, 'test.listview.relations');
- this.form = new instance.web.FormView(this, this.dataset, false, {
- action_buttons: false,
- pager: false
- });
- this.form.registry = instance.web.form.readonly;
- },
- render: function () {
- return '<div class="oe_bunchaforms"></div>';
- },
- start: function () {
- $.when(
- this.dataset.read_slice(),
- this.form.appendTo(this.$el)).done(this.on_everything_loaded);
- },
- on_everything_loaded: function (slice) {
- var records = slice[0].records;
- if (!records.length) {
- this.form.trigger("load_record", {});
- return;
- }
- this.form.trigger("load_record", records[0]);
- _(records.slice(1)).each(function (record, index) {
- this.dataset.index = index+1;
- this.form.reposition($('<div>').appendTo(this.$el));
- this.form.trigger("load_record", record);
- }, this);
+odoo.define(['web.core', 'web.data', 'web.FormView', 'web.Widget'], function (require) {
+"use strict";
+
+var core = require('web.core');
+var data = require('web.data');
+var FormView = require('web.FormView');
+var Widget = require('web.Widget');
+
+var BunchaForms = Widget.extend({
+ init: function (parent) {
+ this._super(parent);
+ this.dataset = new data.DataSetSearch(this, 'test.listview.relations');
+ this.form = new FormView(this, this.dataset, false, {
+ action_buttons: false,
+ pager: false
+ });
+ },
+ render: function () {
+ return '<div class="oe_bunchaforms"></div>';
+ },
+ start: function () {
+ $.when(
+ this.dataset.read_slice(),
+ this.form.appendTo(this.$el)).done(this.on_everything_loaded);
+ },
+ on_everything_loaded: function (slice) {
+ var records = slice[0].records;
+ if (!records.length) {
+ this.form.trigger("load_record", {});
+ return;
}
- });
-};
+ this.form.trigger("load_record", records[0]);
+ _(records.slice(1)).each(function (record, index) {
+ this.dataset.index = index+1;
+ this.form.reposition($('<div>').appendTo(this.$el));
+ this.form.trigger("load_record", record);
+ }, this);
+ }
+});
+
+core.action_registry.add('buncha-forms', BunchaForms);
+
+});
diff --git a/addons/web_tests_demo/static/src/js/demo.js b/addons/web_tests_demo/static/src/js/demo.js
index 9ac8d395784..ccfb6d21c70 100644
--- a/addons/web_tests_demo/static/src/js/demo.js
+++ b/addons/web_tests_demo/static/src/js/demo.js
@@ -1,12 +1,17 @@
-// static/src/js/demo.js
-(function () {
- openerp.web_tests_demo = {
- value_true: true,
- SomeType: openerp.web.Class.extend({
- init: function (value) {
- this.value = value;
- }
- })
- };
-
-}());
+odoo.define('web_tests_demo.demo', ['web.core'], function (require) {
+"use strict";
+
+var core = require('web.core');
+
+var SomeType = core.Class.extend({
+ init: function (value) {
+ this.value = value;
+ },
+});
+
+return {
+ value_true: true,
+ SomeType: SomeType,
+};
+
+});
diff --git a/addons/web_tip/static/src/js/tip.js b/addons/web_tip/static/src/js/tip.js
index f9e9d66b10a..450bbe9803b 100644
--- a/addons/web_tip/static/src/js/tip.js
+++ b/addons/web_tip/static/src/js/tip.js
@@ -1,316 +1,331 @@
-(function() {
-
- var instance = openerp;
-
- instance.web.Tip = instance.web.Class.extend({
- init: function() {
- var self = this;
- self.tips = [];
- self.tip_mutex = new $.Mutex();
- self.$overlay = null;
- self.$element = null;
-
- var Tips = new instance.web.Model('web.tip');
- Tips.query(['title', 'description', 'action_id', 'model', 'type', 'mode', 'trigger_selector',
- 'highlight_selector', 'end_selector', 'end_event', 'placement', 'is_consumed'])
- .all().then(function(tips) {
- self.tips = tips;
- })
- ;
-
- instance.web.bus.on('action', this, function(action) {
- self.on_action(action);
- });
-
- instance.web.bus.on('view_shown', this, function(view) {
- if (_.keys(view.fields_view).length === 0) {
- view.on('view_loaded', this, function(fields_view) {
- self.on_view(view);
- });
- } else {
+odoo.define(['web.core', 'web.form_widgets', 'web.Model', 'web.utils', 'web.WebClient'], function (require) {
+"use strict";
+
+var core = require('web.core');
+var form_widgets = require('web.form_widgets');
+var Model = require('web.Model');
+var utils = require('web.utils');
+var WebClient = require('web.WebClient');
+
+var bus = core.bus;
+var Class = core.Class;
+
+var Tip = Class.extend({
+ init: function() {
+ var self = this;
+ self.tips = [];
+ self.tip_mutex = new utils.Mutex();
+ self.$overlay = null;
+ self.$element = null;
+
+ var Tips = new Model('web.tip');
+ Tips.query(['title', 'description', 'action_id', 'model', 'type', 'mode', 'trigger_selector',
+ 'highlight_selector', 'end_selector', 'end_event', 'placement', 'is_consumed'])
+ .all().then(function(tips) {
+ self.tips = tips;
+ })
+ ;
+
+ core.bus.on('action', this, function(action) {
+ self.on_action(action);
+ });
+
+ bus.on('view_shown', this, function(view) {
+ if (_.keys(view.fields_view).length === 0) {
+ view.on('view_loaded', this, function(fields_view) {
self.on_view(view);
- }
-
- view.on('switch_mode', this, function() {
});
- });
+ } else {
+ self.on_view(view);
+ }
- instance.web.bus.on('view_switch_mode', this, function(viewManager, mode) {
- self.on_switch(viewManager, mode);
+ view.on('switch_mode', this, function() {
});
-
- instance.web.bus.on('form_view_shown', this, function(formView) {
- self.on_form_view(formView);
+ });
+
+ bus.on('view_switch_mode', this, function(viewManager, mode) {
+ self.on_switch(viewManager, mode);
+ });
+
+ bus.on('form_view_shown', this, function(formView) {
+ self.on_form_view(formView);
+ });
+
+ bus.on('form_view_saved', this, function(formView) {
+ self.on_form_view(formView);
+ });
+ },
+
+ // stub
+ on_action: function(action) {
+ var self = this;
+ var action_id = action.id;
+ var model = action.res_model;
+ },
+
+ on_view: function(view) {
+ var self = this;
+ var fields_view = view.fields_view;
+ var action_id = view.ViewManager.action ? view.ViewManager.action.id : null;
+ var model = fields_view.model;
+
+ // kanban
+ if(fields_view.type === 'kanban') {
+ var dataset_def = $.Deferred();
+ var groups_def = $.Deferred();
+ view.on("kanban_dataset_processed", self, function() {
+ var length = view.dataset.ids.length;
+ dataset_def.resolve(length);
});
-
- instance.web.bus.on('form_view_saved', this, function(formView) {
- self.on_form_view(formView);
+ view.on('kanban_groups_processed', self, function() {
+ groups_def.resolve();
});
- },
-
- // stub
- on_action: function(action) {
- var self = this;
- var action_id = action.id;
- var model = action.res_model;
- },
-
- on_view: function(view) {
- var self = this;
- var fields_view = view.fields_view;
- var action_id = view.ViewManager.action ? view.ViewManager.action.id : null;
- var model = fields_view.model;
-
- // kanban
- if(fields_view.type === 'kanban') {
- var dataset_def = $.Deferred();
- var groups_def = $.Deferred();
- view.on("kanban_dataset_processed", self, function() {
- var length = view.dataset.ids.length;
- dataset_def.resolve(length);
- });
- view.on('kanban_groups_processed', self, function() {
- groups_def.resolve();
- });
- dataset_def.done(function(length) {
- self.eval_tip(action_id, model, fields_view.type);
- });
- groups_def.done(function() {
- self.eval_tip(action_id, model, fields_view.type);
- });
- } else if (fields_view.type === 'tree') {
- view.on('view_list_rendered', self, function() {
- self.eval_tip(action_id, model, fields_view.type);
- });
- } else if (view.hasOwnProperty('editor')) {
- view.on('view_list_rendered', self, function() {
- self.reposition();
- });
- }
- },
-
- on_form_view: function(formView) {
- var self = this;
- var model = formView.model;
- var type = formView.datarecord.type ? formView.datarecord.type : null;
- var mode = 'form';
- formView.on('view_content_has_changed', self, _.once(function() {
+ dataset_def.done(function(length) {
+ self.eval_tip(action_id, model, fields_view.type);
+ });
+ groups_def.done(function() {
+ self.eval_tip(action_id, model, fields_view.type);
+ });
+ } else if (fields_view.type === 'tree') {
+ view.on('view_list_rendered', self, function() {
+ self.eval_tip(action_id, model, fields_view.type);
+ });
+ } else if (view.hasOwnProperty('editor')) {
+ view.on('view_list_rendered', self, function() {
+ self.reposition();
+ });
+ }
+ },
+
+ on_form_view: function(formView) {
+ var self = this;
+ var model = formView.model;
+ var type = formView.datarecord.type ? formView.datarecord.type : null;
+ var mode = 'form';
+ formView.on('view_content_has_changed', self, _.once(function() {
+ self.eval_tip(null, model, mode, type);
+ }));
+ if ($('.oe_chatter').length > 0) {
+ core.bus.on('chatter_messages_fetched', this, _.once(function () {
self.eval_tip(null, model, mode, type);
}));
- if ($('.oe_chatter').length > 0) {
- instance.web.bus.on('chatter_messages_fetched', this, _.once(function () {
- self.eval_tip(null, model, mode, type);
- }));
- } else {
- self.eval_tip(null, model, mode, type);
- }
- },
-
- // stub
- on_switch: function (viewManager, mode) {
- var self = this;
- var action = viewManager.action;
- var action_id = action.id;
- var model = action.res_model;
- },
-
- eval_tip: function(action_id, model, mode, type) {
- var self = this;
- var filter = {};
- var valid_tips = [];
- var tips = [];
- if (action_id) {
- valid_tips = _.filter(self.tips, function (tip) {
- return tip.action_id[0] === action_id;
- });
- }
-
- filter.model = model;
- filter.mode = mode;
- tips = _.where(self.tips, filter);
- if (type) {
- tips = _.filter(tips, function(tip) {
- if (!tip.type) {
- return true;
- }
- return tip.type === type;
- });
- }
-
- valid_tips = _.uniq(valid_tips.concat(tips));
- _.each(valid_tips, function(tip) {
- if (!tip.is_consumed) {
- self.add_tip(tip);
- }
+ } else {
+ self.eval_tip(null, model, mode, type);
+ }
+ },
+
+ // stub
+ on_switch: function (viewManager, mode) {
+ var self = this;
+ var action = viewManager.action;
+ var action_id = action.id;
+ var model = action.res_model;
+ },
+
+ eval_tip: function(action_id, model, mode, type) {
+ var self = this;
+ var filter = {};
+ var valid_tips = [];
+ var tips = [];
+ if (action_id) {
+ valid_tips = _.filter(self.tips, function (tip) {
+ return tip.action_id[0] === action_id;
});
- },
-
+ }
- add_tip: function(tip) {
- var self = this;
- self.tip_mutex.exec(function() {
- if (!tip.is_consumed) {
- return $.when(self.do_tip(tip));
+ filter.model = model;
+ filter.mode = mode;
+ tips = _.where(self.tips, filter);
+ if (type) {
+ tips = _.filter(tips, function(tip) {
+ if (!tip.type) {
+ return true;
}
+ return tip.type === type;
});
- },
+ }
+
+ valid_tips = _.uniq(valid_tips.concat(tips));
+ _.each(valid_tips, function(tip) {
+ if (!tip.is_consumed) {
+ self.add_tip(tip);
+ }
+ });
+ },
- do_tip: function (tip) {
- var self = this;
- var def = $.Deferred();
- var Tips = new instance.web.Model('web.tip');
- var highlight_selector = tip.highlight_selector;
- var triggers = tip.trigger_selector ? tip.trigger_selector.split(',') : [];
- var trigger_tip = true;
- if(!$(highlight_selector).length > 0 || !$(highlight_selector).is(":visible")) {
- return def.reject();
+ add_tip: function(tip) {
+ var self = this;
+ self.tip_mutex.exec(function() {
+ if (!tip.is_consumed) {
+ return $.when(self.do_tip(tip));
}
- for (var i = 0; i < triggers.length; i++) {
- if(!$(triggers[i]).length > 0) {
- trigger_tip = false;
- }
+ });
+ },
+
+ do_tip: function (tip) {
+ var self = this;
+ var def = $.Deferred();
+ var Tips = new Model('web.tip');
+ var highlight_selector = tip.highlight_selector;
+ var triggers = tip.trigger_selector ? tip.trigger_selector.split(',') : [];
+ var trigger_tip = true;
+
+ if(!$(highlight_selector).length > 0 || !$(highlight_selector).is(":visible")) {
+ return def.reject();
+ }
+ for (var i = 0; i < triggers.length; i++) {
+ if(!$(triggers[i]).length > 0) {
+ trigger_tip = false;
}
+ }
- if (trigger_tip) {
- self.$element = $(highlight_selector).first();
- if (self.$element.height() === 0 || self.$element.width() === 0) {
- var $images = self.$element.find('img');
- if ($images.length > 0) {
- $images.first().load(function() {
- self.add_tip(tip);
- });
- }
- return def.reject();
+ if (trigger_tip) {
+ self.$element = $(highlight_selector).first();
+ if (self.$element.height() === 0 || self.$element.width() === 0) {
+ var $images = self.$element.find('img');
+ if ($images.length > 0) {
+ $images.first().load(function() {
+ self.add_tip(tip);
+ });
}
+ return def.reject();
+ }
- self.scroll_to_tip();
- self.$helper = $("<div>", { class: 'oe_tip_helper' });
- self.$element.after(self.$helper);
- self._set_helper_position();
-
- self.$overlay = $("<div>", { class: 'oe_tip_overlay' });
- $('body').append(self.$overlay);
- self.$element.addClass('oe_tip_show_element');
+ self.scroll_to_tip();
+ self.$helper = $("<div>", { class: 'oe_tip_helper' });
+ self.$element.after(self.$helper);
+ self._set_helper_position();
- // fix the stacking context problem
- _.each(self.$element.parentsUntil('body'), function(el) {
- var zIndex = $(el).css('z-index');
- var opacity = parseFloat($(el).css('opacity'));
+ self.$overlay = $("<div>", { class: 'oe_tip_overlay' });
+ $('body').append(self.$overlay);
+ self.$element.addClass('oe_tip_show_element');
- if (/[0-9]+/.test(zIndex) || opacity < 1) {
- $(el).addClass('oe_tip_fix_parent');
- }
- });
+ // fix the stacking context problem
+ _.each(self.$element.parentsUntil('body'), function(el) {
+ var zIndex = $(el).css('z-index');
+ var opacity = parseFloat($(el).css('opacity'));
- self.$element.popover({
- placement: tip.placement,
- title: tip.title,
- content: tip.description,
- html: true,
- container: 'body',
- }).popover("show");
-
- var $cross = $('<button type="button" class="close">&times;</button>');
- $cross.addClass('oe_tip_close');
-
- if (tip.title) {
- $('.popover-title').prepend($cross);
- } else {
- $('.popover-content').prepend($cross);
+ if (/[0-9]+/.test(zIndex) || opacity < 1) {
+ $(el).addClass('oe_tip_fix_parent');
}
+ });
- // consume tip
- tip.end_selector = tip.end_selector ? tip.end_selector : tip.highlight_selector;
- $(tip.end_selector).one(tip.end_event, function($ev) {
- self.end_tip(tip);
- def.resolve();
- });
+ self.$element.popover({
+ placement: tip.placement,
+ title: tip.title,
+ content: tip.description,
+ html: true,
+ container: 'body',
+ }).popover("show");
- // dismiss tip
- $cross.on('click', function($ev) {
- self.end_tip(tip);
- def.resolve();
- });
- self.$overlay.on('click', function($ev) {
- self.end_tip(tip);
- def.resolve();
- });
- $(document).on('keyup.web_tip', function($ev) {
- if ($ev.which === 27) { // esc
- self.end_tip(tip);
- def.resolve();
- }
- });
+ var $cross = $('<button type="button" class="close">&times;</button>');
+ $cross.addClass('oe_tip_close');
- // resize
- instance.web.bus.on('resize', this, function() {
- self.reposition();
- });
+ if (tip.title) {
+ $('.popover-title').prepend($cross);
} else {
- def.reject();
+ $('.popover-content').prepend($cross);
}
- return def;
- },
-
- scroll_to_tip: function(){
- var self = this;
- var scroll = _.find(self.$element.parentsUntil('body'), function(el) {
- var overflow = $(el).css('overflow-y');
- return (overflow === 'auto' || overflow === 'scroll');
+
+ // consume tip
+ tip.end_selector = tip.end_selector ? tip.end_selector : tip.highlight_selector;
+ $(tip.end_selector).one(tip.end_event, function($ev) {
+ self.end_tip(tip);
+ def.resolve();
});
- if (scroll) {
- $(scroll).scrollTo(self.$element);
- }
- },
-
- end_tip: function(tip) {
- var self = this;
- var Tips = new instance.web.Model('web.tip');
- self.$element.popover('destroy');
- self.$overlay.remove();
- self.$helper.remove();
- self.$element.removeClass('oe_tip_show_element');
- _.each($('.oe_tip_fix_parent'), function(el) {
- $(el).removeClass('oe_tip_fix_parent');
+
+ // dismiss tip
+ $cross.on('click', function($ev) {
+ self.end_tip(tip);
+ def.resolve();
+ });
+ self.$overlay.on('click', function($ev) {
+ self.end_tip(tip);
+ def.resolve();
+ });
+ $(document).on('keyup.web_tip', function($ev) {
+ if ($ev.which === 27) { // esc
+ self.end_tip(tip);
+ def.resolve();
+ }
});
- $(document).off('keyup.web_tip');
- Tips.call('consume', [tip.id], {});
- tip.is_consumed = true;
- },
-
- reposition: function() {
- var self = this;
- if (self.tip_mutex.def.state() === 'pending') {
- self.scroll_to_tip();
- self._set_helper_position();
- self.$element.popover('show');
- }
- },
-
- _set_helper_position : function() {
- var offset = this.$element.offset();
- var _top = offset.top - 5;
- var _left = offset.left - 5;
- var _width = this.$element.outerWidth() + 10;
- var _height = this.$element.outerHeight() + 10;
- this.$helper.offset({top: _top , left: _left});
- this.$helper.width(_width);
- this.$helper.height(_height);
- }
- });
- instance.web.WebClient = instance.web.WebClient.extend({
- show_application: function() {
- this._super();
- this.tip_handler = new instance.web.Tip();
- }
- });
+ // resize
+ bus.on('resize', this, function() {
+ self.reposition();
+ });
- instance.web.form.FieldStatus = instance.web.form.FieldStatus.extend({
- render_value: function() {
- this._super();
- instance.webclient.tip_handler.reposition();
+ bus.on('please_reposition_tip', this, function () {
+ self.reposition();
+ });
+ } else {
+ def.reject();
+ }
+ return def;
+ },
+
+ scroll_to_tip: function(){
+ var self = this;
+ var scroll = _.find(self.$element.parentsUntil('body'), function(el) {
+ var overflow = $(el).css('overflow-y');
+ return (overflow === 'auto' || overflow === 'scroll');
+ });
+ if (scroll) {
+ $(scroll).scrollTo(self.$element);
+ }
+ },
+
+ end_tip: function(tip) {
+ var self = this;
+ var Tips = new Model('web.tip');
+ self.$element.popover('destroy');
+ self.$overlay.remove();
+ self.$helper.remove();
+ self.$element.removeClass('oe_tip_show_element');
+ _.each($('.oe_tip_fix_parent'), function(el) {
+ $(el).removeClass('oe_tip_fix_parent');
+ });
+ $(document).off('keyup.web_tip');
+ Tips.call('consume', [tip.id], {});
+ tip.is_consumed = true;
+ },
+
+ reposition: function() {
+ var self = this;
+ if (self.tip_mutex.def.state() === 'pending') {
+ self.scroll_to_tip();
+ self._set_helper_position();
+ self.$element.popover('show');
}
- });
-})();
+ },
+
+ _set_helper_position : function() {
+ var offset = this.$element.offset();
+ var _top = offset.top - 5;
+ var _left = offset.left - 5;
+ var _width = this.$element.outerWidth() + 10;
+ var _height = this.$element.outerHeight() + 10;
+ this.$helper.offset({top: _top , left: _left});
+ this.$helper.width(_width);
+ this.$helper.height(_height);
+ }
+});
+
+WebClient.include({
+ show_application: function() {
+ this._super();
+ this.tip_handler = new Tip();
+ }
+});
+
+var FieldStatus = core.form_widget_registry.get('statusbar');
+
+FieldStatus.include({
+ render_value: function() {
+ this._super();
+ this.trigger('please_reposition_tip');
+ }
+});
+
+});
diff --git a/addons/web_view_editor/static/src/js/view_editor.js b/addons/web_view_editor/static/src/js/view_editor.js
index 6471e090f85..f4a50b5b580 100644
--- a/addons/web_view_editor/static/src/js/view_editor.js
+++ b/addons/web_view_editor/static/src/js/view_editor.js
@@ -1,13 +1,27 @@
-openerp.web_view_editor = function(instance) {
-var _t = instance.web._t;
-var QWeb = instance.web.qweb;
-instance.web.ViewManager.include({
+odoo.define(['web.ActionManager', 'web.core', 'web.data', 'web.Dialog', 'web.formats', 'web.Registry', 'web.session', 'web.utils', 'web.ViewManager', 'web.Widget'], function (require) {
+"use strict";
+
+var ActionManager = require('web.ActionManager');
+var core = require('web.core');
+var data = require('web.data');
+var Dialog = require('web.Dialog');
+var formats = require('web.formats');
+var Registry = require('web.Registry');
+var session = require('web.session');
+var utils = require('web.utils');
+var ViewManager = require('web.ViewManager');
+var Widget = require('web.Widget');
+
+var QWeb = core.qweb;
+var _t = core._t;
+
+ViewManager.include({
on_debug_changed:function(evt){
var val = $(evt.target).data('action'),
current_view = this.active_view.controller;
if(val === "manage_views"){
if (current_view.fields_view && current_view.fields_view.arch) {
- var view_editor = new instance.web_view_editor.ViewEditor(current_view, current_view.$el, this.dataset, current_view.fields_view.arch);
+ var view_editor = new ViewEditor(current_view, current_view.$el, this.dataset, current_view.fields_view.arch);
view_editor.start();
} else {
this.do_warn(_t("Manage Views"),
@@ -18,14 +32,15 @@ instance.web.ViewManager.include({
}
}
});
-instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
- init: function(parent, element_id, dataset, view, options) {
+
+var ViewEditor = Widget.extend({
+ init: function(parent, element_id, dataset) {
this._super(parent);
this.parent = parent;
- this.dataset = new instance.web.DataSetSearch(this, 'ir.ui.view', null, null),
+ this.dataset = new data.DataSetSearch(this, 'ir.ui.view', null, null);
this.model = dataset.model;
this.xml_element_id = 0;
- this.property = instance.web_view_editor.ViewEditor.property_widget;
+ this.property = ViewEditor.property_widget;
this.one_object = false;
},
start: function() {
@@ -36,7 +51,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
action_title = _.str.sprintf(_t("Manage Views (%s)"), this.model);
var action = {
name: action_title,
- context: this.session.user_context,
+ context: session.user_context,
domain: [["model", "=", this.model]],
res_model: 'ir.ui.view',
views: [[false, 'list']],
@@ -56,7 +71,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
select_view_id: self.parent.fields_view.view_id
}
};
- this.view_edit_dialog = new instance.web.Dialog(this, {
+ this.view_edit_dialog = new Dialog(this, {
title: action_title,
buttons: [
{text: _t("Create"), click: function() { self.on_create_view(); }},
@@ -67,13 +82,13 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
}).open();
this.view_edit_dialog.on("closing", this, function(){window.location.reload();});
this.main_view_id = this.parent.fields_view.view_id;
- this.action_manager = new instance.web.ActionManager(this);
+ this.action_manager = new ActionManager(this);
this.action_manager.appendTo(this.view_edit_dialog.$el);
$.when(this.action_manager.do_action(action)).done(function() {
var viewmanager = self.action_manager.inner_widget;
var controller = viewmanager.active_view.controller;
$(controller.groups).bind({
- 'selected': function (e, ids, records, deselected) {
+ 'selected': function (e, ids) {
self.main_view_id = ids[0];
}
});
@@ -81,7 +96,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
},
on_create_view: function() {
var self = this;
- this.create_view_dialog = new instance.web.Dialog(this, {
+ this.create_view_dialog = new Dialog(this, {
title: _.str.sprintf(_t("Create a view (%s)"), self.model),
buttons: [
{text: _t("Save"), click: function () {
@@ -128,9 +143,9 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
});
},
do_save_view: function(values) {
- def = $.Deferred();
- var field_dataset = new instance.web.DataSetSearch(this, this.model, null, null);
- var model_dataset = new instance.web.DataSetSearch(this, 'ir.model', null, null);
+ var def = $.Deferred();
+ var field_dataset = new data.DataSetSearch(this, this.model, null, null);
+ var model_dataset = new data.DataSetSearch(this, 'ir.model', null, null);
var view_string = "", field_name = false, self = this;
field_dataset.call( 'fields_get', []).done(function(fields) {
_.each(['name', 'x_name'], function(value) {
@@ -186,7 +201,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
}
},
create_View_Node: function(node){
- ViewNode = {
+ var ViewNode = {
'level': ($(node).parents()).length + 1,
'id': this.xml_element_id += 1,
'att_list': [],
@@ -230,7 +245,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
},
parse_xml: function(arch, view_id) {
//First element of att_list must be element tagname.
- main_object = {
+ var main_object = {
'level': 0,
'id': this.xml_element_id +=1,
'att_list': ["view"],
@@ -265,7 +280,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
parent_child_list : function(one_object, parent_list) {
var self = this;
_.each(one_object , function(element) {
- if (element.child_id.length != 0) {
+ if (element.child_id.length !== 0) {
parent_list.push({"key": element.id, "value": _.pluck(element.child_id, 'id')});
self.parent_child_list(element.child_id, parent_list);
}
@@ -299,13 +314,15 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
},
inherit_apply: function(expr_list ,arch_object ,xpath_arch_object) {
var self = this;
+ var temp_list;
+
if (xpath_arch_object.length) {
var check = expr_list[0], obj = false;
switch (check.length) {
case 2:
if (parseInt(check[1])) {
//for field[3]
- var temp_list = _.select(arch_object, function(element) {
+ temp_list = _.select(arch_object, function(element) {
return _.include(_.flatten(element.att_list), check[0]);
});
obj = arch_object[_.indexOf(arch_object, temp_list[parseInt(check[1]) - 1])];
@@ -326,11 +343,11 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
break;
case 1:
//for /form/notebook
- var temp_list = _.select(arch_object, function(element) {
+ temp_list = _.select(arch_object, function(element) {
return _.include(_.flatten(element.att_list), check[0]);
});
- if (temp_list.length != 0) {
- expr_list.length == 1 ? obj = temp_list[0] : expr_list.shift();
+ if (temp_list.length !== 0) {
+ expr_list.length === 1 ? obj = temp_list[0] : expr_list.shift();
}
break;
}
@@ -353,7 +370,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
increase_level: function(val, level) {
var self = this;
val.level = level;
- _.each(val.child_id, function(val, key) {
+ _.each(val.child_id, function(val) {
self.increase_level(val, level + 1);
});
},
@@ -373,7 +390,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
edit_view: function(one_object) {
var self = this;
this.one_object = one_object;
- this.edit_xml_dialog = new instance.web.Dialog(this, {
+ this.edit_xml_dialog = new Dialog(this, {
title: _.str.sprintf(_t("View Editor %d - %s"), self.main_view_id, self.model),
buttons: [
{text: _t("Inherited View"), click: function(){
@@ -404,7 +421,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
action_buttons: false
}
};
- var action_manager = new instance.web.ActionManager(self);
+ var action_manager = new ActionManager(self);
action_manager.do_action(action);
}},
{text: _t("Close"), click: function(){
@@ -417,7 +434,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
_.each(_PROPERTIES, function(val, key) {
if (! val.length) no_property_att.push(key);
});
- this.edit_xml_dialog.$el.html(QWeb.render('view_editor', {'data': one_object['main_object'], 'no_properties': no_property_att}));
+ this.edit_xml_dialog.$el.html(QWeb.render('view_editor', {'data': one_object.main_object, 'no_properties': no_property_att}));
this.edit_xml_dialog.$el.find("tr[id^='viewedit-']").click(function() {
self.do_select_row(this.id.split('-')[1]);
});
@@ -431,14 +448,14 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
inherited_view: function(selected_row){
var self = this;
var row_id = parseInt((selected_row.attr('id')).split('-')[1]);
- var obj = self.get_object_by_id(row_id,self.one_object['main_object'], [])[0];
+ var obj = self.get_object_by_id(row_id,self.one_object.main_object, [])[0];
var view_name = this.model + '.inherit_' + Math.round(Math.random() * 1000);
var view_find = selected_row;
var view_id;
var min_level = parseInt(selected_row.attr('level'));
while (1) {
view_find = view_find.prev();
- if (view_find.length == 0 ||
+ if (view_find.length === 0 ||
self.edit_xml_dialog.$el.find(view_find).find('a').text().search("view_id") != -1 &&
parseInt(view_find.attr('level')) < min_level ) {
view_id = parseInt($(view_find).find('a').text().replace(/[^0-9]+/g, ''));
@@ -449,14 +466,14 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
}
}
var val = _.detect(obj.att_list, function(val) {return val[0] == "name";});
- var priority = _.detect(self.one_object['arch'], function(val) {return val.view_id == view_id;});
+ var priority = _.detect(self.one_object.arch, function(val) {return val.view_id === view_id;});
var arch = _.str.sprintf("<?xml version='1.0'?>\n\t <field name='%s' position='after'> </field>", val[1]);
var vals = {'model': self.model, 'name': view_name, 'priority': priority.priority + 1, 'type': "form", 'arch': arch,'inherit_id':self.main_view_id};
this.dataset.create(vals).done(function(id) {
var arch_to_obj = self.parse_xml(arch,id);
obj.child_id.push(arch_to_obj[0]);
- self.one_object['parent_child_id'] = self.parent_child_list(self.one_object['main_object'],[]);
- self.one_object['arch'].push({'view_id':id,"arch":arch,'priority': priority.priority + 1});
+ self.one_object.parent_child_id = self.parent_child_list(self.one_object.main_object,[]);
+ self.one_object.arch.push({'view_id':id,"arch":arch,'priority': priority.priority + 1});
self.increase_level(arch_to_obj[0],obj.level+1);
self.render_inherited_view(selected_row,arch_to_obj[0]);
});
@@ -464,7 +481,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
render_inherited_view: function(selected_row,obj){
var self = this,row_id = parseInt((selected_row.attr('id')).split('-')[1]);
var clone = this.create_clone(selected_row.clone(),obj);
- if (selected_row.find("img[id^='parentimg-']").length == 0) {
+ if (selected_row.find("img[id^='parentimg-']").length === 0) {
($(selected_row.find('a').parent()).siblings('td'))
.append($('<img width="16" height="16"></img>').attr('src', '/web/static/src/img/collapse.gif').
attr('id','parentimg-'+ row_id).click(function(){
@@ -492,8 +509,8 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
}else{
while (1) {
view_find = view_find.prev();
- if (view_find.length == 0 ||
- (self.edit_xml_dialog.$el.find(view_find).find('a').text()).search("view_id") != -1
+ if (view_find.length === 0 ||
+ (self.edit_xml_dialog.$el.find(view_find).find('a').text()).search("view_id") !== -1
&& parseInt(view_find.attr('level')) < min_level ) {
view_id = parseInt(($(view_find).find('a').text()).replace(/[^0-9]+/g, ''));
view_xml_id = parseInt((view_find.attr('id')).split('-')[1]);
@@ -526,18 +543,20 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
}
},
do_node_add: function(side){
- var self = this,property_to_check = [];
- var tr = self.get_object_by_id(this.one_object.clicked_tr_id, this.one_object['main_object'], [])[0].att_list[0];
+ var self = this;
+ var property_to_check = [];
+ var tr = self.get_object_by_id(this.one_object.clicked_tr_id, this.one_object.main_object, [])[0].att_list[0];
var parent_tr = ($(side).prevAll("tr[level=" + String(this.one_object.clicked_tr_level - 1) + "]"))[0];
- var field_dataset = new instance.web.DataSetSearch(this, this.model, null, null);
- parent_tr = self.get_object_by_id(parseInt($(parent_tr).attr('id').replace(/[^0-9]+/g, '')), this.one_object['main_object'], [])[0].att_list[0];
+ var field_dataset = new data.DataSetSearch(this, this.model, null, null);
+ parent_tr = self.get_object_by_id(parseInt($(parent_tr).attr('id').replace(/[^0-9]+/g, '')), this.one_object.main_object, [])[0].att_list[0];
_.each([tr, parent_tr],function(element) {
var value = _.has(_CHILDREN, element) ? element : _.str.include(html_tag, element)?"html_tag":false;
property_to_check.push(value);
});
field_dataset.call( 'fields_get', []).done(function(result) {
var fields = _.keys(result);
- fields.push(" "),fields.sort();
+ fields.push(" ");
+ fields.sort();
self.on_add_node(property_to_check, fields, self.inject_position(parent_tr,tr));
});
},
@@ -548,21 +567,22 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
return ['After','Before'];
return ['After','Before','Inside'];
},
- do_node_edit: function(side) {
+ do_node_edit: function() {
var self = this;
- var result = self.get_object_by_id(this.one_object.clicked_tr_id, this.one_object['main_object'], []);
+ var result = self.get_object_by_id(this.one_object.clicked_tr_id, this.one_object.main_object, []);
if (result.length && result[0] && result[0].att_list) {
var properties = _PROPERTIES[result[0].att_list[0]];
self.on_edit_node(properties);
}
},
do_node_down: function(cur_tr, img) {
- var self = this, next_tr, last_tr, tr_to_move = [];
+ var self = this;
+ var next_tr, last_tr, tr_to_move = [];
tr_to_move.push(cur_tr);
if (img) {
while (1) {
next_tr = cur_tr.next();
- if ( parseInt(next_tr.attr('level')) <= this.one_object.clicked_tr_level || next_tr.length == 0) {
+ if ( parseInt(next_tr.attr('level')) <= this.one_object.clicked_tr_level || next_tr.length === 0) {
last_tr = next_tr;
break;
} else {
@@ -576,15 +596,15 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
if ((self.edit_xml_dialog.$el.find(last_tr).find('a').text()).search("view_id") != -1) {
return false;
}
- if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == this.one_object.clicked_tr_level) {
+ if (last_tr.length !== 0 && parseInt(last_tr.attr('level')) == this.one_object.clicked_tr_level) {
var last_tr_id = (last_tr.attr('id')).split('-')[1];
img = last_tr.find("img[id='parentimg-" + last_tr_id + "']").attr('src');
if (img) {
self.edit_xml_dialog.$el.find("img[id='parentimg-" + last_tr_id + "']").
attr('src', '/web/static/src/img/expand.gif');
while (1) {
- var next_tr = last_tr.next();
- if (next_tr.attr('level') <= this.one_object.clicked_tr_level || next_tr.length == 0) break;
+ next_tr = last_tr.next();
+ if (next_tr.attr('level') <= this.one_object.clicked_tr_level || next_tr.length === 0) break;
next_tr.hide();
last_tr = next_tr;
}
@@ -597,11 +617,16 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
}
},
do_node_up: function(cur_tr, img) {
- var self = this, side = cur_tr, tr_to_move = [];
+ var self = this;
+ var side = cur_tr;
+ var tr_to_move = [];
+ var last_tr;
+ var next_tr;
+
tr_to_move.push(side);
while (1) {
var prev_tr = cur_tr.prev();
- if (this.one_object.clicked_tr_level >= parseInt(prev_tr.attr('level')) || prev_tr.length == 0) {
+ if (this.one_object.clicked_tr_level >= parseInt(prev_tr.attr('level')) || prev_tr.length === 0) {
last_tr = prev_tr;
break;
}
@@ -612,7 +637,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
attr('src', '/web/static/src/img/expand.gif');
while (1) {
next_tr = side.next();
- if (parseInt(next_tr.attr('level')) <= this.one_object.clicked_tr_level || next_tr.length == 0) {
+ if (parseInt(next_tr.attr('level')) <= this.one_object.clicked_tr_level || next_tr.length === 0) {
break;
} else {
next_tr.hide();
@@ -621,8 +646,8 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
}
}
}
- if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == this.one_object.clicked_tr_level &&
- (self.edit_xml_dialog.$el.find(last_tr).find('a').text()).search("view_id") == -1) {
+ if (last_tr.length !== 0 && parseInt(last_tr.attr('level')) == this.one_object.clicked_tr_level &&
+ (self.edit_xml_dialog.$el.find(last_tr).find('a').text()).search("view_id") === -1) {
_.each(tr_to_move, function(rec) {
$(last_tr).before(rec);
});
@@ -631,9 +656,9 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
},
do_save_update_arch: function(move_direct, update_values) {
var self = this;
- var arch = _.detect(self.one_object['arch'], function(element)
- {return element.view_id == self.one_object.clicked_tr_view[0]});
- var obj = self.get_object_by_id(this.one_object.clicked_tr_view[1],this.one_object['main_object'], []);
+ var arch = _.detect(self.one_object.arch, function(element)
+ {return element.view_id === self.one_object.clicked_tr_view[0];});
+ var obj = self.get_object_by_id(this.one_object.clicked_tr_view[1],this.one_object.main_object, []);
//for finding xpath tag from inherit view
var xml_arch = QWeb.load_xml(arch.arch);
if (xml_arch.childNodes[0].tagName == "data") {
@@ -646,15 +671,15 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
insert = _.intersection(_.flatten(temp_obj.att_list),_.uniq(check_list));
if (insert.length == _.uniq(check_list).length ) {return xml_child;}
});
- xml_arch = QWeb.load_xml(instance.web.xml_to_str(inherited_view));
+ xml_arch = QWeb.load_xml(utils.xml_to_str(inherited_view));
}
return self.do_save_xml(xml_arch.documentElement, obj[0].child_id[0],obj[0].child_id, move_direct, update_values,arch);
},
get_object_by_id: function(id, one_object, result) {
var self = this;
- if (result.length == 0 ) {
+ if (result.length === 0 ) {
var check = _.detect(one_object , function(obj) {
- return id == obj.id;
+ return id === obj.id;
});
if (check) {result.push(check);}
_.each(one_object, function(obj) {
@@ -679,21 +704,26 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
return clone;
},
do_save_xml: function(arch1, obj, child_list, move_direct, update_values, arch){
- var self = this, children_list = $(arch1).children(),list_obj_xml;
+ var self = this; // blame this line if something terribly wrong happens
+ var children_list = $(arch1).children();
+ var list_obj_xml;
+ var re_insert_obj;
+
try{list_obj_xml = _.zip(children_list, obj.child_id);}catch(err){return;}
if (this.one_object.clicked_tr_id) {
if (obj.id == this.one_object.clicked_tr_id) {
- var parent = false, index = _.indexOf(child_list, obj);
+ var parent = false,
+ index = _.indexOf(child_list, obj);
if (move_direct == "down") {
var next = $(arch1).next();
$(next).after(arch1);
- var re_insert_obj = child_list.splice(index, 1);
+ re_insert_obj = child_list.splice(index, 1);
child_list.splice(index+1, 0, re_insert_obj[0]);
parent = $(arch1).parents();
} else if (move_direct == "up") {
var prev = $(arch1).prev();
$(prev).before(arch1);
- var re_insert_obj = child_list.splice(index, 1);
+ re_insert_obj = child_list.splice(index, 1);
child_list.splice(index-1, 0, re_insert_obj[0]);
parent = $(arch1).parents();
} else if (move_direct == "update_node") {
@@ -714,7 +744,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
object_xml = self.create_View_Node(temp_xml.childNodes[0]);
(update_values[1] == "Inside")? object_xml.level = obj.level + 1:object_xml.level = obj.level;
var clone = self.create_clone(tr_click.clone(),object_xml),
- after_append = _.detect(self.one_object['parent_child_id'],function(ele){
+ after_append = _.detect(self.one_object.parent_child_id,function(ele){
return self.one_object.clicked_tr_id == ele.key;
});
after_append = (after_append)?_.last(after_append.value):self.one_object.clicked_tr_id;
@@ -731,7 +761,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
child_list.splice(index - 1, 0, object_xml);
break;
case "Inside":
- if (tr_click.find("img[id^='parentimg-']").length == 0) {
+ if (tr_click.find("img[id^='parentimg-']").length === 0) {
($(tr_click.find('a').parent()).siblings('td'))
.append($('<img width="16" height="16"></img>').attr('src', '/web/static/src/img/collapse.gif').
attr('id','parentimg-'+ self.one_object.clicked_tr_id).click(function(){
@@ -749,10 +779,10 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
parent = $(arch1).parents();
} else if (move_direct == "remove_node") {
parent = $(arch1).parents();
- if (parent.length == 0 || (parent[0].tagName.toLowerCase() == "data")) {
+ if (parent.length === 0 || (parent[0].tagName.toLowerCase() == "data")) {
self.one_object.clicked_tr_id = self.one_object.clicked_tr_id -1;
self.one_object.clicked_tr_level = self.one_object.clicked_tr_level - 1;
- (parent.length == 0)?parent.push("remove_view"):false;
+ (parent.length === 0)?parent.push("remove_view"):false;
}
$(arch1).remove();
child_list.splice(index,1);
@@ -762,7 +792,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
tr_element.remove();
});
cur_tr.remove();
- var parent_img = _.detect(self.one_object['parent_child_id'],function(element){
+ var parent_img = _.detect(self.one_object.parent_child_id,function(element){
return _.include(element.value, self.one_object.clicked_tr_id);
});
if(parent_img.value.length == 1){
@@ -770,9 +800,9 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
find("tr[id='viewedit-"+parent_img.key+"']").
find("img[id^='parentimg-']").remove();
}
- self.one_object['parent_child_id'] = self.parent_child_list(self.one_object['main_object'],[]);
+ self.one_object.parent_child_id = self.parent_child_list(self.one_object.main_object,[]);
}
- var convert_to_utf = (parent.length != 0)? parent[parent.length-1]: arch1;
+ var convert_to_utf = (parent.length !== 0)? parent[parent.length-1]: arch1;
if (convert_to_utf != "remove_view") {
convert_to_utf = QWeb.tools.xml_node_to_string(convert_to_utf);
convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', "");
@@ -782,10 +812,10 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
} else {
this.dataset.unlink([this.one_object.clicked_tr_view[0]]);
}
- if(move_direct == "add_node"){
+ if(move_direct === "add_node"){
self.add_node_dialog.close();
self.on_select_img(clone.find("img[id='side-edit']")[0]);
- self.one_object['parent_child_id'] = self.parent_child_list(self.one_object['main_object'],[]);
+ self.one_object.parent_child_id = self.parent_child_list(self.one_object.main_object,[]);
}
}
if (obj.level <= this.one_object.clicked_tr_level) {
@@ -803,7 +833,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
});
},
get_list_tr: function(cur_tr,level){
- tr_list = [];
+ var tr_list = [];
while (1) {
var nxt_tr = cur_tr.next();
if (parseInt(nxt_tr.attr('level')) > level) {
@@ -814,7 +844,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
},
on_collapse: function(collapse_img) {
var self = this, id = collapse_img.id.split('-')[1];
- var datas = _.detect(self.one_object['parent_child_id'] , function(res) {
+ var datas = _.detect(self.one_object.parent_child_id , function(res) {
return res.key == id;
});
_.each(datas.value, function (rec) {
@@ -825,7 +855,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
},
on_edit_node: function(properties){
var self = this;
- this.edit_node_dialog = new instance.web.Dialog(this,{
+ this.edit_node_dialog = new Dialog(this,{
title: _t("Properties"),
size: 'medium',
buttons: [
@@ -891,19 +921,19 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
'groups' : {'name':'groups', 'string': 'Groups', 'type': 'selection_multi'},
'fonts' : {'name':'fonts', 'string': 'fonts', 'type': 'char'},
};
- var arch_val = self.get_object_by_id(this.one_object.clicked_tr_id,this.one_object['main_object'], []);
+ var arch_val = self.get_object_by_id(this.one_object.clicked_tr_id,this.one_object.main_object, []);
this.edit_node_dialog.$el.append('<table id="rec_table" style="width:400px" class="oe_form"></table>');
this.edit_widget = [];
self.ready = $.when(self.on_groups(properties)).done(function () {
- _PROPERTIES_ATTRIBUTES['groups']['selection'] = self.groups;
- var values = _.keys( instance.web.form.widgets.map);
+ _PROPERTIES_ATTRIBUTES.groups.selection = self.groups;
+ var values = _.keys(core.form_widget_registry.map);
values.push('');
values.sort();
- _PROPERTIES_ATTRIBUTES['widget']['selection'] = values;
- var widgets = _.filter(_PROPERTIES_ATTRIBUTES, function (property) { return _.include(properties, property.name)});
+ _PROPERTIES_ATTRIBUTES.widget.selection = values;
+ var widgets = _.filter(_PROPERTIES_ATTRIBUTES, function (property) { return _.include(properties, property.name);});
_.each(widgets, function(widget) {
var type_widget = new (self.property.get_any([widget.type])) (self.edit_node_dialog, widget);
- var value = _.detect(arch_val[0]['att_list'],function(res) {
+ var value = _.detect(arch_val[0].att_list,function(res) {
return res instanceof Array? _.include(res, widget.name): false;
});
@@ -924,8 +954,8 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
def.resolve();
}
var group_ids = [], group_names = {}, groups = [];
- var res_groups = new instance.web.DataSetSearch(this,'res.groups', null, null),
- model_data = new instance.web.DataSetSearch(self,'ir.model.data', null, null);
+ var res_groups = new data.DataSetSearch(this,'res.groups', null, null),
+ model_data = new data.DataSetSearch(self,'ir.model.data', null, null);
res_groups.read_slice([], {}).done(function (res_grp) {
_.each(res_grp, function (res) {
var key = res.id;
@@ -951,7 +981,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
{'name': 'field_value','selection': fields, 'value': false, 'string': '','type': 'selection'},
{'name': 'position','selection': position, 'value': false, 'string': 'Position','type': 'selection'}];
this.add_widget = [];
- this.add_node_dialog = new instance.web.Dialog(this,{
+ this.add_node_dialog = new Dialog(this,{
title: _t("Properties"),
size: 'medium',
buttons: [
@@ -981,7 +1011,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
this.add_node_dialog.$el.append('<table id="rec_table" style="width:420px" class="oe_form"><tbody><tr></tbody></table>');
var table_selector = self.add_node_dialog.$el.find('table[id=rec_table] tbody');
_.each(render_list, function(node) {
- type_widget = new (self.property.get_any([node.type])) (self.add_node_dialog, node);
+ var type_widget = new (self.property.get_any([node.type])) (self.add_node_dialog, node);
if (node.name == "position") {
table_selector.append('</tr><tr><td align="right" width="100px">' + node.string + '</td>' + type_widget.render() + '</tr>');
} else {
@@ -996,7 +1026,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
});
table_selector.find("td[id^=]").attr("width","100px");
self.add_node_dialog.$el.find('#new_field').click(function() {
- model_data = new instance.web.DataSetSearch(self,'ir.model', null, null);
+ var model_data = new data.DataSetSearch(self,'ir.model', null, null);
model_data.read_slice([], {domain: [['model','=', self.model]]}).done(function(result) {
self.render_new_field(result[0]);
});
@@ -1014,9 +1044,9 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
action_buttons: true
}
};
- var action_manager = new instance.web.ActionManager(self);
+ var action_manager = new ActionManager(self);
$.when(action_manager.do_action(action)).done(function() {
- var controller = action_manager.dialog_widget.views['form'].controller;
+ var controller = action_manager.dialog_widget.views.form.controller;
controller.on("on_button_cancel", self, function(){
action_manager.destroy();
});
@@ -1024,14 +1054,15 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({
action_manager.destroy();
var value =controller.fields.name.get('value');
self.add_node_dialog.$el.find('select[id=field_value]').append($("<option selected></option>").attr("value",value).text(value));
- _.detect(self.add_widget,function(widget){
- widget.name == "field_value"? widget.selection.push(value): false;
+ _.detect(self.add_widget, function(widget){
+ widget.name === "field_value" ? widget.selection.push(value): false;
});
});
});
}
});
-instance.web_view_editor.ViewEditor.Field = instance.web.Class.extend({
+
+ViewEditor.Field = core.Class.extend({
init: function(view, widget) {
this.$el = view.$el;
this.dirty = false;
@@ -1057,17 +1088,18 @@ instance.web_view_editor.ViewEditor.Field = instance.web.Class.extend({
validate: function() {
this.is_invalid = false;
try {
- var value = instance.web.parse_value(this.get_value(), this, '');
+ var value = formats.parse_value(this.get_value(), this, '');
this.is_invalid = this.required && value === '';
} catch(e) {
this.is_invalid = true;
}
},
render: function() {
- return _.str.sprintf("<td id = %s>%s</td>", this.name, QWeb.render(this.template, {widget: this}))
+ return _.str.sprintf("<td id = %s>%s</td>", this.name, QWeb.render(this.template, {widget: this}));
}
});
-instance.web_view_editor.ViewEditor.FieldBoolean = instance.web_view_editor.ViewEditor.Field.extend({
+
+ViewEditor.FieldBoolean = ViewEditor.Field.extend({
template : "vieweditor_boolean",
start: function() {
var self = this;
@@ -1085,7 +1117,8 @@ instance.web_view_editor.ViewEditor.FieldBoolean = instance.web_view_editor.View
return this.$el.find("input[id=" + this.name + "]").is(':checked')? "1" : null;
}
});
-instance.web_view_editor.ViewEditor.FieldChar = instance.web_view_editor.ViewEditor.Field.extend({
+
+ViewEditor.FieldChar = ViewEditor.Field.extend({
template : "vieweditor_char",
start: function () {
var self = this;
@@ -1101,7 +1134,8 @@ instance.web_view_editor.ViewEditor.FieldChar = instance.web_view_editor.ViewEdi
return this.$el.find("input[id=" + this.name + "]").val();
}
});
-instance.web_view_editor.ViewEditor.FieldSelect = instance.web_view_editor.ViewEditor.Field.extend({
+
+ViewEditor.FieldSelect = ViewEditor.Field.extend({
template : "vieweditor_selection",
start: function () {
var self = this;
@@ -1131,7 +1165,8 @@ instance.web_view_editor.ViewEditor.FieldSelect = instance.web_view_editor.ViewE
return this.$el.find("select[id=" + this.name + "]").val();
}
});
-instance.web_view_editor.ViewEditor.FieldSelectMulti = instance.web_view_editor.ViewEditor.FieldSelect.extend({
+
+ViewEditor.FieldSelectMulti = ViewEditor.FieldSelect.extend({
start: function () {
this._super();
this.$el.find("select[id=" + this.name + "]").css('height', '100px').attr("multiple", true);
@@ -1142,12 +1177,13 @@ instance.web_view_editor.ViewEditor.FieldSelectMulti = instance.web_view_editor.
if (!value) return false;
_.each(this.selection, function(item) {
if (_.include(value.split(','), item[0])) {
- self.$el.find("select[id="+self.name+"] option[value='" + item[0] +"']").attr("selected",1)
+ self.$el.find("select[id="+self.name+"] option[value='" + item[0] +"']").attr("selected",1);
}
});
}
});
-instance.web_view_editor.ViewEditor.FieldFloat = instance.web_view_editor.ViewEditor.FieldChar.extend({
+
+ViewEditor.FieldFloat = ViewEditor.FieldChar.extend({
});
var _PROPERTIES = {
@@ -1169,6 +1205,7 @@ var _PROPERTIES = {
'graph' : ['string', 'type'],
'calendar' : ['string', 'date_start', 'date_stop', 'date_delay', 'day_length', 'color', 'mode']
};
+
var _CHILDREN = {
'form': ['notebook', 'group', 'field', 'label', 'button','board', 'newline', 'separator'],
'tree': ['field'],
@@ -1189,6 +1226,7 @@ var _CHILDREN = {
'html_tag':['notebook', 'group', 'field', 'label', 'button','board', 'newline', 'separator']
//e.g.:xyz 'td' : ['field']
};
+
// Generic html_tag list and can be added html tag in future. It's support above _CHILDREN dict's *html_tag* by default.
// For specific child node one has to define tag above and specify children tag in list. Like above xyz example.
var html_tag = ['div','h1','h2','h3','h4','h5','h6','td','tr'];
@@ -1220,11 +1258,13 @@ var _ICONS = ['','STOCK_ABOUT', 'STOCK_ADD', 'STOCK_APPLY', 'STOCK_BOLD',
'terp-sale', 'terp-tools', 'terp-administration', 'terp-hr', 'terp-partner',
'terp-project', 'terp-report', 'terp-stock', 'terp-calendar', 'terp-graph'
];
-instance.web_view_editor.ViewEditor.property_widget = new instance.web.Registry({
- 'boolean' : 'instance.web_view_editor.ViewEditor.FieldBoolean',
- 'selection_multi' : 'instance.web_view_editor.ViewEditor.FieldSelectMulti',
- 'selection' : 'instance.web_view_editor.ViewEditor.FieldSelect',
- 'char' : 'instance.web_view_editor.ViewEditor.FieldChar',
- 'float' : 'instance.web_view_editor.ViewEditor.FieldFloat'
+
+ViewEditor.property_widget = new Registry({
+ 'boolean' : ViewEditor.FieldBoolean,
+ 'selection_multi' : ViewEditor.FieldSelectMulti,
+ 'selection' : ViewEditor.FieldSelect,
+ 'char' : ViewEditor.FieldChar,
+ 'float' : ViewEditor.FieldFloat
+});
+
});
-};