diff options
author | Benaka Moorthi <benaka.moorthi@gmail.com> | 2013-09-05 14:42:14 +0400 |
---|---|---|
committer | Benaka Moorthi <benaka.moorthi@gmail.com> | 2013-09-05 14:42:14 +0400 |
commit | 3c11c23f3e8dc1c088a07b941d719229d6e58197 (patch) | |
tree | 51b3eeecca860192395f691f0c413049fe9755bd /plugins/CoreHome | |
parent | 2a967e210e5011eda740c7e3b21e1b8ec4c3ea93 (diff) |
Refs #4041, moved & renamed actionDataTable JavaScript class to file in the Actions plugin.
Diffstat (limited to 'plugins/CoreHome')
-rw-r--r-- | plugins/CoreHome/javascripts/dataTable.js | 339 |
1 files changed, 1 insertions, 338 deletions
diff --git a/plugins/CoreHome/javascripts/dataTable.js b/plugins/CoreHome/javascripts/dataTable.js index 0926d18608..e37848b73e 100644 --- a/plugins/CoreHome/javascripts/dataTable.js +++ b/plugins/CoreHome/javascripts/dataTable.js @@ -1526,341 +1526,4 @@ dataTable.prototype = } return h2; } -}; - - -//----------------------------------------------------------------------------- -// Action Data Table -//----------------------------------------------------------------------------- - -//inheritance declaration -//actionDataTable is a child of dataTable -actionDataTable.prototype = new dataTable; -actionDataTable.prototype.constructor = actionDataTable; - -/** - * actionDataTable - * @constructor - */ -function actionDataTable() { - dataTable.call(this); - this.parentAttributeParent = ''; - this.parentId = ''; - this.disabledRowDom = {}; //to handle double click on '+' row -} - -//Prototype of the actionDataTable object -actionDataTable.prototype = -{ - //method inheritance - cleanParams: dataTable.prototype.cleanParams, - reloadAjaxDataTable: dataTable.prototype.reloadAjaxDataTable, - handleConfigurationBox: dataTable.prototype.handleConfigurationBox, - handleSearchBox: dataTable.prototype.handleSearchBox, - handleAnnotationsButton: dataTable.prototype.handleAnnotationsButton, - handleExportBox: dataTable.prototype.handleExportBox, - handleSort: dataTable.prototype.handleSort, - handleColumnDocumentation: dataTable.prototype.handleColumnDocumentation, - handleReportDocumentation: dataTable.prototype.handleReportDocumentation, - doHandleRowActions: dataTable.prototype.doHandleRowActions, - createRowActions: dataTable.prototype.createRowActions, - repositionRowActions: dataTable.prototype.repositionRowActions, - onClickSort: dataTable.prototype.onClickSort, - truncate: dataTable.prototype.truncate, - handleOffsetInformation: dataTable.prototype.handleOffsetInformation, - resetAllFilters: dataTable.prototype.resetAllFilters, - restoreAllFilters: dataTable.prototype.restoreAllFilters, - exportToFormatHide: dataTable.prototype.exportToFormatHide, - handleLimit: dataTable.prototype.handleLimit, - notifyWidgetParametersChange: dataTable.prototype.notifyWidgetParametersChange, - handleRelatedReports: dataTable.prototype.handleRelatedReports, - handleTriggeredEvents: dataTable.prototype.handleTriggeredEvents, - handleCellTooltips: dataTable.prototype.handleCellTooltips, - _findReportHeader: dataTable.prototype._findReportHeader, - - //initialisation of the actionDataTable - init: function (workingDivId, domElem) { - if (typeof domElem == "undefined" - || domElem.length == 0) // needed for actions subtables where truncating was not working otherwise - { - domElem = $('#' + workingDivId); - } - this.workingDivId = workingDivId; - this.bindEventsAndApplyStyle(domElem); - this.initialized = true; - - domElem.data('piwikDataTable', this); - }, - - //see dataTable::bindEventsAndApplyStyle - bindEventsAndApplyStyle: function (domElem, rows) { - var self = this; - - self.cleanParams(); - - if (!rows) { - rows = $('tr', domElem); - } - - // we dont display the link on the row with subDataTable when we are already - // printing all the subTables (case of recursive search when the content is - // including recursively all the subtables - if (!self.param.filter_pattern_recursive) { - self.numberOfSubtables = rows.filter('.subDataTable').click(function () { - self.onClickActionSubDataTable(this) - }).size(); - } - - self.applyCosmetics(domElem, rows); - self.handleRowActions(domElem, rows); - self.handleLimit(domElem); - self.handleAnnotationsButton(domElem); - self.handleExportBox(domElem); - self.handleSort(domElem); - self.handleOffsetInformation(domElem); - if (self.workingDivId != undefined) { - var dataTableLoadedProxy = function (response) { - self.dataTableLoaded(response, self.workingDivId); - }; - - self.handleSearchBox(domElem, dataTableLoadedProxy); - self.handleConfigurationBox(domElem, dataTableLoadedProxy); - } - - self.handleColumnDocumentation(domElem); - self.handleReportDocumentation(domElem); - self.handleRelatedReports(domElem); - self.handleTriggeredEvents(domElem); - self.handleCellTooltips(domElem); - }, - - //see dataTable::applyCosmetics - applyCosmetics: function (domElem, rows) { - var self = this; - var rowsWithSubtables = rows.filter('.subDataTable'); - - rowsWithSubtables.css('font-weight', 'bold'); - - $("th:first-child", domElem).addClass('label'); - $('td span.label', domElem).each(function () { self.truncate($(this)); }); - var imagePlusMinusWidth = 12; - var imagePlusMinusHeight = 12; - $('td:first-child', rowsWithSubtables) - .each(function () { - $(this).prepend('<img width="' + imagePlusMinusWidth + '" height="' + imagePlusMinusHeight + '" class="plusMinus" src="" />'); - if (self.param.filter_pattern_recursive) { - setImageMinus(this); - } - else { - setImagePlus(this); - } - }); - - var rootRow = rows.first().prev(); - - // we look at the style of the row before the new rows to determine the rows' - // level - var level = rootRow.length ? getLevelFromClass(rootRow.attr('class')) + 1 : 0; - - rows.each(function () { - var currentStyle = $(this).attr('class') || ''; - - if (currentStyle.indexOf('level') == -1) { - $(this).addClass('level' + level); - } - - // we add an attribute parent that contains the ID of all the parent categories - // this ID is used when collapsing a parent row, it searches for all children rows - // which 'parent' attribute's value contains the collapsed row ID - $(this).prop('parent', function () { - return self.parentAttributeParent + ' ' + self.parentId; - }); - - // Add some styles on the cells even/odd - // label (first column of a data row) or not - $("td:first-child:odd", this).addClass('label labeleven'); - $("td:first-child:even", this).addClass('label labelodd'); - $("tr:odd td", domElem).slice(1).addClass('column columnodd'); - $("tr:even td", domElem).slice(1).addClass('column columneven'); - }); - }, - - handleRowActions: function (domElem, rows) { - this.doHandleRowActions(rows); - }, - - // Called when the user click on an actionDataTable row - onClickActionSubDataTable: function (domElem) { - var self = this; - - // get the idSubTable - var idSubTable = $(domElem).attr('id'); - - var divIdToReplaceWithSubTable = 'subDataTable_' + idSubTable; - - var NextStyle = $(domElem).next().attr('class'); - var CurrentStyle = $(domElem).attr('class'); - - var currentRowLevel = getLevelFromClass(CurrentStyle); - var nextRowLevel = getLevelFromClass(NextStyle); - - // if the row has not been clicked - // which is the same as saying that the next row level is equal or less than the current row - // because when we click a row the level of the next rows is higher (level2 row gives level3 rows) - if (currentRowLevel >= nextRowLevel) { - //unbind click to avoid double click problem - $(domElem).off('click'); - self.disabledRowDom = $(domElem); - - var numberOfColumns = $(domElem).children().length; - $(domElem).after('\ - <tr id="' + divIdToReplaceWithSubTable + '" class="cellSubDataTable">\ - <td colspan="' + numberOfColumns + '">\ - <span class="loadingPiwik" style="display:inline"><img src="plugins/Zeitgeist/images/loading-blue.gif" /> Loading...</span>\ - </td>\ - </tr>\ - '); - var savedActionVariable = self.param.action; - - // reset all the filters from the Parent table - var filtersToRestore = self.resetAllFilters(); - - // Do not reset the sorting filters that must be applied to sub tables - this.param['filter_sort_column'] = filtersToRestore['filter_sort_column']; - this.param['filter_sort_order'] = filtersToRestore['filter_sort_order']; - this.param['enable_filter_excludelowpop'] = filtersToRestore['enable_filter_excludelowpop']; - - self.param.idSubtable = idSubTable; - self.param.action = self.props.subtable_controller_action; - - self.reloadAjaxDataTable(false, function (resp) { - self.actionsSubDataTableLoaded(resp, idSubTable); - self.repositionRowActions($(domElem)); - }); - self.param.action = savedActionVariable; - - self.restoreAllFilters(filtersToRestore); - - delete self.param.idSubtable; - } - // else we toggle all these rows - else { - var plusDetected = $('td img.plusMinus', domElem).attr('src').indexOf('plus') >= 0; - - $(domElem).siblings().each(function () { - var parents = $(this).prop('parent').split(' '); - if (parents) { - if (parents.indexOf(idSubTable) >= 0 - || parents.indexOf('subDataTable_' + idSubTable) >= 0) { - if (plusDetected) { - $(this).css('display', ''); - - //unroll everything and display '-' sign - //if the row is already opened - var NextStyle = $(this).next().attr('class'); - var CurrentStyle = $(this).attr('class'); - - var currentRowLevel = getLevelFromClass(CurrentStyle); - var nextRowLevel = getLevelFromClass(NextStyle); - - if (currentRowLevel < nextRowLevel) - setImageMinus(this); - } - else { - $(this).css('display', 'none'); - } - self.repositionRowActions($(domElem)); - } - } - }); - } - - // toggle the +/- image - var plusDetected = $('td img.plusMinus', domElem).attr('src').indexOf('plus') >= 0; - if (plusDetected) { - setImageMinus(domElem); - } - else { - setImagePlus(domElem); - } - }, - - //called when the full table actions is loaded - dataTableLoaded: function (response, workingDivId) { - var content = $(response); - var idToReplace = workingDivId || $(content).attr('id'); - - //reset parents id - self.parentAttributeParent = ''; - self.parentId = ''; - - var dataTableSel = $('#' + idToReplace); - - // keep the original list of related reports - var oldReportsElem = $('.datatableRelatedReports', dataTableSel); - $('.datatableRelatedReports', content).replaceWith(oldReportsElem); - - dataTableSel.replaceWith(content); - piwikHelper.lazyScrollTo(content[0], 400); - - return content; - }, - - // Called when a set of rows for a category of actions is loaded - actionsSubDataTableLoaded: function (response, idSubTable) { - var self = this; - var idToReplace = 'subDataTable_' + idSubTable; - var root = $('#' + self.workingDivId); - - var response = $(response); - self.parentAttributeParent = $('tr#' + idToReplace).prev().prop('parent'); - self.parentId = idToReplace; - - $('tr#' + idToReplace, root).after(response).remove(); - - var missingColumns = (response.prev().find('td').size() - response.find('td').size()); - for (var i = 0; i < missingColumns; i++) { - // if the subtable has fewer columns than the parent table, add some columns. - // this happens for example, when the parent table has performance metrics and the subtable doesn't. - response.append('<td>-</td>'); - } - - var re = /subDataTable_(\d+)/; - var ok = re.exec(self.parentId); - if (ok) { - self.parentId = ok[1]; - } - - // we execute the bindDataTableEvent function for the new DIV - self.bindEventsAndApplyStyle($('#' + self.workingDivId), response); - - //bind back the click event (disabled to avoid double-click problem) - self.disabledRowDom.click( - function () { - self.onClickActionSubDataTable(this) - }); - } -}; - -//helper function for actionDataTable -function getLevelFromClass(style) { - if (!style || typeof style == "undefined") return 0; - - var currentLevelIndex = style.indexOf('level'); - var currentLevel = 0; - if (currentLevelIndex >= 0) { - currentLevel = Number(style.substr(currentLevelIndex + 5, 1)); - } - return currentLevel; -} - -//helper function for actionDataTable -function setImageMinus(domElem) { - $('img.plusMinus', domElem).attr('src', 'plugins/Zeitgeist/images/minus.png'); -} - -//helper function for actionDataTable -function setImagePlus(domElem) { - $('img.plusMinus', domElem).attr('src', 'plugins/Zeitgeist/images/plus.png'); -} - +};
\ No newline at end of file |