123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- // jQuery UI style "widget" for selecting and sorting "fields"
- $(function()
- {
- // the widget definition, where "itop" is the namespace,
- // "datatable" the widget name
- $.widget( "itop.datatable",
- {
- // default options
- options:
- {
- sPersistentId: '',
- sFilter: '',
- oColumns: {},
- sSelectMode: '',
- sViewLink: 'true',
- iNbObjects: 0,
- iDefaultPageSize: -1,
- iPageSize: -1,
- iPageIndex: 0,
- oClassAliases: {},
- sTableId : null,
- oExtraParams: {},
- sRenderUrl: 'index.php',
- oRenderParameters: {},
- oDefaultSettings: {},
- oLabels: { moveup: 'Move Up', movedown: 'Move Down' }
- },
-
- // the constructor
- _create: function()
- {
- this.aDlgStateParams = ['iDefaultPageSize', 'oColumns'];
- this.element
- .addClass('itop-datatable');
-
- var me = this;
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- var bViewLink = (this.options.sViewLink == 'true');
- $('#sfl_'+sListId).fieldsorter({hasKeyColumn: bViewLink, labels: this.options.oLabels, fields: this.options.oColumns, onChange: function() { me._onSpecificSettings(); } });
- $('#datatable_dlg_'+sListId).find('input[name=page_size]').click(function() { me._onSpecificSettings(); });
- $('#datatable_dlg_'+sListId).find('input[name=save_settings]').click(function() { me._updateSaveScope(); });
- this.element.find('.itop_popup > ul li').popupmenu();
- this._updateSaveScope();
- this._saveDlgState();
- },
-
- // called when created, and later when changing options
- _refresh: function()
- {
- oParams = this.options.oRenderParameters;
- oParams.operation = 'datatable';
-
- oParams.filter = this.options.sFilter;
- oParams.extra_param = this.options.oExtraParams;
- oParams.start = 0;
- oParams.end = this.options.iPageSize;
- oParams.select_mode = this.options.sSelectMode;
- oParams.display_key = this.options.sViewLink;
- oParams.class_aliases = this.options.oClassAliases;
- oParams.columns = this.options.oColumns;
- var iSortCol = 0;
- for(var k1 in oParams.columns) //Aliases
- {
- for(var k2 in oParams.columns[k1]) //Attribute codes
- {
- if (oParams.columns[k1][k2].sort != 'none')
- {
- oParams.sort_col = iSortCol;
- oParams.sort_order = oParams.columns[k1][k2].sort;
- break; //TODO make this more generic, Sort on just one column for now
- }
- iSortCol++;
- }
- break; //TODO: DBObjectSet supports only sorting on the first alias of the set
- }
-
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- oParams.list_id = sListId;
- var me = this;
- $.post(this.options.sRenderUrl, oParams, function(data) {
- // Nasty workaround to clear the pager's state for paginated lists !!!
- // See jquery.tablesorter.pager.js / saveParams / restoreParams
- if (window.pager_params)
- {
- window.pager_params['pager'+sListId] = undefined;
- }
- // End of workaround
- me.element.find('.datacontents').html(data);
- }, 'html' );
-
- },
- _useDefaultSettings: function(bResetAll)
- {
- var oParams = this.options.oRenderParameters;
- oParams.operation = 'datatable_reset_settings';
-
- oParams.table_id = this.options.sTableId;
- oParams.defaults = bResetAll;
- oParams.class_aliases = this.options.oClassAliases;
-
- var me = this;
- $.post(this.options.sRenderUrl, oParams, function(data) {
- // Do nothing...
- }, 'html' );
- },
- _saveSettings: function(bSaveAsDefaults)
- {
- var oParams = this.options.oRenderParameters;
- oParams.operation = 'datatable_save_settings';
-
- oParams.page_size = this.options.iPageSize;
- oParams.table_id = this.options.sTableId;
- oParams.defaults = bSaveAsDefaults;
- oParams.class_aliases = this.options.oClassAliases;
- oParams.columns = this.options.oColumns;
-
- var me = this;
- $.post(this.options.sRenderUrl, oParams, function(data) {
- // Do nothing...
- }, 'html' );
- },
- onDlgOk: function()
- {
- var oOptions = {};
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- oSettings = $('#datatable_dlg_'+sListId).find('input[name=settings]:checked');
- if (oSettings.val() == 'defaults')
- {
- oOptions = { iPageSize: this.options.oDefaultSettings.iDefaultPageSize,
- oColumns: this.options.oDefaultSettings.oColumns
- };
- }
- else
- {
- var oDisplayColumns = {};
- var iColIdx = 0;
- var iSortIdx = 0;
- var sSortDirection = 'asc';
- var oColumns = $('#datatable_dlg_'+sListId).find(':itop-fieldsorter').fieldsorter('get_params');
- var iPageSize = parseInt($('#datatable_dlg_'+sListId+' input[name=page_size]').val(), 10);
-
- oOptions = {oColumns: oColumns, iPageSize: iPageSize, iDefaultPageSize: iPageSize };
- }
- this._setOptions(oOptions);
- // Check if we need to save the settings or not...
- var oSaveCheck = $('#datatable_dlg_'+sListId).find('input[name=save_settings]');
- var oSaveScope = $('#datatable_dlg_'+sListId).find('input[name=scope]:checked');
- if (oSaveCheck.attr('checked'))
- {
- if (oSettings.val() == 'defaults')
- {
- this._useDefaultSettings((oSaveScope.val() == 'defaults'));
- }
- else
- {
- this._saveSettings((oSaveScope.val() == 'defaults'));
- }
- }
- this._saveDlgState();
-
- },
- onDlgCancel: function()
- {
- this._restoreDlgState();
- },
- _onSpecificSettings: function()
- {
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- $('#datatable_dlg_'+sListId).find('input.specific_settings').attr('checked', 'checked');
- },
- _updateSaveScope: function()
- {
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- var oSaveCheck = $('#datatable_dlg_'+sListId).find('input[name=save_settings]');
- if (oSaveCheck.attr('checked'))
- {
- $('#datatable_dlg_'+sListId).find('input[name=scope]').each(function() {
- if ($(this).attr('stay-disabled') != 'true')
- {
- $(this).removeAttr('disabled');
- }
- });
- }
- else
- {
- $('#datatable_dlg_'+sListId).find('input[name=scope]').attr('disabled', 'disabled');
- }
- },
- // events bound via _bind are removed automatically
- // revert other modifications here
- destroy: function()
- {
- this.element
- .removeClass('itop-datatable');
-
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- $('#sfl_'+sListId).remove();
- $('#datatable_dlg_'+sListId).remove();
-
- // call the original destroy method since we overwrote it
- $.Widget.prototype.destroy.call( this );
- },
- // _setOptions is called with a hash of all options that are changing
- _setOptions: function()
- {
- // in 1.9 would use _superApply
- $.Widget.prototype._setOptions.apply( this, arguments );
- this._refresh();
- },
- // _setOption is called for each individual option that is changing
- _setOption: function( key, value )
- {
- // in 1.9 would use _super
- $.Widget.prototype._setOption.call( this, key, value );
- },
- _saveDlgState: function()
- {
- this.originalState = {};
- for(k in this.aDlgStateParams)
- {
- this.originalState[this.aDlgStateParams[k]] = this.options[this.aDlgStateParams[k]];
- }
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- this.originalState.oFields = $('#datatable_dlg_'+sListId).find(':itop-fieldsorter').fieldsorter('get_params');
- },
- _restoreDlgState: function()
- {
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- var dlgElement = $('#datatable_dlg_'+sListId);
- for(k in this.aDlgStateParams)
- {
- this._setOption(this.aDlgStateParams[k], this.originalState[this.aDlgStateParams[k]]);
- }
-
- dlgElement.find('input[name=page_size]').val(this.originalState.iDefaultPageSize);
-
- dlgElement.find(':itop-fieldsorter').fieldsorter('option', { fields: this.originalState.oFields });
- },
- IsDialogOpen: function()
- {
- var sId = new String(this.element.attr('id'));
- var sListId = sId.replace('datatable_', '');
- var oDlgOpen = $('#datatable_dlg_'+sListId+' :visible');
-
- return (oDlgOpen.length > 0);
- },
- GetMultipleSelectionParams: function()
- {
- var oRes = {};
- oRes.selectionMode = '';
- if (this.element.find(':input[name=selectionMode]').length > 0)
- {
- oRes.selectionMode = this.element.find(':input[name=selectionMode]').val();
- }
- oRes.selectObject = [];
- this.element.find(':input[name^=selectObject]').each(function() {
- oRes.selectObject.push($(this).val());
- });
- oRes.storedSelection = [];
- this.element.find(':input[name^=storedSelection]').each(function() {
- oRes.storedSelection.push($(this).val());
- });
- return oRes;
- }
- });
- });
|