drg_cms 0.6.1.6 → 0.6.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +203 -24
- data/app/assets/javascripts/drg_cms/drg_cms.js +183 -95
- data/app/assets/stylesheets/drg_cms/drg_cms.css +542 -509
- data/app/assets/stylesheets/drg_cms_application.css +1 -1
- data/app/assets/stylesheets/drg_cms_cms.css +1 -4
- data/app/controllers/cmsedit_controller.rb +25 -103
- data/app/controllers/dc_common_controller.rb +6 -5
- data/app/controls/browse_models_control.rb +15 -26
- data/app/controls/cmsedit_control.rb +125 -0
- data/app/controls/dc_help_control.rb +1 -1
- data/app/controls/dc_page_control.rb +0 -1
- data/app/controls/dc_poll_result_control.rb +1 -1
- data/app/controls/dc_report.rb +1 -1
- data/app/forms/all_options.yml +1 -1
- data/app/forms/cms_menu.yml +24 -24
- data/app/forms/dc_browse_fields.yml +13 -9
- data/app/forms/dc_poll_result_export.yml +1 -1
- data/app/helpers/cms_common_helper.rb +7 -5
- data/app/helpers/cms_edit_helper.rb +52 -45
- data/app/helpers/cms_helper.rb +76 -40
- data/app/helpers/cms_index_helper.rb +180 -139
- data/app/helpers/dc_application_helper.rb +37 -43
- data/app/models/concerns/dc_page_concern.rb +1 -1
- data/app/models/dc_filter.rb +30 -22
- data/app/models/dc_json_ld.rb +1 -1
- data/app/models/dc_part.rb +19 -9
- data/app/models/drgcms_form_fields/drgcms_field.rb +10 -4
- data/app/models/drgcms_form_fields/link_to.rb +1 -1
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +5 -5
- data/app/models/drgcms_form_fields/readonly.rb +3 -0
- data/app/models/drgcms_form_fields/select.rb +8 -7
- data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
- data/app/renderers/dc_part_renderer.rb +1 -1
- data/app/renderers/dc_poll_renderer.rb +1 -1
- data/app/views/cmsedit/_edit_stuff.html.erb +12 -12
- data/app/views/cmsedit/login.html.erb +1 -1
- data/app/views/dc_common/paste_clipboard.html.erb +1 -1
- data/config/locales/drgcms_en.yml +2 -1
- data/config/locales/drgcms_sl.yml +2 -1
- data/config/locales/kaminari.yml +1 -1
- data/drg_cms.gemspec +1 -1
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +4 -4
- metadata +4 -5
- data/app/views/cmsedit/__remove_edit_stuff.js.erb +0 -6
- data/app/views/cmsedit/__show.html.erb +0 -21
@@ -159,7 +159,7 @@ $(function() {
|
|
159
159
|
* record_name: will replace value of record[name] field on a form with supplied value
|
160
160
|
*
|
161
161
|
* msg_error: will display error message.
|
162
|
-
*
|
162
|
+
* msg_warning: will display warning message.
|
163
163
|
* msg_info: will display informational message.
|
164
164
|
*
|
165
165
|
* popup: will display popup message
|
@@ -246,11 +246,17 @@ process_json_result = function(json) {
|
|
246
246
|
/**** display popup message ****/
|
247
247
|
case 'popup':
|
248
248
|
if (selector == 'url') {
|
249
|
-
$('#popup').bPopup({ loadUrl: value
|
249
|
+
$('#popup').bPopup({ loadUrl: value,
|
250
|
+
transition: 'slideDown', transitionClose: 'slideDown', speed: 300,
|
251
|
+
opacity: 0, position: ['auto', 20],
|
252
|
+
closeClass: 'dc-link' });
|
250
253
|
}
|
251
254
|
else {
|
252
255
|
$('#popup').html(value);
|
253
|
-
$('#popup').bPopup({
|
256
|
+
$('#popup').bPopup( {
|
257
|
+
transition: 'slideDown', transitionClose: 'slideDown', speed: 300,
|
258
|
+
opacity: 0, position: ['auto', 20],
|
259
|
+
closeClass: 'dc-link' });
|
254
260
|
}
|
255
261
|
break;
|
256
262
|
|
@@ -395,7 +401,7 @@ process_parent_form_updates = function(element) {
|
|
395
401
|
/*****************************************************************
|
396
402
|
* Toggle show and hide div
|
397
403
|
******************************************************************/
|
398
|
-
|
404
|
+
dc_div_toggle = function(div) {
|
399
405
|
if ($(div).is(":visible")) {
|
400
406
|
$(div).slideUp();
|
401
407
|
} else {
|
@@ -403,17 +409,55 @@ dc_toggle_div = function(div) {
|
|
403
409
|
}
|
404
410
|
};
|
405
411
|
|
412
|
+
/*****************************************************************
|
413
|
+
* Process simple ajax call
|
414
|
+
******************************************************************/
|
415
|
+
simple_ajax_call = function(url) {
|
416
|
+
$.ajax({
|
417
|
+
url: url,
|
418
|
+
success: function(data) { process_json_result(data); }
|
419
|
+
});
|
420
|
+
};
|
421
|
+
|
406
422
|
/*****************************************************************
|
407
423
|
* Return value of the input field on a form
|
408
424
|
******************************************************************/
|
409
|
-
function
|
425
|
+
function dc_field_get_value(field_name) {
|
410
426
|
field_name = field_name.replace('record_', '');
|
411
427
|
let field = $('[name="record[' + field_name + ']"]');
|
412
428
|
return field.val();
|
413
429
|
}
|
414
430
|
|
431
|
+
/*****************************************************************
|
432
|
+
* Will process data-fields attribute and add field values as parameters to url
|
433
|
+
******************************************************************/
|
434
|
+
function dc_url_add_params(form, url) {
|
435
|
+
// check if data-fields attribute present
|
436
|
+
let fields = form.getAttribute("data-fields");
|
437
|
+
if (fields === null) return url;
|
438
|
+
// url might already contain ?
|
439
|
+
let form_parms = '?';
|
440
|
+
if (url.match(/\?/)) form_parms = '';
|
441
|
+
|
442
|
+
fields.split(',').forEach( function(field) {
|
443
|
+
let value = dc_field_get_value(field);
|
444
|
+
if (value) form_parms += '&' + field + '=' + value;
|
445
|
+
});
|
446
|
+
return url + form_parms;
|
447
|
+
}
|
448
|
+
|
415
449
|
/*******************************************************************
|
416
|
-
*
|
450
|
+
* Copy div text to clipboard
|
451
|
+
*******************************************************************/
|
452
|
+
function dc_copy_to_clipboard(div) {
|
453
|
+
let copyText = document.getElementById(div).innerText;
|
454
|
+
console.log(copyText);
|
455
|
+
/* Copy the text inside the text field */
|
456
|
+
navigator.clipboard.writeText(copyText);
|
457
|
+
}
|
458
|
+
|
459
|
+
/*******************************************************************
|
460
|
+
* Events start here
|
417
461
|
*******************************************************************/
|
418
462
|
$(document).ready( function() {
|
419
463
|
/* This could be the way to focus on first input field on document open
|
@@ -476,7 +520,7 @@ $(document).ready( function() {
|
|
476
520
|
* Popup CMS edit menu option clicked
|
477
521
|
*******************************************************************/
|
478
522
|
$('.drgcms_popmenu_item').on('click',function(e) {
|
479
|
-
url = e.target.getAttribute("data-url");
|
523
|
+
let url = e.target.getAttribute("data-url");
|
480
524
|
$('#iframe_cms').attr('src', url);
|
481
525
|
// $('#iframe_cms').width(1000).height(1000);
|
482
526
|
// scroll to top of page and hide menu
|
@@ -487,13 +531,22 @@ $(document).ready( function() {
|
|
487
531
|
/*******************************************************************
|
488
532
|
* Sort action clicked on cmsedit
|
489
533
|
*******************************************************************/
|
490
|
-
$('.
|
534
|
+
$('.dc-sort-select').change( function(e) {
|
491
535
|
let table = e.target.getAttribute("data-table");
|
492
536
|
let form = e.target.getAttribute("data-form");
|
493
537
|
if (form === null) form = table;
|
494
538
|
let sort = e.target.value;
|
495
|
-
e.target.value = null;
|
496
|
-
|
539
|
+
// e.target.value = null;
|
540
|
+
let url = "/cmsedit/run?control=cmsedit.sort&sort=" + sort + "&table=" + table + "&form_name=" + form;
|
541
|
+
simple_ajax_call(url);
|
542
|
+
});
|
543
|
+
|
544
|
+
/*******************************************************************
|
545
|
+
* Click on field name in result header perform sort action
|
546
|
+
*******************************************************************/
|
547
|
+
$('.dc-result-header span').on('click',function(e) {
|
548
|
+
let url = e.target.getAttribute("data-url");
|
549
|
+
simple_ajax_call(url);
|
497
550
|
});
|
498
551
|
|
499
552
|
/*******************************************************************
|
@@ -660,6 +713,14 @@ $(document).ready( function() {
|
|
660
713
|
}
|
661
714
|
});
|
662
715
|
});
|
716
|
+
|
717
|
+
/*******************************************************************
|
718
|
+
* Click on filter off
|
719
|
+
*******************************************************************/
|
720
|
+
$('.mi-search_off').on('click', function(e) {
|
721
|
+
let url = $(this).parents('.dc-filter').attr("data-url");
|
722
|
+
if (url.length > 5) simple_ajax_call(url);
|
723
|
+
});
|
663
724
|
|
664
725
|
/*******************************************************************
|
665
726
|
* Process action submit button click.
|
@@ -682,33 +743,42 @@ $(document).ready( function() {
|
|
682
743
|
form.submit();
|
683
744
|
});
|
684
745
|
|
685
|
-
/*******************************************************************
|
686
|
-
|
687
|
-
********************************************************************/
|
688
|
-
$('.dc-window-open').on('click', function(e) {
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
let url = this.getAttribute("data-url");
|
693
|
-
let title = this.getAttribute("title");
|
694
|
-
let w = this.getAttribute("data-x") || 1000;
|
695
|
-
let h = this.getAttribute("data-y") || 800;
|
696
|
-
// add fields values from current formto url
|
697
|
-
let fields = this.getAttribute("data-fields");
|
698
|
-
if (fields) {
|
699
|
-
let form_parms = '?';
|
700
|
-
// ? separator already in url
|
701
|
-
if (url.match(/\?/)) { form_parms = ''; }
|
702
|
-
fields.split(',').forEach( function(field) {
|
703
|
-
let value = dc_get_field_value(field);
|
704
|
-
if (value) {form_parms += '&' + field + '=' + value;}
|
705
|
-
});
|
706
|
-
url += form_parms;
|
707
|
-
}
|
746
|
+
/*******************************************************************
|
747
|
+
Will open a new window with URL specified.
|
748
|
+
********************************************************************/
|
749
|
+
$('.dc-window-open').on('click', function(e) {
|
750
|
+
// confirmation if required
|
751
|
+
if (confirmation_is_cancled(this)) return false;
|
708
752
|
|
709
|
-
|
710
|
-
|
711
|
-
|
753
|
+
let url = this.getAttribute("data-url");
|
754
|
+
let title = this.getAttribute("title");
|
755
|
+
let w = this.getAttribute("data-x") || 1000;
|
756
|
+
let h = this.getAttribute("data-y") || 800;
|
757
|
+
|
758
|
+
url = dc_url_add_params(this, url)
|
759
|
+
let win = popup_window(url, title, window, w, h);
|
760
|
+
win.focus();
|
761
|
+
});
|
762
|
+
|
763
|
+
/*******************************************************************
|
764
|
+
Will open a new popup with URL specified.
|
765
|
+
********************************************************************/
|
766
|
+
$('.dc-popup-open').on('click', function(e) {
|
767
|
+
// confirmation if required
|
768
|
+
if (confirmation_is_cancled(this)) return false;
|
769
|
+
|
770
|
+
let url = this.getAttribute("data-url");
|
771
|
+
let title = this.getAttribute("title");
|
772
|
+
let w = this.getAttribute("data-x") || 1000;
|
773
|
+
let h = this.getAttribute("data-y") || 800;
|
774
|
+
|
775
|
+
url = dc_url_add_params(this, url)
|
776
|
+
$('#popup').bPopup({ loadUrl: url,
|
777
|
+
transition: 'slideDown', transitionClose: 'slideDown', speed: 300,
|
778
|
+
opacity: 0, position: ['auto', 20],
|
779
|
+
closeClass: 'dc-link'
|
780
|
+
});
|
781
|
+
});
|
712
782
|
|
713
783
|
/*******************************************************************
|
714
784
|
* Animate button on click
|
@@ -724,20 +794,7 @@ $('.dc-window-open').on('click', function(e) {
|
|
724
794
|
$(this).toggleClass('dc-animate-button');
|
725
795
|
});
|
726
796
|
*/
|
727
|
-
|
728
|
-
* Animate button on click
|
729
|
-
*******************************************************************/
|
730
|
-
$('.dc-animate').mousedown( function() {
|
731
|
-
$(this).toggleClass('dc-animate-button');
|
732
|
-
});
|
733
|
-
|
734
|
-
/*******************************************************************
|
735
|
-
* Animate button on click
|
736
|
-
*******************************************************************/
|
737
|
-
$('.dc-animate').mouseup( function() {
|
738
|
-
$(this).toggleClass('dc-animate-button');
|
739
|
-
});
|
740
|
-
|
797
|
+
|
741
798
|
/*******************************************************************
|
742
799
|
* App menu option clicked
|
743
800
|
*******************************************************************/
|
@@ -758,7 +815,7 @@ $('.dc-window-open').on('click', function(e) {
|
|
758
815
|
/*******************************************************************
|
759
816
|
* Display spinner on link with spinner, submit link
|
760
817
|
*******************************************************************/
|
761
|
-
$('.dc-link
|
818
|
+
$('.dc-link.spin').on('click', function(e) {
|
762
819
|
$('.dc-spinner').show();
|
763
820
|
});
|
764
821
|
|
@@ -791,7 +848,7 @@ $('.dc-window-open').on('click', function(e) {
|
|
791
848
|
|
792
849
|
/**********************************************************************
|
793
850
|
* When filter_field (field name) is selected on filter subform this routine finds
|
794
|
-
* and displays
|
851
|
+
* and displays appropriate span with input field.
|
795
852
|
**********************************************************************/
|
796
853
|
$('#filter_field').on('change', function() {
|
797
854
|
if (this.value.length > 0) {
|
@@ -929,11 +986,10 @@ $('.dc-window-open').on('click', function(e) {
|
|
929
986
|
*******************************************************************/
|
930
987
|
$('#_record__filter_field').keydown( function(e) {
|
931
988
|
if (e.which == '13' || e.which == '9') {
|
932
|
-
|
989
|
+
let url = $(this).parents('span').attr("data-url");
|
933
990
|
url = url + "&filter_value=" + this.value;
|
934
|
-
|
935
|
-
|
936
|
-
}
|
991
|
+
simple_ajax_call(url);
|
992
|
+
};
|
937
993
|
});
|
938
994
|
|
939
995
|
/*******************************************************************
|
@@ -951,7 +1007,7 @@ $('.dc-window-open').on('click', function(e) {
|
|
951
1007
|
value = field.val();
|
952
1008
|
}
|
953
1009
|
url = url + "&filter_value=" + value;
|
954
|
-
|
1010
|
+
simple_ajax_call(url);
|
955
1011
|
});
|
956
1012
|
|
957
1013
|
/*******************************************************************
|
@@ -959,47 +1015,77 @@ $('.dc-window-open').on('click', function(e) {
|
|
959
1015
|
*******************************************************************/
|
960
1016
|
$('#open_drgcms_filter').on('click', function(e) {
|
961
1017
|
$('#drgcms_filter').bPopup({
|
962
|
-
speed:
|
963
|
-
|
964
|
-
|
1018
|
+
transition: 'slideDown', transitionClose: 'slideDown', speed: 300,
|
1019
|
+
opacity: 0, position: ['auto', 20],
|
1020
|
+
closeClass: 'dc-link' });
|
965
1021
|
});
|
966
1022
|
|
967
1023
|
/*******************************************************************
|
968
1024
|
* Click on preview selected image
|
969
1025
|
*******************************************************************/
|
970
1026
|
$('.dc-image-preview').on('click', function(e) {
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
1027
|
+
let img = $(this).children(":first").attr('src');
|
1028
|
+
$('#dc-image-preview').bPopup({
|
1029
|
+
content: 'image', //'ajax', 'iframe' or 'image'
|
1030
|
+
contentContainer: '#dc-image-preview',
|
1031
|
+
loadUrl: img,
|
1032
|
+
opacity: 0
|
1033
|
+
});
|
978
1034
|
});
|
979
1035
|
|
980
1036
|
/*******************************************************************
|
981
|
-
*
|
1037
|
+
* Set new filter
|
982
1038
|
*******************************************************************/
|
983
|
-
$('.
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
// Still opening in new window
|
990
|
-
// iframe = parent.document.getElementsByTagName("iframe")[0].getAttribute("id");
|
991
|
-
// loc = url + '&filter_field=' + field + '&filter_oper=' + oper
|
992
|
-
// $('#'+iframe).attr('src', loc);
|
993
|
-
// parent.document.getElementById(iframe).src = loc
|
1039
|
+
$('.dc-filter-set').on('click', function(e) {
|
1040
|
+
let url = $(this).attr( 'data-url' );
|
1041
|
+
let field = $('select#filter_field1').val();
|
1042
|
+
let operation = $('select#filter_oper').val();
|
1043
|
+
url = url + '&filter_field=' + field + '&filter_oper=' + operation
|
1044
|
+
simple_ajax_call(url);
|
994
1045
|
});
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
1046
|
+
|
1047
|
+
/*******************************************************************
|
1048
|
+
* Toggle one cmsedit menu level
|
1049
|
+
*******************************************************************/
|
1050
|
+
$('.cmsedit-top-level-menu div').on('click', function(e) {
|
1051
|
+
$(e.target).siblings('ul').toggle('fast');
|
1052
|
+
$(e.target).toggleClass('expanded');
|
1053
|
+
});
|
1054
|
+
|
1055
|
+
/*******************************************************************
|
1056
|
+
* Toggle result set record menu
|
1057
|
+
*
|
1058
|
+
* This and additional two event hadlers provide expected behavior of submenus popup and close.
|
1059
|
+
*******************************************************************/
|
1060
|
+
$('.dc-result-submenu .mi-more_vert').on('click', function(e) {
|
1061
|
+
let ul = $(e.target).siblings('ul');
|
1062
|
+
// hide last selected menu if not the same
|
1063
|
+
if (typeof dc_last_menu_selected !== 'undefined') { dc_last_menu_selected.hide(); }
|
1064
|
+
// if menu is past the bottom fix it to bottom
|
1065
|
+
let menu_bottom = ul.height() + ul.parent().position().top + 20;
|
1066
|
+
if (menu_bottom > $(document).height()) ul.css('bottom', 0);
|
1067
|
+
ul.show();
|
1068
|
+
dc_last_menu_selected = ul;
|
1001
1069
|
});
|
1002
|
-
|
1070
|
+
|
1071
|
+
/*******************************************************************
|
1072
|
+
* Result record menu has lost focus. Hide menu.
|
1073
|
+
*******************************************************************/
|
1074
|
+
$('.dc-result-submenu ul').hover(function(e) {
|
1075
|
+
},
|
1076
|
+
function(e) {
|
1077
|
+
dc_last_menu_selected.hide();
|
1078
|
+
dc_last_menu_selected = undefined;
|
1079
|
+
});
|
1080
|
+
|
1081
|
+
/*******************************************************************
|
1082
|
+
* Result set record menu is left open if action is canceled. Ex. delete confirm. This will hide menu.
|
1083
|
+
*******************************************************************/
|
1084
|
+
$('.dc-result-submenu ul li').on('click', function(e) {
|
1085
|
+
console.log('ups');
|
1086
|
+
if (typeof dc_last_menu_selected !== 'undefined') dc_last_menu_selected.hide();
|
1087
|
+
});
|
1088
|
+
|
1003
1089
|
/*******************************************************************
|
1004
1090
|
* Resize result table columns. For now an idea.
|
1005
1091
|
*******************************************************************/
|
@@ -1131,14 +1217,14 @@ $('.dc-window-open').on('click', function(e) {
|
|
1131
1217
|
*******************************************************************/
|
1132
1218
|
$('.dc-result-header .th i').hover( function() {
|
1133
1219
|
old_sort_icon = '';
|
1134
|
-
// save old sort icon and replace it with filter icon
|
1220
|
+
// save old sort icon and replace it with filter icon
|
1135
1221
|
$.each( $(this).attr("class").split(/\s+/),
|
1136
1222
|
function(index, item) { if (item.match('sort')) { old_sort_icon = item}; }
|
1137
1223
|
);
|
1138
|
-
$(this).removeClass(old_sort_icon).addClass('
|
1139
|
-
// bring back old sort icon
|
1140
|
-
}, function(){
|
1141
|
-
$(this).removeClass('
|
1224
|
+
$(this).removeClass(old_sort_icon).addClass('mi-ads_click');
|
1225
|
+
// bring back old sort icon
|
1226
|
+
}, function() {
|
1227
|
+
$(this).removeClass('mi-ads_click').addClass(old_sort_icon);
|
1142
1228
|
});
|
1143
1229
|
|
1144
1230
|
/*******************************************************************
|
@@ -1146,6 +1232,8 @@ $('.dc-window-open').on('click', function(e) {
|
|
1146
1232
|
*******************************************************************/
|
1147
1233
|
$('.dc-result-header .th i').click( function(e) {
|
1148
1234
|
e.preventDefault();
|
1235
|
+
if ($(this).hasClass('no-filter')) return;
|
1236
|
+
|
1149
1237
|
// additional click will close dialog when visible
|
1150
1238
|
if ($('.filter-popup').is(':visible')) {
|
1151
1239
|
$('.filter-popup').hide();
|
@@ -1156,7 +1244,7 @@ $('.dc-window-open').on('click', function(e) {
|
|
1156
1244
|
let field_name = header.attr("data-name");
|
1157
1245
|
$('.filter-popup').attr('data-name', field_name);
|
1158
1246
|
// change popup position and show
|
1159
|
-
$('.filter-popup').css({'top':e.pageY+5,'left':e.pageX, 'position':'absolute'});
|
1247
|
+
$('.filter-popup').css({'top': e.pageY + 5, 'left': e.pageX, 'position': 'absolute'});
|
1160
1248
|
$('.filter-popup').show();
|
1161
1249
|
});
|
1162
1250
|
|
@@ -1171,7 +1259,7 @@ $('.dc-window-open').on('click', function(e) {
|
|
1171
1259
|
let field_name = parent.data("name");
|
1172
1260
|
|
1173
1261
|
url = url + '&filter_field=' + field_name + '&filter_oper=' + operator;
|
1174
|
-
|
1262
|
+
simple_ajax_call(url);
|
1175
1263
|
});
|
1176
1264
|
|
1177
1265
|
/*****************************************************************
|
@@ -1179,14 +1267,14 @@ $('.dc-window-open').on('click', function(e) {
|
|
1179
1267
|
******************************************************************/
|
1180
1268
|
$(".dc-handle").click(function() {
|
1181
1269
|
let div = this.getAttribute("data-div");
|
1182
|
-
|
1270
|
+
dc_div_toggle(div);
|
1183
1271
|
});
|
1184
1272
|
|
1185
1273
|
/*******************************************************************
|
1186
1274
|
* Show-Hide CMS menu on hamburger click
|
1187
1275
|
*******************************************************************/
|
1188
1276
|
$('#menu-hamburger').on('click', function(e) {
|
1189
|
-
$('.cmsedit-container #menu').toggleClass('visible');
|
1277
|
+
$('.cmsedit-container #cms-menu').toggleClass('visible');
|
1190
1278
|
});
|
1191
1279
|
|
1192
1280
|
});
|