drg_cms 0.6.0.8 → 0.6.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +25 -10
  3. data/app/assets/javascripts/drg_cms/drg_cms.js +208 -81
  4. data/app/assets/stylesheets/drg_cms/drg_cms.css +298 -93
  5. data/app/assets/stylesheets/drg_cms/select-multiple.css +1 -1
  6. data/app/controllers/cmsedit_controller.rb +174 -167
  7. data/app/controllers/dc_application_controller.rb +230 -196
  8. data/app/controllers/dc_common_controller.rb +88 -50
  9. data/app/controls/dc_help_control.rb +138 -0
  10. data/app/controls/dc_report.rb +12 -16
  11. data/app/forms/all_options.yml +14 -5
  12. data/app/forms/cms_menu.yml +7 -1
  13. data/app/forms/dc_big_table.yml +0 -2
  14. data/app/forms/dc_big_table_value.yml +0 -2
  15. data/app/forms/dc_category.yml +2 -1
  16. data/app/forms/dc_design.yml +2 -2
  17. data/app/forms/dc_folder_permission.yml +0 -2
  18. data/app/forms/dc_help_1.yml +110 -0
  19. data/app/forms/dc_journal.yml +3 -1
  20. data/app/forms/dc_json_ld.yml +0 -3
  21. data/app/forms/dc_link.yml +1 -1
  22. data/app/forms/dc_menu.yml +8 -12
  23. data/app/forms/dc_menu_item.yml +2 -3
  24. data/app/forms/dc_page.yml +7 -2
  25. data/app/forms/dc_part.yml +1 -0
  26. data/app/forms/dc_piece.yml +1 -0
  27. data/app/forms/dc_policy.yml +2 -5
  28. data/app/forms/dc_poll.yml +13 -16
  29. data/app/forms/dc_seo.yml +1 -2
  30. data/app/forms/dc_simple_menu.yml +3 -2
  31. data/app/forms/dc_site.yml +5 -8
  32. data/app/forms/dc_user.yml +27 -11
  33. data/app/forms/dc_user_role.yml +3 -0
  34. data/app/helpers/cms_common_helper.rb +68 -4
  35. data/app/helpers/cms_edit_helper.rb +73 -55
  36. data/app/helpers/cms_helper.rb +70 -32
  37. data/app/helpers/cms_index_helper.rb +155 -102
  38. data/app/helpers/dc_application_helper.rb +132 -109
  39. data/app/models/concerns/dc_page_concern.rb +14 -4
  40. data/app/models/concerns/dc_piece_concern.rb +1 -1
  41. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  42. data/app/models/concerns/dc_site_concern.rb +56 -44
  43. data/app/models/concerns/dc_user_concern.rb +58 -19
  44. data/app/models/dc_big_table.rb +2 -2
  45. data/app/models/dc_design.rb +29 -19
  46. data/app/models/dc_filter.rb +28 -22
  47. data/app/models/dc_key_value_store.rb +1 -0
  48. data/app/models/dc_permission.rb +19 -9
  49. data/app/models/dc_policy.rb +25 -14
  50. data/app/models/dc_policy_role.rb +22 -11
  51. data/app/models/dc_temp.rb +8 -1
  52. data/app/models/dc_user_role.rb +2 -2
  53. data/app/models/drgcms_form_fields/comment.rb +11 -2
  54. data/app/models/drgcms_form_fields/date_picker.rb +2 -0
  55. data/app/models/drgcms_form_fields/drgcms_field.rb +2 -1
  56. data/app/models/drgcms_form_fields/embedded.rb +9 -10
  57. data/app/models/drgcms_form_fields/file_field.rb +1 -1
  58. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  59. data/app/models/drgcms_form_fields/hash_field.rb +11 -7
  60. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  61. data/app/models/drgcms_form_fields/method.rb +5 -4
  62. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
  63. data/app/models/drgcms_form_fields/number_field.rb +4 -3
  64. data/app/models/drgcms_form_fields/readonly.rb +13 -17
  65. data/app/models/drgcms_form_fields/select.rb +24 -25
  66. data/app/models/drgcms_form_fields/text_autocomplete.rb +22 -14
  67. data/app/renderers/dc_page_renderer.rb +7 -6
  68. data/app/renderers/dc_poll_renderer.rb +16 -20
  69. data/app/views/cmsedit/_edit_stuff.html.erb +5 -2
  70. data/app/views/cmsedit/_form.html.erb +3 -2
  71. data/app/views/cmsedit/_result.html.erb +21 -18
  72. data/app/views/cmsedit/edit.html.erb +4 -1
  73. data/app/views/cmsedit/index.html.erb +3 -2
  74. data/app/views/cmsedit/new.html.erb +5 -2
  75. data/app/views/dc_common/_help.html.erb +17 -0
  76. data/app/views/layouts/models.html.erb +2 -1
  77. data/config/locales/drgcms_en.yml +17 -2
  78. data/config/locales/drgcms_sl.yml +20 -2
  79. data/config/locales/models_en.yml +7 -5
  80. data/config/locales/models_sl.yml +12 -9
  81. data/drg_cms.gemspec +16 -16
  82. data/lib/drg_cms/version.rb +1 -1
  83. data/lib/drg_cms.rb +94 -2
  84. metadata +32 -30
  85. data/app/models/__dc_dummy.rb +0 -102
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef26a547c0b8b4274cf351a0d479541cd2bfb10ebf1ba6405dcba87fa816d08d
4
- data.tar.gz: 9e7c29e2d144e3b758972056359940a94baffb869cc18ee7f4483947f36be850
3
+ metadata.gz: be7dfed0ede6cbd81a93dbefbd517a2cb3d31151339a1bd3598ebde7e76993e9
4
+ data.tar.gz: d028640f11c1877e4f6eb4efe44f8fdd9306047678b9d731daeab3e56fb32749
5
5
  SHA512:
