spina 2.7.0 → 2.9.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.

Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -2
  3. data/Rakefile +2 -1
  4. data/app/assets/builds/spina/tailwind.css +3480 -0
  5. data/app/assets/config/spina/manifest.js +3 -1
  6. data/app/assets/javascripts/spina/controllers/image_collection_controller.js +5 -3
  7. data/app/assets/javascripts/spina/controllers/infinite_scroll_controller.js +4 -2
  8. data/app/assets/stylesheets/spina/{_animate.css → animate.css} +0 -0
  9. data/app/assets/stylesheets/spina/{tailwind/custom.css → application.tailwind.css} +40 -46
  10. data/app/assets/stylesheets/spina/{_fonts.css.erb → fonts.css.erb} +0 -0
  11. data/app/components/spina/forms/trix_toolbar_component.html.erb +1 -1
  12. data/app/components/spina/media_picker/image_component.html.erb +1 -1
  13. data/app/components/spina/media_picker/modal_component.html.erb +4 -4
  14. data/app/components/spina/user_interface/tab_link_component.html.erb +1 -1
  15. data/app/components/spina/user_interface/translations_component.html.erb +21 -0
  16. data/app/components/spina/user_interface/translations_component.rb +26 -0
  17. data/app/controllers/concerns/spina/frontend.rb +1 -1
  18. data/app/controllers/spina/admin/images_controller.rb +3 -2
  19. data/app/controllers/spina/admin/layout_controller.rb +1 -1
  20. data/app/controllers/spina/admin/navigation_items_controller.rb +1 -1
  21. data/app/helpers/spina/images_helper.rb +15 -0
  22. data/app/models/concerns/spina/partable.rb +1 -1
  23. data/app/models/spina/parts/attachment.rb +1 -1
  24. data/app/models/spina/parts/base.rb +2 -1
  25. data/app/presenters/spina/menu_presenter.rb +26 -3
  26. data/app/views/layouts/spina/admin/admin.html.erb +1 -1
  27. data/app/views/layouts/spina/admin/application.html.erb +2 -2
  28. data/app/views/spina/admin/images/_image.html.erb +34 -26
  29. data/app/views/spina/admin/images/index.html.erb +1 -1
  30. data/app/views/spina/admin/images/show.html.erb +3 -1
  31. data/app/views/spina/admin/layout/edit.html.erb +2 -0
  32. data/app/views/spina/admin/media_folders/_media_folder.html.erb +5 -3
  33. data/app/views/spina/admin/navigation_items/_form.html.erb +5 -1
  34. data/app/views/spina/admin/navigations/edit.html.erb +1 -1
  35. data/app/views/spina/admin/pages/_form.html.erb +2 -2
  36. data/app/views/spina/admin/pages/index.html.erb +1 -1
  37. data/app/views/spina/admin/parts/attachments/_form.html.erb +2 -1
  38. data/app/views/spina/admin/parts/image_collections/_form.html.erb +1 -0
  39. data/app/views/spina/admin/parts/images/_form.html.erb +1 -0
  40. data/app/views/spina/admin/parts/lines/_form.html.erb +1 -0
  41. data/app/views/spina/admin/parts/options/_form.html.erb +2 -1
  42. data/app/views/spina/admin/parts/repeaters/_form.html.erb +2 -1
  43. data/app/views/spina/admin/parts/texts/_form.html.erb +1 -0
  44. data/app/views/spina/admin/resources/edit.html.erb +6 -1
  45. data/app/views/spina/admin/shared/_navigation.html.erb +1 -1
  46. data/config/locales/de.yml +63 -28
  47. data/config/locales/fr.yml +190 -152
  48. data/lib/generators/spina/install_generator.rb +8 -3
  49. data/lib/generators/spina/tailwind_config_generator.rb +10 -0
  50. data/{app/assets/config/spina/tailwind.config.js → lib/generators/spina/templates/app/assets/config/spina/tailwind.config.js.tt} +5 -7
  51. data/lib/generators/spina/templates/config/initializers/themes/default.rb +1 -1
  52. data/lib/generators/spina/templates/config/initializers/themes/demo.rb +2 -2
  53. data/lib/spina/version.rb +1 -1
  54. data/lib/spina.rb +22 -11
  55. data/lib/tasks/install.rake +45 -0
  56. data/lib/tasks/tailwind.rake +22 -0
  57. metadata +27 -11
  58. data/app/assets/stylesheets/spina/_tailwind.css +0 -203643
  59. data/app/assets/stylesheets/spina/application.css +0 -6
  60. data/lib/spina/tailwind_purger.rb +0 -147
  61. data/lib/tasks/spina_tasks.rake +0 -75
