ICEfaces
  1. ICEfaces
  2. ICE-10735

Add "accesskey" attribute support to all eligible ACE components.

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: EE-4.1.0.RC1, EE-4.1.0.GA, 4.2.BETA, 4.2
    • Component/s: ACE-Components
    • Labels:
      None
    • Environment:
      ICEfaces 4.1, focusable ACE components.
    • Assignee Priority:
      P2

      Description

      As of ICEfaces 4.0, the ACE components have very limited support for the XHTML "accesskey" attribute.

      In a web browser, accesskey allows a user to immediately jump (set focus) to a specific element on a web page via a keyboard-shortcut.

      As of ICEfaces 4.0, the following ACE components support accesskey:
      - autoCompleteEntry
      - comboBox
      - maskedEntry
      - simpleSelectOneMenu
      - textEntry
      - themeSelect

      In ICEfaces 3 ace:checkboxButton, ace:pushButton, ace:radioButton, and ace:linkButton also supported accesskey, however, their support was lost when certain "unsupported" HTML passthrough attributes were removed from their TLDs in 4.0.

      This JIRA is to add support for the "accesskey" attribute to the following additional ACE components:
      - accordionPane (focus on toggle button)
      - audioPlayer (focus on audio element, actual keyboard support varies by browser)
      - breadcrumbMenu (focus on menu/first focussable element)
      - cellEditor (focus on editor pencil or checkmark button)
      - checkboxButton (focus on button)
      - columm (focus on filter input if rendered, else asc sort button control if rendered) (ICE-10642)
      - dataExporter (focus on button)
      - dataTable (focus on dataTable body)
      - dataTable Paginator (requires keyboard navigation for Paginator)
      - dateTimeEntry (focus on popup entry field only until full keyboard nav support is added to dateTimeEntry)
      - dynamicResource (focus on link, image, or button)
      - fileEntry (focus on Select Files button when multiple=false, need keyboard support for multiple=true)
      - gMap (focus on map viewer)
      - gMapAutoComplete (focus on input element)
      - linkButton (focus on button)
      - menuButton (focus on button)
      - menuItem (focus on menuItem, or not feasible action on menuItem)
      - pushButton (focus on button)
      - radioButton (focus on button)
      - richTextEntry (focus on editable region).
      - selectMenu (focus on input)
      - sliderEntry (focus on slider shuttle)
      - tableConfigPanel (focus on button)
      - tabPane (focus on tab header, requires keyboard navigation support on tabPane - ICE-10643)
      - textAreaEntry (focus on input component)
      - tree (focus on tree body)
      - videoPlayer (focus on video element actual keyboard support varies by browser)

        Issue Links

          Activity

          Hide
          Arturo Zambrano added a comment - - edited

          r48509: added 'accesskey' attribute support to 20 ACE components

          There are still 7 components left (datatable paginator, column, row editor, breadcrumb menu, fileentry, richtextentry, silderentry, tabpane). For these components, supporting accesskey requires a bit more effort, as in some cases the element in question is rendered dynamically from the javascript or might not be always accessible.

          Support for accesskey varies from browser to browser. For example, on Chrome the support is actually very limited. The accesskey attribute is only working for elements that support it in HTML4, even though all elements are supposed to support it in HTML5, and the test page I've been using has the correct HTML5 declaration. I also made sure to make these elements focusable by adding tabindex="0", but this is not working on Chrome. Another issue is that for <a> elements, accesskey not always works. Sometimes it's necessary to first give focus to that <a> element in some other way before being able to use its access key. Sometimes, a different key combination is necessary for these elements (e.g. Alt+Shift+<key> instead of just Alt+<key>). On IE11, for example, everything is working as expected.

          Show
          Arturo Zambrano added a comment - - edited r48509: added 'accesskey' attribute support to 20 ACE components There are still 7 components left (datatable paginator, column, row editor, breadcrumb menu, fileentry, richtextentry, silderentry, tabpane). For these components, supporting accesskey requires a bit more effort, as in some cases the element in question is rendered dynamically from the javascript or might not be always accessible. Support for accesskey varies from browser to browser. For example, on Chrome the support is actually very limited. The accesskey attribute is only working for elements that support it in HTML4, even though all elements are supposed to support it in HTML5, and the test page I've been using has the correct HTML5 declaration. I also made sure to make these elements focusable by adding tabindex="0", but this is not working on Chrome. Another issue is that for <a> elements, accesskey not always works. Sometimes it's necessary to first give focus to that <a> element in some other way before being able to use its access key. Sometimes, a different key combination is necessary for these elements (e.g. Alt+Shift+<key> instead of just Alt+<key>). On IE11, for example, everything is working as expected.
          Hide
          Arturo Zambrano added a comment -

          r48513: added 'accesskey' attribute support to ace:breadcrumbMenu, ace:column, ace:dataTable paginator, ace:rowEditor, ace:fileEntry, ace:richTextEntry, ace:sliderEntry, and ace:tabPane; also made all ace:tabSet tab headers focusable and navigable via the tab key

          Testing notes:

          • Note that the accesskey support was added to the ace:rowEditor component and not to the ace:cellEditor, as mentioned in the description. Those buttons are rendered by the ace:rowEditor component.
          • When testing these components for accesskey, please read the TLD documentation on this attribute to understand how it's supposed to work.
          • Again, Chrome doesn't support giving focus to certain elements, while IE and FF do.
          • Likewise, on some browsers when focusing a link (<a>), the link will be followed or activated automatically, on others it will simply receive focus.
          • On ace:fileEntry, in multiple mode, it's not possible to focus the input element, since it's hidden. So, you won't see an outline. The styling was enhanced to apply an on-hover styling to the Add button, to give a signal that this component has focus.
          Show
          Arturo Zambrano added a comment - r48513: added 'accesskey' attribute support to ace:breadcrumbMenu, ace:column, ace:dataTable paginator, ace:rowEditor, ace:fileEntry, ace:richTextEntry, ace:sliderEntry, and ace:tabPane; also made all ace:tabSet tab headers focusable and navigable via the tab key Testing notes: Note that the accesskey support was added to the ace:rowEditor component and not to the ace:cellEditor, as mentioned in the description. Those buttons are rendered by the ace:rowEditor component. When testing these components for accesskey, please read the TLD documentation on this attribute to understand how it's supposed to work. Again, Chrome doesn't support giving focus to certain elements, while IE and FF do. Likewise, on some browsers when focusing a link (<a>), the link will be followed or activated automatically, on others it will simply receive focus. On ace:fileEntry, in multiple mode, it's not possible to focus the input element, since it's hidden. So, you won't see an outline. The styling was enhanced to apply an on-hover styling to the Add button, to give a signal that this component has focus.
          Hide
          Liana Munroe added a comment -

          The following components have been found with the accesskey not working manually on Chrome:
          accordionPane
          audioPlayer
          column
          dataTable
          dataTable paginator
          maskedEntry
          selectMenu
          sliderEntry
          tableConfigPanel
          textEntry
          themeSelect
          tree
          videoPlayer

          Show
          Liana Munroe added a comment - The following components have been found with the accesskey not working manually on Chrome: accordionPane audioPlayer column dataTable dataTable paginator maskedEntry selectMenu sliderEntry tableConfigPanel textEntry themeSelect tree videoPlayer
          Hide
          Ken Fyten added a comment -

          That's a pretty big list. Art, are all these components unable to be supported in Chrome, or just some of them? We need to document these as Known Issues for ones we cannot fix in the TLDdoc for each component.

          Show
          Ken Fyten added a comment - That's a pretty big list. Art, are all these components unable to be supported in Chrome, or just some of them? We need to document these as Known Issues for ones we cannot fix in the TLDdoc for each component.
          Hide
          Arturo Zambrano added a comment -

          Well, I'll go over each of them and try to find a way to make it work on Chrome or to determine that it's not possible and document it.

          Show
          Arturo Zambrano added a comment - Well, I'll go over each of them and try to find a way to make it work on Chrome or to determine that it's not possible and document it.
          Hide
          Arturo Zambrano added a comment -

          I went over the list above, and this is what I found:

          These components actually work for me on Chrome. I tested them by adding accesskey="x" to their demo pages in the showcase application: accordionPane, column, maskedEntry, tableConfigPanel, textEntry, and themeSelect.

          Please re-test, and if they still don't work, please explain how exactly you're testing them.

          There's nothing we can do about these four components, because their tags are simply not focusable on Chrome: audioPlayer (<audio>), dataTable (<tbody>), tree (<span>), videoPlayer (<video>).

          As for the paginator controls, selectMenu and sliderEntry, they should work, since they use the <a> element, but for some reason it's not working. I've tried various things with no success. The selectMenu actually works, but you have to focus it first by another means (e.g. tabbing). The only thing left to try for the other two components is to add an onkeydown listener on the document and force focus on these elements when pressing the right key combination for the accesskey on Chrome.

          Show
          Arturo Zambrano added a comment - I went over the list above, and this is what I found: These components actually work for me on Chrome. I tested them by adding accesskey="x" to their demo pages in the showcase application: accordionPane, column, maskedEntry, tableConfigPanel, textEntry, and themeSelect. Please re-test, and if they still don't work, please explain how exactly you're testing them. There's nothing we can do about these four components, because their tags are simply not focusable on Chrome: audioPlayer (<audio>), dataTable (<tbody>), tree (<span>), videoPlayer (<video>). As for the paginator controls, selectMenu and sliderEntry, they should work, since they use the <a> element, but for some reason it's not working. I've tried various things with no success. The selectMenu actually works, but you have to focus it first by another means (e.g. tabbing). The only thing left to try for the other two components is to add an onkeydown listener on the document and force focus on these elements when pressing the right key combination for the accesskey on Chrome.
          Hide
          Liana Munroe added a comment -

          Retested accordionPane, column, maskedEntry, tableConfigPanel, textEntry, and themeSelect with Chrome 50.

          accordionPane, column, maskedEntry, textEntry, themeSelect all work when using Alt + "letter". Sometimes you have to click on the page first before using the accesskey.
          tableConfigPanel does not work consistently for me. Using Alt + "letter" does not regularly open the panel on first try. Once the panel has been opened using the accesskey will open and close it consistently.
          Test case /views/configPanelTest.jsf
          http://dev.icesoft.com/svn/repo/qa/trunk/Regression-Icefaces4/Sparkle/Nightly/dataTable

          Show
          Liana Munroe added a comment - Retested accordionPane, column, maskedEntry, tableConfigPanel, textEntry, and themeSelect with Chrome 50. accordionPane, column, maskedEntry, textEntry, themeSelect all work when using Alt + "letter". Sometimes you have to click on the page first before using the accesskey. tableConfigPanel does not work consistently for me. Using Alt + "letter" does not regularly open the panel on first try. Once the panel has been opened using the accesskey will open and close it consistently. Test case /views/configPanelTest.jsf http://dev.icesoft.com/svn/repo/qa/trunk/Regression-Icefaces4/Sparkle/Nightly/dataTable
          Hide
          Arturo Zambrano added a comment -

          r48640: fixes for using accesskey on Chrome for ace:selectMenu, ace:sliderEntry and the paginator controls in ace:dataTable

          In Chrome, triggering the accesskey on <a> elements actually simulates a click rather than just giving them focus. So, I managed to fix this by adding onclick="this.focus();". I did the same for the tableconfig panel button and also included a fix to avoid triggering the column header where the button is when triggering the accesskey.

          The tests pass as long as the target components receive focus when triggering the accesskey or control is transferred to them. The panels and lists don't have to necessarily pop up. This behaviour is seen only on FF for some reason, but the purpose of accesskey is just limited to giving focus. The panels and lists can be opened by pressing the space key when the component has focus.

          Show
          Arturo Zambrano added a comment - r48640: fixes for using accesskey on Chrome for ace:selectMenu, ace:sliderEntry and the paginator controls in ace:dataTable In Chrome, triggering the accesskey on <a> elements actually simulates a click rather than just giving them focus. So, I managed to fix this by adding onclick="this.focus();". I did the same for the tableconfig panel button and also included a fix to avoid triggering the column header where the button is when triggering the accesskey. The tests pass as long as the target components receive focus when triggering the accesskey or control is transferred to them. The panels and lists don't have to necessarily pop up. This behaviour is seen only on FF for some reason, but the purpose of accesskey is just limited to giving focus. The panels and lists can be opened by pressing the space key when the component has focus.
          Hide
          Arturo Zambrano added a comment -

          r48665: removed onclick="this.focus()" on inactive page links, since it's actually not necessary for accesskey to work properly on Chrome and was causing the regression described in ICE-11010

          Show
          Arturo Zambrano added a comment - r48665: removed onclick="this.focus()" on inactive page links, since it's actually not necessary for accesskey to work properly on Chrome and was causing the regression described in ICE-11010
          Hide
          Carmen Cristurean added a comment -

          The changes for ace:richTextEntry appear to cause a regression on showcase > RichTextEntry: a button is rendered underneath the richTextEntry component (all servers/ all browsers), screen shot attached.

          Show
          Carmen Cristurean added a comment - The changes for ace:richTextEntry appear to cause a regression on showcase > RichTextEntry: a button is rendered underneath the richTextEntry component (all servers/ all browsers), screen shot attached.
          Hide
          Arturo Zambrano added a comment -

          r48674: modification to always render the styling that makes the accesskey proxy button invisible and unusable for anything else but to transfer focus to the CKEditor

          Show
          Arturo Zambrano added a comment - r48674: modification to always render the styling that makes the accesskey proxy button invisible and unusable for anything else but to transfer focus to the CKEditor
          Hide
          Carmen Cristurean added a comment - - edited

          EE4-trunk r45005/48674/ IE8/11, FF41, Chrome50, MS Edge: verified showcase > richTextEntry, the issue mentioned above is resolved.

          On MS Edge/Windows10 test PC, a browser console error was seen when saving text in the richTextEntry - see ICE-10988.

          Show
          Carmen Cristurean added a comment - - edited EE4-trunk r45005/48674/ IE8/11, FF41, Chrome50, MS Edge: verified showcase > richTextEntry, the issue mentioned above is resolved. On MS Edge/Windows10 test PC, a browser console error was seen when saving text in the richTextEntry - see ICE-10988 .
          Hide
          Arturo Zambrano added a comment -

          The issue above seems unrelated to these changes. Do you know what was the last revision where this wasn't an issue?

          Show
          Arturo Zambrano added a comment - The issue above seems unrelated to these changes. Do you know what was the last revision where this wasn't an issue?
          Hide
          Liana Munroe added a comment -

          ICEfaces 4 trunk r 48675. Also tested with Jenkins build 1857 where the initial commits were made for the accesskeys.
          gMap > accesskey > all browsers - map component does not appear to gain focus when using the accesskey in any browser. When viewing the page markup there is no accesskey attribute associated with the gMap. This is only the case for the gMap component. Not an issue with the gMap autoComplete.

          Show
          Liana Munroe added a comment - ICEfaces 4 trunk r 48675. Also tested with Jenkins build 1857 where the initial commits were made for the accesskeys. gMap > accesskey > all browsers - map component does not appear to gain focus when using the accesskey in any browser. When viewing the page markup there is no accesskey attribute associated with the gMap. This is only the case for the gMap component. Not an issue with the gMap autoComplete.
          Hide
          Arturo Zambrano added a comment -

          r48694: fix to make accesskey work on Chrome for ace:gMap; moved attribute to parent node, which doesn't get replaced by the Google Maps code

          Note that for ace:gMap, having focus doesn't imply that the map can be controlled that way.

          Show
          Arturo Zambrano added a comment - r48694: fix to make accesskey work on Chrome for ace:gMap; moved attribute to parent node, which doesn't get replaced by the Google Maps code Note that for ace:gMap, having focus doesn't imply that the map can be controlled that way.
          Hide
          Liana Munroe added a comment -

          Verified ICEfaces EE-4.1.0 r48694. Tomcat 8, IE Edge, 11, 10, 9, 8, Chrome 50, FF 43.

          Show
          Liana Munroe added a comment - Verified ICEfaces EE-4.1.0 r48694. Tomcat 8, IE Edge, 11, 10, 9, 8, Chrome 50, FF 43.

            People

            • Assignee:
              Arturo Zambrano
              Reporter:
              Ken Fyten
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: