(function(n,t){if(typeof define=="function"&&define.amd)define(["angular"],function(n){return t(n)});else return t(n)})(angular||null,function(n){var t=n.module("ngTable",[]),i;return t.factory("ngTableParams",["$q","$log",function(t){var i=function(n){return!isNaN(parseFloat(n))&&isFinite(n)};return function(r,u){var o=this,f,e;return this.data=[],this.parameters=function(t,r){var u,o,c,e,s,a,l,h;if(r=r||!1,n.isDefined(t)){for(u in t)if(o=t[u],r&&u.indexOf("[")>=0){for(c=u.split(/\[(.*)\]/).reverse(),e="",s=0,a=c.length;s<a;s++)l=c[s],l!==""&&(h=o,o={},o[e=l]=i(h)?parseFloat(h):h);e==="sorting"&&(f[e]={});f[e]=n.extend(f[e]||{},o[e])}else f[u]=i(t[u])?parseFloat(t[u]):t[u];return this}return f},this.settings=function(t){return n.isDefined(t)?(n.isArray(t.data)&&(t.total=t.data.length),e=n.extend(e,t),this):e},this.page=function(t){return n.isDefined(t)?this.parameters({page:t}):f.page},this.total=function(t){return n.isDefined(t)?this.settings({total:t}):e.total},this.count=function(t){return n.isDefined(t)?this.parameters({count:t,page:1}):f.count},this.filter=function(t){return n.isDefined(t)?this.parameters({filter:t}):f.filter},this.sorting=function(t){if(arguments.length==2){var i={};return i[t]=arguments[1],this.parameters({sorting:i}),this}return n.isDefined(t)?this.parameters({sorting:t}):f.sorting},this.isSortBy=function(t,i){return n.isDefined(f.sorting[t])&&f.sorting[t]==i},this.orderBy=function(){var n=[];for(var t in f.sorting)n.push((f.sorting[t]==="asc"?"+":"-")+t);return n},this.getData=function(t,i){n.isArray(this.data)&&n.isObject(i)?t.resolve(this.data.slice((i.page()-1)*i.count(),i.page()*i.count())):t.resolve([])},this.getGroups=function(i,r){var u=t.defer();u.promise.then(function(t){var u={},f,e;n.forEach(t,function(t){var i=n.isFunction(r)?r(t):t[r];u[i]=u[i]||{data:[]};u[i].value=i;u[i].data.push(t)});f=[];for(e in u)f.push(u[e]);i.resolve(f)});this.getData(u,o)},this.generatePagesArray=function(n,t,i){var h,o,s,e,u,f,r;if(h=11,f=[],u=Math.ceil(t/i),u>1){for(f.push({type:"prev",number:Math.max(1,n-1),active:n>1}),f.push({type:"page",number:1,active:n>1}),s=Math.round((h-5)/2),e=Math.max(2,n-s),o=Math.min(u-1,n+s*2-(n-e)),e=Math.max(2,e-(s*2-(o-e))),r=e;r<=o;)r===e&&r!==2||r===o&&r!==u-1?f.push({type:"more",active:!1}):f.push({type:"page",number:r,active:n!==r}),r++;f.push({type:"page",number:u,active:n!==u});f.push({type:"next",number:Math.min(u,n+1),active:n<u})}return f},this.url=function(t){var r,i,e,u,o;t=t||!1;r=t?[]:{};for(key in f)if(f.hasOwnProperty(key))if(i=f[key],e=encodeURIComponent(key),typeof i=="object")for(u in i)n.isUndefined(i[u])||i[u]===""||(o=e+"["+encodeURIComponent(u)+"]",t?r.push(o+"="+i[u]):r[o]=i[u]);else n.isFunction(i)||n.isUndefined(i)||i===""||(t?r.push(e+"="+encodeURIComponent(i)):r[e]=encodeURIComponent(i));return r},this.reload=function(){var i=t.defer(),n=this;e.$loading=!0;e.groupBy?e.getGroups(i,e.groupBy,this):e.getData(i,this);i.promise.then(function(t){e.$loading=!1;n.data=e.groupBy?e.$scope.$groups=t:e.$scope.$data=t;e.$scope.pages=n.generatePagesArray(n.page(),n.total(),n.count())})},this.reloadPages=function(){var n=this;e.$scope.pages=n.generatePagesArray(n.page(),n.total(),n.count())},f=this.$params={page:1,count:1,filter:{},sorting:{},group:{},groupBy:null},e={$scope:null,$loading:!1,data:null,total:0,counts:[10,25,50,100],getGroups:this.getGroups,getData:this.getData},this.settings(u),this.parameters(r,!0),this}}]),i=["$scope","ngTableParams","$q",function(n,t){n.$loading=!1;n.params||(n.params=new t);n.params.settings().$scope=n;n.$watch("params.$params",function(){n.params.settings().$scope=n;n.params.reload()},!0);n.sortBy=function(t,i){var r=n.parse(t.sortable),f,u;r&&(f=n.params.sorting()&&n.params.sorting()[r]&&n.params.sorting()[r]==="desc",u=i.ctrlKey?n.params.sorting():{},u[r]=f?"asc":"desc",n.params.parameters({sorting:u}))}}],t.directive("ngTable",["$compile","$q","$parse",function(t,r,u){"use strict";return{restrict:"A",priority:1001,scope:!0,controller:i,compile:function(i){var r=[],o=0,f=null,e=i.find("thead");if(n.forEach(n.element(i.find("tr")),function(t){t=n.element(t);t.hasClass("ng-table-group")||f||(f=t)}),f)return n.forEach(f.find("td"),function(t){var i=n.element(t);if(!i.attr("ignore-cell")||"true"!==i.attr("ignore-cell")){var e=function(n,t){return function(f){return u(i.attr("x-data-"+n)||i.attr("data-"+n)||i.attr(n))(f,{$columns:r})||t}},s=e("title"," "),l=e("header",!1),f=e("filter",!1)(),h=!1,c=!1;f&&f.name&&(c=f.name,delete f.name);f&&f.templateURL&&(h=f.templateURL,delete f.templateURL);i.attr("data-title-text",s());r.push({id:o++,title:s,sortable:e("sortable",!1),"class":i.attr("x-data-header-class")||i.attr("data-header-class")||i.attr("header-class"),filter:f,filterTemplateURL:h,filterName:c,headerTemplateURL:l,filterData:i.attr("filter-data")?i.attr("filter-data"):null,show:i.attr("ng-show")?function(n){return u(i.attr("ng-show"))(n)}:function(){return!0}})}}),function(i,f,o){var s,h,c;return i.$loading=!1,i.$columns=r,i.$watch(o.ngTable,function(t){n.isUndefined(t)||(i.paramsModel=u(o.ngTable),i.params=t)},!0),i.parse=function(t){return n.isDefined(t)?t(i):""},o.showFilter&&i.$parent.$watch(o.showFilter,function(n){i.show_filter=n}),n.forEach(r,function(t){var r;if(t.filterData){if(r=u(t.filterData)(i,{$column:t}),!(n.isObject(r)&&n.isObject(r.promise)))throw new Error("Function "+t.filterData+" must be instance of $q.defer()");return delete t.filterData,r.promise.then(function(i){n.isArray(i)||(i=[]);i.unshift({title:"-",id:""});t.data=i})}}),f.hasClass("ng-table")?void 0:(i.templates={header:o.templateHeader?o.templateHeader:"ng-table/header.html",pagination:o.templatePagination?o.templatePagination:"ng-table/pager.html"},s=e.length>0?e:n.element(document.createElement("thead")).attr("ng-include","templates.header"),h=n.element(document.createElement("div")).attr("ng-include","templates.pagination"),f.find("thead").remove(),c=f.find("tbody"),f.prepend(s),t(s)(i),t(h)(i),f.addClass("ng-table"),f.after(h))}}}}]),n.module("ngTable").run(["$templateCache",function(n){n.put("ng-table/filters/select-multiple.html",'<select ng-options="data.id as data.title for data in column.data" multiple ng-multiple="true" ng-model="params.filter()[name]" ng-show="filter==\'select-multiple\'" class="filter filter-select-multiple form-control" name="{{column.filterName}}"> <\/select>');n.put("ng-table/filters/select.html",'<select ng-options="data.id as data.title for data in column.data" ng-model="params.filter()[name]" ng-show="filter==\'select\'" class="filter filter-select form-control" name="{{column.filterName}}"> <\/select>');n.put("ng-table/filters/text.html",'<input type="text" name="{{column.filterName}}" ng-model="params.filter()[name]" ng-if="filter==\'text\'" class="input-filter form-control"/>');n.put("ng-table/header.html",'<tr> <th ng-repeat="column in $columns" ng-class="{ \'sortable\': parse(column.sortable), \'sort-asc\': params.sorting()[parse(column.sortable)]==\'asc\', \'sort-desc\': params.sorting()[parse(column.sortable)]==\'desc\' }" ng-click="sortBy(column, $event)" ng-show="column.show(this)" ng-init="template=column.headerTemplateURL(this)" class="header {{column.class}}"> <div ng-if="!template" ng-show="!template" ng-bind="parse(column.title)"><\/div> <div ng-if="template" ng-show="template"><div ng-include="template"><\/div><\/div> <\/th> <\/tr> <tr ng-show="show_filter" class="ng-table-filters"> <th ng-repeat="column in $columns" ng-show="column.show(this)" class="filter"> <div ng-repeat="(name, filter) in column.filter"> <div ng-if="column.filterTemplateURL" ng-show="column.filterTemplateURL"> <div ng-include="column.filterTemplateURL"><\/div> <\/div> <div ng-if="!column.filterTemplateURL" ng-show="!column.filterTemplateURL"> <div ng-include="\'ng-table/filters/\' + filter + \'.html\'"><\/div> <\/div> <\/div> <\/th> <\/tr>');n.put("ng-table/pager.html",'<div ng-if="params.settings().counts.length" class="ng-cloak ng-table-pager"> <div class="ng-table-counts btn-group pull-right"> <button ng-repeat="count in params.settings().counts" type="button" ng-class="{\'active\':params.count()==count}" ng-click="params.count(count)" class="btn btn-white btn-sm" title="Items per page"><span ng-bind="count"><\/span><\/button> <\/div> <ul class="pagination ng-table-pagination"> <li ng-class="{\'disabled\': !page.active, \'active\': !page.active && page.type === \'page\'}" ng-repeat="page in pages" ng-switch="page.type"> <a ng-switch-when="prev" ng-click="params.page(page.number)" href="">&laquo;<\/a> <a ng-switch-when="first" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"><\/span><\/a> <a ng-switch-when="page" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"><\/span><\/a> <a ng-switch-when="more" ng-click="params.page(page.number)" href="">&#8230;<\/a> <a ng-switch-when="last" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"><\/span><\/a> <a ng-switch-when="next" ng-click="params.page(page.number)" href="">&raquo;<\/a> <\/li> <\/ul> <\/div> ')}]),t})