@@ -1,4 +1,10 @@
1
1
  fr:
2
+ activemodel:
3
+ attributes:
4
+ spina/embeds/youtube:
5
+ url: youtube.com/watch?v=...
6
+ spina/embeds/vimeo:
7
+ url: vimeo.com/...
2
8
  activerecord:
3
9
  attributes:
4
10
  spina/account:
@@ -37,21 +43,21 @@ fr:
37
43
  pages_description: Sélectionnez les pages que vous voulez utiliser dans cette navigation
38
44
  spina/page:
39
45
  ancestry: Page parente
40
- created_at:
46
+ created_at: Créer le
41
47
  description: Meta description
42
48
  description_description: Cette description sera affichée dans les résultats de recherche
43
49
  description_placeholder: Petite description de votre page
44
50
  draft: Brouillon
45
51
  draft_description: Idéal lorsque votre page n'est pas tout à fait terminée
46
- link_url:
47
- link_url_description:
48
- link_url_placeholder:
52
+ link_url: URL de redirection
53
+ link_url_description: Rediriger vers
54
+ link_url_placeholder: e.g. http://www.example.com/
49
55
  menu_title: Titre dans la navigation
50
56
  menu_title_placeholder: Laissez vide pour utiliser le titre de la page
51
57
  no_parent: Pas de parent
52
- resource:
58
+ resource: Ressource
53
59
  seo_title: Balise SEO <title>
54
- seo_title_description:
60
+ seo_title_description: Assurez vous que vos résultats de recherche sont clairs dans les moteurs de recherche
55
61
  seo_title_placeholder: Ce titre est utilisé dans a balise <title>
56
62
  show_in_menu: Afficher dans la navigation
57
63
  show_in_menu_description: Si désactivé cette page ne ​​sera pas affichée dans la navigation
@@ -59,15 +65,15 @@ fr:
59
65
  skip_to_first_child_description: Renvoyer vers la première page enfant
60
66
  title: Titre
61
67
  title_placeholder: Titre de la page
62
- url_title:
63
- url_title_description:
64
- url_title_placeholder:
68
+ url_title: Remplacez le slug
69
+ url_title_description: Optionnel
70
+ url_title_placeholder: Slug
65
71
  view_template: Modèle de page
66
72
  spina/resource:
67
- label:
68
- order_by:
69
- parent_page:
70
- view_template:
73
+ label: Label
74
+ order_by: Trier par
75
+ parent_page: Page parente
76
+ view_template: Modèle de page par défaut
71
77
  spina/user:
72
78
  admin: Administrateur
73
79
  admin_description: Les administrateurs peuvent créer des utilisateurs
@@ -94,21 +100,31 @@ fr:
94
100
  spina/user:
95
101
  one: Utilisateur
96
102
  other: Utilisateurs
103
+ helpers:
104
+ label:
105
+ spina/embeds/button:
106
+ url: URL
107
+ label: Label du bouton
108
+ spina/embeds/youtube:
109
+ url: URL Youtube
110
+ spina/embeds/vimeo:
111
+ url: URL Vimeo
97
112
  spina:
98
113
  accounts:
99
- contact_details:
100
- contact_details_description:
101
- couldnt_be_saved:
102
- name_description:
103
- save:
104
- saved:
114
+ contact_details: Informations de contact
115
+ contact_details_description: Email et téléphone
116
+ couldnt_be_saved: "Le compte n'a pas pu être enregistré"
117
+ name_description: Le nom de votre site
118
+ save: Enregistrer le compte
119
+ saved: Compte enregistré
105
120
  ago: Il y a
