Skip to content

Commit

Permalink
Bump version to 2.1.0beta and rebuild
Browse files Browse the repository at this point in the history
  • Loading branch information
SteveSanderson committed Mar 23, 2012
1 parent f9db930 commit 68c356f
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 103 deletions.
2 changes: 1 addition & 1 deletion build/fragments/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.0pre
2.1.0beta
67 changes: 40 additions & 27 deletions build/output/knockout-latest.debug.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Knockout JavaScript library v2.1.0pre
// Knockout JavaScript library v2.1.0beta
// (c) Steven Sanderson - http://knockoutjs.com/
// License: MIT (http://www.opensource.org/licenses/mit-license.php)

Expand Down Expand Up @@ -36,7 +36,7 @@ ko.exportSymbol = function(koPath, object) {
ko.exportProperty = function(owner, publicName, object) {
owner[publicName] = object;
};
ko.version = "2.1.0pre";
ko.version = "2.1.0beta";

ko.exportSymbol('version', ko.version);
ko.utils = new (function () {
Expand Down Expand Up @@ -2952,19 +2952,27 @@ ko.exportSymbol('templateRewriting.applyMemoizedBindingsToNextSibling', ko.templ
}
};

ko.renderTemplateForEach = function (template, arrayOrObservableArray, options, targetNode, parentBindingContext) {
var createInnerBindingContext = function(arrayValue) {
return parentBindingContext['createChildContext'](ko.utils.unwrapObservable(arrayValue));
};
ko.renderTemplateForEach = function (template, arrayOrObservableArray, options, targetNode, parentBindingContext) {
// Since setDomNodeChildrenFromArrayMapping always calls executeTemplateForArrayItem and then
// activateBindingsCallback for added items, we can store the binding context in the former to use in the latter.
var arrayItemContext;

// This will be called by setDomNodeChildrenFromArrayMapping to get the nodes to add to targetNode
var executeTemplateForArrayItem = function (arrayValue, index) {
// Support selecting template as a function of the data being rendered
var templateName = typeof(template) == 'function' ? template(arrayValue) : template;
arrayItemContext = parentBindingContext['createChildContext'](ko.utils.unwrapObservable(arrayValue));
arrayItemContext['$index'] = index;
return executeTemplate(null, "ignoreTargetNode", templateName, arrayItemContext, options);
}

// This will be called whenever setDomNodeChildrenFromArrayMapping has added nodes to targetNode
var activateBindingsCallback = function(arrayValue, addedNodesArray) {
var bindingContext = createInnerBindingContext(arrayValue);
activateBindingsOnContinuousNodeArray(addedNodesArray, bindingContext);
var activateBindingsCallback = function(arrayValue, addedNodesArray, index) {
activateBindingsOnContinuousNodeArray(addedNodesArray, arrayItemContext);
if (options['afterRender'])
options['afterRender'](addedNodesArray, bindingContext['$data']);
options['afterRender'](addedNodesArray, arrayValue);
};

return ko.dependentObservable(function () {
var unwrappedArray = ko.utils.unwrapObservable(arrayOrObservableArray) || [];
if (typeof unwrappedArray.length == "undefined") // Coerce single value into array
Expand All @@ -2975,11 +2983,7 @@ ko.exportSymbol('templateRewriting.applyMemoizedBindingsToNextSibling', ko.templ
return options['includeDestroyed'] || item === undefined || item === null || !ko.utils.unwrapObservable(item['_destroy']);
});

ko.utils.setDomNodeChildrenFromArrayMapping(targetNode, filteredArray, function (arrayValue) {
// Support selecting template as a function of the data being rendered
var templateName = typeof(template) == 'function' ? template(arrayValue) : template;
return executeTemplate(null, "ignoreTargetNode", templateName, createInnerBindingContext(arrayValue), options);
}, options, activateBindingsCallback);
ko.utils.setDomNodeChildrenFromArrayMapping(targetNode, filteredArray, executeTemplateForArrayItem, options, activateBindingsCallback);

}, null, { 'disposeWhenNodeIsRemoved': targetNode });
};
Expand Down Expand Up @@ -3177,11 +3181,11 @@ ko.exportSymbol('utils.compareArrays', ko.utils.compareArrays);
}
}

function mapNodeAndRefreshWhenChanged(containerNode, mapping, valueToMap, callbackAfterAddingNodes) {
function mapNodeAndRefreshWhenChanged(containerNode, mapping, valueToMap, callbackAfterAddingNodes, index) {
// Map this array value inside a dependentObservable so we re-map when any dependency changes
var mappedNodes = [];
var dependentObservable = ko.dependentObservable(function() {
var newMappedNodes = mapping(valueToMap) || [];
var newMappedNodes = mapping(valueToMap, index) || [];

// On subsequent evaluations, just replace the previously-inserted DOM nodes
if (mappedNodes.length > 0) {
Expand Down Expand Up @@ -3214,14 +3218,16 @@ ko.exportSymbol('utils.compareArrays', ko.utils.compareArrays);
var newMappingResult = [];
var lastMappingResultIndex = 0;
var nodesToDelete = [];
var newMappingResultIndex = 0;
var nodesAdded = [];
var insertAfterNode = null;
for (var i = 0, j = editScript.length; i < j; i++) {
switch (editScript[i].status) {
case "retained":
// Just keep the information - don't touch the nodes
var dataToRetain = lastMappingResult[lastMappingResultIndex];
newMappingResult.push(dataToRetain);
dataToRetain.indexObservable(newMappingResultIndex);
newMappingResultIndex = newMappingResult.push(dataToRetain);
if (dataToRetain.domNodes.length > 0)
insertAfterNode = dataToRetain.domNodes[dataToRetain.domNodes.length - 1];
lastMappingResultIndex++;
Expand All @@ -3246,11 +3252,17 @@ ko.exportSymbol('utils.compareArrays', ko.utils.compareArrays);

case "added":
var valueToMap = editScript[i].value;
var mapData = mapNodeAndRefreshWhenChanged(domNode, mapping, valueToMap, callbackAfterAddingNodes);
var indexObservable = ko.observable(newMappingResultIndex);
var mapData = mapNodeAndRefreshWhenChanged(domNode, mapping, valueToMap, callbackAfterAddingNodes, indexObservable);
var mappedNodes = mapData.mappedNodes;

// On the first evaluation, insert the nodes at the current insertion point
newMappingResult.push({ arrayEntry: editScript[i].value, domNodes: mappedNodes, dependentObservable: mapData.dependentObservable });
newMappingResultIndex = newMappingResult.push({
arrayEntry: editScript[i].value,
domNodes: mappedNodes,
dependentObservable: mapData.dependentObservable,
indexObservable: indexObservable
});
for (var nodeIndex = 0, nodeIndexMax = mappedNodes.length; nodeIndex < nodeIndexMax; nodeIndex++) {
var node = mappedNodes[nodeIndex];
nodesAdded.push({
Expand All @@ -3268,7 +3280,7 @@ ko.exportSymbol('utils.compareArrays', ko.utils.compareArrays);
insertAfterNode = node;
}
if (callbackAfterAddingNodes)
callbackAfterAddingNodes(valueToMap, mappedNodes);
callbackAfterAddingNodes(valueToMap, mappedNodes, indexObservable);
break;
}
}
Expand All @@ -3287,10 +3299,11 @@ ko.exportSymbol('utils.compareArrays', ko.utils.compareArrays);
invokedBeforeRemoveCallback = true;
}
}
if (!invokedBeforeRemoveCallback)
ko.utils.arrayForEach(nodesToDelete, function (node) {
ko.removeNode(node.element);
});
if (!invokedBeforeRemoveCallback && nodesToDelete.length) {
var commonParent = nodesToDelete[0].element.parentNode;
for (var i = 0; i < nodesToDelete.length; i++)
commonParent.removeChild(nodesToDelete[i].element);
}

// Store a copy of the array items we just considered so we can difference it next time
ko.utils.domData.set(domNode, lastMappingResultDomDataKey, newMappingResult);
Expand Down
Loading

0 comments on commit 68c356f

Please sign in to comment.