[open-ils-commits] r9473 - trunk/Open-ILS/web/js/dojo/openils/widget
svn at svn.open-ils.org
svn at svn.open-ils.org
Mon Apr 28 01:48:52 EDT 2008
Author: miker
Date: 2008-04-28 01:08:58 -0400 (Mon, 28 Apr 2008)
New Revision: 9473
Modified:
trunk/Open-ILS/web/js/dojo/openils/widget/TranslatorPopup.js
Log:
made translation widget self-contained
Modified: trunk/Open-ILS/web/js/dojo/openils/widget/TranslatorPopup.js
===================================================================
--- trunk/Open-ILS/web/js/dojo/openils/widget/TranslatorPopup.js 2008-04-28 03:52:44 UTC (rev 9472)
+++ trunk/Open-ILS/web/js/dojo/openils/widget/TranslatorPopup.js 2008-04-28 05:08:58 UTC (rev 9473)
@@ -30,6 +30,7 @@
dojo.require("dijit.form.Button");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.ComboBox");
+ dojo.require("dojox.jsonPath");
dojo.requireLocalization("openils.widget", "TranslatorPopup");
@@ -38,7 +39,7 @@
[dijit._Widget, dijit._Templated],
{
- templateString : "<span dojoAttachPoint='node'><div dojoAttachPoint='translateLabelNode' dojoType='dijit.form.DropDownButton'><span>Translate</span><div id='${field}_translation_${unique}' dojoType='dijit.TooltipDialog' onOpen='openils.widget.TranslatorPopup.renderTranslatorPopup(${targetObject}, \"${field}\", \"${unique}\")' ><div dojoType='dijit.layout.ContentPane'><table><tbody class='translation_tbody_template' style='display:none; visiblity:hidden;'><tr><th dojoAttachPoint='localeLabelNode'/><td class='locale'><div class='locale_combobox'></div></td><th dojoAttachPoint='translationLabelNode'/><td class='translation'><div class='translation_textbox'></div></td><td><button class='create_button' style='display:none; visiblity:hidden;'><span dojoAttachPoint='createButtonNode'/></button><button class='update_button' style='display:none; visiblity:hidden;'><span dojoAttachPoint='updateButtonNode'/></button><button class='delete_button' style='display:none; visiblity:hidden
;'><span dojoAttachPoint='removeButtonNode'/></button></td></tr></tbody><tbody class='translation_tbody'></tbody></table></div></div></div></span>",
+ templateString : "<span dojoAttachPoint='node'><div id='${field}_translation_button_${unique}' dojoAttachPoint='translateLabelNode' dojoType='dijit.form.DropDownButton'><span>Translate</span><div id='${field}_translation_${unique}' dojoAttachPoint='tooltipDialog' dojoType='dijit.TooltipDialog'><div dojoType='dijit.layout.ContentPane'><table><tbody class='translation_tbody_template' style='display:none; visiblity:hidden;'><tr><th dojoAttachPoint='localeLabelNode'/><td class='locale'><div class='locale_combobox'></div></td><th dojoAttachPoint='translationLabelNode'/><td class='translation'><div class='translation_textbox'></div></td><td><button class='create_button' style='display:none; visiblity:hidden;'><span dojoAttachPoint='createButtonNode'/></button><button class='update_button' style='display:none; visiblity:hidden;'><span dojoAttachPoint='updateButtonNode'/></button><button class='delete_button' style='display:none; visiblity:hidden;'><span dojoAttachPoint='removeBu
ttonNode'/></button></td></tr></tbody><tbody class='translation_tbody'></tbody></table></div></div></div></span>",
widgetsInTemplate: true,
field : "",
@@ -46,190 +47,199 @@
unique : "",
postCreate : function () {
- var nls = dojo.i18n.getLocalization("openils.widget", "TranslatorPopup");
- this.localeLabelNode.textContent = nls.locale;
- this.translationLabelNode.textContent = nls.translation;
- this.translateLabelNode.setLabel(nls.translate);
- this.createButtonNode.textContent = nls.create;
- this.updateButtonNode.textContent = nls.update;
- this.removeButtonNode.textContent = nls.remove;
- }
- }
- );
- openils.widget.TranslatorPopup.renderTranslatorPopup = function (obj, field, num) {
- var node = dojo.byId(field + '_translation_' + num);
+ dojo.connect(this.tooltipDialog, 'onOpen', this, 'renderTranslatorPopup');
- var trans_list = openils.I18N.getTranslations( obj, field );
+ this.nls = dojo.i18n.getLocalization("openils.widget", "TranslatorPopup");
- var trans_template = dojo.query('.translation_tbody_template', node)[0];
- var trans_tbody = dojo.query('.translation_tbody', node)[0];
+ this.translateLabelNode.setLabel(this.nls.translate);
- // Empty it
- while (trans_tbody.lastChild) trans_tbody.removeChild( trans_tbody.lastChild );
+ this.localeLabelNode.textContent = this.nls.locale;
+ this.translationLabelNode.textContent = this.nls.translation;
- for (var i in trans_list) {
- if (!trans_list[i]) continue;
+ this.createButtonNode.textContent = this.nls.create;
+ this.updateButtonNode.textContent = this.nls.update;
+ this.removeButtonNode.textContent = this.nls.remove;
+ },
- var trans_obj = trans_list[i];
- var trans_id = trans_obj.id();
+ renderTranslatorPopup : function () {
+
+ this._targetObject = dojox.jsonPath.query(window, '$.' + this.targetObject, {evalType:"RESULT"});
- var trans_row = dojo.query('tr',trans_template)[0].cloneNode(true);
- trans_row.id = 'translation_row_' + trans_id;
-
- var old_dijit = dijit.byId('locale_' + trans_id);
- if (old_dijit) old_dijit.destroy();
-
- old_dijit = dijit.byId('translation_' + trans_id);
- if (old_dijit) old_dijit.destroy();
-
- dojo.query('.locale_combobox',trans_row).instantiate(
- dijit.form.ComboBox,
- { store:openils.I18N.localeStore,
- searchAttr:'locale',
- lowercase:true,
- required:true,
- id:'locale_' + trans_id,
- value: trans_obj.translation(),
- invalidMessage:'Specify locale as {languageCode}_{countryCode}, like en_us',
- regExp:'[a-z_]+'
+ var node = dojo.byId(this.field + '_translation_' + this.unique);
+
+ var trans_list = openils.I18N.getTranslations( this._targetObject, this.field );
+
+ var trans_template = dojo.query('.translation_tbody_template', node)[0];
+ var trans_tbody = dojo.query('.translation_tbody', node)[0];
+
+ // Empty it
+ while (trans_tbody.lastChild) trans_tbody.removeChild( trans_tbody.lastChild );
+
+ for (var i in trans_list) {
+ if (!trans_list[i]) continue;
+
+ var trans_obj = trans_list[i];
+ var trans_id = trans_obj.id();
+
+ var trans_row = dojo.query('tr',trans_template)[0].cloneNode(true);
+ trans_row.id = 'translation_row_' + trans_id;
+
+ var old_dijit = dijit.byId('locale_' + trans_id);
+ if (old_dijit) old_dijit.destroy();
+
+ old_dijit = dijit.byId('translation_' + trans_id);
+ if (old_dijit) old_dijit.destroy();
+
+ dojo.query('.locale_combobox',trans_row).instantiate(
+ dijit.form.ComboBox,
+ { store:openils.I18N.localeStore,
+ searchAttr:'locale',
+ lowercase:true,
+ required:true,
+ id:'locale_' + trans_id,
+ value: trans_obj.translation(),
+ invalidMessage:'Specify locale as {languageCode}_{countryCode}, like en_us',
+ regExp:'[a-z_]+'
+ }
+ );
+
+ dojo.query('.translation_textbox',trans_row).instantiate(
+ dijit.form.TextBox,
+ { required : true,
+ id:'translation_' + trans_id,
+ value: trans_obj.string()
+ }
+ );
+
+ dojo.query('.update_button',trans_row).style({ visibility : 'visible', display : 'inline'}).instantiate(
+ dijit.form.Button,
+ { onClick : dojo.hitch( this, 'updateTranslation') }
+ );
+
+ dojo.query('.delete_button',trans_row).style({ visibility : 'visible', display : 'inline'}).instantiate(
+ dijit.form.Button,
+ { onClick : dojo.hitch( this, 'removeTranslation') }
+ );
+
+ trans_tbody.appendChild( trans_row );
+
}
- );
+
+ old_dijit = dijit.byId('i18n_new_locale_' + this._targetObject.classname + '.' + this.field + this.unique);
+ if (old_dijit) old_dijit.destroy();
+
+ old_dijit = dijit.byId('i18n_new_translation_' + this._targetObject.classname + '.' + this.field + this.unique);
+ if (old_dijit) old_dijit.destroy();
+
+ trans_row = dojo.query('tr',trans_template)[0].cloneNode(true);
+
+ dojo.query('.locale_combobox',trans_row).instantiate(
+ dijit.form.ComboBox,
+ { store:openils.I18N.localeStore,
+ searchAttr:'locale',
+ id:'i18n_new_locale_' + this._targetObject.classname + '.' + this.field + this.unique,
+ lowercase:true,
+ required:true,
+ invalidMessage:'Specify locale as {languageCode}_{countryCode}, like en_us',
+ regExp:'[a-z_]+'
+ }
+ );
+
+ dojo.query('.translation_textbox',trans_row).addClass('new_translation').instantiate(
+ dijit.form.TextBox,
+ { required : true,
+ id:'i18n_new_translation_' + this._targetObject.classname + '.' + this.field + this.unique
+ }
+ );
+
+ dojo.query('.create_button',trans_row).style({ visibility : 'visible', display : 'inline'}).instantiate(
+ dijit.form.Button,
+ { onClick : dojo.hitch( this, 'createTranslation') }
+ );
+
+ trans_tbody.appendChild( trans_row );
- dojo.query('.translation_textbox',trans_row).instantiate(
- dijit.form.TextBox,
- { required : true,
- id:'translation_' + trans_id,
- value: trans_obj.string()
- }
- );
+ },
- dojo.query('.update_button',trans_row).style({ visibility : 'visible', display : 'inline'}).instantiate(
- dijit.form.Button,
- { onClick :
- (function (trans_id, obj, field) {
- return function () { openils.widget.TranslatorPopup.updateTranslation(trans_id, obj, field, num) }
- })(trans_id, obj, field)
- }
- );
+ updateTranslation : function (t) {
+ return this.changeTranslation('update',t);
+ },
+
+ removeTranslation : function (t) {
+ return changeTranslation('delete',t);
+ },
+
+ changeTranslation : function (method, trans_id) {
+
+ var trans_obj = new i18n().fromHash({
+ ischanged : method == 'update' ? 1 : 0,
+ isdeleted : method == 'delete' ? 1 : 0,
+ id : trans_id,
+ fq_field : this._targetObject.classname + '.' + this.field,
+ identity_value : this._targetObject.id(),
+ translation : dijit.byId('locale_' + trans_id).getValue(),
+ string : dijit.byId('translation_' + trans_id).getValue()
+ });
+
+ this.writeTranslation(method, trans_obj);
+ },
+
+ createTranslation : function () {
+ var node = dojo.byId(this.field + '_translation_' + this.unique);
+
+ var trans_obj = new i18n().fromHash({
+ isnew : 1,
+ fq_field : this._targetObject.classname + '.' + this.field,
+ identity_value : this._targetObject.id(),
+ translation : dijit.byId('i18n_new_locale_' + this._targetObject.classname + '.' + this.field + this.unique).getValue(),
+ string : dijit.byId('i18n_new_translation_' + this._targetObject.classname + '.' + this.field + this.unique).getValue()
+ });
+
+ this.writeTranslation('create', trans_obj);
+ },
+
+ writeTranslation : function (method, trans_obj) {
+
+ OpenSRF.CachedClientSession('open-ils.permacrud').request({
+ method : 'open-ils.permacrud.' + method + '.i18n',
+ timeout: 10,
+ params : [ ses, trans_obj ],
+ onerror: function (r) {
+ //highlighter.editor_pane.red.play();
+ if (status_update) status_update( 'Problem saving translation for ' + this._targetObject[this.field]() );
+ },
+ oncomplete : function (r) {
+ var res = r.recv();
+ if ( res && res.content() ) {
+ //highlighter.editor_pane.green.play();
+ if (status_update) status_update( 'Saved changes to translation for ' + this._targetObject[this.field]() );
+
+ if (method == 'delete') {
+ dojo.NodeList(dojo.byId('translation_row_' + trans_obj.id())).orphan();
+ } else if (method == 'create') {
+ var node = dojo.byId(this.field + '_translation_' + this.unique);
+ dijit.byId('i18n_new_locale_' + this._targetObject.classname + '.' + this.field + this.unique).setValue(null);
+ dijit.byId('i18n_new_translation_' + this._targetObject.classname + '.' + this.field + this.unique).setValue(null);
+ this.renderTranslatorPopup();
+ }
+
+ } else {
+ //highlighter.editor_pane.red.play();
+ if (status_update) status_update( 'Problem saving translation for ' + this._targetObject[this.field]() );
+ }
+ },
+ }).send();
+ }
- dojo.query('.delete_button',trans_row).style({ visibility : 'visible', display : 'inline'}).instantiate(
- dijit.form.Button,
- { onClick :
- (function (trans_id, obj, field) {
- return function () { openils.widget.TranslatorPopup.removeTranslation(trans_id, obj, field, num) }
- })(trans_id, obj, field)
- }
- );
-
- trans_tbody.appendChild( trans_row );
}
- old_dijit = dijit.byId('i18n_new_locale_' + obj.classname + '.' + field + num);
- if (old_dijit) old_dijit.destroy();
+ );
- old_dijit = dijit.byId('i18n_new_translation_' + obj.classname + '.' + field + num);
- if (old_dijit) old_dijit.destroy();
+ openils.widget.TranslatorPopup._unique = 1;
- trans_row = dojo.query('tr',trans_template)[0].cloneNode(true);
- dojo.query('.locale_combobox',trans_row).instantiate(
- dijit.form.ComboBox,
- { store:openils.I18N.localeStore,
- searchAttr:'locale',
- id:'i18n_new_locale_' + obj.classname + '.' + field + num,
- lowercase:true,
- required:true,
- invalidMessage:'Specify locale as {languageCode}_{countryCode}, like en_us',
- regExp:'[a-z_]+'
- }
- );
- dojo.query('.translation_textbox',trans_row).addClass('new_translation').instantiate(
- dijit.form.TextBox,
- { required : true,
- id:'i18n_new_translation_' + obj.classname + '.' + field + num
- }
- );
-
- dojo.query('.create_button',trans_row).style({ visibility : 'visible', display : 'inline'}).instantiate(
- dijit.form.Button,
- { onClick : function () { openils.widget.TranslatorPopup.createTranslation( obj, field, num) } }
- );
-
- trans_tbody.appendChild( trans_row );
- }
-
- openils.widget.TranslatorPopup.updateTranslation = function (trans_id, obj, field, num) {
- return openils.widget.TranslatorPopup.changeTranslation('update', trans_id, obj, field, num);
- }
-
- openils.widget.TranslatorPopup.removeTranslation = function (trans_id, obj, field, num) {
- return openils.widget.TranslatorPopup.changeTranslation('delete', trans_id, obj, field, num);
- }
-
- openils.widget.TranslatorPopup.changeTranslation = function (method, trans_id, obj, field, num) {
-
- var trans_obj = new i18n().fromHash({
- ischanged : method == 'update' ? 1 : 0,
- isdeleted : method == 'delete' ? 1 : 0,
- id : trans_id,
- fq_field : obj.classname + '.' + field,
- identity_value : obj.id(),
- translation : dijit.byId('locale_' + trans_id).getValue(),
- string : dijit.byId('translation_' + trans_id).getValue()
- });
-
- openils.widget.TranslatorPopup.writeTranslation(method, trans_obj, obj, field, num);
- }
-
- openils.widget.TranslatorPopup.createTranslation = function (obj, field, num) {
- var node = dojo.byId(field + '_translation_' + num);
-
- var trans_obj = new i18n().fromHash({
- isnew : 1,
- fq_field : obj.classname + '.' + field,
- identity_value : obj.id(),
- translation : dijit.byId('i18n_new_locale_' + obj.classname + '.' + field + num).getValue(),
- string : dijit.byId('i18n_new_translation_' + obj.classname + '.' + field + num).getValue()
- });
-
- openils.widget.TranslatorPopup.writeTranslation('create', trans_obj, obj, field, num);
- }
-
- openils.widget.TranslatorPopup.writeTranslation = function (method, trans_obj, obj, field, num) {
-
- OpenSRF.CachedClientSession('open-ils.permacrud').request({
- method : 'open-ils.permacrud.' + method + '.i18n',
- timeout: 10,
- params : [ ses, trans_obj ],
- onerror: function (r) {
- //highlighter.editor_pane.red.play();
- if (status_update) status_update( 'Problem saving translation for ' + obj[field]() );
- },
- oncomplete : function (r) {
- var res = r.recv();
- if ( res && res.content() ) {
- //highlighter.editor_pane.green.play();
- if (status_update) status_update( 'Saved changes to translation for ' + obj[field]() );
-
- if (method == 'delete') {
- dojo.NodeList(dojo.byId('translation_row_' + trans_obj.id())).orphan();
- } else if (method == 'create') {
- var node = dojo.byId(field + '_translation_' + num);
- dijit.byId('i18n_new_locale_' + obj.classname + '.' + field + num).setValue(null);
- dijit.byId('i18n_new_translation_' + obj.classname + '.' + field + num).setValue(null);
- openils.widget.TranslatorPopup.renderTranslatorPopup(obj, field, num);
- }
-
- } else {
- //highlighter.editor_pane.red.play();
- if (status_update) status_update( 'Problem saving translation for ' + obj[field]() );
- }
- },
- }).send();
- }
-
}
More information about the open-ils-commits
mailing list