decidim-decidim_awesome 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -6
  3. data/app/assets/stylesheets/decidim/decidim_awesome/admin.scss +4 -0
  4. data/app/awesome_overrides/presenters/decidim/menu_presenter_override.rb +31 -0
  5. data/app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb +51 -0
  6. data/app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb +47 -0
  7. data/app/commands/decidim/decidim_awesome/admin/update_config.rb +1 -1
  8. data/app/commands/decidim/decidim_awesome/admin/update_menu_hack.rb +47 -0
  9. data/app/controllers/decidim/decidim_awesome/admin/application_controller.rb +4 -3
  10. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +9 -0
  11. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +13 -0
  12. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +116 -0
  13. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +5 -7
  14. data/app/forms/decidim/decidim_awesome/admin/constraint_form.rb +0 -2
  15. data/app/forms/decidim/decidim_awesome/admin/intergram_form.rb +0 -2
  16. data/app/forms/decidim/decidim_awesome/admin/menu_form.rb +39 -0
  17. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +5 -1
  18. data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +19 -0
  19. data/app/permissions/decidim/decidim_awesome/permissions.rb +2 -0
  20. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +0 -1
  21. data/app/views/decidim/decidim_awesome/admin/menu_hacks/_form.html.erb +7 -0
  22. data/app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb +13 -0
  23. data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +44 -0
  24. data/app/views/decidim/decidim_awesome/admin/menu_hacks/new.html.erb +13 -0
  25. data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +5 -0
  26. data/config/locales/ca.yml +45 -4
  27. data/config/locales/cs.yml +46 -5
  28. data/config/locales/en.yml +47 -4
  29. data/config/locales/es.yml +45 -4
  30. data/config/locales/eu.yml +45 -4
  31. data/config/locales/fr.yml +45 -4
  32. data/config/locales/nl.yml +212 -0
  33. data/config/locales/sv.yml +45 -4
  34. data/lib/decidim/decidim_awesome.rb +15 -0
  35. data/lib/decidim/decidim_awesome/admin_engine.rb +1 -0
  36. data/lib/decidim/decidim_awesome/checksums.yml +6 -0
  37. data/lib/decidim/decidim_awesome/engine.rb +1 -1
  38. data/lib/decidim/decidim_awesome/menu_hacker.rb +88 -0
  39. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +4 -2
  40. data/lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb +71 -0
  41. data/lib/decidim/decidim_awesome/version.rb +1 -1
  42. metadata +16 -2
@@ -3,8 +3,6 @@
3
3
  module Decidim
4
4
  module DecidimAwesome
5
5
  module Admin
6
- # A form object used to configure the endpoint.
7
- #
8
6
  class ConfigForm < Decidim::Form
9
7
  attribute :allow_images_in_full_editor, Boolean
10
8
  attribute :allow_images_in_small_editor, Boolean
@@ -13,18 +11,18 @@ module Decidim
13
11
  attribute :allow_images_in_markdown_editor, Boolean
14
12
  attribute :auto_save_forms, Boolean
15
13
  attribute :scoped_styles, Hash
14
+ attribute :menu, Array[MenuForm]
16
15
  attribute :intergram_for_admins, Boolean
17
16
  attribute :intergram_for_admins_settings, IntergramForm
18
17
  attribute :intergram_for_public, Boolean
19
18
  attribute :intergram_for_public_settings, IntergramForm
20
19
 
21
- # convert to nil anything not specified in the params (UpdateConfig command ignores nil entries)
20
+ # collect all keys anything not specified in the params (UpdateConfig command ignores it)
21
+ attr_accessor :valid_keys
22
+
22
23
  def self.from_params(params, additional_params = {})
23
24
  instance = super(params, additional_params)
24
- nillable_keys = instance.attributes.keys - params.keys.map(&:to_sym)
25
- nillable_keys.each do |key|
26
- instance.send("#{key}=", nil)
27
- end
25
+ instance.valid_keys = params.keys.map(&:to_sym) || []
28
26
  instance
29
27
  end
