264 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			264 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <html>
 | |
| <head>
 | |
| <title>Tabbed UI</title>
 | |
| <style type="text/css">
 | |
| .tab {
 | |
|   color: navy;
 | |
|   background-color: lightgrey;
 | |
|   border: thin solid navy;
 | |
|   text-align: center;
 | |
|   font: 9pt Verdana,sans-serif;
 | |
|   padding: 4px;
 | |
|   padding-left: 2em;
 | |
|   padding-right: 2em;
 | |
| }
 | |
| 
 | |
| .tabActive {
 | |
|   color:black;
 | |
|   font-weight:bold;
 | |
|   border:thin dashed black;
 | |
|   background-color: beige;
 | |
|   border-bottom: thin solid beige;
 | |
|   border-left: thin solid navy;
 | |
|   border-top: thin solid navy;
 | |
|   border-right: thin solid navy;
 | |
| }
 | |
| 
 | |
| div[aria-hidden="true"] { display: none; }
 | |
| 
 | |
| .panel {
 | |
|   position: relative;
 | |
|   top: 3px;
 | |
|   background-color: beige;
 | |
|   color: navy;
 | |
|   width: 95%;
 | |
|   height: 85%;
 | |
|   font: 12pt Verdana,sans-serif;
 | |
|   border: thin solid navy;
 | |
|   padding: 10px;
 | |
|   overflow: auto;
 | |
| }
 | |
| 
 | |
| </style>
 | |
| 
 | |
| <script>
 | |
| <!--
 | |
| // global to store the item to be focused
 | |
| gFocusItem = null;
 | |
| 
 | |
| function doFocus()
 | |
| {
 | |
|     if (gFocusItem != null) {
 | |
|       gFocusItem.focus();
 | |
|       gFocusItem=null;
 | |
|     }
 | |
| }
 | |
| 
 | |
| var KEY_UP = 38;
 | |
| var KEY_DOWN = 40;
 | |
| var KEY_LEFT = 37;
 | |
| var KEY_RIGHT = 39;
 | |
| var KEY_ESCAPE = 27;
 | |
| var KEY_M = 77;
 | |
| var KEY_F10 = 121;
 | |
| var KEY_SPACE = 32;
 | |
| var KEY_TAB = 9;
 | |
| var KEY_PAGEUP = 33;
 | |
| var KEY_PAGEDOWN = 34;
 | |
| 
 | |
| // globals to store current tab information
 | |
| var gCurrentTabNum = -1;
 | |
| var gNumTabs = 5;
 | |
| 
 | |
| function selectTab(nextTabNum)
 | |
| {
 | |
|   var newTab = document.getElementById("tab" + nextTabNum);
 | |
|   gFocusItem = newTab;
 | |
|   setTimeout("doFocus()", 0);
 | |
| }
 | |
| 
 | |
| function doNavigation(event)
 | |
