spina 2.18.0 → 2.20.0

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.

Potentially problematic release.


This version of spina might be problematic. Click here for more details.

Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/assets/config/spina/manifest.js +2 -2
  4. data/app/assets/javascripts/spina/application.js +1 -1
  5. data/app/assets/javascripts/spina/controllers/confetti_controller.js +1 -1
  6. data/app/assets/javascripts/spina/controllers/data_binding_controller.js +234 -0
  7. data/app/assets/javascripts/spina/controllers/form_controller.js +1 -2
  8. data/app/assets/javascripts/spina/controllers/hotkeys_controller.js +1 -1
  9. data/app/assets/javascripts/spina/controllers/page_select_controller.js +2 -37
  10. data/app/assets/javascripts/spina/controllers/reveal_controller.js +424 -1
  11. data/app/assets/javascripts/spina/controllers/select_controller.js +44 -0
  12. data/app/assets/javascripts/spina/controllers/sortable_controller.js +1 -2
  13. data/app/assets/javascripts/spina/libraries/canvas-confetti.js +1 -1
  14. data/app/assets/javascripts/spina/libraries/hotkeys.js +1 -1
  15. data/app/assets/javascripts/spina/libraries/sortablejs.js +1 -1
  16. data/app/assets/javascripts/spina/libraries/trix.js +1 -1
  17. data/app/assets/stylesheets/spina/fonts-propshaft.css +114 -0
  18. data/app/controllers/spina/admin/resource_select_options_controller.rb +20 -0
  19. data/app/helpers/spina/admin/pages_helper.rb +23 -4
  20. data/app/models/spina/embeds/youtube.rb +1 -1
  21. data/app/models/spina/navigation_item.rb +5 -1
  22. data/app/models/spina/parts/image_variant.rb +3 -3
  23. data/app/models/spina/parts/page_link.rb +3 -2
  24. data/app/models/spina/parts/resource_link.rb +13 -0
  25. data/app/views/layouts/spina/admin/application.html.erb +9 -2
  26. data/app/views/spina/admin/page_select_options/index.html.erb +3 -4
  27. data/app/views/spina/admin/page_select_options/show.html.erb +1 -1
  28. data/app/views/spina/admin/parts/page_links/_form.html.erb +17 -14
  29. data/app/views/spina/admin/parts/resource_links/_form.html.erb +32 -0
  30. data/app/views/spina/admin/resource_select_options/index.html.erb +13 -0
  31. data/app/views/spina/admin/resource_select_options/show.html.erb +3 -0
  32. data/config/locales/da.yml +418 -0
  33. data/config/locales/de.yml +2 -0
  34. data/config/locales/en.yml +8 -5
  35. data/config/routes.rb +4 -1
  36. data/db/migrate/18_change_default_spina_resources_slug.rb +9 -0
  37. data/lib/spina/engine.rb +2 -2
  38. data/lib/spina/railtie.rb +4 -1
  39. data/lib/spina/theme.rb +8 -6
  40. data/lib/spina/version.rb +1 -1
  41. data/lib/tasks/tailwind.rake +12 -4
  42. metadata +29 -30
  43. data/app/assets/javascripts/spina/libraries/form-request-submit-polyfill.js +0 -1
  44. data/app/assets/javascripts/spina/libraries/form-request-submit-polyfill@2.0.0.js +0 -27
  45. data/app/assets/javascripts/spina/libraries/stimulus-reveal@1.2.4.js +0 -388
  46. /data/app/assets/stylesheets/spina/{fonts.css.erb → fonts-sprockets.css.erb} +0 -0
@@ -1,6 +1,8 @@
1
1
  module Spina
2
2
  module Parts
3
3
  class ImageVariant
4
+ ImageVariation = Struct.new(:key)
5
+
4
6
  attr_reader :blob
5
7
 
6
8
  def initialize(image, options)
@@ -9,9 +11,7 @@ module Spina
9
11
  end
10
12
 
11
13
  def variation
12
- OpenStruct.new({
13
- key: ActiveStorage::Variation.encode(@options)
14
- })
14
+ ImageVariation.new(ActiveStorage::Variation.encode(@options))
15
15
  end
16
16
  end
17
17
  end
@@ -2,11 +2,12 @@ module Spina
2
2
  module Parts
3
3
  class PageLink < Base
4
4
  attr_json :page_id, :integer, default: nil
5
-
5
+ attr_json :text, :string, default: nil
6
+
6
7
  attr_accessor :options
7
8
 
8
9
  def content
9
- Page.live.find_by(id: page_id)
10
+ ::Spina::Page.live.find_by(id: page_id)
10
11
  end
11
12
  end
12
13
  end
@@ -0,0 +1,13 @@
1
+ module Spina
2
+ module Parts
3
+ class ResourceLink < Base
4
+ attr_json :resource_id, :integer, default: nil
5
+
6
+ attr_accessor :options
7
+
8
+ def content
9
+ ::Spina::Resource.find_by(id: resource_id)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -10,8 +10,15 @@
10
10
 
11
11
  <title><%= Spina.config.backend_title %></title>
12
12
 
13
+ <!-- Fonts -->
14
+ <% if defined?(Propshaft) %>
15
+ <%= stylesheet_link_tag "spina/fonts-propshaft", data: {turbo_track: "reload"} %>
16
+ <% elsif defined?(Sprockets) %>
17
+ <%= stylesheet_link_tag "spina/fonts-sprockets", data: {turbo_track: "reload"} %>
18
+ <% end %>
19
+
13
20
  <!-- Stylesheets -->
14
- <%= stylesheet_link_tag "spina/tailwind", "spina/fonts", "spina/animate", "data-turbo-track": "reload" %>
21
+ <%= stylesheet_link_tag "spina/tailwind", "spina/animate", "data-turbo-track": "reload" %>
15
22
 
16
23
  <!-- Spina's importmap -->
17
24
  <%= spina_importmap_tags %>
@@ -25,4 +32,4 @@
25
32
  <%= render "spina/admin/shared/version" %>
26
33
  <%= content_for?(:body) ? yield(:body) : yield %>
27
34
  </body>
28
- </html>
35
+ </html>
@@ -1,12 +1,11 @@
1
1
  <%= turbo_frame_tag "page_select_options_#{params[:object_id]}" do %>
2
2
  <% if params[:search].blank? %>
3
- <button type="button" data-action="page-select#clear reveal#hide" class="block hover:bg-gray-100 w-full text-left px-5 py-2 font-medium leading-5 text-gray-700 hover:text-gray-900 text-sm border-t border-gray-150">
3
+ <button type="button" data-action="select#clear reveal#hide" class="block hover:bg-gray-100 w-full text-left px-5 py-2 font-medium leading-5 text-gray-700 hover:text-gray-900 text-sm border-t border-gray-150">
4
4
 
5
5
  </button>
6
6
  <% end %>
7
-
8
7
  <% @pages.each do |page| %>
9
- <button type="button" data-action="page-select#select reveal#hide" data-title="<%= page.title %>" data-id="<%= page.id %>" class="block hover:bg-gray-100 w-full text-left px-5 py-2 font-medium leading-5 text-gray-700 hover:text-gray-900 text-sm border-t border-gray-150">
8
+ <button type="button" data-action="select#select reveal#hide" data-title="<%= page.title %>" data-id="<%= page.id %>" class="block hover:bg-gray-100 w-full text-left px-5 py-2 font-medium leading-5 text-gray-700 hover:text-gray-900 text-sm border-t border-gray-150">
10
9
  <%= page.title %>
11
10
  <% if page.draft? %>
12
11
  <span class="font-normal text-gray-400">
@@ -18,4 +17,4 @@
18
17
  </div>
19
18
  </button>
20
19
  <% end %>
21
- <% end %>
20
+ <% end %>
@@ -1,3 +1,3 @@
1
1
  <%= turbo_frame_tag :page_title do %>
2
2
  <%= @page.title %>
3
- <% end %>
3
+ <% end %>
@@ -1,19 +1,23 @@
1
1
  <div class="mt-6">
2
2
  <label class="block text-sm leading-5 font-medium text-gray-700"><%= f.object.title %></label>
