spina 0.12.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of spina might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/README.md +65 -7
- data/app/assets/fonts/spina/ics_spina.eot +0 -0
- data/app/assets/fonts/spina/ics_spina.svg +65 -61
- data/app/assets/fonts/spina/ics_spina.ttf +0 -0
- data/app/assets/fonts/spina/ics_spina.woff +0 -0
- data/app/assets/fonts/spina/ics_spina.woff2 +0 -0
- data/app/assets/icons/spina/export.svg +10 -0
- data/app/assets/icons/spina/preview/ics_spina-preview.html +17 -1
- data/app/assets/images/spina/media_folder_placeholder.png +0 -0
- data/app/assets/images/spina/{admin/spina.png → spina-large.png} +0 -0
- data/app/assets/javascripts/spina/admin/application.js +50 -0
- data/app/assets/javascripts/spina/admin/controllers/infinite_scroll_controller.js +40 -0
- data/app/assets/javascripts/spina/admin/media_gallery.coffee +65 -0
- data/app/assets/javascripts/spina/admin/modal.coffee +0 -1
- data/app/assets/javascripts/spina/admin/pages.coffee.erb +2 -2
- data/app/assets/javascripts/spina/admin/{application.coffee.erb → scaffold.coffee} +20 -61
- data/app/assets/javascripts/spina/admin/trix.coffee.erb +5 -8
- data/app/assets/javascripts/spina/admin/uploads.coffee +2 -2
- data/app/assets/stylesheets/spina.sass +3 -3
- data/app/assets/stylesheets/spina/_buttons.sass +0 -1
- data/app/assets/stylesheets/spina/{_configuration.sass → _configuration.sass.erb} +5 -1
- data/app/assets/stylesheets/spina/_forms.sass +79 -20
- data/app/assets/stylesheets/spina/_gallery.sass +91 -3
- data/app/assets/stylesheets/spina/_ics_spina.scss +1 -0
- data/app/assets/stylesheets/spina/_tables.sass +4 -0
- data/app/assets/stylesheets/spina/_trix.sass +7 -4
- data/app/assets/stylesheets/spina_front_end.sass +19 -0
- data/app/controllers/concerns/spina/frontend.rb +29 -12
- data/app/controllers/spina/admin/admin_controller.rb +1 -1
- data/app/controllers/spina/admin/attachments_controller.rb +10 -5
- data/app/controllers/spina/admin/images_controller.rb +51 -0
- data/app/controllers/spina/admin/media_folders_controller.rb +37 -0
- data/app/controllers/spina/admin/media_picker_controller.rb +28 -0
- data/app/controllers/spina/admin/pages_controller.rb +16 -6
- data/app/controllers/spina/admin/resources_controller.rb +33 -0
- data/app/controllers/spina/admin/settings_controller.rb +56 -0
- data/app/controllers/spina/pages_controller.rb +0 -6
- data/app/helpers/spina/admin/pages_helper.rb +2 -2
- data/app/helpers/spina/admin_nav_helper.rb +7 -0
- data/app/helpers/spina/files_helper.rb +9 -0
- data/app/helpers/spina/images_helper.rb +17 -0
- data/app/helpers/spina/pages_helper.rb +17 -0
- data/app/models/concerns/spina/image_collectable.rb +23 -0
- data/app/models/concerns/spina/part.rb +7 -4
- data/app/models/spina/account.rb +10 -14
- data/app/models/spina/attachment.rb +8 -10
- data/app/models/spina/attachment_collection.rb +6 -1
- data/app/models/spina/current.rb +5 -0
- data/app/models/spina/image.rb +26 -0
- data/app/models/spina/{photo_collection.rb → image_collection.rb} +6 -6
- data/app/models/spina/image_collections_image.rb +6 -0
- data/app/models/spina/line.rb +1 -0
- data/app/models/spina/media_folder.rb +7 -0
- data/app/models/spina/navigation.rb +4 -0
- data/app/models/spina/navigation_item.rb +1 -1
- data/app/models/spina/page.rb +18 -13
- data/app/models/spina/page_part.rb +1 -0
- data/app/models/spina/resource.rb +16 -0
- data/app/models/spina/setting.rb +7 -0
- data/app/models/spina/structure.rb +2 -0
- data/app/models/spina/structure_item.rb +2 -0
- data/app/models/spina/structure_part.rb +2 -1
- data/app/models/spina/text.rb +1 -0
- data/app/views/dummy/show.html.haml +1 -0
- data/app/views/layouts/spina/admin/media_library.html.haml +6 -3
- data/app/views/layouts/spina/admin/pages.html.haml +4 -1
- data/app/views/layouts/spina/admin/resources.html.haml +10 -0
- data/app/views/spina/admin/accounts/style.html.haml +3 -2
- data/app/views/spina/admin/attachments/_attachment.html.haml +3 -3
- data/app/views/spina/admin/attachments/_select.html.haml +7 -15
- data/app/views/spina/admin/attachments/_select_collection.html.haml +7 -14
- data/app/views/spina/admin/attachments/create.js.erb +1 -3
- data/app/views/spina/admin/attachments/index.html.haml +4 -3
- data/app/views/spina/admin/attachments/insert.js.erb +5 -0
- data/app/views/spina/admin/image_collections/_image_collection.html.haml +5 -0
- data/app/views/spina/admin/images/_form.html.haml +5 -0
- data/app/views/spina/admin/images/_image.html.haml +10 -0
- data/app/views/spina/admin/images/create.js.erb +8 -0
- data/app/views/spina/admin/images/index.html.haml +22 -0
- data/app/views/spina/admin/images/index.js.erb +7 -0
- data/app/views/spina/admin/media_folders/_form.html.haml +14 -0
- data/app/views/spina/admin/media_folders/_media_folder.html.haml +8 -0
- data/app/views/spina/admin/media_folders/new.js.erb +1 -0
- data/app/views/spina/admin/media_folders/show.html.haml +17 -0
- data/app/views/spina/admin/media_picker/_modal.html.haml +26 -0
- data/app/views/spina/admin/media_picker/infinite_scroll.js.erb +5 -0
- data/app/views/spina/admin/media_picker/select.js.erb +28 -0
- data/app/views/spina/admin/media_picker/show.js.erb +1 -0
- data/app/views/spina/admin/navigations/_page.html.haml +2 -2
- data/app/views/spina/admin/navigations/edit.html.haml +1 -1
- data/app/views/spina/admin/pages/_form.html.haml +21 -15
- data/app/views/spina/admin/pages/_form_advanced.html.haml +53 -43
- data/app/views/spina/admin/pages/_form_page_content.html.haml +1 -1
- data/app/views/spina/admin/pages/_form_page_seo.html.haml +1 -1
- data/app/views/spina/admin/pages/_page_nested_list.html.haml +3 -3
- data/app/views/spina/admin/pages/index.html.haml +1 -1
- data/app/views/spina/admin/{page_partables → partables}/attachment_collections/_form.html.haml +1 -1
- data/app/views/spina/admin/{page_partables → partables}/attachments/_form.html.haml +4 -4
- data/app/views/spina/admin/partables/image_collections/_form.html.haml +16 -0
- data/app/views/spina/admin/partables/images/_form.html.haml +14 -0
- data/app/views/spina/admin/{page_partables → partables}/lines/_form.html.haml +1 -1
- data/app/views/spina/admin/{structure_partables → partables}/options/_form.html.haml +1 -1
- data/app/views/spina/admin/partables/photo_collections/_form.html.haml +4 -0
- data/app/views/spina/admin/partables/photos/_form.html.haml +4 -0
- data/app/views/spina/admin/{page_partables → partables}/structures/_form.html.haml +3 -3
- data/app/views/spina/admin/{page_partables → partables}/texts/_form.html.haml +1 -1
- data/app/views/spina/admin/password_resets/edit.html.haml +1 -1
- data/app/views/spina/admin/password_resets/new.html.haml +1 -1
- data/app/views/spina/admin/resources/edit.html.haml +49 -0
- data/app/views/spina/admin/resources/show.html.haml +14 -0
- data/app/views/spina/admin/sessions/new.html.haml +1 -1
- data/app/views/spina/admin/settings/_string_field.html.haml +4 -0
- data/app/views/spina/admin/settings/_wysiwyg_field.html.haml +4 -0
- data/app/views/spina/admin/settings/edit.html.haml +13 -0
- data/app/views/spina/admin/shared/_primary_navigation.html.haml +13 -5
- data/app/views/spina/admin/shared/_rich_text_field.html.haml +10 -10
- data/app/views/spina/admin/structure_items/_fields.html.haml +1 -1
- data/app/views/spina/admin/structure_partables/attachment_collections/_form.html.haml +14 -0
- data/app/views/spina/admin/structure_partables/attachments/_form.html.haml +13 -0
- data/app/views/spina/shared/_analytics.html.erb +8 -8
- data/app/views/spina/shared/_navigation.html.haml +3 -3
- data/app/views/spina/shared/_spina_link.html.haml +2 -0
- data/app/views/spina/sitemaps/show.xml.builder +2 -2
- data/config/initializers/assets.rb +6 -1
- data/config/locales/TH.yml +243 -0
- data/config/locales/bg.yml +250 -0
- data/config/locales/de.yml +67 -22
- data/config/locales/en.yml +29 -2
- data/config/locales/es.yml +58 -1
- data/config/locales/fr.yml +80 -32
- data/config/locales/id.yml +228 -0
- data/config/locales/nl.yml +32 -0
- data/config/locales/pl.yml +225 -0
- data/config/locales/pt-BR.yml +34 -3
- data/config/locales/ro.yml +225 -0
- data/config/locales/ru.yml +10 -0
- data/config/locales/sv.yml +223 -0
- data/config/routes.rb +13 -13
- data/db/migrate/10_create_spina_image_collections.rb +16 -0
- data/db/migrate/11_create_spina_resources.rb +15 -0
- data/db/migrate/1_create_spina_tables.rb +0 -19
- data/db/migrate/2_create_spina_translation_tables.rb +36 -6
- data/db/migrate/7_create_spina_settings.rb +11 -0
- data/db/migrate/8_create_spina_media_folders.rb +8 -0
- data/db/migrate/9_create_spina_images.rb +10 -0
- data/lib/generators/spina/install_generator.rb +2 -2
- data/lib/generators/spina/templates/app/views/default/pages/homepage.html.haml +3 -2
- data/lib/generators/spina/templates/app/views/default/pages/show.html.haml +2 -2
- data/lib/generators/spina/templates/app/views/default/shared/_navigation.html.haml +3 -5
- data/lib/generators/spina/templates/app/views/demo/pages/demo.html.haml +20 -23
- data/lib/generators/spina/templates/app/views/demo/pages/homepage.html.haml +2 -2
- data/lib/generators/spina/templates/app/views/demo/pages/show.html.haml +2 -2
- data/lib/generators/spina/templates/app/views/demo/shared/_navigation.html.haml +3 -5
- data/lib/generators/spina/templates/config/initializers/mobility.rb +6 -0
- data/lib/generators/spina/templates/config/initializers/spina.rb +3 -0
- data/lib/generators/spina/templates/config/initializers/themes/demo.rb +7 -7
- data/lib/spina.rb +0 -1
- data/lib/spina/engine.rb +6 -7
- data/lib/spina/plugin.rb +48 -3
- data/lib/spina/version.rb +1 -1
- data/vendor/assets/javascripts/spina/stimulus.umd.js +5 -0
- data/vendor/assets/javascripts/spina/trix.js +10 -9
- metadata +106 -103
- data/app/assets/images/spina/danger-zone-ribbon.png +0 -0
- data/app/assets/images/spina/spina_small.png +0 -0
- data/app/assets/javascripts/spina/admin/infinite_scroll.coffee +0 -25
- data/app/controllers/spina/admin/photos_controller.rb +0 -100
- data/app/models/concerns/spina/photo_collectable.rb +0 -24
- data/app/models/spina/photo.rb +0 -29
- data/app/models/spina/photo_collections_photo.rb +0 -6
- data/app/presenters/spina/pages/menu_presenter.rb +0 -63
- data/app/uploaders/spina/default_store_uploader.rb +0 -15
- data/app/uploaders/spina/file_uploader.rb +0 -6
- data/app/uploaders/spina/logo_uploader.rb +0 -13
- data/app/uploaders/spina/photo_uploader.rb +0 -23
- data/app/views/spina/admin/attachments/_fields.html.haml +0 -8
- data/app/views/spina/admin/attachments/insert.js.coffee +0 -5
- data/app/views/spina/admin/page_partables/options/_form.html.haml +0 -6
- data/app/views/spina/admin/page_partables/photo_collections/_form.html.haml +0 -17
- data/app/views/spina/admin/page_partables/photos/_form.html.haml +0 -14
- data/app/views/spina/admin/photos/_photo.html.haml +0 -8
- data/app/views/spina/admin/photos/_photo_collection.html.haml +0 -5
- data/app/views/spina/admin/photos/_photo_collection_select.html.haml +0 -23
- data/app/views/spina/admin/photos/_photo_link.html.haml +0 -11
- data/app/views/spina/admin/photos/_photo_multi_picker.html.haml +0 -3
- data/app/views/spina/admin/photos/_photo_select.html.haml +0 -16
- data/app/views/spina/admin/photos/_photo_single_picker.html.haml +0 -3
- data/app/views/spina/admin/photos/_photo_uploaded.html.haml +0 -4
- data/app/views/spina/admin/photos/_trix_select.html.haml +0 -11
- data/app/views/spina/admin/photos/create.js.erb +0 -4
- data/app/views/spina/admin/photos/index.html.haml +0 -13
- data/app/views/spina/admin/photos/index.js.erb +0 -5
- data/app/views/spina/admin/photos/insert_photo.js.erb +0 -10
- data/app/views/spina/admin/photos/insert_photo_collection.js.erb +0 -25
- data/app/views/spina/admin/photos/link.js.erb +0 -2
- data/app/views/spina/admin/photos/multi_picker_infinite_scroll.js.erb +0 -6
- data/app/views/spina/admin/photos/photo_collection_select.js.erb +0 -3
- data/app/views/spina/admin/photos/photo_select.js.erb +0 -3
- data/app/views/spina/admin/photos/single_picker_infinite_scroll.js.erb +0 -6
- data/app/views/spina/admin/photos/trix_infinite_scroll.js.erb +0 -4
- data/app/views/spina/admin/photos/trix_insert.js.erb +0 -2
- data/app/views/spina/admin/photos/trix_select.js.erb +0 -3
- data/app/views/spina/admin/structure_partables/lines/_form.html.haml +0 -5
- data/app/views/spina/admin/structure_partables/photo_collections/_form.html.haml +0 -17
- data/app/views/spina/admin/structure_partables/photos/_form.html.haml +0 -11
- data/app/views/spina/admin/structure_partables/texts/_form.html.haml +0 -5
- data/config/initializers/spina.rb +0 -0
- data/lib/generators/spina/templates/config/initializers/carrierwave.rb +0 -17
- data/lib/spina/railtie.rb +0 -9
@@ -4,7 +4,7 @@
|
|
4
4
|
.horizontal-form-label
|
5
5
|
= Spina::Page.human_attribute_name :seo_title
|
6
6
|
.horizontal-form-content
|
7
|
-
= f.text_field :seo_title, placeholder: Spina::Page.human_attribute_name(:seo_title_placeholder), value: f.object.
|
7
|
+
= f.text_field :seo_title, placeholder: Spina::Page.human_attribute_name(:seo_title_placeholder), value: f.object.seo_title(fallback: false, default: nil)
|
8
8
|
|
9
9
|
.horizontal-form-group
|
10
10
|
.horizontal-form-label
|
@@ -1,7 +1,7 @@
|
|
1
1
|
%li.dd-item{data: {id: page_nested_list.id}}
|
2
|
-
|
2
|
+
.dd-item-inner
|
3
3
|
= render partial: 'page', object: page_nested_list
|
4
4
|
|
5
|
-
- if page_nested_list.children.active.
|
5
|
+
- if page_nested_list.children.active.regular_pages.any?
|
6
6
|
%ol.dd-list
|
7
|
-
= render partial: 'page_nested_list', collection: page_nested_list.children.active.sorted
|
7
|
+
= render partial: 'page_nested_list', collection: page_nested_list.children.active.sorted.regular_pages
|
data/app/views/spina/admin/{page_partables → partables}/attachment_collections/_form.html.haml
RENAMED
@@ -1,7 +1,7 @@
|
|
1
1
|
.horizontal-form-label
|
2
2
|
= f.object.title
|
3
3
|
.horizontal-form-content
|
4
|
-
= f.fields_for :
|
4
|
+
= f.fields_for :partable, f.object.partable do |ff|
|
5
5
|
= link_to select_collection_admin_attachments_path(ff.object_name, selected_attachment_ids: ff.object.attachment_ids), remote: true, class: 'media_picker clearfix' do
|
6
6
|
.placeholder
|
7
7
|
%span.button.button-small.button-round
|
@@ -1,13 +1,13 @@
|
|
1
1
|
.horizontal-form-label
|
2
2
|
= f.object.title
|
3
3
|
.horizontal-form-content
|
4
|
-
= link_to select_admin_attachments_path(f.object_name, selected_attachment_id: f.object.
|
4
|
+
= link_to select_admin_attachments_path(f.object_name, selected_attachment_id: f.object.partable.try(:id)), remote: true, class: 'media_picker clearfix' do
|
5
5
|
.placeholder
|
6
6
|
%span.button.button-small.button-round
|
7
7
|
%i.icon.icon-dots
|
8
8
|
= t('spina.choose_from_library')
|
9
9
|
|
10
|
-
- if f.object.
|
11
|
-
.attachment= f.object.
|
10
|
+
- if f.object.partable && f.object.partable.file.attached?
|
11
|
+
.attachment= f.object.partable.name
|
12
12
|
|
13
|
-
= f.hidden_field :
|
13
|
+
= f.hidden_field :partable_id
|
@@ -0,0 +1,16 @@
|
|
1
|
+
.horizontal-form-label
|
2
|
+
= f.object.title
|
3
|
+
.horizontal-form-content
|
4
|
+
= f.fields_for :partable, f.object.partable do |ff|
|
5
|
+
= link_to admin_media_picker_path(selected_ids: ff.object.image_ids, hidden_field_id: "media_picker_#{ff.object.object_id}", multiple: true), remote: true, class: 'media_picker clearfix' do
|
6
|
+
.placeholder
|
7
|
+
%span.button.button-small.button-round
|
8
|
+
%i.icon.icon-dots
|
9
|
+
=t 'spina.images.choose_images'
|
10
|
+
|
11
|
+
.image-collection
|
12
|
+
- if ff.object.images.any?
|
13
|
+
= render 'spina/admin/image_collections/image_collection', images: ff.object.images.sorted_by_image_collection
|
14
|
+
|
15
|
+
= ff.hidden_field :image_tokens, value: ff.object.image_ids.join(","), data: {hidden_field_id: "media_picker_#{ff.object.object_id}"}
|
16
|
+
= ff.hidden_field :image_positions, value: ff.object.images.sorted_by_image_collection.pluck(:image_id).join(","), class: 'image-positions'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
.horizontal-form-label
|
2
|
+
= f.object.title
|
3
|
+
.horizontal-form-content
|
4
|
+
= link_to admin_media_picker_path(selected_ids: [f.object.partable_id], hidden_field_id: "media_picker_#{f.object.object_id}"), remote: true, class: 'media_picker clearfix' do
|
5
|
+
.placeholder
|
6
|
+
%span.button.button-small.button-round
|
7
|
+
%i.icon.icon-dots
|
8
|
+
=t 'spina.images.choose_image'
|
9
|
+
|
10
|
+
- if f.object.partable.file.attached?
|
11
|
+
.image
|
12
|
+
= image_tag variant(f.object.partable.file, resize: "300x300^", crop: "300x300+0+0")
|
13
|
+
|
14
|
+
= f.hidden_field :partable_id, data: {hidden_field_id: "media_picker_#{f.object.object_id}"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
.horizontal-form-label
|
2
2
|
= f.object.title
|
3
3
|
.horizontal-form-content
|
4
|
-
= f.fields_for :
|
4
|
+
= f.fields_for :partable, f.object.partable do |ff|
|
5
5
|
= ff.text_field :content, placeholder: "#{t 'spina.pages.page_part'} #{f.object.name.downcase}"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.horizontal-form-label
|
2
2
|
= f.object.title
|
3
3
|
.horizontal-form-content
|
4
|
-
= f.fields_for :
|
4
|
+
= f.fields_for :partable, f.object.partable do |ff|
|
5
5
|
.select-dropdown
|
6
6
|
= ff.label :value, f.object.title
|
7
7
|
= ff.select :value, f.object.options[:values].map{|o| [option_label(f.object, o), o]}, prompt: true
|
@@ -0,0 +1,4 @@
|
|
1
|
+
.horizontal-form-label
|
2
|
+
= f.object.title
|
3
|
+
.horizontal-form-content
|
4
|
+
%em{style: 'line-height: 28px; color: #333'} Spina::PhotoCollection is deprecated. Please change this PagePart to Spina::ImageCollection using <span style="background: #f1f1f1; border-radius: 3px; padding: 2px 8px; white-space: nowrap">rails spina:photo_to_image</span>
|
@@ -0,0 +1,4 @@
|
|
1
|
+
.horizontal-form-label
|
2
|
+
= f.object.title
|
3
|
+
.horizontal-form-content
|
4
|
+
%em{style: 'line-height: 28px; color: #333'} Spina::Photo is deprecated. Please change this PagePart to Spina::Image using <span style="background: #f1f1f1; border-radius: 3px; padding: 2px 8px; white-space: nowrap">rails spina:photo_to_image</span>
|
@@ -4,18 +4,18 @@
|
|
4
4
|
%label= f.object.title
|
5
5
|
|
6
6
|
%ul
|
7
|
-
- f.object.page_partable.structure_items.sort_by
|
7
|
+
- f.object.page_partable.structure_items.sort_by{|item|item.position.to_i}.each_with_index do |structure_item, index|
|
8
8
|
%li{class: ('active' if index == 0), data: {structure_item_id: structure_item.object_id}}
|
9
9
|
= link_to "#structure_form_pane_#{structure_item.object_id}" do
|
10
10
|
%i.icon.icon-bars.sortable-handle
|
11
11
|
= structure_item.structure_parts.first.try(:structure_partable).try(:content)
|
12
12
|
|
13
|
-
= f.fields_for :
|
13
|
+
= f.fields_for :partable do |ff|
|
14
14
|
- ff.object.page_part = f.object
|
15
15
|
= link_to_add_structure_item_fields ff do
|
16
16
|
= icon('plus')
|
17
17
|
|
18
18
|
.structure-form-content
|
19
19
|
= f.fields_for :page_partable do |ff|
|
20
|
-
= ff.fields_for :structure_items, ff.object.structure_items.sort_by
|
20
|
+
= ff.fields_for :structure_items, ff.object.structure_items.sort_by{|item|item.position.to_i} do |fff|
|
21
21
|
= render 'spina/admin/structure_items/fields', f: fff
|
@@ -1,5 +1,5 @@
|
|
1
1
|
= form_for @user, url: spina.admin_password_reset_path(params[:id]), html: {id: "login_wrapper"} do |f|
|
2
|
-
= image_tag 'spina/
|
2
|
+
= image_tag 'spina/spina-large.png', class: 'animated fadeInDown'
|
3
3
|
- if @user.errors.any?
|
4
4
|
.failed-to-login.animated.fadeInDown
|
5
5
|
.icon.icon-cross
|
@@ -0,0 +1,49 @@
|
|
1
|
+
- if @resource.errors.any?
|
2
|
+
- content_for :notifications do
|
3
|
+
.notification.notification-danger.animated.fadeInRight
|
4
|
+
= icon('exclamation')
|
5
|
+
.notification-message
|
6
|
+
=t 'spina.notifications.alert'
|
7
|
+
%small= @resource.errors.full_messages.join('<br />').html_safe
|
8
|
+
= link_to '#', data: {close_notification: true} do
|
9
|
+
= icon('cross')
|
10
|
+
|
11
|
+
= form_with model: @resource, url: spina.admin_resource_path(@resource) do |f|
|
12
|
+
%header#header
|
13
|
+
.breadcrumbs= render_breadcrumbs separator: '<div class="divider"></div>'
|
14
|
+
|
15
|
+
#header_actions
|
16
|
+
%button.button.button-primary{type: 'submit', style: 'margin-right: 0'}
|
17
|
+
= icon('check')
|
18
|
+
=t 'spina.save'
|
19
|
+
|
20
|
+
.well
|
21
|
+
.horizontal-form
|
22
|
+
.horizontal-form-group
|
23
|
+
.horizontal-form-label
|
24
|
+
= Spina::Resource.human_attribute_name :label
|
25
|
+
.horizontal-form-content
|
26
|
+
= f.text_field :label, placeholder: Spina::Resource.human_attribute_name(:label)
|
27
|
+
|
28
|
+
.horizontal-form-group
|
29
|
+
.horizontal-form-label
|
30
|
+
= Spina::Resource.human_attribute_name :order_by
|
31
|
+
.horizontal-form-content
|
32
|
+
.select-dropdown
|
33
|
+
- options = [[Spina::Page.human_attribute_name(:title), 'title']]
|
34
|
+
= f.select :order_by, options_for_select(options, f.object.order_by), include_blank: Spina::Page.human_attribute_name(:created_at)
|
35
|
+
|
36
|
+
.horizontal-form-group
|
37
|
+
.horizontal-form-label
|
38
|
+
= Spina::Resource.human_attribute_name :view_template
|
39
|
+
.horizontal-form-content
|
40
|
+
.select-dropdown
|
41
|
+
- options = options_for_select(current_theme.view_templates.map { |template| [template[:title], template[:name]] }, @resource.view_template)
|
42
|
+
= f.select :view_template, options, include_blank: true
|
43
|
+
|
44
|
+
.horizontal-form-group
|
45
|
+
.horizontal-form-label
|
46
|
+
= Spina::Resource.human_attribute_name :parent_page
|
47
|
+
.horizontal-form-content
|
48
|
+
.select-dropdown
|
49
|
+
= f.select :parent_page_id, page_ancestry_options(f.object), include_blank: Spina::Resource.human_attribute_name(:no_parent)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
- content_for(:header_actions) do
|
2
|
+
|
3
|
+
= link_to spina.edit_admin_resource_path(@resource), class: 'button' do
|
4
|
+
= t('spina.resources.edit')
|
5
|
+
|
6
|
+
= link_to spina.new_admin_page_path(params: {resource_id: @resource.id, view_template: @resource.view_template.presence || 'show'}), class: 'button button-primary icon-only', style: 'margin-right: 0' do
|
7
|
+
= icon('plus')
|
8
|
+
|
9
|
+
.well
|
10
|
+
.dd#pages_list
|
11
|
+
%ol.dd-list
|
12
|
+
- @resource.pages.each do |page|
|
13
|
+
%li.dd-item
|
14
|
+
.dd-item-inner= render partial: 'spina/admin/pages/page', object: page
|
@@ -1,5 +1,5 @@
|
|
1
1
|
= form_tag spina.admin_sessions_path, id: "login_wrapper" do
|
2
|
-
= image_tag 'spina/
|
2
|
+
= image_tag 'spina/spina-large.png', class: 'animated fadeInDown'
|
3
3
|
- if flash[:alert].present?
|
4
4
|
.failed-to-login.animated.fadeInDown
|
5
5
|
.icon.icon-cross
|
@@ -0,0 +1,13 @@
|
|
1
|
+
= form_for @setting, url: admin_settings_path do |f|
|
2
|
+
%header#header
|
3
|
+
= render partial: 'spina/admin/shared/breadcrumbs'
|
4
|
+
|
5
|
+
#header_actions
|
6
|
+
%button.button.button-primary{type: 'submit'}
|
7
|
+
= icon('check')
|
8
|
+
= t('spina.settings.save')
|
9
|
+
|
10
|
+
.well
|
11
|
+
.horizontal-form
|
12
|
+
- plugin.settings.each do |key, value|
|
13
|
+
.horizontal-form-group= render "#{value.is_a?(Hash) ? value.first.first : value}_field", f: f, attribute: key
|
@@ -1,20 +1,25 @@
|
|
1
1
|
%nav#primary.transformed{data: {turbolinks_permanent: true}}
|
2
2
|
%ul
|
3
|
-
%li{class: ('active' if (%w[pages photos attachments navigations] + Spina::Plugin.all.map { |plugin| plugin.namespace if current_theme.plugins.include?(plugin.name) }).include? controller_name)}
|
3
|
+
%li{class: ('active' if (%w[pages photos attachments navigations resources] + Spina::Plugin.all.map { |plugin| plugin.namespace if current_theme.plugins.include?(plugin.name) }).include? controller_name)}
|
4
4
|
= link_to spina.admin_pages_path do
|
5
5
|
= icon('home')
|
6
6
|
= t('spina.website.title')
|
7
7
|
= icon('caret-right')
|
8
8
|
|
9
9
|
%ul
|
10
|
-
%li{class: ('active' if current_admin_path.start_with?('/pages') || current_admin_path.start_with?('/navigations'))}
|
10
|
+
%li{class: ('active' if (current_admin_path.start_with?('/pages') || current_admin_path.start_with?('/navigations')) && @page&.resource.blank?)}
|
11
11
|
= link_to t('spina.website.pages'), spina.admin_pages_path
|
12
|
-
%li{class: ('active' if current_admin_path.start_with?('/
|
13
|
-
= link_to t('spina.website.media_library'), spina.
|
12
|
+
%li{class: ('active' if current_admin_path.start_with?('/images', '/attachments'))}
|
13
|
+
= link_to t('spina.website.media_library'), spina.admin_images_path
|
14
|
+
|
14
15
|
- Spina::Plugin.all.each do |plugin|
|
15
16
|
- if current_theme.plugins.include? plugin.name
|
16
17
|
- if lookup_context.exists? "spina/admin/hooks/#{ plugin.namespace }/_website_secondary_navigation"
|
17
18
|
= render "spina/admin/hooks/#{ plugin.namespace }/website_secondary_navigation", plugin: plugin
|
19
|
+
|
20
|
+
- Spina::Resource.order(:label).each do |resource|
|
21
|
+
%li{class: ('active' if (@resource || @page&.resource) == resource)}= link_to resource.label, spina.admin_resource_path(resource)
|
22
|
+
|
18
23
|
%li
|
19
24
|
= link_to '#', class: 'back-to-main-menu' do
|
20
25
|
= icon('caret-left')
|
@@ -48,6 +53,9 @@
|
|
48
53
|
- if current_theme.plugins.include? plugin.name
|
49
54
|
- if lookup_context.exists? "spina/admin/hooks/#{ plugin.namespace }/_settings_secondary_navigation"
|
50
55
|
= render "spina/admin/hooks/#{ plugin.namespace }/settings_secondary_navigation", plugin: plugin
|
56
|
+
- if plugin.settings.present?
|
57
|
+
%li{class: ('active' if controller_name == 'settings' and params[:plugin] == plugin.namespace)}
|
58
|
+
= link_to t("spina.#{plugin.namespace}.title"), spina.admin_edit_settings_path(plugin.namespace)
|
51
59
|
|
52
60
|
%li
|
53
61
|
= link_to '#', class: 'back-to-main-menu' do
|
@@ -57,4 +65,4 @@
|
|
57
65
|
%li.bottom
|
58
66
|
= link_to spina.admin_logout_path, data: {turbolinks: false} do
|
59
67
|
= icon('power-off')
|
60
|
-
=t 'spina.logout'
|
68
|
+
=t 'spina.logout'
|
@@ -13,21 +13,21 @@
|
|
13
13
|
.icon.icon-list-ul
|
14
14
|
%button.button.button-small{ type: 'button', tabindex: -1, title: 'Link', data: { trix_action: 'link', trix_attribute: 'href', trix_key: 'k' }}
|
15
15
|
.icon.icon-link
|
16
|
-
%button.button.button-small.js-trix-
|
16
|
+
%button.button.button-small.js-trix-image{ type: 'button', tabindex: -1, title: 'Image', data: { trix_action: 'image', trix_attribute: 'image' }}
|
17
17
|
.icon.icon-picture-o
|
18
18
|
|
19
19
|
.button-group.pull-left
|
20
20
|
%button.button.button-small{ type: 'button', tabindex: -1, title: 'h1', data: { trix_attribute: 'heading1' }} H1
|
21
|
-
%button.button.button-small{ type: 'button', tabindex: -1, title: '
|
22
|
-
%button.button.button-small{ type: 'button', tabindex: -1, title: '
|
23
|
-
%button.button.button-small{ type: 'button', tabindex: -1, title: '
|
24
|
-
%button.button.button-small{ type: 'button', tabindex: -1, title: '
|
25
|
-
%button.button.button-small{ type: 'button', tabindex: -1, title: '
|
21
|
+
%button.button.button-small{ type: 'button', tabindex: -1, title: 'h2', data: { trix_attribute: 'heading2' }} H2
|
22
|
+
%button.button.button-small{ type: 'button', tabindex: -1, title: 'h3', data: { trix_attribute: 'heading3' }} H3
|
23
|
+
%button.button.button-small{ type: 'button', tabindex: -1, title: 'h4', data: { trix_attribute: 'heading4' }} H4
|
24
|
+
%button.button.button-small{ type: 'button', tabindex: -1, title: 'h5', data: { trix_attribute: 'heading5' }} H5
|
25
|
+
%button.button.button-small{ type: 'button', tabindex: -1, title: 'h6', data: { trix_attribute: 'heading6' }} H6
|
26
26
|
|
27
|
-
.dialogs
|
28
|
-
.dialog.
|
29
|
-
.
|
30
|
-
%input{type: 'text', name: 'href', placeholder: 'Enter a URL…', required: true}
|
27
|
+
.trix-dialogs{data: {trix_dialogs: true}}
|
28
|
+
.trix-dialog.trix-dialog--link{ data: { trix_dialog_attribute: 'href', trix_dialog: 'href'}}
|
29
|
+
.trix-dialog__link-fields
|
30
|
+
%input.trix-input.trix-input--dialog{type: 'text', name: 'href', placeholder: 'Enter a URL…', required: true, data: {trix_input: true}}
|
31
31
|
.button-group
|
32
32
|
%input.button{type: 'button', tabindex: -1, value: 'Link', data: { trix_method: 'setAttribute'}}
|
33
33
|
%input.button{type: 'button', tabindex: -1, value: 'Unlink', data: { trix_method: 'removeAttribute'}}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
/ Structure parts
|
3
3
|
= f.fields_for :structure_parts, build_structure_parts(f.object.structure.try(:page_part).try(:name), f.object) do |ff|
|
4
4
|
.structure-form-part
|
5
|
-
= render "spina/admin/
|
5
|
+
= render "spina/admin/partables/#{partable_type_partial_namespace(ff.object.structure_partable_type)}/form", f: ff
|
6
6
|
|
7
7
|
= ff.hidden_field :id
|
8
8
|
= ff.hidden_field :title
|
@@ -0,0 +1,14 @@
|
|
1
|
+
.horizontal-form-label
|
2
|
+
= f.object.title
|
3
|
+
.horizontal-form-content
|
4
|
+
= f.fields_for :structure_partable, f.object.structure_partable do |ff|
|
5
|
+
= link_to spina.select_collection_admin_attachments_path(ff.object_name, selected_attachment_ids: ff.object.attachment_ids), remote: true, class: 'media_picker clearfix' do
|
6
|
+
.placeholder
|
7
|
+
%span.button.button-small.button-round
|
8
|
+
%i.icon.icon-dots
|
9
|
+
= t('spina.choose_from_library')
|
10
|
+
|
11
|
+
- if ff.object.attachments.any?
|
12
|
+
- ff.object.attachments.each do |attachment|
|
13
|
+
.attachment= attachment.name
|
14
|
+
= ff.hidden_field :attachment_tokens, value: ff.object.attachment_ids.join(",")
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.horizontal-form-label
|
2
|
+
= f.object.title
|
3
|
+
.horizontal-form-content
|
4
|
+
= link_to spina.select_admin_attachments_path(f.object_name, selected_attachment_id: f.object.structure_partable.try(:id)), remote: true, class: "media_picker" do
|
5
|
+
.placeholder
|
6
|
+
%span.button.button-small.button-round
|
7
|
+
%i.icon.icon-dots
|
8
|
+
= t('spina.choose_from_library')
|
9
|
+
|
10
|
+
- if f.object.structure_partable && f.object.structure_partable.file.present?
|
11
|
+
.attachment= f.object.structure_partable.name
|
12
|
+
|
13
|
+
= f.hidden_field :structure_partable_id
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<script type="text/javascript">
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
3
|
+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
4
|
+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
5
|
+
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
5
6
|
|
6
|
-
(
|
7
|
-
|
8
|
-
|
9
|
-
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
10
|
-
})();
|
7
|
+
ga('create', '<%= current_account.google_analytics %>', 'auto');
|
8
|
+
ga('set', 'anonymizeIp', true);
|
9
|
+
ga('send', 'pageview');
|
11
10
|
</script>
|
11
|
+
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
-
|
3
|
-
=
|
1
|
+
%ul
|
2
|
+
- Spina::Page.live.all.each do |page|
|
3
|
+
%li{class: ('active' if page == current_page)}= page.menu_title, page.materialized_path
|
@@ -7,8 +7,8 @@ xml.urlset "xmlns" => "http://www.google.com/schemas/sitemap/0.9", "xmlns:xhtml"
|
|
7
7
|
|
8
8
|
# Translations
|
9
9
|
page.translations.each do |translation|
|
10
|
-
if translation.locale.in? Spina.config.locales
|
11
|
-
|
10
|
+
if translation.locale.in? Spina.config.locales.map(&:to_s)
|
11
|
+
Mobility.with_locale(translation.locale) do
|
12
12
|
xml.xhtml(:link, rel: "alternate", hreflang: translation.locale, href: "#{request.protocol}#{request.host}#{page.materialized_path}")
|
13
13
|
end
|
14
14
|
end
|
@@ -0,0 +1,243 @@
|
|
1
|
+
th:
|
2
|
+
spina:
|
3
|
+
cancel: ยกเลิก
|
4
|
+
close: ปิด
|
5
|
+
choose_from_library: เลือกจากไลบารี
|
6
|
+
edit: แก้ไข
|
7
|
+
save: บันทึก
|
8
|
+
delete: ลบ
|
9
|
+
permanently_delete: ลบอย่างถาวร
|
10
|
+
delete_confirmation: "คุณแน่ใจหรือไม่ว่าต้องการลบ <strong>%{subject}</strong>?"
|
11
|
+
login: ลงชื่อเข้าใช้
|
12
|
+
preview_website: ตัวอย่างเว็บไซต์
|
13
|
+
search: ค้นหา
|
14
|
+
ago: อายุ
|
15
|
+
edit_website: แก้ไขเว็บไซต์
|
16
|
+
logout: ลงชื่อออก
|
17
|
+
main_menu: เมนูหลัก
|
18
|
+
|
19
|
+
settings:
|
20
|
+
title: การตั้งค่า
|
21
|
+
save: บันทึก
|
22
|
+
|
23
|
+
forgot_password:
|
24
|
+
new: ลืมรหัสผ่าน
|
25
|
+
request: ขอรหัสผ่านใหม่
|
26
|
+
unknown_user: ไม่มีผู้ใช้รายนี้
|
27
|
+
save: บันทึกรหัสผ่านใหม่
|
28
|
+
success: คุณสามารถใช้รหัสผ่านใหม่ได้
|
29
|
+
mail_subject: รีเซ็ตรหัสผ่านของคุณ
|
30
|
+
expired: โทเค็นของคุณเพื่อรีเซ็ตรหัสผ่านหมดอายุแล้ว
|
31
|
+
|
32
|
+
modal:
|
33
|
+
agree: "ตกลง"
|
34
|
+
cancel: "ยกเลิก"
|
35
|
+
|
36
|
+
notifications:
|
37
|
+
information: ข้อมูล
|
38
|
+
alert: อ้าว!เกิดข้อผิดพลาด
|
39
|
+
login: คุณต้องเข้าสู่ระบบก่อน
|
40
|
+
wrong_username_or_password: อีเมลหรือรหัสผ่านไม่ถูกต้อง
|
41
|
+
|
42
|
+
website:
|
43
|
+
title: ไซต์ของคุณ
|
44
|
+
pages: หน้าเพจ
|
45
|
+
all_pages: หน้าเพจทั้งหมด
|
46
|
+
pages_description: "ทุกหน้าในเว็บไซต์ของคุณ"
|
47
|
+
media_library: มีเดียไลบรารี
|
48
|
+
media_library_description: "คุณจะพบรูปภาพและเอกสารทั้งหมดของคุณ"
|
49
|
+
documents: เอกสาร
|
50
|
+
photos: รูปภาพ
|
51
|
+
|
52
|
+
pages:
|
53
|
+
new: หน้าใหม่
|
54
|
+
create_page: "สร้างหน้าใหม่ %{template}"
|
55
|
+
change_order: เปลี่ยนออเดอร์
|
56
|
+
done_changing_order: การสั่งซื้อเสร็จสิ้น
|
57
|
+
page_content: เนื้อหา
|
58
|
+
page_seo: เครื่องมือค้นหา
|
59
|
+
advanced: ขั้นสูง
|
60
|
+
page_part: ส่วนของหน้า
|
61
|
+
photos_picker: เลือกรูปภาพ
|
62
|
+
photo_picker: เลือกรูปภาพ
|
63
|
+
delete_confirmation: "คุณแน่ใจหรือไม่ว่าต้องการลบหน้านี้ <strong>%{subject}</strong>?"
|
64
|
+
save: บันทึกหน้า
|
65
|
+
concept: คอนเซ็ปท์
|
66
|
+
show_in_menu: มองไม่เห็น
|
67
|
+
skip_to_first_child: ข้ามไปที่หน้าแรก
|
68
|
+
invisible_to_search_engines: เว็บไซต์ของคุณไม่สามารถใช้งานได้กับเครื่องมือค้นหา
|
69
|
+
invisible_to_search_engines_description: ป้อนการตั้งค่าเพื่อเปิดใช้งานเครื่องมือค้นหา
|
70
|
+
rebuild_materialized_path: กำหนดเส้นทางที่สร้างขึ้นใหม่
|
71
|
+
materialize_path_confirmation: "คุณแน่ใจหรือว่าต้องการสร้างเส้นทางสำหรับหน้านี้ใหม่"
|
72
|
+
saving: กำลังบันทึก
|
73
|
+
saved: บันทึกเสร็จสิ้น
|
74
|
+
|
75
|
+
users:
|
76
|
+
new: ผู้ใช้ใหม่
|
77
|
+
save: บันทึกผู้ใช้
|
78
|
+
delete_confirmation: "คุณแน่ใจหรือไม่ว่าต้องการลบผู้ใช้นี้ <strong>%{user}</strong>?"
|
79
|
+
cannot_be_created: ไม่สามารถบันทึกการสร้างได้
|
80
|
+
|
81
|
+
photos:
|
82
|
+
delete_confirmation: "คุณแน่ใจหรือไม่ว่าต้องการลบ <strong> รูปภาพนี้ </strong>?"
|
83
|
+
insert_photos: แทรกหลายรูปภาพ
|
84
|
+
select_images: เลือกรูปภาพ
|
85
|
+
insert_photo: แทรกรูปภาพ
|
86
|
+
link: "URL รูปภาพของคุณ:"
|
87
|
+
cannot_be_created: "รูปภาพของคุณไม่สามารถประมวลผลได้:"
|
88
|
+
upload_image: อัปโหลดรูปภาพ
|
89
|
+
organize: จัดระเบียบรูปภาพ
|
90
|
+
done_organizing: เสร็จสิ้นการจัดรูปภาพ
|
91
|
+
new_folder: โฟลเดอร์ใหม่
|
92
|
+
delete_folder: ลบโฟลเดอร์
|
93
|
+
|
94
|
+
wysiwyg:
|
95
|
+
paragraph: ย่อหน้า
|
96
|
+
heading_1: ส่วนหัว 1
|
97
|
+
heading_2: ส่วนหัว 2
|
98
|
+
heading_3: ส่วนหัว 3
|
99
|
+
quote: อ้างอิง
|
100
|
+
insert_link: แทรกลิงค์
|
101
|
+
|
102
|
+
preferences:
|
103
|
+
title: การกำหนดลักษณะ
|
104
|
+
account: ทั่วไป
|
105
|
+
account_description: ความชอบส่วนบุคคล
|
106
|
+
account_save: บันทึกการตั้งค่า
|
107
|
+
style: สไตล์
|
108
|
+
style_description: เลือกธีมที่เหมาะกับแบรนด์ของคุณ
|
109
|
+
style_save: บันทึกสไตล์
|
110
|
+
users: ผู้ใช้
|
111
|
+
users_description: จัดการผู้ใช้และผู้ดูแลระบบ
|
112
|
+
social_media: เครือข่ายทางสังคม
|
113
|
+
social_media_description: บัญชี Facebook และ Twitter
|
114
|
+
social_media_save: บันทึกเครือข่ายสังคมออนไลน์
|
115
|
+
Analytics: วิเคราะห์และเครื่องมือค้นหา
|
116
|
+
analytics_description: เชื่อมโยงบัญชีของคุณเพื่อการวิเคราะห์แบบเรียลไทม์
|
117
|
+
analytics_save: บันทึกการตั้งค่า
|
118
|
+
domain_name_settings: การกำหนดค่าโดเมน
|
119
|
+
domain_name_settings_description: ตั้งค่าโดเมนของคุณเอง
|
120
|
+
|
121
|
+
attachments:
|
122
|
+
insert: 'แทรกเอกสาร'
|
123
|
+
insert_multiple: 'แทรกเอกสาร'
|
124
|
+
|
125
|
+
media_library:
|
126
|
+
photos: รูปภาพ
|
127
|
+
attachments: เอกสาร
|
128
|
+
|
129
|
+
activerecord:
|
130
|
+
models:
|
131
|
+
spina/page:
|
132
|
+
one: หน้าเพจ
|
133
|
+
other: หลายๆหน้าเพจ
|
134
|
+
spina/user:
|
135
|
+
one: ผู้ใช้
|
136
|
+
other: หลายๆผู้ใช้
|
137
|
+
spina/photo:
|
138
|
+
one: รูปภาพ
|
139
|
+
other: หลายๆรูปภาพ
|
140
|
+
spina/attachment:
|
141
|
+
one: เอกสาร
|
142
|
+
other: หลายๆเอกสาร
|
143
|
+
|
144
|
+
attributes:
|
145
|
+
spina/account:
|
146
|
+
name: ชื่อเว็บไซต์
|
147
|
+
address: ที่อยู่
|
148
|
+
postal_code: รหัสไปรษณีย์
|
149
|
+
city: เมือง
|
150
|
+
phone: โทรศัพท์
|
151
|
+
email: อีเมล
|
152
|
+
kvk_identifier: การค้า
|
153
|
+
kvk_identifier_description: คำอธิบายทางการค้า
|
154
|
+
vat_identifier: ภาษีมูลค่าเพิ่ม
|
155
|
+
vat_identifier_description: คำอธิบายภาษีมูลค่าเพิ่ม
|
156
|
+
theme: ธีม
|
157
|
+
logo: โลโก้
|
158
|
+
google_analytics: วิเคราะห์ทาง Google
|
159
|
+
google_site_verification: ตรวจสอบไซต์
|
160
|
+
robots_allowed: ยอมรับ
|
161
|
+
facebook: Facebook
|
162
|
+
twitter: Twitter
|
163
|
+
google_plus: Google+
|
164
|
+
|
165
|
+
spina/attachment:
|
166
|
+
created_at: สร้าง
|
167
|
+
name: ชื่อ
|
168
|
+
size: ขนาด
|
169
|
+
|
170
|
+
spina/page:
|
171
|
+
title: ชื่อเรื่อง
|
172
|
+
title_placeholder: ชื่อเรื่องของหน้า
|
173
|
+
seo_title: SEO <title>
|
174
|
+
seo_title_placeholder: ชื่อนี้ใช้ใน <title> -tag
|
175
|
+
description: คำอธิบาย meta
|
176
|
+
description_description: คำอธิบายนี้จะปรากฏในผลลัพธ์การค้นหา
|
177
|
+
description_placeholder: คำอธิบายโดยย่อของหน้าเว็บของคุณ
|
178
|
+
draft: การร่าง
|
179
|
+
draft_description: เหมาะสำหรับหน้าเว็บของคุณที่ยังไม่เสร็จสมบูรณ์
|
180
|
+
skip_to_first_child: ส่งใหม่
|
181
|
+
skip_to_first_child_description: ส่งต่อไปยังหน้าแรก
|
182
|
+
link_url: เปลี่ยนหน้า
|
183
|
+
link_url_description: ส่งต่อไปยัง URL
|
184
|
+
link_url_placeholder: เช่น http://www.example.com/
|
185
|
+
show_in_menu: แสดงการนำทาง
|
186
|
+
show_in_menu_description: "ถ้าหน้านี้ถูกปิดใช้งานจะไม่ปรากฏการนำทางของคุณ"
|
187
|
+
menu_title: ชื่อการนำทาง
|
188
|
+
menu_title_placeholder: เว้นว่างไว้เพื่อใช้ชื่อหน้า
|
189
|
+
view_template: เทมเพลตของเพจ
|
190
|
+
ancestry: หน้าแรก
|
191
|
+
no_parent: ไม่มีเพจระดับบน
|
192
|
+
|
193
|
+
spina/user:
|
194
|
+
email: อีเมล
|
195
|
+
password: รหัสผ่าน
|
196
|
+
name: ชื่อ
|
197
|
+
name_placeholder: ชื่อ
|
198
|
+
อีเมล: อีเมล
|
199
|
+
email_description: อีเมลของคุณต้องไม่ซ้ำใคร
|
200
|
+
password: รหัสผ่าน
|
201
|
+
password_description: เว้นว่างไว้เพื่อเก็บรหัสผ่าน
|
202
|
+
password_confirmation: ยืนยันรหัสผ่าน
|
203
|
+
admin: ผู้ดูแลระบบ
|
204
|
+
user: ผู้ใช้
|
205
|
+
admin_description: ผู้ดูแลระบบสามารถสร้างผู้ใช้
|
206
|
+
role: บทบาท
|
207
|
+
last_logged_in: เข้าสู่ระบบครั้งล่าสุด
|
208
|
+
|
209
|
+
spina/media_folder:
|
210
|
+
name: ชื่อ
|
211
|
+
|
212
|
+
spina/navigation:
|
213
|
+
label: เครื่องหมายป้ายกำกับ
|
214
|
+
auto_add_pages: เพิ่มหน้าเพจโดยอัตโนมัติ
|
215
|
+
auto_add_pages_description: เพจใหม่จะถูกเพิ่มลงในการนำทางนี้โดยอัตโนมัติ
|
216
|
+
pages: หน้าเพจ
|
217
|
+
pages_description: เลือกหน้าเพจที่คุณต้องการใช้ในการนำทางนี้
|
218
|
+
|
219
|
+
spina/user:
|
220
|
+
email: อีเมล
|
221
|
+
password: รหัสผ่าน
|
222
|
+
name: ชื่อ
|
223
|
+
name_placeholder: ชื่อ
|
224
|
+
email: อีเมล
|
225
|
+
email_description: อีเมลของคุณต้องไม่ซ้ำ
|
226
|
+
password: รหัสผ่าน
|
227
|
+
password_description: ปล่อยว่างเพื่อเก็บรหัสผ่านของคุณ
|
228
|
+
password_confirmation: ยืนยันรหัสผ่าน
|
229
|
+
admin: ผู้ดูแลระบบ
|
230
|
+
user: ผู้ใช้
|
231
|
+
admin_description: ผู้ดูแลระบบสามารถสร้างผู้ใช้ได้
|
232
|
+
role: บทบาท
|
233
|
+
last_logged_in: ป้อนครั้งสุดท้าย
|
234
|
+
|
235
|
+
misc:
|
236
|
+
messages:
|
237
|
+
zero: "0 ข้อความ"
|
238
|
+
one: "1 ข้อความ"
|
239
|
+
other: "%{count} ข้อความใหม่"
|
240
|
+
|
241
|
+
languages:
|
242
|
+
en: ภาษาอังกฤษ
|
243
|
+
nl: ไทย
|