vega-event-selector
Advanced tools
Comparing version 2.0.0 to 2.0.1
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
(factory((global.vega = global.vega || {}))); | ||
}(this, (function (exports) { 'use strict'; | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
(global = global || self, factory(global.vega = {})); | ||
}(this, function (exports) { 'use strict'; | ||
/** | ||
* Parse an event selector string. | ||
* Returns an array of event stream definitions. | ||
*/ | ||
var eventSelector = function(selector, source, marks) { | ||
DEFAULT_SOURCE = source || VIEW; | ||
MARKS = marks || DEFAULT_MARKS; | ||
return parseMerge(selector.trim()).map(parseSelector); | ||
}; | ||
/** | ||
* Parse an event selector string. | ||
* Returns an array of event stream definitions. | ||
*/ | ||
function eventSelector(selector, source, marks) { | ||
DEFAULT_SOURCE = source || VIEW; | ||
MARKS = marks || DEFAULT_MARKS; | ||
return parseMerge(selector.trim()).map(parseSelector); | ||
} | ||
var VIEW = 'view'; | ||
var LBRACK = '['; | ||
var RBRACK = ']'; | ||
var LBRACE = '{'; | ||
var RBRACE = '}'; | ||
var COLON = ':'; | ||
var COMMA = ','; | ||
var NAME = '@'; | ||
var GT = '>'; | ||
var ILLEGAL = /[[\]{}]/; | ||
var DEFAULT_SOURCE; | ||
var MARKS; | ||
var DEFAULT_MARKS = { | ||
'*': 1, | ||
arc: 1, | ||
area: 1, | ||
group: 1, | ||
image: 1, | ||
line: 1, | ||
path: 1, | ||
rect: 1, | ||
rule: 1, | ||
shape: 1, | ||
symbol: 1, | ||
text: 1, | ||
trail: 1 | ||
}; | ||
var VIEW = 'view', | ||
LBRACK = '[', | ||
RBRACK = ']', | ||
LBRACE = '{', | ||
RBRACE = '}', | ||
COLON = ':', | ||
COMMA = ',', | ||
NAME = '@', | ||
GT = '>', | ||
ILLEGAL = /[[\]{}]/, | ||
DEFAULT_SOURCE, | ||
MARKS, | ||
DEFAULT_MARKS = { | ||
'*': 1, | ||
arc: 1, | ||
area: 1, | ||
group: 1, | ||
image: 1, | ||
line: 1, | ||
path: 1, | ||
rect: 1, | ||
rule: 1, | ||
shape: 1, | ||
symbol: 1, | ||
text: 1, | ||
trail: 1 | ||
}; | ||
function isMarkType(type) { | ||
return MARKS.hasOwnProperty(type); | ||
} | ||
function isMarkType(type) { | ||
return MARKS[type]; | ||
} | ||
function find(s, i, endChar, pushChar, popChar) { | ||
var count = 0, | ||
n = s.length, | ||
c; | ||
for (; i<n; ++i) { | ||
c = s[i]; | ||
if (!count && c === endChar) return i; | ||
else if (popChar && popChar.indexOf(c) >= 0) --count; | ||
else if (pushChar && pushChar.indexOf(c) >= 0) ++count; | ||
function find(s, i, endChar, pushChar, popChar) { | ||
var count = 0, | ||
n = s.length, | ||
c; | ||
for (; i<n; ++i) { | ||
c = s[i]; | ||
if (!count && c === endChar) return i; | ||
else if (popChar && popChar.indexOf(c) >= 0) --count; | ||
else if (pushChar && pushChar.indexOf(c) >= 0) ++count; | ||
} | ||
return i; | ||
} | ||
return i; | ||
} | ||
function parseMerge(s) { | ||
var output = [], | ||
start = 0, | ||
n = s.length, | ||
i = 0; | ||
function parseMerge(s) { | ||
var output = [], | ||
start = 0, | ||
n = s.length, | ||
i = 0; | ||
while (i < n) { | ||
i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE); | ||
output.push(s.substring(start, i).trim()); | ||
start = ++i; | ||
while (i < n) { | ||
i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE); | ||
output.push(s.substring(start, i).trim()); | ||
start = ++i; | ||
} | ||
if (output.length === 0) { | ||
throw 'Empty event selector: ' + s; | ||
} | ||
return output; | ||
} | ||
if (output.length === 0) { | ||
throw 'Empty event selector: ' + s; | ||
function parseSelector(s) { | ||
return s[0] === '[' | ||
? parseBetween(s) | ||
: parseStream(s); | ||
} | ||
return output; | ||
} | ||
function parseSelector(s) { | ||
return s[0] === '[' | ||
? parseBetween(s) | ||
: parseStream(s); | ||
} | ||
function parseBetween(s) { | ||
var n = s.length, | ||
i = 1, | ||
b, stream; | ||
function parseBetween(s) { | ||
var n = s.length, | ||
i = 1, | ||
b, stream; | ||
i = find(s, i, RBRACK, LBRACK, RBRACK); | ||
if (i === n) { | ||
throw 'Empty between selector: ' + s; | ||
} | ||
i = find(s, i, RBRACK, LBRACK, RBRACK); | ||
if (i === n) { | ||
throw 'Empty between selector: ' + s; | ||
} | ||
b = parseMerge(s.substring(1, i)); | ||
if (b.length !== 2) { | ||
throw 'Between selector must have two elements: ' + s; | ||
} | ||
b = parseMerge(s.substring(1, i)); | ||
if (b.length !== 2) { | ||
throw 'Between selector must have two elements: ' + s; | ||
} | ||
s = s.slice(i + 1).trim(); | ||
if (s[0] !== GT) { | ||
throw 'Expected \'>\' after between selector: ' + s; | ||
} | ||
s = s.slice(i + 1).trim(); | ||
if (s[0] !== GT) { | ||
throw 'Expected \'>\' after between selector: ' + s; | ||
} | ||
b = b.map(parseSelector); | ||
b = b.map(parseSelector); | ||
stream = parseSelector(s.slice(1).trim()); | ||
if (stream.between) { | ||
return { | ||
between: b, | ||
stream: stream | ||
}; | ||
} else { | ||
stream.between = b; | ||
} | ||
stream = parseSelector(s.slice(1).trim()); | ||
if (stream.between) { | ||
return { | ||
between: b, | ||
stream: stream | ||
}; | ||
} else { | ||
stream.between = b; | ||
return stream; | ||
} | ||
return stream; | ||
} | ||
function parseStream(s) { | ||
var stream = {source: DEFAULT_SOURCE}, | ||
source = [], | ||
throttle = [0, 0], | ||
markname = 0, | ||
start = 0, | ||
n = s.length, | ||
i = 0, j, | ||
filter; | ||
function parseStream(s) { | ||
var stream = {source: DEFAULT_SOURCE}, | ||
source = [], | ||
throttle = [0, 0], | ||
markname = 0, | ||
start = 0, | ||
n = s.length, | ||
i = 0, j, | ||
filter; | ||
// extract throttle from end | ||
if (s[n-1] === RBRACE) { | ||
i = s.lastIndexOf(LBRACE); | ||
if (i >= 0) { | ||
try { | ||
throttle = parseThrottle(s.substring(i+1, n-1)); | ||
} catch (e) { | ||
throw 'Invalid throttle specification: ' + s; | ||
} | ||
s = s.slice(0, i).trim(); | ||
n = s.length; | ||
} else throw 'Unmatched right brace: ' + s; | ||
i = 0; | ||
} | ||
// extract throttle from end | ||
if (s[n-1] === RBRACE) { | ||
i = s.lastIndexOf(LBRACE); | ||
if (i >= 0) { | ||
try { | ||
throttle = parseThrottle(s.substring(i+1, n-1)); | ||
} catch (e) { | ||
throw 'Invalid throttle specification: ' + s; | ||
} | ||
s = s.slice(0, i).trim(); | ||
n = s.length; | ||
} else throw 'Unmatched right brace: ' + s; | ||
i = 0; | ||
} | ||
if (!n) throw s; | ||
if (!n) throw s; | ||
// set name flag based on first char | ||
if (s[0] === NAME) markname = ++i; | ||
// set name flag based on first char | ||
if (s[0] === NAME) markname = ++i; | ||
// extract first part of multi-part stream selector | ||
j = find(s, i, COLON); | ||
if (j < n) { | ||
source.push(s.substring(start, j).trim()); | ||
start = i = ++j; | ||
} | ||
// extract first part of multi-part stream selector | ||
j = find(s, i, COLON); | ||
if (j < n) { | ||
source.push(s.substring(start, j).trim()); | ||
start = i = ++j; | ||
} | ||
// extract remaining part of stream selector | ||
i = find(s, i, LBRACK); | ||
if (i === n) { | ||
source.push(s.substring(start, n).trim()); | ||
} else { | ||
source.push(s.substring(start, i).trim()); | ||
filter = []; | ||
start = ++i; | ||
if (start === n) throw 'Unmatched left bracket: ' + s; | ||
} | ||
// extract remaining part of stream selector | ||
i = find(s, i, LBRACK); | ||
if (i === n) { | ||
source.push(s.substring(start, n).trim()); | ||
} else { | ||
source.push(s.substring(start, i).trim()); | ||
filter = []; | ||
start = ++i; | ||
if (start === n) throw 'Unmatched left bracket: ' + s; | ||
} | ||
// extract filters | ||
while (i < n) { | ||
i = find(s, i, RBRACK); | ||
if (i === n) throw 'Unmatched left bracket: ' + s; | ||
filter.push(s.substring(start, i).trim()); | ||
if (i < n-1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s; | ||
start = ++i; | ||
} | ||
// extract filters | ||
while (i < n) { | ||
i = find(s, i, RBRACK); | ||
if (i === n) throw 'Unmatched left bracket: ' + s; | ||
filter.push(s.substring(start, i).trim()); | ||
if (i < n-1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s; | ||
start = ++i; | ||
} | ||
// marshall event stream specification | ||
if (!(n = source.length) || ILLEGAL.test(source[n-1])) { | ||
throw 'Invalid event selector: ' + s; | ||
} | ||
// marshall event stream specification | ||
if (!(n = source.length) || ILLEGAL.test(source[n-1])) { | ||
throw 'Invalid event selector: ' + s; | ||
} | ||
if (n > 1) { | ||
stream.type = source[1]; | ||
if (markname) { | ||
stream.markname = source[0].slice(1); | ||
} else if (isMarkType(source[0])) { | ||
stream.marktype = source[0]; | ||
if (n > 1) { | ||
stream.type = source[1]; | ||
if (markname) { | ||
stream.markname = source[0].slice(1); | ||
} else if (isMarkType(source[0])) { | ||
stream.marktype = source[0]; | ||
} else { | ||
stream.source = source[0]; | ||
} | ||
} else { | ||
stream.source = source[0]; | ||
stream.type = source[0]; | ||
} | ||
} else { | ||
stream.type = source[0]; | ||
if (stream.type.slice(-1) === '!') { | ||
stream.consume = true; | ||
stream.type = stream.type.slice(0, -1); | ||
} | ||
if (filter != null) stream.filter = filter; | ||
if (throttle[0]) stream.throttle = throttle[0]; | ||
if (throttle[1]) stream.debounce = throttle[1]; | ||
return stream; | ||
} | ||
if (stream.type.slice(-1) === '!') { | ||
stream.consume = true; | ||
stream.type = stream.type.slice(0, -1); | ||
function parseThrottle(s) { | ||
var a = s.split(COMMA); | ||
if (!s.length || a.length > 2) throw s; | ||
return a.map(function(_) { | ||
var x = +_; | ||
if (x !== x) throw s; | ||
return x; | ||
}); | ||
} | ||
if (filter != null) stream.filter = filter; | ||
if (throttle[0]) stream.throttle = throttle[0]; | ||
if (throttle[1]) stream.debounce = throttle[1]; | ||
return stream; | ||
} | ||
exports.selector = eventSelector; | ||
function parseThrottle(s) { | ||
var a = s.split(COMMA); | ||
if (!s.length || a.length > 2) throw s; | ||
return a.map(function(_) { | ||
var x = +_; | ||
if (x !== x) throw s; | ||
return x; | ||
}); | ||
} | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
exports.selector = eventSelector; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
}))); | ||
})); |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.vega=e.vega||{})}(this,function(e){"use strict";function t(e){return c.hasOwnProperty(e)}function r(e,t,r,n,i){for(var o,s=0,f=e.length;t<f;++t){if(o=e[t],!s&&o===r)return t;i&&i.indexOf(o)>=0?--s:n&&n.indexOf(o)>=0&&++s}return t}function n(e){for(var t=[],n=0,i=e.length,o=0;o<i;)o=r(e,o,w,a+p,h+m),t.push(e.substring(n,o).trim()),n=++o;if(0===t.length)throw"Empty event selector: "+e;return t}function i(e){return"["===e[0]?o(e):s(e)}function o(e){var t,o,s=e.length,f=1;if((f=r(e,f,h,a,h))===s)throw"Empty between selector: "+e;if(2!==(t=n(e.substring(1,f))).length)throw"Between selector must have two elements: "+e;if((e=e.slice(f+1).trim())[0]!==d)throw"Expected '>' after between selector: "+e;return t=t.map(i),(o=i(e.slice(1).trim())).between?{between:t,stream:o}:(o.between=t,o)}function s(e){var n,i,o={source:u},s=[],c=[0,0],l=0,w=0,d=e.length,y=0;if(e[d-1]===m){if(!((y=e.lastIndexOf(p))>=0))throw"Unmatched right brace: "+e;try{c=f(e.substring(y+1,d-1))}catch(t){throw"Invalid throttle specification: "+e}d=(e=e.slice(0,y).trim()).length,y=0}if(!d)throw e;if(e[0]===b&&(l=++y),(n=r(e,y,g))<d&&(s.push(e.substring(w,n).trim()),w=y=++n),(y=r(e,y,a))===d)s.push(e.substring(w,d).trim());else if(s.push(e.substring(w,y).trim()),i=[],(w=++y)===d)throw"Unmatched left bracket: "+e;for(;y<d;){if((y=r(e,y,h))===d)throw"Unmatched left bracket: "+e;if(i.push(e.substring(w,y).trim()),y<d-1&&e[++y]!==a)throw"Expected left bracket: "+e;w=++y}if(!(d=s.length)||v.test(s[d-1]))throw"Invalid event selector: "+e;return d>1?(o.type=s[1],l?o.markname=s[0].slice(1):t(s[0])?o.marktype=s[0]:o.source=s[0]):o.type=s[0],"!"===o.type.slice(-1)&&(o.consume=!0,o.type=o.type.slice(0,-1)),null!=i&&(o.filter=i),c[0]&&(o.throttle=c[0]),c[1]&&(o.debounce=c[1]),o}function f(e){var t=e.split(w);if(!e.length||t.length>2)throw e;return t.map(function(t){var r=+t;if(r!==r)throw e;return r})}var u,c,l="view",a="[",h="]",p="{",m="}",g=":",w=",",b="@",d=">",v=/[[\]{}]/,y={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};e.selector=function(e,t,r){return u=t||l,c=r||y,n(e.trim()).map(i)},Object.defineProperty(e,"__esModule",{value:!0})}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).vega={})}(this,function(e){"use strict";var t,r,n="view",i="[",o="]",s="{",f="}",u=":",c=",",l="@",a=">",h=/[[\]{}]/,p={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};function m(e,t,r,n,i){for(var o,s=0,f=e.length;t<f;++t){if(o=e[t],!s&&o===r)return t;i&&i.indexOf(o)>=0?--s:n&&n.indexOf(o)>=0&&++s}return t}function g(e){for(var t=[],r=0,n=e.length,u=0;u<n;)u=m(e,u,c,i+s,o+f),t.push(e.substring(r,u).trim()),r=++u;if(0===t.length)throw"Empty event selector: "+e;return t}function w(e){return"["===e[0]?function(e){var t,r,n=e.length,s=1;if((s=m(e,s,o,i,o))===n)throw"Empty between selector: "+e;if(2!==(t=g(e.substring(1,s))).length)throw"Between selector must have two elements: "+e;if((e=e.slice(s+1).trim())[0]!==a)throw"Expected '>' after between selector: "+e;if(t=t.map(w),(r=w(e.slice(1).trim())).between)return{between:t,stream:r};r.between=t;return r}(e):function(e){var n,a,p={source:t},g=[],w=[0,0],b=0,d=0,v=e.length,y=0;if(e[v-1]===f){if(!((y=e.lastIndexOf(s))>=0))throw"Unmatched right brace: "+e;try{w=function(e){var t=e.split(c);if(!e.length||t.length>2)throw e;return t.map(function(t){var r=+t;if(r!=r)throw e;return r})}(e.substring(y+1,v-1))}catch(t){throw"Invalid throttle specification: "+e}e=e.slice(0,y).trim(),v=e.length,y=0}if(!v)throw e;e[0]===l&&(b=++y);(n=m(e,y,u))<v&&(g.push(e.substring(d,n).trim()),d=y=++n);if((y=m(e,y,i))===v)g.push(e.substring(d,v).trim());else if(g.push(e.substring(d,y).trim()),a=[],(d=++y)===v)throw"Unmatched left bracket: "+e;for(;y<v;){if((y=m(e,y,o))===v)throw"Unmatched left bracket: "+e;if(a.push(e.substring(d,y).trim()),y<v-1&&e[++y]!==i)throw"Expected left bracket: "+e;d=++y}if(!(v=g.length)||h.test(g[v-1]))throw"Invalid event selector: "+e;v>1?(p.type=g[1],b?p.markname=g[0].slice(1):(x=g[0],r[x]?p.marktype=g[0]:p.source=g[0])):p.type=g[0];var x;"!"===p.type.slice(-1)&&(p.consume=!0,p.type=p.type.slice(0,-1));null!=a&&(p.filter=a);w[0]&&(p.throttle=w[0]);w[1]&&(p.debounce=w[1]);return p}(e)}e.selector=function(e,i,o){return t=i||n,r=o||p,g(e.trim()).map(w)},Object.defineProperty(e,"__esModule",{value:!0})}); |
{ | ||
"name": "vega-event-selector", | ||
"version": "2.0.0", | ||
"version": "2.0.1", | ||
"description": "A CSS-inspired language to select, sequence, and compose DOM events.", | ||
@@ -11,37 +11,17 @@ "keywords": [ | ||
"license": "BSD-3-Clause", | ||
"author": { | ||
"name": "UW Interactive Data Lab", | ||
"url": "http://idl.cs.washington.edu" | ||
}, | ||
"contributors": [ | ||
{ | ||
"name": "Jeffrey Heer", | ||
"url": "http://idl.cs.washington.edu" | ||
}, | ||
{ | ||
"name": "Arvind Satyanarayan", | ||
"url": "http://arvindsatya.com" | ||
} | ||
], | ||
"author": "Arvind Satyanarayan (http://arvindsatya.com)", | ||
"main": "build/vega-event-selector.js", | ||
"module": "index", | ||
"jsnext:main": "index", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/vega/vega-event-selector.git" | ||
}, | ||
"repository": "vega/vega", | ||
"scripts": { | ||
"build": "npm run test && uglifyjs build/vega-event-selector.js -c -m -o build/vega-event-selector.min.js", | ||
"rollup": "rollup -f umd -n vega -o build/vega-event-selector.js -- index.js", | ||
"pretest": "rm -rf build && mkdir build && npm run rollup", | ||
"prebuild": "rimraf build && mkdir build", | ||
"build": "yarn rollup", | ||
"postbuild": "terser build/vega-event-selector.js -c -m -o build/vega-event-selector.min.js", | ||
"pretest": "yarn prebuild && yarn rollup", | ||
"test": "tape 'test/**/*-test.js' && eslint index.js src test", | ||
"prepublish": "npm run build", | ||
"postpublish": "git push && git push --tags && zip -j build/vega-event-selector.zip -- LICENSE README.md build/vega-event-selector.js build/vega-event-selector.min.js" | ||
"prepublishOnly": "yarn test && yarn build", | ||
"postpublish": "git push && git push --tags" | ||
}, | ||
"devDependencies": { | ||
"eslint": "4", | ||
"rollup": "0.43", | ||
"tape": "4", | ||
"uglify-js": "3" | ||
} | ||
"gitHead": "b45fc90406ce2de167073b73d4ae5cf79c5e1705" | ||
} |
@@ -9,4 +9,4 @@ # vega-event-selector | ||
vega.<b>selector</b>(<i>selector</i>[, <i>source</i>, <i>marks</i>]) | ||
[<>](https://github.com/vega/vega-event-selector/blob/master/src/event-selector.js "Source") | ||
[<>](https://github.com/vega/vega/blob/master/packages/vega-event-selector/src/event-selector.js "Source") | ||
Takes an [event _selector_ string](https://vega.github.io/vega/docs/event-streams/#selector) as input and returns a parsed [event stream object](https://vega.github.io/vega/docs/event-streams/#object) definition. The optional _source_ argument takes a string indicating the source value to use by default (normally `"view"`). The optional _marks_ argument takes an object whose keys will be treated as the legal mark types, so long as the corresponding values are truthy. For more, see the [Vega Event Stream documentation](https://vega.github.io/vega/docs/event-streams). |
@@ -40,3 +40,3 @@ /** | ||
function isMarkType(type) { | ||
return MARKS.hasOwnProperty(type); | ||
return MARKS[type]; | ||
} | ||
@@ -43,0 +43,0 @@ |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
0
15426
7
1