Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
Línea 21... Línea 21...
21
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
21
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
22
 */
22
 */
Línea 23... Línea 23...
23
 
23
 
Línea 24... Línea -...
24
"use strict";
-
 
25
 
24
"use strict";
26
import $ from 'jquery';
25
 
27
import {dispatchEvent} from 'core/event_dispatcher';
26
import {dispatchEvent} from 'core/event_dispatcher';
28
import 'core/inplace_editable';
27
import 'core/inplace_editable';
29
import {eventTypes as inplaceEditableEvents} from 'core/local/inplace_editable/events';
28
import {eventTypes as inplaceEditableEvents} from 'core/local/inplace_editable/events';
Línea 112... Línea 111...
112
                return;
111
                return;
113
            });
112
            });
114
        }
113
        }
115
    });
114
    });
Línea 116... Línea 115...
116
 
115
 
-
 
116
    // Initialize sortable list to handle column moving.
117
    // Initialize sortable list to handle column moving (note JQuery dependency, see MDL-72293 for resolution).
117
    const columnHeadingSelector = `${reportSelectors.regions.reportTable} thead tr`;
118
    var columnSortableList = new SortableList(`${reportSelectors.regions.reportTable} thead tr`, {isHorizontal: true});
118
    const columnHeadingSortableList = new SortableList(columnHeadingSelector, {isHorizontal: true});
119
    columnSortableList.getElementName = element => Promise.resolve(element.data('columnName'));
119
    columnHeadingSortableList.getElementName = element => Promise.resolve(element.data('columnName'));
120
 
120
 
-
 
121
    document.addEventListener(SortableList.EVENTS.elementDrag, event => {
-
 
122
        const reportOrderColumn = event.target.closest(`${columnHeadingSelector} ${reportSelectors.regions.columnHeader}`);
121
    $(document).on(SortableList.EVENTS.DRAG, `${reportSelectors.regions.report} th[data-column-id]`, (event, info) => {
123
        if (reportOrderColumn) {
122
        const reportElement = event.target.closest(reportSelectors.regions.report);
124
            const reportElement = event.target.closest(reportSelectors.regions.report);
-
 
125
            const {columnPosition} = reportOrderColumn.dataset;
-
 
126
 
123
        const columnPosition = info.element.data('columnPosition');
127
            // Select target position, shift table columns to match.
124
        const targetColumnPosition = info.targetNextElement.data('columnPosition');
128
            const targetColumnPosition = event.detail.targetNextElement.data('columnPosition');
-
 
129
 
125
 
130
            const reportTableRows = reportElement.querySelectorAll(`${reportSelectors.regions.reportTable} tbody tr`);
126
        $(reportElement).find('tbody tr').each(function() {
131
            reportTableRows.forEach(reportTableRow => {
127
            const cell = $(this).children(`td.c${columnPosition - 1}`)[0];
132
                const reportTableRowCell = reportTableRow.querySelector(`td.c${columnPosition - 1}`);
128
            if (targetColumnPosition) {
133
                if (targetColumnPosition) {
129
                var beforeCell = $(this).children(`td.c${targetColumnPosition - 1}`)[0];
134
                    const reportTableRowCellTarget = reportTableRow.querySelector(`td.c${targetColumnPosition - 1}`);
130
                this.insertBefore(cell, beforeCell);
135
                    reportTableRow.insertBefore(reportTableRowCell, reportTableRowCellTarget);
131
            } else {
136
                } else {
-
 
137
                    reportTableRow.appendChild(reportTableRowCell);
132
                this.appendChild(cell);
138
                }
133
            }
139
            });
134
        });
140
        }
Línea 135... Línea 141...
135
    });
141
    });
-
 
142
 
136
 
143
    document.addEventListener(SortableList.EVENTS.elementDrop, event => {
137
    $(document).on(SortableList.EVENTS.DROP, `${reportSelectors.regions.report} th[data-column-id]`, (event, info) => {
144
        const reportOrderColumn = event.target.closest(`${columnHeadingSelector} ${reportSelectors.regions.columnHeader}`);
-
 
145
        if (reportOrderColumn && event.detail.positionChanged) {
138
        if (info.positionChanged) {
146
            const pendingPromise = new Pending('core_reportbuilder/columns:reorder');
139
            const pendingPromise = new Pending('core_reportbuilder/columns:reorder');
-
 
140
            const reportElement = event.target.closest(reportSelectors.regions.report);
-
 
141
            const columnId = info.element.data('columnId');
147
 
Línea 142... Línea 148...
142
            const columnName = info.element.data('columnName');
148
            const reportElement = reportOrderColumn.closest(reportSelectors.regions.report);
143
            const columnPosition = info.element.data('columnPosition');
149
            const {columnId, columnPosition, columnName} = reportOrderColumn.dataset;
-
 
150
 
144
 
151
            // Select target position, if moving to the end then count number of element siblings.
145
            // Select target position, if moving to the end then count number of element siblings.
152
            let targetColumnPosition = event.detail.targetNextElement.data('columnPosition')
146
            let targetColumnPosition = info.targetNextElement.data('columnPosition') || info.element.siblings().length + 2;
153
                || event.detail.element.siblings().length + 2;
Línea 147... Línea 154...
147
            if (targetColumnPosition > columnPosition) {
154
            if (targetColumnPosition > columnPosition) {
Línea 161... Línea 168...
161
        }
168
        }
162
    });
169
    });
Línea 163... Línea 170...
163
 
170
 
164
    // Initialize inplace editable listeners for column aggregation.
171
    // Initialize inplace editable listeners for column aggregation.
165
    document.addEventListener(inplaceEditableEvents.elementUpdated, event => {
-
 
166
 
172
    document.addEventListener(inplaceEditableEvents.elementUpdated, event => {
167
        const columnAggregation = event.target.closest('[data-itemtype="columnaggregation"]');
173
        const columnAggregation = event.target.closest('[data-itemtype="columnaggregation"]');
168
        if (columnAggregation) {
174
        if (columnAggregation) {
169
            const pendingPromise = new Pending('core_reportbuilder/columns:aggregate');
175
            const pendingPromise = new Pending('core_reportbuilder/columns:aggregate');
170
            const reportElement = columnAggregation.closest(reportSelectors.regions.report);
176
            const reportElement = columnAggregation.closest(reportSelectors.regions.report);