ensure loading of binding

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1305764 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2012-03-27 07:51:19 +00:00
parent d6ff031829
commit 0c25b4ea01
3 changed files with 123 additions and 123 deletions

View File

@ -85,7 +85,7 @@
"choosen": "chosen.jquery-0.9.7",
"jquery_validate": "jquery.validate-1.9.0",
"jquery_json": "jquery.json-2.3.min",
"knockout": "knockout-2.0.0.debug",
"knockout": "knockout-2.1.0beta.debug",
"knockout.simpleGrid": "knockout.simpleGrid",
"knockout.sortable": "knockout-sortable",
"redback": "redback/redback",

View File

@ -2,139 +2,139 @@
define("knockout.sortable",["jquery","order!utils","order!knockout"], function() {
(function(ko, $, undefined) {
var prepareTemplateOptions = function(valueAccessor) {
var result = {},
options = ko.utils.unwrapObservable(valueAccessor());
var prepareTemplateOptions = function(valueAccessor) {
var result = {},
options = ko.utils.unwrapObservable(valueAccessor());
//build our options to pass to the template engine
if (options.data) {
result.foreach = options.data;
result.name = options.template;
result.afterAdd = options.afterAdd;
result.beforeRemove = options.beforeRemove;
result.afterRender = options.afterRender;
result.includeDestroyed = options.includeDestroyed;
result.templateEngine = options.templateEngine;
} else {
result.foreach = valueAccessor();
}
//build our options to pass to the template engine
if (options.data) {
result.foreach = options.data;
result.name = options.template;
result.afterAdd = options.afterAdd;
result.beforeRemove = options.beforeRemove;
result.afterRender = options.afterRender;
result.includeDestroyed = options.includeDestroyed;
result.templateEngine = options.templateEngine;
} else {
result.foreach = valueAccessor();
}
//use an afterRender function to add meta-data
if (options.afterRender) {
//wrap the existing function, if it was passed
result.afterRender = function(element, data) {
ko.bindingHandlers.sortable.afterRender.call(data, element, data);
options.afterRender.call(data, element, data);
};
} else {
result.afterRender = ko.bindingHandlers.sortable.afterRender;
}
//use an afterRender function to add meta-data
if (options.afterRender) {
//wrap the existing function, if it was passed
result.afterRender = function(element, data) {
ko.bindingHandlers.sortable.afterRender.call(data, element, data);
options.afterRender.call(data, element, data);
};
} else {
result.afterRender = ko.bindingHandlers.sortable.afterRender;
}
//return options to pass to the template binding
return result;
};
//return options to pass to the template binding
return result;
};
//connect items with observableArrays
ko.bindingHandlers.sortable = {
init: function(element, valueAccessor, allBindingsAccessor, data, context) {
var value = ko.utils.unwrapObservable(valueAccessor()),
templateOptions = prepareTemplateOptions(valueAccessor),
sortable = ko.bindingHandlers.sortable,
connectClass = value.connectClass || sortable.connectClass,
allowDrop = value.allowDrop === undefined ? sortable.allowDrop : value.allowDrop,
beforeMove = value.beforeMove || sortable.beforeMove,
afterMove = value.afterMove || sortable.afterMove,
options = value.options || sortable.options;
//connect items with observableArrays
ko.bindingHandlers.sortable = {
init: function(element, valueAccessor, allBindingsAccessor, data, context) {
var value = ko.utils.unwrapObservable(valueAccessor()),
templateOptions = prepareTemplateOptions(valueAccessor),
sortable = ko.bindingHandlers.sortable,
connectClass = value.connectClass || sortable.connectClass,
allowDrop = value.allowDrop === undefined ? sortable.allowDrop : value.allowDrop,
beforeMove = value.beforeMove || sortable.beforeMove,
afterMove = value.afterMove || sortable.afterMove,
options = value.options || sortable.options;
//if allowDrop is an observable or a function, then execute it in a computed observable
if (ko.isObservable(allowDrop) || typeof allowDrop == "function") {
ko.computed({
read: function() {
var value = ko.utils.unwrapObservable(allowDrop),
shouldAdd = typeof value == "function" ? value.call(this, templateOptions.foreach) : value;
ko.utils.toggleDomNodeCssClass(element, connectClass, shouldAdd);
},
disposeWhenNodeIsRemoved: element
}, this);
} else {
ko.utils.toggleDomNodeCssClass(element, connectClass, allowDrop);
}
//if allowDrop is an observable or a function, then execute it in a computed observable
if (ko.isObservable(allowDrop) || typeof allowDrop == "function") {
ko.computed({
read: function() {
var value = ko.utils.unwrapObservable(allowDrop),
shouldAdd = typeof value == "function" ? value.call(this, templateOptions.foreach) : value;
ko.utils.toggleDomNodeCssClass(element, connectClass, shouldAdd);
},
disposeWhenNodeIsRemoved: element
}, this);
} else {
ko.utils.toggleDomNodeCssClass(element, connectClass, allowDrop);
}
//attach meta-data
$(element).data("ko_sortList", templateOptions.foreach);
$(element).sortable(ko.utils.extend(options, {
update: function(event, ui) {
var sourceParent, targetParent, targetIndex, arg,
item = ui.item.data("ko_sortItem");
//attach meta-data
$(element).data("ko_sortList", templateOptions.foreach);
$(element).sortable(ko.utils.extend(options, {
update: function(event, ui) {
var sourceParent, targetParent, targetIndex, arg,
item = ui.item.data("ko_sortItem");
if (item) {
//identify parents
sourceParent = ui.item.data("ko_parentList");
targetParent = ui.item.parent().data("ko_sortList");
targetIndex = ko.utils.arrayIndexOf(ui.item.parent().children(), ui.item[0]);
if (item) {
//identify parents
sourceParent = ui.item.data("ko_parentList");
targetParent = ui.item.parent().data("ko_sortList");
targetIndex = ko.utils.arrayIndexOf(ui.item.parent().children(), ui.item[0]);
if (beforeMove || afterMove) {
arg = {
item: item,
sourceParent: sourceParent,
sourceIndex: sourceParent.indexOf(item),
targetParent: targetParent,
targetIndex: targetIndex,
cancelDrop: false
};
}
if (beforeMove || afterMove) {
arg = {
item: item,
sourceParent: sourceParent,
sourceIndex: sourceParent.indexOf(item),
targetParent: targetParent,
targetIndex: targetIndex,
cancelDrop: false
};
}
if (beforeMove) {
beforeMove.call(this, arg, event, ui);
if (arg.cancelDrop) {
$(ui.sender).sortable('cancel');
return;
}
}
if (beforeMove) {
beforeMove.call(this, arg, event, ui);
if (arg.cancelDrop) {
$(ui.sender).sortable('cancel');
return;
}
}
if (targetIndex >= 0) {
sourceParent.remove(item);
targetParent.splice(targetIndex, 0, item);
}
//rendering is handled by manipulating the observableArray; ignore dropped element
ui.item.remove();
if (targetIndex >= 0) {
sourceParent.remove(item);
targetParent.splice(targetIndex, 0, item);
}
//rendering is handled by manipulating the observableArray; ignore dropped element
ui.item.remove();
//allow binding to accept a function to execute after moving the item
if (afterMove) {
afterMove.call(this, arg, event, ui);
}
}
},
connectWith: "." + connectClass
}));
//allow binding to accept a function to execute after moving the item
if (afterMove) {
afterMove.call(this, arg, event, ui);
}
}
},
connectWith: "." + connectClass
}));
//handle disposal
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).sortable("destroy");
});
//we are wrapping the template binding
return ko.bindingHandlers.template.init(element, function() { return templateOptions; }, allBindingsAccessor, data, context);
},
update: function(element, valueAccessor, allBindingsAccessor, data, context) {
var templateOptions = prepareTemplateOptions(valueAccessor);
//handle disposal
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).sortable("destroy");
});
//we are wrapping the template binding
return ko.bindingHandlers.template.init(element, function() { return templateOptions; }, allBindingsAccessor, data, context);
},
update: function(element, valueAccessor, allBindingsAccessor, data, context) {
var templateOptions = prepareTemplateOptions(valueAccessor);
//call the actual template binding
ko.bindingHandlers.template.update(element, function() { return templateOptions; }, allBindingsAccessor, data, context);
},
afterRender: function(elements, data) {
ko.utils.arrayForEach(elements, function(element) {
if (element.nodeType === 1) {
$(element).data("ko_sortItem", data);
$(element).data("ko_parentList", $(element).parent().data("ko_sortList"));
}
});
},
connectClass: 'ko_container',
allowDrop: true,
afterMove: null,
beforeMove: null,
options: {}
};
//call the actual template binding
ko.bindingHandlers.template.update(element, function() { return templateOptions; }, allBindingsAccessor, data, context);
},
afterRender: function(elements, data) {
ko.utils.arrayForEach(elements, function(element) {
if (element.nodeType === 1) {
$(element).data("ko_sortItem", data);
$(element).data("ko_parentList", $(element).parent().data("ko_sortList"));
}
});
},
connectClass: 'ko_container',
allowDrop: true,
afterMove: null,
beforeMove: null,
options: {}
};
})(ko, jQuery);
})

View File

@ -11,7 +11,7 @@
define("knockout.simpleGrid",["jquery","order!utils","i18n","order!knockout"], function() {
(function () {
(function (ko, $) {
ko.simpleGrid = {
@ -71,6 +71,6 @@ define("knockout.simpleGrid",["jquery","order!utils","i18n","order!knockout"], f
if (viewModel.pageLinksUpdateCallBack) viewModel.pageLinksUpdateCallBack();
}
};
})();
})(ko, jQuery);
})