flectra/addons/web/static/src/js/chrome/user_menu.js

229 lines
6.7 KiB
JavaScript
Raw Normal View History

2018-01-16 11:34:37 +01:00
flectra.define('web.UserMenu', function (require) {
"use strict";
/**
* This widget is appended by the webclient to the right of the navbar.
* It displays the avatar and the name of the logged user (and optionally the
* db name, in debug mode).
* If clicked, it opens a dropdown allowing the user to perform actions like
* editing its preferences, accessing the documentation, logging out...
*/
var framework = require('web.framework');
var Widget = require('web.Widget');
var UserMenu = Widget.extend({
template: 'UserMenu',
/**
* @override
* @returns {Deferred}
*/
start: function () {
var self = this;
var session = this.getSession();
this.$el.on('click', 'li a[data-menu]', function (ev) {
ev.preventDefault();
var menu = $(this).data('menu');
self['_onMenu' + menu.charAt(0).toUpperCase() + menu.slice(1)]();
});
return this._super.apply(this, arguments).then(function () {
var $avatar = self.$('.oe_topbar_avatar');
if (!session.uid) {
$avatar.attr('src', $avatar.data('default-src'));
return $.when();
}
var topbar_name = session.name;
if (session.debug) {
topbar_name = _.str.sprintf("%s (%s)", topbar_name, session.db);
}
self.$('.oe_topbar_name').text(topbar_name);
var avatar_src = session.url('/web/image', {
model:'res.users',
field: 'image_small',
id: session.uid,
});
$avatar.attr('src', avatar_src);
});
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @private
*/
_onMenuAccount: function () {
var self = this;
this.trigger_up('clear_uncommitted_changes', {
callback: function () {
self._rpc({route: '/web/session/account'})
.then(function (url) {
framework.redirect(url);
})
.fail(function (result, ev){
ev.preventDefault();
2018-01-16 11:34:37 +01:00
framework.redirect('https://accounts.flectra.com/account');
});
},
});
},
/**
* @private
*/
_onMenuDocumentation: function () {
2018-01-16 11:34:37 +01:00
window.open('https://www.flectra.com/documentation/user', '_blank');
},
/**
* @private
*/
_onMenuLogout: function () {
this.trigger_up('clear_uncommitted_changes', {
callback: this.do_action.bind(this, 'logout'),
});
},
/**
* @private
*/
_onMenuSettings: function () {
var self = this;
var session = this.getSession();
this.trigger_up('clear_uncommitted_changes', {
callback: function () {
self._rpc({
route: "/web/action/load",
params: {
action_id: "base.action_res_users_my",
},
})
.done(function (result) {
result.res_id = session.uid;
self.do_action(result);
});
},
});
},
/**
* @private
*/
_onMenuSupport: function () {
2018-01-16 11:34:37 +01:00
window.open('https://www.flectra.com/buy', '_blank');
},
});
return UserMenu;
});
flectra.define('web.UserProfile', function (require) {
"use strict";
var framework = require('web.framework');
var Widget = require('web.Widget');
var UserProfile = Widget.extend({
template: 'UserProfile',
/**
* @override
* @returns {Deferred}
*/
start: function () {
var self = this;
var session = this.getSession();
this.$el.on('click', 'li a[data-menu]', function (ev) {
ev.preventDefault();
var menu = $(this).data('menu');
self['_onMenu' + menu.charAt(0).toUpperCase() + menu.slice(1)]();
});
return this._super.apply(this, arguments).then(function () {
var $avatar = self.$('.profile_pic img');
if (!session.uid) {
$avatar.attr('src', $avatar.data('default-src'));
return $.when();
}
self.$('.profile_name').text(session.name);
if (session.debug) {
self.$el.addClass('debug')
self.$('.db_name').text('(' + session.db + ')');
}
var avatar_src = session.url('/web/image', {
model:'res.users',
field: 'image_small',
id: session.uid,
});
$avatar.attr('src', avatar_src);
});
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @private
*/
_onMenuAccount: function () {
var self = this;
this.trigger_up('clear_uncommitted_changes', {
callback: function () {
self._rpc({route: '/web/session/account'})
.then(function (url) {
framework.redirect(url);
})
.fail(function (result, ev){
ev.preventDefault();
framework.redirect('https://accounts.flectrahq.com/account');
});
},
});
},
/**
* @private
*/
_onMenuDocumentation: function () {
window.open('https://www.flectrahq.com/documentation/user', '_blank');
},
/**
* @private
*/
_onMenuLogout: function () {
this.trigger_up('clear_uncommitted_changes', {
callback: this.do_action.bind(this, 'logout'),
});
},
/**
* @private
*/
_onMenuSettings: function () {
var self = this;
var session = this.getSession();
this.trigger_up('clear_uncommitted_changes', {
callback: function () {
self._rpc({
route: "/web/action/load",
params: {
action_id: "base.action_res_users_my",
},
})
.done(function (result) {
result.res_id = session.uid;
self.do_action(result);
});
},
});
},
/**
* @private
*/
_onMenuSupport: function () {
window.open('https://www.flectrahq.com/buy', '_blank');
},
});
return UserProfile;
});