UNPKG

nscomponentsreact

Version:

React Wrapper Components for NSComponents

353 lines (334 loc) 11.8 kB
var nsModuleExport = function(root,name,prototype) { if(typeof exports === 'object' && typeof module === 'object') { module.exports[name] = prototype; } else if (typeof define === "function" && define.amd) { define(name,[], function () {return prototype;}); } else if(typeof exports === 'object') { exports[name] = prototype; } else { root[name] = prototype; } };var nsIsWeb = function(root) { if(typeof exports === 'object' && typeof module === 'object') { return false; } else if (typeof define === "function" && define.amd) { return false; } else if(typeof exports === 'object') { return false; } else { return true; } };if(!nsIsWeb()) { var nsutilRef = require('./nsUtil.min.js'); var NSUtil = nsutilRef.NSUtil; var nscontainerbaseRef = require('./nsContainerBase.min.js'); var nsExtendPrototype = nscontainerbaseRef.nsExtendPrototype; var NSContainerBase = nscontainerbaseRef.NSContainerBase; var svgRef = require('./nsSVG.min.js'); var NSSvg = svgRef.NSSvg; var NSSvgShapes = svgRef.NSSvgShapes; var plugginsRef = require('./nsPluggins.min.js'); var nsTextEditor = plugginsRef.nsTextEditor; var nsTextAreaEditor = plugginsRef.nsTextAreaEditor; var NSCellSelection = plugginsRef.NSCellSelection; var NSTableCellNavigator = plugginsRef.NSTableCellNavigator; var dateutilRef = require('./nsDateUtil.min.js'); var NSDateUtil = dateutilRef.NSDateUtil; } "use strict"; var NSPagination = (function() { function NSPagination(setting) { this.PAGE_CLICK = "pageClick"; this.PAGE_CHANGE = "pageChange"; this.util = new NSUtil(); this.__setting = setting; this.__config = null; this.__id = null; this.__container = null; this.__itemFirst = null; this.__itemLast = null; this.__itemPrev = null; this.__itemNext = null; this.__arrItemPage = []; this.__pageCount = 0; this.__selectedPage = -1; this.__initialize(); } NSPagination.prototype.__initialize = function () { if(this.__setting) { this.__config = { parent: this.__setting["parent"] || null, totalRecords: parseInt(this.__setting["totalRecords"]) || 0, pageSize: parseInt(this.__setting["pageSize"]) || 0, totalPageCount: parseInt(this.__setting["totalPageCount"]) || 0, visiblePages: parseInt(this.__setting["visiblePages"]) || 5, containerStyle: this.__setting["containerStyle"] || "nsPaginationContainer", activeStyle: this.__setting["activeStyle"] || "nsPageActive", disabledStyle: this.__setting["disabledStyle"] || "nsPageDisabled", textFirst : this.__setting["textFirst"] || "&laquo;", textLast : this.__setting["textLast"] || "&raquo;", textNext : this.__setting["textNext"] || "&rsaquo;", textPrev : this.__setting["textPrev"] || "&lsaquo;", textTitlePagePrefix: this.__setting["textTitlePagePrefix"] || "Page", textTitleFirst : this.__setting["textTitleFirst"] || 'First Page', textTitleLast : this.__setting["textTitleLast"] || 'Last Page', textTitleNext : this.__setting["textTitleNext"] || 'Next Page', textTitlePrev : this.__setting["textTitlePrev"] || 'Previous Page', showPrevNext : (!this.util.isUndefined(this.__setting["showPrevNext"]) && this.__setting["showPrevNext"] != null) ? Boolean.parse(this.__setting["showPrevNext"]) : true, showFirstLast : (!this.util.isUndefined(this.__setting["showFirstLast"]) && this.__setting["showFirstLast"] != null) ? Boolean.parse(this.__setting["showFirstLast"]) : false }; this.__create(); } }; NSPagination.prototype.changePageSize = function(pageSize) { if(pageSize > 0 && this.__config) { this.__config.pageSize = pageSize; this.__create(); } }; NSPagination.prototype.setSelectedPage = function(pageNumber) { this.__update(pageNumber); }; NSPagination.prototype.getSelectedPage = function(pageNumber) { return this.__selectedPage; }; NSPagination.prototype.__create = function() { if(this.__config.parent) { if(this.__container) { this.__container.parentNode.removeChild(this.__container); this.__arrItemPage = []; this.__selectedPage = -1; } if(this.__config.totalPageCount > 0) { this.__pageCount = this.__config.totalPageCount; } else if(this.__config.pageSize > 0) { this.__pageCount = Math.ceil(this.__config.totalRecords / this.__config.pageSize); } this.__container = this.util.createElement("ul",this.__getID() + "container",this.__config.containerStyle); this.__config.parent.appendChild(this.__container); if(this.__config.showFirstLast) { this.__itemFirst = this.__createItem("-4",this.__config["textFirst"],this.__config.textTitleFirst,this.__controlItemClickHandler); } if(this.__config.showPrevNext) { this.__itemPrev = this.__createItem("-3",this.__config["textPrev"],this.__config.textTitlePrev,this.__controlItemClickHandler); } var createdNumber = Math.min(this.__pageCount,this.__config.visiblePages); for(var count = 1;count <= createdNumber;count++) { var pageItem = this.__createItem(count,count,this.__config.textTitlePagePrefix + " " + count,this.__pageItemClickHandler); this.__arrItemPage.push(pageItem); } if(this.__config.showPrevNext) { this.__itemNext = this.__createItem("-2",this.__config["textNext"],this.__config.textTitleNext,this.__controlItemClickHandler); } if(this.__config.showFirstLast) { this.__itemLast = this.__createItem("-1",this.__config["textLast"],this.__config.textTitleLast,this.__controlItemClickHandler); } //this.__selectPage(1); this.__updateControlState(1); } }; NSPagination.prototype.__controlItemClickHandler = function(event) { var target = this.util.getTarget(event); target = this.util.findParent(target,"li"); var index = parseInt(target.getAttribute("pageNum")); var pageSelected = -1; switch(index) { case -4: pageSelected = 1; break; case -3: pageSelected = this.__selectedPage - 1; break; case -2: pageSelected = this.__selectedPage + 1; break; case -1: pageSelected = this.__pageCount; break; } this.__update(pageSelected); }; NSPagination.prototype.__pageItemClickHandler = function(event) { var target = this.util.getTarget(event); target = this.util.findParent(target,"li"); var index = parseInt(target.getAttribute("pageNum")); this.__update(index); }; NSPagination.prototype.__createItem = function(pageNumber,htmlText,titleText,clickHandler) { var pageItem = this.util.createElement("li",this.__getID() + "Page" + pageNumber,null); pageItem.setAttribute("pageNum",pageNumber); pageItem.setAttribute("title",titleText); this.util.addEvent(pageItem,"click",clickHandler.bind(this)); var pageText = this.util.createElement("a",null,null); pageText.setAttribute("href","javascript:void(0);"); pageText.innerHTML = htmlText; pageItem.appendChild(pageText); this.__container.appendChild(pageItem); return pageItem; }; NSPagination.prototype.__update = function(pageNumber) { if(pageNumber <= 0) { pageNumber = 1; } else if(pageNumber > this.__pageCount) { pageNumber = this.__pageCount; } var range = this.__calculateRange(this.__pageCount,Math.min(this.__pageCount,this.__config.visiblePages),pageNumber); this.__updateItem(range[0],range[1]); this.__selectPage(pageNumber); this.__updateControlState(pageNumber); }; NSPagination.prototype.__updateItem = function(fromPage,toPage) { var firstNumber = parseInt(this.__arrItemPage[0].getAttribute("pageNum")); var lastNumber = parseInt(this.__arrItemPage[this.__arrItemPage.length - 1].getAttribute("pageNum")); if(!(firstNumber === fromPage && lastNumber === toPage)) { for(var count = 0;count < this.__arrItemPage.length;count++) { var pageItem = this.__arrItemPage[count]; var index = count + fromPage; pageItem.setAttribute("pageNum",index); pageItem.setAttribute("title",this.__config.textTitlePagePrefix + " " + index); var pageText = pageItem.firstChild; pageText.innerHTML = index; } } }; NSPagination.prototype.__updateControlState = function(pageNumber) { if(pageNumber === 1) { this.__itemFirst ? this.util.addStyleClass(this.__itemFirst,this.__config.disabledStyle) : ""; this.__itemPrev ? this.util.addStyleClass(this.__itemPrev,this.__config.disabledStyle) : ""; } else { this.__itemFirst ? this.util.removeStyleClass(this.__itemFirst,this.__config.disabledStyle) : ""; this.__itemPrev ? this.util.removeStyleClass(this.__itemPrev,this.__config.disabledStyle) : ""; } if(pageNumber === this.__pageCount) { this.__itemNext ? this.util.addStyleClass(this.__itemNext,this.__config.disabledStyle) : ""; this.__itemLast ? this.util.addStyleClass(this.__itemLast,this.__config.disabledStyle) : ""; } else { this.__itemNext ? this.util.removeStyleClass(this.__itemNext,this.__config.disabledStyle) : ""; this.__itemLast ? this.util.removeStyleClass(this.__itemLast,this.__config.disabledStyle) : ""; }; }; NSPagination.prototype.__calculateRange = function(totalPages,visiblePages,pageToBeSelected) { var renderPage = [1,totalPages]; var limit = Math.floor(visiblePages/2); if(visiblePages > 0) { renderPage[0] = Math.max(pageToBeSelected - limit, 1); renderPage[1] = Math.min(pageToBeSelected + limit, totalPages); var difference = renderPage[1] - renderPage[0]; if(renderPage[0] === 1 && difference < visiblePages) { renderPage[1] = visiblePages; } else if(renderPage[1] === totalPages && difference < visiblePages) { renderPage[0] = renderPage[1] - visiblePages + 1; } } return renderPage; }; NSPagination.prototype.__selectPage = function(pageIndex) { var selectedIndex = -1; for(var count = 0;count < this.__arrItemPage.length;count++) { var pageItem = this.__arrItemPage[count]; this.util.removeStyleClass(pageItem,this.__config.activeStyle); var index = parseInt(pageItem.getAttribute("pageNum")); if(index === pageIndex) { selectedIndex = count; } } if(selectedIndex > -1) { var oldPage = this.__selectedPage; this.util.addStyleClass(this.__arrItemPage[selectedIndex],this.__config.activeStyle); this.__selectedPage = pageIndex; var fromRecord = (pageIndex - 1) * this.__config.pageSize; var toRecord = fromRecord + this.__config.pageSize - 1; toRecord = (toRecord < this.__config.totalRecords) ? toRecord : ((toRecord === this.__config.totalRecords) ? this.__config.totalRecords - 1 : this.__config.totalRecords); var item = {oldIndex:oldPage,newIndex:this.__selectedPage,fromRecord:fromRecord,toRecord:toRecord}; this.util.dispatchEvent(this.__config.parent,this.PAGE_CLICK,item,item); if(oldPage !== this.__selectedPage) { this.util.dispatchEvent(this.__config.parent,this.PAGE_CHANGE,item,item); } } }; NSPagination.prototype.__getID = function() { if(!this.__id) { if(this.__config.parent.hasAttribute("id")) { this.__id = this.__config.parent.getAttribute("id"); } else if(this.__config.parent.hasAttribute("name")) { this.__id = this.__config.parent.getAttribute("name"); } else { this.__id = "comp" + this.util.getUniqueId(); } } return this.__id; }; return NSPagination; })(); nsModuleExport(this,"NSPagination",NSPagination);