ns-components-angular
Version:
Angular Wrapper Components for NSComponents
2 lines (1 loc) • 30.9 kB
TypeScript
export declare const NSVirtualScrollCode = "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\n\r\n\t\t}\r\n \"use strict\";\r\nvar NSVirtualScroll = (function()\r\n{\r\n\tfunction NSVirtualScroll(setting) \r\n\t{\r\n\t\tthis.__setting = setting;\r\n\t\tthis.util = null;\r\n\t\tthis.__config = null;\r\n\t\tthis.__internal = {};\r\n\t\tthis.__objProp = {};\r\n\t\tthis.__objSelectedProp = {};\r\n\t\tthis.__domVariables = null;\r\n\t\tthis.__doc = null;\r\n\t\tthis.__win = null;\r\n\t\tthis.__scrollHandlerRef = null;\r\n\t\tthis.__resizeHandlerRef = null;\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t}\r\n\t\r\n\tNSVirtualScroll.prototype.dataSource = function(paramItems)\r\n\t{\r\n\t\tif(!this.util.isUndefinedOrNull(paramItems))\r\n\t\t{\r\n\t\t\tvar reInit = false;\r\n\t\t\tif(!this.__internal.itemDimension)\r\n\t\t\t{\r\n\t\t\t\treInit = true;\r\n\t\t\t}\r\n\t\t\tif(this.util.isNumber(paramItems))\r\n\t\t\t{\r\n\t\t\t\tthis.__config.totalLength = parseInt(paramItems);\r\n\t\t\t}\r\n\t\t\telse if(this.util.isArray(paramItems))\r\n\t\t\t{\r\n\t\t\t\tthis.__config.items = paramItems;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__config.totalLength = null;\r\n\t\t\t\tthis.__config.items = [paramItems];\r\n\t\t\t}\r\n this.__internal.objItemComp = {};\r\n this.__internal.arrItem = [];\r\n\t\t\tif(reInit)\r\n\t\t\t{\r\n var item = this.__getItemAt(0);\r\n\t\t\t\tthis.__internal.isItemHtml = this.util.isString(item);\r\n\t\t\t\tthis.__setSize();\r\n\t\t\t}\r\n\t\t\tvar scrollElement = this.__config.scrollElement;\r\n\t\t\tvar scrollPos = scrollElement[this.__objSelectedProp.scroll];\r\n\t\t\tif(this.__internal.items && (this.__internal.items.length * this.__internal.itemDimension < scrollPos)) \r\n\t\t\t{\r\n\t\t\t\tscrollElement[this.__objSelectedProp.scroll] = 0;\r\n\t\t\t\tthis.__internal.lastPageNum = 0;\r\n\t\t }\r\n\t\t\tthis.__addItems();\r\n\t\t\tscrollElement[this.__objSelectedProp.scroll] = scrollPos;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.refresh = function(isReset)\r\n\t{\r\n\t\tvar currItemSize = this.__internal.itemDimension;\r\n\t\tthis.__setSize();\r\n\t\tvar newItemSize = this.__internal.itemDimension;\r\n\t\tif((currItemSize != newItemSize) || isReset)\r\n\t\t{\r\n\t\t\tvar criteria = null;\r\n\t\t\tif(this.__config.totalLength)\r\n\t\t\t{\r\n\t\t\t\tcriteria = this.__config.totalLength;\r\n\t\t\t}\r\n\t\t\telse if(this.util.isArray(this.__config.items) && this.__config.items && this.__config.items.length)\r\n\t\t\t{\r\n\t\t\t\tcriteria = this.__config.items;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcriteria = 0;\r\n\t\t\t}\r\n\t\t\tthis.dataSource(criteria);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.getScrollProgress = function()\r\n\t{\r\n\t\tvar scrollPos = this.__internal.scrollPos;\r\n\t\tvar itemSize = this.__internal.itemDimension;\r\n\t\tvar totalSize = this.__internal.arrItem.length * itemSize;\r\n\t\tvar progress = ((scrollPos / totalSize) * 100) || 0;\r\n\t\treturn progress;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.appendItems = function(arrItem)\r\n\t{\r\n\t\tthis.__addNewItems(arrItem,false);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.prependItems = function(arrItem)\r\n\t{\r\n\t\tthis.__addNewItems(arrItem,true);\r\n\t};\r\n\t\r\n\t//assuming that size of all rows are same\r\n\t//if not same add offset\r\n\t//if variable Row size and utility user has original scroll Position then set scrollPosition and pass index as null\r\n\tNSVirtualScroll.prototype.scrollToIndex = function(index,animationRequired,offset,scrollPosition)\r\n\t{\r\n\t\tvar arrItem = this.__internal.arrItem;\r\n\t\tif(arrItem && arrItem.length)\r\n\t\t{\r\n\t\t\tvar scrollPos = null;\r\n\t\t\tif(!this.util.isUndefinedOrNull(index) && index > -1 && index < arrItem.length)\r\n\t\t\t{\r\n\t\t\t\toffset = this.util.isUndefinedOrNull(offset) ? 0 : parseInt(offset);\r\n\t\t\t\tscrollPos = (this.__internal.itemDimension * index) + offset;\r\n\t\t\t}\r\n\t\t\telse if(!this.util.isUndefinedOrNull(scrollPosition))\r\n\t\t\t{\r\n\t\t\t\toffset = 0;\r\n\t\t\t\tscrollPos = scrollPosition;\r\n\t\t\t}\r\n\t\t\tif(!this.util.isUndefinedOrNull(scrollPos))\r\n\t\t\t{\r\n\t\t\t\tvar scrollElement = this.__config.scrollElement;\r\n\t\t\t\tif(animationRequired)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar animation = new this.util.animation(scrollElement,[\r\n\t\t \t \t {\r\n\t\t \t \t time: 500,\r\n\t\t \t \t property:this.__objSelectedProp.scroll,\r\n\t\t \t \t target: scrollPos,\r\n\t\t \t \t }\r\n\t\t \t \t]);\r\n\t\t \t \t \tanimation.animate();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tscrollElement[this.__objSelectedProp.scroll] = scrollPos;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t//this function is used for updating items(dom elements) already generated \r\n\tNSVirtualScroll.prototype.updateItems = function(updateCallback) \r\n\t{\r\n\t\tif(this.__internal.arrItem && this.__internal.arrItem.length && updateCallback) \r\n\t\t{\r\n\t\t\tvar arrItem = this.__internal.arrItem;\r\n\t\t\tfor(var count = 0;count < arrItem.length;count++) \r\n\t\t\t{\r\n\t\t\t\tvar item = arrItem[count]; \r\n\t\t\t\titem = updateCallback(item);\r\n\t\t\t\tarrItem[count] = item;\r\n\t\t\t}\r\n\t\t\tthis.__internal.arrItem = arrItem;\r\n\t\t\tthis.__internal.origArrItem = this.__internal.arrItem;\r\n\t\t}\r\n\t}\r\n\t\r\n\tNSVirtualScroll.prototype.destroy = function()\r\n\t{\r\n\t\tvar scrollElement = this.__config.scrollElement;\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tif(this.__internal.contentTabIndex)\r\n\t\t{\r\n\t\t\tcontentElement.setAttribute(\"tabindex\",this.__internal.contentTabIndex);\r\n\t\t}\r\n\t\tthis.util.removeStyleClass(scrollElement,\"nsVirtualScrollElement nsVirtualScrollElement\" + this.util.toCamelCase(this.__config.direction,true));\r\n\t\tthis.util.removeStyleClass(contentElement,\"nsVirtualScrollContent nsVirtualScrollContent\" + this.util.toCamelCase(this.__config.direction,true));\r\n\t\tif(this.__scrollHandlerRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(scrollElement,\"scroll\",this.__scrollHandlerRef);\r\n\t\t\tthis.__scrollHandlerRef = null;\r\n\t\t}\r\n\t\tif(this.__resizeHandlerRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(this.__win,\"resize\",this.__resizeHandlerRef);\r\n\t\t\tthis.__resizeHandlerRef = null;\r\n\t\t}\r\n\t\tif(this.__internal.divLoader)\r\n\t\t{\r\n\t\t\tthis.__internal.divLoader.parentNode.removeChild(this.__internal.divLoader);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__initialize = function()\r\n\t{\r\n\t\tthis.util = new NSUtil();\r\n\t\tif(this.__setting)\r\n\t\t{\r\n\t\t\tthis.__config = {\r\n\t\t\t\t\tscrollElement: this.util.getElement(this.__setting[\"scrollElement\"]),\r\n\t\t\t\t\tcontentElement: this.util.getElement(this.__setting[\"contentElement\"]),\r\n\t\t\t\t\tdirection: this.__setting[\"direction\"] || NSVirtualScroll.DIRECTION_VERTICAL,\r\n\t\t\t\t\titemTag: this.__setting[\"itemTag\"],\r\n\t\t\t\t\tpageSize: parseInt(this.__setting[\"pageSize\"]) || 30,//number of items after the cache will be refreshed\r\n\t\t\t\t\tpagesRendered: parseInt(this.__setting[\"pagesRendered\"]) || 3,//number of items(pageSize * pagesRendered) to be rendered\r\n\t\t\t\t\titems: this.__setting[\"items\"],//array of items, can be html or nodes\r\n\t\t\t\t\ttotalLength: parseInt(this.__setting[\"totalLength\"]) || 0,//either mention items or totalLength and itemCreateCallback\r\n\t\t\t\t\tgetItemComponent: this.__setting[\"getItemComponent\"],\r\n\t\t\t\t\tgetEmptyItemComponent: this.__setting[\"getEmptyItemComponent\"],\r\n\t\t\t\t\tenableScrollDelay: Boolean.parse(this.__setting[\"enableScrollDelay\"]),//for Mobile device which are slow in rendering\r\n\t\t\t\t\tscrollInterval: this.__setting[\"scrollInterval\"],\r\n\t\t\t\t\tenableLoader: Boolean.parse(this.__setting[\"enableLoader\"]),\r\n\t\t\t\t\tgetLoaderComponent: this.__setting[\"getLoaderComponent\"],\r\n\t\t\t\t\tresizeInterval: parseInt(this.__setting[\"resizeInterval\"]) || 150,\r\n\t\t\t\t\tscrollingProgress: this.__setting[\"scrollingProgress\"], //scrollingProgress callback while scrolling like scrollingProgress(progress)\r\n\t\t\t\t\tpageWillChange: this.__setting[\"pageWillChange\"], //pageWillChange callback before page change like pageWillChange(oldPage,newPage)\r\n\t\t\t\t\tpageChanged: this.__setting[\"pageChanged\"], //pageChanged callback before page change like pageChanged(page)\r\n\t\t\t\t};\r\n\t\t\tif(!this.__config.scrollElement)\r\n\t\t\t{\r\n\t\t\t\tthis.util.throwNSError(\"NSVirtualScroll\",\"scrollElement is not valid\");\r\n\t\t\t}\r\n\t\t\tif(!this.__config.contentElement)\r\n\t\t\t{\r\n\t\t\t\tthis.util.throwNSError(\"NSVirtualScroll\",\"contentElement is not valid\");\r\n\t\t\t}\r\n\t\t\tthis.__domVariables = this.util.getDomVariables();\r\n\t\t\tthis.__doc = this.__domVariables.doc;\r\n\t\t\tthis.__win = this.__domVariables.win;\r\n\t\t\tif((!this.__config.items || this.__config.items.length == 0) && !this.__config.totalLength)\r\n\t\t\t{\r\n\t\t\t\tthis.__config.items = this.__fetchChildren(contentElement);\r\n\t\t\t}\r\n\t\t\tthis.__setProps();\r\n\t\t\tthis.__setInternalVars();\r\n\t\t\tthis.__create();\r\n\t\t\tthis.__addListeners();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__setProps = function()\r\n\t{\r\n\t\tthis.__objProp = {\r\n\t\t\t vertical: {\r\n\t\t\t direction:NSVirtualScroll.DIRECTION_VERTICAL,size: \"height\",offset: \"offsetHeight\",\r\n\t\t\t scroll: \"scrollTop\", scrollSize: \"scrollHeight\",paddingStart:\"paddingTop\",\r\n\t\t\t paddingEnd:\"paddingBottom\",marginStart:\"marginTop\",marginEnd:\"marginBottom\"\r\n\t\t\t },\r\n\t\t\t horizontal: {\r\n\t\t\t direction:NSVirtualScroll.DIRECTION_HORIZONTAL,size: \"width\",offset: \"offsetWidth\",\r\n\t\t\t scroll: \"scrollLeft\", scrollSize: \"scrollWidth\",paddingStart:\"paddingLeft\",\r\n\t\t\t paddingEnd:\"paddingRight\",marginStart:\"marginLeft\",marginEnd:\"marginRight\"\r\n\t\t\t }\r\n\t\t};\r\n\t\tthis.__objSelectedProp = this.__objProp[\"vertical\"];\r\n\t\tif(this.__config.direction == NSVirtualScroll.DIRECTION_HORIZONTAL)\r\n\t\t{\r\n\t\t\tthis.__objSelectedProp = this.__objProp[\"horizontal\"];\r\n\t\t}\r\n\t};\r\n\t\r\n\t//call this function only with init is needed\r\n\tNSVirtualScroll.prototype.__setInternalVars = function()\r\n\t{\r\n\t\tif(!this.__internal.itemDimension)\r\n\t\t{\r\n\t\t\tif(this.__config.contentElement.hasAttribute(\"tabindex\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__internal.contentTabIndex = this.__config.contentElement.getAttribute(\"tabindex\");\r\n\t\t\t}\r\n\t\t\tthis.__internal.scrollIntervalID = -1;\r\n\t\t\tthis.__internal.resizeIntervalID = -1;\r\n\t\t\tthis.__internal.scrollPos = -1;\r\n\t\t\tthis.__internal.lastPageNum = -1;\r\n\t\t\tthis.__internal.objItemComp = {};\r\n\t\t\tthis.__internal.objCache = {};\r\n\t\t\tthis.__internal.cssExtraItem = \"nsVirtualExtraItem\" + this.util.toCamelCase(this.__objSelectedProp.direction,true);\r\n\t\t\tthis.__internal.isMobile = this.util.isMobile().any;\r\n\t\t\tif(this.__config.enableScrollDelay && this.util.isUndefinedOrNull(this.__config.scrollInterval))\r\n\t\t\t{\r\n\t\t\t\tthis.__config.scrollInterval = this.__internal.isMobile ? 300 : 0;\r\n\t\t\t}\r\n\t\t\tthis.__internal.divLoader = null;\r\n\t\t\tthis.__addLoader();\r\n\t\t\tthis.__internal.pageSize = this.__config.pageSize;\r\n\t\t\tthis.__internal.pagesRendered = this.__config.pagesRendered;\r\n\t\t\tvar item = this.__getItemAt(0);\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\tthis.__internal.isItemHtml = this.util.isString(item);\r\n\t\t\t\tthis.__setSize();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__internal.itemDimension = 0;\r\n\t\t\t\tthis.__internal.pageDimension = 0;\r\n\t\t\t\tthis.__internal.itemsRendered = 0;\r\n\t\t\t\tthis.__internal.renderedSize = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__setSize = function()\r\n\t{\r\n\t\tthis.__internal.itemDimension = this.__getItemSize();\r\n\t\tthis.__internal.pageDimension = this.__internal.itemDimension * this.__internal.pageSize;\r\n\t\tthis.__internal.itemsRendered = this.__internal.pageSize * this.__internal.pagesRendered;\r\n\t\tthis.__internal.renderedSize = this.__internal.pagesRendered * this.__internal.pageDimension;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__create = function()\r\n\t{\r\n\t\tvar scrollElement = this.__config.scrollElement;\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tthis.util.addStyleClass(scrollElement,\"nsVirtualScrollElement nsVirtualScrollElement\" + this.util.toCamelCase(this.__config.direction,true));\r\n\t\tthis.util.addStyleClass(contentElement,\"nsVirtualScrollContent nsVirtualScrollContent\" + this.util.toCamelCase(this.__config.direction,true));\r\n\t\tcontentElement.setAttribute(\"tabindex\",0);\r\n\t\tif((this.__config.items && this.__config.items.length) || this.__config.totalLength)\r\n\t\t{\r\n\t\t\tvar scrollPos = scrollElement[this.__objSelectedProp.scroll];\r\n\t\t\tthis.__addItems();\r\n\t\t\tscrollElement[this.__objSelectedProp.scroll] = scrollPos;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__addListeners = function()\r\n\t{\r\n\t\tif(!this.__scrollHandlerRef)\r\n\t\t{\r\n\t\t\tthis.__scrollHandlerRef = this.__config.enableScrollDelay ? this.__scrollHandlerWithDelay.bind(this) : this.__scrollHandler.bind(this);\r\n\t\t\tthis.util.addEvent(this.__config.scrollElement,\"scroll\",this.__scrollHandlerRef);\r\n\t\t}\r\n\t\tif(!this.__resizeHandlerRef)\r\n\t\t{\r\n\t\t\tthis.__resizeHandlerRef = this.__resizeHandler.bind(this);\r\n\t\t\tthis.util.addEvent(this.__win,\"resize\",this.__resizeHandlerRef);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__scrollHandlerWithDelay = function(event)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tclearTimeout(this.__internal.scrollIntervalID);\r\n\t\tthis.__internal.scrollIntervalID = setTimeout(function(){\r\n\t\t\tself.__scrollHandler.call(self,event);\r\n\t\t},this.__config.scrollInterval);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__scrollHandler = function(event)\r\n\t{\r\n\t\tthis.__internal.scrollIntervalID = -1;\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tvar pageNumber = this.__getCurrentPageNum();\r\n\t\tvar lastPageNum = this.__internal.lastPageNum;\r\n\t\tthis.__internal.lastPageNum = pageNumber;\r\n\t\t/*console.log(\"lastPageNum::\" + lastPageNum + \" pageNumber::\" + pageNumber);*/\r\n\t\tif(lastPageNum != pageNumber)\r\n\t\t{\r\n\t\t\t//console.log(\"In Scroll\");\r\n\t\t\tthis.__addItems();\r\n\t\t\tthis.__fireCallback(\"scrollingProgress\",this.getScrollProgress());\r\n\t\t}\r\n\t};\r\n\t\r\n\t//not used for now\r\n\tNSVirtualScroll.prototype.__isScrollingDown = function() {\r\n\t\t var isScrollingDown = false;\r\n\t\t var currentScrollPos = this.__config.scrollElement[this.__objSelectedProp.scroll];\r\n\r\n\t\t if (currentScrollPos > this.__internal.prevScrollPos) {\r\n\t\t isScrollingDown = true;\r\n\t\t } else {\r\n\t\t isScrollingDown = false;\r\n\t\t }\r\n\r\n\t\t this.__internal.prevScrollPos = currentScrollPos;\r\n\t\t return isScrollingDown;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__resizeHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tclearTimeout(this.__internal.resizeIntervalID);\r\n\t\tvar self = this;\r\n\t\tthis.__internal.resizeIntervalID = setTimeout(self.refresh.bind(self), this.__config.resizeInterval);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getItemSize = function()\r\n\t{\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tvar isAdded = false;\r\n\t\tvar size = null;\r\n\t\tif(!contentElement.children.length)\r\n\t\t{\r\n var itemHtml = this.__getItemAt(0);\r\n\t\t\tthis.__setItemsInDom(itemHtml);\r\n\t\t\tisAdded = true;\r\n\t\t}\r\n\t\tvar item = null;\r\n\t\tvar length = contentElement.children.length;\r\n\t\tfor(var count = 0;count < length;count++)\r\n\t\t{\r\n\t\t\titem = contentElement.children[count];\r\n\t\t\tif(!this.util.hasStyleClass(item,this.__internal.cssExtraItem))\r\n\t\t\t{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(!this.__config.itemTag)\r\n\t\t{\r\n\t\t\tthis.__config.itemTag = item.tagName.toLowerCase();\r\n\t\t}\r\n\t\tsize = item[this.__objSelectedProp.offset];\r\n\t\tif(this.__config.itemTag == \"tr\")\r\n\t\t{\r\n\t\t\tvar border = this.util.getStyleValue(contentElement,\"borderCollapse\");\r\n\t\t\tif(border != \"collapse\")\r\n\t\t\t{\r\n\t\t\t\tvar borderSpacing = this.util.getStyleValue(contentElement,\"borderSpacing\");\r\n\t\t\t\tsize += this.__getInt(borderSpacing);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar marginStart = this.util.getStyleValue(item,this.__objSelectedProp.marginStart);\r\n\t var marginEnd = this.util.getStyleValue(item,this.__objSelectedProp.marginEnd);\r\n\t marginStart = this.__getInt(marginStart);\r\n\t marginEnd = this.__getInt(marginEnd);\r\n\t size += Math.max(marginStart, marginEnd);\r\n\t\t}\r\n\t\tif(isAdded)\r\n\t\t{\r\n\t\t\tthis.__setItemsInDom(null);\r\n\t\t}\r\n\t\treturn size;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__addItems = function()\r\n\t{\r\n\t\tvar arrItem = this.__internal.arrItem || [];\r\n\t\tvar itemPage = this.__getPageData(arrItem,this.__getCurrentPageNum());\r\n\t\tvar hasPageContentChanged = this.__hasCacheChanged(\"data\",itemPage.arrItem);\r\n var hasStartOffsetChanged = this.__hasCacheChanged(\"top\",itemPage.startOffset);\r\n var hasEndOffsetChanged = this.__hasCacheChanged(\"bottom\",itemPage.endOffset);\r\n var contentElement = this.__config.contentElement;\r\n var arrSource = [];\r\n if(hasPageContentChanged || hasStartOffsetChanged) \r\n {\r\n if(itemPage.startOffset) \r\n {\r\n \tarrSource.push(this.__getExtraItem(\"nsVirtualTopItem\",itemPage.startOffset));\r\n }\r\n arrSource.push.apply(arrSource,itemPage.arrItem);\r\n if(itemPage.endOffset) \r\n {\r\n \tarrSource.push(this.__getExtraItem(\"nsVirtualBottomItem\",itemPage.endOffset));\r\n }\r\n this.__fireCallback(\"pageWillChange\",[this.__internal.currentItemPage,itemPage]);\r\n this.__setItemsInDom(arrSource);\r\n this.__handleTagAfterRender(itemPage);\r\n this.__fireCallback(\"pageChanged\",[itemPage]);\r\n this.__internal.currentItemPage = itemPage;\r\n } \r\n else if(hasEndOffsetChanged) \r\n {\r\n \tcontentElement.lastChild.style[this.__objSelectedProp.size] = itemPage.endOffset + \"px\";\r\n }\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__setItemsInDom = function(arrItem,isAdd)\r\n\t{\r\n\t\tthis.__setLoaderVisibility(true);\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tif(this.__internal.isItemHtml)\r\n\t\t{\r\n\t\t\tif(arrItem)\r\n\t\t\t{\r\n\t\t\t\tvar html = this.__convertArrayToString(arrItem);\r\n\t\t\t\tisAdd ? contentElement.innerHTML += html : contentElement.innerHTML = html;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tisAdd ? null : contentElement.innerHTML = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(!isAdd)\r\n\t\t\t{\r\n\t\t\t\t//IE Bug that when Html elements are added(i.e. when this.__internal.isItemHtml is false) you do contentElement.innerHTML = \"\" \r\n\t\t\t\t//then the items being rendered in this.__internal.arrItem also becomes empty\r\n\t\t\t\tif(this.__internal.isItemHtml)\r\n\t\t\t\t{\r\n\t\t\t\t\tcontentElement.innerHTML = \"\";\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\twhile(contentElement.firstChild) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontentElement.removeChild(contentElement.lastChild);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(arrItem)\r\n\t\t\t{\r\n\t\t\t\tarrItem = this.util.isArray(arrItem) ? arrItem : [arrItem];\r\n\t\t\t\tvar item = null;\r\n\t\t\t\tvar length = arrItem.length;\r\n\t\t\t\tfor(var count =0;count < length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(arrItem[count]) {\r\n\t\t\t\t\t\titem = arrItem[count];\r\n\t\t\t\t\t\tthis.util.isString(item) ? contentElement.innerHTML += item : contentElement.appendChild(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__setLoaderVisibility(false);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getAllItems = function(fromIndex,toIndex)\r\n\t{\r\n\t\tif(this.__config.items && this.__config.items.length && this.__config.items.length > fromIndex)\r\n\t\t{\r\n toIndex = this.__config.items.length > toIndex ? toIndex : this.__config.items.length - 1;\r\n var arrCloned = this.__config.items.slice();\r\n\t\t\tvar arrItem = arrCloned.splice(fromIndex,toIndex - fromIndex);\r\n\t\t\treturn arrItem;\r\n\t\t}\r\n\t\telse if(this.__config.totalLength && this.__config.getItemComponent)\r\n\t\t{\r\n fromIndex = this.__config.totalLength > fromIndex ? fromIndex : this.__config.totalLength - 1;\r\n toIndex = this.__config.totalLength > toIndex ? toIndex : this.__config.totalLength - 1;\r\n if(!this.__internal.arrItem) {\r\n\t\t\t\tthis.__internal.arrItem = [];\r\n\t\t\t}\r\n\t\t\tvar arrItem = this.__internal.arrItem;\r\n var arrRet = [];\r\n\t\t\tfor(var count = fromIndex;count < toIndex + 1;count++)\r\n\t\t\t{\r\n if(arrItem.length > count && arrItem[count]) {\r\n arrRet.push(arrItem[count]);\r\n }\r\n else {\r\n var item = this.__getItemFromComponent(count);\r\n arrItem[count] = item;\r\n arrRet.push(item);\r\n }\r\n\t\t\t}\r\n\t\t\treturn arrRet;\r\n\t\t}\r\n\t\treturn [];\r\n\t};\r\n\r\n NSVirtualScroll.prototype.__getItemAt = function(index) \r\n {\r\n if(this.__config.items && this.__config.items.length && this.__config.items.length > index)\r\n\t\t{\r\n return this.__config.items[index];\r\n\t\t}\r\n else if(this.__config.arrItem && this.__config.arrItem.length && this.__config.arrItem.length > index && this.__config.arrItem[index])\r\n\t\t{\r\n return this.__config.arrItem[index];\r\n\t\t}\r\n else if(this.__config.totalLength > index && this.__config.getItemComponent) {\r\n return this.__getItemFromComponent(index);\r\n }\r\n return null;\r\n };\r\n\t\r\n\tNSVirtualScroll.prototype.__getItemFromComponent = function(index)\r\n\t{\r\n\t\tvar item = null;\r\n\t\tif(this.__config.totalLength > index)\r\n\t\t{\r\n\t\t\tvar comp = new this.__config.getItemComponent(index);\r\n\t\t\titem = comp.getElement();\r\n\t\t\tthis.__internal.objItemComp[index.toString()] = comp;\r\n\t\t}\r\n\t\treturn item;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getPageData = function(arrItem,pageNum)\r\n\t{\r\n\t\tvar internal = this.__internal;\r\n\t\tvar retItem = null;\r\n if(this.__config.totalLength === 0)\r\n\t\t{\r\n\t\t\tretItem = {startOffset: 0,endOffset: 0,itemsBefore: 0,arrItem:[this.__getEmptyItem()]};\r\n\t\t}\r\n\t\t/*else if(arrItem.length < internal.pageSize)\r\n\t\t{\r\n var startIndex = 0;\r\n\t var endIndex = internal.pageSize;\r\n var arrRet = this.__getAllItems(startIndex,endIndex);\r\n\t\t\tretItem = {startOffset: 0,endOffset: 0,itemsBefore: 0,arrItem:arrRet};\r\n\t\t}*/\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar startIndex = Math.max((internal.itemsRendered - internal.pageSize) * pageNum, 0);\r\n\t var endIndex = startIndex + internal.itemsRendered;\r\n var totalLength = this.__getTotalLength();\r\n\t var startOffset = Math.max(startIndex * internal.itemDimension, 0);\r\n\t var endOffset = Math.max((totalLength - endIndex) * internal.itemDimension, 0);\r\n\t var itemsBefore = startIndex;\r\n\t if(startOffset < 1) \r\n\t {\r\n\t \titemsBefore++;\r\n\t }\r\n\t var arrRet = this.__getAllItems(startIndex,endIndex);//arrItem.slice(startIndex,endIndex);\r\n\t retItem = {startOffset: startOffset,endOffset: endOffset,itemsBefore: itemsBefore,arrItem:arrRet};\r\n\t\t}\r\n\t\tconsole.log(retItem);\r\n\t\treturn retItem;\r\n\t};\r\n\r\n NSVirtualScroll.prototype.__getTotalLength = function() \r\n {\r\n if(this.__config.items && this.__config.items.length)\r\n\t\t{\r\n return this.__config.items.length;\r\n\t\t}\r\n else if(this.__config.totalLength && this.__config.getItemComponent) {\r\n return this.__config.totalLength;\r\n }\r\n return 0;\r\n };\r\n\t\r\n\tNSVirtualScroll.prototype.__addNewItems = function(arrNewItem,isPrepend)\r\n\t{\r\n\t\tif(!this.util.isUndefinedOrNull(arrNewItem))\r\n\t\t{\r\n\t\t\tarrNewItem = this.util.isArray(arrNewItem) ? arrNewItem : [arrNewItem];\r\n\t\t\tif(arrNewItem && arrNewItem.length)\r\n\t\t\t{\r\n\t\t\t\tvar arrItem = [];\r\n\t\t\t\tfor(var count = 0;count < arrNewItem.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tarrItem.push(arrNewItem.items[count]);\r\n\t\t\t\t}\r\n\t\t\t\tvar arrExisting = this.__internal.arrItem;\r\n\t\t\t\tthis.__internal.arrItem = isPrepend ? arrItem.concat(arrExisting) : arrExisting.concat(arrItem);\r\n\t\t\t\tthis.__addItems();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__handleTagAfterRender = function(itemPage)\r\n\t{\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tif(this.__config.itemTag == \"ol\")\r\n\t\t{\r\n\t\t\tcontentElement.setAttribute(\"start\", itemPage.itemsBefore);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__fetchChildren = function(element)\r\n\t{\r\n\t\tif(element)\r\n\t\t{\r\n\t\t\tvar arrChildren = element.children;\r\n\t\t\tvar arrRet = [];\r\n\t\t\tvar length = arrChildren.length;\r\n\t\t\tvar child = null;\r\n\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t{\r\n\t\t\t\tchild = arrChildren[count];\r\n\t\t\t\tarrRet.push(this.__getItemHtml(child));\r\n\t\t\t}\r\n\t\t\treturn arrRet;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__fireCallback = function(callbackName,args)\r\n\t{\r\n\t\tif(this.__config[callbackName]) {\r\n\t\t\tthis.__config[callbackName](args);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__hasCacheChanged = function(key,value)\r\n\t{\r\n\t\tvar changed = (value != this.__internal.objCache[key]);\r\n\t\tthis.__internal.objCache[key] = value;\r\n\t return changed;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getCurrentPageNum = function()\r\n\t{\r\n\t\tthis.__internal.scrollPos = this.__config.scrollElement[this.__objSelectedProp.scroll];\r\n\t\tvar pageNum = Math.floor(this.__internal.scrollPos / (this.__internal.renderedSize - this.__internal.pageDimension)) || 0;\r\n\t\t//console.log(this.__internal.scrollPos + \",\" + this.__internal.renderedSize + \",\" + this.__internal.pageDimension + \",\" + pageNum);\r\n\t\treturn pageNum;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getExtraItem = function(cssClass,size)\r\n\t{\r\n\t\tvar item = this.util.createElement(this.__config.itemTag,null,this.__internal.cssExtraItem,this.__doc);\r\n\t\tcssClass && this.util.addStyleClass(item,cssClass);\r\n\t\tsize && (item.style[this.__objSelectedProp.size] = size + \"px\");\r\n\t\treturn (this.__internal.isItemHtml ? this.__getItemHtml(item) : item);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getEmptyItem = function()\r\n\t{\r\n\t\tif(this.__config.getEmptyItemComponent)\r\n\t\t{\r\n\t\t\tvar comp = new this.__config.getEmptyItemComponent();\r\n\t\t\treturn (this.__internal.isItemHtml ? this.__getItemHtml(comp.getElement()) : comp.getElement());\r\n\t\t}\r\n\t\tvar item = this.util.createElement(this.__config.itemTag,null,null,this.__doc);\r\n\t\tif(this.__config.itemTag == \"tr\")\r\n\t\t{\r\n\t\t\titem.innerHTML = \"<td colSpan='1000'></td>\";\r\n\t\t}\r\n\t\treturn (this.__internal.isItemHtml ? this.__getItemHtml(item) : item);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getItemHtml = function(item)\r\n\t{\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\treturn this.util.isString(item) ? item : item.outerHTML;\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__addLoader = function()\r\n\t{\r\n\t\tif(this.__config.enableLoader)\r\n\t\t{\r\n\t\t\tthis.__internal.divLoader = this.util.createDiv(null,\"nsVirtualScrollLoader\");\r\n\t\t\tvar divText = null;\r\n\t\t\tif(this.__config.getLoaderComponent)\r\n\t\t\t{\r\n\t\t\t\tvar comp = new this.__config.getLoaderComponent();\r\n\t\t\t\tdivText = comp.getElement();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tdivText = this.util.createDiv(null,\"nsVirtualScrollLoaderTextCon\");\r\n\t\t\t\tdivText.innerHTML = \"<b class=\\\"nsVirtualScrollLoaderText\\\">Rendering...</b>\";\r\n\t\t\t}\r\n\t\t\tthis.__internal.divLoader.appendChild(divText);\r\n\t\t\tthis.__setLoaderVisibility(false);\r\n\t\t\tthis.__config.scrollElement.appendChild(this.__internal.divLoader);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__setLoaderVisibility = function(isShow)\r\n\t{\r\n\t\tif(this.__internal.divLoader)\r\n\t\t{\r\n\t\t\tthis.__internal.divLoader.style.display = isShow ? \"\" : \"none\";\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__convertArrayToString = function(arrItem,separator)\r\n\t{\r\n\t\tif(arrItem)\r\n\t\t{\r\n\t\t\tseparator = separator ? separator : \"\";\r\n\t\t\treturn this.util.isArray(arrItem) ? arrItem.join(separator) : arrItem;\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getInt = function(value)\r\n\t{\r\n\t\treturn parseInt(value,10) || 0;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.DIRECTION_VERTICAL = \"vertical\";\r\n\tNSVirtualScroll.DIRECTION_HORIZONTAL = \"horizontal\";\r\n\t\r\n\treturn NSVirtualScroll;\r\n})();\r\nnsModuleExport(this,\"NSVirtualScroll\",NSVirtualScroll);\r\n";