30
28
  end
@@ -3,8 +3,6 @@
3
3
  module Decidim
4
4
  module DecidimAwesome
5
5
  module Admin
6
- # A form object used to configure the endpoint.
7
- #
8
6
  class ConstraintForm < Decidim::Form
9
7
  attribute :id, Integer
10
8
  attribute :participatory_space_manifest, String
@@ -3,8 +3,6 @@
3
3
  module Decidim
4
4
  module DecidimAwesome
5
5
  module Admin
6
- # A form object used to configure the endpoint.
7
- #
8
6
  class IntergramForm < Decidim::Form
9
7
  attribute :chat_id, String
10
8
  attribute :require_login, Boolean
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module Admin
6
+ class MenuForm < Decidim::Form
7
+ include Decidim::TranslatableAttributes
8
+ VISIBILITY_STATES = %w(default hidden logged non_logged).freeze
9
+
10
+ translatable_attribute :raw_label, String
11
+ attribute :url, String
12
+ attribute :position, Integer
13
+ attribute :target, String
14
+ attribute :visibility, String
15
+
16
+ validates :raw_label, translatable_presence: true
17
+ validates :url, presence: true
18
+ validates :position, numericality: { greater_than: 0 }
19
+ validates :visibility, inclusion: { in: VISIBILITY_STATES }
20
+ validates :target, inclusion: { in: ["", "_blank"] }
21
+
22
+ # remove query string from native menu element (to avoid interactions with the locale in the generated url)
23
+ def map_model(model)
24
+ self.url = Addressable::URI.parse(model.url).path if model.native?
25
+ end
26
+
27
+ def to_params
28
+ {
29
+ label: raw_label,
30
+ position: position,
31
+ url: url,
32
+ target: target,
33
+ visibility: visibility
34
+ }
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -18,7 +18,11 @@ module Decidim
18
18
  end
19
19
 
20
20
  def config_enabled?(var)
21
- return DecidimAwesome.config.send(var) != :disabled unless var.is_a? Array
21
+ unless var.is_a?(Array)
22
+ return false unless DecidimAwesome.config.has_key?(var.to_sym)
23
+
24
+ return DecidimAwesome.config.send(var) != :disabled
25
+ end
22
26
 
23
27
  var.detect { |v| DecidimAwesome.config.send(v) != :disabled }
24
28
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module Admin
6
+ class Permissions < Decidim::DefaultPermissions
7
+ include ConfigConstraintsHelpers
8
+
9
+ def permissions
10
+ return permission_action if permission_action.scope != :admin
11
+
12
+ toggle_allow(config_enabled?(permission_action.subject)) if permission_action.action == :edit_config
13
+
14
+ permission_action
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -6,6 +6,8 @@ module Decidim
6
6
  def permissions
7
7
  return permission_action unless user
8
8
 
9
+ return Decidim::DecidimAwesome::Admin::Permissions.new(user, permission_action, context).permissions if permission_action.scope == :admin
10
+
9
11
  editor_image_action?
10
12
 
11
13
  permission_action
@@ -24,5 +24,4 @@
24
24
  <% end %>
25
25
  </div>
26
26
 
27
-
28
27
  <%= javascript_include_tag "decidim/decidim_awesome/admin/form_exit_warn" %>
@@ -0,0 +1,7 @@
1
+ <div>
2
+ <%= form.translated :text_field, :raw_label, help_text: t(".label_help") %>
3
+ <%= form.text_field :url , readonly: form.object.url.present? %>
4
+ <%= form.text_field :position %>
5
+ <%= form.select :target, target_options %>
6
+ <%= form.select :visibility, visibility_options %>
7
+ </div>
@@ -0,0 +1,13 @@
1
+ <%= decidim_form_for(@form, url: menu_hack_path, method: :patch) do |f| %>
2
+ <div class="card">
3
+ <div class="card-divider">
4
+ <h2 class="card-title"><%= t ".title" %></h2>
5
+ </div>
6
+ <div class="card-section">
7
+ <%= render partial: "form", object: f %>
8
+ </div>
9
+ </div>
10
+ <div class="button--double form-general-submit">
11
+ <%= f.submit t(".save") %>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,44 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title">
4
+ <%= t(".title") %>
5
+ <%= link_to t(".new"), decidim_admin_decidim_awesome.new_menu_hack_path, class: "button tiny button--title" %>
6
+ </h2>
7
+ </div>
8
+ <div class="card-section">
9
+ <div class="row column decidim_awesome-form">
10
+ <table class="table-list">
11
+ <thead>
12
+ <tr>
13
+ <th><%= t("menu.raw_label", scope: "activemodel.attributes") %></th>
14
+ <th><%= t("menu.url", scope: "activemodel.attributes") %></th>
15
+ <th><%= t("menu.position", scope: "activemodel.attributes") %></th>
16
+ <th><%= t("menu.target", scope: "activemodel.attributes") %></th>
17
+ <th><%= t("menu.visibility", scope: "activemodel.attributes") %></th>
18
+ <th class="actions"></th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <% current_items.each do |item| %>
23
+ <tr<%= " class=menu_hack-addition" if item.try(:overrided?) == false %>>
24
+ <td><%= item.label %></td>
25
+ <td><%= item.url %></td>
26
+ <td><%= item.position %></td>
27
+ <td><%= target_options.invert[item.try(:target)||""] %></td>
28
+ <td><%= visibility_options.invert[item.try(:visibility)] %></td>
29
+ <td class="table-list__actions">
30
+ <%= icon_link_to "pencil", decidim_admin_decidim_awesome.edit_menu_hack_path(md5(item.url)), t(".edit"), class: "action-icon--edit" %>
31
+ <% if item.respond_to?(:overrided?) %>
32
+ <%= icon_link_to "circle-x", decidim_admin_decidim_awesome.menu_hack_path(md5(item.url)), t(".remove#{'_hack' if item.overrided?}"), method: :delete, class: "action-icon--remove", data: { confirm: t(".confirm_destroy") } %>
33
+ <% else %>
34
+ <span class="action-icon">
35
+ <%= icon "circle-x", class: "action-icon action-icon--disabled", role: "img" %>
36
+ </span>
37
+ <% end %>
38
+ </td>
39
+ </tr>
40
+ <% end %>
41
+ </tbody>
42
+ </table>
43
+ </div>
44
+ </div>
@@ -0,0 +1,13 @@
1
+ <%= decidim_form_for(@form, url: menu_hacks_path) do |f| %>
2
+ <div class="card">
3
+ <div class="card-divider">
4
+ <h2 class="card-title"><%= t ".title" %></h2>
5
+ </div>
6
+ <div class="card-section">
7
+ <%= render partial: "form", object: f %>
8
+ </div>
9
+ </div>
10
+ <div class="button--double form-general-submit">
11
+ <%= f.submit t(".save") %>
12
+ </div>
13
+ <% end %>
@@ -31,6 +31,11 @@
31
31
  <%= aria_selected_link_to I18n.t("menu.livechat", scope: "decidim.decidim_awesome.admin"), decidim_admin_decidim_awesome.config_path(:livechat) %>
32
32
  </li>
33
33
  <% end %>
34
+ <% if config_enabled? :menu %>
35
+ <li <% if is_active_link?(decidim_admin_decidim_awesome.menu_hacks_path) %> class="is-active" <% end %>>
36
+ <%= aria_selected_link_to I18n.t("menu.menu_hacks", scope: "decidim.decidim_awesome.admin"), decidim_admin_decidim_awesome.menu_hacks_path %>
37
+ </li>
38
+ <% end %>
34
39
  <li <% if is_active_link?(decidim_admin_decidim_awesome.checks_path) %> class="is-active" <% end %>>
35
40
  <%= aria_selected_link_to I18n.t("menu.checks", scope: "decidim.decidim_awesome.admin"), decidim_admin_decidim_awesome.checks_path %>
36
41
  </li>
@@ -24,6 +24,12 @@ ca:
24
24
  component_manifest: Només en components de tipus
25
25
  participatory_space_manifest: Aplica-ho a espais participatius de tipus
26
26
  participatory_space_slug: Només a
27
+ menu:
28
+ position: Posició
29
+ raw_label: Etiqueta
30
+ target: Obre a
31
+ url: URL
32
+ visibility: Visibilitat
27
33
  decidim:
28
34
  admin:
29
35
  menu:
@@ -78,10 +84,10 @@ ca:
78
84
  title: 'S''aplica només en aquests casos:'
79
85
  create_scoped_style:
80
86
  error: Error en crear una nova caixa CSS! %{error}
81
- success: Caixa CSS %{key} creada correctament!
87
+ success: Caixa CSS %{key} creada correctament
82
88
  destroy_scoped_style:
83
89
  error: Error en eliminar una caixa CSS! %{error}
84
- success: Caixa CSS %{key} eliminada correctament!
90
+ success: Caixa CSS %{key} eliminada correctament
85
91
  experimental: Opcions experimentals
86
92
  form:
87
93
  help:
@@ -107,7 +113,7 @@ ca:
107
113
  system: A tot arreu excepte espais participatius
108
114
  update:
109
115
  error: Error actualitzant la configuració! %{error}
110
- success: Configuració actualitzada correctament!
116
+ success: Configuració actualitzada correctament
111
117
  constraints:
112
118
  create:
113
119
  error: Error creant una nova restricció
@@ -132,9 +138,44 @@ ca:
132
138
  checks: Compatibilitat de sistema
133
139
  editors: Modificacions als editors
134
140
  livechat: Xat en directe
141
+ menu_hacks: Retocs al menú
135
142
  proposals: Modificacions a propostes
136
143
  styles: Estils personalitzats
137
144
  surveys: Formularis i enquestes
145
+ menu_hacks:
146
+ create:
147
+ error: 'Error en crear un nou ítem de menú: %{error}'
148
+ success: Ítem de menú creat correctament
149
+ destroy:
150
+ error: 'Error en eliminar l''ítem de menú: %{error}'
151
+ success: Ítem de menú eliminat correctament
152
+ edit:
153
+ save: Desar
154
+ title: Editar ítem de menú
155
+ form:
156
+ label_help: Les traduccions no es detecten automàticament, asegura't de completar tots els camps!
157
+ target:
158
+ blank: Nova finestra
159
+ self: La mateixa finestra
160
+ visibility:
161
+ default: Visible
162
+ hidden: Sempre ocult
163
+ logged: Només visible per usuàries loguejades
164
+ non_logged: Només visible per usuàries no loguejades
165
+ index:
166
+ confirm_destroy: Estàs segura que vols eliminar aquest retoc?
167
+ edit: Editar
168
+ new: Nou ítem
169
+ remove: Eliminar addició
170
+ remove_hack: Eliminar retoc
171
+ title: Menú principal
172
+ new:
173
+ save: Desar
174
+ title: Nou ítem de menú
175
+ update:
176
+ error: 'Error en actualitzar l''ítem de menú: %{error}'
177
+ success: Ítem de menú actualitzat correctament
178
+ url_exists: Aquesta URL ha estat configurada en un altre ítem de menú, si us plau edita'l en comptes de crear-ne un de nou.
138
179
  config:
139
180
  intergram:
140
181
  auto_no_response: Sembla que no hi ha ningú disponible per a respondre en aquest moment. Si us plau, indica'ns com et podem contactar i ens comunicarem amb tu tan aviat com ens sigui possible.
@@ -146,7 +187,7 @@ ca:
146
187
  editor_images:
147
188
  create:
148
189
  error: Error en pujar la imatge!
149
- success: La imatge s'ha pujat correctament!
190
+ success: Imatge pujada correctament
150
191
  map_component:
151
192
  map:
152
193
  error:
@@ -24,6 +24,12 @@ cs:
24
24
  component_manifest: Pouze v komponentách typu
25
25
  participatory_space_manifest: Použít na participační prostory typu
26
26
  participatory_space_slug: Pouze v
27
+ menu:
28
+ position: Pozice
29
+ raw_label: Popisek
30
+ target: Otevře se v
31
+ url: URL
32
+ visibility: Viditelnost
27
33
  decidim:
28
34
  admin:
29
35
  menu:
@@ -35,7 +41,7 @@ cs:
35
41
  global:
36
42
  announcement: Oznámení
37
43
  iframe: Kód Iframe
38
- iframe_help: 'Zadejte kód jako html: <iframe width="100%" height="700" frameBorder="0" allowFullscreen src="..."></iframe>. Obsah bude sanitován z jiných HTML tagů. Pro vyplnění obrazovky použijte 100% šířku.'
44
+ iframe_help: 'Zadejte kód jako html: <iframe width="100%" height="700" frameBorder="0" allowFullscreen src="..."></iframe>. Obsah bude vylepšen z jiných HTML tagů. Pro vyplnění obrazovky použijte 100% šířku.'
39
45
  no_margins: Mezi iframe a zbytkem stránky nejsou žádné okraje
40
46
  viewport_width: Omezit maximální šířku na zobrazení aplikace
41
47
  step:
@@ -78,10 +84,10 @@ cs:
78
84
  title: 'Platí pouze v těchto případech:'
79
85
  create_scoped_style:
80
86
  error: Chyba při vytváření nového CSS boxu! %{error}
81
- success: CSS box %{key} byl úspěšně vytvořen!
87
+ success: CSS box %{key} úspěšně vytvořen
82
88
  destroy_scoped_style:
83
89
  error: Chyba při odstraňování CSS boxu! %{error}
84
- success: CSS box %{key} byl úspěšně odstraněn!
90
+ success: CSS box %{key} byl úspěšně odstraněn
85
91
  experimental: Experimentální možnosti
86
92
  form:
87
93
  help:
@@ -107,7 +113,7 @@ cs:
107
113
  system: Všude kromě participačních prostor
108
114
  update:
109
115
  error: Chyba při aktualizaci konfigurace! %{error}
110
- success: Konfigurace byla úspěšně aktualizována!
116
+ success: Konfigurace byla úspěšně aktualizována
111
117
  constraints:
112
118
  create:
113
119
  error: Chyba při vytváření případu stavu
@@ -132,9 +138,44 @@ cs:
132
138
  checks: Systémová kompatibilita
133
139
  editors: Hack editoru
134
140
  livechat: Live Chat
141
+ menu_hacks: Vylepšení menu
135
142
  proposals: Návrhy hacků
136
143
  styles: Vlastní styly
137
144
  surveys: Průzkumy a formuláře
145
+ menu_hacks:
146
+ create:
147
+ error: Chyba při vytváření položky menu! %{error}
148
+ success: Položka menu byla úspěšně vytvořena
149
+ destroy:
150
+ error: Chyba při odstraňování položky menu! %{error}
151
+ success: Položka menu byla úspěšně smazána
152
+ edit:
153
+ save: Uložit
154
+ title: Upravit položku menu
155
+ form:
156
+ label_help: Překlady nejsou automaticky rozpoznány, nezapomeňte vyplnit všechna pole!
157
+ target:
158
+ blank: Nové okno
159
+ self: Stejné okno
160
+ visibility:
161
+ default: Viditelný
162
+ hidden: Vždy skryto
163
+ logged: Viditelné pouze pro přihlášené uživatele
164
+ non_logged: Viditelné pouze pro nepřihlášené uživatele
165
+ index:
166
+ confirm_destroy: Opravdu chcete odstranit toto přizpůsobení?
167
+ edit: Upravit
168
+ new: Nová položka
169
+ remove: Odstranit přidání
170
+ remove_hack: Odstranit přizpůsobení
171
+ title: Hlavní menu
172
+ new:
173
+ save: Uložit
174
+ title: Nová položka menu
175
+ update:
176
+ error: Chyba při aktualizaci položky menu! %{error}
177
+ success: Položka menu byla úspěšne aktualizována
178
+ url_exists: Stejná adresa URL je již nakonfigurována, prosím upravte ji místo jejího vytvoření.
138
179
  config:
139
180
  intergram:
140
181
  auto_no_response: Zdá se, že právě teď nikdo není k dispozici odpovědět. Řekněte nám, jak vás můžeme kontaktovat, a co nejdříve se k vám vrátíme.
@@ -146,7 +187,7 @@ cs:
146
187
  editor_images:
147
188
  create:
148
189
  error: Chyba při nahrávání obrázku!
149
- success: Obrázek byl úspěšně nahrán!
190
+ success: Obrázek byl úspěšně nahrán
150
191
  map_component:
151
192
  map:
152
193
  error:
@@ -29,6 +29,12 @@ en:
29
29
  component_manifest: Only in components of type
30
30
  participatory_space_manifest: Apply to participatory spaces of type
31
31
  participatory_space_slug: Only in
32
+ menu:
33
+ position: Position
34
+ raw_label: Label
35
+ target: Opens in
36
+ url: URL
37
+ visibility: Visibility
32
38
  decidim:
33
39
  admin:
34
40
  menu:
@@ -88,10 +94,10 @@ en:
88
94
  title: 'Applicable only in these cases:'
89
95
  create_scoped_style:
90
96
  error: Error creating a new CSS box! %{error}
91
- success: CSS box %{key} created successfully!
97
+ success: CSS box %{key} created successfully
92
98
  destroy_scoped_style:
93
99
  error: Error removing CSS box! %{error}
94
- success: CSS box %{key} removed successfully!
100
+ success: CSS box %{key} removed successfully
95
101
  experimental: Experimental options
96
102
  form:
97
103
  help:
@@ -137,7 +143,7 @@ en:
137
143
  system: Everywhere except participatory spaces
138
144
  update:
139
145
  error: Error updating configuration! %{error}
140
- success: Configuration updated successfully!
146
+ success: Configuration updated successfully
141
147
  constraints:
142
148
  create:
143
149
  error: Error creating condition case
@@ -162,9 +168,46 @@ en:
162
168
  checks: System compatibility
163
169
  editors: Editor hacks
164
170
  livechat: Live Chat
171
+ menu_hacks: Menu tweaks
165
172
  proposals: Proposals hacks
166
173
  styles: Custom styles
167
174
  surveys: Surveys & forms
175
+ menu_hacks:
176
+ create:
177
+ error: Error creating menu item! %{error}
178
+ success: Menu item created successfully
179
+ destroy:
180
+ error: Error removing menu item! %{error}
181
+ success: Menu item removed successfully
182
+ edit:
183
+ save: Save
184
+ title: Edit menu item
185
+ form:
186
+ label_help: Translations aren't automatically detected, be sure to fill
187
+ in all the fields!
188
+ target:
189
+ blank: New window
190
+ self: Same window
191
+ visibility:
192
+ default: Visible
193
+ hidden: Always hidden
194
+ logged: Only visible for logged users
195
+ non_logged: Only visible for non-logged users
196
+ index:
197
+ confirm_destroy: Are you sure to remove this customization?
198
+ edit: Edit
199
+ new: New item
200
+ remove: Remove addition
201
+ remove_hack: Remove customization
202
+ title: Main menu
203
+ new:
204
+ save: Save
205
+ title: New menu item
206
+ update:
207
+ error: Error updating menu item! %{error}
208
+ success: Menu item updated successfully
209
+ url_exists: The same URL is already configured, please edit that instead
210
+ of creating it again.
168
211
  config:
169
212
  intergram:
170
213
  auto_no_response: It seems that no one is available to answer right now.
@@ -178,7 +221,7 @@ en:
178
221
  editor_images:
179
222
  create:
180
223
  error: Error uploading image!
181
- success: Image uploaded successfully!
224
+ success: Image uploaded successfully
182
225
  map_component:
183
226
  map:
184
227
  error: