MCPcopy Create free account
hub / github.com/plotly/plotly.js / viewModel

Function viewModel

src/traces/parcoords/parcoords.js:214–348  ·  view source on GitHub ↗
(state, callbacks, model)

Source from the content-addressed store, hash-verified

212}
213
214function viewModel(state, callbacks, model) {
215 var width = model.width;
216 var height = model.height;
217 var dimensions = model.dimensions;
218 var canvasPixelRatio = model.canvasPixelRatio;
219
220 var xScale = function(d) {return width * d / Math.max(1, model.colCount - 1);};
221
222 var unitPad = c.verticalPadding / height;
223 var _unitToPaddedPx = unitToPaddedPx(height, c.verticalPadding);
224
225 var vm = {
226 key: model.key,
227 xScale: xScale,
228 model: model,
229 inBrushDrag: false // consider factoring it out and putting it in a centralized global-ish gesture state object
230 };
231
232 var uniqueKeys = {};
233
234 vm.dimensions = dimensions.filter(helpers.isVisible).map(function(dimension, i) {
235 var domainToPaddedUnit = domainToPaddedUnitScale(dimension, unitPad);
236 var foundKey = uniqueKeys[dimension.label];
237 uniqueKeys[dimension.label] = (foundKey || 0) + 1;
238 var key = dimension.label + (foundKey ? '__' + foundKey : '');
239 var specifiedConstraint = dimension.constraintrange;
240 var filterRangeSpecified = specifiedConstraint && specifiedConstraint.length;
241 if(filterRangeSpecified && !isArrayOrTypedArray(specifiedConstraint[0])) {
242 specifiedConstraint = [specifiedConstraint];
243 }
244 var filterRange = filterRangeSpecified ?
245 specifiedConstraint.map(function(d) { return d.map(domainToPaddedUnit); }) :
246 [[-Infinity, Infinity]];
247 var brushMove = function() {
248 var p = vm;
249 p.focusLayer && p.focusLayer.render(p.panels, true);
250 var filtersActive = someFiltersActive(p);
251 if(!state.contextShown() && filtersActive) {
252 p.contextLayer && p.contextLayer.render(p.panels, true);
253 state.contextShown(true);
254 } else if(state.contextShown() && !filtersActive) {
255 p.contextLayer && p.contextLayer.render(p.panels, true, true);
256 state.contextShown(false);
257 }
258 };
259
260 var truncatedValues = dimension.values;
261 if(truncatedValues.length > dimension._length) {
262 truncatedValues = truncatedValues.slice(0, dimension._length);
263 }
264
265 var tickvals = dimension.tickvals;
266 var ticktext;
267 function makeTickItem(v, i) { return {val: v, text: ticktext[i]}; }
268 function sortTickItem(a, b) { return a.val - b.val; }
269 if(isArrayOrTypedArray(tickvals) && tickvals.length) {
270 if(Lib.isTypedArray(tickvals)) tickvals = Array.from(tickvals);
271

Callers

nothing calls this directly

Calls 6

unitToPaddedPxFunction · 0.85
domainToPaddedUnitScaleFunction · 0.85
domainScaleFunction · 0.85
ordinalScaleFunction · 0.85
xScaleFunction · 0.70
isArrayOrTypedArrayFunction · 0.50

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…