Axs 1.2 Changelog
C. Blouch
March 10, 2008
This has been tested on Safari 3.2.1 and Firefox 3.0.7 on OSX 10.5 and Firefox 3.0.7, IE 7.0.5730.13 and Safari 3.2.2 on WinXP SP2 and has no known bugs.
Changelog
1.2 - 3/10/2009
Just in time for CSUN we are releasing a new version which rolls up all the features and bugfixes released over the last 12 months or so.
[Bugfix] - axs.log was re-displaying the entire log every time there was a new entry added, causing the ARIA live region attributes to trigger a re-read of the entire log. Rewrote the logger to now insert DOM nodes instead of doing a massive innerHTML update of the container DIV.
[Update] - split the documentation into separate readme, changelog and keychart documents so you don't have to wade through stuff you don't care about.
[New Feature] - This release is now under a standard BSD License so if you or your company is ok with that then you're free to use the library. No more special reviews to verify legality because of our special one-off license terms.
[Update] - added a set of demos showing how all the additional methods work. Updated docs to add a demos table showing which demo makes use of which methods.
[Update] - First run status of the log function now checks the value of axs.log.d rather than the presence of the DIV with the class of _axslog. This should be less compute intensive.
[Update] - The count used to create unique string names in axs.ae is now stored in axs.ae.c instead of the global ae_ct. This makes the ae method self contained.
[Update] - The _keymap var is now axs.keyreg.map, the _keyshift var is now axs.keyreg.shift, the _keyspecial var is now axs.keyreg.special making the axs.keyreg method more self contained.
[Update] - The axs._keyshow, axs._keyls and axs._keylh methods are now anonymous functions inside of axs.keychart, making that method more self contained.
[Update] - Moved all the localization strings into a structure at the end of the axs.js library named to reflect the function which uses the localization. So far it's only axs.keychart which needs localized so all strings are stored in axs.keychart.l10n.string_name where string_name is summary, aption, combo, act, keyshow, linkshow, key, help, css_Hidem, css_hide and css_show.
[Bugfix] axs.hc gave a JS error on Mac or Safari instead of returning a -1 (detection not possible). Fixed.
1.1.16 - 11/04/2008
[New Feature] - axs.md was returning -1 for all failure cases. We now return a -2 if detection does not complete after 2 seconds. This indicates there was some fundamental issue like the md.swf not being at the URL provided or the required version of Flash not being installed.
[Bugfix] - if axs.md fetched md.swf from a foreign domain the security model cut off its ability to communicate results to the JavaScript environment. Added allowScript="always" parameters to embed HTML to stop the madness.
[New Feature] - axs.md now has a configurable value for the URL to md.swf stored in axs.md.url
[Update] - axs.log now has ARIA live region attributes so it should announce any additions if the browser and AT used support it. Tested with FF3 and Jaws 10 with good results.
[Update] - axs.hd now detects if the browser is Safari or on a Mac and returns -1 as we can't detect high contrast mode on these platforms.
[Update] - axs.log had some simplification and optimization to make it smaller and faster.
1.1.15 - 10/31/2008
[New Feature] - axs.md is a new method which uses a tiny flash object to detect whether the MSAA is being used on the host computer.
[Bugfix] - axs.fd was only returning single digits for the detect result in Firefox as we are parsing the plugins array for that browser. Reworked string parsing to return everything before the period and after the space.
[Bugfix] - axs.md used a css style of overflow:hidden on the DIV containing the Flash dtector. Apparently this causes flash to be unable to detect the use of MSAA and adds nothing to the invisible display so it has been removed.
1.1.14 - 10/15/2008
[Bugfix] - axs.fd method and docs updated to support Flash 10.
1.1.13 - 8/26/2008
[New Feature] - axs.flash_xoxo now takes several optional parameters including an object to limit search scope, a class name to search for, a DOM node to put the flash content into and whether to replace the xoxo list with the flash code or the parent (for progressive enhancement).
[Bugfix] - Discovered that the built-in getElementsByClassName is a dynamic array such that modification to the DOM can cause reordering of the array elements. We now copy the results from getElementsByClassName into a static array. This mirrors the behavior of browsers which do not have the native method and eliminates one class of side-effect bugs.
1.1.12 - 8/15/2008>
[New Feature] - axs.flash_xoxo is a new flash embedding function which allows flash setup to be stored in the page as a xoxo micro-formatted list which is later selectively converted to the real object embed.
1.1.11 - 8/13/2008
[Bugfix] - Noted in documentation that the Firefox 3 bugfix for certain key combinations returning a 0 instead of the real keycode has been partly fixed. Remaining bad key combinations are in a new bug #448434 tracked on bugzilla.
1.1.10 - 7/16/2008
[New Feature] - axs.hd detects if the browser is running in high contrast mode and returns true if found or false if not.
1.1.9 - 5/11/2008
[New Feature] - axs.fd is the new Flash detection method which searches for Flash and returns the version installed. Accepts min and max values. If the version found is less than min we return 0 (not found) if greater than max we return max. Defaults for min and max are 6 and 9 respectively.
[New Feature] - after some user testing we discovered that the "click here to hide/show..." text for the keyboard shortcut table was being skipped over by screen reader users because they only paused long enough to head "click here..." and thought it wasn't going to be useful. Reworded link text to say "Keyboard shortcuts - click here to show or hide the keyboard shortcut table" which gets the important text out first.
[New Feature] - axs.fd now stores the results so additional calls will not go through the whole process again. This can be overridden.
[Update] - made axs.log a self-contained function, eliminating the _log variable and replacing it with the axs.log.c var and also eliminating the separate makelog function.
1.1.8 - 4/03/2008
[New Feature] - axs.gecn is the new GetElementByClassName method which searches all the DOM nodes in a given object for ones with a specified class and returns those nodes in an array. Makes use of the native call in browsers which support it (currently only Safari 3.1) and implements an equivalent function for browsers which do not.
1.1.7 - 9/28/2007
[Bugfix] - axs.ae was attaching an anonymous function to the object passed in as o[t]=f where t was an incrementing counter to make each attachment unique. On Windows IE if O["123"]=f will not throw errors and references to o["123"] work fine but o.123 fails. We now append the letter "h" to the beginning of the reference to make sure it starts with a letter. This avoids certain weirdnesses on IE in some situations where the browser seems to use a named method style reference rather than a named array element reference.
[Bugfix] - The demo as it was set up would allow you to move focus to a box and then update the content in the box. As it turns out, if you updated the content of an object that has focus, Jaws will read the old content the first time. After that it announces the new content. The trick appears to be doing a .blur() on the object first, update the content and then move focus back. This tickles Jaws to know that there is new stuff and it announces correctly.
1.1.6 - 9/26/2007
[New Feature] - Now that we are attaching key registrations to either passed in node or the Window object, when the handler function is invoked the This object points to the node. There are times when you might want This to point to something else. We now support passing in another object to axs.keyreg called obj in the package which will be returned to the handler in the This parameter.
[New Feature] - There is a new global var called axs.l10n.keycap_help which can be assigned a string of HTML. This HTML will be appended to the end of the keyboard chart and is intended for help specific to keyboard controls or accessibility.
1.1.5 - 9/14/2007
[Bugfix] - The escape key singleton was not working. Turned out that the array of special keys had it spelt "esc" instead of "escape". Fixed.
[Bugfix] - Based on user feedback we now hide or show the keychart both for screen reader users and visibly. Previously we visibly hid the table but left it visible for accessible technology. Updated l10n header text to reflect this.
1.1.4 - 8/29/2007
[Bugfix] - Apparently IE7 maps some additional keys. Updated keyboard table to be more clear on what keys are already taken for IE6, IE7 and FF. Updated docs to promote using control+alt+key as best practice. Updated demo page and all references to use control+alt combinations
[New Feature] - rather than supplying JS global vars as handles to the keyboard table and the hidden activation link we now put an ID of axs_kt and axs_kl on each of them respectively. This allows CSS to be applied to either one by referencing the ID or JS to manipulate it by using the axs.id construct. This also cuts a bit more JS code out.
[New Feature] - Because we have now migrated all key combinations to control+alt we can now use more reasonable letters for some commands. So the keyboard table, which is really the help page, is now control+alt+h by default and should be reasonably consistent across web apps.
1.1.3 - 8/14/2007
[Bugfix] - On Safari modifying position:absolute via Javascript is extremely buggy so hiding and showing the shortcut table failed. Reworked CSS to use another way to hide text while leaving it accessible to screen readers. This alternate CSS sequence is automatically chosen when on the Mac.
1.1.2 - 8/9/2007
[New Feature] - The key combination and CSS used to hide/show the keyboard combination table is now in the l10n structure which means the combination and descriptive text can be modified if needed before the call to axs.keychart.
[Bugfix] - Discovered that axs._keyshow was defined as both a method and a string which caused they keychart to not hide and show on Safari. Oddly enough other browsers were ok with this error. Moved string into l10n struct.
1.1.1 - 8/8/2007
[New Feature] - When on a Mac we now show "option" instead of "alt" in the keychart since most Mac users know this key on that platform even though some Mac keyboards also label it as "alt".
[Bugfix] - axs.keychart was adding the control+alt+I key combination each time the method was called. In 1.0 version additional registrations for the same key combo would replace previous ones but now they accumulate. Added check to only do it the first time.
[Bugfix] - axs.keychart was not generating the right character from the keycode when the key combination was a single key such as "7" or "P". Found bad reference in the generator loop which was pointing to the loop index instead of the key token.
[Bugfix] - Documented issue with alt-key combinations of Firefox for Mac. Mozilla has fixed in Gecko 1.9 which is basis for Firefox 3.0 slated for release late winter 2007.
1.1 - 8/3/2007
[New Feature] - axs.keyreg now supports attaching keyboard combinations to specific DOM nodes and passes back "this" to the registered handler so it knows which object was focused when the event was triggered. This allows a single generalized function to handle similar events from multiple objects such as rows in a mail list or, in the demo, requests for new content from different boxes.
1.0.5 - 7/30/2007
[New Feature] axs.keyreg now supports attaching multiple anonymous functions to the same object for the same event. This was fixed by the bugfix in axs.ae and showed itself where multiple anonymous functions were attached as global (document) level keyboard handlers.
[Bugfix] Fixed IE bug where axs.ae method did not handle assigning multiple anonymous functions to the same object for the same event. Additional assignments would clobber previous ones. Method was using function itself as an index into the sparse array of methods/functions to call when an event occurs, but when functions were anonymous they were no longer unique, so the second anonymous function added to the same object for the same event clobbered previous assignments. Switched to a global var counter to guarantee uniqueness whether the function is anonymous or not.
1.0.4 - 7/30/2007
[Bugfix] Left out the Insert and Space keys from the list of special tokens.
1.0.3 - 7/23/2007
[Bugfix] Apparently keycode does not equal ascii code for 7 keys: , - . / ? ` \ and '. Instead a weird non-standard value is reported which threw our mapping out. For example, we were expecting code 44 for a comma but non-Opera browsers report 188 instead. We added these keys as tokens to the special list to map them to the non-standard values.
[Bugfix] A similar bug only in IE which only effects the ; and = keys. Added a mapping in _keyget which changes 186 or 187 to 59 or 61 respectively which matches what other browsers report.
1.0.2 - 7/20/2007
[Bugfix] axs.focus was throwing a JS error on NS7. Turns out NS 7 does not support the object.focus() method on nodes other than the usual links and form elements. Wrapped the obj.focus() call to now check if that call is even possible before doing it.
1.0.1 - 6/18/2007
[Bugfix] axs.focus throwing a JS error on IE5.5. Turns out IE 5.5 does not support the object.getAttributeNode method which we use to check if the object already has a tabindex set on IE. We now sniff for this method's presence before attempting to use it, otherwise we don't set a tabindex and just move focus. This means that on IE5.5 if you attempt to move focus to an object which normally doesn't take focus (and needs the tabindex=-1 hack) we won't be able to help you because we can't tell if we're destroying an existing tab index order. Nobody should care about IE 5.5 but apparently it's still in the matrix for WebSuite Lite. At this point we do no harm and throw no errors.
1.0 - 6/5/2007 - Initial release with all known bugs addressed
License
Copyright (c) 2007-2009, AOL LLC
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of the AOL LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.