Projekt

Obecné

Profil

Stáhnout (14.1 KB) Statistiky
| Větev: | Revize:
1
/**
2
 * Default action
3
 */
4
$(document).ready(function() {
5

    
6
    // init sorting
7
    $(".panel-wrapper").sortable({
8
        stop: function(event, ui) {
9
            // after switch place reindex parameters
10
            reindexParametrOrder();
11
        }
12
    }).disableSelection();
13

    
14
    // denny action with buttons with thrash icon
15
    $('.fa-trash-alt').click(function(event){
16
        event.preventDefault();
17
    });
18

    
19
    // add new collapse after click on button add-param-button
20
    $('#add-param-button').on('click', function () {
21
        addCollapse();
22
    });
23

    
24
    $('#permission-button').on('click', function () {
25
        addPermission();
26
    });
27

    
28
    // index parameters order
29
    reindexParametrOrder();
30

    
31
    // init actions for panel body
32
    initPanelBody();
33

    
34
});
35

    
36
/**
37
 * Get value from permission input and create new input
38
 */
39
function addPermission()
40
{
41
    var selectedRoleId = $('select[name=permission-select] option').filter(':selected').val();
42
    var selectedRoleValue = $('select[name=permission-select] option').filter(':selected').text();
43

    
44
    var addedRoles = $('.permission-role');
45

    
46
    var roles = [];
47

    
48
    // get assigned roles
49
    addedRoles.each(function () {
50
        roles.push($(this).val())
51
    });
52

    
53
    if (roles.includes(selectedRoleId))
54
    {
55
        return;
56
    }
57

    
58
    addPermissionRow(selectedRoleId, selectedRoleValue);
59
}
60

    
61

    
62
/**
63
 * Add new permission input
64
 * @param id
65
 * @param value
66
 */
67
function addPermissionRow(id, value){
68

    
69
    let row = document.createElement('div');
70
    row.classList.add('input-action-box', 'input-border-bottom', 'permission-row');
71

    
72
    let input = document.createElement('input');
73
    input.type = 'text';
74
    input.classList.add('form-control-plaintext', 'permission-title');
75
    input.id = id;
76
    input.value = value;
77
    input.setAttribute('readonly', "true");
78

    
79
    let hiddenInput = document.createElement('input');
80
    hiddenInput.type = 'hidden';
81
    hiddenInput.classList.add('permission-role');
82
    hiddenInput.value = id;
83

    
84

    
85
    row.appendChild(input);
86
    row.appendChild(hiddenInput);
87

    
88
    let actionButton = document.createElement('span');
89
    actionButton.classList.add('action-padding', 'action-button', 'input-action-margin');
90

    
91
    let deleteButton = document.createElement('span');
92
    deleteButton.classList.add('action-link', 'far', 'fa-trash-alt');
93
    deleteButton.setAttribute('onclick', 'removeRole(this);');
94
    deleteButton.setAttribute('role', 'button');
95

    
96
    actionButton.appendChild(deleteButton);
97
    row.appendChild(actionButton);
98

    
99
    document.getElementById('permission-wrapper').appendChild(row);
100

    
101
    var permissionRoles = $('.permission-row');
102
    var permissionIndex = 0;
103

    
104
    permissionRoles.each(function () {
105
        var hiddenInput = $(this).find('.permission-role');
106

    
107
        hiddenInput.attr("id",`roles${permissionIndex}.id`);
108

    
109
        hiddenInput.attr("name",`roles[${permissionIndex}].id`);
110

    
111
        var input = $(this).find('.permission-title');
112
        input.attr("name", `roles[${permissionIndex}].name`);
113
        input.attr("id", `roles${permissionIndex}.name`);
114
        permissionIndex++;
115
    });
116

    
117
}
118

    
119

    
120
/**
121
 * Add new enum value for type "Výčet"
122
 * @param context
123
 * @param value
124
 */