6
- metadata.gz: '0918c545df0e262b8ca70f4a59451df888283374b0084f9fe14e554ed9a461fdadf749c89a02240d1898fde8c616dd272eec8fda39e1d8b255007859c71dbfa1'
7
- data.tar.gz: 81f13601bafc13609e8c8f620d2511d9cc329bb82c0024eaaf6460639ea2102aaaf70f59860dfb33f75a647039440a30b9e388bc5094d433ec6c4fde25b0910a
6
+ metadata.gz: 2f5617503a1c85ce1b5bf2a9d3460a33525ba96e20a82a84b85e7adc6f370a576f97b2e76aa57ff424243958046b396e0c4c2a3529a8ba0f763ef43cbe92f450
7
+ data.tar.gz: 9e716e8fca1ae6330bd74139512fb952d88600ca42d8cd4c5690e8271fb9a50b3e624e72fbcdc7df5ee820a4cd466fc8c6c2b1f5c58b5b9261afb1d076905237
data/README.md CHANGED
@@ -1,12 +1,26 @@
1
1
  # DrgCms
2
2
 
3
- DRG CMS is advanced way of programming application for Ruby on Rails. Instead of creating controllers and views for each collection (table) model, DRG CMS introduces single Cmsedit controller which uses DRG Forms to control CRUD database operations.
3
+ DRG CMS is advanced way of programming application for Ruby on Rails.
4
+ Instead of creating controllers and views for each collection (table),
5
+ DRG CMS introduces single Cmsedit controller. All CRUD database actions are
6
+ controlled by DRG Forms file, which can have hundreds of data entry fields
7
+ and still be easy to maintain and update.
4
8
 
