spina 1.1.1 → 2.0.0.alpha

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.

Files changed (204) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +23 -244
  3. data/app/assets/fonts/spina/Metropolis-Black.woff2 +0 -0
  4. data/app/assets/fonts/spina/Metropolis-BlackItalic.woff2 +0 -0
  5. data/app/assets/fonts/spina/Metropolis-Bold.woff2 +0 -0
  6. data/app/assets/fonts/spina/Metropolis-BoldItalic.woff2 +0 -0
  7. data/app/assets/fonts/spina/Metropolis-ExtraBold.woff2 +0 -0
  8. data/app/assets/fonts/spina/Metropolis-ExtraBoldItalic.woff2 +0 -0
  9. data/app/assets/fonts/spina/Metropolis-ExtraLight.woff2 +0 -0
  10. data/app/assets/fonts/spina/Metropolis-ExtraLightItalic.woff2 +0 -0
  11. data/app/assets/fonts/spina/Metropolis-Light.woff2 +0 -0
  12. data/app/assets/fonts/spina/Metropolis-LightItalic.woff2 +0 -0
  13. data/app/assets/fonts/spina/Metropolis-Medium.woff2 +0 -0
  14. data/app/assets/fonts/spina/Metropolis-MediumItalic.woff2 +0 -0
  15. data/app/assets/fonts/spina/Metropolis-Regular.woff2 +0 -0
  16. data/app/assets/fonts/spina/Metropolis-RegularItalic.woff2 +0 -0
  17. data/app/assets/fonts/spina/Metropolis-SemiBold.woff2 +0 -0
  18. data/app/assets/fonts/spina/Metropolis-SemiBoldItalic.woff2 +0 -0
  19. data/app/assets/fonts/spina/Metropolis-Thin.woff2 +0 -0
  20. data/app/assets/fonts/spina/Metropolis-ThinItalic.woff2 +0 -0
  21. data/app/assets/fonts/spina/ics_spina.eot +0 -0
  22. data/app/assets/fonts/spina/ics_spina.svg +285 -267
  23. data/app/assets/fonts/spina/ics_spina.ttf +0 -0
  24. data/app/assets/fonts/spina/ics_spina.woff +0 -0
  25. data/app/assets/fonts/spina/ics_spina.woff2 +0 -0
  26. data/app/assets/icons/spina/bold.svg +1 -1
  27. data/app/assets/icons/spina/code.svg +1 -1
  28. data/app/assets/icons/spina/image.svg +1 -10
  29. data/app/assets/icons/spina/indent.svg +1 -0
  30. data/app/assets/icons/spina/italic.svg +1 -1
  31. data/app/assets/icons/spina/link.svg +1 -1
  32. data/app/assets/icons/spina/list-ol.svg +1 -0
  33. data/app/assets/icons/spina/list.svg +1 -0
  34. data/app/assets/icons/spina/outdent.svg +1 -0
  35. data/app/assets/icons/spina/preview/ics_spina-preview.html +121 -1
  36. data/app/assets/icons/spina/quote-right.svg +1 -0
  37. data/app/assets/icons/spina/redo.svg +1 -0
  38. data/app/assets/icons/spina/strikethrough.svg +1 -0
  39. data/app/assets/icons/spina/undo.svg +1 -0
  40. data/app/assets/images/spina/favicon.png +0 -0
  41. data/app/assets/javascripts/spina/admin/application.js +1 -2
  42. data/app/assets/javascripts/spina/admin/controllers/attachment_picker_controller.js +15 -0
  43. data/app/assets/javascripts/spina/admin/controllers/image_form_controller.js +5 -4
  44. data/app/assets/javascripts/spina/admin/controllers/infinite_scroll_controller.js +20 -22
  45. data/app/assets/javascripts/spina/admin/controllers/media_picker_controller.js +171 -0
  46. data/app/assets/javascripts/spina/admin/controllers/modal_controller.js +18 -0
  47. data/app/assets/javascripts/spina/admin/controllers/repeater_form_controller.js +38 -0
  48. data/app/assets/javascripts/spina/admin/media_gallery.coffee +0 -3
  49. data/app/assets/javascripts/spina/admin/notifications.coffee +1 -1
  50. data/app/assets/javascripts/spina/admin/pages.coffee.erb +3 -20
  51. data/app/assets/javascripts/spina/admin/scaffold.coffee +0 -3
  52. data/app/assets/javascripts/spina/admin/trix.coffee.erb +14 -18
  53. data/app/assets/stylesheets/spina.sass +10 -10
  54. data/app/assets/stylesheets/spina/_buttons.sass +58 -32
  55. data/app/assets/stylesheets/spina/_configuration.sass.erb +2 -2
  56. data/app/assets/stylesheets/spina/_fonts.sass +32 -0
  57. data/app/assets/stylesheets/spina/_forms.sass +65 -76
  58. data/app/assets/stylesheets/spina/_gallery.sass +22 -4
  59. data/app/assets/stylesheets/spina/_ics_spina.scss +8 -0
  60. data/app/assets/stylesheets/spina/_media_picker.sass +133 -0
  61. data/app/assets/stylesheets/spina/_modal.sass +35 -2
  62. data/app/assets/stylesheets/spina/_notifications.sass +20 -14
  63. data/app/assets/stylesheets/spina/_pages.sass +131 -0
  64. data/app/assets/stylesheets/spina/_sortable_lists.sass +14 -8
  65. data/app/assets/stylesheets/spina/_tables.sass +7 -4
  66. data/app/assets/stylesheets/spina/_trix_custom.sass +15 -28
  67. data/app/controllers/concerns/spina/frontend.rb +9 -0
  68. data/app/controllers/spina/admin/accounts_controller.rb +9 -13
  69. data/app/controllers/spina/admin/attachments_controller.rb +0 -22
  70. data/app/controllers/spina/admin/images_controller.rb +1 -1
  71. data/app/controllers/spina/admin/media_folders_controller.rb +10 -0
  72. data/app/controllers/spina/admin/media_picker_controller.rb +18 -19
  73. data/app/controllers/spina/admin/pages_controller.rb +3 -7
  74. data/app/controllers/spina/admin/resources_controller.rb +9 -4
  75. data/app/controllers/spina/application_controller.rb +1 -1
  76. data/app/helpers/spina/admin/pages_helper.rb +22 -20
  77. data/app/helpers/spina/{files_helper.rb → attachments_helper.rb} +1 -1
  78. data/app/helpers/spina/images_helper.rb +14 -0
  79. data/app/helpers/spina/pages_helper.rb +23 -4
  80. data/app/models/concerns/spina/partable.rb +19 -7
  81. data/app/models/concerns/spina/translated_content.rb +19 -0
  82. data/app/models/spina/account.rb +3 -10
  83. data/app/models/spina/attachment.rb +0 -4
  84. data/app/models/spina/current.rb +1 -0
  85. data/app/models/spina/image.rb +0 -4
  86. data/app/models/spina/page.rb +19 -20
  87. data/app/models/spina/parts/attachment.rb +17 -0
  88. data/app/models/spina/parts/base.rb +12 -0
  89. data/app/models/spina/parts/image.rb +30 -0
  90. data/app/models/spina/parts/image_collection.rb +23 -0
  91. data/app/models/spina/parts/line.rb +7 -0
  92. data/app/models/spina/parts/option.rb +13 -0
  93. data/app/models/spina/parts/repeater.rb +10 -0
  94. data/app/models/spina/parts/repeater_content.rb +15 -0
  95. data/app/models/spina/parts/text.rb +7 -0
  96. data/app/models/spina/resource.rb +4 -12
  97. data/app/presenters/spina/content_presenter.rb +58 -0
  98. data/app/presenters/spina/menu_presenter.rb +2 -1
  99. data/app/views/layouts/spina/admin/admin.html.haml +3 -4
  100. data/app/views/layouts/spina/admin/pages.html.haml +5 -4
  101. data/app/views/spina/admin/accounts/_form.html.haml +13 -7
  102. data/app/views/spina/admin/accounts/analytics.html.haml +5 -3
  103. data/app/views/spina/admin/accounts/style.html.haml +26 -21
  104. data/app/views/spina/admin/images/index.html.haml +7 -5
  105. data/app/views/spina/admin/media_folders/_form.html.haml +5 -2
  106. data/app/views/spina/admin/media_folders/edit.js.erb +1 -0
  107. data/app/views/spina/admin/media_folders/show.html.haml +2 -1
  108. data/app/views/spina/admin/media_picker/_image.html.haml +3 -0
  109. data/app/views/spina/admin/media_picker/_media_picker.html.haml +32 -0
  110. data/app/views/spina/admin/media_picker/_media_picker_grid.html.haml +25 -0
  111. data/app/views/spina/admin/media_picker/infinite_scroll.js.erb +4 -4
  112. data/app/views/spina/admin/media_picker/select.js.erb +2 -0
  113. data/app/views/spina/admin/media_picker/show.html.haml +1 -0
  114. data/app/views/spina/admin/media_picker/show.js.erb +1 -1
  115. data/app/views/spina/admin/pages/_form.html.haml +10 -8
  116. data/app/views/spina/admin/pages/_form_advanced.html.haml +19 -17
  117. data/app/views/spina/admin/pages/_form_page_content.html.haml +14 -13
  118. data/app/views/spina/admin/pages/_form_page_seo.html.haml +15 -4
  119. data/app/views/spina/admin/pages/_page.html.haml +5 -3
  120. data/app/views/spina/admin/pages/_page_nested_list.html.haml +2 -3
  121. data/app/views/spina/admin/pages/index.html.haml +5 -4
  122. data/app/views/spina/admin/parts/attachments/_form.html.haml +6 -0
  123. data/app/views/spina/admin/parts/image_collections/_fields.html.haml +7 -0
  124. data/app/views/spina/admin/parts/image_collections/_form.html.haml +12 -0
  125. data/app/views/spina/admin/parts/images/_form.html.haml +18 -0
  126. data/app/views/spina/admin/parts/lines/_form.html.haml +2 -0
  127. data/app/views/spina/admin/parts/options/_form.html.haml +3 -0
  128. data/app/views/spina/admin/parts/repeaters/_fields.html.haml +15 -0
  129. data/app/views/spina/admin/parts/repeaters/_form.html.haml +18 -0
  130. data/app/views/spina/admin/parts/texts/_form.html.haml +6 -0
  131. data/app/views/spina/admin/resources/edit.html.haml +28 -12
  132. data/app/views/spina/admin/resources/show.html.haml +6 -3
  133. data/app/views/spina/admin/shared/_notifications.html.haml +4 -4
  134. data/config/locales/TH.yml +220 -205
  135. data/config/locales/bg.yml +219 -211
  136. data/config/locales/de.yml +218 -190
  137. data/config/locales/en.yml +218 -208
  138. data/config/locales/es.yml +219 -206
  139. data/config/locales/fr.yml +219 -190
  140. data/config/locales/id.yml +219 -189
  141. data/config/locales/it.yml +225 -152
  142. data/config/locales/nl.yml +220 -197
  143. data/config/locales/pl.yml +218 -185
  144. data/config/locales/pt-BR.yml +218 -205
  145. data/config/locales/ro.yml +258 -225
  146. data/config/locales/ru.yml +231 -171
  147. data/config/locales/sv.yml +218 -183
  148. data/config/locales/tr.yml +224 -151
  149. data/config/locales/zh-CN.yml +225 -175
  150. data/db/migrate/11_create_spina_resources.rb +0 -2
  151. data/db/migrate/12_add_url_title_to_spina_page_translations.rb +5 -0
  152. data/db/migrate/13_add_json_attributes_to_spina_accounts.rb +5 -0
  153. data/db/migrate/14_add_json_attributes_to_spina_pages.rb +5 -0
  154. data/db/migrate/15_add_slug_to_spina_resources.rb +5 -0
  155. data/lib/generators/spina/templates/app/views/demo/pages/demo.html.haml +13 -21
  156. data/lib/generators/spina/templates/app/views/demo/pages/homepage.html.haml +1 -1
  157. data/lib/generators/spina/templates/config/initializers/themes/default.rb +4 -4
  158. data/lib/generators/spina/templates/config/initializers/themes/demo.rb +32 -44
  159. data/lib/spina.rb +2 -0
  160. data/lib/spina/attr_json_spina_parts_model.rb +29 -0
  161. data/lib/spina/engine.rb +13 -3
  162. data/lib/spina/part.rb +19 -0
  163. data/lib/spina/theme.rb +1 -1
  164. data/lib/spina/version.rb +1 -1
  165. data/vendor/assets/javascripts/spina/sortable.js +2 -2
  166. metadata +71 -45
  167. data/app/assets/javascripts/spina/admin/account.coffee +0 -16
  168. data/app/models/concerns/spina/image_collectable.rb +0 -23
  169. data/app/models/concerns/spina/optionable.rb +0 -12
  170. data/app/models/concerns/spina/part.rb +0 -38
  171. data/app/models/spina/attachment_collection.rb +0 -20
  172. data/app/models/spina/image_collection.rb +0 -23
  173. data/app/models/spina/image_collections_image.rb +0 -6
  174. data/app/models/spina/layout_part.rb +0 -22
  175. data/app/models/spina/line.rb +0 -10
  176. data/app/models/spina/option.rb +0 -17
  177. data/app/models/spina/page_part.rb +0 -22
  178. data/app/models/spina/structure.rb +0 -14
  179. data/app/models/spina/structure_item.rb +0 -22
  180. data/app/models/spina/structure_part.rb +0 -20
  181. data/app/models/spina/text.rb +0 -10
  182. data/app/views/dummy/show.html.haml +0 -1
  183. data/app/views/spina/admin/attachments/_attachment_collection.html.haml +0 -2
  184. data/app/views/spina/admin/attachments/_select.html.haml +0 -17
  185. data/app/views/spina/admin/attachments/_select_collection.html.haml +0 -18
  186. data/app/views/spina/admin/attachments/insert.js.erb +0 -5
  187. data/app/views/spina/admin/attachments/insert_collection.js.coffee +0 -7
  188. data/app/views/spina/admin/attachments/select.js.erb +0 -2
  189. data/app/views/spina/admin/attachments/select_collection.js.erb +0 -2
  190. data/app/views/spina/admin/image_collections/_image_collection.html.haml +0 -5
  191. data/app/views/spina/admin/layout_partables/lines/_form.html.haml +0 -2
  192. data/app/views/spina/admin/partables/attachment_collections/_form.html.haml +0 -14
  193. data/app/views/spina/admin/partables/attachments/_form.html.haml +0 -13
  194. data/app/views/spina/admin/partables/image_collections/_form.html.haml +0 -16
  195. data/app/views/spina/admin/partables/images/_form.html.haml +0 -21
  196. data/app/views/spina/admin/partables/lines/_form.html.haml +0 -5
  197. data/app/views/spina/admin/partables/options/_form.html.haml +0 -7
  198. data/app/views/spina/admin/partables/photo_collections/_form.html.haml +0 -4
  199. data/app/views/spina/admin/partables/photos/_form.html.haml +0 -4
  200. data/app/views/spina/admin/partables/structures/_form.html.haml +0 -21
  201. data/app/views/spina/admin/partables/texts/_form.html.haml +0 -8
  202. data/app/views/spina/admin/structure_items/_fields.html.haml +0 -15
  203. data/app/views/spina/admin/structure_partables/attachment_collections/_form.html.haml +0 -14
  204. data/app/views/spina/admin/structure_partables/attachments/_form.html.haml +0 -13
