vendor/assets/javascripts/extensions/bootstrap-table-angular.js in bootstrap-table-rails-1.8.2 vs vendor/assets/javascripts/extensions/bootstrap-table-angular.js in bootstrap-table-rails-1.8.2.1

- old
+ new

@@ -1,7 +1,105 @@ -/* -* bootstrap-table - v1.8.1 - 2015-07-05 -* https://github.com/wenzhixin/bootstrap-table -* Copyright (c) 2015 zhixin wen -* Licensed MIT License -*/ -!function(){angular.module("bsTable",[]).directive("bsTableControl",function(){function a(a){var b;return $.each(f,function(d,e){return e.$el.closest(c).has(a).length?(b=e,!0):void 0}),b}function b(){var a=this,b=a.$s.bsTableControl.state;a.$s.$applyAsync(function(){b.scroll=a.$el.bootstrapTable("getScrollPosition")})}var c=".bootstrap-table",d=".fixed-table-body",e=".search input",f={};return $(window).resize(function(){$.each(f,function(a,b){b.$el.bootstrapTable("resetView")})}),$(document).on("post-header.bs.table",c+" table",function(e){var f=a(e.target);f&&f.$el.closest(c).find(d).on("scroll",b.bind(f))}).on("sort.bs.table",c+" table",function(b,c,d){var e=a(b.target);if(e){var f=e.$s.bsTableControl.state;e.$s.$applyAsync(function(){f.sortName=c,f.sortOrder=d})}}).on("page-change.bs.table",c+" table",function(b,c,d){var e=a(b.target);if(e){var f=e.$s.bsTableControl.state;e.$s.$applyAsync(function(){f.pageNumber=c,f.pageSize=d})}}).on("search.bs.table",c+" table",function(b,c){var d=a(b.target);if(d){var e=d.$s.bsTableControl.state;d.$s.$applyAsync(function(){e.searchText=c})}}).on("focus blur",c+" "+e,function(b){var c=a(b.target);if(c){var d=c.$s.bsTableControl.state;c.$s.$applyAsync(function(){d.searchHasFocus=$(b.target).is(":focus")})}}),{restrict:"EA",scope:{bsTableControl:"="},link:function(a,b){f[a.$id]={$s:a,$el:b};a.instantiated=!1,a.$watch("bsTableControl.options",function(d){d||(d=a.bsTableControl.options={});var f=a.bsTableControl.state||{};a.instantiated&&b.bootstrapTable("destroy"),b.bootstrapTable(angular.extend(angular.copy(d),f)),a.instantiated=!0,"scroll"in f&&b.bootstrapTable("scrollTo",f.scroll),"searchHasFocus"in f&&b.closest(c).find(e).focus()},!0),a.$watch("bsTableControl.state",function(c){c||(c=a.bsTableControl.state={}),b.trigger("directive-updated.bs.table",[c])},!0),a.$on("$destroy",function(){delete f[a.$id]})}}})}(); \ No newline at end of file +// JavaScript source code +(function () { + if (typeof angular === 'undefined') { + return; + } + angular.module('bsTable', []).directive('bsTableControl', function () { + var CONTAINER_SELECTOR = '.bootstrap-table'; + var SCROLLABLE_SELECTOR = '.fixed-table-body'; + var SEARCH_SELECTOR = '.search input'; + var bsTables = {}; + function getBsTable (el) { + var result; + $.each(bsTables, function (id, bsTable) { + if (!bsTable.$el.closest(CONTAINER_SELECTOR).has(el).length) return; + result = bsTable; + return true; + }); + return result; + } + + $(window).resize(function () { + $.each(bsTables, function (id, bsTable) { + bsTable.$el.bootstrapTable('resetView'); + }); + }); + function onScroll () { + var bsTable = this; + var state = bsTable.$s.bsTableControl.state; + bsTable.$s.$applyAsync(function () { + state.scroll = bsTable.$el.bootstrapTable('getScrollPosition'); + }); + } + $(document) + .on('post-header.bs.table', CONTAINER_SELECTOR+' table', function (evt) { // bootstrap-table calls .off('scroll') in initHeader so reattach here + var bsTable = getBsTable(evt.target); + if (!bsTable) return; + bsTable.$el + .closest(CONTAINER_SELECTOR) + .find(SCROLLABLE_SELECTOR) + .on('scroll', onScroll.bind(bsTable)); + }) + .on('sort.bs.table', CONTAINER_SELECTOR+' table', function (evt, sortName, sortOrder) { + var bsTable = getBsTable(evt.target); + if (!bsTable) return; + var state = bsTable.$s.bsTableControl.state; + bsTable.$s.$applyAsync(function () { + state.sortName = sortName; + state.sortOrder = sortOrder; + }); + }) + .on('page-change.bs.table', CONTAINER_SELECTOR+' table', function (evt, pageNumber, pageSize) { + var bsTable = getBsTable(evt.target); + if (!bsTable) return; + var state = bsTable.$s.bsTableControl.state; + bsTable.$s.$applyAsync(function () { + state.pageNumber = pageNumber; + state.pageSize = pageSize; + }); + }) + .on('search.bs.table', CONTAINER_SELECTOR+' table', function (evt, searchText) { + var bsTable = getBsTable(evt.target); + if (!bsTable) return; + var state = bsTable.$s.bsTableControl.state; + bsTable.$s.$applyAsync(function () { + state.searchText = searchText; + }); + }) + .on('focus blur', CONTAINER_SELECTOR+' '+SEARCH_SELECTOR, function (evt) { + var bsTable = getBsTable(evt.target); + if (!bsTable) return; + var state = bsTable.$s.bsTableControl.state; + bsTable.$s.$applyAsync(function () { + state.searchHasFocus = $(evt.target).is(':focus'); + }); + }); + + return { + restrict: 'EA', + scope: {bsTableControl: '='}, + link: function ($s, $el) { + var bsTable = bsTables[$s.$id] = {$s: $s, $el: $el}; + $s.instantiated = false; + $s.$watch('bsTableControl.options', function (options) { + if (!options) options = $s.bsTableControl.options = {}; + var state = $s.bsTableControl.state || {}; + + if ($s.instantiated) $el.bootstrapTable('destroy'); + $el.bootstrapTable(angular.extend(angular.copy(options), state)); + $s.instantiated = true; + + // Update the UI for state that isn't settable via options + if ('scroll' in state) $el.bootstrapTable('scrollTo', state.scroll); + if ('searchHasFocus' in state) $el.closest(CONTAINER_SELECTOR).find(SEARCH_SELECTOR).focus(); // $el gets detached so have to recompute whole chain + }, true); + $s.$watch('bsTableControl.state', function (state) { + if (!state) state = $s.bsTableControl.state = {}; + $el.trigger('directive-updated.bs.table', [state]); + }, true); + $s.$on('$destroy', function () { + delete bsTables[$s.$id]; + }); + } + }; + }) +})();