125
function addEnumRow(context, value)
126
{
127
    let enumIndex = $(context).closest('.enum_box').find('.enum-index').val();
128

    
129
    var countIndex = 0;
130

    
131
    // find largest parameter index
132
    $(".enum-row").each(function ()
133
    {
134
        var tmpIndex = Number($(this).find('.enum-parameter-index').val());
135

    
136
        if (tmpIndex >= countIndex)
137
        {
138
            countIndex = tmpIndex + 1;
139
        }
140
    });
141

    
142

    
143
    let row = document.createElement('div');
144
    row.classList.add('input-action-box', 'input-border-bottom', 'enum-row');
145

    
146

    
147
    let input = document.createElement('input');
148
    input.type = 'text';
149
    input.classList.add('form-control-plaintext');
150
    input.value = value;
151
    input.setAttribute('readonly', "true");
152
    input.setAttribute('id', `parameters${enumIndex}.parameterValues${countIndex}.value`);
153
    input.setAttribute('name', `parameters[${enumIndex}].parameterValues[${countIndex}].value`);
154

    
155

    
156
    let inputIndex = document.createElement('input');
157
    inputIndex.type = 'hidden';
158
    inputIndex.classList.add('enum-parameter-index');
159
    inputIndex.setAttribute('value', countIndex);
160

    
161
    let isDeleted = document.createElement('input');
162
    isDeleted.type = 'hidden';
163
    isDeleted.classList.add('is-deleted');
164
    isDeleted.setAttribute('value', '0');
165
    isDeleted.setAttribute('name', `parameters[${enumIndex}].parameterValues[${countIndex}].isDeleted`);
166

    
167
    row.appendChild(input);
168
    row.appendChild(inputIndex);
169
    row.appendChild(isDeleted);
170

    
171
    let sortSpan = document.createElement('span');
172
    sortSpan.classList.add('action-padding', 'input-action-margin', 'sort-icon');
173
    sortSpan.innerHTML = "<i class=\"fas fa-sort\"></i>";
174

    
175
    row.appendChild(sortSpan);
176

    
177
    let deleteSpan = document.createElement('span');
178
    deleteSpan.classList.add('action-padding', 'input-action-margin', 'action-button');
179

    
180
    let deleteButton = document.createElement('span');
181
    deleteButton.classList.add('action-link', 'far', 'fa-trash-alt');
182
    deleteButton.setAttribute('onclick', 'removeEnum(this)');
183

    
184
    deleteSpan.appendChild(deleteButton);
185

    
186
    row.appendChild(deleteSpan);
187

    
188
    $(context).closest(".enum_box").find(".enum-wrapper").append($(row));
189

    
190
}
191

    
192
/**
193
 * Remove permission role
194
 * @param selectedField
195
 */
196
function removeRole (selectedField) {
197
    selectedField.closest('.permission-row').remove();
198
}
199

    
200
/**
201
 * Show enum box for parameter
202
 * @param select
203
 */
204
function showEnum(select) {
205
    var enumBox = $(select).closest(".panel-collapse").find(".enum_box");
206
    enumBox.removeClass("hidden");
207
}
208

    
209
/**
210
 * Hide enum box for parameter
211
 * @param select
212
 */
213
function hideEnum(select) {
214
    var enumBox = $(select).closest(".panel-collapse").find(".enum_box");
215
    enumBox.addClass("hidden");
216
}
217

    
218
/**
219
 * Remove enum value
220
 * @param select
221
 */
222
function removeEnum(select) {
223
    var enumRow = $(select).closest(".enum-row");
224
    enumRow.addClass("hidden");
225
    enumRow.find('.is-deleted').val('1');
226
}
227

    
228
/**
229
 * Remove parameter
230
 * @param panel
231
 */
232
function removePanel(panel) {
233
    var r = confirm("Opravdu si přejete odstranit parametr?");
234
    if (r == true) {
235
        $(panel).closest(".parameter").remove();
236
    }
237

    
238
}
239

    
240
/**
241
 * Add new parameter
242
 */