@@ -1,5 +1,6 @@
1
1
  = link_to spina.edit_admin_page_path(page), class: 'button button-link button-small sortable-link' do
2
2
  = page.menu_title
3
+
3
4
  - if page.draft?
4
5
  %small (#{t('spina.pages.concept')})
5
6
  - elsif !page.show_in_menu?
@@ -9,6 +10,7 @@
9
10
  %small (#{raw t('spina.pages.skip_to_first_child')})
10
11
 
11
12
  %span.pull-right
12
- = link_to spina.edit_admin_page_path(page), class: 'button button-small button-link dd-nodrag' do
13
- = icon('pencil-outline')
14
- = t('spina.edit')
13
+ = link_to spina.edit_admin_page_path(page), class: 'button button-small button-default dd-nodrag' do
14
+ .button-content
15
+ = icon('pencil-outline')
16
+ = t('spina.edit')
@@ -2,6 +2,5 @@
2
2
  .dd-item-inner
3
3
  = render partial: 'page', object: page_nested_list
4
4
 
5
- - if page_nested_list.children.active.regular_pages.any?
6
- %ol.dd-list
7
- = render partial: 'page_nested_list', collection: page_nested_list.children.active.sorted.regular_pages
5
+ %ol.dd-list
6
+ = render partial: 'page_nested_list', collection: page_nested_list.children.active.sorted.regular_pages
@@ -1,8 +1,9 @@
1
1
  - content_for(:header_actions) do
2
2
  %span{data: {dropdown: true}}
3
3
  = link_to spina.new_admin_page_path(params: {view_template: 'show'}), class: 'button button-primary', style: 'margin-right: 0', data: {trigger: ('dropdown' if current_theme.new_page_templates.size > 1), target: '#create_page_dropdown'} do
4
- = icon('plus')
5
- = t('spina.pages.new')
4
+ .button-content
5
+ = icon('plus')
6
+ = t('spina.pages.new')
6
7
 
7
8
  .sliding-dropdown#create_page_dropdown.align-right
8
9
  .slide-controls
@@ -25,9 +26,9 @@
25
26
  - current_theme.new_page_templates.each_with_index do |template2, index2|
26
27
  .slide-dot{class: ('active' if index2 == index)}
27
28
 
28
- = link_to spina.new_admin_page_path(params: {view_template: template[0]}), class: 'button button-primary' do
29
+ = link_to spina.new_admin_page_path(params: {view_template: template[0]}), class: 'button button-default' do
29
30
  = icon('pencil-outline')
30
- = t('spina.pages.create_page', template: template[1])
31
+ = t('spina.pages.new')
31
32
 
32
33
  .well
33
34
  .dd#pages_list{data: {:"sort-url" => spina.sort_admin_pages_url }}
@@ -0,0 +1,6 @@
1
+ .page-form-label= f.object.title
2
+ .page-form-control{data: {controller: "attachment-picker"}}
3
+ = f.hidden_field :signed_blob_id, data: {target: "attachment-picker.signedBlobId"}
4
+ = f.hidden_field :filename, data: {target: "attachment-picker.filename"}
5
+ .select-dropdown
6
+ = f.select :attachment_id, Spina::Attachment.sorted.map{|attachment| [attachment.file&.filename, attachment.id, data: {signed_blob_id: attachment.file&.blob&.signed_id, filename: attachment.file&.filename}]}, {include_blank: t("spina.attachments.choose_attachment")}, {data: {action: "attachment-picker#chooseAttachment"}}
@@ -0,0 +1,7 @@
1
+ = f.hidden_field :image_id, class: 'image-id'
2
+ = f.hidden_field :signed_blob_id, class: 'signed-blob-id'
3
+ = f.hidden_field :filename, class: 'filename'
4
+ - if f.object.signed_blob_id.present? && f.object.spina_image
5
+ = image_tag main_app.url_for(f.object.spina_image.variant(resize: "400x300^", crop: "400x300+0+0"))
6
+ - else
7
+ = image_tag ""
@@ -0,0 +1,12 @@
1
+ .page-form-label= f.object.title
2
+ .page-form-control{data: {controller: "image-form"}}
3
+ .page-form-media-picker
4
+ = link_to admin_media_picker_path(selected_ids: f.object.image_ids, input: "media_picker_#{f.object.object_id}", mode: "multiple"), remote: true, class: 'images', data: {target: 'image-form.image'} do
5
+ .page-form-media-picker-placeholder=t "spina.images.choose"
6
+
7
+ %div{id: "media_picker_#{f.object.object_id}", data: data_attrs_for_image_collection(f)}
8
+ = f.fields_for :images do |ff|
9
+ = render partial: "spina/admin/parts/image_collections/fields", locals: {f: ff}
10
+
11
+ = button_tag type: :default, class: 'button button-small button-default', data: {action: "image-form#remove"} do
12
+ %i.icon.icon-cross{style: "margin: 0; font-size: 10px"}
@@ -0,0 +1,18 @@
1
+ .page-form-label= f.object.title
2
+ .page-form-control{data: {controller: "image-form"}}
3
+ .page-form-media-picker
4
+ %div{style: "width: 100%"}
5
+ = link_to admin_media_picker_path(selected_ids: [f.object.image_id], input: "media_picker_#{f.object.object_id}", mode: "single"), remote: true, class: 'image', data: {target: 'image-form.image'} do
6
+ .page-form-media-picker-placeholder=t "spina.images.choose_image"
7
+ %div{id: "media_picker_#{f.object.object_id}"}
8
+ = f.hidden_field :image_id, data: {target: 'image-form.imageId'}
9
+ = f.hidden_field :signed_blob_id, data: {target: 'image-form.signedBlobId'}
10
+ = f.hidden_field :filename, data: {target: 'image-form.filename'}
11
+ %div{style: "width: 200px; height: 150px; overflow: hidden"}
12
+ - if f.object.signed_blob_id.present? && f.object.spina_image.present?
13
+ = image_tag main_app.url_for(f.object.spina_image.variant(resize: "400x300^", crop: "400x300+0+0")), width: 200, height: 150
14
+
15
+ = f.text_field :alt, placeholder: "Alt text", class: 'page-form-media-picker-alt-text'
16
+
17
+ = button_tag type: :default, class: 'button button-small button-default', data: {action: "image-form#remove"} do
18
+ %i.icon.icon-cross{style: "margin: 0; font-size: 10px"}
@@ -0,0 +1,2 @@
1
+ .page-form-label= f.object.title
2
+ .page-form-control= f.text_field :content, placeholder: f.object.title
@@ -0,0 +1,3 @@
1
+ .page-form-label= f.object.title
2
+ .page-form-control
3
+ .select-dropdown= f.select :value, f.object.options, include_blank: t("spina.options.choose_option")
@@ -0,0 +1,15 @@
1
+ .structure-form-pane{class: ('active' if f.options[:child_index].zero?), id: "structure_form_pane_#{f.object.object_id}", data: {part_id: f.object.object_id, target: "repeater-form.pane"}}
2
+ = f.hidden_field :title
3
+ = f.hidden_field :name
4
+
5
+ - parts = current_theme.parts.find{|p|p[:name].to_s == f.object.name.to_s}&.dig(:parts) || []
6
+
7
+ = f.fields_for :parts, build_parts(f.object, parts) do |ff|
8
+ = ff.hidden_field :title
9
+ = ff.hidden_field :type, value: ff.object.class
10
+ = ff.hidden_field :name
11
+
12
+ .structure-form-part
13
+ = render "spina/admin/parts/#{parts_partial_namespace(ff.object.class.to_s)}/form", f: ff
14
+
15
+ = link_to t('spina.delete'), '#', class: 'button button-mini button-link pull-right', data: {action: "repeater-form#delete", part_id: f.object.object_id}
@@ -0,0 +1,18 @@
1
+ .page-form-label= f.object.title
2
+ .page-form-control
3
+ .structure-form{data: {controller: "repeater-form"}}
4
+ .structure-form-menu
5
+ %ul{data: {target: "repeater-form.list"}}
6
+ - (f.object.content || []).each.with_index do |repeater_content, index|
7
+ %li{class: ('active' if index.zero?), data: {part_id: repeater_content.object_id, target: "repeater-form.listItem"}}
8
+ = link_to "#structure_form_pane_#{repeater_content.object_id}" do
9
+ %i.icon.icon-bars.sortable-handle
10
+ = repeater_content.parts&.first&.content
11
+
12
+ %div{style: "margin-top: 6px; margin-left: 6px"}
13
+ = link_to_add_repeater_fields f do
14
+ = icon('plus')
15
+
16
+ .structure-form-content{data: {target: "repeater-form.content"}}
17
+ = f.fields_for :content do |ff|
18
+ = render 'spina/admin/parts/repeaters/fields', f: ff
@@ -0,0 +1,6 @@
1
+ .page-form-label= f.object.title
2
+ .page-form-content
3
+ .page-form-rich-text
4
+ = f.hidden_field :content, id: "#{f.object.object_id}_input"
5
+ %trix-editor.text-input.trix-content{ input: "#{f.object.object_id}_input" }
6
+
@@ -1,6 +1,6 @@
1
1
  - if @resource.errors.any?
2
2
  - content_for :notifications do
3
- .notification.notification-danger.animated.fadeInRight
3
+ .notification.notification-danger.animated.fadeInLeft
4
4
  = icon('exclamation')
5
5
  .notification-message
6
6
  =t 'spina.notifications.alert'
@@ -9,21 +9,44 @@
9
9
  = icon('cross')
10
10
 
11
11
  = form_with model: @resource, url: spina.admin_resource_path(@resource) do |f|
12
+ = hidden_field_tag :locale, @locale
13
+
12
14
  %header#header
13
- .breadcrumbs= render_breadcrumbs separator: '<div class="divider"></div>'
15
+ .breadcrumbs
16
+ = render_breadcrumbs separator: '<div class="divider"></div>'
17
+ %span{style: 'margin-left: 10px'}
18
+ - if Spina.config.locales.size > 1
19
+ %div{style: "display: inline-block", data: {dropdown: true}}
20
+ = link_to '#', class: 'button button-default button-small', style: 'margin-left: 0; margin-right: 0', data: {trigger: 'dropdown', target: '#locales'} do
21
+ = icon('comment')
22
+ =t "spina.languages.#{@locale}"
23
+ %i.icon.icon-chevron-down{style: 'font-size: 9px; margin-right: 0'}
24
+
25
+ %ul#locales
26
+ - Spina.config.locales.each do |locale|
27
+ %li
28
+ = link_to t("spina.languages.#{locale}"), "?locale=#{locale}", style: ('font-weight: 600' if @locale.to_s == locale.to_s).to_s
14
29
 
15
30
  #header_actions
16
31
  %button.button.button-primary{type: 'submit', style: 'margin-right: 0'}
17
32
  = icon('check')
18
33
  =t 'spina.save'
19
34
 
20
- .well
21
- .horizontal-form
35
+ .horizontal-form
36
+ %div{style: "margin: 40px 0"}
22
37
  .horizontal-form-group
23
38
  .horizontal-form-label
24
39
  = Spina::Resource.human_attribute_name :label
25
40
  .horizontal-form-content
26
- = f.text_field :label, placeholder: Spina::Resource.human_attribute_name(:label)
41
+ .page-form-control
42
+ = f.text_field :label, placeholder: Spina::Resource.human_attribute_name(:label)
43
+
44
+ .horizontal-form-group
45
+ .horizontal-form-label
46
+ = Spina::Resource.human_attribute_name :slug
47
+ .horizontal-form-content
48
+ .page-form-control
49
+ = f.text_field :slug, placeholder: Spina::Resource.human_attribute_name(:slug), value: f.object.slug(locale: @locale)&.parameterize
27
50
 
28
51
  .horizontal-form-group
29
52
  .horizontal-form-label
@@ -40,10 +63,3 @@
40
63
  .select-dropdown
41
64
  - options = options_for_select(current_theme.view_templates.map { |template| [template[:title], template[:name]] }, @resource.view_template)
42
65
  = 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(Spina::Page.new), include_blank: Spina::Resource.human_attribute_name(:no_parent)
@@ -1,15 +1,18 @@
1
1
  - content_for(:header_actions) do
2
2
 
3
- = link_to spina.edit_admin_resource_path(@resource), class: 'button' do
4
- = t('spina.resources.edit')
3
+ = link_to spina.edit_admin_resource_path(@resource), class: 'button button-default' do
4
+ .button-content
5
+ = icon('pencil')
6
+ = t('spina.resources.edit')
5
7
 
6
8
  = 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
9
  = icon('plus')
10
+ = t('spina.pages.new')
8
11
 
9
12
  .well
10
13
  .dd#pages_list
11
14
  %ol.dd-list
12
- - (@resource.parent_page.try(:children) || @resource.pages.roots).each do |page|
15
+ - @resource.pages.roots.each do |page|
13
16
  %li.dd-item{data: {controller: "page-collapse", url: spina.children_admin_page_path(page)}}
14
17
  .dd-item-inner
15
18
  - if page.children.any?
@@ -1,6 +1,6 @@
1
1
  %aside#notifications
2
2
  - if flash[:notice]
3
- .notification.animated.fadeInRight
3
+ .notification.animated.fadeInLeft
4
4
  = icon('info')
5
5
  .notification-message
6
6
  = flash[:notice].html_safe
@@ -9,7 +9,7 @@
9
9
  = icon('cross')
10
10
 
11
11
  - if flash[:alert]
12
- .notification.notification-danger.animated.fadeInRight
12
+ .notification.notification-danger.animated.fadeInLeft
13
13
  = icon('exclamation')
14
14
  .notification-message
15
15
  = flash[:alert].html_safe
@@ -18,8 +18,8 @@
18
18
  = icon('cross')
19
19
 
20
20
  - if flash[:success]
21
- .notification.notification-success.animated.fadeInRight
22
- = icon('large-check')
21
+ .notification.notification-success.animated.fadeInLeft
22
+ = icon('check')
23
23
  .notification-message
24
24
  = flash[:success].html_safe
25
25
  %small= flash[:success_small].try(:html_safe)
@@ -1,243 +1,258 @@
1
1
  th:
2
+ activerecord:
3
+ attributes:
4
+ spina/account:
5
+ address: ที่อยู่
6
+ city: เมือง
7
+ email: อีเมล
8
+ facebook: Facebook
9
+ google_analytics: วิเคราะห์ทาง Google
10
+ google_plus: Google+
11
+ google_site_verification: ตรวจสอบไซต์
12
+ instagram:
13
+ kvk_identifier: การค้า
14
+ kvk_identifier_description: คำอธิบายทางการค้า
15
+ linkedin:
16
+ logo: โลโก้
17
+ name: ชื่อเว็บไซต์
18
+ phone: โทรศัพท์
19
+ postal_code: รหัสไปรษณีย์
20
+ robots_allowed: ยอมรับ
21
+ theme: ธีม
22
+ twitter: Twitter
23
+ vat_identifier: ภาษีมูลค่าเพิ่ม
24
+ vat_identifier_description: คำอธิบายภาษีมูลค่าเพิ่ม
25
+ youtube:
26
+ spina/attachment:
27
+ created_at: สร้าง
28
+ name: ชื่อ
29
+ size: ขนาด
30
+ spina/media_folder:
31
+ name: ชื่อ
32
+ spina/navigation:
33
+ auto_add_pages: เพิ่มหน้าเพจโดยอัตโนมัติ
34
+ auto_add_pages_description: เพจใหม่จะถูกเพิ่มลงในการนำทางนี้โดยอัตโนมัติ
35
+ label: เครื่องหมายป้ายกำกับ
36
+ pages: หน้าเพจ
37
+ pages_description: เลือกหน้าเพจที่คุณต้องการใช้ในการนำทางนี้
38
+ spina/page:
39
+ ancestry: หน้าแรก
40
+ created_at:
41
+ description: คำอธิบาย meta
42
+ description_description: คำอธิบายนี้จะปรากฏในผลลัพธ์การค้นหา
43
+ description_placeholder: คำอธิบายโดยย่อของหน้าเว็บของคุณ
44
+ draft: การร่าง
45
+ draft_description: เหมาะสำหรับหน้าเว็บของคุณที่ยังไม่เสร็จสมบูรณ์
46
+ link_url: เปลี่ยนหน้า
47
+ link_url_description: ส่งต่อไปยัง URL
48
+ link_url_placeholder: เช่น http://www.example.com/
49
+ menu_title: ชื่อการนำทาง
50
+ menu_title_placeholder: เว้นว่างไว้เพื่อใช้ชื่อหน้า
51
+ no_parent: ไม่มีเพจระดับบน
52
+ resource:
53
+ seo_title: SEO <title>
54
+ seo_title_placeholder: ชื่อนี้ใช้ใน <title> -tag
55
+ show_in_menu: แสดงการนำทาง
56
+ show_in_menu_description: ถ้าหน้านี้ถูกปิดใช้งานจะไม่ปรากฏการนำทางของคุณ
57
+ skip_to_first_child: ส่งใหม่
58
+ skip_to_first_child_description: ส่งต่อไปยังหน้าแรก
59
+ title: ชื่อเรื่อง
60
+ title_placeholder: ชื่อเรื่องของหน้า
61
+ url_title:
62
+ url_title_description:
63
+ url_title_placeholder:
64
+ view_template: เทมเพลตของเพจ
65
+ spina/resource:
66
+ label:
67
+ order_by:
68
+ parent_page:
69
+ view_template:
70
+ spina/user:
71
+ admin: ผู้ดูแลระบบ
72
+ admin_description: ผู้ดูแลระบบสามารถสร้างผู้ใช้ได้
73
+ email: อีเมล
74
+ email_description: อีเมลของคุณต้องไม่ซ้ำ
75
+ last_logged_in: ป้อนครั้งสุดท้าย
76
+ name: ชื่อ
77
+ name_placeholder: ชื่อ
78
+ password: รหัสผ่าน
79
+ password_confirmation: ยืนยันรหัสผ่าน
80
+ password_description: ปล่อยว่างเพื่อเก็บรหัสผ่านของคุณ
81
+ role: บทบาท
82
+ user: ผู้ใช้
83
+ models:
84
+ spina/attachment:
85
+ one: เอกสาร
86
+ other: หลายๆเอกสาร
87
+ spina/page:
88
+ one: หน้าเพจ
89
+ other: หลายๆหน้าเพจ
90
+ spina/photo:
91
+ one: รูปภาพ
92
+ other: หลายๆรูปภาพ
93
+ spina/user:
94
+ one: ผู้ใช้
95
+ other: หลายๆผู้ใช้
2
96
  spina:
97
+ ago: อายุ
98
+ attachments:
99
+ choose_attachment:
100
+ insert: แทรกเอกสาร
101
+ insert_multiple: แทรกเอกสาร
3
102
  cancel: ยกเลิก
4
- close: ปิด
5
103
  choose_from_library: เลือกจากไลบารี
6
- edit: แก้ไข
7
- save: บันทึก
104
+ close: ปิด
8
105
  delete: ลบ
9
- permanently_delete: ลบอย่างถาวร
10
- delete_confirmation: "คุณแน่ใจหรือไม่ว่าต้องการลบ <strong>%{subject}</strong>?"
11
- login: ลงชื่อเข้าใช้
12
- preview_website: ตัวอย่างเว็บไซต์
13
- search: ค้นหา
14
- ago: อายุ
106
+ delete_confirmation: คุณแน่ใจหรือไม่ว่าต้องการลบ <strong>%{subject}</strong>?
107
+ edit: แก้ไข
15
108
  edit_website: แก้ไขเว็บไซต์
16
- logout: ลงชื่อออก
17
- main_menu: เมนูหลัก
18
-
19
- settings:
20
- title: การตั้งค่า
21
- save: บันทึก
22
-
23
109
  forgot_password:
110
+ expired: โทเค็นของคุณเพื่อรีเซ็ตรหัสผ่านหมดอายุแล้ว
111
+ mail_subject: รีเซ็ตรหัสผ่านของคุณ
24
112
  new: ลืมรหัสผ่าน
25
113
  request: ขอรหัสผ่านใหม่
26
- unknown_user: ไม่มีผู้ใช้รายนี้
27
114
  save: บันทึกรหัสผ่านใหม่
28
115
  success: คุณสามารถใช้รหัสผ่านใหม่ได้
29
- mail_subject: รีเซ็ตรหัสผ่านของคุณ
30
- expired: โทเค็นของคุณเพื่อรีเซ็ตรหัสผ่านหมดอายุแล้ว
31
-
116
+ unknown_user: ไม่มีผู้ใช้รายนี้
117
+ images:
118
+ all_images:
119
+ back:
120
+ cannot_be_created:
121
+ choose_image:
122
+ choose_images:
123
+ confirm_selection:
124
+ delete:
125
+ delete_confirmation:
126
+ delete_folder:
127
+ done_organizing:
128
+ insert_image:
129
+ insert_photo:
130
+ insert_photos:
131
+ link:
132
+ new_folder:
133
+ organize:
134
+ remove_image:
135
+ upload:
136
+ upload_image:
137
+ languages:
138
+ bg:
139
+ de:
140
+ en: ภาษาอังกฤษ
141
+ es:
142
+ fr:
143
+ id:
144
+ it:
145
+ nl: ไทย
146
+ pl:
147
+ pt-BR:
148
+ ro:
149
+ ru:
150
+ sv:
151
+ th:
152
+ tr:
153
+ zh-CN:
154
+ login: ลงชื่อเข้าใช้
155
+ logout: ลงชื่อออก
156
+ main_menu: เมนูหลัก
157
+ media_library:
158
+ attachments: เอกสาร
159
+ images:
160
+ photos: รูปภาพ
32
161
  modal:
33
- agree: "ตกลง"
34
- cancel: "ยกเลิก"
35
-
162
+ agree: ตกลง
163
+ cancel: ยกเลิก
36
164
  notifications:
37
- information: ข้อมูล
38
165
  alert: อ้าว!เกิดข้อผิดพลาด
166
+ information: ข้อมูล
39
167
  login: คุณต้องเข้าสู่ระบบก่อน
40
168
  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
-
169
+ options:
170
+ choose_option:
52
171
  pages:
53
- new: หน้าใหม่
54
- create_page: "สร้างหน้าใหม่ %{template}"
172
+ advanced: ขั้นสูง
55
173
  change_order: เปลี่ยนออเดอร์
56
- done_changing_order: การสั่งซื้อเสร็จสิ้น
174
+ concept: คอนเซ็ปท์
175
+ create_page: สร้างหน้าใหม่ %{template}
176
+ delete_confirmation: คุณแน่ใจหรือไม่ว่าต้องการลบหน้านี้ <strong>%{subject}</strong>?
177
+ done_changing_order: การสั่งซื้อเสร็จสิ้น
178
+ invisible_to_search_engines: เว็บไซต์ของคุณไม่สามารถใช้งานได้กับเครื่องมือค้นหา
179
+ invisible_to_search_engines_description: ป้อนการตั้งค่าเพื่อเปิดใช้งานเครื่องมือค้นหา
180
+ materialize_path_confirmation: คุณแน่ใจหรือว่าต้องการสร้างเส้นทางสำหรับหน้านี้ใหม่
181
+ new: หน้าใหม่
57
182
  page_content: เนื้อหา
58
- page_seo: เครื่องมือค้นหา
59
- advanced: ขั้นสูง
60
183
  page_part: ส่วนของหน้า
61
- photos_picker: เลือกรูปภาพ
184
+ page_seo: เครื่องมือค้นหา
62
185
  photo_picker: เลือกรูปภาพ
63
- delete_confirmation: "คุณแน่ใจหรือไม่ว่าต้องการลบหน้านี้ <strong>%{subject}</strong>?"
186
+ photos_picker: เลือกรูปภาพ
187
+ rebuild_materialized_path: กำหนดเส้นทางที่สร้างขึ้นใหม่
64
188
  save: บันทึกหน้า
65
- concept: คอนเซ็ปท์
189
+ saved: บันทึกเสร็จสิ้น
190
+ saving: กำลังบันทึก
66
191
  show_in_menu: มองไม่เห็น
67
192
  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
-
193
+ permanently_delete: ลบอย่างถาวร
81
194
  photos:
82
- delete_confirmation: "คุณแน่ใจหรือไม่ว่าต้องการลบ <strong> รูปภาพนี้ </strong>?"
195
+ cannot_be_created: 'รูปภาพของคุณไม่สามารถประมวลผลได้:'
196
+ choose_images:
197
+ delete:
198
+ delete_confirmation: คุณแน่ใจหรือไม่ว่าต้องการลบ <strong> รูปภาพนี้ </strong>?
199
+ delete_folder: ลบโฟลเดอร์
200
+ done_organizing: เสร็จสิ้นการจัดรูปภาพ
201
+ insert_photo: แทรกรูปภาพ
83
202
  insert_photos: แทรกหลายรูปภาพ
203
+ link: 'URL รูปภาพของคุณ:'
204
+ new_folder: โฟลเดอร์ใหม่
205
+ organize: จัดระเบียบรูปภาพ
206
+ rename_folder:
84
207
  select_images: เลือกรูปภาพ
85
- insert_photo: แทรกรูปภาพ
86
- link: "URL รูปภาพของคุณ:"
87
- cannot_be_created: "รูปภาพของคุณไม่สามารถประมวลผลได้:"
88
208
  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
209
  preferences:
103
- title: การกำหนดลักษณะ
210
+ Analytics: วิเคราะห์และเครื่องมือค้นหา
104
211
  account: ทั่วไป
105
212
  account_description: ความชอบส่วนบุคคล
106
213
  account_save: บันทึกการตั้งค่า
214
+ analytics:
215
+ analytics_description: เชื่อมโยงบัญชีของคุณเพื่อการวิเคราะห์แบบเรียลไทม์
216
+ analytics_save: บันทึกการตั้งค่า
217
+ domain_name_settings: การกำหนดค่าโดเมน
218
+ domain_name_settings_description: ตั้งค่าโดเมนของคุณเอง
219
+ social_media: เครือข่ายทางสังคม
220
+ social_media_description: บัญชี Facebook และ Twitter
221
+ social_media_save: บันทึกเครือข่ายสังคมออนไลน์
107
222
  style: สไตล์
108
223
  style_description: เลือกธีมที่เหมาะกับแบรนด์ของคุณ
109
224
  style_save: บันทึกสไตล์
225
+ title: การกำหนดลักษณะ
110
226
  users: ผู้ใช้
111
227
  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:
228
+ preview_website: ตัวอย่างเว็บไซต์
229
+ resources:
230
+ edit:
231
+ save: บันทึก
232
+ search: ค้นหา
233
+ settings:
234
+ save: บันทึก
235
+ title: การตั้งค่า
236
+ users:
237
+ cannot_be_created: ไม่สามารถบันทึกการสร้างได้
238
+ delete_confirmation: คุณแน่ใจหรือไม่ว่าต้องการลบผู้ใช้นี้ <strong>%{user}</strong>?
239
+ new: ผู้ใช้ใหม่
240
+ save: บันทึกผู้ใช้
241
+ visit_page:
242
+ website:
243
+ all_pages: หน้าเพจทั้งหมด
244
+ documents: เอกสาร
245
+ images:
246
+ media_library: มีเดียไลบรารี
247
+ media_library_description: คุณจะพบรูปภาพและเอกสารทั้งหมดของคุณ
248
+ pages: หน้าเพจ
249
+ pages_description: ทุกหน้าในเว็บไซต์ของคุณ
126
250
  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: ไทย
251
+ title: ไซต์ของคุณ
252
+ wysiwyg:
253
+ heading_1: ส่วนหัว 1
254
+ heading_2: ส่วนหัว 2
255
+ heading_3: ส่วนหัว 3
256
+ insert_link: แทรกลิงค์
257
+ paragraph: ย่อหน้า
258
+ quote: อ้างอิง