From cc4c2d20ba001d5a57e6e03cd2e71febf05e58d7 Mon Sep 17 00:00:00 2001 From: =Xavier Morel Date: Thu, 23 Jun 2011 18:13:00 +0530 Subject: [PATCH 01/11] [IMP] Change the calling search_read method of dataset to function DatasetSearch from js. bzr revid: jra@tinyerp.com-20110623124300-37ldh9oeh6g6xdsq --- addons/base/static/src/js/list-editable.js | 15 +++++++++------ addons/web_mobile/static/src/js/web_mobile.js | 7 ++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/addons/base/static/src/js/list-editable.js b/addons/base/static/src/js/list-editable.js index f7eb3e27bca..b97a35d0612 100644 --- a/addons/base/static/src/js/list-editable.js +++ b/addons/base/static/src/js/list-editable.js @@ -125,6 +125,15 @@ openerp.base.list.editable = function (openerp) { 'class': $(row).attr('class'), click: function (e) {e.stopPropagation();} }) + .delegate('button.oe-edit-row-save', 'click', function () { + self.save_row(); + }) + .delegate('button.oe-edit-row-cancel', 'click', function () { + self.cancel_edition(); + }) + .delegate('button', 'keyup', function (e) { + e.stopImmediatePropagation(); + }) .keyup(function (e) { switch (e.which) { case KEY_RETURN: @@ -136,12 +145,6 @@ openerp.base.list.editable = function (openerp) { default: return; } - }) - .delegate('button.oe-edit-row-save', 'click', function () { - self.save_row(); - }) - .delegate('button.oe-edit-row-cancel', 'click', function () { - self.cancel_edition(); }); if (row) { $new_row.replaceAll(row); diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js index 08d9e81f4be..059c374d7d4 100644 --- a/addons/web_mobile/static/src/js/web_mobile.js +++ b/addons/web_mobile/static/src/js/web_mobile.js @@ -90,11 +90,8 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ on_action: function(action) { var self = this; var view_id = action.views[0][0]; - var model = action.res_model; - - self.rpc('/base/dataset/search_read', { - model: model - },function(result){ + (new openerp.base.DataSetSearch(this.session, action.res_model, null, null)) + .read_slice(false, false, false, function(result){ this.listview = new openerp.web_mobile.ListView(this.session, "oe_app"); self.$element.html(QWeb.render("ListView", {'records' : result})); }); From d96d6acd57094f600bd97a395bee01ace548588a Mon Sep 17 00:00:00 2001 From: "Jiten Rangwala (OpenERP)" Date: Tue, 5 Jul 2011 10:57:28 +0530 Subject: [PATCH 02/11] [IMP] Display Formview by click on list. bzr revid: jra@tinyerp.com-20110705052728-edz25px2mdbnaus2 --- addons/web_mobile/static/src/js/web_mobile.js | 51 ++++-- addons/web_mobile/static/src/web_mobile.html | 3 +- .../web_mobile/static/src/xml/web_mobile.xml | 145 +++++++++++++++++- 3 files changed, 187 insertions(+), 12 deletions(-) diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js index 059c374d7d4..b6cb2ffc9eb 100644 --- a/addons/web_mobile/static/src/js/web_mobile.js +++ b/addons/web_mobile/static/src/js/web_mobile.js @@ -83,18 +83,51 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ on_menu_action_loaded: function(data) { var self = this; if (data.action.length) { - var action = data.action[0][2]; - self.on_action(action); + this.action = data.action[0][2]; + this.dataset = (new openerp.base.DataSetSearch(this.session, this.action.res_model, null, null)) + this.dataset.read_slice(false, false, false, function(result){ + self.$element.html(QWeb.render("ListView", {'records' : result})); + self.$element.find("a#list-id").click(self.on_list_click); + }); } }, - on_action: function(action) { + on_list_click: function(ev) { + $record = $(ev.currentTarget); var self = this; - var view_id = action.views[0][0]; - (new openerp.base.DataSetSearch(this.session, action.res_model, null, null)) - .read_slice(false, false, false, function(result){ - this.listview = new openerp.web_mobile.ListView(this.session, "oe_app"); - self.$element.html(QWeb.render("ListView", {'records' : result})); - }); + id = $record.data('id'); + model = this.action.res_model; + view_id = this.action.views[1][0]; + this.dataset.read_slice(false, false, false, 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 view_fields = result.fields_view.arch.children; + get_fields = self.filter_fields(view_fields); + for (var j = 0; j < view_fields.length; j++) { + if (view_fields[j].tag == 'notebook') { + var notebooks = view_fields[j]; + } + } + jQuery("#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})); + }); + }); + }, + filter_fields: function(view_fields, fields) { + this.fields = fields || []; + for (var i=0; i < view_fields.length; i++){ + if (view_fields[i].tag == 'field') { + this.fields.push(view_fields[i]); + } + if (view_fields[i].tag == 'group') { + this.filter_fields(view_fields[i].children, this.fields); + } + } + return this.fields; } }); diff --git a/addons/web_mobile/static/src/web_mobile.html b/addons/web_mobile/static/src/web_mobile.html index bc95e40eb43..425666bd09c 100755 --- a/addons/web_mobile/static/src/web_mobile.html +++ b/addons/web_mobile/static/src/web_mobile.html @@ -2,11 +2,12 @@ - Login Page OpenERP mobile + OpenERP Web Mobile + diff --git a/addons/web_mobile/static/src/xml/web_mobile.xml b/addons/web_mobile/static/src/xml/web_mobile.xml index 2f8a464ab72..cc6b2908c53 100644 --- a/addons/web_mobile/static/src/xml/web_mobile.xml +++ b/addons/web_mobile/static/src/xml/web_mobile.xml @@ -67,11 +67,11 @@
-
    +
    • @@ -82,6 +82,147 @@
      + +
      +
      + +
      + + + + +
      +
      + +
      +
      +
      + + +
      +
      + +
      +
      +
      + +
      +
      + +
      +
      + + + + + + + + + + + + + +
      +
      +
      + +
      +
      + + + + + + + +
      +
      +
      + + +
      +
      + +
      +
      +
      + + +
      +
      + +
      +
      +
      + + +
      +
      + +
      +
      +
      + + +
      +
      + +
      +
      +
      + + +
      +
      + +
      +
      +
      +
      +
      + + + +
      +

      + + + + + + + + + + + + + + +

      + +
      +
      +
      +
      +
      +
      + +
      • From 565a06813837c44003355468566a58e61dfa26bb Mon Sep 17 00:00:00 2001 From: =Bhumi Thakkar Date: Thu, 7 Jul 2011 17:15:17 +0530 Subject: [PATCH 03/11] [IMP] Improved listview to add name search filter on top. bzr revid: jra@tinyerp.com-20110707114517-3zc9cl9yjogah598 --- addons/web_mobile/static/src/js/web_mobile.js | 61 +++++++++++++++---- addons/web_mobile/static/src/web_mobile.html | 5 +- .../web_mobile/static/src/xml/web_mobile.xml | 11 +++- 3 files changed, 59 insertions(+), 18 deletions(-) diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js index b6cb2ffc9eb..36fe79164e0 100644 --- a/addons/web_mobile/static/src/js/web_mobile.js +++ b/addons/web_mobile/static/src/js/web_mobile.js @@ -1,8 +1,5 @@ - openerp.web_mobile = function(openerp) { - openerp.web_mobile = {}; - openerp.web_mobile.MobileWebClient = openerp.base.Controller.extend({ init: function(element_id) { var self = this; @@ -14,9 +11,7 @@ openerp.web_mobile.MobileWebClient = openerp.base.Controller.extend({ 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(); @@ -84,26 +79,66 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ var self = this; if (data.action.length) { this.action = data.action[0][2]; - this.dataset = (new openerp.base.DataSetSearch(this.session, this.action.res_model, null, null)) - this.dataset.read_slice(false, false, false, function(result){ - self.$element.html(QWeb.render("ListView", {'records' : result})); - self.$element.find("a#list-id").click(self.on_list_click); - }); + this.on_search_data(''); } }, + on_search_data: function(request){ + if(request){ + if(request.term){ + var search_val = request.term; + }else{ + if(request.which==27 || request.which==13 || request.which==9){ + var search_val = ''; + }else if(request.which==38 || request.which==40 || request.which==39 || request.which==37){ + return; + }else if($("#searchid").val()==""){ + var search_val = ''; + }else{ + return; + } + } + } + else{ + var search_val = ''; + } + var self = this; + + var dataset = new openerp.base.DataSetStatic(this.session, 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.find("#searchid").focus(); + if(request.term){ + self.$element.find("#searchid").val(request.term); + } + self.$element.find("#searchid").autocomplete({ + source: function(req) { self.on_search_data(req); }, + focus: function(e, ui) { + e.preventDefault(); + }, + html: true, + minLength: 0, + delay: 0 + }); + self.$element.find("#searchid").keyup(self.on_search_data); + self.$element.find("a#list-id").click(self.on_list_click); + + }); + }, on_list_click: function(ev) { $record = $(ev.currentTarget); var self = this; id = $record.data('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.read_slice(false, false, false, 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 }, + self.rpc("/base/formview/load", {"model": model, "view_id": view_id }, function(result){ var view_fields = result.fields_view.arch.children; get_fields = self.filter_fields(view_fields); @@ -162,8 +197,8 @@ openerp.web_mobile.Secondary = openerp.base.Controller.extend({ } else { if (id) { - this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id); - this.listview.start(); + this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id); + this.listview.start(); } } } diff --git a/addons/web_mobile/static/src/web_mobile.html b/addons/web_mobile/static/src/web_mobile.html index 425666bd09c..b6abd9f3255 100755 --- a/addons/web_mobile/static/src/web_mobile.html +++ b/addons/web_mobile/static/src/web_mobile.html @@ -5,9 +5,10 @@ OpenERP Web Mobile - + - + + diff --git a/addons/web_mobile/static/src/xml/web_mobile.xml b/addons/web_mobile/static/src/xml/web_mobile.xml index cc6b2908c53..08727e3c5dc 100644 --- a/addons/web_mobile/static/src/xml/web_mobile.xml +++ b/addons/web_mobile/static/src/xml/web_mobile.xml @@ -67,12 +67,17 @@
        -
          + +
          • From 7ba544da8612745f4c0c1e6380086371390657a0 Mon Sep 17 00:00:00 2001 From: "Jiten Rangwala (OpenERP)" Date: Thu, 7 Jul 2011 18:31:57 +0530 Subject: [PATCH 04/11] [IMP] Improved code for call formview. bzr revid: jra@tinyerp.com-20110707130157-26jqqigzwuehmwqq --- addons/web_mobile/static/src/js/web_mobile.js | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js index 36fe79164e0..7f13472a776 100644 --- a/addons/web_mobile/static/src/js/web_mobile.js +++ b/addons/web_mobile/static/src/js/web_mobile.js @@ -129,6 +129,20 @@ openerp.web_mobile.ListView = openerp.base.Controller.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.start(); + } + }); + +openerp.web_mobile.FormView = openerp.base.Controller.extend({ + init: function(session, element_id, list_id, action) { + this._super(session, element_id); + this.list_id = list_id; + this.action = action; + }, + 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); @@ -141,7 +155,7 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ self.rpc("/base/formview/load", {"model": model, "view_id": view_id }, function(result){ var view_fields = result.fields_view.arch.children; - get_fields = self.filter_fields(view_fields); + get_fields = self.get_fields(view_fields); for (var j = 0; j < view_fields.length; j++) { if (view_fields[j].tag == 'notebook') { var notebooks = view_fields[j]; @@ -152,19 +166,19 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ }); }); }, - filter_fields: function(view_fields, fields) { + get_fields: function(view_fields, fields) { this.fields = fields || []; for (var i=0; i < view_fields.length; i++){ if (view_fields[i].tag == 'field') { this.fields.push(view_fields[i]); } if (view_fields[i].tag == 'group') { - this.filter_fields(view_fields[i].children, this.fields); + this.get_fields(view_fields[i].children, this.fields); } } return this.fields; } - }); +}); openerp.web_mobile.Secondary = openerp.base.Controller.extend({ init: function(session, element_id, secondary_menu_id) { From 151c16ef6f9d5021b02bc0ef06c6a27a168efd14 Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Fri, 8 Jul 2011 17:56:49 +0530 Subject: [PATCH 05/11] [IMP] Improved namespcae for web mobile. bzr revid: bth@tinyerp.com-20110708122649-yvpaxch34bsf38il --- addons/base/static/src/js/base.js | 7 +- .../web_mobile/static/src/js/chrome_mobile.js | 217 +++++++++++ .../web_mobile/static/src/js/client_mobile.js | 321 +++++++++++++++++ .../web_mobile/static/src/js/list_mobile.js | 99 +++++ addons/web_mobile/static/src/js/web_mobile.js | 340 +----------------- addons/web_mobile/static/src/web_mobile.html | 10 +- 6 files changed, 650 insertions(+), 344 deletions(-) create mode 100644 addons/web_mobile/static/src/js/chrome_mobile.js create mode 100644 addons/web_mobile/static/src/js/client_mobile.js create mode 100644 addons/web_mobile/static/src/js/list_mobile.js diff --git a/addons/base/static/src/js/base.js b/addons/base/static/src/js/base.js index 55e4929e4c0..0b942dca241 100644 --- a/addons/base/static/src/js/base.js +++ b/addons/base/static/src/js/base.js @@ -107,11 +107,14 @@ _session_id: "session" + session_counter++, screen: openerp.screen, sessions: openerp.sessions, - base: {} + base: {}, + web_mobile: {} }; openerp.sessions[new_instance._session_id] = new_instance; - if (!skip_init) + if (!skip_init){ openerp.base(new_instance); + openerp.web_mobile(new_instance); + } return new_instance; } }; diff --git a/addons/web_mobile/static/src/js/chrome_mobile.js b/addons/web_mobile/static/src/js/chrome_mobile.js new file mode 100644 index 00000000000..138d37136a9 --- /dev/null +++ b/addons/web_mobile/static/src/js/chrome_mobile.js @@ -0,0 +1,217 @@ +openerp.web_mobile.chrome_mobile = function(openerp) { +openerp.web_mobile.Shortcuts = openerp.base.Controller.extend({ + init: function(session, element_id) { + this._super(session, element_id); + }, + start: function() { + var self = this; + this.rpc('/base/session/sc_list',{} ,function(res){ + self.$element.html(QWeb.render("Shortcuts", {'sc' : res})) + self.$element.find("a").click(self.on_clicked); + }) + }, + on_clicked: function(ev) { + $shortcut = $(ev.currentTarget); + 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.start(); + } +}); +openerp.web_mobile.Header = openerp.base.Controller.extend({ + init: function(session, element_id) { + this._super(session, element_id); + }, + start: function() { + this.$element.html(QWeb.render("Header", this)); + this.$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.Login(this.session, "oe_app"); + this.homepage.on_login_valid(); + } + } +}); +openerp.web_mobile.Secondary = openerp.base.Controller.extend({ + init: function(session, element_id, secondary_menu_id) { + this._super(session, element_id); + this.data = secondary_menu_id; + }, + start: function(ev, id) { + var v = { menu : this.data }; + this.$element.html(QWeb.render("Menu.secondary", v)); + 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.children.length; i++) { + if (this.data.children[i].id == id) { + this.children = this.data.children[i]; + } + } + 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.start(); + } + else { + if (id) { + this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id); + this.listview.start(); + } + } + } +}); + +openerp.web_mobile.Menu = openerp.base.Controller.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.Controller.extend({ + init: function(session, element_id) { + this._super(session, element_id); + }, + start: function() { + var self = this; + this.$element.html(QWeb.render("Options", this)); + self.$element.find("#logout").click(self.on_logout); + }, + on_logout: function(ev) { + this.session.logout(); + this.login = new openerp.web_mobile.Login(this.session, "oe_app"); + this.login.start(); + } +}); +openerp.web_mobile.Login = openerp.base.Controller.extend({ + init: function(session, element_id) { + this._super(session, element_id); + }, + start: function() { + var self = this; + + jQuery("#oe_header").children().remove(); + this.rpc("/base/session/get_databases_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'); + + }, + 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.Controller.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.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(); + } +}); +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; +}; +} \ No newline at end of file diff --git a/addons/web_mobile/static/src/js/client_mobile.js b/addons/web_mobile/static/src/js/client_mobile.js new file mode 100644 index 00000000000..1d69a69ba06 --- /dev/null +++ b/addons/web_mobile/static/src/js/client_mobile.js @@ -0,0 +1,321 @@ +openerp.web_mobile.client_mobile = function(openerp) { +openerp.web_mobile.views.add('client_mobile', 'openerp.web_mobile.MobileWebClient'); +openerp.web_mobile.MobileWebClient = openerp.web_mobile.Controller.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.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(); + } +}); + +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.Header = openerp.base.Controller.extend({ + init: function(session, element_id) { + this._super(session, element_id); + }, + start: function() { + this.$element.html(QWeb.render("Header", this)); + this.$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.Login(this.session, "oe_app"); + this.homepage.on_login_valid(); + } + } + +}); + +openerp.web_mobile.Shortcuts = openerp.base.Controller.extend({ + init: function(session, element_id) { + this._super(session, element_id); + }, + start: function() { + var self = this; + this.rpc('/base/session/sc_list',{} ,function(res){ + self.$element.html(QWeb.render("Shortcuts", {'sc' : res})) + self.$element.find("a").click(self.on_clicked); + }) + }, + on_clicked: function(ev) { + $shortcut = $(ev.currentTarget); + 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.start(); + } +}); +/*openerp.web_mobile.ListView = openerp.base.Controller.extend({ + init: function(session, element_id, list_id) { + this._super(session, element_id); + this.list_id = list_id; + }, + start: function() { + this.rpc('/base/menu/action', {'menu_id': this.list_id}, + this.on_menu_action_loaded); + }, + on_menu_action_loaded: function(data) { + var self = this; + if (data.action.length) { + this.action = data.action[0][2]; + this.on_search_data(''); + } + }, + on_search_data: function(request){ + if(request){ + if(request.term){ + var search_val = request.term; + }else{ + if(request.which==27 || request.which==13 || request.which==9){ + var search_val = ''; + }else if(request.which==38 || request.which==40 || request.which==39 || request.which==37){ + return; + }else if($("#searchid").val()==""){ + var search_val = ''; + }else{ + return; + } + } + } + else{ + var search_val = ''; + } + var self = this; + var dataset = new openerp.base.DataSetStatic(this.session, 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.find("#searchid").focus(); + if(request.term){ + self.$element.find("#searchid").val(request.term); + } + self.$element.find("#searchid").autocomplete({ + source: function(req) { self.on_search_data(req); }, + focus: function(e, ui) { + e.preventDefault(); + }, + html: true, + minLength: 0, + delay: 0 + }); + self.$element.find("#searchid").keyup(self.on_search_data); + self.$element.find("a#list-id").click(self.on_list_click); + }); + }, + on_list_click: function(ev) { + $record = $(ev.currentTarget); + var self = this; + id = $record.data('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.read_slice(false, false, false, 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 view_fields = result.fields_view.arch.children; + get_fields = self.filter_fields(view_fields); + for (var j = 0; j < view_fields.length; j++) { + if (view_fields[j].tag == 'notebook') { + var notebooks = view_fields[j]; + } + } + jQuery("#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})); + }); + }); + }, + filter_fields: function(view_fields, fields) { + this.fields = fields || []; + for (var i=0; i < view_fields.length; i++){ + if (view_fields[i].tag == 'field') { + this.fields.push(view_fields[i]); + } + if (view_fields[i].tag == 'group') { + this.filter_fields(view_fields[i].children, this.fields); + } + } + return this.fields; + } + });*/ + +openerp.web_mobile.Secondary = openerp.base.Controller.extend({ + init: function(session, element_id, secondary_menu_id) { + this._super(session, element_id); + this.data = secondary_menu_id; + }, + start: function(ev, id) { + var v = { menu : this.data }; + this.$element.html(QWeb.render("Menu.secondary", v)); + 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.children.length; i++) { + if (this.data.children[i].id == id) { + this.children = this.data.children[i]; + } + } + 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.start(); + } + else { + if (id) { + this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id); + this.listview.start(); + } + } + } +}); + +openerp.web_mobile.Menu = openerp.base.Controller.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.Controller.extend({ + init: function(session, element_id) { + this._super(session, element_id); + }, + start: function() { + var self = this; + this.$element.html(QWeb.render("Options", this)); + self.$element.find("#logout").click(self.on_logout); + }, + on_logout: function(ev) { + this.session.logout(); + this.login = new openerp.web_mobile.Login(this.session, "oe_app"); + this.login.start(); + } +}); +openerp.web_mobile.Login = openerp.base.Controller.extend({ + init: function(session, element_id) { + this._super(session, element_id); + }, + start: function() { + var self = this; + + jQuery("#oe_header").children().remove(); + this.rpc("/base/session/get_databases_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'); + + }, + do_ask_login: function(continuation) { + this.on_login_invalid(); + this.on_login_valid.add({ + position: "last", + unique: true, + callback: continuation + }); + } +}); +} diff --git a/addons/web_mobile/static/src/js/list_mobile.js b/addons/web_mobile/static/src/js/list_mobile.js new file mode 100644 index 00000000000..e6e1a7ce225 --- /dev/null +++ b/addons/web_mobile/static/src/js/list_mobile.js @@ -0,0 +1,99 @@ +openerp.web_mobile.list_mobile = function (openerp) { +openerp.web_mobile.ListView = openerp.base.Controller.extend({ + init: function(session, element_id, list_id) { + this._super(session, element_id); + this.list_id = list_id; + }, + start: function() { + this.rpc('/base/menu/action', {'menu_id': this.list_id}, + this.on_menu_action_loaded); + }, + on_menu_action_loaded: function(data) { + var self = this; + if (data.action.length) { + this.action = data.action[0][2]; + this.on_search_data(''); + } + }, + on_search_data: function(request){ + if(request){ + if(request.term){ + var search_val = request.term; + }else{ + if(request.which==27 || request.which==13 || request.which==9){ + var search_val = ''; + }else if(request.which==38 || request.which==40 || request.which==39 || request.which==37){ + return; + }else if($("#searchid").val()==""){ + var search_val = ''; + }else{ + return; + } + } + } + else{ + var search_val = ''; + } + var self = this; + var dataset = new openerp.base.DataSetStatic(this.session, 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.find("#searchid").focus(); + if(request.term){ + self.$element.find("#searchid").val(request.term); + } + self.$element.find("#searchid").autocomplete({ + source: function(req) { self.on_search_data(req); }, + focus: function(e, ui) { + e.preventDefault(); + }, + html: true, + minLength: 0, + delay: 0 + }); + self.$element.find("#searchid").keyup(self.on_search_data); + self.$element.find("a#list-id").click(self.on_list_click); + }); + }, + on_list_click: function(ev) { + $record = $(ev.currentTarget); + var self = this; + id = $record.data('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.read_slice(false, false, false, 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 view_fields = result.fields_view.arch.children; + get_fields = self.filter_fields(view_fields); + for (var j = 0; j < view_fields.length; j++) { + if (view_fields[j].tag == 'notebook') { + var notebooks = view_fields[j]; + } + } + jQuery("#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})); + }); + }); + }, + filter_fields: function(view_fields, fields) { + this.fields = fields || []; + for (var i=0; i < view_fields.length; i++){ + if (view_fields[i].tag == 'field') { + this.fields.push(view_fields[i]); + } + if (view_fields[i].tag == 'group') { + this.filter_fields(view_fields[i].children, this.fields); + } + } + return this.fields; + } + }); +} \ No newline at end of file diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js index 7f13472a776..3b516ac350e 100644 --- a/addons/web_mobile/static/src/js/web_mobile.js +++ b/addons/web_mobile/static/src/js/web_mobile.js @@ -1,339 +1,5 @@ -openerp.web_mobile = function(openerp) { -openerp.web_mobile = {}; -openerp.web_mobile.MobileWebClient = openerp.base.Controller.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.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(); - } -}); - -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 = function(instance) { + openerp.web_mobile.chrome_mobile(instance); + openerp.web_mobile.list_mobile(instance); }; -openerp.web_mobile.Header = openerp.base.Controller.extend({ - init: function(session, element_id) { - this._super(session, element_id); - }, - start: function() { - this.$element.html(QWeb.render("Header", this)); - this.$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.Login(this.session, "oe_app"); - this.homepage.on_login_valid(); - } - } - -}); - -openerp.web_mobile.Shortcuts = openerp.base.Controller.extend({ - init: function(session, element_id) { - this._super(session, element_id); - }, - start: function() { - var self = this; - this.rpc('/base/session/sc_list',{} ,function(res){ - self.$element.html(QWeb.render("Shortcuts", {'sc' : res})) - self.$element.find("a").click(self.on_clicked); - }) - }, - on_clicked: function(ev) { - $shortcut = $(ev.currentTarget); - 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.start(); - } -}); - -openerp.web_mobile.ListView = openerp.base.Controller.extend({ - init: function(session, element_id, list_id) { - this._super(session, element_id); - this.list_id = list_id; - }, - start: function() { - this.rpc('/base/menu/action', {'menu_id': this.list_id}, - this.on_menu_action_loaded); - }, - on_menu_action_loaded: function(data) { - var self = this; - if (data.action.length) { - this.action = data.action[0][2]; - this.on_search_data(''); - } - }, - on_search_data: function(request){ - if(request){ - if(request.term){ - var search_val = request.term; - }else{ - if(request.which==27 || request.which==13 || request.which==9){ - var search_val = ''; - }else if(request.which==38 || request.which==40 || request.which==39 || request.which==37){ - return; - }else if($("#searchid").val()==""){ - var search_val = ''; - }else{ - return; - } - } - } - else{ - var search_val = ''; - } - var self = this; - - var dataset = new openerp.base.DataSetStatic(this.session, 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.find("#searchid").focus(); - if(request.term){ - self.$element.find("#searchid").val(request.term); - } - self.$element.find("#searchid").autocomplete({ - source: function(req) { self.on_search_data(req); }, - focus: function(e, ui) { - e.preventDefault(); - }, - html: true, - minLength: 0, - delay: 0 - }); - self.$element.find("#searchid").keyup(self.on_search_data); - self.$element.find("a#list-id").click(self.on_list_click); - - }); - }, - on_list_click: function(ev) { - $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.start(); - } - }); - -openerp.web_mobile.FormView = openerp.base.Controller.extend({ - init: function(session, element_id, list_id, action) { - this._super(session, element_id); - this.list_id = list_id; - this.action = action; - }, - 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.read_slice(false, false, false, 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 view_fields = result.fields_view.arch.children; - get_fields = self.get_fields(view_fields); - for (var j = 0; j < view_fields.length; j++) { - if (view_fields[j].tag == 'notebook') { - var notebooks = view_fields[j]; - } - } - jQuery("#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})); - }); - }); - }, - get_fields: function(view_fields, fields) { - this.fields = fields || []; - for (var i=0; i < view_fields.length; i++){ - if (view_fields[i].tag == 'field') { - this.fields.push(view_fields[i]); - } - if (view_fields[i].tag == 'group') { - this.get_fields(view_fields[i].children, this.fields); - } - } - return this.fields; - } -}); - -openerp.web_mobile.Secondary = openerp.base.Controller.extend({ - init: function(session, element_id, secondary_menu_id) { - this._super(session, element_id); - this.data = secondary_menu_id; - }, - start: function(ev, id) { - var v = { menu : this.data }; - this.$element.html(QWeb.render("Menu.secondary", v)); - 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.children.length; i++) { - if (this.data.children[i].id == id) { - this.children = this.data.children[i]; - } - } - 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.start(); - } - else { - if (id) { - this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id); - this.listview.start(); - } - } - } -}); - -openerp.web_mobile.Menu = openerp.base.Controller.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.Controller.extend({ - init: function(session, element_id) { - this._super(session, element_id); - }, - start: function() { - var self = this; - this.$element.html(QWeb.render("Options", this)); - self.$element.find("#logout").click(self.on_logout); - }, - on_logout: function(ev) { - this.session.logout(); - this.login = new openerp.web_mobile.Login(this.session, "oe_app"); - this.login.start(); - } -}); -openerp.web_mobile.Login = openerp.base.Controller.extend({ - init: function(session, element_id) { - this._super(session, element_id); - }, - start: function() { - var self = this; - - jQuery("#oe_header").children().remove(); - this.rpc("/base/session/get_databases_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'); - - }, - do_ask_login: function(continuation) { - this.on_login_invalid(); - this.on_login_valid.add({ - position: "last", - unique: true, - callback: continuation - }); - } -}); - -}; diff --git a/addons/web_mobile/static/src/web_mobile.html b/addons/web_mobile/static/src/web_mobile.html index b6abd9f3255..216e6436c6f 100755 --- a/addons/web_mobile/static/src/web_mobile.html +++ b/addons/web_mobile/static/src/web_mobile.html @@ -19,21 +19,21 @@ - + - + + + - +
            From 72143aa8820a53cad6ddef77c7414e4528ad8f58 Mon Sep 17 00:00:00 2001 From: "Jiten Rangwala (OpenERP)" Date: Fri, 8 Jul 2011 18:21:00 +0530 Subject: [PATCH 06/11] [REM] Removed unnecessary file. bzr revid: jra@tinyerp.com-20110708125100-4rk0wak8srv7f6mi --- .../web_mobile/static/src/js/client_mobile.js | 321 ------------------ 1 file changed, 321 deletions(-) delete mode 100644 addons/web_mobile/static/src/js/client_mobile.js diff --git a/addons/web_mobile/static/src/js/client_mobile.js b/addons/web_mobile/static/src/js/client_mobile.js deleted file mode 100644 index 1d69a69ba06..00000000000 --- a/addons/web_mobile/static/src/js/client_mobile.js +++ /dev/null @@ -1,321 +0,0 @@ -openerp.web_mobile.client_mobile = function(openerp) { -openerp.web_mobile.views.add('client_mobile', 'openerp.web_mobile.MobileWebClient'); -openerp.web_mobile.MobileWebClient = openerp.web_mobile.Controller.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.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(); - } -}); - -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.Header = openerp.base.Controller.extend({ - init: function(session, element_id) { - this._super(session, element_id); - }, - start: function() { - this.$element.html(QWeb.render("Header", this)); - this.$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.Login(this.session, "oe_app"); - this.homepage.on_login_valid(); - } - } - -}); - -openerp.web_mobile.Shortcuts = openerp.base.Controller.extend({ - init: function(session, element_id) { - this._super(session, element_id); - }, - start: function() { - var self = this; - this.rpc('/base/session/sc_list',{} ,function(res){ - self.$element.html(QWeb.render("Shortcuts", {'sc' : res})) - self.$element.find("a").click(self.on_clicked); - }) - }, - on_clicked: function(ev) { - $shortcut = $(ev.currentTarget); - 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.start(); - } -}); -/*openerp.web_mobile.ListView = openerp.base.Controller.extend({ - init: function(session, element_id, list_id) { - this._super(session, element_id); - this.list_id = list_id; - }, - start: function() { - this.rpc('/base/menu/action', {'menu_id': this.list_id}, - this.on_menu_action_loaded); - }, - on_menu_action_loaded: function(data) { - var self = this; - if (data.action.length) { - this.action = data.action[0][2]; - this.on_search_data(''); - } - }, - on_search_data: function(request){ - if(request){ - if(request.term){ - var search_val = request.term; - }else{ - if(request.which==27 || request.which==13 || request.which==9){ - var search_val = ''; - }else if(request.which==38 || request.which==40 || request.which==39 || request.which==37){ - return; - }else if($("#searchid").val()==""){ - var search_val = ''; - }else{ - return; - } - } - } - else{ - var search_val = ''; - } - var self = this; - var dataset = new openerp.base.DataSetStatic(this.session, 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.find("#searchid").focus(); - if(request.term){ - self.$element.find("#searchid").val(request.term); - } - self.$element.find("#searchid").autocomplete({ - source: function(req) { self.on_search_data(req); }, - focus: function(e, ui) { - e.preventDefault(); - }, - html: true, - minLength: 0, - delay: 0 - }); - self.$element.find("#searchid").keyup(self.on_search_data); - self.$element.find("a#list-id").click(self.on_list_click); - }); - }, - on_list_click: function(ev) { - $record = $(ev.currentTarget); - var self = this; - id = $record.data('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.read_slice(false, false, false, 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 view_fields = result.fields_view.arch.children; - get_fields = self.filter_fields(view_fields); - for (var j = 0; j < view_fields.length; j++) { - if (view_fields[j].tag == 'notebook') { - var notebooks = view_fields[j]; - } - } - jQuery("#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})); - }); - }); - }, - filter_fields: function(view_fields, fields) { - this.fields = fields || []; - for (var i=0; i < view_fields.length; i++){ - if (view_fields[i].tag == 'field') { - this.fields.push(view_fields[i]); - } - if (view_fields[i].tag == 'group') { - this.filter_fields(view_fields[i].children, this.fields); - } - } - return this.fields; - } - });*/ - -openerp.web_mobile.Secondary = openerp.base.Controller.extend({ - init: function(session, element_id, secondary_menu_id) { - this._super(session, element_id); - this.data = secondary_menu_id; - }, - start: function(ev, id) { - var v = { menu : this.data }; - this.$element.html(QWeb.render("Menu.secondary", v)); - 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.children.length; i++) { - if (this.data.children[i].id == id) { - this.children = this.data.children[i]; - } - } - 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.start(); - } - else { - if (id) { - this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id); - this.listview.start(); - } - } - } -}); - -openerp.web_mobile.Menu = openerp.base.Controller.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.Controller.extend({ - init: function(session, element_id) { - this._super(session, element_id); - }, - start: function() { - var self = this; - this.$element.html(QWeb.render("Options", this)); - self.$element.find("#logout").click(self.on_logout); - }, - on_logout: function(ev) { - this.session.logout(); - this.login = new openerp.web_mobile.Login(this.session, "oe_app"); - this.login.start(); - } -}); -openerp.web_mobile.Login = openerp.base.Controller.extend({ - init: function(session, element_id) { - this._super(session, element_id); - }, - start: function() { - var self = this; - - jQuery("#oe_header").children().remove(); - this.rpc("/base/session/get_databases_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'); - - }, - do_ask_login: function(continuation) { - this.on_login_invalid(); - this.on_login_valid.add({ - position: "last", - unique: true, - callback: continuation - }); - } -}); -} From 73aee8b5139338b1631049cc93a7f649e22616eb Mon Sep 17 00:00:00 2001 From: "Jiten Rangwala (OpenERP)" Date: Fri, 8 Jul 2011 18:38:29 +0530 Subject: [PATCH 07/11] [IMP] Split the code to add js file for mobile form view. bzr revid: jra@tinyerp.com-20110708130829-a6qgugpej7fqa46i --- .../web_mobile/static/src/js/form_mobile.js | 48 +++++++++++++++++++ .../web_mobile/static/src/js/list_mobile.js | 36 +------------- addons/web_mobile/static/src/js/web_mobile.js | 1 + addons/web_mobile/static/src/web_mobile.html | 1 + 4 files changed, 52 insertions(+), 34 deletions(-) create mode 100644 addons/web_mobile/static/src/js/form_mobile.js diff --git a/addons/web_mobile/static/src/js/form_mobile.js b/addons/web_mobile/static/src/js/form_mobile.js new file mode 100644 index 00000000000..25c74dfcd51 --- /dev/null +++ b/addons/web_mobile/static/src/js/form_mobile.js @@ -0,0 +1,48 @@ +openerp.web_mobile.form_mobile = function (openerp) { +openerp.web_mobile.FormView = openerp.base.Controller.extend({ + init: function(session, element_id, list_id, action) { + this._super(session, element_id); + this.list_id = list_id; + this.action = action; + }, + 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.read_slice(false, false, false, 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 view_fields = result.fields_view.arch.children; + get_fields = self.get_fields(view_fields); + for (var j = 0; j < view_fields.length; j++) { + if (view_fields[j].tag == 'notebook') { + var notebooks = view_fields[j]; + } + } + jQuery("#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})); + }); + }); + }, + get_fields: function(view_fields, fields) { + this.fields = fields || []; + for (var i=0; i < view_fields.length; i++){ + if (view_fields[i].tag == 'field') { + this.fields.push(view_fields[i]); + } + if (view_fields[i].tag == 'group') { + this.get_fields(view_fields[i].children, this.fields); + } + } + return this.fields; + } +}); + +} \ 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 e6e1a7ce225..f7a88019e3d 100644 --- a/addons/web_mobile/static/src/js/list_mobile.js +++ b/addons/web_mobile/static/src/js/list_mobile.js @@ -60,40 +60,8 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ $record = $(ev.currentTarget); var self = this; id = $record.data('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.read_slice(false, false, false, 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 view_fields = result.fields_view.arch.children; - get_fields = self.filter_fields(view_fields); - for (var j = 0; j < view_fields.length; j++) { - if (view_fields[j].tag == 'notebook') { - var notebooks = view_fields[j]; - } - } - jQuery("#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})); - }); - }); - }, - filter_fields: function(view_fields, fields) { - this.fields = fields || []; - for (var i=0; i < view_fields.length; i++){ - if (view_fields[i].tag == 'field') { - this.fields.push(view_fields[i]); - } - if (view_fields[i].tag == 'group') { - this.filter_fields(view_fields[i].children, this.fields); - } - } - return this.fields; + this.formview = new openerp.web_mobile.FormView(this.session, "oe_app", id, this.action); + this.formview.start(); } }); } \ No newline at end of file diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js index 3b516ac350e..be856678e31 100644 --- a/addons/web_mobile/static/src/js/web_mobile.js +++ b/addons/web_mobile/static/src/js/web_mobile.js @@ -1,5 +1,6 @@ openerp.web_mobile = function(instance) { openerp.web_mobile.chrome_mobile(instance); openerp.web_mobile.list_mobile(instance); + openerp.web_mobile.form_mobile(instance); }; diff --git a/addons/web_mobile/static/src/web_mobile.html b/addons/web_mobile/static/src/web_mobile.html index 216e6436c6f..ba437501cb9 100755 --- a/addons/web_mobile/static/src/web_mobile.html +++ b/addons/web_mobile/static/src/web_mobile.html @@ -24,6 +24,7 @@ + + - +