3
3
  <div class="text-gray-400 text-sm"><%= f.object.hint %></div>
4
-
5
- <div data-controller="page-select reveal" data-placeholder="<%=t "spina.pages.select_page" %>" class="relative mt-1" data-reveal-away-value>
6
- <%= f.hidden_field :page_id, data: {page_select_target: "input"} %>
7
-
8
- <button type="button" class="btn btn-default px-3 inline-flex items-center text-sm font-medium" data-action="reveal#toggle page-select#autofocus">
9
- <%= heroicon("link", style: :mini, class: "w-4 h-4 mr-1 text-gray-600") %>
10
- <div data-page-select-target="label">
11
- <% if f.object.page_id.present? %>
12
- <%= turbo_frame_tag :page_title, src: spina.admin_page_select_option_path(f.object.page_id) %>
13
- <% end %>
4
+ <div data-controller="select reveal data-binding" data-placeholder="<%=t "spina.pages.select_page" %>" class="relative mt-1" data-reveal-away-value>
5
+ <%= f.hidden_field :page_id, data: { select_target: "input", action: 'change->data-binding#update', binding_target: 'label', binding_condition: "$source.value == ''", binding_attribute: 'hidden' } %>
6
+ <div class="flex">
7
+ <div class="rounded-md border text-gray-700 bg-white shadow-sm border-gray-300">
8
+ <button type="button" class="w-full py-1.5 px-3 inline-flex items-center text-sm font-medium" data-action="reveal#toggle select#autofocus">
9
+ <%= heroicon("link", style: :mini, class: "w-4 h-4 mr-1 text-gray-600") %>
10
+ <div data-select-target="label">
11
+ <% if f.object.page_id.present? %>
12
+ <%= turbo_frame_tag :page_title, src: spina.admin_page_select_option_path(f.object.page_id) %>
13
+ <% end %>
14
+ </div>
15
+ </button>
16
+ <fieldset class="border-t border-gray-300 border-dashed" data-binding-ref="label">
17
+ <%= f.text_field :text, placeholder: t("spina.page_links.text_placeholder"), class: "w-full min-w-64 py-1.5 border-0 rounded-b-md text-sm text-gray-700 focus:border-spina-light focus:ring focus:ring-spina-light" %>
18
+ </fieldset>
14
19
  </div>
15
- </button>
16
-
20
+ </div>
17
21
  <div class="relative mt-1">
18
22
  <div data-reveal data-transition hidden class="absolute shadow-lg border border-gray-200 origin-top-right rounded-md z-10 top-0">
19
23
  <div class="rounded-md bg-white shadow-xs">
@@ -21,10 +25,9 @@
21
25
  <%= ff.hidden_field :object_id, value: f.object.object_id %>
22
26
  <%= ff.hidden_field :resource, value: f.object.options&.dig(:resource) %>
23
27
  <div class="p-2">
24
- <%= ff.search_field :search, placeholder: t("spina.search"), class: "form-input sticky top-0 text-sm w-80", data: {action: "input->form#submit focus->form#submit", page_select_target: "search"} %>
28
+ <%= ff.search_field :search, placeholder: t("spina.search"), class: "form-input sticky top-0 text-sm w-80", data: {action: "input->form#submit focus->form#submit", select_target: "search"} %>
25
29
  </div>
26
30
  <% end %>
27
-
28
31
  <div class="overflow-scroll max-h-80">
29
32
  <%= turbo_frame_tag "page_select_options_#{f.object.object_id}" do %>
30
33
  <% end %>
@@ -0,0 +1,32 @@
1
+ <div class="mt-6">
2
+ <label class="block text-sm leading-5 font-medium text-gray-700"><%= f.object.title %></label>
3
+ <div class="text-gray-400 text-sm"><%= f.object.hint %></div>
4
+ <div data-controller="select reveal" data-placeholder="<%=t "spina.resources.select_resource" %>" class="relative mt-1" data-reveal-away-value>
5
+ <%= f.hidden_field :resource_id, data: {select_target: "input"} %>
6
+ <button type="button" class="btn btn-default px-3 inline-flex items-center text-sm font-medium" data-action="reveal#toggle select#autofocus">
7
+ <%= heroicon("link", style: :mini, class: "w-4 h-4 mr-1 text-gray-600") %>
8
+ <div data-select-target="label">
9
+ <% if f.object.resource_id.present? %>
10
+ <%= turbo_frame_tag :resource_title, src: spina.admin_resource_select_option_path(f.object.resource_id) %>
11
+ <% end %>
12
+ </div>
13
+ </button>
14
+ <div class="relative mt-1">
15
+ <div data-reveal data-transition hidden class="absolute shadow-lg border border-gray-200 origin-top-right rounded-md z-10 top-0">
16
+ <div class="rounded-md bg-white shadow-xs">
17
+ <%= form_with url: spina.search_admin_resource_select_options_path, data: {turbo_frame: "resource_select_options_#{f.object.object_id}", controller: "form", debounce_time: 100} do |ff| %>
18
+ <%= ff.hidden_field :object_id, value: f.object.object_id %>
19
+ <%= ff.hidden_field :resource, value: f.object.options&.dig(:resource) %>
20
+ <div class="p-2">
21
+ <%= ff.search_field :search, placeholder: t("spina.search"), class: "form-input sticky top-0 text-sm w-80", data: {action: "input->form#submit focus->form#submit", select_target: "search"} %>
22
+ </div>
23
+ <% end %>
24
+ <div class="overflow-scroll max-h-80">
25
+ <%= turbo_frame_tag "resource_select_options_#{f.object.object_id}" do %>
26
+ <% end %>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </div>
@@ -0,0 +1,13 @@
1
+ <%= turbo_frame_tag "resource_select_options_#{params[:object_id]}" do %>
2
+ <% if params[:search].blank? %>
3
+ <button type="button" data-action="select#clear reveal#hide" class="block hover:bg-gray-100 w-full text-left px-5 py-2 font-medium leading-5 text-gray-700 hover:text-gray-900 text-sm border-t border-gray-150">
4
+
5
+ </button>
6
+ <% end %>
7
+
8
+ <% @resources.each do |resource| %>
9
+ <button type="button" data-action="select#select reveal#hide" data-title="<%= resource.label %>" data-id="<%= resource.id %>" class="block hover:bg-gray-100 w-full text-left px-5 py-2 font-medium leading-5 text-gray-700 hover:text-gray-900 text-sm border-t border-gray-150">
10
+ <%= resource.label %>
11
+ </button>
12
+ <% end %>
13
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <%= turbo_frame_tag :resource_title do %>
2
+ <%= @resource.label %>
3
+ <% end %>
@@ -0,0 +1,418 @@
1
+ da:
2
+ activemodel:
3
+ attributes:
4
+ spina/embeds/youtube:
5
+ url: youtube.com/watch?v=...
6
+ spina/embeds/vimeo:
7
+ url: vimeo.com/...
8
+ activerecord:
9
+ errors:
10
+ models:
11
+ spina/page:
12
+ attributes:
13
+ title:
14
+ blank: Titel skal udfyldes
15
+ attributes:
16
+ spina/account:
17
+ address: Adresse
18
+ city: By
19
+ email: Email
20
+ facebook: Facebook
21
+ google_analytics: Google Analytics
22
+ google_plus: Google+
23
+ google_site_verification: Google Site Verification
24
+ instagram: Instagram
25
+ kvk_identifier: Chamber of commerce
26
+ kvk_identifier_description: Chamber of commerce
27
+ linkedin: LinkedIn
28
+ logo: Logo
29
+ name: Hjemmesidens navn
30
+ phone: Telefon
31
+ postal_code: Postnummer
32
+ robots_allowed: Synlig for søgemaskiner
33
+ theme: Designtema
34
+ twitter: Twitter
35
+ vat_identifier: VAT
36
+ vat_identifier_description: VAT
37
+ youtube: YouTube
38
+ spina/attachment:
39
+ created_at: Oprettet
40
+ name: Filenavn
41
+ size: Størrelse
42
+ spina/media_folder:
43
+ name: Navn
44
+ spina/navigation:
45
+ auto_add_pages: Tilføj automatisk sider
46
+ auto_add_pages_description: Nye sider tilføjes automatisk til denne menu
47
+ label: Label
48
+ pages: Sider
49
+ pages_description: Vælg sider til denne menu
50
+ spina/page:
51
+ ancestry: Overliggende side
52
+ created_at: Oprettet
53
+ description: Meta beskrivelse
54
+ description_description: Beskrivelse til søgeresultater
55
+ description_placeholder: Kort beskrivelse af siden
56
+ draft: Kladde
57
+ draft_description: Til når din side ikke er helt færdig
58
+ link_url: Redirect
59
+ link_url_description: Viderestil til URL
60
+ link_url_placeholder: fx. http://www.example.com/
61
+ menu_title: Menutitel
62
+ menu_title_placeholder: Efterlad blank for at bruge sidens titel
63
+ no_parent: Ikke under en anden side
64
+ resource: Resource
65
+ seo_title: SEO <title>
66
+ seo_title_description: Sørg for at siden ser godt ud i søgeresultater
67
+ seo_title_placeholder: Bruges i <title>-tag
68
+ show_in_menu: Vis i menu
69
+ show_in_menu_description: Slå fra for ikke at have siden i menu
70
+ skip_to_first_child: Viderestil
71
+ skip_to_first_child_description: Viderestil til første underliggende side
72
+ title: Titel
73
+ title_placeholder: Sidens titel
74
+ url_title: Bestem selv adressen
75
+ url_title_description: Valgfrit
76
+ url_title_placeholder: Slug
77
+ view_template: Designskabelon
78
+ spina/resource:
79
+ label: Label
80
+ order_by: Sorter efter
81
+ parent_page: Overliggende side
82
+ view_template: Standard designskabelon
83
+ spina/user:
84
+ admin: Administrator
85
+ admin_description: Administratorer kan oprette brugere
86
+ email: Email
87
+ email_description: Din email skal være unik
88
+ last_logged_in: Sidst logget ind
89
+ name: Navn
90
+ name_placeholder: Navn
91
+ password: Kodeord
92
+ password_confirmation: Bekræft kodeord
93
+ password_description: Efterlad blank for ikke at skifte kode
94
+ role: Rolle
95
+ user: Bruger
96
+ models:
97
+ spina/attachment:
98
+ one: Dokument
99
+ other: Dokumenter
100
+ spina/page:
101
+ one: Side
102
+ other: Sider
103
+ spina/photo:
104
+ one: Billede
105
+ other: Billeder
106
+ spina/user:
107
+ one: Bruger
108
+ other: Brugere
109
+ helpers:
110
+ label:
111
+ spina/embeds/button:
112
+ url: URL
113
+ label: Knaptekst
114
+ spina/embeds/youtube:
115
+ url: Youtube URL
116
+ spina/embeds/vimeo:
117
+ url: Vimeo URL
118
+ spina:
119
+ accounts:
120
+ contact_details: Kontaktinformation
121
+ contact_details_description: Email og telefon
122
+ couldnt_be_saved: Kunne ikke gemme konto
123
+ name_description: Sidenavn
124
+ save: Gem
125
+ saved: Gemt
126
+ ago: siden
127
+ attachments:
128
+ choose_attachment: Vælg fil
129
+ delete_confirmation_html: Sikker? Denne fil <span class='font-semibold'>kan</span> være i brug på en siden.
130
+ download: Download
131
+ insert: Indsæt fil
132
+ insert_multiple: Indsæt fil
133
+ upload: Upload filer
134
+ upload_one: Upload fil
135
+ cancel: Afbryd
136
+ choose_from_library: Vælg fra bibliotek
137
+ close: Luk
138
+ delete: Slet
139
+ delete_confirmation: Sikker på du vil slette <strong>%{subject}</strong>?
140
+ edit: Rediger
141
+ edit_website: Rediger din side
142
+ embeds:
143
+ embed_a_component: Embed a component
144
+ embed_component: Embed component
145
+ forgot_password:
146
+ expired: Linket til at nulstille din kode er udløbet!
147
+ mail_subject: Nulstil din adgangskode
148
+ new: Glemt din adgangskode
149
+ request: Anmod om ny adgangskode
150
+ save: Gem adgangskode
151
+ success: Din adgangskode er gemt og klar til brug
152
+ unknown_user: Ingen bruger fundet
153
+ images:
154
+ all_images: Alle billeder
155
+ back: Tilbage
156
+ cannot_be_created: Kunne ikke oprette billede
157
+ choose_image: Vælg billede
158
+ choose_images: Vælg billeder
159
+ confirm_selection: Bekræft valg
160
+ delete: Slet
161
+ delete_confirmation_html: Sikker på du vil slette dette <strong>billede</strong>?
162
+ delete_folder: Slet mappe
163
+ done_organizing: Afslut organisering
164
+ insert_image: Indsæt billede
165
+ insert_photo: Indsæt billede
166
+ insert_photos: Indsæt billeder
167
+ link: Link
168
+ missing_image: Mangler billede
169
+ new_folder: Ny mappe
170
+ organize: Organiser
171
+ remove_image: Fjern billede
172
+ upload: Upload billeder
173
+ upload_image: Upload billede
174
+ languages:
175
+ bg: Bulgarsk
176
+ da: Dansk
177
+ de: Tysk
178
+ en: Engelsk
179
+ es: Spansk
180
+ fr: Fransk
181
+ id: Indonesisk
182
+ it: Italiensk
183
+ nl: Dutch
184
+ pl: Polsk
185
+ pt-BR: Braziliansk portugisisk
186
+ ro: Rumænsk
187
+ ru: Russisk
188
+ sv: Svensk
189
+ th: Thai
190
+ tr: Tyrkisk
191
+ zh-CN: Kinesisk (forenklet)
192
+ layout:
193
+ couldnt_be_saved: Layout couldn't be saved
194
+ layout: Layout
195
+ no_layout_parts: No layout parts available
196
+ save: Save layout
197
+ saved: Layout saved
198
+ login: Log ind
199
+ logout: Log ud
200
+ main_menu: Hovedmenu
201
+ media_library:
202
+ add_folder: Tilføj mappe
203
+ add_image: Filføj billede
204
+ attachments: Filer
205
+ back_to_all: Tilbage
206
+ filename: Filnavn
207
+ images: Billeder
208
+ images_count:
209
+ one: 1 billede
210
+ other: "%{count} billeder"
211
+ insert: Indsæt billede
212
+ media_folder_delete_confirmation_html: Sikker? Billeder bliver <strong>ikke</strong> slettet.
213
+ no_folder: Ingen mappe
214
+ photos: Billeder
215
+ rename_folder: Omdøb mappe
216
+ save_media_folder: Gem mappe
217
+ upload_from_device: Upload fra enhed
218
+ uploading: Uploader...
219
+ modal:
220
+ agree: Ja, jeg er sikker
221
+ cancel: Nej, fortryd
222
+ navigations:
223
+ add_menu_item: Tilføj menupunkt
224
+ add_sub_item: Tilføj undermenu
225
+ choose_page: Vælg side
226
+ delete_item: Slet
227
+ delete_item_confirmation_html: Sikker på at du vil <span class='font-semibold'>delete</span> dette menupunkt?
228
+ description: Tilføj og sorter som du ønsker. Du kan også lave undermenuer.
229
+ edit_item: Rediger
230
+ navigations: Menuer
231
+ no_navigations: Denne side har ingen menuer endnu. Du kan oprette menuer i din designskabelon.
232
+ sorting_saved: Sortering gemt
233
+ url_placeholder: "https://"
234
+ url_title_placeholder: "Label"
235
+ navigation_items:
236
+ page: Side
237
+ url: URL
238
+ notifications:
239
+ alert: Hov! Noget gik helt galt!
240
+ information: Information
241
+ login: Du skal logge ind først
242
+ wrong_username_or_password: Forkert email eller kodeord
243
+ options:
244
+ choose_option: Vælg
245
+ page_links:
246
+ text_placeholder: Valgfri tekst til link
247
+ pages:
248
+ add_page_to: "Tilføj side til:"
249
+ add_translation: Tilføj %{language} oversættelse
250
+ advanced: Avanceret
251
+ cannot_be_deleted: Siden kan ikke slettes
252
+ change_order: Ændre rækkefølge
253
+ change_view_template: Ændre designskabelon
254
+ change_view_template_confirmation: Sikker på du vil ændre sideskabelon? Indhold der ikke passer i ny skabelon vil forsvinde.
255
+ concept: kladde
256
+ create: Ny side
257
+ create_page: ny %{template}
258
+ delete: Slet side
259
+ delete_confirmation: Sikker på du vil slette siden <strong>%{subject}</strong>?
260
+ deleted: Side slettet
261
+ done_changing_order: Færdig med at ændre rækkefølge
262
+ edit_translation: Rediger %{language} oversættelse
263
+ invisible_to_search_engines: Din side er usynlig for søgemaskiner
264
+ invisible_to_search_engines_description: Gå til indstillinger for at aktivere adgang for søgemaskiner.
265
+ main_collection: Primær samling
266
+ materialize_path_confirmation: Sikker på du vil opdatere sti til denne side?
267
+ missing_translations: Manglende oversættelse
268
+ move_page: Flyt side
269
+ moved: Side flyttet
270
+ new: Ny side
271
+ no_pages_yet: Ingen sider endnu
272
+ no_parent_page: Ingen overliggende side
273
+ page_content: Indhold
274
+ page_part: Afsnit
275
+ page_seo: Søgemaskiner
276
+ path: "Sti:"
277
+ photo_picker: Vælg billede
278
+ photos_picker: Vælg billeder
279
+ preview: Se side
280
+ publish: Publicer
281
+ published: Side publiceret
282
+ rebuild_materialized_path: Opdater sti
283
+ recommended: anbefalet
284
+ save: Gem side
285
+ save_changes: Gem ændringer
286
+ save_draft: Gem kladde
287
+ saved: Side gemt
288
+ saving: Gemmer...
289
+ select_page: Vælg side
290
+ couldnt_be_saved: Siden kunne ikke gemmes
291
+ search_engines: Søgemaskiner
292
+ show_in_menu: usynlig i menu
293
+ skip_to_first_child: viderestil til første underliggende side
294
+ sorting_saved: Sortering gemt
295
+ page_translations:
296
+ delete: Slet oversættelse (%{translation})
297
+ delete_confirmation: Sikker på du vil slette denne oversættelse <strong>(%{subject})</strong>?
298
+ deleted: Oversættelse slettet
299
+ permanently_delete: Slet permanent
300
+ photos:
301
+ cannot_be_created: "Behandling af billede fejlede:"
302
+ choose_images: Vælg billeder
303
+ delete: Slet
304
+ delete_confirmation: Sikker på du vil slette dette <strong>billede</strong>?
305
+ delete_folder: Slet mappe
306
+ done_organizing: Færdig med organisering
307
+ insert_photo: Indsæt billede
308
+ insert_photos: Indsæt billeder
309
+ link: "URL til billedet:"
310
+ new_folder: Ny mappe
311
+ organize: Organiser billeder
312
+ rename_folder: Omdøb mappe
313
+ select_images: Vælg billeder
314
+ upload_image: Upload billede
315
+ preferences:
316
+ Analytics: Analytics
317
+ account: Generelt
318
+ account_description: Personlige indstillinger
319
+ account_save: Gem
320
+ analytics: Analytics and søgemaskiner
321
+ analytics_description: Link din Google Analytics konto
322
+ analytics_save: Gem indstillinger
323
+ domain_name_settings: Domænenavn
324
+ domain_name_settings_description: Indstillinger for domænenavn
325
+ social_media: Sociale medier
326
+ social_media_description: Facebook og Twitter konti
327
+ social_media_save: Gem sociale medier
328
+ style: Design
329
+ style_description: Vælg en designskabelon
330
+ style_save: Gem design
331
+ title: Indstillinger
332
+ users: Brugere
333
+ users_description: Administrer brugere
334
+ preview_website: Forhåndsvisning
335
+ resources:
336
+ edit: Rediger samling
337
+ label_description: Label til denne samling.
338
+ manual_sorting: Manuel sortering
339
+ no_default_template: Ingen standard designskabelon
340
+ saved: Gemt
341
+ select_resource: Vælg samling
342
+ settings: "%{label} indstillinger"
343
+ settings_description: Alle sider i denne samling får dette sat foran deres URL.
344
+ save: Gem
345
+ search: Søg...
346
+ settings:
347
+ general: Generelt
348
+ save: Gem
349
+ title: Indstillinger
350
+ users: Brugere
351
+ theme:
352
+ save: Gem
353
+ saved: Gemt
354
+ theme: Design
355
+ theme_description: Vælg en designskabelon
356
+ ui:
357
+ cancel: Fortryd
358
+ delete: Slet
359
+ delete_item: Slet %{item}
360
+ load_more: Hent flere
361
+ move_to: Flyt til
362
+ new_entry: Ny
363
+ optional: Valgftit
364
+ or: eller
365
+ rename: Omdøb
366
+ replace: Erstat
367
+ save_changes: Gem ændringer
368
+ saving: Gemmer...
369
+ user_mailer:
370
+ forgot_password:
371
+ button: Nulstil adgangskode
372
+ introduction: Du har anmodet om at nulstille din adgangskode til din Spina CMS-konto. Denne adgangskode nulstilling er kun gyldig i de næste 2 timer. Kopier og indsæt URL'en nedenfor i din webbrowser.
373
+ introduction_html: "Du har anmodet om at nulstille din adgangskode til din Spina CMS-konto. Brug knappen nedenfor til at nulstille koden. <strong>Denne adgangskode nulstilling er kun gyldig i de næste 2 timer.</strong>"
374
+ preheader: Brug linket til at nulstille din adgangskode. Linket er gyldigt i 2 timer.
375
+ request_origin: For security, this request was received from a %{platform} device using %{browser}. If you did not request a password reset, please ignore this email.
376
+ salutation: Hej, %{name}
377
+ subject: Nulstil din adgangskode
378
+ trouble: Hvis du har problemer med at klikke på knappen "Nulstil din adgangskode", kopier og indsæt URL'en nedenfor i din webbrowser.
379
+ users:
380
+ authorization: Authorization
381
+ authorization_description: Administratorer kan redigere brugere. Det kan almindelige brugere ikke.
382
+ cannot_be_created: Kunne ikke gemme bruger
383
+ delete: Slet bruger
384
+ delete_confirmation_html: Er du sikker på du vil slette brugeren <strong>%{user}</strong>?
385
+ deleted: Bruger slettet
386
+ last_login: "Sidste login:"
387
+ never_logged_in: Aldrig logget ind
388
+ new: Ny bruger
389
+ profile: Profil
390
+ profile_description: Information om bruger. Email bruges til login.
391
+ save: Gem
392
+ saved: Gemt
393
+ visit_page: Besøg side
394
+ website:
395
+ all_pages: Alle sider
396
+ content: Indhold
397
+ documents: Dokumenter
398
+ images: Billeder
399
+ main: Sider
400
+ media_library: Bibliotek
401
+ media_library_description: Her er alle dine filer og billeder
402
+ pages: Sider
403
+ pages_description: Alle sider på din hjemmeside
404
+ photos: Billeder
405
+ settings: Indstillinger
406
+ theme: Design
407
+ title: Din side
408
+ wysiwyg:
409
+ heading_1: Overskrift 1
410
+ heading_2: Overskrift 2
411
+ heading_3: Overskrift 3
412
+ insert_link: Indsæt link
413
+ link: Link
414
+ paragraph: Paragraf
415
+ quote: Citat
416
+ unlink: Fjern link
417
+ url: URL
418
+ url_placeholder: Indtast URL
@@ -241,6 +241,8 @@ de:
241
241
  wrong_username_or_password: E-Mail oder Passwort falsch
242
242
  options:
243
243
  choose_option: Option auswählen
244
+ page_links:
245
+ text_placeholder: "Optionaler Text für Link"
244
246
  pages:
245
247
  add_page_to: "Seite hinzufügen zu:"
246
248
  add_translation: Übersetzung für %{language} hinzufügen