[IMP] Improved translate dialog
bzr revid: fme@openerp.com-20110829140839-vr0mvylotmm9w5hg
This commit is contained in:
parent
1ada45a439
commit
a24d5ee08d
|
@ -895,6 +895,9 @@ label.error {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 4px;
|
top: 4px;
|
||||||
}
|
}
|
||||||
|
.openerp .oe_trad_field.touched {
|
||||||
|
border: 1px solid green !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* http://www.quirksmode.org/dom/inputfile.html
|
/* http://www.quirksmode.org/dom/inputfile.html
|
||||||
* http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image
|
* http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image
|
||||||
|
|
|
@ -355,12 +355,13 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
|
||||||
* @param {Function} error_callback function called in case of write error
|
* @param {Function} error_callback function called in case of write error
|
||||||
* @returns {$.Deferred}
|
* @returns {$.Deferred}
|
||||||
*/
|
*/
|
||||||
write: function (id, data, callback, error_callback) {
|
write: function (id, data, options, callback, error_callback) {
|
||||||
|
var options = options || {};
|
||||||
return this.rpc('/base/dataset/save', {
|
return this.rpc('/base/dataset/save', {
|
||||||
model: this.model,
|
model: this.model,
|
||||||
id: id,
|
id: id,
|
||||||
data: data,
|
data: data,
|
||||||
context: this.get_context()
|
context: this.get_context(options.context)
|
||||||
}, callback, error_callback);
|
}, callback, error_callback);
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -157,6 +157,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
|
||||||
this.do_update_pager(record.id == null);
|
this.do_update_pager(record.id == null);
|
||||||
if (this.sidebar) {
|
if (this.sidebar) {
|
||||||
this.sidebar.attachments.do_update();
|
this.sidebar.attachments.do_update();
|
||||||
|
this.sidebar.$element.find('.oe_sidebar_translate').toggleClass('oe_hide', !record.id);
|
||||||
}
|
}
|
||||||
if (this.default_focus_field && !this.embedded_view) {
|
if (this.default_focus_field && !this.embedded_view) {
|
||||||
this.default_focus_field.focus();
|
this.default_focus_field.focus();
|
||||||
|
@ -342,7 +343,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
|
||||||
self.on_created(r, success, prepend_on_create);
|
self.on_created(r, success, prepend_on_create);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return this.dataset.write(this.datarecord.id, values, function(r) {
|
return this.dataset.write(this.datarecord.id, values, {}, function(r) {
|
||||||
self.on_saved(r, success);
|
self.on_saved(r, success);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -879,6 +880,9 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({
|
||||||
},
|
},
|
||||||
update_dom: function() {
|
update_dom: function() {
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
|
if (this.field.translate) {
|
||||||
|
this.$element.find('.oe_field_translate').toggle(!!this.view.datarecord.id);
|
||||||
|
}
|
||||||
if (!this.disable_utility_classes) {
|
if (!this.disable_utility_classes) {
|
||||||
this.$element.toggleClass('disabled', this.readonly);
|
this.$element.toggleClass('disabled', this.readonly);
|
||||||
this.$element.toggleClass('required', this.required);
|
this.$element.toggleClass('required', this.required);
|
||||||
|
@ -1872,7 +1876,7 @@ openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
pop.on_write.add(function(id, data) {
|
pop.on_write.add(function(id, data) {
|
||||||
self.o2m.dataset.write(id, data, function(r) {
|
self.o2m.dataset.write(id, data, {}, function(r) {
|
||||||
self.o2m.reload_current_view();
|
self.o2m.reload_current_view();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -2171,7 +2175,7 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({
|
||||||
var self = this;
|
var self = this;
|
||||||
var wdataset = new openerp.base.DataSetSearch(this, this.model, this.context, this.domain);
|
var wdataset = new openerp.base.DataSetSearch(this, this.model, this.context, this.domain);
|
||||||
wdataset.parent_view = this.options.parent_view;
|
wdataset.parent_view = this.options.parent_view;
|
||||||
wdataset.write(id, data, function(r) {
|
wdataset.write(id, data, {}, function(r) {
|
||||||
self.on_write_completed();
|
self.on_write_completed();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -472,6 +472,9 @@ openerp.base.Sidebar = openerp.base.Widget.extend({
|
||||||
openerp.base.TranslateDialog = openerp.base.Dialog.extend({
|
openerp.base.TranslateDialog = openerp.base.Dialog.extend({
|
||||||
dialog_title: _t("Translations"),
|
dialog_title: _t("Translations"),
|
||||||
init: function(view) {
|
init: function(view) {
|
||||||
|
// TODO fme: should add the language to fields_view_get because between the fields view get
|
||||||
|
// and the moment the user opens the translation dialog, the user language could have been changed
|
||||||
|
this.view_language = view.session.user_context.lang;
|
||||||
this['on_button' + _t("Save")] = this.on_button_Save;
|
this['on_button' + _t("Save")] = this.on_button_Save;
|
||||||
this['on_button' + _t("Close")] = this.on_button_Close;
|
this['on_button' + _t("Close")] = this.on_button_Close;
|
||||||
this._super(view, {
|
this._super(view, {
|
||||||
|
@ -500,6 +503,9 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({
|
||||||
self.select_tab('view');
|
self.select_tab('view');
|
||||||
}
|
}
|
||||||
self.$fields_form = self.$element.find('.oe_translation_form');
|
self.$fields_form = self.$element.find('.oe_translation_form');
|
||||||
|
self.$fields_form.find('.oe_trad_field').change(function() {
|
||||||
|
$(this).toggleClass('touched', ($(this).val() != $(this).attr('data-value')));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
@ -514,19 +520,27 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({
|
||||||
_.each(self.languages, function(lg) {
|
_.each(self.languages, function(lg) {
|
||||||
var deff = $.Deferred();
|
var deff = $.Deferred();
|
||||||
deffered.push(deff);
|
deffered.push(deff);
|
||||||
self.rpc('/base/dataset/get', {
|
var callback = function(values) {
|
||||||
model: self.view.dataset.model,
|
|
||||||
ids: [self.view.datarecord.id],
|
|
||||||
fields: self.translatable_fields_keys,
|
|
||||||
context: self.view.dataset.get_context({
|
|
||||||
'lang': lg.code
|
|
||||||
})
|
|
||||||
}, function(values) {
|
|
||||||
_.each(self.translatable_fields_keys, function(f) {
|
_.each(self.translatable_fields_keys, function(f) {
|
||||||
self.$fields_form.find('.oe_trad_field[name="' + lg.code + '-' + f + '"]').val(values[0][f] || '');
|
self.$fields_form.find('.oe_trad_field[name="' + lg.code + '-' + f + '"]').val(values[0][f] || '').attr('data-value', values[0][f] || '');
|
||||||
});
|
});
|
||||||
deff.resolve();
|
deff.resolve();
|
||||||
});
|
}
|
||||||
|
if (lg.code === self.view_language) {
|
||||||
|
var values = {};
|
||||||
|
_.each(self.translatable_fields_keys, function(field) {
|
||||||
|
values[field] = self.view.fields[field].get_value();
|
||||||
|
});
|
||||||
|
callback([values]);
|
||||||
|
} else {
|
||||||
|
self.rpc('/base/dataset/get', {
|
||||||
|
model: self.view.dataset.model,
|
||||||
|
ids: [self.view.datarecord.id],
|
||||||
|
fields: self.translatable_fields_keys,
|
||||||
|
context: self.view.dataset.get_context({
|
||||||
|
'lang': lg.code
|
||||||
|
})}, callback);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
$.when.apply(null, deffered).then(callback);
|
$.when.apply(null, deffered).then(callback);
|
||||||
},
|
},
|
||||||
|
@ -562,6 +576,24 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
on_button_Save: function() {
|
on_button_Save: function() {
|
||||||
|
var trads = {},
|
||||||
|
self = this;
|
||||||
|
self.$fields_form.find('.oe_trad_field.touched').each(function() {
|
||||||
|
var field = $(this).attr('name').split('-');
|
||||||
|
if (!trads[field[0]]) {
|
||||||
|
trads[field[0]] = {};
|
||||||
|
}
|
||||||
|
trads[field[0]][field[1]] = $(this).val();
|
||||||
|
});
|
||||||
|
_.each(trads, function(data, code) {
|
||||||
|
if (code === self.view_language) {
|
||||||
|
_.each(data, function(value, field) {
|
||||||
|
self.view.fields[field].set_value(value);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
self.view.dataset.write(self.view.datarecord.id, data, { 'lang': code });
|
||||||
|
}
|
||||||
|
});
|
||||||
this.close();
|
this.close();
|
||||||
},
|
},
|
||||||
on_button_Close: function() {
|
on_button_Close: function() {
|
||||||
|
@ -667,7 +699,7 @@ openerp.base.View = openerp.base.Widget.extend({
|
||||||
}, {
|
}, {
|
||||||
label: "Translate",
|
label: "Translate",
|
||||||
callback: this.on_sidebar_translate,
|
callback: this.on_sidebar_translate,
|
||||||
classname: 'oe_sidebar_translate'
|
classname: 'oe_sidebar_translate oe_hide'
|
||||||
}, {
|
}, {
|
||||||
label: "View Log",
|
label: "View Log",
|
||||||
callback: this.on_sidebar_view_log,
|
callback: this.on_sidebar_view_log,
|
||||||
|
|
|
@ -474,8 +474,8 @@
|
||||||
<label class="oe_form_label"><t t-esc="field.string"/>:</label>
|
<label class="oe_form_label"><t t-esc="field.string"/>:</label>
|
||||||
</td>
|
</td>
|
||||||
<td t-foreach="widget.languages" t-as="lg" class="oe_form_frame_cell">
|
<td t-foreach="widget.languages" t-as="lg" class="oe_form_frame_cell">
|
||||||
<input t-if="field.type == 'char'" type="text" t-attf-name="#{lg.code}-#{field.name}" value="" class="oe_trad_field" style="width: 100%"/>
|
<input t-if="field.type == 'char'" type="text" t-attf-name="#{lg.code}-#{field.name}" value="" data-value="" class="oe_trad_field" style="width: 100%"/>
|
||||||
<textarea t-if="field.type == 'text'" t-attf-name="#{lg.code}-#{field.name}" class="oe_trad_field" style="width: 100%"></textarea>
|
<textarea t-if="field.type == 'text'" t-attf-name="#{lg.code}-#{field.name}" data-value="" class="oe_trad_field" style="width: 100%"></textarea>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -251,7 +251,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
|
||||||
do_save_event: function(event_id, event_obj) {
|
do_save_event: function(event_id, event_obj) {
|
||||||
var self = this,
|
var self = this,
|
||||||
data = this.get_event_data(event_obj);
|
data = this.get_event_data(event_obj);
|
||||||
this.dataset.write(parseInt(event_id, 10), data, function() {
|
this.dataset.write(parseInt(event_id, 10), data, {}, function() {
|
||||||
self.refresh_minical();
|
self.refresh_minical();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -327,7 +327,7 @@ openerp.base_dashboard.ConfigOverview = openerp.base.View.extend({
|
||||||
e.stopImmediatePropagation();
|
e.stopImmediatePropagation();
|
||||||
var new_state = this.checked ? 'done' : 'open',
|
var new_state = this.checked ? 'done' : 'open',
|
||||||
todo_id = parseInt($(this).val(), 10);
|
todo_id = parseInt($(this).val(), 10);
|
||||||
self.dataset.write(todo_id, {state: new_state}, function () {
|
self.dataset.write(todo_id, {state: new_state}, {}, function () {
|
||||||
self.start();
|
self.start();
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
|
@ -459,7 +459,7 @@ init: function(parent, element_id, dataset, view_id) {
|
||||||
}else{
|
}else{
|
||||||
data[this.date_delay] = task.getDuration();
|
data[this.date_delay] = task.getDuration();
|
||||||
}
|
}
|
||||||
this.dataset.write(event_id, data, function(result) {});
|
this.dataset.write(event_id, data, {}, function(result) {});
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue