jenkins-bot has submitted this change and it was merged.

Change subject: Bumped vega2 lib
......................................................................


Bumped vega2 lib

Previous vega2 lib was accidentally using the wrong version,
bumping to the latest master.

Change-Id: Ibe00a761c74b059e8a05c2dd471ffaad99cb6da6
---
M lib/vega2/vega.js
1 file changed, 288 insertions(+), 539 deletions(-)

Approvals:
  Yurik: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/vega2/vega.js b/lib/vega2/vega.js
index 1fc912e..81d47a4 100644
--- a/lib/vega2/vega.js
+++ b/lib/vega2/vega.js
@@ -19,7 +19,7 @@
   logging: require('vega-logging'),
   debug: require('vega-logging').debug
 };
-},{"./src/core/config":91,"./src/core/schema":92,"./src/parse/":98,"./src/scene/Bounder":110,"./src/scene/Builder":111,"./src/scene/Encoder":112,"./src/scene/GroupBuilder":113,"./src/transforms":145,"./src/transforms/BatchTransform":120,"./src/transforms/Parameter":136,"./src/transforms/Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],2:[function(require,module,exports){
+},{"./src/core/config":90,"./src/core/schema":91,"./src/parse/":97,"./src/scene/Bounder":109,"./src/scene/Builder":110,"./src/scene/Encoder":111,"./src/scene/GroupBuilder":112,"./src/transforms":144,"./src/transforms/BatchTransform":119,"./src/transforms/Parameter":135,"./src/transforms/Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],2:[function(require,module,exports){
 
 },{}],3:[function(require,module,exports){
 (function (global, factory) {
@@ -162,7 +162,7 @@
   var csv = dsv(",");
   var tsv = dsv("\t");
 
-  var version = "0.1.12";
+  var version = "0.1.13";
 
   exports.version = version;
   exports.dsv = dsv;
@@ -468,6 +468,13 @@
     currency: ["", "\xa0€"]
   });
 
+  var csCZ = locale({
+    decimal: ",",
+    thousands: "\xa0",
+    grouping: [3],
+    currency: ["", "\xa0Kč"],
+  });
+
   var deCH = locale({
     decimal: ",",
     thousands: "'",
@@ -617,19 +624,21 @@
   };
 
   function precisionRound(step, max) {
-    return Math.max(0, exponent(Math.abs(max)) - exponent(Math.abs(step))) + 1;
+    step = Math.abs(step), max = Math.abs(max) - step;
+    return Math.max(0, exponent(max) - exponent(step)) + 1;
   };
 
   var format = defaultLocale.format;
   var formatPrefix = defaultLocale.formatPrefix;
 
-  var version = "0.4.0";
+  var version = "0.4.2";
 
   exports.version = version;
   exports.format = format;
   exports.formatPrefix = formatPrefix;
   exports.locale = locale;
   exports.localeCaEs = caES;
+  exports.localeCsCz = csCZ;
   exports.localeDeCh = deCH;
   exports.localeDeDe = deDE;
   exports.localeEnCa = enCA;
@@ -1447,7 +1456,7 @@
   var format = locale.format;
   var utcFormat = locale.utcFormat;
 
-  var version = "0.2.0";
+  var version = "0.2.1";
 
   exports.version = version;
   exports.format = format;
@@ -1479,312 +1488,6 @@
 
 }));
 },{"d3-time":6}],6:[function(require,module,exports){
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? 
factory(exports) :
-  typeof define === 'function' && define.amd ? define('d3-time', ['exports'], 
factory) :
-  factory((global.d3_time = {}));
-}(this, function (exports) { 'use strict';
-
-  var t0 = new Date;
-  var t1 = new Date;
-  function newInterval(floori, offseti, count) {
-
-    function interval(date) {
-      return floori(date = new Date(+date)), date;
-    }
-
-    interval.floor = interval;
-
-    interval.round = function(date) {
-      var d0 = new Date(+date),
-          d1 = new Date(date - 1);
-      floori(d0), floori(d1), offseti(d1, 1);
-      return date - d0 < d1 - date ? d0 : d1;
-    };
-
-    interval.ceil = function(date) {
-      return floori(date = new Date(date - 1)), offseti(date, 1), date;
-    };
-
-    interval.offset = function(date, step) {
-      return offseti(date = new Date(+date), step == null ? 1 : 
Math.floor(step)), date;
-    };
-
-    interval.range = function(start, stop, step) {
-      var range = [];
-      start = new Date(start - 1);
-      stop = new Date(+stop);
-      step = step == null ? 1 : Math.floor(step);
-      if (!(start < stop) || !(step > 0)) return range; // also handles 
Invalid Date
-      offseti(start, 1), floori(start);
-      if (start < stop) range.push(new Date(+start));
-      while (offseti(start, step), floori(start), start < stop) range.push(new 
Date(+start));
-      return range;
-    };
-
-    interval.filter = function(test) {
-      return newInterval(function(date) {
-        while (floori(date), !test(date)) date.setTime(date - 1);
-      }, function(date, step) {
-        while (--step >= 0) while (offseti(date, 1), !test(date));
-      });
-    };
-
-    if (count) interval.count = function(start, end) {
-      t0.setTime(+start), t1.setTime(+end);
-      floori(t0), floori(t1);
-      return Math.floor(count(t0, t1));
-    };
-
-    return interval;
-  };
-
-  var millisecond = newInterval(function() {
-    // noop
-  }, function(date, step) {
-    date.setTime(+date + step);
-  }, function(start, end) {
-    return end - start;
-  });
-
-  var second = newInterval(function(date) {
-    date.setMilliseconds(0);
-  }, function(date, step) {
-    date.setTime(+date + step * 1e3);
-  }, function(start, end) {
-    return (end - start) / 1e3;
-  });
-
-  var minute = newInterval(function(date) {
-    date.setSeconds(0, 0);
-  }, function(date, step) {
-    date.setTime(+date + step * 6e4);
-  }, function(start, end) {
-    return (end - start) / 6e4;
-  });
-
-  var hour = newInterval(function(date) {
-    date.setMinutes(0, 0, 0);
-  }, function(date, step) {
-    date.setTime(+date + step * 36e5);
-  }, function(start, end) {
-    return (end - start) / 36e5;
-  });
-
-  var day = newInterval(function(date) {
-    date.setHours(0, 0, 0, 0);
-  }, function(date, step) {
-    date.setDate(date.getDate() + step);
-  }, function(start, end) {
-    return (end - start - (end.getTimezoneOffset() - 
start.getTimezoneOffset()) * 6e4) / 864e5;
-  });
-
-  function weekday(i) {
-    return newInterval(function(date) {
-      date.setHours(0, 0, 0, 0);
-      date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
-    }, function(date, step) {
-      date.setDate(date.getDate() + step * 7);
-    }, function(start, end) {
-      return (end - start - (end.getTimezoneOffset() - 
start.getTimezoneOffset()) * 6e4) / 6048e5;
-    });
-  }
-
-  var sunday = weekday(0);
-  var monday = weekday(1);
-  var tuesday = weekday(2);
-  var wednesday = weekday(3);
-  var thursday = weekday(4);
-  var friday = weekday(5);
-  var saturday = weekday(6);
-
-  var month = newInterval(function(date) {
-    date.setHours(0, 0, 0, 0);
-    date.setDate(1);
-  }, function(date, step) {
-    date.setMonth(date.getMonth() + step);
-  }, function(start, end) {
-    return end.getMonth() - start.getMonth() + (end.getFullYear() - 
start.getFullYear()) * 12;
-  });
-
-  var year = newInterval(function(date) {
-    date.setHours(0, 0, 0, 0);
-    date.setMonth(0, 1);
-  }, function(date, step) {
-    date.setFullYear(date.getFullYear() + step);
-  }, function(start, end) {
-    return end.getFullYear() - start.getFullYear();
-  });
-
-  var utcSecond = newInterval(function(date) {
-    date.setUTCMilliseconds(0);
-  }, function(date, step) {
-    date.setTime(+date + step * 1e3);
-  }, function(start, end) {
-    return (end - start) / 1e3;
-  });
-
-  var utcMinute = newInterval(function(date) {
-    date.setUTCSeconds(0, 0);
-  }, function(date, step) {
-    date.setTime(+date + step * 6e4);
-  }, function(start, end) {
-    return (end - start) / 6e4;
-  });
-
-  var utcHour = newInterval(function(date) {
-    date.setUTCMinutes(0, 0, 0);
-  }, function(date, step) {
-    date.setTime(+date + step * 36e5);
-  }, function(start, end) {
-    return (end - start) / 36e5;
-  });
-
-  var utcDay = newInterval(function(date) {
-    date.setUTCHours(0, 0, 0, 0);
-  }, function(date, step) {
-    date.setUTCDate(date.getUTCDate() + step);
-  }, function(start, end) {
-    return (end - start) / 864e5;
-  });
-
-  function utcWeekday(i) {
-    return newInterval(function(date) {
-      date.setUTCHours(0, 0, 0, 0);
-      date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
-    }, function(date, step) {
-      date.setUTCDate(date.getUTCDate() + step * 7);
-    }, function(start, end) {
-      return (end - start) / 6048e5;
-    });
-  }
-
-  var utcSunday = utcWeekday(0);
-  var utcMonday = utcWeekday(1);
-  var utcTuesday = utcWeekday(2);
-  var utcWednesday = utcWeekday(3);
-  var utcThursday = utcWeekday(4);
-  var utcFriday = utcWeekday(5);
-  var utcSaturday = utcWeekday(6);
-
-  var utcMonth = newInterval(function(date) {
-    date.setUTCHours(0, 0, 0, 0);
-    date.setUTCDate(1);
-  }, function(date, step) {
-    date.setUTCMonth(date.getUTCMonth() + step);
-  }, function(start, end) {
-    return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - 
start.getUTCFullYear()) * 12;
-  });
-
-  var utcYear = newInterval(function(date) {
-    date.setUTCHours(0, 0, 0, 0);
-    date.setUTCMonth(0, 1);
-  }, function(date, step) {
-    date.setUTCFullYear(date.getUTCFullYear() + step);
-  }, function(start, end) {
-    return end.getUTCFullYear() - start.getUTCFullYear();
-  });
-
-  var milliseconds = millisecond.range;
-  var seconds = second.range;
-  var minutes = minute.range;
-  var hours = hour.range;
-  var days = day.range;
-  var sundays = sunday.range;
-  var mondays = monday.range;
-  var tuesdays = tuesday.range;
-  var wednesdays = wednesday.range;
-  var thursdays = thursday.range;
-  var fridays = friday.range;
-  var saturdays = saturday.range;
-  var weeks = sunday.range;
-  var months = month.range;
-  var years = year.range;
-
-  var utcMillisecond = millisecond;
-  var utcMilliseconds = milliseconds;
-  var utcSeconds = utcSecond.range;
-  var utcMinutes = utcMinute.range;
-  var utcHours = utcHour.range;
-  var utcDays = utcDay.range;
-  var utcSundays = utcSunday.range;
-  var utcMondays = utcMonday.range;
-  var utcTuesdays = utcTuesday.range;
-  var utcWednesdays = utcWednesday.range;
-  var utcThursdays = utcThursday.range;
-  var utcFridays = utcFriday.range;
-  var utcSaturdays = utcSaturday.range;
-  var utcWeeks = utcSunday.range;
-  var utcMonths = utcMonth.range;
-  var utcYears = utcYear.range;
-
-  var version = "0.0.7";
-
-  exports.version = version;
-  exports.milliseconds = milliseconds;
-  exports.seconds = seconds;
-  exports.minutes = minutes;
-  exports.hours = hours;
-  exports.days = days;
-  exports.sundays = sundays;
-  exports.mondays = mondays;
-  exports.tuesdays = tuesdays;
-  exports.wednesdays = wednesdays;
-  exports.thursdays = thursdays;
-  exports.fridays = fridays;
-  exports.saturdays = saturdays;
-  exports.weeks = weeks;
-  exports.months = months;
-  exports.years = years;
-  exports.utcMillisecond = utcMillisecond;
-  exports.utcMilliseconds = utcMilliseconds;
-  exports.utcSeconds = utcSeconds;
-  exports.utcMinutes = utcMinutes;
-  exports.utcHours = utcHours;
-  exports.utcDays = utcDays;
-  exports.utcSundays = utcSundays;
-  exports.utcMondays = utcMondays;
-  exports.utcTuesdays = utcTuesdays;
-  exports.utcWednesdays = utcWednesdays;
-  exports.utcThursdays = utcThursdays;
-  exports.utcFridays = utcFridays;
-  exports.utcSaturdays = utcSaturdays;
-  exports.utcWeeks = utcWeeks;
-  exports.utcMonths = utcMonths;
-  exports.utcYears = utcYears;
-  exports.millisecond = millisecond;
-  exports.second = second;
-  exports.minute = minute;
-  exports.hour = hour;
-  exports.day = day;
-  exports.sunday = sunday;
-  exports.monday = monday;
-  exports.tuesday = tuesday;
-  exports.wednesday = wednesday;
-  exports.thursday = thursday;
-  exports.friday = friday;
-  exports.saturday = saturday;
-  exports.week = sunday;
-  exports.month = month;
-  exports.year = year;
-  exports.utcSecond = utcSecond;
-  exports.utcMinute = utcMinute;
-  exports.utcHour = utcHour;
-  exports.utcDay = utcDay;
-  exports.utcSunday = utcSunday;
-  exports.utcMonday = utcMonday;
-  exports.utcTuesday = utcTuesday;
-  exports.utcWednesday = utcWednesday;
-  exports.utcThursday = utcThursday;
-  exports.utcFriday = utcFriday;
-  exports.utcSaturday = utcSaturday;
-  exports.utcWeek = utcSunday;
-  exports.utcMonth = utcMonth;
-  exports.utcYear = utcYear;
-  exports.interval = newInterval;
-
-}));
-},{}],7:[function(require,module,exports){
 (function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined' ? 
factory(exports) :
   typeof define === 'function' && define.amd ? define('d3-time', ['exports'], 
factory) :
@@ -2073,7 +1776,7 @@
   var utcMonths = utcMonth.range;
   var utcYears = utcYear.range;
 
-  var version = "0.1.0";
+  var version = "0.1.1";
 
   exports.version = version;
   exports.milliseconds = milliseconds;
@@ -2139,7 +1842,7 @@
   exports.interval = newInterval;
 
 }));
-},{}],8:[function(require,module,exports){
+},{}],7:[function(require,module,exports){
 var util = require('./util'),
     time = require('./time'),
     utc = time.utc;
@@ -2162,7 +1865,7 @@
 u.$utcMinute = util.$func('utcMinute', utc.minutes.unit);
 u.$utcSecond = util.$func('utcSecond', utc.seconds.unit);
 
-},{"./time":30,"./util":31}],9:[function(require,module,exports){
+},{"./time":29,"./util":30}],8:[function(require,module,exports){
 var util = require('../util'),
     Measures = require('./measures'),
     Collector = require('./collector');
@@ -2476,7 +2179,7 @@
 
 module.exports = Aggregator;
 
-},{"../util":31,"./collector":10,"./measures":12}],10:[function(require,module,exports){
+},{"../util":30,"./collector":9,"./measures":11}],9:[function(require,module,exports){
 var util = require('../util');
 var stats = require('../stats');
 
@@ -2594,7 +2297,7 @@
 
 module.exports = Collector;
 
-},{"../stats":28,"../util":31}],11:[function(require,module,exports){
+},{"../stats":27,"../util":30}],10:[function(require,module,exports){
 var util = require('../util');
 var Aggregator = require('./aggregator');
 
@@ -2609,7 +2312,7 @@
     .summarize({'*':'values'});
 };
 
-},{"../util":31,"./aggregator":9}],12:[function(require,module,exports){
+},{"../util":30,"./aggregator":8}],11:[function(require,module,exports){
 var util = require('../util');
 
 var types = {
@@ -2792,7 +2495,7 @@
 types.create = create;
 module.exports = types;
 
-},{"../stats":28,"../util":31}],13:[function(require,module,exports){
+},{"../stats":27,"../util":30}],12:[function(require,module,exports){
 var util = require('../util'),
     time = require('../time'),
     EPSILON = 1e-15;
@@ -2907,7 +2610,7 @@
 
 module.exports = bins;
 
-},{"../time":30,"../util":31}],14:[function(require,module,exports){
+},{"../time":29,"../util":30}],13:[function(require,module,exports){
 var bins = require('./bins'),
     gen  = require('../generate'),
     type = require('../import/type'),
@@ -2993,7 +2696,7 @@
   histogram: histogram
 };
 
-},{"../generate":17,"../import/type":26,"../stats":28,"../util":31,"./bins":13}],15:[function(require,module,exports){
+},{"../generate":16,"../import/type":25,"../stats":27,"../util":30,"./bins":12}],14:[function(require,module,exports){
 var util = require('./util'),
     type = require('./import/type'),
     stats = require('./stats'),
@@ -3097,7 +2800,7 @@
     .map(function(v) { return ' \'' + v + '\' (' + u[v] + ')'; });
   return list.concat(top).join('\n');
 }
-},{"./import/type":26,"./stats":28,"./template":29,"./util":31}],16:[function(require,module,exports){
+},{"./import/type":25,"./stats":27,"./template":28,"./util":30}],15:[function(require,module,exports){
 var util = require('./util'),
     d3_time = require('d3-time'),
     d3_timeF = require('d3-time-format'),
@@ -3319,7 +3022,7 @@
     (dayFull || (dayFull = timeF.format('%A')));
   return (tmpDate.setMonth(0), tmpDate.setDate(2 + day), f(tmpDate));
 }
-},{"./util":31,"d3-format":4,"d3-time":7,"d3-time-format":5}],17:[function(require,module,exports){
+},{"./util":30,"d3-format":4,"d3-time":6,"d3-time-format":5}],16:[function(require,module,exports){
 var util = require('./util'),
     gen = module.exports;
 
@@ -3490,7 +3193,7 @@
   };
   return f;
 };
