Projekt

Obecné

Profil

Stáhnout (10.2 KB) Statistiky
| Větev: | Revize:
1 2111fb8f cagy
let ROW = 'row';
2
let COLUMN = 'column';
3
let VALUE = 'value';
4
5 b3c57a7c cagy
$(document).ready(function() {
6
7 d149244c cagy
    // reaction for add/delete parameters from selected fields (row, column, value)
8 b3c57a7c cagy
    $('.select-action-button').on('click', function () {
9 d149244c cagy
        // if input has headlight class (parameter is already added -> remove)
10 b3c57a7c cagy
        if ($(this).hasClass('select-action-headlight'))
11
        {
12 d149244c cagy
            // remove headlight class from type
13 b3c57a7c cagy
            $(this).removeClass('select-action-headlight');
14 d149244c cagy
15
            // remove parameter from selected inputs
16 b3c57a7c cagy
            removeParameter(getParameterTitle($(this)), getParameterType($(this)));
17
        }
18
        else
19
        {
20 d149244c cagy
            // remove headlight from other types for parameter if exists
21 b3c57a7c cagy
            $(this).closest('.select-action-buttons').find('.select-action-button').removeClass('select-action-headlight');
22
23 d149244c cagy
            // remove element from selected inputs if exists
24 b3c57a7c cagy
            removeFromAll(getParameterTitle($(this)));
25
26 d149244c cagy
            // headlight selected input
27 b3c57a7c cagy
            $(this).addClass('select-action-headlight');
28
29 d149244c cagy
            // add selected parameter to selected parameters by type
30 b3c57a7c cagy
            addParameter(getParameterIndex($(this)),
31
                getParameterTitle($(this)),
32
                getParameterType($(this)),
33
                getParameterHiddenValue($(this)));
34
35 d149244c cagy
            // reinitialize actions for new parameter
36 b3c57a7c cagy
            initParameters();
37
        }
38 2111fb8f cagy
39
        validateCombination();
40 b3c57a7c cagy
    });
41
42 d149244c cagy
    // init actions
43 b3c57a7c cagy
    initParameters();
44
45 2111fb8f cagy
    // spinner init
46 0486d642 cagy
    initSpinnerToButtons();
47
48 2111fb8f cagy
    // generation init
49
    initTableGenerationButtons();
50
51 d9b0bac7 cagy
    // sort selected parameters
52
    initSelectedParameters();
53
54 121f8add cagy
    // set up tooltips
55
    initTooltips();
56
57 b3c57a7c cagy
});
58
59 d149244c cagy
/**
60
 * Remove value from all selected fields
61
 * @param title
62
 */
63 b3c57a7c cagy
function removeFromAll(title) {
64
    $rows = $('.selected-input-container');
65
66
    $rows.each(function () {
67
        $(this).find('.parameter-name').each(function () {
68
            if ($(this).text() == title)
69
            {
70
                $(this).closest('.parameter').remove();
71
            }
72
        })
73
    });
74
}
75
76 d149244c cagy
/**
77
 * Returns parameter index
78
 * @param button
79
 * @returns {*|jQuery|string|undefined}
80
 */
81 b3c57a7c cagy
function getParameterIndex(button) {
82
    return $(button).closest('.parameter-row').find('.parameterIndex').val();
83
}
84
85 d149244c cagy
/**
86
 * Adds new parameter to selected fields
87
 * @param index
88
 * @param parameterName
89
 * @param type
90
 * @param hiddenValue
91
 */
