/** * bootstrap-table-flatJSON.js * @version: v1.0.1 * @author: Dennis Hernández * @webSite: http://djhvscf.github.io/Blog * * Created by Dennis Hernández on 01/Nov/2014. * * Copyright (c) 2014 Dennis Hernández http://djhvscf.github.io/Blog * * The MIT License (http://www.opensource.org/licenses/mit-license.php) * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ (function ($) { 'use strict'; $.extend($.fn.bootstrapTable.defaults, { flat: false }); var BootstrapTable = $.fn.bootstrapTable.Constructor, _initData = BootstrapTable.prototype.initData; BootstrapTable.prototype.initData = function () { _initData.apply(this, Array.prototype.slice.apply(arguments)); //If the flat is true if (this.options.flat) { this.options.data = sd.flatHelper(this.options.data); } if (this.options.sidePagination === 'server') { this.data = this.options.data; } }; //Main functions var sd = { flat: function (element) { var result = {}; function recurse(cur, prop) { if (Object(cur) !== cur) { result[prop] = cur; } else if ($.isArray(cur)) { for (var i = 0, l = cur.length; i < l; i++) { recurse(cur[i], prop ? prop + "." + i : "" + i); if (l == 0) { result[prop] = []; } } } else { var isEmpty = true; for (var p in cur) { isEmpty = false; recurse(cur[p], prop ? prop + "." + p : p); } if (isEmpty) { result[prop] = {}; } } } recurse(element, ""); return result; }, flatHelper: function (data) { var flatArray = [], arrayHelper = []; if (!$.isArray(data)) { arrayHelper.push(data); data = arrayHelper; } $.each(data, function (i, element) { flatArray.push(sd.flat(element)); }); return flatArray; } }; })(jQuery);