106
121
  attachments:
107
- choose_attachment:
108
- delete_confirmation_html:
122
+ choose_attachment: Choisir la pièce jointe
123
+ delete_confirmation_html: Êtes-vous sûr ? Cette pièce jointe pourrait être utilisée sur une page
124
+ download: Télécharger
109
125
  insert: Insérer un document
110
126
  insert_multiple: Insérer des documents
111
- upload:
127
+ upload: Télécharger
112
128
  cancel: Annuler
113
129
  choose_from_library: Choisir parmi la bibliothèque
114
130
  close: Fermer
@@ -116,6 +132,9 @@ fr:
116
132
  delete_confirmation: 'Êtes-vous sûr de vouloir supprimer : <strong>%{subject}</strong> ?'
117
133
  edit: Editer
118
134
  edit_website: Éditer votre site
135
+ embeds:
136
+ embed_a_component: Insérer un composant
137
+ embed_component: Insérer composant
119
138
  forgot_password:
120
139
  expired: Votre jeton pour réinitialiser votre mot de passe a expiré
121
140
  mail_subject: Réinitialiser votre mot de passe
@@ -123,135 +142,138 @@ fr:
123
142
  request: Réinitialiser
124
143
  save: Enregistrer le nouveau mot de passe
125
144
  success: Vous pouvez utiliser votre nouveau mot de passe
126
- unknown_user: Cet utilisateur n'existe pas
145
+ unknown_user: "Cet utilisateur n'existe pas"
127
146
  images:
128
- all_images:
129
- back:
130
- cannot_be_created:
131
- choose_image:
132
- choose_images:
133
- confirm_selection:
134
- delete:
135
- delete_confirmation_html:
136
- delete_folder:
137
- done_organizing:
138
- insert_image:
139
- insert_photo:
140
- insert_photos:
141
- link:
142
- new_folder:
143
- organize:
144
- remove_image:
145
- upload:
146
- upload_image:
147
+ all_images: Toutes les images
148
+ back: Retour
149
+ cannot_be_created: Ne peut pas être créé
150
+ choose_image: Choisir image
151
+ choose_images: Choisir les images
152
+ confirm_selection: Confirmer la sélection
153
+ delete: Supprimer
154
+ delete_confirmation_html: 'Êtes-vous sûr de vouloir supprimer cette <strong>image</strong> ?'
155
+ delete_folder: Supprimer le dossier
156
+ done_organizing: Organisation terminée
157
+ insert_image: Insérer image
158
+ insert_photo: Insérer photo
159
+ insert_photos: Insérer les photos
160
+ link: Lien
161
+ missing_image: Image manquante
162
+ new_folder: Nouveau dossier
163
+ organize: Organiser
164
+ remove_image: Supprimer image
165
+ upload: Télécharger
166
+ upload_image: Télécharger image
147
167
  languages:
148
- bg:
149
- de:
168
+ bg: Bulgare
169
+ de: Allemand
150
170
  en: Anglais
151
- es:
171
+ es: Espagnol
152
172
  fr: Français
153
- id:
154
- it:
173
+ id: Indonésien
174
+ it: Italien
155
175
  nl: Néerlandais
156
- pl:
157
- pt-BR:
158
- ro:
159
- ru:
160
- sv:
161
- th:
162
- tr:
163
- zh-CN:
176
+ pl: Polonais
177
+ pt-BR: Portuguais brésilien
178
+ ro: Roumain
179
+ ru: Russe
180
+ sv: Suédois
181
+ th: Thaï
182
+ tr: Turque
183
+ zh-CN: Chinois simplifié
164
184
  layout:
165
- couldnt_be_saved:
166
- layout:
167
- no_layout_parts:
168
- save:
169
- saved:
185
+ couldnt_be_saved: "La mise en page n'a pas pu être enregistrée"
186
+ layout: Mise en page
187
+ no_layout_parts: Aucun élément de mise en page
188
+ save: Sauvegarder
189
+ saved: Sauvegarder
170
190
  login: Connexion
