summaryrefslogtreecommitdiff
path: root/addons/base/static/src
diff options
context:
space:
mode:
authorniv-openerp <nicolas.vanhoren@openerp.com>2011-05-06 13:56:07 +0200
committerniv-openerp <nicolas.vanhoren@openerp.com>2011-05-06 13:56:07 +0200
commitc828a5e8727768d44c9ecf90e76f8f1e7108da26 (patch)
tree7cdd02be5eac020f615b4e110183e1af80b9e548 /addons/base/static/src
parentecbe0ad56b210db453886ba82ad5e79e79f6fc91 (diff)
parent12de5a891b7a73f142c321ea2d013457470d1370 (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.css67
-rw-r--r--addons/base/static/src/js/data.js33
-rw-r--r--addons/base/static/src/js/list.js11
-rw-r--r--addons/base/static/src/xml/base.xml4
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>