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);
27 on_button_edit: function() {
28 return this.do_switch_view('form');
30 on_button_create: function() {
31 this.dataset.index = null;
32 return this.do_switch_view('form');
34 on_button_duplicate: function() {
36 var def = $.Deferred();
37 $.when(this.has_been_loaded).then(function() {
38 self.dataset.call('copy', [self.datarecord.id, {}, self.dataset.context]).then(function(new_id) {
39 return self.on_created({ result : new_id });
41 return self.do_switch_view('form');
48 on_button_delete: function() {
50 var def = $.Deferred();
51 $.when(this.has_been_loaded).then(function() {
52 if (self.datarecord.id && confirm(_t("Do you really want to delete this record?"))) {
53 self.dataset.unlink([self.datarecord.id]).then(function() {
54 self.on_pager_action('next');
58 setTimeout(function () {
68 openerp.web.page = {};
70 openerp.web.page.WidgetFrameReadonly = openerp.web.form.WidgetFrame.extend({
71 template: 'WidgetFrame.readonly'
73 openerp.web.page.FieldReadonly = openerp.web.form.Field.extend({
76 openerp.web.page.FieldCharReadonly = openerp.web.page.FieldReadonly.extend({
77 template: 'FieldChar.readonly',
78 init: function(view, node) {
79 this._super(view, node);
80 this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1';
82 set_value: function (value) {
83 this._super.apply(this, arguments);
84 var show_value = openerp.web.format_value(value, this, '');
86 show_value = new Array(show_value.length + 1).join('*');
88 this.$element.find('div').text(show_value);
92 openerp.web.page.FieldURIReadonly = openerp.web.page.FieldCharReadonly.extend({
93 template: 'FieldURI.readonly',
95 set_value: function (value) {
96 var displayed = this._super.apply(this, arguments);
97 this.$element.find('a')
98 .attr('href', this.scheme + ':' + displayed)
102 openerp.web.page.FieldEmailReadonly = openerp.web.page.FieldURIReadonly.extend({
105 openerp.web.page.FieldUrlReadonly = openerp.web.page.FieldURIReadonly.extend({
106 set_value: function (value) {
107 var s = /(\w+):(.+)/.exec(value);
108 if (!s || !(s[1] === 'http' || s[1] === 'https')) { return; }
113 openerp.web.page.FieldBooleanReadonly = openerp.web.form.FieldBoolean.extend({
114 update_dom: function() {
115 this._super.apply(this, arguments);
116 this.$element.find('input').prop('disabled', true);
119 openerp.web.page.FieldSelectionReadonly = openerp.web.page.FieldReadonly.extend({
120 template: 'FieldChar.readonly',
121 init: function(view, node) {
122 // lifted straight from r/w version
124 this._super(view, node);
125 this.values = _.clone(this.field.selection);
126 _.each(this.values, function(v, i) {
127 if (v[0] === false && v[1] === '') {
128 self.values.splice(i, 1);
131 this.values.unshift([false, '']);
133 set_value: function (value) {
134 value = value === null ? false : value;
135 value = value instanceof Array ? value[0] : value;
136 var option = _(this.values)
137 .detect(function (record) { return record[0] === value; });
139 this.$element.find('div').text(option ? option[1] : this.values[0][1]);
142 openerp.web.page.FieldMany2OneReadonly = openerp.web.page.FieldURIReadonly.extend({
143 set_value: function (value) {
144 value = value || null;
145 this.invalid = false;
149 self.on_value_changed();
150 var real_set_value = function(rval) {
152 self.$element.find('a')
154 .text(rval ? rval[1] : '')
157 type: 'ir.actions.act_window',
158 res_model: self.field.relation,
159 res_id: self.value[0],
160 context: self.build_context(),
161 views: [[false, 'page'], [false, 'form']],
167 if (value && !(value instanceof Array)) {
168 new openerp.web.DataSetStatic(
169 this, this.field.relation, self.build_context())
170 .name_get([value], function(data) {
171 real_set_value(data[0]);
174 setTimeout(function() {real_set_value(value);}, 0);
177 get_value: function() {
180 } else if (this.value instanceof Array) {
181 return this.value[0];
187 openerp.web.page.FieldReferenceReadonly = openerp.web.page.FieldMany2OneReadonly.extend({
188 set_value: function (value) {
190 return this._super(null);
192 var reference = value.split(',');
193 this.field.relation = reference[0];
194 var id = parseInt(reference[1], 10);
195 return this._super(id);
197 get_value: function () {
201 return _.str.sprintf('%s,%d', this.field.relation, this.value[0]);
205 openerp.web.page.FieldMany2ManyReadonly = openerp.web.form.FieldMany2Many.extend({
208 openerp.web.page.FieldOne2ManyReadonly = openerp.web.form.FieldOne2Many.extend({
211 openerp.web.page.FieldBinaryFileReadonly = openerp.web.form.FieldBinary.extend({
212 template: 'FieldURI.readonly',
214 this._super.apply(this, arguments);
216 this.$element.find('a').click(function() {
223 set_value: function(value) {
224 this._super.apply(this, arguments);
225 this.$element.find('a').show(!!value);
227 var show_value = _t("Download") + " " + (this.view.datarecord[this.node.attrs.filename] || '');
228 this.$element.find('a').text(show_value);
232 openerp.web.page.readonly = openerp.web.form.widgets.clone({
233 'frame': 'openerp.web.page.WidgetFrameReadonly',
234 'char': 'openerp.web.page.FieldCharReadonly',
235 'email': 'openerp.web.page.FieldEmailReadonly',
236 'url': 'openerp.web.page.FieldUrlReadonly',
237 'text': 'openerp.web.page.FieldCharReadonly',
238 'text_wiki' : 'openerp.web.page.FieldCharReadonly',
239 'date': 'openerp.web.page.FieldCharReadonly',
240 'datetime': 'openerp.web.page.FieldCharReadonly',
241 'selection' : 'openerp.web.page.FieldSelectionReadonly',
242 'many2one': 'openerp.web.page.FieldMany2OneReadonly',
243 'many2many' : 'openerp.web.page.FieldMany2ManyReadonly',
244 'one2many' : 'openerp.web.page.FieldOne2ManyReadonly',
245 'one2many_list' : 'openerp.web.page.FieldOne2ManyReadonly',
246 'reference': 'openerp.web.page.FieldReferenceReadonly',
247 'boolean': 'openerp.web.page.FieldBooleanReadonly',
248 'float': 'openerp.web.page.FieldCharReadonly',
249 'integer': 'openerp.web.page.FieldCharReadonly',
250 'float_time': 'openerp.web.page.FieldCharReadonly',
251 'binary': 'openerp.web.page.FieldBinaryFileReadonly',