UNPKG

ng-grid

Version:

__Contributors:__

2 lines 58.5 kB
(function(e){"use strict";var n=6,t=4,o="asc",r="desc",i="_ng_field_",l="_ng_depth_",a="_ng_hidden_",s="_ng_column_",c=/CUSTOM_FILTERS/g,g=/COL_FIELD/g,d=/DISPLAY_CELL_TEMPLATE/g,u=/EDITABLE_CELL_TEMPLATE/g,f=/<.+>/;e.ng||(e.ng={}),e.ngGrid={},e.ngGrid.i18n={};var p=angular.module("ngGrid.services",[]),h=angular.module("ngGrid.directives",[]),m=angular.module("ngGrid.filters",[]);angular.module("ngGrid",["ngGrid.services","ngGrid.directives","ngGrid.filters"]),ng.moveSelectionHandler=function(e,t,o,r){if(void 0===e.selectionService.selectedItems)return!0;var i,l=o.which||o.keyCode,a=!1,s=!1,c=e.selectionService.lastClickedRow.rowIndex;if(e.col&&(i=e.col.index),37!=l&&38!=l&&39!=l&&40!=l&&9!=l&&13!=l)return!0;if(e.enableCellSelection){9==l&&o.preventDefault();var g=e.showSelectionCheckbox?1==e.col.index:0==e.col.index,d=1==e.$index||0==e.$index,u=e.$index==e.renderedColumns.length-1||e.$index==e.renderedColumns.length-2,f=e.col.index==e.columns.length-1;37==l||9==l&&o.shiftKey?(d&&(g&&9==l&&o.shiftKey?(r.$viewport.scrollLeft(r.$canvas.width()),i=e.columns.length-1,s=!0):r.$viewport.scrollLeft(r.$viewport.scrollLeft()-e.col.width)),g||(i-=1)):(39==l||9==l&&!o.shiftKey)&&(u&&(f&&9==l&&!o.shiftKey?(r.$viewport.scrollLeft(0),i=e.showSelectionCheckbox?1:0,a=!0):r.$viewport.scrollLeft(r.$viewport.scrollLeft()+e.col.width)),f||(i+=1))}var p;p=e.configGroups.length>0?r.rowFactory.parsedData.filter(function(e){return!e.isAggRow}):r.filteredRows;var h=0;if(0!=c&&(38==l||13==l&&o.shiftKey||9==l&&o.shiftKey&&s)?h=-1:c!=p.length-1&&(40==l||13==l&&!o.shiftKey||9==l&&a)&&(h=1),h){var m=p[c+h];m.beforeSelectionChange(m,o)&&(m.continueSelection(o),e.$emit("ngGridEventDigestGridParent"),e.selectionService.lastClickedRow.renderedRowIndex>=e.renderedRows.length-n-2?r.$viewport.scrollTop(r.$viewport.scrollTop()+e.rowHeight):n+2>=e.selectionService.lastClickedRow.renderedRowIndex&&r.$viewport.scrollTop(r.$viewport.scrollTop()-e.rowHeight))}return e.enableCellSelection&&setTimeout(function(){e.domAccessProvider.focusCellElement(e,e.renderedColumns.indexOf(e.columns[i]))},3),!1},String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var n=this.length>>>0,t=Number(arguments[1])||0;for(t=0>t?Math.ceil(t):Math.floor(t),0>t&&(t+=n);n>t;t++)if(t in this&&this[t]===e)return t;return-1}),Array.prototype.filter||(Array.prototype.filter=function(e){var n=Object(this),t=n.length>>>0;if("function"!=typeof e)throw new TypeError;for(var o=[],r=arguments[1],i=0;t>i;i++)if(i in n){var l=n[i];e.call(r,l,i,n)&&o.push(l)}return o}),ng.utils={visualLength:function(e){var n=document.getElementById("testDataLength");return n||(n=document.createElement("SPAN"),n.id="testDataLength",n.style.visibility="hidden",document.body.appendChild(n)),$(n).css("font",$(e).css("font")),n.innerHTML=$(e).text(),n.offsetWidth},forIn:function(e,n){for(var t in e)e.hasOwnProperty(t)&&n(e[t],t)},evalProperty:function(e,n){var t=n.split("."),o=0,r=e[t[o]],i=t.length;for(o++;r&&i>o;)r=r[t[o]],o++;return r},endsWith:function(e,n){return e&&n&&"string"==typeof e?-1!==e.indexOf(n,e.length-n.length):!1},isNullOrUndefined:function(e){return void 0===e||null===e?!0:!1},getElementsByClassName:function(e){for(var n=[],t=RegExp("\\b"+e+"\\b"),o=document.getElementsByTagName("*"),r=0;o.length>r;r++){var i=o[r].className;t.test(i)&&n.push(o[r])}return n},newId:function(){var e=(new Date).getTime();return function(){return e+=1}}(),seti18n:function(n,t){var o=e.ngGrid.i18n[t];for(var r in o)n.i18n[r]=o[r]},ieVersion:function(){for(var e=3,n=document.createElement("div"),t=n.getElementsByTagName("i");n.innerHTML="<!--[if gt IE "+ ++e+"]><i></i><![endif]-->",t[0];);return e>4?e:void 0}()},$.extend(ng.utils,{isIe6:function(){return 6===ng.utils.ieVersion}(),isIe7:function(){return 7===ng.utils.ieVersion}(),isIe:function(){return void 0!==ng.utils.ieVersion}()}),m.filter("checkmark",function(){return function(e){return e?"✔":"✘"}}),m.filter("ngColumns",function(){return function(e){return e.filter(function(e){return!e.isAggCol})}}),p.factory("DomUtilityService",function(){var e={},n={},t=function(){var n=$("<div></div>");n.appendTo("body"),n.height(100).width(100).css("position","absolute").css("overflow","scroll"),n.append('<div style="height: 400px; width: 400px;"></div>'),e.ScrollH=n.height()-n[0].clientHeight,e.ScrollW=n.width()-n[0].clientWidth,n.empty(),n.attr("style",""),n.append('<span style="font-family: Verdana, Helvetica, Sans-Serif; font-size: 14px;"><strong>M</strong></span>'),e.LetterW=n.children().first().width(),n.remove()};return e.eventStorage={},e.AssignGridContainers=function(n,t,o){o.$root=$(t),o.$topPanel=o.$root.find(".ngTopPanel"),o.$groupPanel=o.$root.find(".ngGroupPanel"),o.$headerContainer=o.$topPanel.find(".ngHeaderContainer"),n.$headerContainer=o.$headerContainer,o.$headerScroller=o.$topPanel.find(".ngHeaderScroller"),o.$headers=o.$headerScroller.children(),o.$viewport=o.$root.find(".ngViewport"),o.$canvas=o.$viewport.find(".ngCanvas"),o.$footerPanel=o.$root.find(".ngFooterPanel"),n.$watch(function(){return o.$viewport.scrollLeft()},function(e){return o.$headerContainer.scrollLeft(e)}),e.UpdateGridLayout(n,o)},e.getRealWidth=function(e){var n=0,t={visibility:"hidden",display:"block"},o=e.parents().andSelf().not(":visible");return $.swap(o[0],t,function(){n=e.outerWidth()}),n},e.UpdateGridLayout=function(n,t){var o=t.$viewport.scrollTop();t.elementDims.rootMaxW=t.$root.width(),t.$root.is(":hidden")&&(t.elementDims.rootMaxW=e.getRealWidth(t.$root)),t.elementDims.rootMaxH=t.$root.height(),t.refreshDomSizes(),n.adjustScrollTop(o,!0)},e.numberOfGrids=0,e.BuildStyles=function(n,t,o){var r,i=t.config.rowHeight,l=t.$styleSheet,a=t.gridId,s=n.columns,c=0;l||(l=$("#"+a),l[0]||(l=$("<style id='"+a+"' type='text/css' rel='stylesheet' />").appendTo(t.$root))),l.empty();var g=n.totalRowWidth();r="."+a+" .ngCanvas { width: "+g+"px; }"+"."+a+" .ngRow { width: "+g+"px; }"+"."+a+" .ngCanvas { width: "+g+"px; }"+"."+a+" .ngHeaderScroller { width: "+(g+e.ScrollH+2)+"px}";for(var d=0;s.length>d;d++){var u=s[d];if(u.visible){var f=u.pinned?t.$viewport.scrollLeft()+c:c;r+="."+a+" .col"+d+" { width: "+u.width+"px; left: "+f+"px; height: "+i+"px }"+"."+a+" .colt"+d+" { width: "+u.width+"px; }",c+=u.width}}ng.utils.isIe?l[0].styleSheet.cssText=r:l[0].appendChild(document.createTextNode(r)),t.$styleSheet=l,o&&(n.adjustScrollLeft(t.$viewport.scrollLeft()),e.digest(n))},e.setColLeft=function(e,t,o){if(o.$styleSheet){var r=n[e.index];r||(r=n[e.index]=RegExp(".col"+e.index+" { width: [0-9]+px; left: [0-9]+px"));var i=o.$styleSheet.html(),l=i.replace(r,".col"+e.index+" { width: "+e.width+"px; left: "+t+"px");ng.utils.isIe?setTimeout(function(){o.$styleSheet.html(l)}):o.$styleSheet.html(l)}},e.setColLeft.immediate=1,e.RebuildGrid=function(n,t){e.UpdateGridLayout(n,t),t.config.maintainColumnRatios&&t.configureColumnWidths(),n.adjustScrollLeft(t.$viewport.scrollLeft()),e.BuildStyles(n,t,!0)},e.digest=function(e){e.$root.$$phase||e.$digest()},e.ScrollH=17,e.ScrollW=17,e.LetterW=10,t(),e}),p.factory("SortService",["$parse",function(e){var n={};return n.colSortFnCache={},n.guessSortFn=function(e){var t=typeof e;switch(t){case"number":return n.sortNumber;case"boolean":return n.sortBool;case"string":return e.match(/^-?[£$¤]?[\d,.]+%?$/)?n.sortNumberStr:n.sortAlpha;default:return"[object Date]"===Object.prototype.toString.call(e)?n.sortDate:n.basicSort}},n.basicSort=function(e,n){return e==n?0:n>e?-1:1},n.sortNumber=function(e,n){return e-n},n.sortNumberStr=function(e,n){var t,o,r=!1,i=!1;return t=parseFloat(e.replace(/[^0-9.-]/g,"")),isNaN(t)&&(r=!0),o=parseFloat(n.replace(/[^0-9.-]/g,"")),isNaN(o)&&(i=!0),r&&i?0:r?1:i?-1:t-o},n.sortAlpha=function(e,n){var t=e.toLowerCase(),o=n.toLowerCase();return t==o?0:o>t?-1:1},n.sortDate=function(e,n){var t=e.getTime(),o=n.getTime();return t==o?0:o>t?-1:1},n.sortBool=function(e,n){return e&&n?0:e||n?e?1:-1:0},n.sortData=function(t,r){if(r&&t){var i,l,a=t.fields.length,s=t.fields,c=r.slice(0);r.sort(function(r,g){for(var d,u=0,f=0;0==u&&a>f;){i=t.columns[f],l=t.directions[f],d=n.getSortFn(i,c);var p=e(s[f])(r),h=e(s[f])(g);!p&&0!=p||!h&&0!=h?h||p?p?h||(u=-1):u=1:u=0:u=d(p,h),f++}return l===o?u:0-u})}},n.Sort=function(e,t){n.isSorting||(n.isSorting=!0,n.sortData(e,t),n.isSorting=!1)},n.getSortFn=function(t,o){var r,i=void 0;if(n.colSortFnCache[t.field])i=n.colSortFnCache[t.field];else if(void 0!=t.sortingAlgorithm)i=t.sortingAlgorithm,n.colSortFnCache[t.field]=t.sortingAlgorithm;else{if(r=o[0],!r)return i;i=n.guessSortFn(e(t.field)(r)),i?n.colSortFnCache[t.field]=i:i=n.sortAlpha}return i},n}]),ng.Aggregate=function(e,n,t){var o=this;o.rowIndex=0,o.offsetTop=o.rowIndex*t,o.entity=e,o.label=e.gLabel,o.field=e.gField,o.depth=e.gDepth,o.parent=e.parent,o.children=e.children,o.aggChildren=e.aggChildren,o.aggIndex=e.aggIndex,o.collapsed=!0,o.isAggRow=!0,o.offsetleft=25*e.gDepth,o.aggLabelFilter=e.aggLabelFilter,o.toggleExpand=function(){o.collapsed=o.collapsed?!1:!0,o.orig&&(o.orig.collapsed=o.collapsed),o.notifyChildren()},o.setExpand=function(e){o.collapsed=e,o.notifyChildren()},o.notifyChildren=function(){for(var e=Math.max(n.aggCache.length,o.children.length),t=0;e>t;t++)if(o.aggChildren[t]&&(o.aggChildren[t].entity[a]=o.collapsed,o.collapsed&&o.aggChildren[t].setExpand(o.collapsed)),o.children[t]&&(o.children[t][a]=o.collapsed),t>o.aggIndex&&n.aggCache[t]){var r=n.aggCache[t],i=30*o.children.length;r.offsetTop=o.collapsed?r.offsetTop-i:r.offsetTop+i}n.renderedChange()},o.aggClass=function(){return o.collapsed?"ngAggArrowCollapsed":"ngAggArrowExpanded"},o.totalChildren=function(){if(o.aggChildren.length>0){var e=0,n=function(t){t.aggChildren.length>0?angular.forEach(t.aggChildren,function(e){n(e)}):e+=t.children.length};return n(o),e}return o.children.length},o.copy=function(){var e=new ng.Aggregate(o.entity,n,t);return e.orig=o,e}},ng.Column=function(e,n,t,i,l){var a=this,s=e.colDef,g=500,d=0,u=null;a.width=s.width,a.groupIndex=0,a.isGroupedBy=!1,a.minWidth=s.minWidth?s.minWidth:50,a.maxWidth=s.maxWidth?s.maxWidth:9e3,a.enableCellEdit=e.enableCellEdit||s.enableCellEdit,a.headerRowHeight=e.headerRowHeight,a.displayName=s.displayName||s.field,a.index=e.index,a.isAggCol=e.isAggCol,a.cellClass=s.cellClass,a.sortPriority=void 0,a.zIndex=function(){return a.pinned?5:0},a.cellFilter=s.cellFilter?s.cellFilter:"",a.field=s.field,a.aggLabelFilter=s.cellFilter||s.aggLabelFilter,a.visible=ng.utils.isNullOrUndefined(s.visible)||s.visible,a.sortable=!1,a.resizable=!1,a.pinnable=!1,a.pinned=s.pinned,a.originalIndex=a.index,a.groupable=ng.utils.isNullOrUndefined(s.groupable)||s.groupable,e.enableSort&&(a.sortable=ng.utils.isNullOrUndefined(s.sortable)||s.sortable),e.enableResize&&(a.resizable=ng.utils.isNullOrUndefined(s.resizable)||s.resizable),e.enablePinning&&(a.pinnable=ng.utils.isNullOrUndefined(s.pinnable)||s.pinnable),a.sortDirection=void 0,a.sortingAlgorithm=s.sortFn,a.headerClass=s.headerClass,a.cursor=a.sortable?"pointer":"default",a.headerCellTemplate=s.headerCellTemplate||l.get("headerCellTemplate.html"),a.cellTemplate=s.cellTemplate||l.get("cellTemplate.html").replace(c,a.cellFilter?"|"+a.cellFilter:""),a.enableCellEdit&&(a.cellEditTemplate=l.get("cellEditTemplate.html"),a.editableCellTemplate=s.editableCellTemplate||l.get("editableCellTemplate.html")),s.cellTemplate&&!f.test(s.cellTemplate)&&(a.cellTemplate=$.ajax({type:"GET",url:s.cellTemplate,async:!1}).responseText),a.enableCellEdit&&s.editableCellTemplate&&!f.test(s.editableCellTemplate)&&(a.editableCellTemplate=$.ajax({type:"GET",url:s.editableCellTemplate,async:!1}).responseText),s.headerCellTemplate&&!f.test(s.headerCellTemplate)&&(a.headerCellTemplate=$.ajax({type:"GET",url:s.headerCellTemplate,async:!1}).responseText),a.colIndex=function(){return"col"+a.index+" colt"+a.index},a.groupedByClass=function(){return a.isGroupedBy?"ngGroupedByIcon":"ngGroupIcon"},a.toggleVisible=function(){a.visible=!a.visible},a.showSortButtonUp=function(){return a.sortable?a.sortDirection===r:a.sortable},a.showSortButtonDown=function(){return a.sortable?a.sortDirection===o:a.sortable},a.noSortVisible=function(){return!a.sortDirection},a.sort=function(n){if(!a.sortable)return!0;var t=a.sortDirection===o?r:o;return a.sortDirection=t,e.sortCallback(a,n),!1},a.gripClick=function(){d++,1===d?u=setTimeout(function(){d=0},g):(clearTimeout(u),e.resizeOnDataCallback(a),d=0)},a.gripOnMouseDown=function(e){return e.ctrlKey&&!a.pinned?(a.toggleVisible(),i.BuildStyles(n,t),!0):(e.target.parentElement.style.cursor="col-resize",a.startMousePosition=e.clientX,a.origWidth=a.width,$(document).mousemove(a.onMouseMove),$(document).mouseup(a.gripOnMouseUp),!1)},a.onMouseMove=function(e){var o=e.clientX-a.startMousePosition,r=o+a.origWidth;return a.width=a.minWidth>r?a.minWidth:r>a.maxWidth?a.maxWidth:r,i.BuildStyles(n,t),!1},a.gripOnMouseUp=function(e){return $(document).off("mousemove",a.onMouseMove),$(document).off("mouseup",a.gripOnMouseUp),e.target.parentElement.style.cursor="default",n.adjustScrollLeft(0),i.digest(n),!1},a.copy=function(){var o=new ng.Column(e,n,t,i,l);return o.isClone=!0,o.orig=a,o},a.setVars=function(e){a.orig=e,a.width=e.width,a.groupIndex=e.groupIndex,a.isGroupedBy=e.isGroupedBy,a.displayName=e.displayName,a.index=e.index,a.isAggCol=e.isAggCol,a.cellClass=e.cellClass,a.cellFilter=e.cellFilter,a.field=e.field,a.aggLabelFilter=e.aggLabelFilter,a.visible=e.visible,a.sortable=e.sortable,a.resizable=e.resizable,a.pinnable=e.pinnable,a.pinned=e.pinned,a.originalIndex=e.originalIndex,a.sortDirection=e.sortDirection,a.sortingAlgorithm=e.sortingAlgorithm,a.headerClass=e.headerClass,a.headerCellTemplate=e.headerCellTemplate,a.cellTemplate=e.cellTemplate,a.cellEditTemplate=e.cellEditTemplate}},ng.Dimension=function(e){this.outerHeight=null,this.outerWidth=null,$.extend(this,e)},ng.DomAccessProvider=function(e){var n,t=this;t.selectInputElement=function(e){var n=e.nodeName.toLowerCase();("input"==n||"textarea"==n)&&e.select()},t.focusCellElement=function(t,o){if(t.selectionService.lastClickedRow){var r=void 0!=o?o:n,i=t.selectionService.lastClickedRow.clone?t.selectionService.lastClickedRow.clone.elm:t.selectionService.lastClickedRow.elm;if(void 0!=r&&i){var l=angular.element(i[0].children).filter(function(){return 8!=this.nodeType}),a=Math.max(Math.min(t.renderedColumns.length-1,r),0);e.config.showSelectionCheckbox&&angular.element(l[a]).scope()&&0==angular.element(l[a]).scope().col.index&&(a=1),l[a]&&l[a].children[0].focus(),n=r}}};var o=function(e,n){e.css({"-webkit-touch-callout":n,"-webkit-user-select":n,"-khtml-user-select":n,"-moz-user-select":"none"==n?"-moz-none":n,"-ms-user-select":n,"user-select":n})};t.selectionHandlers=function(n,t){var r=!1;t.bind("keydown",function(i){if(16==i.keyCode)return o(t,"none",i),!0;if(!r){r=!0;var l=ng.moveSelectionHandler(n,t,i,e);return r=!1,l}return!0}),t.bind("keyup",function(e){return 16==e.keyCode&&o(t,"text",e),!0})}},ng.EventProvider=function(n,t,o){var r=this;r.colToMove=void 0,r.groupToMove=void 0,r.assignEvents=function(){n.config.jqueryUIDraggable&&!n.config.enablePinning?(n.$groupPanel.droppable({addClasses:!1,drop:function(e){r.onGroupDrop(e)}}),t.$evalAsync(r.setDraggables)):(n.$groupPanel.on("mousedown",r.onGroupMouseDown).on("dragover",r.dragOver).on("drop",r.onGroupDrop),n.$headerScroller.on("mousedown",r.onHeaderMouseDown).on("dragover",r.dragOver),n.config.enableColumnReordering&&!n.config.enablePinning&&n.$headerScroller.on("drop",r.onHeaderDrop),n.config.enableRowReordering&&n.$viewport.on("mousedown",r.onRowMouseDown).on("dragover",r.dragOver).on("drop",r.onRowDrop)),t.$watch("columns",r.setDraggables,!0)},r.dragStart=function(e){e.dataTransfer.setData("text","")},r.dragOver=function(e){e.preventDefault()},r.setDraggables=function(){if(n.config.jqueryUIDraggable)n.$root.find(".ngHeaderSortColumn").draggable({helper:"clone",appendTo:"body",stack:"div",addClasses:!1,start:function(e){r.onHeaderMouseDown(e)}}).droppable({drop:function(e){r.onHeaderDrop(e)}});else{var e=n.$root.find(".ngHeaderSortColumn");angular.forEach(e,function(e){e.setAttribute("draggable","true"),e.addEventListener&&e.addEventListener("dragstart",r.dragStart)}),-1!=navigator.userAgent.indexOf("MSIE")&&n.$root.find(".ngHeaderSortColumn").bind("selectstart",function(){return this.dragDrop(),!1})}},r.onGroupMouseDown=function(e){var t=$(e.target);if("ngRemoveGroup"!=t[0].className){var o=angular.element(t).scope();o&&(n.config.jqueryUIDraggable||(t.attr("draggable","true"),this.addEventListener&&this.addEventListener("dragstart",r.dragStart),-1!=navigator.userAgent.indexOf("MSIE")&&t.bind("selectstart",function(){return this.dragDrop(),!1})),r.groupToMove={header:t,groupName:o.group,index:o.$index})}else r.groupToMove=void 0},r.onGroupDrop=function(e){e.stopPropagation();var o,i;r.groupToMove?(o=$(e.target).closest(".ngGroupElement"),"ngGroupPanel"==o.context.className?(t.configGroups.splice(r.groupToMove.index,1),t.configGroups.push(r.groupToMove.groupName)):(i=angular.element(o).scope(),i&&r.groupToMove.index!=i.$index&&(t.configGroups.splice(r.groupToMove.index,1),t.configGroups.splice(i.$index,0,r.groupToMove.groupName))),r.groupToMove=void 0,n.fixGroupIndexes()):r.colToMove&&(-1==t.configGroups.indexOf(r.colToMove.col)&&(o=$(e.target).closest(".ngGroupElement"),"ngGroupPanel"==o.context.className||"ngGroupPanelDescription ng-binding"==o.context.className?t.groupBy(r.colToMove.col):(i=angular.element(o).scope(),i&&t.removeGroup(i.$index))),r.colToMove=void 0),t.$$phase||t.$apply()},r.onHeaderMouseDown=function(e){var n=$(e.target).closest(".ngHeaderSortColumn"),t=angular.element(n).scope();t&&(r.colToMove={header:n,col:t.col})},r.onHeaderDrop=function(e){if(r.colToMove){var i=$(e.target).closest(".ngHeaderSortColumn"),l=angular.element(i).scope();if(l){if(r.colToMove.col==l.col)return;t.columns.splice(r.colToMove.col.index,1),t.columns.splice(l.col.index,0,r.colToMove.col),n.fixColumnIndexes(),o.BuildStyles(t,n,!0),r.colToMove=void 0}}},r.onRowMouseDown=function(e){var n=$(e.target).closest(".ngRow"),t=angular.element(n).scope();t&&(n.attr("draggable","true"),o.eventStorage.rowToMove={targetRow:n,scope:t})},r.onRowDrop=function(e){var t=$(e.target).closest(".ngRow"),r=angular.element(t).scope();if(r){var i=o.eventStorage.rowToMove;if(i.scope.row==r.row)return;n.changeRowOrder(i.scope.row,r.row),n.searchProvider.evalFilter(),o.eventStorage.rowToMove=void 0,o.digest(r.$root)}},r.assignGridEventHandlers=function(){-1===n.config.tabIndex?(n.$viewport.attr("tabIndex",o.numberOfGrids),o.numberOfGrids++):n.$viewport.attr("tabIndex",n.config.tabIndex),$(e).resize(function(){o.RebuildGrid(t,n)})},r.assignGridEventHandlers(),r.assignEvents()},ng.Footer=function(e,n){e.maxRows=function(){var t=Math.max(e.pagingOptions.totalServerItems,n.data.length);return t},e.multiSelect=n.config.enableRowSelection&&n.config.multiSelect,e.selectedItemCount=n.selectedItemCount,e.maxPages=function(){return Math.ceil(e.maxRows()/e.pagingOptions.pageSize)},e.pageForward=function(){var n=e.pagingOptions.currentPage;e.pagingOptions.totalServerItems>0?e.pagingOptions.currentPage=Math.min(n+1,e.maxPages()):e.pagingOptions.currentPage++},e.pageBackward=function(){var n=e.pagingOptions.currentPage;e.pagingOptions.currentPage=Math.max(n-1,1)},e.pageToFirst=function(){e.pagingOptions.currentPage=1},e.pageToLast=function(){var n=e.maxPages();e.pagingOptions.currentPage=n},e.cantPageForward=function(){var t=e.pagingOptions.currentPage,o=e.maxPages();return e.pagingOptions.totalServerItems>0?!(o>t):1>n.data.length},e.cantPageToLast=function(){return e.pagingOptions.totalServerItems>0?e.cantPageForward():!0},e.cantPageBackward=function(){var n=e.pagingOptions.currentPage;return!(n>1)}},ng.Grid=function(o,r,i,l,s,c){var g={aggregateTemplate:void 0,afterSelectionChange:function(){},beforeSelectionChange:function(){return!0},checkboxCellTemplate:void 0,checkboxHeaderTemplate:void 0,columnDefs:void 0,data:[],dataUpdated:function(){},enableCellEdit:!1,enableCellSelection:!1,enableColumnResize:!1,enableColumnReordering:!1,enableColumnHeavyVirt:!1,enablePaging:!1,enablePinning:!1,enableRowReordering:!1,enableRowSelection:!0,enableSorting:!0,excludeProperties:[],filterOptions:{filterText:"",useExternalFilter:!1},footerRowHeight:55,groups:[],headerRowHeight:30,headerRowTemplate:void 0,jqueryUIDraggable:!1,jqueryUITheme:!1,keepLastSelected:!0,maintainColumnRatios:void 0,multiSelect:!0,pagingOptions:{pageSizes:[250,500,1e3],pageSize:250,totalServerItems:0,currentPage:1},pinSelectionCheckbox:!1,plugins:[],rowHeight:30,rowTemplate:void 0,selectedItems:[],selectWithCheckboxOnly:!1,showColumnMenu:!1,showFilter:!1,showFooter:!1,showGroupPanel:!1,showSelectionCheckbox:!1,sortInfo:void 0,tabIndex:-1,useExternalSorting:!1,i18n:"en",virtualizationThreshold:50},d=this;d.maxCanvasHt=0,d.config=$.extend(g,e.ngGrid.config,r),d.config.showSelectionCheckbox=d.config.showSelectionCheckbox&&d.config.enableColumnHeavyVirt===!1,d.config.enablePinning=d.config.enablePinning&&d.config.enableColumnHeavyVirt===!1,d.config.selectWithCheckboxOnly=d.config.selectWithCheckboxOnly&&d.config.showSelectionCheckbox!==!1,d.config.pinSelectionCheckbox=d.config.enablePinning,"string"==typeof r.columnDefs&&(d.config.columnDefs=o.$eval(r.columnDefs)),d.rowCache=[],d.rowMap=[],d.gridId="ng"+ng.utils.newId(),d.$root=null,d.$groupPanel=null,d.$topPanel=null,d.$headerContainer=null,d.$headerScroller=null,d.$headers=null,d.$viewport=null,d.$canvas=null,d.rootDim=d.config.gridDim,d.sortInfo=d.config.sortInfo,d.data=[],d.lateBindColumns=!1,d.filteredRows=[];var u=function(e){var n=d.config[e],t=d.gridId+e+".html";if(n&&!f.test(n))c.put(t,$.ajax({type:"GET",url:n,async:!1}).responseText);else if(n)c.put(t,n);else{var o=e+".html";c.put(t,c.get(o))}};u("rowTemplate"),u("aggregateTemplate"),u("headerRowTemplate"),u("checkboxCellTemplate"),u("checkboxHeaderTemplate"),"object"==typeof d.config.data&&(d.data=d.config.data),d.calcMaxCanvasHeight=function(){return d.config.groups.length>0?d.rowFactory.parsedData.filter(function(e){return!e[a]}).length*d.config.rowHeight:d.filteredRows.length*d.config.rowHeight},d.elementDims={scrollW:0,scrollH:0,rowIndexCellW:25,rowSelectedCellW:25,rootMaxW:0,rootMaxH:0},d.setRenderedRows=function(e){o.renderedRows.length=e.length;for(var n=0;e.length>n;n++)!o.renderedRows[n]||e[n].isAggRow||o.renderedRows[n].isAggRow?(o.renderedRows[n]=e[n].copy(),o.renderedRows[n].collapsed=e[n].collapsed,e[n].isAggRow||o.renderedRows[n].setVars(e[n])):o.renderedRows[n].setVars(e[n]),o.renderedRows[n].rowIndex=e[n].rowIndex,o.renderedRows[n].offsetTop=e[n].offsetTop,e[n].renderedRowIndex=n;d.refreshDomSizes(),o.$emit("ngGridEventRows",e)},d.minRowsToRender=function(){var e=o.viewportDimHeight()||1;return Math.floor(e/d.config.rowHeight)},d.refreshDomSizes=function(){var e=new ng.Dimension;e.outerWidth=d.elementDims.rootMaxW,e.outerHeight=d.elementDims.rootMaxH,d.rootDim=e,d.maxCanvasHt=d.calcMaxCanvasHeight()},d.buildColumnDefsFromData=function(){d.config.columnDefs=[];var e=d.data[0];return e?(ng.utils.forIn(e,function(e,n){-1==d.config.excludeProperties.indexOf(n)&&d.config.columnDefs.push({field:n})}),void 0):(d.lateBoundColumns=!0,void 0)},d.buildColumns=function(){var e=d.config.columnDefs,n=[];if(e||(d.buildColumnDefsFromData(),e=d.config.columnDefs),d.config.showSelectionCheckbox&&n.push(new ng.Column({colDef:{field:"✔",width:d.elementDims.rowSelectedCellW,sortable:!1,resizable:!1,groupable:!1,headerCellTemplate:c.get(o.gridId+"checkboxHeaderTemplate.html"),cellTemplate:c.get(o.gridId+"checkboxCellTemplate.html"),pinned:d.config.pinSelectionCheckbox},index:0,headerRowHeight:d.config.headerRowHeight,sortCallback:d.sortData,resizeOnDataCallback:d.resizeOnData,enableResize:d.config.enableColumnResize,enableSort:d.config.enableSorting},o,d,l,c)),e.length>0){var t=d.config.showSelectionCheckbox?d.config.groups.length+1:d.config.groups.length;o.configGroups.length=0,angular.forEach(e,function(e,r){r+=t;var i=new ng.Column({colDef:e,index:r,headerRowHeight:d.config.headerRowHeight,sortCallback:d.sortData,resizeOnDataCallback:d.resizeOnData,enableResize:d.config.enableColumnResize,enableSort:d.config.enableSorting,enablePinning:d.config.enablePinning,enableCellEdit:d.config.enableCellEdit},o,d,l,c),a=d.config.groups.indexOf(e.field);-1!=a&&(i.isGroupedBy=!0,o.configGroups.splice(a,0,i),i.groupIndex=o.configGroups.length),n.push(i)}),o.columns=n}},d.configureColumnWidths=function(){var e=d.config.columnDefs,n=d.config.showSelectionCheckbox?o.configGroups.length+1:o.configGroups.length,t=e.length+n,r=[],i=[],a=0,s=0;if(s+=d.config.showSelectionCheckbox?25:0,angular.forEach(e,function(e,t){t+=n;var l=!1,c=void 0;if(ng.utils.isNullOrUndefined(e.width)?e.width="*":(l=isNaN(e.width)?ng.utils.endsWith(e.width,"%"):!1,c=l?e.width:parseInt(e.width,10)),isNaN(c)){if(c=e.width,"auto"==c){o.columns[t].width=e.minWidth,s+=o.columns[t].width;var g=o.columns[t];return o.$evalAsync(function(){d.resizeOnData(g,!0)}),void 0}if(-1!=c.indexOf("*"))return a+=c.length,e.index=t,r.push(e),void 0;if(l)return e.index=t,i.push(e),void 0;throw'unable to parse column width, use percentage ("10%","20%", etc...) or "*" to use remaining width of grid'}s+=o.columns[t].width=parseInt(e.width,10)}),r.length>0){d.config.maintainColumnRatios===!1?angular.noop():d.config.maintainColumnRatios=!0;var c=d.rootDim.outerWidth-s,g=Math.floor(c/a);angular.forEach(r,function(e){var n=e.width.length;if(o.columns[e.index].width=g*n,e.index+1==t){var r=2;d.maxCanvasHt>o.viewportDimHeight()&&(r+=l.ScrollW),o.columns[e.index].width-=r}s+=o.columns[e.index].width})}i.length>0&&angular.forEach(i,function(e){var n=e.width;o.columns[e.index].width=Math.floor(d.rootDim.outerWidth*(parseInt(n.slice(0,-1),10)/100))})},d.init=function(){o.selectionService=new ng.SelectionService(d,o),o.domAccessProvider=new ng.DomAccessProvider(d),d.rowFactory=new ng.RowFactory(d,o,l,c),d.searchProvider=new ng.SearchProvider(o,d,s),d.styleProvider=new ng.StyleProvider(o,d,l),o.$watch("configGroups",function(e){var n=[];angular.forEach(e,function(e){n.push(e.field||e)}),d.config.groups=n,d.rowFactory.filteredRowsChanged(),o.$emit("ngGridEventGroups",e)},!0),o.$watch("columns",function(e){l.BuildStyles(o,d,!0),o.$emit("ngGridEventColumns",e)},!0),o.$watch(function(){return r.i18n},function(e){ng.utils.seti18n(o,e)}),d.maxCanvasHt=d.calcMaxCanvasHeight(),d.config.sortInfo&&o.columns.length&&(d.config.sortInfo.columns=o.columns.filter(function(e){return-1!=d.config.sortInfo.field.indexOf(e.field)?!0:!1}),d.config.sortInfo.column.sortDirection=d.config.sortInfo.direction.toUpperCase(),d.sortData(d.config.sortInfo.columns))},d.resizeOnData=function(e){var n=e.minWidth,t=ng.utils.getElementsByClassName("col"+e.index);angular.forEach(t,function(e,t){var o;if(0===t){var r=$(e).find(".ngHeaderText");o=ng.utils.visualLength(r)+10}else{var i=$(e).find(".ngCellText");o=ng.utils.visualLength(i)+10}o>n&&(n=o)}),e.width=e.longest=Math.min(e.maxWidth,n+7),l.BuildStyles(o,d,!0)},d.lastSortedColumns=[],d.changeRowOrder=function(e,n){var t=d.rowCache.indexOf(e),r=d.rowCache.indexOf(n);d.rowCache.splice(t,1),d.rowCache.splice(r,0,e),o.$emit("ngGridEventChangeOrder",d.rowCache)},d.sortData=function(e,n){if(n.shiftKey&&d.config.sortInfo){var t=d.config.sortInfo.columns.indexOf(e);-1===t?(1==d.config.sortInfo.columns.length&&(d.config.sortInfo.columns[0].sortPriority=1),d.config.sortInfo.columns.push(e),e.sortPriority=d.config.sortInfo.columns.length,d.config.sortInfo.fields.push(e.field),d.config.sortInfo.directions.push(e.sortDirection),d.lastSortedColumns.push(e)):d.config.sortInfo.directions[t]=e.sortDirection}else{var r=$.isArray(e);d.config.sortInfo={columns:[],fields:[],directions:[]};var l=function(e){d.config.sortInfo.columns.push(e),d.config.sortInfo.fields.push(e.field),d.config.sortInfo.directions.push(e.sortDirection),d.lastSortedColumns.push(e)};r?(d.clearSortingData(),angular.forEach(e,function(e,n){e.sortPriority=n+1,l(e)})):(d.clearSortingData(e),e.sortPriority=void 0,l(e))}if(!d.config.useExternalSorting){var a=d.data.slice(0);angular.forEach(a,function(e,n){e.preSortSelected=d.rowCache[d.rowMap[n]].selected,e.preSortIndex=n}),i.Sort(d.config.sortInfo,a),angular.forEach(a,function(e,n){d.rowCache[n].entity=e,d.rowCache[n].selected=e.preSortSelected,d.rowMap[e.preSortIndex]=n,delete e.preSortSelected,delete e.preSortIndex})}d.searchProvider.evalFilter(),o.$emit("ngGridEventSorted",e)},d.clearSortingData=function(e){e?(angular.forEach(d.lastSortedColumns,function(n){e.index!=n.index&&(n.sortDirection="",n.sortPriority=null)}),d.lastSortedColumns[0]=e,d.lastSortedColumns.length=1):(angular.forEach(d.lastSortedColumns,function(e){e.sortDirection="",e.sortPriority=null}),d.lastSortedColumns=[])},d.fixColumnIndexes=function(){for(var e=0;o.columns.length>e;e++)o.columns[e].visible&&(o.columns[e].index=e)},d.fixGroupIndexes=function(){angular.forEach(o.configGroups,function(e,n){e.groupIndex=n+1})},o.elementsNeedMeasuring=!0,o.columns=[],o.renderedRows=[],o.renderedColumns=[],o.headerRow=null,o.rowHeight=d.config.rowHeight,o.jqueryUITheme=d.config.jqueryUITheme,o.showSelectionCheckbox=d.config.showSelectionCheckbox,o.enableCellSelection=d.config.enableCellSelection,o.footer=null,o.selectedItems=d.config.selectedItems,o.multiSelect=d.config.multiSelect,o.showFooter=d.config.showFooter,o.footerRowHeight=o.showFooter?d.config.footerRowHeight:0,o.showColumnMenu=d.config.showColumnMenu,o.showMenu=!1,o.configGroups=[],o.gridId=d.gridId,o.enablePaging=d.config.enablePaging,o.pagingOptions=d.config.pagingOptions,o.i18n={},ng.utils.seti18n(o,d.config.i18n),o.adjustScrollLeft=function(e){for(var n=0,t=0,r=o.columns.length,i=[],a=!d.config.enableColumnHeavyVirt,s=0,c=function(e){a?i.push(e):o.renderedColumns[s]?o.renderedColumns[s].setVars(e):o.renderedColumns[s]=e.copy(),s++},g=0;r>g;g++){var u=o.columns[g];if(u.visible){var f=u.width+n;if(u.pinned){c(u);var p=g>0?e+t:e;l.setColLeft(u,p,d),t+=u.width}else f>=e&&e+d.rootDim.outerWidth>=n&&c(u);n+=u.width}}a&&(o.renderedColumns=i)},d.prevScrollTop=0,d.prevScrollIndex=0,o.adjustScrollTop=function(e,r){if(d.prevScrollTop!==e||r){e>0&&d.$viewport[0].scrollHeight-e<=d.$viewport.outerHeight()&&o.$emit("ngGridEventScroll");var i,l=Math.floor(e/d.config.rowHeight);if(d.filteredRows.length>d.config.virtualizationThreshold){if(e>d.prevScrollTop&&d.prevScrollIndex+t>l)return;if(d.prevScrollTop>e&&l>d.prevScrollIndex-t)return;i=new ng.Range(Math.max(0,l-n),l+d.minRowsToRender()+n)}else{var a=o.configGroups.length>0?d.rowFactory.parsedData.length:d.data.length;i=new ng.Range(0,Math.max(a,d.minRowsToRender()+n))}d.prevScrollTop=e,d.rowFactory.UpdateViewableRange(i),d.prevScrollIndex=l}},o.toggleShowMenu=function(){o.showMenu=!o.showMenu},o.toggleSelectAll=function(e){o.selectionService.toggleSelectAll(e)},o.totalFilteredItemsLength=function(){return d.filteredRows.length},o.showGroupPanel=function(){return d.config.showGroupPanel},o.topPanelHeight=function(){return d.config.showGroupPanel===!0?d.config.headerRowHeight+32:d.config.headerRowHeight},o.viewportDimHeight=function(){return Math.max(0,d.rootDim.outerHeight-o.topPanelHeight()-o.footerRowHeight-2)},o.groupBy=function(e){if(e.sortDirection||e.sort({shiftKey:!1}),!(1>d.data.length)&&e.groupable&&e.field){var n=o.configGroups.indexOf(e);-1==n?(e.isGroupedBy=!0,o.configGroups.push(e),e.groupIndex=o.configGroups.length):o.removeGroup(n),d.$viewport.scrollTop(0),l.digest(o)}},o.removeGroup=function(e){var n=o.columns.filter(function(n){return n.groupIndex==e+1})[0];n.isGroupedBy=!1,n.groupIndex=0,o.columns[e].isAggCol&&(o.columns.splice(e,1),o.configGroups.splice(e,1),d.fixGroupIndexes()),0===o.configGroups.length&&(d.fixColumnIndexes(),l.digest(o)),o.adjustScrollLeft(0)},o.togglePin=function(e){for(var n=e.index,t=0,r=0;o.columns.length>r&&o.columns[r].pinned;r++)t++; e.pinned&&(t=Math.max(e.originalIndex,t-1)),e.pinned=!e.pinned,o.columns.splice(n,1),o.columns.splice(t,0,e),d.fixColumnIndexes(),l.BuildStyles(o,d,!0),d.$viewport.scrollLeft(d.$viewport.scrollLeft()-e.width)},o.totalRowWidth=function(){for(var e=0,n=o.columns,t=0;n.length>t;t++)n[t].visible&&(e+=n[t].width);return e},o.headerScrollerDim=function(){var e=o.viewportDimHeight(),n=d.maxCanvasHt,t=n>e,r=new ng.Dimension;return r.autoFitHeight=!0,r.outerWidth=o.totalRowWidth(),t?r.outerWidth+=d.elementDims.scrollW:d.elementDims.scrollH>=n-e&&(r.outerWidth+=d.elementDims.scrollW),r},d.init()},ng.Range=function(e,n){this.topRow=e,this.bottomRow=n},ng.Row=function(e,n,t,o){var r=this,i=n.enableRowSelection;r.jqueryUITheme=n.jqueryUITheme,r.rowClasses=n.rowClasses,r.entity=e,r.selectionService=t,r.selected=t.getSelection(e),r.cursor=i?"pointer":"default",r.setSelection=function(e){r.selectionService.setSelection(r,e),r.selectionService.lastClickedRow=r},r.continueSelection=function(e){r.selectionService.ChangeSelection(r,e)},r.ensureEntity=function(e){r.entity!=e&&(r.entity=e,r.selected=r.selectionService.getSelection(r.entity))},r.toggleSelected=function(e){if(!i&&!n.enableCellSelection)return!0;var t=e.target||e;return"checkbox"==t.type&&"ngSelectionCell ng-scope"!=t.parentElement.className?!0:n.selectWithCheckboxOnly&&"checkbox"!=t.type?(r.selectionService.lastClickedRow=r,!0):(r.beforeSelectionChange(r,e)&&r.continueSelection(e),!1)},r.rowIndex=o,r.offsetTop=r.rowIndex*n.rowHeight,r.rowDisplayIndex=0,r.alternatingRowClass=function(){var e=0===r.rowIndex%2,n={selected:r.selected,"ui-state-default":r.jqueryUITheme&&e,"ui-state-active":r.jqueryUITheme&&!e,even:e,odd:!e};return n},r.beforeSelectionChange=n.beforeSelectionChangeCallback,r.afterSelectionChange=n.afterSelectionChangeCallback,r.getProperty=function(e){return ng.utils.evalProperty(r.entity,e)},r.copy=function(){return r.clone=new ng.Row(e,n,t,o),r.clone.isClone=!0,r.clone.elm=r.elm,r.clone},r.setVars=function(e){e.clone=r,r.entity=e.entity,r.selected=e.selected}},ng.RowFactory=function(e,t,o,r){var c=this;c.aggCache={},c.parentCache=[],c.dataChanged=!0,c.parsedData=[],c.rowConfig={},c.selectionService=t.selectionService,c.rowHeight=30,c.numberOfAggregates=0,c.groupedData=void 0,c.rowHeight=e.config.rowHeight,c.rowConfig={enableRowSelection:e.config.enableRowSelection,rowClasses:e.config.rowClasses,selectedItems:t.selectedItems,selectWithCheckboxOnly:e.config.selectWithCheckboxOnly,beforeSelectionChangeCallback:e.config.beforeSelectionChange,afterSelectionChangeCallback:e.config.afterSelectionChange,jqueryUITheme:e.config.jqueryUITheme,enableCellSelection:e.config.enableCellSelection,rowHeight:e.config.rowHeight},c.renderedRange=new ng.Range(0,e.minRowsToRender()+n),c.buildEntityRow=function(e,n){return new ng.Row(e,c.rowConfig,c.selectionService,n)},c.buildAggregateRow=function(e,n){var t=c.aggCache[e.aggIndex];return t||(t=new ng.Aggregate(e,c,c.rowConfig.rowHeight),c.aggCache[e.aggIndex]=t),t.rowIndex=n,t.offsetTop=n*c.rowConfig.rowHeight,t},c.UpdateViewableRange=function(e){c.renderedRange=e,c.renderedChange()},c.filteredRowsChanged=function(){e.lateBoundColumns&&e.filteredRows.length>0&&(e.config.columnDefs=void 0,e.buildColumns(),e.lateBoundColumns=!1,t.$evalAsync(function(){t.adjustScrollLeft(0)})),c.dataChanged=!0,e.config.groups.length>0&&c.getGrouping(e.config.groups),c.UpdateViewableRange(c.renderedRange)},c.renderedChange=function(){if(!c.groupedData||1>e.config.groups.length)return c.renderedChangeNoGroups(),e.refreshDomSizes(),void 0;c.wasGrouped=!0,c.parentCache=[];var n=0,t=c.parsedData.filter(function(e){return e.isAggRow?e.parent&&e.parent.collapsed?!1:!0:(e[a]||(e.rowIndex=n++),!e[a])});c.totalRows=t.length;for(var o=[],r=c.renderedRange.topRow;c.renderedRange.bottomRow>r;r++)t[r]&&(t[r].offsetTop=r*e.config.rowHeight,o.push(t[r]));e.setRenderedRows(o)},c.renderedChangeNoGroups=function(){for(var n=[],t=c.renderedRange.topRow;c.renderedRange.bottomRow>t;t++)e.filteredRows[t]&&(e.filteredRows[t].rowIndex=t,e.filteredRows[t].offsetTop=t*e.config.rowHeight,n.push(e.filteredRows[t]));e.setRenderedRows(n)},c.fixRowCache=function(){var n=e.data.length,t=n-e.rowCache.length;if(0>t)e.rowCache.length=e.rowMap.length=n;else for(var o=e.rowCache.length;n>o;o++)e.rowCache[o]=e.rowFactory.buildEntityRow(e.data[o],o)},c.parseGroupData=function(e){if(e.values)for(var n=0;e.values.length>n;n++)c.parentCache[c.parentCache.length-1].children.push(e.values[n]),c.parsedData.push(e.values[n]);else for(var t in e)if(t!=i&&t!=l&&t!=s&&e.hasOwnProperty(t)){var o=c.buildAggregateRow({gField:e[i],gLabel:t,gDepth:e[l],isAggRow:!0,_ng_hidden_:!1,children:[],aggChildren:[],aggIndex:c.numberOfAggregates,aggLabelFilter:e[s].aggLabelFilter},0);c.numberOfAggregates++,o.parent=c.parentCache[o.depth-1],o.parent&&(o.parent.collapsed=!1,o.parent.aggChildren.push(o)),c.parsedData.push(o),c.parentCache[o.depth]=o,c.parseGroupData(e[t])}},c.getGrouping=function(n){c.aggCache=[],c.numberOfAggregates=0,c.groupedData={};for(var g=e.filteredRows,d=n.length,u=t.columns,f=0;g.length>f;f++){var p=g[f].entity;if(!p)return;g[f][a]=!0;for(var h=c.groupedData,m=0;n.length>m;m++){var v=n[m],w=u.filter(function(e){return e.field==v})[0],C=ng.utils.evalProperty(p,v);C=C?""+C:"null",h[C]||(h[C]={}),h[i]||(h[i]=v),h[l]||(h[l]=m),h[s]||(h[s]=w),h=h[C]}h.values||(h.values=[]),h.values.push(g[f])}for(var S=0;n.length>S;S++)!u[S].isAggCol&&d>=S&&u.splice(0,0,new ng.Column({colDef:{field:"",width:25,sortable:!1,resizable:!1,headerCellTemplate:'<div class="ngAggHeader"></div>',pinned:e.config.pinSelectionCheckbox},isAggCol:!0,headerRowHeight:e.config.headerRowHeight},t,e,o,r));o.BuildStyles(t,e,!0),e.fixColumnIndexes(),t.adjustScrollLeft(0),c.parsedData.length=0,c.parseGroupData(c.groupedData),c.fixRowCache()},e.config.groups.length>0&&e.filteredRows.length>0&&c.getGrouping(e.config.groups)},ng.SearchProvider=function(e,n,t){var o=this,r=[];o.extFilter=n.config.filterOptions.useExternalFilter,e.showFilter=n.config.showFilter,e.filterText="",o.fieldMap={},o.evalFilter=function(){var e=function(e){for(var n=0,l=r.length;l>n;n++){var a,s=r[n];if(!s.column){for(var c in e)if(e.hasOwnProperty(c)){var g=o.fieldMap[c];if(!g)continue;var d=null;if(g&&g.cellFilter){var u=g.cellFilter.split(":");d=t(u[0])}var f=e[c];if(null!=f){if("function"==typeof d){var p=""+d("object"==typeof f?i(f,g.field):f);a=s.regex.test(p)}else a=s.regex.test("object"==typeof f?""+i(f,g.field):""+f);if(f&&a)return!0}}return!1}var h=o.fieldMap[s.columnDisplay];if(!h)return!1;var m=h.cellFilter?t(h.cellFilter):null,v=e[s.column]||e[h.field.split(".")[0]];if(null==v)return!1;if("function"==typeof m){var w=""+m("object"==typeof v?i(v,h.field):v);a=s.regex.test(w)}else a=s.regex.test("object"==typeof v?""+i(v,h.field):""+v);if(!v||!a)return!1}return!0};n.filteredRows=0===r.length?n.rowCache:n.rowCache.filter(function(n){return e(n.entity)});for(var l=0;n.filteredRows.length>l;l++)n.filteredRows[l].rowIndex=l;n.rowFactory.filteredRowsChanged()};var i=function(e,n){if("object"!=typeof e||"string"!=typeof n)return e;var t=n.split("."),o=e;if(t.length>1){for(var r=1,i=t.length;i>r;r++)if(o=o[t[r]],!o)return e;return o}return e},l=function(e,n){try{return RegExp(e,n)}catch(t){return RegExp(e.replace(/(\^|\$|\(|\)|\<|\>|\[|\]|\{|\}|\\|\||\.|\*|\+|\?)/g,"\\$1"))}},a=function(e){r=[];var n;if(n=$.trim(e))for(var t=n.split(";"),o=0;t.length>o;o++){var i=t[o].split(":");if(i.length>1){var a=$.trim(i[0]),s=$.trim(i[1]);a&&s&&r.push({column:a,columnDisplay:a.replace(/\s+/g,"").toLowerCase(),regex:l(s,"i")})}else{var c=$.trim(i[0]);c&&r.push({column:"",regex:l(c,"i")})}}};e.$watch(n.config.filterOptions.filterText,function(n){e.filterText=n}),e.$watch("filterText",function(n){o.extFilter||(e.$emit("ngGridEventFilter",n),a(n),o.evalFilter())}),o.extFilter||e.$watch("columns",function(e){for(var n=0;e.length>n;n++){var t=e[n];t.field&&(o.fieldMap[t.field.split(".")[0]]=t),t.displayName&&(o.fieldMap[t.displayName.toLowerCase().replace(/\s+/g,"")]=t)}})},ng.SelectionService=function(e,n){var t=this;t.multi=e.config.multiSelect,t.selectedItems=e.config.selectedItems,t.selectedIndex=e.config.selectedIndex,t.lastClickedRow=void 0,t.ignoreSelectedItemChanges=!1,t.ChangeSelection=function(o,r){var i=o.isClone?e.filteredRows[o.rowIndex]:o;if(r&&r.shiftKey&&!r.keyCode&&t.multi&&e.config.enableRowSelection){if(t.lastClickedRow){var l;l=n.configGroups.length>0?e.rowFactory.parsedData.filter(function(e){return!e.isAggRow}):e.filteredRows;var a=i.rowIndex,s=t.lastClickedRow.rowIndex;if(t.lastClickedRow=i,a==s)return!1;s>a?(a^=s,s=a^s,a^=s,a--):s++;for(var c=[];a>=s;s++)c.push(l[s]);if(c[c.length-1].beforeSelectionChange(c,r)){for(var g=0;c.length>g;g++){var d=c[g],u=d.selected;d.selected=!u,d.clone&&(d.clone.selected=d.selected);var f=t.selectedItems.indexOf(d.entity);-1===f?t.selectedItems.push(d.entity):t.selectedItems.splice(f,1)}c[c.length-1].afterSelectionChange(c,r)}return!0}}else t.multi?r.keyCode||t.setSelection(i,!i.selected):t.lastClickedRow==i?t.setSelection(t.lastClickedRow,e.config.keepLastSelected?!0:!i.selected):(t.lastClickedRow&&t.setSelection(t.lastClickedRow,!1),t.setSelection(i,!i.selected));return t.lastClickedRow=i,!0},t.getSelection=function(e){return-1!==t.selectedItems.indexOf(e)},t.setSelection=function(n,o){var r=n.isClone?e.filteredRows[n.rowIndex]:n;if(e.config.enableRowSelection){if(r.selected=o,r.clone&&(r.clone.selected=o),o)-1===t.selectedItems.indexOf(r.entity)&&(!t.multi&&t.selectedItems.length>0&&(t.toggleSelectAll(!1,!0),r.selected=o,r.clone&&(r.clone.selected=o)),t.selectedItems.push(r.entity));else{var i=t.selectedItems.indexOf(r.entity);-1!=i&&t.selectedItems.splice(i,1)}r.afterSelectionChange(r)}},t.toggleSelectAll=function(n,o){if(o||e.config.beforeSelectionChange(e.filteredRows)){var r=t.selectedItems.length;r>0&&(t.selectedItems.length=0);for(var i=0;e.filteredRows.length>i;i++)e.filteredRows[i].selected=n,e.filteredRows[i].clone&&(e.filteredRows[i].clone.selected=n),n&&t.selectedItems.push(e.filteredRows[i].entity);o||e.config.afterSelectionChange(e.filteredRows)}}},ng.StyleProvider=function(e,n,t){e.headerCellStyle=function(e){return{height:e.headerRowHeight+"px"}},e.rowStyle=function(n){return{top:n.offsetTop+"px",height:e.rowHeight+"px"}},e.canvasStyle=function(){return{height:""+n.maxCanvasHt+"px"}},e.headerScrollerStyle=function(){return{height:n.config.headerRowHeight+"px"}},e.topPanelStyle=function(){return{width:n.rootDim.outerWidth+"px",height:e.topPanelHeight()+"px"}},e.headerStyle=function(){return{width:n.rootDim.outerWidth-t.ScrollW+"px",height:n.config.headerRowHeight+"px"}},e.groupPanelStyle=function(){return{width:n.rootDim.outerWidth-t.ScrollW+"px",height:"32px"}},e.viewportStyle=function(){return{width:n.rootDim.outerWidth+"px",height:e.viewportDimHeight()+"px"}},e.footerStyle=function(){return{width:n.rootDim.outerWidth+"px",height:e.footerRowHeight+"px"}}},h.directive("ngCellHasFocus",["DomUtilityService",function(e){var n=function(n,t){n.isFocused=!0,e.digest(n);var o=angular.element(t[0].children).filter(function(){return 8!=this.nodeType}),r=angular.element(o[0].children[0]);r.length>0&&(angular.element(r).focus(),n.domAccessProvider.selectInputElement(r[0]),angular.element(r).bind("blur",function(){return n.isFocused=!1,e.digest(n),!0}))};return function(e,t){var o=!1;e.editCell=function(){setTimeout(function(){n(e,t)},0)},t.bind("mousedown",function(){return t.focus(),!0}),t.bind("focus",function(){return o=!0,!0}),t.bind("blur",function(){return o=!1,!0}),t.bind("keydown",function(r){return o&&37!=r.keyCode&&38!=r.keyCode&&39!=r.keyCode&&40!=r.keyCode&&9!=r.keyCode&&!r.shiftKey&&13!=r.keyCode&&n(e,t),27==r.keyCode&&t.focus(),!0})}}]),h.directive("ngCellText",function(){return function(e,n){n.bind("mouseover",function(e){e.preventDefault(),n.css({cursor:"text"})}),n.bind("mouseleave",function(e){e.preventDefault(),n.css({cursor:"default"})})}}),h.directive("ngCell",["$compile","DomUtilityService",function(e,n){var t={scope:!1,compile:function(){return{pre:function(n,t){var o,r=n.col.cellTemplate.replace(g,"$eval('row.entity.' + col.field)");n.col.enableCellEdit?(o=n.col.cellEditTemplate,o=o.replace(d,r),o=o.replace(u,n.col.editableCellTemplate.replace(g,"col.field"))):o=r;var i=e(o)(n);n.enableCellSelection&&-1==i[0].className.indexOf("ngSelectionCell")&&(i[0].setAttribute("tabindex",0),i.addClass("ngCellElement")),t.append(i)},post:function(e,t){e.enableCellSelection&&e.domAccessProvider.selectionHandlers(e,t),e.$on("ngGridEventDigestCell",function(){n.digest(e)})}}}};return t}]),h.directive("ngGrid",["$compile","$filter","$templateCache","SortService","DomUtilityService",function(e,n,t,o,r){var i={scope:!0,compile:function(){return{pre:function(i,l,a){var s=$(l),c=i.$eval(a.ngGrid);c.gridDim=new ng.Dimension({outerHeight:$(s).height(),outerWidth:$(s).width()});var g=new ng.Grid(i,c,o,r,n,t);if("string"==typeof c.columnDefs?i.$parent.$watch(c.columnDefs,function(e){return e?(i.columns=[],g.config.columnDefs=e,g.buildColumns(),g.configureColumnWidths(),g.eventProvider.assignEvents(),r.RebuildGrid(i,g),void 0):(g.refreshDomSizes(),g.buildColumns(),void 0)}):g.buildColumns(),"string"==typeof c.data){var d=function(e){g.data=$.extend([],e),g.rowFactory.fixRowCache(),angular.forEach(g.data,function(e,n){var t=g.rowMap[n]||n;g.rowCache[t]&&g.rowCache[t].ensureEntity(e),g.rowMap[t]=n}),g.searchProvider.evalFilter(),g.configureColumnWidths(),g.refreshDomSizes(),g.config.sortInfo&&o.sortData(g.config.sortInfo,g.data.slice(0)),i.$emit("ngGridEventData",g.gridId)};i.$parent.$watch(c.data,d),i.$parent.$watch(c.data+".length",function(){d(i.$eval(c.data))})}return g.footerController=new ng.Footer(i,g),l.addClass("ngGrid").addClass(""+g.gridId),c.jqueryUITheme&&l.addClass("ui-widget"),l.append(e(t.get("gridTemplate.html"))(i)),r.AssignGridContainers(i,l,g),g.eventProvider=new ng.EventProvider(g,i,r),angular.forEach(c.plugins,function(e){"function"==typeof e?e.call(this,[]).init(i.$new(),g,{SortService:o,DomUtilityService:r}):e.init(i.$new(),g,{SortService:o,DomUtilityService:r})}),c.selectRow=function(e,n){g.rowCache[e]&&g.rowCache[e].setSelection(n?!0:!1)},c.selectItem=function(e,n){c.selectRow(g.rowMap[e],n)},c.selectAll=function(e){i.toggleSelectAll(e)},c.groupBy=function(e){if(e)i.groupBy(i.columns.filter(function(n){return n.field==e})[0]);else{var n=$.extend(!0,[],i.configGroups);angular.forEach(n,i.groupBy)}},c.sortBy=function(e){var n=i.columns.filter(function(n){return n.field==e})[0];n&&n.sort()},c.gridId=g.gridId,c.ngGrid=g,c.$gridScope=i,i.$on("ngGridEventDigestGrid",function(){r.digest(i.$parent)}),i.$on("ngGridEventDigestGridParent",function(){r.digest(i.$parent)}),i.$evalAsync(function(){i.adjustScrollLeft(0)}),null}}}};return i}]),h.directive("ngHeaderCell",["$compile",function(e){var n={scope:!1,compile:function(){return{pre:function(n,t){t.append(e(n.col.headerCellTemplate)(n))}}}};return n}]),h.directive("ngHeaderRow",["$compile","$templateCache",function(e,n){var t={scope:!1,compile:function(){return{pre:function(t,o){0===o.children().length&&o.append(e(n.get(t.gridId+"headerRowTemplate.html"))(t))}}}};return t}]),h.directive("ngIf",[function(){return{transclude:"element",priority:1e3,terminal:!0,restrict:"A",compile:function(e,n,t){return function(e,n,o){var r,i;e.$watch(o.ngIf,function(o){r&&(r.remove(),r=void 0),i&&(i.$destroy(),i=void 0),o&&(i=e.$new(),t(i,function(e){r=e,n.after(e)}))})}}}}]),h.directive("ngInput",["$parse",function(e){return function(n,t,o){var r=e(n.$eval(o.ngInput)),i=r.assign,l=r(n.row.entity);t.val(l),t.bind("keyup",function(){var e=t.val();n.$root.$$phase||n.$apply(function(){i(n.row.entity,e)})}),t.bind("keydown",function(e){switch(e.keyCode){case 37:case 38:case 39:case 40:e.stopPropagation();break;case 27:n.$root.$$phase||n.$apply(function(){i(n.row.entity,l),t.val(l),t.blur()});default:}return!0})}}]),h.directive("ngRow",["$compile","DomUtilityService","$templateCache",function(e,n,t){var o={scope:!1,compile:function(){return{pre:function(o,r){if(o.row.elm=r,o.row.clone&&(o.row.clone.elm=r),o.row.isAggRow){var i=t.get(o.gridId+"aggregateTemplate.html");i=o.row.aggLabelFilter?i.replace(c,"| "+o.row.aggLabelFilter):i.replace(c,""),r.append(e(i)(o))}else r.append(e(t.get(o.gridId+"rowTemplate.html"))(o));o.$on("ngGridEventDigestRow",function(){n.digest(o)})}}}};return o}]),h.directive("ngViewport",[function(){return function(e,n){var t,o,r=0;n.bind("scroll",function(n){var i=n.target.scrollLeft,l=n.target.scrollTop;return e.$headerContainer&&e.$headerContainer.scrollLeft(i),e.adjustScrollLeft(i),e.adjustScrollTop(l),e.$root.$$phase||e.$digest(),o=i,r=r,t=!1,!0}),n.bind("mousewheel DOMMouseScroll",function(){return t=!0,n.focus(),!0}),e.enableCellSelection||e.domAccessProvider.selectionHandlers(e,n)}}]),e.ngGrid.i18n.en={ngAggregateLabel:"items",ngGroupPanelDescription:"Drag a column header here and drop it to group by that column.",ngSearchPlaceHolder:"Search...",ngMenuText:"Choose Columns:",ngShowingItemsLabel:"Showing Items:",ngTotalItemsLabel:"Total Items:",ngSelectedItemsLabel:"Selected Items:",ngPageSizeLabel:"Page Size:",ngPagerFirstTitle:"First Page",ngPagerNextTitle:"Next Page",ngPagerPrevTitle:"Previous Page",ngPagerLastTitle:"Last Page"},e.ngGrid.i18n.fr={ngAggregateLabel:"articles",ngGroupPanelDescription:"Faites glisser un en-tête de colonne ici et déposez-le vers un groupe par cette colonne.",ngSearchPlaceHolder:"Recherche...",ngMenuText:"Choisir des colonnes:",ngShowingItemsLabel:"Articles Affichage des:",ngTotalItemsLabel:"Nombre total d'articles:",ngSelectedItemsLabel:"Éléments Articles:",ngPageSizeLabel:"Taille de page:",ngPagerFirstTitle:"Première page",ngPagerNextTitle:"Page Suivante",ngPagerPrevTitle:"Page précédente",ngPagerLastTitle:"Dernière page"},e.ngGrid.i18n.ge={ngAggregateLabel:"artikel",ngGroupPanelDescription:"Ziehen Sie eine Spaltenüberschrift hier und legen Sie es der Gr