5
- DRG CMS uses Mongo DB, leading NO-SQL document database, as database back-end with a help of mongoid gem. Mongoid's flexible document model defines all document fields, indexes, dependencies, validations in single model file with no Rails migrations required.
6
-
7
- DRG CMS can be used for rapid development of complex, data-entry intensive web sites as well as building your private, in-house, Intranet applications.
8
-
9
- DRG CMS has built-in user friendly role based database access system and can be easly extended with help of Ruby on Rails plugin system.
9
+ DRG CMS uses MongoDB, leading NO-SQL document database, as database back-end
10
+ with a help of mongoid gem. Mongoid's flexible document model defines all
11
+ document fields, indexes, dependencies, validations in single model source file with
12
+ no Rails migrations required. When collection model is defined, data entry DRG Form
13
+ can easily be generated with form generator.
14
+
15
+ DRG CMS can be used for rapid development of complex, data-entry intensive web
16
+ sites as well as building your private, in-house, Intranet applications. At
17
+ the same time it can be used as CMS system with support for running
18
+ multiple web sites on single Ruby on Rails instance.
19
+
20
+ DRG CMS has built-in user friendly role based database access system. Administrator
21
+ defines roles and roles rights (no access, can read, can edit) as web site policies.
22
+ Roles are then assigned to users and policies can be assigned to documents (web pages)
23
+ or even parts of a document.
10
24
 
11
25
  Project Tracking
12
26
  ----------------
@@ -16,9 +30,10 @@ Project Tracking
16
30
  Compatibility
17
31
  -------------
18
32
 
19
- DRG CMS is tested against Ruby 2.2 and higher, Rails 5.0 and higher, Mongoid 6, MongoDB 3.0, 3.2, 3.4
20
-
21
- Version from 0.5.51 and higher requires Ruby 2.4.x and Rails 5.1.x
33
+ DRG CMS is being actively developed since 2012 and has been live tested in production
34
+ since beginning. It runs against latest technology Ruby (3.0), Rails (6.1)
35
+ and MongoDB (4.4) and had so far little or no problems advancing to latest versions
36
+ of required programs.
22
37
 
23
38
  Documentation
24
39
  -------------
@@ -29,7 +44,7 @@ Please see the DRG CMS website for up-to-date documentation:
29
44
  License (MIT LICENCE)
30
45
  ---------------------
31
46
 
32
- Copyright (c) 2012-2018 Damjan Rems
47
+ Copyright (c) 2012-2021 Damjan Rems
33
48
 
34
49
  Permission is hereby granted, free of charge, to any person obtaining
