summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorniv-openerp <nicolas.vanhoren@openerp.com>2011-09-14 17:51:27 +0200
committerniv-openerp <nicolas.vanhoren@openerp.com>2011-09-14 17:51:27 +0200
commit8d9285375d90c90390be5f58df5dddb7cdc5ea0d (patch)
treed61b66b1a71b1588823661179388cbf4042d26e6 /addons/web/static/src
parente95fec5e99b6fb7562902ae8a5783463ea4221ac (diff)
parentb17ae5506b25fa4acd91f61e73704acc1f0f30a4 (diff)
[merge]
bzr revid: nicolas.vanhoren@openerp.com-20110914155127-yc7nnjeo9nx4qdtu
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/css/base.css18
-rw-r--r--addons/web/static/src/js/form.js73
-rw-r--r--addons/web/static/src/js/list.js29
-rw-r--r--addons/web/static/src/xml/base.xml12
4 files changed, 99 insertions, 33 deletions
diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css
index 6012bec1f29..02ea33e4ec3 100644
--- a/addons/web/static/src/css/base.css
+++ b/addons/web/static/src/css/base.css
@@ -821,6 +821,7 @@ label.error {
}
.openerp td.oe_form_frame_cell {
padding: 2px;
+ position: relative;
}
.openerp td.oe_form_frame_cell.oe_form_group {
padding: 0;
@@ -887,12 +888,19 @@ label.error {
position: relative;
vertical-align: top;
}
-.openerp img.ui-datepicker-trigger {
- margin-left: -20px;
- vertical-align: middle;
+.openerp .oe_input_icon {
+ position: absolute;
cursor: pointer;
- position: relative;
- top: -1px;
+ right: 5px;
+ top: 5px;
+}
+.openerp .oe_input_icon_disabled {
+ position: absolute;
+ cursor: default;
+ opacity: 0.5;
+ filter:alpha(opacity=50);
+ right: 5px;
+ top: 5px;
}
.openerp img.oe_field_translate {
margin-left: -21px;
diff --git a/addons/web/static/src/js/form.js b/addons/web/static/src/js/form.js
index 5d50e825a6d..ad044f77161 100644
--- a/addons/web/static/src/js/form.js
+++ b/addons/web/static/src/js/form.js
@@ -1110,37 +1110,51 @@ openerp.web.form.FieldDatetime = openerp.web.form.Field.extend({
this.jqueryui_object = 'datetimepicker';
},
start: function() {
+ var self = this;
this._super.apply(this, arguments);
- this.$element.find('input').change(this.on_ui_change)[this.jqueryui_object]({
- dateFormat: 'yy-mm-dd',
- timeFormat: 'hh:mm:ss',
- showOn: 'button',
- buttonImage: '/web/static/src/img/ui/field_calendar.png',
- buttonImageOnly: true,
- constrainInput: false
+ this.$element.find('input').change(this.on_ui_change);
+ this.picker({
+ onSelect: this.on_picker_select,
+ changeMonth: true,
+ changeYear: true,
+ showWeek: true,
+ showButtonPanel: false
+ });
+ this.$element.find('img.oe_datepicker_trigger').click(function() {
+ if (!self.readonly) {
+ self.picker('setDate', self.value || new Date());
+ self.$element.find('.oe_datepicker').toggle();
+ }
+ });
+ this.$element.find('.ui-datepicker-inline').removeClass('ui-widget-content ui-corner-all');
+ this.$element.find('button.oe_datepicker_close').click(function() {
+ self.$element.find('.oe_datepicker').hide();
});
},
+ picker: function() {
+ return $.fn[this.jqueryui_object].apply(this.$element.find('.oe_datepicker_container'), arguments);
+ },
+ on_picker_select: function(text, instance) {
+ var date = this.picker('getDate');
+ this.$element.find('input').val(date ? this.format_client(date) : '').change();
+ },
set_value: function(value) {
- this._super.apply(this, arguments);
- if (!value) {
- this.$element.find('input').val('');
- } else {
- this.$element.find('input').unbind('change');
- // jQuery UI date picker wrongly call on_change event herebelow
- this.$element.find('input')[this.jqueryui_object]('setDate', this.parse(value));
- this.$element.find('input').change(this.on_ui_change);
- }
+ value = this.parse(value);
+ this._super(value);
+ this.$element.find('input').val(value ? this.format_client(value) : '');
+ },
+ get_value: function() {
+ return this.format(this.value);
},
set_value_from_ui: function() {
- this.value = this.$element.find('input')[this.jqueryui_object]('getDate') || false;
- if (this.value) {
- this.value = this.format(this.value);
- }
+ var value = this.$element.find('input').val() || false;
+ this.value = this.parse_client(value);
this._super();
},
update_dom: function() {
this._super.apply(this, arguments);
- this.$element.find('input').datepicker(this.readonly ? 'disable' : 'enable');
+ this.$element.find('input').attr('disabled', this.readonly);
+ this.$element.find('img.oe_datepicker_trigger').toggleClass('oe_input_icon_disabled', this.readonly);
},
validate: function() {
this.invalid = false;
@@ -1148,15 +1162,26 @@ openerp.web.form.FieldDatetime = openerp.web.form.Field.extend({
if (value === "") {
this.invalid = this.required;
} else {
- this.invalid = !this.$element.find('input')[this.jqueryui_object]('getDate');
+ try {
+ this.parse_client(value);
+ this.invalid = false;
+ } catch(e) {
+ this.invalid = true;
+ }
}
},
focus: function() {
this.$element.find('input').focus();
},
parse: openerp.web.auto_str_to_date,
+ parse_client: function(v) {
+ return openerp.web.parse_value(v, this.field);
+ },
format: function(val) {
return openerp.web.auto_date_to_str(val, this.field.type);
+ },
+ format_client: function(v) {
+ return openerp.web.format_value(v, this.field);
}
});
@@ -1164,6 +1189,10 @@ openerp.web.form.FieldDate = openerp.web.form.FieldDatetime.extend({
init: function(view, node) {
this._super(view, node);
this.jqueryui_object = 'datepicker';
+ },
+ on_picker_select: function(text, instance) {
+ this._super(text, instance);
+ this.$element.find('.oe_datepicker').hide();
}
});
diff --git a/addons/web/static/src/js/list.js b/addons/web/static/src/js/list.js
index 7f6060b58be..d96e6c805bf 100644
--- a/addons/web/static/src/js/list.js
+++ b/addons/web/static/src/js/list.js
@@ -776,6 +776,31 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
this.$current.empty().append(
QWeb.render('ListView.rows', _.extend({
render_cell: openerp.web.format_cell}, this)));
+ this.pad_table_to(5);
+ },
+ pad_table_to: function (count) {
+ if (this.records.length >= count ||
+ _(this.columns).any(function(column) { return column.meta; })) {
+ return;
+ }
+ var cells = [];
+ if (this.options.selectable) {
+ cells.push('<td title="selection"></td>');
+ }
+ _(this.columns).each(function(column) {
+ if (column.invisible !== '1') {
+ cells.push('<td title="' + column.string + '">&nbsp;</td>');
+ }
+ });
+ if (this.options.deletable) {
+ cells.push('<td><button type="button" style="visibility: hidden"> </button></td>');
+ }
+ cells.unshift('<tr>');
+ cells.push('</tr>');
+
+ var row = cells.join('');
+ this.$current.append(new Array(count - this.records.length + 1).join(row));
+ this.refresh_zebra(this.records.length);
},
/**
* Gets the ids of all currently selected records, if any
@@ -1138,12 +1163,14 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
}
// ondrop, move relevant record & fix sequences
list.$current.sortable({
+ axis: 'y',
+ items: '> tr[data-id]',
stop: function (event, ui) {
var to_move = list.records.get(ui.item.data('id')),
target_id = ui.item.prev().data('id');
list.records.remove(to_move);
- var to = target_id ? list.records.indexOf(list.records.get(target_id)) : 0;
+ var to = target_id ? list.records.indexOf(list.records.get(target_id)) + 1 : 0;
list.records.add(to_move, { at: to });
// resequencing time!
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 043967c68fd..0e61c7c6d35 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -810,11 +810,13 @@
<img class="oe_field_translate" t-if="widget.field.translate" src="/web/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
</t>
<t t-name="FieldDate">
- <input type="text" size="1" style="width: 100%"
- t-att-name="widget.name"
- t-att-id="widget.element_id + '_field'"
- t-att-class="'field_' + widget.type"
- />
+ <t t-call="FieldChar"/>
+ <img class="oe_input_icon oe_datepicker_trigger" src="/web/static/src/img/ui/field_calendar.png"
+ title="Select date" width="16" height="16" border="0"/>
+ <div class="oe_datepicker ui-widget-content ui-corner-all" style="display: none; position: absolute; z-index: 1;">
+ <div class="oe_datepicker_container"/>
+ <button type="button" class="oe_datepicker_close ui-state-default ui-priority-primary ui-corner-all" style="float: right;">Done</button>
+ </div>
</t>
<t t-name="FieldSelection">
<select