1 openerp.web.page = function (openerp) {
2 var _t = openerp.web._t,
5 openerp.web.views.add('page', 'openerp.web.PageView');
6 openerp.web.PageView = openerp.web.FormView.extend({
7 form_template: "PageView",
8 display_name: _lt('Page'),
10 this._super.apply(this, arguments);
11 this.registry = openerp.web.page.readonly;
14 if (this.dataset.index == null) {
16 return $.Deferred().reject().promise();
20 on_loaded: function(data) {
22 this.$form_header.find('button.oe_form_button_edit').click(this.on_button_edit);
23 this.$form_header.find('button.oe_form_button_create').click(this.on_button_create);
24 this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate);
25 this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete);
28 if (this.dataset.index === null) {
29 this.dataset.index = this.previous_index || this.dataset.ids.length - 1;
31 this._super.apply(this, arguments);
33 on_button_edit: function() {
34 return this.do_switch_view('form');
36 on_button_create: function() {
37 this.previous_index = this.dataset.index;
38 this.dataset.index = null;
39 return this.do_switch_view('form');
41 on_button_duplicate: function() {
43 var def = $.Deferred();
44 $.when(this.has_been_loaded).then(function() {
45 self.dataset.call('copy', [self.datarecord.id, {}, self.dataset.context]).then(function(new_id) {
46 return self.on_created({ result : new_id });
48 return self.do_switch_view('form');
55 on_button_delete: function() {
57 var def = $.Deferred();
58 $.when(this.has_been_loaded).then(function() {
59 if (self.datarecord.id && confirm(_t("Do you really want to delete this record?"))) {
60 self.dataset.unlink([self.datarecord.id]).then(function() {
61 self.on_pager_action('next');
65 $.async_when().then(function () {
75 openerp.web.page = {};
77 openerp.web.page.WidgetFrameReadonly = openerp.web.form.WidgetFrame.extend({
78 template: 'WidgetFrame.readonly'
80 openerp.web.page.FieldReadonly = openerp.web.form.Field.extend({
83 openerp.web.page.FieldCharReadonly = openerp.web.page.FieldReadonly.extend({
84 template: 'FieldChar.readonly',
85 init: function(view, node) {
86 this._super(view, node);
87 this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1';
89 set_value: function (value) {
90 this._super.apply(this, arguments);
91 var show_value = openerp.web.format_value(value, this, '');
93 show_value = new Array(show_value.length + 1).join('*');
95 this.$element.find('div').text(show_value);
99 openerp.web.page.FieldFloatReadonly = openerp.web.page.FieldCharReadonly.extend({
100 init: function (view, node) {
101 this._super(view, node);
102 if (node.attrs.digits) {
103 this.digits = py.eval(node.attrs.digits).toJSON();
105 this.digits = view.fields_view.fields[node.attrs.name].digits;
109 openerp.web.page.FieldURIReadonly = openerp.web.page.FieldCharReadonly.extend({
110 template: 'FieldURI.readonly',
112 format_value: function (value) {
115 set_value: function (value) {
117 this.$element.find('a').text('').attr('href', '#');
120 this.$element.find('a')
121 .attr('href', this.scheme + ':' + value)
122 .text(this.format_value(value));
125 openerp.web.page.FieldEmailReadonly = openerp.web.page.FieldURIReadonly.extend({
128 openerp.web.page.FieldUrlReadonly = openerp.web.page.FieldURIReadonly.extend({
129 set_value: function (value) {
131 this.$element.find('a').text('').attr('href', '#');
134 var s = /(\w+):(.+)/.exec(value);
136 value = "http://" + value;
138 this.$element.find('a').attr('href', value).text(value);
141 openerp.web.page.FieldBooleanReadonly = openerp.web.form.FieldBoolean.extend({
142 update_dom: function() {
143 this._super.apply(this, arguments);
144 this.$element.find('input').prop('disabled', true);
147 openerp.web.page.FieldSelectionReadonly = openerp.web.page.FieldReadonly.extend({
148 template: 'FieldChar.readonly',
149 init: function(view, node) {
150 // lifted straight from r/w version
152 this._super(view, node);
153 this.values = _.clone(this.field.selection);
154 _.each(this.values, function(v, i) {
155 if (v[0] === false && v[1] === '') {
156 self.values.splice(i, 1);
159 this.values.unshift([false, '']);
161 set_value: function (value) {
162 value = value === null ? false : value;
163 value = value instanceof Array ? value[0] : value;
164 var option = _(this.values)
165 .detect(function (record) { return record[0] === value; });
167 this.$element.find('div').text(option ? option[1] : this.values[0][1]);
170 openerp.web.page.FieldMany2OneReadonly = openerp.web.page.FieldURIReadonly.extend({
171 set_value: function (value) {
172 value = value || null;
173 this.invalid = false;
177 self.on_value_changed();
178 var real_set_value = function(rval) {
180 self.$element.find('a')
182 .text(rval ? rval[1] : '')
185 type: 'ir.actions.act_window',
186 res_model: self.field.relation,
187 res_id: self.value[0],
188 context: self.build_context(),
189 views: [[false, 'page'], [false, 'form']],
195 if (value && !(value instanceof Array)) {
196 new openerp.web.DataSetStatic(
197 this, this.field.relation, self.build_context())
198 .name_get([value], function(data) {
199 real_set_value(data[0]);
202 $.async_when().then(function() {real_set_value(value);});
205 get_value: function() {
208 } else if (this.value instanceof Array) {
209 return this.value[0];
215 openerp.web.page.FieldReferenceReadonly = openerp.web.page.FieldMany2OneReadonly.extend({
216 set_value: function (value) {
218 return this._super(null);
220 var reference = value.split(',');
221 this.field.relation = reference[0];
222 var id = parseInt(reference[1], 10);
223 return this._super(id);
225 get_value: function () {
230 if (typeof this.value === 'number') {
231 // name_get has not run yet
236 return _.str.sprintf('%s,%d', this.field.relation, id);
240 openerp.web.page.FieldMany2ManyReadonly = openerp.web.form.FieldMany2Many.extend({
243 openerp.web.page.FieldOne2ManyReadonly = openerp.web.form.FieldOne2Many.extend({
246 openerp.web.page.FieldBinaryImageReaonly = openerp.web.form.FieldBinaryImage.extend({
247 update_dom: function() {
248 this._super.apply(this, arguments);
249 this.$element.find('.oe-binary').hide();
252 openerp.web.page.FieldBinaryFileReadonly = openerp.web.form.FieldBinary.extend({
253 template: 'FieldURI.readonly',
255 this._super.apply(this, arguments);
257 this.$element.find('a').click(function() {
264 set_value: function(value) {
265 this._super.apply(this, arguments);
266 this.$element.find('a').show(!!value);
268 var show_value = _t("Download") + " " + (this.view.datarecord[this.node.attrs.filename] || '');
269 this.$element.find('a').text(show_value);
273 openerp.web.page.readonly = openerp.web.form.widgets.extend({
274 'frame': 'openerp.web.page.WidgetFrameReadonly',
275 'char': 'openerp.web.page.FieldCharReadonly',
276 'id': 'openerp.web.page.FieldCharReadonly',
277 'email': 'openerp.web.page.FieldEmailReadonly',
278 'url': 'openerp.web.page.FieldUrlReadonly',
279 'text': 'openerp.web.page.FieldCharReadonly',
280 'date': 'openerp.web.page.FieldCharReadonly',
281 'datetime': 'openerp.web.page.FieldCharReadonly',
282 'selection' : 'openerp.web.page.FieldSelectionReadonly',
283 'many2one': 'openerp.web.page.FieldMany2OneReadonly',
284 'many2many' : 'openerp.web.page.FieldMany2ManyReadonly',
285 'one2many' : 'openerp.web.page.FieldOne2ManyReadonly',
286 'one2many_list' : 'openerp.web.page.FieldOne2ManyReadonly',
287 'reference': 'openerp.web.page.FieldReferenceReadonly',
288 'boolean': 'openerp.web.page.FieldBooleanReadonly',
289 'float': 'openerp.web.page.FieldFloatReadonly',
290 'integer': 'openerp.web.page.FieldCharReadonly',
291 'float_time': 'openerp.web.page.FieldCharReadonly',
292 'binary': 'openerp.web.page.FieldBinaryFileReadonly',
293 'image': 'openerp.web.page.FieldBinaryImageReaonly'