summaryrefslogtreecommitdiff
path: root/addons/base/static/src
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2011-04-06 15:58:37 +0200
committerXavier Morel <xmo@openerp.com>2011-04-06 15:58:37 +0200
commit51bebb2cfe70d5a98aa13178c733aa18b3529fdd (patch)
tree84e0c04943dc49d2790588fb6902ae6b238a4810 /addons/base/static/src
parentf600eceb314ee4325d78c83d5ac9c870186fd5be (diff)
[REM] rip off jqgrid, start reimplementing manually
bzr revid: xmo@openerp.com-20110406135837-6rsuhiozd4af2qji
Diffstat (limited to 'addons/base/static/src')
-rw-r--r--addons/base/static/src/base.html2
-rw-r--r--addons/base/static/src/js/form.js2
-rw-r--r--addons/base/static/src/js/list.js64
-rw-r--r--addons/base/static/src/js/search.js10
-rw-r--r--addons/base/static/src/xml/base.xml43
5 files changed, 65 insertions, 56 deletions
diff --git a/addons/base/static/src/base.html b/addons/base/static/src/base.html
index 4c0cda0cdd3..00a147b1bd7 100644
--- a/addons/base/static/src/base.html
+++ b/addons/base/static/src/base.html
@@ -12,7 +12,6 @@
<script type="text/javascript" src="/base/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
<script type="text/javascript" src="/base/static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js"></script>
<script type="text/javascript" src="/base/static/lib/jquery.ui.notify/js/jquery.notify.js"></script>
- <script type="text/javascript" src="/base/static/lib/jquery.jqGrid/jquery.jqGrid.js"></script>
<script type="text/javascript" src="/base/static/lib/jquery.superfish/js/hoverIntent.js"></script>
<script type="text/javascript" src="/base/static/lib/jquery.superfish/js/superfish.js"></script>
<script type="text/javascript" src="/base/static/src/js/base.js"></script>
@@ -25,7 +24,6 @@
<link rel="stylesheet" type="text/css" media="screen" href="/base/static/lib/jquery.ui/css/smoothness/jquery-ui-1.8.9.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/base/static/lib/jquery.ui.notify/css/ui.notify.css" />
- <link rel="stylesheet" type="text/css" media="screen" href="/base/static/lib/jquery.jqGrid/css/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" href="/base/static/lib/jquery.superfish/css/superfish.css" media="screen">
<link rel="stylesheet" href="/base/static/src/css/base.css" type="text/css"/>
diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js
index 85cf0bc7f43..e8251a43e5e 100644
--- a/addons/base/static/src/js/form.js
+++ b/addons/base/static/src/js/form.js
@@ -644,7 +644,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
start: function() {
this._super.apply(this, arguments);
this.log("o2m.start");
- var action = { res_model: this.field.relation, views: [ [false,"list"], ], };
+ var action = { res_model: this.field.relation, views: [ [false,"list"] ], };
this.viewmanager = new openerp.base.ViewManagerAction(this.view.session, this.element_id, action);
},
set_value: function(value) {
diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js
index 273f71ed82d..e4ae1abb464 100644
--- a/addons/base/static/src/js/list.js
+++ b/addons/base/static/src/js/list.js
@@ -9,18 +9,9 @@ openerp.base.ListView = openerp.base.Controller.extend({
this.dataset = dataset;
this.model = dataset.model;
this.view_id = view_id;
- this.name = "";
- // TODO: default to action.limit
- // TODO: decide if limit is a property of DataSet and thus global to all views (calendar ?)
- this.limit = 80;
- this.cols = [];
-
- this.$table = null;
- this.colnames = [];
- this.colmodel = [];
-
- this.event_loading = false; // TODO in the future prevent abusive click by masking
+ this.columns = [];
+ this.rows = [];
},
start: function() {
//this.log('Starting ListView '+this.model+this.view_id)
@@ -30,51 +21,26 @@ openerp.base.ListView = openerp.base.Controller.extend({
this.fields_view = data.fields_view;
//this.log(this.fields_view);
this.name = "" + this.fields_view.arch.attrs.string;
- this.$element.html(QWeb.render("ListView", {"fields_view": this.fields_view}));
- this.$table = this.$element.find("table");
- this.cols = [];
- this.colnames = [];
- this.colmodel = [];
- // TODO uss a object for each col, fill it with view and fallback to dataset.model_field
- var tree = this.fields_view.arch.children;
- for(var i = 0; i < tree.length; i++) {
- var col = tree[i];
- if(col.tag == "field") {
- this.cols.push(col.attrs.name);
- this.colnames.push(col.attrs.name);
- this.colmodel.push({ name: col.attrs.name, index: col.attrs.name });
- }
- }
- this.dataset.fields = this.cols;
- var width = this.$element.width();
- this.$table.jqGrid({
- datatype: "local",
- height: "100%",
- rowNum: 100,
- //rowList: [10,20,30],
- colNames: this.colnames,
- colModel: this.colmodel,
- //pager: "#plist47",
- viewrecords: true,
- caption: this.name
- }).setGridWidth(width);
+ var fields = this.fields_view.fields;
+ this.columns = _(this.fields_view.arch.children).chain()
+ .map(function (field) {
+ var name = field.attrs.name;
+ return _.extend({id: name, tag: field.tag}, field.attrs, fields[name]);
+ }).value();
+
+ this.$element.html(QWeb.render("ListView", this));
- var self = this;
- $(window).bind('resize', function() {
- self.$element.children().hide();
- self.$table.setGridWidth(self.$element.width());
- self.$element.children().show();
- }).trigger('resize');
-
// sidebar stuff
if (this.view_manager.sidebar)
this.view_manager.sidebar.load_multi_actions();
},
do_fill_table: function(records) {
- this.$table
- .clearGridData()
- .addRowData('id', records);
+ this.rows = records;
+
+ var table = this.$element.find('table');
+ table.append(QWeb.render("ListView.rows", {
+ columns: this.columns, rows: this.rows}));
},
do_show: function () {
// TODO: re-trigger search
diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js
index 3d3bb016a82..63256f7da11 100644
--- a/addons/base/static/src/js/search.js
+++ b/addons/base/static/src/js/search.js
@@ -12,6 +12,8 @@ openerp.base.SearchView = openerp.base.Controller.extend({
this.inputs = [];
this.enabled_filters = [];
+
+ this.has_focus = false;
},
start: function() {
//this.log('Starting SearchView '+this.model+this.view_id)
@@ -47,6 +49,10 @@ openerp.base.SearchView = openerp.base.Controller.extend({
row = [];
rows.push(row);
} else if (item.tag === 'filter') {
+ if (!this.has_focus) {
+ item.attrs.default_focus = '1';
+ this.has_focus = true;
+ }
filters.push(
new openerp.base.search.Filter(
item, this));
@@ -59,6 +65,10 @@ openerp.base.SearchView = openerp.base.Controller.extend({
new openerp.base.search.Group(
item, this, fields));
} else if (item.tag === 'field') {
+ if (!this.has_focus) {
+ item.attrs.default_focus = '1';
+ this.has_focus = true;
+ }
row.push(
this.make_field(
item, fields[item['attrs'].name]));
diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml
index 47913f8cb55..2e5ac44d0fa 100644
--- a/addons/base/static/src/xml/base.xml
+++ b/addons/base/static/src/xml/base.xml
@@ -165,8 +165,39 @@
<button type="button" data-pager-action="next">&gt;&gt;</button>
<button type="button" data-pager-action="last">Last</button>
</div>
- <table id="todo_use_unique_id" class="jqGrid"></table>
+ <table>
+ <tr><t t-call="ListView.header"/></tr>
+ </table>
</t>
+<t t-name="ListView.header">
+ <t t-foreach="columns" t-as="column">
+ <th t-if="column.invisible !== '1'">
+ <t t-if="column.tag !== 'button'">
+ <t t-esc="column.string"/>
+ </t>
+ </th>
+ </t>
+</t>
+<t t-name="ListView.rows" t-foreach="rows" t-as="row">
+ <t t-call="ListView.row"/>
+</t>
+<tr t-name="ListView.row">
+ <t t-foreach="columns" t-as="column">
+ <!-- TODO: handle attrs -->
+ <td t-if="column.invisible !== '1'" t-att-title="column.help">
+ <t t-set="is_button" t-value="column.tag === 'button'"/>
+ <!-- TODO: get correct widget from form -->
+ <t t-if="!is_button and row[column.id]">
+ <t t-esc="row[column.id]"/>
+ </t>
+ <button type="button" t-att-title="column.help"
+ t-if="is_button">
+ <img t-att-src="'/base/static/src/img/icons/' + column.icon + '.png'"
+ t-att-alt="column.string"/>
+ </button>
+ </td>
+ </t>
+</tr>
<t t-name="FormView">
<h2 class="oe_view_title"><t t-esc="view.fields_view.arch.attrs.string"/></h2>
<div class="oe_form_header">
@@ -320,7 +351,8 @@
<button t-name="SearchView.filter" type="button"
t-att-id="element_id"
t-att-title="attrs.help"
- t-att-class="classes.join(' ')">
+ t-att-class="classes.join(' ')"
+ t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined">
<img t-if="attrs.icon" t-att-src="'/base/static/src/img/icons/' + attrs.icon + '.png'" width="16" height="16"/>
<br t-if="attrs.icon and attrs.string"/>
<t t-esc="attrs.string"/>
@@ -337,6 +369,7 @@
</label>
<div style="white-space: nowrap;">
<input type="text" t-att-name="attrs.name"
+ t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"
t-att-id="element_id"
t-att-value="defaults[attrs.name] || ''"/>
<t t-if="filters.length" t-raw="filters.render(defaults)"/>
@@ -350,7 +383,8 @@
</label>
<div style="white-space: nowrap;" t-att-id="element_id">
<input t-att-name="attrs.name" type="text" class="field_date"
- t-att-value="defaults[attrs.name] || ''"/>
+ t-att-value="defaults[attrs.name] || ''"
+ t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"/>
to
<input t-att-name="attrs.name" type="text" class="field_date"
t-att-value="defaults[attrs.name] || ''"/>
@@ -364,7 +398,8 @@
<span t-if="attrs.help">(?)</span>
</label>
<div style="white-space: nowrap;">
- <select t-att-name="attrs.name" t-att-id="element_id">
+ <select t-att-name="attrs.name" t-att-id="element_id"
+ t-att-autofocus="attrs.default_focus === '1' || undefined">
<option/>
<t t-foreach="attrs.selection" t-as="option">
<t t-set="selected" t-value="defaults[attrs.name] === option[0]"/>