| 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; |
| }; |
| |
| })(); |