diff options
| author | Yogesh (OpenERP) <ysa@tinyerp.com> | 2011-11-10 10:41:50 +0530 |
|---|---|---|
| committer | Yogesh (OpenERP) <ysa@tinyerp.com> | 2011-11-10 10:41:50 +0530 |
| commit | 0ce4e347054fc7713e165f275756ba4a1a0ea1f3 (patch) | |
| tree | d34b6b381fbafd1a2f24beff7ca9c155a3ab2613 /addons/web/static/src | |
| parent | b9b9fbca444327c3e1f68d62efc39d5e64e4edf3 (diff) | |
| parent | 611705d7f179fb1b3a6db9eff92e1f74ae3e9299 (diff) | |
[MERGE] Merge with trunk upto revision no 1432.
bzr revid: ysa@tinyerp.com-20111110051150-b1b7e0c3qqowb6u3
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/css/base.css | 32 | ||||
| -rw-r--r-- | addons/web/static/src/js/boot.js | 5 | ||||
| -rw-r--r-- | addons/web/static/src/js/chrome.js | 2 | ||||
| -rw-r--r-- | addons/web/static/src/js/core.js | 23 | ||||
| -rw-r--r-- | addons/web/static/src/js/data_export.js | 9 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 25 | ||||
| -rw-r--r-- | addons/web/static/src/js/views.js | 106 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 59 |
8 files changed, 157 insertions, 104 deletions
diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 94e36d60419..01f4b11f4d3 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -654,6 +654,9 @@ label.error { display: none; } +.openerp .oe_search-view-buttons { + padding: 10px 0 10px 0; +} .openerp .oe_search-view-custom-filter-btn span { background: url(/web/static/src/img/icons/gtk-add.png) repeat-y; padding-left: 18px; @@ -1080,11 +1083,16 @@ label.error { } .openerp .oe-view-manager-logs { clear: both; - font-size: 85%; - margin: 0.25em 0; background: #fff; - padding: 0 10px; + margin: 0.25em 0; + font-size: 85%; color: #4C4C4C; + position: relative; + overflow: hidden; +} +.openerp .oe-view-manager-logs ul { + margin: 0; + padding: 0 10px; list-style: none; } .openerp .oe-view-manager-logs li:before { @@ -1094,6 +1102,24 @@ label.error { text-decoration: none; color: inherit; } +/* only display first three log items of a folded logs list */ +.openerp .oe-view-manager-logs.oe-folded li:nth-child(n+4) { + display: none; +} +/* display link to more logs if there are more logs to view and the logview is + currently folded */ +.openerp .oe-view-manager-logs a.oe-more-logs { + display: none; +} +.openerp .oe-view-manager-logs.oe-folded.oe-has-more a.oe-more-logs { + display: block; +} +.openerp .oe-view-manager-logs a.oe-remove-everything { + position: absolute; + top: 0; + right: 0; + cursor: pointer; +} .openerp .view-manager-main-sidebar { width: 180px; diff --git a/addons/web/static/src/js/boot.js b/addons/web/static/src/js/boot.js index 5fba5f4d8d4..58dcd922ea9 100644 --- a/addons/web/static/src/js/boot.js +++ b/addons/web/static/src/js/boot.js @@ -65,6 +65,11 @@ openerp.web = function(instance) { openerp.web[files[i]](instance); } } + instance.log = function() { + if (instance.connection.debug && window.console) { + console.log.apply(console, arguments); + } + } }; // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index d85942feead..25b73ee59d5 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -109,7 +109,7 @@ openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog# } }, start: function () { - this.$dialog = $('<div id="' + this.element_id + '"></div>').dialog(this.dialog_options); + this.$dialog = $(this.$element).dialog(this.dialog_options); this._super(); return this; }, diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 7b402cae7fd..1929c573e42 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -793,6 +793,11 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W */ identifier_prefix: 'generic-identifier-', /** + * Tag name when creating a default $element. + * @type string + */ + tag_name: 'div', + /** * Construct the widget and set its parent if a parent is given. * * @constructs openerp.web.Widget @@ -814,7 +819,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W this.element_id = element_id; this.element_id = this.element_id || _.uniqueId(this.identifier_prefix); var tmp = document.getElementById(this.element_id); - this.$element = tmp ? $(tmp) : undefined; + this.$element = tmp ? $(tmp) : $(document.createElement(this.tag_name)); this.widget_parent = parent; this.widget_children = []; @@ -869,8 +874,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W }, target); }, _render_and_insert: function(insertion, target) { - var rendered = this.render(); - this.$element = $(rendered); + this.render_element(); if (target instanceof openerp.web.Widget) target = target.$element; insertion(target); @@ -879,13 +883,24 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W }, on_inserted: function(element, widget) {}, /** + * Renders the element and insert the result of the render() method in this.$element. + */ + render_element: function() { + var rendered = this.render(); + if (rendered || rendered === "") + this.$element = $(rendered); + return this; + }, + /** * Renders the widget using QWeb, `this.template` must be defined. * The context given to QWeb contains the "widget" key that references `this`. * * @param {Object} additional Additional context arguments to pass to the template. */ render: function (additional) { - return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {})); + if (this.template) + return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {})); + return false; }, /** * Method called after rendering. Mostly used to bind actions, perform asynchronous diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js index 51ac2cbd568..ea142606b5b 100644 --- a/addons/web/static/src/js/data_export.js +++ b/addons/web/static/src/js/data_export.js @@ -165,7 +165,11 @@ openerp.web.DataExport = openerp.web.Dialog.extend({ } var model = record['params']['model'], prefix = record['params']['prefix'], - name = record['params']['name']; + name = record['params']['name'], + exclude_fields = []; + if (record['relation_field']) { + exclude_fields.push(record['relation_field']); + } if (!record.loaded) { var import_comp = self.$element.find("#import_compat").val(); @@ -174,7 +178,8 @@ openerp.web.DataExport = openerp.web.Dialog.extend({ prefix: prefix, parent_name: name, import_compat: Boolean(import_comp), - parent_field_type : record['field_type'] + parent_field_type : record['field_type'], + exclude: exclude_fields }, function(results) { record.loaded = true; self.on_show_data(results, record.id); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 603e2abb008..15790d3c1c0 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -102,7 +102,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# self.on_pager_action(action); }); - this.$form_header.find('button.oe_form_button_save').click(this.do_save_then_readonly); + this.$form_header.find('button.oe_form_button_save').click(this.on_button_save); this.$form_header.find('button.oe_form_button_new').click(this.on_button_new); this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate); this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete); @@ -197,7 +197,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.do_update_pager(record.id == null); if (this.sidebar) { this.sidebar.attachments.do_update(); - this.sidebar.$element.find('.oe_sidebar_translate').toggleClass('oe_hide', !record.id); } if (this.default_focus_field && !this.embedded_view) { this.default_focus_field.focus(); @@ -295,7 +294,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return self.on_processed_onchange(response, processed); }); } else { - console.log("Wrong on_change format", on_change); + console.warn("Wrong on_change format", on_change); } } } catch(e) { @@ -346,6 +345,9 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return $.Deferred().reject(); } }, + on_button_save: function() { + return this.do_save().then(this.do_set_readonly); + }, on_button_new: function() { var self = this; var def = $.Deferred(); @@ -404,9 +406,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# * @param {Function} success callback on save success * @param {Boolean} [prepend_on_create=false] if ``do_save`` creates a new record, should that record be inserted at the start of the dataset (by default, records are added at the end) */ - do_save_then_readonly: function(success, prepend_on_create) { - return this.do_save(success, prepend_on_create).then(this.do_set_readonly); - }, do_save: function(success, prepend_on_create) { var self = this; var action = function() { @@ -435,12 +434,18 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# self.on_invalid(); return $.Deferred().reject(); } else { - console.log("About to save", values); if (!self.datarecord.id) { + openerp.log("FormView(", self, ") : About to create", values); return self.dataset.create(values).pipe(function(r) { return self.on_created(r, undefined, prepend_on_create); }).then(success); + } else if (_.isEmpty(values)) { + openerp.log("FormView(", self, ") : Nothing to save"); + if (success) { + success(); + } } else { + openerp.log("FormView(", self, ") : About to save", values); return self.dataset.write(self.datarecord.id, values, {}).pipe(function(r) { return self.on_saved(r); }).then(success); @@ -503,7 +508,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# if (this.sidebar) { this.sidebar.attachments.do_update(); } - console.debug("The record has been created with id #" + this.datarecord.id); + openerp.log("The record has been created with id #" + this.datarecord.id); this.reload(); return $.when(_.extend(r, {created: true})).then(success); } @@ -697,7 +702,7 @@ openerp.web.form.compute_domain = function(expr, fields) { stack.push(!_(val).contains(field_value)); break; default: - console.log("Unsupported operator in modifiers :", op); + console.warn("Unsupported operator in modifiers :", op); } } return _.all(stack, _.identity); @@ -1097,7 +1102,7 @@ openerp.web.form.WidgetLabel = openerp.web.form.Widget.extend({ var self = this; this.$element.find("label").dblclick(function() { var widget = self['for'] || self; - console.log(widget.element_class , widget); + openerp.log(widget.element_class , widget); window.w = widget; }); } diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 62928401492..a6aaf02d5e6 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -441,6 +441,16 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner } } + var $res_logs = this.$element.find('.oe-view-manager-logs:first'); + $res_logs.delegate('a.oe-more-logs', 'click', function () { + $res_logs.removeClass('oe-folded'); + return false; + }).delegate('a.oe-remove-everything', 'click', function () { + $res_logs.removeClass('oe-has-more') + .find('ul').empty(); + return false; + }); + return manager_ready; }, on_mode_switch: function (view_type) { @@ -518,10 +528,14 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner */ do_display_log: function (log_records) { var self = this, - $logs = this.$element.find('ul.oe-view-manager-logs:first').empty(); - _(log_records).each(function (record) { + cutoff = 3, + $logs = this.$element.find('.oe-view-manager-logs:first') + .addClass('oe-folded'), + $logs_list = $logs.find('ul').empty(); + $logs.toggleClass('oe-has-more', log_records.length > cutoff); + _(log_records.reverse()).each(function (record) { $(_.sprintf('<li><a href="#">%s</a></li>', record.name)) - .appendTo($logs) + .appendTo($logs_list) .delegate('a', 'click', function (e) { self.do_action({ type: 'ir.actions.act_window', @@ -564,26 +578,32 @@ session.web.Sidebar = session.web.Widget.extend({ }, add_default_sections: function() { - this.add_section(_t('Customize'), 'customize'); - this.add_items('customize', [ - { - label: _t("Manage Views"), - callback: this.call_default_on_sidebar, - title: _t("Manage views of the current object") - }, { - label: _t("Edit Workflow"), - callback: this.call_default_on_sidebar, - title: _t("Manage views of the current object"), - classname: 'oe_hide oe_sidebar_edit_workflow' - }, { - label: _t("Customize Object"), - callback: this.call_default_on_sidebar, - title: _t("Manage views of the current object") - } - ]); + if (this.session.uid === 1) { + this.add_section(_t('Customize'), 'customize'); + this.add_items('customize', [ + { + label: _t("Manage Views"), + callback: this.call_default_on_sidebar, + title: _t("Manage views of the current object") + }, { + label: _t("Edit Workflow"), + callback: this.call_default_on_sidebar, + title: _t("Manage views of the current object"), + classname: 'oe_hide oe_sidebar_edit_workflow' + }, { + label: _t("Customize Object"), + callback: this.call_default_on_sidebar, + title: _t("Manage views of the current object") + }, { + label: _t("Translate"), + callback: this.call_default_on_sidebar, + title: _t("Technical translation") + } + ]); + } this.add_section(_t('Other Options'), 'other'); - this.add_items('other', [ + this.add_items('other', [ { label: _t("Import"), callback: this.call_default_on_sidebar @@ -591,10 +611,6 @@ session.web.Sidebar = session.web.Widget.extend({ label: _t("Export"), callback: this.call_default_on_sidebar }, { - label: _t("Translate"), - callback: this.call_default_on_sidebar, - classname: 'oe_sidebar_translate oe_hide' - }, { label: _t("View Log"), callback: this.call_default_on_sidebar, classname: 'oe_hide oe_sidebar_view_log' @@ -619,14 +635,14 @@ session.web.Sidebar = session.web.Widget.extend({ } }); }, - + add_section: function(name, code) { if(!code) code = _.underscored(name); var $section = this.sections[code]; if(!$section) { - section_id = _.uniqueId(this.element_id + '_section_' + code + '_'); - var $section = $(session.web.qweb.render("Sidebar.section", { + var section_id = _.uniqueId(this.element_id + '_section_' + code + '_'); + $section = $(session.web.qweb.render("Sidebar.section", { section_id: section_id, name: name, classname: 'oe_sidebar_' + code @@ -740,11 +756,6 @@ session.web.TranslateDialog = session.web.Dialog.extend({ this._super(); $.when(this.languages_loaded).then(function() { self.$element.html(session.web.qweb.render('TranslateDialog', { widget: self })); - self.$element.tabs(); - if (!(self.view.translatable_fields && self.view.translatable_fields.length)) { - self.hide_tabs('fields'); - self.select_tab('view'); - } self.$fields_form = self.$element.find('.oe_translation_form'); self.$fields_form.find('.oe_trad_field').change(function() { $(this).toggleClass('touched', ($(this).val() != $(this).attr('data-value'))); @@ -787,21 +798,6 @@ session.web.TranslateDialog = session.web.Dialog.extend({ }); $.when.apply(null, deffered).then(callback); }, - show_tabs: function() { - for (var i = 0; i < arguments.length; i++) { - this.$element.find('ul.oe_translate_tabs li a[href$="' + arguments[i] + '"]').parent().show(); - } - }, - hide_tabs: function() { - for (var i = 0; i < arguments.length; i++) { - this.$element.find('ul.oe_translate_tabs li a[href$="' + arguments[i] + '"]').parent().hide(); - } - }, - select_tab: function(name) { - this.show_tabs(name); - var index = this.$element.find('ul.oe_translate_tabs li a[href$="' + arguments[i] + '"]').parent().index() - 1; - this.$element.tabs('select', index); - }, open: function(field) { var self = this, sup = this._super; @@ -810,7 +806,9 @@ session.web.TranslateDialog = session.web.Dialog.extend({ self.do_load_fields_values(function() { sup.call(self); if (field) { - // TODO: focus and scroll to field + var $field_input = self.$element.find('tr[data-field="' + field.name + '"] td:nth-child(2) *:first-child'); + self.$element.scrollTo($field_input); + $field_input.focus(); } }); } else { @@ -963,7 +961,15 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{ export_view.start(); }, on_sidebar_translate: function() { - this.open_translate_dialog(); + return this.do_action({ + res_model : 'ir.translation', + domain : [['type', '!=', 'object'], '|', ['name', '=', this.dataset.model], ['name', 'ilike', this.dataset.model + ',']], + views: [[false, 'list'], [false, 'form']], + type : 'ir.actions.act_window', + auto_search : true, + view_type : "list", + view_mode : "list" + }); }, on_sidebar_view_log: function() { } diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 95bd6f663dd..f5448168f5e 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -457,7 +457,11 @@ </button> </t> <t t-jquery=".oe-view-manager-header" t-operation="after"> - <ul class="oe-view-manager-logs"></ul> + <div class="oe-view-manager-logs oe-folded"> + <ul></ul> + <a class="oe-more-logs" href="#">Moreā¦</a> + <a class="oe-remove-everything ui-icon ui-icon-closethick"/> + </div> </t> </t> @@ -482,38 +486,25 @@ </t> <t t-name="TranslateDialog"> - <ul class="oe_translate_tabs"> - <li><a t-attf-href="##{widget.element_id}_fields">Fields</a></li> - <li><a t-attf-href="##{widget.element_id}_view">View labels</a></li> - <li><a t-attf-href="##{widget.element_id}_sidebar">Sidebar Relates</a></li> - </ul> - <div t-attf-id="#{widget.element_id}_fields"> - <table t-if="widget.view.translatable_fields" class="oe_frame oe_forms oe_translation_form" border="0" cellpadding="0" cellspacing="0" width="100%"> - <tr> - <td class="oe_form_separator" width="1%" nowrap="nowrap"> - <div class="separator horizontal">Field</div> - </td> - <th t-foreach="widget.languages" align="left"> - <div class="separator horizontal"><t t-esc="name"/></div> - </th> - </tr> - <tr t-foreach="widget.view.translatable_fields" t-as="field"> - <td class="oe_form_frame_cell" width="1%" nowrap="nowrap"> - <label class="oe_label"><t t-esc="field.string"/>:</label> - </td> - <td t-foreach="widget.languages" t-as="lg" class="oe_form_frame_cell"> - <input t-if="field.type == 'char'" type="text" t-attf-name="#{lg.code}-#{field.name}" value="" data-value="" class="oe_trad_field" style="width: 100%"/> - <textarea t-if="field.type == 'text'" t-attf-name="#{lg.code}-#{field.name}" data-value="" class="oe_trad_field" style="width: 100%"></textarea> - </td> - </tr> - </table> - </div> - <div t-attf-id="#{widget.element_id}_view"> - Translate view - </div> - <div t-attf-id="#{widget.element_id}_sidebar"> - Translate sidebar - </div> + <table t-if="widget.view.translatable_fields" class="oe_frame oe_forms oe_translation_form" border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr> + <td class="oe_form_separator" width="1%" nowrap="nowrap"> + <div class="separator horizontal">Field</div> + </td> + <th t-foreach="widget.languages" align="left"> + <div class="separator horizontal"><t t-esc="name"/></div> + </th> + </tr> + <tr t-foreach="widget.view.translatable_fields" t-as="field" t-att-data-field="field.name"> + <td class="oe_form_frame_cell" width="1%" nowrap="nowrap"> + <label class="oe_label"><t t-esc="field.string"/>:</label> + </td> + <td t-foreach="widget.languages" t-as="lg" class="oe_form_frame_cell"> + <input t-if="field.type == 'char'" type="text" t-attf-name="#{lg.code}-#{field.name}" value="" data-value="" class="oe_trad_field" style="width: 100%"/> + <textarea t-if="field.type == 'text'" t-attf-name="#{lg.code}-#{field.name}" data-value="" class="oe_trad_field" style="width: 100%"></textarea> + </td> + </tr> + </table> </t> <t t-name="TreeView"> <select t-if="toolbar" style="width: 30%"> @@ -1015,7 +1006,7 @@ <t t-name="SearchView"> <form class="oe_forms"> <t t-call="SearchView.render_lines"/> - <div class="oe_search-view-buttons" style="text-align: right;"> + <div class="oe_search-view-buttons"> <input type="submit" value="Search"/> <input type="reset" value="Clear"/> <button class="oe_search-view-custom-filter-btn"><span>Advanced Filter</span></button> |