-},{"./util":31}],18:[function(require,module,exports){
+},{"./util":30}],17:[function(require,module,exports){
 var util = require('../../util');
 var d3_dsv = require('d3-dsv');
 
@@ -3511,7 +3214,7 @@
 
 module.exports = dsv;
 
-},{"../../util":31,"d3-dsv":3}],19:[function(require,module,exports){
+},{"../../util":30,"d3-dsv":3}],18:[function(require,module,exports){
 var dsv = require('./dsv');
 
 module.exports = {
@@ -3523,7 +3226,7 @@
   tsv: dsv.delimiter('\t')
 };
 
-},{"./dsv":18,"./json":20,"./topojson":21,"./treejson":22}],20:[function(require,module,exports){
+},{"./dsv":17,"./json":19,"./topojson":20,"./treejson":21}],19:[function(require,module,exports){
 var util = require('../../util');
 
 module.exports = function(data, format) {
@@ -3535,7 +3238,7 @@
   return d;
 };
 
-},{"../../util":31}],21:[function(require,module,exports){
+},{"../../util":30}],20:[function(require,module,exports){
 var json = require('./json');
 
 var reader = function(data, format) {
@@ -3564,7 +3267,7 @@
 reader.topojson = require('topojson');
 module.exports = reader;
 
-},{"./json":20,"topojson":32}],22:[function(require,module,exports){
+},{"./json":19,"topojson":31}],21:[function(require,module,exports){
 var json = require('./json');
 
 module.exports = function(tree, format) {
@@ -3591,7 +3294,7 @@
   return (table.root = root, table);
 }
 
-},{"./json":20}],23:[function(require,module,exports){
+},{"./json":19}],22:[function(require,module,exports){
 var util = require('../util');
 
 // Matches absolute URLs with optional protocol
@@ -3781,7 +3484,7 @@
 
 module.exports = load;
 
-},{"../util":31,"fs":2,"request":2,"sync-request":2,"url":2}],24:[function(require,module,exports){
+},{"../util":30,"fs":2,"request":2,"sync-request":2,"url":2}],23:[function(require,module,exports){
 var util = require('../util'),
   type = require('./type'),
   formats = require('./formats'),
@@ -3831,7 +3534,7 @@
 read.formats = formats;
 module.exports = read;
 
-},{"../format":16,"../util":31,"./formats":19,"./type":26}],25:[function(require,module,exports){
+},{"../format":15,"../util":30,"./formats":18,"./type":25}],24:[function(require,module,exports){
 var util = require('../util');
 var load = require('./load');
 var read = require('./read');
@@ -3869,7 +3572,7 @@
     return out;
   }, {});
 
-},{"../util":31,"./load":23,"./read":24}],26:[function(require,module,exports){
+},{"../util":30,"./load":22,"./read":23}],25:[function(require,module,exports){
 var util = require('../util');
 
 var TYPES = '__types__';
@@ -3963,7 +3666,7 @@
 type.parsers = PARSERS;
 module.exports = type;
 
-},{"../util":31}],27:[function(require,module,exports){
+},{"../util":30}],26:[function(require,module,exports){
 var util = require('./util');
 
 var dl = {
@@ -3997,7 +3700,7 @@
 
 module.exports = dl;
 
-},{"./accessor":8,"./aggregate/aggregator":9,"./aggregate/groupby":11,"./bins/bins":13,"./bins/histogram":14,"./format":16,"./format-tables":15,"./generate":17,"./import/load":23,"./import/read":24,"./import/readers":25,"./import/type":26,"./stats":28,"./template":29,"./time":30,"./util":31}],28:[function(require,module,exports){
+},{"./accessor":7,"./aggregate/aggregator":8,"./aggregate/groupby":10,"./bins/bins":12,"./bins/histogram":13,"./format":15,"./format-tables":14,"./generate":16,"./import/load":22,"./import/read":23,"./import/readers":24,"./import/type":25,"./stats":27,"./template":28,"./time":29,"./util":30}],27:[function(require,module,exports){
 var util = require('./util');
 var type = require('./import/type');
 var gen = require('./generate');
@@ -4687,7 +4390,7 @@
   return (s.__summary__ = true, s);
 };
 
-},{"./generate":17,"./import/type":26,"./util":31}],29:[function(require,module,exports){
+},{"./generate":16,"./import/type":25,"./util":30}],28:[function(require,module,exports){
 var util = require('./util'),
     format = require('./format');
 
@@ -4921,7 +4624,7 @@
   return context.formats[template_format(pattern, type)];
 }
 
-},{"./format":16,"./util":31}],30:[function(require,module,exports){
+},{"./format":15,"./util":30}],29:[function(require,module,exports){
 var d3_time = require('d3-time');
 
 var tempDate = new Date(),
@@ -5091,7 +4794,7 @@
 
 module.exports = toUnitMap(locale);
 module.exports.utc = toUnitMap(utc);
-},{"d3-time":7}],31:[function(require,module,exports){
+},{"d3-time":6}],30:[function(require,module,exports){
 (function (Buffer){
 var u = module.exports;
 
@@ -5394,7 +5097,7 @@
 
 }).call(this,require("buffer").Buffer)
 
-},{"buffer":2}],32:[function(require,module,exports){
+},{"buffer":2}],31:[function(require,module,exports){
 !function() {
   var topojson = {
     version: "1.6.19",
@@ -5930,7 +5633,7 @@
   else this.topojson = topojson;
 }();
 
-},{}],33:[function(require,module,exports){
+},{}],32:[function(require,module,exports){
 var DEPS = require('./Dependencies').ALL;
 
 function create(cs, reflow) {
@@ -5962,7 +5665,7 @@
   create: create,
   copy: copy
 };
-},{"./Dependencies":36}],34:[function(require,module,exports){
+},{"./Dependencies":35}],33:[function(require,module,exports){
 var log = require('vega-logging'),
     Tuple = require('./Tuple'),
     Base = require('./Node').prototype,
@@ -6016,7 +5719,7 @@
 };
 
 module.exports = Collector;
-},{"./ChangeSet":33,"./Node":39,"./Tuple":41,"vega-logging":48}],35:[function(require,module,exports){
+},{"./ChangeSet":32,"./Node":38,"./Tuple":40,"vega-logging":47}],34:[function(require,module,exports){
 var log = require('vega-logging'),
     ChangeSet = require('./ChangeSet'), 
     Collector = require('./Collector'),
@@ -6274,13 +5977,13 @@
 
 module.exports = DataSource;
 
-},{"./ChangeSet":33,"./Collector":34,"./Node":39,"./Tuple":41,"vega-logging":48}],36:[function(require,module,exports){
+},{"./ChangeSet":32,"./Collector":33,"./Node":38,"./Tuple":40,"vega-logging":47}],35:[function(require,module,exports){
 var deps = module.exports = {
   ALL: ['data', 'fields', 'scales', 'signals']
 };
 deps.ALL.forEach(function(k) { deps[k.toUpperCase()] = k; });
 
-},{}],37:[function(require,module,exports){
+},{}],36:[function(require,module,exports){
 var dl = require('datalib'),
     log = require('vega-logging'),
     Heap = require('./Heap'),
@@ -6582,7 +6285,7 @@
 
 module.exports = Graph;
 
-},{"./ChangeSet":33,"./Collector":34,"./DataSource":35,"./Dependencies":36,"./Heap":38,"./Signal":40,"./Tuple":41,"datalib":27,"vega-logging":48}],38:[function(require,module,exports){
+},{"./ChangeSet":32,"./Collector":33,"./DataSource":34,"./Dependencies":35,"./Heap":37,"./Signal":39,"./Tuple":40,"datalib":26,"vega-logging":47}],37:[function(require,module,exports){
 function Heap(comparator) {
   this.cmp = comparator;
   this.nodes = [];
@@ -6679,7 +6382,7 @@
 
 module.exports = Heap;
 
-},{}],39:[function(require,module,exports){
+},{}],38:[function(require,module,exports){
 var DEPS = require('./Dependencies').ALL,
     nodeID = 0;
 
@@ -6878,7 +6581,7 @@
 
 module.exports = Node;
 
-},{"./Dependencies":36}],40:[function(require,module,exports){
+},{"./Dependencies":35}],39:[function(require,module,exports){
 var ChangeSet = require('./ChangeSet'),
     Node = require('./Node'), // jshint ignore:line
     Base = Node.prototype;
@@ -6954,7 +6657,7 @@
 
 module.exports = Signal;
 
-},{"./ChangeSet":33,"./Node":39}],41:[function(require,module,exports){
+},{"./ChangeSet":32,"./Node":38}],40:[function(require,module,exports){
 var tupleID = 0;
 
 function ingest(datum) {
@@ -7024,7 +6727,7 @@
   }
 };
 
-},{}],42:[function(require,module,exports){
+},{}],41:[function(require,module,exports){
 module.exports = {
   ChangeSet:    require('./ChangeSet'),
   Collector:    require('./Collector'),
@@ -7037,7 +6740,7 @@
   debug:        require('vega-logging').debug
 };
 
-},{"./ChangeSet":33,"./Collector":34,"./DataSource":35,"./Dependencies":36,"./Graph":37,"./Node":39,"./Signal":40,"./Tuple":41,"vega-logging":48}],43:[function(require,module,exports){
+},{"./ChangeSet":32,"./Collector":33,"./DataSource":34,"./Dependencies":35,"./Graph":36,"./Node":38,"./Signal":39,"./Tuple":40,"vega-logging":47}],42:[function(require,module,exports){
 function toMap(list) {
   var map = {}, i, n;
   for (i=0, n=list.length; i<n; ++i) map[list[i]] = 1;
@@ -7176,7 +6879,7 @@
   codegen_wrap.constants = constants;
   return codegen_wrap;
 };
-},{"./constants":44,"./functions":45}],44:[function(require,module,exports){
+},{"./constants":43,"./functions":44}],43:[function(require,module,exports){
 module.exports = {
   'NaN':     'NaN',
   'E':       'Math.E',
@@ -7188,7 +6891,7 @@
   'SQRT1_2': 'Math.SQRT1_2',
   'SQRT2':   'Math.SQRT2'
 };
-},{}],45:[function(require,module,exports){
+},{}],44:[function(require,module,exports){
 module.exports = function(codegen) {
 
   function fncall(name, args, cast, type) {
@@ -7297,7 +7000,7 @@
   };
 };
 
-},{}],46:[function(require,module,exports){
+},{}],45:[function(require,module,exports){
 var parser = require('./parser'),
     codegen = require('./codegen');
 
@@ -7329,7 +7032,7 @@
   functions: require('./functions'),
   constants: require('./constants')
 };
-},{"./codegen":43,"./constants":44,"./functions":45,"./parser":47}],47:[function(require,module,exports){
+},{"./codegen":42,"./constants":43,"./functions":44,"./parser":46}],46:[function(require,module,exports){
 /*
   The following expression parser is based on Esprima (http://esprima.org/).
   Original header comment and license for Esprima is included here:
@@ -9657,7 +9360,7 @@
   };
 
 })();
-},{}],48:[function(require,module,exports){
+},{}],47:[function(require,module,exports){
 var ts = Date.now();
 
 function write(msg) {
@@ -9695,7 +9398,7 @@
   debug: (debug.enable = false, debug)
 };
 
-},{}],49:[function(require,module,exports){
+},{}],48:[function(require,module,exports){
 module.exports = {
   path:       require('./path'),
   render:     require('./render'),
@@ -9707,7 +9410,7 @@
   toJSON:     require('./util/scene').toJSON,
   fromJSON:   require('./util/scene').fromJSON
 };
-},{"./path":51,"./render":71,"./util/Bounds":77,"./util/Gradient":79,"./util/Item":81,"./util/bound":82,"./util/canvas":83,"./util/scene":85}],50:[function(require,module,exports){
+},{"./path":50,"./render":70,"./util/Bounds":76,"./util/Gradient":78,"./util/Item":80,"./util/bound":81,"./util/canvas":82,"./util/scene":84}],49:[function(require,module,exports){
 var segmentCache = {},
     bezierCache = {},
     join = [].join;
@@ -9822,13 +9525,13 @@
   }
 };
 
-},{}],51:[function(require,module,exports){
+},{}],50:[function(require,module,exports){
 module.exports = {
   parse:  require('./parse'),
   render: require('./render')
 };
 
-},{"./parse":52,"./render":53}],52:[function(require,module,exports){
+},{"./parse":51,"./render":52}],51:[function(require,module,exports){
 // Path parsing and rendering code adapted from fabric.js -- Thanks!
 var cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 },
     regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\d)([-+])/g, /\s|,|###/];
@@ -9879,7 +9582,7 @@
   return result;
 };
 
-},{}],53:[function(require,module,exports){
+},{}],52:[function(require,module,exports){
 var arc = require('./arc');
 
 module.exports = function(g, path, l, t) {
@@ -10175,7 +9878,7 @@
   }
 }
 
-},{"./arc":50}],54:[function(require,module,exports){
+},{"./arc":49}],53:[function(require,module,exports){
 function Handler() {
   this._active = null;
   this._handlers = {};
@@ -10225,7 +9928,7 @@
 };
 
 module.exports = Handler;
-},{}],55:[function(require,module,exports){
+},{}],54:[function(require,module,exports){
 function Renderer() {
   this._el = null;
   this._bgcolor = null;
@@ -10267,7 +9970,7 @@
 };
 
 module.exports = Renderer;
-},{}],56:[function(require,module,exports){
+},{}],55:[function(require,module,exports){
 var DOM = require('../../util/dom'),
     Handler = require('../Handler'),
     marks = require('./marks');
@@ -10443,7 +10146,7 @@
 
 module.exports = CanvasHandler;
 
-},{"../../util/dom":84,"../Handler":54,"./marks":63}],57:[function(require,module,exports){
+},{"../../util/dom":83,"../Handler":53,"./marks":62}],56:[function(require,module,exports){
 var DOM = require('../../util/dom'),
     Bounds = require('../../util/Bounds'),
     ImageLoader = require('../../util/ImageLoader'),
@@ -10581,12 +10284,12 @@
 
 module.exports = CanvasRenderer;
 
-},{"../../util/Bounds":77,"../../util/ImageLoader":80,"../../util/canvas":83,"../../util/dom":84,"../Renderer":55,"./marks":63}],58:[function(require,module,exports){
+},{"../../util/Bounds":76,"../../util/ImageLoader":79,"../../util/canvas":82,"../../util/dom":83,"../Renderer":54,"./marks":62}],57:[function(require,module,exports){
 module.exports = {
   Handler:  require('./CanvasHandler'),
   Renderer: require('./CanvasRenderer')
 };
-},{"./CanvasHandler":56,"./CanvasRenderer":57}],59:[function(require,module,exports){
+},{"./CanvasHandler":55,"./CanvasRenderer":56}],58:[function(require,module,exports){
 var util = require('./util');
 var halfpi = Math.PI / 2;
 
@@ -10608,7 +10311,7 @@
   draw: util.drawAll(path),
   pick: util.pickPath(path)
 };
-},{"./util":70}],60:[function(require,module,exports){
+},{"./util":69}],59:[function(require,module,exports){
 var util = require('./util'),
     parse = require('../../../path/parse'),
     render = require('../../../path/render'),
@@ -10643,7 +10346,7 @@
   nested: true
 };
 
-},{"../../../path/parse":52,"../../../path/render":53,"../../../util/svg":86,"./util":70}],61:[function(require,module,exports){
+},{"../../../path/parse":51,"../../../path/render":52,"../../../util/svg":85,"./util":69}],60:[function(require,module,exports){
 var util = require('./util'),
     EMPTY = [];
 
@@ -10782,7 +10485,7 @@
   pick: pick
 };
 
-},{"./util":70}],62:[function(require,module,exports){
+},{"./util":69}],61:[function(require,module,exports){
 var util = require('./util');
 
 function draw(g, scene, bounds) {
@@ -10820,7 +10523,7 @@
   draw: draw,
   pick: util.pick()
 };
-},{"./util":70}],63:[function(require,module,exports){
+},{"./util":69}],62:[function(require,module,exports){
 module.exports = {
   arc:    require('./arc'),
   area:   require('./area'),
@@ -10834,7 +10537,7 @@
   text:   require('./text')
 };
 
-},{"./arc":59,"./area":60,"./group":61,"./image":62,"./line":64,"./path":65,"./rect":66,"./rule":67,"./symbol":68,"./text":69}],64:[function(require,module,exports){
+},{"./arc":58,"./area":59,"./group":60,"./image":61,"./line":63,"./path":64,"./rect":65,"./rule":66,"./symbol":67,"./text":68}],63:[function(require,module,exports){
 var util = require('./util'),
     parse = require('../../../path/parse'),
     render = require('../../../path/render'),
@@ -10869,7 +10572,7 @@
   nested: true
 };
 
-},{"../../../path/parse":52,"../../../path/render":53,"../../../util/svg":86,"./util":70}],65:[function(require,module,exports){
+},{"../../../path/parse":51,"../../../path/render":52,"../../../util/svg":85,"./util":69}],64:[function(require,module,exports){
 var util = require('./util'),
     parse = require('../../../path/parse'),
     render = require('../../../path/render');
@@ -10885,7 +10588,7 @@
   pick: util.pickPath(path)
 };
 
-},{"../../../path/parse":52,"../../../path/render":53,"./util":70}],66:[function(require,module,exports){
+},{"../../../path/parse":51,"../../../path/render":52,"./util":69}],65:[function(require,module,exports){
 var util = require('./util');
 
 function draw(g, scene, bounds) {
@@ -10920,7 +10623,7 @@
   draw: draw,
   pick: util.pick()
 };
-},{"./util":70}],67:[function(require,module,exports){
+},{"./util":69}],66:[function(require,module,exports){
 var util = require('./util');
 
 function draw(g, scene, bounds) {
@@ -10977,7 +10680,7 @@
   pick: util.pick(hit)
 };
 
-},{"./util":70}],68:[function(require,module,exports){
+},{"./util":69}],67:[function(require,module,exports){
 var util = require('./util');
 
 var sqrt3 = Math.sqrt(3),
@@ -11051,7 +10754,7 @@
   draw: util.drawAll(path),
   pick: util.pickPath(path)
 };
-},{"./util":70}],69:[function(require,module,exports){
+},{"./util":69}],68:[function(require,module,exports){
 var Bounds = require('../../../util/Bounds'),
     textBounds = require('../../../util/bound').text,
     text = require('../../../util/text'),
@@ -11126,7 +10829,7 @@
   pick: util.pick(hit)
 };
 
-},{"../../../util/Bounds":77,"../../../util/bound":82,"../../../util/text":87,"./util":70}],70:[function(require,module,exports){
+},{"../../../util/Bounds":76,"../../../util/bound":81,"../../../util/text":86,"./util":69}],69:[function(require,module,exports){
 function drawPathOne(path, g, o, items) {
   if (path(g, items)) return;
 
@@ -11275,13 +10978,13 @@
   gradient: gradient
 };
 
-},{}],71:[function(require,module,exports){
+},{}],70:[function(require,module,exports){
 module.exports = {
   'canvas': require('./canvas'),
   'svg':    require('./svg')
 };
 
-},{"./canvas":58,"./svg":75}],72:[function(require,module,exports){
+},{"./canvas":57,"./svg":74}],71:[function(require,module,exports){
 var DOM = require('../../util/dom'),
     Handler = require('../Handler');
 
@@ -11347,7 +11050,7 @@
 
 module.exports = SVGHandler;
 
-},{"../../util/dom":84,"../Handler":54}],73:[function(require,module,exports){
+},{"../../util/dom":83,"../Handler":53}],72:[function(require,module,exports){
 var ImageLoader = require('../../util/ImageLoader'),
     Renderer = require('../Renderer'),
     text = require('../../util/text'),
@@ -11772,7 +11475,7 @@
 
 module.exports = SVGRenderer;
 
-},{"../../util/ImageLoader":80,"../../util/dom":84,"../../util/svg":86,"../../util/text":87,"../Renderer":55,"./marks":76}],74:[function(require,module,exports){
+},{"../../util/ImageLoader":79,"../../util/dom":83,"../../util/svg":85,"../../util/text":86,"../Renderer":54,"./marks":75}],73:[function(require,module,exports){
 var Renderer = require('../Renderer'),
     ImageLoader = require('../../util/ImageLoader'),
     SVG = require('../../util/svg'),
@@ -12016,7 +11719,7 @@
 
 module.exports = SVGStringRenderer;
 
-},{"../../util/ImageLoader":80,"../../util/dom":84,"../../util/svg":86,"../../util/text":87,"../Renderer":55,"./marks":76}],75:[function(require,module,exports){
+},{"../../util/ImageLoader":79,"../../util/dom":83,"../../util/svg":85,"../../util/text":86,"../Renderer":54,"./marks":75}],74:[function(require,module,exports){
 module.exports = {
   Handler:  require('./SVGHandler'),
   Renderer: require('./SVGRenderer'),
@@ -12024,7 +11727,7 @@
     Renderer : require('./SVGStringRenderer')
   }
 };
-},{"./SVGHandler":72,"./SVGRenderer":73,"./SVGStringRenderer":74}],76:[function(require,module,exports){
+},{"./SVGHandler":71,"./SVGRenderer":72,"./SVGStringRenderer":73}],75:[function(require,module,exports){
 var text = require('../../util/text'),
     SVG = require('../../util/svg'),
     textAlign = SVG.textAlign,
@@ -12171,7 +11874,7 @@
   }
 };
 
-},{"../../util/svg":86,"../../util/text":87}],77:[function(require,module,exports){
+},{"../../util/svg":85,"../../util/text":86}],76:[function(require,module,exports){
 function Bounds(b) {
   this.clear();
   if (b) this.union(b);
@@ -12300,7 +12003,7 @@
 
 module.exports = Bounds;
 
-},{}],78:[function(require,module,exports){
+},{}],77:[function(require,module,exports){
 module.exports = function(b) {
   function noop() { }
   function add(x,y) { b.add(x, y); }
@@ -12326,7 +12029,7 @@
   };
 };
 
-},{}],79:[function(require,module,exports){
+},{}],78:[function(require,module,exports){
 var gradient_id = 0;
 
 function Gradient(type) {
@@ -12350,7 +12053,7 @@
 };
 
 module.exports = Gradient;
-},{}],80:[function(require,module,exports){
+},{}],79:[function(require,module,exports){
 (function (global){
 var load = require('datalib/src/import/load');
 
@@ -12430,7 +12133,7 @@
 
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"datalib/src/import/load":23}],81:[function(require,module,exports){
+},{"datalib/src/import/load":22}],80:[function(require,module,exports){
 function Item(mark) {
   this.mark = mark;
 }
@@ -12479,7 +12182,7 @@
 };
 
 module.exports = Item;
-},{}],82:[function(require,module,exports){
+},{}],81:[function(require,module,exports){
 var BoundsContext = require('./BoundsContext'),
     Bounds = require('./Bounds'),
     canvas = require('./canvas'),
@@ -12776,7 +12479,7 @@
   group: group
 };
 
-},{"../path":51,"./Bounds":77,"./BoundsContext":78,"./canvas":83,"./svg":86,"./text":87}],83:[function(require,module,exports){
+},{"../path":50,"./Bounds":76,"./BoundsContext":77,"./canvas":82,"./svg":85,"./text":86}],82:[function(require,module,exports){
 (function (global){
 function instance(w, h) {
   w = w || 1;
@@ -12870,7 +12573,7 @@
 
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{}],84:[function(require,module,exports){
+},{}],83:[function(require,module,exports){
 // create a new DOM element
 function create(doc, tag, ns) {
   return ns ? doc.createElementNS(ns, tag) : doc.createElement(tag);
@@ -12948,7 +12651,7 @@
   }
 };
 
-},{}],85:[function(require,module,exports){
+},{}],84:[function(require,module,exports){
 var bound = require('../util/bound');
 
 var sets = [
@@ -13006,7 +12709,7 @@
   toJSON:   toJSON,
   fromJSON: fromJSON
 };
-},{"../util/bound":82}],86:[function(require,module,exports){
+},{"../util/bound":81}],85:[function(require,module,exports){
 (function (global){
 var d3_svg = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null).svg;
 
@@ -13081,7 +12784,7 @@
 
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{}],87:[function(require,module,exports){
+},{}],86:[function(require,module,exports){
 function size(item) {
   return item.fontSize != null ? item.fontSize : 11;
 }
@@ -13116,7 +12819,7 @@
   }
 };
 
-},{}],88:[function(require,module,exports){
+},{}],87:[function(require,module,exports){
 var sg = require('vega-scenegraph').render,
     canvas = sg.canvas,
     svg = sg.svg.string,
@@ -13180,7 +12883,7 @@
 };
 
 module.exports = HeadlessView;
-},{"./View":90,"vega-scenegraph":49}],89:[function(require,module,exports){
+},{"./View":89,"vega-scenegraph":48}],88:[function(require,module,exports){
 var dl = require('datalib'),
     df = require('vega-dataflow'),
     ChangeSet = df.ChangeSet,
@@ -13188,6 +12891,7 @@
     Node  = df.Node, // jshint ignore:line
     GroupBuilder = require('../scene/GroupBuilder'),
     visit = require('../scene/visit'),
+    compiler = require('../parse/expr'),
     config = require('./config');
 
 function Model(cfg) {
@@ -13203,6 +12907,7 @@
   this._reset = {axes: false, legends: false};
 
   this.config(cfg);
+  this.expr = compiler(this);
   Base.init.call(this);
 }
 
@@ -13341,7 +13046,7 @@
 };
 
 module.exports = Model;
-},{"../scene/GroupBuilder":113,"../scene/visit":118,"./config":91,"datalib":27,"vega-dataflow":42}],90:[function(require,module,exports){
+},{"../parse/expr":96,"../scene/GroupBuilder":112,"../scene/visit":117,"./config":90,"datalib":26,"vega-dataflow":41}],89:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
@@ -13807,7 +13512,7 @@
 module.exports = View;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"../parse/streams":108,"../scene/Encoder":112,"../scene/Transition":115,"./HeadlessView":88,"datalib":27,"vega-dataflow":42,"vega-logging":48,"vega-scenegraph":49}],91:[function(require,module,exports){
+},{"../parse/streams":107,"../scene/Encoder":111,"../scene/Transition":114,"./HeadlessView":87,"datalib":26,"vega-dataflow":41,"vega-logging":47,"vega-scenegraph":48}],90:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     config = {};
@@ -13926,7 +13631,7 @@
 module.exports = config;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{}],92:[function(require,module,exports){
+},{}],91:[function(require,module,exports){
 var dl = require('datalib'),
     parse = require('../parse'),
     Scale = require('../scene/Scale'),
@@ -13973,7 +13678,7 @@
 
   return schema;
 };
-},{"../parse":98,"../scene/Scale":114,"./config":91,"datalib":27}],93:[function(require,module,exports){
+},{"../parse":97,"../scene/Scale":113,"./config":90,"datalib":26}],92:[function(require,module,exports){
 var dl = require('datalib'),
     axs = require('../scene/axis');
 
@@ -14059,7 +13764,7 @@
 }
 
 module.exports = parseAxes;
-},{"../scene/axis":116,"datalib":27}],94:[function(require,module,exports){
+},{"../scene/axis":115,"datalib":26}],93:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null);
 
@@ -14073,7 +13778,7 @@
 module.exports = parseBg;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{}],95:[function(require,module,exports){
+},{}],94:[function(require,module,exports){
 var dl = require('datalib'),
     log = require('vega-logging'),
     parseTransforms = require('./transforms'),
@@ -14142,7 +13847,7 @@
 };
 
 module.exports = parseData;
-},{"./modify":102,"./transforms":109,"datalib":27,"vega-logging":48}],96:[function(require,module,exports){
+},{"./modify":101,"./transforms":108,"datalib":26,"vega-logging":47}],95:[function(require,module,exports){
 module.exports = (function() {
   /*
    * Generated by PEG.js 0.8.0.
@@ -15252,25 +14957,100 @@
     parse:       parse
   };
 })();
-},{}],97:[function(require,module,exports){
-var expr = require('vega-expression'),
+},{}],96:[function(require,module,exports){
+var dl = require('datalib'),
+    template = dl.template,
+    expr = require('vega-expression'),
     args = ['datum', 'event', 'signals'];
 
-module.exports = expr.compiler(args, {
+var compile = expr.compiler(args, {
   idWhiteList: args,
   fieldVar:    args[0],
-  globalVar:   args[2],
+  globalVar:   function(id) {
+    return 'this.sig[' + dl.str(id) + ']._value';
+  },
   functions:   function(codegen) {
     var fn = expr.functions(codegen);
-    fn.eventItem = function() { return 'event.vg.item'; };
+    fn.eventItem  = 'event.vg.getItem';
     fn.eventGroup = 'event.vg.getGroup';
-    fn.eventX = 'event.vg.getX';
-    fn.eventY = 'event.vg.getY';
-    fn.open = 'window.open';
+    fn.eventX     = 'event.vg.getX';
+    fn.eventY     = 'event.vg.getY';
+    //fn.open       = 'window.open';
+    fn.scale      = scaleGen(codegen, false);
+    fn.iscale     = scaleGen(codegen, true);
+    fn.inrange    = 'this.defs.inrange';
+    fn.format     = 'this.defs.format';
+    fn.timeFormat = 'this.defs.timeFormat';
+    fn.utcFormat  = 'this.defs.utcFormat';
     return fn;
+  },
+  functionDefs: function(/*codegen*/) {
+    return {
+      'scale':      scale,
+      'inrange':    inrange,
+      'format':     numberFormat,
+      'timeFormat': timeFormat,
+      'utcFormat':  utcFormat
+    };
   }
 });
