diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css
index 65aef0a629d..e6ccd60b3e1 100644
--- a/addons/web/static/src/css/base.css
+++ b/addons/web/static/src/css/base.css
@@ -468,14 +468,10 @@
max-width: 180px;
max-height: 180px;
}
-.openerp .oe_view_manager_current a.accessactive {
- display: inline-block;
- text-decoration: none;
-}
-.openerp .oe_view_manager_current .accessactive:first-letter {
- text-decoration: underline;
+.openerp .oe_view_manager_current span.access , a.access{
+ text-decoration:underline;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
- font-weight: bold;
+ font-weight:bold;
}
.openerp .oe_button.oe_link {
border: none;
diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass
index 7710cadb0a7..41b711a995f 100644
--- a/addons/web/static/src/css/base.sass
+++ b/addons/web/static/src/css/base.sass
@@ -432,14 +432,10 @@ $sheet-padding: 16px
.oe_image_medium > img
max-width: 180px
max-height: 180px
- .oe_view_manager_current
- a.accessactive
- display: inline-block
- text-decoration: none
- .accessactive:first-letter
- text-decoration: underline
- text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2)
- font-weight: bold
+ .oe_view_manager_current span.access, a.access
+ text-decoration: underline
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2)
+ font-weight: bold
.oe_button.oe_link
@include reset()
img
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index dab8955fdfb..3faaa2ed1c7 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -123,10 +123,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
self.set({actual_mode: self.options.initial_mode});
this.has_been_loaded.done(function() {
self.on("change:actual_mode", self, self.check_actual_mode);
+ self.widgetAccesskey();
self.check_actual_mode();
self.on("change:actual_mode", self, self.init_pager);
self.init_pager();
- self.widgetAccesskey();
+ self.on("change:actual_mode", self, self.widgetAccesskey);
});
self.on("load_record", self, self.load_record);
this.on('view_loaded', self, self.load_form);
@@ -225,16 +226,63 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
return $.when();
},
widgetAccesskey:function(){
- $(document).keydown(function(e){
- if(e.keyCode === $.ui.keyCode.ALT || e.keyCode === $.ui.keyCode.SHIFT && e.altKey) {
- $("[accesskey]").addClass('accessactive');
- }else {
- $("[accesskey]").removeClass('accessactive');
- }
- e.stopPropagation();
- }).keyup(function(e){
- $("[accesskey]").removeClass('accessactive');
+ var self= this;
+ var list,accesskey = [];
+ $(window).blur(function() {unhighlightAccessKeys()});
+
+ var highlightAccessKeys = function(){
+ var buttons = _.toArray(self.$el.find('header button:visible,.oe_button_box button:visible'));
+ var form_button = _.toArray(self.$buttons.find('button:visible,a:visible'));
+ var o2m = _.toArray($(document).find('.oe_list_content:visible .oe_form_field_one2many_list_row_add > a'))
+ list = o2m.concat(form_button,buttons);
+ accesskey = _.map(list, function(r){return $(r).attr('accesskey') });
+
+ _.each(list,function(el,i){
+ if (! $(el).attr("accesskey")) {
+ if(!accesskey[i]){
+ var index = 0;
+ _.each(accesskey,function(_key,j){
+ if (!_key){
+ accesskey[i] = $(el).text().replace(/\s/g, '').toUpperCase().charAt(0);
+ return
+ } else {
+ if (_.contains(accesskey, $(el).text().replace(/\s/g, '').toUpperCase().charAt(index))) {
+ index++;
+ return false;
+ } else {
+ if (! accesskey[i]) {
+ $(el).attr("accesskey",$(el).text().replace(/\s/g, '').charAt(index))
+ index = 0
+ return true
+ }else {
+ $(el).attr("accesskey",accesskey[i])
+ }
+ }
+ }
+ return
+ })
+ }
+
+ }else {
+ $(el).attr("accesskey",accesskey[i])
+ }
+ })
+ }
+ $(document).keydown(function(e){
+ if (e.keyCode === 18 || e.keycode === 16 && e.altkey || e.keyCode == 18 && e.shiftKey) {
+ highlightAccessKeys();
+ _.each(list,function(rl,i){
+ $(rl).html(function(i, html){
+ return $(rl).text().replace($(rl).attr('accesskey'), '' + $(rl).attr('accesskey') + '');
+ })})
+ }}).keyup(function(){
+ unhighlightAccessKeys();
});
+ var unhighlightAccessKeys = function() {
+ _.each(list,function(rl,i){
+ $(rl).find('.access').removeClass('access');
+ })
+ };
},
widgetFocused: function() {
// Clear click flag if used to focus a widget
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 88060f56ffc..c18b9193428 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -795,15 +795,15 @@
-
+
+ type="button" class="oe_button oe_form_button_create">Create
-
+
or
- Discard
+ Discard