-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathap-mesa.min.js
2 lines (2 loc) · 36.9 KB
/
ap-mesa.min.js
1
2
"use strict";angular.module("apMesa",["apMesa.templates","ui.sortable","ngSanitize","apMesa.directives.apMesa"]),angular.module("apMesa.controllers.ApMesaController",["apMesa.services.apMesaSortFunctions","apMesa.services.apMesaFilterFunctions","apMesa.services.apMesaFormatFunctions"]).controller("ApMesaController",["$scope","$element","apMesaFormatFunctions","apMesaSortFunctions","apMesaFilterFunctions","$log","$window","$filter","$timeout","$q",function(a,b,c,d,e,f,g,h,i,j){function k(b){for(var c=a.persistentState.sortOrder.length,d=0;c>d;d++)if(a.persistentState.sortOrder[d].id===b)return d}function l(b){var c=k(b);return c>-1?a.persistentState.sortOrder[c]:void 0}var m={minWidth:40};a.getSelectableRows=function(){var b=h("apMesaRowFilter");return angular.isArray(a.rows)?b(a.rows,a.columns,a.persistentState,a.transientState):[]},a.isSelectedAll=function(){if(!angular.isArray(a.rows)||!angular.isArray(a.selected))return!1;var b=a.getSelectableRows();return b.length>0&&b.length===a.selected.length},a.selectAll=function(){a.deselectAll();var b=a.getSelectableRows();if(!(b.length<=0)){for(var c=a.columns,d=null,e=null,f=0;f<c.length;f++)if(c[f].selector){d=c[f].key,e=c[f].selectObject;break}if(!d)throw new Error("Unable to find selector column key for selectAll");for(var f=0;f<b.length;f++)a.selected.push(e?b[f]:b[f][d])}},a.deselectAll=function(){for(;a.selected.length>0;)a.selected.pop()},a.toggleSelectAll=function(b){var c=b.target;c.checked?a.selectAll():a.deselectAll()},a.addSort=function(b,c){var d=l(b);d?d.dir=c:a.persistentState.sortOrder.push({id:b,dir:c})},a.removeSort=function(b){var c=k(b);-1!==c&&a.persistentState.sortOrder.splice(c,1)},a.clearSort=function(){a.persistentState.sortOrder=[]},a.hasFilterFields=function(){if(!a.columns)return!1;for(var b=a.columns.length-1;b>=0;b--)if("undefined"!=typeof a.columns[b].filter)return!0;return!1},a.clearAndFocusSearch=function(c){a.persistentState.searchTerms[c]="",b.find("tr.ap-mesa-filter-row th.column-"+c+" input").focus()},a.toggleSort=function(b,c){if(c.sort){var d=l(c.id);if(b.shiftKey)d?"+"===d.dir?d.dir="-":"-"===d.dir&&a.removeSort(c.id):a.addSort(c.id,"+");else{var e=d?d.dir:"";a.clearSort(),"+"===e?a.addSort(c.id,"-"):a.addSort(c.id,"+")}a.saveToStorage()}},a.getSortClass=function(b){var c=a.options.sortClasses;return"+"===b?c[1]:"-"===b?c[2]:c[0]},a.setColumns=function(b){try{a.columns=b;var g=a.transientState.columnLookup={};a.columns.forEach(function(b){var i=b.format;if("function"!=typeof i)if("string"==typeof i)if("function"==typeof c[i])b.format=c[i];else try{b.format=h(i)}catch(j){delete b.format,f.warn("format function reference in column(id="+b.id+') was not found in built-in format functions or $filters. format function given: "'+i+'". Available built-ins: '+Object.keys(c).join(",")+". If you supplied a $filter, ensure it is available on this module")}else delete b.format;if(!a.options.getData){var k=b.sort;"function"!=typeof k&&("string"==typeof k?"function"==typeof d[k]?b.sort=d[k](b.key):(delete b.sort,f.warn("sort function reference in column(id="+b.id+') was not found in built-in sort functions. sort function given: "'+k+'". Available built-ins: '+Object.keys(d).join(",")+". ")):delete b.sort);var l=b.filter;"function"!=typeof l&&("string"==typeof l?"function"==typeof e[l]?b.filter=e[l]:(delete b.filter,f.warn("filter function reference in column(id="+b.id+') was not found in built-in filter functions. filter function given: "'+l+'". Available built-ins: '+Object.keys(e).join(",")+". ")):delete b.filter)}g[b.id]=b}),angular.isArray(a.enabledColumns)?a.enabledColumns.some(function(a){return!g[a]})&&(a.enabledColumns=void 0):a.enabledColumns=a.columns.map(function(a){return a.id})}catch(i){console.log(i.message)}},a.startColumnResize=function(b,c){function d(a){var b=a.pageX,c=b-f;e=j+c,h.css("width",e+"px")}b.preventDefault(),b.originalEvent.preventDefault(),b.stopPropagation();var e=!1,f=b.pageX,h=$('<div class="column-resizer-marquee"></div>'),i=$(b.target).parent("th");i.append(h);var j=i.outerWidth();h.css({width:j+"px",height:i.outerHeight()+"px"}),$(g).on("mousemove",d),$(g).one("mouseup",function(b){b.stopPropagation(),h.remove(),$(g).off("mousemove",d),e===!1?c.width=Math.max(j,0):c.width=Math.max(e,m.minWidth),a.$apply()})},a.sortableOptions={axis:"x",handle:".column-text",helper:"clone",placeholder:"ap-mesa-column-placeholder",distance:5,update:function(){i(function(){a.enabledColumns=a.enabledColumnObjects.map(function(a){return a.id})})}},a.getActiveColCount=function(){var b=0;return a.columns.forEach(function(a){a.disabled||b++}),b},a.saveToStorage=function(){if(a.storage){var b={};["sortOrder","searchTerms"].forEach(function(c){b[c]=a.persistentState[c]}),b.enabledColumns=a.enabledColumns,b.options={},["rowLimit","pagingStrategy","storageHash"].forEach(function(c){b.options[c]=a.options[c]});var c=a.options.stringifyStorage?JSON.stringify(b):b;a.storage.setItem(a.storageKey,c)}},a.loadFromStorage=function(){var b=a.options;if(a.storage){var c=a.storage.getItem(a.storageKey);j.when(c).then(function(c){if(!c)return void console.warn("angularjs-table: loading from storage failed because storage.getItem did not return anything.");try{var d;if(b.stringifyStorage){if("string"!=typeof c)throw new TypeError("storage.getItem is expected to return a string if options.stringifyStorage is true.");d=JSON.parse(c)}else{if(!angular.isObject(c))throw new TypeError("storage.getItem is expected to return an object if options.stringifyStorage is false.");d=c}if(d.options.storageHash!==a.options.storageHash)return;["sortOrder","searchTerms"].forEach(function(b){a.persistentState[b]=d[b]}),a.enabledColumns=d.enabledColumns,["rowLimit","pagingStrategy","storageHash"].forEach(function(b){a.options[b]=d.options[b]})}catch(e){console.warn("angularjs-table: failed to load state from storage. ",e)}},function(a){console.warn("angularjs-table: storage.getItem failed: ",a)})}}}]),function(){function a(a){if("object"!=typeof a)return a;for(var b=1,c=arguments.length;c>b;b++){var d=arguments[b];for(var e in d)void 0===a[e]&&(a[e]=d[e])}return a}var b={bgSizeMultiplier:1,rowPadding:300,bodyHeight:300,fixedHeight:!1,defaultRowHeight:40,scrollDebounce:100,scrollDivisor:1,loadingText:void 0,noRowsText:"No data.",pagingStrategy:"SCROLL",rowsPerPage:10,rowsPerPageChoices:[10,25,50,100],rowsPerPageMessage:"rows per page",showRowsPerPageCtrls:!0,clearSortOnColumnHide:!0,clearFilterOnColumnHide:!0,showSortPriority:!1,stringifyStorage:!0,maxPageLinks:8,sortClasses:["glyphicon glyphicon-sort","glyphicon glyphicon-chevron-up","glyphicon glyphicon-chevron-down"],onRegisterApi:function(a){}};angular.module("apMesa.directives.apMesa",["apMesa.controllers.ApMesaController","apMesa.directives.apMesaRows","apMesa.directives.apMesaDummyRows","apMesa.directives.apMesaExpandable","apMesa.directives.apMesaPaginationCtrls","apMesa.directives.apMesaStatusDisplay","apMesa.directives.apMesaThTitle","apMesa.services.apMesaDebounce"]).provider("apMesa",function(){this.setDefaultOptions=function(c){b=a(c,b)},this.$get=[function(){return{getDefaultOptions:function(){return b},setDefaultOptions:function(c){b=a(c,b)}}}]}).directive("apMesa",["$log","$timeout","$q","apMesa","apMesaDebounce",function(c,d,e,f,g){function h(a){var c=b.rowsPerPage;if(a.options&&a.options.rowsPerPage&&(c=a.options.rowsPerPage),a.persistentState=angular.extend({},{rowLimit:c,searchTerms:{},sortOrder:[]},a.persistentState),a.transientState={rowHeightIsCalculated:!1,filterCount:a.rows?a.rows.length:0,rowOffset:0,pageOffset:0,expandedRows:{},expandedRowHeights:{},columnLookup:{},loadingError:null,loading:!1,sortPriority:{},sortPriorityShow:!1,showFiltersRow:!0},a.columns&&a.columns.length){var d=a.transientState.columnLookup;a.columns.forEach(function(a){d[a.id]=a})}a.$broadcast("apMesa:stateReset")}function i(b){if(void 0!==b.options&&b.options.hasOwnProperty("getter")&&"function"!=typeof b.options.getter)throw new Error('"getter" in "options" should be a function!');b.options=b.options||{};var c=b.trackBy?{trackBy:b.trackBy}:{};a(b.options,c,f.getDefaultOptions()),j(b)}function j(a){a.options.initialSorts&&angular.forEach(a.options.initialSorts,function(b){a.addSort(b.id,b.dir)})}function k(a){a._columns&&a._columns.length&&(a.columns=angular.copy(a._columns),a.setColumns(a.columns),h(a))}function l(a){var b=a.persistentState.sortOrder,c={};a.enabledColumns.forEach(function(a){c[a]=!0}),a.sortDirection={},a.transientState.sortPriority={},a.transientState.sortPriorityShow=b.length>1;var d=1;b.filter(function(a){return c[a.id]}).forEach(function(b){a.options&&a.options.showSortPriority&&(a.transientState.sortPriority[b.id]=d++),a.sortDirection[b.id]=b.dir})}function m(a){h(a),i(a),k(a)}function n(a,b){var f=[];a.scrollDiv=b.find(".mesa-rows-table-wrapper"),a.$watch("_columns",function(b,c){b!==a.columns&&(k(a),j(a))}),a.$watch("enabledColumns",function(b,c){if(!a.enabledColumns)return void((a._columns||a.columns)&&(a.enabledColumns=(a._columns||a.columns).map(function(a){return a.id})));a.enabledColumnObjects=a.enabledColumns.map(function(b){return a.transientState.columnLookup[b]});var d={};a.enabledColumns.forEach(function(a){d[a]=!0}),a.options.clearFilterOnColumnHide&&angular.forEach(a.persistentState.searchTerms,function(b,c){d[c]||delete a.persistentState.searchTerms[c]}),a.options.clearSortOnColumnHide&&a.persistentState.sortOrder.forEach(function(b,c){d[b.id]||a.persistentState.sortOrder.splice(c,1)}),l(a),a.saveToStorage()},!0),a.$watch("options",function(b,c){h(a),i(a)}),a.$watch("options.storage",function(b){if(b){if(!a.options.storageKey)throw new Error("apMesa: the storage option requires the storageKey option as well. See the README.");a.storage=a.options.storage,a.storageKey=a.options.storageKey,a.loadFromStorage(),f.push(a.$watchCollection("columns",a.saveToStorage)),f.push(a.$watchCollection("persistentState.searchTerms",a.saveToStorage))}else f.length&&(f.forEach(function(a){a()}),f=[])});var m;a.$watch("options.fillHeight",function(c){"SCROLL"===a.options.pagingStrategy&&(c?(m=a.$on("apMesa:resize",function(){a.options.bodyHeight=b.parent().height()-b.find(".mesa-header-table").outerHeight(!0)}),a.$emit("apMesa:resize")):m&&m())}),a.$watch("options.bodyHeight",function(){"SCROLL"===a.options.pagingStrategy&&(a.calculateRowLimit(),a.tbodyNgStyle={},a.tbodyNgStyle[a.options.fixedHeight?"height":"max-height"]=a.options.bodyHeight+"px",a.saveToStorage())}),a.$watch("transientState.filterCount",function(){a.options&&"SCROLL"===a.options.pagingStrategy&&a.onScroll()}),a.$watch("rowHeight",function(c){b.find("tr.ap-mesa-dummy-row").css("background-size","auto "+c*a.options.bgSizeMultiplier+"px")}),a.$watch("options.loadingPromise",function(b){angular.isObject(b)&&"function"==typeof b.then&&(a.api.setLoading(!0),b.then(function(b){a.transientState.loadingError=!1,a.api.setLoading(!1),angular.isArray(b)&&(a.rows=b)},function(b){a.transientState.loadingError=!0,a.api.setLoading(!1),c.warn("Failed loading table data: "+b)}))}),a.$watch("options.rowsPerPage",function(b,c){if(a.calculateRowLimit(),b!==c){var d=Math.floor(a.transientState.filterCount/a.options.rowsPerPage);a.transientState.filterCount===a.options.rowsPerPage*d&&(d-=1),a.transientState.pageOffset=Math.min(d,a.transientState.pageOffset)}}),a.$watch("options.pagingStrategy",function(b){"SCROLL"===b&&(a.scrollDiv.off("scroll"),a.scrollDiv.on("scroll",a.onScroll))}),a.$watch("persistentState.sortOrder",function(b){b&&l(a)},!0),a.$on("angular-mesa:update-dummy-rows",function(){l(a)});var n,o=g(function(){a.calculateRowLimit();var b=Math.max(0,a.scrollDiv[0].scrollTop-a.options.rowPadding),c=a.rowHeight;if(0===c)return!1;var d=0,e=0,f=Object.keys(a.transientState.expandedRows).map(function(a){return parseInt(a)}).sort();f.push(a.transientState.filterCount);for(var g=0;g<=f.length;g++){var h=f[g],i=(h-d)*c;if(e+i>=b){d+=Math.floor((b-e)/c);break}e+=i;var j=a.transientState.expandedRowHeights[h]||0;if(e+=j,d=h,e>=b){d--;break}}a.transientState.rowOffset=Math.max(0,d||0),n.resolve(),n=null,a.options.scrollingPromise=null,a.$digest()},a.options.scrollDebounce);a.onScroll=function(){n||(n=e.defer(),a.options.scrollingPromise=n.promise),o()},a.calculateRowLimit=function(){var b=a.scrollDiv.find(".ap-mesa-rendered-rows tr").height();a.rowHeight=b||a.options.defaultRowHeight||20,!a.transientState.rowHeightIsCalculated&&b&&(a.transientState.rowHeightIsCalculated=!0),"SCROLL"===a.options.pagingStrategy?a.persistentState.rowLimit=Math.ceil((a.options.bodyHeight+2*a.options.rowPadding)/a.rowHeight):"PAGINATE"===a.options.pagingStrategy&&(a.persistentState.rowLimit=a.options.rowsPerPage)},a.resetOffset=function(){"SCROLL"===a.options.pagingStrategy?(a.scrollDiv[0].scrollTop=0,a.transientState.rowOffset=0):"PAGINATE"===a.options.pagingStrategy&&(a.transientState.pageOffset=0,a.transientState.rowOffset=0)},d(function(){a.calculateRowLimit()},0),a.api={isSelectedAll:a.isSelectedAll,selectAll:a.selectAll,deselectAll:a.deselectAll,toggleSelectAll:a.toggleSelectAll,clearFilters:function(){a.persistentState.searchTerms={}},setLoading:function(b,c){a.transientState.loading=b,c&&a.$digest()},reset:function(){a.resetOffset(),h(a),a.options.getData&&a.$broadcast("apMesa:forceRefresh")},resetRowSort:function(b){a.persistentState.sortOrder=[];var c=b||a.options.initialSorts;angular.isArray(c)&&c.length&&angular.forEach(c,function(b){a.addSort(b.id,b.dir)})},getRowSort:function(){return a.persistentState.sortOrder},hasActiveFilters:function(){return a.enabledColumns.some(function(b){return a.persistentState.searchTerms[b]})},setFilter:function(b,c){a.persistentState.searchTerms[b]=c},toggleFiltersRow:function(b){1!==arguments.length&&(b=!a.transientState.showFiltersRow),b=!!b,a.transientState.showFiltersRow=b},isFilterRowEnabled:function(){return a.transientState.showFiltersRow}},a.options.onRegisterApi(a.api)}return{templateUrl:"src/templates/apMesa.tpl.html",restrict:"EA",replace:!0,scope:{_columns:"=columns",rows:"=",classes:"@tableClass",enabledColumns:"=?",selected:"=",options:"=?",trackBy:"@?",api:"=?"},controller:"ApMesaController",compile:function(a){var b=a.attr("track-by");b&&a.find(".ap-mesa-rendered-rows").attr("track-by",b);var c=a.attr("on-row-click");return c&&a.find("[ap-mesa-rows]").attr("on-row-click",c),{pre:m,post:n}}}}])}(),angular.module("apMesa.directives.apMesaCell",["apMesa.directives.apMesaSelector"]).directive("apMesaCell",["$compile",function(a){function b(b,c){b.$watch("column",function(d){var e="";if(d.template)e=d.template;else if(d.templateUrl)e="<div ng-include=\"'"+d.templateUrl+"'\"></div>";else if(d.selector===!0)e='<input type="checkbox" ng-checked="selected.indexOf(column.selectObject ? row : row[column.key]) >= 0" ap-mesa-selector class="ap-mesa-selector" />';else if(d.ngFilter)e="{{ row[column.key] | "+d.ngFilter+":row }}";else if(d.format){var f=void 0!==b.options&&{}.hasOwnProperty.call(b.options,"getter")?"options.getter(column.key, row)":"row[column.key]";e="{{ column.format("+f+", row, column, options) }}"}else e=void 0!==b.options&&{}.hasOwnProperty.call(b.options,"getter")?"{{ options.getter(column.key, row) }}":"{{ row[column.key] }}";c.html(e),a(c.contents())(b)})}return{scope:!0,link:b}}]),angular.module("apMesa.directives.apMesaDummyRows",[]).directive("apMesaDummyRows",function(){return{template:'<tr class="ap-mesa-dummy-row" ng-style="{ height: dummyRowHeight + \'px\'}"><td ng-show="dummyRowHeight" ng-attr-colspan="{{columns.length}}"></td></tr>',scope:!0,link:function(a,b,c){a.$on("angular-mesa:update-dummy-rows",function(){var b=a.$eval(c.apMesaDummyRows),d=(b[1]-b[0])*a.rowHeight;for(var e in a.transientState.expandedRows){var f=parseInt(e);f>=b[0]&&f<b[1]&&(d+=a.transientState.expandedRowHeights[e])}a.dummyRowHeight=d})}}}),angular.module("apMesa.directives.apMesaExpandable",[]).directive("apMesaExpandable",["$compile",function(a){return{scope:!1,link:function(b,c,d){b.$watch("row",function(){var d;if(b.options.expandableTemplateUrl)d=angular.element('<div ng-include="options.expandableTemplateUrl" onload="refreshExpandedHeight(true)"></div>');else{if(!b.options.expandableTemplate)return;d=angular.element(b.options.expandableTemplate)}a(d)(b),c.html(""),c.append(d)})}}}]),angular.module("apMesa.directives.apMesaPaginationCtrls",[]).directive("apMesaPaginationCtrls",["$timeout",function(a){return{templateUrl:"src/templates/apMesaPaginationCtrls.tpl.html",scope:!0,link:function(a,b){function c(){var b=[],c=Math.ceil(a.transientState.filterCount/a.options.rowsPerPage),d=a.transientState.pageOffset,e=Math.max(5,a.options.maxPageLinks);if(e>=c)for(var f=0;c>f;f++)b.push({gap:!1,page:f,current:d===f});else if(e-3>d){for(var f=0;e-2>f;f++)b.push({gap:!1,page:f,current:d===f});b.push({gap:!0,page:-1,current:!1},{gap:!1,page:c-1,current:!1})}else if(e-3>=c-d){b.push({gap:!1,page:0,current:!1},{gap:!0,page:-1,current:!1});for(var g=c-(e-2),f=g;c>f;f++)b.push({gap:!1,page:f,current:d===f})}else{b.push({gap:!1,page:0,current:!1},{gap:!0,page:-1,current:!1});for(var h=e-4,f=0;h>0;f++){var i=f%2?(f+1)/2:-(f/2),j=d+i;i>=0?b.push({gap:!1,page:j,current:0===i}):b.splice(2,0,{gap:!1,page:j,current:!1}),--h}b.push({gap:!0,page:-1,current:!1},{gap:!1,page:c-1,current:!1})}a.pageLinks=b,a.lastPage=c-1}a.$watch("transientState.filterCount",c),a.$watch("options.rowsPerPage",c),a.$watch("transientState.pageOffset",c),a.goBack=function(){0!==a.transientState.pageOffset&&a.transientState.pageOffset--},a.goForward=function(){a.transientState.pageOffset!==a.lastPage&&a.transientState.pageOffset++}}}}]),angular.module("apMesa.directives.apMesaRow",["apMesa.directives.apMesaCell"]).directive("apMesaRow",["$timeout",function(a){return{template:'<td ng-repeat="column in enabledColumnObjects track by column.id" class="ap-mesa-cell col-{{column.id}}" ap-mesa-cell></td>',scope:!1,link:function(b,c){var d;"SCROLL"===b.options.pagingStrategy?(d=b.$index+b.transientState.rowOffset,b.rowIsExpanded=!!b.transientState.expandedRows[d]):"PAGINATE"===b.options.pagingStrategy&&b.$watch("options.rowsPerPage",function(a){d=b.$index+b.transientState.pageOffset*a,b.rowIsExpanded=!!b.transientState.expandedRows[d]}),b.$watch("transientState.expandedRows",function(a,c){a!==c&&(b.rowIsExpanded=!1)}),b.toggleRowExpand=function(){b.transientState.expandedRows[d]=b.rowIsExpanded=!b.transientState.expandedRows[d],b.transientState.expandedRows[d]?b.refreshExpandedHeight(!1):(delete b.transientState.expandedRows[d],delete b.transientState.expandedRowHeights[d])},b.refreshExpandedHeight=function(e){a(function(){var a=c.next("tr.ap-mesa-expand-panel").height();b.transientState.expandedRowHeights[d]=a})}}}}]),angular.module("apMesa.directives.apMesaRows",["apMesa.directives.apMesaRow","apMesa.filters.apMesaRowFilter","apMesa.filters.apMesaRowSorter","apMesa.services.apMesaDebounce"]).directive("apMesaRows",["$filter","$timeout","apMesaDebounce","$rootScope",function(a,b,c,d){function e(a){if(!a.rows||!a.enabledColumnObjects)return[];var b,c;if(b=h(a.rows,a.enabledColumnObjects,a.persistentState,a.transientState,a.options),b=i(b,a.enabledColumnObjects,a.persistentState.sortOrder,a.options,a.transientState),"SCROLL"===a.options.pagingStrategy)b=j(b,Math.floor(a.transientState.rowOffset)-a.transientState.filterCount),b=j(b,a.persistentState.rowLimit+Math.ceil(a.transientState.rowOffset%1)),c=a.transientState.rowOffset;else if("PAGINATE"===a.options.pagingStrategy){var d=a.transientState.pageOffset*a.persistentState.rowLimit;b=b.slice(d,d+a.persistentState.rowLimit),c=d}b.forEach(function(a){a.$$$index=c++}),a.visible_rows=b,a.$broadcast("angular-mesa:update-dummy-rows")}function f(a){var b;"SCROLL"===a.options.pagingStrategy?b=a.transientState.rowOffset:"PAGINATE"===a.options.pagingStrategy&&(b=a.transientState.pageOffset*a.persistentState.rowLimit);var c=a.persistentState.searchTerms,d=a.enabledColumnObjects.filter(function(a){return!!c[a.id]}).map(function(a){return{column:a,value:c[a.id]}}),e={};a.enabledColumns.forEach(function(a){e[a]=!0});var f=a.persistentState.sortOrder.filter(function(a){return e[a.id]}).map(function(b){return{column:a.transientState.columnLookup[b.id],direction:"+"===b.dir?"ASC":"DESC"}});a.transientState.loadingError=!1,a.api.setLoading(!0);var g=a.transientState.getDataPromise=a.options.getData(b,a.persistentState.rowLimit,d,f).then(function(c){if(g===a.transientState.getDataPromise){var d=c.total,e=c.rows,f=b;a.transientState.rowOffset=b,a.transientState.filterCount=d,a.visible_rows=e,e.forEach(function(a){a.$$$index=f++}),a.transientState.getDataPromise=null,a.api.setLoading(!1),a.getDataError=void 0,a.$emit("angular-mesa:update-dummy-rows")}},function(b){a.transientState.getDataPromise=null,a.transientState.loadingError=!0,a.getDataError=b,a.api.setLoading(!1)})}function g(a){var b=c(f,200,{leading:!1,trailing:!0}),d=function(c,d){c!==d&&(a.options.getData?b(a):e(a),a.transientState.expandedRows={})},g=function(c,d){c!==d&&(a.options.getData?b(a):e(a))};a.$watch("persistentState.searchTerms",function(b,c){angular.equals(b,c)||a.resetOffset(),d(b,c)},!0),a.$watch("persistentState.sortOrder",function(b,c){angular.equals(b,c)||a.resetOffset(),d(b,c)},!0),a.$watch("transientState.rowOffset",function(b,c){"SCROLL"===a.options.pagingStrategy&&g(b,c)}),a.$watch("persistentState.rowLimit",function(a,b){g(a,b)}),a.$watch("transientState.pageOffset",function(a,b){g(a,b)}),a.$watch("transientState.filterCount",function(b,c){a.options.getData||d(b,c)}),a.$watch("rows",function(a){angular.isArray(a)&&d(!0,!1)}),a.$watch("enabledColumnObjects",function(a,b){d(a,b)}),a.$watch("options.getData",function(a){angular.isFunction(a)&&d(!0,!1)}),a.$on("apMesa:forceRefresh",function(){d(!0,!1)})}var h=a("apMesaRowFilter"),i=a("apMesaRowSorter"),j=a("limitTo");return{restrict:"A",templateUrl:"src/templates/apMesaRows.tpl.html",compile:function(a,b){var c=a.find("tr[ng-repeat-start]"),d=c.attr("ng-repeat-start");return d+=b.trackBy?" track by row[options.trackBy]":" track by row.$$$index",c.attr("ng-repeat-start",d),b.onRowClick&&a.find("tr[ng-repeat-start]").attr("ng-click",b.onRowClick),g}}}]),angular.module("apMesa.directives.apMesaSelector",[]).directive("apMesaSelector",function(){return{restrict:"A",scope:!1,link:function(a,b){var c=a.selected,d=a.row,e=a.column;b.on("click",function(){var b=c.indexOf(e.selectObject?d:d[e.key]);b>=0?c.splice(b,1):c.push(e.selectObject?d:d[e.key]),a.$apply()})}}}),angular.module("apMesa.directives.apMesaStatusDisplay",[]).directive("apMesaStatusDisplay",function(){return{replace:!0,templateUrl:"src/templates/apMesaStatusDisplay.tpl.html"}}),angular.module("apMesa.directives.apMesaThTitle",[]).directive("apMesaThTitle",["$compile",function(a){function b(b,c){var d=b.column,e="<span>{{ column.id }}</span>";angular.isString(d.labelTemplateUrl)?e="<span ng-include=\"'"+d.labelTemplateUrl+"'\"></span>":angular.isString(d.labelTemplate)?e="<span>"+d.labelTemplate+"</span>":angular.isString(d.label)&&(e="<span>{{ column.label }}</span>"),c.html(e),a(c.contents())(b)}return{link:b}}]),angular.module("apMesa.filters.apMesaRowFilter",["apMesa.services.apMesaFilterFunctions"]).filter("apMesaRowFilter",["apMesaFilterFunctions","$log",function(a,b){return function(c,d,e,f,g){var h,i=c;return h=d.filter(function(c){var d=e.searchTerms[c.id];if("string"==typeof d){if(!d.trim())return!1;if("function"==typeof c.filter)return!0;var f=a[c.filter];if("function"==typeof f)return c.filter=f,!0;b.warn('apMesa: The filter function "'+c.filter+'" specified by column(id='+c.id+').filter was not found in predefined tableFilterFunctions. Available filters: "'+Object.keys(a).join('","')+'"')}return!1}),h.length&&(i=c.filter(function(a){for(var b=h.length-1;b>=0;b--){var c=h[b],d=c.filter,f=e.searchTerms[c.id],i=void 0!==g&&{}.hasOwnProperty.call(g,"getter")?g.getter(c.key,a):a[c.key],j="function"==typeof c.format?c.format(i,a,c,g):i;if(!d(f,i,j,a,c,g))return!1}return!0})),f.filterCount=i.length,i}}]),angular.module("apMesa.filters.apMesaRowSorter",[]).filter("apMesaRowSorter",function(){return function(a,b,c,d,e){if(!c.length)return a;var f=a.slice(),g={};b.forEach(function(a){g[a.id]=!0});var h=f.map(function(a,b){return{index:b,data:a}});return h.sort(function(a,b){for(var f=0;f<c.length;f++){var h=c[f];if(g[h.id]){var i=e.columnLookup[h.id],j=h.dir;if(i&&i.sort){var k=i.sort,l="+"===j?k(a.data,b.data,d,i):k(b.data,a.data,d,i);if(0!==l)return l}}}return a.index-b.index}),h.map(function(a){return a.data})}}),angular.module("apMesa.services.apMesaDebounce",[]).factory("apMesaDebounce",["$timeout",function(a){function b(b,d,e){function h(a){var c=q,d=r;return q=r=void 0,z=a,w=b.apply(d,c)}function i(b){return z=b,x=a(l,d),A?h(b):w}function j(a){var b=a-y,c=a-z,e=d-b;return B?u(e,s-c):e}function k(a){var b=a-y,c=a-z;return void 0===y||b>=d||0>b||B&&c>=s}function l(){var b=v();return k(b)?m(b):void(x=a(l,j(b)))}function m(a){return x=void 0,C&&q?h(a):(q=r=void 0,w)}function n(){void 0!==x&&a.cancel(x),z=0,q=y=r=x=void 0}function o(){return void 0===x?w:m(v())}function p(){var b=v(),c=k(b);if(q=arguments,r=this,y=b,c){if(void 0===x)return i(y);if(B)return x=a(l,d),h(y)}return void 0===x&&(x=a(l,d)),w}var q,r,s,w,x,y,z=0,A=!1,B=!1,C=!0;if("function"!=typeof b)throw new TypeError(g);return d=f(d)||0,c(e)&&(A=!!e.leading,B="maxWait"in e,s=B?t(f(e.maxWait)||0,d):s,C="trailing"in e?!!e.trailing:C),p.cancel=n,p.flush=o,p}function c(a){var b=typeof a;return!!a&&("object"==b||"function"==b)}function d(a){return!!a&&"object"==typeof a}function e(a){return"symbol"==typeof a||d(a)&&s.call(a)==i}function f(a){if("number"==typeof a)return a;if(e(a))return h;if(c(a)){var b="function"==typeof a.valueOf?a.valueOf():a;a=c(b)?b+"":b}if("string"!=typeof a)return 0===a?a:+a;a=a.replace(j,"");var d=l.test(a);return d||m.test(a)?n(a.slice(2),d?2:8):k.test(a)?h:+a}var g="Expected a function",h=NaN,i="[object Symbol]",j=/^\s+|\s+$/g,k=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,m=/^0o[0-7]+$/i,n=parseInt,o="object"==typeof global&&global&&global.Object===Object&&global,p="object"==typeof self&&self&&self.Object===Object&&self,q=o||p||Function("return this")(),r=Object.prototype,s=r.toString,t=Math.max,u=Math.min,v=function(){return q.Date.now()};return b}]),angular.module("apMesa.services.apMesaFilterFunctions",[]).service("apMesaFilterFunctions",function(){function a(a,b){a=a.toLowerCase().trim(),b=String(b).toLowerCase();var c=a[0];return"!"===c?(a=a.substr(1),""===a?!0:-1===b.indexOf(a)):"="===c?(a=a.substr(1),a===b.trim()):(a=a.replace("\\!","!"),a=a.replace("\\=","="),-1!==b.indexOf(a))}function b(b,c,d,e){return a(b,d,d,e)}function c(a,b){b=parseFloat(b),a=a.trim();var c=a.substr(0,2),d=a[0],e=1*a.substr(1),f=1*a.substr(2);return"<="===c?f>=b:">="===c?b>=f:"<"===d?e>b:">"===d?b>e:"~"===d?Math.round(b)===e:"="===d?e===b:b.toString().indexOf(a.toString())>-1}function d(a,b,d){return c(a,d)}function e(a){for(var b=a.trim().split(","),c=0,d=0;d<b.length;d++){var e=b[d].trim(),f=h.exec(e);if(f){var i=1*f[1],j=f[2].replace(/s$/,"");g.hasOwnProperty(j)&&(c+=i*g[j])}}return c}function f(a,b){if(a=a.trim(),!a)return!0;b*=1;var c,d,f=new Date,h=+f,i=a[0],j=a.substr(1).trim();if("<"===i)return c=h-e(j),b>c;if(">"===i)return d=h-e(j),d>b;if("today"===a)return new Date(b).toDateString()===f.toDateString();if("yesterday"===a)return new Date(b).toDateString()===new Date(h-g.d).toDateString();var k=new Date(a);return isNaN(k)?!1:new Date(b).toDateString()===k.toDateString()}a.placeholder=b.placeholder="string search",a.title=b.title='Search by text, eg. "foo". Use "!" to exclude and "=" to match exact text, e.g. "!bar" or "=baz".',c.placeholder=d.placeholder="number search",c.title=d.title='Search by number, e.g. "123". Optionally use comparator expressions like ">=10" or "<1000". Use "~" for approx. int values, eg. "~3" will match "3.2"';var g={};g.second=g.sec=g.s=1e3,g.minute=g.min=g.m=60*g.second,g.hour=g.hr=g.h=60*g.minute,g.day=g.d=24*g.hour,g.week=g.wk=g.w=7*g.day,g.month=4*g.week,g.year=g.yr=g.y=365*g.day;var h=/(\d+(?:\.\d+)?)\s*([a-z]+)/;return f.placeholder="date search",f.title='Search by date. Enter a date string (RFC2822 or ISO 8601 date). You can also type "today", "yesterday", "> 2 days ago", "< 1 day 2 hours ago", etc.',{like:a,likeFormatted:b,number:c,numberFormatted:d,date:f}}),angular.module("apMesa.services.apMesaFormatFunctions",[]).service("apMesaFormatFunctions",function(){return{}}),angular.module("apMesa.services.apMesaSortFunctions",[]).service("apMesaSortFunctions",function(){return{number:function(a){return function(b,c,d){var e,f;return void 0!==d&&{}.hasOwnProperty.call(d,"getter")?(e=d.getter(a,b),f=d.getter(a,c)):(e=b[a],f=c[a]),1*e-1*f}},string:function(a){return function(b,c,d){var e,f;return void 0!==d&&{}.hasOwnProperty.call(d,"getter")?(e=d.getter(a,b),f=d.getter(a,c)):(e=b[a],f=c[a]),e||0===e||(e=""),f||0===f||(f=""),e.toString().toLowerCase().localeCompare(f.toString().toLowerCase())}},stringFormatted:function(a){return function(b,c,d,e){var f,g;return void 0!==d&&{}.hasOwnProperty.call(d,"getter")?(f=d.getter(a,b),g=d.getter(a,c)):(f=b[a],g=c[a]),f=e.format(f,b,e),g=e.format(g,c,e),f.toString().toLowerCase().localeCompare(g.toString().toLowerCase())}},numberFormatted:function(a){return function(b,c,d,e){var f,g;return void 0!==d&&{}.hasOwnProperty.call(d,"getter")?(f=d.getter(a,b),g=d.getter(a,c)):(f=b[a],g=c[a]),f=e.format(f,b,e),g=e.format(g,c,e),1*f-1*g}}}}),angular.module("apMesa.templates",["src/templates/apMesa.tpl.html","src/templates/apMesaDummyRows.tpl.html","src/templates/apMesaPaginationCtrls.tpl.html","src/templates/apMesaRows.tpl.html","src/templates/apMesaStatusDisplay.tpl.html"]),angular.module("src/templates/apMesa.tpl.html",[]).run(["$templateCache",function(a){a.put("src/templates/apMesa.tpl.html","<div class=\"ap-mesa-wrapper\" ng-class=\"{\n'paging-strategy-paginate': options.pagingStrategy === 'PAGINATE',\n'paging-strategy-scroll': options.pagingStrategy === 'SCROLL',\n'ap-mesa-loading-error': !!transientState.loadingError,\n'ap-mesa-no-data': !transientState.loading && !transientState.loadingError && visible_rows.length === 0\n}\">\n"+' <table ng-class="classes" class="ap-mesa mesa-header-table">\n <thead>\n <!-- MAIN ROW OF COLUMN HEADERS -->\n <tr ui-sortable="sortableOptions" ng-model="enabledColumnObjects" class="ap-mesa-header-row">\n\n <!-- COLUMN HEADERS -->\n <th\n scope="col"\n ng-repeat="column in enabledColumnObjects"\n ng-click="toggleSort($event,column)"\n ng-class="[\n {\n \'sortable-column\' : column.sort,\n \'select-column\': column.selector,\n \'is-sorting\': sortDirection[column.id]\n },\n \'table-header-\' + column.id,\n column.classes ? column.classes : \'\'\n ]"\n ng-attr-title="{{ column.title || \'\' }}"\n ng-style="{ width: column.width, \'min-width\': column.width, \'max-width\': column.width }">\n\n <!-- COLUMN TEXT -->\n <span class="column-text">\n <input ng-if="column.selector" type="checkbox" ng-checked="isSelectedAll()" ng-click="toggleSelectAll($event)" />\n <span\n class="ap-mesa-sort-icon" \n ng-if="column.sort"\n title="This column is sortable. Click to toggle sort order. Hold shift while clicking multiple columns to stack sorting.">\n <span class="sorting-icon {{ getSortClass( sortDirection[column.id] ) }}"></span>\n <span ng-bind="transientState.sortPriority[column.id]" class="sort-priority" ng-if="transientState.sortPriorityShow && transientState.sortPriority[column.id]"></span>\n </span>\n <span class="ap-mesa-th-title" ap-mesa-th-title></span>\n </span>\n\n <!-- COLUMN RESIZER -->\n <span\n ng-if="!column.lockWidth"\n class="column-resizer"\n ng-class="{\'discreet-width\': !!column.width}"\n title="Click and drag to set discreet width. Click once to clear discreet width."\n ng-mousedown="startColumnResize($event, column)">\n \n </span>\n\n </th>\n </tr>\n\n <!-- ROW OF COLUMMN FILTERS -->\n <tr ng-if="hasFilterFields() && transientState.showFiltersRow" class="ap-mesa-filter-row">\n\n <!-- COLUMN FILTER CELLS -->\n <td ng-repeat="column in enabledColumnObjects" ng-class="\'column-\' + column.id">\n\n <!-- FILTER INPUT -->\n <input\n type="text"\n ng-if="(column.filter)"\n ng-model="persistentState.searchTerms[column.id]"\n ng-attr-placeholder="{{ column.filterPlaceholder ? column.filterPlaceholder : (column.filter.placeholder || \'filter\') }}"\n ng-attr-title="{{ column.filter && column.filter.title }}"\n ng-class="{\'active\': persistentState.searchTerms[column.id] }">\n\n <!-- FILTER CLEAR BUTTON -->\n <button\n ng-if="(column.filter)"\n ng-show="persistentState.searchTerms[column.id]"\n class="clear-search-btn"\n role="button"\n type="button"\n ng-click="clearAndFocusSearch(column.id)">\n ×\n </button>\n\n </td>\n </tr>\n </thead>\n </table>\n <div ap-mesa-status-display></div>\n <div class="mesa-rows-table-wrapper" ng-style="tbodyNgStyle" ng-hide="transientState.loadingError">\n <table ng-class="classes" class="ap-mesa mesa-rows-table">\n <thead>\n <th\n scope="col"\n ng-repeat="column in enabledColumnObjects"\n ng-style="{ width: column.width, \'min-width\': column.width, \'max-width\': column.width }"\n ></th>\n </tr>\n </thead>\n <tbody ng-if="options.pagingStrategy === \'SCROLL\'" ap-mesa-dummy-rows="[0,transientState.rowOffset]" cell-content="..."></tbody>\n <tbody ap-mesa-rows class="ap-mesa-rendered-rows"></tbody>\n <tbody ng-if="options.pagingStrategy === \'SCROLL\'" ap-mesa-dummy-rows="[transientState.rowOffset + visible_rows.length, transientState.filterCount]" cell-content="..."></tbody>\n </table>\n </div>\n <div class="ap-mesa-pagination" ng-if="options.pagingStrategy === \'PAGINATE\'" ap-mesa-pagination-ctrls></div>\n</div>\n');
}]),angular.module("src/templates/apMesaDummyRows.tpl.html",[]).run(["$templateCache",function(a){a.put("src/templates/apMesaDummyRows.tpl.html","")}]),angular.module("src/templates/apMesaPaginationCtrls.tpl.html",[]).run(["$templateCache",function(a){a.put("src/templates/apMesaPaginationCtrls.tpl.html",'<ul class="pagination" ng-if="lastPage > 0">\n <li ng-class="{ \'disabled\': transientState.pageOffset === 0 }">\n <a ng-click="goBack()" >«</a>\n </li>\n <li ng-repeat="link in pageLinks" ng-class="{ \'active\': link.current, \'disabled\': link.gap }">\n <a ng-if="!link.gap" ng-click="transientState.pageOffset = link.page">{{ link.page + 1 }}</a>\n <a ng-if="link.gap" href="">…</a>\n </li>\n <li ng-class="{ \'disabled\': transientState.pageOffset === lastPage }">\n <a ng-click="goForward()" >»</a>\n </li>\n</ul>\n<span class="rows-per-page-ctrl" ng-if="options.showRowsPerPageCtrls">\n <span class="rows-per-page-msg">{{ options.rowsPerPageMessage }}</span>\n <ul class="pagination">\n <li ng-repeat="limit in options.rowsPerPageChoices" ng-class="{\'active\': options.rowsPerPage === limit}">\n <a ng-click="options.rowsPerPage = limit">{{ limit }}</a>\n </li>\n </ul>\n</span>\n')}]),angular.module("src/templates/apMesaRows.tpl.html",[]).run(["$templateCache",function(a){a.put("src/templates/apMesaRows.tpl.html",'<tr\n ng-repeat-start="row in visible_rows"\n ng-attr-class="{{ (transientState.rowOffset + $index) % 2 ? \'odd\' : \'even\' }}"\n ap-mesa-row>\n</tr>\n<tr ng-repeat-end ng-if="rowIsExpanded" class="ap-mesa-expand-panel">\n <td ap-mesa-expandable ng-attr-colspan="{{ enabledColumns.length }}"></td>\n</tr>\n')}]),angular.module("src/templates/apMesaStatusDisplay.tpl.html",[]).run(["$templateCache",function(a){a.put("src/templates/apMesaStatusDisplay.tpl.html",'<div class="ap-mesa-status-display-wrapper" ng-class="{\n \'ap-mesa-loading\': transientState.loading,\n \'ap-mesa-error\': transientState.loadingError,\n \'has-rows\': visible_rows.length && !transientState.loadingError\n}">\n\n <!-- LOADING -->\n <div ng-if="transientState.loading" class="ap-mesa-loading-display">\n \n <!-- user-provided -->\n <div ng-if="options.loadingTemplateUrl" ng-include="options.loadingTemplateUrl"></div>\n <div ng-if="options.loadingText">{{ options.loadingText }}</div>\n \n <!-- default -->\n <div ng-if="!options.asyncLoadingTemplateUrl && !options.asyncLoadingTemplate" class="ap-mesa-status-display">\n <div class="ap-mesa-status-display-inner"></div>\n </div>\n\n </div>\n \n <!-- ERROR -->\n <div ng-if="transientState.loadingError" class="ap-mesa-error-display">\n <div ng-if="options.loadingErrorTemplateUrl" ng-include="options.loadingErrorTemplateUrl"></div>\n <div ng-if="options.loadingErrorText">{{ options.loadingErrorText }}</div>\n <div ng-if="!options.loadingErrorTemplateUrl && !options.loadingErrorText" class="ap-mesa-error-display-inner">An error occurred.</div>\n </div>\n\n <!-- NO DATA -->\n <div ng-if="!transientState.loading && !transientState.loadingError && visible_rows.length === 0" class="ap-mesa-no-data-display">\n <div ng-if="options.noRowsTemplateUrl" ng-include="options.noRowsTemplateUrl"></div>\n <div ng-if="!options.noRowsTemplateUrl">{{ options.noRowsText }}</div>\n </div>\n</div>')}]);