drg_cms 0.6.0.6 → 0.6.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +25 -10
- data/app/assets/javascripts/drg_cms/drg_cms.js +281 -106
- data/app/assets/stylesheets/drg_cms/drg_cms.css +417 -152
- data/app/assets/stylesheets/drg_cms/select-multiple.css +9 -12
- data/app/assets/stylesheets/drg_cms_cms.css +1 -1
- data/app/controllers/cmsedit_controller.rb +247 -175
- data/app/controllers/dc_application_controller.rb +251 -173
- data/app/controllers/dc_common_controller.rb +81 -48
- data/app/controls/dc_help_control.rb +126 -0
- data/app/controls/dc_report.rb +223 -0
- data/app/forms/all_options.yml +38 -10
- data/app/forms/cms_menu.yml +7 -1
- data/app/forms/dc_big_table.yml +1 -0
- data/app/forms/dc_big_table_value.yml +1 -0
- data/app/forms/dc_category.yml +2 -1
- data/app/forms/dc_design.yml +1 -0
- data/app/forms/dc_help_1.yml +109 -0
- data/app/forms/dc_journal.yml +3 -1
- data/app/forms/dc_link.yml +1 -1
- data/app/forms/dc_menu.yml +2 -0
- data/app/forms/dc_menu_item.yml +1 -0
- data/app/forms/dc_page.yml +6 -0
- data/app/forms/dc_part.yml +1 -0
- data/app/forms/dc_piece.yml +1 -0
- data/app/forms/dc_poll.yml +15 -5
- data/app/forms/dc_poll_item.yml +2 -1
- data/app/forms/dc_poll_result.yml +9 -0
- data/app/forms/dc_simple_menu.yml +2 -0
- data/app/forms/dc_site.yml +4 -12
- data/app/forms/dc_user.yml +27 -11
- data/app/forms/dc_user_role.yml +3 -0
- data/app/helpers/cms_common_helper.rb +375 -0
- data/app/helpers/{cmsedit_edit_helper.rb → cms_edit_helper.rb} +109 -65
- data/app/helpers/{cmsedit_helper.rb → cms_helper.rb} +93 -48
- data/app/helpers/{cmsedit_index_helper.rb → cms_index_helper.rb} +240 -206
- data/app/helpers/dc_application_helper.rb +108 -327
- data/app/models/concerns/dc_page_concern.rb +14 -4
- data/app/models/concerns/dc_piece_concern.rb +1 -1
- data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
- data/app/models/concerns/dc_site_concern.rb +67 -44
- data/app/models/concerns/dc_user_concern.rb +58 -19
- data/app/models/dc_design.rb +29 -19
- data/app/models/dc_filter.rb +26 -18
- data/app/models/dc_key_value_store.rb +1 -0
- data/app/models/dc_permission.rb +49 -9
- data/app/models/dc_policy.rb +25 -14
- data/app/models/dc_policy_role.rb +22 -11
- data/app/models/dc_poll.rb +1 -0
- data/app/models/dc_poll_result.rb +4 -2
- data/app/models/dc_temp.rb +6 -3
- data/app/models/dc_user_role.rb +2 -2
- data/app/models/drgcms_form_fields/date_picker.rb +6 -3
- data/app/models/drgcms_form_fields/datetime_picker.rb +4 -3
- data/app/models/drgcms_form_fields/drgcms_field.rb +20 -5
- data/app/models/drgcms_form_fields/embedded.rb +23 -16
- data/app/models/drgcms_form_fields/file_field.rb +2 -2
- data/app/models/drgcms_form_fields/file_select.rb +2 -2
- data/app/models/drgcms_form_fields/hash_field.rb +11 -7
- data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
- data/app/models/drgcms_form_fields/link_to.rb +2 -2
- data/app/models/drgcms_form_fields/method.rb +66 -0
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +18 -12
- data/app/models/drgcms_form_fields/number_field.rb +4 -3
- data/app/models/drgcms_form_fields/radio.rb +10 -5
- data/app/models/drgcms_form_fields/readonly.rb +13 -17
- data/app/models/drgcms_form_fields/select.rb +58 -41
- data/app/models/drgcms_form_fields/text_autocomplete.rb +41 -33
- data/app/models/drgcms_form_fields.rb +12 -1
- data/app/renderers/dc_big_menu_renderer.rb +1 -0
- data/app/renderers/dc_gallery_renderer.rb +1 -0
- data/app/renderers/dc_menu_renderer.rb +1 -0
- data/app/renderers/dc_page_renderer.rb +8 -6
- data/app/renderers/dc_part_renderer.rb +1 -0
- data/app/renderers/dc_piece_renderer.rb +1 -1
- data/app/renderers/dc_poll_renderer.rb +56 -55
- data/app/renderers/dc_renderer.rb +1 -0
- data/app/renderers/dc_simple_menu_renderer.rb +1 -0
- data/app/views/cmsedit/_edit_stuff.html.erb +5 -2
- data/app/views/cmsedit/edit.html.erb +4 -1
- data/app/views/cmsedit/index.html.erb +3 -2
- data/app/views/cmsedit/new.html.erb +5 -2
- data/app/views/dc_common/_help.html.erb +17 -0
- data/app/views/layouts/models.html.erb +2 -1
- data/config/locales/drgcms_en.yml +17 -2
- data/config/locales/drgcms_sl.yml +22 -4
- data/config/locales/models_en.yml +16 -7
- data/config/locales/models_sl.yml +21 -12
- data/drg_cms.gemspec +16 -16
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +98 -0
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +5 -3
- data/lib/tasks/database.rake +6 -56
- metadata +39 -35
- data/app/helpers/application_helper.rb +0 -2
- data/app/models/__dc_dummy.rb +0 -102
@@ -46,14 +46,20 @@ dumpAttributes = function(obj) {
|
|
46
46
|
* Function checks if there are delay loaded embedded elements on
|
47
47
|
* selected tab and triggers iframe reload.
|
48
48
|
*******************************************************************/
|
49
|
-
|
50
|
-
|
49
|
+
update_embedded_on_tab_select = function(div_name) {
|
50
|
+
let iframes = $(div_name).find("iframe");
|
51
51
|
$.each(iframes, function(index, iframe) {
|
52
|
-
|
52
|
+
// delayed load
|
53
|
+
let src_delay = iframe.getAttribute('data-src-delay');
|
53
54
|
if (src_delay != null && src_delay != '') {
|
54
55
|
iframe.setAttribute('data-src-delay', '');
|
55
56
|
iframe.setAttribute('src', src_delay);
|
56
57
|
}
|
58
|
+
// always load on tab select
|
59
|
+
let src_always = iframe.getAttribute('data-src-always');
|
60
|
+
if (src_always != null) {
|
61
|
+
iframe.setAttribute('src', src_always);
|
62
|
+
}
|
57
63
|
});
|
58
64
|
};
|
59
65
|
|
@@ -169,67 +175,79 @@ $(function() {
|
|
169
175
|
* window_: Will force loading of url supplied in value into new window
|
170
176
|
* reload_: Will reload current window
|
171
177
|
*
|
172
|
-
* Operations can be chained and are executed
|
173
|
-
* render json: {'window_' => "/
|
174
|
-
* will open /
|
178
|
+
* Operations can be chained and are executed sequential.
|
179
|
+
* render json: {'window_' => "/document.pdf", 'reload_' => 1}.to_json
|
180
|
+
* will open /document.pdf in new window and reload current window.
|
175
181
|
*
|
176
182
|
* render json: {'record_name' => "Damjan", 'record_surname' => 'Rems'}.to_json
|
177
183
|
* will replace values of two fields on the form.
|
178
184
|
*******************************************************************/
|
179
185
|
|
180
186
|
process_json_result = function(json) {
|
181
|
-
|
187
|
+
let i, w, operation, selector, msg_div, field;
|
182
188
|
$.each(json, function(key, value) {
|
183
189
|
i = key.search('_');
|
184
190
|
if (i > 1) {
|
185
|
-
operation = key.substring(0,i);
|
186
|
-
selector = key.substring(i+1,100);
|
191
|
+
operation = key.substring(0, i);
|
192
|
+
selector = key.substring(i+1, 100);
|
187
193
|
} else {
|
188
194
|
operation = key;
|
189
195
|
selector = '';
|
190
196
|
}
|
191
|
-
|
197
|
+
|
192
198
|
switch (operation) {
|
193
199
|
|
194
200
|
/**** update fields on form ****/
|
195
201
|
case 'record':
|
196
|
-
|
202
|
+
let name = key.replace('record_','record[') + ']';
|
203
|
+
field = $('[name="' + name + '"]');
|
197
204
|
// checkbox field
|
198
|
-
if (field.is(':checkbox')) {
|
205
|
+
if (field.is(':checkbox')) {
|
199
206
|
field.prop('checked', value);
|
200
207
|
// select field
|
201
208
|
} else if (field.is('select')) {
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
209
|
+
// options for select field
|
210
|
+
if (value && value.isArray) {
|
211
|
+
field.empty();
|
212
|
+
$.each(value, function(index, v) {
|
213
|
+
field.append( new Option(v[0], v[1]) );
|
214
|
+
});
|
215
|
+
// select field value
|
216
|
+
} else {
|
217
|
+
field.val(value).change();
|
218
|
+
}
|
219
|
+
// radio field
|
220
|
+
} else if (field.attr('type') == 'radio') {
|
221
|
+
field.val([value])
|
222
|
+
|
212
223
|
// other input fields
|
213
224
|
} else {
|
214
225
|
field.val(value);
|
215
226
|
}
|
216
227
|
break;
|
217
228
|
|
229
|
+
/**** transfer focus to field ****/
|
230
|
+
case 'focus':
|
231
|
+
$('#' + value).focus();
|
232
|
+
break;
|
233
|
+
|
218
234
|
/**** display message ****/
|
219
235
|
case 'msg':
|
220
|
-
msg_div = 'dc-form-' + selector;
|
221
|
-
if ( $('.'+msg_div).length == 0 ) {
|
236
|
+
let msg_div = 'dc-form-' + selector;
|
237
|
+
if ( $('.' + msg_div).length == 0 ) {
|
222
238
|
value = '<div class="' + msg_div + '">' + value + '</div>';
|
223
239
|
$('.dc-title').after(value);
|
224
240
|
} else {
|
225
|
-
$('.'+msg_div).html(value);
|
241
|
+
$('.' + msg_div).html(value);
|
242
|
+
$('.' + msg_div).show();
|
226
243
|
}
|
227
244
|
break;
|
228
245
|
|
229
246
|
/**** display popup message ****/
|
230
|
-
|
247
|
+
case 'popup':
|
231
248
|
$('#popup').html(value);
|
232
|
-
$('#popup').bPopup({ speed: 650, transition: '
|
249
|
+
$('#popup').bPopup({ speed: 650, transition: 'slideUp'});
|
250
|
+
break;
|
233
251
|
|
234
252
|
/**** update div ****/
|
235
253
|
case '#div+':
|
@@ -260,7 +278,8 @@ process_json_result = function(json) {
|
|
260
278
|
break;
|
261
279
|
case 'window':
|
262
280
|
if (value == 'close') { window.close();
|
263
|
-
} else if (value == 'reload') {
|
281
|
+
} else if (value == 'reload') {
|
282
|
+
window.location.href = window.location.href;
|
264
283
|
} else {
|
265
284
|
w = window.open(value, selector);
|
266
285
|
w.focus();
|
@@ -271,13 +290,24 @@ process_json_result = function(json) {
|
|
271
290
|
w.focus();
|
272
291
|
break;
|
273
292
|
case 'eval':
|
293
|
+
console.log('from process_json_result: Eval option will be deprecated. Use script instead.')
|
274
294
|
eval (value);
|
275
295
|
break;
|
296
|
+
case 'script':
|
297
|
+
eval (value);
|
298
|
+
break;
|
276
299
|
case 'reload':
|
300
|
+
value = value.toString();
|
277
301
|
if (value == 'parent') {
|
278
|
-
parent.location.reload();
|
302
|
+
//parent.location.reload();
|
303
|
+
parent.location.href = parent.location.href;
|
304
|
+
|
305
|
+
/*** this would be current window (reload: true) ****/
|
306
|
+
} else if (value.length < 5) {
|
307
|
+
window.location.href = window.location.href;
|
308
|
+
/*** reload iframe ****/
|
279
309
|
} else {
|
280
|
-
|
310
|
+
$( '#' + value ).attr('src', $( '#' + value ).attr('src'));
|
281
311
|
}
|
282
312
|
break;
|
283
313
|
default:
|
@@ -293,6 +323,15 @@ function dc_reload_window() {
|
|
293
323
|
location.reload();
|
294
324
|
}
|
295
325
|
|
326
|
+
/*******************************************************************
|
327
|
+
* Will open popup window
|
328
|
+
*******************************************************************/
|
329
|
+
function popup_window(url, window_name, win, w, h) {
|
330
|
+
let y = win.top.outerHeight / 2 + win.top.screenY - ( h / 2);
|
331
|
+
let x = win.top.outerWidth / 2 + win.top.screenX - ( w / 2);
|
332
|
+
return win.open(url, window_name, `toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=${w}, height=${h}, top=${y}, left=${x}`);
|
333
|
+
}
|
334
|
+
|
296
335
|
/*******************************************************************
|
297
336
|
* Will select first editable input field on form. Works only when tab
|
298
337
|
* is selected. Still have to find out, what to do on initial display.
|
@@ -322,14 +361,35 @@ $.fn.dc_scroll_view = function () {
|
|
322
361
|
* Updates single field on parent iframe form of embedded form.
|
323
362
|
*******************************************************************/
|
324
363
|
process_parent_form_updates = function(element) {
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
364
|
+
let field = element.getAttribute("data-field");
|
365
|
+
let value = element.getAttribute("data-value");
|
366
|
+
let selector = '#' + field;
|
367
|
+
|
368
|
+
// update record
|
369
|
+
if (field.match(/record/)) {
|
370
|
+
if (window.parent.$(selector).length > 0) {
|
371
|
+
if (field.substring(0, 3) === 'td_') { // readonly field
|
372
|
+
window.parent.$(selector + ' > div').html(value);
|
373
|
+
} else { // input field
|
374
|
+
window.parent.$(selector).val(value);
|
375
|
+
}
|
332
376
|
}
|
377
|
+
// any div
|
378
|
+
} else {
|
379
|
+
if (window.parent.$(selector).length > 0) {
|
380
|
+
window.parent.$(selector).html(value);
|
381
|
+
}
|
382
|
+
}
|
383
|
+
};
|
384
|
+
|
385
|
+
/*****************************************************************
|
386
|
+
* Toggle show and hide div
|
387
|
+
******************************************************************/
|
388
|
+
dc_toggle_div = function(div) {
|
389
|
+
if ($(div).is(":visible")) {
|
390
|
+
$(div).slideUp();
|
391
|
+
} else {
|
392
|
+
$(div).slideDown();
|
333
393
|
}
|
334
394
|
};
|
335
395
|
|
@@ -409,18 +469,54 @@ $(document).ready( function() {
|
|
409
469
|
* Sort action clicked on cmsedit
|
410
470
|
*******************************************************************/
|
411
471
|
$('.drgcms_sort').change( function(e) {
|
412
|
-
table = e.target.getAttribute("data-table");
|
413
|
-
|
472
|
+
let table = e.target.getAttribute("data-table");
|
473
|
+
let form = e.target.getAttribute("data-form");
|
474
|
+
if (form === null) form = table;
|
475
|
+
let sort = e.target.value;
|
414
476
|
e.target.value = null;
|
415
|
-
window.location.href = "/cmsedit?sort=" + sort + "&table=" + table;
|
477
|
+
window.location.href = "/cmsedit?sort=" + sort + "&table=" + table + "&form_name=" + form;
|
416
478
|
});
|
417
|
-
|
479
|
+
|
480
|
+
/*******************************************************************
|
481
|
+
* Click on dc-check-all icon. Check or uncheck all checkboxes
|
482
|
+
*******************************************************************/
|
483
|
+
$('.dc-check-all').on('click',function(e) {
|
484
|
+
let checkboxes = $('.dc-check');
|
485
|
+
if ($(this).hasClass('fa-check-square-o')) {
|
486
|
+
// check all checkboxes
|
487
|
+
checkboxes.each( function() {
|
488
|
+
$(this).prop('checked', true);
|
489
|
+
$(this).parent().closest('div').addClass('dc-checked');
|
490
|
+
});
|
491
|
+
$(this).removeClass('fa-check-square-o').addClass('fa-square-o');
|
492
|
+
} else {
|
493
|
+
// uncheck all checkboxes
|
494
|
+
checkboxes.each( function() {
|
495
|
+
$(this).prop('checked', false);
|
496
|
+
$(this).parent().closest('div').removeClass('dc-checked');
|
497
|
+
});
|
498
|
+
$(this).removeClass('fa-square-o').addClass('fa-check-square-o');
|
499
|
+
}
|
500
|
+
});
|
501
|
+
|
502
|
+
/*******************************************************************
|
503
|
+
* Click on dc-check icon. Change color of background of element
|
504
|
+
*******************************************************************/
|
505
|
+
$('.dc-check').on('click',function(e) {
|
506
|
+
let parent = $(this).parent().closest('div');
|
507
|
+
if ($(this).prop('checked')) {
|
508
|
+
parent.addClass('dc-checked');
|
509
|
+
} else {
|
510
|
+
parent.removeClass('dc-checked');
|
511
|
+
}
|
512
|
+
});
|
513
|
+
|
418
514
|
/*******************************************************************
|
419
515
|
* Tab clicked on form. Hide old and show selected div.
|
420
516
|
*******************************************************************/
|
421
517
|
$('.dc-form-li').on('click', function(e) {
|
422
518
|
// find li with dc-form-li-selected class. This is our old tab
|
423
|
-
|
519
|
+
let old_tab_id = null;
|
424
520
|
$(e.target).parents('ul').find('li').each( function() {
|
425
521
|
if ($(this).hasClass('dc-form-li-selected')) {
|
426
522
|
// when not already selected toggle dc-form-li-selected class and save old tab
|
@@ -438,13 +534,13 @@ $(document).ready( function() {
|
|
438
534
|
$('#data_' + e.target.getAttribute("data-div")).toggleClass('div-hidden');
|
439
535
|
|
440
536
|
// resize parent iframe to fit selected tab size
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
537
|
+
let div_height = document.body.scrollHeight;
|
538
|
+
let frame = window.frameElement
|
539
|
+
if (frame === null) frame = document.body;
|
540
|
+
frame.style.height = div_height.toString() + 'px';
|
541
|
+
|
446
542
|
select_first_input_field('#data_' + e.target.getAttribute("data-div"));
|
447
|
-
|
543
|
+
update_embedded_on_tab_select('#data_' + e.target.getAttribute("data-div"));
|
448
544
|
}
|
449
545
|
});
|
450
546
|
|
@@ -453,10 +549,10 @@ $(document).ready( function() {
|
|
453
549
|
* unless on initial display.
|
454
550
|
*******************************************************************/
|
455
551
|
$('#iframe_cms').on('load', function() {
|
456
|
-
new_height = this.contentWindow.document.body.offsetHeight + 50;
|
552
|
+
let new_height = this.contentWindow.document.body.offsetHeight + 50;
|
457
553
|
if (new_height < 500 && new_height > 60) new_height = 500;
|
458
554
|
this.style.height = new_height + 'px';
|
459
|
-
// scroll to top
|
555
|
+
// scroll to top
|
460
556
|
$('#iframe_cms').dc_scroll_view();
|
461
557
|
});
|
462
558
|
|
@@ -465,52 +561,81 @@ $(document).ready( function() {
|
|
465
561
|
* unless on initial display with no data
|
466
562
|
*******************************************************************/
|
467
563
|
$('#iframe_edit').on('load', function() {
|
468
|
-
// console.log(this.contentWindow.document.body.offsetHeight);
|
469
564
|
if (this.contentWindow.document.body.offsetHeight > 10) {
|
470
565
|
this.style.height = (this.contentWindow.document.body.offsetHeight + 30) + 'px';
|
471
|
-
|
566
|
+
|
472
567
|
$('#iframe_edit').dc_scroll_view();
|
473
568
|
}
|
474
569
|
});
|
475
|
-
|
570
|
+
|
571
|
+
/*******************************************************************
|
572
|
+
* Same goes for iframe_embedded. Resize it + 30px
|
573
|
+
*******************************************************************/
|
574
|
+
$('.iframe_embedded').on('load', function() {
|
575
|
+
let embedded_height = this.contentWindow.document.body.offsetHeight;
|
576
|
+
// workaround. It gets tricky when embedded field is on tab
|
577
|
+
if (embedded_height == 0) embedded_height = 500;
|
578
|
+
this.style.height = (embedded_height + 30) + 'px';
|
579
|
+
// resize parent iframe window too
|
580
|
+
let parentWindow = this.contentWindow.parent;
|
581
|
+
let parent_height = (parentWindow.document.body.offsetHeight + 30) + 'px';
|
582
|
+
//parentWindow.frameElement.setAttribute('style', 'height:' + parent_height);
|
583
|
+
parentWindow.frameElement.style.height = parent_height;
|
584
|
+
});
|
585
|
+
|
476
586
|
/*******************************************************************
|
477
587
|
* Process Ajax call on cmsedit form actions
|
478
588
|
*******************************************************************/
|
479
589
|
$('.dc-link-ajax').on('click', function(e) {
|
480
590
|
// confirmation if required
|
481
591
|
if (confirmation_is_cancled(this)) {return false;}
|
482
|
-
|
592
|
+
|
593
|
+
// url must be specified in data-url
|
594
|
+
let url = this.getAttribute("data-url");
|
595
|
+
if (url.length < 5) return false;
|
596
|
+
|
483
597
|
// check HTML5 validations
|
484
598
|
if ($("form")[0] && !$("form")[0].checkValidity() ) {
|
485
599
|
$("form")[0].reportValidity();
|
486
600
|
return false;
|
487
601
|
}
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
602
|
+
|
603
|
+
let data = {};
|
604
|
+
let request = this.getAttribute("data-request");
|
605
|
+
switch (request) {
|
606
|
+
case 'script':
|
607
|
+
eval(this.getAttribute("data-script"));
|
608
|
+
return false;
|
609
|
+
|
610
|
+
case 'post':
|
611
|
+
data = $('form').serialize();
|
612
|
+
break;
|
613
|
+
|
614
|
+
default:
|
615
|
+
request = 'get'; // by default
|
496
616
|
}
|
497
|
-
|
498
|
-
|
499
|
-
|
617
|
+
|
618
|
+
// add checkbox id-s to data if checkboxes present
|
619
|
+
let checkboxes = $('.dc-check');
|
620
|
+
if (checkboxes.length > 0) {
|
621
|
+
let checked = [];
|
622
|
+
checkboxes.each( function() {
|
623
|
+
if ($(this).prop('checked')) checked.push($(this).attr("id"));
|
624
|
+
})
|
625
|
+
data['checked'] = checked;
|
500
626
|
}
|
501
|
-
|
502
|
-
$('.dc-spinner').show();
|
627
|
+
|
628
|
+
$('.dc-spinner').show();
|
503
629
|
$.ajax({
|
504
|
-
url:
|
505
|
-
type:
|
630
|
+
url: url,
|
631
|
+
type: request,
|
506
632
|
dataType: "json",
|
507
633
|
data: data,
|
508
634
|
success: function(data) {
|
509
635
|
process_json_result(data);
|
510
636
|
$('.dc-spinner').hide();
|
511
637
|
}
|
512
|
-
|
513
|
-
});
|
638
|
+
});
|
514
639
|
});
|
515
640
|
|
516
641
|
/*******************************************************************
|
@@ -613,9 +738,8 @@ $(document).ready( function() {
|
|
613
738
|
* data from with text_autocomplete and data doesn't exist in belongs_to table.
|
614
739
|
*******************************************************************/
|
615
740
|
$('.in-edit-add').on('click', function(e) {
|
616
|
-
url = '/cmsedit/new?table=' + this.getAttribute("data-table");
|
617
|
-
|
618
|
-
w = window.open(url, '', 'chrome=yes,width=800,height=600,resizable,scrollbars=yes,status=1,centerscreen=yes,modal=yes');
|
741
|
+
let url = '/cmsedit/new?window_close=0&table=' + this.getAttribute("data-table");
|
742
|
+
let w = popup_window(url, '', window, 1000, 800);
|
619
743
|
w.focus();
|
620
744
|
});
|
621
745
|
|
@@ -625,13 +749,9 @@ $(document).ready( function() {
|
|
625
749
|
**********************************************************************/
|
626
750
|
$('#filter_field').on('change', function() {
|
627
751
|
if (this.value.length > 0) {
|
628
|
-
name = 'filter_' + this.value;
|
752
|
+
let name = 'filter_' + this.value;
|
629
753
|
$(this).parents('form').find('span').each( function() {
|
630
|
-
|
631
|
-
element = $(this).find(':first').attr('id');
|
632
|
-
sometimes it is the second element
|
633
|
-
if (element == nil) { element = $(this).find(':first').next().attr('id');}
|
634
|
-
*/
|
754
|
+
|
635
755
|
if ($(this).attr('id') == name) {
|
636
756
|
if ( $(this).hasClass('div-hidden') ) { $(this).toggleClass('div-hidden'); }
|
637
757
|
} else {
|
@@ -713,8 +833,8 @@ element = $(this).find(':first').attr('id');
|
|
713
833
|
* Fire action (by default show document) when doubleclicked on result row
|
714
834
|
*******************************************************************/
|
715
835
|
$('.dc-result tr').on('dblclick', function(e) {
|
716
|
-
url = String( this.getAttribute("data-dblclick") );
|
717
|
-
// prevent when data-dblclick not set
|
836
|
+
let url = String( this.getAttribute("data-dblclick") );
|
837
|
+
// prevent when data-dblclick not set
|
718
838
|
if (url.length > 5) {
|
719
839
|
e.preventDefault();
|
720
840
|
location.href = url;
|
@@ -725,8 +845,8 @@ element = $(this).find(':first').attr('id');
|
|
725
845
|
* Fire action (by default show document) when doubleclicked on result row
|
726
846
|
*******************************************************************/
|
727
847
|
$('.dc-result-data').on('dblclick', function(e) {
|
728
|
-
url = String( this.getAttribute("data-dblclick") );
|
729
|
-
// prevent when data-dblclick not set
|
848
|
+
let url = String( this.getAttribute("data-dblclick") );
|
849
|
+
// prevent when data-dblclick not set
|
730
850
|
if (url.length > 5) {
|
731
851
|
e.preventDefault();
|
732
852
|
location.href = url;
|
@@ -758,12 +878,12 @@ element = $(this).find(':first').attr('id');
|
|
758
878
|
});
|
759
879
|
|
760
880
|
/*******************************************************************
|
761
|
-
* This will fire cmsedit index action and pass value
|
881
|
+
* This will fire cmsedit index action and pass value entered into
|
762
882
|
* filter field and thus refresh browsed result set.
|
763
883
|
*******************************************************************/
|
764
884
|
$('#_record__filter_field').keydown( function(e) {
|
765
885
|
if (e.which == '13' || e.which == '9') {
|
766
|
-
url = $(this).parents('span').attr("data-url");
|
886
|
+
var url = $(this).parents('span').attr("data-url");
|
767
887
|
url = url + "&filter_value=" + this.value;
|
768
888
|
location.href = url;
|
769
889
|
return false;
|
@@ -775,9 +895,16 @@ element = $(this).find(':first').attr('id');
|
|
775
895
|
* work on all field types.
|
776
896
|
*******************************************************************/
|
777
897
|
$('.record_filter_field_icon').on('click', function(e) {
|
778
|
-
field = $('#_record__filter_field');
|
779
|
-
url = $(this).parents('span').attr("data-url");
|
780
|
-
|
898
|
+
let field = $('#_record__filter_field');
|
899
|
+
let url = $(this).parents('span').attr("data-url");
|
900
|
+
let value = null;
|
901
|
+
|
902
|
+
if (field.is(':checkbox')) {
|
903
|
+
value = field.is(':checked'); }
|
904
|
+
else {
|
905
|
+
value = field.val();
|
906
|
+
}
|
907
|
+
url = url + "&filter_value=" + value;
|
781
908
|
location.href = url;
|
782
909
|
});
|
783
910
|
|
@@ -897,10 +1024,13 @@ element = $(this).find(':first').attr('id');
|
|
897
1024
|
});
|
898
1025
|
|
899
1026
|
/*******************************************************************
|
900
|
-
*
|
1027
|
+
* Key pressed in number_field.
|
1028
|
+
* - put minus sign in front of input field
|
1029
|
+
* - replace dot and comma separators when required. Not all numeric pads are created equal.
|
1030
|
+
* - when enter is pressed, save value to field before form is proccessed
|
901
1031
|
*******************************************************************/
|
902
1032
|
$('.dc-number').on('keydown', function(e) {
|
903
|
-
// Minus sign. Put it on first place
|
1033
|
+
// Minus sign. Put it on first place
|
904
1034
|
if (e.which == 109) {
|
905
1035
|
if($(this).val().substr(0,1) == '-') {
|
906
1036
|
$(this).val( $(this).val().substr(1,20));
|
@@ -909,17 +1039,47 @@ element = $(this).find(':first').attr('id');
|
|
909
1039
|
}
|
910
1040
|
e.preventDefault();
|
911
1041
|
}
|
912
|
-
//
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
1042
|
+
// replace , with . if . is separator.
|
1043
|
+
var separator = $(this).attr("data-separator") || '.';
|
1044
|
+
var inp = this;
|
1045
|
+
if (e.which == 188) {
|
1046
|
+
if (separator == '.') {
|
1047
|
+
setTimeout(function() {
|
1048
|
+
inp.value = inp.value.replace(/,/g, '.');
|
1049
|
+
}, 0);
|
1050
|
+
}
|
1051
|
+
}
|
1052
|
+
// replace . with , if , is separator
|
1053
|
+
if (e.which == 190) {
|
1054
|
+
if (separator == ',') {
|
1055
|
+
setTimeout(function() {
|
1056
|
+
inp.value = inp.value.replace(/\./g, ',');
|
1057
|
+
}, 0);
|
1058
|
+
}
|
1059
|
+
}
|
1060
|
+
|
1061
|
+
// Enter means process form. Save the value before form is processed
|
1062
|
+
if (e.which == 13) {
|
1063
|
+
var decimals = $(this).attr("data-decimal") || 2;
|
1064
|
+
var value = $(this).val().replace(separator,'.');
|
1065
|
+
var field = '#' + $(this).attr("id").slice(0,-1);
|
918
1066
|
|
919
|
-
|
920
|
-
|
1067
|
+
$(field).val( parseFloat(value).toFixed(decimals) );
|
1068
|
+
}
|
921
1069
|
});
|
922
|
-
|
1070
|
+
|
1071
|
+
/*******************************************************************
|
1072
|
+
* Slovenian keyboard has comma key instead of dot in numeric pad.
|
1073
|
+
* This will catch if comma has been pressed and will replace it with dot.
|
1074
|
+
*******************************************************************/
|
1075
|
+
$('.date-picker').keypress( function(e) {
|
1076
|
+
if (e.keyCode !== 44) return;
|
1077
|
+
var inp = this;
|
1078
|
+
setTimeout(function() {
|
1079
|
+
inp.value = inp.value.replace(/,/g, '.');
|
1080
|
+
}, 0);
|
1081
|
+
});
|
1082
|
+
|
923
1083
|
/*******************************************************************
|
924
1084
|
* Result header sort icon is hoverd. Change background icon to filter.
|
925
1085
|
*******************************************************************/
|
@@ -946,8 +1106,8 @@ element = $(this).find(':first').attr('id');
|
|
946
1106
|
return;
|
947
1107
|
}
|
948
1108
|
// retrieve name of current field and set it in popup
|
949
|
-
|
950
|
-
|
1109
|
+
let header = $(this).closest('.th');
|
1110
|
+
let field_name = header.attr("data-name");
|
951
1111
|
$('.filter-popup').attr('data-name', field_name);
|
952
1112
|
// change popup position and show
|
953
1113
|
$('.filter-popup').css({'top':e.pageY+5,'left':e.pageX, 'position':'absolute'});
|
@@ -959,15 +1119,30 @@ element = $(this).find(':first').attr('id');
|
|
959
1119
|
* filter on action.
|
960
1120
|
*******************************************************************/
|
961
1121
|
$('.filter-popup li').click( function(e) {
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
|
1122
|
+
let url = $(this).data('url');
|
1123
|
+
let operator = $(this).data('operator');
|
1124
|
+
let parent = $(this).closest('.filter-popup');
|
1125
|
+
let field_name = parent.data("name");
|
966
1126
|
|
967
1127
|
url = url + '&filter_field=' + field_name + '&filter_oper=' + operator;
|
968
1128
|
window.location.href = url;
|
969
1129
|
});
|
970
1130
|
|
1131
|
+
/*****************************************************************
|
1132
|
+
* Toggle div
|
1133
|
+
******************************************************************/
|
1134
|
+
$(".dc-handle").click(function() {
|
1135
|
+
let div = this.getAttribute("data-div");
|
1136
|
+
dc_toggle_div(div);
|
1137
|
+
});
|
1138
|
+
|
1139
|
+
/*******************************************************************
|
1140
|
+
* Show-Hide CMS menu on hamburger click
|
1141
|
+
*******************************************************************/
|
1142
|
+
$('#menu-hamburger').on('click', function(e) {
|
1143
|
+
$('.cmsedit-container #menu').toggleClass('visible');
|
1144
|
+
});
|
1145
|
+
|
971
1146
|
});
|
972
1147
|
|
973
1148
|
/*******************************************************************
|