Added Luke's patch to re-factor the accesskey-hints.js file using JSON notation.

Fixes #223.



git-svn-id: http://www.rousette.org.uk/svn/tracks-repos/trunk@205 a4c988fc-2ded-0310-b66e-134b36920a42
This commit is contained in:
bsag 2006-03-11 12:19:36 +00:00
parent 0ee4b8f6d1
commit c18db17054
2 changed files with 51 additions and 72 deletions

View file

@ -1,5 +1,5 @@
if @saved
page.remove "item-#{@item.id}-container"
page.remove "item-#{@item.id}-container"
# For some reason, the code below works on the project and context pages, but
# not on the todo/list page when the item being deleted has just been added
# page.visual_effect :fade, "item-#{@item.id}-container", :duration => 0.4

View file

@ -13,78 +13,57 @@
* Use the following markup to include the library:
* <script type="text/javascript" src="access-key-hints.js"></script>
*/
var accessKeyHintsAdder = {
run : function() {
var elemTypes = new Array('a','area','button','input','label','legend','textarea');
for(var i = 0; i < elemTypes.length; i++)
{
this.addHint(document.getElementsByTagName(elemTypes[i]));
}
},
addHint : function(elems) {
var elem;
var i = 0;
addEvent(window, "load", addAccessKeyHints);
processElements:
while(elem = elems.item(i++))
{
var accessKey = elem.getAttributeNode("accesskey");
if (!accessKey || !accessKey.value)
continue processElements;
function addAccessKeyHints()
{
var elemTypes = new Array('a','area','button','input','label','legend','textarea');
for(var i = 0; i < elemTypes.length; i++)
{
addHint(document.getElementsByTagName(elemTypes[i]));
}
var title = elem.getAttributeNode("title");
if (title && title.value)
{
var overrides = new Array('accesskey','alt+','ctrl+');
for (var j=0; j < overrides.length; j++)
{
if (title.value.toLowerCase().indexOf(overrides[j]) != -1)
continue processElements;
}
elem.setAttribute("title", title.value + ' (' + this.getHintText(accessKey.value) + ')');
}
else
{
elem.setAttribute("title", this.getHintText(accessKey.value));
}
}
},
getHintText : function(accessKey) {
return this.getModifier() + '+' + accessKey.toUpperCase();
},
getModifier : function() {
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('mac') == -1)
return 'Alt';
else
return 'Ctrl';
}
}
function addHint(elems)
{
var elem;
var i = 0;
processElements:
while(elem = elems.item(i++))
{
var accessKey = elem.getAttributeNode("accesskey");
if (!accessKey || !accessKey.value)
continue processElements;
var title = elem.getAttributeNode("title");
if (title && title.value)
{
var overrides = new Array('accesskey','alt+','ctrl+');
for (var j=0; j < overrides.length; j++)
{
if (title.value.toLowerCase().indexOf(overrides[j]) != -1)
continue processElements;
}
elem.setAttribute("title", title.value + ' (' + getHintText(accessKey.value) + ')');
}
else
{
elem.setAttribute("title", getHintText(accessKey.value));
}
}
}
function getHintText(accessKey)
{
return getModifier() + '+' + accessKey.toUpperCase();
}
function getModifier()
{
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('mac') == -1)
return 'Alt';
else
return 'Ctrl';
}
// This is a cross-browser function for event addition.
function addEvent(obj, evType, fn)
{
if (obj.addEventListener)
{
obj.addEventListener(evType, fn, false);
return true;
}
else if (obj.attachEvent)
{
var r = obj.attachEvent("on" + evType, fn);
return r;
}
else
{
alert("Event handler could not be attached");
return false;
}
}
Event.observe(window, "load", accessKeyHintsAdder.run.bindAsEventListener(accessKeyHintsAdder));