diff options
Diffstat (limited to 'addons/web_mobile/static/src')
| -rw-r--r-- | addons/web_mobile/static/src/css/web_mobile.css | 20 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/js/chrome_mobile.js | 302 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/js/form_mobile.js | 105 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/js/list_mobile.js | 12 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/js/web_mobile.js | 4 | ||||
| -rwxr-xr-x | addons/web_mobile/static/src/web_mobile.html | 21 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/xml/web_mobile.xml | 344 |
7 files changed, 452 insertions, 356 deletions
diff --git a/addons/web_mobile/static/src/css/web_mobile.css b/addons/web_mobile/static/src/css/web_mobile.css index 18cf93f4d66..4017d5ae7e3 100644 --- a/addons/web_mobile/static/src/css/web_mobile.css +++ b/addons/web_mobile/static/src/css/web_mobile.css @@ -2,3 +2,23 @@ .ui-collapsible-content-expanded { display: block; } + +.login_error_message { + display: none; + background-color: #9A0404; + border-radius: 12px; + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + color: white; + font-family: Ubuntu, Helvetica, sans-serif; + font-size: 16px; + padding: 5px; + margin-top: 5px; + text-align: center; +} +.login_invalid .login_error_message { + display: block; +} +.login_valid .login_error_message { + display: none; +} 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); diff --git a/addons/web_mobile/static/src/web_mobile.html b/addons/web_mobile/static/src/web_mobile.html index bd74e5f4f66..6efc28b6532 100755 --- a/addons/web_mobile/static/src/web_mobile.html +++ b/addons/web_mobile/static/src/web_mobile.html @@ -3,20 +3,20 @@ <head>
<meta charset="utf-8" />
<title>OpenERP Web Mobile</title>
- <link rel="stylesheet" href="/web_mobile/static/lib/jquery_mobile/css/jquery.mobile-1.0a4.1.css" />
- <script type="text/javascript" src="/base/static/lib/LABjs/LAB.js"></script>
+ <link rel="stylesheet" href="/web_mobile/static/lib/jquery_mobile/css/jquery.mobile-1.0a4.1.css"/>
+ <link rel="stylesheet" href="/web_mobile/static/src/css/web_mobile.css"/>
+
<script type="text/javascript" src="/base/static/lib/jquery/jquery-1.6.2.js"></script>
<script type="text/javascript" src="/base/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
-
- <script type="text/javascript" src="/web_mobile/static/lib/jquery_mobile/js/jquery.mobile-1.0a4.1.js"></script>
<script type="text/javascript" src="/base/static/lib/jquery.ba-bbq/jquery.ba-bbq.js"></script>
<script type="text/javascript" src="/base/static/lib/underscore/underscore.js"></script>
<script type="text/javascript" src="/base/static/lib/underscore/underscore.string.js"></script>
+ <script type="text/javascript" src="/web_mobile/static/lib/jquery_mobile/js/jquery.mobile-1.0a4.1.js"></script>
<script type="text/javascript" src="/base/static/lib/qweb/qweb2.js"></script>
-
- <script type="text/javascript" src="/base/static/src/js/base.js"></script>
+ <script type="text/javascript" src="/base/static/src/js/boot.js"></script> + <script type="text/javascript" src="/base/static/src/js/core.js"></script>
<script type="text/javascript" src="/base/static/src/js/chrome.js"></script>
<script type="text/javascript" src="/base/static/src/js/data.js"></script>
<script type="text/javascript" src="/base/static/src/js/formats.js"></script>
@@ -26,19 +26,16 @@ <script type="text/javascript" src="/web_mobile/static/src/js/list_mobile.js"></script>
<script type="text/javascript" src="/web_mobile/static/src/js/form_mobile.js"></script>
- <link rel="stylesheet" href="/web_mobile/static/src/css/web_mobile.css"/>
<script type="text/javascript">
$(function() {
QWeb = window.QWeb || new QWeb2.Engine();
var oe = openerp.init();
+ openerp.web_mobile(oe);
oe.web_mobile.mobilewebclient("moe");
});
</script>
-
</head>
-
<body>
- <div id="moe" class="openerp" data-role="page"></div>
+ <div id="moe" class="openerp"></div>
</body>
-
-</html>
+</html>
\ No newline at end of file diff --git a/addons/web_mobile/static/src/xml/web_mobile.xml b/addons/web_mobile/static/src/xml/web_mobile.xml index fa5fe0c6b27..a3af2e39b90 100644 --- a/addons/web_mobile/static/src/xml/web_mobile.xml +++ b/addons/web_mobile/static/src/xml/web_mobile.xml @@ -4,54 +4,35 @@ <templates id="template" xml:space="preserve"> <t t-name="WebClient"> - <div class="ui-page ui-body-c ui-page-active" data-role="page"> + <div data-role="page"> <div id="oe_header"></div> <div id="oe_app"></div> </div> </t> -<t t-name="Header"> - <div role="banner" class="ui-bar-b ui-header" data-role="header" data-theme="b"> - <h1 aria-level="1" role="heading" tabindex="0" class="ui-title">OpenERP</h1> - <a id="home" class="ui-btn-right jqm-home ui-btn ui-btn-icon-notext ui-btn-corner-all ui-shadow ui-btn-up-b" data-direction="reverse" data-iconpos="notext" data-icon="home" href="#" title="Home" data-theme="b"> - <span class="ui-btn-inner ui-btn-corner-all"> - <span class="ui-btn-text">Home</span> - <span class="ui-icon ui-icon-home ui-icon-shadow"></span> - </span> - </a> - </div> -</t> - <t t-name="Login"> - <div role="banner" class="ui-bar-b ui-header" data-role="header" data-theme="b"> - <h1 aria-level="1" role="heading" tabindex="0" class="ui-title">OpenERP</h1> + <div data-role="header" data-theme="b"> + <h1>OpenERP</h1> </div> - <div role="main" class="ui-content" data-role="content"> + <div data-role="content"> <fieldset> - <div class="ui-field-contain ui-body ui-br" data-role="fieldcontain"> - <label for="database" class="select ui-select">Database:</label> - <div class="ui-select"> - <div data-theme="c" class="ui-btn ui-btn-icon-right ui-btn-corner-all ui-shadow ui-btn-up-c"> - <span class="ui-btn-inner ui-btn-corner-all"> - <span id="db_text" class="ui-btn-text">Choose Database...</span> - <span class="ui-icon ui-icon-arrow-d ui-icon-shadow"></span> - </span> - <select id="database" name="database"> + <div data-role="fieldcontain"> + <label for="database" class="select">Database:</label> + <select id="database" name="database" data-native-menu="false"> + <t t-if="db_list"> <t t-foreach="db_list" t-as="opt"> <option t-att-value="opt"><t t-esc="opt"/></option> </t> - </select> - </div> + </t> + </select> + <label for="login">Login:</label> + <input type="text" id="login" name="login" value=""/><br/> + <label for="password">Password:</label> + <input type="password" id="password" name="password" value=""/><br/> + <a id="login_btn" data-theme="c" href="#" data-role="button">Login</a> + <div class="login_error_message ui-btn-inner ui-btn-corner-all"> + <span class="ui-btn-text">Bad username or password</span> </div> - <label class="ui-input-text" for="name">Login:</label> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" name="login" value=""/><br/> - <label class="ui-input-text" for="name">Password:</label> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="password" name="password" value=""/><br/> - <a id="login" class="ui-btn ui-btn-corner-all ui-shadow ui-btn-up-c" data-theme="c" href="#" data-role="button"> - <span class="ui-btn-inner ui-btn-corner-all"> - <span class="ui-btn-text">Login</span> - </span> - </a> </div> </fieldset> </div> @@ -65,12 +46,105 @@ </div> </t> +<t t-name="Header"> + <div role="banner" class="ui-bar-b ui-header" data-role="header" data-theme="b"> + <h1 aria-level="1" role="heading" tabindex="0" class="ui-title">OpenERP</h1> + <a id="home" class="ui-btn-right jqm-home ui-btn ui-btn-icon-notext ui-btn-corner-all ui-shadow ui-btn-up-b" data-direction="reverse" data-iconpos="notext" data-icon="home" href="#" title="Home" data-theme="b"> + <span class="ui-btn-inner ui-btn-corner-all"> + <span class="ui-btn-text">Home</span> + <span class="ui-icon ui-icon-home ui-icon-shadow"></span> + </span> + </a> + </div> +</t> + +<t t-name="Shortcuts"> + <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow"> + <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined"> + Shortcuts + </li> + <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="sc" t-as="opt"> + <div class="ui-btn-inner ui-li"> + <div class="ui-btn-text"> + <a href="#" class="ui-link-inherit" t-att-data-menu="opt.id" t-att-data-name="opt.name" t-att-data-res="opt.res_id"> + <span><t t-esc="opt.name"/></span> + </a> + </div> + <span class="ui-icon ui-icon-arrow-r"></span> + </div> + </li> + </ul> +</t> + +<t t-name="Menu"> + <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow"> + <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined"> + Menu + </li> + <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="data.children" t-as="menu"> + <div class="ui-btn-inner ui-li"> + <div class="ui-btn-text"> + <a href="#" class="ui-link-inherit" t-att-data-menu="menu.id" t-att-data-name="menu.name"> + <span><t t-esc="menu.name"/></span> + </a> + </div> + <span class="ui-icon ui-icon-arrow-r"></span> + </div> + </li> + </ul> +</t> + +<t t-name="Menu.secondary"> + <div role="main" class="ui-content" data-role="content"> + <ul data-role="listview" class="ui-listview"> + <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="menu.children" t-as="menu"> + <div class="ui-btn-inner ui-li"> + <div class="ui-btn-text"> + <a href="#" class="ui-link-inherit" t-attf-id="menu_#{menu.id}" t-att-data-menu="menu.id" t-att-data-name="menu.name"> + <span><t t-esc="menu.name"/></span> + </a> + </div> + <span class="ui-icon ui-icon-arrow-r"></span> + </div> + </li> + </ul> + </div> +</t> + +<t t-name="Options"> + <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow"> + <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined"> + Options + </li> + <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c"> + <div class="ui-btn-inner ui-li"> + <div class="ui-btn-text"> + <a id="logout" href="#" class="ui-link-inherit"> + Logout + </a> + </div> + <span class="ui-icon ui-icon-arrow-r"></span> + </div> + </li> + <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c"> + <div class="ui-btn-inner ui-li"> + <div class="ui-btn-text"> + <a id="pref" href="#" class="ui-link-inherit"> + Preferences + </a> + </div> + <span class="ui-icon ui-icon-arrow-r"></span> + </div> + </li> + </ul> +</t> + <t t-name="ListView"> <div role="main" class="ui-content" data-role="content"> <form class="ui-listview-filter ui-bar-c" role="search"> - <div id="search-data" class="ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield ui-body-c"> - <input id="searchid" placeholder="Filter items..." data-type="search" class="ui-input-text ui-body-null" autosearch="true" setTimeDefault="700"/> - </div> + <div id="search-data" class="ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield ui-body-c"> + <input id="searchid" placeholder="Filter items..." data-type="search" class="ui-input-text ui-body-null" autosearch="true" setTimeDefault="700"/> + </div> </form> <ul role="listbox" data-role="listview" class="ui-listview"> <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="records" t-as="record"> @@ -92,13 +166,14 @@ <form> <t t-foreach="get_fields" t-as="field"> <div data-role="fieldcontain"> - + <t t-if="fields[field.attrs.name].type!='one2many' and fields[field.attrs.name].type!='many2many'" > <label class="ui-input-text"> <span> <t t-if="!(field.attrs.string)" t-esc="fields[field.attrs.name].string"></t> <t t-if="field.attrs.string" t-esc="field.attrs.string"></t> </span>: </label> + </t> <t t-if="fields[field.attrs.name].type == 'char'"> <t t-if="values[field.attrs.name]"> <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> @@ -116,7 +191,31 @@ </t> </t> <t t-if="fields[field.attrs.name].type == 'text'"> - <input type="text" style="width: 100%"/><br/> + <textarea style="width:100%;" rows="8" name="textarea" id="textarea"></textarea><br/> + </t> + <t t-if="fields[field.attrs.name].type == 'float'"> + <t t-if="values[field.attrs.name]"> + <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> + </t> + <t t-if="!(values[field.attrs.name])"> + <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/> + </t> + </t> + <t t-if="fields[field.attrs.name].type == 'date'"> + <t t-if="values[field.attrs.name]"> + <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> + </t> + <t t-if="!(values[field.attrs.name])"> + <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/> + </t> + </t> + <t t-if="fields[field.attrs.name].type == 'datetime'"> + <t t-if="values[field.attrs.name]"> + <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> + </t> + <t t-if="!(values[field.attrs.name])"> + <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/> + </t> </t> <t t-if="fields[field.attrs.name].type == 'selection'"> <div class="ui-select"> @@ -133,7 +232,8 @@ </span> <span class="ui-icon ui-icon-arrow-d ui-icon-shadow"></span> </span> - <select> + + <select t-att-id="'selection_'+fields[field.attrs.name].string"> <t t-foreach="fields[field.attrs.name].selection" t-as="opt"> <option t-att-value="opt[0]"><t t-esc="opt[1]"/></option> </t> @@ -141,19 +241,28 @@ </div> </div> </t> - <t t-if="fields[field.attrs.name].type == 'many2one'"> + <t t-if="fields[field.attrs.name].type == 'many2one'"> + <div class="ui-select"> <div data-theme="c" class="ui-btn ui-btn-icon-right ui-btn-corner-all ui-shadow ui-btn-up-c"> <span class="ui-btn-inner ui-btn-corner-all"> <span class="ui-btn-text"> - <t t-esc="values[field.attrs.name][1]"/> - </span> + <t t-if="values[field.attrs.name]"> + <t t-esc="values[field.attrs.name][1]"/> + </t> + </span> <span class="ui-icon ui-icon-arrow-d ui-icon-shadow"></span> </span> - <select> + + <select t-att-id="'selection_'+fields[field.attrs.name].string"> <t t-if="fields[field.attrs.name].selection"> <t t-foreach="fields[field.attrs.name].selection" t-as="opt"> - <option t-att-value="opt[0]"><t t-esc="opt[1]"/></option> + <t t-if="values[field.attrs.name]==opt[0]"> + <option t-att-value="opt[0]" selected="true" ><t t-esc="opt[1]"/></option> + </t> + <t t-if="values[field.attrs.name]!=opt[0]"> + <option t-att-value="opt[0]" ><t t-esc="opt[1]"/></option> + </t> </t> </t> </select> @@ -161,44 +270,27 @@ </div> </t> <t t-if="fields[field.attrs.name].type == 'one2many'"> - <t t-if="values[field.attrs.name]"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> - </t> - <t t-if="!(values[field.attrs.name])"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/> - </t> - </t> - <t t-if="fields[field.attrs.name].type == 'many2many'"> - <t t-if="values[field.attrs.name]"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> - </t> - <t t-if="!(values[field.attrs.name])"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/> - </t> - </t> - <t t-if="fields[field.attrs.name].type == 'float'"> - <t t-if="values[field.attrs.name]"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> - </t> - <t t-if="!(values[field.attrs.name])"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/> - </t> - </t> - <t t-if="fields[field.attrs.name].type == 'date'"> - <t t-if="values[field.attrs.name]"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> - </t> - <t t-if="!(values[field.attrs.name])"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/> - </t> - </t> - <t t-if="fields[field.attrs.name].type == 'datetime'"> - <t t-if="values[field.attrs.name]"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/> - </t> - <t t-if="!(values[field.attrs.name])"> - <input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/> - </t> + <div class="info ui-collapsible-contain" data-collapsed="true" data-role="collapsible"> + <h1 class="ui-collapsible-heading"> + <a class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-left ui-shadow ui-corner-all ui-btn-up-c" href="#" data-theme="c" t-id="page.attrs.string"> + <span class="ui-btn-inner ui-corner-all"> + <span class="ui-btn-text"> + <t t-esc="til"></t> + <!-- <span class="ui-collapsible-heading-status"></span> --> + </span> + <span data-theme="d" class="ui-btn ui-btn-icon-left ui-btn-corner-all ui-shadow ui-btn-up-d"> + <span class="ui-btn-inner ui-btn-corner-all ui-corner-all"> + <span class="ui-btn-text"></span> + <span class="ui-icon ui-icon-shadow ui-icon-plus"></span> + </span> + </span> + </span> + </a> + <div class="ui-collapsible-content ui-collapsible-content-collapsed" aria-hidden="true"> + <div class="detail"></div> + </div> + </h1> + </div> </t> </div> </t> @@ -231,86 +323,4 @@ </div> </t> - -<t t-name="Shortcuts"> - <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow"> - <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined"> - Shortcuts - </li> - <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="sc" t-as="opt"> - <div class="ui-btn-inner ui-li"> - <div class="ui-btn-text"> - <a href="#" class="ui-link-inherit" t-att-data-menu="opt.id" t-att-data-name="opt.name" t-att-data-res="opt.res_id"> - <span><t t-esc="opt.name"/></span> - </a> - </div> - <span class="ui-icon ui-icon-arrow-r"></span> - </div> - </li> - </ul> -</t> - -<t t-name="Menu"> - <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow"> - <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined"> - Menu - </li> - <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="data.children" t-as="menu"> - <div class="ui-btn-inner ui-li"> - <div class="ui-btn-text"> - <a href="#" class="ui-link-inherit" t-att-data-menu="menu.id" t-att-data-name="menu.name"> - <span><t t-esc="menu.name"/></span> - </a> - </div> - <span class="ui-icon ui-icon-arrow-r"></span> - </div> - </li> - </ul> -</t> - -<t t-name="Menu.secondary"> - <div role="main" class="ui-content" data-role="content"> - <ul data-role="listview" class="ui-listview"> - <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="menu.children" t-as="menu"> - <div class="ui-btn-inner ui-li"> - <div class="ui-btn-text"> - <a href="#" class="ui-link-inherit" t-attf-id="menu_#{menu.id}" t-att-data-menu="menu.id" t-att-data-name="menu.name"> - <span><t t-esc="menu.name"/></span> - </a> - </div> - <span class="ui-icon ui-icon-arrow-r"></span> - </div> - </li> - </ul> - </div> -</t> - -<t t-name="Options"> - <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow"> - <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined"> - Options - </li> - <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c"> - <div class="ui-btn-inner ui-li"> - <div class="ui-btn-text"> - <a id="logout" href="#" class="ui-link-inherit"> - Logout - </a> - </div> - <span class="ui-icon ui-icon-arrow-r"></span> - </div> - </li> - <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c"> - <div class="ui-btn-inner ui-li"> - <div class="ui-btn-text"> - <a id="pref" href="#" class="ui-link-inherit"> - Preferences - </a> - </div> - <span class="ui-icon ui-icon-arrow-r"></span> - </div> - </li> - </ul> -</t> - </templates> |
