[ADD] Added shortcut to dropdown menu. Completely removed old Header

bzr revid: fme@openerp.com-20120227134531-uf646x2w13zqsslz
This commit is contained in:
Fabien Meghazi 2012-02-27 14:45:31 +01:00
parent d4d05566cc
commit e91dee1e97
12 changed files with 144 additions and 351 deletions

View File

@ -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;
}

View File

@ -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 <afile> > "%:p:r.css"

View File

@ -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;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

View File

@ -666,186 +666,6 @@ openerp.web.Login = openerp.web.OldWidget.extend(/** @lends openerp.web.Login#
}
});
openerp.web.Header = openerp.web.OldWidget.extend(/** @lends openerp.web.Header# */{
template: "Header",
/**
* @constructs openerp.web.Header
* @extends openerp.web.OldWidget
*
* @param parent
*/
init: function(parent) {
this._super(parent);
this.qs = "?" + jQuery.param.querystring();
this.$content = $();
this.update_promise = $.Deferred().resolve();
},
start: function() {
this._super();
},
do_update: function () {
var self = this;
var fct = function() {
self.$content.remove();
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) {
self.$content = $(QWeb.render("Header-content", {widget: self, user: res}));
self.$content.appendTo(self.$element);
self.$element.find(".logout").click(self.on_logout);
self.$element.find("a.preferences").click(self.on_preferences);
self.$element.find(".about").click(self.on_about);
return self.shortcut_load();
});
};
this.update_promise = this.update_promise.pipe(fct, fct);
},
on_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")});
});
},
shortcut_load :function(){
var self = this,
sc = self.session.shortcuts,
shortcuts_ds = new openerp.web.DataSet(this, 'ir.ui.view_sc');
// 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) {
$('<li>', {
'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($('<div>'), {
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($('<div>'), {
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;

View File

@ -23,7 +23,6 @@
<div class="oe_menu_placeholder"/>
<div class="oe_dropdown_menu_placeholder"/>
</div>
<div id="oe_header" class="header" style="display: none"></div>
<div class="oe_leftbar">
<!--
<a href="#" class="oe_logo"><img src="img/logo.png"/></a>
@ -339,43 +338,6 @@
<div id="oe_db_options" class="oe_db_options"></div>
</div>
</t>
<t t-name="Header">
<div>
<a t-att-href="'/' + widget.qs" class="company_logo_link">
<div class="company_logo" />
</a>
</div>
</t>
<t t-name="Header-content">
<h1 class="header_title">
<t t-esc="user.company_id[1]"/> (<t t-esc="widget.session.db"/>)<br/>
<small class="username"><t t-esc="user.name"/></small>
</h1>
<div class="header_corner">
<ul class="block">
<li>
<a t-att-href="'/' + widget.qs" title="Home" class="home"><img t-att-src='_s + "/web/static/src/img/header-home.png"' width="16" height="16" border="0"/></a>
</li>
<li class="preferences">
<a href="javascript:void(0)" title="Preferences" class="preferences"><img t-att-src='_s + "/web/static/src/img/header-preferences.png"' width="16" height="16" border="0"/></a>
</li>
<li>
<a href="javascript:void(0)" title="About" class="about"><img t-att-src='_s + "/web/static/src/img/header-about.png"' width="16" height="16" border="0"/></a>
</li>
</ul>
<div class="block">
<a href="javascript:void(0)" class="logout">LOGOUT</a>
</div>
</div>
<div class="oe-shortcuts"> </div>
</t>
<ul t-name="Shortcuts">
<li t-foreach="shortcuts" t-as="shortcut"
t-att-data-id="shortcut.res_id"
t-att-data-shortcut-id="shortcut.id"
><t t-esc="shortcut.name"/></li>
</ul>
<t t-name="Menu">
<ul class="oe_menu" t-if="widget.data">
@ -414,17 +376,27 @@
<ul class="oe_dropdown_menu oe_topbar_item">
<li class="oe_dropdown">
<a href="#" class="oe_dropdown_toggle">
<img class="oe_topbar_avatar" src="http://www.amigrave.com/ClarkGableSmall.jpg"/>
Clark Gable
<img class="oe_topbar_avatar" t-att-data-default-src="_s + '/web/static/src/img/topbar-avatar.png'"/>
<span class="oe_topbar_name"/>
</a>
<ul class="oe_dropdown_options">
<!--<li><a href="#" data-menu="profile">Profile</a></li>-->
<li><a href="#" data-menu="settings">Settings</a></li>
<li><a href="#" data-menu="logout">Log out</a></li>
<li><hr/></li>
<li><a href="#" data-menu="about">About OpenERP</a></li>
<li><hr/></li>
</ul>
</li>
</ul>
</t>
<t t-name="DropDownMenu.shortcut">
<li t-foreach="shortcuts" t-as="shortcut">
<a href="#" data-menu="shortcut" t-att-data-id="shortcut.res_id" t-att-data-shortcut-id="shortcut.id">
<t t-esc="shortcut.name"/>
</a>
</li>
</t>
<t t-name="ViewManager">
<table class="view-manager-main-table" cellpadding="0" cellspacing="0">