2008-11-09 20:39:12 +00:00
|
|
|
var KeyboardNavigation = {};
|
|
|
|
|
|
|
|
KeyboardNavigation.get_hrefs = function(fields, admin_mode) {
|
|
|
|
var found_properties = {};
|
|
|
|
var any_found = false;
|
|
|
|
var missing_properties = [];
|
|
|
|
|
|
|
|
for (key in fields) {
|
|
|
|
if (fields.hasOwnProperty(key)) {
|
|
|
|
var instructions = fields[key];
|
|
|
|
var found_nodes = $$(instructions);
|
|
|
|
var is_found = false;
|
|
|
|
if (found_nodes.length > 0) {
|
|
|
|
var top_node = $(found_nodes[0]);
|
|
|
|
while (top_node) {
|
|
|
|
if (top_node.href) {
|
|
|
|
found_properties[key] = top_node.href; is_found = true;
|
2009-09-12 20:45:35 +00:00
|
|
|
if (admin_mode) {
|
2008-11-09 20:39:12 +00:00
|
|
|
var highlight_a = new Element("a", { "title": key + ": " + instructions, "href": top_node.href, "style": "display: block; position: absolute; border: solid #f00 1px; background-color: #ff0; z-index: 1" });
|
|
|
|
highlight_a.setOpacity(0.5);
|
|
|
|
highlight_a.clonePosition(top_node);
|
|
|
|
document.body.appendChild(highlight_a);
|
|
|
|
}
|
|
|
|
any_found = true; break;
|
|
|
|
}
|
|
|
|
top_node = top_node.parentNode;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!is_found) {
|
|
|
|
missing_properties.push(key + ": " + instructions);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-09-12 20:45:35 +00:00
|
|
|
if (admin_mode) {
|
2008-11-18 02:00:04 +00:00
|
|
|
if (missing_properties.length > 0) {
|
|
|
|
var message = "[Keyboard Navigation] Missing selectors:\n\n" + missing_properties.join("\n");
|
|
|
|
if (top.console) {
|
|
|
|
top.console.log(message);
|
|
|
|
} else {
|
|
|
|
alert(message);
|
|
|
|
}
|
2008-11-09 20:39:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (any_found) {
|
|
|
|
return found_properties;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
KeyboardNavigation.add_events = function(hrefs) {
|
|
|
|
Event.observe(document, 'keyup', function(e) {
|
2008-12-13 21:03:25 +00:00
|
|
|
if (!(e.ctrlKey || e.altKey || e.metaKey)) {
|
|
|
|
var prop_to_use = null;
|
|
|
|
switch (e.keyCode) {
|
|
|
|
case 37:
|
|
|
|
prop_to_use = (e.shiftKey) ? "first" : "previous";
|
|
|
|
break;
|
|
|
|
case 39:
|
|
|
|
prop_to_use = (e.shiftKey) ? "last" : "next";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (prop_to_use) {
|
|
|
|
if (hrefs[prop_to_use]) { document.location.href = hrefs[prop_to_use]; }
|
|
|
|
}
|
2008-11-09 20:39:12 +00:00
|
|
|
}
|
|
|
|
}, true);
|
|
|
|
|
|
|
|
var i,il;
|
|
|
|
["input","textarea","select"].each(function(type) {
|
|
|
|
var all_type = document.getElementsByTagName(type);
|
|
|
|
for (i = 0, il = all_type.length; i < il; ++i) {
|
|
|
|
Event.observe(all_type[i], 'keyup', function(e) { Event.stop(e); return false; });
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|