Projekt

Obecné

Profil

Stáhnout (13.3 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
    let countIndex = $(context).closest('.enum_box').find('.enum-row').length;
129

    
130
    let row = document.createElement('div');
131
    row.classList.add('input-action-box', 'input-border-bottom', 'enum-row');
132

    
133

    
134
    let input = document.createElement('input');
135
    input.type = 'text';
136
    input.classList.add('form-control-plaintext');
137
    input.value = value;
138
    input.setAttribute('readonly', "true");
139
    input.setAttribute('id', `parameters${enumIndex}.parameterValues${countIndex}.value`);
140
    input.setAttribute('name', `parameters[${enumIndex}].parameterValues[${countIndex}].value`);
141

    
142
    row.appendChild(input);
143

    
144
    let sortSpan = document.createElement('span');
145
    sortSpan.classList.add('action-padding', 'input-action-margin', 'sort-icon');
146
    sortSpan.innerHTML = "<i class=\"fas fa-sort\"></i>";
147

    
148
    row.appendChild(sortSpan);
149

    
150
    let deleteSpan = document.createElement('span');
151
    deleteSpan.classList.add('action-padding', 'input-action-margin', 'action-button');
152

    
153
    let deleteButton = document.createElement('span');
154
    deleteButton.classList.add('action-link', 'far', 'fa-trash-alt');
155
    deleteButton.setAttribute('onclick', 'removeEnum(this)');
156

    
157
    deleteSpan.appendChild(deleteButton);
158

    
159
    row.appendChild(deleteSpan);
160

    
161
    $(context).closest(".enum_box").find(".enum-wrapper").append($(row));
162

    
163
}
164

    
165
/**
166
 * Remove permission role
167
 * @param selectedField
168
 */
169
function removeRole (selectedField) {
170
    selectedField.closest('.permission-row').remove();
171
}
172

    
173
/**
174
 * Show enum box for parameter
175
 * @param select
176
 */
177
function showEnum(select) {
178
    var enumBox = $(select).closest(".panel-collapse").find(".enum_box");
179
    enumBox.removeClass("hidden");
180
}
181

    
182
/**
183
 * Hide enum box for parameter
184
 * @param select
185
 */
186
function hideEnum(select) {
187
    var enumBox = $(select).closest(".panel-collapse").find(".enum_box");
188
    enumBox.addClass("hidden");
189
}
190

    
191
/**
192
 * Remove enum value
193
 * @param select
194
 */
195
function removeEnum(select) {
196
    $(select).closest(".enum-row").remove();
197
}
198

    
199
/**
200
 * Remove parameter
201
 * @param panel
202
 */
203
function removePanel(panel) {
204
    var r = confirm("Opravdu si přejete odstranit parametr?");
205
    if (r == true) {
206
        $(panel).closest(".parameter").remove();
207
    }
208

    
209
}
210

    
211
/**
212
 * Add new parameter
213
 */
214
function addCollapse() {
215

    
216
    var index = 0;
217

    
218
    // find largest parameter index
219
    $(".parameter").each(function ()
220
    {
221
        var tmpIndex = Number($(this).find('.enum-index').val());
222

    
223
        if (tmpIndex >= index)
224
        {
225
            index = tmpIndex + 1;
226
        }
227
    });
228

    
229
    var typeSelectValues = $("#allParametersHiddenSelect").html();
230
    var functionSelectValues = $("#allFunctionsHiddenSelect").html();
231
    var operatorSelectValues = $("#allOperatorsHiddenSelect").html();
232

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

    
334
    this.reindexParametrOrder();
335
    this.initPanelBody();
336

    
337
}
338

    
339
/**
340
 * Init scripts for parameters body
341
 */
342
function initPanelBody() {
343
    $('.enum-add-button').on('click', function () {
344
        var input = $(this).closest(".row").find('.enum-add-input');
345
        addEnumRow(this, input.val());
346

    
347
        input.val("");
348
    });
349

    
350
    $('.enum-wrapper').sortable().disableSelection();
351

    
352
    $('.type-select').on('change', function () {
353
        if (this.value == 1)
354
        {
355
            showEnum(this);
356
        }
357
        else
358
        {
359
            hideEnum(this);
360
        }
361
    });
362

    
363
    $(".selectpicker").selectpicker('refresh');
364

    
365
    $('.fa-trash-alt').click(function(event){
366
        event.preventDefault();
367
    });
368
}
369

    
370
/**
371
 * Reindex parameter body order
372
 */
373
function reindexParametrOrder() {
374
    var data = $(".parametr-order");
375

    
376
    let index = 0;
377
    $(data).each(function () {
378
        $(this).attr('value', index);
379
        index++;
380
    });
381
}
(1-1/16)