Projekt

Obecné

Profil

Stáhnout (13.7 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
    let inputIndex = document.createElement('input');
156
    inputIndex.type = 'hidden';
157
    inputIndex.classList.add('enum-parameter-index');
158
    inputIndex.setAttribute('value', countIndex);
159

    
160
    row.appendChild(input);
161
    row.appendChild(inputIndex);
162

    
163
    let sortSpan = document.createElement('span');
164
    sortSpan.classList.add('action-padding', 'input-action-margin', 'sort-icon');
165
    sortSpan.innerHTML = "<i class=\"fas fa-sort\"></i>";
166

    
167
    row.appendChild(sortSpan);
168

    
169
    let deleteSpan = document.createElement('span');
170
    deleteSpan.classList.add('action-padding', 'input-action-margin', 'action-button');
171

    
172
    let deleteButton = document.createElement('span');
173
    deleteButton.classList.add('action-link', 'far', 'fa-trash-alt');
174
    deleteButton.setAttribute('onclick', 'removeEnum(this)');
175

    
176
    deleteSpan.appendChild(deleteButton);
177

    
178
    row.appendChild(deleteSpan);
179

    
180
    $(context).closest(".enum_box").find(".enum-wrapper").append($(row));
181

    
182
}
183

    
184
/**
185
 * Remove permission role
186
 * @param selectedField
187
 */
188
function removeRole (selectedField) {
189
    selectedField.closest('.permission-row').remove();
190
}
191

    
192
/**
193
 * Show enum box for parameter
194
 * @param select
195
 */
196
function showEnum(select) {
197
    var enumBox = $(select).closest(".panel-collapse").find(".enum_box");
198
    enumBox.removeClass("hidden");
199
}
200

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

    
210
/**
211
 * Remove enum value
212
 * @param select
213
 */
214
function removeEnum(select) {
215
    $(select).closest(".enum-row").remove();
216
}
217

    
218
/**
219
 * Remove parameter
220
 * @param panel
221
 */
222
function removePanel(panel) {
223
    var r = confirm("Opravdu si přejete odstranit parametr?");
224
    if (r == true) {
225
        $(panel).closest(".parameter").remove();
226
    }
227

    
228
}
229

    
230
/**
231
 * Add new parameter
232
 */
233
function addCollapse() {
234

    
235
    var index = 0;
236

    
237
    // find largest parameter index
238
    $(".parameter").each(function ()
239
    {
240
        var tmpIndex = Number($(this).find('.enum-index').val());
241

    
242
        if (tmpIndex >= index)
243
        {
244
            index = tmpIndex + 1;
245
        }
246
    });
247

    
248
    var typeSelectValues = $("#allParametersHiddenSelect").html();
249
    var functionSelectValues = $("#allFunctionsHiddenSelect").html();
250
    var operatorSelectValues = $("#allOperatorsHiddenSelect").html();
251

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

    
353
    this.reindexParametrOrder();
354
    this.initPanelBody();
355

    
356
}
357

    
358
/**
359
 * Init scripts for parameters body
360
 */
361
function initPanelBody() {
362
    $('.enum-add-button').on('click', function () {
363
        var input = $(this).closest(".row").find('.enum-add-input');
364
        addEnumRow(this, input.val());
365

    
366
        input.val("");
367
    });
368

    
369
    $('.enum-wrapper').sortable().disableSelection();
370

    
371
    $('.type-select').on('change', function () {
372
        if (this.value == 1)
373
        {
374
            showEnum(this);
375
        }
376
        else
377
        {
378
            hideEnum(this);
379
        }
380
    });
381

    
382
    $(".selectpicker").selectpicker('refresh');
383

    
384
    $('.fa-trash-alt').click(function(event){
385
        event.preventDefault();
386
    });
387
}
388

    
389
/**
390
 * Reindex parameter body order
391
 */
392
function reindexParametrOrder() {
393
    var data = $(".parametr-order");
394

    
395
    let index = 0;
396
    $(data).each(function () {
397
        $(this).attr('value', index);
398
        index++;
399
    });
400
}
(1-1/16)