for (i=0, n=path.length; i<n; ++i) { for (command=path[i], j=0, m=command.length; j<m; ++j) { if (command[j] === 'Z') break; if ((current = +command[j]) === current) { // if number, need to resize index = pathStr.indexOf(current); newPath += pathStr.substring(0, index) + (current * size); pathStr = pathStr.substring(index + (current+'').length); } } } return newPath + 'Z'; } }, symbolTypes: dl.toMap(d3_svg.symbolTypes), textAlign: { 'left': 'start', 'center': 'middle', 'right': 'end' }, textBaseline: { 'top': 'before-edge', 'bottom': 'after-edge', 'middle': 'central' }, styles: { 'fill': 'fill', 'fillOpacity': 'fill-opacity', 'stroke': 'stroke', 'strokeWidth': 'stroke-width',
} prototype.data = function(data) { var v = this; if (!arguments.length) return v._model.values(); else if (dl.isString(data)) return streaming.call(v, data); else if (dl.isObject(data)) { dl.keys(data).forEach(function(k) { var api = streaming.call(v, k); data[k](api); }); } return this; }; var VIEW_SIGNALS = dl.toMap(['width', 'height', 'padding']); prototype.signal = function(name, value, skip) { var m = this._model, key, values; // Getter. Returns the value for the specified signal, or // returns all signal values. if (!arguments.length) { return m.values(Deps.SIGNALS); } else if (arguments.length === 1 && dl.isString(name)) { return m.values(Deps.SIGNALS, name); } // Setter. Can be done in batch or individually. In either case, // the final argument determines if set signals should be skipped.