ngTable.js
49.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
/*! ngTable v0.8.3 by Vitalii Savchuk(esvit666@gmail.com) - https://github.com/esvit/ng-table - New BSD License */
//!function(a,b){"use strict";return"function"==typeof define&&define.amd?void define(["angular"],function(a){return b(a)}):b(a)}(window.angular||null,function(a){"use strict";var b=a.module("ngTable",[]);return function(){function b(b){function c(b,c){var f=b.charAt(0).toUpperCase()+b.substring(1),g={};return g["on"+f]=d(b),g["publish"+f]=e(b),a.extend(c,g)}function d(c){return function(d){var e=a.identity,g=b;if(2===arguments.length?a.isFunction(arguments[1].$new)?g=arguments[1]:e=arguments[1]:arguments.length>2&&(g=arguments[1],e=arguments[2]),a.isObject(e)){var h=e;e=function(a){return a===h}}return g.$on("ngTable:"+c,function(a,b){if(!b.isNullInstance){var c=f(arguments,2),g=[b].concat(c);e.apply(this,g)&&d.apply(this,g)}})}}function e(a){return function(){var c=["ngTable:"+a].concat(Array.prototype.slice.call(arguments));b.$broadcast.apply(b,c)}}function f(a,b){return Array.prototype.slice.call(a,null==b?1:b)}var g={};return g=c("afterCreated",g),g=c("afterReloadData",g),g=c("datasetChanged",g),g=c("pagesChanged",g)}a.module("ngTable").factory("ngTableEventsChannel",b),b.$inject=["$rootScope"]}(),function(){function b(){function b(){c()}function c(){f=g}function d(b){var c=a.extend({},f,b);c.aliasUrls=a.extend({},f.aliasUrls,b.aliasUrls),f=c}function e(){function b(a,b){return-1!==a.indexOf("/")?a:e.getUrlForAlias(a,b)}function c(a){return f.aliasUrls[a]||f.defaultBaseUrl+a+f.defaultExt}var d,e={config:d,getTemplateUrl:b,getUrlForAlias:c};return Object.defineProperty(e,"config",{get:function(){return d=d||a.copy(f)},enumerable:!0}),e}var f,g={defaultBaseUrl:"ng-table/filters/",defaultExt:".html",aliasUrls:{}};this.$get=e,this.resetConfigs=c,this.setConfig=d,b(),e.$inject=[]}a.module("ngTable").provider("ngTableFilterConfig",b),b.$inject=[]}(),function(){function b(){function a(a){function c(c,d){if(null==c)return[];var e=d.hasFilter()?a(b.filterFilterName)(c,d.filter(!0)):c,f=d.orderBy(),g=f.length?a(b.sortingFilterName)(e,f):e,h=g.slice((d.page()-1)*d.count(),d.page()*d.count());return d.total(g.length),h}return c}var b=this;b.$get=a,b.filterFilterName="filter",b.sortingFilterName="orderBy",a.$inject=["$filter"]}a.module("ngTable").provider("ngTableDefaultGetData",b),b.$inject=[]}(),function(){function b(a){function b(b){return function(){var c=a.defer(),d=b.apply(this,[c].concat(Array.prototype.slice.call(arguments)));return d||(d=c.promise),d}}return b}a.module("ngTable").factory("ngTableGetDataBcShim",b),b.$inject=["$q"]}(),b.value("ngTableDefaults",{params:{},settings:{}}),b.factory("NgTableParams",["$q","$log","ngTableDefaults","ngTableGetDataBcShim","ngTableDefaultGetData","ngTableEventsChannel",function(b,c,d,e,f,g){var h=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},i=function(i,j){function k(){var a=s.getDataFnAdaptor(s.getData);return b.when(a.call(s,o))}function l(){var a=s.getGroupsFnAdaptor(s.getGroups);return b.when(a.call(s,s.groupBy,o))}function m(a){var c=s.interceptors||[];return c.reduce(function(a,c){var d=c.response&&c.response.bind(c)||b.when,e=c.responseError&&c.responseError.bind(c)||b.reject;return a.then(function(a){return d(a,o)},function(a){return e(a,o)})},a())}"boolean"==typeof i&&(this.isNullInstance=!0);var n,o=this,p=!1,q=function(){s.debugMode&&c.debug&&c.debug.apply(this,arguments)};this.data=[],this.parameters=function(b,c){if(c=c||!1,a.isDefined(b)){for(var d in b){var e=b[d];if(c&&d.indexOf("[")>=0){for(var f=d.split(/\[(.*)\]/).reverse(),g="",i=0,j=f.length;j>i;i++){var k=f[i];if(""!==k){var l=e;e={},e[g=k]=h(l)?parseFloat(l):l}}"sorting"===g&&(r[g]={}),r[g]=a.extend(r[g]||{},e[g])}else r[d]=h(b[d])?parseFloat(b[d]):b[d]}return q("ngTable: set parameters",r),this}return r},this.settings=function(b){if(a.isDefined(b)){a.isArray(b.data)&&(b.total=b.data.length),b.getData&&b.getData.length>1&&(b.getDataFnAdaptor=e),b.getGroups&&b.getGroups.length>2&&(b.getGroupsFnAdaptor=e);var c=s.data;s=a.extend(s,b);var d=b.hasOwnProperty("data")&&b.data!=c;return d&&(p&&this.page(1),p=!1,g.publishDatasetChanged(this,b.data,c)),q("ngTable: set settings",s),this}return s},this.page=function(b){return a.isDefined(b)?this.parameters({page:b}):r.page},this.total=function(b){return a.isDefined(b)?this.settings({total:b}):s.total},this.count=function(b){return a.isDefined(b)?this.parameters({count:b,page:1}):r.count},this.filter=function(b){if(a.isDefined(b)&&a.isObject(b))return this.parameters({filter:b,page:1});if(b===!0){for(var c=Object.keys(r.filter),d={},e=0;e<c.length;e++){var f=r.filter[c[e]];null!=f&&""!==f&&(d[c[e]]=f)}return d}return r.filter},this.sorting=function(b){if(2==arguments.length){var c={};return c[b]=arguments[1],this.parameters({sorting:c}),this}return a.isDefined(b)?this.parameters({sorting:b}):r.sorting},this.isSortBy=function(b,c){return void 0!==c?a.isDefined(r.sorting[b])&&r.sorting[b]==c:a.isDefined(r.sorting[b])},this.orderBy=function(){var a=[];for(var b in r.sorting)a.push(("asc"===r.sorting[b]?"+":"-")+b);return a},this.getData=function(a){return f(this.data,a)},this.getGroups=function(b){return k().then(function(c){var d={};a.forEach(c,function(c){var e=a.isFunction(b)?b(c):c[b];d[e]=d[e]||{data:[]},d[e].value=e,d[e].data.push(c)});var e=[];for(var f in d)e.push(d[f]);return q("ngTable: refresh groups",e),e})},this.generatePagesArray=function(a,b,c,d){arguments.length||(a=this.page(),b=this.total(),c=this.count());var e,f,g,h,i;if(d=d&&6>d?6:d,i=[],h=Math.ceil(b/c),h>1){i.push({type:"prev",number:Math.max(1,a-1),active:a>1}),i.push({type:"first",number:1,active:a>1,current:1===a}),f=Math.round((s.paginationMaxBlocks-s.paginationMinBlocks)/2),g=Math.max(2,a-f),e=Math.min(h-1,a+2*f-(a-g)),g=Math.max(2,g-(2*f-(e-g)));for(var j=g;e>=j;)i.push(j===g&&2!==j||j===e&&j!==h-1?{type:"more",active:!1}:{type:"page",number:j,active:a!==j,current:a===j}),j++;i.push({type:"last",number:h,active:a!==h,current:a===h}),i.push({type:"next",number:Math.min(h,a+1),active:h>a})}return i},this.isDataReloadRequired=function(){return!p||!a.equals(r,n)},this.hasFilter=function(){return Object.keys(this.filter(!0)).length>0},this.hasFilterChanges=function(){return!a.equals(r&&r.filter,n&&n.filter)},this.url=function(b){b=b||!1;var c=b?[]:{};for(var d in r)if(r.hasOwnProperty(d)){var e=r[d],f=encodeURIComponent(d);if("object"==typeof e){for(var g in e)if(!a.isUndefined(e[g])&&""!==e[g]){var h=f+"["+encodeURIComponent(g)+"]";b?c.push(h+"="+e[g]):c[h]=e[g]}}else a.isFunction(e)||a.isUndefined(e)||""===e||(b?c.push(f+"="+encodeURIComponent(e)):c[f]=encodeURIComponent(e))}return c},this.reload=function(){var c=this,d=null;s.$loading=!0,n=a.copy(r),p=!0,d=m(s.groupBy?l:k),q("ngTable: reload data");var e=c.data;return d.then(function(a){return s.$loading=!1,c.data=a,g.publishAfterReloadData(c,a,e),c.reloadPages(),s.$scope&&s.$scope.$emit("ngTableAfterReloadData"),a})["catch"](function(a){return n=null,p=!1,b.reject(a)})},this.reloadPages=function(){var b;return function(){var c=b,d=o.generatePagesArray(o.page(),o.total(),o.count());a.equals(c,d)||(b=d,g.publishPagesChanged(this,d,c))}}();var r={page:1,count:1,filter:{},sorting:{},group:{},groupBy:null};a.extend(r,d.params);var s={$scope:null,$loading:!1,data:null,total:0,defaultSort:"desc",filterDelay:750,counts:[50,100,150,200],interceptors:[],paginationMaxBlocks:11,paginationMinBlocks:5,sortingIndicator:"span",getDataFnAdaptor:a.identity,getGroupsFnAdaptor:a.identity,getGroups:this.getGroups,getData:this.getData};return this.settings(d.settings),this.settings(j),this.parameters(i,!0),g.publishAfterCreated(this),this};return i}]),b.factory("ngTableParams",["NgTableParams",function(a){return a}]),function(){function b(a,b){a.config=b}a.module("ngTable").controller("ngTableFilterRowController",b),b.$inject=["$scope","ngTableFilterConfig"]}(),function(){function b(a){function b(b,c){var d=b.sortable&&b.sortable();if(d){var e=a.params.settings().defaultSort,f="asc"===e?"desc":"asc",g=a.params.sorting()&&a.params.sorting()[d]&&a.params.sorting()[d]===e,h=c.ctrlKey||c.metaKey?a.params.sorting():{};h[d]=g?f:e,a.params.parameters({sorting:h})}}a.sortBy=b}a.module("ngTable").controller("ngTableSorterRowController",b),b.$inject=["$scope"]}(),b.controller("ngTableController",["$scope","NgTableParams","$timeout","$parse","$compile","$attrs","$element","ngTableColumn","ngTableEventsChannel",function(b,c,d,e,f,g,h,i,j){function k(a){if(a){b.params.settings().$scope=b;var c=b.params;if(c.hasFilterChanges()){var d=function(){c.page(1),c.reload()};c.settings().filterDelay?m(d,c.settings().filterDelay):d()}else c.reload()}}function l(){function a(a,c){a.settings().groupBy?b.$groups=c:b.$data=c}function c(a,c){b.pages=c}function d(a){return b.params===a}j.onAfterReloadData(a,b,d),j.onPagesChanged(c,b,d)}b.$filterRow={},b.$loading=!1,b.hasOwnProperty("params")||(b.params=new c(!0)),b.params.settings().$scope=b;var m=function(){var a=0;return function(b,c){d.cancel(a),a=d(b,c)}}();b.$watch("params",function(a,b){a!==b&&a&&a.reload()},!1),b.$watch("params.isDataReloadRequired()",k),this.compileDirectiveTemplates=function(){if(!h.hasClass("ng-table")){b.templates={header:g.templateHeader?g.templateHeader:"ng-table/header.html",pagination:g.templatePagination?g.templatePagination:"ng-table/pager.html"},h.addClass("ng-table");var c=null,d=!1;a.forEach(h.children(),function(a){"THEAD"===a.tagName&&(d=!0)}),d||(c=a.element(document.createElement("thead")).attr("ng-include","templates.header"),h.prepend(c));var e=a.element(document.createElement("div")).attr({"ng-table-pagination":"params","template-url":"templates.pagination"});h.after(e),c&&f(c)(b),f(e)(b)}},this.loadFilterData=function(c){a.forEach(c,function(c){var d;return d=c.filterData(b,{$column:c}),d?a.isObject(d)&&a.isObject(d.promise)?(delete c.filterData,d.promise.then(function(b){a.isArray(b)||a.isFunction(b)||a.isObject(b)?a.isArray(b)&&b.unshift({title:"",id:""}):b=[],c.data=b})):c.data=d:void delete c.filterData})},this.buildColumns=function(a){return a.map(function(a){return i.buildColumn(a,b)})},this.parseNgTableDynamicExpr=function(a){if(!a||a.indexOf(" with ")>-1){var b=a.split(/\s+with\s+/);return{tableParams:b[0],columns:b[1]}}throw new Error("Parse error (expected example: ng-table-dynamic='tableParams with cols')")},this.setupBindingsToInternalScope=function(c){var d=e(c);b.$watch(d,function(c){a.isUndefined(c)||(b.paramsModel=d,b.params=c)},!1),g.showFilter&&b.$parent.$watch(g.showFilter,function(a){b.show_filter=a}),g.disableFilter&&b.$parent.$watch(g.disableFilter,function(a){b.$filterRow.disabled=a})},l()}]),b.factory("ngTableColumn",[function(){function b(b,d){var e=Object.create(b);for(var f in c)void 0===e[f]&&(e[f]=c[f]),a.isFunction(e[f])||!function(a){e[a]=function(){return b[a]}}(f),function(a){var c=e[a];e[a]=function(){return 0===arguments.length?c.call(b,d):c.apply(b,arguments)}}(f);return e}var c={"class":function(){return""},filter:function(){return!1},filterData:a.noop,headerTemplateURL:function(){return!1},headerTitle:function(){return""},sortable:function(){return!1},show:function(){return!0},title:function(){return""},titleAlt:function(){return""}};return{buildColumn:b}}]),b.directive("ngTable",["$q","$parse",function(b,c){return{restrict:"A",priority:1001,scope:!0,controller:"ngTableController",compile:function(b){var d=[],e=0,f=null;return a.forEach(a.element(b.find("tr")),function(b){b=a.element(b),b.hasClass("ng-table-group")||f||(f=b)}),f?(a.forEach(f.find("td"),function(b){var f=a.element(b);if(!f.attr("ignore-cell")||"true"!==f.attr("ignore-cell")){var g=function(a){return f.attr("x-data-"+a)||f.attr("data-"+a)||f.attr(a)},h=function(b){var e=g(b);return e?function(b,f){return c(e)(b,a.extend(f||{},{$columns:d}))}:void 0},i=g("title-alt")||g("title");i&&f.attr("data-title-text","{{"+i+"}}"),d.push({id:e++,title:h("title"),titleAlt:h("title-alt"),headerTitle:h("header-title"),sortable:h("sortable"),"class":h("header-class"),filter:h("filter"),headerTemplateURL:h("header"),filterData:h("filter-data"),show:f.attr("ng-if")?function(a){return c(f.attr("ng-if"))(a)}:void 0})}}),function(a,b,c,e){a.$columns=d=e.buildColumns(d),e.setupBindingsToInternalScope(c.ngTable),e.loadFilterData(d),e.compileDirectiveTemplates()}):void 0}}}]),b.directive("ngTableDynamic",["$parse",function(){return{restrict:"A",priority:1001,scope:!0,controller:"ngTableController",compile:function(b){var c;return a.forEach(a.element(b.find("tr")),function(b){b=a.element(b),b.hasClass("ng-table-group")||c||(c=b)}),c?(a.forEach(c.find("td"),function(b){var c=a.element(b),d=function(a){return c.attr("x-data-"+a)||c.attr("data-"+a)||c.attr(a)},e=d("title");e||c.attr("data-title-text","{{$columns[$index].titleAlt(this) || $columns[$index].title(this)}}");var f=c.attr("ng-if");f||c.attr("ng-if","$columns[$index].show(this)")}),function(a,b,c,d){var e=d.parseNgTableDynamicExpr(c.ngTableDynamic);d.setupBindingsToInternalScope(e.tableParams),d.compileDirectiveTemplates(),a.$watchCollection(e.columns,function(b){a.$columns=d.buildColumns(b),d.loadFilterData(a.$columns)})}):void 0}}}]),function(){function b(){var a={restrict:"E",replace:!0,templateUrl:"ng-table/filterRow.html",scope:!0,controller:"ngTableFilterRowController"};return a}a.module("ngTable").directive("ngTableFilterRow",b),b.$inject=[]}(),function(){function b(){var a={restrict:"E",replace:!0,templateUrl:"ng-table/sorterRow.html",scope:!0,controller:"ngTableSorterRowController"};return a}a.module("ngTable").directive("ngTableSorterRow",b),b.$inject=[]}(),b.directive("ngTablePagination",["$compile","ngTableEventsChannel",function(b,c){return{restrict:"A",scope:{params:"=ngTablePagination",templateUrl:"="},replace:!1,link:function(d,e){c.onAfterReloadData(function(a){d.pages=a.generatePagesArray()},d,function(a){return a===d.params}),d.$watch("templateUrl",function(c){if(!a.isUndefined(c)){var f=a.element(document.createElement("div"));f.attr({"ng-include":"templateUrl"}),e.append(f),b(f)(d)}})}}}]),a.module("ngTable").run(["$templateCache",function(a){a.put("ng-table/filterRow.html",'<tr ng-show="show_filter" class="ng-table-filters"> <th data-title-text="{{$column.titleAlt(this) || $column.title(this)}}" ng-repeat="$column in $columns" ng-if="$column.show(this)" class="filter"> <div ng-repeat="(name, filter) in $column.filter(this)"> <div ng-include="config.getTemplateUrl(filter)"></div> </div> </th> </tr> '),a.put("ng-table/filters/number.html",'<input type="number" name="{{name}}" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" class="input-filter form-control"/> '),a.put("ng-table/filters/select-multiple.html",'<select ng-options="data.id as data.title for data in $column.data" ng-disabled="$filterRow.disabled" multiple ng-multiple="true" ng-model="params.filter()[name]" class="filter filter-select-multiple form-control" name="{{name}}"> </select> '),a.put("ng-table/filters/select.html",'<select ng-options="data.id as data.title for data in $column.data" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" class="filter filter-select form-control" name="{{name}}"> <option style="display:none" value=""></option> </select> '),a.put("ng-table/filters/text.html",'<input type="text" name="{{name}}" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" class="input-filter form-control"/> '),a.put("ng-table/header.html","<ng-table-sorter-row></ng-table-sorter-row> <ng-table-filter-row></ng-table-filter-row> "),a.put("ng-table/pager.html",'<div class="ng-cloak ng-table-pager" ng-if="params.data.length"> <div ng-if="params.settings().counts.length" 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-default"> <span ng-bind="count"></span> </button> </div> <ul class="pagination ng-table-pagination"> <li ng-class="{\'disabled\': !page.active && !page.current, \'active\': page.current}" ng-repeat="page in pages" ng-switch="page.type"> <a ng-switch-when="prev" ng-click="params.page(page.number)" href="">«</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="">…</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="">»</a> </li> </ul> </div> '),a.put("ng-table/sorterRow.html",'<tr> <th title="{{$column.headerTitle(this)}}" ng-repeat="$column in $columns" ng-class="{ \'sortable\': $column.sortable(this), \'sort-asc\': params.sorting()[$column.sortable(this)]==\'asc\', \'sort-desc\': params.sorting()[$column.sortable(this)]==\'desc\' }" ng-click="sortBy($column, $event)" ng-if="$column.show(this)" ng-init="template=$column.headerTemplateURL(this)" class="header {{$column.class(this)}}"> <div ng-if="!template" class="ng-table-header" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'div\'}"> <span ng-bind="$column.title(this)" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'span\'}"></span> </div> <div ng-if="template" ng-include="template"></div> </th> </tr> ')}]),b});
//# sourceMappingURL=ng-table.min.js.map
/*! ngTable v0.8.3 by Vitalii Savchuk(esvit666@gmail.com) - https://github.com/esvit/ng-table - New BSD License */ ! function(a, b) {
"use strict";
return "function" == typeof define && define.amd ? void define(["angular"], function(a) {
return b(a)
}) : b(a)
}(window.angular || null, function(a) {
"use strict";
var b = a.module("ngTable", []);
return function() {
function b(b) {
function c(b, c) {
var f = b.charAt(0).toUpperCase() + b.substring(1),
g = {};
return g["on" + f] = d(b), g["publish" + f] = e(b), a.extend(c, g)
}
function d(c) {
return function(d) {
var e = a.identity,
g = b;
if (2 === arguments.length ? a.isFunction(arguments[1].$new) ? g = arguments[1] : e = arguments[1] : arguments.length > 2 && (g = arguments[1], e = arguments[2]), a.isObject(e)) {
var h = e;
e = function(a) {
return a === h
}
}
return g.$on("ngTable:" + c, function(a, b) {
if (!b.isNullInstance) {
var c = f(arguments, 2),
g = [b].concat(c);
e.apply(this, g) && d.apply(this, g)
}
})
}
}
function e(a) {
return function() {
var c = ["ngTable:" + a].concat(Array.prototype.slice.call(arguments));
b.$broadcast.apply(b, c)
}
}
function f(a, b) {
return Array.prototype.slice.call(a, null == b ? 1 : b)
}
var g = {};
return g = c("afterCreated", g), g = c("afterReloadData", g), g = c("datasetChanged", g), g = c("pagesChanged", g)
}
a.module("ngTable").factory("ngTableEventsChannel", b), b.$inject = ["$rootScope"]
}(),
function() {
function b() {
function b() {
c()
}
function c() {
f = g
}
function d(b) {
var c = a.extend({}, f, b);
c.aliasUrls = a.extend({}, f.aliasUrls, b.aliasUrls), f = c
}
function e() {
function b(a, b) {
return -1 !== a.indexOf("/") ? a : e.getUrlForAlias(a, b)
}
function c(a) {
return f.aliasUrls[a] || f.defaultBaseUrl + a + f.defaultExt
}
var d, e = {
config: d,
getTemplateUrl: b,
getUrlForAlias: c
};
return Object.defineProperty(e, "config", {
get: function() {
return d = d || a.copy(f)
},
enumerable: !0
}), e
}
var f, g = {
defaultBaseUrl: "ng-table/filters/",
defaultExt: ".html",
aliasUrls: {}
};
this.$get = e, this.resetConfigs = c, this.setConfig = d, b(), e.$inject = []
}
a.module("ngTable").provider("ngTableFilterConfig", b), b.$inject = []
}(),
function() {
function b() {
function a(a) {
function c(c, d) {
if (null == c) return [];
var e = d.hasFilter() ? a(b.filterFilterName)(c, d.filter(!0)) : c,
f = d.orderBy(),
g = f.length ? a(b.sortingFilterName)(e, f) : e,
h = g.slice((d.page() - 1) * d.count(), d.page() * d.count());
return d.total(g.length), h
}
return c
}
var b = this;
b.$get = a, b.filterFilterName = "filter", b.sortingFilterName = "orderBy", a.$inject = ["$filter"]
}
a.module("ngTable").provider("ngTableDefaultGetData", b), b.$inject = []
}(),
function() {
function b(a) {
function b(b) {
return function() {
var c = a.defer(),
d = b.apply(this, [c].concat(Array.prototype.slice.call(arguments)));
return d || (d = c.promise), d
}
}
return b
}
a.module("ngTable").factory("ngTableGetDataBcShim", b), b.$inject = ["$q"]
}(), b.value("ngTableDefaults", {
params: {},
settings: {}
}), b.factory("NgTableParams", ["$q", "$log", "ngTableDefaults", "ngTableGetDataBcShim", "ngTableDefaultGetData", "ngTableEventsChannel", function(b, c, d, e, f, g) {
var h = function(a) {
return !isNaN(parseFloat(a)) && isFinite(a)
},
i = function(i, j) {
function k() {
var a = s.getDataFnAdaptor(s.getData);
return b.when(a.call(s, o))
}
function l() {
var a = s.getGroupsFnAdaptor(s.getGroups);
return b.when(a.call(s, s.groupBy, o))
}
function m(a) {
var c = s.interceptors || [];
return c.reduce(function(a, c) {
var d = c.response && c.response.bind(c) || b.when,
e = c.responseError && c.responseError.bind(c) || b.reject;
return a.then(function(a) {
return d(a, o)
}, function(a) {
return e(a, o)
})
}, a())
}
"boolean" == typeof i && (this.isNullInstance = !0);
var n, o = this,
p = !1,
q = function() {
s.debugMode && c.debug && c.debug.apply(this, arguments)
};
this.data = [], this.parameters = function(b, c) {
if (c = c || !1, a.isDefined(b)) {
for (var d in b) {
var e = b[d];
if (c && d.indexOf("[") >= 0) {
for (var f = d.split(/\[(.*)\]/).reverse(), g = "", i = 0, j = f.length; j > i; i++) {
var k = f[i];
if ("" !== k) {
var l = e;
e = {}, e[g = k] = h(l) ? parseFloat(l) : l
}
}
"sorting" === g && (r[g] = {}), r[g] = a.extend(r[g] || {}, e[g])
} else r[d] = h(b[d]) ? parseFloat(b[d]) : b[d]
}
return q("ngTable: set parameters", r), this
}
return r
}, this.settings = function(b) {
if (a.isDefined(b)) {
a.isArray(b.data) && (b.total = b.data.length), b.getData && b.getData.length > 1 && (b.getDataFnAdaptor = e), b.getGroups && b.getGroups.length > 2 && (b.getGroupsFnAdaptor = e);
var c = s.data;
s = a.extend(s, b);
var d = b.hasOwnProperty("data") && b.data != c;
return d && (p && this.page(1), p = !1, g.publishDatasetChanged(this, b.data, c)), q("ngTable: set settings", s), this
}
return s
}, this.page = function(b) {
return a.isDefined(b) ? this.parameters({
page: b
}) : r.page
}, this.total = function(b) {
return a.isDefined(b) ? this.settings({
total: b
}) : s.total
}, this.count = function(b) {
return a.isDefined(b) ? this.parameters({
count: b,
page: 1
}) : r.count
}, this.filter = function(b) {
if (a.isDefined(b) && a.isObject(b)) return this.parameters({
filter: b,
page: 1
});
if (b === !0) {
for (var c = Object.keys(r.filter), d = {}, e = 0; e < c.length; e++) {
var f = r.filter[c[e]];
null != f && "" !== f && (d[c[e]] = f)
}
return d
}
return r.filter
}, this.sorting = function(b) {
if (2 == arguments.length) {
var c = {};
return c[b] = arguments[1], this.parameters({
sorting: c
}), this
}
return a.isDefined(b) ? this.parameters({
sorting: b
}) : r.sorting
}, this.isSortBy = function(b, c) {
return void 0 !== c ? a.isDefined(r.sorting[b]) && r.sorting[b] == c : a.isDefined(r.sorting[b])
}, this.orderBy = function() {
var a = [];
for (var b in r.sorting) a.push(("asc" === r.sorting[b] ? "+" : "-") + b);
return a
}, this.getData = function(a) {
return f(this.data, a)
}, this.getGroups = function(b) {
return k().then(function(c) {
var d = {};
a.forEach(c, function(c) {
var e = a.isFunction(b) ? b(c) : c[b];
d[e] = d[e] || {
data: []
}, d[e].value = e, d[e].data.push(c)
});
var e = [];
for (var f in d) e.push(d[f]);
return q("ngTable: refresh groups", e), e
})
}, this.generatePagesArray = function(a, b, c, d) {
arguments.length || (a = this.page(), b = this.total(), c = this.count());
var e, f, g, h, i;
if (d = d && 6 > d ? 6 : d, i = [], h = Math.ceil(b / c), h > 1) {
i.push({
type: "prev",
number: Math.max(1, a - 1),
active: a > 1
}), i.push({
type: "first",
number: 1,
active: a > 1,
current: 1 === a
}), f = Math.round((s.paginationMaxBlocks - s.paginationMinBlocks) / 2), g = Math.max(2, a - f), e = Math.min(h - 1, a + 2 * f - (a - g)), g = Math.max(2, g - (2 * f - (e - g)));
for (var j = g; e >= j;) i.push(j === g && 2 !== j || j === e && j !== h - 1 ? {
type: "more",
active: !1
} : {
type: "page",
number: j,
active: a !== j,
current: a === j
}), j++;
i.push({
type: "last",
number: h,
active: a !== h,
current: a === h
}), i.push({
type: "next",
number: Math.min(h, a + 1),
active: h > a
})
}
return i
}, this.isDataReloadRequired = function() {
return !p || !a.equals(r, n)
}, this.hasFilter = function() {
return Object.keys(this.filter(!0)).length > 0
}, this.hasFilterChanges = function() {
return !a.equals(r && r.filter, n && n.filter)
}, this.url = function(b) {
b = b || !1;
var c = b ? [] : {};
for (var d in r)
if (r.hasOwnProperty(d)) {
var e = r[d],
f = encodeURIComponent(d);
if ("object" == typeof e) {
for (var g in e)
if (!a.isUndefined(e[g]) && "" !== e[g]) {
var h = f + "[" + encodeURIComponent(g) + "]";
b ? c.push(h + "=" + e[g]) : c[h] = e[g]
}
} else a.isFunction(e) || a.isUndefined(e) || "" === e || (b ? c.push(f + "=" + encodeURIComponent(e)) : c[f] = encodeURIComponent(e))
}
return c
}, this.reload = function() {
var c = this,
d = null;
s.$loading = !0, n = a.copy(r), p = !0, d = m(s.groupBy ? l : k), q("ngTable: reload data");
var e = c.data;
return d.then(function(a) {
return s.$loading = !1, c.data = a, g.publishAfterReloadData(c, a, e), c.reloadPages(), s.$scope && s.$scope.$emit("ngTableAfterReloadData"), a
})["catch"](function(a) {
return n = null, p = !1, b.reject(a)
})
}, this.reloadPages = function() {
var b;
return function() {
var c = b,
d = o.generatePagesArray(o.page(), o.total(), o.count());
a.equals(c, d) || (b = d, g.publishPagesChanged(this, d, c))
}
}();
var r = {
page: 1,
count: 1,
filter: {},
sorting: {},
group: {},
groupBy: null
};
a.extend(r, d.params);
var s = {
$scope: null,
$loading: !1,
data: null,
total: 0,
defaultSort: "desc",
filterDelay: 750,
counts: [50, 100, 150, 200],
interceptors: [],
paginationMaxBlocks: 11,
paginationMinBlocks: 5,
sortingIndicator: "span",
getDataFnAdaptor: a.identity,
getGroupsFnAdaptor: a.identity,
getGroups: this.getGroups,
getData: this.getData
};
return this.settings(d.settings), this.settings(j), this.parameters(i, !0), g.publishAfterCreated(this), this
};
return i
}]), b.factory("ngTableParams", ["NgTableParams", function(a) {
return a
}]),
function() {
function b(a, b) {
a.config = b
}
a.module("ngTable").controller("ngTableFilterRowController", b), b.$inject = ["$scope", "ngTableFilterConfig"]
}(),
function() {
function b(a) {
function b(b, c) {
var d = b.sortable && b.sortable();
if (d) {
var e = a.params.settings().defaultSort,
f = "asc" === e ? "desc" : "asc",
g = a.params.sorting() && a.params.sorting()[d] && a.params.sorting()[d] === e,
h = c.ctrlKey || c.metaKey ? a.params.sorting() : {};
h[d] = g ? f : e, a.params.parameters({
sorting: h
})
}
}
a.sortBy = b
}
a.module("ngTable").controller("ngTableSorterRowController", b), b.$inject = ["$scope"]
}(), b.controller("ngTableController", ["$scope", "NgTableParams", "$timeout", "$parse", "$compile", "$attrs", "$element", "ngTableColumn", "ngTableEventsChannel", function(b, c, d, e, f, g, h, i, j) {
function k(a) {
if (a) {
b.params.settings().$scope = b;
var c = b.params;
if (c.hasFilterChanges()) {
var d = function() {
c.page(1), c.reload()
};
c.settings().filterDelay ? m(d, c.settings().filterDelay) : d()
} else c.reload()
}
}
function l() {
function a(a, c) {
a.settings().groupBy ? b.$groups = c : b.$data = c
}
function c(a, c) {
b.pages = c
}
function d(a) {
return b.params === a
}
j.onAfterReloadData(a, b, d), j.onPagesChanged(c, b, d)
}
b.$filterRow = {}, b.$loading = !1, b.hasOwnProperty("params") || (b.params = new c(!0)), b.params.settings().$scope = b;
var m = function() {
var a = 0;
return function(b, c) {
d.cancel(a), a = d(b, c)
}
}();
b.$watch("params", function(a, b) {
a !== b && a && a.reload()
}, !1), b.$watch("params.isDataReloadRequired()", k), this.compileDirectiveTemplates = function() {
if (!h.hasClass("ng-table")) {
b.templates = {
header: g.templateHeader ? g.templateHeader : "ng-table/header.html",
pagination: g.templatePagination ? g.templatePagination : "ng-table/pager.html"
}, h.addClass("ng-table");
var c = null,
d = !1;
a.forEach(h.children(), function(a) {
"THEAD" === a.tagName && (d = !0)
}), d || (c = a.element(document.createElement("thead")).attr("ng-include", "templates.header"), h.prepend(c));
var e = a.element(document.createElement("div")).attr({
"ng-table-pagination": "params",
"template-url": "templates.pagination"
});
h.after(e), c && f(c)(b), f(e)(b)
}
}, this.loadFilterData = function(c) {
a.forEach(c, function(c) {
var d;
return d = c.filterData(b, {
$column: c
}), d ? a.isObject(d) && a.isObject(d.promise) ? (delete c.filterData, d.promise.then(function(b) {
a.isArray(b) || a.isFunction(b) || a.isObject(b) ? a.isArray(b) && b.unshift({
title: "",
id: ""
}) : b = [], c.data = b
})) : c.data = d : void delete c.filterData
})
}, this.buildColumns = function(a) {
return a.map(function(a) {
return i.buildColumn(a, b)
})
}, this.parseNgTableDynamicExpr = function(a) {
if (!a || a.indexOf(" with ") > -1) {
var b = a.split(/\s+with\s+/);
return {
tableParams: b[0],
columns: b[1]
}
}
throw new Error("Parse error (expected example: ng-table-dynamic='tableParams with cols')")
}, this.setupBindingsToInternalScope = function(c) {
var d = e(c);
b.$watch(d, function(c) {
a.isUndefined(c) || (b.paramsModel = d, b.params = c)
}, !1), g.showFilter && b.$parent.$watch(g.showFilter, function(a) {
b.show_filter = a
}), g.disableFilter && b.$parent.$watch(g.disableFilter, function(a) {
b.$filterRow.disabled = a
})
}, l()
}]), b.factory("ngTableColumn", [function() {
function b(b, d) {
var e = Object.create(b);
for (var f in c) void 0 === e[f] && (e[f] = c[f]), a.isFunction(e[f]) || ! function(a) {
e[a] = function() {
return b[a]
}
}(f),
function(a) {
var c = e[a];
e[a] = function() {
return 0 === arguments.length ? c.call(b, d) : c.apply(b, arguments)
}
}(f);
return e
}
var c = {
"class": function() {
return ""
},
filter: function() {
return !1
},
filterData: a.noop,
headerTemplateURL: function() {
return !1
},
headerTitle: function() {
return ""
},
sortable: function() {
return !1
},
show: function() {
return !0
},
title: function() {
return ""
},
titleAlt: function() {
return ""
}
};
return {
buildColumn: b
}
}]), b.directive("ngTable", ["$q", "$parse", function(b, c) {
return {
restrict: "A",
priority: 1001,
scope: !0,
controller: "ngTableController",
compile: function(b) {
var d = [],
e = 0,
f = null;
return a.forEach(a.element(b.find("tr")), function(b) {
b = a.element(b), b.hasClass("ng-table-group") || f || (f = b)
}), f ? (a.forEach(f.find("td"), function(b) {
var f = a.element(b);
if (!f.attr("ignore-cell") || "true" !== f.attr("ignore-cell")) {
var g = function(a) {
return f.attr("x-data-" + a) || f.attr("data-" + a) || f.attr(a)
},
h = function(b) {
var e = g(b);
return e ? function(b, f) {
return c(e)(b, a.extend(f || {}, {
$columns: d
}))
} : void 0
},
i = g("title-alt") || g("title");
i && f.attr("data-title-text", "{{" + i + "}}"), d.push({
id: e++,
title: h("title"),
titleAlt: h("title-alt"),
headerTitle: h("header-title"),
sortable: h("sortable"),
"class": h("header-class"),
filter: h("filter"),
headerTemplateURL: h("header"),
filterData: h("filter-data"),
show: f.attr("ng-if") ? function(a) {
return c(f.attr("ng-if"))(a)
} : void 0
})
}
}), function(a, b, c, e) {
a.$columns = d = e.buildColumns(d), e.setupBindingsToInternalScope(c.ngTable), e.loadFilterData(d), e.compileDirectiveTemplates()
}) : void 0
}
}
}]), b.directive("ngTableDynamic", ["$parse", function() {
return {
restrict: "A",
priority: 1001,
scope: !0,
controller: "ngTableController",
compile: function(b) {
var c;
return a.forEach(a.element(b.find("tr")), function(b) {
b = a.element(b), b.hasClass("ng-table-group") || c || (c = b)
}), c ? (a.forEach(c.find("td"), function(b) {
var c = a.element(b),
d = function(a) {
return c.attr("x-data-" + a) || c.attr("data-" + a) || c.attr(a)
},
e = d("title");
e || c.attr("data-title-text", "{{$columns[$index].titleAlt(this) || $columns[$index].title(this)}}");
var f = c.attr("ng-if");
f || c.attr("ng-if", "$columns[$index].show(this)")
}), function(a, b, c, d) {
var e = d.parseNgTableDynamicExpr(c.ngTableDynamic);
d.setupBindingsToInternalScope(e.tableParams), d.compileDirectiveTemplates(), a.$watchCollection(e.columns, function(b) {
a.$columns = d.buildColumns(b), d.loadFilterData(a.$columns)
})
}) : void 0
}
}
}]),
function() {
function b() {
var a = {
restrict: "E",
replace: !0,
templateUrl: "ng-table/filterRow.html",
scope: !0,
controller: "ngTableFilterRowController"
};
return a
}
a.module("ngTable").directive("ngTableFilterRow", b), b.$inject = []
}(),
function() {
function b() {
var a = {
restrict: "E",
replace: !0,
templateUrl: "ng-table/sorterRow.html",
scope: !0,
controller: "ngTableSorterRowController"
};
return a
}
a.module("ngTable").directive("ngTableSorterRow", b), b.$inject = []
}(), b.directive("ngTablePagination", ["$compile", "ngTableEventsChannel", function(b, c) {
return {
restrict: "A",
scope: {
params: "=ngTablePagination",
templateUrl: "="
},
replace: !1,
link: function(d, e) {
c.onAfterReloadData(function(a) {
d.pages = a.generatePagesArray()
}, d, function(a) {
return a === d.params
}), d.$watch("templateUrl", function(c) {
if (!a.isUndefined(c)) {
var f = a.element(document.createElement("div"));
f.attr({
"ng-include": "templateUrl"
}), e.append(f), b(f)(d)
}
})
}
}
}]), a.module("ngTable").run(["$templateCache", function(a) {
a.put("ng-table/filterRow.html", '<tr ng-show="show_filter" class="ng-table-filters"> <th data-title-text="{{$column.titleAlt(this) || $column.title(this)}}" ng-repeat="$column in $columns" ng-if="$column.show(this)" class="filter"><div ng-repeat="(name, filter) in $column.filter(this)"> <div ng-include="config.getTemplateUrl(filter)"></div> </div> </th> </tr> '), a.put("ng-table/filters/number.html", '<input type="number" name="{{name}}" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" class="input-filter form-control"/> '), a.put("ng-table/filters/select-multiple.html", '<select ng-options="data.id as data.title for data in $column.data" ng-disabled="$filterRow.disabled" multiple ng-multiple="true" ng-model="params.filter()[name]" class="filter filter-select-multiple form-control" name="{{name}}"> </select> '), a.put("ng-table/filters/select.html", '<select ng-options="data.id as data.title for data in $column.data" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" class="filter filter-select form-control" name="{{name}}"> <option style="display:none" value=""></option> </select> '), a.put("ng-table/filters/text.html", '<input type="text" name="{{name}}" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" class="input-filter form-control"/> '), a.put("ng-table/header.html", "<ng-table-sorter-row></ng-table-sorter-row> <ng-table-filter-row></ng-table-filter-row> "), a.put("ng-table/pager.html", '<div class="ng-cloak ng-table-pager" ng-if="params.data.length"> <div style="float: right;"> <div ng-if="params.settings().counts.length" class="ng-table-counts btn-group" style="float: left; margin-top: 20px; margin-right: 20px;"> <select ng-model="count" ng-change="params.count(count)" class="recordCountSelect"> <option style="display:none" value="">50 Records Per Page</option><option ng-repeat="count in params.settings().counts" value="{{count}}">{{count}} Records Per Page</option> </select> </div> <ul class="pagination ng-table-pagination"> <li ng-class="{\'disabled\': !page.active && !page.current, \'active\': page.current}" ng-repeat="page in pages" ng-switch="page.type"> <a ng-switch-when="prev" ng-click="params.page(page.number)" href="">«</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="">…</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="">»</a> </li> </ul> </div> </div> '), a.put("ng-table/sorterRow.html", '<tr> <th title="{{$column.headerTitle(this)}}" ng-repeat="$column in $columns" ng-class="{ \'sortable\': $column.sortable(this), \'sort-asc\': params.sorting()[$column.sortable(this)]==\'asc\', \'sort-desc\': params.sorting()[$column.sortable(this)]==\'desc\' }" ng-click="sortBy($column, $event)" ng-if="$column.show(this)" ng-init="template=$column.headerTemplateURL(this)" class="header {{$column.class(this)}}"> <div ng-if="!template" class="ng-table-header" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'div\'}"> <span ng-bind="$column.title(this)" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'span\'}"></span> </div> <div ng-if="template" ng-include="template"></div> </th> </tr> ')
}]), b
});
//# sourceMappingURL=ng-table.min.js.map