-},{"vega-expression":46}],98:[function(require,module,exports){
+
+function scaleGen(codegen, invert) {
+  return function(args) {
+    args = args.map(codegen);
+    var n = args.length;
+    if (n < 2 || n > 3) {
+      throw Error("scale takes exactly 2 or 3 arguments.");
+    }
+    return 'this.defs.scale(this.model, ' + invert + ', ' +
+      args[0] + ',' + args[1] + (n > 2 ? ',' + args[2] : '') + ')';
+  };
+}
+
+function scale(model, invert, name, value, scope) {
+  if (!scope || !scope.scale) {
+    scope = (scope && scope.mark) ? scope.mark.group : model.scene().items[0];
+  }
+  // Verify scope is valid
+  if (model.group(scope._id) !== scope) {
+    throw Error('Scope for scale "'+name+'" is not a valid group item.');
+  }
+  var s = scope.scale(name);
+  return !s ? value : (invert ? s.invert(value) : s(value));
+}
+
+function inrange(val, a, b, exclusive) {
+  var min = a, max = b;
+  if (a > b) { min = b; max = a; }
+  return exclusive ?
+    (min < val && max > val) :
+    (min <= val && max >= val);
+}
+
+function numberFormat(specifier, v) {
+  return template.format(specifier, 'number')(v);
+}
+
+function timeFormat(specifier, d) {
+  return template.format(specifier, 'time')(typeof d==='number' ? new Date(d) 
: d);
+}
+
+function utcFormat(specifier, d) {
+  return template.format(specifier, 'utc')(typeof d==='number' ? new Date(d) : 
d);
+}
+
+function wrap(model) {
+  return function(str) {
+    var x = compile(str);
+    x.model = model;
+    x.sig = model ? model._signals : {};
+    return x;
+  };
+}
+wrap.codegen = compile.codegen;
+wrap.scale = scale;
+module.exports = wrap;
+},{"datalib":26,"vega-expression":45}],97:[function(require,module,exports){
 module.exports = {
   axes:       require('./axes'),
   background: require('./background'),
@@ -15289,7 +15069,7 @@
   streams:    require('./streams'),
   transforms: require('./transforms')
 };
-},{"./axes":93,"./background":94,"./data":95,"./events":96,"./expr":97,"./legends":99,"./mark":100,"./marks":101,"./modify":102,"./padding":103,"./predicates":104,"./properties":105,"./signals":106,"./spec":107,"./streams":108,"./transforms":109}],99:[function(require,module,exports){
+},{"./axes":92,"./background":93,"./data":94,"./events":95,"./expr":96,"./legends":98,"./mark":99,"./marks":100,"./modify":101,"./padding":102,"./predicates":103,"./properties":104,"./signals":105,"./spec":106,"./streams":107,"./transforms":108}],98:[function(require,module,exports){
 var lgnd = require('../scene/legend');
 
 function parseLegends(model, spec, legends, group) {
@@ -15331,7 +15111,7 @@
 }
 
 module.exports = parseLegends;
-},{"../scene/legend":117}],100:[function(require,module,exports){
+},{"../scene/legend":116}],99:[function(require,module,exports){
 var dl = require('datalib'),
     parseProperties = require('./properties');
 
@@ -15358,7 +15138,7 @@
 }
 
 module.exports = parseMark;
-},{"./properties":105,"datalib":27}],101:[function(require,module,exports){
+},{"./properties":104,"datalib":26}],100:[function(require,module,exports){
 var parseMark = require('./mark'),
     parseProperties = require('./properties');
 
@@ -15399,7 +15179,7 @@
 }
 
 module.exports = parseRootMark;
-},{"./mark":100,"./properties":105}],102:[function(require,module,exports){
+},{"./mark":99,"./properties":104}],101:[function(require,module,exports){
 var dl = require('datalib'),
     log = require('vega-logging'),
     df = require('vega-dataflow'),
@@ -15493,7 +15273,7 @@
 }
 
 module.exports = parseModify;
-},{"datalib":27,"vega-dataflow":42,"vega-logging":48}],103:[function(require,module,exports){
+},{"datalib":26,"vega-dataflow":41,"vega-logging":47}],102:[function(require,module,exports){
 var dl = require('datalib');
 
 function parsePadding(pad) {
@@ -15504,7 +15284,7 @@
 }
 
 module.exports = parsePadding;
-},{"datalib":27}],104:[function(require,module,exports){
+},{"datalib":26}],103:[function(require,module,exports){
 var dl = require('datalib');
 
 var types = {
@@ -15699,7 +15479,7 @@
 }
 
 module.exports = parsePredicates;
-},{"datalib":27}],105:[function(require,module,exports){
+},{"datalib":26}],104:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
@@ -16066,13 +15846,13 @@
 module.exports = properties;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"datalib":27,"vega-dataflow":42,"vega-logging":48}],106:[function(require,module,exports){
+},{"datalib":26,"vega-dataflow":41,"vega-logging":47}],105:[function(require,module,exports){
 var dl = require('datalib'),
-    SIGNALS = require('vega-dataflow').Dependencies.SIGNALS,
-    expr = require('./expr');
+    expr = require('./expr'),
+    SIGNALS = require('vega-dataflow').Dependencies.SIGNALS;
 
 var RESERVED = ['datum', 'event', 'signals', 'width', 'height', 'padding']
-  .concat(dl.keys(expr.codegen.functions));
+    .concat(dl.keys(expr.codegen.functions));
 
 function parseSignals(model, spec) {
   // process each signal definition
@@ -16086,12 +15866,12 @@
       .verbose(s.verbose);
 
     if (s.init && s.init.expr) {
-      s.init.expr = expr(s.init.expr);
+      s.init.expr = model.expr(s.init.expr);
       signal.value(exprVal(model, s.init));
     }
 
     if (s.expr) {
-      s.expr = expr(s.expr);
+      s.expr = model.expr(s.expr);
       signal.evaluate = function(input) {
         var val = exprVal(model, s),
             sg  = input.signals;
@@ -16112,9 +15892,8 @@
 }
 
 function exprVal(model, spec) {
-  var e = spec.expr,
-      val = e.fn(null, null, model.values(SIGNALS, e.globals));
-  return spec.scale ? parseSignals.scale(model, spec, val) : val;
+  var e = spec.expr, v = e.fn();
+  return spec.scale ? parseSignals.scale(model, spec, v) : v;
 }
 
 parseSignals.scale = function scale(model, spec, value, datum, evt) {
@@ -16126,26 +15905,16 @@
     if (scope.signal) {
       scope = model.signalRef(scope.signal);
     } else if (dl.isString(scope)) { // Scope is an expression
-      e = def._expr = (def._expr || expr(scope));
-      scope = e.fn(datum, evt, model.values(SIGNALS, e.globals));
+      e = def._expr = (def._expr || model.expr(scope));
+      scope = e.fn(datum, evt);
     }
   }
 
-  if (!scope || !scope.scale) {
-    scope = (scope && scope.mark) ? scope.mark.group : model.scene().items[0];
-  }
-
-  // Verify scope is valid
-  if (model.group(scope._id) !== scope) {
-    throw new Error('Scope for scale "'+name+'" is not a valid group item.');
-  }
-
-  var s = scope.scale(name);
-  return !s ? value : (def.invert ? s.invert(value) : s(value));
+  return expr.scale(model, def.invert, name, value, scope);
 };
 
 module.exports = parseSignals;
-},{"./expr":97,"datalib":27,"vega-dataflow":42}],107:[function(require,module,exports){
+},{"./expr":96,"datalib":26,"vega-dataflow":41}],106:[function(require,module,exports){
 var dl = require('datalib'),
     log = require('vega-logging'),
     Model = require('../core/Model'),
@@ -16236,19 +16005,18 @@
 }
 
 module.exports = parseSpec;
-},{"../core/Model":89,"../core/View":90,"./":98,"datalib":27,"vega-logging":48}],108:[function(require,module,exports){
+},{"../core/Model":88,"../core/View":89,"./":97,"datalib":26,"vega-logging":47}],107:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
     df = require('vega-dataflow'),
