diff options
| author | niv-openerp <nicolas.vanhoren@openerp.com> | 2011-05-06 13:56:07 +0200 |
|---|---|---|
| committer | niv-openerp <nicolas.vanhoren@openerp.com> | 2011-05-06 13:56:07 +0200 |
| commit | c828a5e8727768d44c9ecf90e76f8f1e7108da26 (patch) | |
| tree | 7cdd02be5eac020f615b4e110183e1af80b9e548 /addons/base/static/src | |
| parent | ecbe0ad56b210db453886ba82ad5e79e79f6fc91 (diff) | |
| parent | 12de5a891b7a73f142c321ea2d013457470d1370 (diff) | |
[MERGE]
bzr revid: nicolas.vanhoren@openerp.com-20110506115607-c23lh5skwx5qtt82
Diffstat (limited to 'addons/base/static/src')
| -rw-r--r-- | addons/base/static/src/css/base.css | 67 | ||||
| -rw-r--r-- | addons/base/static/src/js/data.js | 33 | ||||
| -rw-r--r-- | addons/base/static/src/js/list.js | 11 | ||||
| -rw-r--r-- | addons/base/static/src/xml/base.xml | 4 |
4 files changed, 76 insertions, 39 deletions
diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index b700aea2702..64e2e78fb8b 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -1,8 +1,8 @@ -/* TODO: seperate openerp webclient page css from openerp views css */ +/* TODO: separate openerp web client page css from openerp views css */ body { padding: 0; margin: 0; - font-family: helvetica, sans, arial; + font-family: helvetica, arial, sans-serif; font-size: 80%; } @@ -85,7 +85,7 @@ body.openerp { /* Menu */ .openerp .sf-menu { - margin-bottom: 0px; + margin-bottom: 0; } /* .sf-menu a { @@ -169,10 +169,9 @@ body.openerp { border: none; } .openerp .secondary_menu h4 { - padding: 0 0 2px; + padding: 0 0 2px 10px; border: none; background: none; - padding-left: 10px; } .openerp .secondary_menu h3 span, .openerp .secondary_menu h4 span { left: 0 !important; @@ -224,10 +223,9 @@ body.openerp { margin-right: 10px; line-height: 63px; text-align: center; - border-bottom: 1px solid black; - border-right: 1px solid black; - border-top: 1px solid white; - border-left: 1px solid white; + 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)); @@ -301,7 +299,6 @@ body.openerp { right: 0; top: 5px; padding: 1px 4px 2px; - background: #333; background: rgba(0, 0, 0, 0.75); border-radius: 7px; -moz-border-radius: 7px; @@ -316,9 +313,9 @@ body.openerp { overflow: hidden; padding: 5px 0; position: relative; - -moz-box-shadow: inset 0px 3px 5px rgba(0, 0, 0, 0.4); - -webkit-box-shadow: inset 0px 3px 5px rgba(0, 0, 0, 0.4); - box-shadow: inset 0px 3px 5px rgba(0, 0, 0, 0.4); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.4); + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.4); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.4); } .openerp div.oe_footer p.oe_footer_powered { left: 50%; @@ -337,7 +334,7 @@ body.openerp { /* Main Application */ .openerp .oe-application { - padding: 0px; + padding: 0; height: 100%; } @@ -380,7 +377,7 @@ body.openerp { background: #AAAAAA; } .openerp .filter_icon { - padding: 1px 2px 0px 2px; + padding: 1px 2px 0 2px; margin-left: 0; margin-right: 0; } @@ -485,6 +482,11 @@ body.openerp { .openerp .oe-listview td, .openerp .oe-listview th { vertical-align: middle; + text-align: left; +} +.openerp .oe-listview th.oe-sortable, +.openerp .oe-listview th.oe-sortable .ui-icon { + cursor: pointer; } .openerp .oe-listview .oe-field-cell { @@ -539,17 +541,17 @@ body.openerp { /* Notebook */ .openerp .oe_form_notebook { - padding: 0px; + padding: 0; background: none; - border-width: 0px; + border-width: 0; } .openerp .oe_form_notebook ul.ui-tabs-nav { - padding-left: 0px; + padding-left: 0; background: transparent; - border-width: 0px 0px 1px 0px; - border-radius: 0px; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; + border-width: 0 0 1px 0; + border-radius: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; line-height: 0.5em; } .openerp .oe_form_notebook ul.ui-tabs-nav li { @@ -557,7 +559,7 @@ body.openerp { } .openerp .oe_form_notebook .ui-tabs-panel { background: #f9f9f9; - border-width: 0px 1px 1px 1px; + border-width: 0 1px 1px 1px; } .openerp .oe_form_notebook .ui-tabs-selected { background: #f9f9f9; @@ -566,7 +568,7 @@ body.openerp { /* Form */ .openerp table.oe_frame td { color: #4c4c4c; - font-weight: 80%; + font-weight: bold; } .openerp .required.error { border: 1px solid #900; @@ -695,9 +697,7 @@ body.openerp { padding:0; margin:0; width:180px; - border-left-color: #D2CFCF; - border-left-style: solid; - border-left-width: 1px; + border-left: 1px solid #D2CFCF; height:100%; font-family: Ubuntu, Helvetica, sans-serif; font-size: 0.9em; @@ -725,17 +725,14 @@ body.openerp { font-family: Ubuntu, Helvetica, sans-serif; font-size: 1.15em; color: #8E8E8E; - text-shadow: white 0px 1px 0px; + text-shadow: white 0 1px 0; padding-left: 10px; padding-right: 21px; height: 21px; background: url(../img/sideheader-a-bg.png) repeat-x; - border-color: #D2CFCF; - border-style: solid; - border-top-width: 1px; - border-bottom-width: 1px; - border-left-width: 0; + border: 1px solid #D2CFCF; border-right-width: 0; + border-left-width: 0; } .openerp .view-manager-main-sidebar ul { @@ -752,9 +749,7 @@ body.openerp { .openerp .toggle-sidebar { cursor: pointer; - border-color: #D2CFCF; - border-style: solid; - border-width: 1px; + border: 1px solid #D2CFCF; display: block; background: url(../img/toggle-a-bg.png); width: 21px; diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 107ba65e468..fbd2c6951b1 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -154,7 +154,7 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ init: function(session, model) { this._super(session, model); this.domain = []; - this.sort = []; + this._sort = []; this.offset = 0; // subset records[offset:offset+limit] // is it necessary ? @@ -176,7 +176,7 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ fields: fields, domain: this.domain, context: this.context, - sort: this.sort, + sort: this.sort(), offset: offset, limit: limit }, function (records) { @@ -187,6 +187,35 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ } callback(records); }); + }, + /** + * Reads or changes sort criteria on the dataset. + * + * If not provided with any argument, serializes the sort criteria to + * an SQL-like form usable by OpenERP's ORM. + * + * If given a field, will set that field as first sorting criteria or, + * if the field is already the first sorting criteria, will reverse it. + * + * @param {String} [field] field to sort on, reverses it (toggle from ASC to DESC) if already the main sort criteria + * @param {Boolean} [force_reverse=false] forces inserting the field as DESC + * @returns {String|undefined} + */ + sort: function (field, force_reverse) { + if (!field) { + return _.map(this._sort, function (criteria) { + if (criteria[0] === '-') { + return criteria.slice(1) + ' DESC'; + } + return criteria + ' ASC'; + }).join(', '); + } + + var reverse = force_reverse || (this._sort[0] === field); + this._sort = _.without(this._sort, field, '-' + field); + + this._sort.unshift((reverse ? '-' : '') + field); + return undefined; } }); diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 62abdc6f106..e7ec7eea553 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -123,6 +123,8 @@ openerp.base.ListView = openerp.base.Controller.extend( this.visible_columns = _.filter(this.columns, function (column) { return column.invisible !== '1'; }); + + if (!this.fields_view.sorted) { this.fields_view.sorted = {}; } this.$element.html(QWeb.render("ListView", this)); // Head hook @@ -130,6 +132,14 @@ openerp.base.ListView = openerp.base.Controller.extend( this.$element.find('#oe-list-delete') .hide() .click(this.do_delete_selected); + this.$element.find('thead').delegate('th[data-id]', 'click', function (e) { + e.stopPropagation(); + + self.dataset.sort($(this).data('id')); + + // TODO: should only reload content (and set the right column to a sorted display state) + self.do_reload(); + }); var $table = this.$element.find('table'); // Cell events @@ -319,6 +329,7 @@ openerp.base.ListView = openerp.base.Controller.extend( 'id': this.view_id, 'context': this.dataset.context, 'domain': this.dataset.domain, + 'sort': this.dataset.sort && this.dataset.sort(), 'ids': this.dataset.ids }, this.do_fill_table); }, diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index f697d5b1fa7..7df230f3d3e 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -181,9 +181,11 @@ <tr t-if="options.header"> <th t-if="options.selectable"/> <t t-foreach="columns" t-as="column"> - <th t-if="column.invisible !== '1'"> + <th t-if="column.invisible !== '1'" t-att-data-id="column.id" + t-att-class="((options.sortable and column.tag !== 'button') ? 'oe-sortable' : null)"> <t t-if="column.tag !== 'button'"> <t t-esc="column.string"/> + <span t-att-class="(fields_view.sorted.field === column.id) ? ('ui-icon' + (fields_view.sorted.reversed ? ' ui-icon-triangle-1-n' : ' ui-icon-triangle-1-s')) : ''"/> </t> </th> </t> |
