From e91dee1e97d5b7f371ee2ab86c77d4067d6e4af9 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 27 Feb 2012 14:45:31 +0100 Subject: [PATCH] [ADD] Added shortcut to dropdown menu. Completely removed old Header bzr revid: fme@openerp.com-20120227134531-uf646x2w13zqsslz --- addons/web/static/src/css/base.css | 11 +- addons/web/static/src/css/base.sass | 7 +- addons/web/static/src/css/base_old.css | 107 ------ addons/web/static/src/img/header-about.png | Bin 442 -> 0 bytes .../web/static/src/img/header-background.png | Bin 149 -> 0 bytes addons/web/static/src/img/header-help.png | Bin 454 -> 0 bytes addons/web/static/src/img/header-home.png | Bin 452 -> 0 bytes .../web/static/src/img/header-preferences.png | Bin 420 -> 0 bytes addons/web/static/src/img/header-requests.png | Bin 353 -> 0 bytes addons/web/static/src/img/topbar-avatar.png | Bin 0 -> 846 bytes addons/web/static/src/js/chrome.js | 318 +++++++----------- addons/web/static/src/xml/base.xml | 52 +-- 12 files changed, 144 insertions(+), 351 deletions(-) delete mode 100644 addons/web/static/src/img/header-about.png delete mode 100644 addons/web/static/src/img/header-background.png delete mode 100644 addons/web/static/src/img/header-help.png delete mode 100644 addons/web/static/src/img/header-home.png delete mode 100644 addons/web/static/src/img/header-preferences.png delete mode 100644 addons/web/static/src/img/header-requests.png create mode 100644 addons/web/static/src/img/topbar-avatar.png diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index c9774bcfa73..c038b396554 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -62,6 +62,9 @@ -webkit-border-radius: 4px; border-radius: 4px; } +.openerp2 .oe_topbar .oe_topbar_avatar { + vertical-align: top; +} .openerp2 .oe_menu { float: left; padding: 0; @@ -134,7 +137,6 @@ right: -1px; border: 0; z-index: 900; - width: 160px; margin-left: 0; margin-right: 0; padding: 6px 0; @@ -175,10 +177,3 @@ -webkit-box-shadow: none; -box-shadow: none; } - -.openerp .oe-shortcuts { - position: static; -} -.openerp #oe_header { - clear: both; -} diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index ab144a5ceec..c2a66db333e 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -97,6 +97,8 @@ height: 24px margin: -2px 2px 0 0 @include radius(4px) + .oe_topbar_avatar + vertical-align: top // }}} // Menu {{{ @@ -161,7 +163,6 @@ right: -1px border: 0 z-index: 900 - width: 160px margin-left: 0 margin-right: 0 padding: 6px 0 @@ -191,10 +192,6 @@ .openerp // Transitional overrides for old styles {{{ - .oe-shortcuts - position: static - #oe_header - clear: both // }}} // au BufWritePost,FileWritePost *.sass :!sass --style expanded --line-numbers > "%:p:r.css" diff --git a/addons/web/static/src/css/base_old.css b/addons/web/static/src/css/base_old.css index 1fac47d128c..9b5bdb2e15b 100644 --- a/addons/web/static/src/css/base_old.css +++ b/addons/web/static/src/css/base_old.css @@ -27,9 +27,6 @@ margin: 2px; } -#oe_header h2 { - margin: 2px 0; -} #oe_errors pre { margin: 0; @@ -566,110 +563,6 @@ label.error { content: "\25b8"; } -/* Header */ -.openerp .header { - height: 65px; - background: url("/web/static/src/img/header-background.png") repeat-x scroll left top transparent; - color: #FFFFFF; - letter-spacing: 0.5px; - text-shadow: 0 1px 0 #333333; -} -.openerp .company_logo_link { - display: block; - float: left; - height: 63px; - width: 200px; - border: 1px solid white; - border-right-color: black; - border-bottom-color: black; - background: #FFFFFF; - background: -moz-linear-gradient(top, #FFFFFF 0%, #CECECE 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFFFFF), color-stop(100%,#CECECE)); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#CECECE',GradientType=0 ); -} -.openerp .company_logo { - margin-top: 7px; - margin-left: 10px; - display: block; - background: url(/web/static/src/img/logo.png); - width:180px; - height:46px; -} -.openerp .header_title { - float: left; - font-size: 100%; - margin: 0; - padding: 4px 10px; - text-shadow: 0 1px 0 #111111; - font-weight:normal; - line-height:14px; -} -.openerp .header_title small { - color: #ccc; - font-size: 90%; - font-weight: normal; -} -.openerp .header_corner { - float: right; -} -.openerp .header_corner .block { - float: left; - height: 34px; - line-height: 34px; - /*background: url(../images/top-sep-a.png) no-repeat;*/ - border-left: 1px solid #6a6a6a; - background: #828282; - background: -moz-linear-gradient(top, #828282 0%, #4D4D4D 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#828282), color-stop(100%,#4D4D4D)); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#828282', endColorstr='#4D4D4D',GradientType=0 ); -} -.openerp .header_corner .block a { - display: block; - color: white; - text-decoration: none; - padding: 0 10px; -} -.openerp .header_corner .block a:hover { - background: #929292; - background: -moz-linear-gradient(top, #929292 0%, #4D4D4D 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#929292), color-stop(100%,#4D4D4D)); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#929292', endColorstr='#4D4D4D',GradientType=0 ); -} -.openerp .header_corner ul.block { - list-style: none; - height: 34px; - margin: 0; - padding: 0 0 0 2px; - line-height: 33px; -} -.openerp .header_corner ul.block li { - float: left; -} -.openerp .header_corner ul.block li a { - padding: 0 5px; - position: relative; - line-height: 32px; -} -.openerp .header_corner ul.block li a img { - vertical-align: middle; -} -.openerp .header_corner ul.block li a small { - position: absolute; - right: 0; - top: 5px; - padding: 1px 4px 2px; - background: rgba(0, 0, 0, 0.75); - border-radius: 7px; - -moz-border-radius: 7px; - -webkit-border-radius: 7px; - line-height: 1em; - font-weight: bold; -} - -.openerp .logout { - font-size:80%; -} - /* Footer */ .openerp div.oe_footer { background: none repeat scroll 0 0 #CCCCCC; diff --git a/addons/web/static/src/img/header-about.png b/addons/web/static/src/img/header-about.png deleted file mode 100644 index b53e9a86ebef688a1439e84d8343459858087630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf67>k44ofy`glX(f`FeQ1ryD*J&IXUjLQ_#Ty@G9EPF-llQz0>hdXF^`%rAPn8yF4%4PyY#tMtO$=H yr{+?JJ_*I}bJ1u2i|2Gqe0@J_?OZ303Wj(6MqZD%XPN`;VeoYIb6Mw<&;$S!h&G4- diff --git a/addons/web/static/src/img/header-help.png b/addons/web/static/src/img/header-help.png deleted file mode 100644 index 19e9906fdef2df5a98c1de68668fa4dd0ce0948c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)Px#0%A)?L;(MXkIcUS000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipS)4h=LA z0o3FG000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003cNklLybN22^a@CdmG^E^M8?Q-U0q2}uX5<>TQnMH7+TZ;ADmm&w&Sz9 z1w%DCrKTH&Qx~3TD}2(#Ksk0O6|Qs*)ve==8Bn_g!f)56z-!D`QLn@p$o%kBiJrIE z_5d8nkkRl{@=(h(nAXx#IMlc;sz@U*JyQCGB^>)G*Nh6_EDbDM@fb(G`L1p*sx4Bw wRx|L`t`aq2N~TB+5&4*EYMA|J=BRf33pnCim__d&>;M1&07*qoM6N<$f~2^(fdBvi diff --git a/addons/web/static/src/img/header-home.png b/addons/web/static/src/img/header-home.png deleted file mode 100644 index fd96742d15ac9c151d83efd2e167bdd52e2c1300..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf67>k44ofy`glX(f`FeQ1ryDCLqT;Lv zr}-Q`=y=g5@6n?hj_T~c6K`ocE5tACZZ3KGEWJP=Mn+j;u8NnzglG3JE3TKSYUh4_ z=kU(&^9mmAt@_FMdfH(Nf6-G8hW7ieUn*KZJ^S2M1NDk?vcA%0CZ#>SJ5i8XwH1E^gw%q-1ADo)FvG{LzdtTn}mFvD_TwmwDbXTo>sj;j1{a=axK?