-    SIGNALS = df.Dependencies.SIGNALS,
     parseSignals = require('./signals'),
-    selector = require('./events'),
-    expr = require('./expr');
+    selector = require('./events');
 
 var GATEKEEPER = '_vgGATEKEEPER';
 
 var vgEvent = {
+  getItem: function() { return this.item; },
   getGroup: function(name) { return name ? this.name[name] : this.group; },
   getXY: function(item) {
       var p = {x: this.x, y: this.y};
@@ -16267,18 +16035,20 @@
 
 function parseStreams(view) {
   var model = view.model(),
-      spec  = model.defs().signals,
+      trueFn  = model.expr('true'),
+      falseFn = model.expr('false'),
+      spec    = model.defs().signals,
       registry = {handlers: {}, nodes: {}},
       internal = dl.duplicate(registry),  // Internal event processing
       external = dl.duplicate(registry);  // External event processing
 
-  (spec || []).forEach(function(sig) {
+  dl.array(spec).forEach(function(sig) {
     var signal = model.signal(sig.name);
     if (sig.expr) return;  // Cannot have an expr and stream definition.
 
-    (sig.streams || []).forEach(function(stream) {
+    dl.array(sig.streams).forEach(function(stream) {
       var sel = selector.parse(stream.type),
-          exp = expr(stream.expr);
+          exp = model.expr(stream.expr);
       mergedStream(signal, sel, exp, stream);
     });
   });
@@ -16321,7 +16091,7 @@
     dl.keys(external.handlers).forEach(function(type) {
       var h = external.handlers[type],
           t = type.split(':'),
-          elt = h.elements || [];
+          elt = dl.array(h.elements);
 
       for (var i=0; i<elt.length; ++i) {
         elt[i].removeEventListener(t[1], h.listener);
@@ -16366,7 +16136,7 @@
         val, i, n, h;
 
     function invoke(f) {
-      return !f.fn(datum, evt, model.values(SIGNALS, f.globals));
+      return !f.fn(datum, evt);
     }
 
     for (i=0, n=handlers.length; i<n; ++i) {
@@ -16374,7 +16144,7 @@
       filtered = h.filters.some(invoke);
       if (filtered) continue;
 
-      val = h.exp.fn(datum, evt, model.values(SIGNALS, h.exp.globals));
+      val = h.exp.fn(datum, evt);
       if (h.spec.scale) {
         val = parseSignals.scale(model, h.spec, val, datum, evt);
       }
@@ -16402,7 +16172,7 @@
         name = selector.name,
         mark = selector.mark,
         target   = selector.target,
-        filters  = selector.filters || [],
+        filters  = dl.array(selector.filters),
         registry = target ? external : internal,
         type = target ? target+':'+evt : evt,
         node = registry.nodes[type] || (registry.nodes[type] = new 
df.Node(model)),
@@ -16418,7 +16188,7 @@
       signal: sig,
       exp: exp,
       spec: spec,
-      filters: filters.map(function(f) { return expr(f); })
+      filters: filters.map(function(f) { return model.expr(f); })
     });
 
     node.addListener(sig);
@@ -16428,7 +16198,7 @@
     var n = new df.Node(model);
     n.evaluate = function(input) {
       if (!input.signals[selector.signal]) return model.doNotPropagate;
-      var val = exp.fn(null, null, model.values(SIGNALS, exp.globals));
+      var val = exp.fn();
       if (spec.scale) {
         val = parseSignals.scale(model, spec, val);
       }
@@ -16449,8 +16219,6 @@
   function orderedStream(sig, selector, exp, spec) {
     var name = sig.name(),
         gk = name + GATEKEEPER,
-        trueFn  = expr('true'),
-        falseFn = expr('false'),
         middle  = selector.middle,
         filters = middle.filters || (middle.filters = []),
         gatekeeper = model.signal(gk) || model.signal(gk, false);
@@ -16469,7 +16237,7 @@
 module.exports = parseStreams;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./events":96,"./expr":97,"./signals":106,"datalib":27,"vega-dataflow":42}],109:[function(require,module,exports){
+},{"./events":95,"./signals":105,"datalib":26,"vega-dataflow":41}],108:[function(require,module,exports){
 var dl = require('datalib'),
     transforms = require('../transforms/index');
 
@@ -16489,7 +16257,7 @@
 }
 
 module.exports = parseTransforms;
-},{"../transforms/index":145,"datalib":27}],110:[function(require,module,exports){
+},{"../transforms/index":144,"datalib":26}],109:[function(require,module,exports){
 var dl = require('datalib'),
     df = require('vega-dataflow'),
     scene = require('vega-scenegraph'),
@@ -16558,7 +16326,7 @@
 };
 
 module.exports = Bounder;
-},{"./Encoder":112,"datalib":27,"vega-dataflow":42,"vega-logging":48,"vega-scenegraph":49}],111:[function(require,module,exports){
+},{"./Encoder":111,"datalib":26,"vega-dataflow":41,"vega-logging":47,"vega-scenegraph":48}],110:[function(require,module,exports){
 var dl = require('datalib'),
     log = require('vega-logging'),
     Item = require('vega-scenegraph').Item,
@@ -16634,10 +16402,12 @@
 function inlineDs() {
   var from = this._def.from,
       geom = from.mark,
-      src, name, spec, sibling, output, input;
+      src, name, spec, sibling, output, input, node;
 
   if (geom) {
-    name = ['vg', this._parent_id, geom].join('_');
+    sibling = this.sibling(geom);
+    src  = sibling._isSuper ? sibling : sibling._bounder;
+    name = ['vg', this._parent_id, geom, src.listeners(true).length].join('_');
     spec = {
       name: name,
       transform: from.transform,
@@ -16656,21 +16426,13 @@
 
   this._from = name;
   this._ds = parseData.datasource(this._graph, spec);
-  var node;
 
   if (geom) {
-    sibling = this.sibling(geom);
-
     // Bounder reflows, so we need an intermediary node to propagate
     // the output constructed by the Builder.
     node = new Node(this._graph).addListener(this._ds.listener());
     node.evaluate = function() { return sibling._output; };
-
-    if (sibling._isSuper) {
-      sibling.addListener(node);
-    } else {
-      sibling._bounder.addListener(node);
-    }
+    src.addListener(node);
   } else {
     // At this point, we have a new datasource but it is empty as
     // the propagation cycle has already crossed the datasources.
@@ -16863,7 +16625,7 @@
 }
 
 module.exports = Builder;
-},{"../parse/data":95,"./Bounder":110,"./Encoder":112,"datalib":27,"vega-dataflow":42,"vega-logging":48,"vega-scenegraph":49}],112:[function(require,module,exports){
+},{"../parse/data":94,"./Bounder":109,"./Encoder":111,"datalib":26,"vega-dataflow":41,"vega-logging":47,"vega-scenegraph":48}],111:[function(require,module,exports){
 var dl = require('datalib'),
     log = require('vega-logging'),
     df = require('vega-dataflow'),
@@ -17050,7 +16812,7 @@
 };
 
 module.exports = Encoder;
-},{"./Builder":111,"datalib":27,"vega-dataflow":42,"vega-logging":48,"vega-scenegraph":49}],113:[function(require,module,exports){
+},{"./Builder":110,"datalib":26,"vega-dataflow":41,"vega-logging":47,"vega-scenegraph":48}],112:[function(require,module,exports){
 var dl = require('datalib'),
     df = require('vega-dataflow'),
     Node = df.Node, // jshint ignore:line
@@ -17325,7 +17087,7 @@
 }
 
 module.exports = GroupBuilder;
-},{"../parse/axes":93,"../parse/legends":99,"./Builder":111,"./Scale":114,"datalib":27,"vega-dataflow":42,"vega-logging":48}],114:[function(require,module,exports){
+},{"../parse/axes":92,"../parse/legends":98,"./Builder":110,"./Scale":113,"datalib":26,"vega-dataflow":41,"vega-logging":47}],113:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
@@ -17835,7 +17597,7 @@
 module.exports = Scale;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"../transforms/Aggregate":119,"datalib":27,"vega-dataflow":42,"vega-logging":48}],115:[function(require,module,exports){
+},{"../transforms/Aggregate":118,"datalib":26,"vega-dataflow":41,"vega-logging":47}],114:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     bound = require('vega-scenegraph').bound,
@@ -17942,7 +17704,7 @@
 module.exports = Transition;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./Builder":111,"vega-dataflow":42,"vega-scenegraph":49}],116:[function(require,module,exports){
+},{"./Builder":110,"vega-dataflow":41,"vega-scenegraph":48}],115:[function(require,module,exports){
 var dl = require('datalib'),
     Tuple = require('vega-dataflow').Tuple,
     parseMark = require('../parse/mark');
@@ -18575,7 +18337,7 @@
 }
 
 module.exports = axs;
-},{"../parse/mark":100,"datalib":27,"vega-dataflow":42,"vega-scenegraph":49}],117:[function(require,module,exports){
+},{"../parse/mark":99,"datalib":26,"vega-dataflow":41,"vega-scenegraph":48}],116:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
@@ -19112,7 +18874,7 @@
 module.exports = lgnd;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"../parse/mark":100,"../parse/properties":105,"datalib":27,"vega-scenegraph":49}],118:[function(require,module,exports){
+},{"../parse/mark":99,"../parse/properties":104,"datalib":26,"vega-scenegraph":48}],117:[function(require,module,exports){
 module.exports = function visit(node, func) {
   var i, n, s, m, items;
   if (func(node)) return true;
@@ -19126,7 +18888,7 @@
     }
   }
 };
-},{}],119:[function(require,module,exports){
+},{}],118:[function(require,module,exports){
 var dl = require('datalib'),
     df = require('vega-dataflow'),
     log = require('vega-logging'),
@@ -19339,7 +19101,7 @@
 };
 
 module.exports = Aggregate;
-},{"./Facetor":125,"./Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],120:[function(require,module,exports){
+},{"./Facetor":124,"./Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],119:[function(require,module,exports){
 var Base = require('./Transform').prototype;
 
 function BatchTransform() {
@@ -19364,7 +19126,7 @@
 };
 
 module.exports = BatchTransform;
-},{"./Transform":140}],121:[function(require,module,exports){
+},{"./Transform":139}],120:[function(require,module,exports){
 var dl = require('datalib'),
     Tuple = require('vega-dataflow').Tuple,
     log = require('vega-logging'),
@@ -19449,7 +19211,7 @@
 };
 
 module.exports = Bin;
-},{"./BatchTransform":120,"./Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],122:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],121:[function(require,module,exports){
 var df = require('vega-dataflow'),
     Tuple = df.Tuple,
     log = require('vega-logging'),
@@ -19574,12 +19336,11 @@
 };
 
 module.exports = CountPattern;