35
50
  a copy of this software and associated documentation files (the
@@ -47,16 +47,16 @@ dumpAttributes = function(obj) {
47
47
  * selected tab and triggers iframe reload.
48
48
  *******************************************************************/
49
49
  update_embedded_on_tab_select = function(div_name) {
50
- var iframes = $(div_name).find("iframe");
50
+ let iframes = $(div_name).find("iframe");
51
51
  $.each(iframes, function(index, iframe) {
52
52
  // delayed load
53
- var src_delay = iframe.getAttribute('data-src-delay');
53
+ let src_delay = iframe.getAttribute('data-src-delay');
54
54
  if (src_delay != null && src_delay != '') {
55
55
  iframe.setAttribute('data-src-delay', '');
56
56
  iframe.setAttribute('src', src_delay);
57
57
  }
58
58
  // always load on tab select
59
- var src_always = iframe.getAttribute('data-src-always');
59
+ let src_always = iframe.getAttribute('data-src-always');
60
60
  if (src_always != null) {
61
61
  iframe.setAttribute('src', src_always);
62
62
  }
@@ -184,26 +184,23 @@ $(function() {
184
184
  *******************************************************************/
185
185
 
186
186
  process_json_result = function(json) {
187
- var i,w,operation,selector, msg_div, field;
187
+ let i, w, operation, selector, msg_div, field;
188
188
  $.each(json, function(key, value) {
189
189
  i = key.search('_');
190
190
  if (i > 1) {
191
- operation = key.substring(0,i);
192
- selector = key.substring(i+1,100);
191
+ operation = key.substring(0, i);
192
+ selector = key.substring(i+1, 100);
193
193
  } else {
194
194
  operation = key;
195
195
  selector = '';
196
196
  }
197
- //
197
+
198
198
  switch (operation) {
199
199
 
200
200
  /**** update fields on form ****/
201
201
  case 'record':
202
- // field = $('#'+key);
203
- var name = key.replace('record_','record[') + ']';
202
+ let name = key.replace('record_','record[') + ']';
204
203
  field = $('[name="' + name + '"]');
205
- console.log(field.attr('type'));
206
- console.log(field.is('select'));
207
204
  // checkbox field
208
205
  if (field.is(':checkbox')) {
209
206
  field.prop('checked', value);
@@ -229,21 +226,33 @@ process_json_result = function(json) {
229
226
  }
230
227
  break;
231
228
 
229
+ /**** transfer focus to field ****/
230
+ case 'focus':
231
+ $('#' + value).focus();
232
+ break;
233
+
232
234
  /**** display message ****/
233
235
  case 'msg':
234
- msg_div = 'dc-form-' + selector;
235
- if ( $('.'+msg_div).length == 0 ) {
236
+ let msg_div = 'dc-form-' + selector;
237
+ if ( $('.' + msg_div).length == 0 ) {
236
238
  value = '<div class="' + msg_div + '">' + value + '</div>';
237
239
  $('.dc-title').after(value);
238
240
  } else {
239
- $('.'+msg_div).html(value);
241
+ $('.' + msg_div).html(value);
242
+ $('.' + msg_div).show();
240
243
  }
241
244
  break;
242
245
 
243
246
  /**** display popup message ****/
244
- case 'popup':
245
- $('#popup').html(value);
246
- $('#popup').bPopup({ speed: 650, transition: 'slideDown' });
247
+ case 'popup':
248
+ if (selector == 'url') {
249
+ $('#popup').bPopup({ loadUrl: value });
250
+ }
251
+ else {
252
+ $('#popup').html(value);
253
+ $('#popup').bPopup({speed: 650, transition: 'slideUp', position: ['auto',1]});
254
+ }
255
+ break;
247
256
 
248
257
  /**** update div ****/
249
258
  case '#div+':
@@ -269,12 +278,16 @@ process_json_result = function(json) {
269
278
  case 'url':
270
279
  window.location.href = value;
271
280
  break;
281
+ case 'parenturl':
282
+ parent.location.href = value;
283
+ break;
272
284
  case 'alert':
273
285
  alert(value);
274
286
  break;
275
287
  case 'window':
276
288
  if (value == 'close') { window.close();
277
- } else if (value == 'reload') { location.reload();
289
+ } else if (value == 'reload') {
290
+ window.location.href = window.location.href;
278
291
  } else {
279
292
  w = window.open(value, selector);
280
293
  w.focus();
@@ -292,8 +305,11 @@ process_json_result = function(json) {
292
305
  eval (value);
293
306
  break;
294
307
  case 'reload':
308
+ value = value.toString();
295
309
  if (value == 'parent') {
296
- parent.location.reload();
310
+ //parent.location.reload();
311
+ parent.location.href = parent.location.href;
312
+
297
313
  /*** this would be current window (reload: true) ****/
298
314
  } else if (value.length < 5) {
299
315
  window.location.href = window.location.href;
@@ -315,6 +331,15 @@ function dc_reload_window() {
315
331
  location.reload();
316
332
  }
317
333
 
334
+ /*******************************************************************
335
+ * Will open popup window
336
+ *******************************************************************/
337
+ function popup_window(url, window_name, win, w, h) {
338
+ let y = win.top.outerHeight / 2 + win.top.screenY - ( h / 2);
339
+ let x = win.top.outerWidth / 2 + win.top.screenX - ( w / 2);
340
+ 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}`);
341
+ }
342
+
318
343
  /*******************************************************************
319
344
  * Will select first editable input field on form. Works only when tab
320
345
  * is selected. Still have to find out, what to do on initial display.
@@ -344,17 +369,38 @@ $.fn.dc_scroll_view = function () {
344
369
  * Updates single field on parent iframe form of embedded form.
345
370
  *******************************************************************/
346
371
  process_parent_form_updates = function(element) {
347
- var field = element.getAttribute("data-field");
348
- var value = element.getAttribute("data-value");
349
- if ( window.parent.$('#'+field).length > 0 ) {
350
- if (field.substring(0,3) === 'td_') { // readonly field
351
- window.parent.$('#'+field+' > div').html(value);
352
- } else { // input field
353
- window.parent.$('#'+field).val(value);
372
+ let field = element.getAttribute("data-field");
373
+ let value = element.getAttribute("data-value");
374
+ let selector = '#' + field;
375
+
376
+ // update record
377
+ if (field.match(/record/)) {
378
+ if (window.parent.$(selector).length > 0) {
379
+ if (field.substring(0, 3) === 'td_') { // readonly field
380
+ window.parent.$(selector + ' > div').html(value);
381
+ } else { // input field
382
+ window.parent.$(selector).val(value);
383
+ }
384
+ }
385
+ // any div
386
+ } else {
387
+ if (window.parent.$(selector).length > 0) {
388
+ window.parent.$(selector).html(value);
354
389
  }
355
390
  }
356
391
  };
357
392
 
393
+ /*****************************************************************
394
+ * Toggle show and hide div
395
+ ******************************************************************/
396
+ dc_toggle_div = function(div) {
397
+ if ($(div).is(":visible")) {
398
+ $(div).slideUp();
399
+ } else {
400
+ $(div).slideDown();
401
+ }
402
+ };
403
+
358
404
  /*******************************************************************
359
405
  *
360
406
  *******************************************************************/
@@ -431,19 +477,54 @@ $(document).ready( function() {
431
477
  * Sort action clicked on cmsedit
432
478
  *******************************************************************/
433
479
  $('.drgcms_sort').change( function(e) {
434
- var table = e.target.getAttribute("data-table");
435
- var form = e.target.getAttribute("data-form");
436
- var sort = e.target.value;
480
+ let table = e.target.getAttribute("data-table");
481
+ let form = e.target.getAttribute("data-form");
482
+ if (form === null) form = table;
483
+ let sort = e.target.value;
437
484
  e.target.value = null;
438
485
  window.location.href = "/cmsedit?sort=" + sort + "&table=" + table + "&form_name=" + form;
439
486
  });
440
-
487
+
488
+ /*******************************************************************
489
+ * Click on dc-check-all icon. Check or uncheck all checkboxes
490
+ *******************************************************************/
491
+ $('.dc-check-all').on('click',function(e) {
492
+ let checkboxes = $('.dc-check');
493
+ if ($(this).hasClass('fa-check-square-o')) {
494
+ // check all checkboxes
495
+ checkboxes.each( function() {
496
+ $(this).prop('checked', true);
497
+ $(this).parent().closest('div').addClass('dc-checked');
498
+ });
499
+ $(this).removeClass('fa-check-square-o').addClass('fa-square-o');
500
+ } else {
501
+ // uncheck all checkboxes
502
+ checkboxes.each( function() {
503
+ $(this).prop('checked', false);
504
+ $(this).parent().closest('div').removeClass('dc-checked');
505
+ });
506
+ $(this).removeClass('fa-square-o').addClass('fa-check-square-o');
507
+ }
508
+ });
509
+
510
+ /*******************************************************************
511
+ * Click on dc-check icon. Change color of background of element
512
+ *******************************************************************/
513
+ $('.dc-check').on('click',function(e) {
514
+ let parent = $(this).parent().closest('div');
515
+ if ($(this).prop('checked')) {
516
+ parent.addClass('dc-checked');
517
+ } else {
518
+ parent.removeClass('dc-checked');
519
+ }
520
+ });
521
+
441
522
  /*******************************************************************
442
523
  * Tab clicked on form. Hide old and show selected div.
443
524
  *******************************************************************/
444
525
  $('.dc-form-li').on('click', function(e) {
445
526
  // find li with dc-form-li-selected class. This is our old tab
446
- var old_tab_id = null;
527
+ let old_tab_id = null;
447
528
  $(e.target).parents('ul').find('li').each( function() {
448
529
  if ($(this).hasClass('dc-form-li-selected')) {
449
530
  // when not already selected toggle dc-form-li-selected class and save old tab
@@ -461,11 +542,11 @@ $(document).ready( function() {
461
542
  $('#data_' + e.target.getAttribute("data-div")).toggleClass('div-hidden');
462
543
 
463
544
  // resize parent iframe to fit selected tab size
464
- // var div_height = document.getElementById('data_' + e.target.getAttribute("data-div")).clientHeight + 130;
465
- // var div_height = document.getElementById('cmsform').clientHeight + 50;
466
- var div_height = document.body.scrollHeight;
467
- window.frameElement.style.height = div_height.toString() + 'px';
468
- // it would be too easy $('#cmsform :input:enabled:visible:first').focus();
545
+ let div_height = document.body.scrollHeight;
546
+ let frame = window.frameElement
547
+ if (frame === null) frame = document.body;
548
+ frame.style.height = div_height.toString() + 'px';
549
+
469
550
  select_first_input_field('#data_' + e.target.getAttribute("data-div"));
470
551
  update_embedded_on_tab_select('#data_' + e.target.getAttribute("data-div"));
471
552
  }
@@ -476,10 +557,10 @@ $(document).ready( function() {
476
557
  * unless on initial display.
477
558
  *******************************************************************/
478
559
  $('#iframe_cms').on('load', function() {
479
- new_height = this.contentWindow.document.body.offsetHeight + 50;
560
+ let new_height = this.contentWindow.document.body.offsetHeight + 50;
480
561
  if (new_height < 500 && new_height > 60) new_height = 500;
481
562
  this.style.height = new_height + 'px';
482
- // scroll to top
563
+ // scroll to top
483
564
  $('#iframe_cms').dc_scroll_view();
484
565
  });
485
566
 
@@ -488,52 +569,81 @@ $(document).ready( function() {
488
569
  * unless on initial display with no data
489
570
  *******************************************************************/
490
571
  $('#iframe_edit').on('load', function() {
491
- // console.log(this.contentWindow.document.body.offsetHeight);
492
572
  if (this.contentWindow.document.body.offsetHeight > 10) {
493
573
  this.style.height = (this.contentWindow.document.body.offsetHeight + 30) + 'px';
494
- // scroll to top
574
+
495
575
  $('#iframe_edit').dc_scroll_view();
496
576
  }
497
577
  });
498
-
578
+
579
+ /*******************************************************************
580
+ * Same goes for iframe_embedded. Resize it + 30px
581
+ *******************************************************************/
582
+ $('.iframe_embedded').on('load', function() {
583
+ let embedded_height = this.contentWindow.document.body.offsetHeight;
584
+ // workaround. It gets tricky when embedded field is on tab
585
+ if (embedded_height == 0) embedded_height = 50;
586
+ this.style.height = (embedded_height + 30) + 'px';
587
+ // resize parent iframe window too
588
+ let parentWindow = this.contentWindow.parent;
589
+ let parent_height = (parentWindow.document.body.offsetHeight + 30) + 'px';
590
+ //parentWindow.frameElement.setAttribute('style', 'height:' + parent_height);
591
+ parentWindow.frameElement.style.height = parent_height;
592
+ });
593
+
499
594
  /*******************************************************************
500
595
  * Process Ajax call on cmsedit form actions
501
596
  *******************************************************************/
502
597
  $('.dc-link-ajax').on('click', function(e) {
503
598
  // confirmation if required
504
599
  if (confirmation_is_cancled(this)) {return false;}
505
-
600
+
601
+ // url must be specified in data-url
602
+ let url = this.getAttribute("data-url");
603
+ if (url.length < 5) return false;
604
+
506
605
  // check HTML5 validations
507
606
  if ($("form")[0] && !$("form")[0].checkValidity() ) {
508
607
  $("form")[0].reportValidity();
509
608
  return false;
510
609
  }
511
- var req = this.getAttribute("data-request");
512
- // Get values from elements on the page:
513
- if (req == "script") {
514
- eval (this.getAttribute("data-script"));
515
- return false;
516
- }
517
- else if (req == "post") {
518
- data = $('form').serialize();
610
+
611
+ let data = {};
612
+ let request = this.getAttribute("data-request");
613
+ switch (request) {
614
+ case 'script':
615
+ eval(this.getAttribute("data-script"));
616
+ return false;
617
+
618
+ case 'post':
619
+ data = $('form').serialize();
620
+ break;
621
+
622
+ default:
623
+ request = 'get'; // by default
519
624
  }
520
- else {
521
- data = {};
522
- req = 'get'; // by default
625
+
626
+ // add checkbox id-s to data if checkboxes present
627
+ let checkboxes = $('.dc-check');
628
+ if (checkboxes.length > 0) {
629
+ let checked = [];
630
+ checkboxes.each( function() {
631
+ if ($(this).prop('checked')) checked.push($(this).attr("id"));
632
+ })
633
+ data['checked'] = checked;
523
634
  }
524
-
525
- $('.dc-spinner').show();
635
+
636
+ $('.dc-spinner').show();
526
637
  $.ajax({
527
- url: this.getAttribute("data-url"),
528
- type: req,
638
+ url: url,
639
+ type: request,
529
640
  dataType: "json",
530
641
  data: data,
531
642
  success: function(data) {
532
643
  process_json_result(data);
533
644
  $('.dc-spinner').hide();
534
645
  }
535
-
536
- });
646
+ });
537
647
  });
538
648
 
539
649
  /*******************************************************************
@@ -636,9 +746,8 @@ $(document).ready( function() {
636
746
  * data from with text_autocomplete and data doesn't exist in belongs_to table.
637
747
  *******************************************************************/
638
748
  $('.in-edit-add').on('click', function(e) {
639
- url = '/cmsedit/new?table=' + this.getAttribute("data-table");
640
- /* I know. It doesn't work as expected. But it will do for now. */
641
- w = window.open(url, '', 'chrome=yes,width=800,height=600,resizable,scrollbars=yes,status=1,centerscreen=yes,modal=yes');
749
+ let url = '/cmsedit/new?window_close=0&table=' + this.getAttribute("data-table");
750
+ let w = popup_window(url, '', window, 1000, 800);
642
751
  w.focus();
643
752
  });
644
753
 
@@ -648,13 +757,9 @@ $(document).ready( function() {
648
757
  **********************************************************************/
649
758
  $('#filter_field').on('change', function() {
650
759
  if (this.value.length > 0) {
651
- name = 'filter_' + this.value;
760
+ let name = 'filter_' + this.value;
652
761
  $(this).parents('form').find('span').each( function() {
653
- /*
654
- element = $(this).find(':first').attr('id');
655
- sometimes it is the second element
656
- if (element == nil) { element = $(this).find(':first').next().attr('id');}
657
- */
762
+
658
763
  if ($(this).attr('id') == name) {
659
764
  if ( $(this).hasClass('div-hidden') ) { $(this).toggleClass('div-hidden'); }
660
765
  } else {
@@ -736,8 +841,8 @@ element = $(this).find(':first').attr('id');
736
841
  * Fire action (by default show document) when doubleclicked on result row
737
842
  *******************************************************************/
738
843
  $('.dc-result tr').on('dblclick', function(e) {
739
- url = String( this.getAttribute("data-dblclick") );
740
- // prevent when data-dblclick not set
844
+ let url = String( this.getAttribute("data-dblclick") );
845
+ // prevent when data-dblclick not set
741
846
  if (url.length > 5) {
742
847
  e.preventDefault();
743
848
  location.href = url;
@@ -748,8 +853,8 @@ element = $(this).find(':first').attr('id');
748
853
  * Fire action (by default show document) when doubleclicked on result row
749
854
  *******************************************************************/
750
855
  $('.dc-result-data').on('dblclick', function(e) {
751
- url = String( this.getAttribute("data-dblclick") );
752
- // prevent when data-dblclick not set
856
+ let url = String( this.getAttribute("data-dblclick") );
857
+ // prevent when data-dblclick not set
753
858
  if (url.length > 5) {
754
859
  e.preventDefault();
755
860
  location.href = url;
@@ -798,9 +903,16 @@ element = $(this).find(':first').attr('id');
798
903
  * work on all field types.
799
904
  *******************************************************************/
800
905
  $('.record_filter_field_icon').on('click', function(e) {
801
- var field = $('#_record__filter_field');
802
- var url = $(this).parents('span').attr("data-url");
803
- url = url + "&filter_value=" + field.val();
906
+ let field = $('#_record__filter_field');
907
+ let url = $(this).parents('span').attr("data-url");
908
+ let value = null;
909
+
910
+ if (field.is(':checkbox')) {
911
+ value = field.is(':checked'); }
912
+ else {
913
+ value = field.val();
914
+ }
915
+ url = url + "&filter_value=" + value;
804
916
  location.href = url;
805
917
  });
806
918
 
@@ -1002,8 +1114,8 @@ element = $(this).find(':first').attr('id');
1002
1114
  return;
1003
1115
  }
1004
1116
  // retrieve name of current field and set it in popup
1005
- var header = $(this).closest('.th');
1006
- var field_name = header.attr("data-name");
1117
+ let header = $(this).closest('.th');
1118
+ let field_name = header.attr("data-name");
1007
1119
  $('.filter-popup').attr('data-name', field_name);
1008
1120
  // change popup position and show
1009
1121
  $('.filter-popup').css({'top':e.pageY+5,'left':e.pageX, 'position':'absolute'});
@@ -1015,15 +1127,30 @@ element = $(this).find(':first').attr('id');
1015
1127
  * filter on action.
1016
1128
  *******************************************************************/
1017
1129
  $('.filter-popup li').click( function(e) {
1018
- var url = $(this).data('url')
1019
- var operator = $(this).data('operator');
1020
- var parent = $(this).closest('.filter-popup')
1021
- var field_name = parent.data("name");
1130
+ let url = $(this).data('url');
1131
+ let operator = $(this).data('operator');
1132
+ let parent = $(this).closest('.filter-popup');
1133
+ let field_name = parent.data("name");
1022
1134
 
1023
1135
  url = url + '&filter_field=' + field_name + '&filter_oper=' + operator;
1024
1136
  window.location.href = url;
1025
1137
  });
1026
1138
 
1139
+ /*****************************************************************
1140
+ * Toggle div
1141
+ ******************************************************************/
1142
+ $(".dc-handle").click(function() {
1143
+ let div = this.getAttribute("data-div");
1144
+ dc_toggle_div(div);
1145
+ });
1146
+
1147
+ /*******************************************************************
1148
+ * Show-Hide CMS menu on hamburger click
1149
+ *******************************************************************/
1150
+ $('#menu-hamburger').on('click', function(e) {
1151
+ $('.cmsedit-container #menu').toggleClass('visible');
1152
+ });
1153
+
1027
1154
  });
1028
1155
 
1029
1156
  /*******************************************************************