123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- /********************************************************************************************************************************
- * Licensed Materials - Property of IBM *
- * *
- * IBM Cognos Products: AGS *
- * *
- * (C) Copyright IBM Corp. 2005, 2014 *
- * *
- * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. *
- *********************************************************************************************************************************/
- /*-----------------------------------------------------------------------------------------------------
- Class : AccessibilityHandler
- Description :
- -----------------------------------------------------------------------------------------------------*/
- // Switch for keyboard support: true-turn on, false-turn off
- var m_bSupportAccessibility = false;
- // supported key code Tab-Enter-Esc-Space-Left-Up-Right-Down
- var m_aSupportedKeycode = [9, 13, 27, 32, 37, 38, 39, 40];
- var m_aTabMenuItems;
- var m_aSummaryBarItems;
- var m_oMetadataTree;
- var m_oSourceTab;
- var AccessibilityHandler = {};
- AccessibilityHandler.isEnabled = function () {
- // check if user enable accessibility
- this.checkCookie();
- if(m_bSupportAccessibility && !document.all)
- return true;
- return false;
- }
- AccessibilityHandler.checkCookie = function () {
- var accessibility_cookie = getCookie("AGS_ACCESSIBILITY_ENABLED");
- if (accessibility_cookie != null && accessibility_cookie == "true") {
- m_bSupportAccessibility = true;
- }
- }
- AccessibilityHandler.enableAccessibility = function () {
- var cf = window.parent.getConfigFrame();
- var b_confirm = confirm(cf.enableAccessibility_string);
- if (b_confirm) {
- setCookie("AGS_ACCESSIBILITY_ENABLED","true");
- }
- }
- AccessibilityHandler.disableAccessibility = function () {
- var cf = window.parent.getConfigFrame();
- var b_confirm = confirm(cf.disableAccessibility_string);
- if (b_confirm) {
- setCookie("AGS_ACCESSIBILITY_ENABLED","false");
- }
- }
- AccessibilityHandler.initKeyboard = function () {
- if(this.isEnabled()) {
- this.initTaskMenu();
- this.initTabMenu();
- // register key down handler for CTRL key press
- document.body.onkeydown = this.onkeydown;
- }
- }
- AccessibilityHandler.initTaskMenu = function () {
- var taskMenuHTML = document.getElementById("taskContents_tableID");
- var taskMenuData = new CMenuExtractor(taskMenuHTML,"tr");
- taskMenuData.initTaskMenuItem();
- }
- AccessibilityHandler.initTabMenu = function () {
- var tabMenuHTML = document.getElementById("menuTabs_and_Props");
- var tabMenuData = new CMenuExtractor(tabMenuHTML,"img");
- m_aTabMenuItems = tabMenuData.getTabMenuItems();
- for (var i=0; i<m_aTabMenuItems.length; i++) {
- for (var j=0; j<m_aTabMenuItems[i].length; j++) {
- m_aTabMenuItems[i][j].onkeypress = this.tabMenuKeypress;
- m_aTabMenuItems[i][j].onfocus = this.tabMenuOnfocus;
- m_aTabMenuItems[i][j].onblur = this.tabMenuOnblur;
- }
- }
- }
- AccessibilityHandler.initSummaryBar = function () {
- var summaryBarHTML = document.getElementById("SummaryBarScrollpane");
- var summaryBarData = new CMenuExtractor(summaryBarHTML,"table");
- m_aSummaryBarItems = summaryBarData.getSummaryBarItems();
- for (var i=0; i<m_aSummaryBarItems.length; i++) {
- m_aSummaryBarItems[i].onkeypress = this.summaryBarKeypress;
- }
- // enable summary bar event condition item tabindex value
- m_aSummaryBarItems[0].setAttribute("tabindex", "0");
- }
- AccessibilityHandler.refreshCtrlTabItems = function() {
- // get metadata tree root element
- m_oMetadataTree = document.getElementById("metadataTreelabelText");
- for (var i=0; i< m_aTabMenuItems.length; i++) {
- if (isVisible(m_aTabMenuItems[i][0])) {
- m_oSourceTab = m_aTabMenuItems[i][0];
- break;
- }
- }
- }
- AccessibilityHandler.tabMenuOnfocus = function (evt) {
- this.className = "selectedTabImage";
- }
- AccessibilityHandler.tabMenuOnblur = function (evt) {
- this.className = "normalTabImage";
- }
- AccessibilityHandler.onkeydown = function (evt) {
- evt = (evt) ? evt : ((event) ? event : null);
- var keyCode = evt.keyCode || evt.which;
- // check for Ctrl + Tab key press
- if (keyCode == 9 && evt.ctrlKey) {
-
- AccessibilityHandler.refreshCtrlTabItems();
- // check if metadata tree is visible
- if (isVisible(m_oMetadataTree))
- m_oMetadataTree.focus();
- else
- m_oSourceTab.click();
- }
- }
- AccessibilityHandler.tabMenuKeypress = function (evt) {
- evt = (evt) ? evt : ((event) ? event : null);
- var keyCode = evt.keyCode || evt.which;
- var currentTabMenu, index;
- for (var i=0; i<m_aTabMenuItems.length; i++) {
- if (AccessibilityHandler.contains(m_aTabMenuItems[i], this)) {
- currentTabMenu = m_aTabMenuItems[i];
- for (var j=0; j<currentTabMenu.length; j++) {
- if (this == currentTabMenu[j]) {
- index = j;
- break;
- }
- }
- break;
- }
- }
- AccessibilityHandler.toggleItem(this, currentTabMenu, index, keyCode);
- }
- AccessibilityHandler.summaryBarKeypress = function (evt) {
- evt = (evt) ? evt : ((event) ? event : null);
- var keyCode = evt.keyCode || evt.which;
- var index;
-
- for (var i=0; i<m_aSummaryBarItems.length; i++) {
- if (this == m_aSummaryBarItems[i]) {
- index = i;
- break;
- }
- }
- AccessibilityHandler.toggleItem(this, m_aSummaryBarItems, index, keyCode);
- }
- AccessibilityHandler.toggleItem = function (currentItem,currentMenu,index,keyCode) {
- // check for Right key press
- if (keyCode == 39) {
- if (index != currentMenu.length -1) {
- currentMenu[index + 1].focus();
- }
- }
- // check for Left key press
- else if (keyCode == 37) {
- if (index != 0) {
- currentMenu[index - 1].focus();
- }
- }
- // check for Enter key press
- else if (keyCode == 13) {
- currentItem.click();
- }
- }
- AccessibilityHandler.setTabMenuFocus = function (currentTab) {
- var tab_modelItem = document.getElementById("metadataTreelabelText");
- var tab_dataItem = document.getElementById("agentItemsTree0labelText");
- var tab_functionItem = document.getElementById("functionsTreelabelText");
- var tab_parameterItem = document.getElementById("agentParameterTree0labelText");
- var tab_historyItem = document.getElementById("historyTree0labelText");
- // if currentTab has items, focus on the first one, if not, focus on itself.
- switch (currentTab) {
- case TAB_MODEL:
- if (tab_modelItem != null)
- tab_modelItem.focus();
- else
- m_aTabMenuItems[0][0].focus();
- break;
- case TAB_DATAITEMS:
- if (tab_dataItem != null)
- tab_dataItem.focus();
- else
- m_aTabMenuItems[1][1].focus();
- break;
- case TAB_FUNCTIONS:
- if (tab_functionItem != null)
- tab_functionItem.focus();
- else
- m_aTabMenuItems[2][2].focus();
- break;
- case TAB_PARAMETERS:
- if (tab_parameterItem != null)
- tab_parameterItem.focus();
- else
- m_aTabMenuItems[3][3].focus();
- break;
- case TAB_HISTORY:
- if (tab_historyItem != null)
- tab_historyItem.focus();
- else
- m_aTabMenuItems[4][4].focus();
- break;
- case TAB_MEMBERS:
- m_aTabMenuItems[5][5].focus();
- break;
- }
- }
- AccessibilityHandler.getTabindex = function (item) {
- var parent = item.getParent();
- var current;
- if (parent.getParent() == null) {
- for (var i=0; i<parent.getNumItems(); i++) {
- if (item == parent.get(i)) {
- current = i;
- break;
- }
- }
- }
- if (current != 0)
- return -1;
- else
- return 0;
- }
- AccessibilityHandler.setTabindex = function (item) {
- if (this.isEnabled()) {
- var parent = item.getParent();
- if (parent.getParent() == null) {
- for (var i=0; i<parent.getNumItems(); i++) {
- if (item == parent.get(i)) {
- parent.get(i).enableTabindex();
- }
- else {
- parent.get(i).disableTabindex();
- }
- // just ensure to close the menu when mouse interrupted
- if (parent.get(i).getMenu().isVisible()) {
- parent.get(i).getMenu().remove(true);
- }
- }
- }
- }
- }
- AccessibilityHandler.setRolloverState = function (item) {
- if (this.isEnabled() && item.getMenuType() == "dropDown") {
- var htmlElement;
- var parent = item.getParent();
- for (var i=0; i<parent.getNumItems(); i++) {
- if (item != parent.get(i)) {
- htmlElement = parent.get(i).getHTMLElement();
- htmlElement.className = item.getStyle().getNormalState();
- }
- }
- }
- }
- AccessibilityHandler.isSupportedKeycode = function (keycode) {
- if (this.contains(m_aSupportedKeycode, keycode))
- return true;
- return false;
- }
- AccessibilityHandler.contains = function (array, obj) {
- for (var i = 0; i < array.length; i++) {
- if (array[i] === obj) {
- return true;
- }
- }
- return false;
- }
- AccessibilityHandler.getNextItem = function (item,keyCode) {
- var current, next, first = 0;
- var parent = item.getParent();
- var last = parent.getNumItems()-1;
- var count = 0;
- for (var i=0; i<parent.getNumItems(); i++) {
- if (item == parent.get(i)) {
- current = i;
- break;
- }
- }
-
- // get next item for Right or Down key press
- if (keyCode == 39 || keyCode == 40) {
- next = current + 1;
- if (current == last) {
- next = first;
- }
- while(this.isNextAvailable(parent.get(next))) {
- count ++;
- if (next < last) {
- next = next + 1;
- } else {
- next = first;
- }
- // only retrieve one circle
- if(count == last)
- break;
- }
- }
-
- // get next item for Left or Up key press
- else if (keyCode == 37 || keyCode == 38) {
- next = current - 1;
- if (current == first) {
- next = last;
- }
- while(this.isNextAvailable(parent.get(next))) {
- count ++;
- if (next > first) {
- next = next - 1;
- } else {
- next = last;
- }
- // only retrieve one circle
- if(count == last)
- break;
- }
- }
- return parent.get(next);
- }
- AccessibilityHandler.isNextAvailable = function (item) {
- if (item instanceof CToolbarButton) {
- return false;
- }
- else if (item instanceof CMenuItem && item.getMenuType() == "dynamic") {
- var style = item.getHTMLElement().getAttribute("style");
- if (style == null || style.indexOf("none") == -1) {
- return false;
- }
- }
- else if (item instanceof CMenuItem && item.isVisible()) {
- return false;
- }
- return true;
- }
- function setCookie(c_name,value,expiredays) {
- var exdate = new Date();
- if (expiredays != null) {
- exdate.setDate(exdate.getDate()+expiredays);
- } else {
- exdate.setUTCFullYear(exdate.getUTCFullYear() + 1);
- }
- document.cookie = c_name+ "=" + escape(value) + ";expires=" + exdate.toGMTString();
- }
- function getCookie(c_name) {
- if (document.cookie.length>0) {
- c_start=document.cookie.indexOf(c_name + "=");
- if (c_start!=-1) {
- c_start=c_start + c_name.length+1;
- c_end=document.cookie.indexOf(";",c_start);
- if (c_end==-1) {
- c_end=document.cookie.length;
- }
- return unescape(document.cookie.substring(c_start,c_end));
- }
- }
- return "";
- }
- function isVisible(element) {
- var rect = element.getBoundingClientRect();
- return !!(rect.bottom - rect.top);
- }
|