/** * Javascript patterns * * @author Craig Campbell * @version 1.0.7 */ Rainbow.extend('javascript', [ /** * matches $. or $( */ { 'name': 'selector', 'pattern': /(\s|^)\$(?=\.|\()/g }, { 'name': 'support', 'pattern': /\b(window|document)\b/g }, { 'matches': { 1: 'support.property' }, 'pattern': /\.(length|node(Name|Value))\b/g }, { 'matches': { 1: 'support.function' }, 'pattern': /(setTimeout|setInterval)(?=\()/g }, { 'matches': { 1: 'support.method' }, 'pattern': /\.(getAttribute|push|getElementById|getElementsByClassName|log|setTimeout|setInterval)(?=\()/g }, { 'matches': { 1: 'support.tag.script', 2: [ { 'name': 'string', 'pattern': /('|")(.*?)(\1)/g }, { 'name': 'entity.tag.script', 'pattern': /(\w+)/g } ], 3: 'support.tag.script' }, 'pattern': /(<\/?)(script.*?)(>)/g }, /** * matches any escaped characters inside of a js regex pattern * * @see https://github.com/ccampbell/rainbow/issues/22 * * this was causing single line comments to fail so it now makes sure * the opening / is not directly followed by a * * * @todo check that there is valid regex in match group 1 */ { 'name': 'string.regexp', 'matches': { 1: 'string.regexp.open', 2: { 'name': 'constant.regexp.escape', 'pattern': /\\(.){1}/g }, 3: 'string.regexp.cclose', 4: 'string.regexp.modifier' }, 'pattern': /(\/)(?!\*)(.+)(\/)([igm]{0,3})/g }, /** * matches runtime function declarations */ { 'matches': { 1: 'storage', 3: 'entity.function' }, 'pattern': /(var)?(\s|^)(.*)(?=\s?=\s?function\()/g }, /** * matches constructor call */ { 'matches': { 1: 'keyword', 2: 'entity.function' }, 'pattern': /(new)\s+(.*)(?=\()/g }, /** * matches any function call in the style functionName: function() */ { 'name': 'entity.function', 'pattern': /(\w+)(?=:\s{0,}function)/g } ]);