of Simon Willison (see comments by Simon below).
Small fixes by J.Dobrowolski for Front Accounting May 2008
Description:
-
+
Uses css selectors to apply javascript behaviours to enable
unobtrusive javascript in html documents.
-
- Usage:
-
+
+ Usage:
+
var myrules = {
'b.someclass' : function(element){
element.onclick = function(){
}
}
};
-
+
Behaviour.register(myrules);
-
+
// Call Behaviour.apply() to re-apply the rules (if you
// update the dom, etc).
License:
-
+
This file is entirely BSD licensed.
-
+
More information:
-
+
http://ripcord.co.nz/behaviour/
-
-*/
+
+*/
var Behaviour = {
list : new Array,
-
+
register : function(sheet){
Behaviour.list.push(sheet);
},
-
+
start : function(){
Behaviour.addLoadEvent(function(){
Behaviour.apply();
});
},
-
+
apply : function(){
for (h=0;sheet=Behaviour.list[h];h++){
for (selector in sheet){
var sels = selector.split(',');
for (var n = 0; n < sels.length; n++) {
list = document.getElementsBySelector(sels[n]);
-
+
if (!list){
continue;
}
}
}
},
-
+
addLoadEvent : function(func){
var oldonload = window.onload;
-
+
if (typeof window.onload != 'function') {
window.onload = func;
} else {
document.getElementsBySelector(selector)
- returns an array of element objects from the current document
- matching the CSS selector. Selectors can contain element names,
+ matching the CSS selector. Selectors can contain element names,
class names and ids and can be nested. For example:
-
+
elements = document.getElementsBySelect('div#main p a.external')
-
- Will return an array of all 'a' elements with 'external' in their
- class attribute that are contained inside 'p' elements that are
+
+ Will return an array of all 'a' elements with 'external' in their
+ class attribute that are contained inside 'p' elements that are
contained inside the 'div' element which has id="main"
New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
Version 0.4 - Simon Willison, March 25th 2003
-- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
- -- Opera 7 fails
+ -- Opera 7 fails
*/
function getAllChildren(e) {
var tokens = selector.split(' ');
var currentContext = new Array(document);
for (var i = 0; i < tokens.length; i++) {
- token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
+ token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');
if (token.indexOf('#') > -1) {
// Token is an ID selector
var bits = token.split('#');
continue; // Skip to next token
}
// Code to deal with attribute selectors
-/* Original reg expression /^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
+/* Original reg expression /^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
was replaced by new RegExp() cuz compressor fault */
if (token.match(new RegExp('^(\\w*)\\[(\\w+)([=~\\|\\^\\$\\*]?)=?"?([^\\]"]*)"?\\]$'))) {
var tagName = RegExp.$1;
case '=': // Equality
checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
break;
- case '~': // Match one of space seperated words
+ case '~': // Match one of space seperated words
checkFunction = function(e) { var a=e.getAttribute(attrName); return (a && a.match(new RegExp('\\b'+attrValue+'\\b'))); };
break;
case '|': // Match start with value followed by optional hyphen
// alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
continue; // Skip to next token
}
-
+
if (!currentContext[0]){
return;
}
-
+
// If we get here, token is JUST an element (not a class or ID selector)
tagName = token;
var found = new Array;
return currentContext;
}
-/* That revolting regular expression explained
+/* That revolting regular expression explained
/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
\---/ \---/\-------------/ \-------/
| | | |
| | | The value
| | ~,|,^,$,* or =
- | Attribute
+ | Attribute
Tag
*/
global $Refs;
if (!is_date($_POST['CreditDate'])) {
- display_error(_("The entered date is invalid."));;
+ display_error(_("The entered date is invalid."));
set_focus('CreditDate');
return false;
} elseif (!is_date_in_fiscalyear($_POST['CreditDate'])) {
if ($_SESSION['Items']->trans_no==0) {
if (!$Refs->is_valid($_POST['ref'], ST_CUSTCREDIT)) {
- display_error(_("You must enter a reference."));;
+ display_error(_("You must enter a reference."));
set_focus('ref');
return false;
}
}
if (!check_num('ChargeFreightCost', 0)) {
- display_error(_("The entered shipping cost is invalid or less than zero."));;
+ display_error(_("The entered shipping cost is invalid or less than zero."));
set_focus('ChargeFreightCost');
return false;
}