Socket
Socket
Sign inDemoInstall

vega-event-selector

Package Overview
Dependencies
Maintainers
2
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vega-event-selector - npm Package Compare versions

Comparing version 2.0.0 to 2.0.1

370

build/vega-event-selector.js
(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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc