decidim-decidim_awesome 0.6.5 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -8
  3. data/app/assets/config/decidim_admin_decidim_awesome_manifest.css +2 -2
  4. data/app/assets/config/decidim_admin_decidim_awesome_manifest.js +1 -1
  5. data/app/assets/config/decidim_decidim_awesome_manifest.css +2 -2
  6. data/app/assets/config/decidim_decidim_awesome_manifest.js +3 -2
  7. data/app/assets/config/legacy_decidim_admin_decidim_awesome_manifest.js +2 -0
  8. data/app/assets/config/legacy_decidim_decidim_awesome_manifest.js +4 -0
  9. data/app/assets/javascripts/decidim/decidim_awesome/admin/auto_edit.js.es6 +77 -0
  10. data/app/assets/javascripts/decidim/decidim_awesome/admin/codemirror.js.es6 +14 -0
  11. data/app/assets/javascripts/decidim/decidim_awesome/admin/form_builder.js.es6 +80 -0
  12. data/app/assets/javascripts/decidim/decidim_awesome/admin/legacy_form_builder.js.es6 +80 -0
  13. data/app/assets/javascripts/decidim/decidim_awesome/admin/user_picker.js.es6 +24 -0
  14. data/app/assets/javascripts/decidim/decidim_awesome/awesome_admin.js +7 -0
  15. data/app/assets/javascripts/decidim/decidim_awesome/{application.js → awesome_application.js} +1 -2
  16. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/hashtags.js.es6 +48 -0
  17. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/layers.js.es6 +107 -0
  18. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/load_map.js.es6 +15 -0
  19. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6 +170 -178
  20. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/markers.js.es6 +56 -0
  21. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/meetings.js.es6 +7 -6
  22. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/proposals.js.es6 +18 -5
  23. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/utilities.js.es6 +57 -0
  24. data/app/assets/javascripts/decidim/decidim_awesome/editors/legacy_quill_editor.js.es6 +172 -0
  25. data/app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6 +34 -9
  26. data/app/assets/javascripts/decidim/decidim_awesome/editors/tabs_focus.js.es6 +24 -0
  27. data/app/assets/javascripts/decidim/decidim_awesome/forms/custom_fields_builder.js.es6 +211 -0
  28. data/app/assets/javascripts/decidim/decidim_awesome/forms/rich_text_plugin.js.es6 +106 -0
  29. data/app/assets/javascripts/decidim/decidim_awesome/legacy_admin.js +7 -0
  30. data/app/assets/javascripts/decidim/decidim_awesome/legacy_application.js +3 -0
  31. data/app/assets/javascripts/decidim/decidim_awesome/proposals/custom_fields.js.es6 +21 -0
  32. data/app/assets/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss +15 -0
  33. data/app/assets/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +27 -0
  34. data/app/assets/stylesheets/decidim/decidim_awesome/admin/constraints.scss +12 -0
  35. data/app/assets/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +66 -0
  36. data/app/assets/stylesheets/decidim/decidim_awesome/admin/user_picker.scss +35 -0
  37. data/app/assets/stylesheets/decidim/decidim_awesome/{admin.scss → awesome_admin.scss} +19 -4
  38. data/app/assets/stylesheets/decidim/decidim_awesome/awesome_application.scss +22 -0
  39. data/app/assets/stylesheets/decidim/decidim_awesome/awesome_map/leaflet.scss.erb +9 -0
  40. data/app/assets/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +95 -1
  41. data/app/assets/stylesheets/decidim/decidim_awesome/editors/markdown_editor.scss +1 -1
  42. data/app/assets/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +16 -1
  43. data/app/awesome_overrides/forms/decidim/proposals/proposal_wizard_create_step_form_override.rb +28 -0
  44. data/app/awesome_overrides/presenters/decidim/menu_presenter_override.rb +11 -3
  45. data/app/cells/decidim/decidim_awesome/content_blocks/map/show.erb +74 -0
  46. data/app/cells/decidim/decidim_awesome/content_blocks/map_cell.rb +54 -0
  47. data/app/cells/decidim/decidim_awesome/content_blocks/map_form/show.erb +61 -0
  48. data/app/cells/decidim/decidim_awesome/content_blocks/map_form_cell.rb +19 -0
  49. data/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb +32 -0
  50. data/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb +45 -0
  51. data/app/commands/decidim/decidim_awesome/admin/create_scoped_admin.rb +38 -0
  52. data/app/commands/decidim/decidim_awesome/admin/destroy_constraint.rb +4 -0
  53. data/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb +40 -0
  54. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_admin.rb +40 -0
  55. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +1 -1
  56. data/app/commands/decidim/decidim_awesome/admin/rename_scope_label.rb +58 -0
  57. data/app/commands/decidim/decidim_awesome/admin/update_config.rb +5 -1
  58. data/app/controllers/concerns/decidim/decidim_awesome/admin_not_found_redirect.rb +39 -0
  59. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +1 -1
  60. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +33 -20
  61. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +4 -0
  62. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +2 -2
  63. data/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb +38 -0
  64. data/app/controllers/decidim/decidim_awesome/admin/scoped_admins_controller.rb +38 -0
  65. data/app/controllers/decidim/decidim_awesome/admin/scoped_styles_controller.rb +38 -0
  66. data/app/controllers/decidim/decidim_awesome/map_component/map_controller.rb +1 -4
  67. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +50 -0
  68. data/app/forms/decidim/decidim_awesome/admin/constraint_form.rb +3 -1
  69. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +11 -7
  70. data/app/helpers/decidim/decidim_awesome/amendments_helper_override.rb +48 -0
  71. data/app/helpers/decidim/decidim_awesome/map_helper.rb +66 -53
  72. data/app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb +78 -0
  73. data/app/middleware/decidim/decidim_awesome/current_config.rb +182 -0
  74. data/app/models/decidim/decidim_awesome/awesome_config.rb +15 -0
  75. data/app/models/decidim/decidim_awesome/user_override.rb +25 -0
  76. data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +2 -0
  77. data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +0 -5
  78. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +2 -2
  79. data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +7 -0
  80. data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +2 -2
  81. data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +21 -0
  82. data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +0 -3
  83. data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +25 -0
  84. data/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb +0 -2
  85. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +4 -6
  86. data/app/views/decidim/decidim_awesome/admin/config/show.html.erb +1 -2
  87. data/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb +4 -0
  88. data/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb +6 -0
  89. data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +3 -32
  90. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +101 -0
  91. data/app/views/decidim/proposals/collaborative_drafts/_edit_form_fields.html.erb +83 -0
  92. data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +1 -0
  93. data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +25 -11
  94. data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +8 -1
  95. data/app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb +1 -1
  96. data/app/views/v0.23/decidim/proposals/collaborative_drafts/_show.html.erb +134 -0
  97. data/app/views/v0.23/layouts/decidim/_head.html.erb +2 -2
  98. data/app/views/v0.23/layouts/decidim/admin/_header.html.erb +2 -2
  99. data/app/views/v0.24/decidim/proposals/collaborative_drafts/_show.html.erb +128 -0
  100. data/app/views/{v0.22 → v0.24}/layouts/decidim/_head.html.erb +4 -2
  101. data/app/views/{v0.22 → v0.24}/layouts/decidim/admin/_header.html.erb +3 -2
  102. data/config/locales/ca.yml +75 -3
  103. data/config/locales/cs.yml +75 -3
  104. data/config/locales/en.yml +104 -11
  105. data/config/locales/es.yml +74 -2
  106. data/config/locales/eu.yml +76 -4
  107. data/config/locales/fr.yml +214 -142
  108. data/config/locales/it.yml +284 -0
  109. data/config/locales/ja.yml +284 -0
  110. data/config/locales/nl.yml +208 -136
  111. data/config/locales/sv.yml +109 -37
  112. data/db/migrate/20210628150825_change_awesome_config_var_type.rb +12 -0
  113. data/lib/decidim/decidim_awesome/admin_engine.rb +16 -4
  114. data/lib/decidim/decidim_awesome/awesome_helpers.rb +17 -10
  115. data/lib/decidim/decidim_awesome/checksums.yml +19 -9
  116. data/lib/decidim/decidim_awesome/config.rb +54 -9
  117. data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +27 -21
  118. data/lib/decidim/decidim_awesome/custom_fields.rb +94 -0
  119. data/lib/decidim/decidim_awesome/engine.rb +64 -8
  120. data/lib/decidim/decidim_awesome/iframe_component/component.rb +1 -1
  121. data/lib/decidim/decidim_awesome/map_component/component.rb +8 -2
  122. data/lib/decidim/decidim_awesome/menu_hacker.rb +17 -15
  123. data/lib/decidim/decidim_awesome/system_checker.rb +1 -1
  124. data/lib/decidim/decidim_awesome/test/shared_examples/box_label_editor.rb +116 -0
  125. data/lib/decidim/decidim_awesome/test/shared_examples/current_config_examples.rb +143 -0
  126. data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +4 -0
  127. data/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +428 -0
  128. data/lib/decidim/decidim_awesome/version.rb +2 -2
  129. data/lib/decidim/decidim_awesome.rb +41 -8
  130. data/vendor/assets/javascripts/codemirror.js +9801 -0
  131. data/vendor/assets/javascripts/delta.min.js +405 -0
  132. data/vendor/assets/javascripts/delta.min.js.map +1 -0
  133. data/vendor/assets/javascripts/europa.min.js +4 -0
  134. data/vendor/assets/javascripts/form-builder.min.js +19 -0
  135. data/vendor/assets/javascripts/form-render.min.js +19 -0
  136. data/vendor/assets/javascripts/inscrybmde.min.js +1 -1
  137. data/vendor/assets/javascripts/jquery-ui.min.js +13 -0
  138. data/vendor/assets/javascripts/jquery.truncate.js +105 -0
  139. data/vendor/assets/javascripts/keymap/sublime.js +720 -0
  140. data/vendor/assets/javascripts/mode/css/css.js +864 -0
  141. data/vendor/assets/javascripts/select2.js +6147 -0
  142. data/vendor/assets/langs/en-US.lang +110 -0
  143. data/vendor/assets/stylesheets/codemirror.css +350 -0
  144. data/vendor/assets/stylesheets/inscrybmde.min.scss +194 -0
  145. data/vendor/assets/stylesheets/jquery-ui.min.css +7 -0
  146. data/vendor/assets/stylesheets/select2-foundation-theme.css +249 -0
  147. data/vendor/assets/stylesheets/select2.css +515 -0
  148. metadata +101 -34
  149. data/app/assets/images/decidim/decidim_awesome/loading.gif +0 -0
  150. data/app/assets/javascripts/decidim/decidim_awesome/admin.js +0 -2
  151. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_map.js.es6 +0 -225
  152. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_proposals.js.es6 +0 -82
  153. data/app/assets/javascripts/decidim/decidim_awesome/editors/markdown_view.js.es6 +0 -12
  154. data/app/assets/stylesheets/decidim/decidim_awesome/application.scss +0 -8
  155. data/app/assets/stylesheets/decidim/decidim_awesome/editors/markdown_view.scss +0 -27
  156. data/app/awesome_overrides/presenters/decidim/proposals/proposal_presenter_override.rb +0 -64
  157. data/lib/decidim/decidim_awesome/content_renderers/markdown_renderer.rb +0 -18
  158. data/lib/decidim/decidim_awesome/content_renderers.rb +0 -9
  159. data/vendor/assets/stylesheets/inscrybmde.min.css +0 -8
@@ -0,0 +1,27 @@
1
+ .awesome-edit-config{
2
+ .scoped_styles_container,
3
+ .proposal_custom_fields_container{
4
+ .form-error{
5
+ margin: 0;
6
+ }
7
+
8
+ >.CodeMirror{
9
+ border-top-left-radius: 5px;
10
+ border-top-right-radius: 5px;
11
+ border-top: .5em solid #e0e0e0;
12
+ border-right: .5em solid #e0e0e0;
13
+ border-bottom: .5em solid #e0e0e0;
14
+ min-height: 6em;
15
+ height: auto;
16
+ max-height: 40em;
17
+ resize: vertical;
18
+ overflow: vertical !important;
19
+
20
+ >.CodeMirror-scroll{
21
+ >.CodeMirror-gutters{
22
+ background: #e0e0e0;
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
@@ -28,10 +28,22 @@
28
28
  &.component_id{
29
29
  background-color: #ee449c;
30
30
  }
31
+
32
+ &.constraint{
33
+ &-none{
34
+ background-color: #ff3000;
35
+ }
36
+ }
31
37
  }
32
38
 
33
39
  a{
34
40
  margin-left: 1rem;
35
41
  }
42
+
43
+ &.inactive{
44
+ .label:not(.constraint-none){
45
+ filter: saturate(10%);
46
+ }
47
+ }
36
48
  }
37
49
  }
@@ -0,0 +1,66 @@
1
+ // hide custom-fields inside tabs, an extra (unique) container is used instead
2
+ .tabs-content {
3
+ .proposal_custom_field {
4
+ display: none;
5
+ }
6
+ }
7
+
8
+ .proposal_custom_fields{
9
+ &_editor{
10
+ background-color: #e0e0e0;
11
+ padding: .5em .5em 1em;
12
+ border-top-left-radius: 5px;
13
+ border-top-right-radius: 5px;
14
+
15
+ label{
16
+ display: inline-block;
17
+ max-width: 100%;
18
+ font-weight: 600 !important;
19
+ }
20
+
21
+ li[type]{
22
+ display: inherit;
23
+ width: 100%;
24
+ height: inherit;
25
+ margin: inherit;
26
+ border: inherit;
27
+ box-shadow: inherit;
28
+ font-size: inherit;
29
+ font-weight: inherit;
30
+ line-height: inherit;
31
+ color: inherit;
32
+ }
33
+
34
+ .form-group{
35
+ background-color: inherit;
36
+ margin: 0;
37
+ padding: 0;
38
+ }
39
+
40
+ .form-wrap.form-builder .form-group{
41
+ margin-bottom: 10px !important;
42
+ }
43
+
44
+ .form-control{
45
+ color: #555;
46
+ background-color: #fff;
47
+ border: 1px solid #ccc;
48
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
49
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
50
+ margin: 0;
51
+ padding: 6px 12px;
52
+ }
53
+ }
54
+
55
+ &_container{
56
+ .constraints-editor{
57
+ border-top-left-radius: 0;
58
+ border-top-right-radius: 0;
59
+ }
60
+ }
61
+ }
62
+
63
+ // Custom fields tunning
64
+ .rendered-form .form-control.ql-container{
65
+ height: auto !important;
66
+ }
@@ -0,0 +1,35 @@
1
+ @import "select2";
2
+ @import "select2-foundation-theme";
3
+
4
+ .multiusers-select-container{
5
+ form label{
6
+ margin-bottom: 1rem;
7
+ }
8
+
9
+ .switch-paddle{
10
+ display: inline-block;
11
+ vertical-align: middle;
12
+ margin-right: 1em;
13
+ }
14
+ }
15
+
16
+ .select2-container--foundation .select2-selection--multiple .select2-selection__choice{
17
+ display: inline-block;
18
+ float: none;
19
+ font-weight: normal;
20
+
21
+ .is-admin{
22
+ &::before{
23
+ content: '⛔';
24
+ display: inline-block;
25
+ margin-right: .3em;
26
+ }
27
+
28
+ text-decoration: line-through;
29
+ color: #bbb;
30
+ }
31
+ }
32
+
33
+ .form-conversations-submit{
34
+ margin-top: 2rem;
35
+ }
@@ -1,4 +1,5 @@
1
1
  //= require github.min
2
+ //= require codemirror
2
3
  //= require inscrybmde.min
3
4
  //= require_self
4
5
 
@@ -6,6 +7,10 @@
6
7
  @import "decidim/utils/settings";
7
8
  @import "decidim/utils/mixins";
8
9
  @import "./admin/constraints";
10
+ @import "./admin/codemirror";
11
+ @import "./admin/user_picker";
12
+ @import "./admin/custom_fields";
13
+ @import "./admin/auto_edits";
9
14
  @import "./editors/quill_editor";
10
15
  @import "./editors/markdown_editor";
11
16
 
@@ -17,7 +22,7 @@
17
22
  font-size: .8em;
18
23
  }
19
24
 
20
- .decidim_awesome {
25
+ .decidim_awesome{
21
26
  &.modal{
22
27
  .spinner{
23
28
  @include spinner(25px, #aaa, var(--secondary), 800ms);
@@ -33,17 +38,27 @@
33
38
  }
34
39
  }
35
40
 
36
- &-form {
41
+ &-form{
37
42
  margin-bottom: 2em;
38
43
  border-bottom: 1px solid #999;
39
44
  padding-bottom: 1.5em;
45
+ .help-text {
46
+ white-space: pre-wrap;
47
+ }
40
48
  }
41
- &-form:last-child {
49
+
50
+ &-form:last-child{
42
51
  border-bottom: none;
43
52
  padding-bottom: 0;
44
53
  }
45
54
  }
46
55
 
47
- tbody tr.menu_hack-addition {
56
+ tbody tr.menu_hack-addition{
48
57
  background: rgb(255, 248, 222);
49
58
  }
59
+
60
+ .secondary-nav {
61
+ li .icon {
62
+ margin-right: 0.5rem;
63
+ }
64
+ }
@@ -0,0 +1,22 @@
1
+ //= require github.min
2
+ //= require inscrybmde.min
3
+ //= require_self
4
+
5
+ @import "./editors/quill_editor";
6
+ @import "./editors/markdown_editor";
7
+ @import "./forms/autosave";
8
+
9
+ .decidim_awesome-custom_fields{
10
+ dd{
11
+ >div:last-child{
12
+ margin-bottom: 1rem;
13
+ }
14
+
15
+ &[name="textarea"]{
16
+ >div > p{
17
+ margin-top: 1rem;
18
+ margin-bottom: 0;
19
+ }
20
+ }
21
+ }
22
+ }
@@ -7,3 +7,12 @@
7
7
  .leaflet-default-icon-path {
8
8
  background-image: url(<%= asset_path "marker-icon.png" %>);
9
9
  }
10
+ .leaflet-container {
11
+ font: inherit;
12
+
13
+ #bodyContent .description {
14
+ img, iframe {
15
+ max-height: 5em;
16
+ }
17
+ }
18
+ }
@@ -1,4 +1,3 @@
1
- // = require decidim/map
2
1
  @import "decidim/decidim_awesome/awesome_map/leaflet";
3
2
 
4
3
  // Increase z-index for components menu otherwise map hides menu extensions
@@ -63,4 +62,99 @@
63
62
  border: 2px solid #bbb;
64
63
  border-radius: 4px;
65
64
  }
65
+
66
+ .awesome_map-title-control{
67
+ display: block;
68
+ cursor: pointer;
69
+
70
+ &::after{
71
+ content: '';
72
+ width: 0;
73
+ height: 0;
74
+ border-left: 5px solid transparent;
75
+ border-right: 5px solid transparent;
76
+ border-top: 5px solid black;
77
+ border-bottom: 0;
78
+ display: inline-block;
79
+ margin: 0 0 2px 5px;
80
+ }
81
+ }
82
+
83
+ .active{
84
+ .awesome_map-title-control::after{
85
+ border-top: 0;
86
+ border-bottom: 5px solid black;
87
+ }
88
+ }
89
+
90
+ #awesome_map-{
91
+ &categories-control{
92
+ display: none;
93
+
94
+ label{
95
+ margin-left: .5rem;
96
+ display: none;
97
+
98
+ i{
99
+ display: inline-block;
100
+ width: .8rem;
101
+ height: .8rem;
102
+ border-radius: 50%;
103
+ background-color: var(-- primary);
104
+ }
105
+
106
+ &.subcategory{
107
+ padding-left: 1em;
108
+ }
109
+ }
110
+
111
+ .categories-container{
112
+ display: none;
113
+ }
114
+
115
+ &.active{
116
+ .categories-container{
117
+ display: block;
118
+ }
119
+ }
120
+ }
121
+
122
+ &hashtags-control{
123
+ display: none;
124
+
125
+ label{
126
+ display: inline-block;
127
+ line-height: 1;
128
+ background-color: #f0f0f0;
129
+ border-radius: 5px;
130
+ margin: .5rem;
131
+ padding: .5rem;
132
+
133
+ span{
134
+ margin: 0 .5rem 2px 0;
135
+ }
136
+
137
+ input{
138
+ vertical-align: top;
139
+ }
140
+ }
141
+
142
+ .awesome_map-toggle_all_tags{
143
+ margin: .5rem 1rem;
144
+ font-size: .875rem;
145
+ }
146
+
147
+ .hashtags-container,
148
+ .awesome_map-toggle_all_tags{
149
+ display: none;
150
+ }
151
+
152
+ &.active{
153
+ .hashtags-container,
154
+ .awesome_map-toggle_all_tags{
155
+ display: block;
156
+ }
157
+ }
158
+ }
159
+ }
66
160
  }
@@ -1,6 +1,6 @@
1
1
  // editor tweaks
2
2
  //
3
- .CodeMirror{
3
+ .editor .CodeMirror{
4
4
  color: #333;
5
5
  font-weight: normal;
6
6
  line-height: 1.45;
@@ -1,7 +1,22 @@
1
+ @import "decidim/variables";
2
+ @import "decidim/utils/settings";
3
+ @import "decidim/utils/mixins";
4
+
1
5
  .editor-loading{
2
- background: url(loading.gif) no-repeat center right;
6
+ &::before{
7
+ @include spinner(25px, $medium-gray, var(--primary), 800ms);
8
+
9
+ float: right;
10
+ content: "";
11
+ vertical-align: middle;
12
+ }
3
13
  }
4
14
 
5
15
  .editor-container{
6
16
  overflow: hidden;
7
17
  }
18
+
19
+ .editor.hashtags__container>p.help-text {
20
+ margin-top: -1rem;
21
+ margin-bottom: 1.5rem;
22
+ }
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Recreate validations to take into account custom fields and ignore the length limit in proposals
4
+ Decidim::Proposals::ProposalWizardCreateStepForm.class_eval do
5
+ clear_validators!
6
+
7
+ validates :title, presence: true, etiquette: true
8
+ validates :title, length: { in: 15..150 }
9
+ validates :body, presence: true, etiquette: true, unless: ->(form) { form.override_validations? }
10
+ validates :body, proposal_length: {
11
+ minimum: 15,
12
+ maximum: ->(record) { record.override_validations? ? 0 : record.component.settings.proposal_length }
13
+ }
14
+
15
+ validate :body_is_not_bare_template, unless: ->(form) { form.override_validations? }
16
+
17
+ def override_validations?
18
+ return false if context.current_component.settings.participatory_texts_enabled
19
+
20
+ custom_fields.present?
21
+ end
22
+
23
+ def custom_fields
24
+ awesome_config = Decidim::DecidimAwesome::Config.new(context.current_organization)
25
+ awesome_config.context_from_component(context.current_component)
26
+ awesome_config.collect_sub_configs_values("proposal_custom_field")
27
+ end
28
+ end
@@ -2,16 +2,24 @@
2
2
 
3
3
  Decidim::MenuPresenter.class_eval do
4
4
  def evaluated_menu
5
- @evaluated_menu ||= if Decidim::DecidimAwesome.config.send(@name) == :disabled
5
+ @evaluated_menu ||= if awesome_override?
6
+ Decidim::DecidimAwesome::MenuHacker.new(@name, @view)
7
+ else
6
8
  begin
7
9
  menu = Decidim::Menu.new(@name)
8
10
  menu.build_for(@view)
9
11
  menu
10
12
  end
11
- else
12
- Decidim::DecidimAwesome::MenuHacker.new(@name, @view)
13
13
  end
14
14
  end
15
+
16
+ private
17
+
18
+ def awesome_override?
19
+ return false unless Decidim::DecidimAwesome.config.has_key?(@name)
20
+
21
+ Decidim::DecidimAwesome.config.send(@name) != :disabled
22
+ end
15
23
  end
16
24
 
17
25
  Decidim::MenuItemPresenter.class_eval do
@@ -0,0 +1,74 @@
1
+ <section class="wrapper-home map-block home-section">
2
+ <div class="row">
3
+
4
+ <%= section_title %></h3>
5
+
6
+ <div class="row">
7
+ <div class="columns medium-12">
8
+ <%= awesome_map_for global_map_components do %>
9
+ <script id="marker-proposal-popup" type="text/x-jsrender">
10
+ <div class="map-info__content">
11
+ <h3>{{>title.translation}}</h3>
12
+ <div id="bodyContent">
13
+ <div class="description">{{:body.translation}}</div>
14
+ <div class="map__date-adress">
15
+ <div class="address card__extra">
16
+ <div class="address__icon">{{:icon}}</div>
17
+ <div class="address__details">
18
+ <span>{{>address}}</span><br>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ <div class="map-info__button">
23
+ <a href="{{>link}}" class="button button--sc">
24
+ <%= t("view_proposal", scope: "decidim.decidim_awesome.map_component.map.show") %>
25
+ </a>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </script>
30
+
31
+ <script id="marker-meeting-popup" type="text/x-jsrender">
32
+ <div class="map-info__content">
33
+ <h3>{{>title.translation}}</h3>
34
+ <div id="bodyContent">
35
+ <div class="description">{{:description.translation}}</div>
36
+ <div class="map__date-adress">
37
+ <div class="card__datetime">
38
+ <div class="card__datetime__date">
39
+ {{>startTimeDay}} <span class="card__datetime__month">{{>startTimeMonth}} {{>startTimeYear}}</span>
40
+ </div>
41
+ <div class="card__datetime__time">{{>starTime}}</div>
42
+ </div>
43
+ <div class="address card__extra">
44
+ <div class="address__icon">{{:icon}}</div>
45
+ <div class="address__details">
46
+ <strong>{{:location.translation}}</strong><br>
47
+ <span>{{>address}}</span><br>
48
+ <span>{{:locationHints.translation}}</span>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ <div class="map-info__button">
53
+ <a href="{{>link}}" class="button button--sc">
54
+ <%= t("decidim.meetings.meetings_map.view_meeting") %>
55
+ </a>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </script>
60
+
61
+ <style type="text/css">
62
+ #awesome-map .leaflet-container {
63
+ height: <%= model.settings.map_height %>px;
64
+ }
65
+ </style>
66
+ <script>
67
+ window.AwesomeMap = window.AwesomeMap || {};
68
+ window.AwesomeMap.categories = <%= all_categories.to_json.html_safe %>;
69
+ </script>
70
+ <% end %>
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </section>
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module ContentBlocks
6
+ class MapCell < Decidim::ViewModel
7
+ include Decidim::DecidimAwesome::MapHelper
8
+ include Decidim::CardHelper
9
+
10
+ delegate :snippets, to: :controller
11
+ delegate :settings, to: :model
12
+ alias current_settings settings
13
+
14
+ def hide_controls
15
+ true
16
+ end
17
+
18
+ def all_categories
19
+ return if @all_categories.present?
20
+
21
+ @category_ids ||= Decidim::Category.pluck(:id, :decidim_participatory_space_type, :decidim_participatory_space_id).select do |category|
22
+ _id, space_type, space_id = category
23
+ space = space_type.constantize.find(space_id)
24
+ space.organization == current_organization
25
+ end.map(&:first)
26
+
27
+ @all_categories ||= Decidim::Category.where(id: @category_ids)
28
+ end
29
+
30
+ def global_map_components
31
+ @global_map_components ||= Decidim::Component.where(manifest_name: [:meetings, :proposals]).published.filter do |component|
32
+ case component.manifest.name
33
+ when :meetings
34
+ true
35
+ when :proposals
36
+ component.settings.geocoding_enabled
37
+ else
38
+ false
39
+ end
40
+ end
41
+ end
42
+
43
+ def section_title
44
+ return if model.settings.title.blank?
45
+ return if model.settings.title.values.join.blank?
46
+
47
+ content_tag :h3, class: "section-heading" do
48
+ translated_attribute(model.settings.title)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,61 @@
1
+ <% form.fields_for :settings, form.object.settings do |settings_fields| %>
2
+ <h3><%= t("text_settings", scope: i18n_scope) %></h3>
3
+
4
+ <div class="row">
5
+ <%= settings_fields.translated :text_field, :title, label: t("title", scope: i18n_scope) %>
6
+ </div>
7
+
8
+ <h3 class="mt-m"><%= t("map_settings", scope: i18n_scope) %></h3>
9
+
10
+ <div class="row two-buttons">
11
+ <div>
12
+ <%= settings_fields.number_field :truncate, label: t("truncate", scope: i18n_scope) %>
13
+ </div>
14
+ <div>
15
+ <%= settings_fields.number_field :map_height, label: t("map_height", scope: i18n_scope) %>
16
+ </div>
17
+ </div>
18
+
19
+ <div class="row two-buttons">
20
+ <div>
21
+ <%= settings_fields.text_field :map_center, label: t("map_center", scope: i18n_scope) %>
22
+ <%= t("map_center_help", scope: i18n_scope) %>
23
+ </div>
24
+ <div><%= settings_fields.number_field :map_zoom, label: t("map_zoom", scope: i18n_scope) %>
25
+ <%= t("map_zoom_help", scope: i18n_scope) %>
26
+ </div>
27
+ </div>
28
+ <div class="row two-buttons">
29
+ <div>
30
+ <%= settings_fields.check_box :menu_amendments, label: t("menu_amendments", scope: i18n_scope) %>
31
+ </div>
32
+ <div><%= settings_fields.check_box :menu_meetings, label: t("menu_meetings", scope: i18n_scope) %>
33
+ </div>
34
+ </div>
35
+ <div class="row two-buttons">
36
+ <div><%= settings_fields.check_box :show_not_answered, label: t("show_not_answered", scope: i18n_scope) %></div>
37
+ <div><%= settings_fields.check_box :show_accepted, label: t("show_accepted", scope: i18n_scope) %>
38
+ </div>
39
+ </div>
40
+ <div class="row two-buttons">
41
+ <div><%= settings_fields.check_box :show_withdrawn, label: t("show_withdrawn", scope: i18n_scope) %></div>
42
+ <div><%= settings_fields.check_box :show_evaluating, label: t("show_evaluating", scope: i18n_scope) %>
43
+ </div>
44
+ </div>
45
+ <div class="row">
46
+ <%= settings_fields.check_box :show_rejected, label: t("show_rejected", scope: i18n_scope) %>
47
+ </div>
48
+ <% end %>
49
+
50
+ <style>
51
+ .two-buttons {
52
+ width: 100%;
53
+ display: flex;
54
+ justify-content: center;
55
+ align-items: center;
56
+ gap: 1em;
57
+ }
58
+ .two-buttons > div {
59
+ width: 50%;
60
+ }
61
+ </style>
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module ContentBlocks
6
+ class MapFormCell < Decidim::ViewModel
7
+ alias form model
8
+
9
+ def content_block
10
+ options[:content_block]
11
+ end
12
+
13
+ def i18n_scope
14
+ "decidim.decidim_awesome.content_blocks.map"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module Admin
6
+ module NeedsConstraintHelpers
7
+ private
8
+
9
+ def create_constraint_never(var)
10
+ settings = { "participatory_space_manifest" => "none" }
11
+ subconfig = AwesomeConfig.find_or_initialize_by(var: "#{var}_#{@ident}", organization: @organization)
12
+ @constraint = ConfigConstraint.create!(
13
+ awesome_config: subconfig,
14
+ settings: settings
15
+ )
16
+ end
17
+
18
+ def constraint_can_be_destroyed?(constraint)
19
+ return true if constraint.awesome_config.blank?
20
+ return true if constraint.awesome_config.constraints.count > 1
21
+
22
+ case constraint.awesome_config.var.to_s
23
+ when /^proposal_custom_field/
24
+ false
25
+ else
26
+ true
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end