angular-ui-grid
Version:
A data grid for Angular
6 lines • 128 kB
JavaScript
/*!
* ui-grid - v4.12.7 - 2024-04-12
* http://ui-grid.info/
* Copyright (c) 2024 ; License: MIT
*/
!function(){"use strict";angular.module("ui.grid.i18n",[]),angular.module("ui.grid",["ui.grid.i18n"])}(),function(){"use strict";angular.module("ui.grid").constant("uiGridConstants",{LOG_DEBUG_MESSAGES:!0,LOG_WARN_MESSAGES:!0,LOG_ERROR_MESSAGES:!0,CUSTOM_FILTERS:/CUSTOM_FILTERS/g,COL_FIELD:/COL_FIELD/g,MODEL_COL_FIELD:/MODEL_COL_FIELD/g,TOOLTIP:/title=\"TOOLTIP\"/g,DISPLAY_CELL_TEMPLATE:/DISPLAY_CELL_TEMPLATE/g,TEMPLATE_REGEXP:/<.+>/,FUNC_REGEXP:/(\([^)]*\))?$/,DOT_REGEXP:/\./g,APOS_REGEXP:/'/g,BRACKET_REGEXP:/^(.*)((?:\s*\[\s*\d+\s*\]\s*)|(?:\s*\[\s*"(?:[^"\\]|\\.)*"\s*\]\s*)|(?:\s*\[\s*'(?:[^'\\]|\\.)*'\s*\]\s*))(.*)$/,COL_CLASS_PREFIX:"ui-grid-col",ENTITY_BINDING:"$$this",events:{GRID_SCROLL:"uiGridScroll",COLUMN_MENU_SHOWN:"uiGridColMenuShown",ITEM_DRAGGING:"uiGridItemDragStart",COLUMN_HEADER_CLICK:"uiGridColumnHeaderClick"},keymap:{TAB:9,STRG:17,CAPSLOCK:20,CTRL:17,CTRLRIGHT:18,CTRLR:18,SHIFT:16,RETURN:13,ENTER:13,BACKSPACE:8,BCKSP:8,ALT:18,ALTR:17,ALTRIGHT:17,SPACE:32,WIN:91,MAC:91,FN:null,PG_UP:33,PG_DOWN:34,UP:38,DOWN:40,LEFT:37,RIGHT:39,ESC:27,DEL:46,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123},ASC:"asc",DESC:"desc",filter:{STARTS_WITH:2,ENDS_WITH:4,EXACT:8,CONTAINS:16,GREATER_THAN:32,GREATER_THAN_OR_EQUAL:64,LESS_THAN:128,LESS_THAN_OR_EQUAL:256,NOT_EQUAL:512,SELECT:"select",INPUT:"input"},aggregationTypes:{sum:2,count:4,avg:8,min:16,max:32},CURRENCY_SYMBOLS:["¤","؋","Ar","Ƀ","฿","B/.","Br","Bs.","Bs.F.","GH₵","¢","c","Ch.","₡","C$","D","ден","دج",".د.ب","د.ع","JD","د.ك","ل.د","дин","د.ت","د.م.","د.إ","Db","$","₫","Esc","€","ƒ","Ft","FBu","FCFA","CFA","Fr","FRw","G","gr","₲","h","₴","₭","Kč","kr","kn","MK","ZK","Kz","K","L","Le","лв","E","lp","M","KM","MT","₥","Nfk","₦","Nu.","UM","T$","MOP$","₱","Pt.","£","ج.م.","LL","LS","P","Q","q","R","R$","ر.ع.","ر.ق","ر.س","៛","RM","p","Rf.","₹","₨","SRe","Rp","₪","Ksh","Sh.So.","USh","S/","SDR","сом","৳\t","WS$","₮","VT","₩","¥","zł"],scrollDirection:{UP:"up",DOWN:"down",LEFT:"left",RIGHT:"right",NONE:"none"},dataChange:{ALL:"all",EDIT:"edit",ROW:"row",COLUMN:"column",OPTIONS:"options"},scrollbars:{NEVER:0,ALWAYS:1,WHEN_NEEDED:2}})}(),angular.module("ui.grid").directive("uiGridCell",["$compile","$parse","gridUtil","uiGridConstants",function(n,e,o,s){return{priority:0,scope:!1,require:"?^uiGrid",compile:function(){return{pre:function(t,r,e,i){i&&t.col.compiledElementFn?(0,t.col.compiledElementFn)(t,function(e,t){r.append(e)}):i&&!t.col.compiledElementFn?t.col.getCompiledElementFn().then(function(e){e(t,function(e,t){r.append(e)})}).catch(angular.noop):(i=t.col.cellTemplate.replace(s.MODEL_COL_FIELD,"row.entity."+o.preEval(t.col.field)).replace(s.COL_FIELD,"grid.getCellValue(row, col)"),i=n(i)(t),r.append(i))},post:function(r,i){var n,o=r.col.getColClass(!1);function l(e){var t=i;n&&(t.removeClass(n),n=null),n=angular.isFunction(r.col.cellClass)?r.col.cellClass(r.grid,r.row,r.col,r.rowRenderIndex,r.colRenderIndex):r.col.cellClass,t.addClass(n)}i.addClass(o),r.col.cellClass&&l();var e=r.grid.registerDataChangeCallback(l,[s.dataChange.COLUMN,s.dataChange.EDIT]);var t=r.$watch("row",function(e,t){e!==t&&((n||r.col.cellClass)&&l(),(e=r.col.getColClass(!1))!==o)&&(i.removeClass(o),i.addClass(e),o=e)});function a(){e(),t()}r.$on("$destroy",a),i.on("$destroy",a)}}}}}]),angular.module("ui.grid").service("uiGridColumnMenuService",["i18nService","uiGridConstants","gridUtil",function(e,r,c){var i={initialize:function(e,t){e.grid=t.grid,(t.columnMenuScope=e).menuShown=!1},setColMenuItemWatch:function(t){var e=t.$watch("col.menuItems",function(e){void 0!==e&&e&&angular.isArray(e)?(e.forEach(function(e){void 0!==e.context&&e.context||(e.context={}),e.context.col=t.col}),t.menuItems=t.defaultMenuItems.concat(e)):t.menuItems=t.defaultMenuItems});t.$on("$destroy",e)},getGridOption:function(e,t){return void 0!==e.grid&&e.grid&&e.grid.options&&e.grid.options[t]},sortable:function(e){return Boolean(this.getGridOption(e,"enableSorting")&&void 0!==e.col&&e.col&&e.col.enableSorting)},isActiveSort:function(e,t){return Boolean(void 0!==e.col&&void 0!==e.col.sort&&void 0!==e.col.sort.direction&&e.col.sort.direction===t)},suppressRemoveSort:function(e){return Boolean(e.col&&e.col.suppressRemoveSort)},hideable:function(e){return Boolean(this.getGridOption(e,"enableHiding")&&void 0!==e.col&&e.col&&(e.col.colDef&&!1!==e.col.colDef.enableHiding||!e.col.colDef)||!this.getGridOption(e,"enableHiding")&&e.col&&e.col.colDef&&e.col.colDef.enableHiding)},getDefaultMenuItems:function(t){return[{title:function(){return e.getSafeText("sort.ascending")},icon:"ui-grid-icon-sort-alt-up",action:function(e){e.stopPropagation(),t.sortColumn(e,r.ASC)},shown:function(){return i.sortable(t)},active:function(){return i.isActiveSort(t,r.ASC)}},{title:function(){return e.getSafeText("sort.descending")},icon:"ui-grid-icon-sort-alt-down",action:function(e){e.stopPropagation(),t.sortColumn(e,r.DESC)},shown:function(){return i.sortable(t)},active:function(){return i.isActiveSort(t,r.DESC)}},{title:function(){return e.getSafeText("sort.remove")},icon:"ui-grid-icon-cancel",action:function(e){e.stopPropagation(),t.unsortColumn()},shown:function(){return i.sortable(t)&&void 0!==t.col&&void 0!==t.col.sort&&void 0!==t.col.sort.direction&&null!==t.col.sort.direction&&!i.suppressRemoveSort(t)}},{title:function(){return e.getSafeText("column.hide")},icon:"ui-grid-icon-cancel",shown:function(){return i.hideable(t)},action:function(e){e.stopPropagation(),t.hideColumn()}}]},getColumnElementPosition:function(e,t,r){var i={};return i.left=r[0].offsetLeft,i.top=r[0].offsetTop,i.parentLeft=r[0].offsetParent.offsetLeft,i.offset=0,t.grid.options.offsetLeft&&(i.offset=t.grid.options.offsetLeft),i.height=c.elementHeight(r,!0),i.width=c.elementWidth(r,!0),i},repositionMenu:function(e,t,r,i,n){var o=i[0].querySelectorAll(".ui-grid-menu"),n=c.closestElm(n,".ui-grid-render-container"),l=n.getBoundingClientRect().left-e.grid.element[0].getBoundingClientRect().left,n=n.querySelectorAll(".ui-grid-viewport")[0].scrollLeft,a=c.elementWidth(o,!0),s=t.lastMenuPaddingRight||e.lastMenuPaddingRight||10,o=(0!==o.length&&0!==o[0].querySelectorAll(".ui-grid-menu-mid").length&&(s=parseInt(c.getStyles(angular.element(o)[0]).paddingRight,10),e.lastMenuPaddingRight=s,t.lastMenuPaddingRight=s),r.left+l-n+r.parentLeft+r.width+s);o<r.offset+a&&(o=Math.max(r.left-n+r.parentLeft-s+a,r.offset+a)),i.css("left",o+"px"),i.css("top",r.top+r.height+"px")}};return i}]).directive("uiGridColumnMenu",["$timeout","gridUtil","uiGridConstants","uiGridColumnMenuService","$document",function(n,l,a,s,c){return{priority:0,scope:!0,require:"^uiGrid",templateUrl:"ui-grid/uiGridColumnMenu",replace:!0,link:function(o,r,e,t){function i(e){o.col&&(o.col.menuShown=e)}s.initialize(o,t),o.defaultMenuItems=s.getDefaultMenuItems(o),o.menuItems=o.defaultMenuItems,s.setColMenuItemWatch(o),o.showMenu=function(e,t,r){i(!1),o.col=e,i(!0);e=s.getColumnElementPosition(o,e,t);o.menuShown?(o.colElement=t,o.colElementPosition=e,o.hideThenShow=!0,o.$broadcast("hide-menu",{originalEvent:r})):(o.menuShown=!0,o.colElement=t,o.colElementPosition=e,o.$broadcast("show-menu",{originalEvent:r}))},o.hideMenu=function(e){o.menuShown=!1,i(!1),e||o.$broadcast("hide-menu")},o.$on("menu-hidden",function(){var e=angular.element(r[0].querySelector(".ui-grid-menu-items"))[0];r[0].removeAttribute("style"),o.hideThenShow?(delete o.hideThenShow,o.$broadcast("show-menu"),o.menuShown=!0):(o.hideMenu(!0),o.col&&o.col.visible&&l.focus.bySelector(c,".ui-grid-header-cell."+o.col.getColClass()+" .ui-grid-column-menu-button",o.col.grid,!1).catch(angular.noop)),e&&(e.onkeydown=null,angular.forEach(e.children,function(e){e.onkeydown=null}))}),o.$on("menu-shown",function(){n(function(){var e,n;function t(e,t,r,i){e.keyCode===a.keymap.TAB&&(t?e.preventDefault():r&&(e.preventDefault(),n[i].focus()))}s.repositionMenu(o,o.col,o.colElementPosition,r,o.colElement),o.menuItems.some(function(e){return e.shown()})&&l.focus.bySelector(c,".ui-grid-menu-items .ui-grid-menu-item:not(.ng-hide)",!0).catch(angular.noop),delete o.colElementPosition,delete o.columnElement,e=angular.element(r[0].querySelector(".ui-grid-menu-items"))[0],n=[],e&&(e.onkeydown=function(e){e.keyCode===a.keymap.ESC&&(e.preventDefault(),o.hideMenu())},e=e.querySelectorAll(".ui-grid-menu-item:not(.ng-hide)"),angular.forEach(e,function(e){null!==e.offsetParent&&this.push(e)},n),n.length)&&(1===n.length?n[0].onkeydown=function(e){t(e,!0)}:(n[0].onkeydown=function(e){t(e,!1,e.shiftKey,n.length-1)},n[n.length-1].onkeydown=function(e){t(e,!1,!e.shiftKey,0)}))})}),o.sortColumn=function(e,t){e.stopPropagation(),o.grid.sortColumn(o.col,t,!0).then(function(){o.grid.refresh(),o.hideMenu()}).catch(angular.noop)},o.unsortColumn=function(){o.col.unsort(),o.grid.refresh(),o.hideMenu()};o.hideColumn=function(){o.col.colDef.visible=!1,o.col.visible=!1,o.grid.queueGridRefresh(),o.hideMenu(),o.grid.api.core.notifyDataChange(a.dataChange.COLUMN),o.grid.api.core.raise.columnVisibilityChanged(o.col),n(function(){function t(){return l.focus.byId("grid-menu",o.grid)}var r,i,e;o.grid.columns.some(function(e,t){if(angular.equals(e,o.col))return r=t,!0}),o.grid.columns.some(function(e,t){return!!e.visible&&(t<r?void(i=e):r<t&&!i?(i=e,!0):!!(r<t&&i)||void 0)}),i?(e=i.getColClass(),l.focus.bySelector(c,".ui-grid-header-cell."+e+" .ui-grid-header-cell-primary-focus",!0).then(angular.noop,function(e){if("canceled"!==e)return t()}).catch(angular.noop)):t()})}},controller:["$scope",function(e){var t=this;e.$watch("menuItems",function(e){t.menuItems=e})}]}}]),function(){"use strict";angular.module("ui.grid").directive("uiGridFilter",["$compile","$templateCache","i18nService","gridUtil",function(n,e,t,i){return{compile:function(){return{pre:function(r,i){r.col.updateFilters=function(e){var t;i.children().remove(),e&&(void 0===(t=r.col.filterHeaderTemplate)&&""!==r.col.providedFilterHeaderTemplate?r.col.filterHeaderTemplatePromise&&r.col.filterHeaderTemplatePromise.then(function(){t=r.col.filterHeaderTemplate,i.append(n(t)(r))}):i.append(n(t)(r)))},r.$on("$destroy",function(){delete r.col.filterable,delete r.col.updateFilters})},post:function(e,r){e.aria=t.getSafeText("headerCell.aria"),e.removeFilter=function(e,t){e.term=null,i.focus.bySelector(r,".ui-grid-filter-input-"+t)}}}}}}])}(),function(){"use strict";angular.module("ui.grid").directive("uiGridFooterCell",["$timeout","gridUtil","uiGridConstants","$compile",function(e,t,l,i){return{priority:0,scope:{col:"=",row:"=",renderIndex:"="},replace:!0,require:"^uiGrid",compile:function(){return{pre:function(e,t){var r=e.col.footerCellTemplate;void 0===r&&""!==e.col.providedFooterCellTemplate?e.col.footerCellTemplatePromise&&e.col.footerCellTemplatePromise.then(function(){r=e.col.footerCellTemplate,t.append(i(r)(e))}):t.append(i(r)(e))},post:function(t,r,e,i){t.grid=i.grid;function n(){var e=r;o&&(e.removeClass(o),o=null),o=angular.isFunction(t.col.footerCellClass)?t.col.footerCellClass(t.grid,t.row,t.col,t.rowRenderIndex,t.colRenderIndex):t.col.footerCellClass,e.addClass(o)}var o,i=t.col.getColClass(!1),i=(r.addClass(i),t.col.footerCellClass&&n(),t.col.updateAggregationValue(),t.grid.registerDataChangeCallback(n,[l.dataChange.COLUMN]));t.grid.api.core.on.rowsRendered(t,t.col.updateAggregationValue),t.grid.api.core.on.rowsRendered(t,n),t.$on("$destroy",i)}}}}}])}(),function(){"use strict";angular.module("ui.grid").directive("uiGridFooter",["$templateCache","$compile","uiGridConstants","gridUtil","$timeout",function(e,l,t,a,r){return{restrict:"EA",replace:!0,require:["^uiGrid","^uiGridRenderContainer"],scope:!0,compile:function(e,t){return{pre:function(t,r,e,i){var n=i[0],o=i[1],i=(t.grid=n.grid,t.colContainer=o.colContainer,o.footer=r,t.grid.options.footerTemplate);a.getTemplate(i).then(function(e){var e=angular.element(e),e=l(e)(t);r.append(e),o&&(e=r[0].getElementsByClassName("ui-grid-footer-viewport")[0])&&(o.footerViewport=e)}).catch(angular.noop)},post:function(e,t,r,i){var n=i[0],i=i[1],n=(n.grid,a.disableAnimations(t),(i.footer=t)[0].getElementsByClassName("ui-grid-footer-viewport")[0]);n&&(i.footerViewport=n)}}}}}])}(),function(){"use strict";angular.module("ui.grid").directive("uiGridGridFooter",["$templateCache","$compile","uiGridConstants","gridUtil",function(e,n,t,o){return{restrict:"EA",replace:!0,require:"^uiGrid",scope:!0,compile:function(){return{pre:function(t,r,e,i){t.grid=i.grid;i=t.grid.options.gridFooterTemplate;o.getTemplate(i).then(function(e){e=angular.element(e),e=n(e)(t);r.append(e)}).catch(angular.noop)}}}}}])}(),function(){"use strict";angular.module("ui.grid").directive("uiGridHeaderCell",["$compile","$timeout","$window","$document","gridUtil","uiGridConstants","ScrollEvent","i18nService","$rootScope",function(i,d,e,g,t,h,r,p,f){return{priority:0,scope:{col:"=",row:"=",renderIndex:"="},require:["^uiGrid","^uiGridRenderContainer"],replace:!0,compile:function(){return{pre:function(e,t){var r=e.col.headerCellTemplate;void 0===r&&""!==e.col.providedHeaderCellTemplate?e.col.headerCellTemplatePromise&&e.col.headerCellTemplatePromise.then(function(){r=e.col.headerCellTemplate,t.append(i(r)(e))}):t.append(i(r)(e))},post:function(r,t,e,i){function n(e){e&&(void 0!==r.col.updateFilters&&r.col.updateFilters(r.col.filterable),r.col.filterable?(r.col.filters.forEach(function(e,t){u.push(r.$watch("col.filters["+t+"].term",function(e,t){e!==t&&(s.grid.api.core.raise.filterChanged(r.col),s.grid.api.core.notifyDataChange(h.dataChange.COLUMN),s.grid.queueGridRefresh())}))}),r.$on("$destroy",function(){u.forEach(function(e){e()})})):u.forEach(function(e){e()}))}function o(){var e=t,e=(l&&(e.removeClass(l),l=null),l=angular.isFunction(r.col.headerCellClass)?r.col.headerCellClass(r.grid,r.row,r.col,r.rowRenderIndex,r.colRenderIndex):r.col.headerCellClass,e.addClass(l),r.$applyAsync(function(){var e=r.grid.renderContainers.right&&r.grid.renderContainers.right.visibleColumnCache.length?r.grid.renderContainers.right:r.grid.renderContainers.body;r.isLastCol=s.grid.options&&s.grid.options.enableGridMenu&&r.col===e.visibleColumnCache[e.visibleColumnCache.length-1]}),r.sortable=Boolean(r.col.enableSorting),r.col.filterable);r.col.filterable=Boolean(s.grid.options.enableFiltering&&r.col.enableFiltering),n(e!==r.col.filterable),r.colMenu=r.col.grid.options&&!1!==r.col.grid.options.enableColumnMenus&&r.col.colDef&&!1!==r.col.colDef.enableColumnMenu,r.offAllEvents(),(r.sortable||r.colMenu)&&(r.onDownEvents(),r.$on("$destroy",function(){r.offAllEvents()}))}var l,a,s=i[0],i=i[1],i=(r.i18n={headerCell:p.getSafeText("headerCell"),sort:p.getSafeText("sort")},r.isSortPriorityVisible=function(){return r.col&&r.col.sort&&angular.isNumber(r.col.sort.priority)&&r.grid.columns.some(function(e,t){return angular.isNumber(e.sort.priority)&&e!==r.col})},r.getSortDirectionAriaLabel=function(){var e=r.col,t=e.sort&&e.sort.direction===h.ASC?r.i18n.sort.ascending:e.sort&&e.sort.direction===h.DESC?r.i18n.sort.descending:r.i18n.sort.none;return t=r.isSortPriorityVisible()?t+". "+r.i18n.headerCell.priority+" "+(e.sort.priority+1):t},r.grid=s.grid,r.renderContainer=s.grid.renderContainers[i.containerId],r.col.getColClass(!1)),c=(t.addClass(i),r.menuShown=!1,r.col.menuShown=!1,r.asc=h.ASC,r.desc=h.DESC,angular.element(t[0].querySelectorAll(".ui-grid-cell-contents"))),u=[],i=(r.downFn=function(e){e.stopPropagation(),(e=void 0!==e.originalEvent&&void 0!==e.originalEvent?e.originalEvent:e).button&&0!==e.button||(a=e.pageX,r.mousedownStartTime=(new Date).getTime(),r.mousedownTimeout=d(function(){},500),r.mousedownTimeout.then(function(){r.colMenu&&s.columnMenuScope.showMenu(r.col,t,e)}).catch(angular.noop),s.fireEvent(h.events.COLUMN_HEADER_CLICK,{event:e,columnName:r.col.colDef.name}),r.offAllEvents(),"touchstart"===e.type?(g.on("touchend",r.upFn),g.on("touchmove",r.moveFn)):"mousedown"===e.type&&(g.on("mouseup",r.upFn),g.on("mousemove",r.moveFn)))},r.upFn=function(e){e.stopPropagation(),d.cancel(r.mousedownTimeout),r.offAllEvents(),r.onDownEvents(e.type),500<(new Date).getTime()-r.mousedownStartTime||r.sortable&&r.handleClick(e)},r.handleKeyDown=function(e){32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),r.handleClick(e))},r.moveFn=function(e){0!=e.pageX-a&&(d.cancel(r.mousedownTimeout),r.offAllEvents(),r.onDownEvents(e.type))},r.clickFn=function(e){e.stopPropagation(),c.off("click",r.clickFn)},r.offAllEvents=function(){c.off("touchstart",r.downFn),c.off("mousedown",r.downFn),g.off("touchend",r.upFn),g.off("mouseup",r.upFn),g.off("touchmove",r.moveFn),g.off("mousemove",r.moveFn),c.off("click",r.clickFn)},r.onDownEvents=function(e){switch(e){case"touchmove":case"touchend":c.on("click",r.clickFn),c.on("touchstart",r.downFn),d(function(){c.on("mousedown",r.downFn)},500);break;case"mousemove":case"mouseup":c.on("click",r.clickFn),c.on("mousedown",r.downFn),d(function(){c.on("touchstart",r.downFn)},500);break;default:c.on("click",r.clickFn),c.on("touchstart",r.downFn),c.on("mousedown",r.downFn)}},o(),"columnMenu"===r.col.filterContainer&&r.col.filterable&&f.$on("menu-shown",function(){r.$applyAsync(function(){n(r.col.filterable)})}),r.grid.registerDataChangeCallback(o,[h.dataChange.COLUMN]));r.$on("$destroy",i),r.handleClick=function(e){s.grid.sortColumn(r.col,e.shiftKey).then(function(){s.columnMenuScope&&s.columnMenuScope.hideMenu(),s.grid.refresh()}).catch(angular.noop)},r.headerCellArrowKeyDown=function(e){e.keyCode!==h.keymap.SPACE&&e.keyCode!==h.keymap.ENTER||(e.preventDefault(),r.toggleMenu(e))},r.toggleMenu=function(e){e.stopPropagation(),s.columnMenuScope.menuShown&&s.columnMenuScope.col===r.col?s.columnMenuScope.hideMenu():s.columnMenuScope.showMenu(r.col,t)}}}}}}])}(),function(){"use strict";angular.module("ui.grid").directive("uiGridHeader",["$templateCache","$compile","uiGridConstants","gridUtil","$timeout","ScrollEvent",function(e,s,t,c,r,u){return{restrict:"EA",replace:!0,require:["^uiGrid","^uiGridRenderContainer"],scope:!0,compile:function(){return{pre:function(r,i,e,t){var n=t[0],o=t[1];function l(){var e=(o.header=o.colContainer.header=i)[0].getElementsByClassName("ui-grid-header-canvas");0<e.length?o.headerCanvas=o.colContainer.headerCanvas=e[0]:o.headerCanvas=null}function a(){var e,t,r;n.grid.isScrollingHorizontally||(e=c.normalizeScrollLeft(o.headerViewport,n.grid),t=o.colContainer.scrollHorizontal(e),(r=new u(n.grid,null,o.colContainer,u.Sources.ViewPortScroll)).newScrollLeft=e,-1<t&&(r.x={percentage:t}),n.grid.scrollContainers(null,r))}r.grid=n.grid,r.colContainer=o.colContainer,l(),t=r.grid.options.showHeader?r.grid.options.headerTemplate||"ui-grid/ui-grid-header":"ui-grid/ui-grid-no-header",c.getTemplate(t).then(function(e){var t,e=angular.element(e),e=s(e)(r);i.replaceWith(e),i=e,l(),o&&(t=i[0].getElementsByClassName("ui-grid-header-viewport")[0])&&(o.headerViewport=t,angular.element(t).on("scroll",a),r.$on("$destroy",function(){angular.element(t).off("scroll",a)})),r.grid.queueRefresh()}).catch(angular.noop)},post:function(e,t,r,i){var n=i[0],o=i[1];n.grid;c.disableAnimations(t);i=(o.header=t)[0].getElementsByClassName("ui-grid-header-viewport")[0];i&&(o.headerViewport=i),n&&n.grid.registerStyleComputation({priority:15,func:function(){var e=o.colContainer.visibleColumnCache,t="",r=0;return e.forEach(function(e){t+=e.getColClassDefinition(),r+=e.drawnWidth}),o.colContainer.canvasWidth=r,t}})}}}}}])}(),angular.module("ui.grid").service("uiGridGridMenuService",["gridUtil","i18nService","uiGridConstants",function(n,o,t){var l={initialize:function(e,t){(t.gridMenuScope=e).grid=t,e.registeredMenuItems=[],e.$on("$destroy",function(){e.grid&&e.grid.gridMenuScope&&(e.grid.gridMenuScope=null),e.grid&&(e.grid=null),e.registeredMenuItems&&(e.registeredMenuItems=null)}),e.registeredMenuItems=[],t.api.registerMethod("core","addToGridMenu",l.addToGridMenu),t.api.registerMethod("core","removeFromGridMenu",l.removeFromGridMenu)},addToGridMenu:function(e,t){angular.isArray(t)?e.gridMenuScope?(e.gridMenuScope.registeredMenuItems=e.gridMenuScope.registeredMenuItems||[],e.gridMenuScope.registeredMenuItems=e.gridMenuScope.registeredMenuItems.concat(t)):n.logError("Asked to addToGridMenu, but gridMenuScope not present. Timing issue? Please log issue with ui-grid"):n.logError("addToGridMenu: menuItems must be an array, and is not, not adding any items")},removeFromGridMenu:function(e,r){var i=-1;e&&e.gridMenuScope&&e.gridMenuScope.registeredMenuItems.forEach(function(e,t){e.id===r&&(-1<i?n.logError("removeFromGridMenu: found multiple items with the same id, removing only the last"):i=t)}),-1<i&&e.gridMenuScope.registeredMenuItems.splice(i,1)},getMenuItems:function(t){var e=[],r=(t.grid.options.gridMenuCustomItems&&(angular.isArray(t.grid.options.gridMenuCustomItems)?e=e.concat(t.grid.options.gridMenuCustomItems):n.logError("gridOptions.gridMenuCustomItems must be an array, and is not")),[{title:o.getSafeText("gridMenu.clearAllFilters"),action:function(e){t.grid.clearAllFilters()},shown:function(){return t.grid.options.enableFiltering},order:100}]);return e=(e=e.concat(r)).concat(t.registeredMenuItems),(e=!1!==t.grid.options.gridMenuShowHideColumns?e.concat(l.showHideColumns(t)):e).sort(function(e,t){return e.order-t.order}),e},showHideColumns:function(r){var i=[];return r.grid.options.columnDefs&&0!==r.grid.options.columnDefs.length&&0!==r.grid.columns.length&&(r.grid.options.gridMenuTitleFilter=r.grid.options.gridMenuTitleFilter||function(e){return e},r.grid.options.columnDefs.forEach(function(e,t){(!1!==r.grid.options.enableHiding&&!1!==e.enableHiding||e.enableHiding)&&(t={icon:n(e),action:function(e){e.stopPropagation(),l.toggleColumnVisibility(this.context.gridCol),e.target&&e.target.firstChild&&("I"===angular.element(e.target)[0].nodeName?e.target.className=n(this.context.gridCol.colDef):e.target.firstChild.className=n(this.context.gridCol.colDef))},shown:function(){return!1!==this.context.gridCol.colDef.enableHiding},context:{gridCol:r.grid.getColumn(e.name||e.field)},leaveOpen:!0,order:301+t},l.setMenuItemTitle(t,e,r.grid),i.push(t))}),i.length)&&i.unshift({title:o.getSafeText("gridMenu.columns"),order:300,templateUrl:"ui-grid/ui-grid-menu-header-item"}),i;function n(e){return!0===(e=e).visible||void 0===e.visible?"ui-grid-icon-ok":"ui-grid-icon-cancel"}},setMenuItemTitle:function(t,e,r){r=r.options.gridMenuTitleFilter(e.displayName||n.readableColumnName(e.name)||e.field);"string"==typeof r?t.title=r:r.then?(t.title="",r.then(function(e){t.title=e},function(e){t.title=e}).catch(angular.noop)):(n.logError("Expected gridMenuTitleFilter to return a string or a promise, it has returned neither, bad config"),t.title="badconfig")},toggleColumnVisibility:function(e){e.colDef.visible=!(!0===e.colDef.visible||void 0===e.colDef.visible),e.grid.refresh(),e.grid.api.core.notifyDataChange(t.dataChange.COLUMN),e.grid.api.core.raise.columnVisibilityChanged(e)}};return l}]).directive("uiGridMenuButton",["gridUtil","uiGridConstants","uiGridGridMenuService","i18nService",function(n,o,l,a){return{priority:0,scope:!0,require:["^uiGrid"],templateUrl:"ui-grid/ui-grid-menu-button",replace:!0,link:function(t,e,r,i){i=i[0];t.i18n={aria:a.getSafeText("gridMenu.aria")},l.initialize(t,i.grid),t.shown=!1,t.toggleOnKeydown=function(e){(e.keyCode===o.keymap.ENTER||e.keyCode===o.keymap.SPACE||e.keyCode===o.keymap.ESC&&t.shown)&&t.toggleMenu()},t.toggleMenu=function(){t.shown?(t.$broadcast("hide-menu"),t.shown=!1):(t.menuItems=l.getMenuItems(t),t.$broadcast("show-menu"),t.shown=!0)},t.$on("menu-hidden",function(){t.shown=!1,n.focus.bySelector(e,".ui-grid-icon-container")})}}}]),angular.module("ui.grid").directive("uiGridMenu",["$compile","$timeout","$window","$document","gridUtil","uiGridConstants","i18nService",function(a,s,c,e,u,d,g){return{priority:0,scope:{menuItems:"=",autoHide:"=?",col:"=?"},require:"?^uiGrid",templateUrl:"ui-grid/uiGridMenu",replace:!1,link:function(n,o,e,r){function l(e){e=e-r.grid.headerHeight-20,n.dynamicStyles=[".grid"+r.grid.id+" .ui-grid-menu-mid {","max-height: "+e+"px;","}"].join(" ")}n.dynamicStyles="",r&&r.grid&&r.grid.options&&r.grid.options.gridMenuTemplate&&(t=r.grid.options.gridMenuTemplate,u.getTemplate(t).then(function(e){e=angular.element(e),e=a(e)(n);o.replaceWith(e)}).catch(angular.noop));r&&(l(r.grid.gridHeight),r.grid.api.core.on.gridDimensionChanged(n,function(e,t,r,i){l(r)})),n.i18n={close:g.getSafeText("columnMenu.close")},n.showMenu=function(e,t){n.shown?n.shownMid||(n.shownMid=!0,n.$emit("menu-shown")):(n.shown=!0,s(function(){n.shownMid=!0,n.$emit("menu-shown")}));var r="click";t&&t.originalEvent&&t.originalEvent.type&&"touchstart"===t.originalEvent.type&&(r=t.originalEvent.type),angular.element(document).off("click touchstart",i),s(function(){angular.element(document).on(r,i)})},n.hideMenu=function(e){n.shown&&(n.shownMid=!1,s(function(){n.shownMid||(n.shown=!1,n.$emit("menu-hidden"))},40)),angular.element(document).off("click touchstart",i)},n.$on("hide-menu",function(e,t){n.hideMenu(e,t)}),n.$on("show-menu",function(e,t){n.showMenu(e,t)});var t,i=function(e){if(n.shown){var t=r&&r.grid&&r.grid.options?r.grid.options.disableGridMenuHideOnScroll:null;if("scroll"!==e.type||!t){if(n.col&&"columnMenu"===n.col.filterContainer){t=document.querySelector(".ui-grid-column-menu").querySelector("[ui-grid-filter]");if(t&&t.contains(e.target))return!1}n.$apply(function(){n.hideMenu()})}}};n.checkKeyDown=function(t){function e(e){e.focus(),t.preventDefault()}var r,i;t.keyCode===d.keymap.ESC?n.hideMenu():t.keyCode===d.keymap.TAB&&0<(i=o[0].querySelectorAll("button:not(.ng-hide)")).length&&(r=i[0],i=i[i.length-1],t.target.parentElement.id!==i.parentElement.id||t.shiftKey?t.target.parentElement.id===r.parentElement.id&&t.shiftKey&&e(i):e(r))},void 0!==n.autoHide&&void 0!==n.autoHide||(n.autoHide=!0),n.autoHide&&angular.element(c).on("resize",i),n.$on("$destroy",function(){angular.element(c).off("resize",i),angular.element(document).off("click touchstart",i)}),r&&n.$on("$destroy",r.grid.api.core.on.scrollBegin(n,i)),n.$on("$destroy",n.$on(d.events.ITEM_DRAGGING,i))}}}]).directive("uiGridMenuItem",["gridUtil","$compile","i18nService",function(o,i,l){return{priority:0,scope:{name:"=",active:"=",action:"=",icon:"=",shown:"=",context:"=",templateUrl:"=",leaveOpen:"=",screenReaderOnly:"="},require:["?^uiGrid"],templateUrl:"ui-grid/uiGridMenuItem",replace:!1,compile:function(){return{pre:function(t,r){t.templateUrl&&o.getTemplate(t.templateUrl).then(function(e){e=angular.element(e),e=i(e)(t);r.replaceWith(e)}).catch(angular.noop)},post:function(i,e,t,r){var n=r[0];void 0!==i.shown&&null!==i.shown||(i.shown=function(){return!0}),i.itemShown=function(){var e={};return i.context&&(e.context=i.context),void 0!==n&&n&&(e.grid=n.grid),i.shown.call(e)},i.itemAction=function(e,t){var r;e.stopPropagation(),"function"==typeof i.action&&(r={},i.context&&(r.context=i.context),void 0!==n&&n&&(r.grid=n.grid),i.action.call(r,e,t),i.leaveOpen?(r=e.target.parentElement,"I"===angular.element(e.target)[0].nodeName&&(r=r.parentElement),o.focus.bySelector(r,"button[type=button]",!0)):i.$emit("hide-menu"))},i.label=function(){var e=i.name;return e="function"==typeof i.name?i.name.call():e},i.i18n=l.get()}}}}}]),function(){"use strict";var t=angular.module("ui.grid");angular.forEach([{tag:"Src",method:"attr"},{tag:"Text",method:"text"},{tag:"Href",method:"attr"},{tag:"Class",method:"addClass"},{tag:"Html",method:"html"},{tag:"Alt",method:"attr"},{tag:"Style",method:"css"},{tag:"Value",method:"attr"},{tag:"Id",method:"attr"},{tag:"Id",directiveName:"IdGrid",method:"attr",appendGridId:!0},{tag:"Title",method:"attr"},{tag:"Label",method:"attr",aria:!0},{tag:"Labelledby",method:"attr",aria:!0},{tag:"Labelledby",directiveName:"LabelledbyGrid",appendGridId:!0,method:"attr",aria:!0},{tag:"Describedby",method:"attr",aria:!0},{tag:"Describedby",directiveName:"DescribedbyGrid",appendGridId:!0,method:"attr",aria:!0}],function(c){var e="uiGridOneBind",u=(c.aria?e+"Aria":e)+(c.directiveName||c.tag);t.directive(u,["gridUtil",function(s){return{restrict:"A",require:["?uiGrid","?^uiGrid"],link:function(n,o,e,l){var a=n.$watch(e[u],function(e){if(e){var t;switch(c.appendGridId&&(t=null,angular.forEach(e.split(" "),function(e){t=(t?t+" ":"")+function(e){var t;if(n.grid)t=n.grid;else if(n.col&&n.col.grid)t=n.col.grid;else if(!l.some(function(e){if(e&&e.grid)return t=e.grid,!0}))throw s.logError("["+u+"] A valid grid could not be found to bind id. Are you using this directive within the correct scope? Trying to generate id: [gridID]-"+e),new Error("No valid grid could be found");return e=t&&!new RegExp(t.id.toString()).test(e)?t.id.toString()+"-"+e:e}(e)}),e=t),c.method){case"attr":c.aria?o[c.method]("aria-"+c.tag.toLowerCase(),e):o[c.method](c.tag.toLowerCase(),e);break;case"addClass":if(angular.isObject(e)&&!angular.isArray(e)){var r=[],i=!1;if(angular.forEach(e,function(e,t){null!=e&&(i=!0,e)&&r.push(t)}),!i)return;e=r}if(!e)return;o.addClass(angular.isArray(e)?e.join(" "):e);break;default:o[c.method](e)}a()}},!0)}}}])})}(),function(){"use strict";var e=angular.module("ui.grid");e.directive("uiGridRenderContainer",["$timeout","$document","uiGridConstants","gridUtil","ScrollEvent",function(e,t,r,h,p){return{replace:!0,transclude:!0,templateUrl:"ui-grid/uiGridRenderContainer",require:["^uiGrid","uiGridRenderContainer"],scope:{containerId:"=",rowContainerName:"=",colContainerName:"=",bindScrollHorizontal:"=",bindScrollVertical:"=",enableVerticalScrollbar:"=",enableHorizontalScrollbar:"="},controller:"uiGridRenderContainer as RenderContainer",compile:function(){return{pre:function(e,t,r,i){var n,o=i[0],i=i[1],o=e.grid=o.grid;if(!e.rowContainerName)throw new Error("No row render container name specified");if(!e.colContainerName)throw new Error("No column render container name specified");if(!o.renderContainers[e.rowContainerName])throw new Error('Row render container "'+e.rowContainerName+'" is not registered.');if(!o.renderContainers[e.colContainerName])throw new Error('Column render container "'+e.colContainerName+'" is not registered.');n=e.rowContainer=o.renderContainers[e.rowContainerName],o=e.colContainer=o.renderContainers[e.colContainerName],i.containerId=e.containerId,i.rowContainer=n,i.colContainer=o},post:function(a,t,e,r){var s=r[0],n=r[1],c=s.grid,u=n.rowContainer,d=n.colContainer,o=null,l=null,g=c.renderContainers[a.containerId];t.addClass("ui-grid-render-container-"+a.containerId),h.on.mousewheel(t,function(e){var t,r,i=new p(c,u,d,p.Sources.RenderContainerMouseWheel);0!==e.deltaY&&(r=-1*e.deltaY*e.deltaFactor,o=n.viewport[0].scrollTop,i.verticalScrollLength=u.getVerticalScrollLength(),1<=(t=(o+r)/i.verticalScrollLength)&&o<i.verticalScrollLength&&(n.viewport[0].scrollTop=i.verticalScrollLength),t<0?t=0:1<t&&(t=1),i.y={percentage:t,pixels:r}),0!==e.deltaX&&(t=e.deltaX*e.deltaFactor,l=h.normalizeScrollLeft(n.viewport,c),i.horizontalScrollLength=d.getCanvasWidth()-d.getViewportWidth(),(r=(l+t)/i.horizontalScrollLength)<0?r=0:1<r&&(r=1),i.x={percentage:r,pixels:t}),0!==e.deltaY&&(i.atTop(o)||i.atBottom(o))||0!==e.deltaX&&(i.atLeft(l)||i.atRight(l))||(e.preventDefault(),e.stopPropagation(),i.fireThrottledScrollingEvent("",i))}),t.bind("$destroy",function(){t.unbind("keydown"),["touchstart","touchmove","touchend","keydown","wheel","mousewheel","DomMouseScroll","MozMousePixelScroll"].forEach(function(e){t.unbind(e)})}),s.grid.registerStyleComputation({priority:6,func:function(){var e,t,r="",i=d.canvasWidth,n=d.getViewportWidth(),o=u.getCanvasHeight(),l=u.getViewportHeight();return d.needsHScrollbarPlaceholder()&&(l-=c.scrollbarHeight),e=t=d.getHeaderViewportWidth(),r=(r+="\n .grid"+s.grid.id+" .ui-grid-render-container-"+a.containerId+" .ui-grid-canvas { width: "+i+"px; height: "+o+"px; }")+("\n .grid"+s.grid.id+" .ui-grid-render-container-"+a.containerId+" .ui-grid-header-canvas { width: "+(i+c.scrollbarWidth)+"px; }"),g.explicitHeaderCanvasHeight?((o=document.querySelector(".grid"+s.grid.id+" .ui-grid-render-container-body .ui-grid-header-canvas"))&&(g.explicitHeaderCanvasHeight=o.offsetHeight),r+="\n .grid"+s.grid.id+" .ui-grid-render-container-"+a.containerId+" .ui-grid-header-canvas { height: "+g.explicitHeaderCanvasHeight+"px; }"):r+="\n .grid"+s.grid.id+" .ui-grid-render-container-"+a.containerId+" .ui-grid-header-canvas { height: inherit; }",r=(r=(r=(r+="\n .grid"+s.grid.id+" .ui-grid-render-container-"+a.containerId+" .ui-grid-viewport { width: "+n+"px; height: "+l+"px; }")+("\n .grid"+s.grid.id+" .ui-grid-render-container-"+a.containerId+" .ui-grid-header-viewport { width: "+e+"px; }"))+("\n .grid"+s.grid.id+" .ui-grid-render-container-"+a.containerId+" .ui-grid-footer-canvas { width: "+(i+c.scrollbarWidth)+"px; }"))+("\n .grid"+s.grid.id+" .ui-grid-render-container-"+a.containerId+" .ui-grid-footer-viewport { width: "+t+"px; }")}})}}}}}]),e.controller("uiGridRenderContainer",["$scope","gridUtil",function(e,t){}])}(),function(){"use strict";angular.module("ui.grid").directive("uiGridRow",function(){return{replace:!0,require:["^uiGrid","^uiGridRenderContainer"],scope:{row:"=uiGridRow",rowRenderIndex:"="},compile:function(){return{pre:function(t,i,e,r){var n,o,l=r[0],r=r[1];function a(){t.row.getRowTemplateFn.then(function(e){var r=t.$new();e(r,function(e,t){n&&(n.remove(),o.$destroy()),i.empty().append(e),n=e,o=r})}).catch(angular.noop)}t.grid=l.grid,t.colContainer=r.colContainer,a(),t.$watch("row.getRowTemplateFn",function(e,t){e!==t&&a()})},post:function(e,t){e.row.element=t}}}}})}(),angular.module("ui.grid").directive("uiGridStyle",["gridUtil","$interpolate",function(e,i){return{link:function(e,r){var t=i(r.text(),!0);t&&e.$watch(t,function(e){for(var t=0;t<r.length;t++)r[t].textContent=e})}}}]),function(){"use strict";angular.module("ui.grid").directive("uiGridViewport",["gridUtil","ScrollEvent",function(u,d){return{replace:!0,scope:{},controllerAs:"Viewport",templateUrl:"ui-grid/uiGridViewport",require:["^uiGrid","^uiGridRenderContainer"],link:function(o,l,e,t){var r=t[0],i=t[1],a=(o.containerCtrl=i).rowContainer,s=i.colContainer,c=r.grid;o.grid=r.grid,o.rowContainer=i.rowContainer,o.colContainer=i.colContainer,i.viewport=l,c&&c.options&&c.options.customScroller?c.options.customScroller(l,n):l.on("scroll",n);function n(){var e=l[0].scrollTop,t=u.normalizeScrollLeft(l,c),r=a.scrollVertical(e),i=s.scrollHorizontal(t),n=new d(c,a,s,d.Sources.ViewPortScroll);n.newScrollLeft=t,n.newScrollTop=e,-1<i&&(n.x={percentage:i}),-1<r&&(n.y={percentage:r}),c.scrollContainers(o.$parent.containerId,n)}o.$parent.bindScrollVertical&&c.addVerticalScrollSync(o.$parent.containerId,function(e){i.prevScrollArgs=e,l[0].scrollTop=e.getNewScrollTop(a,i.viewport)}),o.$parent.bindScrollHorizontal&&(c.addHorizontalScrollSync(o.$parent.containerId,function(e){e=(i.prevScrollArgs=e).getNewScrollLeft(s,i.viewport);l[0].scrollLeft=u.denormalizeScrollLeft(i.viewport,e,c)}),c.addHorizontalScrollSync(o.$parent.containerId+"header",function(e){e=e.getNewScrollLeft(s,i.viewport);i.headerViewport&&(i.headerViewport.scrollLeft=u.denormalizeScrollLeft(i.viewport,e,c))}),c.addHorizontalScrollSync(o.$parent.containerId+"footer",function(e){e=e.getNewScrollLeft(s,i.viewport);i.footerViewport&&(i.footerViewport.scrollLeft=u.denormalizeScrollLeft(i.viewport,e,c))})),o.$on("$destroy",function(){l.off()})},controller:["$scope",function(i){this.rowStyle=function(){var e=i.rowContainer,t=i.colContainer,r={};return 0!==e.currentTopRow&&(e="translateY("+e.currentTopRow*e.grid.options.rowHeight+"px)",r.transform=e,r["-webkit-transform"]=e,r["-ms-transform"]=e),0!==t.currentFirstColumn&&(t.grid.isRTL()?r["margin-right"]=t.columnOffset+"px":r["margin-left"]=t.columnOffset+"px"),r}}]}}])}(),angular.module("ui.grid").directive("uiGridVisible",function(){return function(e,t,r){e.$watch(r.uiGridVisible,function(e){t[e?"removeClass":"addClass"]("ui-grid-invisible")})}}),function(){"use strict";function e(g,h,p){return{templateUrl:"ui-grid/ui-grid",scope:{uiGrid:"="},replace:!0,transclude:!0,controller:"uiGridController",compile:function(){return{post:function(o,l,e,a){var t,r,s=a.grid,i=(a.scrollbars=[],s.element=l,100),n=20,c=0;function u(){var e,t,r,i,n;s.gridWidth=o.gridWidth=h.elementWidth(l),s.canvasWidth=a.grid.gridWidth,s.gridHeight=o.gridHeight=h.elementHeight(l),s.gridHeight-s.scrollbarHeight<=s.options.rowHeight&&s.options.enableMinHeightCheck&&(e=s.options.minRowsToShow*s.options.rowHeight,t=s.options.showHeader?s.options.headerRowHeight:0,r=s.calcFooterHeight(),i=0,s.options.enableHorizontalScrollbar===p.scrollbars.ALWAYS&&(i=h.getScrollbarWidth()),n=0,angular.forEach(s.options.columnDefs,function(e){e.hasOwnProperty("filter")?n<1&&(n=1):e.hasOwnProperty("filters")&&n<e.filters.length&&(n=e.filters.length)}),!s.options.enableFiltering||n||s.options.columnDefs.length&&s.options.columnDefs.every(function(e){return!1===e.enableFiltering})||(n=1),e=t+e+r+i+n*t,l.css("height",e+"px"),s.gridHeight=o.gridHeight=h.elementHeight(l)),s.refreshCanvas(!0)}function d(){h.isVisible(l)&&(s.gridWidth=o.gridWidth=h.elementWidth(l),s.gridHeight=o.gridHeight=h.elementHeight(l),s.refreshCanvas(!0))}angular.element(g).on("resize",d),l.on("$destroy",function(){angular.element(g).off("resize",d),t(),r()}),t=o.$watch(function(){return s.hasLeftContainer()},function(e,t){e!==t&&s.refreshCanvas(!0)}),r=o.$watch(function(){return s.hasRightContainer()},function(e,t){e!==t&&s.refreshCanvas(!0)}),u(),s.renderingComplete(),function e(){l[0].offsetWidth<=0&&c<n?(setTimeout(e,i),c++):o.$applyAsync(u)}()}}}}}angular.module("ui.grid").controller("uiGridController",["$scope","$element","$attrs","gridUtil","$q","uiGridConstants","gridClassFactory","$parse","$compile",function(i,e,n,t,o,l,r,a,s){var c,u=this,d=[];function g(e){return e?e.length:0}function h(e,t){e&&e!==t&&(u.grid.options.columnDefs=i.uiGrid.columnDefs,u.grid.callDataChangeCallbacks(l.dataChange.COLUMN,{orderByColumnDefs:!0,preCompileCellTemplates:!0}))}function p(e){var t,r=[];u.grid.options.fastWatch&&(e=angular.isString(i.uiGrid.data)?u.grid.appScope.$eval(i.uiGrid.data):i.uiGrid.data),(c=e)&&(!(t=u.grid.columns.length>(u.grid.rowHeaderColumns?u.grid.rowHeaderColumns.length:0))&&!n.uiGridColumns&&0===u.grid.options.columnDefs.length&&0<e.length&&u.grid.buildColumnDefsFromData(e),!t&&(0<u.grid.options.columnDefs.length||0<e.length)&&r.push(u.grid.buildColumns().then(function(){u.grid.preCompileCellTemplates()}).catch(angular.noop)),o.all(r).then(function(){u.grid.modifyRows(c).then(function(){u.grid.redrawInPlace(!0),i.$evalAsync(function(){u.grid.refreshCanvas(!0),u.grid.callDataChangeCallbacks(l.dataChange.ROW)})}).catch(angular.noop)}).catch(angular.noop))}u.grid=r.createGrid(i.uiGrid),u.grid.appScope=u.grid.appScope||i.$parent,e.addClass("grid"+u.grid.id),u.grid.rtl="rtl"===t.getStyles(e[0]).direction,i.grid=u.grid,n.uiGridColumns&&d.push(n.$observe("uiGridColumns",function(e){u.grid.options.columnDefs=angular.isString(e)?angular.fromJson(e):e,u.grid.buildColumns().then(function(){u.grid.preCompileCellTemplates(),u.grid.refreshCanvas(!0)}).catch(angular.noop)})),u.grid.options.fastWatch?(u.uiGrid=i.uiGrid,angular.isString(i.uiGrid.data)?(d.push(i.$parent.$watch(i.uiGrid.data,p)),d.push(i.$parent.$watch(function(){if(u.grid.appScope[i.uiGrid.data])return u.grid.appScope[i.uiGrid.data].length},p))):(d.push(i.$parent.$watch(function(){return i.uiGrid.data},p)),d.push(i.$parent.$watch(function(){return g(i.uiGrid.data)},function(){p(i.uiGrid.data)}))),d.push(i.$parent.$watch(function(){return i.uiGrid.columnDefs},h)),d.push(i.$parent.$watch(function(){return g(i.uiGrid.columnDefs)},function(){h(i.uiGrid.columnDefs)}))):(angular.isString(i.uiGrid.data)?d.push(i.$parent.$watchCollection(i.uiGrid.data,p)):d.push(i.$parent.$watchCollection(function(){return i.uiGrid.data},p)),d.push(i.$parent.$watchCollection(function(){return i.uiGrid.columnDefs},h)));var f=i.$watch(function(){return u.grid.styleComputations},function(){u.grid.refreshCanvas(!0)});i.$on("$destroy",function(){d.forEach(function(e){e()}),f()}),u.fireEvent=function(e,t){t=t||{},angular.isUndefined(t.grid)&&(t.grid=u.grid),i.$broadcast(e,t)},u.innerCompile=function(e){s(e)(i)}}]),angular.module("ui.grid").directive("uiGrid",e),e.$inject=["$window","gridUtil","uiGridConstants"]}(),function(){"use strict";angular.module("ui.grid").directive("uiGridPinnedContainer",["gridUtil",function(e){return{restrict:"EA",replace:!0,template:'<div class="ui-grid-pinned-container"><div ui-grid-render-container container-id="side" row-container-name="\'body\'" col-container-name="side" bind-scroll-vertical="true" class="{{ side }} ui-grid-render-container-{{ side }}"></div></div>',scope:{side:"=uiGridPinnedContainer"},require:"^uiGrid",compile:function(){return{post:function(n,t,e,r){var o=r.grid,i=0;function l(){if("left"===n.side||"right"===n.side){for(var e=o.renderContainers[n.side].visibleColumnCache,t=0,r=0;r<e.length;r++){var i=e[r];t+=i.drawnWidth||i.width||0}return t}}t.addClass("ui-grid-pinned-container-"+n.side),"left"!==n.side&&"right"!==n.side||(o.renderContainers[n.side].getViewportWidth=function(){var t=0,e=(this.visibleColumnCache.forEach(function(e){t+=e.drawnWidth}),this.getViewportAdjustment());return t+=e.width}),o.renderContainers.body.registerViewportAdjuster(function(e){return i=l(),e.width-=i,e.side=n.side,e}),o.registerStyleComputation({priority:15,func:function(){var e="";return"left"!==n.side&&"right"!==n.side||(i=l(),t.attr("style",null),e+=".grid"+o.id+" .ui-grid-pinned-container-"+n.side+", .grid"+o.id+" .ui-grid-pinned-container-"+n.side+" .ui-grid-render-container-"+n.side+" .ui-grid-viewport { width: "+i+"px; } "),e}})}}}}}])}(),angular.module("ui.grid").config(["$provide",function(e){e.decorator("i18nService",["$delegate",function(e){return e.add("en",{headerCell:{aria:{defaultFilterLabel:"Filter for column",removeFilter:"Remove Filter",columnMenuButtonLabel:"Column Menu",column:"Column"},priority:"Priority:",filterLabel:"Filter for column: "},aggregate:{label:"items"},groupPanel:{description:"Drag a column header here and drop it to group by that column."},search:{aria:{selected:"Row selected",notSelected:"Row not selected"},placeholder:"Search...",showingItems:"Showing Items:",selectedItems:"Selected Items:",totalItems:"Total Items:",size:"Page Size:",first:"First Page",next:"Next Page",previous:"Previous Page",last:"Last Page"},selection:{aria:{row:"Row"},selectAll:"Select All",displayName:"Row Selection Checkbox"},menu:{text:"Choose Columns:"},sort:{ascending:"Sort Ascending",descending:"Sort Descending",none:"Sort None",remove:"Remove Sort"},column:{hide:"Hide Column"},aggregation:{count:"total rows: ",sum:"total: ",avg:"avg: ",min:"min: ",max:"max: "},pinning:{pinLeft:"Pin Left",pinRight:"Pin Right",unpin:"Unpin"},columnMenu:{close:"Close"},gridMenu:{aria:{buttonLabel:"Grid Menu"},columns:"Columns:",importerTitle:"Import file",exporterAllAsCsv:"Export all data as csv",exporterVisibleAsCsv:"Export visible data as csv",exporterSelectedAsCsv:"Export selected data as csv",exporterAllAsPdf:"Export all data as pdf",exporterVisibleAsPdf:"Export visible data as pdf",exporterSelectedAsPdf:"Export selected data as pdf",exporterAllAsExcel:"Export all data as excel",exporterVisibleAsExcel:"Export visible data as excel",exporterSelectedAsExcel:"Export selected data as excel",clearAllFilters:"Clear all filters"},importer:{noHeaders:"Column names were unable to be derived, does the file have a header?",noObjects:"Objects were not able to be derived, was there data in the file other than headers?",invalidCsv:"File was unable to be processed, is it valid CSV?",invalidJson:"File was unable to be processed, is it valid Json?",jsonNotArray:"Imported json file must contain an array, aborting."},pagination:{aria:{pageToFirst:"Page to first",pageBack:"Page back",pageSelected:"Selected page",pageForward:"Page forward",pageToLast:"Page to last"},sizes:"items per page",totalItems:"items",through:"through",of:"of"},grouping:{group:"Group",ungroup:"Ungroup",aggregate_count:"Agg: Count",aggregate_sum:"Agg: Sum",aggregate_max:"Agg: Max",aggregate_min:"Agg: Min",aggregate_avg:"Agg: Avg",aggregate_remove:"Agg: Remove"},validate:{error:"Error:",minLength:"Value should be at least THRESHOLD characters long.",maxLength:"Value should be at most THRESHOLD characters long.",required:"A value is needed."}}),e}])}]),angular.module("ui.grid").factory("Grid",["$q","$compile","$parse","gridUtil","uiGridConstants","GridOptions","GridColumn","GridRow","GridApi","rowSorter","rowSearcher","GridRenderContainer","$timeout","ScrollEvent",function(v,r,n,h,s,c,u,d,g,p,t,f,i,C){function e(e){var r=this;if(void 0===e||void 0===e.id||!e.id)throw new Error("No ID provided. An ID must be given when creating a grid.");if(!/^[_a-zA-Z0-9-]+$/.test(e.id))throw new Error("Grid id '"+e.id+'" is invalid. It must follow CSS selector syntax rules.');function t(e){r.isScrollingVertically=!1,r.api.core.raise.scrollEnd(e),r.scrollDirection=s.scrollDirection.NONE}r.id=e.id,delete e.id,r.options=c.initialize(e),r.appScope=r.options.appScopeProvider,r.headerHeight=r.options.headerRowHeight,r.footerHeight=r.calcFooterHeight(),r.columnFooterHeight=r.calcColumnFooterHeight(),r.rtl=!1,r.gridHeight=0,r.gridWidth=0,r.columnBuilders=[],r.rowBuilders=[],r.rowsProcessors=[],r.columnsProcessors=[],r.styleComputations=[],r.viewportAdjusters=[],r.rowHeaderColumns=[],r.dataChangeCallbacks={},r.verticalScrollSyncCallBackFns={},r.horizontalScrollSyncCallBackFns={},r.renderContainers={},r.renderContainers.body=new f("body",r),r.cellValueGetterCache={},r.getRowTemplateFn=null,r.rows=[],r.columns=[],r.isScrollingVertically=!1,r.isScrollingHorizontally=!1,r.scrollDirection=s.scrollDirection.NONE,r.disableScrolling=!1;var i=h.debounce(t,r.options.scrollDebounce),n=h.debounce(t,0);function o(e){r.isScrollingHorizontally=!1,r.api.core.raise.scrollEnd(e),r.scrollDirection=s.scrollDirection.NONE}var l=h.debounce(o,r.options.scrollDebounce),a=h.debounce(o,0);r.flagScrollingVertically=function(e){r.isScrollingVertically||r.isScrollingHorizontally||r.api.core.raise.scrollBegin(e),r.isScrollingVertically=!0,(0!==r.options.scrollDebounce&&e.withDelay?i:n)(e)},r.flagScrollingHorizontally=function(e){r.isScrollingVertically||r.isScrollingHorizontally||r.api.core.raise.scrollBegin(e),r.isScrollingHorizontally=!0,(0!==r.options.scrollDebounce&&e.withDelay?l:a)(e)},r.scrollbarHeight=0,r.scrollbarWidth=0,r.options.enableHorizontalScrollbar!==s.scrollbars.NEVER&&(r.scrollbarHeight=h.getScrollbarWidth()),r.options.enableVerticalScrollbar!==s.scrollbars.NEVER&&(r.scrollbarWidth=h.getScrollbarWidth()),r.api=new g(r),r.api.registerMethod("core","refresh",this.refresh),r.api.registerMethod("core","queueGridRefresh",this.queueGridRefresh),r.api.registerMethod("core","refreshRows",this.refreshRows),r.api.registerMethod("core","queueRefresh",this.queueRefresh),r.api.registerMethod("core","handleWindowResize",this.handleWindowResize),r.api.registerMethod("core","addRowHeaderColumn",this.addRowHeaderColumn),r.api.registerMethod("core","scrollToIfNecessary",function(e,t){return r.scrollToIfNecessary(e,t)}),r.api.registerMethod("core","scrollTo",function(e,t){return r.scrollTo(e,t)}),r.api.registerMethod("core","registerRowsProcessor",this.registerRowsProcessor),r.api.registerMethod("core","registerColumnsProcessor",this.registerColumnsProcessor),r.api.registerMethod("core","sortHandleNulls",p.handleNulls),r.api.registerEvent("core","sortChanged"),r.api.registerEvent("core","columnVisibilityChanged"),r.api.registerMethod("core","notifyDataChange",this.notifyDataChange),r.api.registerMethod("core","clearAllFilters",this.clearAllFilters),r.registerDataChangeCallback(r.columnRefreshCallback,[s.dataChange.COLUMN]),r.registerDataChangeCallback(r.processRowsCallback,[s.dataChange.EDIT]),r.registerDataChangeCallback(r.updateFooterHeightCallback,[s.dataChange.OPTIONS]),r.registerStyleComputation({priority:10,func:r.getFooterStyles})}e.prototype.calcFooterHeight=function(){var e;return this.hasFooter()?(e=0,this.options.showGridFooter&&(e+=this.options.gridFooterHeight),e+this.calcColumnFooterHeight()):0},e.prototype.calcColumnFooterHeight=function(){var e=0;return this.options.showColumnFooter&&(e+=this.options.columnFooterHeight),e},e.prototype.getFooterStyles=function(){var e=".grid"+this.id+" .ui-grid-footer-aggregates-row { height: "+this.options.columnFooterHeight+"px; }";return e+=" .grid"+this.id+" .ui-grid-footer-info { height: "+this.options.gridFooterHeight+"px; }"},e.prototype.hasFooter=function(){return this.options.showGridFooter||this.options.showColumnFooter},e.prototype.isRTL=function(){return this.rtl},e.prototype.registerColumnBuilder=function(e){this.columnBuilders.push(e)},e.prototype.buildColumnDefsFromData=function(e){this.options.columnDefs=h.getColumnsFromData(e,this.options.excludeProperties)},e.prototype.registerRowBuilder=function(e){this.rowBuilders.push(e)},e.prototype.registerDataChangeCallback=function(e,t,r){var i=this,n=h.nextUid();return t=t||[s.dataChange.ALL],Array.isArray(t)||h.logError("Expected types to be an array or null in registerDataChangeCallback, value passed was: "+t),this.dataChangeCallbacks[n]={callback:e,types:t,_this:r},function(){delete i.dataChangeCallbacks[n]}},e.prototype.callDataChangeCallbacks=function(r,i){angular.forEach(this.dataChangeCallbacks,function(e,t){-1===e.types.indexOf(s.dataChange.ALL)&&-1===e.types.indexOf(r)&&r!==s.dataChange.ALL||(e._this?e.callback.apply(e._this,this,i):e.callback(this,i))},this)},e.prototype.notifyDataChange=function(e){var t=s.dataChange;e===t.ALL||e===t.COLUMN||e===t.EDIT||e===t.ROW||e===t.OPTIONS?this.callDataChangeCallbacks(e):h.logError("Notified of a data change, but the type was not recognised, so no action taken, type was: "+e)},e.prototype.columnRefreshCallback=function(e,t){e.buildColumns(t),e.queueGridRefresh()},e.prototype.processRows