summaryrefslogtreecommitdiff
path: root/addons/web_mobile/static/src/js
diff options
context:
space:
mode:
authorniv-openerp <nicolas.vanhoren@openerp.com>2011-08-30 14:21:37 +0200
committerniv-openerp <nicolas.vanhoren@openerp.com>2011-08-30 14:21:37 +0200
commit558a038420cd6c49fbf5feaf1c656d2be27beef6 (patch)
treeedb01144cfa6d0d6fc02dec2170a8e00d58a3d28 /addons/web_mobile/static/src/js
parentbdd0c7cf3f6d3e065c55bd0292e29bd554a0e8b1 (diff)
parent458dacea36f1696f6a23cd713b96aa994cef9595 (diff)
[merge] many improvements to the mobile client
bzr revid: nicolas.vanhoren@openerp.com-20110830122137-xd0y347nr1ewaxve
Diffstat (limited to 'addons/web_mobile/static/src/js')
-rw-r--r--addons/web_mobile/static/src/js/chrome_mobile.js302
-rw-r--r--addons/web_mobile/static/src/js/form_mobile.js105
-rw-r--r--addons/web_mobile/static/src/js/list_mobile.js12
-rw-r--r--addons/web_mobile/static/src/js/web_mobile.js4
4 files changed, 246 insertions, 177 deletions
diff --git a/addons/web_mobile/static/src/js/chrome_mobile.js b/addons/web_mobile/static/src/js/chrome_mobile.js
index 622649bb5f8..551856e01fb 100644
--- a/addons/web_mobile/static/src/js/chrome_mobile.js
+++ b/addons/web_mobile/static/src/js/chrome_mobile.js
@@ -1,4 +1,130 @@
+/*---------------------------------------------------------
+ * OpenERP Web Mobile chrome
+ *---------------------------------------------------------*/
+
openerp.web_mobile.chrome_mobile = function(openerp) {
+
+openerp.web_mobile.mobilewebclient = function(element_id) {
+ // TODO Helper to start mobile webclient rename it openerp.base.webclient
+ var client = new openerp.web_mobile.MobileWebClient(element_id);
+ client.start();
+ return client;
+};
+
+openerp.web_mobile.MobileWebClient = openerp.base.Widget.extend({
+ init: function(element_id) {
+ var self = this;
+ this._super(null, element_id);
+ QWeb.add_template("xml/web_mobile.xml");
+ var params = {};
+ this.$element.html(QWeb.render("WebClient", {}));
+ this.session = new openerp.base.Session("oe_errors");
+ this.crashmanager = new openerp.base.CrashManager(this);
+ this.login = new openerp.web_mobile.Login(this, "oe_app");
+// this.session.on_session_invalid.add(this.login.do_ask_login);
+ },
+ start: function() {
+ this.session.start();
+ this.login.start();
+ }
+});
+
+openerp.web_mobile.Login = openerp.base.Widget.extend({
+ init: function(session, element_id) {
+ this._super(session, element_id);
+ },
+ start: function() {
+ var self = this;
+ jQuery("#oe_header").children().remove();
+ this.rpc("/base/database/get_list", {}, function(result) {
+ var selection = new openerp.web_mobile.Selection();
+ self.db_list = result.db_list;
+ self.$element.html(QWeb.render("Login", self));
+ self.$element.find("#login_btn").click(self.on_login);
+ $.mobile.initializePage();
+ });
+ this.$element
+ .removeClass("login_invalid");
+ },
+ on_login: function(ev) {
+ ev.preventDefault();
+ var self = this;
+ var $e = this.$element;
+ var db = $e.find("div select[name=database]").val();
+ var login = $e.find("div input[name=login]").val();
+ var password = $e.find("div input[name=password]").val();
+ //$e.hide();
+ // Should hide then call callback
+ this.session.session_login(db, login, password, function() {
+ if(self.session.session_is_valid()) {
+ self.on_login_valid();
+ } else {
+ self.on_login_invalid();
+ }
+ });
+ },
+ on_login_invalid: function() {
+ this.$element
+ .removeClass("login_valid")
+ .addClass("login_invalid")
+ .show();
+ },
+ on_login_valid: function() {
+ this.$element
+ .removeClass("login_invalid")
+ .addClass("login_valid");
+ //.hide();
+ this.homepage = new openerp.web_mobile.HomePage(this, "oe_app");
+ this.homepage.start();
+ },
+ do_ask_login: function(continuation) {
+ this.on_login_invalid();
+ this.on_login_valid.add({
+ position: "last",
+ unique: true,
+ callback: continuation
+ });
+ }
+});
+
+openerp.web_mobile.HomePage = openerp.base.Widget.extend({
+ init: function(session, element_id) {
+ this._super(session, element_id);
+ },
+ start: function() {
+ this.$element.html(QWeb.render("HomePage", {}));
+ this.header = new openerp.web_mobile.Header(this, "oe_header");
+ this.shortcuts = new openerp.web_mobile.Shortcuts(this, "oe_shortcuts");
+ this.menu = new openerp.web_mobile.Menu(this, "oe_menu", "oe_secondary_menu");
+ this.options = new openerp.web_mobile.Options(this, "oe_options");
+ this.header.start();
+ this.shortcuts.start();
+ this.menu.start();
+ this.options.start();
+ jQuery("#oe_header").find("h1").html('Home');
+ this.$element.find("a").click(this.on_clicked);
+ }
+});
+
+openerp.web_mobile.Header = openerp.base.Widget.extend({
+ init: function(session, element_id) {
+ this._super(session, element_id);
+ },
+ start: function() {
+ var self = this;
+ self.$element.html(QWeb.render("Header", this));
+ self.$element.find("a").click(this.on_clicked);
+ },
+ on_clicked: function(ev) {
+ $opt = $(ev.currentTarget);
+ current_id = $opt.attr('id');
+ if (current_id == 'home') {
+ this.homepage = new openerp.web_mobile.HomePage(this, "oe_app");
+ this.homepage.start();
+ }
+ }
+});
+
openerp.web_mobile.Shortcuts = openerp.base.Widget.extend({
init: function(session, element_id) {
this._super(session, element_id);
@@ -15,27 +141,44 @@ openerp.web_mobile.Shortcuts = openerp.base.Widget.extend({
id = $shortcut.data('menu');
res_id = $shortcut.data('res');
jQuery("#oe_header").find("h1").html($shortcut.data('name'));
- this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", res_id);
+ this.listview = new openerp.web_mobile.ListView(this, "oe_app", res_id);
this.listview.start();
}
});
-openerp.web_mobile.Header = openerp.base.Widget.extend({
- init: function(session, element_id) {
+
+openerp.web_mobile.Menu = openerp.base.Widget.extend({
+ init: function(session, element_id, secondary_menu_id) {
this._super(session, element_id);
+ this.secondary_menu_id = secondary_menu_id;
+ this.$secondary_menu = $("#" + secondary_menu_id);
+ this.menu = false;
},
start: function() {
- this.$element.html(QWeb.render("Header", this));
- this.$element.find("a").click(this.on_clicked);
+ this.rpc("/base/menu/load", {}, this.on_loaded);
},
- on_clicked: function(ev) {
- $opt = $(ev.currentTarget);
- current_id = $opt.attr('id');
- if (current_id == 'home') {
- this.homepage = new openerp.web_mobile.Login(this.session, "oe_app");
- this.homepage.on_login_valid();
+ on_loaded: function(data) {
+ this.data = data;
+ this.$element.html(QWeb.render("Menu", this.data));
+ this.$element.add(this.$secondary_menu).find("a").click(this.on_menu_click);
+ },
+ on_menu_click: function(ev, id) {
+ $menu = $(ev.currentTarget);
+ id = $menu.data('menu');
+ for (var i = 0; i < this.data.data.children.length; i++) {
+ if (this.data.data.children[i].id == id) {
+ this.children = this.data.data.children[i];
+ }
}
+ jQuery("#oe_header").find("h1").html($menu.data('name'));
+ this.$element
+ .removeClass("login_valid")
+ .addClass("secondary_menu");
+ //.hide();
+ this.secondary = new openerp.web_mobile.Secondary(this, "oe_app", this.children);
+ this.secondary.start();
}
});
+
openerp.web_mobile.Secondary = openerp.base.Widget.extend({
init: function(session, element_id, secondary_menu_id) {
this._super(session, element_id);
@@ -55,57 +198,24 @@ openerp.web_mobile.Secondary = openerp.base.Widget.extend({
}
}
jQuery("#oe_header").find("h1").html($menu.data('name'));
-
var child_len = this.children.children.length;
if (child_len > 0) {
this.$element
.removeClass("secondary_menu")
.addClass("content_menu");
//.hide();
- this.secondary = new openerp.web_mobile.Secondary(this.session, "oe_app", this.children);
+ this.secondary = new openerp.web_mobile.Secondary(this, "oe_app", this.children);
this.secondary.start();
}
else {
if (id) {
- this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id);
+ this.listview = new openerp.web_mobile.ListView(this, "oe_app", id);
this.listview.start();
}
}
}
});
-openerp.web_mobile.Menu = openerp.base.Widget.extend({
- init: function(session, element_id, secondary_menu_id) {
- this._super(session, element_id);
- this.secondary_menu_id = secondary_menu_id;
- this.$secondary_menu = $("#" + secondary_menu_id);
- this.menu = false;
- },
- start: function() {
- this.rpc("/base/menu/load", {}, this.on_loaded);
- },
- on_loaded: function(data) {
- this.data = data;
- this.$element.html(QWeb.render("Menu", this.data));
- this.$element.add(this.$secondary_menu).find("a").click(this.on_menu_click);
- },
- on_menu_click: function(ev, id) {
- $menu = $(ev.currentTarget);
- id = $menu.data('menu');
- for (var i = 0; i < this.data.data.children.length; i++) {
- if (this.data.data.children[i].id == id) {
- this.children = this.data.data.children[i];
- }
- }
- jQuery("#oe_header").find("h1").html($menu.data('name'));
- this.$element
- .removeClass("login_valid")
- .addClass("secondary_menu");
- //.hide();
- this.secondary = new openerp.web_mobile.Secondary(this.session, "oe_app", this.children);
- this.secondary.start();
- }
-});
openerp.web_mobile.Options = openerp.base.Widget.extend({
init: function(session, element_id) {
this._super(session, element_id);
@@ -117,101 +227,23 @@ openerp.web_mobile.Options = openerp.base.Widget.extend({
},
on_logout: function(ev) {
this.session.logout();
- this.login = new openerp.web_mobile.Login(this.session, "oe_app");
- this.login.start();
+// this.login = new openerp.web_mobile.Login(this, "oe_app");
+// this.login.start();
}
});
-openerp.web_mobile.Login = openerp.base.Widget.extend({
- init: function(session, element_id) {
- this._super(session, element_id);
- },
- start: function() {
- var self = this;
-
- jQuery("#oe_header").children().remove();
- this.rpc("/base/database/get_list", {}, function(result) {
- self.db_list = result.db_list;
- self.$element.html(QWeb.render("Login", self));
- self.$element.find('#database').click(self.on_db_select);
- self.$element.find("#login").click(self.on_login);
- $.mobile.initializePage();
- })
- },
- on_db_select: function(ev) {
- var db = this.$element.find("#database option:selected").val();
- jQuery("#db_text").html(db);
- },
- on_login: function(ev) {
- ev.preventDefault();
- var self = this;
- var $e = this.$element;
- var db = $e.find("div select[name=database]").val();
- var login = $e.find("div input[name=login]").val();
- var password = $e.find("div input[name=password]").val();
- //$e.hide();
- // Should hide then call callback
- this.session.session_login(db, login, password, function() {
- if(self.session.session_is_valid()) {
- self.on_login_valid();
- } else {
- self.on_login_invalid();
- }
- });
- },
- on_login_invalid: function() {
- this.$element
- .removeClass("login_valid")
- .addClass("login_invalid")
- .show();
- },
- on_login_valid: function() {
- this.$element
- .removeClass("login_invalid")
- .addClass("login_valid");
- //.hide();
- this.$element.html(QWeb.render("HomePage", {}));
- this.header = new openerp.web_mobile.Header(this.session, "oe_header");
- this.shortcuts = new openerp.web_mobile.Shortcuts(this.session, "oe_shortcuts");
- this.menu = new openerp.web_mobile.Menu(this.session, "oe_menu", "oe_secondary_menu");
- this.options = new openerp.web_mobile.Options(this.session, "oe_options");
- this.header.start();
- this.shortcuts.start();
- this.menu.start();
- this.options.start();
- jQuery("#oe_header").find("h1").html('Home');
+openerp.web_mobile.Selection = openerp.base.Widget.extend({
+ init: function (){
+ this._super();
},
- do_ask_login: function(continuation) {
- this.on_login_invalid();
- this.on_login_valid.add({
- position: "last",
- unique: true,
- callback: continuation
- });
- }
-});
-openerp.web_mobile.MobileWebClient = openerp.base.Widget.extend({
- init: function(element_id) {
+ start: function(){
+ this._super();
var self = this;
- this._super(null, element_id);
- QWeb.add_template("xml/web_mobile.xml");
- var params = {};
-
- this.$element.html(QWeb.render("WebClient", {}));
- this.session = new openerp.base.Session("oe_errors");
- this.crashmanager = new openerp.base.CrashManager(this.session);
- this.login = new openerp.web_mobile.Login(this.session, "oe_app");
- this.session.on_session_invalid.add(this.login.do_ask_login);
},
- start: function() {
- this.session.start();
- this.login.start();
+ on_select_option: function(ev){
+ ev.preventDefault();
+ var $this = ev.currentTarget;
+ $($this).prev().find(".ui-btn-text").html($($this).find("option:selected").text());
}
});
-openerp.web_mobile.mobilewebclient = function(element_id) {
- // TODO Helper to start mobile webclient rename it openerp.base.webclient
- var client = new openerp.web_mobile.MobileWebClient(element_id);
- client.start();
- return client;
-};
}
diff --git a/addons/web_mobile/static/src/js/form_mobile.js b/addons/web_mobile/static/src/js/form_mobile.js
index 793d944ddcd..4a3e2167c02 100644
--- a/addons/web_mobile/static/src/js/form_mobile.js
+++ b/addons/web_mobile/static/src/js/form_mobile.js
@@ -1,85 +1,104 @@
+/*---------------------------------------------------------
+ * OpenERP Web Mobile Form View
+ *---------------------------------------------------------*/
+
openerp.web_mobile.form_mobile = function (openerp) {
+
openerp.web_mobile.FormView = openerp.base.Widget.extend({
init: function(session, element_id, list_id, action) {
this._super(session, element_id);
this.list_id = list_id;
this.action = action;
+ this.content_expanded_class = "ui-collapsible-content ui-collapsible-content-expanded";
+ this.content_collapsed_class = "ui-collapsible-content ui-collapsible-content-collapsed";
+ this.expanded_class = "ui-collapsible-content-expanded";
+ this.collapsed_class = "ui-collapsible-content-collapsed";
+ this.plus_class = "ui-icon-plus";
+ this.minus_class = "ui-icon-minus";
},
start: function() {
var self = this;
id = this.list_id;
model = this.action.res_model;
view_id = this.action.views[1][0];
-
- this.dataset = new openerp.base.DataSetSearch(this.session, this.action.res_model, null, null);
+ this.dataset = new openerp.base.DataSetSearch(this, this.action.res_model, null, null);
this.dataset.read_slice([],{}, function (result) {
-
for (var i = 0; i < result.length; i++) {
if (result[i].id == id) {
var data = result[i];
}
}
self.rpc("/base/formview/load", {"model": model, "view_id": view_id }, function (result) {
+ var fields = result.fields_view.fields;
var view_fields = result.fields_view.arch.children;
var get_fields = self.get_fields(view_fields);
-
+ var selection = new openerp.web_mobile.Selection();
for (var j = 0; j < view_fields.length; j++) {
if (view_fields[j].tag == 'notebook') {
var notebooks = view_fields[j];
}
}
$("#oe_header").find("h1").html(result.fields_view.arch.attrs.string);
- self.$element.html(QWeb.render("FormView", {'get_fields': get_fields, 'notebooks': notebooks || false, 'fields' : result.fields_view.fields, 'values' : data }));
-
+ self.$element.html(QWeb.render("FormView", {'get_fields': get_fields, 'notebooks': notebooks || false, 'fields' : fields, 'values' : data }));
+ self.$element.find('select').change(function(ev){
+ selection.on_select_option(ev);
+ });
self.$element.find('a').click(function(){
-
for (var k = 0; k < notebooks.children.length; k++) {
-
var text = $(this).find('.ui-btn-text').text();
var next = $(this).next();
var span = $(this).find('span .ui-icon');
- var content_expanded_class = "ui-collapsible-content ui-collapsible-content-expanded";
- var content_collapsed_class = "ui-collapsible-content ui-collapsible-content-collapsed";
- var expanded_class = "ui-collapsible-content-expanded";
- var collapsed_class = "ui-collapsible-content-collapsed";
- var plus_class = "ui-icon-plus";
- var minus_class = "ui-icon-minus";
-
if (notebooks.children[k].attrs.string == $.trim(text)) {
get_fields = self.get_fields(notebooks.children[k].children);
-
$(this).parents().find('form').find('div').each( function() {
var prev = $(this).prev();
var trim_class = $.trim($(this).attr('class'));
- if (trim_class == content_expanded_class || trim_class == content_collapsed_class) {
+ if (trim_class == self.content_expanded_class || trim_class == self.content_collapsed_class) {
prev.removeClass('ui-btn-active');
-
if ($.trim(prev.find('.ui-btn-text').text()) != notebooks.children[k].attrs.string) {
- prev.find('span .ui-icon').removeClass(minus_class);
- prev.find('span .ui-icon').addClass(plus_class);
- $(this).removeClass(expanded_class);
- $(this).addClass(collapsed_class);
+ self.expanded($(this),prev.find('span .ui-icon'));
}
}
});
-
- if (next.hasClass(content_collapsed_class)) {
- span.removeClass(plus_class);
- span.addClass(minus_class);
- next.removeClass(collapsed_class);
- next.addClass(expanded_class);
+ if (next.hasClass(self.content_collapsed_class)) {
+ self.collapsed(next,span);
}
- else if (next.hasClass(content_expanded_class)) {
- span.removeClass(minus_class);
- span.addClass(plus_class);
- next.removeClass(expanded_class);
- next.addClass(collapsed_class);
+ else if (next.hasClass(self.content_expanded_class)) {
+ self.expanded(next,span);
}
if (!next.find('.detail').html().length) {
- next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data }));
+ for (var i = 0; i < get_fields.length; i++) {
+ if (fields[get_fields[i].attrs.name].type == 'one2many'){
+ var get_fields_test = self.get_fields(fields[get_fields[i].attrs.name].views.form.arch.children);
+ var fields_test = fields[get_fields[i].attrs.name]['views'].form.fields;
+ var notebook=fields[get_fields[i].attrs.name].views.form.arch;
+ }
+ }
+ if(notebook){
+ next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data,'til': notebook.attrs.string }));
+ }else{
+ next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data }));
+ }
}
+ next.find('.detail').find('a').click(function(){
+ if(next.find('.detail').find('a').next().find('.detail').html().length){
+ if (next.find('.detail').find('a').next().hasClass(self.content_collapsed_class)) {
+ self.collapsed(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
+ }
+ else if (next.find('.detail').find('a').next().hasClass(self.content_expanded_class)) {
+ self.expanded(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
+ }
+ }
+ if(!next.find('.detail').find('a').next().find('.detail').html().length){
+ next.find('.detail').find('a').next().find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields_test,'fields' : fields_test, 'values' : data }));
+ self.collapsed(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
+ }
+ });
}
}
+ self.$element.find('select').change(function(ev){
+ selection.on_select_option(ev);
+ });
});
});
});
@@ -93,12 +112,20 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
if (view_fields[i].tag == 'group') {
this.get_fields(view_fields[i].children, this.fields);
}
- if (view_fields[i].tag == 'separator') {
- this.get_fields(view_fields[i].children, this.fields);
- }
}
return this.fields;
},
+ collapsed: function(next,span) {
+ span.removeClass(this.plus_class);
+ span.addClass(this.minus_class);
+ next.removeClass(this.collapsed_class);
+ next.addClass(this.expanded_class);
+ },
+ expanded: function(next,span) {
+ span.removeClass(this.minus_class);
+ span.addClass(this.plus_class);
+ next.removeClass(this.expanded_class);
+ next.addClass(this.collapsed_class);
+ }
});
-
-}
+} \ No newline at end of file
diff --git a/addons/web_mobile/static/src/js/list_mobile.js b/addons/web_mobile/static/src/js/list_mobile.js
index 809797bfe0f..b4ba5e08cc3 100644
--- a/addons/web_mobile/static/src/js/list_mobile.js
+++ b/addons/web_mobile/static/src/js/list_mobile.js
@@ -1,4 +1,9 @@
+/*---------------------------------------------------------
+ * OpenERP Web Mobile List View
+ *---------------------------------------------------------*/
+
openerp.web_mobile.list_mobile = function (openerp) {
+
openerp.web_mobile.ListView = openerp.base.Widget.extend({
init: function(session, element_id, list_id) {
this._super(session, element_id);
@@ -35,10 +40,11 @@ openerp.web_mobile.ListView = openerp.base.Widget.extend({
var search_val = '';
}
var self = this;
- var dataset = new openerp.base.DataSetStatic(this.session, this.action.res_model, this.action.context);
+
+ var dataset = new openerp.base.DataSetStatic(this, this.action.res_model, this.action.context);
dataset.domain=[['name','ilike',search_val]];
dataset.name_search(search_val, dataset.domain, 'ilike',false ,function(result){
- self.$element.html(QWeb.render("ListView", {'records' : result.result}));
+ self.$element.html(QWeb.render("ListView", {'records' : result}));
self.$element.find("#searchid").focus();
if(request.term){
self.$element.find("#searchid").val(request.term);
@@ -60,7 +66,7 @@ openerp.web_mobile.ListView = openerp.base.Widget.extend({
$record = $(ev.currentTarget);
var self = this;
id = $record.data('id');
- this.formview = new openerp.web_mobile.FormView(this.session, "oe_app", id, this.action);
+ this.formview = new openerp.web_mobile.FormView(this, "oe_app", id, this.action);
this.formview.start();
}
});
diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js
index cdf25b22b38..119ffe1916f 100644
--- a/addons/web_mobile/static/src/js/web_mobile.js
+++ b/addons/web_mobile/static/src/js/web_mobile.js
@@ -1,3 +1,7 @@
+/*---------------------------------------------------------
+ * OpenERP Web Mobile
+ *---------------------------------------------------------*/
+
openerp.web_mobile = function(instance) {
openerp.web_mobile.chrome_mobile(instance);
openerp.web_mobile.list_mobile(instance);