36 lines
994 B
JavaScript
36 lines
994 B
JavaScript
NW.Dom.shortcuts = (function() {
|
|
|
|
// match missing R/L context
|
|
var nextID = 0,
|
|
reLeftContext = /^[\x20\t\n\r\f]*[>+~]/,
|
|
reRightContext = /[>+~][\x20\t\n\r\f]*$/;
|
|
|
|
return function(selector, from, alt) {
|
|
|
|
// add left context if missing
|
|
if (reLeftContext.test(selector)) {
|
|
if (from.nodeType == 9) {
|
|
selector = '* ' + selector;
|
|
} else if (/html|body/i.test(from.nodeName)) {
|
|
selector = from.nodeName + ' ' + selector;
|
|
} else if (alt) {
|
|
selector = NW.Dom.shortcuts(selector, alt);
|
|
} else if (from.nodeType == 1 && from.id) {
|
|
selector = '#' + from.id + ' ' + selector;
|
|
} else {
|
|
++nextID;
|
|
selector = '#' + (from.id = 'NW' + nextID) + ' ' + selector;
|
|
//NW.Dom.emit('Unable to resolve a context for the shortcut selector "' + selector + '"');
|
|
}
|
|
}
|
|
|
|
// add right context if missing
|
|
if (reRightContext.test(selector)) {
|
|
selector += ' *';
|
|
}
|
|
|
|
return selector;
|
|
};
|
|
|
|
})();
|