UNPKG

ns-components-angular

Version:

Angular Wrapper Components for NSComponents

1 lines 222 kB
export declare const NSListCode = "var nsModuleExport = function(root,name,prototype)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\tmodule.exports[name] = prototype;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\tdefine(name,[], function () {return prototype;});\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\texports[name] = prototype;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\troot[name] = prototype;\r\n\t\t}\r\n\t};var nsIsWeb = function(root)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};if(!nsIsWeb())\r\n\t\t{\r\nvar nsutilRef = require('./nsUtil.min.js');\r\nvar NSUtil = nsutilRef.NSUtil;\r\nvar nscontainerbaseRef = require('./nsContainerBase.min.js');\r\nvar nsExtendPrototype = nscontainerbaseRef.nsExtendPrototype;\r\nvar NSContainerBase = nscontainerbaseRef.NSContainerBase;\r\nvar svgRef = require('./nsSVG.min.js');\r\nvar NSSvg = svgRef.NSSvg;\r\nvar NSSvgShapes = svgRef.NSSvgShapes;\r\nvar plugginsRef = require('./nsPluggins.min.js');\r\nvar nsTextEditor = plugginsRef.nsTextEditor;\r\nvar nsTextAreaEditor = plugginsRef.nsTextAreaEditor;\r\nvar NSCellSelection = plugginsRef.NSCellSelection;\r\nvar NSTableCellNavigator = plugginsRef.NSTableCellNavigator;\r\nvar dateutilRef = require('./nsDateUtil.min.js');\r\nvar NSDateUtil = dateutilRef.NSDateUtil;\r\n\r\n\t\t}\r\nvar NSDragDrop = (function()\r\n{\r\n\tvar NSDragDrop = function(setting)\r\n\t{\r\n\t\tthis.ITEM_DROPPING = \"itemDropping\";\r\n\t\tthis.ITEM_DROPPED = \"itemDropped\";\r\n\t\tthis.DRAG_STARTING = \"dragStarting\";\r\n\t\tthis.DRAG_STARTED = \"dragStarted\";\r\n\t\tthis.DRAGGING = \"dragging\";\r\n\t\tthis.DRAG_END = \"dragEnd\";\r\n\t\t\r\n\t\tthis.__setting = setting;\r\n\t\tthis.util = new NSUtil();\r\n\t\tthis.__id = null;\r\n\t\tthis.__config = null;\r\n\t\tthis.__data = null;\r\n\t\t\r\n\t\tthis.__parentContainerType = null;\r\n\t\tthis.__divMovable = null;\r\n\t\tthis.__compPlaceholder = null;\r\n\t\tthis.__itemPosition = null;\r\n\t\tthis.__objSelectedItem = {scrollableContainer:null,containment:null};\r\n\t\tthis.__lastTarget = null;\r\n\t\tthis.__isDragging = false;\r\n\t\tthis.__holdTimeoutInterval = -1;\r\n\t\tthis.__documentMouseMoveRef = null;\r\n\t\tthis.__documentMouseUpRef = null;\r\n\t\tthis.__documentMouseMoveHoldRef = null;\r\n\t\tthis.__documentMouseUpHoldRef = null;\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.remove = function() \r\n\t{ \r\n\t\t\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.setDragData = function(data) \r\n\t{ \r\n\t\tthis.__data = data;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.getDragData = function() \r\n\t{ \r\n\t\treturn this.__data;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__initialize = function()\r\n\t{\r\n\t\tif(this.__setting)\r\n\t\t{\r\n\t\t\tthis.__config = {\r\n\t\t\t\t\tcontainer: this.__setting[\"container\"] || null,\r\n\t\t\t\t\tchildNodeType: this.__setting[\"childNodeType\"] || null,\r\n\t\t\t\t\tisContainerDraggable:(this.util.isUndefinedOrNull(this.__setting[\"isContainerDraggable\"]) ? true : Boolean.parse(this.__setting[\"isContainerDraggable\"])),\r\n\t\t\t\t\tisContainerDroppable:(this.util.isUndefinedOrNull(this.__setting[\"isContainerDroppable\"]) ? true : Boolean.parse(this.__setting[\"isContainerDroppable\"])),\r\n\t\t\t\t\tenableDragByHandle: Boolean.parse(this.__setting[\"enableDragByHandle\"]),\r\n\t\t\t\t\tdragHandlerClass: this.__setting[\"dragHandlerClass\"] || \"nsDragHandler\",\r\n\t\t\t\t\tenableDragAfterHold: Boolean.parse(this.__setting[\"enableDragAfterHold\"]),\r\n\t\t\t\t\tenableCloneMode: Boolean.parse(this.__setting[\"enableCloneMode\"]),\r\n\t\t\t\t\tholdTime:(this.util.isUndefinedOrNull(this.__setting[\"holdTime\"]) ? 500 : parseInt(this.__setting[\"holdTime\"])),\r\n\t\t\t\t\tcreateCloneCallback: (this.__setting[\"createCloneCallback\"] ? this.util.getFunction(this.__setting[\"createCloneCallback\"]) : null),\r\n\t\t\t\t\tcreatePlaceholderCallback: (this.__setting[\"createPlaceholderCallback\"] ? this.util.getFunction(this.__setting[\"createPlaceholderCallback\"]) : null),\r\n\t\t\t\t\tnodeDroppableCallback: (this.__setting[\"nodeDroppableCallback\"] ? this.util.getFunction(this.__setting[\"nodeDroppableCallback\"]) : null),\r\n\t\t\t\t\tnodeDraggableCallback: (this.__setting[\"containerDroppableCallback\"] ? this.util.getFunction(this.__setting[\"containerDroppableCallback\"]) : null),\r\n\t\t\t\t\tinsertNodeCallback: (this.__setting[\"insertNodeCallback\"] ? this.util.getFunction(this.__setting[\"insertNodeCallback\"]) : null),\r\n\t\t\t\t\tmoveNodeCallback: (this.__setting[\"moveNodeCallback\"] ? this.util.getFunction(this.__setting[\"moveNodeCallback\"]) : null),\r\n\t\t\t\t\tremoveNodeCallback: (this.__setting[\"removeNodeCallback\"] ? this.util.getFunction(this.__setting[\"removeNodeCallback\"]) : null),\r\n\t\t\t\t\tnodeDragHoverClass: this.__setting[\"nodeDragHoverClass\"] || \"nsNodeDragHover\",\r\n\t\t\t\t\tnodeDraggingClass: this.__setting[\"nodeDraggingClass\"] || \"nsNodeDraggingClass\"\r\n\t\t\t};\r\n\t\t\tif(this.__config.container && this.__config.childNodeType)\r\n\t\t\t{\r\n\t\t\t\tthis.__parentContainerType = this.__config.container.tagName;\r\n\t\t\t\tthis.__prepareContainer();\r\n\t\t\t\tthis.__initializeChildren();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__initializeChildren = function()\r\n\t{\r\n\t\tvar arrChildNode = this.__config.container.getElementsByTagName(this.__config.childNodeType);\r\n\t\tvar childNode = null;\r\n\t\tfor (var count = 0; count < arrChildNode.length; count++) \r\n\t\t{\r\n\t\t\tchildNode = arrChildNode[count];\r\n\t\t\tthis.__prepareChildNode(childNode,count);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__prepareContainer = function()\r\n\t{\r\n\t\tvar container = this.__config.container;\r\n\t\tvar nsObject = {};\r\n\t\tnsObject.id = this.__getID(); \r\n\t\tnsObject.isDraggable = this.__config.isContainerDraggable;\r\n\t\tnsObject.isDroppable = this.__config.isContainerDroppable;\r\n\t\tnsObject.insertNode = this.__insertNode.bind(this);\r\n\t\tnsObject.moveNode = this.__moveNode.bind(this);\r\n\t\tnsObject.removeNode = this.__removeNode.bind(this);\r\n\t\tcontainer.nsObject = nsObject;\r\n\t\tvar draggableClass = nsObject.isDraggable ? \"nsDraggableContainer\" : \"nsNonDraggableContainer\";\r\n\t\tvar droppableClass = nsObject.isDroppable ? \"nsDroppableContainer\" : \"nsNonDroppableContainer\";\r\n\t\tthis.util.addStyleClass(container,draggableClass);\t\r\n\t\tthis.util.addStyleClass(container,droppableClass);\r\n\t\tvar containerWebNode = this.util.getWebComponentElement(container);\r\n\t\tcontainerWebNode.nsObject = nsObject;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__prepareChildNode = function(childNode,index)\r\n\t{\r\n\t\tvar isDragEnabled = this.__isNodeDraggable(childNode);\r\n\t\tvar isDropEnabled = this.__isNodeDroppable(childNode);\r\n\t\tvar nsObject = {};\r\n\t\tnsObject.parent = this.__config.container;\r\n\t\tnsObject.index = index;\r\n\t\tthis.util.removeStyleClass(childNode,this.__config.nodeDragHoverClass);\r\n\t\tif(isDragEnabled) \r\n\t\t{\r\n\t\t\tnsObject.position = this.util.getOffSet(childNode);\r\n\t\t\tthis.util.addStyleClass(childNode,\"nsNodeDragEnabled\");\t\r\n\t\t\tif(this.__config.enableDragByHandle)\r\n\t\t\t{\r\n\t\t\t\tvar handle = childNode.querySelector(\".\" + this.__config.dragHandlerClass);\r\n\t\t\t\tif(handle)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.addEvent(handle,\"mousedown\",this.__childMouseDownHandler.bind(this));\r\n\t\t\t\t\tthis.util.addEvent(handle,\"touchstart\",this.__childMouseDownHandler.bind(this));\r\n\t\t\t\t\tthis.util.addEvent(childNode,\"mousedown\",this.__dragStartPreventHandler.bind(this));\r\n\t\t\t\t\tthis.util.addEvent(childNode,\"touchstart\",this.__dragStartPreventHandler.bind(this));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if(this.__config.enableDragAfterHold)\r\n\t\t\t{\r\n\t\t\t\tthis.util.addEvent(childNode,\"mousedown\",this.__childHoldMouseDownHandler.bind(this));\r\n\t\t\t\tthis.util.addEvent(childNode,\"touchstart\",this.__childHoldMouseDownHandler.bind(this));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.util.addEvent(childNode,\"mousedown\",this.__childMouseDownHandler.bind(this));\r\n\t\t\t\tthis.util.addEvent(childNode,\"touchstart\",this.__childMouseDownHandler.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(childNode,\"nsNodeDragDisable\");\t\t\t\t\t\r\n\t\t}\r\n\t\tnsObject.dragEnabled = isDragEnabled;\r\n\t\tnsObject.dropEnabled = isDropEnabled;\r\n\t\tchildNode.nsObject = nsObject;\r\n\t\tvar childWebNode = this.util.getWebComponentElement(childNode);\r\n\t\tchildWebNode.nsObject = nsObject;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__childHoldMouseDownHandler= function(event)\r\n\t{\r\n\t\tthis.__clearHoldTime();\r\n\t\tvar self = this;\r\n\t\tthis.__holdTimeoutInterval = setTimeout(function () {\r\n\t self.__childMouseDownHandler.bind(self)(event);\r\n\t },this.__config.holdTime);\r\n\t\tthis.__addDocumentHoldListener();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__documentMouseMoveHoldHandler = function(event)\r\n\t{\r\n\t\tthis.__clearHoldTime();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__documentMouseUpHoldHandler = function(event)\r\n\t{\r\n\t\tthis.__clearHoldTime();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__childMouseDownHandler= function(event)\r\n\t{\r\n\t\tif(!this.__isDragging)\r\n\t\t{\r\n\t\t\tthis.__clearHoldTime();\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t var target = this.util.getTarget(event);\r\n\t\t target = this.util.findParent(target,this.__config.childNodeType);\r\n\t\t if(target && target[\"nsObject\"] && target[\"nsObject\"][\"dragEnabled\"] && target[\"nsObject\"][\"parent\"] \r\n\t\t \t&& target[\"nsObject\"][\"parent\"][\"nsObject\"] && target[\"nsObject\"][\"parent\"][\"nsObject\"][\"isDraggable\"])\r\n\t\t\t{\r\n\t\t \tvar cancelled = this.util.dispatchEvent(this.__config.container,this.DRAG_STARTING,{node:target},{node:target},true,true);\r\n\t\t \t\tif(!cancelled)\r\n\t\t \t\t{\r\n\t\t\t \tthis.__isDragging = true;\r\n\t\t\t \tthis.__addDocumentListener();\r\n\t\t\t \t//TODO: Find parent with scroll\r\n\t\t\t \tthis.__objSelectedItem.scrollableContainer = document.documentElement;\r\n\t\t\t \t//TODO: Find parent for containment\r\n\t\t\t \tthis.__objSelectedItem.containment = document.body;\r\n\t\t\t \tthis.__itemPosition = this.__positionStarted(event,target,this.__objSelectedItem.scrollableContainer);\r\n\t\t\t\t this.util.makeBodyUnselectable();\r\n\t\t\t\t // remove text selection (Chrome, FF, Opera, Safari)\r\n\t\t\t\t if (window.getSelection) \r\n\t\t\t\t {\r\n\t\t\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// IE8\r\n\t\t\t\t\telse if (document.selection && document.selection.type === \"Text\") \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdocument.selection.empty();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (error) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t if(!this.__config.enableCloneMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__compPlaceholder = this.__createPlaceholder(target);\r\n\t\t\t\t\t\tthis.__compPlaceholder = this.util.getWebComponentElement(this.__compPlaceholder);\r\n\t\t\t\t\t\tthis.util.insertAfterElement(target,this.__compPlaceholder);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.__divMovable = this.__cloneNode(target);\r\n\t\t\t\t\tthis.util.addStyleClass(target,this.__config.nodeDraggingClass);\r\n\t\t\t\t\tthis.__movePosition(event,this.__divMovable,this.__itemPosition,this.__objSelectedItem.containment,\"absolute\",this.__objSelectedItem.scrollableContainer);\r\n\t\t\t\t\t//adding offset to movable component if enableDragAfterHold is true so that users see that a clone has been created\r\n\t\t\t\t\tif(this.__config.enableDragAfterHold)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar rectMovable = this.__divMovable.getBoundingClientRect();\r\n\t\t\t\t\t\tthis.__divMovable.style.left = (rectMovable.left + 5) + \"px\";\r\n\t\t\t\t\t\tthis.__divMovable.style.top = (rectMovable.top + 5) + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.util.dispatchEvent(this.__config.container,this.DRAG_STARTED,target,{item:target});\r\n\t\t\t\t\t//assuming data has been set as this is last step before dragging starts\r\n\t\t\t\t\ttarget[\"nsObject\"][\"data\"] = this.util.cloneObject(this.__data);\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t \t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__documentMouseMoveHandler = function(event)\r\n\t{\r\n\t\tif(this.__divMovable)\r\n\t\t{\r\n\t\t\tvar orignalNode = null;\r\n\t\t\tif(this.__divMovable[\"nsObject\"] && this.__divMovable[\"nsObject\"][\"orignalNode\"])\r\n\t\t\t{\r\n\t\t\t\torignalNode = this.__divMovable[\"nsObject\"][\"orignalNode\"];\r\n\t\t\t}\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t\tvar objTargetElement = this.__getTargetElementDetails(event,orignalNode);\r\n\t\t\tvar targetX = objTargetElement.x;\r\n\t\t var targetY = objTargetElement.y;\r\n\t\t var targetElement = objTargetElement.element;\r\n\t\t if(this.__lastTarget)\r\n\t\t {\r\n\t\t \tthis.util.removeStyleClass(this.__lastTarget,this.__config.nodeDragHoverClass);\r\n\t\t }\r\n\t\t this.__movePosition(event,this.__divMovable,this.__itemPosition, this.__objSelectedItem.containment,\"absolute\",this.__objSelectedItem.scrollableContainer);\r\n\t\t if(targetElement && targetElement[\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"] \r\n\t \t\t&& targetElement[\"nsObject\"][\"parent\"][\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"][\"nsObject\"][\"isDroppable\"])\r\n\t\t {\r\n\t\t \tvar container = objTargetElement.parent;\r\n\t\t\t var objTargetNSObject = targetElement[\"nsObject\"];\r\n\t\t\t if(this.__config.enableCloneMode)\r\n\t\t\t {\r\n\t\t\t \tthis.util.addStyleClass(targetElement,this.__config.nodeDragHoverClass);\r\n\t\t\t }\r\n\t\t\t else\r\n\t\t\t {\r\n\t\t\t \tif (this.__lastTarget !== targetElement) \r\n\t\t\t \t{\r\n\t\t\t \t\tvar placeholderIndex = this.__getPlaceHolderIndex(container);\r\n\t\t\t\t if (placeholderIndex < 0) \r\n\t\t\t\t {\r\n\t\t\t\t \tthis.__insertBefore(targetElement);\r\n\t\t\t\t } \r\n\t\t\t\t else \r\n\t\t\t\t {\r\n\t\t\t\t \tif (placeholderIndex <= objTargetNSObject.index) \r\n\t\t\t\t\t {\r\n\t\t\t\t \t\tthis.__insertAfter(targetElement);\r\n\t\t\t\t\t } \r\n\t\t\t\t\t else \r\n\t\t\t\t\t {\r\n\t\t\t\t\t \tthis.__insertBefore(targetElement);\r\n\t\t\t\t\t }\r\n\t\t\t\t }\r\n\t\t\t }\r\n\t\t\t }\r\n\t\t }\r\n\t \t var data = {node:orignalNode,x:targetX,y:targetY,targetNode:targetElement};\r\n\t \t this.util.dispatchEvent(this.__config.container,this.DRAGGING,data,{item:data});\r\n\t\t this.util.preventDefault(event);\r\n\t\t this.__lastTarget = targetElement;\r\n\t\t return false;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__documentMouseUpHandler = function(event)\r\n\t{\r\n\t\tthis.__removeDocumentListener();\r\n\t\tif(this.__divMovable)\r\n\t\t{\r\n\t\t\tvar orignalNode = null;\r\n\t\t\tvar nodeData = null;\r\n\t\t\tif(this.__divMovable[\"nsObject\"] && this.__divMovable[\"nsObject\"][\"orignalNode\"])\r\n\t\t\t{\r\n\t\t\t\torignalNode = this.__divMovable[\"nsObject\"][\"orignalNode\"];\r\n\t\t\t\tif(orignalNode && orignalNode[\"nsObject\"])\r\n\t\t\t\t{\r\n\t\t\t\t\tnodeData = orignalNode[\"nsObject\"][\"data\"];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t\tvar objTargetElement = null;\r\n\t\t\tvar isPlaceholder = false;\r\n\t\t\tif(this.__config.enableCloneMode)\r\n\t\t\t{\r\n\t\t\t\tobjTargetElement = this.__getTargetElementDetails(event,orignalNode);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tobjTargetElement = this.__getPlaceholderDetails(event);\r\n\t\t\t\tisPlaceholder = true;\r\n\t\t\t}\r\n\t\t\tvar targetX = objTargetElement.x;\r\n\t\t var targetY = objTargetElement.y;\r\n\t\t var hasElementChanged = false;\r\n\t\t var targetElement = objTargetElement.element;\r\n\t\t if(targetElement && (isPlaceholder || targetElement[\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"] \r\n\t\t\t\t&& targetElement[\"nsObject\"][\"parent\"][\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"][\"nsObject\"][\"isDroppable\"]))\r\n\t\t {\r\n\t\t \tvar container = objTargetElement.parent;\r\n\t\t \tif(container && container.tagName.toLowerCase() === \"tbody\")\r\n\t\t \t{\r\n\t\t \t\tcontainer = this.util.findParent(container,\"table\");\r\n\t\t \t}\r\n\t\t \tvar objTargetNSObject = null;\r\n\t\t \tvar targetIndex = -1;\r\n\t\t \tif(this.__config.enableCloneMode)\r\n\t\t\t\t{\r\n\t\t \t\tobjTargetNSObject = targetElement[\"nsObject\"];\r\n\t\t \t\ttargetIndex = objTargetNSObject[\"index\"];\r\n\t\t\t\t}\r\n\t\t \telse\r\n\t\t \t{\r\n\t\t \t\ttargetIndex = Array.prototype.indexOf.call(targetElement.parentNode.children,targetElement);\r\n\t\t \t}\r\n\t\t \tvar item = (nodeData ? nodeData : {});\r\n\t\t \titem.targetNode = targetElement;\r\n\t\t \titem.node = orignalNode;\r\n\t\t \tif(container)\r\n\t\t \t{\r\n\t\t \t\tvar cancelled = this.util.dispatchEvent(container,this.ITEM_DROPPING,item,{item:item},true,true);\r\n\t\t\t \t\tif(!cancelled)\r\n\t\t\t \t\t{\r\n\t\t\t \t\t\tif(orignalNode === targetElement)\r\n\t\t\t \t\t\t{\r\n\t\t\t \t\t\t\thasElementChanged = false;\r\n\t\t\t \t\t\t\tthis.__animateInvalidDrop(orignalNode);\r\n\t\t\t \t\t\t\tconsole.debug(\"Item has not changed\");\r\n\t\t\t \t\t\t}\r\n\t\t\t \t\t if(this.__isSameContainer(container))\r\n\t\t\t \t\t {\r\n\t\t\t \t\t \tif(orignalNode[\"nsObject\"][\"index\"] !== targetIndex)\r\n\t\t\t \t\t \t{\r\n\t\t\t \t\t \t\tthis.__moveNode(orignalNode,targetIndex,targetElement,nodeData);\r\n\t\t\t \t\t \t\thasElementChanged = true;\r\n\t\t\t \t\t \t}\r\n\t\t\t \t\t }\r\n\t\t\t \t\t else\r\n\t\t\t \t\t {\r\n\t\t\t \t\t \tthis.__removeNode(orignalNode,nodeData);\r\n\t\t\t \t\t \tif(container[\"nsObject\"] && container[\"nsObject\"][\"insertNode\"])\r\n\t\t\t \t\t \t{\r\n\t\t\t \t\t \t\tcontainer[\"nsObject\"][\"insertNode\"](orignalNode,targetIndex,targetElement,nodeData);\r\n\t\t\t \t\t \t}\r\n\t\t\t \t\t \thasElementChanged = true;\r\n\t\t\t \t\t }\r\n\t\t\t \t\t this.util.dispatchEvent(container,this.ITEM_DROPPED,item,{item:item},true,false);\r\n\t\t\t \t\t}\r\n\t\t\t \t\telse\r\n\t\t\t\t\t{\r\n\t\t\t \t\t\thasElementChanged = false;\r\n\t\t\t \t\t\tthis.__animateInvalidDrop(orignalNode);\r\n\t\t\t\t\t\tconsole.debug(\"Item drop was cancelled\");\r\n\t\t\t\t\t}\r\n\t\t \t}\r\n\t\t \telse\r\n\t\t\t\t{\r\n\t\t\t \thasElementChanged = false;\r\n\t\t\t\t\tthis.__animateInvalidDrop(orignalNode);\r\n\t\t\t\t\tconsole.debug(\"Item was dropped at invalid location\");\r\n\t\t\t\t}\r\n\t\t }\r\n\t\t else\r\n\t\t\t{\r\n\t\t \thasElementChanged = false;\r\n\t\t\t\tthis.__animateInvalidDrop(orignalNode);\r\n\t\t\t\tconsole.debug(\"Item was dropped at invalid location\");\r\n\t\t\t}\r\n\t\t if(hasElementChanged)\r\n\t\t {\r\n\t\t \tthis.__dragEndCleanUp();\r\n\t\t }\r\n\t\t this.util.dispatchEvent(this.__config.container,this.DRAG_END,orignalNode,{item:orignalNode},true,false);\r\n\t\t\tthis.util.preventDefault(event);\r\n\t\t event.stopPropagation();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis.__dragEndCleanUp();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__dragStartPreventHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tthis.util.preventDefault(event);\r\n\t event.stopPropagation();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__addDocumentListener = function() \r\n\t{\r\n\t\tif(!this.__documentMouseMoveRef)\r\n\t\t{\r\n\t\t\tthis.__documentMouseMoveRef = this.__documentMouseMoveHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"mousemove\",this.__documentMouseMoveRef);\r\n\t\t}\r\n\t\tif(!this.__documentMouseUpRef)\r\n\t\t{\r\n\t\t\tthis.__documentMouseUpRef = this.__documentMouseUpHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"mouseup\",this.__documentMouseUpRef);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__removeDocumentListener = function() \r\n\t{\r\n\t\tif(this.__documentMouseMoveRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"mousemove\",this.__documentMouseMoveRef);\r\n\t\t\tthis.__documentMouseMoveRef = null;\r\n\t\t}\r\n\t\tif(!this.__documentMouseUpRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"mouseup\",this.__documentMouseUpRef);\r\n\t\t\tthis.__documentMouseUpRef = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__addDocumentHoldListener = function() \r\n\t{\r\n\t\tif(!this.__documentMouseMoveHoldRef)\r\n\t\t{\r\n\t\t\tthis.__documentMouseMoveHoldRef = this.__documentMouseMoveHoldHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"mousemove\",this.__documentMouseMoveHoldRef);\r\n\t\t}\r\n\t\tif(!this.__documentMouseUpHoldRef)\r\n\t\t{\r\n\t\t\tthis.__documentMouseUpHoldRef = this.__documentMouseUpHoldHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"mouseup\",this.__documentMouseUpHoldRef);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__removeDocumentHoldListener = function() \r\n\t{\r\n\t\tif(this.__documentMouseMoveHoldRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"mousemove\",this.__documentMouseMoveHoldRef);\r\n\t\t\tthis.__documentMouseMoveHoldRef = null;\r\n\t\t}\r\n\t\tif(!this.__documentMouseUpHoldRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"mouseup\",this.__documentMouseUpHoldRef);\r\n\t\t\tthis.__documentMouseUpHoldRef = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__animateInvalidDrop = function(orignalNode)\r\n\t{\r\n\t\tif(this.__divMovable && orignalNode)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar transitionEndCallback = function()\r\n\t\t\t{\r\n\t\t\t\tself.util.removeStyleClass(self.__divMovable,\"nsAnimateGhost\");\r\n\t\t\t\tself.__dragEndCleanUp();\r\n\t\t\t\tself.__resetChildren();\r\n\t\t\t};\r\n\t\t\tif(this.__config.enableCloneMode)\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(this.__divMovable,\"nsAnimateGhost\");\r\n\t\t\t\tvar transition = new this.util.transition(this.__divMovable,transitionEndCallback);\r\n\t\t \tvar objSourceNSObject = orignalNode[\"nsObject\"];\r\n\t\t \tthis.__divMovable.style.left = (objSourceNSObject.position.left) + \"px\";\r\n\t\t \tthis.__divMovable.style.top = (objSourceNSObject.position.top ) + \"px\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\ttransitionEndCallback();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__resetChildren = function()\r\n\t{\r\n\t\tvar arrChildNode = this.__config.container.getElementsByTagName(this.__config.childNodeType);\r\n\t\tvar childNode = null;\r\n\t\tfor (var count = 0; count < arrChildNode.length; count++) \r\n\t\t{\r\n\t\t\tchildNode = arrChildNode[count];\r\n\t\t\tthis.util.removeStyleClass(childNode,this.__config.nodeDragHoverClass);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__clearHoldTime = function()\r\n\t{\r\n\t\tif(this.__holdTimeoutInterval > -1)\r\n\t\t{\r\n\t\t\tclearTimeout(this.__holdTimeoutInterval);\r\n\t\t}\r\n\t\tthis.__holdTimeoutInterval = -1;\r\n\t\tthis.__removeDocumentHoldListener();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__insertNode = function(node,index,currentElement,nodeData)\r\n\t{\r\n\t\tif(this.__config.insertNodeCallback)\r\n\t\t{\r\n\t\t\tthis.__config.insertNodeCallback(this.__config.container,node,index,currentElement,nodeData);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar container = this.__config.container;\r\n\t\t\tif(this.__parentContainerType.toLowerCase() === \"table\")\r\n\t\t\t{\r\n\t\t\t\tcurrentElement.parentNode.insertBefore(node,currentElement);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcontainer.insertBefore(node,currentElement);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__initializeChildren();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__moveNode = function(node,index,currentElement,nodeData)\r\n\t{\r\n\t\tif(this.__config.moveNodeCallback)\r\n\t\t{\r\n\t\t\tthis.__config.moveNodeCallback(this.__config.container,node,index,currentElement,nodeData);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar container = this.__config.container;\r\n\t\t\tif(this.__parentContainerType.toLowerCase() === \"table\")\r\n\t\t\t{\r\n\t\t\t\tcurrentElement.parentNode.insertBefore(node,currentElement);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t//this.util.insertAfterElement(currentElement,node);\r\n\t\t\t\tcontainer.insertBefore(node,currentElement);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__initializeChildren();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__removeNode = function(node,nodeData)\r\n\t{\r\n\t\tif(this.__config.removeNodeCallback)\r\n\t\t{\r\n\t\t\tthis.__config.removeNodeCallback(this.__config.container,node,nodeData);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar container = this.__config.container;\r\n\t\t\tif(this.__parentContainerType.toLowerCase() === \"table\")\r\n\t\t\t{\r\n\t\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t//if not clone mode then element is already removed\r\n\t\t\t\tif(this.__config.enableCloneMode)\r\n\t\t\t\t{\r\n\t\t\t\t\tcontainer.removeChild(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__initializeChildren();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getTargetElementDetails = function(event,orignalNode)\r\n\t{\r\n\t\tvar targetX = event.pageX - document.documentElement.scrollLeft;\r\n\t var targetY = event.pageY - (window.pageYOffset || document.documentElement.scrollTop);\r\n\t var targetElement = document.elementFromPoint(targetX, targetY);\r\n\t var parent = null;\r\n\t var childNodeType = null;\r\n\t var arrElement = [];\r\n\t var prevElement = null;\r\n\t while(this.util.isElement(targetElement) && targetElement.tagName !== \"HTML\" && targetElement.tagName !== \"BODY\")\r\n\t {\r\n\t \tif(targetElement === prevElement)\r\n\t \t{\r\n\t \t\t//console.log(\"Stop\");\r\n\t \t}\r\n\t \tprevElement = targetElement;\r\n\t \t//console.log(targetElement.tagName + \",\" + targetElement.textContent);\r\n\t \tif(targetElement.tagName === this.__config.childNodeType)\r\n\t \t{\r\n\t \t\tchildNodeType = targetElement;\r\n\t \t}\r\n\t \telse if(this.__parentContainerType.toLowerCase() === \"table\")\r\n\t \t{\r\n\t \t\tchildNodeType = this.util.findParent(targetElement,this.__config.childNodeType);\r\n\t \t\tif(!childNodeType)\r\n\t \t\t{\r\n\t \t\t\tchildNodeType = this.util.findChild(targetElement,this.__config.childNodeType);\r\n\t \t\t}\r\n\t \t}\r\n\t \tchildNodeType = this.util.getWebComponentElement(childNodeType);\r\n\t \tif(childNodeType && childNodeType !== orignalNode && childNodeType[\"nsObject\"] && childNodeType[\"nsObject\"][\"dropEnabled\"])\r\n\t \t{\r\n\t \t\ttargetElement = childNodeType;\r\n\t \t\tbreak;\r\n\t \t}\r\n\t \tarrElement.push({element:targetElement,display:targetElement.style.display});\r\n\t \ttargetElement.style.display = \"none\";//pointerEvents = \"none\";\r\n\t \t\r\n\t \ttargetElement = document.elementFromPoint(targetX, targetY);\r\n\t }\r\n\t for(var count = 0;count < arrElement.length;count++)\r\n\t {\r\n\t \tarrElement[count].element.style.display = arrElement[count].display;//pointerEvents = \"\";\r\n\t }\r\n\t if(!this.util.isElement(targetElement) || targetElement.tagName === \"HTML\")\r\n\t {\r\n\t \ttargetElement = null;\r\n\t }\r\n\t if(targetElement)\r\n\t {\r\n\t if(!this.util.hasStyleClass(targetElement,this.__config.nodeDraggingClass))\r\n\t \t{\r\n\t \t//if not child then check parent\r\n\t \tvar tmpTarget = targetElement.querySelector(\".\" + this.__config.nodeDraggingClass);\r\n\t \tif(!tmpTarget)\r\n\t \t{\r\n\t \t\ttmpTarget = this.util.findParentBySelector(targetElement,\".\" + this.__config.nodeDraggingClass);\r\n\t \t}\r\n\t \tif(tmpTarget)\r\n\t \t{\r\n\t \t\ttargetElement = tmpTarget;\r\n\t \t}\r\n\t \t}\r\n\t if(targetElement[\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"])\r\n\t \t{\r\n\t \tparent = targetElement[\"nsObject\"][\"parent\"];\r\n\t \t}\r\n\t }\r\n\t return {element:targetElement,parent:parent,x:targetX,y:targetY};\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getPlaceholderDetails = function(event)\r\n\t{\r\n\t\tvar targetX = event.pageX - document.documentElement.scrollLeft;\r\n\t var targetY = event.pageY - (window.pageYOffset || document.documentElement.scrollTop);\r\n\t\treturn {element:this.__compPlaceholder,parent:this.__compPlaceholder.parentNode,x:targetX,y:targetY};\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__cloneNode = function(node)\r\n\t{\r\n\t\tvar id = this.__getID();\r\n\t\tvar divMovable = this.util.createDiv(id + \"clonedItem\", \"nsDraggableCloneItem\");\r\n\t\tvar clonedNode = null;\r\n\t\tvar rectContainer = this.__config.container.getBoundingClientRect();\r\n\t\tif(this.__config.createCloneCallback)\r\n\t\t{\r\n\t\t\tvar containerConfiguration = {width:rectContainer.width,height:rectContainer.height};\r\n\t\t\tclonedNode = this.__config.createCloneCallback(node,containerConfiguration);\r\n\t\t\tclonedNode.setAttribute(\"id\",\"comp\" + id + \"ClonedNode\");\r\n\t\t\tdivMovable.appendChild(clonedNode);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar container = this.__config.container.cloneNode(false);\r\n\t\t\tcontainer.setAttribute(\"id\",\"comp\" + id + \"ClonedContainer\");\r\n\t\t\tif(this.__config.enableCloneMode)\r\n\t\t\t{\r\n\t\t\t\tclonedNode = node.cloneNode(true);\r\n\t\t\t\tclonedNode.setAttribute(\"id\",\"comp\" + id + \"ClonedNode\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tclonedNode = node;\r\n\t\t\t}\r\n\t\t\tcontainer.appendChild(clonedNode);\r\n\t\t\tcontainer.style.width = rectContainer.width + \"px\";\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tdivMovable.appendChild(container);\r\n\t\t\t}\r\n\t\t\tcatch(error)\r\n\t\t\t{\r\n\t\t\t\tthis.util.getWebComponentElement(divMovable).appendChild(container);\r\n\t\t\t\t//divMovable.appendChild(container);\r\n\t\t\t}\r\n\t\t}\r\n\t\tdocument.body.appendChild(divMovable);\r\n\t\tif (divMovable.setCapture) \r\n\t\t{\r\n\t\t\tdivMovable.setCapture();\r\n\t\t}\r\n\t\tif(node.nsObject)\r\n\t\t{\r\n\t\t\tvar objCloned = {};//this.util.cloneObject(node.nsObject);\r\n\t\t\tobjCloned.orignalNode = node;\r\n\t\t\tdivMovable.nsObject = objCloned;\r\n\t\t\tclonedNode.nsObject = objCloned;\r\n\t\t}\r\n\t\treturn divMovable;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__createPlaceholder = function(node) \r\n\t{\r\n\t\tvar placeHolder = null;\r\n\t\tif(this.__config.createPlaceholderCallback)\r\n\t\t{\r\n\t\t\tplaceHolder = this.__config.createPlaceholderCallback(node);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tplaceHolder = this.util.createElement(this.__config.childNodeType);\r\n\t\t\tplaceHolder.className = node.className;\r\n\t\t\tthis.util.addStyleClass(placeHolder,\"nsDraggablePlaceholder\");\r\n\t\t\tvar rect = node.getBoundingClientRect();\r\n\t\t\tplaceHolder.style.width = rect.width + \"px\";\r\n\t\t\tplaceHolder.style.height = rect.height + \"px\";\r\n\t\t}\r\n\t\treturn placeHolder;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__isNodeDraggable = function(node) \r\n\t{\r\n\t\tvar retValue = true;\r\n\t\tif(node)\r\n\t\t{\r\n\t\t\tif(this.__config.nodeDraggableCallback)\r\n\t\t\t{\r\n\t\t\t\tretValue = this.__config.nodeDraggableCallback(node);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn retValue;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__isNodeDroppable = function(node) \r\n\t{\r\n\t\tvar retValue = true;\r\n\t\tif(node)\r\n\t\t{\r\n\t\t\tnode = this.util.findParent(node,this.__config.childNodeType);\r\n\t\t\tif(this.__config.nodeDroppableCallback)\r\n\t\t\t{\r\n\t\t\t\tretValue = this.__config.nodeDroppableCallback(node);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn retValue;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__insertBefore = function(targetElement) \r\n\t{\r\n\t\tif(this.__compPlaceholder && targetElement)\r\n\t\t{\r\n\t\t\t// Ensure the placeholder is visible in the target (unless it's a table row)\r\n\t\t if (this.util.getStyleValue(this.__compPlaceholder,\"display\") !== 'table-row') \r\n\t\t {\r\n\t\t \tthis.__compPlaceholder.style.display = \"block\";\r\n\t\t }\r\n\t\t if(!this.__config.enableCloneMode)\r\n\t\t {\r\n\t\t \ttargetElement.parentNode.insertBefore(this.__compPlaceholder,targetElement);\r\n\t\t\t //dragItemInfo.moveTo(targetScope.sortableScope, targetScope.index());\r\n\t\t }\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__insertAfter = function(targetElement) \r\n\t{\r\n\t\tif(this.__compPlaceholder && targetElement)\r\n\t\t{\r\n\t\t\t// Ensure the placeholder is visible in the target (unless it's a table row)\r\n\t\t if (this.util.getStyleValue(this.__compPlaceholder,\"display\") !== 'table-row') \r\n\t\t {\r\n\t\t \tthis.__compPlaceholder.style.display = \"block\";\r\n\t\t }\r\n\t\t if(!this.__config.enableCloneMode)\r\n\t\t {\r\n\t\t \tthis.util.insertAfterElement(targetElement,this.__compPlaceholder);\r\n\t\t \t//dragItemInfo.moveTo(targetScope.sortableScope, targetScope.index() + 1);\r\n\t\t }\r\n\t\t \r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getPlaceHolderIndex = function(targetElement) \r\n\t{\r\n\t\tif(targetElement)\r\n\t\t{\r\n\t\t\tif(this.util.hasStyleClass(targetElement,\"nsDraggablePlaceholder\"))\r\n\t\t\t{\r\n\t\t\t\treturn 0;\r\n\t\t }\r\n\t\t\tvar arrChildNode = targetElement.getElementsByTagName(this.__config.childNodeType);\r\n\t\t\tvar childNode = null;\r\n\t\t\tfor (var count = 0; count < arrChildNode.length; count++) \r\n\t\t\t{\r\n\t\t\t\tchildNode = arrChildNode[count];\r\n\t\t\t\tif(this.util.hasStyleClass(childNode,\"nsDraggablePlaceholder\"))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t return -1;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__isSameContainer = function(container) \r\n\t{\r\n\t\tif(container && container.nsObject) \r\n\t\t{\r\n\t\t\treturn this.__config.container.nsObject[\"id\"] === container.nsObject[\"id\"];\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__dragEndCleanUp = function() \r\n\t{\r\n\t\tthis.util.makeBodySelectable();\r\n\t\tthis.__isDragging = false;\r\n\t\tif(this.__divMovable)\r\n\t\t{\r\n\t\t\tif(this.__divMovable[\"nsObject\"] && this.__divMovable[\"nsObject\"][\"orignalNode\"])\r\n\t\t\t{\r\n\t\t\t\tvar orignalNode = this.__divMovable[\"nsObject\"][\"orignalNode\"];\r\n\t\t\t\tthis.util.removeStyleClass(orignalNode,this.__config.nodeDragHoverClass);\r\n\t\t\t\tthis.util.removeStyleClass(orignalNode,this.__config.nodeDraggingClass);\r\n\t\t\t}\r\n\t\t\tthis.__divMovable.parentNode.removeChild(this.__divMovable);\r\n\t\t\tthis.__divMovable = null;\r\n\t\t}\r\n\t\tif(this.__lastTarget)\r\n\t {\r\n\t \tthis.util.removeStyleClass(this.__lastTarget,this.__config.nodeDragHoverClass);\r\n\t \tthis.__lastTarget = null;\r\n\t }\r\n\t\tif(this.__compPlaceholder)\r\n\t\t{\r\n\t\t\tthis.__compPlaceholder.parentNode.removeChild(this.__compPlaceholder);\r\n\t\t\tthis.__compPlaceholder = null;\r\n\t\t}\r\n\t\tthis.__itemPosition = null;\r\n\t\tthis.__objSelectedItem = {scrollableContainer:null,containment:null};\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getOffset = function(element,scrollableContainer) \r\n\t{\r\n\t\tvar boundingClientRect = element.getBoundingClientRect();\r\n\t if (!scrollableContainer) \r\n\t {\r\n\t \tscrollableContainer = document.documentElement;\r\n\t }\r\n\t var retValue = { width: boundingClientRect.width || element.offsetWidth,\r\n\t \theight: boundingClientRect.height || element.offsetHeight,\r\n\t \ttop: boundingClientRect.top + (window.pageYOffset || scrollableContainer.scrollTop - scrollableContainer.offsetTop),\r\n\t \tleft: boundingClientRect.left + (window.pageXOffset || scrollableContainer.scrollLeft - scrollableContainer.offsetLeft)\r\n\t };\r\n\t return retValue;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__positionStarted = function(event,target,scrollableContainer) \r\n\t{\r\n\t\tvar position = {};\r\n\t\tposition.offsetX = event.pageX - this.__getOffset(target, scrollableContainer).left;\r\n\t\tposition.offsetY = event.pageY - this.__getOffset(target, scrollableContainer).top;\r\n\t\tposition.startX = position.lastX = event.pageX;\r\n\t\tposition.startY = position.lastY = event.pageY;\r\n\t\tposition.nowX = position.nowY = position.distX = position.distY = position.dirAx = 0;\r\n\t\tposition.dirX = position.dirY = position.lastDirX = position.lastDirY = position.distAxX = position.distAxY = 0;\r\n\t return position;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__calculatePosition = function(position,event) \r\n\t{\r\n\t\t position.lastX = position.nowX;\r\n\t position.lastY = position.nowY;\r\n\t\r\n\t // mouse position this events\r\n\t position.nowX = event.pageX;\r\n\t position.nowY = event.pageY;\r\n\t\r\n\t // distance mouse moved between events\r\n\t position.distX = position.nowX - position.lastX;\r\n\t position.distY = position.nowY - position.lastY;\r\n\t\r\n\t // direction mouse was moving\r\n\t position.lastDirX = position.dirX;\r\n\t position.lastDirY = position.dirY;\r\n\t\r\n\t // direction mouse is now moving (on both axis)\r\n\t position.dirX = position.distX === 0 ? 0 : position.distX > 0 ? 1 : -1;\r\n\t position.dirY = position.distY === 0 ? 0 : position.distY > 0 ? 1 : -1;\r\n\t\r\n\t // axis mouse is now moving on\r\n\t var newAx = Math.abs(position.distX) > Math.abs(position.distY) ? 1 : 0;\r\n\t\r\n\t // calc distance moved on this axis (and direction)\r\n\t if (position.dirAx !== newAx) \r\n\t {\r\n\t position.distAxX = 0;\r\n\t position.distAxY = 0;\r\n\t } \r\n\t else \r\n\t {\r\n\t position.distAxX += Math.abs(position.distX);\r\n\t if (position.dirX !== 0 && position.dirX !== position.lastDirX) \r\n\t {\r\n\t position.distAxX = 0;\r\n\t }\r\n\t\r\n\t position.distAxY += Math.abs(position.distY);\r\n\t if (position.dirY !== 0 && position.dirY !== position.lastDirY) \r\n\t {\r\n\t position.distAxY = 0;\r\n\t }\r\n\t }\r\n\t position.dirAx = newAx;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__movePosition = function(event,element,position,container,cssPosition,scrollableContainer) \r\n\t{\r\n\t\tvar bounds;\r\n\t var useRelative = (cssPosition === 'relative');\r\n\t element.x = event.pageX - position.offsetX;\r\n\t element.y = event.pageY - position.offsetY;\r\n\t\r\n\t if (container) \r\n\t {\r\n\t bounds = this.__getOffset(container, scrollableContainer);\r\n\t if (useRelative) \r\n\t {\r\n\t // reduce positioning by bounds\r\n\t element.x -= bounds.left;\r\n\t element.y -= bounds.top;\r\n\t\r\n\t // reset bounds\r\n\t bounds.left = 0;\r\n\t bounds.top = 0;\r\n\t }\r\n\t\r\n\t if (element.x < bounds.left) \r\n\t {\r\n\t \t element.x = bounds.left;\r\n\t } \r\n\t else if (element.x >= bounds.width + bounds.left - this.__getOffset(element).width) \r\n\t {\r\n\t \t element.x = bounds.width + bounds.left - this.__getOffset(element).width;\r\n\t }\r\n\t if (element.y < bounds.top) \r\n\t {\r\n\t \t element.y = bounds.top;\r\n\t } \r\n\t else if (element.y >= bounds.height + bounds.top - this.__getOffset(element).height) \r\n\t {\r\n\t \t element.y = bounds.height + bounds.top - this.__getOffset(element).height;\r\n\t }\r\n\t }\r\n\t element.style.left = element.x + 'px';\r\n\t element.style.top = element.y + 'px';\r\n\t \r\n\t this.__calculatePosition(position, event);\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getID = function()\r\n\t{\r\n\t\tif(!this.__id)\r\n\t\t{\r\n\t\t\tif(this.__config.container.hasAttribute(\"id\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__id = this.__config.container.getAttribute(\"id\");\r\n\t\t\t}\r\n\t\t\telse if(this.__config.container.hasAttribute(\"name\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__id = this.__config.container.getAttribute(\"name\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__id = \"comp\" + this.util.getUniqueId();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.__id;\r\n\t};\r\n\t\r\n\treturn NSDragDrop;\r\n})();\r\nnsModuleExport(this,\"NSDragDrop\",NSDragDrop);\"use strict\";\r\nvar NSFilter = (function()\r\n{\r\n\tfunction NSFilter(data,filter,setting,recordLimit,isHierarchical,childField,filterFunction,hierarchyFilterChildren,arrIgnoreKeysInCloneDataSource) \r\n\t{\r\n\t\tthis.EXACT = \"exact\";\r\n\t\tthis.STARTS_WITH = \"startsWith\";\r\n\t\tthis.ENDS_WITH = \"endsWith\";\r\n\t\tthis.CONTAINS = \"contains\";\r\n\t\t\r\n\t\tthis.IS_FOUND_FIELD = \"__nsFilter__found\";\r\n\t\t\r\n\t\tthis.util = new NSUtil();\r\n\t\tthis.__data = data;\r\n\t\tthis.__filter = filter;\r\n\t\tthis.__setting = setting;\r\n\t\tthis.__recordLimit = (parseInt(recordLimit) > 0) ? recordLimit : -1;\r\n\t\tthis.__isHierarchical = this.util.isUndefined(isHierarchical) ? false : Boolean.parse(isHierarchical);\r\n\t\tthis.__childField = childField ? childField : \"children\";\r\n\t\tthis.__filterFunction = filterFunction;\r\n\t\tthis.__hierarchyFilterChildren = hierarchyFilterChildren;\r\n\t\tthis.__arrIgnoreKeysInCloneDataSource = arrIgnoreKeysInCloneDataSource;\r\n\t\tthis.__ignoreSameLevelNode = true;\r\n\t}\r\n\t\r\n\tNSFilter.prototype.execute = function(data,filter,setting,recordLimit,isHierarchical,childField,filterFunction,hierarchyFilterChildren,arrIgnoreKeysInCloneDataSource) \r\n\t{ \r\n\t\tdata = data ? data : this.__data;\r\n\t\tfilter = filter ? filter : this.__filter;\r\n\t\tsetting = setting ? setting : this.__setting;\r\n\t\trecordLimit = (parseInt(recordLimit) > 0) ? recordLimit : this.__recordLimit;\r\n\t\tisHierarchical = this.util.isUndefined(isHierarchical) ? Boolean.parse(this.__isHierarchical) : Boolean.parse(isHierarchical);\r\n\t\tchildField = childField ? childField : this.__childField;\r\n\t\tfilterFunction = filterFunction ? filterFunction : this.__filterFunction;\r\n\t\thierarchyFilterChildren = hierarchyFilterChildren ? hierarchyFilterChildren : this.__hierarchyFilterChildren;\r\n\t\tarrIgnoreKeysInCloneDataSource = this.util.isUndefinedOrNull(arrIgnoreKeysInCloneDataSource) ? this.__arrIgnoreKeysInCloneDataSource : arrIgnoreKeysInCloneDataSource;\r\n\t\tif(data && filter)\r\n\t\t{\r\n\t\t\tvar dataSource = data.slice(0);\r\n\t\t\tvar arrFilter = [];\r\n\t\t\tvar self = this;\r\n\t\t\tvar callFilterFunction = function(source,level,parentItem)\r\n\t\t\t{\r\n\t\t\t\tvar arrReturn = [];\r\n\t\t\t\tfor (var count = 0; count < source.length; count++) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = source[count];\r\n\t\t\t\t\tvar found = false;\r\n\t\t\t\t\tif(isHierarchical && item[childField] && item[childField].length > 0 )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar arrChild = callFilterFunction(item[childField],level + 1,item);\r\n\t\t\t\t\t\tif(arrChild && arrChild.length > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\t\tif(self.__ignoreSameLevelNode)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t item[childField] = arrChild;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tarrReturn.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!found && self.__filterItem(item,filter,setting,isHierarchical,childField,parentItem,filterFunction))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(isHierarchical && hierarchyFilterChildren)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar arrChildren = item[childField];\r\n\t\t\t\t\t\t\tif(arrChildren && arrChildren.length > 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar childItem = null;\r\n\t\t\t\t\t\t\t\tvar childLength = arrChildren.length;\r\n\t\t\t\t\t\t\t\tfor(var childCount = childLength - 1;childCount > -1;childCount--)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tchildItem = arrChildren[childCount];\r\n\t\t\t\t\t\t\t\t\tif(childItem)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(!hierarchyFilterChildren(childItem,childCount,childItem[self.IS_FOUND_FIELD],filter,setting,item))\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tarrChildren.splice(childCount, 1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\tarrReturn.push(item);\r\n\t\t\t\t\t\tif(!isHierarchical && recordLimit > 0 && arrReturn.length >= recordLimit)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//return false;\r\n\t\t\t\treturn arrReturn;\r\n\t\t\t};\r\n\t\t\tvar callNonHierarchicalFilterFunction = function(source)\r\n\t\t\t{\r\n\t\t\t\tvar arrReturn = [];\r\n\t\t\t\tfor (var count = 0; count < source.length; count++) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = source[count];\r\n\t\t\t\t\tif(self.__filterItemNonHierarchical(item,filter,setting,filterFunction))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tarrReturn.push(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn arrReturn;\r\n\t\t\t};\r\n\t\t\tdataSource = this.util.cloneObject(dataSource,isHierarchical,[],arrIgnoreKeysInCloneDataSource);\r\n\t\t\tif(isHierarchical)\r\n\t\t\t{\r\n\t\t\t\tarrFilter = callFilterFunction(dataSource,1,null);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tarrFilter = callNonHierarchicalFilterFunction(dataSource);\r\n\t\t\t}\r\n\t\t\treturn arrFilter;\r\n\t\t}\r\n\t\treturn data;\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__filterItemNonHierarchical = function(item,filter,setting,filterFunction) \r\n\t{\r\n\t\tvar retValue = false;\r\n\t\tif(filterFunction)\r\n\t\t{\r\n\t\t\tretValue = filterFunction(item,filter,setting);\r\n\t\t\tthis.__setItem(item,retValue);\r\n\t\t\treturn retValue;\r\n\t\t}\r\n\t\telse if(filter instanceof Function) \r\n\t {\r\n\t\t\tretValue = filter(item,setting);\r\n\t this.__setItem(item,retValue);\r\n\t return retValue;\r\n\t }\r\n\t else if(filter instanceof Array) \r\n\t {\r\n\t for (var count = 0; count < filter.length; ++count) \r\n\t {\r\n\t if (this.__filterItemNonHierarchical(item,filter[count],setting,filterFunction))\r\n\t {\r\n\t \tthis.__setItem(item,true);\r\n\t \treturn true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t }\r\n\t else if(setting.type === \"date\" && filter)\r\n\t {\r\n\t return this.__filterDate(item,filter,setting);\r\n\t }\r\n\t else if(typeof(item) === \"string\" && filter)\r\n\t {\r\n\t return this.__filterString(item,filter,setting);\r\n\t }\r\n\t else if (item === item + 0 && filter)\r\n\t {\r\n\t return this.__filterNumeric(item,filter);\r\n\t }\r\n\t else if(typeof (filter) === \"object\") \r\n\t {\r\n\t for(var key in filter) \r\n\t {\r\n\t \tvar tempSetting = {};\r\n\t \tif(setting && setting[key])\r\n\t \t{\r\n\t \t\ttempSetting = setting[key];\r\n\t \t}\r\n\t if(!this.__filterItemNonHierarchical(item[key],filter[key],tempSetting,filterFunction))\r\n\t {\r\n\t \treturn false;\r\n\t }\r\n\t }\r\n\t this.__setItem(item,true);\r\n\t return true;\r\n\t }\r\n\t\tretValue = (filter == item);\r\n\t this.__setItem(item,retValue);\r\n\t return retValue;\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__filterItem = function(item,filter,setting,isHierarchical,childField,parentItem,filterFunction) \r\n\t{\r\n\t\tvar retValue = false;\r\n\t\tif(filterFunction)\r\n\t\t{\r\n\t\t\tretValue = filterFunction(item,filter,setting,isHierarchical,childField,parentItem);\r\n\t\t\tthis.__setItem(item,retValue);\r\n\t\t\treturn retValue;\r\n\t\t}\r\n\t\telse if(filter instanceof Function) \r\n\t {\r\n\t\t\tretValue = filter(item,setting);\r\n\t this.__setItem(item,retValue);\r\n\t return retValue;\r\n\t }\r\n\t else if(filter instanceof Array) \r\n\t {\r\n\t for (var count = 0; count < filter.length; ++count) \r\n\t {\r\n\t if (this.__filterItem(item,filter[count],setting,isHierarchical,childField,parentItem,filterFunction))\r\n\t {\r\n\t \tthis.__setItem(item,true);\r\n\t \treturn true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t }\r\n\t else if(setting.type === \"date\" && filter)\r\n\t {\r\n\t return this.__filterDate(item,filter,setting);\r\n\t }\r\n\t else if(typeof(item) === \"string\" && filter)\r\n\t {\r\n\t return this.__filterString(item,filter,setting);\r\n\t }\r\n\t else if (item === item + 0 && filter)\r\n\t {\r\n\t return this.__filterNumeric(item,filter);\r\n\t }\r\n\t else if(typeof (filter) === \"object\") \r\n\t {\r\n\t for(var key in filter) \r\n\t {\r\n\t \tif(isHierarchical && key === childField)\r\n\t \t{\r\n\t \t\tcontinue;\r\n\t \t}\r\n\t \tvar tempSetting = {};\r\n\t \tif(setting && setting[key])\r\n\t \t{\r\n\t \t\ttempSetting = setting[key];\r\n\t \t}\r\n\t if(!this.__filterItem(item[key],filter[key],tempSetting,isHierarchical,childField,parentItem,filterFunction))\r\n\t {\r\n\t