171
191
  logout: Déconnexion
172
192
  main_menu: Menu principal
173
193
  media_library:
174
- add_folder:
175
- add_image:
194
+ add_folder: Ajouter un dossier
195
+ add_image: Ajouter une image
176
196
  attachments: Documents
177
- back_to_all:
178
- filename:
179
- images:
197
+ back_to_all: Revenir à tous
198
+ filename: Nom de fichier
199
+ images: Images
180
200
  images_count:
181
- insert:
182
- media_folder_delete_confirmation_html:
183
- no_folder:
201
+ one: 1 image
202
+ other: "%{count} images"
203
+ insert: Insérer image
204
+ media_folder_delete_confirmation_html: 'Êtes-vous sûr ? Les images ne seront <strong>pas</strong> supprimées ?'
205
+ no_folder: Pas de dossier
184
206
  photos: Images
185
- rename_folder:
186
- save_media_folder:
187
- upload_from_device:
188
- uploading:
207
+ rename_folder: Renommer la dossier
208
+ save_media_folder: Enregistrer le dossier
209
+ upload_from_device: Télécharger depuis votre appareil
210
+ uploading: En cours de téléchargement
189
211
  modal:
190
212
  agree: Oui, je suis sûr
191
213
  cancel: Non, annuler
192
214
  navigations:
193
- add_menu_item:
194
- add_sub_item:
195
- choose_page:
196
- delete_item:
197
- delete_item_confirmation_html:
198
- description:
199
- navigations:
200
- no_navigations:
201
- sorting_saved:
215
+ add_menu_item: Ajouter un élément de menu
216
+ add_sub_item: Ajouter un sous-élément
217
+ choose_page: Choisir la page
218
+ delete_item: Supprimer élément
219
+ delete_item_confirmation_html: 'Êtes-vous sûr de vouloir <strong>supprimer</strong> cet élément de menu ?'
220
+ description: Description
221
+ navigations: Navigations
222
+ no_navigations: Aucune navigation
223
+ sorting_saved: Trier les éléments sauvegardés
202
224
  notifications:
203
225
  alert: Oups! Quelque chose a mal fonctionné
204
226
  information: Information
205
- login: Vous devez d'abord vous identifier
227
+ login: "Vous devez d'abord vous identifier"
206
228
  wrong_username_or_password: Mauvais email ou mot de passe
207
229
  options:
208
- choose_option:
230
+ choose_option: Choisir option
209
231
  pages:
210
- add_page_to:
211
- add_translation:
232
+ add_page_to: Ajouter la page à
233
+ add_translation: Ajouter traduction
212
234
  advanced: Avancé
213
- cannot_be_deleted:
214
- change_order: Changer l'ordre
215
- change_view_template:
216
- change_view_template_confirmation:
235
+ cannot_be_deleted: Ne peut pas être supprimée
236
+ change_order: "Changer l'ordre"
237
+ change_view_template: Changer le modèle de vue
238
+ change_view_template_confirmation: Changer la confirmation du modèle de vue
217
239
  concept: brouillon
218
- create:
240
+ create: Créer
219
241
  create_page: Nouvelle page %{template}
220
- delete:
242
+ delete: Supprimer
221
243
  delete_confirmation: 'Êtes-vous sûr de vouloir supprimer la page : <strong>%{subject}</strong> ?'
222
- deleted:
223
- done_changing_order: Changement d'ordre effectué
224
- edit_translation:
225
- invisible_to_search_engines: Votre site n'apparait pas sur les moteurs de recherche
226
- invisible_to_search_engines_description: Allez dans vos préférences pour activer l'indexation sur les moteurs de recherche.
227
- main_collection:
244
+ deleted: Supprimé
245
+ done_changing_order: "Changement d'ordre effectué"
246
+ edit_translation: Modifier traduction
247
+ invisible_to_search_engines: "Votre site n'apparait pas sur les moteurs de recherche"
248
+ invisible_to_search_engines_description: "Allez dans vos préférences pour activer l'indexation sur les moteurs de recherche."
249
+ main_collection: Collection principale
228
250
  materialize_path_confirmation: Êtes-vous sûr de vouloir reconstruire le chemin pour cette page ?
229
- missing_translations:
230
- move_page:
231
- moved:
251
+ missing_translations: Traductions manquantes
252
+ move_page: Déplacer la page
253
+ moved: Déplacé
232
254
  new: Nouvelle page
233
- no_pages_yet:
234
- no_parent_page:
255
+ no_pages_yet: Pas encore de page
256
+ no_parent_page: Pas de page parente
235
257
  page_content: Contenu
236
258
  page_part: Section de page
237
259
  page_seo: Moteurs de recherche
238
- path:
260
+ path: Chemin
239
261
  photo_picker: Choisir une image
240
262
  photos_picker: Choisir des images
241
- preview:
242
- publish:
243
- published:
263
+ preview: Aperçu
264
+ publish: Publier
265
+ published: Publié
244
266
  rebuild_materialized_path: Reconstruire le chemin matérialisé
245
- recommended:
267
+ recommended: Recommandé
246
268
  save: Sauvegarder la page
247
- save_changes:
248
- save_draft:
269
+ save_changes: Enregistrer les changements
270
+ save_draft: Enregistrer brouillon
249
271
  saved: Page enregistrée
250
272
  saving: Enregistrement...
251
- search_engines:
273
+ search_engines: Moteurs de recherche
252
274
  show_in_menu: invisible
253
275
  skip_to_first_child: Renvoyer vers la première page enfant
254
- sorting_saved:
276
+ sorting_saved: Trier les éléments sauvegardés
255
277
  permanently_delete: Supprimer définitivement
256
278
  photos:
257
279
  cannot_be_created: 'L''image n''a pas pu être traitée :'
@@ -265,16 +287,16 @@ fr:
265
287
  link: 'URL de votre image:'
266
288
  new_folder: Nouveau dossier
267
289
  organize: Organiser les images
268
- rename_folder:
269
- select_images:
290
+ rename_folder: Renommer dossier
291
+ select_images: Choisir images
270
292
  upload_image: Envoyer une image
271
293
  preferences:
272
- Analytics:
294
+ Analytics: "Outils d'analyse"
273
295
  account: Général
274
296
  account_description: Les préférences personnelles
275
297
  account_save: Sauvegarder les préférences
276
298
  analytics: Analytics et moteurs de recherche
277
- analytics_description: Connectez votre compte pour faire de l'analyse en temps réel
299
+ analytics_description: "Connectez votre compte pour faire de l'analyse en temps réel"
278
300
  analytics_save: Sauvegarder vos préférences
279
301
  domain_name_settings: Paramètres de domaine
280
302
  domain_name_settings_description: Configuration de votre nom de domaine
@@ -289,66 +311,82 @@ fr:
289
311
  users_description: Gérer les utilisateurs et les administrateurs
290
312
  preview_website: Aperçu du site
291
313
  resources:
292
- edit:
293
- label_description:
294
- manual_sorting:
295
- no_default_template:
296
- saved:
297
- settings:
298
- settings_description:
314
+ edit: Mettre à jour
315
+ label_description: Description du label
316
+ manual_sorting: Tri manuel
317
+ no_default_template: Pas de modèle par défaut
318
+ saved: Sauvegardé
319
+ settings: Paramètres
320
+ settings_description: Sélectionner les paramètres de votre modèle
299
321
  save: Enregistrer
300
322
  search: Rechercher...
301
323
  settings:
324
+ general: Général
302
325
  save: Enregistrer les paramètres
303
326
  title: Paramètres
327
+ users: Utilisateurs
304
328
  theme:
305
- save:
306
- saved:
307
- theme:
308
- theme_description:
329
+ save: Enregistrer modèle
330
+ saved: Modèle enregistré
331
+ theme: Modèle
332
+ theme_description: Configurer votre modèle
309
333
  ui:
310
- cancel:
311
- delete:
312
- load_more:
313
- move_to:
314
- new_entry:
315
- optional:
316
- rename:
317
- save_changes:
318
- saving:
334
+ cancel: Annuler
335
+ delete: Supprimer
336
+ load_more: Charger plus
337
+ move_to: Déplacer vers
338
+ new_entry: Nouvelle entrée
339
+ optional: Optionnel
340
+ rename: Renommer
341
+ save_changes: Enregistrer les changements
342
+ saving: "En cours d'enregistrement"
343
+ user_mailer:
344
+ forgot_password:
345
+ button: Réinitialiser votre mot de passe
346
+ introduction: Vous avez récemment demandé à réinitialiser le mot de passe de votre compte Spina CMS. Le lien ci-dessous est valable 2 heures. Copiez le dans votre navigateur.
347
+ introduction_html: "Vous avez récemment demandé à réinitialiser le mot de passe de votre compte Spina CMS. Utilisez le bouton ci-dessous pour le mettre à jour. <strong>Le lien est valable 2 heures.</strong>"
348
+ preheader: Utilisez ce lien pour réinitialiser votre mot de passe. Il est valable 2 heures.
349
+ request_origin: "Pour votre sécurité, cette demande a été reçu depuis un appareil %{platform} utilisant %{browser}. Si vous n'avez pas effectué cette demande, merci d'ignorer cet email."
350
+ salutation: Bonjour, %{name}
351
+ subject: Réinitialisation de votre mot de passe
352
+ trouble: "Si vous avez des problèmes avec le boutton ci-dessus, copiez-collez l'URL ci-dessous dans votre navigateur."
319
353
  users:
320
- authorization:
321
- authorization_description:
322
- cannot_be_created: L'utilisateur ne peut pas être sauvegarder
323
- delete:
354
+ authorization: Autorisation
355
+ authorization_description: Les administrateurs peuvent gérer les utilisateurs. Les utilisateurs classiques ne le peuvent pas.
356
+ cannot_be_created: "L'utilisateur ne peut pas être sauvegarder"
357
+ delete: Supprimer utilisateur
324
358
  delete_confirmation_html: 'Êtes-vous sûr de vouloir supprimer l''utilisateur : <strong>%{user}</strong> ?'
325
- deleted:
326
- last_login:
327
- never_logged_in:
359
+ deleted: Utilisateur supprimé
360
+ last_login: Dernière connexion
361
+ never_logged_in: Jamais connecté depuis
328
362
  new: Nouvel utilisateur
329
- profile:
330
- profile_description:
331
- save: Sauvegarder l'utilisateur
332
- saved:
333
- visit_page:
363
+ profile: Profil
364
+ profile_description: Cette information sera utilisée pour identifier différents utilisateurs. Les utilisateurs utiliseront leur email pour se connecter.
365
+ save: "Enregistrer l'utilisateur"
366
+ saved: Utilisateur enregistré
367
+ visit_page: Visiter la page
334
368
  website:
335
369
  all_pages: Toutes les pages
370
+ content: Contenu
336
371
  documents: Documents
337
- images:
372
+ images: Images
373
+ main: Principal
338
374
  media_library: Bibliothèque de médias
339
375
  media_library_description: Voici où vous trouverez toutes vos images et documents
340
376
  pages: Pages
341
377
  pages_description: Toutes les pages de votre site
342
378
  photos: Images
379
+ settings: Paramètres
380
+ theme: Modèle
343
381
  title: Votre site
344
382
  wysiwyg:
345
383
  heading_1: Titre 1
346
384
  heading_2: Titre 2
347
385
  heading_3: Titre 3
348
386
  insert_link: Insérer un lien
349
- link:
387
+ link: Lien
350
388
  paragraph: Paragraphe
351
389
  quote: Citation
352
- unlink:
353
- url:
354
- url_placeholder:
390
+ unlink: Supprimer le lien
391
+ url: URL
392
+ url_placeholder: Entrer une URL
@@ -32,7 +32,7 @@ module Spina
32
32
  end
33
33
 
34
34
  def create_account
35
- return if ::Spina::Account.exists? && !no?('An account already exists. Skip? [Yn]')
35
+ return if ::Spina::Account.exists? && ( !talkative_install? || !no?('An account already exists. Skip? [Yn]') )
36
36
  name = ::Spina::Account.first.try(:name) || 'MySite'
37
37
  if talkative_install?
38
38
  name = ask("What would you like to name your website? [#{name}]").presence || name
@@ -42,7 +42,7 @@ module Spina
42
42
 
43
43
  def set_theme
44
44
  account = ::Spina::Account.first
45
- return if account.theme.present? && !no?("Theme '#{account.theme}' is set. Skip? [Yn]")
45
+ return if account.theme.present? && ( !talkative_install? || !no?("Theme '#{account.theme}' is set. Skip? [Yn]") )
46
46
 
47
47
  theme = account.theme || themes.first
48
48
  if talkative_install?
@@ -67,7 +67,7 @@ module Spina
67
67
  end
68
68
 
69
69
  def create_user
70
- return if ::Spina::User.exists? && !no?('A user already exists. Skip? [Yn]')
70
+ return if ::Spina::User.exists? && ( !talkative_install? || !no?('A user already exists. Skip? [Yn]') )
71
71
 
72
72
  email = 'admin@domain.com'
73
73
  if talkative_install?
@@ -84,8 +84,13 @@ module Spina
84
84
  def bootstrap_spina
85
85
  rake 'spina:bootstrap'
86
86
  end
87
+
88
+ def build_tailwind
89
+ rake 'spina:tailwind:build'
90
+ end
87
91
 
88
92
  def feedback
93
+ return if !talkative_install?
89
94
  puts
90
95
  puts ' Your Spina site has been succesfully installed! '
91
96
  puts
@@ -0,0 +1,10 @@
1
+ module Spina
2
+ class TailwindConfigGenerator < Rails::Generators::Base
3
+ source_root File.expand_path("../templates", __FILE__)
4
+
5
+ def create_tailwind_config_file
6
+ template 'app/assets/config/spina/tailwind.config.js'
7
+ end
8
+
9
+ end
10
+ end
@@ -1,4 +1,7 @@
1
1
  module.exports = {
2
+ content: [
3
+ <%= Spina.config.tailwind_content.map{|path|"'#{path}'"}.join(",\n") %>
4
+ ],
2
5
  theme: {
3
6
  fontFamily: {
4
7
  body: ['Metropolis'],
@@ -14,14 +17,9 @@ module.exports = {
14
17
  }
15
18
  }
16
19
  },
17
- variants: {
18
- boxShadow: ['active'],
19
- extend: {
20
- backgroundColor: ['even', 'checked']
21
- }
22
- },
23
20
  plugins: [
21
+ require('@tailwindcss/forms'),
22
+ require('@tailwindcss/aspect-ratio'),
24
23
  require('@tailwindcss/typography'),
25
- require('@tailwindcss/forms')
26
24
  ]
27
25
  }
@@ -21,7 +21,7 @@ Spina::Theme.register do |theme|
21
21
  # - Option
22
22
  # - Repeater
23
23
  theme.parts = [
24
- {name: 'text', title: "Body", part_type: "Spina::Parts::Text"}
24
+ {name: 'text', title: "Body", hint: "Your main content", part_type: "Spina::Parts::Text"}
25
25
  ]
26
26
 
27
27
  # View templates
@@ -23,10 +23,10 @@ Spina::Theme.register do |theme|
23
23
  theme.parts = [
24
24
  {name: 'repeater', title: "Repeater", part_type: "Spina::Parts::Repeater", parts: %w(line image headline)},
25
25
  {name: 'line', title: "Line", part_type: "Spina::Parts::Line"},
26
- {name: 'body', title: "Body", part_type: "Spina::Parts::Text"},
26
+ {name: 'body', title: "Body", hint: "Your content", part_type: "Spina::Parts::Text"},
27
27
  {name: "image_collection", title: "Image collection", part_type: "Spina::Parts::ImageCollection"},
28
28
  {name: 'image', title: "Image", part_type: "Spina::Parts::Image"},
29
- {name: 'headline', title: "Headline", part_type: "Spina::Parts::Line"},
29
+ {name: 'headline', title: "Headline", hint: "Used in the header", part_type: "Spina::Parts::Line"},
30
30
  {name: 'footer', title: "Footer", part_type: "Spina::Parts::Text"}
31
31
  ]