92 b3c57a7c cagy
function addParameter(index, parameterName, type, hiddenValue) {
93
    var row = document.createElement('tr');
94
    row.classList.add(type + '-parameter', 'parameter');
95
96
    let hiddenInput = document.createElement('input');
97
    hiddenInput.type = 'hidden';
98
    hiddenInput.id = `parametersInConfiguration${index}.location.id`;
99
    hiddenInput.name = `parametersInConfiguration[${index}].location.id`;
100 36a626d9 cagy
    hiddenInput.setAttribute('value', hiddenValue);
101
102
    let hiddenInputOrder = document.createElement('input');
103
    hiddenInputOrder.type = 'hidden';
104
    hiddenInputOrder.id = `parametersInConfiguration${index}.parameterOrder`;
105
    hiddenInputOrder.name = `parametersInConfiguration[${index}].parameterOrder`;
106
    hiddenInputOrder.classList.add('parametr-order');
107 b3c57a7c cagy
108
    row.appendChild(hiddenInput);
109 36a626d9 cagy
    row.appendChild(hiddenInputOrder);
110 b3c57a7c cagy
111
    var firstTd = document.createElement('td');
112
113
    var firstTdBody = document.createElement('span');
114
    firstTdBody.classList.add('parameter-name');
115
    firstTdBody.innerHTML = parameterName;
116
117
    firstTd.appendChild(firstTdBody);
118
119
    row.appendChild(firstTd);
120
121
    var thirdTd = document.createElement('td');
122
123
    var thirdTdBody;
124
125
126 2111fb8f cagy
    if (type == VALUE)
127 b3c57a7c cagy
    {
128
        thirdTdBody = $('#function-select-' + index).clone()[0];
129 2f725e7f cagy
        thirdTdBody.selectedIndex = 0;
130 b3c57a7c cagy
131
        $(thirdTdBody).removeClass('hidden');
132
    }
133
    else
134
    {
135
        var secondTd = document.createElement('td');
136
137
        var secondTdBody = document.createElement('input');
138
        secondTdBody.type = 'text';
139
        secondTdBody.classList.add('form-control', 'select-filter-input-name');
140
        secondTdBody.name = `parametersInConfiguration[${index}].columnName`;
141
142
        secondTd.appendChild(secondTdBody);
143
144
        row.appendChild(secondTd);
145
146
        thirdTdBody = document.createElement('span');
147
        thirdTdBody.innerHTML = "<i class=\"fas fa-sort\"></i>";
148
    }
149
150
    thirdTd.appendChild(thirdTdBody);
151
152
    row.appendChild(thirdTd);
153
154
    $('#' + type + '-wrapper').append($(row));
155
156 36a626d9 cagy
    reindexOrder();
157
158 b3c57a7c cagy
}
159
160 d149244c cagy
/**
161
 * Remove specific parameter from fields by name and container
162
 * @param title
163
 * @param parameterClass
164
 */
165 b3c57a7c cagy
function removeParameter(title, parameterClass) {
166
    $rows = $('.' + parameterClass + '-parameter');
167
168
    $rows.each(function () {
169
        $(this).find('.parameter-name').each(function () {
170
            if ($(this).text() == title)
171
            {
172
                $(this).closest('.' + parameterClass + '-parameter').remove();
173
            }
174
        })
175
    });
176
}
177
178 d149244c cagy
/**
179
 * Base on class returns type
180
 * @param context
181
 * @returns {string}
182
 */
183 b3c57a7c cagy
function getParameterType(context) {
184
    if ($(context).hasClass('column-button'))
185
    {
186 2111fb8f cagy
        return COLUMN;
187 b3c57a7c cagy
    }
188
    else if ($(context).hasClass('row-button'))
189
    {
190 2111fb8f cagy
        return ROW;
191 b3c57a7c cagy
    }
192
    else if ($(context).hasClass('value-button'))
193
    {
194 2111fb8f cagy
        return VALUE;
195 b3c57a7c cagy
    }
196
}
197
198 d149244c cagy
/**
199
 * Base on type return integer value
200
 * @param context
201
 * @returns {number}
202
 */
203 b3c57a7c cagy
function getParameterHiddenValue(context) {
204
    if ($(context).hasClass('column-button'))
205
    {
206
        return 1;
207
    }
208
    else if ($(context).hasClass('row-button'))
209
    {
210
        return 2;
211
    }
212
    else if ($(context).hasClass('value-button'))
213
    {
214
        return 3;
215
    }
216
}
217
218 d149244c cagy
/**
219
 * Returns parameter name
220
 * @param context
221
 * @returns {*|jQuery}
222
 */
223 b3c57a7c cagy
function getParameterTitle(context) {
224
    return $(context).closest('.parameter-row').find('.parameter-name').text();
225
}
226
227 d149244c cagy
/**
228
 * Init base actions
229
 */
230 b3c57a7c cagy
function initParameters()
231
{
232 36a626d9 cagy
    $('.sortable').sortable({
233
       stop: function () {
234
           reindexOrder();
235
       }
236
    });
237 b3c57a7c cagy
    $("select").selectpicker('refresh');
238 36a626d9 cagy
}
239
240
/**
241
 * Update parametr order
242
 */
243
function reindexOrder() {
244
    var rowValues = $('.row-parameter');
245
    var columnValues = $('.column-parameter');
246
    var valueValues = $('.value-parameter');
247
248
    var index = 0;
249
250
    rowValues.each(function () {
251
        $(this).find('.parametr-order').attr('value', index);
252
        index++;
253
    });
254
255
    columnValues.each(function () {
256
        $(this).find('.parametr-order').attr('value', index);
257
        index++;
258
    });
259
260
    valueValues.each(function () {
261
        $(this).find('.parametr-order').attr('value', index);
262
        index++;
263
    });
264 10920ea3 Vojtěch Danišík
}
265 36a626d9 cagy
266 10920ea3 Vojtěch Danišík
function checkIfConfigurationNameIsNull() {
267
    var configurationName = document.getElementById('configurationName');
268 36a626d9 cagy
269 10920ea3 Vojtěch Danišík
    if (configurationName.value == null || configurationName.value == "") {
270
        alert("Není vyplněn název šablony !");
271
    }
272 0486d642 cagy
}
273
274
/**
275
 * Set up listener to export buttons to show spinner
276
 */
