diff options
| author | Thibault Delavallée <tde@openerp.com> | 2013-03-13 11:17:56 +0100 |
|---|---|---|
| committer | Thibault Delavallée <tde@openerp.com> | 2013-03-13 11:17:56 +0100 |
| commit | 408144864b8a01246729657aa6b096f83dae7c88 (patch) | |
| tree | 1bac2da0fcbe382600a3d42fce39f7284c62b504 /addons/web/static/src | |
| parent | 459fce0150981269e668fda52001463269f58659 (diff) | |
| parent | f79f6a5a25a0708e662f2deed4a54c704c6872b5 (diff) | |
[MERGE] Sync with 7.0
bzr revid: tde@openerp.com-20130313101756-r0b41kr2c4sxzfm8
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/css/base.css | 12 | ||||
| -rw-r--r-- | addons/web/static/src/css/base.sass | 5 | ||||
| -rw-r--r-- | addons/web/static/src/js/chrome.js | 97 | ||||
| -rw-r--r-- | addons/web/static/src/js/coresetup.js | 4 | ||||
| -rw-r--r-- | addons/web/static/src/js/search.js | 2 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 22 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 44 |
7 files changed, 133 insertions, 53 deletions
diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index b0b0db61be3..971a68f0108 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1263,7 +1263,7 @@ color: white; padding: 2px 4px; margin: 1px 6px 0 0; - border: 1px solid lightGray; + border: 1px solid lightgrey; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -1295,7 +1295,7 @@ transform: scale(1.1); } .openerp .oe_secondary_submenu .oe_active { - border-top: 1px solid lightGray; + border-top: 1px solid lightgrey; border-bottom: 1px solid #dedede; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); @@ -1806,7 +1806,7 @@ } .openerp .oe_searchview .oe_searchview_drawer { position: absolute; - z-index: 3; + z-index: 2; margin-top: 4px; top: 100%; right: -1px; @@ -2257,7 +2257,7 @@ } .openerp .oe_form .oe_form_label_help[for] span, .openerp .oe_form .oe_form_label[for] span { font-size: 80%; - color: darkGreen; + color: darkgreen; vertical-align: top; position: relative; top: -4px; @@ -3154,6 +3154,10 @@ div.ui-widget-overlay { border-radius: 3px; } +.openerp .db_option_table td { + padding-bottom: 10px !important; +} + .openerp_ie .placeholder { color: #afafb6 !important; font-style: italic !important; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 9b8837a511d..f769c26dc34 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -2487,6 +2487,11 @@ div.ui-widget-overlay @include radius(3px) // }}} +.openerp + .db_option_table + td + padding-bottom: 10px !important + // Internet Explorer 9+ specifics {{{ .openerp_ie .placeholder diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 6b16204932b..09ac02e326f 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -478,7 +478,16 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ 'login': 'admin', 'password': form_obj['create_admin_pwd'], 'login_successful': function() { - self.do_action("reload"); + var action = { + type: "ir.actions.client", + tag: 'reload', + params: { + url_search : { + db: form_obj['db_name'], + }, + } + }; + self.do_action(action); }, }, _push_me: false, @@ -589,6 +598,11 @@ instance.web.client_actions.add("database_manager", "instance.web.DatabaseManage instance.web.Login = instance.web.Widget.extend({ template: "Login", remember_credentials: true, + events: { + 'change input[name=db],select[name=db]': function(ev) { + this.set('database_selector', $(ev.currentTarget).val()); + }, + }, init: function(parent, action) { this._super(parent); @@ -600,18 +614,18 @@ instance.web.Login = instance.web.Widget.extend({ if (_.isEmpty(this.params)) { this.params = $.bbq.getState(true); } + if (action && action.params && action.params.db) { + this.params.db = action.params.db; + } else if ($.deparam.querystring().db) { + this.params.db = $.deparam.querystring().db; + } + if (this.params.db) { + this.selected_db = this.params.db; + } if (this.params.login_successful) { this.on('login_successful', this, this.params.login_successful); } - - if (this.has_local_storage && this.remember_credentials) { - this.selected_db = localStorage.getItem('last_db_login_success'); - this.selected_login = localStorage.getItem('last_login_login_success'); - if (jQuery.deparam(jQuery.param.querystring()).debug !== undefined) { - this.selected_password = localStorage.getItem('last_password_login_success'); - } - } }, start: function() { var self = this; @@ -619,10 +633,10 @@ instance.web.Login = instance.web.Widget.extend({ self.$el.find('.oe_login_manage_db').click(function() { self.do_action("database_manager"); }); + self.on('change:database_selector', this, function() { + this.database_selected(this.get('database_selector')); + }); var d = $.when(); - if ($.deparam.querystring().db) { - self.params.db = $.deparam.querystring().db; - } if ($.param.fragment().token) { self.params.token = $.param.fragment().token; } @@ -630,16 +644,44 @@ instance.web.Login = instance.web.Widget.extend({ if (self.params.db && self.params.login && self.params.password) { d = self.do_login(self.params.db, self.params.login, self.params.password); } else { - if (self.params.db) { - self.on_db_loaded([self.params.db]) - } else { - d = self.rpc("/web/database/get_list", {}).done(self.on_db_loaded).fail(self.on_db_failed); - } + d = self.rpc("/web/database/get_list", {}) + .done(self.on_db_loaded) + .fail(self.on_db_failed) + .always(function() { + if (self.selected_db && self.has_local_storage && self.remember_credentials) { + self.$("[name=login]").val(localStorage.getItem(self.selected_db + '|last_login') || ''); + if (self.session.debug) { + self.$("[name=password]").val(localStorage.getItem(self.selected_db + '|last_password') || ''); + } + } + }); } return d; }, + remember_last_used_database: function(db) { + // This cookie will be used server side in order to avoid db reloading on first visit + var ttl = 24 * 60 * 60 * 365; + document.cookie = [ + 'last_used_database=' + db, + 'path=/', + 'max-age=' + ttl, + 'expires=' + new Date(new Date().getTime() + ttl * 1000).toGMTString() + ].join(';'); + }, + database_selected: function(db) { + var params = $.deparam.querystring(); + params.db = db; + this.remember_last_used_database(db); + this.$('.oe_login_dbpane').empty().text(_t('Loading...')); + this.$('[name=login], [name=password]').prop('readonly', true); + instance.web.redirect('/?' + $.param(params)); + }, on_db_loaded: function (result) { + var self = this; this.db_list = result; + if (!this.selected_db) { + this.selected_db = result[0]; + } this.$("[name=db]").replaceWith(QWeb.render('Login.dblist', { db_list: this.db_list, selected_db: this.selected_db})); if(this.db_list.length === 0) { this.do_action("database_manager"); @@ -680,17 +722,11 @@ instance.web.Login = instance.web.Widget.extend({ self.hide_error(); self.$(".oe_login_pane").fadeOut("slow"); return this.session.session_authenticate(db, login, password).then(function() { - if (self.has_local_storage) { - if(self.remember_credentials) { - localStorage.setItem('last_db_login_success', db); - localStorage.setItem('last_login_login_success', login); - if (jQuery.deparam(jQuery.param.querystring()).debug !== undefined) { - localStorage.setItem('last_password_login_success', password); - } - } else { - localStorage.setItem('last_db_login_success', ''); - localStorage.setItem('last_login_login_success', ''); - localStorage.setItem('last_password_login_success', ''); + self.remember_last_used_database(db); + if (self.has_local_storage && self.remember_credentials) { + localStorage.setItem(db + '|last_login', login); + if (self.session.debug) { + localStorage.setItem(db + '|last_password', password); } } self.trigger('login_successful'); @@ -748,6 +784,9 @@ instance.web.Reload = function(parent, action) { var sobj = $.deparam(l.search.substr(1)); sobj.ts = new Date().getTime(); + if (params.url_search) { + sobj = _.extend(sobj, params.url_search); + } var search = '?' + $.param(sobj); var hash = l.hash; @@ -1226,7 +1265,7 @@ instance.web.WebClient = instance.web.Client.extend({ }, logo_edit: function(ev) { var self = this; - new self.alive(instance.web.Model("res.users").get_func("read")(this.session.uid, ["company_id"])).then(function(res) { + self.alive(new instance.web.Model("res.users").get_func("read")(this.session.uid, ["company_id"])).then(function(res) { self.rpc("/web/action/load", { action_id: "base.action_res_company_form" }).done(function(result) { result.res_id = res['company_id'][0]; result.target = "new"; diff --git a/addons/web/static/src/js/coresetup.js b/addons/web/static/src/js/coresetup.js index 43d292b66db..dedb4a49710 100644 --- a/addons/web/static/src/js/coresetup.js +++ b/addons/web/static/src/js/coresetup.js @@ -89,6 +89,10 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess }); }, session_is_valid: function() { + var db = $.deparam.querystring().db; + if (db && this.db !== db) { + return false; + } return !!this.uid; }, /** diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index c57f8c43f60..d0dfa9b4bfd 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1197,7 +1197,7 @@ instance.web.search.GroupbyGroup = instance.web.search.FilterGroup.extend({ category: _t("GroupBy"), icon: this.icon, values: values, - field: this.getParent()._s_groupby + field: this.view._s_groupby }; } }); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 952a1c9d15f..a0eb3968944 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1892,10 +1892,11 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ 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() { this._super.apply(this, arguments); + this.view.on('view_content_has_changed', this, this.check_disable); + this.check_disable(); this.$el.click(this.on_click); if (this.node.attrs.help || instance.session.debug) { this.do_attach_tooltip(); @@ -1930,7 +1931,7 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ $(self2).dialog("close"); }); } - }, + } ], beforeClose: function() { def.resolve(); @@ -3306,7 +3307,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc }, focus: function () { if (!this.get('effective_readonly')) { - this.$input[0].focus(); + this.$input && this.$input[0].focus(); } }, _quick_create: function() { @@ -3785,8 +3786,12 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ this.o2m.trigger_on_change(); }, is_valid: function () { - var form = this.editor.form; - + var editor = this.editor; + var form = editor.form; + // If no edition is pending, the listview can not be invalid (?) + if (!editor.record) { + return true + } // If the form has not been modified, the view can only be valid // NB: is_dirty will also be set on defaults/onchanges/whatever? // oe_form_dirty seems to only be set on actual user actions @@ -4033,6 +4038,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in if (this.get("effective_readonly")) return; var self = this; + var ignore_blur = false; self.$text = this.$("textarea"); self.$text.textext({ plugins : 'tags arrow autocomplete', @@ -4051,6 +4057,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in if (data.id) { self.add_id(data.id); } else { + ignore_blur = true; data.action(); } }, @@ -4101,10 +4108,13 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in self.$text .focusin(function () { self.trigger('focused'); + ignore_blur = false; }) .focusout(function() { self.$text.trigger("setInputData", ""); - self.trigger('blurred'); + if (!ignore_blur) { + self.trigger('blurred'); + } }).keydown(function(e) { if (e.which === $.ui.keyCode.TAB && self._drop_shown) { self.$text.textext()[0].autocomplete().selectFromDropdown(); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 529b7809d46..970659dfa43 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -71,9 +71,9 @@ </div> <ul> <li>Username</li> - <li><input name="login" type="text" t-att-value="widget.selected_login || ''" autofocus="autofocus"/></li> + <li><input name="login" type="text" value="" autofocus="autofocus"/></li> <li>Password</li> - <li><input name="password" type="password" t-att-value="widget.selected_password || ''"/></li> + <li><input name="password" type="password" value=""/></li> <li><button name="submit">Log in</button></li> </ul> </form> @@ -106,33 +106,47 @@ <div class="oe_view_manager_header" style="padding: 8px;"> <div class="oe_header_row"> <h2 class="oe_view_title"> - <span class="oe_view_title_text oe_breadcrumb_title">Create Database</span> + <span class="oe_view_title_text oe_breadcrumb_title">Create a New Database</span> </h2> - <button type="submit" class="oe_button oe_highlight db_create">Create</button> </div> </div> </div> - <table align="center" class="db_option_table"> + <p class="oe_grey" style="margin: 10px"> + Fill in this form to create an OpenERP database. You can + create databases for different companies or for different + goals (testing, production). Once the database is created, + you will be able to install your first application. + </p> + <p class="oe_grey" style="margin: 10px"> + By default, the master password is 'admin'. This password + is required to created, delete dump or restore databases. + </p> + <table class="db_option_table" style="margin: 10px"> <tr> <td><label for="super_admin_pwd">Master password:</label></td> - <td><input type="password" name="super_admin_pwd" class="required" value="admin" /></td> + <td> + <input type="text" name="super_admin_pwd" class="required" value="admin"/> + </td> </tr> <tr> - <td><label for="db_name">New database name:</label></td> - <td><input type="text" name="db_name" class="required" matches="^[a-zA-Z0-9][a-zA-Z0-9_-]+$" autofocus="true"/></td> + <td><label for="db_name">Select a database name:</label></td> + <td> + <input type="text" name="db_name" class="required" matches="^[a-zA-Z0-9][a-zA-Z0-9_-]+$" autofocus="true" placeholder="e.g. mycompany"/> + </td> </tr> <tr> - <td><label for="demo_data">Load Demonstration data:</label></td> + <td><label for="demo_data">Load demonstration data:</label></td> <td class="oe_form_group_cell"> - <span class="oe_form_field oe_form_field_boolean"> + <span class="oe_form_field oe_form_field_boolean oe_grey" > <input type="checkbox" name="demo_data" /> + Check this box to evaluate OpenERP. </span> </td> </tr> <tr> <td><label for="db_lang">Default language:</label></td> - <td class="oe_form_field oe_form_field_selection "> - <select name="db_lang" t-if="widget.lang_list"> + <td class="oe_form_field oe_form_field_selection"> + <select name="db_lang" t-if="widget.lang_list" class="oe_inline"> <t t-foreach="widget.lang_list" t-as="lang"> <option t-att-value="lang[0]" t-att-selected="lang[0] === 'en_US' ? 'selected' : undefined"> <t t-esc="lang[1]" /> @@ -142,13 +156,17 @@ </td> </tr> <tr> - <td><label for="create_admin_pwd">Admin password:</label></td> + <td><label for="create_admin_pwd">Choose a password:</label></td> <td><input type="password" name="create_admin_pwd" class="required" /></td> </tr> <tr> <td><label for="create_confirm_pwd">Confirm password:</label></td> <td><input type="password" name="create_confirm_pwd" class="required" equalTo="input[name=create_admin_pwd]"/></td> </tr> + <tr> + <td></td> + <td><button type="submit" class="oe_button oe_highlight db_create">Create Database</button></td> + </tr> </table> </form> <form id="db_duplicate" name="duplicate_db_form" style="display: none;"> |