| {
 | |
|   var key = event.keyCode; //alert(key);
 | |
|   var bEventContinue = true;
 | |
|   var nextTabNum;
 | |
|   var bDoNextTab = true;  // requires less code if init to true
 | |
|   var bCtrlKey = event.ctrlKey;
 | |
|   var bAltKey = event.altKey;
 | |
|   var direction = 0;
 | |
|   var bCycle = false;
 | |
|   if ((key == KEY_LEFT || key == KEY_RIGHT) && !bAltKey) {
 | |
|     bCycle = false;
 | |
|     bEventContinue = false;
 | |
|     if (key == KEY_RIGHT) {
 | |
|       direction = 1;
 | |
|     }
 | |
|     else if (key == KEY_LEFT) {
 | |
|       direction = -1;
 | |
|     }
 | |
|   }
 | |
|   else if (bCtrlKey && event.shiftKey) {
 | |
|     bCycle = true;  //ctrl-shift-pageup, ctrl-shift-pagedown,
 | |
|     switch (key) {
 | |
|     case KEY_PAGEUP:
 | |
|       direction = -1;
 | |
|       break;
 | |
|     case KEY_PAGEDOWN:
 | |
|       direction = 1;
 | |
|       break;
 | |
|     default:
 | |
|       bDoNextTab = false;
 | |
|       break;
 | |
|     } // end switch
 | |
|   } // end of if ctrlKey and shiftKey
 | |
|   else {
 | |
|     // not a key we care about
 | |
|     bDoNextTab = false;
 | |
|   }
 | |
| 
 | |
|   if (bDoNextTab == true) {
 | |
|     if (direction > 0) {
 | |
|       nextTabNum = gCurrentTabNum + 1;
 | |
|     }
 | |
|     else if  (direction < 0) {
 | |
|       nextTabNum = gCurrentTabNum -1;
 | |
|     }
 | |
|     if (nextTabNum == gNumTabs && bCycle == true) {
 | |
|       nextTabNum = 0;
 | |
|     }
 | |
|     else if (nextTabNum < 0 && bCycle == true) {
 | |
|       nextTabNum = gNumTabs -1;
 | |
|     }
 | |
|     else if ((nextTabNum == gNumTabs || nextTabNum < 0) && bCycle == false)  {
 | |
|       bDoNextTab = false; // do nothing
 | |
|     }
 | |
|     // test again - last section may have changed value of bDoNextTab
 | |
|     if (bDoNextTab == true)  {
 | |
|       selectTab(nextTabNum);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return bEventContinue;
 | |
| }
 | |
| 
 | |
| function handleFocus(event)
 | |
| {
 | |
|   var newTab = event.target;
 | |
|   if (newTab.getAttribute("role") != "tab")
 | |
|     return;
 | |
| 
 | |
|   newTabNum = parseInt(newTab.id.charAt(3));
 | |
|   if (newTabNum == gCurrentTabNum)
 | |
|     return;
 | |
| 
 | |
|   if (gCurrentTabNum >= 0) {
 | |
|     var curTab = document.getElementById("tab" + gCurrentTabNum);
 | |
|     var curPanel = document.getElementById("panel" + gCurrentTabNum);
 | |
|     curPanel.setAttribute("aria-hidden", "true");
 | |
|     curPanel.className += ""; // Force refresh of attribute selectors
 | |
|     curTab.setAttribute("class", "tab");
 | |
|     curTab.tabIndex = "-1";
 | |
|   }
 | |
| 
 | |
|   var newTab = document.getElementById("tab" + newTabNum);
 | |
|   var newPanel = document.getElementById("panel" + newTabNum);
 | |
|   newPanel.removeAttribute("aria-hidden");
 | |
|   newPanel.className += ""; // Force refresh of attribute selectors
 | |
|   newTab.setAttribute("class", "tab tabActive");
 | |
|   newTab.tabIndex = "0";
 | |
| 
 | |
|   gCurrentTabNum = newTabNum;
 | |
| }
 | |
| 
 | |
| -->
 | |
| </script>
 | |
| <style type="text/css"></style></head>
 | |
| <body onload="selectTab(0);">
 | |
| <div role="tablist" onkeydown="return doNavigation(event);">
 | |
|   <span id="tab0" tabindex="0" class="tab tabActive" role="tab" onclick="selectTab(0);" onfocus="handleFocus(event);">
 | |
|     Tab Zero
 | |
|   </span>
 | |
|   <span id="tab1" tabindex="-1" class="tab" role="tab" onclick="selectTab(1);" onfocus="handleFocus(event);">
 | |
|     Tab One
 | |
|   </span>
 | |
|   <span id="tab2" tabindex="-1" class="tab" role="tab" onclick="selectTab(2);" onfocus="handleFocus(event);">
 | |
|     Tab Two
 | |
|   </span>
 | |
|   <span id="tab3" tabindex="-1" class="tab" role="tab" onclick="selectTab(3);" onfocus="handleFocus(event);">
 | |
|     Tab Three
 | |
|   </span>
 | |
|   <span id="tab4" tabindex="-1" class="tab" role="tab" onclick="selectTab(4);" onfocus="handleFocus(event);">
 | |
|     Tab Four
 | |
|   </span>
 | |
| </div>
 | |
| 
 | |
| <div id="tabpanels" role="presentation">
 | |
|   <div id="panel0" class="panel" tabindex="-1" role="tabpanel" aria-labelledby="tab0">
 | |
|     <span>Panel 0</span>
 | |
|     <p>This example requires Firefox 3 or later to work with screen readers -- it
 | |
|        uses ARIA properties without namespaces, which is now the correct
 | |
|        markup.</p>
 | |
|     <div>Use tab key to reach the tab. Once a tab has focus use:
 | |
|       <ul>
 | |
|         <li>left and right arrows to move from tab to tab. Panel is made visible when
 | |
|             tab gets focus. Arrow keys do not cycle around the tabs</li>
 | |
|         <li>ctrl-left and ctrl-right arrows behave the same as left and right arrows</li>
 | |
|         <li>ctrl-shift-pageup / ctrl-shift-pagedown is the same as left and right arrows but WILL
 | |
|             cycle around the tab order (shift was added as a modifier so as not to
 | |
|             conflict with the Firefox tabbing keys)</li>
 | |
|         <li>Ctrl-shift-tab /ctrl-tab are not implemented since these keys conflict with browser tab switching keys.</li>
 | |
|       </ul>
 | |
|     </div>
 | |
|   </div>
 | |
| 
 | |
|   <div id="panel1" class="panel" tabindex="-1" role="tabpanel" aria-hidden="true" aria-labelledby="tab1">
 | |
|     <span>Panel 1</span>
 | |
|     <div>Some fields on the panel </div>
 | |
|     <div>
 | |
|       <p>Enter month and year: <label for="month">Select Month</label>
 | |
|       <select id="month">
 | |
|       <option value="1">01</option>
 | |
|       <option value="2">02</option>
 | |
|       <option value="3">03</option>
 | |
|       <option value="4">04</option>
 | |
|       <option value="5">05</option>
 | |
|       <option value="6">06</option>
 | |
|       <option value="7">07</option>
 | |
|       <option value="8">08</option>
 | |
|       <option value="9">09</option>
 | |
|       <option value="10">10</option>
 | |
|       <option value="11">11</option>
 | |
|       <option value="12">12</option>
 | |
|       </select>
 | |
|       <label for="year">Select Year</label>
 | |
|       <select id="year">
 | |
|       <option value="2004">2004</option>
 | |
|       <option value="2005">2005</option>
 | |
|       <option value="2006">2006</option>
 | |
|       </select>
 | |
|       </p>
 | |
|     </div>
 | |
|   </div>
 | |
| 
 | |
|   <div id="panel2" class="panel" role="tabpanel" aria-hidden="true" aria-labelledby="tab2">
 | |
|     <span>Panel 2</span>
 | |
|     <div>Some fields on the panel</div>
 | |
|     <div>
 | |
|         <input id="internal" name="urlType" value="internal" checked="true" type="radio"><label for="internal">Internal Portal Bookmark</label>
 | |
|         <input id="external" name="urlType" value="external" type="radio"><label for="external">External URL</label>
 | |
|         <br><label for="externalAssoc">URL: </label><input id="externalAssoc" value="" type="text">
 | |
|         <hr>
 | |
|     </div>
 | |
|   </div>
 | |
| 
 | |
|   <div id="panel3" class="panel" role="tabpanel" aria-hidden="true" aria-labelledby="tab3">
 | |
|     <span>Panel 3</span>
 | |
|   </div>
 | |
| 
 | |
|   <div id="panel4" class="panel" role="tabpanel" aria-hidden="true" aria-labelledby="tab4">
 | |
|     <span>Panel 4</span>
 | |
|   </div>
 | |
| </div> 
 | |
| </body>
 | |
| </html>
 |