changeset 9a6ab3679cce in sao:default details: https://hg.tryton.org/sao?cmd=changeset&node=9a6ab3679cce description: Manage overflow on button and add title on every buttons
issue10863 review381191002 diffstat: src/common.js | 78 +++++++++++++++++++++++++++++++++-------------- src/sao.less | 4 ++ src/screen.js | 6 ++- src/session.js | 3 +- src/tab.js | 11 +++--- src/view/form.js | 24 +++++++++++--- src/view/tree.js | 4 +- src/window.js | 90 +++++++++++++++++++++++++++++++++++++------------------ 8 files changed, 152 insertions(+), 68 deletions(-) diffs (735 lines): diff -r 2d70702c1424 -r 9a6ab3679cce src/common.js --- a/src/common.js Thu Oct 21 00:15:16 2021 +0200 +++ b/src/common.js Thu Oct 21 00:16:49 2021 +0200 @@ -156,14 +156,16 @@ jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { dialog.modal.modal('hide'); prm.reject(); }).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).click(function() { var i = dialog.body.find('input:checked').attr('value'); dialog.modal.modal('hide'); @@ -3142,7 +3144,8 @@ .css('white-space', 'pre-wrap'))); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).click(function() { this.close(dialog); prm.resolve('ok'); @@ -3180,7 +3183,8 @@ dialog.body.append(content); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).click(function() { this.close(dialog); prm.resolve('ok'); @@ -3209,14 +3213,16 @@ dialog.footer.empty(); jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("No"), }).text(Sao.i18n.gettext('No')).click(function() { this.close(dialog); prm.reject(); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Yes"), }).text(Sao.i18n.gettext('Yes')).click(function() { this.close(dialog); if (always.prop('checked')) { @@ -3256,14 +3262,16 @@ this, message); jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { this.close(dialog); prm.reject(); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).click(function() { this.close(dialog); prm.resolve(); @@ -3279,21 +3287,24 @@ this, message); jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { this.close(dialog); prm.resolve('cancel'); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("No"), }).text(Sao.i18n.gettext('No')).click(function() { this.close(dialog); prm.resolve('ko'); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Yes"), }).text(Sao.i18n.gettext('Yes')).click(function() { this.close(dialog); prm.resolve('ok'); @@ -3327,14 +3338,16 @@ }).text(question)).append(entry)); jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { this.close(dialog); prm.reject(); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).click(function() { this.close(dialog); prm.resolve(entry.val()); @@ -3376,14 +3389,16 @@ ); jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { this.close(dialog); prm.reject(); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Compare"), }).text(Sao.i18n.gettext('Compare')).click(function() { this.close(dialog); Sao.rpc({ @@ -3404,7 +3419,8 @@ }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Write Anyway"), }).text(Sao.i18n.gettext('Write Anyway')).click(function() { this.close(dialog); prm.resolve(); @@ -3442,7 +3458,8 @@ }).text(Sao.i18n.gettext('Report Bug'))))); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Close"), }).text(Sao.i18n.gettext('Close')).click(function() { this.close(dialog); prm.resolve(); @@ -3849,7 +3866,8 @@ .click(close); var button = jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Close"), }).text(Sao.i18n.gettext('Close')).click(close) .appendTo(dialog.footer); dialog.modal.on('shown.bs.modal', function() { @@ -4035,7 +4053,8 @@ var properties = buttons[i]; var button = jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'title': properties.label, }).append(Sao.common.ICONFACTORY.get_icon_img( 'tryton-format-' + properties.icon) ).appendTo(group); @@ -4046,13 +4065,16 @@ add_buttons([ { 'icon': 'bold', - 'command': 'bold' + 'command': 'bold', + 'label': Sao.i18n.gettext("Bold"), }, { 'icon': 'italic', - 'command': 'italic' + 'command': 'italic', + 'label': Sao.i18n.gettext("Italic"), }, { 'icon': 'underline', - 'command': 'underline' + 'command': 'underline', + 'label': Sao.i18n.gettext("Underline"), }]); var selections = [ @@ -4101,15 +4123,23 @@ { 'icon': 'align-left', 'command': Sao.i18n.rtl? 'justifyRight' : 'justifyLeft', + 'label': (Sao.i18n.rtl? + Sao.i18n.gettext("Justify Right") : + Sao.i18n.gettext("Justify Left")), }, { 'icon': 'align-center', - 'command': 'justifyCenter' + 'command': 'justifyCenter', + 'label': Sao.i18n.gettext("Justify Center"), }, { 'icon': 'align-right', 'command': Sao.i18n.rtl? 'justifyLeft': 'justifyRight', + 'label': (Sao.i18n.rtl? + Sao.i18n.gettext("Justify Left") : + Sao.i18n.gettext("Justify Right")), }, { 'icon': 'align-justify', - 'command': 'justifyFull' + 'command': 'justifyFull', + 'label': Sao.i18n.gettext("Justify Full"), }]); // TODO backColor diff -r 2d70702c1424 -r 9a6ab3679cce src/sao.less --- a/src/sao.less Thu Oct 21 00:15:16 2021 +0200 +++ b/src/sao.less Thu Oct 21 00:16:49 2021 +0200 @@ -42,6 +42,10 @@ } } +button { + overflow-y: hidden; + text-overflow: ellipsis; +} .navbar-inverse { .close { diff -r 2d70702c1424 -r 9a6ab3679cce src/screen.js --- a/src/screen.js Thu Oct 21 00:15:16 2021 +0200 +++ b/src/screen.js Thu Oct 21 00:16:49 2021 +0200 @@ -29,7 +29,8 @@ this.el.append(this.filter_box); this.filter_button = jQuery('<button/>', { type: 'button', - 'class': 'btn btn-link' + 'class': 'btn btn-link', + 'title': Sao.i18n.gettext("Filters"), }).text(Sao.i18n.gettext('Filters')); this.filter_button.click(this.search_box.bind(this)); this.search_entry = jQuery('<input/>', { @@ -558,7 +559,8 @@ jQuery('<button/>', { 'class': 'btn btn-primary', - type: 'submit' + type: 'submit', + 'title': Sao.i18n.gettext("Find"), }).text(Sao.i18n.gettext('Find')) .click(search).appendTo(dialog.footer); } diff -r 2d70702c1424 -r 9a6ab3679cce src/session.js --- a/src/session.js Thu Oct 21 00:15:16 2021 +0200 +++ b/src/session.js Thu Oct 21 00:16:49 2021 +0200 @@ -205,7 +205,8 @@ ); dialog.button = jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'submit' + 'type': 'submit', + 'title': Sao.i18n.gettext("Login"), }).text(' ' + Sao.i18n.gettext("Login")).appendTo(dialog.footer); return dialog; }; diff -r 2d70702c1424 -r 9a6ab3679cce src/tab.js --- a/src/tab.js Thu Oct 21 00:15:16 2021 +0200 +++ b/src/tab.js Thu Oct 21 00:16:49 2021 +0200 @@ -192,7 +192,8 @@ })).append(jQuery('<button/>', { 'type': 'button', 'class': 'close visible-xs', - 'aria-label': Sao.i18n.gettext('Close') + 'aria-label': Sao.i18n.gettext("Close"), + 'title': Sao.i18n.gettext("Close"), }).append(jQuery('<span/>', { 'aria-hidden': true }).append('×')).click(function() { @@ -399,12 +400,12 @@ Sao.set_url(tab.get_url(), tab.name.split(' / ').pop()); }) .append(jQuery('<button/>', { - 'class': 'close' + 'class': 'close', + 'aria-label': Sao.i18n.gettext("Close"), + 'title': Sao.i18n.gettext("Close"), }).append(jQuery('<span/>', { 'aria-hidden': true - }).append('×')).append(jQuery('<span/>', { - 'class': 'sr-only' - }).text(Sao.i18n.gettext('Close'))).click(function(evt) { + }).append('×')).click(function(evt) { evt.preventDefault(); tab.close(); })) diff -r 2d70702c1424 -r 9a6ab3679cce src/view/form.js --- a/src/view/form.js Thu Oct 21 00:15:16 2021 +0200 +++ b/src/view/form.js Thu Oct 21 00:16:49 2021 +0200 @@ -996,6 +996,7 @@ 'params': [this.action_id, context], }, Sao.Session.current_session, false); this.label.text(action.name); + this.el.attr('title', action.name); var decoder = new Sao.PYSON.Decoder(pyson_ctx); var domain = decoder.decode(action.pyson_domain); @@ -1282,13 +1283,15 @@ this.read(widget, dialog); jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { this.close(dialog); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).click(this.write .bind(this, widget, dialog)) .appendTo(dialog.footer); @@ -1617,8 +1620,10 @@ _set_password_label: function() { if (this.input.prop('type') == 'password') { this.button.text(Sao.i18n.gettext('Show')); + this.button.attr('title', Sao.i18n.gettext("Show")); } else { this.button.text(Sao.i18n.gettext('Hide')); + this.button.attr('title', Sao.i18n.gettext("Hide")); } } }); @@ -2193,7 +2198,8 @@ var button = jQuery('<button/>', { 'class': 'btn btn-default btn-sm form-control', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Translate') + 'aria-label': Sao.i18n.gettext('Translate'), + 'title': Sao.i18n.gettext("Translate"), }).appendTo(jQuery('<span/>', { 'class': 'input-group-btn' }).appendTo(this.el)); @@ -2271,6 +2277,7 @@ 'class': 'btn btn-default btn-sm form-control', 'type': 'button', 'aria-label': Sao.i18n.gettext("Translate"), + 'title': Sao.i18n.gettext("Translate"), }).appendTo(jQuery('<span/>', { 'class': 'input-group-btn', }).appendTo(this.el)); @@ -4114,7 +4121,9 @@ this.but_open = jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'aria-label': Sao.i18n.gettext("Open..."), + 'title': Sao.i18n.gettext("Open..."), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-open') ).appendTo(jQuery('<span/>', { 'class': 'input-group-btn', @@ -4478,6 +4487,7 @@ 'class': 'btn btn-default btn-sm', 'type': 'button', 'aria-label': Sao.i18n.gettext('Translate'), + 'title': Sao.i18n.gettext("Translate"), }).appendTo(this.el); button.append( Sao.common.ICONFACTORY.get_icon_img('tryton-translate')); @@ -4618,7 +4628,8 @@ this.but_add = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Add') + 'aria-label': Sao.i18n.gettext("Add"), + 'title': Sao.i18n.gettext("Add"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-add') ).appendTo(jQuery('<div/>', { 'class': 'input-group-btn' @@ -4908,7 +4919,8 @@ this.button = jQuery('<button/>', { 'class': 'btn btn-default', 'type': 'button', - 'arial-label': Sao.i18n.gettext('Remove') + 'arial-label': Sao.i18n.gettext("Remove"), + 'title': Sao.i18n.gettext("Remove"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-remove') ).appendTo(jQuery('<div/>', { 'class': 'input-group-btn' diff -r 2d70702c1424 -r 9a6ab3679cce src/view/tree.js --- a/src/view/tree.js Thu Oct 21 00:15:16 2021 +0200 +++ b/src/view/tree.js Thu Oct 21 00:16:49 2021 +0200 @@ -822,7 +822,8 @@ var more_cell = jQuery('<td/>'); var more_button = jQuery('<button/>', { 'class': 'btn btn-default btn-block', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("More"), }).text(Sao.i18n.gettext('More') ).click(function() { this.display_size += Sao.config.display_size; @@ -2540,6 +2541,7 @@ button = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', + 'title': Sao.i18n.gettext("Save As..."), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-save') ).appendTo(cell) .click(record, function(event) { diff -r 2d70702c1424 -r 9a6ab3679cce src/window.js --- a/src/window.js Thu Oct 21 00:15:16 2021 +0200 +++ b/src/window.js Thu Oct 21 00:16:49 2021 +0200 @@ -62,7 +62,8 @@ }).append(jQuery('<button/>', { 'type': 'button', 'class': 'close stretched-link', - 'aria-label': Sao.i18n.gettext('Close') + 'aria-label': Sao.i18n.gettext("Close"), + 'title': Sao.i18n.gettext("Close"), }).append(jQuery('<span/>', { 'aria-hidden': true }).append('×')).click(function() { @@ -176,7 +177,8 @@ dialog.footer.append(jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': button_text, }).text(button_text).click(function() { this.response('RESPONSE_CANCEL'); }.bind(this))); @@ -185,7 +187,8 @@ if (kwargs.new_ && this.many) { dialog.footer.append(jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("New"), }).text(Sao.i18n.gettext('New')).click(function() { this.response('RESPONSE_ACCEPT'); }.bind(this))); @@ -194,12 +197,14 @@ if (this.save_current) { dialog.footer.append(jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'submit' + 'type': 'submit', + 'title': Sao.i18n.gettext("Save"), }).text(Sao.i18n.gettext('Save'))); } else { dialog.footer.append(jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'submit' + 'type': 'submit', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK'))); } dialog.content.submit(function(e) { @@ -239,7 +244,8 @@ this.but_switch = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Switch') + 'aria-label': Sao.i18n.gettext("Switch"), + 'title': Sao.i18n.gettext("Switch"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-switch') ).appendTo(buttons); this.but_switch.click( @@ -248,7 +254,8 @@ this.but_previous = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Previous') + 'aria-label': Sao.i18n.gettext("Previous"), + 'title': Sao.i18n.gettext("Previous"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-back') ).appendTo(buttons); this.but_previous.click( @@ -263,7 +270,8 @@ this.but_next = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Next') + 'aria-label': Sao.i18n.gettext("Next"), + 'title': Sao.i18n.gettext("Next"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-forward') ).appendTo(buttons); this.but_next.click(disable_during(this.next.bind(this))); @@ -274,7 +282,8 @@ this.but_add = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Add') + 'aria-label': Sao.i18n.gettext("Add"), + 'title': Sao.i18n.gettext("Add"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-add') ).appendTo(buttons); this.but_add.click(disable_during(this.add.bind(this))); @@ -283,7 +292,8 @@ this.but_remove = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Remove') + 'aria-label': Sao.i18n.gettext("Remove"), + 'title': Sao.i18n.gettext("Remove"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-remove') ).appendTo(buttons); this.but_remove.click( @@ -294,7 +304,8 @@ this.but_new = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('New') + 'aria-label': Sao.i18n.gettext("New"), + 'title': Sao.i18n.gettext("New"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-create') ).appendTo(buttons); this.but_new.click(disable_during(this.new_.bind(this))); @@ -303,7 +314,8 @@ this.but_del = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Delete') + 'aria-label': Sao.i18n.gettext("Delete"), + 'title': Sao.i18n.gettext("Delete"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-delete') ).appendTo(buttons); this.but_del.click(disable_during(this.delete_.bind(this))); @@ -312,7 +324,8 @@ this.but_undel = jQuery('<button/>', { 'class': 'btn btn-default btn-sm', 'type': 'button', - 'aria-label': Sao.i18n.gettext('Undelete') + 'aria-label': Sao.i18n.gettext("Undelete"), + 'title': Sao.i18n.gettext("Undelete"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-undo') ).appendTo(buttons); this.but_undel.click(disable_during(this.undelete.bind(this))); @@ -700,27 +713,31 @@ jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { this.response('RESPONSE_CANCEL'); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Find"), }).text(Sao.i18n.gettext('Find')).click(function() { this.response('RESPONSE_APPLY'); }.bind(this)).appendTo(dialog.footer); if (kwargs.new_ && Sao.common.MODELACCESS.get(model).create) { jQuery('<button/>', { 'class': 'btn btn-default', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("New"), }).text(Sao.i18n.gettext('New')).click(function() { this.response('RESPONSE_ACCEPT'); }.bind(this)).appendTo(dialog.footer); } jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'submit' + 'type': 'submit', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).appendTo(dialog.footer); dialog.content.submit(function(e) { this.response('RESPONSE_OK'); @@ -822,13 +839,15 @@ jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { this.response('RESPONSE_CANCEL'); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'submit' + 'type': 'submit', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).appendTo(dialog.footer); dialog.content.submit(function(e) { this.response('RESPONSE_OK'); @@ -902,13 +921,15 @@ jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function() { this.response('RESPONSE_CANCEL'); }.bind(this)).appendTo(dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'submit' + 'type': 'submit', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).appendTo(dialog.footer); dialog.content.submit(function(e) { this.response('RESPONSE_OK'); @@ -969,14 +990,16 @@ this.fields_model = {}; jQuery('<button/>', { 'class': 'btn btn-link', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(Sao.i18n.gettext('Cancel')).click(function(){ this.response('RESPONSE_CANCEL'); }.bind(this)).appendTo(this.dialog.footer); jQuery('<button/>', { 'class': 'btn btn-primary', - 'type': 'submit' + 'type': 'submit', + 'title': Sao.i18n.gettext("OK"), }).text(Sao.i18n.gettext('OK')).click(function(e){ this.response('RESPONSE_OK'); e.preventDefault(); @@ -1011,7 +1034,8 @@ var button_add = jQuery('<button/>', { 'class': 'btn btn-default btn-block', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Add"), }).text(' ' + Sao.i18n.gettext('Add')).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-add') ).click(function(){ @@ -1023,7 +1047,8 @@ jQuery('<button/>', { 'class': 'btn btn-default btn-block', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Remove"), }).text(' ' + Sao.i18n.gettext('Remove')).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-remove') ).click(function(){ @@ -1034,7 +1059,8 @@ jQuery('<button/>', { 'class': 'btn btn-default btn-block', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Clear"), }).text(' ' + Sao.i18n.gettext('Clear')).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-clear') ).click(function(){ @@ -1164,7 +1190,8 @@ jQuery('<button/>', { 'class': 'btn btn-default btn-block', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Auto-Detect"), }).text(' ' + Sao.i18n.gettext('Auto-Detect')).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-search') ).click(function(){ @@ -1497,7 +1524,8 @@ jQuery('<button/>', { 'class': 'btn btn-default btn-block', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Save Export"), }).text(' ' + Sao.i18n.gettext('Save Export')).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-save') ).click(function(){ @@ -1509,6 +1537,7 @@ 'class': 'btn btn-default btn-block', 'target': '_blank', 'rel': 'noreferrer noopener', + 'title': Sao.i18n.gettext("URL Export"), }).text(' ' + Sao.i18n.gettext("URL Export")).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-public') ) @@ -1517,7 +1546,8 @@ jQuery('<button/>', { 'class': 'btn btn-default btn-block', - 'type': 'button' + 'type': 'button', + 'title': Sao.i18n.gettext("Delete Export"), }).text(' ' + Sao.i18n.gettext('Delete Export')).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-delete') ).click(function(){ @@ -2214,6 +2244,7 @@ jQuery('<button/>', { 'class': 'btn btn-link', 'type': 'button', + 'title': Sao.i18n.gettext("Cancel"), }).text(' ' + Sao.i18n.gettext('Cancel')).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-cancel') ).click(function() { @@ -2223,6 +2254,7 @@ jQuery('<button/>', { 'class': 'btn btn-primary', 'type': 'submit', + 'title': Sao.i18n.gettext("Send"), }).text(' ' + Sao.i18n.gettext('Send')).prepend( Sao.common.ICONFACTORY.get_icon_img('tryton-send') ).appendTo(this.dialog.footer);