(function ($) { $.widget("ui.table", { options: { name: "table", default_controls: [{ id: 'first', icon: 'ui-icon-arrowthickstop-1-w' }, { id: 'previous', icon: 'ui-icon-arrowthick-1-w' }, { id: 'next', icon: 'ui-icon-arrowthick-1-e' }, { id: 'last', icon: 'ui-icon-arrowthickstop-1-e' }], controls: [], page_size: 30, page: 1, page_count: 1, oddclass: 'table_odd', evenclass: 'table_even' }, _init: function () {}, _create: function () { $(this).data('old_content', this.element.html()); this.options.oddcolor = $('.ui-state-default').css('background-color'); this.options.controls = this.options.default_controls.concat(this.options.controls); // création de la barre de navigation var chaine = "<ul id='" + this._getId("navBar") + "' style='list-style:none;'>"; for (var i = 0; i < this.options.controls.length; i++) { chaine += this._getControl(this.options.controls[i]['id'], this.options.controls[i]['icon']); } chaine += "</ul><div style='clear:both;'> </div>"; chaine += "<table id='" + this._getId("table") + "'></table>"; this.element.html(chaine); this._createHeader(); this.getValues(); this.options.page_count = (this.options.provider.getCount() / this.options.page_size); var self = this; var classe = this._getId('controls'); $('.' + classe).click( function () { var methode = $(this).attr('id').replace(new RegExp('^' + self.options.name + '_'), ''); self[methode](); }); }, destroy: function () { this.element.html($(this).data('old_content')); // call the original destroy method since we overwrote it $.Widget.prototype.destroy.call(this); }, first: function () { this._setOption('page', 1); }, next: function () { this._setOption('page', Math.min(this.options.page + 1, this.options.page_count)); }, previous: function () { this._setOption('page', Math.max(this.options.page - 1, 1)); }, last: function () { this._setOption('page', this.options.page_count); }, _setOption: function (key, value) { this.options[key] = value; switch (key) { case 'page': this.getValues(); break; } }, _getControl: function (id, icon) { var classe = this._getId('controls'); var chaine = "<li class='" + classe + " ui-state-default ui-corner-all' id='" + this._getId(id) + "' style='float:left;margin-right:2px;text-decoration: none;'>" + "<span class='ui-widget ui-corner-all ui-icon ui-button " + icon + "' title='" + id + "'></span></li>"; return chaine; }, _createHeader: function () { var chaine = '<tr>'; var cols = this.options.provider.getHeader(); for (var i = 0; i < cols.length; i++) { chaine += '<th>' + cols[i] + '</th>'; } chaine += '</tr>'; $('#' + this._getId("table")).append(chaine); }, getValues: function () { var chaine = ''; var min = (this.options.page - 1) * this.options.page_size; $('.' + this._getId("values")).remove(); var vals = this.options.provider.getData(min, this.options.page_size); for (var i = 0; i < vals.length; i++) { chaine += "<tr class='" + this._getId("values") + "'>"; for (var j = 0; j < vals[i].length; j++) { chaine += '<td>' + vals[i][j] + '</td>'; } chaine += '</tr>'; } $('#' + this._getId("table")).append(chaine); $('.' + this._getId("values") + ':odd').addClass(this.options.oddclass); $('.' + this._getId("values") + ':even').addClass(this.options.evenclass); }, _getId: function (id) { return this.options.name + '_' + id; } }); $.extend($.ui.table, {}); })(jQuery); var DataProvider = function () { this.data = []; for (var i = 0; i < 2000; i++) { this.data.push([i * 10000 + 1, i * 10000 + 2, i * 10000 + 3, i * 10000 + 4]); } } DataProvider.prototype.getHeader = function () { return ['col1', 'col2', 'col3', 'col4']; } DataProvider.prototype.getData = function (start, size) { if (size == 0) { return this.data; } else { return this.data.slice(start, start + size); } } DataProvider.prototype.getCount = function () { return this.data.length; }
@CHARSET"UTF-8"; .table_odd { background-color: #EEEEEE; } .table_even { background-color: #DDDDDD; }