32
32
 
data/lib/spina/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Spina
2
- VERSION = "2.7.0"
2
+ VERSION = "2.9.0"
3
3
  end
data/lib/spina.rb CHANGED
@@ -4,7 +4,6 @@ require 'spina/railtie'
4
4
  require 'spina/theme_reloader'
5
5
  require 'spina/plugin'
6
6
  require 'spina/theme'
7
- require 'spina/tailwind_purger'
8
7
  require 'spina/attr_json_spina_parts_model'
9
8
  require 'spina/attr_json_monkeypatch'
10
9
  require 'spina/authentication/sessions'
@@ -33,7 +32,7 @@ module Spina
33
32
  :mailer_defaults,
34
33
  :thumbnail_image_size,
35
34
  :party_pooper,
36
- :tailwind_purge_content,
35
+ :tailwind_content,
37
36
  :queues,
38
37
  :transliterations
39
38
 
@@ -59,15 +58,17 @@ module Spina
59
58
  # An importmap specifically meant for Spina
60
59
  self.importmap = Importmap::Map.new
61
60
 
62
- # Tailwind purging
63
- # Spina will by default purge all unused Tailwind classes by scanning
64
- # the files listed below. You probably don't want to override this in
65
- # your main app. Spina Plugins can add files to this array.
66
- self.tailwind_purge_content = Spina::Engine.root.glob("app/views/**/*.*") +
67
- Spina::Engine.root.glob("app/components/**/*.*") +
68
- Spina::Engine.root.glob("app/helpers/**/*.*") +
69
- Spina::Engine.root.glob("app/assets/javascripts/**/*.js") +
70
- Spina::Engine.root.glob("app/**/tailwind/custom.css")
61
+ # Tailwind content
62
+ # In order for Tailwind to generate all of the CSS Spina needs,
63
+ # it needs to know about every single file in your project
64
+ # that contains any Tailwind class names.
65
+ # Make sure to add your own glob patterns if you're extending
66
+ # Spina's UI.
67
+ self.tailwind_content = ["#{Spina::Engine.root}/app/views/**/*.*",
68
+ "#{Spina::Engine.root}/app/components/**/*.*",
69
+ "#{Spina::Engine.root}/app/helpers/**/*.*",
70
+ "#{Spina::Engine.root}/app/assets/javascripts/**/*.js",
71
+ "#{Spina::Engine.root}/app/**/application.tailwind.css"]
71
72
 
72
73
  # Images that are embedded in the Trix editor are resized to fit
73
74
  # You can optimize this for your website and go for a smaller (or larger) size
@@ -78,6 +79,16 @@ module Spina
78
79
  def config
79
80
  config_obj = self.config_original
80
81
 
82
+ def config_obj.tailwind_purge_content
83
+ ActiveSupport::Deprecation.warn("config.tailwind_purge_content has been renamed to config.tailwind_content")
84
+ tailwind_content
85
+ end
86
+
87
+ def config_obj.tailwind_purge_content=(paths)
88
+ ActiveSupport::Deprecation.warn("config.tailwind_purge_content has been renamed to config.tailwind_content")
89
+ tailwind_content = paths
90
+ end
91
+
81
92
  def config_obj.embedded_image_size=(image_size)
82
93
  if image_size.is_a? String
83
94
  ActiveSupport::Deprecation.warn("Spina embedded_image_size should be set to an array of arguments to be passed to the :resize_to_limit ImageProcessing macro. https://github.com/janko/image_processing/blob/master/doc/minimagick.md#resize_to_limit")