You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2012/03/27 08:55:34 UTC
svn commit: r1305746 - in
/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp:
index.html js/archiva/proxy-connectors.js js/archiva/repository-groups.js
js/knockout-sortable.js
Author: olamy
Date: Tue Mar 27 06:55:34 2012
New Revision: 1305746
URL: http://svn.apache.org/viewvc?rev=1305746&view=rev
Log:
restore drag&drop support for proxy connectors and repo groups
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/knockout-sortable.js (with props)
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors.js
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repository-groups.js
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html?rev=1305746&r1=1305745&r2=1305746&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/index.html Tue Mar 27 06:55:34 2012
@@ -87,6 +87,7 @@
"jquery_json": "jquery.json-2.3.min",
"knockout": "knockout-2.0.0.debug",
"knockout.simpleGrid": "knockout.simpleGrid",
+ "knockout.sortable": "knockout-sortable",
"redback": "redback/redback",
"general-admin":"archiva/general-admin",
"redback-templates": "redback/redback-tmpl",
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors.js
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors.js?rev=1305746&r1=1305745&r2=1305746&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors.js (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors.js Tue Mar 27 06:55:34 2012
@@ -17,7 +17,7 @@
* under the License.
*/
define("proxy-connectors",["jquery","i18n","jquery_tmpl","bootstrap","jquery_validate","order!knockout"
- ,"order!knockout.simpleGrid"], function() {
+ ,"order!knockout.simpleGrid","knockout.sortable"], function() {
ProxyConnector=function(sourceRepoId,targetRepoId,proxyId,blackListPatterns,whiteListPatterns,policiesEntries,propertiesEntries,
disabled,order){
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repository-groups.js
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repository-groups.js?rev=1305746&r1=1305745&r2=1305746&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repository-groups.js (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repository-groups.js Tue Mar 27 06:55:34 2012
@@ -16,7 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-define("repository-groups",["jquery","i18n","jquery_tmpl","bootstrap","jquery_validate","jquery_ui"],
+define("repository-groups",["jquery","i18n","jquery_tmpl","bootstrap","jquery_validate","jquery_ui","order!knockout"
+ ,"order!knockout.simpleGrid","knockout.sortable"],
function() {
RepositoryGroup=function(id,repositories){
Added: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/knockout-sortable.js
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/knockout-sortable.js?rev=1305746&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/knockout-sortable.js (added)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/knockout-sortable.js Tue Mar 27 06:55:34 2012
@@ -0,0 +1,136 @@
+//knockout-sortable | (c) 2012 Ryan Niemeyer | http://www.opensource.org/licenses/mit-license
+(function(ko, $, undefined) {
+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();
+ }
+
+ //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;
+};
+
+//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);
+ }
+
+ //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 (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 (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
+ }));
+
+ //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: {}
+};
+})(ko, jQuery);
\ No newline at end of file
Propchange: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/knockout-sortable.js
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/knockout-sortable.js
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision