+
+
+
+
diff --git a/demo/withPlugins/withLightColumnFilter.js b/demo/withPlugins/withLightColumnFilter.js
new file mode 100644
index 000000000..30214e173
--- /dev/null
+++ b/demo/withPlugins/withLightColumnFilter.js
@@ -0,0 +1,19 @@
+'use strict';
+angular.module('showcase.withLightColumnFilter', ['datatables', 'datatables.light-columnfilter'])
+.controller('WithLightColumnFilterCtrl', WithLightColumnFilterCtrl);
+
+function WithLightColumnFilterCtrl(DTOptionsBuilder, DTColumnBuilder) {
+ var vm = this;
+ vm.dtOptions = DTOptionsBuilder.fromSource('data.json')
+ .withPaginationType('full_numbers')
+ .withLightColumnFilter({
+ 0 : { "type" : "text"},
+ 1 : { "type" : "text"},
+ 2 : { "type" : "text"}
+ });
+ vm.dtColumns = [
+ DTColumnBuilder.newColumn('id').withTitle('ID'),
+ DTColumnBuilder.newColumn('firstName').withTitle('First name'),
+ DTColumnBuilder.newColumn('lastName').withTitle('Last name')
+ ];
+}
diff --git a/dist/angular-datatables.js b/dist/angular-datatables.js
index 89ff327b6..1daf93930 100644
--- a/dist/angular-datatables.js
+++ b/dist/angular-datatables.js
@@ -1098,21 +1098,21 @@ function dtAjaxRenderer($q, $timeout, DTRenderer, DTRendererService, DT_DEFAULT_
}
function _doRender(options, $elem) {
- var defer = $q.defer();
- // Set it to true in order to be able to redraw the dataTable
- options.bDestroy = true;
- DTRendererService.hideLoading($elem);
- // Condition to refresh the dataTable
- if (_shouldDeferRender(options)) {
- $timeout(function() {
- defer.resolve(DTRendererService.renderDataTable($elem, options));
- }, 0, false);
- } else {
+ var defer = $q.defer();
+ // Set it to true in order to be able to redraw the dataTable
+ options.bDestroy = true;
+ DTRendererService.hideLoading($elem);
+ // Condition to refresh the dataTable
+ if (_shouldDeferRender(options)) {
+ $timeout(function() {
defer.resolve(DTRendererService.renderDataTable($elem, options));
- }
- return defer.promise;
+ }, 0, false);
+ } else {
+ defer.resolve(DTRendererService.renderDataTable($elem, options));
}
- // See https://github.com/l-lin/angular-datatables/issues/147
+ return defer.promise;
+ }
+ // See https://github.com/l-lin/angular-datatables/issues/147
function _shouldDeferRender(options) {
if (angular.isDefined(options) && angular.isDefined(options.dom)) {
// S for scroller plugin
diff --git a/dist/angular-datatables.min.js b/dist/angular-datatables.min.js
index 1a97366ab..e715f11f9 100644
--- a/dist/angular-datatables.min.js
+++ b/dist/angular-datatables.min.js
@@ -3,4 +3,4 @@
* https://github.com/l-lin/angular-datatables
* License: MIT
*/
-!function(a,b,c,d){"use strict";function e(a,b,c,e,f){function g(a){var b=a[0].innerHTML;return function(a,c,f,g){function h(a,d){a!==d&&g.render(c,g.buildOptionsPromise(),b)}var i=f.dtDisableDeepWatchers?"$watchCollection":"$watch";d.forEach(["dtColumns","dtColumnDefs","dtOptions"],function(b){a[i].call(a,b,h,!0)}),e.showLoading(c),g.render(c,g.buildOptionsPromise(),b)}}function h(g){function h(){var c=a.defer();return a.all([a.when(g.dtOptions),a.when(g.dtColumns),a.when(g.dtColumnDefs)]).then(function(c){var e=c[0],g=c[1],h=c[2];f.deleteProperty(e,"$promise"),f.deleteProperty(g,"$promise"),f.deleteProperty(h,"$promise");var i;if(d.isDefined(e)&&(i={},d.extend(i,e),d.isArray(g)&&(i.aoColumns=g),d.isArray(h)&&(i.aoColumnDefs=h),i.language&&i.language.url)){var j=a.defer();b.get(i.language.url).success(function(a){j.resolve(a)}),i.language=j.promise}return f.resolveObjectPromises(i,["data","aaData","fnPromise"])}).then(function(a){c.resolve(a)}),c.promise}function i(a,b,d){b.then(function(b){e.preRender(b);var f=g.datatable&&"ng"===g.datatable;k&&k._renderer?k._renderer.withOptions(b).render(a,g,d).then(function(a){k=a,j(a)}):c.fromOptions(b,f).render(a,g,d).then(function(a){k=a,j(a)})})}function j(a){d.isFunction(g.dtInstance)?g.dtInstance(a):d.isDefined(g.dtInstance)&&(g.dtInstance=a)}var k,l=this;l.buildOptionsPromise=h,l.render=i}return g.$inject=["tElm"],h.$inject=["$scope"],{restrict:"A",scope:{dtOptions:"=",dtColumns:"=",dtColumnDefs:"=",datatable:"@",dtInstance:"="},compile:g,controller:h}}function f(){var a={hasOverrideDom:!1,withOption:function(a,b){return d.isString(a)&&(this[a]=b),this},withSource:function(a){return this.ajax=a,this},withDataProp:function(a){return this.sAjaxDataProp=a,this},withFnServerData:function(a){if(!d.isFunction(a))throw new Error("The parameter must be a function");return this.fnServerData=a,this},withPaginationType:function(a){if(!d.isString(a))throw new Error("The pagination type must be provided");return this.sPaginationType=a,this},withLanguage:function(a){return this.language=a,this},withLanguageSource:function(a){return this.withLanguage({url:a})},withDisplayLength:function(a){return this.iDisplayLength=a,this},withFnPromise:function(a){return this.fnPromise=a,this},withDOM:function(a){return this.dom=a,this}};return{newOptions:function(){return Object.create(a)},fromSource:function(b){var c=Object.create(a);return c.ajax=b,c},fromFnPromise:function(b){var c=Object.create(a);return c.fnPromise=b,c}}}function g(){var a={withOption:function(a,b){return d.isString(a)&&(this[a]=b),this},withTitle:function(a){return this.sTitle=a,this},withClass:function(a){return this.sClass=a,this},notVisible:function(){return this.bVisible=!1,this},notSortable:function(){return this.bSortable=!1,this},renderWith:function(a){return this.mRender=a,this}};return{newColumn:function(b,c){if(d.isUndefined(b))throw new Error('The parameter "mData" is not defined!');var e=Object.create(a);return e.mData=b,d.isString(c)&&(e.sTitle=c),e},DTColumn:a}}function h(a){return{newColumnDef:function(b){if(d.isUndefined(b))throw new Error('The parameter "targets" must be defined! See https://datatables.net/reference/option/columnDefs.targets');var c=Object.create(a.DTColumn);return c.aTargets=d.isArray(b)?b:[b],c}}}function i(){return{html:'
Loading...
'}}function j(){function a(a){var b=Object.create(f);return b._renderer=a,b}function b(a,b){b.id=a.id,b.DataTable=a.DataTable,b.dataTable=a.dataTable}function c(a,b){this._renderer.reloadData(a,b)}function d(a){this._renderer.changeData(a)}function e(){this._renderer.rerender()}var f={reloadData:c,changeData:d,rerender:e};return{newDTInstance:a,copyDTProperties:b}}function k(){c.fn.DataTable.Api&&c.fn.DataTable.Api.register("ngDestroy()",function(b){return b=b||!1,this.iterator("table",function(d){var e,f=d.nTableWrapper.parentNode,g=d.oClasses,h=d.nTable,i=d.nTBody,j=d.nTHead,k=d.nTFoot,l=c(h),m=c(i),n=c(d.nTableWrapper),o=c.map(d.aoData,function(a){return a.nTr});d.bDestroying=!0,c.fn.DataTable.ext.internal._fnCallbackFire(d,"aoDestroyCallback","destroy",[d]),b||new c.fn.DataTable.Api(d).columns().visible(!0),n.unbind(".DT").find(":not(tbody *)").unbind(".DT"),c(a).unbind(".DT-"+d.sInstance),h!==j.parentNode&&(l.children("thead").detach(),l.append(j)),k&&h!==k.parentNode&&(l.children("tfoot").detach(),l.append(k)),l.detach(),n.detach(),d.aaSorting=[],d.aaSortingFixed=[],c.fn.DataTable.ext.internal._fnSortingClasses(d),c(o).removeClass(d.asStripeClasses.join(" ")),c("th, td",j).removeClass(g.sSortable+" "+g.sSortableAsc+" "+g.sSortableDesc+" "+g.sSortableNone),d.bJUI&&(c("th span."+g.sSortIcon+", td span."+g.sSortIcon,j).detach(),c("th, td",j).each(function(){var a=c("div."+g.sSortJUIWrapper,this);c(this).append(a.contents()),a.detach()})),!b&&f&&(f.contains(d.nTableReinsertBefore)?f.insertBefore(h,d.nTableReinsertBefore):f.appendChild(h)),l.css("width",d.sDestroyWidth).removeClass(g.sTable),e=d.asDestroyStripes.length,e&&m.children().each(function(a){c(this).addClass(d.asDestroyStripes[a%e])});var p=c.inArray(d,c.fn.DataTable.settings);-1!==p&&c.fn.DataTable.settings.splice(p,1)})})}function l(){function a(a){return c.ajax({dataType:"json",url:a,success:function(a){c.extend(!0,c.fn.dataTable.defaults,{oLanguage:a})}}),f}function b(a){return c.extend(!0,c.fn.dataTable.defaults,{oLanguage:a}),f}function d(a){return c.extend(c.fn.dataTable.defaults,{iDisplayLength:a}),f}function e(a){return f.bootstrapOptions=a,f}var f={bootstrapOptions:{},setLanguageSource:a,setLanguage:b,setDisplayLength:d,setBootstrapOptions:e};return f}function m(a){function b(){return l}function e(a){a.after(l),a.hide(),l.show()}function f(a){a.show(),l.hide()}function g(a,b){var e="#"+a.attr("id");c.fn.dataTable.isDataTable(e)&&d.isObject(b)&&(b.destroy=!0);var f=a.DataTable(b),g=a.dataTable(),h={id:a.attr("id"),DataTable:f,dataTable:g};return j(b,h),h}function h(a,b){return n.hideLoading(a),n.renderDataTable(a,b)}function i(a){m.push(a)}function j(a,b){d.forEach(m,function(c){d.isFunction(c.postRender)&&c.postRender(a,b)})}function k(a){d.forEach(m,function(b){d.isFunction(b.preRender)&&b.preRender(a)})}var l=d.element(a.html),m=[],n={getLoadingElem:b,showLoading:e,hideLoading:f,renderDataTable:g,hideLoadingAndRenderDataTable:h,registerPlugin:i,postRender:j,preRender:k};return n}function n(){return{withOptions:function(a){return this.options=a,this}}}function o(a,b,c,d){function e(e){function f(b){k=b;var e=d.newDTInstance(l),f=c.hideLoadingAndRenderDataTable(b,l.options);return j=f.DataTable,d.copyDTProperties(f,e),a.when(e)}function g(){}function h(){}function i(){j.destroy(),c.showLoading(k),f(k)}var j,k,l=Object.create(b);return l.name="DTDefaultRenderer",l.options=e,l.render=f,l.reloadData=g,l.changeData=h,l.rerender=i,l}return{create:e}}function p(a,b,c,d,e,f,g){function h(h){function i(a,c,e){n=e,p=a,q=c.$parent,s=g.newDTInstance(t);var h=b.defer(),i=a.find("tbody").html(),j=i.match(/^\s*.+?\s+in\s+(\S*)\s*/m);if(!j)throw new Error('Expected expression in form of "_item_ in _collection_[ track by _id_]" but got "{0}".',i);var k=j[1],l=!1;return q.$watchCollection(k,function(){o&&l&&m(),d(function(){l=!0;var a=f.hideLoadingAndRenderDataTable(p,t.options);o=a.DataTable,g.copyDTProperties(a,s),h.resolve(s)},0,!1)},!0),h.promise}function j(){a.warn("The Angular Renderer does not support reloading data. You need to do it directly on your model")}function k(){a.warn("The Angular Renderer does not support changing the data. You need to change your model directly.")}function l(){m(),f.showLoading(p),d(function(){var a=f.hideLoadingAndRenderDataTable(p,t.options);o=a.DataTable,g.copyDTProperties(a,s)},0,!1)}function m(){r&&r.$destroy(),o.ngDestroy(),p.html(n),r=q.$new(),c(p.contents())(r)}var n,o,p,q,r,s,t=Object.create(e);return t.name="DTNGRenderer",t.options=h,t.render=i,t.reloadData=j,t.changeData=k,t.rerender=l,t}return{create:h}}function q(a,b,c,e,f,g){function h(h){function i(b){var c=a.defer();return s=g.newDTInstance(u),r=b,m(u.options.fnPromise,f.renderDataTable).then(function(a){q=a.DataTable,g.copyDTProperties(a,s),c.resolve(s)}),c.promise}function j(a,b){var e=q&&q.page()?q.page():0;d.isFunction(u.options.fnPromise)?m(u.options.fnPromise,p).then(function(c){d.isFunction(a)&&a(c.DataTable.data()),b===!1&&c.DataTable.page(e).draw(!1)}):c.warn("In order to use the reloadData functionality with a Promise renderer, you need to provide a function that returns a promise.")}function k(a){u.options.fnPromise=a,m(u.options.fnPromise,p)}function l(){q.destroy(),f.showLoading(r),i(r)}function m(b,c){var e=a.defer();if(d.isUndefined(b))throw new Error("You must provide a promise or a function that returns a promise!");return t?t.then(function(){e.resolve(n(b,c))}):e.resolve(n(b,c)),e.promise}function n(b,c){var e=a.defer();return t=d.isFunction(b)?b():b,t.then(function(a){var b=a;if(u.options.sAjaxDataProp)for(var d=u.options.sAjaxDataProp.split(".");d.length;){var f=d.shift();f in b&&(b=b[f])}t=null,e.resolve(o(u.options,r,b,c))}),e.promise}function o(c,d,e,g){var h=a.defer();return delete e.$promise,c.aaData=e,b(function(){f.hideLoading(d),c.bDestroy=!0,h.resolve(g(d,c))},0,!1),h.promise}function p(a,b){return q.clear(),q.rows.add(b.aaData).draw(b.redraw),{id:s.id,DataTable:s.DataTable,dataTable:s.dataTable}}var q,r,s,t=null,u=Object.create(e);return u.name="DTPromiseRenderer",u.options=h,u.render=i,u.reloadData=j,u.changeData=k,u.rerender=l,u}return{create:h}}function r(a,b,c,e,f,g){function h(h){function i(b){p=b;var c=a.defer(),e=g.newDTInstance(q);return d.isUndefined(q.options.sAjaxDataProp)&&(q.options.sAjaxDataProp=f.sAjaxDataProp),d.isUndefined(q.options.aoColumns)&&(q.options.aoColumns=f.aoColumns),m(q.options,b).then(function(a){o=a.DataTable,g.copyDTProperties(a,e),c.resolve(e)}),c.promise}function j(a,b){o&&o.ajax.reload(a,b)}function k(a){if(q.options.ajax=a,o){var b=q.options.ajax.url||q.options.ajax;o.ajax.url(b).load()}}function l(){o.destroy(),e.showLoading(p),i(p)}function m(c,d){var f=a.defer();return c.bDestroy=!0,e.hideLoading(d),n(c)?b(function(){f.resolve(e.renderDataTable(d,c))},0,!1):f.resolve(e.renderDataTable(d,c)),f.promise}function n(a){return d.isDefined(a)&&d.isDefined(a.dom)?a.dom.indexOf("S")>=0:!1}var o,p,q=Object.create(c);return q.name="DTAjaxRenderer",q.options=h,q.render=i,q.reloadData=j,q.changeData=k,q.rerender=l,q}return{create:h}}function s(a,b,c,e){function f(f,g){return g?b.create(f):d.isDefined(f)?d.isDefined(f.fnPromise)&&null!==f.fnPromise?c.create(f):d.isDefined(f.ajax)&&null!==f.ajax||d.isDefined(f.ajax)&&null!==f.ajax?e.create(f):a.create(f):a.create()}return{fromOptions:f}}function t(a){function b(a,c){var e=d.copy(a);if((d.isUndefined(e)||null===e)&&(e={}),d.isUndefined(c)||null===c)return e;if(d.isObject(c))for(var f in c)c.hasOwnProperty(f)&&(e[f]=b(e[f],c[f]));else e=d.copy(c);return e}function e(a,b){d.isObject(a)&&delete a[b]}function f(b,e){var f=a.defer(),h=[],i={},j=e||[];if(!d.isObject(b)||d.isArray(b))f.resolve(b);else{i=d.extend(i,b);for(var k in i)i.hasOwnProperty(k)&&-1===c.inArray(k,j)&&h.push(d.isArray(i[k])?g(i[k]):a.when(i[k]));a.all(h).then(function(a){var b=0;for(var d in i)i.hasOwnProperty(d)&&-1===c.inArray(d,j)&&(i[d]=a[b++]);f.resolve(i)})}return f.promise}function g(b){var c=a.defer(),e=[],g=[];return d.isArray(b)?(d.forEach(b,function(b){e.push(d.isObject(b)?f(b):a.when(b))}),a.all(e).then(function(a){d.forEach(a,function(a){g.push(a)}),c.resolve(g)})):c.resolve(b),c.promise}return{overrideProperties:b,deleteProperty:e,resolveObjectPromises:f,resolveArrayPromises:g}}d.module("datatables.directive",["datatables.instances","datatables.renderer","datatables.options","datatables.util"]).directive("datatable",e),e.$inject=["$q","$http","DTRendererFactory","DTRendererService","DTPropertyUtil"],d.module("datatables.factory",[]).factory("DTOptionsBuilder",f).factory("DTColumnBuilder",g).factory("DTColumnDefBuilder",h).factory("DTLoadingTemplate",i),h.$inject=["DTColumnBuilder"],d.module("datatables.instances",["datatables.util"]).factory("DTInstanceFactory",j),d.module("datatables",["datatables.directive","datatables.factory"]).run(k),d.module("datatables.options",[]).constant("DT_DEFAULT_OPTIONS",{dom:"lfrtip",sAjaxDataProp:"",aoColumns:[]}).service("DTDefaultOptions",l),d.module("datatables.renderer",["datatables.instances","datatables.factory","datatables.options","datatables.instances"]).factory("DTRendererService",m).factory("DTRenderer",n).factory("DTDefaultRenderer",o).factory("DTNGRenderer",p).factory("DTPromiseRenderer",q).factory("DTAjaxRenderer",r).factory("DTRendererFactory",s),m.$inject=["DTLoadingTemplate"],o.$inject=["$q","DTRenderer","DTRendererService","DTInstanceFactory"],p.$inject=["$log","$q","$compile","$timeout","DTRenderer","DTRendererService","DTInstanceFactory"],q.$inject=["$q","$timeout","$log","DTRenderer","DTRendererService","DTInstanceFactory"],r.$inject=["$q","$timeout","DTRenderer","DTRendererService","DT_DEFAULT_OPTIONS","DTInstanceFactory"],s.$inject=["DTDefaultRenderer","DTNGRenderer","DTPromiseRenderer","DTAjaxRenderer"],d.module("datatables.util",[]).factory("DTPropertyUtil",t),t.$inject=["$q"]}(window,document,jQuery,angular);
\ No newline at end of file
+!function(a,b,c,d){"use strict";function e(a,b,c,e,f){function g(a){var b=a[0].innerHTML;return function(a,c,f,g){function h(a,d){a!==d&&g.render(c,g.buildOptionsPromise(),b)}var i=f.dtDisableDeepWatchers?"$watchCollection":"$watch";d.forEach(["dtColumns","dtColumnDefs","dtOptions"],function(b){a[i].call(a,b,h,!0)}),e.showLoading(c),g.render(c,g.buildOptionsPromise(),b)}}function h(g){function h(){var c=a.defer();return a.all([a.when(g.dtOptions),a.when(g.dtColumns),a.when(g.dtColumnDefs)]).then(function(c){var e=c[0],g=c[1],h=c[2];f.deleteProperty(e,"$promise"),f.deleteProperty(g,"$promise"),f.deleteProperty(h,"$promise");var i;if(d.isDefined(e)&&(i={},d.extend(i,e),d.isArray(g)&&(i.aoColumns=g),d.isArray(h)&&(i.aoColumnDefs=h),i.language&&i.language.url)){var j=a.defer();b.get(i.language.url).success(function(a){j.resolve(a)}),i.language=j.promise}return f.resolveObjectPromises(i,["data","aaData","fnPromise"])}).then(function(a){c.resolve(a)}),c.promise}function i(a,b,d){b.then(function(b){e.preRender(b);var f=g.datatable&&"ng"===g.datatable;k&&k._renderer?k._renderer.withOptions(b).render(a,g,d).then(function(a){k=a,j(a)}):c.fromOptions(b,f).render(a,g,d).then(function(a){k=a,j(a)})})}function j(a){d.isFunction(g.dtInstance)?g.dtInstance(a):d.isDefined(g.dtInstance)&&(g.dtInstance=a)}var k,l=this;l.buildOptionsPromise=h,l.render=i}return g.$inject=["tElm"],h.$inject=["$scope"],{restrict:"A",scope:{dtOptions:"=",dtColumns:"=",dtColumnDefs:"=",datatable:"@",dtInstance:"="},compile:g,controller:h}}function f(){var a={hasOverrideDom:!1,withOption:function(a,b){return d.isString(a)&&(this[a]=b),this},withSource:function(a){return this.ajax=a,this},withDataProp:function(a){return this.sAjaxDataProp=a,this},withFnServerData:function(a){if(!d.isFunction(a))throw new Error("The parameter must be a function");return this.fnServerData=a,this},withPaginationType:function(a){if(!d.isString(a))throw new Error("The pagination type must be provided");return this.sPaginationType=a,this},withLanguage:function(a){return this.language=a,this},withLanguageSource:function(a){return this.withLanguage({url:a})},withDisplayLength:function(a){return this.iDisplayLength=a,this},withFnPromise:function(a){return this.fnPromise=a,this},withDOM:function(a){return this.dom=a,this}};return{newOptions:function(){return Object.create(a)},fromSource:function(b){var c=Object.create(a);return c.ajax=b,c},fromFnPromise:function(b){var c=Object.create(a);return c.fnPromise=b,c}}}function g(){var a={withOption:function(a,b){return d.isString(a)&&(this[a]=b),this},withTitle:function(a){return this.sTitle=a,this},withClass:function(a){return this.sClass=a,this},notVisible:function(){return this.bVisible=!1,this},notSortable:function(){return this.bSortable=!1,this},renderWith:function(a){return this.mRender=a,this}};return{newColumn:function(b,c){if(d.isUndefined(b))throw new Error('The parameter "mData" is not defined!');var e=Object.create(a);return e.mData=b,d.isString(c)&&(e.sTitle=c),e},DTColumn:a}}function h(a){return{newColumnDef:function(b){if(d.isUndefined(b))throw new Error('The parameter "targets" must be defined! See https://datatables.net/reference/option/columnDefs.targets');var c=Object.create(a.DTColumn);return d.isArray(b)?c.aTargets=b:c.aTargets=[b],c}}}function i(){return{html:'
Loading...
'}}function j(){function a(a){var b=Object.create(f);return b._renderer=a,b}function b(a,b){b.id=a.id,b.DataTable=a.DataTable,b.dataTable=a.dataTable}function c(a,b){this._renderer.reloadData(a,b)}function d(a){this._renderer.changeData(a)}function e(){this._renderer.rerender()}var f={reloadData:c,changeData:d,rerender:e};return{newDTInstance:a,copyDTProperties:b}}function k(){c.fn.DataTable.Api&&c.fn.DataTable.Api.register("ngDestroy()",function(b){return b=b||!1,this.iterator("table",function(d){var e,f=d.nTableWrapper.parentNode,g=d.oClasses,h=d.nTable,i=d.nTBody,j=d.nTHead,k=d.nTFoot,l=c(h),m=c(i),n=c(d.nTableWrapper),o=c.map(d.aoData,function(a){return a.nTr});d.bDestroying=!0,c.fn.DataTable.ext.internal._fnCallbackFire(d,"aoDestroyCallback","destroy",[d]),b||new c.fn.DataTable.Api(d).columns().visible(!0),n.unbind(".DT").find(":not(tbody *)").unbind(".DT"),c(a).unbind(".DT-"+d.sInstance),h!==j.parentNode&&(l.children("thead").detach(),l.append(j)),k&&h!==k.parentNode&&(l.children("tfoot").detach(),l.append(k)),l.detach(),n.detach(),d.aaSorting=[],d.aaSortingFixed=[],c.fn.DataTable.ext.internal._fnSortingClasses(d),c(o).removeClass(d.asStripeClasses.join(" ")),c("th, td",j).removeClass(g.sSortable+" "+g.sSortableAsc+" "+g.sSortableDesc+" "+g.sSortableNone),d.bJUI&&(c("th span."+g.sSortIcon+", td span."+g.sSortIcon,j).detach(),c("th, td",j).each(function(){var a=c("div."+g.sSortJUIWrapper,this);c(this).append(a.contents()),a.detach()})),!b&&f&&(f.contains(d.nTableReinsertBefore)?f.insertBefore(h,d.nTableReinsertBefore):f.appendChild(h)),l.css("width",d.sDestroyWidth).removeClass(g.sTable),e=d.asDestroyStripes.length,e&&m.children().each(function(a){c(this).addClass(d.asDestroyStripes[a%e])});var p=c.inArray(d,c.fn.DataTable.settings);-1!==p&&c.fn.DataTable.settings.splice(p,1)})})}function l(){function a(a){return c.ajax({dataType:"json",url:a,success:function(a){c.extend(!0,c.fn.dataTable.defaults,{oLanguage:a})}}),f}function b(a){return c.extend(!0,c.fn.dataTable.defaults,{oLanguage:a}),f}function d(a){return c.extend(c.fn.dataTable.defaults,{iDisplayLength:a}),f}function e(a){return f.bootstrapOptions=a,f}var f={bootstrapOptions:{},setLanguageSource:a,setLanguage:b,setDisplayLength:d,setBootstrapOptions:e};return f}function m(a){function b(){return l}function e(a){a.after(l),a.hide(),l.show()}function f(a){a.show(),l.hide()}function g(a,b){var e="#"+a.attr("id");c.fn.dataTable.isDataTable(e)&&d.isObject(b)&&(b.destroy=!0);var f=a.DataTable(b),g=a.dataTable(),h={id:a.attr("id"),DataTable:f,dataTable:g};return j(b,h),h}function h(a,b){return n.hideLoading(a),n.renderDataTable(a,b)}function i(a){m.push(a)}function j(a,b){d.forEach(m,function(c){d.isFunction(c.postRender)&&c.postRender(a,b)})}function k(a){d.forEach(m,function(b){d.isFunction(b.preRender)&&b.preRender(a)})}var l=d.element(a.html),m=[],n={getLoadingElem:b,showLoading:e,hideLoading:f,renderDataTable:g,hideLoadingAndRenderDataTable:h,registerPlugin:i,postRender:j,preRender:k};return n}function n(){return{withOptions:function(a){return this.options=a,this}}}function o(a,b,c,d){function e(e){function f(b){k=b;var e=d.newDTInstance(l),f=c.hideLoadingAndRenderDataTable(b,l.options);return j=f.DataTable,d.copyDTProperties(f,e),a.when(e)}function g(){}function h(){}function i(){j.destroy(),c.showLoading(k),f(k)}var j,k,l=Object.create(b);return l.name="DTDefaultRenderer",l.options=e,l.render=f,l.reloadData=g,l.changeData=h,l.rerender=i,l}return{create:e}}function p(a,b,c,d,e,f,g){function h(h){function i(a,c,e){n=e,p=a,q=c.$parent,s=g.newDTInstance(t);var h=b.defer(),i=a.find("tbody").html(),j=i.match(/^\s*.+?\s+in\s+(\S*)\s*/m);if(!j)throw new Error('Expected expression in form of "_item_ in _collection_[ track by _id_]" but got "{0}".',i);var k=j[1],l=!1;return q.$watchCollection(k,function(){o&&l&&m(),d(function(){l=!0;var a=f.hideLoadingAndRenderDataTable(p,t.options);o=a.DataTable,g.copyDTProperties(a,s),h.resolve(s)},0,!1)},!0),h.promise}function j(){a.warn("The Angular Renderer does not support reloading data. You need to do it directly on your model")}function k(){a.warn("The Angular Renderer does not support changing the data. You need to change your model directly.")}function l(){m(),f.showLoading(p),d(function(){var a=f.hideLoadingAndRenderDataTable(p,t.options);o=a.DataTable,g.copyDTProperties(a,s)},0,!1)}function m(){r&&r.$destroy(),o.ngDestroy(),p.html(n),r=q.$new(),c(p.contents())(r)}var n,o,p,q,r,s,t=Object.create(e);return t.name="DTNGRenderer",t.options=h,t.render=i,t.reloadData=j,t.changeData=k,t.rerender=l,t}return{create:h}}function q(a,b,c,e,f,g){function h(h){function i(b){var c=a.defer();return s=g.newDTInstance(u),r=b,m(u.options.fnPromise,f.renderDataTable).then(function(a){q=a.DataTable,g.copyDTProperties(a,s),c.resolve(s)}),c.promise}function j(a,b){var e=q&&q.page()?q.page():0;d.isFunction(u.options.fnPromise)?m(u.options.fnPromise,p).then(function(c){d.isFunction(a)&&a(c.DataTable.data()),b===!1&&c.DataTable.page(e).draw(!1)}):c.warn("In order to use the reloadData functionality with a Promise renderer, you need to provide a function that returns a promise.")}function k(a){u.options.fnPromise=a,m(u.options.fnPromise,p)}function l(){q.destroy(),f.showLoading(r),i(r)}function m(b,c){var e=a.defer();if(d.isUndefined(b))throw new Error("You must provide a promise or a function that returns a promise!");return t?t.then(function(){e.resolve(n(b,c))}):e.resolve(n(b,c)),e.promise}function n(b,c){var e=a.defer();return t=d.isFunction(b)?b():b,t.then(function(a){var b=a;if(u.options.sAjaxDataProp)for(var d=u.options.sAjaxDataProp.split(".");d.length;){var f=d.shift();f in b&&(b=b[f])}t=null,e.resolve(o(u.options,r,b,c))}),e.promise}function o(c,d,e,g){var h=a.defer();return delete e.$promise,c.aaData=e,b(function(){f.hideLoading(d),c.bDestroy=!0,h.resolve(g(d,c))},0,!1),h.promise}function p(a,b){return q.clear(),q.rows.add(b.aaData).draw(b.redraw),{id:s.id,DataTable:s.DataTable,dataTable:s.dataTable}}var q,r,s,t=null,u=Object.create(e);return u.name="DTPromiseRenderer",u.options=h,u.render=i,u.reloadData=j,u.changeData=k,u.rerender=l,u}return{create:h}}function r(a,b,c,e,f,g){function h(h){function i(b){p=b;var c=a.defer(),e=g.newDTInstance(q);return d.isUndefined(q.options.sAjaxDataProp)&&(q.options.sAjaxDataProp=f.sAjaxDataProp),d.isUndefined(q.options.aoColumns)&&(q.options.aoColumns=f.aoColumns),m(q.options,b).then(function(a){o=a.DataTable,g.copyDTProperties(a,e),c.resolve(e)}),c.promise}function j(a,b){o&&o.ajax.reload(a,b)}function k(a){if(q.options.ajax=a,o){var b=q.options.ajax.url||q.options.ajax;o.ajax.url(b).load()}}function l(){o.destroy(),e.showLoading(p),i(p)}function m(c,d){var f=a.defer();return c.bDestroy=!0,e.hideLoading(d),n(c)?b(function(){f.resolve(e.renderDataTable(d,c))},0,!1):f.resolve(e.renderDataTable(d,c)),f.promise}function n(a){return d.isDefined(a)&&d.isDefined(a.dom)?a.dom.indexOf("S")>=0:!1}var o,p,q=Object.create(c);return q.name="DTAjaxRenderer",q.options=h,q.render=i,q.reloadData=j,q.changeData=k,q.rerender=l,q}return{create:h}}function s(a,b,c,e){function f(f,g){return g?b.create(f):d.isDefined(f)?d.isDefined(f.fnPromise)&&null!==f.fnPromise?c.create(f):d.isDefined(f.ajax)&&null!==f.ajax||d.isDefined(f.ajax)&&null!==f.ajax?e.create(f):a.create(f):a.create()}return{fromOptions:f}}function t(a){function b(a,c){var e=d.copy(a);if((d.isUndefined(e)||null===e)&&(e={}),d.isUndefined(c)||null===c)return e;if(d.isObject(c))for(var f in c)c.hasOwnProperty(f)&&(e[f]=b(e[f],c[f]));else e=d.copy(c);return e}function e(a,b){d.isObject(a)&&delete a[b]}function f(b,e){var f=a.defer(),h=[],i={},j=e||[];if(!d.isObject(b)||d.isArray(b))f.resolve(b);else{i=d.extend(i,b);for(var k in i)i.hasOwnProperty(k)&&-1===c.inArray(k,j)&&(d.isArray(i[k])?h.push(g(i[k])):h.push(a.when(i[k])));a.all(h).then(function(a){var b=0;for(var d in i)i.hasOwnProperty(d)&&-1===c.inArray(d,j)&&(i[d]=a[b++]);f.resolve(i)})}return f.promise}function g(b){var c=a.defer(),e=[],g=[];return d.isArray(b)?(d.forEach(b,function(b){d.isObject(b)?e.push(f(b)):e.push(a.when(b))}),a.all(e).then(function(a){d.forEach(a,function(a){g.push(a)}),c.resolve(g)})):c.resolve(b),c.promise}return{overrideProperties:b,deleteProperty:e,resolveObjectPromises:f,resolveArrayPromises:g}}d.module("datatables.directive",["datatables.instances","datatables.renderer","datatables.options","datatables.util"]).directive("datatable",e),e.$inject=["$q","$http","DTRendererFactory","DTRendererService","DTPropertyUtil"],d.module("datatables.factory",[]).factory("DTOptionsBuilder",f).factory("DTColumnBuilder",g).factory("DTColumnDefBuilder",h).factory("DTLoadingTemplate",i),h.$inject=["DTColumnBuilder"],d.module("datatables.instances",["datatables.util"]).factory("DTInstanceFactory",j),d.module("datatables",["datatables.directive","datatables.factory"]).run(k),d.module("datatables.options",[]).constant("DT_DEFAULT_OPTIONS",{dom:"lfrtip",sAjaxDataProp:"",aoColumns:[]}).service("DTDefaultOptions",l),d.module("datatables.renderer",["datatables.instances","datatables.factory","datatables.options","datatables.instances"]).factory("DTRendererService",m).factory("DTRenderer",n).factory("DTDefaultRenderer",o).factory("DTNGRenderer",p).factory("DTPromiseRenderer",q).factory("DTAjaxRenderer",r).factory("DTRendererFactory",s),m.$inject=["DTLoadingTemplate"],o.$inject=["$q","DTRenderer","DTRendererService","DTInstanceFactory"],p.$inject=["$log","$q","$compile","$timeout","DTRenderer","DTRendererService","DTInstanceFactory"],q.$inject=["$q","$timeout","$log","DTRenderer","DTRendererService","DTInstanceFactory"],r.$inject=["$q","$timeout","DTRenderer","DTRendererService","DT_DEFAULT_OPTIONS","DTInstanceFactory"],s.$inject=["DTDefaultRenderer","DTNGRenderer","DTPromiseRenderer","DTAjaxRenderer"],d.module("datatables.util",[]).factory("DTPropertyUtil",t),t.$inject=["$q"]}(window,document,jQuery,angular);
\ No newline at end of file
diff --git a/dist/plugins/bootstrap/angular-datatables.bootstrap.js b/dist/plugins/bootstrap/angular-datatables.bootstrap.js
index b8ed71574..363c89531 100644
--- a/dist/plugins/bootstrap/angular-datatables.bootstrap.js
+++ b/dist/plugins/bootstrap/angular-datatables.bootstrap.js
@@ -354,15 +354,15 @@ function dtBootstrap(DTBootstrapTableTools, DTBootstrapColVis, DTBootstrapDefaul
}
function _setDom(options) {
- if (!options.dom || options.dom === DT_DEFAULT_OPTIONS.dom) {
- return DTBootstrapDefaultOptions.getOptions().dom;
- }
- return options.dom;
+ if (!options.dom || options.dom === DT_DEFAULT_OPTIONS.dom) {
+ return DTBootstrapDefaultOptions.getOptions().dom;
}
- /**
- * Integrate Bootstrap
- * @param options the datatables options
- */
+ return options.dom;
+ }
+ /**
+ * Integrate Bootstrap
+ * @param options the datatables options
+ */
function integrate(options) {
_init(options.bootstrap);
DTBootstrapTableTools.integrate(options.bootstrap);
diff --git a/dist/plugins/light-columnfilter/angular-datatables.light-columnfilter.js b/dist/plugins/light-columnfilter/angular-datatables.light-columnfilter.js
new file mode 100644
index 000000000..e4deeea85
--- /dev/null
+++ b/dist/plugins/light-columnfilter/angular-datatables.light-columnfilter.js
@@ -0,0 +1,89 @@
+/*!
+ * angular-datatables - v0.5.0
+ * https://github.com/l-lin/angular-datatables
+ * License: MIT
+ */
+(function (window, document, $, angular) {
+
+/*!
+ * angular-datatables - v0.4.3
+ * https://github.com/l-lin/angular-datatables
+ * License: MIT
+ */
+(function(window, document, $, angular) {
+
+ 'use strict';
+
+ // See https://github.com/thansen-solire/datatables-light-columnfilter
+ angular.module('datatables.light-columnfilter', ['datatables'])
+ .config(dtColumnFilterConfig)
+ .run(initColumnFilterPlugin);
+
+ /* @ngInject */
+ function dtColumnFilterConfig($provide) {
+ $provide.decorator('DTOptionsBuilder', dtOptionsBuilderDecorator);
+
+ function dtOptionsBuilderDecorator($delegate) {
+ var newOptions = $delegate.newOptions;
+ var fromSource = $delegate.fromSource;
+ var fromFnPromise = $delegate.fromFnPromise;
+
+ $delegate.newOptions = function() {
+ return _decorateOptions(newOptions);
+ };
+ $delegate.fromSource = function(ajax) {
+ return _decorateOptions(fromSource, ajax);
+ };
+ $delegate.fromFnPromise = function(fnPromise) {
+ return _decorateOptions(fromFnPromise, fnPromise);
+ };
+
+ return $delegate;
+
+ function _decorateOptions(fn, params) {
+ var options = fn(params);
+ options.withLightColumnFilter = withLightColumnFilter;
+ return options;
+
+ /**
+ * Add column filter support
+ * @param lightColumnFilterOptions the plugins options
+ * @returns {DTOptions} the options
+ */
+ function withLightColumnFilter(lightColumnFilterOptions) {
+ options.hasLightColumnFilter = true;
+ if (lightColumnFilterOptions) {
+ options.lightColumnFilterOptions = lightColumnFilterOptions;
+ }
+ return options;
+ }
+ }
+ }
+
+ dtOptionsBuilderDecorator.$inject = ['$delegate'];
+ }
+
+ dtColumnFilterConfig.$inject = ['$provide'];
+
+ /* @ngInject */
+ function initColumnFilterPlugin(DTRendererService) {
+ var lightColumnFilterPlugin = {
+ postRender: postRender
+ };
+ DTRendererService.registerPlugin(lightColumnFilterPlugin);
+
+ function postRender(options, result) {
+ if (options && options.hasLightColumnFilter) {
+ var dt = $('#' + result.id).DataTable();
+ new $.fn.dataTable.ColumnFilter(dt, options.lightColumnFilterOptions);
+ }
+ }
+ }
+
+ initColumnFilterPlugin.$inject = ['DTRendererService'];
+
+
+})(window, document, jQuery, angular);
+
+
+})(window, document, jQuery, angular);
\ No newline at end of file
diff --git a/dist/plugins/light-columnfilter/angular-datatables.light-columnfilter.min.js b/dist/plugins/light-columnfilter/angular-datatables.light-columnfilter.min.js
new file mode 100644
index 000000000..26b3ad448
--- /dev/null
+++ b/dist/plugins/light-columnfilter/angular-datatables.light-columnfilter.min.js
@@ -0,0 +1,6 @@
+/*!
+ * angular-datatables - v0.5.0
+ * https://github.com/l-lin/angular-datatables
+ * License: MIT
+ */
+!function(a,b,c,d){!function(a,b,c,d){"use strict";function e(a){function b(a){function b(a,b){function c(a){return d.hasLightColumnFilter=!0,a&&(d.lightColumnFilterOptions=a),d}var d=a(b);return d.withLightColumnFilter=c,d}var c=a.newOptions,d=a.fromSource,e=a.fromFnPromise;return a.newOptions=function(){return b(c)},a.fromSource=function(a){return b(d,a)},a.fromFnPromise=function(a){return b(e,a)},a}a.decorator("DTOptionsBuilder",b),b.$inject=["$delegate"]}function f(a){function b(a,b){if(a&&a.hasLightColumnFilter){var d=c("#"+b.id).DataTable();new c.fn.dataTable.ColumnFilter(d,a.lightColumnFilterOptions)}}var d={postRender:b};a.registerPlugin(d)}d.module("datatables.light-columnfilter",["datatables"]).config(e).run(f),e.$inject=["$provide"],f.$inject=["DTRendererService"]}(a,b,jQuery,d)}(window,document,jQuery,angular);
\ No newline at end of file
diff --git a/grunt/concat.js b/grunt/concat.js
index 5bb099a5c..5163b3fe2 100644
--- a/grunt/concat.js
+++ b/grunt/concat.js
@@ -13,6 +13,7 @@ module.exports = {
'<%= yeoman.build %>/plugins/bootstrap/angular-datatables.bootstrap.js': ['<%= yeoman.src %>/plugins/bootstrap/*.js'],
'<%= yeoman.build %>/plugins/colreorder/angular-datatables.colreorder.js': ['<%= yeoman.src %>/plugins/colreorder/*.js'],
'<%= yeoman.build %>/plugins/columnfilter/angular-datatables.columnfilter.js': ['<%= yeoman.src %>/plugins/columnfilter/*.js'],
+ '<%= yeoman.build %>/plugins/light-columnfilter/angular-datatables.light-columnfilter.js': ['<%= yeoman.src %>/plugins/light-columnfilter/*.js'],
'<%= yeoman.build %>/plugins/colvis/angular-datatables.colvis.js': ['<%= yeoman.src %>/plugins/colvis/*.js'],
'<%= yeoman.build %>/plugins/scroller/angular-datatables.scroller.js': ['<%= yeoman.src %>/plugins/scroller/*.js'],
'<%= yeoman.build %>/plugins/tabletools/angular-datatables.tabletools.js': ['<%= yeoman.src %>/plugins/tabletools/*.js'],
@@ -27,6 +28,7 @@ module.exports = {
'<%= yeoman.dist %>/plugins/bootstrap/angular-datatables.bootstrap.js': ['<%= yeoman.build %>/plugins/bootstrap/angular-datatables.bootstrap.js'],
'<%= yeoman.dist %>/plugins/colreorder/angular-datatables.colreorder.js': ['<%= yeoman.build %>/plugins/colreorder/angular-datatables.colreorder.js'],
'<%= yeoman.dist %>/plugins/columnfilter/angular-datatables.columnfilter.js': ['<%= yeoman.build %>/plugins/columnfilter/angular-datatables.columnfilter.js'],
+ '<%= yeoman.dist %>/plugins/light-columnfilter/angular-datatables.light-columnfilter.js': ['<%= yeoman.build %>/plugins/light-columnfilter/angular-datatables.light-columnfilter.js'],
'<%= yeoman.dist %>/plugins/colvis/angular-datatables.colvis.js': ['<%= yeoman.build %>/plugins/colvis/angular-datatables.colvis.js'],
'<%= yeoman.dist %>/plugins/scroller/angular-datatables.scroller.js': ['<%= yeoman.build %>/plugins/scroller/angular-datatables.scroller.js'],
'<%= yeoman.dist %>/plugins/tabletools/angular-datatables.tabletools.js': ['<%= yeoman.build %>/plugins/tabletools/angular-datatables.tabletools.js'],
diff --git a/grunt/ngAnnotate.js b/grunt/ngAnnotate.js
index 16c1bec5d..7dfeca134 100644
--- a/grunt/ngAnnotate.js
+++ b/grunt/ngAnnotate.js
@@ -9,6 +9,7 @@ module.exports = {
'<%= yeoman.build %>/plugins/bootstrap/angular-datatables.bootstrap.js': ['<%= yeoman.build %>/plugins/bootstrap/angular-datatables.bootstrap.js'],
'<%= yeoman.build %>/plugins/colreorder/angular-datatables.colreorder.js': ['<%= yeoman.build %>/plugins/colreorder/angular-datatables.colreorder.js'],
'<%= yeoman.build %>/plugins/columnfilter/angular-datatables.columnfilter.js': ['<%= yeoman.build %>/plugins/columnfilter/angular-datatables.columnfilter.js'],
+ '<%= yeoman.build %>/plugins/light-columnfilter/angular-datatables.light-columnfilter.js': ['<%= yeoman.build %>/plugins/light-columnfilter/angular-datatables.light-columnfilter.js'],
'<%= yeoman.build %>/plugins/colvis/angular-datatables.colvis.js': ['<%= yeoman.build %>/plugins/colvis/angular-datatables.colvis.js'],
'<%= yeoman.build %>/plugins/scroller/angular-datatables.scroller.js': ['<%= yeoman.build %>/plugins/scroller/angular-datatables.scroller.js'],
'<%= yeoman.build %>/plugins/tabletools/angular-datatables.tabletools.js': ['<%= yeoman.build %>/plugins/tabletools/angular-datatables.tabletools.js'],
diff --git a/index.html b/index.html
index 5eb304325..7426ce37c 100644
--- a/index.html
+++ b/index.html
@@ -69,6 +69,7 @@
+
@@ -101,6 +102,7 @@
+
@@ -133,6 +135,7 @@
+
diff --git a/index.js b/index.js
index 4301076dc..31447dc3a 100644
--- a/index.js
+++ b/index.js
@@ -3,6 +3,7 @@ require('./dist/plugins/bootstrap/angular-datatables.bootstrap');
require('./dist/plugins/bootstrap/datatables.bootstrap.css');
require('./dist/plugins/colreorder/angular-datatables.colreorder');
require('./dist/plugins/columnfilter/angular-datatables.columnfilter');
+require('./dist/plugins/light-columnfilter/angular-datatables.light-columnfilter');
require('./dist/plugins/colvis/angular-datatables.colvis');
require('./dist/plugins/fixedcolumns/angular-datatables.fixedcolumns');
require('./dist/plugins/fixedheader/angular-datatables.fixedheader');
diff --git a/src/angular-datatables.renderer.js b/src/angular-datatables.renderer.js
index 919083379..393bbb021 100644
--- a/src/angular-datatables.renderer.js
+++ b/src/angular-datatables.renderer.js
@@ -429,21 +429,21 @@ function dtAjaxRenderer($q, $timeout, DTRenderer, DTRendererService, DT_DEFAULT_
}
function _doRender(options, $elem) {
- var defer = $q.defer();
- // Set it to true in order to be able to redraw the dataTable
- options.bDestroy = true;
- DTRendererService.hideLoading($elem);
- // Condition to refresh the dataTable
- if (_shouldDeferRender(options)) {
- $timeout(function() {
- defer.resolve(DTRendererService.renderDataTable($elem, options));
- }, 0, false);
- } else {
+ var defer = $q.defer();
+ // Set it to true in order to be able to redraw the dataTable
+ options.bDestroy = true;
+ DTRendererService.hideLoading($elem);
+ // Condition to refresh the dataTable
+ if (_shouldDeferRender(options)) {
+ $timeout(function() {
defer.resolve(DTRendererService.renderDataTable($elem, options));
- }
- return defer.promise;
+ }, 0, false);
+ } else {
+ defer.resolve(DTRendererService.renderDataTable($elem, options));
}
- // See https://github.com/l-lin/angular-datatables/issues/147
+ return defer.promise;
+ }
+ // See https://github.com/l-lin/angular-datatables/issues/147
function _shouldDeferRender(options) {
if (angular.isDefined(options) && angular.isDefined(options.dom)) {
// S for scroller plugin
diff --git a/src/plugins/bootstrap/angular-datatables.bootstrap.js b/src/plugins/bootstrap/angular-datatables.bootstrap.js
index 4bd15b46f..5e3058688 100644
--- a/src/plugins/bootstrap/angular-datatables.bootstrap.js
+++ b/src/plugins/bootstrap/angular-datatables.bootstrap.js
@@ -307,15 +307,15 @@ function dtBootstrap(DTBootstrapTableTools, DTBootstrapColVis, DTBootstrapDefaul
}
function _setDom(options) {
- if (!options.dom || options.dom === DT_DEFAULT_OPTIONS.dom) {
- return DTBootstrapDefaultOptions.getOptions().dom;
- }
- return options.dom;
+ if (!options.dom || options.dom === DT_DEFAULT_OPTIONS.dom) {
+ return DTBootstrapDefaultOptions.getOptions().dom;
}
- /**
- * Integrate Bootstrap
- * @param options the datatables options
- */
+ return options.dom;
+ }
+ /**
+ * Integrate Bootstrap
+ * @param options the datatables options
+ */
function integrate(options) {
_init(options.bootstrap);
DTBootstrapTableTools.integrate(options.bootstrap);
diff --git a/src/plugins/light-columnfilter/angular-datatables.light-columnfilter.js b/src/plugins/light-columnfilter/angular-datatables.light-columnfilter.js
new file mode 100644
index 000000000..da90d4b3b
--- /dev/null
+++ b/src/plugins/light-columnfilter/angular-datatables.light-columnfilter.js
@@ -0,0 +1,79 @@
+/*!
+ * angular-datatables - v0.4.3
+ * https://github.com/l-lin/angular-datatables
+ * License: MIT
+ */
+(function(window, document, $, angular) {
+
+ 'use strict';
+
+ // See https://github.com/thansen-solire/datatables-light-columnfilter
+ angular.module('datatables.light-columnfilter', ['datatables'])
+ .config(dtColumnFilterConfig)
+ .run(initColumnFilterPlugin);
+
+ /* @ngInject */
+ function dtColumnFilterConfig($provide) {
+ $provide.decorator('DTOptionsBuilder', dtOptionsBuilderDecorator);
+
+ function dtOptionsBuilderDecorator($delegate) {
+ var newOptions = $delegate.newOptions;
+ var fromSource = $delegate.fromSource;
+ var fromFnPromise = $delegate.fromFnPromise;
+
+ $delegate.newOptions = function() {
+ return _decorateOptions(newOptions);
+ };
+ $delegate.fromSource = function(ajax) {
+ return _decorateOptions(fromSource, ajax);
+ };
+ $delegate.fromFnPromise = function(fnPromise) {
+ return _decorateOptions(fromFnPromise, fnPromise);
+ };
+
+ return $delegate;
+
+ function _decorateOptions(fn, params) {
+ var options = fn(params);
+ options.withLightColumnFilter = withLightColumnFilter;
+ return options;
+
+ /**
+ * Add column filter support
+ * @param lightColumnFilterOptions the plugins options
+ * @returns {DTOptions} the options
+ */
+ function withLightColumnFilter(lightColumnFilterOptions) {
+ options.hasLightColumnFilter = true;
+ if (lightColumnFilterOptions) {
+ options.lightColumnFilterOptions = lightColumnFilterOptions;
+ }
+ return options;
+ }
+ }
+ }
+
+ dtOptionsBuilderDecorator.$inject = ['$delegate'];
+ }
+
+ dtColumnFilterConfig.$inject = ['$provide'];
+
+ /* @ngInject */
+ function initColumnFilterPlugin(DTRendererService) {
+ var lightColumnFilterPlugin = {
+ postRender: postRender
+ };
+ DTRendererService.registerPlugin(lightColumnFilterPlugin);
+
+ function postRender(options, result) {
+ if (options && options.hasLightColumnFilter) {
+ var dt = $('#' + result.id).DataTable();
+ new $.fn.dataTable.ColumnFilter(dt, options.lightColumnFilterOptions);
+ }
+ }
+ }
+
+ initColumnFilterPlugin.$inject = ['DTRendererService'];
+
+
+})(window, document, jQuery, angular);
diff --git a/vendor/datatables-light-columnfilter/.bower.json b/vendor/datatables-light-columnfilter/.bower.json
new file mode 100644
index 000000000..86fc31b25
--- /dev/null
+++ b/vendor/datatables-light-columnfilter/.bower.json
@@ -0,0 +1,28 @@
+{
+ "name": "datatables-light-columnfilter",
+ "license": "CC by-nc",
+ "main": "dist/dataTables.lightColumnFilter.min.js",
+ "ignore": [
+ "src",
+ "nbproject",
+ "package.json",
+ "Gruntfile.js",
+ "README.md",
+ ".gitignore"
+ ],
+ "dependencies": {
+ "datatables": "1.10.*"
+ },
+ "homepage": "https://github.com/thansen-solire/datatables-light-columnfilter",
+ "version": "0.0.7",
+ "_release": "0.0.7",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.0.7",
+ "commit": "7d35bbd17979a5018be01fb3b6f26e00d887e9db"
+ },
+ "_source": "git://github.com/thansen-solire/datatables-light-columnfilter.git",
+ "_target": "~0.0.7",
+ "_originalSource": "datatables-light-columnfilter",
+ "_direct": true
+}
\ No newline at end of file
diff --git a/vendor/datatables-light-columnfilter/bower.json b/vendor/datatables-light-columnfilter/bower.json
new file mode 100644
index 000000000..ae7f2c379
--- /dev/null
+++ b/vendor/datatables-light-columnfilter/bower.json
@@ -0,0 +1,16 @@
+{
+ "name": "datatables-light-columnfilter",
+ "license": "CC by-nc",
+ "main": "dist/dataTables.lightColumnFilter.min.js",
+ "ignore": [
+ "src",
+ "nbproject",
+ "package.json",
+ "Gruntfile.js",
+ "README.md",
+ ".gitignore"
+ ],
+ "dependencies": {
+ "datatables": "1.10.*"
+ }
+}
diff --git a/vendor/datatables-light-columnfilter/dist/dataTables.lcf.datepicker.fr.js b/vendor/datatables-light-columnfilter/dist/dataTables.lcf.datepicker.fr.js
new file mode 100644
index 000000000..923be1fcf
--- /dev/null
+++ b/vendor/datatables-light-columnfilter/dist/dataTables.lcf.datepicker.fr.js
@@ -0,0 +1,56 @@
+/*!
+ * @author Thomas
+ * @licence CC BY-NC 4.0 http://creativecommons.org/licenses/by-nc/4.0/
+ *
+ * Wrapper module for bootstrap datepicker
+ *
+ * https://github.com/eternicode/bootstrap-datepicker
+ * to install : bower install bootstrap-datepicker#1.3.*
+ * or add : "bootstrap-datepicker": "1.3.*" in your bower.json
+ */
+(function(window, document) {
+ var factory = function($, ColumnFilter) {
+ 'use strict';
+
+ $.fn.datepicker.defaults.format = 'dd/mm/yyyy';
+
+ $.extend(ColumnFilter.filter.dateRange, {
+ separator: '~',
+ bindEvents: function(){
+ var self = this;
+
+ self.elements.datepicker().on('changeDate', function(){
+ self.search();
+ });
+ },
+ format: function(value){
+ return value.split('/').reverse().join('-');
+ },
+ request: function(){
+ var
+ self = this,
+ search = []
+ ;
+
+ self.elements.each(function(){
+ var value = $(this).val();
+ value = self.options.format(value);
+ search.push(value);
+ });
+
+ return search.join(self.options.separator);
+ }
+ });
+ };
+
+ // Define as an AMD module if possible
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery', 'datatables-light-columnfilter', 'datepicker'], factory);
+ } else if (typeof exports === 'object') {
+ // Node/CommonJS
+ factory(require('jquery'), require('datatables-light-columnfilter'), require('datepicker'));
+ } else if (jQuery) {
+ // Otherwise simply initialise as normal, stopping multiple evaluation
+ factory(jQuery, jQuery.fn.dataTable.ColumnFilter);
+ }
+})(window, document);
diff --git a/vendor/datatables-light-columnfilter/dist/dataTables.lcf.datepicker.fr.min.js b/vendor/datatables-light-columnfilter/dist/dataTables.lcf.datepicker.fr.min.js
new file mode 100644
index 000000000..a00f6e440
--- /dev/null
+++ b/vendor/datatables-light-columnfilter/dist/dataTables.lcf.datepicker.fr.min.js
@@ -0,0 +1,11 @@
+/*!
+ * @author Thomas
+ * @licence CC BY-NC 4.0 http://creativecommons.org/licenses/by-nc/4.0/
+ *
+ * Wrapper module for bootstrap datepicker
+ *
+ * https://github.com/eternicode/bootstrap-datepicker
+ * to install : bower install bootstrap-datepicker#1.3.*
+ * or add : "bootstrap-datepicker": "1.3.*" in your bower.json
+ */
+!function(){var a=function(a,b){"use strict";a.fn.datepicker.defaults.format="dd/mm/yyyy",a.extend(b.filter.dateRange,{separator:"~",bindEvents:function(){var a=this;a.elements.datepicker().on("changeDate",function(){a.search()})},format:function(a){return a.split("/").reverse().join("-")},request:function(){var b=this,c=[];return b.elements.each(function(){var d=a(this).val();d=b.options.format(d),c.push(d)}),c.join(b.options.separator)}})};"function"==typeof define&&define.amd?define(["jquery","datatables-light-columnfilter","datepicker"],a):"object"==typeof exports?a(require("jquery"),require("datatables-light-columnfilter"),require("datepicker")):jQuery&&a(jQuery,jQuery.fn.dataTable.ColumnFilter)}(window,document);
\ No newline at end of file
diff --git a/vendor/datatables-light-columnfilter/dist/dataTables.lightColumnFilter.js b/vendor/datatables-light-columnfilter/dist/dataTables.lightColumnFilter.js
new file mode 100644
index 000000000..916dc2c4a
--- /dev/null
+++ b/vendor/datatables-light-columnfilter/dist/dataTables.lightColumnFilter.js
@@ -0,0 +1,281 @@
+/*!
+ * @author Thomas
+ * @licence CC BY-NC 4.0 http://creativecommons.org/licenses/by-nc/4.0/
+ *
+ * A light filter column pluggin for jquery.dataTables#1.10
+ */
+(function(window, document) {
+ var factory = function($, dataTable) {
+ 'use strict';
+
+ var
+ /**
+ * Create a new Column instance
+ *
+ * @param {DataTable} dataTable The DataTables object
+ * @param {integer} index The index of the column
+ * @param {DataTable} dataTableColumn The DataTables Column object
+ * @param {object} options The columnfilter options for this column
+ *
+ * @returns {Column}
+ */
+ Column = function(dataTable, index, dataTableColumn, options) {
+ var
+ self = this,
+ defaultOptions,
+ methods = [
+ 'dom',
+ 'bindEvents',
+ 'request'
+ ]
+ ;
+
+ if (options.type in ColumnFilter.filter) {
+ defaultOptions = $.extend({}, ColumnFilter.filter[options.type]);
+ } else {
+ defaultOptions = {};
+ }
+ self.options = $.extend({}, defaultOptions, options);
+
+ $.each(methods, function(ii, method){
+ if (method in self.options) {
+ self[method] = self.options[method];
+ }
+ })
+
+ self.dataTable = dataTable;
+ self.dataTableColumn = dataTableColumn;
+ self.index = index;
+ },
+ /**
+ * Create a new ColumnFilter instance
+ *
+ * @param {DataTable} dataTable The DataTables object
+ * @param {object} options The columnfilter options
+ *
+ * @returns {ColumnFilter}
+ */
+ ColumnFilter = function(dataTable, options) {
+ var self = this;
+
+ self.columns = [];
+ self.dataTable = null;
+ self.init(dataTable, options);
+ }
+ ;
+
+ Column.prototype = {
+ /**
+ * Build the form DOM elements
+ *
+ * @param {type} th The th element where to put the elements
+ *
+ * @returns {jQuery}
+ */
+ dom: function(th){},
+ /**
+ * Binds event to the DOM elements
+ *
+ * @returns {void}
+ */
+ bindEvents: function(){},
+ /**
+ * Return the searched string
+ *
+ * @returns {string}
+ */
+ request: function(){},
+ /**
+ * Trigger the datatable search with the request
+ *
+ * @returns {void}
+ */
+ search: function(){
+ var self = this;
+
+ self
+ .dataTableColumn
+ .search(self.request())
+ .draw()
+ ;
+ }
+ }
+
+ ColumnFilter.prototype = {
+ /**
+ * Initialize the filter pluggin
+ *
+ * @param {DataTable} dataTable
+ * @param {object} options
+ *
+ * @returns {void}
+ */
+ init: function(dataTable, options){
+ var
+ self = this,
+ tr
+ ;
+
+ self.dataTable = dataTable;
+
+ tr = $('
').appendTo(self.dataTable.table().header());
+
+ self.dataTable.columns().eq(0).each(function(index){
+ var
+ columnOptions = index in options ? options[index] : {},
+ column = new Column(
+ self.dataTable,
+ index,
+ self.dataTable.column(index),
+ columnOptions
+ ),
+ th = $('
').appendTo(tr)
+ ;
+ self.columns.push(column);
+
+ column.dom(th);
+ column.bindEvents();
+ });
+ },
+ /**
+ * Add a custom filter
+ *
+ * @param {string} name
+ * @param {object} filter
+ *
+ * @returns {void}
+ */
+ addFilter: function(name, filter){
+ ColumnFilter.filter[name] = filter;
+ }
+ };
+
+ /**
+ * Default Column configuration
+ */
+ ColumnFilter.default = {
+ type: 'text'
+ };
+
+ ColumnFilter.filter = {
+ text: {
+ /**
+ * Build the form DOM elements
+ *
+ * @param {type} th The th element where to put the elements
+ *
+ * @returns {jQuery}
+ */
+ dom: function(th){
+ var self = this;
+
+ self.elements = $('', {
+ type: 'text'
+ }).appendTo(th);
+
+
+ return self.elements;
+ },
+ /**
+ * Binds event to the DOM elements
+ *
+ * @returns {void}
+ */
+ bindEvents: function(){
+ var
+ self = this,
+ time = 200,
+ timeOutId = 0
+ ;
+
+ if ('time' in self.options) {
+ time = self.options.time;
+ }
+
+ self.elements.keyup(function(){
+ clearTimeout(timeOutId);
+ timeOutId = window.setTimeout(function(){
+ self.search();
+ }, time);
+ });
+ },
+ /**
+ * Return the searched string
+ *
+ * @returns {string}
+ */
+ request: function(){
+ var self = this;
+
+ return self.elements.val();
+ }
+ },
+ dateRange: {
+ separator: '~',
+ /**
+ * Build the form DOM elements
+ *
+ * @param {type} th The th element where to put the elements
+ *
+ * @returns {jQuery}
+ */
+ dom: function(th){
+ var self = this;
+
+ self.elements = $('', {
+ type: 'text'
+ }).add($('', {
+ type: 'text'
+ })).appendTo(th);
+
+ return self.elements;
+ },
+ /**
+ * Binds event to the DOM elements
+ *
+ * @returns {void}
+ */
+ bindEvents: function(){
+ var self = this;
+
+ self.elements.change(function(){
+ self.search();
+ });
+ },
+ /**
+ * Return the searched string
+ *
+ * @returns {string}
+ */
+ request: function(){
+ var
+ self = this,
+ request = []
+ ;
+
+ self.elements.each(function(){
+ request.push($(this).val());
+ });
+
+ return request.join(self.options.separator);
+ }
+ }
+ };
+
+ $.fn.dataTable.ColumnFilter = ColumnFilter;
+ $.fn.DataTable.ColumnFilter = ColumnFilter;
+
+ return ColumnFilter;
+ };
+
+ // Define as an AMD module if possible
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery', 'datatables'], factory);
+ } else if (typeof exports === 'object') {
+ // Node/CommonJS
+ factory(require('jquery'), require('datatables'));
+ } else if (jQuery && !jQuery.fn.dataTable.ColumnFilter) {
+ // Otherwise simply initialise as normal, stopping multiple evaluation
+ factory(jQuery, jQuery.fn.dataTable);
+ }
+})(window, document);
diff --git a/vendor/datatables-light-columnfilter/dist/dataTables.lightColumnFilter.min.js b/vendor/datatables-light-columnfilter/dist/dataTables.lightColumnFilter.min.js
new file mode 100644
index 000000000..cc63798b0
--- /dev/null
+++ b/vendor/datatables-light-columnfilter/dist/dataTables.lightColumnFilter.min.js
@@ -0,0 +1,7 @@
+/*!
+ * @author Thomas
+ * @licence CC BY-NC 4.0 http://creativecommons.org/licenses/by-nc/4.0/
+ *
+ * A light filter column pluggin for jquery.dataTables#1.10
+ */
+!function(a){var b=function(b){"use strict";var c=function(a,c,e,f){var g,h=this,i=["dom","bindEvents","request"];g=f.type in d.filter?b.extend({},d.filter[f.type]):{},h.options=b.extend({},g,f),b.each(i,function(a,b){b in h.options&&(h[b]=h.options[b])}),h.dataTable=a,h.dataTableColumn=e,h.index=c},d=function(a,b){var c=this;c.columns=[],c.dataTable=null,c.init(a,b)};return c.prototype={dom:function(){},bindEvents:function(){},request:function(){},search:function(){var a=this;a.dataTableColumn.search(a.request()).draw()}},d.prototype={init:function(a,d){var e,f=this;f.dataTable=a,e=b("
").appendTo(f.dataTable.table().header()),f.dataTable.columns().eq(0).each(function(a){var g=a in d?d[a]:{},h=new c(f.dataTable,a,f.dataTable.column(a),g),i=b("
").appendTo(e);f.columns.push(h),h.dom(i),h.bindEvents()})},addFilter:function(a,b){d.filter[a]=b}},d["default"]={type:"text"},d.filter={text:{dom:function(a){var c=this;return c.elements=b("",{type:"text"}).appendTo(a),c.elements},bindEvents:function(){var b=this,c=200,d=0;"time"in b.options&&(c=b.options.time),b.elements.keyup(function(){clearTimeout(d),d=a.setTimeout(function(){b.search()},c)})},request:function(){var a=this;return a.elements.val()}},dateRange:{separator:"~",dom:function(a){var c=this;return c.elements=b("",{type:"text"}).add(b("",{type:"text"})).appendTo(a),c.elements},bindEvents:function(){var a=this;a.elements.change(function(){a.search()})},request:function(){var a=this,c=[];return a.elements.each(function(){c.push(b(this).val())}),c.join(a.options.separator)}}},b.fn.dataTable.ColumnFilter=d,b.fn.DataTable.ColumnFilter=d,d};"function"==typeof define&&define.amd?define(["jquery","datatables"],b):"object"==typeof exports?b(require("jquery"),require("datatables")):jQuery&&!jQuery.fn.dataTable.ColumnFilter&&b(jQuery,jQuery.fn.dataTable)}(window,document);
\ No newline at end of file