-},{"./Transform":140,"vega-dataflow":42,"vega-logging":48}],123:[function(require,module,exports){
+},{"./Transform":139,"vega-dataflow":41,"vega-logging":47}],122:[function(require,module,exports){
 var dl = require('datalib'),
     df = require('vega-dataflow'),
     ChangeSet = df.ChangeSet,
     Tuple = df.Tuple,
-    SIGNALS = df.Dependencies.SIGNALS,
     log = require('vega-logging'),
     Transform = require('./Transform'),
     BatchTransform = require('./BatchTransform');
@@ -19595,7 +19356,7 @@
   this._output = {'left': 'a', 'right': 'b'};
   this._lastWith = null; // Last time we crossed w/with-ds.
   this._cids  = {};
-  this._cache = {}; 
+  this._cache = {};
 
   return this.router(true).produces(true);
 }
@@ -19603,7 +19364,7 @@
 var prototype = (Cross.prototype = Object.create(BatchTransform.prototype));
 prototype.constructor = Cross;
 
-// Each cached incoming tuple also has a flag to determine whether 
+// Each cached incoming tuple also has a flag to determine whether
 // any tuples were filtered.
 function _cache(x, t) {
   var c = this._cache,
@@ -19619,7 +19380,7 @@
   var as = this._output,
       cache = this._cache,
       cids  = this._cids,
-      oadd  = output.add, 
+      oadd  = output.add,
       fltrd = false,
       i = 0, len = data.length,
       t = {}, y, cid;
@@ -19634,7 +19395,7 @@
     Tuple.set(t, as.right, left ? y : x);
 
     // Only ingest a tuple if we keep it around. Otherwise, flag the
-    // caches as filtered. 
+    // caches as filtered.
     if (!test || test(t)) {
       oadd.push(t=Tuple.ingest(t));
       _cache.call(this, x, t);
@@ -19663,7 +19424,7 @@
       i, t, y, l, cid;
 
   // If we have cached values, iterate through them for lazy
-  // removal, and to re-run the filter. 
+  // removal, and to re-run the filter.
   if (tpls) {
     for (i=tpls.length-1; i>=0; --i) {
       t = tpls[i];
@@ -19693,14 +19454,14 @@
 
   // If we have a filter param, call add to catch any tuples that may
   // have previously been filtered.
-  if (test && fltrd) add.call(this, output, left, data, diag, test, mids, x); 
+  if (test && fltrd) add.call(this, output, left, data, diag, test, mids, x);
 }
 
 function rem(output, left, rids, x) {
   var as = this._output,
       cross = this._cache[x._id],
       cids  = this._cids,
-      orem  = output.rem, 
+      orem  = output.rem,
       i, len, t, y, l;
   if (!cross) return;
 
@@ -19742,13 +19503,10 @@
 prototype.batchTransform = function(input, data, reset) {
   log.debug(input, ['crossing']);
 
-  var g = this._graph,
-      w = this.param('with'),
-      f = this.param('filter'),
+  var w = this.param('with'),
       diag = this.param('diagonal'),
       as = this._output,
-      sg = g.values(SIGNALS, this.dependency(SIGNALS)),
-      test = f ? function(x) {return f(x, null, sg); } : null,
+      test = this.param('filter') || null,
       selfCross = (!w.name),
       woutput = selfCross ? input : w.source.last(),
       wdata   = selfCross ? data : w.source.values(),
@@ -19782,7 +19540,7 @@
 };
 
 module.exports = Cross;
-},{"./BatchTransform":120,"./Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],124:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],123:[function(require,module,exports){
 var Transform = require('./Transform'),
     Aggregate = require('./Aggregate');
 
@@ -19829,7 +19587,7 @@
 };
 
 module.exports = Facet;
-},{"../parse/transforms":109,"./Aggregate":119,"./Transform":140}],125:[function(require,module,exports){
+},{"../parse/transforms":108,"./Aggregate":118,"./Transform":139}],124:[function(require,module,exports){
 var dl = require('datalib'),
     Aggregator = dl.Aggregator,
     Base = Aggregator.prototype,
@@ -19928,9 +19686,8 @@
 };
 
 module.exports = Facetor;
-},{"datalib":27,"vega-dataflow":42,"vega-logging":48}],126:[function(require,module,exports){
+},{"datalib":26,"vega-dataflow":41,"vega-logging":47}],125:[function(require,module,exports){
 var df = require('vega-dataflow'),
-    SIGNALS = df.Dependencies.SIGNALS,
     log = require('vega-logging'),
     Transform = require('./Transform');
 
@@ -19949,10 +19706,8 @@
   log.debug(input, ['filtering']);
 
   var output = df.ChangeSet.create(input),
-      graph = this._graph,
       skip = this._skip,
-      test = this.param('test'),
-      signals = graph.values(SIGNALS, this.dependency(SIGNALS));
+      test = this.param('test');
 
   input.rem.forEach(function(x) {
     if (skip[x._id] !== 1) output.rem.push(x);
@@ -19960,12 +19715,12 @@
   });
 
   input.add.forEach(function(x) {
-    if (test(x, null, signals)) output.add.push(x);
+    if (test(x)) output.add.push(x);
     else skip[x._id] = 1;
   });
 
   input.mod.forEach(function(x) {
-    var b = test(x, null, signals),
+    var b = test(x),
         s = (skip[x._id] === 1);
     if (b && s) {
       skip[x._id] = 0;
@@ -19984,7 +19739,7 @@
 };
 
 module.exports = Filter;
-},{"./Transform":140,"vega-dataflow":42,"vega-logging":48}],127:[function(require,module,exports){
+},{"./Transform":139,"vega-dataflow":41,"vega-logging":47}],126:[function(require,module,exports){
 var df = require('vega-dataflow'),
     Tuple = df.Tuple,
     log = require('vega-logging'),
@@ -20056,7 +19811,7 @@
 };
 
 module.exports = Fold;
-},{"./Transform":140,"vega-dataflow":42,"vega-logging":48}],128:[function(require,module,exports){
+},{"./Transform":139,"vega-dataflow":41,"vega-logging":47}],127:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     df = require('vega-dataflow'),
@@ -20266,10 +20021,9 @@
 module.exports = Force;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./Transform":140,"./screen":146,"vega-dataflow":42,"vega-logging":48}],129:[function(require,module,exports){
+},{"./Transform":139,"./screen":145,"vega-dataflow":41,"vega-logging":47}],128:[function(require,module,exports){
 var df = require('vega-dataflow'),
     Tuple = df.Tuple,
-    SIGNALS = df.Dependencies.SIGNALS,
     log = require('vega-logging'),
     Transform = require('./Transform');
 
@@ -20289,13 +20043,11 @@
 prototype.transform = function(input) {
   log.debug(input, ['formulating']);
 
-  var g = this._graph,
-      field = this.param('field'),
-      expr = this.param('expr'),
-      signals = g.values(SIGNALS, this.dependency(SIGNALS));
+  var field = this.param('field'),
+      expr = this.param('expr');
 
   function set(x) {
-    Tuple.set(x, field, expr(x, null, signals));
+    Tuple.set(x, field, expr(x));
   }
 
   input.add.forEach(set);
@@ -20309,7 +20061,7 @@
 };
 
 module.exports = Formula;
-},{"./Transform":140,"vega-dataflow":42,"vega-logging":48}],130:[function(require,module,exports){
+},{"./Transform":139,"vega-dataflow":41,"vega-logging":47}],129:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
@@ -20400,7 +20152,7 @@
 module.exports = Geo;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./Transform":140,"./screen":146,"datalib":27,"vega-dataflow":42,"vega-logging":48}],131:[function(require,module,exports){
