UNPKG

aurelia-bootstrap

Version:
107 lines (92 loc) 3.22 kB
/* */ define(['exports', 'aurelia-binding'], function (exports, _aureliaBinding) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateOverrideContexts = updateOverrideContexts; exports.createFullOverrideContext = createFullOverrideContext; exports.updateOverrideContext = updateOverrideContext; exports.getItemsSourceExpression = getItemsSourceExpression; exports.unwrapExpression = unwrapExpression; exports.isOneTime = isOneTime; exports.updateOneTimeBinding = updateOneTimeBinding; exports.indexOf = indexOf; var oneTime = _aureliaBinding.bindingMode.oneTime; function updateOverrideContexts(views, startIndex) { var length = views.length; if (startIndex > 0) { startIndex = startIndex - 1; } for (; startIndex < length; ++startIndex) { updateOverrideContext(views[startIndex].overrideContext, startIndex, length); } } function createFullOverrideContext(repeat, data, index, length, key) { var bindingContext = {}; var overrideContext = (0, _aureliaBinding.createOverrideContext)(bindingContext, repeat.scope.overrideContext); if (typeof key !== 'undefined') { bindingContext[repeat.key] = key; bindingContext[repeat.value] = data; } else { bindingContext[repeat.local] = data; } updateOverrideContext(overrideContext, index, length); return overrideContext; } function updateOverrideContext(overrideContext, index, length) { var first = index === 0; var last = index === length - 1; var even = index % 2 === 0; overrideContext.$index = index; overrideContext.$first = first; overrideContext.$last = last; overrideContext.$middle = !(first || last); overrideContext.$odd = !even; overrideContext.$even = even; } function getItemsSourceExpression(instruction, attrName) { return instruction.behaviorInstructions.filter(function (bi) { return bi.originalAttrName === attrName; })[0].attributes.items.sourceExpression; } function unwrapExpression(expression) { var unwrapped = false; while (expression instanceof _aureliaBinding.BindingBehavior) { expression = expression.expression; } while (expression instanceof _aureliaBinding.ValueConverter) { expression = expression.expression; unwrapped = true; } return unwrapped ? expression : null; } function isOneTime(expression) { while (expression instanceof _aureliaBinding.BindingBehavior) { if (expression.name === 'oneTime') { return true; } expression = expression.expression; } return false; } function updateOneTimeBinding(binding) { if (binding.call && binding.mode === oneTime) { binding.call(_aureliaBinding.sourceContext); } else if (binding.updateOneTimeBindings) { binding.updateOneTimeBindings(); } } function indexOf(array, item, matcher, startIndex) { if (!matcher) { return array.indexOf(item); } var length = array.length; for (var index = startIndex || 0; index < length; index++) { if (matcher(array[index], item)) { return index; } } return -1; } });