/* * HGrid - v0.2.10 * A Javascript-based hierarchical grid that can be used to manage and organize files and folders */ if(this.HGrid=function(a){"use strict";function b(){}function c(){return v++}function d(a){void 0===a?(this.data={},this.id=s,this.depth=0,this.dataView=new Slick.Data.DataView({inlineFilters:!0})):(this.data=a,this.id=a.id?a.id:c(),this.depth=null,this.dataView=null),this.children=[],this.parentID=null}function e(a,b,c){for(var d=a.length;d--;)if(a[d]&&a[d].hasOwnProperty(b)&&arguments.length>2&&a[d][b]===c)return a.splice(d,1),!0;return!1}function f(a,b){var c=b.getItemById(a.parentID);return c?b.getIdxById(c.id)+1:0}function g(a){this.data=a,this.id=a.id?a.id:c(),this.parentID=null,this.depth=null,this.children=[],this.dataView=null}function h(){this.queue=[],this.offset=0}function i(a){return a.replace(/&/g,"&").replace(//g,">")}function j(a){return''}function k(a,b,c){c=c||r;var d=(a.depth-1)*c,e=j(d);return e+b}function l(a,b){var c=a.kind===u?p.Html.folderNameClass:p.Html.itemNameClass,d='',e="";return[d,b,e].join("")}function m(a){var b,c=a.tag||"button";b=a.cssClass?p.Html.buttonClass+" "+a.cssClass:p.Html.buttonClass;var d=a.action||"noop",e=a.attributes||"",f={action:d,cssClass:b,tag:c,text:a.text,attributes:e},g=x('<{{tag}} data-hg-action="{{action}}" class="{{cssClass}}" {{attributes}} >{{text}}',f);return g}function n(a){var b=a.map(function(a){var b=m(a);return b}).join("");return b}function o(a){return a._node._load_status===p.LOADING_STARTED}function p(b,c){var d=this;if(d.selector=b,d.element=a(b),d.options=a.extend({},y,c),d.grid=null,d.dropzone=null,d.plugins=[],d.options.searchInput){var e=a(d.options.searchInput);if(!e.length)throw new p.Error("Invalid selector for searchInput.");d.searchInput=e}else d.searchInput=null;"string"==typeof d.options.data?d.getFromServer(d.options.data,function(a){d._initData(a),d.init()}):(d._initData(d.options.data),d.init())}function q(a,b){var c;return b.grid&&b.grid._searchText?(a.depth=0,c=b.searchFilter.call(b.grid,a,b.grid._searchText)):(a.depth=a._node.depth,c=!a._hidden),c}var r=20,s="root",t="item",u="folder",v=0;d.fromObject=function(a,b,c){c=c||{};var e,f,h,i;Array.isArray(a)?(e=new d,f=a):(f=a.children||[],e=new d(a),e.depth=b.depth+1,e.dataView=b.dataView,c.collapse&&(e.data._collapsed=!0));for(var j=0,k=f.length;k>j;j++){var l=f[j];l.kind===t?(h=g.fromObject(l,e,c),e.add(h)):(i=d.fromObject(l,e,c),e.add(i))}return e},d.resetIDCounter=function(){v=0},d._getCurrentID=function(){return v},d.prototype.add=function(a,b){return a.parentID=this.id,a.depth=this.depth+1,a.dataView=this.dataView,this.children.push(a),b&&this.insertIntoDataView(a),this},d.prototype.empty=function(a){if(a){var b=this.getItem();this.dataView.deleteItem(b.id)}for(var c,d=0;c=this.children[d];d++)c.empty(!0),c.children=[];return this.children=[],this},d.prototype.remove=function(a){var b="object"==typeof a?a.id:a,c=e(this.children,"id",a);if(c)this.dataView.deleteItem(b);else for(var d,f=0;d=this.children[f];f++)c=d.remove(a)},d.prototype.getItem=function(){return this.dataView.getItemById(this.id)},d.prototype.sort=function(a,b){this.children.sort(function(c,d){var e=c.data[a],f=d.data[a],g=b?1:-1,h=(e===f?0:e>f?1:-1)*g;return 0!==h?h:0});for(var c,d=0;c=this.children[d];d++)c.sort(a,b);return this},d.prototype.sortCmp=function(a){this.children.sort(a);for(var b,c=0;b=this.children[c];c++)b.sortCmp(key);return this},d.prototype.insertIntoDataView=function(a){var b,c=a.toData();if(Array.isArray(c))for(var d=0,e=c.length;e>d;d++){var g=c[d];b=f(g,this.dataView),this.dataView.insertItem(b,g)}else b=f(c,this.dataView),this.dataView.insertItem(b,c);return this},d.prototype.ensureDataView=function(a){a||(a=this.dataView),this.dataView=a;for(var b,c=0;b=this.children[c];c++)b.ensureDataView(a);return this},d.prototype.updateDataView=function(a){if(!this.dataView)throw new p.Error("Tree does not have a DataView. updateDataView must be called on a root node.");return a||this.ensureDataView(),this.dataView.beginUpdate(),this.dataView.setItems(this.toData()),this.dataView.endUpdate(),this},d.prototype.toData=function(b){var c=b||[];if(0!==this.depth){var d=a.extend({},{id:this.id,parentID:this.parentID,_node:this,depth:this.depth},this.data);c.push(d)}for(var e=0,f=this.children.length;f>e;e++){var g=this.children[e];g.toData(c)}return c},d.prototype.collapse=function(a,b){var c;this.isRoot()||(c=this.getItem(),a?c._hidden=!0:(c._collapsed=!0,c._hidden=!1));for(var d,e=0;d=this.children[e];e++)d.collapse(!0);return!this.isRoot()&&b&&this.dataView.updateItem(c.id,c),this},d.prototype.bfTraverse=function(a,b){for(var c=new h,d=this;d&&!(b&&d.depth>b);){if(a.call(this,d),d.children.length)for(var e,f=0;e=d.children[f];f++)c.enq(e);d=c.deq()}return this},d.prototype.collapseAt=function(a,b){return 0===a?this.collapse(!1,b):(this.bfTraverse(function(b){b.depth===a&&b instanceof d&&b.collapse(!1,!0)},a),b&&this.dataView.refresh(),this)},d.prototype.expandAt=function(a,b){return 0===a?this.expand(!1,b):(this.bfTraverse(function(b){!b.isRoot()&&b.depth=this.queue.length&&(this.queue=this.queue.slice(this.offset),this.offset=0),a},h.prototype.isEmpty=function(){return 0===this.queue.length};var w={},x=function(a,b){return a?(w[a]=w[a]||new Function("_","return '"+a.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/'/g,"\\'").replace(/\{\{\s*(\w+)\s*\}\}/g,"'+(_.$1?(_.$1+''):(_.$1===0?0:''))+'")+"'"),w[a](b)):""};p.Html={expandElem:'',collapseElem:'',folderIcon:'',fileIcon:'',errorElem:' ',buttonClass:"hg-btn",nameClass:"hg-name",folderNameClass:"hg-folder-name",itemNameClass:"hg-item-name",toggleClass:"hg-toggle"},p.HtmlFactories={expandElem:function(a){return o(a)?'':''},collapseElem:function(a){return o(a)?'':''}},p.Fmt=p.Format={withIndent:k,asName:l,makeIndentElem:j,sanitized:i,button:m,buttons:n,tpl:x},p.Actions={download:{on:"click",callback:function(a,b){this.options.onClickDownload.call(this,a,b)}},"delete":{on:"click",callback:function(a,b){this.options.onClickDelete.call(this,a,b)}},upload:{on:"click",callback:function(a,b){this.options.onClickUpload.call(this,a,b)}},noop:{on:"click",callback:b}},p.Col=p.Columns={Name:{id:"name",name:"Name",sortkey:"name",folderView:p.Html.folderIcon+" {{name}}",itemView:p.Html.fileIcon+" {{name}}",sortable:!0,indent:r,isName:!0,showExpander:function(a,b){return a.kind===p.FOLDER&&(a._node.children.length&&a.depth||b.lazyLoad)&&!a._processing}},ActionButtons:{id:"actions",name:"Actions",width:50,sortable:!1,folderView:function(){var a=[];return this.options.uploads&&a.push({text:"Upload",action:"upload"}),a?n(a):""},itemView:function(){var a=[{text:"Download",action:"download"},{text:"Delete",action:"delete"}];return n(a)}}};var y={data:null,ajaxOptions:{},fetchUrl:null,fetchSuccess:function(){},fetchError:function(){},fetchStart:function(){},uploads:!1,columns:[p.Columns.Name],width:600,height:300,highlightClass:"hg-row-highlight",indent:r,slickgridOptions:{},uploadUrl:null,acceptedFiles:null,maxFilesize:256,uploadMethod:"POST",uploadHeaders:{},dropzoneOptions:{},onClick:function(){},onClickDownload:function(a,b,c){this.downloadItem(b,c)},onClickDelete:function(a,b,c){this.deleteFile(b,c)},onClickUpload:function(a,b){this.uploadToFolder(b)},onExpand:function(){},onCollapse:function(){},onItemAdded:function(){},onDragover:function(){},onDragenter:function(){},onDragleave:function(){},onDrop:function(){},onSort:function(){},uploadAdded:function(){},uploadProcessing:function(){},uploadError:function(b,c){var d,e=a(b.gridElement);return d="string"!=typeof c&&c.error?c.error:c,e.find("[data-upload-errormessage]").each(function(){this.textContent=d}),this},uploadProgress:function(b,c){var d=a(b.gridElement);d.width(c+"%")},uploadSuccess:function(){},uploadComplete:function(){},uploadAccept:function(a,b,c){return c()},uploadSending:function(){},downloadUrl:function(){},deleteUrl:function(){},deleteMethod:function(){},listeners:[],init:function(){},searchInput:null,searchFilter:function(a,b){return-1!==a.name.toLowerCase().indexOf(b.toLowerCase())},canUpload:function(){return!0},uploadDenied:function(){},getExpandState:null,preprocessFilename:function(a){return a}};p._defaults=y,p.Tree=d,p.Leaf=g,p.Queue=h,p.DEFAULT_INDENT=r,p.ROOT_ID=s,p.FOLDER=u,p.ITEM=t,p.Error=function(a){Error.call(this,a),this.name="HGrid.Error",this.message=a||""},p.Error.prototype=Object.create(Error.prototype),p.prototype.collapseAll=function(){return this.tree.collapseAt(1,!0),this},p.prototype.emptyFolder=function(a,b){return a="object"==typeof a?a:this.getByID(a),a._node.empty(b),b||this.getDataView().updateItem(a.id,a),this},p.prototype.getFromServer=function(b,c){var d=this,e=a.extend({},{url:b,contentType:"application/json",dataType:"json",success:function(a){c&&c.call(d,a)},error:function(a,b,e){c&&c.call(d,null,e,b)}},d.options.ajaxOptions);return a.ajax(e)},p.prototype._initData=function(a){var b=this;return a?(b.tree=d.fromObject(Array.isArray(a)?a:a.data),b.tree.updateDataView()):b.tree=new d,b};var z;p.prototype.init=function(){if(this.setHeight(this.options.height).setWidth(this.options.width)._initSlickGrid()._initDataView(),this.options.uploads){if(z="object"==typeof module?require("dropzone"):window.Dropzone,"undefined"==typeof z)throw new p.Error("uploads=true requires DropZone to be loaded");this._initDropzone()}return this._initListeners(),this.isLazy()&&this.collapseAll(),this.refreshExpandState(),this.options.init.call(this),this},p.prototype.refreshExpandState=function(){var a=this;if(a.options.getExpandState)for(var b,c=a.getData(),d=0;b=c[d];d++)a.options.getExpandState.call(a,b)&&a.reloadFolder(b)},p.prototype.setHeight=function(a){return"auto"===a?this.options.slickgridOptions.autoHeight=!0:this.element.css("height",a),this},p.prototype.setWidth=function(a){return this.element.css("width",a),this},p.prototype.makeFormatter=function(a){var b,c,d=this,e=a.folderView,f=a.itemView,g=a.showExpander,h="number"==typeof a.indent?a.indent:r,i=function(i,j,m,n,o){var q={colDef:n,row:i,cell:j,indent:a.indent,lazyLoad:d.isLazy()};if(b=o.kind===u?e:f,c="function"==typeof b?b.call(d,o,q):p.Format.tpl(b,o),a.isName&&(c=l(o,c)),g){var r;r="function"==typeof g&&g(o,q)?o._collapsed?p.HtmlFactories.expandElem(o):p.HtmlFactories.collapseElem(o):'',c=[r,c].join("")}return a.indent&&(c=k(o,c,h)),c};return i},p.prototype._makeSlickgridColumns=function(a){var b=this,c=a.map(function(a){return"formatter"in a||(a.formatter=b.makeFormatter.call(b,a)),"text"in a&&(a.name=a.text),a.cssClass="cssClass"in a?a.cssClass+" hg-cell":"hg-cell",a});return c};var A={editable:!1,asyncEditorLoading:!1,enableCellNavigation:!1,enableColumnReorder:!1,forceFitColumns:!0,fullWidthRows:!0};p.prototype._initSlickGrid=function(){var b=this,c=b._makeSlickgridColumns(b.options.columns),d=a.extend({},A,b.options.slickgridOptions);return b.grid=new Slick.Grid(b.element.selector,b.tree.dataView,c,d),b},p.prototype.removeHighlight=function(a){var b=a||this.options.highlightClass;return this.element.find("."+b).removeClass(b),this},p.prototype.getRowElement=function(a){"object"==typeof a&&(a=a.id);try{return this.grid.getCellNode(this.getDataView().getRowById(a),0).parentNode}catch(b){throw new p.Error("Row element is not rendered in the DOM.")}},p.prototype.getPathToRoot=function(a){var b=this.getNodeByID(a);return b.getPathToRoot()},p.prototype.addHighlight=function(b,c){var d=c||this.options.highlightClass;this.removeHighlight();var e;e=b&&b.kind===u?b.id:b.parentID;var f;try{f=a(this.getRowElement(e))}catch(g){return this}return f&&f.addClass(d),this},p.prototype.folderContains=function(a,b){return this.getPathToRoot(b).indexOf(a)>=0},p.prototype.slickEvents={onClick:function(a,b){var c=this.getDataView().getItem(b.row);return this.canToggle(a.target)&&this.toggleCollapse(c,a),this.options.onClick.call(this,a,c),this},onCellChange:function(a,b){return this.getDataView().updateItem(b.item.id,b.item),this},onMouseLeave:function(){this.removeHighlight()},onSort:function(a,b){var c=b.sortCol,d=c.field||c.sortkey;if(!d)throw new p.Error("Sortable column does not define a `sortkey` to sort on.");this.tree.sort(d,b.sortAsc),this.tree.updateDataView(!0),this.options.onSort.call(this,a,c,b)}},p.prototype.getItemFromEvent=function(a){var b=this.grid.getCellFromEvent(a);return b?this.getDataView().getItem(b.row):null},p.prototype.uploadToFolder=function(a){this.currentTarget=a,this.setUploadTarget(a),this.dropzone.hiddenFileInput.click()},p.prototype.downloadItem=function(a){var b;return b="function"==typeof this.options.downloadUrl?this.options.downloadUrl(a):this.options.downloadUrl,b&&(window.location=b),this},p.prototype.deleteFile=function(b,c){var d,e,f=this;d="function"==typeof this.options.deleteUrl?this.options.deleteUrl(b):this.options.deleteUrl,e="function"==typeof this.options.deleteMethod?this.options.deleteMethod(b):this.options.deleteMethod;var g=a.extend({},{url:d,type:e,success:function(){f.updateItem(f.getByID(b.parentID)),f.removeItem(b.id)}},f.options.ajaxOptions,c),h=null;return d&&(h=a.ajax(g)),h},p.prototype.currentTarget=null,p.prototype.setUploadTarget=function(b){function c(a){return"function"==typeof a?a.call(d,b):a}var d=this;d.currentTarget&&a.when(c(d.options.uploadHeaders),c(d.options.uploadUrl),c(d.options.uploadMethod),c(d.options.maxFilesize),c(d.options.acceptedFiles)).done(function(a,c,e,f,g){d.dropzone.options.headers=a,d.dropzone.options.url=c,d.dropzone.options.method=e,d.dropzone.options.maxFilesize=f,d.setAcceptedFiles(g),d.options.uploadAccept&&(d.dropzone.options.accept=function(a,c){return d.options.uploadAccept.call(d,a,b,c)})})},p.prototype.canUpload=function(a){return Boolean(a&&this.options.canUpload(a))},p.prototype.denyUpload=function(a){throw this.options.uploadDenied.call(this,a),new p.Error("Upload permission denied.")},p.prototype.validateTarget=function(a){return this.canUpload(a)?a:this.denyUpload(a)},p.prototype.dropzoneEvents={drop:function(a){this.removeHighlight(),this.validateTarget(this.currentTarget),this.setUploadTarget(this.currentTarget),this.options.onDrop.call(this,a,this.currentTarget)},dragleave:function(a){this.removeHighlight();var b=this.getItemFromEvent(a);this.options.onDragleave.call(this,a,b)},dragenter:function(a){var b=this.getItemFromEvent(a);b&&(this.currentTarget=b.kind===u?b:this.getByID(b.parentID)),this.options.onDragenter.call(this,a,b)},dragover:function(a){var b=this.currentTarget,c=this.getItemFromEvent(a);this.canUpload(b)&&b&&this.addHighlight(b),this.options.onDragover.call(this,a,c)},dragend:function(){this.removeHighlight()},addedfile:function(b){var c=this.currentTarget;this.validateTarget(c);var d;if(this.canUpload(c)){d=this.addItem({name:this.options.preprocessFilename.call(this,b.name),kind:p.ITEM,parentID:c.id});var e=this.getRowElement(d.id),f=a(e);b.gridItem=d,b.gridElement=e,f.addClass("hg-upload-started")}return this.options.uploadAdded.call(this,b,b.gridItem,c),d},thumbnail:b,error:function(b,c){var d=a(b.gridElement);d.addClass("hg-upload-error").removeClass("hg-upload-processing");var e=a.extend({},b.gridItem);return this.removeItem(b.gridItem.id),this.options.uploadError.call(this,b,c,e,this.currentTarget)},processing:function(b){return a(b.gridElement).addClass("hg-upload-processing"),this.currentTarget._processing=!0,this.updateItem(this.currentTarget),this.options.uploadProcessing.call(this,b,b.gridItem,this.currentTarget),this},uploadprogress:function(a,b,c){return this.options.uploadProgress.call(this,a,b,c,a.gridItem)},success:function(b,c){return a(b.gridElement).addClass("hg-upload-success"),this.options.uploadSuccess.call(this,b,b.gridItem,c)},complete:function(b){return a(b.gridElement).removeClass("hg-upload-processing"),this.currentTarget._processing=!1,this.updateItem(this.currentTarget),this.options.uploadComplete.call(this,b,b.gridItem)},sending:function(a,b,c){return this.options.uploadSending(a,a.gridItem,b,c)}},p.prototype._initListeners=function(){var a,b,c=this;for(a in c.slickEvents)b=c.slickEvents[a].bind(c),c.grid[a].subscribe(b);if(this.options.uploads)for(a in c.dropzoneEvents)b=c.dropzoneEvents[a].bind(c),c.dropzone.on(a,b);for(var d,e=function(a){var b=c.getItemFromEvent(a);return a.data.listenerObj.callback(a,b,a.data.grid)},f=0;d=this.options.listeners[f];f++)c.element.on(d.on,d.selector,{listenerObj:d,grid:c},e);this.attachActionListeners(),c.searchInput&&c.searchInput.keyup(function(){c._searchText=this.value,c.getDataView().refresh(),c.grid.invalidate(),c.grid.render()})},p.prototype.attachActionListeners=function(){var b=this;a.extend(p.Actions,b.options.actions);var c=function(a){var c=b.getItemFromEvent(a);a.data.actionObj.callback.call(b,a,c)};for(var d in p.Actions){var e=p.Actions[d];this.element.on(e.on,'[data-hg-action="'+d+'"]',{actionObj:e},c)}return this},p._hgFilter=q,p.prototype._initDataView=function(){var a=this,b=this.getDataView();return b.beginUpdate(),b.setFilterArgs({grid:a,searchFilter:a.options.searchFilter}),b.setFilter(q),b.endUpdate(),b.onRowCountChanged.subscribe(function(){a.grid.updateRowCount(),a.grid.render()}),b.onRowsChanged.subscribe(function(b,c){a.grid.invalidateRows(c.rows),a.grid.render()}),this};var B={addRemoveLinks:!1,previewTemplate:"
"};p.prototype.setAcceptedFiles=function(a){var b;return b=Array.isArray(a)?a.join(","):a,this.dropzone.options.acceptedFiles=b,this},p.prototype._initDropzone=function(){function b(a,b){return"function"==typeof a||null==a?b:a}var c,d,e,f=null;c=b(this.options.uploadUrl,"/"),d=b(this.options.uploadMethod,"POST"),e=b(this.options.uploadHeaders,{}),f=b(this.options.acceptedFiles,null),Array.isArray(f)&&(f=f.join(","));var g=a.extend({},{url:c,acceptedFiles:f,maxFilesize:this.options.maxFilesize,method:d,headers:e},B,this.options.dropzoneOptions);return this.dropzone=new z(this.selector,g),this},p.prototype.destroy=function(){this.element.html(""),this.grid.destroy(),this.dropzone&&this.dropzone.destroy()},p.prototype.getData=function(){return this.getDataView().getItems()},p.prototype.getByID=function(a){var b=this.getDataView();return b.getItemById(a)},p.prototype.getDataView=function(){return this.grid.getData()},p.prototype.getRefreshHints=function(a){var b=this.getDataView().getRowById(a.id),c={expand:{isFilterNarrowing:!1,isFilterExpanding:!0,ignoreDiffsBefore:b},collapse:{isFilterNarrowing:!0,isFilterExpanding:!1,ignoreDiffsBefore:b}};return c},p.prototype.isLazy=function(){return Boolean(this.options.fetchUrl)};var C=p.LOADING_UNFINISHED="lu",D=p.LOADING_STARTED="ls",E=p.LOADING_FINISHED="lf";return p.prototype.setLoadingStatus=function(a,b){a._node._load_status=b,this.updateItem(a)},p.prototype._lazyLoad=function(a){var b=this,c=b.options.fetchUrl(a);return null!==c?(b.options.fetchStart.call(b,a),b.setLoadingStatus(a,D),b.getFromServer(c,function(d,e){if(e)throw b.setLoadingStatus(a,C),b.options.fetchError.call(b,e,a),new p.Error('Could not fetch data from url: "'+c+'". Error: '+e);b.addData(d,a.id),b.setLoadingStatus(a,E),b.refreshExpandState(),b.options.fetchSuccess.call(b,d,a)})):!1},p.prototype.expandItem=function(a,b){var c=this;a="object"==typeof a?a:c.getByID(a);var d=c.getNodeByID(a.id);a._node.expand();var e=c.getDataView(),f=c.getRefreshHints(a).expand;return e.setRefreshHints(f),c.getDataView().updateItem(a.id,a),!c.isLazy()||void 0!==d._load_status&&d._load_status!==C||this._lazyLoad(a),c.options.onExpand.call(c,b,a),c},p.prototype.collapseItem=function(a,b){a="object"==typeof a?a:this.getByID(a),a._node.collapse();var c=this.getDataView(),d=this.getRefreshHints(a).collapse;return c.setRefreshHints(d),c.updateItem(a.id,a),this.options.onCollapse.call(this,b,a),this},p.prototype.updateItem=function(a){return this.getDataView().updateItem(a.id,a)},p.prototype.isCollapsed=function(a){return Boolean(a._collapsed)},p.prototype.canToggle=function(b){return a(b).hasClass(p.Html.toggleClass)},p.prototype.addItem=function(a){var b,c;b=a.kind===p.FOLDER?new p.Tree(a):new p.Leaf(a),c=null==a.parentID?this.tree:this.getNodeByID(a.parentID),c.add(b,!0);var d=this.getByID(b.id);return this.options.onItemAdded.call(this,d),d},p.prototype.addItems=function(a){var b=this;return this.batchUpdate(function(){for(var c=0,d=a.length;d>c;c++){var e=a[c];b.addItem(e)}}),this},p.prototype.batchUpdate=function(a){this.getDataView().beginUpdate(),a.call(this),this.getDataView().endUpdate()},p.prototype.addColumn=function(a){var b=this.grid.getColumns();return b.push(a),this.grid.setColumns(b),this},p.prototype.removeItem=function(a){return this.tree.remove(a)},p.prototype.getNodeByID=function(a){if(a===p.ROOT_ID||null==a)return this.tree;var b=this.getByID(a);return b._node},p.prototype.toggleCollapse=function(a,b){return a&&(this.isCollapsed(a)?this.expandItem(a,b):this.collapseItem(a,b)),this},p.prototype.addData=function(a,b){{var c,e=this,f=this.getNodeByID(b);this.getDataView()}return c=Array.isArray(a)?a:a.data,e.batchUpdate(function(){for(var a=c.length-1;a>=0;a--){var b,h=c[a];if(h.kind===p.FOLDER){var i=e.isLazy(),j={collapse:i};b=d.fromObject(h,f,j)}else b=g.fromObject(h,f);f.add(b,!0)}}),this},p.prototype.resetLoadedState=function(a,b){var c=this;return b?c.setLoadingStatus(a,b):c.setLoadingStatus(a,C),this},p.prototype.reloadFolder=function(a){return this.resetLoadedState(a),this.emptyFolder(a),this.collapseItem(a),this.expandItem(a),this},p.prototype.render=function(){return this.grid.render(),this},p.prototype.invalidate=function(){return this.grid.invalidate(),this},p.prototype.refreshData=function(){this.getDataView().refresh()},p.prototype.registerPlugin=function(a){this.plugins.unshift(a),a.init(this)},p.prototype.unregisterPlugin=function(a){for(var b=this.plugins,c=b.length;c>=0;c--)if(b[c]===a){b[c].destroy&&b[c].destroy(),b.splice(c,1);break}},a.fn.hgrid=function(a){this.each(function(){if(!this.id)throw new p.Error("Element must have an ID if initializing HGrid with jQuery");var b="#"+this.id;return new p(b,a)})},p}.call(this,jQuery),function(a){a.fn.drag=function(b,c,d){var e="string"==typeof b?b:"",f=a.isFunction(b)?b:a.isFunction(c)?c:null;return 0!==e.indexOf("drag")&&(e="drag"+e),d=(b==f?c:d)||{},f?this.bind(e,d,f):this.trigger(e)};var b=a.event,c=b.special,d=c.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:!1,drop:!0,click:!1},datakey:"dragdata",noBubble:!0,add:function(b){var c=a.data(this,d.datakey),e=b.data||{};c.related+=1,a.each(d.defaults,function(a){void 0!==e[a]&&(c[a]=e[a])})},remove:function(){a.data(this,d.datakey).related-=1},setup:function(){if(!a.data(this,d.datakey)){var c=a.extend({related:0},d.defaults);a.data(this,d.datakey,c),b.add(this,"touchstart mousedown",d.init,c),this.attachEvent&&this.attachEvent("ondragstart",d.dontstart)}},teardown:function(){var c=a.data(this,d.datakey)||{};c.related||(a.removeData(this,d.datakey),b.remove(this,"touchstart mousedown",d.init),d.textselect(!0),this.detachEvent&&this.detachEvent("ondragstart",d.dontstart))},init:function(e){if(!d.touched){var f,g=e.data;if(!(0!=e.which&&g.which>0&&e.which!=g.which||a(e.target).is(g.not)||g.handle&&!a(e.target).closest(g.handle,e.currentTarget).length||(d.touched="touchstart"==e.type?this:null,g.propagates=1,g.mousedown=this,g.interactions=[d.interaction(this,g)],g.target=e.target,g.pageX=e.pageX,g.pageY=e.pageY,g.dragging=null,f=d.hijack(e,"draginit",g),!g.propagates)))return f=d.flatten(f),f&&f.length&&(g.interactions=[],a.each(f,function(){g.interactions.push(d.interaction(this,g))})),g.propagates=g.interactions.length,g.drop!==!1&&c.drop&&c.drop.handler(e,g),d.textselect(!1),d.touched?b.add(d.touched,"touchmove touchend",d.handler,g):b.add(document,"mousemove mouseup",d.handler,g),!d.touched||g.live?!1:void 0}},interaction:function(b,c){var e=a(b)[c.relative?"position":"offset"]()||{top:0,left:0};return{drag:b,callback:new d.callback,droppable:[],offset:e}},handler:function(e){var f=e.data;switch(e.type){case!f.dragging&&"touchmove":e.preventDefault();case!f.dragging&&"mousemove":if(Math.pow(e.pageX-f.pageX,2)+Math.pow(e.pageY-f.pageY,2)0?void a.removeData(this,"suppress."+b.type):e.apply(this,arguments)};var f=b.fixHooks.touchstart=b.fixHooks.touchmove=b.fixHooks.touchend=b.fixHooks.touchcancel={props:"clientX clientY pageX pageY screenX screenY".split(" "),filter:function(b,c){if(c){var d=c.touches&&c.touches[0]||c.changedTouches&&c.changedTouches[0]||null;d&&a.each(f.props,function(a,c){b[c]=d[c]})}return b}};c.draginit=c.dragstart=c.dragend=d}(jQuery),function(a){a.fn.drop=function(b,c,d){var e="string"==typeof b?b:"",f=a.isFunction(b)?b:a.isFunction(c)?c:null;return 0!==e.indexOf("drop")&&(e="drop"+e),d=(b==f?c:d)||{},f?this.bind(e,d,f):this.trigger(e)},a.drop=function(b){b=b||{},d.multi=b.multi===!0?1/0:b.multi===!1?1:isNaN(b.multi)?d.multi:b.multi,d.delay=b.delay||d.delay,d.tolerance=a.isFunction(b.tolerance)?b.tolerance:null===b.tolerance?null:d.tolerance,d.mode=b.mode||d.mode||"intersect"};var b=a.event,c=b.special,d=a.event.special.drop={multi:1,delay:20,mode:"overlap",targets:[],datakey:"dropdata",noBubble:!0,add:function(){var b=a.data(this,d.datakey);b.related+=1},remove:function(){a.data(this,d.datakey).related-=1},setup:function(){if(!a.data(this,d.datakey)){var b={related:0,active:[],anyactive:0,winner:0,location:{}};a.data(this,d.datakey,b),d.targets.push(this)}},teardown:function(){var b=a.data(this,d.datakey)||{};if(!b.related){a.removeData(this,d.datakey);var c=this;d.targets=a.grep(d.targets,function(a){return a!==c})}},handler:function(b,e){var f;if(e)switch(b.type){case"mousedown":case"touchstart":f=a(d.targets),"string"==typeof e.drop&&(f=f.filter(e.drop)),f.each(function(){var b=a.data(this,d.datakey);b.active=[],b.anyactive=0,b.winner=0}),e.droppable=f,c.drag.hijack(b,"dropinit",e);break;case"mousemove":case"touchmove":d.event=b,d.timer||d.tolerate(e);break;case"mouseup":case"touchend":d.timer=clearTimeout(d.timer),e.propagates&&(c.drag.hijack(b,"drop",e),c.drag.hijack(b,"dropend",e))}},locate:function(b,c){var e=a.data(b,d.datakey),f=a(b),g=f.offset()||{},h=f.outerHeight(),i=f.outerWidth(),j={elem:b,width:i,height:h,top:g.top,left:g.left,right:g.left+i,bottom:g.top+h};return e&&(e.location=j,e.index=c,e.elem=b),j},contains:function(a,b){return(b[0]||b.left)>=a.left&&(b[0]||b.right)<=a.right&&(b[1]||b.top)>=a.top&&(b[1]||b.bottom)<=a.bottom},modes:{intersect:function(a,b,c){return this.contains(c,[a.pageX,a.pageY])?1e9:this.modes.overlap.apply(this,arguments)},overlap:function(a,b,c){return Math.max(0,Math.min(c.bottom,b.bottom)-Math.max(c.top,b.top))*Math.max(0,Math.min(c.right,b.right)-Math.max(c.left,b.left))},fit:function(a,b,c){return this.contains(c,b)?1:0},middle:function(a,b,c){return this.contains(c,[b.left+.5*b.width,b.top+.5*b.height])?1:0}},sort:function(a,b){return b.winner-a.winner||a.index-b.index},tolerate:function(b){var e,f,g,h,i,j,k,l,m=0,n=b.interactions.length,o=[d.event.pageX,d.event.pageY],p=d.tolerance||d.modes[d.mode];do if(l=b.interactions[m]){if(!l)return;l.drop=[],i=[],j=l.droppable.length,p&&(g=d.locate(l.proxy)),e=0;do if(k=l.droppable[e]){if(h=a.data(k,d.datakey),f=h.location,!f)continue;h.winner=p?p.call(d,d.event,g,f):d.contains(f,o)?1:0,i.push(h) }while(++e=0;c--)a[c]===b&&a.splice(c,1)},this.notify=function(c,d,e){d=d||new b,e=e||this;for(var f,g=0;g=this.fromRow&&a<=this.toRow&&b>=this.fromCell&&b<=this.toCell},this.toString=function(){return this.isSingleCell()?"("+this.fromRow+":"+this.fromCell+")":"("+this.fromRow+":"+this.fromCell+" - "+this.toRow+":"+this.toCell+")"}}function f(){this.__nonDataRow=!0}function g(){this.__group=!0,this.level=0,this.count=0,this.value=null,this.title=null,this.collapsed=!1,this.totals=null,this.rows=[],this.groups=null,this.groupingKey=null}function h(){this.__groupTotals=!0,this.group=null}function i(){var a=null;this.isActive=function(b){return b?a===b:null!==a},this.activate=function(b){if(b!==a){if(null!==a)throw"SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController";if(!b.commitCurrentEdit)throw"SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()";if(!b.cancelCurrentEdit)throw"SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()";a=b}},this.deactivate=function(b){if(a!==b)throw"SlickGrid.EditorLock.deactivate: specified editController is not the currently active one";a=null},this.commitCurrentEdit=function(){return a?a.commitCurrentEdit():!0},this.cancelCurrentEdit=function(){return a?a.cancelCurrentEdit():!0}}a.extend(!0,window,{Slick:{Event:c,EventData:b,EventHandler:d,Range:e,NonDataRow:f,Group:g,GroupTotals:h,EditorLock:i,GlobalEditorLock:new i}}),g.prototype=new f,g.prototype.equals=function(a){return this.value===a.value&&this.count===a.count&&this.collapsed===a.collapsed},h.prototype=new f}(jQuery),function(a){function b(b){function c(){sb=!0}function d(){sb=!1,bb()}function e(a){ub=a}function f(a){gb=a}function g(a){a=a||0;for(var b,c=a,d=mb.length;d>c;c++){if(b=mb[c][lb],void 0===b)throw"Each data element must implement a unique 'id' property";ob[b]=c}}function h(){for(var a,b=0,c=mb.length;c>b;b++)if(a=mb[b][lb],void 0===a||ob[a]!==b)throw"Each data element must implement a unique 'id' property"}function i(){return mb}function j(a,b){void 0!==b&&(lb=b),mb=wb=a,ob={},g(),h(),bb()}function k(a){void 0!=a.pageSize&&(Db=a.pageSize,Eb=Db?Math.min(Eb,Math.max(0,Math.ceil(Fb/Db)-1)):0),void 0!=a.pageNum&&(Eb=Math.min(a.pageNum,Math.max(0,Math.ceil(Fb/Db)-1))),Ib.notify(l(),null,jb),bb()}function l(){var a=Db?Math.max(1,Math.ceil(Fb/Db)):1;return{pageSize:Db,pageNum:Eb,totalRows:Fb,totalPages:a}}function m(a,b){tb=b,fb=a,eb=null,b===!1&&mb.reverse(),mb.sort(a),b===!1&&mb.reverse(),ob={},g(),bb()}function n(a,b){tb=b,eb=a,fb=null;var c=Object.prototype.toString;Object.prototype.toString="function"==typeof a?a:function(){return this[a]},b===!1&&mb.reverse(),mb.sort(),Object.prototype.toString=c,b===!1&&mb.reverse(),ob={},g(),bb()}function o(){fb?m(fb,tb):eb&&n(eb,tb)}function p(a){qb=a,b.inlineFilters&&(hb=W(),ib=X()),bb()}function q(){return zb}function r(c){b.groupItemMetadataProvider||(b.groupItemMetadataProvider=new Slick.Data.GroupItemMetadataProvider),Ab=[],Bb=[],c=c||[],zb=c instanceof Array?c:[c];for(var d=0;da;a++)pb[nb[a][lb]]=a}}function x(a){return w(),pb[a]}function y(a){return mb[ob[a]]}function z(a){var b=[];w();for(var c=0;cj;j++)d=i.predefinedValues[j],c=g[d],c||(c=new Slick.Group,c.value=d,c.level=h,c.groupingKey=(b?b.groupingKey+Cb:"")+d,f[f.length]=c,g[d]=c);for(var j=0,k=a.length;k>j;j++)e=a[j],d=i.getterIsAFn?i.getter(e):e[i.getter],c=g[d],c||(c=new Slick.Group,c.value=d,c.level=h,c.groupingKey=(b?b.groupingKey+Cb:"")+d,f[f.length]=c,g[d]=c),c.rows[c.count++]=e;if(hh;h++){if(d=a[h],f[g++]=d,!d.collapsed){c=d.groups?T(d.groups,b+1):d.rows;for(var j=0,k=c.length;k>j;j++)f[g++]=c[j]}d.totals&&e.displayTotalsRow&&(!d.collapsed||e.aggregateCollapsed)&&(f[g++]=d.totals)}return f}function U(a){var b=/^function[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/,c=a.toString().match(b);return{params:c[1].split(","),body:c[2]}}function V(a){var b=U(a.accumulate),c=new Function("_items","for (var "+b.params[0]+", _i=0, _il=_items.length; _i<_il; _i++) {"+b.params[0]+" = _items[_i]; "+b.body+"}");return c.displayName=c.name="compiledAccumulatorLoop",c}function W(){var a=U(qb),b=a.body.replace(/return false[;}]/gi,"{ continue _coreloop; }").replace(/return true[;}]/gi,"{ _retval[_idx++] = $item$; continue _coreloop; }").replace(/return ([^;}]+?);/gi,"{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }"),c=["var _retval = [], _idx = 0; ","var $item$, $args$ = _args; ","_coreloop: ","for (var _i = 0, _il = _items.length; _i < _il; _i++) { ","$item$ = _items[_i]; ","$filter$; ","} ","return _retval; "].join("");c=c.replace(/\$filter\$/gi,b),c=c.replace(/\$item\$/gi,a.params[0]),c=c.replace(/\$args\$/gi,a.params[1]);var d=new Function("_items,_args",c);return d.displayName=d.name="compiledFilter",d}function X(){var a=U(qb),b=a.body.replace(/return false[;}]/gi,"{ continue _coreloop; }").replace(/return true[;}]/gi,"{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }").replace(/return ([^;}]+?);/gi,"{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }"),c=["var _retval = [], _idx = 0; ","var $item$, $args$ = _args; ","_coreloop: ","for (var _i = 0, _il = _items.length; _i < _il; _i++) { ","$item$ = _items[_i]; ","if (_cache[_i]) { ","_retval[_idx++] = $item$; ","continue _coreloop; ","} ","$filter$; ","} ","return _retval; "].join("");c=c.replace(/\$filter\$/gi,b),c=c.replace(/\$item\$/gi,a.params[0]),c=c.replace(/\$args\$/gi,a.params[1]);var d=new Function("_items,_args,_cache",c);return d.displayName=d.name="compiledFilterWithCaching",d}function Y(a,b){for(var c=[],d=0,e=0,f=a.length;f>e;e++)qb(a[e],b)&&(c[d++]=a[e]);return c}function Z(a,b,c){for(var d,e=[],f=0,g=0,h=a.length;h>g;g++)d=a[g],c[g]?e[f++]=d:qb(d,b)&&(e[f++]=d,c[g]=!0);return e}function $(a){if(qb){var c=b.inlineFilters?hb:Y,d=b.inlineFilters?ib:Z;ub.isFilterNarrowing?wb=c(wb,gb):ub.isFilterExpanding?wb=d(a,gb,xb):ub.isFilterUnchanged||(wb=c(a,gb))}else wb=Db?a:a.concat();var e;return Db?(wb.lengthi;i++)i>=j?f[f.length]=i:(c=b[i],d=a[i],(zb.length&&(e=c.__nonDataRow||d.__nonDataRow)&&c.__group!==d.__group||c.__group&&!c.equals(d)||e&&(c.__groupTotals||d.__groupTotals)||c[lb]!=d[lb]||rb&&rb[c[lb]])&&(f[f.length]=i));return f}function ab(a){pb=null,(ub.isFilterNarrowing!=vb.isFilterNarrowing||ub.isFilterExpanding!=vb.isFilterExpanding)&&(xb=[]);var b=$(a);Fb=b.totalRows;var c=b.rows;Ab=[],zb.length&&(Ab=P(c),Ab.length&&(R(Ab),S(Ab),c=T(Ab)));var d=_(nb,c);return nb=c,d}function bb(){if(!sb){var a=nb.length,b=Fb,c=ab(mb,qb);Db&&Eb*Db>Fb&&(Eb=Math.max(0,Math.ceil(Fb/Db)-1),c=ab(mb,qb)),rb=null,vb=ub,ub={},b!=Fb&&Ib.notify(l(),null,jb),a!=nb.length&&Gb.notify({previous:a,current:nb.length},null,jb),c.length>0&&Hb.notify({rows:c},null,jb)}}function cb(a,b){function c(){if(f.length>0){d=!0;var c=e.mapIdsToRows(f);b||(f=e.mapRowsToIds(c)),a.setSelectedRows(c),d=!1}}var d,e=this,f=e.mapRowsToIds(a.getSelectedRows());a.onSelectedRowsChanged.subscribe(function(){d||(f=e.mapRowsToIds(a.getSelectedRows()))}),this.onRowsChanged.subscribe(c),this.onRowCountChanged.subscribe(c)}function db(a,b){function c(a){e={};for(var b in a){var c=nb[b][lb];e[c]=a[b]}}function d(){if(e){f=!0,w();var c={};for(var d in e){var g=pb[d];void 0!=g&&(c[g]=e[d])}a.setCellCssStyles(b,c),f=!1}}var e,f;c(a.getCellCssStyles(b)),a.onCellCssStylesChanged.subscribe(function(a,d){f||b==d.key&&d.hash&&c(d.hash)}),this.onRowsChanged.subscribe(d),this.onRowCountChanged.subscribe(d)}var eb,fb,gb,hb,ib,jb=this,kb={groupItemMetadataProvider:null,inlineFilters:!1},lb="id",mb=[],nb=[],ob={},pb=null,qb=null,rb=null,sb=!1,tb=!0,ub={},vb={},wb=[],xb=[],yb={getter:null,formatter:null,comparer:function(a,b){return a.value-b.value},predefinedValues:[],aggregators:[],aggregateEmpty:!1,aggregateCollapsed:!1,aggregateChildGroups:!1,collapsed:!1,displayTotalsRow:!0},zb=[],Ab=[],Bb=[],Cb=":|:",Db=0,Eb=0,Fb=0,Gb=new Slick.Event,Hb=new Slick.Event,Ib=new Slick.Event;return b=a.extend(!0,{},kb,b),{beginUpdate:c,endUpdate:d,setPagingOptions:k,getPagingInfo:l,getItems:i,setItems:j,setFilter:p,sort:m,fastSort:n,reSort:o,setGrouping:r,getGrouping:q,groupBy:s,setAggregators:t,collapseAllGroups:J,expandAllGroups:K,collapseGroup:M,expandGroup:N,getGroups:O,getIdxById:v,getRowById:x,getItemById:y,getItemByIdx:u,mapRowsToIds:A,mapIdsToRows:z,setRefreshHints:e,setFilterArgs:f,refresh:bb,updateItem:B,insertItem:C,addItem:D,deleteItem:E,syncGridSelection:cb,syncGridCellCssStyles:db,getLength:F,getItem:G,getItemMetadata:H,onRowCountChanged:Gb,onRowsChanged:Hb,onPagingInfoChanged:Ib}}function c(a){this.field_=a,this.init=function(){this.count_=0,this.nonNullCount_=0,this.sum_=0},this.accumulate=function(a){var b=a[this.field_];this.count_++,null!=b&&""!==b&&0/0!==b&&(this.nonNullCount_++,this.sum_+=parseFloat(b))},this.storeResult=function(a){a.avg||(a.avg={}),0!=this.nonNullCount_&&(a.avg[this.field_]=this.sum_/this.nonNullCount_)}}function d(a){this.field_=a,this.init=function(){this.min_=null},this.accumulate=function(a){var b=a[this.field_];null!=b&&""!==b&&0/0!==b&&(null==this.min_||bthis.max_)&&(this.max_=b)},this.storeResult=function(a){a.max||(a.max={}),a.max[this.field_]=this.max_}}function f(a){this.field_=a,this.init=function(){this.sum_=null},this.accumulate=function(a){var b=a[this.field_];null!=b&&""!==b&&0/0!==b&&(this.sum_+=parseFloat(b))},this.storeResult=function(a){a.sum||(a.sum={}),a.sum[this.field_]=this.sum_}}a.extend(!0,window,{Slick:{Data:{DataView:b,Aggregators:{Avg:c,Min:d,Max:e,Sum:f}}}})}(jQuery),"undefined"==typeof jQuery)throw"SlickGrid requires jquery module to be loaded";if(!jQuery.fn.drag)throw"SlickGrid requires jquery.event.drag module to be loaded";if("undefined"==typeof Slick)throw"slick.core.js not loaded";!function($){function SlickGrid(container,data,columns,options){function init(){if($container=$(container),$container.length<1)throw new Error("SlickGrid requires a valid container, "+container+" does not exist in the DOM.");maxSupportedCssHeight=maxSupportedCssHeight||getMaxSupportedCssHeight(),scrollbarDimensions=scrollbarDimensions||measureScrollbar(),options=$.extend({},defaults,options),validateAndEnforceOptions(),columnDefaults.width=options.defaultColumnWidth,columnsById={};for(var a=0;ab.maxWidth&&(b.width=b.maxWidth)}if(options.enableColumnReorder&&!$.fn.sortable)throw new Error("SlickGrid's 'enableColumnReorder = true' option requires jquery-ui.sortable module to be loaded");editController={commitCurrentEdit:commitCurrentEdit,cancelCurrentEdit:cancelCurrentEdit},$container.empty().css("overflow","hidden").css("outline",0).addClass(uid).addClass("ui-widget"),/relative|absolute|fixed/.test($container.css("position"))||$container.css("position","relative"),$focusSink=$("
").appendTo($container),$headerScroller=$("
").appendTo($container),$headers=$("
").appendTo($headerScroller),$headers.width(getHeadersWidth()),$headerRowScroller=$("
").appendTo($container),$headerRow=$("
").appendTo($headerRowScroller),$headerRowSpacer=$("
").css("width",getCanvasWidth()+scrollbarDimensions.width+"px").appendTo($headerRowScroller),$topPanelScroller=$("
").appendTo($container),$topPanel=$("
").appendTo($topPanelScroller),options.showTopPanel||$topPanelScroller.hide(),options.showHeaderRow||$headerRowScroller.hide(),$viewport=$("
").appendTo($container),$viewport.css("overflow-y",options.autoHeight?"hidden":"auto"),$canvas=$("
").appendTo($viewport),$focusSink2=$focusSink.clone().appendTo($container),options.explicitInitialization||finishInitialization()}function finishInitialization(){initialized||(initialized=!0,viewportW=parseFloat($.css($container[0],"width",!0)),measureCellPaddingAndBorder(),disableSelection($headers),options.enableTextSelectionOnCells||$viewport.bind("selectstart.ui",function(a){return $(a.target).is("input,textarea")}),updateColumnCaches(),createColumnHeaders(),setupColumnSort(),createCssRules(),resizeCanvas(),bindAncestorScrollEvents(),$container.bind("resize.slickgrid",resizeCanvas),$viewport.bind("scroll",handleScroll),$headerScroller.bind("contextmenu",handleHeaderContextMenu).bind("click",handleHeaderClick).delegate(".slick-header-column","mouseenter",handleHeaderMouseEnter).delegate(".slick-header-column","mouseleave",handleHeaderMouseLeave),$headerRowScroller.bind("scroll",handleHeaderRowScroll),$focusSink.add($focusSink2).bind("keydown",handleKeyDown),$canvas.bind("keydown",handleKeyDown).bind("click",handleClick).bind("dblclick",handleDblClick).bind("contextmenu",handleContextMenu).bind("draginit",handleDragInit).bind("dragstart",{distance:3},handleDragStart).bind("drag",handleDrag).bind("dragend",handleDragEnd).delegate(".slick-cell","mouseenter",handleMouseEnter).delegate(".slick-cell","mouseleave",handleMouseLeave))}function registerPlugin(a){plugins.unshift(a),a.init(self)}function unregisterPlugin(a){for(var b=plugins.length;b>=0;b--)if(plugins[b]===a){plugins[b].destroy&&plugins[b].destroy(),plugins.splice(b,1);break}}function setSelectionModel(a){selectionModel&&(selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged),selectionModel.destroy&&selectionModel.destroy()),selectionModel=a,selectionModel&&(selectionModel.init(self),selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged))}function getSelectionModel(){return selectionModel}function getCanvasNode(){return $canvas[0]}function measureScrollbar(){var a=$("
").appendTo("body"),b={width:a.width()-a[0].clientWidth,height:a.height()-a[0].clientHeight};return a.remove(),b}function getHeadersWidth(){for(var a=0,b=0,c=columns.length;c>b;b++){var d=columns[b].width;a+=d}return a+=scrollbarDimensions.width,Math.max(a,viewportW)+1e3}function getCanvasWidth(){for(var a=viewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW,b=0,c=columns.length;c--;)b+=columns[c].width;return options.fullWidthRows?Math.max(b,a):b}function updateCanvasWidth(a){var b=canvasWidth;canvasWidth=getCanvasWidth(),canvasWidth!=b&&($canvas.width(canvasWidth),$headerRow.width(canvasWidth),$headers.width(getHeadersWidth()),viewportHasHScroll=canvasWidth>viewportW-scrollbarDimensions.width),$headerRowSpacer.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),(canvasWidth!=b||a)&&applyColumnWidths()}function disableSelection(a){a&&a.jquery&&a.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return!1})}function getMaxSupportedCssHeight(){for(var a=1e6,b=navigator.userAgent.toLowerCase().match(/firefox/)?6e6:1e9,c=$("
").appendTo(document.body);;){var d=2*a;if(c.css("height",d),d>b||c.height()!==d)break;a=d}return c.remove(),a}function bindAncestorScrollEvents(){for(var a=$canvas[0];(a=a.parentNode)!=document.body&&null!=a;)if(a==$viewport[0]||a.scrollWidth!=a.clientWidth||a.scrollHeight!=a.clientHeight){var b=$(a);$boundAncestors=$boundAncestors?$boundAncestors.add(b):b,b.bind("scroll."+uid,handleActiveCellPositionChange)}}function unbindAncestorScrollEvents(){$boundAncestors&&($boundAncestors.unbind("scroll."+uid),$boundAncestors=null)}function updateColumnHeader(a,b,c){if(initialized){var d=getColumnIndex(a);if(null!=d){var e=columns[d],f=$headers.children().eq(d);f&&(void 0!==b&&(columns[d].name=b),void 0!==c&&(columns[d].toolTip=c),trigger(self.onBeforeHeaderCellDestroy,{node:f[0],column:e}),f.attr("title",c||"").children().eq(0).html(b),trigger(self.onHeaderCellRendered,{node:f[0],column:e}))}}}function getHeaderRow(){return $headerRow[0]}function getHeaderRowColumn(a){var b=getColumnIndex(a),c=$headerRow.children().eq(b);return c&&c[0]}function createColumnHeaders(){function a(){$(this).addClass("ui-state-hover")}function b(){$(this).removeClass("ui-state-hover")}$headers.find(".slick-header-column").each(function(){var a=$(this).data("column");a&&trigger(self.onBeforeHeaderCellDestroy,{node:this,column:a})}),$headers.empty(),$headers.width(getHeadersWidth()),$headerRow.find(".slick-headerrow-column").each(function(){var a=$(this).data("column");a&&trigger(self.onBeforeHeaderRowCellDestroy,{node:this,column:a})}),$headerRow.empty();for(var c=0;c").html(""+d.name+"").width(d.width-headerColumnWidthDiff).attr("id",""+uid+d.id).attr("title",d.toolTip||"").data("column",d).addClass(d.headerCssClass||"").appendTo($headers);if((options.enableColumnReorder||d.sortable)&&e.on("mouseenter",a).on("mouseleave",b),d.sortable&&(e.addClass("slick-header-sortable"),e.append("")),trigger(self.onHeaderCellRendered,{node:e[0],column:d}),options.showHeaderRow){var f=$("
").data("column",d).appendTo($headerRow);trigger(self.onHeaderRowCellRendered,{node:f[0],column:d})}}setSortColumns(sortColumns),setupColumnResize(),options.enableColumnReorder&&setupColumnReorder()}function setupColumnSort(){$headers.click(function(a){if(a.metaKey=a.metaKey||a.ctrlKey,!$(a.target).hasClass("slick-resizable-handle")){var b=$(a.target).closest(".slick-header-column");if(b.length){var c=b.data("column");if(c.sortable){if(!getEditorLock().commitCurrentEdit())return;for(var d=null,e=0;ej||options.forceFitColumns&&j>=i||(a=$(k),$("
").appendTo(k).bind("dragstart",function(a){if(!getEditorLock().commitCurrentEdit())return!1;d=a.pageX,$(this).parent().addClass("slick-header-column-active");var h=null,i=null;if(e.each(function(a,b){columns[a].previousWidth=$(b).outerWidth()}),options.forceFitColumns)for(h=0,i=0,b=j+1;b=b;b++)c=columns[b],c.resizable&&(null!==l&&(c.maxWidth?l+=c.maxWidth-c.previousWidth:l=null),k+=c.previousWidth-Math.max(c.minWidth||0,absoluteColumnMinWidth));null===h&&(h=1e5),null===k&&(k=1e5),null===i&&(i=1e5),null===l&&(l=1e5),g=d+Math.min(h,l),f=d-Math.min(k,i)}).bind("drag",function(a){var h,i,k=Math.min(g,Math.max(f,a.pageX))-d;if(0>k){for(i=k,b=j;b>=0;b--)c=columns[b],c.resizable&&(h=Math.max(c.minWidth||0,absoluteColumnMinWidth),i&&c.previousWidth+i=0;b--)c=columns[b],c.resizable&&(i&&c.maxWidth&&c.maxWidth-c.previousWidth
").appendTo($headers),headerColumnWidthDiff=headerColumnHeightDiff=0,$.each(b,function(b,c){headerColumnWidthDiff+=parseFloat(a.css(c))||0}),$.each(c,function(b,c){headerColumnHeightDiff+=parseFloat(a.css(c))||0}),a.remove();var d=$("
").appendTo($canvas);a=$("").appendTo(d),cellWidthDiff=cellHeightDiff=0,$.each(b,function(b,c){cellWidthDiff+=parseFloat(a.css(c))||0}),$.each(c,function(b,c){cellHeightDiff+=parseFloat(a.css(c))||0}),d.remove(),absoluteColumnMinWidth=Math.max(headerColumnWidthDiff,cellWidthDiff)}function createCssRules(){$style=$("