O1;Fed%dP4)ZJUTOL+a|dmlRAH#i+;YE|KaC1Cv>`YeB)leP2lNw z{bgx<;(UdP$F-xM8aN8{@Ti(PuDD_8D56^b_0LMNf9egc%-nt2CdsE0=Y=ht#ACB( r;Y3Hhmi)>U`bt$34Ys5-b^1@L7u}xV+~0Wt6s8QGu6{1-oD!M<-AlFl diff --git a/addons/web/static/src/img/header-preferences.png b/addons/web/static/src/img/header-preferences.png deleted file mode 100644 index 6c978b49f55949818b45b55326c5d1b2788efbb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf67>k44ofy`glX(f`FeQ1ryDsz9|+IYBXuxI?c9y zkFDEgyn5wzRrXtuvJ_vztBvn$FMLXUe*I{~)}tld?#HAL2FXviTJTt?_Gw$ejCrvq zbPoo-JGA+5$bY3r!4HoFUAByx=9eP2QF-Z}q_c;{~nij=JN8XahSdZ7-kHf Lu6{1-oD!M<7euA- diff --git a/addons/web/static/src/img/header-requests.png b/addons/web/static/src/img/header-requests.png deleted file mode 100644 index 6577e7e6448ac9bf0609710b4274cda434cf6506..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf67>k44ofy`glX(f`FeQ1ryD(&aSYKozxCoqufqi*M<43@s)%%o+);|$ z{{MGe7q!kq4#w?)oA%cd<&n*KT2R(x@~s(t~vL27M$Pvr`mPBa|tWI z(7h1xg2#84gx~zzS+2F$^T3^NJo#q@_wnegseibY)t*=9s^5bp+hndLTbP)u;)VKn5rq#^Vi=umx=x%coFCq22WQ%mvv4FO#st7h=TwC diff --git a/addons/web/static/src/img/topbar-avatar.png b/addons/web/static/src/img/topbar-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c70ea7d498e746904ee270cffe6fcb45f7c6b6 GIT binary patch literal 846 zcmex=_1P|rX?qqI0P zFI~aY%U!`Mz|~!$%*;qrN1?DZF(6Oj-S5fuR$!pIEN!@|nR z%E~Fi%grl7GWdUhL6Cz%j6sZ4 zD%dK(z{JSR%*4VBay3wOEl{3;MUYiU(a@1iI53f2sZhkIapFP_Wv7h?MT0JWP%%y_ zYU1P)6PJ*bQdLve(9|+9H8Z!cv~qTFb#wRd^a>6M4GWKmj7m;PO-s+n%qlJ^Ei136 ztZHs)ZENr7?3y%r%G7DoXUv?nXz`Mz%a*TLxoXqqEnBy3-?4Mop~FXx9y@;G&P778mFHFAhJO|>fcdxG1 zdgg7NTwEgXvoM9P{?`@8&+{}EUR_+~9<**bYeYh`D?`=wgKzCLzI5-t!)!9SGJ3D5 sgT', { - 'data-shortcut-id':out.result, - 'data-id': attrs.res_id - }).text(attrs.name) - .appendTo(self.$element.find('.oe-shortcuts ul')); - attrs.id = out.result; - sc.push(attrs); - }); - }, - 'remove-current': function () { - var menu_id = self.session.active_id; - var $shortcut = self.$element - .find('.oe-shortcuts li[data-id=' + menu_id + ']'); - var shortcut_id = $shortcut.data('shortcut-id'); - $shortcut.remove(); - shortcuts_ds.unlink([shortcut_id]); - var sc_new = _.reject(sc, function(shortcut){ return shortcut_id === shortcut.id}); - sc.splice(0, sc.length); - sc.push.apply(sc, sc_new); - } - }); - } - return this.rpc('/web/session/sc_list', {}, function(shortcuts) { - sc.splice(0, sc.length); - sc.push.apply(sc, shortcuts); - - self.$element.find('.oe-shortcuts') - .html(QWeb.render('Shortcuts', {'shortcuts': shortcuts})) - .undelegate('li', 'click') - - .delegate('li', 'click', function(e) { - e.stopPropagation(); - var id = $(this).data('id'); - self.session.active_id = id; - self.rpc('/web/menu/action', {'menu_id':id}, function(ir_menu_data) { - if (ir_menu_data.action.length){ - self.on_action(ir_menu_data.action[0][2]); - } - }); - }); - }); - }, - - on_action: function(action) { - }, - on_preferences: function(){ - var self = this; - var action_manager = new openerp.web.ActionManager(this); - var dataset = new openerp.web.DataSet (this,'res.users',this.context); - dataset.call ('action_get','',function (result){ - self.rpc('/web/action/load', {action_id:result}, function(result){ - action_manager.do_action(_.extend(result['result'], { - res_id: self.session.uid, - res_model: 'res.users', - flags: { - action_buttons: false, - search_view: false, - sidebar: false, - views_switcher: false, - pager: false - } - })); - }); - }); - this.dialog = new openerp.web.Dialog(this,{ - title: _t("Preferences"), - width: '700px', - buttons: [ - {text: _t("Cancel"), click: function(){ $(this).dialog('destroy'); }}, - {text: _t("Change password"), click: function(){ self.change_password(); }}, - {text: _t("Save"), click: function(){ - var inner_viewmanager = action_manager.inner_viewmanager; - inner_viewmanager.views[inner_viewmanager.active_view].controller.do_save() - .then(function() { - self.dialog.destroy(); - // needs to refresh interface in case language changed - window.location.reload(); - }); - } - } - ] - }).open(); - action_manager.appendTo(this.dialog); - action_manager.render(this.dialog); - }, - - change_password :function() { - var self = this; - this.dialog = new openerp.web.Dialog(this, { - title: _t("Change Password"), - width : 'auto' - }).open(); - this.dialog.$element.html(QWeb.render("Change_Pwd", self)); - this.dialog.$element.find("form[name=change_password_form]").validate({ - submitHandler: function (form) { - self.rpc("/web/session/change_password",{ - 'fields': $(form).serializeArray() - }, function(result) { - if (result.error) { - self.display_error(result); - return; - } else { - openerp.webclient.on_logout(); - } - }); - } - }); - }, - display_error: function (error) { - return openerp.web.dialog($('
'), { - modal: true, - title: error.title, - buttons: [ - {text: _("Ok"), click: function() { $(this).dialog("close"); }} - ] - }).html(error.error); - }, - on_logout: function() { - } -}); - openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ /** * @constructs openerp.web.Menu @@ -1008,16 +828,17 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ } }); -openerp.web.DropDownMenu = openerp.web.Widget.extend(/** @lends openerp.web.Header# */{ +openerp.web.DropDownMenu = openerp.web.Widget.extend(/** @lends openerp.web.DropDownMenu# */{ template: "DropDownMenu", /** * @constructs openerp.web.DropDownMenu - * @extends openerp.web.OldWidget + * @extends openerp.web.Widget * * @param parent */ init: function(parent) { this._super(parent); + this.update_promise = $.Deferred().resolve(); }, start: function() { var self = this; @@ -1029,13 +850,108 @@ openerp.web.DropDownMenu = openerp.web.Widget.extend(/** @lends openerp.web.Hea self.$element.find('.oe_dropdown_options').toggle(); return false; }); - this.$element.find('.oe_dropdown_options li a').click(function() { + this.$element.on('click', '.oe_dropdown_options li a[data-menu]', function() { var f = self['on_menu_' + $(this).data('menu')]; - f && f(); + f && f($(this)); self.$element.find('.oe_dropdown_options').hide(); return false; }); }, + change_password :function() { + var self = this; + this.dialog = new openerp.web.Dialog(this, { + title: _t("Change Password"), + width : 'auto' + }).open(); + this.dialog.$element.html(QWeb.render("Change_Pwd", self)); + this.dialog.$element.find("form[name=change_password_form]").validate({ + submitHandler: function (form) { + self.rpc("/web/session/change_password",{ + 'fields': $(form).serializeArray() + }, function(result) { + if (result.error) { + self.display_error(result); + return; + } else { + openerp.webclient.on_logout(); + } + }); + } + }); + }, + display_error: function (error) { + return openerp.web.dialog($('
'), { + modal: true, + title: error.title, + buttons: [ + {text: _("Ok"), click: function() { $(this).dialog("close"); }} + ] + }).html(error.error); + }, + do_update: function () { + var self = this; + var fct = function() { + var $avatar = self.$element.find('.oe_topbar_avatar'); + $avatar.attr('src', $avatar.data('default-src')); + if (!self.session.uid) + return; + var func = new openerp.web.Model("res.users").get_func("read"); + return func(self.session.uid, ["name", "company_id"]).pipe(function(res) { + // TODO: Only show company if multicompany in use + self.$element.find('.oe_topbar_name').text(res.name + '/' + res.company_id[1]); + return self.shortcut_load(); + }); + }; + this.update_promise = this.update_promise.pipe(fct, fct); + }, + on_action: function() { + }, + shortcut_load :function(){ + var self = this, + sc = self.session.shortcuts, + shortcuts_ds = new openerp.web.DataSet(this, 'ir.ui.view_sc'); + self.$element.find('.oe_dropdown_options a[data-menu=shortcut]').each(function() { + $(this).parent().remove(); + }); + // TODO: better way to communicate between sections. + // sc.bindings, because jquery does not bind/trigger on arrays... + if (!sc.binding) { + sc.binding = {}; + $(sc.binding).bind({ + 'add': function (e, attrs) { + shortcuts_ds.create(attrs, function (out) { + var shortcut = QWeb.render('DropDownMenu.shortcut', { + shortcuts : [{ + name : attrs.name, + id : out.result, + res_id : attrs.res_id + }] + }); + $(shortcut).appendTo(self.$element.find('.oe_dropdown_options')); + attrs.id = out.result; + sc.push(attrs); + }); + }, + 'remove-current': function () { + var menu_id = self.session.active_id; + var $shortcut = self.$element.find('.oe_dropdown_options li a[data-id=' + menu_id + ']'); + var shortcut_id = $shortcut.data('shortcut-id'); + $shortcut.remove(); + shortcuts_ds.unlink([shortcut_id]); + var sc_new = _.reject(sc, function(shortcut){ return shortcut_id === shortcut.id}); + sc.splice(0, sc.length); + sc.push.apply(sc, sc_new); + } + }); + } + return this.rpc('/web/session/sc_list', {}, function(shortcuts) { + sc.splice(0, sc.length); + sc.push.apply(sc, shortcuts); + + $(QWeb.render('DropDownMenu.shortcut', {'shortcuts': shortcuts})) + .appendTo(self.$element.find('.oe_dropdown_options')); + }); + }, on_menu_logout: function() { }, on_menu_settings: function() { @@ -1077,6 +993,29 @@ openerp.web.DropDownMenu = openerp.web.Widget.extend(/** @lends openerp.web.Hea }).open(); action_manager.appendTo(this.dialog); action_manager.render(this.dialog); + }, + on_menu_about: function() { + var self = this; + self.rpc("/web/webclient/version_info", {}).then(function(res) { + var $help = $(QWeb.render("About-Page", {version_info: res})); + $help.find('a.oe_activate_debug_mode').click(function (e) { + e.preventDefault(); + window.location = $.param.querystring( + window.location.href, 'debug'); + }); + openerp.web.dialog($help, {autoOpen: true, + modal: true, width: 960, title: _t("About")}); + }); + }, + on_menu_shortcut: function($link) { + var self = this, + id = $link.data('id'); + self.session.active_id = id; + self.rpc('/web/menu/action', {'menu_id': id}, function(ir_menu_data) { + if (ir_menu_data.action.length){ + self.on_action(ir_menu_data.action[0][2]); + } + }); } }); @@ -1089,7 +1028,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie var self = this; this._super(parent); openerp.webclient = this; - + this.querystring = '?' + jQuery.param.querystring(); this._current_state = null; }, start: function() { @@ -1108,8 +1047,8 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie }); this.session.on_session_valid.add(function() { self.show_application(); - - self.header.do_update(); + + self.dropdown_menu.do_update(); self.menu.do_reload(); if(self.action_manager) self.action_manager.destroy(); @@ -1136,16 +1075,13 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie this.show_common(); self.$table = $(QWeb.render("WebClient", {})); self.$element.append(self.$table); - self.header = new openerp.web.Header(self); - self.header.on_logout.add(this.proxy('on_logout')); - self.header.on_action.add(this.proxy('on_menu_action')); - self.header.appendTo($("#oe_header")); self.menu = new openerp.web.Menu(self); self.menu.replace(this.$element.find('.oe_menu_placeholder')); self.menu.on_action.add(this.proxy('on_menu_action')); self.dropdown_menu = new openerp.web.DropDownMenu(self); self.dropdown_menu.replace(this.$element.find('.oe_dropdown_menu_placeholder')); self.dropdown_menu.on_menu_logout.add(this.proxy('on_logout')); + self.dropdown_menu.on_action.add(this.proxy('on_menu_action')); }, show_common: function() { var self = this; diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 9b361f13e8f..29618c90bdc 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -23,7 +23,6 @@