PHP Classes

File: web/bundles/Raptor/UIR/js/uir-table.js

Recommend this page to a friend!
  Classes of william amed   Raptor 2   web/bundles/Raptor/UIR/js/uir-table.js   Download  
File: web/bundles/Raptor/UIR/js/uir-table.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Raptor 2
Framework that takes routes from annotations
Author: By
Last change: Modificacion del core de la actualizacion 2.1.5
Date: 8 years ago
Size: 37,552 bytes
 

Contents

Class file image Download
(function ($) { UIR.namespace('UIR.Panel'); UIR.Panel.Table = function (el, options) { this.options = options; this.element = el; this.init(); } UIR.Panel.Table.prototype = { constructor: UIR.Panel.Table, init: function () { var empty = {}; this.options = $.extend(empty, this.defaultOptions, this.options); this.extraParams={}; var $element = $(this.element); this.$element = $element; this.container = $("<div></div>"); if (this.options.putRootClass === true) this.container.addClass('uir-table container-fluid'); $element.before(this.container); //this.container.append($element); this.body = $element.find('tbody'); if (this.body.size() == 0) { this.body = $('<tbody></tbody>'); $element.append(this.body); } //Loading template this.loading = $('<div></div>'); this.loading.addClass('') this.loading.append('<div class="uir-table-loading-indicator"></div>') this.loading.append('<h4 class="uir-table-loading-text" style="text-align:center;position:absolute;top:50%;margin-top: 20px;width:100%">Cargando..</h4>') this.loading.css({ 'background': 'rgba(0,0,0,0.5)', 'position': 'absolute', 'zIndex': '100000' }); this.loading.appendTo(document.body); this.loading.hide(); //Filas de arriba y abajo this.rowUp = $("<div class='row-fluid'>"); this.rowCenter = $("<div class='row-fluid'>"); this.rowDown = $("<div class='row-fluid'>"); this.container.prepend(this.rowUp); this.container.append(this.rowCenter); this.container.append(this.rowDown); //Lugar de derecha e izquierda de arriba this.rowUpLeft = $("<div class='col-lg-9'></div>"); this.rowUpRight = $("<div class='col-lg-3'></div>"); this.rowUp.append(this.rowUpLeft); this.rowUp.append(this.rowUpRight); if (this.options.hideTop == true) this.rowUp.hide(); if (this.options.searching == true) { var con = $('<div></div>'); con.addClass('input-group'); //con.addClass('col-md-3'); this.searchingEl = $("<input class='form-control' type='text'>"); //con.addClass('pull-right'); this.searchingEl.attr('placeholder', 'Buscar...'); con.append(this.searchingEl); this.searchingEl.on('keypress', this, this.onSearch); this.btnSearch = $('<button class="btn btn-primary"><span class="glyphicon glyphicon-search"></span></button>'); var span = $('<span class="input-group-btn">'); span.append(this.btnSearch); con.append(span) this.btnSearch.css('height', '35px'); this.rowUpRight.append(con); this.btnSearch.click(this, this.onSearchBtn); } this.rowTable = $("<div class='col-lg-12'></div>"); this.rowTable.append($element); if (this.options.height) { this.rowTable.css({ overflow: 'hidden', marginTop: 5 }) this.rowTable.height(this.options.height) this.rowTable.perfectScrollbar({ suppressScrollX: true }); } this.rowCenter.append(this.rowTable); //$element.css('marginTop',5); if (this.options.header) { $element.find('thead').remove(); this.header = $('<thead></thead>'); $element.prepend(this.header); var tr = $('<tr></tr>'); this.header.append(tr); var cantHeader = this.options.header.length; if (this.options.multi == true) { var th = $('<th></th>'); var check = $('<input type="checkbox" />'); th.append(check); th.width(15); tr.append(th); var me = this; th.change(function () { var state = $(this).find('input').get(0).checked; me.body.find('input').each(function () { $(this).get(0).checked = state; }); }) } for (var i = 0; i < cantHeader; ++i) { if (this.options.header[i].hidden !== true) { var th = $('<th></th>'); th.html(this.options.header[i].title); tr.append(th); } } } this.data = []; var data = []; this.body.find('tr').each(function () { var row = []; $(this).find('td').each(function () { row.push($(this).html()) }); data.push(row); }) this.data = data; this.dataCount = this.data.length; if (this.options.paging == true) { this.currentPage = 1; this.pagingSelect = $("<select class='form-control' name='example_length' size='1'>" + "<option value='10' selected='selected'>10</option>" + "<option value='25'>25</option>" + " <option value='50'>50</option>" + "<option value='100'>100</option>" + "</select>"); this.rowDownLeft = $("<div class='col-lg-2'></div>"); this.rowDownLeft.append(this.pagingSelect); this.rowDown.append(this.rowDownLeft); this.pagination = $("<nav>" + "<ul class='pagination'>" + " <li><a href='#'><span aria-hidden='true'>&laquo;</span><span class='sr-only'>Previous</span></a></li>" + " <li class='prev'><a href='#'><span aria-hidden='true'>&raquo;</span><span class='sr-only'>Next</span></a></li>" + " </ul>" + "</nav>"); this.rowDownRight = $("<div class='col-lg-6 pull-right'></div>"); this.rowDownRight.append(this.pagination); this.pagination.addClass('pull-right'); this.rowDown.append(this.rowDownRight); this.pagingSelect.change(this, this.onSelectChange); this.pagination.empty(); if (this.options.url) { this.body.empty(); if (this.options.autoload == true) this.makeLoad(); } else { this.pagingSelect.trigger('change'); } } else { if (this.options.url) { if (this.options.autoload == true) this.makeLoad(); } else { this.reDraw('all'); } } this.onFixHeader(); // alert(this.container.height()) }, onSearch: function (e) { if (e.which == 13) { $('a').focus(); e.data.currentPage = 1; e.data.makeLoad('', {query: e.data.searchingEl.val()}); } }, onFixHeader: function () { var clone = this.$element.find('thead').clone(true); this.fixHeader = $('<table class="table table-bordered2 uir-table"></table>').css({'position': 'fixed'}).appendTo(this.rowTable); this.fixHeader.hide(); clone.appendTo(this.fixHeader); this.fixHeader.css('zIndex', 10); this.rowTable.on('scroll', $.proxy(this.eventFixHeader, this)) $(window).on('scroll', $.proxy(this.eventFixHeader, this)); $(window).on('resize', $.proxy(this.eventFixHeader, this)); }, eventFixHeader: function () { var scroll = $(window).scrollTop(); if (this.rowTable.scrollTop() > 0) { this.fixHeader.show(); this.fixHeader.css({ top: this.rowTable.offset().top - scroll, left: this.$element.find('thead').offset().left, width: this.$element.find('thead').width() }) var el = this.$element; var tds = this.$element.find('thead th'); var cont = 0; this.fixHeader.find('th').each(function () { $(this).width($(tds.get(cont)).width()) cont++; }) } else { this.fixHeader.hide(); } }, onSearchBtn: function (e) { e.data.currentPage = 1; e.data.makeLoad('', {query: e.data.searchingEl.val()}); }, onLoadServer: function (dataLoaded) { this.hideLoading(); var data = dataLoaded; this.rowData = dataLoaded; if (this.options.reader) { data = dataLoaded[this.options.reader]; } if (this.options.paging == true) { this.data = data.data; this.sorting(); this.dataCount = data.size; if (this.data == undefined) { this.data = []; this.dataCount = 0; } this.reDraw(this.pagingSelect.val(), this.currentPage, true); this.updatePagination(); this.updatePaginationClick(); //this.pagingSelect.trigger('change'); } else { this.data = data; this.sorting(); this.dataCount = this.data.length this.reDraw('all'); } var e = $.Event('loaded') this.$element.trigger(e) }, makeLoad: function (url, opt) { this.showLoading(); this.__on_deselect_row.call(this.__on_deselect_row_scope); var e = $.Event('rowdeselect'); this.$element.trigger(e); var me = this; if (!url || url == '') url = this.options.url; if (typeof url == 'object') { opt = url; url = this.options.url; } var op = {}; if (this.options.paging === true) { var numpag = this.pagingSelect.val(); op = $.extend(this.extraParams, {size: numpag, page: this.currentPage}, opt); } else op = $.extend(this.extraParams, {}, opt); if (this.options.searching == true) op.query = this.searchingEl.val(); $.ajax({ url: url, type: 'POST', data: op, success: function (data) { me.onLoadServer(data); }, error: function () { me.onLoadServer([]); } }); }, onSelectChange: function (e) { if (e.data.options.url) { e.data.currentPage = 1; e.data.makeLoad('', {size: e.data.pagingSelect.val(), page: 1}); } else { e.data.reDraw($(this).val()); e.data.updatePagination(); } }, updatePagination: function () { var num = this.dataCount / this.pagingSelect.val(); var rest = this.dataCount % this.pagingSelect.val(); var cant = parseInt(num); if (rest > 0) cant++; this.pagination.empty(); this.pagination.append("<ul class='pagination'>" + " <li class='prev'><a ><span aria-hidden='true'>&laquo;</span><span class='sr-only'>Previous</span></a></li>" + " <li class='next'><a ><span aria-hidden='true'>&raquo;</span><span class='sr-only'>Next</span></a></li>" + " </ul>"); this.prevButton = this.pagination.find('li[class=prev] a'); this.nextButton = this.pagination.find('li[class=next] a'); if (this.currentPage == 1 || this.dataCount == 0) { // this.prevButton.hide(); this.prevButton.parents('li').addClass('disabled'); } else { this.prevButton.parents('li').removeClass('disabled'); } if (this.currentPage * this.pagingSelect.val() >= this.dataCount) { // this.nextButton.hide(); this.nextButton.parents('li').addClass('disabled'); } var start = this.currentPage % 3 == 0 ? this.currentPage : parseInt((this.currentPage / 3)) + 1; var end = start + 2; if (end > cant) { end = cant; start = cant - 2; if (start < 1) start = 1; } for (var i = start; i <= end; ++i) { var pag = $('<li class="uir-pag uir-pag-' + i + '"><a >' + i + '</a></li>'); pag.data('pag', i); this.nextButton.parents('li').before(pag); } this.pagination.find('li').removeClass('active'); this.pagination.find('li.uir-pag-' + this.currentPage).addClass('active'); this.pagination.find('li.uir-pag a').click({scope: this, button: 3}, this.onPageClick); this.nextButton.click({scope: this, button: 2}, this.onPageClick); this.prevButton.click({scope: this, button: 1}, this.onPageClick); }, onPageClick: function (e) { if ($(this).parents('li').hasClass('disabled') || $(this).parents('li').hasClass('active')) return false; var me = e.data.scope; var opt = e.data.button; var numpag = me.pagingSelect.val(); if (opt == 1) { me.currentPage--; } if (opt == 2) { me.currentPage++; } if (opt == 3) { me.currentPage = $(this).parents('li').data('pag'); } if (me.options.url) { me.makeLoad('', {size: numpag, page: me.currentPage}); } else { me.reDraw(numpag, me.currentPage); me.updatePaginationClick(); } }, updatePaginationClick: function (e) { var me = this; me.nextButton.show(); me.prevButton.show(); if (me.currentPage * me.pagingSelect.val() >= me.dataCount) { // me.nextButton.hide(); // me.prevButton.show(); me.nextButton.parents('li').addClass('disabled'); me.prevButton.parents('li').removeClass('disabled') } else { // me.nextButton.show(); me.nextButton.parents('li').removeClass('disabled'); } if (me.currentPage == 1) { // me.prevButton.hide(); me.prevButton.parents('li').addClass('disabled') } }, defaultOptions: { url: false, paging: true, searching: true, header: [], data: [], reader: false, multi: false, autoload: true, hideTop: false, putRootClass: true }, setPagingOptions: function (options) { }, reDraw: function (numpag, page, ajax) { this.body.empty(); if (this.options.multi == true) { this.header.find('input').get(0).checked = false; } var init = 0; if (ajax !== true && page && numpag != 'all') { init = (page * numpag) - numpag; numpag = page * numpag; } if (numpag == 'all' || numpag > this.data.length) numpag = this.data.length; for (var i = init; i < numpag; ++i) { this.add(this.data[i]); } if (numpag == 0) { this.rowUpLeft.empty(); $('.uir-table-no-data').remove(); this.rowUpLeft.append('<span class="label label-info text-center " style="margin-top:10px;">No se encontraron datos para mostrar</span>'); this.rowCenter.append('<div class="uir-table-no-data" style="text-align:center;color:gray;border-bottom:1px #d3d3d3 solid ;text-shadow: 0 2px 4px rgba(0, 0, 0, .6);padding-bottom:15px;margin-bottom: 10px">Sin datos para mostrar</div>') } else { $('.uir-table-no-data').remove(); this.rowUpLeft.empty(); var text = ''; if (this.options.paging == true) { var total = parseInt(this.dataCount / this.pagingSelect.val()); var rest = this.dataCount % this.pagingSelect.val(); if (rest > 0) total++; text += "Página " + this.currentPage + " de " + total + " - "; } var can = numpag - init; text += "Mostrando " + can + " de " + this.dataCount; this.rowUpLeft.append('<span class="label label-info text-center " style="margin-top:10px;">' + text + '</span>'); } this.rowTable.scrollTop(0); }, onRowClick: function (e) { //if(e.data.options.multi==false||e.ctrlKey==false) e.data.body.find('tr').removeClass('selected'); $(this).addClass('selected'); e.data.__on_select_row.call(e.data.__on_select_row_scope, $(this)); var e2 = $.Event('rowselect'); e.data.$element.trigger(e2, [$(this).data('row'), $(this)]); }, onTableSelect: function (fun, scope) { this.__on_select_row = fun; this.__on_select_row_scope = scope; }, __on_select_row: function () { }, onTableDeSelect: function (fun, scope) { this.__on_deselect_row = fun; this.__on_deselect_row_scope = scope; }, __on_deselect_row: function () { }, add: function (row, index) { var tr = $('<tr>'); tr.click(this, this.onRowClick); var cant = row.length; var data = row; if (this.options.multi == true) { var th = $('<th></th>'); var check = $('<input type="checkbox" />'); th.append(check); var me = this; th.change(function (e) { var state = $(this).find('input').get(0).checked; if (state) { $(this).addClass('selected'); } else { $(this).removeClass('selected'); me.header.find('input').get(0).checked = false; } }) tr.append(th); } if (row instanceof Object) { var me = this; if (me.options.header) { $.each(me.options.header, function (i2, val2) { $.each(row, function (i, val) { if (val2.index === i && val2.hidden !== true) { var td = $('<td>'); if (val2.render instanceof Function) td.html(val2.render.call(me, val, row)); else td.html(val); tr.append(td); if (val2.style) td.attr('style', val2.style); if (val2.cls) td.addClass(val2.cls); if (val2.editable) { var clicked = false; var funcion = function (e) { if (clicked) { clicked = false; return; } e.stopPropagation(); var before = td.html(); var sub = $('<div>'); sub.append(before); td.empty(); td.append(sub); td.children().hide(); var input = $('<input type="text" class="form-control">'); var con = $('<div class="selectContainer"></div>'); if (val2.editable.autoComplete) input = $('<select class="form-control" title="Seleccione..">' + '<option value=""></option>' + '</select>') con.append(input); if (val2.editable.autoComplete && val2.editable.data instanceof Array) { var lon = val2.editable.data.length; var idMap = (val2.editable.map) ? val2.editable.map.id : 'id'; var textMap = (val2.editable.map) ? val2.editable.map.text : 'text'; for (var k = 0; k < lon; ++k) { input.append('<option value="' + (val2.editable.data[k][idMap] ? val2.editable.data[k][idMap] : val2.editable.data[k][textMap]) + '">' + val2.editable.data[k][textMap] + '</option>'); } } if (val2.editable.autoComplete && val2.editable.data instanceof Function) { var dataOld = val2.editable.data(); var lon = dataOld.length; var idMap = (val2.editable.map) ? val2.editable.map.id : 'id'; var textMap = (val2.editable.map) ? val2.editable.map.text : 'text'; for (var k = 0; k < lon; ++k) { input.append('<option value="' + (dataOld[k][idMap] ? dataOld[k][idMap] : dataOld[k][textMap]) + '">' + dataOld[k][textMap] + '</option>'); } } con.click(function () { e.stopPropagation(); clicked = true; }) if (val2.editable.autoComplete) input.selectpicker().change(function () { row[i] = !input.find('option:selected').html() ? null : input.find('option:selected').html(); con.remove(); clicked = true; td.html(val2.render.call(me, row[i], row)); td.children().show(); if (val2.editable.onSave) { val2.editable.reject = function () { row[i] = prev; td.html(val2.render.call(me, row[i], row)); } var result = val2.editable.onSave(row[i], input.val(), row); // } }); if (val2.editable.style) input.attr('style', val2.editable.style) input.width(td.width() - 40); input.click(function (e) { e.stopPropagation(); }); input.blur(function (e) { e.stopPropagation(); $(this).remove(); td.children().show(); }); input.keyup(function (e) { e.stopPropagation(); if (e.which == 27) { $(this).remove(); td.children().show(); } var valid = true; if (val2.editable.validation) { if (val2.editable.validation instanceof Function) { valid = val2.editable.validation.render.call(me, input.val(), row); } else { valid = val2.editable.validation.test(input.val()); } } if (valid) input.removeClass('error'); else { input.addClass('error'); return; } if (e.which == 13) { row[i] = !input.val() ? null : input.val(); td.html(val2.render.call(me, row[i], row)); $(this).remove(); td.children().show(); if (val2.editable.onSave) { val2.editable.reject = function () { row[i] = prev; td.html(val2.render.call(me, row[i], row)); } var result = val2.editable.onSave(row[i], row); // } } }); if (val2.editable.autoComplete) { $(this).append(con) } else $(this).append(input); input.val(row[i]); var prev = row[i]; input.focus(); } if (val2.editable.click && val2.editable.click == 1) td.click(funcion); else td.dblclick(funcion) } } }); }); } else { $.each(row, function (i, val) { var td = $('<td>'); td.html(val); tr.append(td); }); } } if (row instanceof Array) { for (var i = 0; i < cant; ++i) { var td = $('<td>'); td.html(row[i]); tr.append(td); } } if (index) { this.body.find('tr:eq(' + index + ')').before(tr); } else this.body.append(tr); tr.data('row', data); }, addTitleRow: function (row) { var tr = $('<tr>'); this.body.append(tr); tr.click(this, this.onRowClick); var cant = row.length; var data = row; if (row instanceof Array) { for (var i = 0; i < cant; ++i) { var td = $('<td>'); td.html(row[i]); tr.append(td); } } tr.data('row', data); }, insertAt: function (index, row) { this.add(row, index) }, getAt: function (i) { var row = this.body.find('tr:eq(' + i + ')'); if (row.size() > 0) { return $(row.get(0)).data('row'); } else { return null; } }, size: function () { return this.rowData.length; }, getData: function () { return this.rowData; }, getSelected: function () { var row = this.body.find('.selected'); if (row.size() > 0) { return $(row.get(0)).data('row'); } else { return null; } }, setSelected: function (items) { if (items instanceof Array) { var rows = this.body.find('tr'); for (var i = 0; i < rows.size(); ++i) { if (this.options.multi === true) { var cant = items.length; for (var j = 0; j < cant; ++j) { $.each(items[j], function (index, val) { if ($(rows.get(i)).data('row')[index] && $(rows.get(i)).data('row')[index] === val) { var inp = $(rows.get(i)).find('input').get(0); inp.click(); inp.checked = true; } }) } } else { var cant = items.length; for (var j = 0; j < cant; ++j) { $.each(items[j], function (index, val) { if ($(rows.get(i)).data('row')[index] && $(rows.get(i)).data('row')[index] === val) { $(rows.get(i)).addClass('selected'); } }); } } } } if (items instanceof Object) { var rows = this.body.find('tr'); for (var i = 0; i < rows.size(); ++i) { if (this.options.multi === true) { $.each(items, function (index, val) { if ($(rows.get(i)).data('row')[index] && $(rows.get(i)).data('row')[index] === val) { var inp = $(rows.get(i)).find('input').get(0); inp.click(); inp.checked = true; } }) } else { $.each(items[j], function (index, val) { if ($(rows.get(i)).data('row')[index] && $(rows.get(i)).data('row')[index] === val) { $(rows.get(i)).addClass('selected'); } }); } } } }, resetSelection: function () { var rows = this.body.find('tr'); rows.removeClass('selected'); if (this.options.multi === false) { return; } for (var i = 0; i < rows.size(); ++i) { if (this.options.multi === true) { $(rows.get(i)).find('input').each(function () { this.checked = false; }); } } }, getSelection: function () { var rows = this.body.find('tr'); var result = []; for (var i = 0; i < rows.size(); ++i) { var inp = $(rows.get(i)).find('input').get(0); if (inp.checked === true) result.push($(rows.get(i)).data('row')); } return result; }, remove: function (i) { var row = this.body.find('tr:eq(' + i + ')'); if (row.size() > 0) { $(row.get(0)).remove(); return true; } else { return false; } }, clear: function () { if (this.options.paging == true) { this.data = []; this.dataCount = 0; this.reDraw(this.pagingSelect.val(), this.currentPage, true); this.updatePagination(); this.updatePaginationClick(); //this.pagingSelect.trigger('change'); } else { this.data = []; this.dataCount = 0 this.reDraw('all'); } }, showLoading: function () { var offset = this.container.offset(); if (this.flagLoad) return; if (this.container.width() < 0 || this.container.height() < 0) return; this.flagLoad = true; this.loading.css({ 'left': offset.left, 'top': offset.top, 'width': this.container.width(), 'height': this.container.height() }); this.loading.fadeIn(); }, hideLoading: function () { this.loading.fadeOut("slow"); this.flagLoad = false; }, sorting: function () { if (this.options.sort) { return; var sorted = new Array(); var current = 0; for (var i = 0, cant = this.data.length; i < cant; i++) { if (this.data[i][this.options.sort] >= current) { sorted.push(this.data[i]); current = this.data[i][this.options.sort]; } else { var rest = sorted.splice(sorted.length - 1, 1); var ini = sorted.splice(0, sorted.length - 1); var result = ini.concat(this.data[i]); sorted = result.concat(rest); } } this.data = sorted; } }, destroy: function () { var $div = $(this.element).find('div') , $checkbox; $div.find(':not(input:checkbox)').remove(); $checkbox = $div.children(); $checkbox.unwrap().unwrap(); $checkbox.unbind('change'); return $checkbox; }, } $.fn.TableUIR = $.fn.tableUIR = function (options) { if (typeof options === 'string') { if (options === 'data') return $(this).data('tableuir'); var obj = $(this).data('tableuir'); var arg = new Array(); for (var i = 1; i < arguments.length; i++) { arg.push(arguments[i]) } if (obj[options]) return obj[options].apply(obj, arg); } else { $(this).each(function () { $(this).data('tableuir', new UIR.Panel.Table(this, options)) }) } } })(jQuery);