243
function addCollapse() {
244

    
245
    var index = 0;
246

    
247
    // find largest parameter index
248
    $(".parameter").each(function ()
249
    {
250
        var tmpIndex = Number($(this).find('.enum-index').val());
251

    
252
        if (tmpIndex >= index)
253
        {
254
            index = tmpIndex + 1;
255
        }
256
    });
257

    
258
    var typeSelectValues = $("#allParametersHiddenSelect").html();
259
    var functionSelectValues = $("#allFunctionsHiddenSelect").html();
260
    var operatorSelectValues = $("#allOperatorsHiddenSelect").html();
261

    
262
    // parameter body
263
    $(".panel-wrapper").append('\n' +
264
        '      <div class="panel-group parameter">\n' +
265
        `      <input type="hidden" class="parametr-order" value="0" id="parameters${index}.parameterOrder" name="parameters[${index}].parameterOrder">\n` +
266
        '        <div class="panel panel-default">\n' +
267
        '          <div class="panel-heading">\n' +
268
        '            <span class="panel-title">\n' +
269
        `              <a data-toggle="collapse" data-parent="#accordion" href=#collapse${index}>\n` +
270
        `                <i class="fas fa-angle-right"></i> Nový parametr\n` +
271
        '              </a>\n' +
272
        '              <span class="align-right collapse-actions">\n' +
273
        '                <span class="action-padding input-action-margin-collapse sort-icon">\n' +
274
        '                  <i class="fas fa-sort"></i>\n' +
275
        '                </span>\n' +
276
        '                <span class="action-padding action-button input-action-margin-collapse">\n' +
277
        '                  <span href=# class="action-link far fa-trash-alt" onclick="removePanel(this);"></span>\n' +
278
        '                </span>\n' +
279
        '              </span>\n' +
280
        '            </span>\n' +
281
        '          </div>\n' +
282
        `          <div id="collapse${index}" class="panel-collapse collapse">\n` +
283
        '            <div class="panel-body">\n' +
284
        '              <div class="form-group row">\n' +
285
        '                <label for="name" class="col-sm-2 col-form-label">Název:</label>\n' +
286
        '                <div class="col-sm-10">\n' +
287
        `                  <input type="text" class="form-control" name="parameters[${index}].name" id="parameterName${index}" value="Nový parametr" required>\n` +
288
        '                </div>\n' +
289
        '              </div>\n' +
290
        '              <div class="form-group row">\n' +
291
        '                <label for="name" class="col-sm-2 col-form-label">V&nbsp;SQL:</label>\n' +
292
        '                <div class="col-sm-10">\n' +
293
        `                  <input type="text" class="form-control" name="parameters[${index}].nameOfSelect" id="parameterSQLName${index}" required>\n` +
294
        '                </div>\n' +
295
        '              </div>\n' +
296
        '              <div class="form-group row">\n' +
297
        '                <label for="exampleFormControlSelect1" class="col-sm-2">Typ:</label>\n' +
298
        '                <div class="col-sm-10">\n' +
299
        `                  <select name="parameters[${index}].parameterType" class="form-control type-select">\n` +
300
        typeSelectValues+
301
        '                  </select>\n' +
302
        '                </div>\n' +
303
        '              </div>\n' +
304
        '\n' +
305
        '              <div class="enum_box">\n' +
306
        '                Hodnoty:\n' +
307
        '                <div class="enum_values col-md-8">\n' +
308
        '                  <div class="enum-wrapper">\n' +
309
        `                     <input type="hidden" class="enum-index" value="${index}">\n` +
310
        '                  </div>\n' +
311
        '\n' +
312
        '                  <div class="form-group row form-add-item">\n' +
313
        '                    <div class="col-md-9">\n' +
314
        '                      <input type="text" class="form-control enum-add-input">\n' +
315
        '                    </div>\n' +
316
        '                    <span class="btn btn-primary mb-2 enum-add-button">Přidat</span>\n' +
317
        '                  </div>\n' +
318
        '                </div>\n' +
319
        '              </div>\n' +
320
        '\n' +
321
        `              <div class="form-group row">\n` +
322
        '                <label for="exampleFormControlSelect1" class="col-sm-2">Umístění:</label>\n' +
323
        '                <div class="col-sm-10">\n' +
324
        '                  <div class="form-check form-check-inline">\n' +
325
        `                    <input type="hidden" name="_parameters[${index}].locations" value="on">\n` +
326
        `                    <input class="form-check-input" name="parameters[${index}].locations" id="parameters${index}.locations1" type="checkbox" value="1">\n` +
327
        `                    <label class="form-check-label" for="parameters[${index}].locations" >Sloupec</label>\n` +
328
        '                  </div>\n' +
329
        '                  <div class="form-check form-check-inline">\n' +
330
        `                    <input type="hidden" name="_parameters[${index}].locations" value="on">\n` +
331
        `                    <input class="form-check-input" name="parameters[${index}].locations" id="parameters${index}.locations2" type="checkbox" value="2">\n` +
332
        '                    <label class="form-check-label" for="parameters[${index}].locations">Řádek</label>\n' +
333
        '                  </div>\n' +
334
        '                  <div class="form-check form-check-inline">\n' +
335
        `                    <input type="hidden" name="_parameters[${index}].locations" value="on">\n` +
336
        `                    <input class="form-check-input" name="parameters[${index}].locations" id="parameters${index}.locations3" type="checkbox" value="3">\n` +
337
        '                    <label class="form-check-label" for="parameters[${index}].locations" >Hodnota</label>\n' +
338
        '                  </div>\n' +
339
        '                </div>\n' +
340
        '              </div>\n' +
341
        '              <div class="form-group row">\n' +
342
        '                  <label for="exampleFormControlSelect1" class="col-sm-2">Funkce:</label>\n' +
343
        '                  <div class="col-sm-10">\n' +
344
        `                    <select name="parameters[${index}].functions" id="parameters${index}.functions" class="mbSelect selectpicker" multiple data-live-search="true">\n` +
345
        functionSelectValues +
346
        '                    </select>\n' +
347
        '                  </div>\n' +
348
        '              </div>\n' +
349
        '              <div class="form-group row">\n' +
350
        '                  <label for="exampleFormControlSelect1" class="col-sm-2">Operátory:</label>\n' +
351
        '                  <div class="col-sm-10">\n' +
352
        `                    <select name="parameters[${index}].operators" id="parameters${index}.operators" class="mbSelect selectpicker" multiple data-live-search="true">\n` +
353
        operatorSelectValues +
354
        '                    </select>\n' +
355
        '                  </div>\n' +
356
        '              </div>\n' +
357
        '            </div>\n' +
358
        '          </div>\n' +
359
        '        </div>\n' +
360
        '      </div>\n' +
361
        '    ');
362

    
363
    this.reindexParametrOrder();
364
    this.initPanelBody();
365

    
366
}
367

    
368
/**
369
 * Init scripts for parameters body
370
 */
371
function initPanelBody() {
372
    $('.enum-add-button').on('click', function () {
373
        var input = $(this).closest(".row").find('.enum-add-input');
374
        addEnumRow(this, input.val());
375

    
376
        input.val("");
377
    });
378

    
379
    $('.enum-wrapper').sortable().disableSelection();
380

    
381
    $('.type-select').on('change', function () {
382
        if (this.value == 1)
383
        {
384
            showEnum(this);
385
        }
386
        else
387
        {
388
            hideEnum(this);
389
        }
390
    });
391

    
392
    $(".selectpicker").selectpicker('refresh');
393

    
394
    $('.fa-trash-alt').click(function(event){
395
        event.preventDefault();
396
    });
397
}
398

    
399
/**
400
 * Reindex parameter body order
401
 */
402
function reindexParametrOrder() {
403
    var data = $(".parametr-order");
404

    
405
    let index = 0;
406
    $(data).each(function () {
407
        $(this).attr('value', index);
408
        index++;
409
    });
410
}
(1-1/16)