summaryrefslogtreecommitdiffstats
path: root/web/gui/dashboard/static/js/6.7b15cdf3.chunk.js.map
blob: 44904fe5a93e556e6e73b194728796485a142f29 (plain)
1
{"version":3,"sources":["../node_modules/bootstrap-table/dist/bootstrap-table.js"],"names":["$","cachedWidth","sprintf","str","args","arguments","flag","i","replace","arg","getPropertyFromOther","list","from","to","value","result","each","item","getFieldIndex","columns","field","index","column","getScrollBarWidth","w1","w2","inner","addClass","outer","append","offsetWidth","css","clientWidth","remove","calculateObjectValue","self","name","defaultValue","func","names","split","length","window","f","apply","this","concat","compareObjects","objectA","objectB","compareLength","objectAProperties","Object","getOwnPropertyNames","objectBProperties","propName","inArray","escapeHTML","text","getRealDataAttr","dataAttr","attr","auxAttr","join","toLowerCase","getItemField","escape","hasOwnProperty","props","p","isIEBrowser","navigator","userAgent","indexOf","match","BootstrapTable","el","options","$el","$el_","clone","timeoutId_","timeoutFooter_","init","DEFAULTS","classes","sortClass","undefined","locale","height","undefinedText","sortName","sortOrder","sortStable","striped","data","totalField","dataField","method","url","ajax","cache","contentType","dataType","ajaxOptions","queryParams","params","queryParamsType","responseHandler","res","pagination","onlyInfoPagination","paginationLoop","sidePagination","totalRows","pageNumber","pageSize","pageList","paginationHAlign","paginationVAlign","paginationDetailHAlign","paginationPreText","paginationNextText","search","searchOnEnterKey","strictSearch","searchAlign","selectItemName","showHeader","showFooter","showColumns","showPaginationSwitch","showRefresh","showToggle","buttonsAlign","smartDisplay","minimumCountColumns","idField","uniqueId","cardView","detailView","detailFormatter","row","trimOnSearch","clickToSelect","singleSelect","toolbar","toolbarAlign","checkboxHeader","sortable","silentSort","maintainSelected","searchTimeOut","searchText","iconSize","buttonsClass","iconsPrefix","icons","paginationSwitchDown","paginationSwitchUp","refresh","toggle","detailOpen","detailClose","customSearch","noop","customSort","rowStyle","rowAttributes","footerStyle","onAll","onClickCell","$element","onDblClickCell","onClickRow","onDblClickRow","onSort","order","onCheck","onUncheck","onCheckAll","rows","onUncheckAll","onCheckSome","onUncheckSome","onLoadSuccess","onLoadError","status","onColumnSwitch","checked","onPageChange","number","size","onSearch","onToggle","onPreBody","onPostBody","onPostHeader","onExpandRow","$detail","onCollapseRow","onRefreshOptions","onRefresh","onResetView","LOCALES","en","formatLoadingMessage","formatRecordsPerPage","formatShowingRows","pageFrom","pageTo","formatDetailPagination","formatSearch","formatNoMatches","formatPaginationSwitch","formatRefresh","formatToggle","formatColumns","formatAllRows","extend","COLUMN_DEFAULTS","radio","checkbox","checkboxEnabled","title","titleTooltip","align","halign","falign","valign","width","visible","switchable","formatter","footerFormatter","events","sorter","cellStyle","searchable","searchFormatter","cardVisible","EVENTS","prototype","initLocale","initContainer","initTable","initHeader","initData","initHiddenRows","initFooter","initToolbar","initPagination","initBody","initSearchText","initServer","parts","toUpperCase","fn","bootstrapTable","locales","$container","insertAfter","$tableContainer","find","$tableHeader","$tableBody","$tableLoading","$tableFooter","$toolbar","$pagination","after","that","$header","appendTo","push","html","rowspan","colspan","isArray","j","k","totalCol","r","fieldIndex","setFieldIndex","m","y","_id","_class","_data","x","tx","ty","$this","cspan","rspan","fromHtml","visibleColumns","header","fields","styles","formatters","sorters","sortNames","cellStyles","searchables","style","class_","unitWidth","stateField","off","on","event","target","closest","parent","children","keyCode","which","hide","show","outerHeight","getCaret","proxy","resetWidth","$selectAll","prop","updateSelected","type","initSort","timeoutId","_position","sort","a","b","aa","bb","isNumeric","parseFloat","toString","localeCompare","clearTimeout","setTimeout","removeClass","currentTarget","$this_","eq","add","$header_","trigger","$keepOpen","$search","switchableCount","showToolbar","togglePagination","toggleView","stopImmediatePropagation","toggleColumn","val","trim","initSearch","updatePagination","s","isEmptyObject","filterColumns","grep","key","parseInt","prop_index","$pageList","$first","$pre","$next","$last","$number","$allSelected","getData","totalPages","pageLst","page","active","onPageListChange","onPageFirst","onPagePre","onPageNext","onPageLast","onPageNumber","hasClass","resetRows","siblings","initRow","parentDom","csses","data_","attributes","htmlAttributes","hiddenRows","v","value_","id_","rowspan_","colspan_","title_","csses_","disabled","fixedScroll","$body","hasTr","trFragments","document","createDocumentFragment","tr","scrollTo","e","$td","$tr","cellIndex","getVisibleFields","$selectItem","click","next","is","content","resetView","not","filter","substring","silent","query","request","offset","limit","filterColumnsPartial","JSON","stringify","success","load","error","_xhr","readyState","abort","th","checkAll","$selectAll_","updateRows","Array","slice","call","Event","resetHeader","fitHeader","fixedBody","scrollWidth","focused","focusedTemp","get","scrollHeight","clientHeight","$th","parents","$headerTh","outerWidth","focus","visibleFields","$ths","innerWidth","scrollLeft","resetFooter","fitFooter","$footerTd","elWidth","needUpdate","$items","padding","toolbarHeight","paginationHeight","useCurrentPage","prepend","len","values","splice","removeAll","getRowByUniqueId","id","rowUniqueId","dataRow","Number","removeByUniqueId","updateByUniqueId","allParams","rowId","insertRow","updateRow","showRow","toggleRow","hideRow","getHiddenRows","mergeCells","col","updateCell","reinit","getOptions","getSelections","getAllSelections","checkAll_","uncheckAll","checkInvert","check","check_","uncheck","checkBy","obj","checkBy_","uncheckBy","destroy","insertBefore","showLoading","hideLoading","button","showColumn","hideColumn","getHiddenColumns","getVisibleColumns","toggleAllColumns","showAllColumns","hideAllColumns","filterBy","scrollTop","getScrollPosition","selectPage","prevPage","nextPage","refreshOptions","resetSearch","expandRow_","expand","expandRow","collapseRow","expandAllRows","isSubTable","detailIcon","executeInterval","idInterval","setInterval","last","clearInterval","ex","trs","collapseAllRows","updateFormatText","allowedMethods","option","Error","removeData","Constructor","defaults","columnDefaults","methods","utils","objectKeys","keys","hasDontEnumBug","propertyIsEnumerable","dontEnums","dontEnumsLength","TypeError","jQuery"],"mappings":"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","file":"static/js/6.7b15cdf3.chunk.js","sourcesContent":["/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * version: 1.11.1\n * https://github.com/wenzhixin/bootstrap-table/\n */\n\n(function ($) {\n    'use strict';\n\n    // TOOLS DEFINITION\n    // ======================\n\n    var cachedWidth = null;\n\n    // it only does '%s', and return '' when arguments are undefined\n    var sprintf = function (str) {\n        var args = arguments,\n            flag = true,\n            i = 1;\n\n        str = str.replace(/%s/g, function () {\n            var arg = args[i++];\n\n            if (typeof arg === 'undefined') {\n                flag = false;\n                return '';\n            }\n            return arg;\n        });\n        return flag ? str : '';\n    };\n\n    var getPropertyFromOther = function (list, from, to, value) {\n        var result = '';\n        $.each(list, function (i, item) {\n            if (item[from] === value) {\n                result = item[to];\n                return false;\n            }\n            return true;\n        });\n        return result;\n    };\n\n    var getFieldIndex = function (columns, field) {\n        var index = -1;\n\n        $.each(columns, function (i, column) {\n            if (column.field === field) {\n                index = i;\n                return false;\n            }\n            return true;\n        });\n        return index;\n    };\n\n    // http://jsfiddle.net/wenyi/47nz7ez9/3/\n    var setFieldIndex = function (columns) {\n        var i, j, k,\n            totalCol = 0,\n            flag = [];\n\n        for (i = 0; i < columns[0].length; i++) {\n            totalCol += columns[0][i].colspan || 1;\n        }\n\n        for (i = 0; i < columns.length; i++) {\n            flag[i] = [];\n            for (j = 0; j < totalCol; j++) {\n                flag[i][j] = false;\n            }\n        }\n\n        for (i = 0; i < columns.length; i++) {\n            for (j = 0; j < columns[i].length; j++) {\n                var r = columns[i][j],\n                    rowspan = r.rowspan || 1,\n                    colspan = r.colspan || 1,\n                    index = $.inArray(false, flag[i]);\n\n                if (colspan === 1) {\n                    r.fieldIndex = index;\n                    // when field is undefined, use index instead\n                    if (typeof r.field === 'undefined') {\n                        r.field = index;\n                    }\n                }\n\n                for (k = 0; k < rowspan; k++) {\n                    flag[i + k][index] = true;\n                }\n                for (k = 0; k < colspan; k++) {\n                    flag[i][index + k] = true;\n                }\n            }\n        }\n    };\n\n    var getScrollBarWidth = function () {\n        if (cachedWidth === null) {\n            var inner = $('<p/>').addClass('fixed-table-scroll-inner'),\n                outer = $('<div/>').addClass('fixed-table-scroll-outer'),\n                w1, w2;\n\n            outer.append(inner);\n            $('body').append(outer);\n\n            w1 = inner[0].offsetWidth;\n            outer.css('overflow', 'scroll');\n            w2 = inner[0].offsetWidth;\n\n            if (w1 === w2) {\n                w2 = outer[0].clientWidth;\n            }\n\n            outer.remove();\n            cachedWidth = w1 - w2;\n        }\n        return cachedWidth;\n    };\n\n    var calculateObjectValue = function (self, name, args, defaultValue) {\n        var func = name;\n\n        if (typeof name === 'string') {\n            // support obj.func1.func2\n            var names = name.split('.');\n\n            if (names.length > 1) {\n                func = window;\n                $.each(names, function (i, f) {\n                    func = func[f];\n                });\n            } else {\n                func = window[name];\n            }\n        }\n        if (typeof func === 'object') {\n            return func;\n        }\n        if (typeof func === 'function') {\n            return func.apply(self, args || []);\n        }\n        if (!func && typeof name === 'string' && sprintf.apply(this, [name].concat(args))) {\n            return sprintf.apply(this, [name].concat(args));\n        }\n        return defaultValue;\n    };\n\n    var compareObjects = function (objectA, objectB, compareLength) {\n        // Create arrays of property names\n        var objectAProperties = Object.getOwnPropertyNames(objectA),\n            objectBProperties = Object.getOwnPropertyNames(objectB),\n            propName = '';\n\n        if (compareLength) {\n            // If number of properties is different, objects are not equivalent\n            if (objectAProperties.length !== objectBProperties.length) {\n                return false;\n            }\n        }\n\n        for (var i = 0; i < objectAProperties.length; i++) {\n            propName = objectAProperties[i];\n\n            // If the property is not in the object B properties, continue with the next property\n            if ($.inArray(propName, objectBProperties) > -1) {\n                // If values of same property are not equal, objects are not equivalent\n                if (objectA[propName] !== objectB[propName]) {\n                    return false;\n                }\n            }\n        }\n\n        // If we made it this far, objects are considered equivalent\n        return true;\n    };\n\n    var escapeHTML = function (text) {\n        if (typeof text === 'string') {\n            return text\n                .replace(/&/g, '&amp;')\n                .replace(/</g, '&lt;')\n                .replace(/>/g, '&gt;')\n                .replace(/\"/g, '&quot;')\n                .replace(/'/g, '&#039;')\n                .replace(/`/g, '&#x60;');\n        }\n        return text;\n    };\n\n    var getRealDataAttr = function (dataAttr) {\n        for (var attr in dataAttr) {\n            var auxAttr = attr.split(/(?=[A-Z])/).join('-').toLowerCase();\n            if (auxAttr !== attr) {\n                dataAttr[auxAttr] = dataAttr[attr];\n                delete dataAttr[attr];\n            }\n        }\n\n        return dataAttr;\n    };\n\n    var getItemField = function (item, field, escape) {\n        var value = item;\n\n        if (typeof field !== 'string' || item.hasOwnProperty(field)) {\n            return escape ? escapeHTML(item[field]) : item[field];\n        }\n        var props = field.split('.');\n        for (var p in props) {\n            if (props.hasOwnProperty(p)) {\n                value = value && value[props[p]];\n            }\n        }\n        return escape ? escapeHTML(value) : value;\n    };\n\n    var isIEBrowser = function () {\n        return !!(navigator.userAgent.indexOf(\"MSIE \") > 0 || !!navigator.userAgent.match(/Trident.*rv\\:11\\./));\n    };\n\n    var objectKeys = function () {\n        // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n        if (!Object.keys) {\n            Object.keys = (function() {\n                var hasOwnProperty = Object.prototype.hasOwnProperty,\n                    hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),\n                    dontEnums = [\n                        'toString',\n                        'toLocaleString',\n                        'valueOf',\n                        'hasOwnProperty',\n                        'isPrototypeOf',\n                        'propertyIsEnumerable',\n                        'constructor'\n                    ],\n                    dontEnumsLength = dontEnums.length;\n\n                return function(obj) {\n                    if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {\n                        throw new TypeError('Object.keys called on non-object');\n                    }\n\n                    var result = [], prop, i;\n\n                    for (prop in obj) {\n                        if (hasOwnProperty.call(obj, prop)) {\n                            result.push(prop);\n                        }\n                    }\n\n                    if (hasDontEnumBug) {\n                        for (i = 0; i < dontEnumsLength; i++) {\n                            if (hasOwnProperty.call(obj, dontEnums[i])) {\n                                result.push(dontEnums[i]);\n                            }\n                        }\n                    }\n                    return result;\n                };\n            }());\n        }\n    };\n\n    // BOOTSTRAP TABLE CLASS DEFINITION\n    // ======================\n\n    var BootstrapTable = function (el, options) {\n        this.options = options;\n        this.$el = $(el);\n        this.$el_ = this.$el.clone();\n        this.timeoutId_ = 0;\n        this.timeoutFooter_ = 0;\n\n        this.init();\n    };\n\n    BootstrapTable.DEFAULTS = {\n        classes: 'table table-hover',\n        sortClass: undefined,\n        locale: undefined,\n        height: undefined,\n        undefinedText: '-',\n        sortName: undefined,\n        sortOrder: 'asc',\n        sortStable: false,\n        striped: false,\n        columns: [[]],\n        data: [],\n        totalField: 'total',\n        dataField: 'rows',\n        method: 'get',\n        url: undefined,\n        ajax: undefined,\n        cache: true,\n        contentType: 'application/json',\n        dataType: 'json',\n        ajaxOptions: {},\n        queryParams: function (params) {\n            return params;\n        },\n        queryParamsType: 'limit', // undefined\n        responseHandler: function (res) {\n            return res;\n        },\n        pagination: false,\n        onlyInfoPagination: false,\n        paginationLoop: true,\n        sidePagination: 'client', // client or server\n        totalRows: 0, // server side need to set\n        pageNumber: 1,\n        pageSize: 10,\n        pageList: [10, 25, 50, 100],\n        paginationHAlign: 'right', //right, left\n        paginationVAlign: 'bottom', //bottom, top, both\n        paginationDetailHAlign: 'left', //right, left\n        paginationPreText: '&lsaquo;',\n        paginationNextText: '&rsaquo;',\n        search: false,\n        searchOnEnterKey: false,\n        strictSearch: false,\n        searchAlign: 'right',\n        selectItemName: 'btSelectItem',\n        showHeader: true,\n        showFooter: false,\n        showColumns: false,\n        showPaginationSwitch: false,\n        showRefresh: false,\n        showToggle: false,\n        buttonsAlign: 'right',\n        smartDisplay: true,\n        escape: false,\n        minimumCountColumns: 1,\n        idField: undefined,\n        uniqueId: undefined,\n        cardView: false,\n        detailView: false,\n        detailFormatter: function (index, row) {\n            return '';\n        },\n        trimOnSearch: true,\n        clickToSelect: false,\n        singleSelect: false,\n        toolbar: undefined,\n        toolbarAlign: 'left',\n        checkboxHeader: true,\n        sortable: true,\n        silentSort: true,\n        maintainSelected: false,\n        searchTimeOut: 500,\n        searchText: '',\n        iconSize: undefined,\n        buttonsClass: 'default',\n        iconsPrefix: 'glyphicon', // glyphicon of fa (font awesome)\n        icons: {\n            paginationSwitchDown: 'glyphicon-collapse-down icon-chevron-down',\n            paginationSwitchUp: 'glyphicon-collapse-up icon-chevron-up',\n            refresh: 'glyphicon-refresh icon-refresh',\n            toggle: 'glyphicon-list-alt icon-list-alt',\n            columns: 'glyphicon-th icon-th',\n            detailOpen: 'glyphicon-plus icon-plus',\n            detailClose: 'glyphicon-minus icon-minus'\n        },\n\n        customSearch: $.noop,\n\n        customSort: $.noop,\n\n        rowStyle: function (row, index) {\n            return {};\n        },\n\n        rowAttributes: function (row, index) {\n            return {};\n        },\n\n        footerStyle: function (row, index) {\n            return {};\n        },\n\n        onAll: function (name, args) {\n            return false;\n        },\n        onClickCell: function (field, value, row, $element) {\n            return false;\n        },\n        onDblClickCell: function (field, value, row, $element) {\n            return false;\n        },\n        onClickRow: function (item, $element) {\n            return false;\n        },\n        onDblClickRow: function (item, $element) {\n            return false;\n        },\n        onSort: function (name, order) {\n            return false;\n        },\n        onCheck: function (row) {\n            return false;\n        },\n        onUncheck: function (row) {\n            return false;\n        },\n        onCheckAll: function (rows) {\n            return false;\n        },\n        onUncheckAll: function (rows) {\n            return false;\n        },\n        onCheckSome: function (rows) {\n            return false;\n        },\n        onUncheckSome: function (rows) {\n            return false;\n        },\n        onLoadSuccess: function (data) {\n            return false;\n        },\n        onLoadError: function (status) {\n            return false;\n        },\n        onColumnSwitch: function (field, checked) {\n            return false;\n        },\n        onPageChange: function (number, size) {\n            return false;\n        },\n        onSearch: function (text) {\n            return false;\n        },\n        onToggle: function (cardView) {\n            return false;\n        },\n        onPreBody: function (data) {\n            return false;\n        },\n        onPostBody: function () {\n            return false;\n        },\n        onPostHeader: function () {\n            return false;\n        },\n        onExpandRow: function (index, row, $detail) {\n            return false;\n        },\n        onCollapseRow: function (index, row) {\n            return false;\n        },\n        onRefreshOptions: function (options) {\n            return false;\n        },\n        onRefresh: function (params) {\n          return false;\n        },\n        onResetView: function () {\n            return false;\n        }\n    };\n\n    BootstrapTable.LOCALES = {};\n\n    BootstrapTable.LOCALES['en-US'] = BootstrapTable.LOCALES.en = {\n        formatLoadingMessage: function () {\n            return 'Loading, please wait...';\n        },\n        formatRecordsPerPage: function (pageNumber) {\n            return sprintf('%s rows per page', pageNumber);\n        },\n        formatShowingRows: function (pageFrom, pageTo, totalRows) {\n            return sprintf('Showing %s to %s of %s rows', pageFrom, pageTo, totalRows);\n        },\n        formatDetailPagination: function (totalRows) {\n            return sprintf('Showing %s rows', totalRows);\n        },\n        formatSearch: function () {\n            return 'Search';\n        },\n        formatNoMatches: function () {\n            return 'No matching records found';\n        },\n        formatPaginationSwitch: function () {\n            return 'Hide/Show pagination';\n        },\n        formatRefresh: function () {\n            return 'Refresh';\n        },\n        formatToggle: function () {\n            return 'Toggle';\n        },\n        formatColumns: function () {\n            return 'Columns';\n        },\n        formatAllRows: function () {\n            return 'All';\n        }\n    };\n\n    $.extend(BootstrapTable.DEFAULTS, BootstrapTable.LOCALES['en-US']);\n\n    BootstrapTable.COLUMN_DEFAULTS = {\n        radio: false,\n        checkbox: false,\n        checkboxEnabled: true,\n        field: undefined,\n        title: undefined,\n        titleTooltip: undefined,\n        'class': undefined,\n        align: undefined, // left, right, center\n        halign: undefined, // left, right, center\n        falign: undefined, // left, right, center\n        valign: undefined, // top, middle, bottom\n        width: undefined,\n        sortable: false,\n        order: 'asc', // asc, desc\n        visible: true,\n        switchable: true,\n        clickToSelect: true,\n        formatter: undefined,\n        footerFormatter: undefined,\n        events: undefined,\n        sorter: undefined,\n        sortName: undefined,\n        cellStyle: undefined,\n        searchable: true,\n        searchFormatter: true,\n        cardVisible: true,\n        escape : false\n    };\n\n    BootstrapTable.EVENTS = {\n        'all.bs.table': 'onAll',\n        'click-cell.bs.table': 'onClickCell',\n        'dbl-click-cell.bs.table': 'onDblClickCell',\n        'click-row.bs.table': 'onClickRow',\n        'dbl-click-row.bs.table': 'onDblClickRow',\n        'sort.bs.table': 'onSort',\n        'check.bs.table': 'onCheck',\n        'uncheck.bs.table': 'onUncheck',\n        'check-all.bs.table': 'onCheckAll',\n        'uncheck-all.bs.table': 'onUncheckAll',\n        'check-some.bs.table': 'onCheckSome',\n        'uncheck-some.bs.table': 'onUncheckSome',\n        'load-success.bs.table': 'onLoadSuccess',\n        'load-error.bs.table': 'onLoadError',\n        'column-switch.bs.table': 'onColumnSwitch',\n        'page-change.bs.table': 'onPageChange',\n        'search.bs.table': 'onSearch',\n        'toggle.bs.table': 'onToggle',\n        'pre-body.bs.table': 'onPreBody',\n        'post-body.bs.table': 'onPostBody',\n        'post-header.bs.table': 'onPostHeader',\n        'expand-row.bs.table': 'onExpandRow',\n        'collapse-row.bs.table': 'onCollapseRow',\n        'refresh-options.bs.table': 'onRefreshOptions',\n        'reset-view.bs.table': 'onResetView',\n        'refresh.bs.table': 'onRefresh'\n    };\n\n    BootstrapTable.prototype.init = function () {\n        this.initLocale();\n        this.initContainer();\n        this.initTable();\n        this.initHeader();\n        this.initData();\n        this.initHiddenRows();\n        this.initFooter();\n        this.initToolbar();\n        this.initPagination();\n        this.initBody();\n        this.initSearchText();\n        this.initServer();\n    };\n\n    BootstrapTable.prototype.initLocale = function () {\n        if (this.options.locale) {\n            var parts = this.options.locale.split(/-|_/);\n            parts[0].toLowerCase();\n            if (parts[1]) parts[1].toUpperCase();\n            if ($.fn.bootstrapTable.locales[this.options.locale]) {\n                // locale as requested\n                $.extend(this.options, $.fn.bootstrapTable.locales[this.options.locale]);\n            } else if ($.fn.bootstrapTable.locales[parts.join('-')]) {\n                // locale with sep set to - (in case original was specified with _)\n                $.extend(this.options, $.fn.bootstrapTable.locales[parts.join('-')]);\n            } else if ($.fn.bootstrapTable.locales[parts[0]]) {\n                // short locale language code (i.e. 'en')\n                $.extend(this.options, $.fn.bootstrapTable.locales[parts[0]]);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.initContainer = function () {\n        this.$container = $([\n            '<div class=\"bootstrap-table\">',\n            '<div class=\"fixed-table-toolbar\"></div>',\n            this.options.paginationVAlign === 'top' || this.options.paginationVAlign === 'both' ?\n                '<div class=\"fixed-table-pagination\" style=\"clear: both;\"></div>' :\n                '',\n            '<div class=\"fixed-table-container\">',\n            '<div class=\"fixed-table-header\"><table></table></div>',\n            '<div class=\"fixed-table-body\">',\n            '<div class=\"fixed-table-loading\">',\n            this.options.formatLoadingMessage(),\n            '</div>',\n            '</div>',\n            '<div class=\"fixed-table-footer\"><table><tr></tr></table></div>',\n            this.options.paginationVAlign === 'bottom' || this.options.paginationVAlign === 'both' ?\n                '<div class=\"fixed-table-pagination\"></div>' :\n                '',\n            '</div>',\n            '</div>'\n        ].join(''));\n\n        this.$container.insertAfter(this.$el);\n        this.$tableContainer = this.$container.find('.fixed-table-container');\n        this.$tableHeader = this.$container.find('.fixed-table-header');\n        this.$tableBody = this.$container.find('.fixed-table-body');\n        this.$tableLoading = this.$container.find('.fixed-table-loading');\n        this.$tableFooter = this.$container.find('.fixed-table-footer');\n        this.$toolbar = this.$container.find('.fixed-table-toolbar');\n        this.$pagination = this.$container.find('.fixed-table-pagination');\n\n        this.$tableBody.append(this.$el);\n        this.$container.after('<div class=\"clearfix\"></div>');\n\n        this.$el.addClass(this.options.classes);\n        if (this.options.striped) {\n            this.$el.addClass('table-striped');\n        }\n        if ($.inArray('table-no-bordered', this.options.classes.split(' ')) !== -1) {\n            this.$tableContainer.addClass('table-no-bordered');\n        }\n    };\n\n    BootstrapTable.prototype.initTable = function () {\n        var that = this,\n            columns = [],\n            data = [];\n\n        this.$header = this.$el.find('>thead');\n        if (!this.$header.length) {\n            this.$header = $('<thead></thead>').appendTo(this.$el);\n        }\n        this.$header.find('tr').each(function () {\n            var column = [];\n\n            $(this).find('th').each(function () {\n                // Fix #2014 - getFieldIndex and elsewhere assume this is string, causes issues if not\n                if (typeof $(this).data('field') !== 'undefined') {\n                    $(this).data('field', $(this).data('field') + '');\n                }\n                column.push($.extend({}, {\n                    title: $(this).html(),\n                    'class': $(this).attr('class'),\n                    titleTooltip: $(this).attr('title'),\n                    rowspan: $(this).attr('rowspan') ? +$(this).attr('rowspan') : undefined,\n                    colspan: $(this).attr('colspan') ? +$(this).attr('colspan') : undefined\n                }, $(this).data()));\n            });\n            columns.push(column);\n        });\n        if (!$.isArray(this.options.columns[0])) {\n            this.options.columns = [this.options.columns];\n        }\n        this.options.columns = $.extend(true, [], columns, this.options.columns);\n        this.columns = [];\n\n        setFieldIndex(this.options.columns);\n        $.each(this.options.columns, function (i, columns) {\n            $.each(columns, function (j, column) {\n                column = $.extend({}, BootstrapTable.COLUMN_DEFAULTS, column);\n\n                if (typeof column.fieldIndex !== 'undefined') {\n                    that.columns[column.fieldIndex] = column;\n                }\n\n                that.options.columns[i][j] = column;\n            });\n        });\n\n        // if options.data is setting, do not process tbody data\n        if (this.options.data.length) {\n            return;\n        }\n\n        var m = [];\n        this.$el.find('>tbody>tr').each(function (y) {\n            var row = {};\n\n            // save tr's id, class and data-* attributes\n            row._id = $(this).attr('id');\n            row._class = $(this).attr('class');\n            row._data = getRealDataAttr($(this).data());\n\n            $(this).find('>td').each(function (x) {\n                var $this = $(this),\n                    cspan = +$this.attr('colspan') || 1,\n                    rspan = +$this.attr('rowspan') || 1,\n                    tx, ty;\n\n                for (; m[y] && m[y][x]; x++); //skip already occupied cells in current row\n\n                for (tx = x; tx < x + cspan; tx++) { //mark matrix elements occupied by current cell with true\n                    for (ty = y; ty < y + rspan; ty++) {\n                        if (!m[ty]) { //fill missing rows\n                            m[ty] = [];\n                        }\n                        m[ty][tx] = true;\n                    }\n                }\n\n                var field = that.columns[x].field;\n\n                row[field] = $(this).html();\n                // save td's id, class and data-* attributes\n                row['_' + field + '_id'] = $(this).attr('id');\n                row['_' + field + '_class'] = $(this).attr('class');\n                row['_' + field + '_rowspan'] = $(this).attr('rowspan');\n                row['_' + field + '_colspan'] = $(this).attr('colspan');\n                row['_' + field + '_title'] = $(this).attr('title');\n                row['_' + field + '_data'] = getRealDataAttr($(this).data());\n            });\n            data.push(row);\n        });\n        this.options.data = data;\n        if (data.length) this.fromHtml = true;\n    };\n\n    BootstrapTable.prototype.initHeader = function () {\n        var that = this,\n            visibleColumns = {},\n            html = [];\n\n        this.header = {\n            fields: [],\n            styles: [],\n            classes: [],\n            formatters: [],\n            events: [],\n            sorters: [],\n            sortNames: [],\n            cellStyles: [],\n            searchables: []\n        };\n\n        $.each(this.options.columns, function (i, columns) {\n            html.push('<tr>');\n\n            if (i === 0 && !that.options.cardView && that.options.detailView) {\n                html.push(sprintf('<th class=\"detail\" rowspan=\"%s\"><div class=\"fht-cell\"></div></th>',\n                    that.options.columns.length));\n            }\n\n            $.each(columns, function (j, column) {\n                var text = '',\n                    halign = '', // header align style\n                    align = '', // body align style\n                    style = '',\n                    class_ = sprintf(' class=\"%s\"', column['class']),\n                    order = that.options.sortOrder || column.order,\n                    unitWidth = 'px',\n                    width = column.width;\n\n                if (column.width !== undefined && (!that.options.cardView)) {\n                    if (typeof column.width === 'string') {\n                        if (column.width.indexOf('%') !== -1) {\n                            unitWidth = '%';\n                        }\n                    }\n                }\n                if (column.width && typeof column.width === 'string') {\n                    width = column.width.replace('%', '').replace('px', '');\n                }\n\n                halign = sprintf('text-align: %s; ', column.halign ? column.halign : column.align);\n                align = sprintf('text-align: %s; ', column.align);\n                style = sprintf('vertical-align: %s; ', column.valign);\n                style += sprintf('width: %s; ', (column.checkbox || column.radio) && !width ?\n                    '36px' : (width ? width + unitWidth : undefined));\n\n                if (typeof column.fieldIndex !== 'undefined') {\n                    that.header.fields[column.fieldIndex] = column.field;\n                    that.header.styles[column.fieldIndex] = align + style;\n                    that.header.classes[column.fieldIndex] = class_;\n                    that.header.formatters[column.fieldIndex] = column.formatter;\n                    that.header.events[column.fieldIndex] = column.events;\n                    that.header.sorters[column.fieldIndex] = column.sorter;\n                    that.header.sortNames[column.fieldIndex] = column.sortName;\n                    that.header.cellStyles[column.fieldIndex] = column.cellStyle;\n                    that.header.searchables[column.fieldIndex] = column.searchable;\n\n                    if (!column.visible) {\n                        return;\n                    }\n\n                    if (that.options.cardView && (!column.cardVisible)) {\n                        return;\n                    }\n\n                    visibleColumns[column.field] = column;\n                }\n\n                html.push('<th' + sprintf(' title=\"%s\"', column.titleTooltip),\n                    column.checkbox || column.radio ?\n                        sprintf(' class=\"bs-checkbox %s\"', column['class'] || '') :\n                        class_,\n                    sprintf(' style=\"%s\"', halign + style),\n                    sprintf(' rowspan=\"%s\"', column.rowspan),\n                    sprintf(' colspan=\"%s\"', column.colspan),\n                    sprintf(' data-field=\"%s\"', column.field),\n                    '>');\n\n                html.push(sprintf('<div class=\"th-inner %s\">', that.options.sortable && column.sortable ?\n                    'sortable both' : ''));\n\n                text = that.options.escape ? escapeHTML(column.title) : column.title;\n\n                if (column.checkbox) {\n                    if (!that.options.singleSelect && that.options.checkboxHeader) {\n                        text = '<input name=\"btSelectAll\" type=\"checkbox\" />';\n                    }\n                    that.header.stateField = column.field;\n                }\n                if (column.radio) {\n                    text = '';\n                    that.header.stateField = column.field;\n                    that.options.singleSelect = true;\n                }\n\n                html.push(text);\n                html.push('</div>');\n                html.push('<div class=\"fht-cell\"></div>');\n                html.push('</div>');\n                html.push('</th>');\n            });\n            html.push('</tr>');\n        });\n\n        this.$header.html(html.join(''));\n        this.$header.find('th[data-field]').each(function (i) {\n            $(this).data(visibleColumns[$(this).data('field')]);\n        });\n        this.$container.off('click', '.th-inner').on('click', '.th-inner', function (event) {\n            var target = $(this);\n\n            if (that.options.detailView) {\n                if (target.closest('.bootstrap-table')[0] !== that.$container[0])\n                    return false;\n            }\n\n            if (that.options.sortable && target.parent().data().sortable) {\n                that.onSort(event);\n            }\n        });\n\n        this.$header.children().children().off('keypress').on('keypress', function (event) {\n            if (that.options.sortable && $(this).data().sortable) {\n                var code = event.keyCode || event.which;\n                if (code == 13) { //Enter keycode\n                    that.onSort(event);\n                }\n            }\n        });\n\n        $(window).off('resize.bootstrap-table');\n        if (!this.options.showHeader || this.options.cardView) {\n            this.$header.hide();\n            this.$tableHeader.hide();\n            this.$tableLoading.css('top', 0);\n        } else {\n            this.$header.show();\n            this.$tableHeader.show();\n            this.$tableLoading.css('top', this.$header.outerHeight() + 1);\n            // Assign the correct sortable arrow\n            this.getCaret();\n            $(window).on('resize.bootstrap-table', $.proxy(this.resetWidth, this));\n        }\n\n        this.$selectAll = this.$header.find('[name=\"btSelectAll\"]');\n        this.$selectAll.off('click').on('click', function () {\n                var checked = $(this).prop('checked');\n                that[checked ? 'checkAll' : 'uncheckAll']();\n                that.updateSelected();\n            });\n    };\n\n    BootstrapTable.prototype.initFooter = function () {\n        if (!this.options.showFooter || this.options.cardView) {\n            this.$tableFooter.hide();\n        } else {\n            this.$tableFooter.show();\n        }\n    };\n\n    /**\n     * @param data\n     * @param type: append / prepend\n     */\n    BootstrapTable.prototype.initData = function (data, type) {\n        if (type === 'append') {\n            this.data = this.data.concat(data);\n        } else if (type === 'prepend') {\n            this.data = [].concat(data).concat(this.data);\n        } else {\n            this.data = data || this.options.data;\n        }\n\n        // Fix #839 Records deleted when adding new row on filtered table\n        if (type === 'append') {\n            this.options.data = this.options.data.concat(data);\n        } else if (type === 'prepend') {\n            this.options.data = [].concat(data).concat(this.options.data);\n        } else {\n            this.options.data = this.data;\n        }\n\n        if (this.options.sidePagination === 'server') {\n            return;\n        }\n        this.initSort();\n    };\n\n    BootstrapTable.prototype.initSort = function () {\n        var that = this,\n            name = this.options.sortName,\n            order = this.options.sortOrder === 'desc' ? -1 : 1,\n            index = $.inArray(this.options.sortName, this.header.fields),\n            timeoutId = 0;\n\n        if (this.options.customSort !== $.noop) {\n            this.options.customSort.apply(this, [this.options.sortName, this.options.sortOrder]);\n            return;\n        }\n\n        if (index !== -1) {\n            if (this.options.sortStable) {\n                $.each(this.data, function (i, row) {\n                    if (!row.hasOwnProperty('_position')) row._position = i;\n                });\n            }\n\n            this.data.sort(function (a, b) {\n                if (that.header.sortNames[index]) {\n                    name = that.header.sortNames[index];\n                }\n                var aa = getItemField(a, name, that.options.escape),\n                    bb = getItemField(b, name, that.options.escape),\n                    value = calculateObjectValue(that.header, that.header.sorters[index], [aa, bb]);\n\n                if (value !== undefined) {\n                    return order * value;\n                }\n\n                // Fix #161: undefined or null string sort bug.\n                if (aa === undefined || aa === null) {\n                    aa = '';\n                }\n                if (bb === undefined || bb === null) {\n                    bb = '';\n                }\n\n                if (that.options.sortStable && aa === bb) {\n                    aa = a._position;\n                    bb = b._position;\n                }\n\n                // IF both values are numeric, do a numeric comparison\n                if ($.isNumeric(aa) && $.isNumeric(bb)) {\n                    // Convert numerical values form string to float.\n                    aa = parseFloat(aa);\n                    bb = parseFloat(bb);\n                    if (aa < bb) {\n                        return order * -1;\n                    }\n                    return order;\n                }\n\n                if (aa === bb) {\n                    return 0;\n                }\n\n                // If value is not a string, convert to string\n                if (typeof aa !== 'string') {\n                    aa = aa.toString();\n                }\n\n                if (aa.localeCompare(bb) === -1) {\n                    return order * -1;\n                }\n\n                return order;\n            });\n\n            if (this.options.sortClass !== undefined) {\n                clearTimeout(timeoutId);\n                timeoutId = setTimeout(function () {\n                    that.$el.removeClass(that.options.sortClass);\n                    var index = that.$header.find(sprintf('[data-field=\"%s\"]',\n                        that.options.sortName).index() + 1);\n                    that.$el.find(sprintf('tr td:nth-child(%s)', index))\n                        .addClass(that.options.sortClass);\n                }, 250);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.onSort = function (event) {\n        var $this = event.type === \"keypress\" ? $(event.currentTarget) : $(event.currentTarget).parent(),\n            $this_ = this.$header.find('th').eq($this.index());\n\n        this.$header.add(this.$header_).find('span.order').remove();\n\n        if (this.options.sortName === $this.data('field')) {\n            this.options.sortOrder = this.options.sortOrder === 'asc' ? 'desc' : 'asc';\n        } else {\n            this.options.sortName = $this.data('field');\n            this.options.sortOrder = $this.data('order') === 'asc' ? 'desc' : 'asc';\n        }\n        this.trigger('sort', this.options.sortName, this.options.sortOrder);\n\n        $this.add($this_).data('order', this.options.sortOrder);\n\n        // Assign the correct sortable arrow\n        this.getCaret();\n\n        if (this.options.sidePagination === 'server') {\n            this.initServer(this.options.silentSort);\n            return;\n        }\n\n        this.initSort();\n        this.initBody();\n    };\n\n    BootstrapTable.prototype.initToolbar = function () {\n        var that = this,\n            html = [],\n            timeoutId = 0,\n            $keepOpen,\n            $search,\n            switchableCount = 0;\n\n        if (this.$toolbar.find('.bs-bars').children().length) {\n            $('body').append($(this.options.toolbar));\n        }\n        this.$toolbar.html('');\n\n        if (typeof this.options.toolbar === 'string' || typeof this.options.toolbar === 'object') {\n            $(sprintf('<div class=\"bs-bars pull-%s\"></div>', this.options.toolbarAlign))\n                .appendTo(this.$toolbar)\n                .append($(this.options.toolbar));\n        }\n\n        // showColumns, showToggle, showRefresh\n        html = [sprintf('<div class=\"columns columns-%s btn-group pull-%s\">',\n            this.options.buttonsAlign, this.options.buttonsAlign)];\n\n        if (typeof this.options.icons === 'string') {\n            this.options.icons = calculateObjectValue(null, this.options.icons);\n        }\n\n        if (this.options.showPaginationSwitch) {\n            html.push(sprintf('<button class=\"btn' +\n                    sprintf(' btn-%s', this.options.buttonsClass) +\n                    sprintf(' btn-%s', this.options.iconSize) +\n                    '\" type=\"button\" name=\"paginationSwitch\" aria-label=\"pagination Switch\" title=\"%s\">',\n                    this.options.formatPaginationSwitch()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.paginationSwitchDown),\n                '</button>');\n        }\n\n        if (this.options.showRefresh) {\n            html.push(sprintf('<button class=\"btn' +\n                    sprintf(' btn-%s', this.options.buttonsClass) +\n                    sprintf(' btn-%s', this.options.iconSize) +\n                    '\" type=\"button\" name=\"refresh\" aria-label=\"refresh\" title=\"%s\">',\n                    this.options.formatRefresh()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.refresh),\n                '</button>');\n        }\n\n        if (this.options.showToggle) {\n            html.push(sprintf('<button class=\"btn' +\n                    sprintf(' btn-%s', this.options.buttonsClass) +\n                    sprintf(' btn-%s', this.options.iconSize) +\n                    '\" type=\"button\" name=\"toggle\" aria-label=\"toggle\" title=\"%s\">',\n                    this.options.formatToggle()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.toggle),\n                '</button>');\n        }\n\n        if (this.options.showColumns) {\n            html.push(sprintf('<div class=\"keep-open btn-group\" title=\"%s\">',\n                    this.options.formatColumns()),\n                '<button type=\"button\" aria-label=\"columns\" class=\"btn' +\n                sprintf(' btn-%s', this.options.buttonsClass) +\n                sprintf(' btn-%s', this.options.iconSize) +\n                ' dropdown-toggle\" data-toggle=\"dropdown\">',\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.columns),\n                ' <span class=\"caret\"></span>',\n                '</button>',\n                '<ul class=\"dropdown-menu\" role=\"menu\">');\n\n            $.each(this.columns, function (i, column) {\n                if (column.radio || column.checkbox) {\n                    return;\n                }\n\n                if (that.options.cardView && !column.cardVisible) {\n                    return;\n                }\n\n                var checked = column.visible ? ' checked=\"checked\"' : '';\n\n                if (column.switchable) {\n                    html.push(sprintf('<li role=\"menuitem\">' +\n                        '<label><input type=\"checkbox\" data-field=\"%s\" value=\"%s\"%s> %s</label>' +\n                        '</li>', column.field, i, checked, column.title));\n                    switchableCount++;\n                }\n            });\n            html.push('</ul>',\n                '</div>');\n        }\n\n        html.push('</div>');\n\n        // Fix #188: this.showToolbar is for extensions\n        if (this.showToolbar || html.length > 2) {\n            this.$toolbar.append(html.join(''));\n        }\n\n        if (this.options.showPaginationSwitch) {\n            this.$toolbar.find('button[name=\"paginationSwitch\"]')\n                .off('click').on('click', $.proxy(this.togglePagination, this));\n        }\n\n        if (this.options.showRefresh) {\n            this.$toolbar.find('button[name=\"refresh\"]')\n                .off('click').on('click', $.proxy(this.refresh, this));\n        }\n\n        if (this.options.showToggle) {\n            this.$toolbar.find('button[name=\"toggle\"]')\n                .off('click').on('click', function () {\n                    that.toggleView();\n                });\n        }\n\n        if (this.options.showColumns) {\n            $keepOpen = this.$toolbar.find('.keep-open');\n\n            if (switchableCount <= this.options.minimumCountColumns) {\n                $keepOpen.find('input').prop('disabled', true);\n            }\n\n            $keepOpen.find('li').off('click').on('click', function (event) {\n                event.stopImmediatePropagation();\n            });\n            $keepOpen.find('input').off('click').on('click', function () {\n                var $this = $(this);\n\n                that.toggleColumn($(this).val(), $this.prop('checked'), false);\n                that.trigger('column-switch', $(this).data('field'), $this.prop('checked'));\n            });\n        }\n\n        if (this.options.search) {\n            html = [];\n            html.push(\n                '<div class=\"pull-' + this.options.searchAlign + ' search\">',\n                sprintf('<input class=\"form-control' +\n                    sprintf(' input-%s', this.options.iconSize) +\n                    '\" type=\"text\" placeholder=\"%s\">',\n                    this.options.formatSearch()),\n                '</div>');\n\n            this.$toolbar.append(html.join(''));\n            $search = this.$toolbar.find('.search input');\n            $search.off('keyup drop blur').on('keyup drop blur', function (event) {\n                if (that.options.searchOnEnterKey && event.keyCode !== 13) {\n                    return;\n                }\n\n                if ($.inArray(event.keyCode, [37, 38, 39, 40]) > -1) {\n                    return;\n                }\n\n                clearTimeout(timeoutId); // doesn't matter if it's 0\n                timeoutId = setTimeout(function () {\n                    that.onSearch(event);\n                }, that.options.searchTimeOut);\n            });\n\n            if (isIEBrowser()) {\n                $search.off('mouseup').on('mouseup', function (event) {\n                    clearTimeout(timeoutId); // doesn't matter if it's 0\n                    timeoutId = setTimeout(function () {\n                        that.onSearch(event);\n                    }, that.options.searchTimeOut);\n                });\n            }\n        }\n    };\n\n    BootstrapTable.prototype.onSearch = function (event) {\n        var text = $.trim($(event.currentTarget).val());\n\n        // trim search input\n        if (this.options.trimOnSearch && $(event.currentTarget).val() !== text) {\n            $(event.currentTarget).val(text);\n        }\n\n        if (text === this.searchText) {\n            return;\n        }\n        this.searchText = text;\n        this.options.searchText = text;\n\n        this.options.pageNumber = 1;\n        this.initSearch();\n        this.updatePagination();\n        this.trigger('search', text);\n    };\n\n    BootstrapTable.prototype.initSearch = function () {\n        var that = this;\n\n        if (this.options.sidePagination !== 'server') {\n            if (this.options.customSearch !== $.noop) {\n                this.options.customSearch.apply(this, [this.searchText]);\n                return;\n            }\n\n            var s = this.searchText && (this.options.escape ?\n                escapeHTML(this.searchText) : this.searchText).toLowerCase();\n            var f = $.isEmptyObject(this.filterColumns) ? null : this.filterColumns;\n\n            // Check filter\n            this.data = f ? $.grep(this.options.data, function (item, i) {\n                for (var key in f) {\n                    if ($.isArray(f[key]) && $.inArray(item[key], f[key]) === -1 ||\n                            !$.isArray(f[key]) && item[key] !== f[key]) {\n                        return false;\n                    }\n                }\n                return true;\n            }) : this.options.data;\n\n            this.data = s ? $.grep(this.data, function (item, i) {\n                for (var j = 0; j < that.header.fields.length; j++) {\n\n                    if (!that.header.searchables[j]) {\n                        continue;\n                    }\n\n                    var key = $.isNumeric(that.header.fields[j]) ? parseInt(that.header.fields[j], 10) : that.header.fields[j];\n                    var column = that.columns[getFieldIndex(that.columns, key)];\n                    var value;\n\n                    if (typeof key === 'string') {\n                        value = item;\n                        var props = key.split('.');\n                        for (var prop_index = 0; prop_index < props.length; prop_index++) {\n                            value = value[props[prop_index]];\n                        }\n\n                        // Fix #142: respect searchForamtter boolean\n                        if (column && column.searchFormatter) {\n                            value = calculateObjectValue(column,\n                                that.header.formatters[j], [value, item, i], value);\n                        }\n                    } else {\n                        value = item[key];\n                    }\n\n                    if (typeof value === 'string' || typeof value === 'number') {\n                        if (that.options.strictSearch) {\n                            if ((value + '').toLowerCase() === s) {\n                                return true;\n                            }\n                        } else {\n                            if ((value + '').toLowerCase().indexOf(s) !== -1) {\n                                return true;\n                            }\n                        }\n                    }\n                }\n                return false;\n            }) : this.data;\n        }\n    };\n\n    BootstrapTable.prototype.initPagination = function () {\n        if (!this.options.pagination) {\n            this.$pagination.hide();\n            return;\n        } else {\n            this.$pagination.show();\n        }\n\n        var that = this,\n            html = [],\n            $allSelected = false,\n            i, from, to,\n            $pageList,\n            $first, $pre,\n            $next, $last,\n            $number,\n            data = this.getData(),\n            pageList = this.options.pageList;\n\n        if (this.options.sidePagination !== 'server') {\n            this.options.totalRows = data.length;\n        }\n\n        this.totalPages = 0;\n        if (this.options.totalRows) {\n            if (this.options.pageSize === this.options.formatAllRows()) {\n                this.options.pageSize = this.options.totalRows;\n                $allSelected = true;\n            } else if (this.options.pageSize === this.options.totalRows) {\n                // Fix #667 Table with pagination,\n                // multiple pages and a search that matches to one page throws exception\n                var pageLst = typeof this.options.pageList === 'string' ?\n                    this.options.pageList.replace('[', '').replace(']', '')\n                        .replace(/ /g, '').toLowerCase().split(',') : this.options.pageList;\n                if ($.inArray(this.options.formatAllRows().toLowerCase(), pageLst)  > -1) {\n                    $allSelected = true;\n                }\n            }\n\n            this.totalPages = ~~((this.options.totalRows - 1) / this.options.pageSize) + 1;\n\n            this.options.totalPages = this.totalPages;\n        }\n        if (this.totalPages > 0 && this.options.pageNumber > this.totalPages) {\n            this.options.pageNumber = this.totalPages;\n        }\n\n        this.pageFrom = (this.options.pageNumber - 1) * this.options.pageSize + 1;\n        this.pageTo = this.options.pageNumber * this.options.pageSize;\n        if (this.pageTo > this.options.totalRows) {\n            this.pageTo = this.options.totalRows;\n        }\n\n        html.push(\n            '<div class=\"pull-' + this.options.paginationDetailHAlign + ' pagination-detail\">',\n            '<span class=\"pagination-info\">',\n            this.options.onlyInfoPagination ? this.options.formatDetailPagination(this.options.totalRows) :\n            this.options.formatShowingRows(this.pageFrom, this.pageTo, this.options.totalRows),\n            '</span>');\n\n        if (!this.options.onlyInfoPagination) {\n            html.push('<span class=\"page-list\">');\n\n            var pageNumber = [\n                    sprintf('<span class=\"btn-group %s\">',\n                        this.options.paginationVAlign === 'top' || this.options.paginationVAlign === 'both' ?\n                            'dropdown' : 'dropup'),\n                    '<button type=\"button\" class=\"btn' +\n                    sprintf(' btn-%s', this.options.buttonsClass) +\n                    sprintf(' btn-%s', this.options.iconSize) +\n                    ' dropdown-toggle\" data-toggle=\"dropdown\">',\n                    '<span class=\"page-size\">',\n                    $allSelected ? this.options.formatAllRows() : this.options.pageSize,\n                    '</span>',\n                    ' <span class=\"caret\"></span>',\n                    '</button>',\n                    '<ul class=\"dropdown-menu\" role=\"menu\">'\n                ];\n\n            if (typeof this.options.pageList === 'string') {\n                var list = this.options.pageList.replace('[', '').replace(']', '')\n                    .replace(/ /g, '').split(',');\n\n                pageList = [];\n                $.each(list, function (i, value) {\n                    pageList.push(value.toUpperCase() === that.options.formatAllRows().toUpperCase() ?\n                        that.options.formatAllRows() : +value);\n                });\n            }\n\n            $.each(pageList, function (i, page) {\n                if (!that.options.smartDisplay || i === 0 || pageList[i - 1] < that.options.totalRows) {\n                    var active;\n                    if ($allSelected) {\n                        active = page === that.options.formatAllRows() ? ' class=\"active\"' : '';\n                    } else {\n                        active = page === that.options.pageSize ? ' class=\"active\"' : '';\n                    }\n                    pageNumber.push(sprintf('<li role=\"menuitem\"%s><a href=\"#\">%s</a></li>', active, page));\n                }\n            });\n            pageNumber.push('</ul></span>');\n\n            html.push(this.options.formatRecordsPerPage(pageNumber.join('')));\n            html.push('</span>');\n\n            html.push('</div>',\n                '<div class=\"pull-' + this.options.paginationHAlign + ' pagination\">',\n                '<ul class=\"pagination' + sprintf(' pagination-%s', this.options.iconSize) + '\">',\n                '<li class=\"page-pre\"><a href=\"#\">' + this.options.paginationPreText + '</a></li>');\n\n            if (this.totalPages < 5) {\n                from = 1;\n                to = this.totalPages;\n            } else {\n                from = this.options.pageNumber - 2;\n                to = from + 4;\n                if (from < 1) {\n                    from = 1;\n                    to = 5;\n                }\n                if (to > this.totalPages) {\n                    to = this.totalPages;\n                    from = to - 4;\n                }\n            }\n\n            if (this.totalPages >= 6) {\n                if (this.options.pageNumber >= 3) {\n                    html.push('<li class=\"page-first' + (1 === this.options.pageNumber ? ' active' : '') + '\">',\n                        '<a href=\"#\">', 1, '</a>',\n                        '</li>');\n\n                    from++;\n                }\n\n                if (this.options.pageNumber >= 4) {\n                    if (this.options.pageNumber == 4 || this.totalPages == 6 || this.totalPages == 7) {\n                        from--;\n                    } else {\n                        html.push('<li class=\"page-first-separator disabled\">',\n                            '<a href=\"#\">...</a>',\n                            '</li>');\n                    }\n\n                    to--;\n                }\n            }\n\n            if (this.totalPages >= 7) {\n                if (this.options.pageNumber >= (this.totalPages - 2)) {\n                    from--;\n                }\n            }\n\n            if (this.totalPages == 6) {\n                if (this.options.pageNumber >= (this.totalPages - 2)) {\n                    to++;\n                }\n            } else if (this.totalPages >= 7) {\n                if (this.totalPages == 7 || this.options.pageNumber >= (this.totalPages - 3)) {\n                    to++;\n                }\n            }\n\n            for (i = from; i <= to; i++) {\n                html.push('<li class=\"page-number' + (i === this.options.pageNumber ? ' active' : '') + '\">',\n                    '<a href=\"#\">', i, '</a>',\n                    '</li>');\n            }\n\n            if (this.totalPages >= 8) {\n                if (this.options.pageNumber <= (this.totalPages - 4)) {\n                    html.push('<li class=\"page-last-separator disabled\">',\n                        '<a href=\"#\">...</a>',\n                        '</li>');\n                }\n            }\n\n            if (this.totalPages >= 6) {\n                if (this.options.pageNumber <= (this.totalPages - 3)) {\n                    html.push('<li class=\"page-last' + (this.totalPages === this.options.pageNumber ? ' active' : '') + '\">',\n                        '<a href=\"#\">', this.totalPages, '</a>',\n                        '</li>');\n                }\n            }\n\n            html.push(\n                '<li class=\"page-next\"><a href=\"#\">' + this.options.paginationNextText + '</a></li>',\n                '</ul>',\n                '</div>');\n        }\n        this.$pagination.html(html.join(''));\n\n        if (!this.options.onlyInfoPagination) {\n            $pageList = this.$pagination.find('.page-list a');\n            $first = this.$pagination.find('.page-first');\n            $pre = this.$pagination.find('.page-pre');\n            $next = this.$pagination.find('.page-next');\n            $last = this.$pagination.find('.page-last');\n            $number = this.$pagination.find('.page-number');\n\n            if (this.options.smartDisplay) {\n                if (this.totalPages <= 1) {\n                    this.$pagination.find('div.pagination').hide();\n                }\n                if (pageList.length < 2 || this.options.totalRows <= pageList[0]) {\n                    this.$pagination.find('span.page-list').hide();\n                }\n\n                // when data is empty, hide the pagination\n                this.$pagination[this.getData().length ? 'show' : 'hide']();\n            }\n\n            if (!this.options.paginationLoop) {\n                if (this.options.pageNumber === 1) {\n                    $pre.addClass('disabled');\n                }\n                if (this.options.pageNumber === this.totalPages) {\n                    $next.addClass('disabled');\n                }\n            }\n\n            if ($allSelected) {\n                this.options.pageSize = this.options.formatAllRows();\n            }\n            $pageList.off('click').on('click', $.proxy(this.onPageListChange, this));\n            $first.off('click').on('click', $.proxy(this.onPageFirst, this));\n            $pre.off('click').on('click', $.proxy(this.onPagePre, this));\n            $next.off('click').on('click', $.proxy(this.onPageNext, this));\n            $last.off('click').on('click', $.proxy(this.onPageLast, this));\n            $number.off('click').on('click', $.proxy(this.onPageNumber, this));\n        }\n    };\n\n    BootstrapTable.prototype.updatePagination = function (event) {\n        // Fix #171: IE disabled button can be clicked bug.\n        if (event && $(event.currentTarget).hasClass('disabled')) {\n            return;\n        }\n\n        if (!this.options.maintainSelected) {\n            this.resetRows();\n        }\n\n        this.initPagination();\n        if (this.options.sidePagination === 'server') {\n            this.initServer();\n        } else {\n            this.initBody();\n        }\n\n        this.trigger('page-change', this.options.pageNumber, this.options.pageSize);\n    };\n\n    BootstrapTable.prototype.onPageListChange = function (event) {\n        var $this = $(event.currentTarget);\n\n        $this.parent().addClass('active').siblings().removeClass('active');\n        this.options.pageSize = $this.text().toUpperCase() === this.options.formatAllRows().toUpperCase() ?\n            this.options.formatAllRows() : +$this.text();\n        this.$toolbar.find('.page-size').text(this.options.pageSize);\n\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPageFirst = function (event) {\n        this.options.pageNumber = 1;\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPagePre = function (event) {\n        if ((this.options.pageNumber - 1) === 0) {\n            this.options.pageNumber = this.options.totalPages;\n        } else {\n            this.options.pageNumber--;\n        }\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPageNext = function (event) {\n        if ((this.options.pageNumber + 1) > this.options.totalPages) {\n            this.options.pageNumber = 1;\n        } else {\n            this.options.pageNumber++;\n        }\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPageLast = function (event) {\n        this.options.pageNumber = this.totalPages;\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.onPageNumber = function (event) {\n        if (this.options.pageNumber === +$(event.currentTarget).text()) {\n            return;\n        }\n        this.options.pageNumber = +$(event.currentTarget).text();\n        this.updatePagination(event);\n        return false;\n    };\n\n    BootstrapTable.prototype.initRow = function(item, i, data, parentDom) {\n        var that=this,\n            key,\n            html = [],\n            style = {},\n            csses = [],\n            data_ = '',\n            attributes = {},\n            htmlAttributes = [];\n\n        if ($.inArray(item, this.hiddenRows) > -1) {\n            return;\n        }\n\n        style = calculateObjectValue(this.options, this.options.rowStyle, [item, i], style);\n\n        if (style && style.css) {\n            for (key in style.css) {\n                csses.push(key + ': ' + style.css[key]);\n            }\n        }\n\n        attributes = calculateObjectValue(this.options,\n            this.options.rowAttributes, [item, i], attributes);\n\n        if (attributes) {\n            for (key in attributes) {\n                htmlAttributes.push(sprintf('%s=\"%s\"', key, escapeHTML(attributes[key])));\n            }\n        }\n\n        if (item._data && !$.isEmptyObject(item._data)) {\n            $.each(item._data, function(k, v) {\n                // ignore data-index\n                if (k === 'index') {\n                    return;\n                }\n                data_ += sprintf(' data-%s=\"%s\"', k, v);\n            });\n        }\n\n        html.push('<tr',\n            sprintf(' %s', htmlAttributes.join(' ')),\n            sprintf(' id=\"%s\"', $.isArray(item) ? undefined : item._id),\n            sprintf(' class=\"%s\"', style.classes || ($.isArray(item) ? undefined : item._class)),\n            sprintf(' data-index=\"%s\"', i),\n            sprintf(' data-uniqueid=\"%s\"', item[this.options.uniqueId]),\n            sprintf('%s', data_),\n            '>'\n        );\n\n        if (this.options.cardView) {\n            html.push(sprintf('<td colspan=\"%s\"><div class=\"card-views\">', this.header.fields.length));\n        }\n\n        if (!this.options.cardView && this.options.detailView) {\n            html.push('<td>',\n                '<a class=\"detail-icon\" href=\"#\">',\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.detailOpen),\n                '</a>',\n                '</td>');\n        }\n\n        $.each(this.header.fields, function(j, field) {\n            var text = '',\n                value_ = getItemField(item, field, that.options.escape),\n                value = '',\n                type = '',\n                cellStyle = {},\n                id_ = '',\n                class_ = that.header.classes[j],\n                data_ = '',\n                rowspan_ = '',\n                colspan_ = '',\n                title_ = '',\n                column = that.columns[j];\n\n            if (that.fromHtml && typeof value_ === 'undefined') {\n                return;\n            }\n\n            if (!column.visible) {\n                return;\n            }\n\n            if (that.options.cardView && (!column.cardVisible)) {\n                return;\n            }\n\n            if (column.escape) {\n                value_ = escapeHTML(value_);\n            }\n\n            style = sprintf('style=\"%s\"', csses.concat(that.header.styles[j]).join('; '));\n\n            // handle td's id and class\n            if (item['_' + field + '_id']) {\n                id_ = sprintf(' id=\"%s\"', item['_' + field + '_id']);\n            }\n            if (item['_' + field + '_class']) {\n                class_ = sprintf(' class=\"%s\"', item['_' + field + '_class']);\n            }\n            if (item['_' + field + '_rowspan']) {\n                rowspan_ = sprintf(' rowspan=\"%s\"', item['_' + field + '_rowspan']);\n            }\n            if (item['_' + field + '_colspan']) {\n                colspan_ = sprintf(' colspan=\"%s\"', item['_' + field + '_colspan']);\n            }\n            if (item['_' + field + '_title']) {\n                title_ = sprintf(' title=\"%s\"', item['_' + field + '_title']);\n            }\n            cellStyle = calculateObjectValue(that.header,\n                that.header.cellStyles[j], [value_, item, i, field], cellStyle);\n            if (cellStyle.classes) {\n                class_ = sprintf(' class=\"%s\"', cellStyle.classes);\n            }\n            if (cellStyle.css) {\n                var csses_ = [];\n                for (var key in cellStyle.css) {\n                    csses_.push(key + ': ' + cellStyle.css[key]);\n                }\n                style = sprintf('style=\"%s\"', csses_.concat(that.header.styles[j]).join('; '));\n            }\n\n            value = calculateObjectValue(column,\n                that.header.formatters[j], [value_, item, i], value_);\n\n            if (item['_' + field + '_data'] && !$.isEmptyObject(item['_' + field + '_data'])) {\n                $.each(item['_' + field + '_data'], function(k, v) {\n                    // ignore data-index\n                    if (k === 'index') {\n                        return;\n                    }\n                    data_ += sprintf(' data-%s=\"%s\"', k, v);\n                });\n            }\n\n            if (column.checkbox || column.radio) {\n                type = column.checkbox ? 'checkbox' : type;\n                type = column.radio ? 'radio' : type;\n\n                text = [sprintf(that.options.cardView ?\n                        '<div class=\"card-view %s\">' : '<td class=\"bs-checkbox %s\">', column['class'] || ''),\n                    '<input' +\n                    sprintf(' data-index=\"%s\"', i) +\n                    sprintf(' name=\"%s\"', that.options.selectItemName) +\n                    sprintf(' type=\"%s\"', type) +\n                    sprintf(' value=\"%s\"', item[that.options.idField]) +\n                    sprintf(' checked=\"%s\"', value === true ||\n                        (value_ || value && value.checked) ? 'checked' : undefined) +\n                    sprintf(' disabled=\"%s\"', !column.checkboxEnabled ||\n                        (value && value.disabled) ? 'disabled' : undefined) +\n                    ' />',\n                    that.header.formatters[j] && typeof value === 'string' ? value : '',\n                    that.options.cardView ? '</div>' : '</td>'\n                ].join('');\n\n                item[that.header.stateField] = value === true || (value && value.checked);\n            } else {\n                value = typeof value === 'undefined' || value === null ?\n                    that.options.undefinedText : value;\n\n                text = that.options.cardView ? ['<div class=\"card-view\">',\n                    that.options.showHeader ? sprintf('<span class=\"title\" %s>%s</span>', style,\n                        getPropertyFromOther(that.columns, 'field', 'title', field)) : '',\n                    sprintf('<span class=\"value\">%s</span>', value),\n                    '</div>'\n                ].join('') : [sprintf('<td%s %s %s %s %s %s %s>',\n                        id_, class_, style, data_, rowspan_, colspan_, title_),\n                    value,\n                    '</td>'\n                ].join('');\n\n                // Hide empty data on Card view when smartDisplay is set to true.\n                if (that.options.cardView && that.options.smartDisplay && value === '') {\n                    // Should set a placeholder for event binding correct fieldIndex\n                    text = '<div class=\"card-view\"></div>';\n                }\n            }\n\n            html.push(text);\n        });\n\n        if (this.options.cardView) {\n            html.push('</div></td>');\n        }\n        html.push('</tr>');\n\n        return html.join(' ');\n    };\n\n    BootstrapTable.prototype.initBody = function (fixedScroll) {\n        var that = this,\n            html = [],\n            data = this.getData();\n\n        this.trigger('pre-body', data);\n\n        this.$body = this.$el.find('>tbody');\n        if (!this.$body.length) {\n            this.$body = $('<tbody></tbody>').appendTo(this.$el);\n        }\n\n        //Fix #389 Bootstrap-table-flatJSON is not working\n\n        if (!this.options.pagination || this.options.sidePagination === 'server') {\n            this.pageFrom = 1;\n            this.pageTo = data.length;\n        }\n\n        var trFragments = $(document.createDocumentFragment());\n        var hasTr;\n\n        for (var i = this.pageFrom - 1; i < this.pageTo; i++) {\n            var item = data[i];\n            var tr = this.initRow(item, i, data, trFragments);\n            hasTr = hasTr || !!tr;\n            if (tr&&tr!==true) {\n                trFragments.append(tr);\n            }\n        }\n\n        // show no records\n        if (!hasTr) {\n            trFragments.append('<tr class=\"no-records-found\">' +\n                sprintf('<td colspan=\"%s\">%s</td>',\n                this.$header.find('th').length,\n                this.options.formatNoMatches()) +\n                '</tr>');\n        }\n\n        this.$body.html(trFragments);\n\n        if (!fixedScroll) {\n            this.scrollTo(0);\n        }\n\n        // click to select by column\n        this.$body.find('> tr[data-index] > td').off('click dblclick').on('click dblclick', function (e) {\n            var $td = $(this),\n                $tr = $td.parent(),\n                item = that.data[$tr.data('index')],\n                index = $td[0].cellIndex,\n                fields = that.getVisibleFields(),\n                field = fields[that.options.detailView && !that.options.cardView ? index - 1 : index],\n                column = that.columns[getFieldIndex(that.columns, field)],\n                value = getItemField(item, field, that.options.escape);\n\n            if ($td.find('.detail-icon').length) {\n                return;\n            }\n\n            that.trigger(e.type === 'click' ? 'click-cell' : 'dbl-click-cell', field, value, item, $td);\n            that.trigger(e.type === 'click' ? 'click-row' : 'dbl-click-row', item, $tr, field);\n\n            // if click to select - then trigger the checkbox/radio click\n            if (e.type === 'click' && that.options.clickToSelect && column.clickToSelect) {\n                var $selectItem = $tr.find(sprintf('[name=\"%s\"]', that.options.selectItemName));\n                if ($selectItem.length) {\n                    $selectItem[0].click(); // #144: .trigger('click') bug\n                }\n            }\n        });\n\n        this.$body.find('> tr[data-index] > td > .detail-icon').off('click').on('click', function () {\n            var $this = $(this),\n                $tr = $this.parent().parent(),\n                index = $tr.data('index'),\n                row = data[index]; // Fix #980 Detail view, when searching, returns wrong row\n\n            // remove and update\n            if ($tr.next().is('tr.detail-view')) {\n                $this.find('i').attr('class', sprintf('%s %s', that.options.iconsPrefix, that.options.icons.detailOpen));\n                that.trigger('collapse-row', index, row);\n                $tr.next().remove();\n            } else {\n                $this.find('i').attr('class', sprintf('%s %s', that.options.iconsPrefix, that.options.icons.detailClose));\n                $tr.after(sprintf('<tr class=\"detail-view\"><td colspan=\"%s\"></td></tr>', $tr.find('td').length));\n                var $element = $tr.next().find('td');\n                var content = calculateObjectValue(that.options, that.options.detailFormatter, [index, row, $element], '');\n                if($element.length === 1) {\n                    $element.append(content);\n                }\n                that.trigger('expand-row', index, row, $element);\n            }\n            that.resetView();\n            return false;\n        });\n\n        this.$selectItem = this.$body.find(sprintf('[name=\"%s\"]', this.options.selectItemName));\n        this.$selectItem.off('click').on('click', function (event) {\n            event.stopImmediatePropagation();\n\n            var $this = $(this),\n                checked = $this.prop('checked'),\n                row = that.data[$this.data('index')];\n\n            if (that.options.maintainSelected && $(this).is(':radio')) {\n                $.each(that.options.data, function (i, row) {\n                    row[that.header.stateField] = false;\n                });\n            }\n\n            row[that.header.stateField] = checked;\n\n            if (that.options.singleSelect) {\n                that.$selectItem.not(this).each(function () {\n                    that.data[$(this).data('index')][that.header.stateField] = false;\n                });\n                that.$selectItem.filter(':checked').not(this).prop('checked', false);\n            }\n\n            that.updateSelected();\n            that.trigger(checked ? 'check' : 'uncheck', row, $this);\n        });\n\n        $.each(this.header.events, function (i, events) {\n            if (!events) {\n                return;\n            }\n            // fix bug, if events is defined with namespace\n            if (typeof events === 'string') {\n                events = calculateObjectValue(null, events);\n            }\n\n            var field = that.header.fields[i],\n                fieldIndex = $.inArray(field, that.getVisibleFields());\n\n            if (that.options.detailView && !that.options.cardView) {\n                fieldIndex += 1;\n            }\n\n            for (var key in events) {\n                that.$body.find('>tr:not(.no-records-found)').each(function () {\n                    var $tr = $(this),\n                        $td = $tr.find(that.options.cardView ? '.card-view' : 'td').eq(fieldIndex),\n                        index = key.indexOf(' '),\n                        name = key.substring(0, index),\n                        el = key.substring(index + 1),\n                        func = events[key];\n\n                    $td.find(el).off(name).on(name, function (e) {\n                        var index = $tr.data('index'),\n                            row = that.data[index],\n                            value = row[field];\n\n                        func.apply(this, [e, value, row, index]);\n                    });\n                });\n            }\n        });\n\n        this.updateSelected();\n        this.resetView();\n\n        this.trigger('post-body', data);\n    };\n\n    BootstrapTable.prototype.initServer = function (silent, query, url) {\n        var that = this,\n            data = {},\n            params = {\n                searchText: this.searchText,\n                sortName: this.options.sortName,\n                sortOrder: this.options.sortOrder\n            },\n            request;\n\n        if (this.options.pagination) {\n            params.pageSize = this.options.pageSize === this.options.formatAllRows() ?\n                this.options.totalRows : this.options.pageSize;\n            params.pageNumber = this.options.pageNumber;\n        }\n\n        if (!(url || this.options.url) && !this.options.ajax) {\n            return;\n        }\n\n        if (this.options.queryParamsType === 'limit') {\n            params = {\n                search: params.searchText,\n                sort: params.sortName,\n                order: params.sortOrder\n            };\n\n            if (this.options.pagination) {\n                params.offset = this.options.pageSize === this.options.formatAllRows() ?\n                    0 : this.options.pageSize * (this.options.pageNumber - 1);\n                params.limit = this.options.pageSize === this.options.formatAllRows() ?\n                    this.options.totalRows : this.options.pageSize;\n            }\n        }\n\n        if (!($.isEmptyObject(this.filterColumnsPartial))) {\n            params.filter = JSON.stringify(this.filterColumnsPartial, null);\n        }\n\n        data = calculateObjectValue(this.options, this.options.queryParams, [params], data);\n\n        $.extend(data, query || {});\n\n        // false to stop request\n        if (data === false) {\n            return;\n        }\n\n        if (!silent) {\n            this.$tableLoading.show();\n        }\n        request = $.extend({}, calculateObjectValue(null, this.options.ajaxOptions), {\n            type: this.options.method,\n            url:  url || this.options.url,\n            data: this.options.contentType === 'application/json' && this.options.method === 'post' ?\n                JSON.stringify(data) : data,\n            cache: this.options.cache,\n            contentType: this.options.contentType,\n            dataType: this.options.dataType,\n            success: function (res) {\n                res = calculateObjectValue(that.options, that.options.responseHandler, [res], res);\n\n                that.load(res);\n                that.trigger('load-success', res);\n                if (!silent) that.$tableLoading.hide();\n            },\n            error: function (res) {\n                that.trigger('load-error', res.status, res);\n                if (!silent) that.$tableLoading.hide();\n            }\n        });\n\n        if (this.options.ajax) {\n            calculateObjectValue(this, this.options.ajax, [request], null);\n        } else {\n            if (this._xhr && this._xhr.readyState !== 4) {\n                this._xhr.abort();\n            }\n            this._xhr = $.ajax(request);\n        }\n    };\n\n    BootstrapTable.prototype.initSearchText = function () {\n        if (this.options.search) {\n            if (this.options.searchText !== '') {\n                var $search = this.$toolbar.find('.search input');\n                $search.val(this.options.searchText);\n                this.onSearch({currentTarget: $search});\n            }\n        }\n    };\n\n    BootstrapTable.prototype.getCaret = function () {\n        var that = this;\n\n        $.each(this.$header.find('th'), function (i, th) {\n            $(th).find('.sortable').removeClass('desc asc').addClass($(th).data('field') === that.options.sortName ? that.options.sortOrder : 'both');\n        });\n    };\n\n    BootstrapTable.prototype.updateSelected = function () {\n        var checkAll = this.$selectItem.filter(':enabled').length &&\n            this.$selectItem.filter(':enabled').length ===\n            this.$selectItem.filter(':enabled').filter(':checked').length;\n\n        this.$selectAll.add(this.$selectAll_).prop('checked', checkAll);\n\n        this.$selectItem.each(function () {\n            $(this).closest('tr')[$(this).prop('checked') ? 'addClass' : 'removeClass']('selected');\n        });\n    };\n\n    BootstrapTable.prototype.updateRows = function () {\n        var that = this;\n\n        this.$selectItem.each(function () {\n            that.data[$(this).data('index')][that.header.stateField] = $(this).prop('checked');\n        });\n    };\n\n    BootstrapTable.prototype.resetRows = function () {\n        var that = this;\n\n        $.each(this.data, function (i, row) {\n            that.$selectAll.prop('checked', false);\n            that.$selectItem.prop('checked', false);\n            if (that.header.stateField) {\n                row[that.header.stateField] = false;\n            }\n        });\n        this.initHiddenRows();\n    };\n\n    BootstrapTable.prototype.trigger = function (name) {\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        name += '.bs.table';\n        this.options[BootstrapTable.EVENTS[name]].apply(this.options, args);\n        this.$el.trigger($.Event(name), args);\n\n        this.options.onAll(name, args);\n        this.$el.trigger($.Event('all.bs.table'), [name, args]);\n    };\n\n    BootstrapTable.prototype.resetHeader = function () {\n        // fix #61: the hidden table reset header bug.\n        // fix bug: get $el.css('width') error sometime (height = 500)\n        clearTimeout(this.timeoutId_);\n        this.timeoutId_ = setTimeout($.proxy(this.fitHeader, this), this.$el.is(':hidden') ? 100 : 0);\n    };\n\n    BootstrapTable.prototype.fitHeader = function () {\n        var that = this,\n            fixedBody,\n            scrollWidth,\n            focused,\n            focusedTemp;\n\n        if (that.$el.is(':hidden')) {\n            that.timeoutId_ = setTimeout($.proxy(that.fitHeader, that), 100);\n            return;\n        }\n        fixedBody = this.$tableBody.get(0);\n\n        scrollWidth = fixedBody.scrollWidth > fixedBody.clientWidth &&\n        fixedBody.scrollHeight > fixedBody.clientHeight + this.$header.outerHeight() ?\n            getScrollBarWidth() : 0;\n\n        this.$el.css('margin-top', -this.$header.outerHeight());\n\n        focused = $(':focus');\n        if (focused.length > 0) {\n            var $th = focused.parents('th');\n            if ($th.length > 0) {\n                var dataField = $th.attr('data-field');\n                if (dataField !== undefined) {\n                    var $headerTh = this.$header.find(\"[data-field='\" + dataField + \"']\");\n                    if ($headerTh.length > 0) {\n                        $headerTh.find(\":input\").addClass(\"focus-temp\");\n                    }\n                }\n            }\n        }\n\n        this.$header_ = this.$header.clone(true, true);\n        this.$selectAll_ = this.$header_.find('[name=\"btSelectAll\"]');\n        this.$tableHeader.css({\n            'margin-right': scrollWidth\n        }).find('table').css('width', this.$el.outerWidth())\n            .html('').attr('class', this.$el.attr('class'))\n            .append(this.$header_);\n\n\n        focusedTemp = $('.focus-temp:visible:eq(0)');\n        if (focusedTemp.length > 0) {\n            focusedTemp.focus();\n            this.$header.find('.focus-temp').removeClass('focus-temp');\n        }\n\n        // fix bug: $.data() is not working as expected after $.append()\n        this.$header.find('th[data-field]').each(function (i) {\n            that.$header_.find(sprintf('th[data-field=\"%s\"]', $(this).data('field'))).data($(this).data());\n        });\n\n        var visibleFields = this.getVisibleFields(),\n            $ths = this.$header_.find('th');\n\n        this.$body.find('>tr:first-child:not(.no-records-found) > *').each(function (i) {\n            var $this = $(this),\n                index = i;\n\n            if (that.options.detailView && !that.options.cardView) {\n                if (i === 0) {\n                    that.$header_.find('th.detail').find('.fht-cell').width($this.innerWidth());\n                }\n                index = i - 1;\n            }\n\n            var $th = that.$header_.find(sprintf('th[data-field=\"%s\"]', visibleFields[index]));\n            if ($th.length > 1) {\n                $th = $($ths[$this[0].cellIndex]);\n            }\n\n            $th.find('.fht-cell').width($this.innerWidth());\n        });\n        // horizontal scroll event\n        // TODO: it's probably better improving the layout than binding to scroll event\n        this.$tableBody.off('scroll').on('scroll', function () {\n            that.$tableHeader.scrollLeft($(this).scrollLeft());\n\n            if (that.options.showFooter && !that.options.cardView) {\n                that.$tableFooter.scrollLeft($(this).scrollLeft());\n            }\n        });\n        that.trigger('post-header');\n    };\n\n    BootstrapTable.prototype.resetFooter = function () {\n        var that = this,\n            data = that.getData(),\n            html = [];\n\n        if (!this.options.showFooter || this.options.cardView) { //do nothing\n            return;\n        }\n\n        if (!this.options.cardView && this.options.detailView) {\n            html.push('<td><div class=\"th-inner\">&nbsp;</div><div class=\"fht-cell\"></div></td>');\n        }\n\n        $.each(this.columns, function (i, column) {\n            var key,\n                falign = '', // footer align style\n                valign = '',\n                csses = [],\n                style = {},\n                class_ = sprintf(' class=\"%s\"', column['class']);\n\n            if (!column.visible) {\n                return;\n            }\n\n            if (that.options.cardView && (!column.cardVisible)) {\n                return;\n            }\n\n            falign = sprintf('text-align: %s; ', column.falign ? column.falign : column.align);\n            valign = sprintf('vertical-align: %s; ', column.valign);\n\n            style = calculateObjectValue(null, that.options.footerStyle);\n\n            if (style && style.css) {\n                for (key in style.css) {\n                    csses.push(key + ': ' + style.css[key]);\n                }\n            }\n\n            html.push('<td', class_, sprintf(' style=\"%s\"', falign + valign + csses.concat().join('; ')), '>');\n            html.push('<div class=\"th-inner\">');\n\n            html.push(calculateObjectValue(column, column.footerFormatter, [data], '&nbsp;') || '&nbsp;');\n\n            html.push('</div>');\n            html.push('<div class=\"fht-cell\"></div>');\n            html.push('</div>');\n            html.push('</td>');\n        });\n\n        this.$tableFooter.find('tr').html(html.join(''));\n        this.$tableFooter.show();\n        clearTimeout(this.timeoutFooter_);\n        this.timeoutFooter_ = setTimeout($.proxy(this.fitFooter, this),\n            this.$el.is(':hidden') ? 100 : 0);\n    };\n\n    BootstrapTable.prototype.fitFooter = function () {\n        var that = this,\n            $footerTd,\n            elWidth,\n            scrollWidth;\n\n        clearTimeout(this.timeoutFooter_);\n        if (this.$el.is(':hidden')) {\n            this.timeoutFooter_ = setTimeout($.proxy(this.fitFooter, this), 100);\n            return;\n        }\n\n        elWidth = this.$el.css('width');\n        scrollWidth = elWidth > this.$tableBody.width() ? getScrollBarWidth() : 0;\n\n        this.$tableFooter.css({\n            'margin-right': scrollWidth\n        }).find('table').css('width', elWidth)\n            .attr('class', this.$el.attr('class'));\n\n        $footerTd = this.$tableFooter.find('td');\n\n        this.$body.find('>tr:first-child:not(.no-records-found) > *').each(function (i) {\n            var $this = $(this);\n\n            $footerTd.eq(i).find('.fht-cell').width($this.innerWidth());\n        });\n    };\n\n    BootstrapTable.prototype.toggleColumn = function (index, checked, needUpdate) {\n        if (index === -1) {\n            return;\n        }\n        this.columns[index].visible = checked;\n        this.initHeader();\n        this.initSearch();\n        this.initPagination();\n        this.initBody();\n\n        if (this.options.showColumns) {\n            var $items = this.$toolbar.find('.keep-open input').prop('disabled', false);\n\n            if (needUpdate) {\n                $items.filter(sprintf('[value=\"%s\"]', index)).prop('checked', checked);\n            }\n\n            if ($items.filter(':checked').length <= this.options.minimumCountColumns) {\n                $items.filter(':checked').prop('disabled', true);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.getVisibleFields = function () {\n        var that = this,\n            visibleFields = [];\n\n        $.each(this.header.fields, function (j, field) {\n            var column = that.columns[getFieldIndex(that.columns, field)];\n\n            if (!column.visible) {\n                return;\n            }\n            visibleFields.push(field);\n        });\n        return visibleFields;\n    };\n\n    // PUBLIC FUNCTION DEFINITION\n    // =======================\n\n    BootstrapTable.prototype.resetView = function (params) {\n        var padding = 0;\n\n        if (params && params.height) {\n            this.options.height = params.height;\n        }\n\n        this.$selectAll.prop('checked', this.$selectItem.length > 0 &&\n            this.$selectItem.length === this.$selectItem.filter(':checked').length);\n\n        if (this.options.height) {\n            var toolbarHeight = this.$toolbar.outerHeight(true),\n                paginationHeight = this.$pagination.outerHeight(true),\n                height = this.options.height - toolbarHeight - paginationHeight;\n\n            this.$tableContainer.css('height', height + 'px');\n        }\n\n        if (this.options.cardView) {\n            // remove the element css\n            this.$el.css('margin-top', '0');\n            this.$tableContainer.css('padding-bottom', '0');\n            this.$tableFooter.hide();\n            return;\n        }\n\n        if (this.options.showHeader && this.options.height) {\n            this.$tableHeader.show();\n            this.resetHeader();\n            padding += this.$header.outerHeight();\n        } else {\n            this.$tableHeader.hide();\n            this.trigger('post-header');\n        }\n\n        if (this.options.showFooter) {\n            this.resetFooter();\n            if (this.options.height) {\n                padding += this.$tableFooter.outerHeight() + 1;\n            }\n        }\n\n        // Assign the correct sortable arrow\n        this.getCaret();\n        this.$tableContainer.css('padding-bottom', padding + 'px');\n        this.trigger('reset-view');\n    };\n\n    BootstrapTable.prototype.getData = function (useCurrentPage) {\n        return (this.searchText || !$.isEmptyObject(this.filterColumns) || !$.isEmptyObject(this.filterColumnsPartial)) ?\n            (useCurrentPage ? this.data.slice(this.pageFrom - 1, this.pageTo) : this.data) :\n            (useCurrentPage ? this.options.data.slice(this.pageFrom - 1, this.pageTo) : this.options.data);\n    };\n\n    BootstrapTable.prototype.load = function (data) {\n        var fixedScroll = false;\n\n        // #431: support pagination\n        if (this.options.sidePagination === 'server') {\n            this.options.totalRows = data[this.options.totalField];\n            fixedScroll = data.fixedScroll;\n            data = data[this.options.dataField];\n        } else if (!$.isArray(data)) { // support fixedScroll\n            fixedScroll = data.fixedScroll;\n            data = data.data;\n        }\n\n        this.initData(data);\n        this.initSearch();\n        this.initPagination();\n        this.initBody(fixedScroll);\n    };\n\n    BootstrapTable.prototype.append = function (data) {\n        this.initData(data, 'append');\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.prepend = function (data) {\n        this.initData(data, 'prepend');\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.remove = function (params) {\n        var len = this.options.data.length,\n            i, row;\n\n        if (!params.hasOwnProperty('field') || !params.hasOwnProperty('values')) {\n            return;\n        }\n\n        for (i = len - 1; i >= 0; i--) {\n            row = this.options.data[i];\n\n            if (!row.hasOwnProperty(params.field)) {\n                continue;\n            }\n            if ($.inArray(row[params.field], params.values) !== -1) {\n                this.options.data.splice(i, 1);\n                if (this.options.sidePagination === 'server') {\n                    this.options.totalRows -= 1;\n                }\n            }\n        }\n\n        if (len === this.options.data.length) {\n            return;\n        }\n\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.removeAll = function () {\n        if (this.options.data.length > 0) {\n            this.options.data.splice(0, this.options.data.length);\n            this.initSearch();\n            this.initPagination();\n            this.initBody(true);\n        }\n    };\n\n    BootstrapTable.prototype.getRowByUniqueId = function (id) {\n        var uniqueId = this.options.uniqueId,\n            len = this.options.data.length,\n            dataRow = null,\n            i, row, rowUniqueId;\n\n        for (i = len - 1; i >= 0; i--) {\n            row = this.options.data[i];\n\n            if (row.hasOwnProperty(uniqueId)) { // uniqueId is a column\n                rowUniqueId = row[uniqueId];\n            } else if(row._data.hasOwnProperty(uniqueId)) { // uniqueId is a row data property\n                rowUniqueId = row._data[uniqueId];\n            } else {\n                continue;\n            }\n\n            if (typeof rowUniqueId === 'string') {\n                id = id.toString();\n            } else if (typeof rowUniqueId === 'number') {\n                if ((Number(rowUniqueId) === rowUniqueId) && (rowUniqueId % 1 === 0)) {\n                    id = parseInt(id);\n                } else if ((rowUniqueId === Number(rowUniqueId)) && (rowUniqueId !== 0)) {\n                    id = parseFloat(id);\n                }\n            }\n\n            if (rowUniqueId === id) {\n                dataRow = row;\n                break;\n            }\n        }\n\n        return dataRow;\n    };\n\n    BootstrapTable.prototype.removeByUniqueId = function (id) {\n        var len = this.options.data.length,\n            row = this.getRowByUniqueId(id);\n\n        if (row) {\n            this.options.data.splice(this.options.data.indexOf(row), 1);\n        }\n\n        if (len === this.options.data.length) {\n            return;\n        }\n\n        this.initSearch();\n        this.initPagination();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.updateByUniqueId = function (params) {\n        var that = this;\n        var allParams = $.isArray(params) ? params : [ params ];\n\n        $.each(allParams, function(i, params) {\n            var rowId;\n\n            if (!params.hasOwnProperty('id') || !params.hasOwnProperty('row')) {\n                return;\n            }\n\n            rowId = $.inArray(that.getRowByUniqueId(params.id), that.options.data);\n\n            if (rowId === -1) {\n                return;\n            }\n            $.extend(that.options.data[rowId], params.row);\n        });\n\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.insertRow = function (params) {\n        if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) {\n            return;\n        }\n        this.data.splice(params.index, 0, params.row);\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.updateRow = function (params) {\n        var that = this;\n        var allParams = $.isArray(params) ? params : [ params ];\n\n        $.each(allParams, function(i, params) {\n            if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) {\n                return;\n            }\n            $.extend(that.options.data[params.index], params.row);\n        });\n\n        this.initSearch();\n        this.initPagination();\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.initHiddenRows = function () {\n        this.hiddenRows = [];\n    };\n\n    BootstrapTable.prototype.showRow = function (params) {\n        this.toggleRow(params, true);\n    };\n\n    BootstrapTable.prototype.hideRow = function (params) {\n        this.toggleRow(params, false);\n    };\n\n    BootstrapTable.prototype.toggleRow = function (params, visible) {\n        var row, index;\n\n        if (params.hasOwnProperty('index')) {\n            row = this.getData()[params.index];\n        } else if (params.hasOwnProperty('uniqueId')) {\n            row = this.getRowByUniqueId(params.uniqueId);\n        }\n\n        if (!row) {\n            return;\n        }\n\n        index = $.inArray(row, this.hiddenRows);\n\n        if (!visible && index === -1) {\n            this.hiddenRows.push(row);\n        } else if (visible && index > -1) {\n            this.hiddenRows.splice(index, 1);\n        }\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.getHiddenRows = function (show) {\n        var that = this,\n            data = this.getData(),\n            rows = [];\n\n        $.each(data, function (i, row) {\n            if ($.inArray(row, that.hiddenRows) > -1) {\n                rows.push(row);\n            }\n        });\n        this.hiddenRows = rows;\n        return rows;\n    };\n\n    BootstrapTable.prototype.mergeCells = function (options) {\n        var row = options.index,\n            col = $.inArray(options.field, this.getVisibleFields()),\n            rowspan = options.rowspan || 1,\n            colspan = options.colspan || 1,\n            i, j,\n            $tr = this.$body.find('>tr'),\n            $td;\n\n        if (this.options.detailView && !this.options.cardView) {\n            col += 1;\n        }\n\n        $td = $tr.eq(row).find('>td').eq(col);\n\n        if (row < 0 || col < 0 || row >= this.data.length) {\n            return;\n        }\n\n        for (i = row; i < row + rowspan; i++) {\n            for (j = col; j < col + colspan; j++) {\n                $tr.eq(i).find('>td').eq(j).hide();\n            }\n        }\n\n        $td.attr('rowspan', rowspan).attr('colspan', colspan).show();\n    };\n\n    BootstrapTable.prototype.updateCell = function (params) {\n        if (!params.hasOwnProperty('index') ||\n            !params.hasOwnProperty('field') ||\n            !params.hasOwnProperty('value')) {\n            return;\n        }\n        this.data[params.index][params.field] = params.value;\n\n        if (params.reinit === false) {\n            return;\n        }\n        this.initSort();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.getOptions = function () {\n        return this.options;\n    };\n\n    BootstrapTable.prototype.getSelections = function () {\n        var that = this;\n\n        return $.grep(this.options.data, function (row) {\n            // fix #2424: from html with checkbox\n            return row[that.header.stateField] === true;\n        });\n    };\n\n    BootstrapTable.prototype.getAllSelections = function () {\n        var that = this;\n\n        return $.grep(this.options.data, function (row) {\n            return row[that.header.stateField];\n        });\n    };\n\n    BootstrapTable.prototype.checkAll = function () {\n        this.checkAll_(true);\n    };\n\n    BootstrapTable.prototype.uncheckAll = function () {\n        this.checkAll_(false);\n    };\n\n    BootstrapTable.prototype.checkInvert = function () {\n        var that = this;\n        var rows = that.$selectItem.filter(':enabled');\n        var checked = rows.filter(':checked');\n        rows.each(function() {\n            $(this).prop('checked', !$(this).prop('checked'));\n        });\n        that.updateRows();\n        that.updateSelected();\n        that.trigger('uncheck-some', checked);\n        checked = that.getSelections();\n        that.trigger('check-some', checked);\n    };\n\n    BootstrapTable.prototype.checkAll_ = function (checked) {\n        var rows;\n        if (!checked) {\n            rows = this.getSelections();\n        }\n        this.$selectAll.add(this.$selectAll_).prop('checked', checked);\n        this.$selectItem.filter(':enabled').prop('checked', checked);\n        this.updateRows();\n        if (checked) {\n            rows = this.getSelections();\n        }\n        this.trigger(checked ? 'check-all' : 'uncheck-all', rows);\n    };\n\n    BootstrapTable.prototype.check = function (index) {\n        this.check_(true, index);\n    };\n\n    BootstrapTable.prototype.uncheck = function (index) {\n        this.check_(false, index);\n    };\n\n    BootstrapTable.prototype.check_ = function (checked, index) {\n        var $el = this.$selectItem.filter(sprintf('[data-index=\"%s\"]', index)).prop('checked', checked);\n        this.data[index][this.header.stateField] = checked;\n        this.updateSelected();\n        this.trigger(checked ? 'check' : 'uncheck', this.data[index], $el);\n    };\n\n    BootstrapTable.prototype.checkBy = function (obj) {\n        this.checkBy_(true, obj);\n    };\n\n    BootstrapTable.prototype.uncheckBy = function (obj) {\n        this.checkBy_(false, obj);\n    };\n\n    BootstrapTable.prototype.checkBy_ = function (checked, obj) {\n        if (!obj.hasOwnProperty('field') || !obj.hasOwnProperty('values')) {\n            return;\n        }\n\n        var that = this,\n            rows = [];\n        $.each(this.options.data, function (index, row) {\n            if (!row.hasOwnProperty(obj.field)) {\n                return false;\n            }\n            if ($.inArray(row[obj.field], obj.values) !== -1) {\n                var $el = that.$selectItem.filter(':enabled')\n                    .filter(sprintf('[data-index=\"%s\"]', index)).prop('checked', checked);\n                row[that.header.stateField] = checked;\n                rows.push(row);\n                that.trigger(checked ? 'check' : 'uncheck', row, $el);\n            }\n        });\n        this.updateSelected();\n        this.trigger(checked ? 'check-some' : 'uncheck-some', rows);\n    };\n\n    BootstrapTable.prototype.destroy = function () {\n        this.$el.insertBefore(this.$container);\n        $(this.options.toolbar).insertBefore(this.$el);\n        this.$container.next().remove();\n        this.$container.remove();\n        this.$el.html(this.$el_.html())\n            .css('margin-top', '0')\n            .attr('class', this.$el_.attr('class') || ''); // reset the class\n    };\n\n    BootstrapTable.prototype.showLoading = function () {\n        this.$tableLoading.show();\n    };\n\n    BootstrapTable.prototype.hideLoading = function () {\n        this.$tableLoading.hide();\n    };\n\n    BootstrapTable.prototype.togglePagination = function () {\n        this.options.pagination = !this.options.pagination;\n        var button = this.$toolbar.find('button[name=\"paginationSwitch\"] i');\n        if (this.options.pagination) {\n            button.attr(\"class\", this.options.iconsPrefix + \" \" + this.options.icons.paginationSwitchDown);\n        } else {\n            button.attr(\"class\", this.options.iconsPrefix + \" \" + this.options.icons.paginationSwitchUp);\n        }\n        this.updatePagination();\n    };\n\n    BootstrapTable.prototype.refresh = function (params) {\n        if (params && params.url) {\n            this.options.url = params.url;\n        }\n        if (params && params.pageNumber) {\n            this.options.pageNumber = params.pageNumber;\n        }\n        if (params && params.pageSize) {\n            this.options.pageSize = params.pageSize;\n        }\n        this.initServer(params && params.silent,\n            params && params.query, params && params.url);\n        this.trigger('refresh', params);\n    };\n\n    BootstrapTable.prototype.resetWidth = function () {\n        if (this.options.showHeader && this.options.height) {\n            this.fitHeader();\n        }\n        if (this.options.showFooter) {\n            this.fitFooter();\n        }\n    };\n\n    BootstrapTable.prototype.showColumn = function (field) {\n        this.toggleColumn(getFieldIndex(this.columns, field), true, true);\n    };\n\n    BootstrapTable.prototype.hideColumn = function (field) {\n        this.toggleColumn(getFieldIndex(this.columns, field), false, true);\n    };\n\n    BootstrapTable.prototype.getHiddenColumns = function () {\n        return $.grep(this.columns, function (column) {\n            return !column.visible;\n        });\n    };\n\n    BootstrapTable.prototype.getVisibleColumns = function () {\n        return $.grep(this.columns, function (column) {\n            return column.visible;\n        });\n    };\n\n    BootstrapTable.prototype.toggleAllColumns = function (visible) {\n        $.each(this.columns, function (i, column) {\n            this.columns[i].visible = visible;\n        });\n\n        this.initHeader();\n        this.initSearch();\n        this.initPagination();\n        this.initBody();\n        if (this.options.showColumns) {\n            var $items = this.$toolbar.find('.keep-open input').prop('disabled', false);\n\n            if ($items.filter(':checked').length <= this.options.minimumCountColumns) {\n                $items.filter(':checked').prop('disabled', true);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.showAllColumns = function () {\n        this.toggleAllColumns(true);\n    };\n\n    BootstrapTable.prototype.hideAllColumns = function () {\n        this.toggleAllColumns(false);\n    };\n\n    BootstrapTable.prototype.filterBy = function (columns) {\n        this.filterColumns = $.isEmptyObject(columns) ? {} : columns;\n        this.options.pageNumber = 1;\n        this.initSearch();\n        this.updatePagination();\n    };\n\n    BootstrapTable.prototype.scrollTo = function (value) {\n        if (typeof value === 'string') {\n            value = value === 'bottom' ? this.$tableBody[0].scrollHeight : 0;\n        }\n        if (typeof value === 'number') {\n            this.$tableBody.scrollTop(value);\n        }\n        if (typeof value === 'undefined') {\n            return this.$tableBody.scrollTop();\n        }\n    };\n\n    BootstrapTable.prototype.getScrollPosition = function () {\n        return this.scrollTo();\n    };\n\n    BootstrapTable.prototype.selectPage = function (page) {\n        if (page > 0 && page <= this.options.totalPages) {\n            this.options.pageNumber = page;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.prevPage = function () {\n        if (this.options.pageNumber > 1) {\n            this.options.pageNumber--;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.nextPage = function () {\n        if (this.options.pageNumber < this.options.totalPages) {\n            this.options.pageNumber++;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.toggleView = function () {\n        this.options.cardView = !this.options.cardView;\n        this.initHeader();\n        // Fixed remove toolbar when click cardView button.\n        //that.initToolbar();\n        this.initBody();\n        this.trigger('toggle', this.options.cardView);\n    };\n\n    BootstrapTable.prototype.refreshOptions = function (options) {\n        //If the objects are equivalent then avoid the call of destroy / init methods\n        if (compareObjects(this.options, options, true)) {\n            return;\n        }\n        this.options = $.extend(this.options, options);\n        this.trigger('refresh-options', this.options);\n        this.destroy();\n        this.init();\n    };\n\n    BootstrapTable.prototype.resetSearch = function (text) {\n        var $search = this.$toolbar.find('.search input');\n        $search.val(text || '');\n        this.onSearch({currentTarget: $search});\n    };\n\n    BootstrapTable.prototype.expandRow_ = function (expand, index) {\n        var $tr = this.$body.find(sprintf('> tr[data-index=\"%s\"]', index));\n        if ($tr.next().is('tr.detail-view') === (expand ? false : true)) {\n            $tr.find('> td > .detail-icon').click();\n        }\n    };\n\n    BootstrapTable.prototype.expandRow = function (index) {\n        this.expandRow_(true, index);\n    };\n\n    BootstrapTable.prototype.collapseRow = function (index) {\n        this.expandRow_(false, index);\n    };\n\n    BootstrapTable.prototype.expandAllRows = function (isSubTable) {\n        if (isSubTable) {\n            var $tr = this.$body.find(sprintf('> tr[data-index=\"%s\"]', 0)),\n                that = this,\n                detailIcon = null,\n                executeInterval = false,\n                idInterval = -1;\n\n            if (!$tr.next().is('tr.detail-view')) {\n                $tr.find('> td > .detail-icon').click();\n                executeInterval = true;\n            } else if (!$tr.next().next().is('tr.detail-view')) {\n                $tr.next().find(\".detail-icon\").click();\n                executeInterval = true;\n            }\n\n            if (executeInterval) {\n                try {\n                    idInterval = setInterval(function () {\n                        detailIcon = that.$body.find(\"tr.detail-view\").last().find(\".detail-icon\");\n                        if (detailIcon.length > 0) {\n                            detailIcon.click();\n                        } else {\n                            clearInterval(idInterval);\n                        }\n                    }, 1);\n                } catch (ex) {\n                    clearInterval(idInterval);\n                }\n            }\n        } else {\n            var trs = this.$body.children();\n            for (var i = 0; i < trs.length; i++) {\n                this.expandRow_(true, $(trs[i]).data(\"index\"));\n            }\n        }\n    };\n\n    BootstrapTable.prototype.collapseAllRows = function (isSubTable) {\n        if (isSubTable) {\n            this.expandRow_(false, 0);\n        } else {\n            var trs = this.$body.children();\n            for (var i = 0; i < trs.length; i++) {\n                this.expandRow_(false, $(trs[i]).data(\"index\"));\n            }\n        }\n    };\n\n    BootstrapTable.prototype.updateFormatText = function (name, text) {\n        if (this.options[sprintf('format%s', name)]) {\n            if (typeof text === 'string') {\n                this.options[sprintf('format%s', name)] = function () {\n                    return text;\n                };\n            } else if (typeof text === 'function') {\n                this.options[sprintf('format%s', name)] = text;\n            }\n        }\n        this.initToolbar();\n        this.initPagination();\n        this.initBody();\n    };\n\n    // BOOTSTRAP TABLE PLUGIN DEFINITION\n    // =======================\n\n    var allowedMethods = [\n        'getOptions',\n        'getSelections', 'getAllSelections', 'getData',\n        'load', 'append', 'prepend', 'remove', 'removeAll',\n        'insertRow', 'updateRow', 'updateCell', 'updateByUniqueId', 'removeByUniqueId',\n        'getRowByUniqueId', 'showRow', 'hideRow', 'getHiddenRows',\n        'mergeCells',\n        'checkAll', 'uncheckAll', 'checkInvert',\n        'check', 'uncheck',\n        'checkBy', 'uncheckBy',\n        'refresh',\n        'resetView',\n        'resetWidth',\n        'destroy',\n        'showLoading', 'hideLoading',\n        'showColumn', 'hideColumn', 'getHiddenColumns', 'getVisibleColumns',\n        'showAllColumns', 'hideAllColumns',\n        'filterBy',\n        'scrollTo',\n        'getScrollPosition',\n        'selectPage', 'prevPage', 'nextPage',\n        'togglePagination',\n        'toggleView',\n        'refreshOptions',\n        'resetSearch',\n        'expandRow', 'collapseRow', 'expandAllRows', 'collapseAllRows',\n        'updateFormatText'\n    ];\n\n    $.fn.bootstrapTable = function (option) {\n        var value,\n            args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n            var $this = $(this),\n                data = $this.data('bootstrap.table'),\n                options = $.extend({}, BootstrapTable.DEFAULTS, $this.data(),\n                    typeof option === 'object' && option);\n\n            if (typeof option === 'string') {\n                if ($.inArray(option, allowedMethods) < 0) {\n                    throw new Error(\"Unknown method: \" + option);\n                }\n\n                if (!data) {\n                    return;\n                }\n\n                value = data[option].apply(data, args);\n\n                if (option === 'destroy') {\n                    $this.removeData('bootstrap.table');\n                }\n            }\n\n            if (!data) {\n                $this.data('bootstrap.table', (data = new BootstrapTable(this, options)));\n            }\n        });\n\n        return typeof value === 'undefined' ? this : value;\n    };\n\n    $.fn.bootstrapTable.Constructor = BootstrapTable;\n    $.fn.bootstrapTable.defaults = BootstrapTable.DEFAULTS;\n    $.fn.bootstrapTable.columnDefaults = BootstrapTable.COLUMN_DEFAULTS;\n    $.fn.bootstrapTable.locales = BootstrapTable.LOCALES;\n    $.fn.bootstrapTable.methods = allowedMethods;\n    $.fn.bootstrapTable.utils = {\n        sprintf: sprintf,\n        getFieldIndex: getFieldIndex,\n        compareObjects: compareObjects,\n        calculateObjectValue: calculateObjectValue,\n        getItemField: getItemField,\n        objectKeys: objectKeys,\n        isIEBrowser: isIEBrowser\n    };\n\n    // BOOTSTRAP TABLE INIT\n    // =======================\n\n    $(function () {\n        $('[data-toggle=\"table\"]').bootstrapTable();\n    });\n})(jQuery);\n"],"sourceRoot":""}