From d5cc2645ac060ee2b8f727b961b0886aa638c86b Mon Sep 17 00:00:00 2001 From: =Bhumi Thakkar Date: Wed, 13 Jul 2011 10:51:10 +0530 Subject: [PATCH] [IMP] Improved formview for collapsible content of notebook. bzr revid: jra@tinyerp.com-20110713052110-51fnbvj9jr9ym8u9 --- .../web_mobile/static/src/css/web_mobile.css | 1 + .../web_mobile/static/src/js/form_mobile.js | 80 ++++++++++++++++--- addons/web_mobile/static/src/web_mobile.html | 1 + .../web_mobile/static/src/xml/web_mobile.xml | 15 ++-- 4 files changed, 76 insertions(+), 21 deletions(-) diff --git a/addons/web_mobile/static/src/css/web_mobile.css b/addons/web_mobile/static/src/css/web_mobile.css index e69de29bb2d..b1579889a19 100644 --- a/addons/web_mobile/static/src/css/web_mobile.css +++ b/addons/web_mobile/static/src/css/web_mobile.css @@ -0,0 +1 @@ +.ui-collapsible-content-expanded { display: block; } \ No newline at end of file diff --git a/addons/web_mobile/static/src/js/form_mobile.js b/addons/web_mobile/static/src/js/form_mobile.js index 25c74dfcd51..9fa219ee86e 100644 --- a/addons/web_mobile/static/src/js/form_mobile.js +++ b/addons/web_mobile/static/src/js/form_mobile.js @@ -10,24 +10,77 @@ openerp.web_mobile.FormView = openerp.base.Controller.extend({ 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){ + 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]; - } + self.rpc("/base/formview/load", {"model": model, "view_id": view_id }, function (result) { + var view_fields = result.fields_view.arch.children; + var 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})); + } + $("#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.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) { + 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); + } + } + }); + + if (next.hasClass(content_collapsed_class)) { + span.removeClass(plus_class); + span.addClass(minus_class); + next.removeClass(collapsed_class); + next.addClass(expanded_class); + } + else if (next.hasClass(content_expanded_class)) { + span.removeClass(minus_class); + span.addClass(plus_class); + next.removeClass(expanded_class); + next.addClass(collapsed_class); + } + if (!next.find('.detail').html().length) { + next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data })); + } + } + } + }); }); }); }, @@ -40,9 +93,12 @@ openerp.web_mobile.FormView = openerp.base.Controller.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; - } + }, }); } \ No newline at end of file diff --git a/addons/web_mobile/static/src/web_mobile.html b/addons/web_mobile/static/src/web_mobile.html index ba437501cb9..a73951e0ed3 100755 --- a/addons/web_mobile/static/src/web_mobile.html +++ b/addons/web_mobile/static/src/web_mobile.html @@ -26,6 +26,7 @@ +