+},{"./Transform":139,"./screen":145,"datalib":26,"vega-dataflow":41,"vega-logging":47}],130:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
@@ -20450,7 +20202,7 @@
 module.exports = GeoPath;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./Geo":130,"./Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],132:[function(require,module,exports){
+},{"./Geo":129,"./Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],131:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
@@ -20553,7 +20305,7 @@
 module.exports = Hierarchy;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./BatchTransform":120,"./Transform":140,"./screen":146,"datalib":27,"vega-dataflow":42,"vega-logging":48}],133:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"./screen":145,"datalib":26,"vega-dataflow":41,"vega-logging":47}],132:[function(require,module,exports){
 var dl = require('datalib'),
     log = require('vega-logging'),
     Tuple = require('vega-dataflow').Tuple,
@@ -20656,7 +20408,7 @@
 }
 
 module.exports = Impute;
-},{"./BatchTransform":120,"./Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],134:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],133:[function(require,module,exports){
 var Tuple = require('vega-dataflow').Tuple,
     log = require('vega-logging'),
     Transform = require('./Transform');
@@ -20783,7 +20535,7 @@
 };
 
 module.exports = LinkPath;
-},{"./Transform":140,"vega-dataflow":42,"vega-logging":48}],135:[function(require,module,exports){
+},{"./Transform":139,"vega-dataflow":41,"vega-logging":47}],134:[function(require,module,exports){
 var Tuple = require('vega-dataflow').Tuple,
     log = require('vega-logging'),
     Transform = require('./Transform');
@@ -20855,10 +20607,9 @@
 };
 
 module.exports = Lookup;
-},{"./Transform":140,"vega-dataflow":42,"vega-logging":48}],136:[function(require,module,exports){
+},{"./Transform":139,"vega-dataflow":41,"vega-logging":47}],135:[function(require,module,exports){
 var dl = require('datalib'),
-    Deps = require('vega-dataflow').Dependencies,
-    expr = require('../parse/expr');
+    Deps = require('vega-dataflow').Dependencies;
 
 var arrayType = /array/i,
     dataType  = /data/i,
@@ -20929,6 +20680,7 @@
 
 prototype.set = function(value) {
   var p = this,
+      graph = p._transform._graph,
       isExpr = exprType.test(this._type),
       isData  = dataType.test(this._type),
       isField = fieldType.test(this._type);
@@ -20938,7 +20690,7 @@
     var e;
     if (dl.isString(v)) {
       if (isExpr) {
-        e = expr(v);
+        e = graph.expr(v);
         p._transform.dependency(Deps.FIELDS,  e.fields);
         p._transform.dependency(Deps.SIGNALS, e.globals);
         return e.fn;
@@ -20966,13 +20718,11 @@
       return v.signal;
     } else if (v.expr !== undefined) {
       p._resolution = true;
-      e = expr(v.expr);
+      e = graph.expr(v.expr);
       p._transform.dependency(Deps.SIGNALS, e.globals);
       p._signals.push({
         index: i,
-        value: function(graph) {
-          return e.fn(null, null, graph.values(Deps.SIGNALS, e.globals));
-        }
+        value: function() { return e.fn(); }
       });
       return v.expr;
     }
@@ -20984,7 +20734,7 @@
 };
 
 module.exports = Parameter;
-},{"../parse/expr":97,"datalib":27,"vega-dataflow":42}],137:[function(require,module,exports){
+},{"datalib":26,"vega-dataflow":41}],136:[function(require,module,exports){
 var dl = require('datalib'),
     Tuple = require('vega-dataflow').Tuple,
     log = require('vega-logging'),
@@ -21050,7 +20800,7 @@
 };
 
 module.exports = Pie;
-},{"./BatchTransform":120,"./Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],138:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],137:[function(require,module,exports){
 var dl = require('datalib'),
     log  = require('vega-logging'),
     Transform = require('./Transform');
@@ -21074,7 +20824,7 @@
 };
 
 module.exports = Sort;
-},{"./Transform":140,"datalib":27,"vega-logging":48}],139:[function(require,module,exports){
+},{"./Transform":139,"datalib":26,"vega-logging":47}],138:[function(require,module,exports){
 var dl = require('datalib'),
     Tuple = require('vega-dataflow').Tuple,
     log = require('vega-logging'),
@@ -21172,7 +20922,7 @@
 }
 
 module.exports = Stack;
-},{"./BatchTransform":120,"./Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],140:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],139:[function(require,module,exports){
 var df = require('vega-dataflow'),
     Base = df.Node.prototype, // jshint ignore:line
     Deps = df.Dependencies,
@@ -21233,7 +20983,7 @@
 };
 
 module.exports = Transform;