277
function initSpinnerToButtons() {
278
    hideSpinner();
279
280
    document.querySelectorAll('.show-spinner').forEach(button => {
281
        button.addEventListener('click', showSpinner);
282 fb86dc6a cagy
    });
283
284
    // check for form response to hide spinner
285
    $('#assembly-form').on('submit',function(e){
286
287
        // csfr protection
288
        var token = $("meta[name='_csrf']").attr("content");
289
290
        $.ajax({
291
            url: $('#form').attr('action'),
292
            headers: {"X-CSRF-TOKEN": token},
293
            type: 'POST',
294
            contentType: "application/json; charset=utf-8",
295
            data : $('#assembly-form').serialize(),
296
            complete: function () {
297
                hideSpinner();
298
            }
299
        });
300
    });
301 0486d642 cagy
}
302
303 2111fb8f cagy
/**
304
 * Shows spinner with overlay
305
 */
306 0486d642 cagy
function showSpinner() {
307
    let spinner = document.getElementById('spinner-overlay');
308
309
    spinner.style.display = 'block';
310
}
311
312 2111fb8f cagy
/**
313
 * Hides spinner with overlay
314
 */
315 0486d642 cagy
function hideSpinner() {
316
    let spinner = document.getElementById('spinner-overlay');
317
318
    spinner.style.display = 'none';
319 2111fb8f cagy
}
320
321
/**
322
 * Table generation button validator
323
 * If row is selected allow to generate
324
 * if column is selected, value and row must be also selected
325
 */
326
function initTableGenerationButtons() {
327
    validateCombination();
328
}
329
330
/**
331
 * Check action buttons combination
332
 */
333
function validateCombination() {
334
    let selectedActionButtons = $('.select-action-headlight');
335
336
    var rowSelected = false;
337
    var columnSelected = false;
338
    var valueSelected = false;
339
340
    // check selected buttons
341
    selectedActionButtons.each(function () {
342
        let type = getParameterType($(this));
343
344
        switch (type) {
345
            case VALUE:
346
                valueSelected = true;
347
                break;
348
            case ROW:
349
                rowSelected = true;
350
                break;
351
            case COLUMN:
352
                columnSelected = true;
353
                break;
354
        }
355
    });
356
357
    // possible combinations with allowed export
358
    if (rowSelected && columnSelected && valueSelected)
359
    {
360
        allowExport();
361
    }
362
    else if (columnSelected && !rowSelected && !valueSelected)
363
    {
364
        allowExport();
365
    }
366
    else
367
    {
368
        disableExportButtons();
369
    }
370
371
372
}
373
374
/**
375
 * Disables buttons for export
376
 */
377
function disableExportButtons() {
378
    $('.show-spinner').attr('disabled','disabled');
379
}
380
381
/**
382
 * Allow buttons for export
383
 */
384
function allowExport() {
385
    $('.show-spinner').removeAttr('disabled');
386 d9b0bac7 cagy
}
387
388
/**
389
 * Sort selected parameters by order
390
 */
391
function initSelectedParameters() {
392
393
    sortSelectedParameters('.column-parameter', '#column-wrapper');
394
    sortSelectedParameters('.row-parameter', '#row-wrapper');
395
396
}
397
398
/**
399
 * Checks and sort specific parameters
400
 * @param parameterName
401
 * @param parameterWrapper
402
 */
403
function sortSelectedParameters(parameterName, parameterWrapper) {
404
405
    var tmpArray = [];
406
407
    var parameters = $(parameterName);
408
409
    // load specific parameters to array orderIndex => parameter
410
    parameters.each(function () {
411
        var orderIndex = $(this).find('.parametr-order').val();
412
413
        tmpArray[orderIndex] = $(this);
414
415
    });
416
417
    // sort parameters by key (order index)
418
    tmpArray.sort((a, b) => a - b);
419
420
    let wrapper = $(parameterWrapper);
421
422
    // clear wrapper
423
    wrapper.empty();
424
425
    // append sorted elements
426
    wrapper.append(tmpArray);
427 121f8add cagy
}
428
429
/**
430
 * Set up tooltips
431
 */
432
function initTooltips() {
433
    $('[data-toggle="tooltip"]').tooltip();
434 b3c57a7c cagy
}