diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 7f9710f8aa6..9c8451cd71e 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -194,8 +194,8 @@ class WebClient(openerpweb.Controller): if mods is not None: path += '?mods=' + mods return [path] - # old code to force cache reloading - #return ['%s?debug=%s' % (wp, os.path.getmtime(fp)) for fp, wp in self.manifest_glob(req, mods, extension)] + # old code to force cache reloading, this really works, sorry niv but we stop wasting time + return ['%s?debug=%s' % (wp, os.path.getmtime(fp)) for fp, wp in self.manifest_glob(req, mods, extension)] return [el[1] for el in self.manifest_glob(req, mods, extension)] @openerpweb.jsonrequest diff --git a/addons/web/i18n/fr_CA.po b/addons/web/i18n/fr_CA.po index f6426975e7d..327e221c0e9 100644 --- a/addons/web/i18n/fr_CA.po +++ b/addons/web/i18n/fr_CA.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-25 04:52+0000\n" +"X-Launchpad-Export-Date: 2012-07-26 04:50+0000\n" "X-Generator: Launchpad (build 15679)\n" #. openerp-web diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 30c0b5ea0b3..e929ec6c16b 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -20,6 +20,50 @@ font-style: normal; } +@-moz-keyframes bounce { + 0% { + -moz-transform: scale(0); + opacity: 0; + } + + 50% { + -moz-transform: scale(1.3); + opacity: 0.4; + } + + 75% { + -moz-transform: scale(0.9); + opacity: 0.7; + } + + 100% { + -moz-transform: scale(1); + opacity: 1; + } +} + +@-webkit-keyframes bounce { + 0% { + -webkit-transform: scale(0); + opacity: 0; + } + + 50% { + -webkit-transform: scale(1.3); + opacity: 0.4; + } + + 75% { + -webkit-transform: scale(0.9); + opacity: 0.7; + } + + 100% { + -webkit-transform: scale(1); + opacity: 1; + } +} + .openerp.openerp_webclient_container { height: 100%; position: relative; @@ -186,6 +230,11 @@ .openerp .ui-menu .ui-menu-item a.ui-state-active { background: #f0f0fa; } +.openerp div.ui-widget-overlay { + background: black; + filter: alpha(opacity=30); + opacity: 0.3; +} .openerp.ui-dialog { display: none; padding: 6px; @@ -497,6 +546,10 @@ .openerp .oe_webclient .oe_star_on { color: gold; } +.openerp .oe_bounce { + -moz-animation: bounce 0.4s linear; + -webkit-animation: bounce 0.4s linear; +} .openerp .oe_tag { border-radius: 2px; -webkit-box-sizing: border-box; @@ -2363,6 +2416,58 @@ .openerp .oe_list_content .numeric input { text-align: right; } +.openerp .tree_header { + background-color: #f0f0f0; + border-bottom: 1px solid #cacaca; + color: #4c4c4c; + padding: 5px; + height: 25px; +} +.openerp .tree_header button { + float: right; + height: 27px; + margin-right: 5px; +} +.openerp .oe-treeview-table { + width: 100%; + background-color: white; + border-spacing: 0; +} +.openerp .oe-treeview-table th { + padding: 10px; + color: #4c4c4c; + font-weight: bold; + background-color: #f0f0f0; + border-bottom: 2px solid #cacaca; +} +.openerp .oe-treeview-table .treeview-tr, .openerp .oe-treeview-table .treeview-td { + cursor: pointer; + border-right: 1px dotted #afafb6; + vertical-align: top; + text-align: left; + border-bottom: 1px solid #cfcccc; +} +.openerp .oe-treeview-table tr:hover { + background-color: #e0e0f8; +} +.openerp .oe-treeview-table .oe-number { + text-align: right !important; +} +.openerp .oe-treeview-table span { + font-size: 90%; + font-weight: normal; + white-space: nowrap; + display: block; +} +.openerp .oe-treeview-table .treeview-tr.oe-treeview-first { + background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat; +} +.openerp .oe-treeview-table .oe_open .treeview-tr.oe-treeview-first { + background-image: url(/web/static/src/img/collapse.gif); +} +.openerp .oe-treeview-table .treeview-tr.oe-treeview-first span, .openerp .oe-treeview-table .treeview-td.oe-treeview-first span { + margin-left: 16px; +} .openerp .oe_trad_field.touched { border: 1px solid green !important; } @@ -2428,59 +2533,6 @@ color: #333333; } -.openerp .tree_header { - background-color: #f0f0f0; - border-bottom: 1px solid #cacaca; - color: #4c4c4c; - padding: 5px; - height: 25px; -} -.openerp .tree_header button { - float: right; - height: 27px; - margin-right: 5px; -} -.openerp .oe-treeview-table { - width: 100%; - background-color: white; - border-spacing: 0; -} -.openerp .oe-treeview-table th { - padding: 10px; - color: #4c4c4c; - font-weight: bold; - background-color: #f0f0f0; - border-bottom: 2px solid #cacaca; -} -.openerp .oe-treeview-table .treeview-tr, .openerp .oe-treeview-table .treeview-td { - cursor: pointer; - border-right: 1px dotted #afafb6; - vertical-align: top; - text-align: left; - border-bottom: 1px solid #cfcccc; -} -.openerp .oe-treeview-table tr:hover { - background-color: #e0e0f8; -} -.openerp .oe-treeview-table .oe-number { - text-align: right !important; -} -.openerp .oe-treeview-table span { - font-size: 90%; - font-weight: normal; - white-space: nowrap; - display: block; -} -.openerp .oe-treeview-table .treeview-tr.oe-treeview-first { - background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat; -} -.openerp .oe-treeview-table .oe_open .treeview-tr.oe-treeview-first { - background-image: url(/web/static/src/img/collapse.gif); -} -.openerp .oe-treeview-table .treeview-tr.oe-treeview-first span, .openerp .oe-treeview-table .treeview-td.oe-treeview-first span { - margin-left: 16px; -} - .kitten-mode-activated { background-image: url(http://placekitten.com/g/1365/769); background-size: cover; @@ -2489,9 +2541,3 @@ .kitten-mode-activated > * { opacity: 0.7; } - -div.ui-widget-overlay { - background: black; - filter: alpha(opacity=30); - opacity: 0.3; -} diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 7fbe5c1c336..c9e00c65a8a 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -97,6 +97,35 @@ $sheet-max-width: 860px color: $color // }}} +// CSS animation bounces {{{ +@-moz-keyframes bounce + 0% + -moz-transform: scale(0) + opacity: 0 + 50% + -moz-transform: scale(1.3) + opacity: 0.4 + 75% + -moz-transform: scale(0.9) + opacity: 0.7 + 100% + -moz-transform: scale(1) + opacity: 1 + +@-webkit-keyframes bounce + 0% + -webkit-transform: scale(0) + opacity: 0 + 50% + -webkit-transform: scale(1.3) + opacity: 0.4 + 75% + -webkit-transform: scale(0.9) + opacity: 0.7 + 100% + -webkit-transform: scale(1) + opacity: 1 +// }}} .openerp.openerp_webclient_container height: 100% @@ -200,7 +229,9 @@ $sheet-max-width: 860px width: auto a.ui-state-active background: #f0f0fa - + div.ui-widget-overlay + background: black + @include opacity(0.3) // Modal box &.ui-dialog display: none @@ -390,6 +421,9 @@ $sheet-max-width: 860px text-decoration: none .oe_star_on color: gold + .oe_bounce + -moz-animation: bounce .40s linear + -webkit-animation: bounce .40s linear // }}} // Tags (for many2many tags, among others) {{{ .oe_tag @@ -1846,6 +1880,49 @@ $sheet-max-width: 860px input text-align: right // }}} + // Tree view {{{ + .tree_header + background-color: #f0f0f0 + border-bottom: 1px solid #cacaca + color: #4c4c4c + padding: 5px + height: 25px + button + float: right + height: 27px + margin-right: 5px + .oe-treeview-table + width: 100% + background-color: white + border-spacing: 0 + th + padding: 10px + color: #4c4c4c + font-weight: bold + background-color: #f0f0f0 + border-bottom: 2px solid #cacaca + .treeview-tr, .treeview-td + cursor: pointer + border-right: 1px dotted #afafb6 + vertical-align: top + text-align: left + border-bottom: 1px solid #cfcccc + tr:hover + background-color: #e0e0f8 + .oe-number + text-align: right !important + span + font-size: 90% + font-weight: normal + white-space: nowrap + display: block + .treeview-tr.oe-treeview-first + background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat + .oe_open .treeview-tr.oe-treeview-first + background-image: url(/web/static/src/img/collapse.gif) + .treeview-tr.oe-treeview-first span, .treeview-td.oe-treeview-first span + margin-left: 16px + // }}} // Translation {{{ .oe_trad_field.touched border: 1px solid green !important @@ -1903,49 +1980,6 @@ $sheet-max-width: 860px float: right color: #333 // }}} -//Tree view -.openerp - .tree_header - background-color: #f0f0f0 - border-bottom: 1px solid #cacaca - color: #4c4c4c - padding: 5px - height: 25px - button - float: right - height: 27px - margin-right: 5px - .oe-treeview-table - width: 100% - background-color: white - border-spacing: 0 - th - padding: 10px - color: #4c4c4c - font-weight: bold - background-color: #f0f0f0 - border-bottom: 2px solid #cacaca - .treeview-tr, .treeview-td - cursor: pointer - border-right: 1px dotted #afafb6 - vertical-align: top - text-align: left - border-bottom: 1px solid #cfcccc - tr:hover - background-color: #e0e0f8 - .oe-number - text-align: right !important - span - font-size: 90% - font-weight: normal - white-space: nowrap - display: block - .treeview-tr.oe-treeview-first - background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat - .oe_open .treeview-tr.oe-treeview-first - background-image: url(/web/static/src/img/collapse.gif) - .treeview-tr.oe-treeview-first span, .treeview-td.oe-treeview-first span - margin-left: 16px // Kitten Mode {{{ .kitten-mode-activated background-image: url(http://placekitten.com/g/1365/769) @@ -1956,8 +1990,6 @@ $sheet-max-width: 860px // }}} -div.ui-widget-overlay - background: black - @include opacity(0.3) + // au BufWritePost,FileWritePost *.sass :!sass --style expanded --line-numbers > "%:p:r.css" // vim:tabstop=4:shiftwidth=4:softtabstop=4:fdm=marker: diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index b5c69f5c82f..dfab007b5c5 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -387,8 +387,16 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ var fields = $(form).serializeArray(); self.rpc("/web/database/create", {'fields': fields}, function(result) { var form_obj = self.to_object(fields); - self.getParent().do_login( form_obj['db_name'], 'admin', form_obj['create_admin_pwd']); - self.destroy(); + var client_action = { + type: 'ir.actions.client', + tag: 'login', + params: { + 'db': form_obj['db_name'], + 'login': 'admin', + 'password': form_obj['create_admin_pwd'], + }, + }; + self.do_action(client_action); }); }, @@ -473,19 +481,22 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ }); }, do_exit: function () { + this.do_action("login"); } }); +instance.web.client_actions.add("database_manager", "instance.web.DatabaseManager"); instance.web.Login = instance.web.Widget.extend({ template: "Login", remember_credentials: true, _db_list: null, - init: function(parent) { + init: function(parent, params) { this._super(parent); this.has_local_storage = typeof(localStorage) != 'undefined'; this.selected_db = null; this.selected_login = null; + this.params = params; if (this.has_local_storage && this.remember_credentials) { this.selected_db = localStorage.getItem('last_db_login_success'); @@ -495,26 +506,17 @@ instance.web.Login = instance.web.Widget.extend({ } } }, - open_db_manager: function(){ - var self = this; - self.$element.find('.oe_login_bottom').hide(); - self.$element.find('.oe_login_pane').hide(); - self.databasemanager = new instance.web.DatabaseManager(self); - self.databasemanager.appendTo(self.$element); - self.databasemanager.do_exit.add_last(function() { - self.databasemanager.destroy(); - self.$element.find('.oe_login_bottom').show(); - self.$element.find('.oe_login_pane').show(); - self.load_db_list(true).then(self.on_db_list_loaded); - }); - }, start: function() { var self = this; self.$element.find("form").submit(self.on_submit); self.$element.find('.oe_login_manage_db').click(function() { - self.open_db_manager(); + self.do_action("database_manager"); + }); + return self.load_db_list().then(self.on_db_list_loaded).then(function() { + if(self.params) { + self.do_login(self.params.db, self.params.login, self.params.password); + } }); - return self.load_db_list().then(self.on_db_list_loaded); }, load_db_list: function (force) { var d = $.when(), self = this; @@ -535,7 +537,7 @@ instance.web.Login = instance.web.Widget.extend({ var dbdiv = this.$element.find('div.oe_login_dbpane'); this.$element.find("[name=db]").replaceWith(instance.web.qweb.render('Login.dblist', { db_list: list, selected_db: this.selected_db})); if(list.length === 0) { - self.open_db_manager(); + this.do_action("database_manager"); } else if(list && list.length === 1) { dbdiv.hide(); } else { @@ -582,13 +584,24 @@ instance.web.Login = instance.web.Widget.extend({ localStorage.setItem('last_password_login_success', ''); } } - self.trigger("login"); + self.do_action("login_sucessful"); },function () { self.$(".oe_login_pane").fadeIn("fast"); self.$element.addClass("oe_login_invalid"); }); } }); +instance.web.client_actions.add("login", "instance.web.Login"); + +instance.web.LoginSuccessful = instance.web.Widget.extend({ + init: function(parent) { + this._super(parent); + }, + start: function() { + this.getParent().getParent().show_application(); + }, +}); +instance.web.client_actions.add("login_sucessful", "instance.web.LoginSuccessful"); instance.web.Menu = instance.web.Widget.extend({ template: 'Menu', @@ -964,19 +977,16 @@ instance.web.WebClient = instance.web.Client.extend({ data: {debug: file + ':' + line} }); }; - // TODO: deprecate and use login client action - self.login = new instance.web.Login(self); - self.login.on("login",self,self.show_application); }, show_login: function() { var self = this; self.$('.oe_topbar').hide(); - self.login.appendTo(self.$element); + self.action_manager.do_action("login"); + //self.login.appendTo(self.$element); }, show_application: function() { var self = this; self.$('.oe_topbar').show(); - self.login.$element.hide(); self.menu = new instance.web.Menu(self); self.menu.replace(this.$element.find('.oe_menu_placeholder')); self.menu.on('menu_click', this, this.on_menu_action); @@ -1057,6 +1067,7 @@ instance.web.WebClient = instance.web.Client.extend({ }, do_push_state: function(state) { this.set_title(state.title); + delete state.title; var url = '#' + $.param(state); this._current_state = _.clone(state); $.bbq.pushState(url); @@ -1083,10 +1094,13 @@ instance.web.WebClient = instance.web.Client.extend({ } }, set_content_full_screen: function(fullscreen) { - if (fullscreen) + if (fullscreen) { $(".oe_webclient", this.$element).addClass("oe_content_full_screen"); - else + $("body").css({'overflow-y':'hidden'}); + } else { $(".oe_webclient", this.$element).removeClass("oe_content_full_screen"); + $("body").css({'overflow-y':'scroll'}); + } } }); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 2968fe368dc..39dc321f97d 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -163,6 +163,15 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM { label: _t('Set Default'), callback: function (item) { self.open_defaults_dialog(); } }, ]); } + + // Add bounce effect on button 'Edit' when click on readonly page view. + this.$element.find(".oe_form_field, .oe_form_group_cell").on('click', function (e) { + if(self.get("actual_mode") == "view") { + var $button = self.options.$buttons.find(".oe_form_button_edit"); + $button.wrap('
').css('margin-right','4px').addClass('oe_left oe_bounce'); + } + }); + this.has_been_loaded.resolve(); return $.when(); }, @@ -1673,6 +1682,9 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ // TODO fme: provide enter key binding to widgets this.view.default_focus_button = this; } + if (this.node.attrs.icon && (! /\//.test(this.node.attrs.icon))) { + this.node.attrs.icon = '/web/static/src/img/icons/' + this.node.attrs.icon + '.png'; + } this.view.on('view_content_has_changed', this, this.check_disable); }, start: function() { diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 53a8c0126b2..485b4e8d59b 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -357,6 +357,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi { label: _t('Delete'), callback: this.do_delete_selected }, ]); this.sidebar.add_toolbar(this.fields_view.toolbar); + this.sidebar.$element.hide(); } }, /** @@ -493,9 +494,6 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi }, do_show: function () { this._super(); - if (this.sidebar) { - this.sidebar.$element.show(); - } if (this.$buttons) { this.$buttons.show(); } diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index ddf4050fa38..6b4bc44df64 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -120,7 +120,9 @@ instance.web.ActionManager = instance.web.Widget.extend({ if (this.getParent() && this.getParent().do_push_state) { if (this.inner_action) { state['title'] = this.inner_action.name; - state['model'] = this.inner_action.res_model; + if(this.inner_action.type == 'ir.actions.act_window') { + state['model'] = this.inner_action.res_model; + } if (this.inner_action.id) { state['action_id'] = this.inner_action.id; } @@ -178,7 +180,10 @@ instance.web.ActionManager = instance.web.Widget.extend({ }); }, do_action: function(action, on_close) { - if (_.isNumber(action) || _.isString(action)) { + if (_.isString(action) && instance.web.client_actions.contains(action)) { + var action_client = { type: "ir.actions.client", tag: action }; + return this.do_action(action_client); + } else if (_.isNumber(action) || _.isString(action)) { var self = this; return self.rpc("/web/action/load", { action_id: action }, function(result) { self.do_action(result.result, on_close); @@ -223,7 +228,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ // These buttons will be overwrited by
if any this.dialog = new instance.web.Dialog(this, { buttons: { "Close": function() { $(this).dialog("close"); }}, - dialogClass: 'oe_act_window' + dialogClass: 'oe_act_window' }); if(on_close) this.dialog.on_close.add(on_close); @@ -270,6 +275,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ widget: this.inner_widget, title: action.name }); + this.inner_action = action; + this.do_push_state({}); this.inner_widget.appendTo(this.$element); }, ir_actions_report_xml: function(action, on_closed) { diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 4ce36fe86d4..55353f0a748 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -653,9 +653,7 @@ t-att-style="view.style_for(record)"> - - - + @@ -674,7 +672,6 @@ - @@ -1191,6 +1195,41 @@ + +
+ + + + + + + +
+ +
+
+
+
+
+
+ + + + or + + Cancel + + + + + + + + + + or Discard + + this.attr('t-if', 'views.length != 1'); @@ -1243,7 +1282,6 @@ - @@ -1268,7 +1306,6 @@

(Any existing filter with the same name will be replaced)

- @@ -1465,49 +1502,6 @@ - -
-
- - - - - - -
- -
-
-
-
- -
- - - - or - - Cancel - - - - - - - - - - or Cancel - - - - - - - @@ -1572,6 +1566,7 @@ + Export diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 5a22b9e5ba5..cd12953adcd 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -420,6 +420,15 @@ instance.web_kanban.KanbanGroup = instance.web.OldWidget.extend({ self.quick.appendTo($(".oe_kanban_group_list_header", self.$records)); self.quick.focus(); }); + // Add bounce effect on image '+' of kanban header when click on empty space of kanban grouped column. + var add_btn = this.$element.find('.oe_kanban_add'); + this.$records.click(function (ev) { + if (ev.target == ev.currentTarget) { + if (!self.state.folded) { + add_btn.wrap('
').addClass('oe_bounce'); + } + } + }); this.$records.find('.oe_kanban_show_more').click(this.do_show_more); if (this.state.folded) { this.do_toggle_fold();