-},{"./Parameter":136,"vega-dataflow":42}],141:[function(require,module,exports){
+},{"./Parameter":135,"vega-dataflow":41}],140:[function(require,module,exports){
 var dl = require('datalib'),
     Tuple = require('vega-dataflow').Tuple,
     log = require('vega-logging'),
@@ -21298,7 +21048,7 @@
 };
 
 module.exports = Treeify;
-},{"./BatchTransform":120,"./Transform":140,"datalib":27,"vega-dataflow":42,"vega-logging":48}],142:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"datalib":26,"vega-dataflow":41,"vega-logging":47}],141:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     dl = require('datalib'),
@@ -21388,7 +21138,7 @@
 module.exports = Treemap;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./BatchTransform":120,"./Transform":140,"./screen":146,"datalib":27,"vega-dataflow":42,"vega-logging":48}],143:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"./screen":145,"datalib":26,"vega-dataflow":41,"vega-logging":47}],142:[function(require,module,exports){
 (function (global){
 var d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
     Tuple = require('vega-dataflow/src/Tuple'),
@@ -21439,7 +21189,7 @@
 module.exports = Voronoi;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./BatchTransform":120,"./Transform":140,"./screen":146,"vega-dataflow/src/Tuple":41,"vega-logging":48}],144:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"./screen":145,"vega-dataflow/src/Tuple":40,"vega-logging":47}],143:[function(require,module,exports){
 (function (global){
 var dl = require('datalib'),
     d3 = (typeof window !== "undefined" ? window['d3'] : typeof global !== 
"undefined" ? global['d3'] : null),
@@ -21448,8 +21198,7 @@
     Tuple = require('vega-dataflow/src/Tuple'),
     log = require('vega-logging'),
     Transform = require('./Transform'),
-    BatchTransform = require('./BatchTransform'),
-    Parameter = require('./Parameter');
+    BatchTransform = require('./BatchTransform');
 
 function Wordcloud(graph) {
   BatchTransform.prototype.init.call(this, graph);
@@ -21553,7 +21302,7 @@
 module.exports = Wordcloud;
 }).call(this,typeof global !== "undefined" ? global : typeof self !== 
"undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{"./BatchTransform":120,"./Parameter":136,"./Transform":140,"./screen":146,"datalib":27,"vega-dataflow/src/Tuple":41,"vega-logging":48,"vega-scenegraph":49}],145:[function(require,module,exports){
+},{"./BatchTransform":119,"./Transform":139,"./screen":145,"datalib":26,"vega-dataflow/src/Tuple":40,"vega-logging":47,"vega-scenegraph":48}],144:[function(require,module,exports){
 module.exports = {
   aggregate:    require('./Aggregate'),
   bin:          require('./Bin'),
@@ -21578,7 +21327,7 @@
   voronoi:      require('./Voronoi'),
   wordcloud:    require('./Wordcloud')
 };
-},{"./Aggregate":119,"./Bin":121,"./CountPattern":122,"./Cross":123,"./Facet":124,"./Filter":126,"./Fold":127,"./Force":128,"./Formula":129,"./Geo":130,"./GeoPath":131,"./Hierarchy":132,"./Impute":133,"./LinkPath":134,"./Lookup":135,"./Pie":137,"./Sort":138,"./Stack":139,"./Treeify":141,"./Treemap":142,"./Voronoi":143,"./Wordcloud":144}],146:[function(require,module,exports){
+},{"./Aggregate":118,"./Bin":120,"./CountPattern":121,"./Cross":122,"./Facet":123,"./Filter":125,"./Fold":126,"./Force":127,"./Formula":128,"./Geo":129,"./GeoPath":130,"./Hierarchy":131,"./Impute":132,"./LinkPath":133,"./Lookup":134,"./Pie":136,"./Sort":137,"./Stack":138,"./Treeify":140,"./Treemap":141,"./Voronoi":142,"./Wordcloud":143}],145:[function(require,module,exports){
 module.exports = {
   size:   [{signal: 'width'}, {signal: 'height'}],
   mid:    [{expr: 'width/2'}, {expr: 'height/2'}],

-- 
To view, visit https://gerrit.wikimedia.org/r/261886
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ibe00a761c74b059e8a05c2dd471ffaad99cb6da6
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Graph
Gerrit-Branch: master
Gerrit-Owner: Yurik <yu...@wikimedia.org>
Gerrit-Reviewer: Yurik <yu...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to