c-editables 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +31 -0
  3. data/Rakefile +30 -0
  4. data/app/controllers/editables/application_controller.rb +5 -0
  5. data/app/controllers/editables/fields_controller.rb +28 -0
  6. data/app/helpers/editables/application_helper.rb +25 -0
  7. data/app/models/editables/field.rb +9 -0
  8. data/app/models/editables/page.rb +6 -0
  9. data/app/views/editables/fields/update.js.erb +6 -0
  10. data/app/views/layouts/editables/application.html.erb +15 -0
  11. data/config/routes.rb +4 -0
  12. data/db/migrate/20200919073703_create_editable_pages.rb +10 -0
  13. data/db/migrate/20200920082203_create_editable_fields.rb +11 -0
  14. data/lib/editables.rb +7 -0
  15. data/lib/editables/data_editable.rb +13 -0
  16. data/lib/editables/engine.rb +20 -0
  17. data/lib/editables/fields_collection.rb +29 -0
  18. data/lib/editables/generators/editables/install_generator.rb +46 -0
  19. data/lib/editables/generators/editables/templates/config.yml +162 -0
  20. data/lib/editables/generators/editables/templates/field.rb +9 -0
  21. data/lib/editables/generators/editables/templates/migration.rb +17 -0
  22. data/lib/editables/generators/editables/templates/page.rb +6 -0
  23. data/lib/editables/version.rb +3 -0
  24. data/lib/tasks/create_editable_objects.rake +23 -0
  25. data/spec/dummy/Rakefile +6 -0
  26. data/spec/dummy/app/assets/config/manifest.js +3 -0
  27. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  28. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  29. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  30. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  31. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  32. data/spec/dummy/app/javascript/packs/application.js +15 -0
  33. data/spec/dummy/app/jobs/application_job.rb +7 -0
  34. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  35. data/spec/dummy/app/models/application_record.rb +3 -0
  36. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  37. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  38. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  39. data/spec/dummy/bin/rails +4 -0
  40. data/spec/dummy/bin/rake +4 -0
  41. data/spec/dummy/bin/setup +33 -0
  42. data/spec/dummy/config.ru +5 -0
  43. data/spec/dummy/config/application.rb +18 -0
  44. data/spec/dummy/config/boot.rb +5 -0
  45. data/spec/dummy/config/cable.yml +10 -0
  46. data/spec/dummy/config/database.yml +24 -0
  47. data/spec/dummy/config/environment.rb +5 -0
  48. data/spec/dummy/config/environments/development.rb +62 -0
  49. data/spec/dummy/config/environments/production.rb +112 -0
  50. data/spec/dummy/config/environments/test.rb +49 -0
  51. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  52. data/spec/dummy/config/initializers/assets.rb +12 -0
  53. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  54. data/spec/dummy/config/initializers/content_security_policy.rb +28 -0
  55. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  56. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  57. data/spec/dummy/config/initializers/inflections.rb +16 -0
  58. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  59. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  60. data/spec/dummy/config/locales/en.yml +33 -0
  61. data/spec/dummy/config/puma.rb +38 -0
  62. data/spec/dummy/config/routes.rb +3 -0
  63. data/spec/dummy/config/spring.rb +6 -0
  64. data/spec/dummy/config/storage.yml +34 -0
  65. data/spec/dummy/db/schema.rb +37 -0
  66. data/spec/dummy/log/development.log +36 -0
  67. data/spec/dummy/log/test.log +449 -0
  68. data/spec/dummy/public/404.html +67 -0
  69. data/spec/dummy/public/422.html +67 -0
  70. data/spec/dummy/public/500.html +66 -0
  71. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  72. data/spec/dummy/public/apple-touch-icon.png +0 -0
  73. data/spec/dummy/public/favicon.ico +0 -0
  74. data/spec/dummy/tmp/development_secret.txt +1 -0
  75. data/spec/editables_test.rb +7 -0
  76. data/spec/factories/field.rb +17 -0
  77. data/spec/factories/page.rb +7 -0
  78. data/spec/integration/navigation_test.rb +7 -0
  79. data/spec/lib/editables/data_editable_spec.rb +19 -0
  80. data/spec/lib/editables/editable_fields_collection_spec.rb +74 -0
  81. data/spec/rails_helper.rb +75 -0
  82. data/spec/spec_helper.rb +97 -0
  83. data/spec/support/database_cleaner.rb +21 -0
  84. metadata +259 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 67000a4ed5bf174a0cbfea51e09694da68e2d872d5692b93782f71fb20eb1201
4
+ data.tar.gz: 855f0a4fc11b87402f36e2b2130971774626037225bbb02ddac413a58602ff6f
5
+ SHA512:
6
+ metadata.gz: 62d9f9027f5ca653c5ea06cb0b23934c7b7e0bb2fe556839b760777922c8476b0b95f10963856ba4fbd85a34f506487bf84db34d2ff82840e858cd2ff3c07b85
7
+ data.tar.gz: 2e2ccab7b63877cab2ede40bc7648455871bf18c706f53113937e1470d86eb6bebb8feb87520d7ade27765e5a2cb98c034f017974f2c4868bc31069dd6d23529
@@ -0,0 +1,31 @@
1
+ # Editables
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'editables'
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install editables
22
+ ```
23
+
24
+ rails editables:install:migrations to run the engine's migration
25
+ bundle exec rake editables:create_from_config to create editable objects from your config file
26
+
27
+ ## Contributing
28
+ Contribution directions go here.
29
+
30
+ ## License
31
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,30 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Editables'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+ load 'rails/tasks/statistics.rake'
21
+
22
+ require 'bundler/gem_tasks'
23
+
24
+ require 'rspec/core'
25
+ require 'rspec/core/rake_task'
26
+
27
+ desc "Run all specs in spec directory (excluding plugin specs)"
28
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
29
+
30
+ task :default => :spec
@@ -0,0 +1,5 @@
1
+ module Editables
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+ end
5
+ end
@@ -0,0 +1,28 @@
1
+ require_dependency "editables/application_controller"
2
+
3
+ module Editables
4
+ class FieldsController < ApplicationController
5
+ protect_from_forgery unless: -> { request.format.json? }, only: [:update]
6
+ def update
7
+ puts("in engine's controller")
8
+ respond_to do |format|
9
+ @field = Editables::Field.find(params[:id])
10
+ if @field.update(editable_fields_params)
11
+ # this should be changed
12
+ if @field.image?
13
+ puts("in fields.image")
14
+ format.js
15
+ else
16
+ format.json { render json: {}, status: 200 }
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def editable_fields_params
25
+ params.require(:field).permit(:value, :image)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ module Editables
2
+ module ApplicationHelper
3
+ def editable_text_class
4
+ 'editable editable-text' if current_admin
5
+ end
6
+
7
+ def editable_image_class
8
+ 'editable-image' if current_admin
9
+ end
10
+
11
+ def url_for_image(field, image_method = :image)
12
+ return url_for(field.send(image_method)) if field.send(image_method).attached?
13
+ "https://res.cloudinary.com/dockcyr0z/image/upload/v1598369435/vb13pcfoit64mylb2zzob0pzbt1n.jpg"
14
+ end
15
+
16
+ def cloudinary_path(field, image_method = :image)
17
+ return cl_image_path(field.send(image_method).key) if field.send(image_method).attached?
18
+ "https://res.cloudinary.com/dockcyr0z/image/upload/v1598369435/vb13pcfoit64mylb2zzob0pzbt1n.jpg"
19
+ end
20
+
21
+ def data_editables(data_editable, editable_kind = :text)
22
+ "data-editablemodel=#{data_editable.model} data-editableroute=#{data_editable.route} data-editableparam=#{data_editable.param} data-editablekind=#{editable_kind}" if current_admin
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ module Editables
2
+ class Field < ApplicationRecord
3
+ self.table_name = "editable_fields"
4
+
5
+ belongs_to :page, class_name: "Editables::Page", foreign_key: "editable_page_id"
6
+ validates :label, :kind, presence: true
7
+ validates :label, uniqueness: { scope: :editable_page_id }
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ module Editables
2
+ class Page < ApplicationRecord
3
+ self.table_name = "editable_pages"
4
+ has_many :fields, class_name: "::Editables::Field", foreign_key: "editable_page_id"
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ var target = document.querySelector('[data-editableroute="<%= field_path @field %>"]');
2
+ <% if @field.is_image? %>
3
+ target.querySelector('img').src = "<%= cloudinary_path @field %>"
4
+ <% elsif @field.is_background_image? %>
5
+ target.setAttribute("style", "background-image: url('<%= cloudinary_path @field %>')")
6
+ <% end %>
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Editables</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= stylesheet_link_tag "editables/application", media: "all" %>
9
+ </head>
10
+ <body>
11
+
12
+ <%= yield %>
13
+
14
+ </body>
15
+ </html>
@@ -0,0 +1,4 @@
1
+
2
+ Editables::Engine.routes.draw do
3
+ resources :fields, only: [:update]
4
+ end
@@ -0,0 +1,10 @@
1
+ class CreateEditablePages < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :editable_pages do |t|
4
+ t.string :name
5
+ t.text :description
6
+ t.string :kind
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class CreateEditableFields < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :editable_fields do |t|
4
+ t.string :label
5
+ t.string :kind
6
+ t.text :value
7
+ t.references :editable_page, foreign_key: true
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ require "editables/engine"
2
+ require('editables/generators/editables/install_generator')
3
+ module Editables
4
+
5
+ autoload :DataEditable, 'editables/data_editable'
6
+ autoload :FieldsCollection, 'editables/fields_collection'
7
+ end
@@ -0,0 +1,13 @@
1
+ module Editables
2
+ class DataEditable
3
+ attr_accessor :route, :model, :param, :value, :instance
4
+ #format :json should be dealt by the frontend api
5
+ def initialize(field, param = :value)
6
+ @route ="/#{field.class.to_s.underscore.pluralize}/#{field.id}"
7
+ @model = field.class.to_s.underscore.split('/').last
8
+ @param = param
9
+ @value = field.send(param)
10
+ @instance = field
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ module Editables
2
+ class Engine < Rails::Engine
3
+ isolate_namespace Editables
4
+ config.generators do |g|
5
+ g.test_framework :rspec
6
+ g.fixture_replacement :factory_bot
7
+ g.factory_bot dir: 'spec/factories'
8
+ end
9
+ config.before_initialize do
10
+ ActiveSupport.on_load(:action_view) do
11
+ include ApplicationHelper
12
+ end
13
+ end
14
+ config.after_initialize do
15
+ Dir.glob(Rails.root + "app/overrides/**/*_override*.rb").each do |c|
16
+ require_dependency(c)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ module Editables
2
+ class FieldsCollection
3
+ attr_reader :collection
4
+ def initialize(editables_config)
5
+ @collection = to_hash(editables_config)
6
+ end
7
+
8
+ def [](key)
9
+ begin
10
+ collection.fetch(key)
11
+ rescue
12
+ collection.fetch("editables/field").fetch(key)
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def to_hash(editables_config)
19
+ hash = {}
20
+ editables_config.each do |param, editables|
21
+ hash[editables&.first&.class&.to_s&.underscore] ||= {}
22
+ editables.each do |editable|
23
+ hash[editable.class.to_s.underscore][editable.label] = ::Editables::DataEditable.new(editable, param)
24
+ end
25
+ end
26
+ return hash
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,46 @@
1
+ require 'rails/generators'
2
+ module Editables
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('templates', __dir__)
5
+ include Rails::Generators::Migration
6
+ desc "This generator creates all necessary config models and routes"
7
+
8
+ def create_page_and_editable_fields_migration
9
+ migration_template "migration.rb", "db/migrate/create_pages_and_fields.rb"
10
+ end
11
+
12
+ def create_config_file
13
+ config_dir_path = "config/editable"
14
+ Dir.mkdir(config_dir_path) unless File.exist?(config_dir_path)
15
+ template "config.yml", "#{config_dir_path}/config.yml"
16
+ end
17
+
18
+ def create_model_files
19
+ model_dir_path = "app/models/editables"
20
+ Dir.mkdir(model_dir_path) unless File.exist?(model_dir_path)
21
+ template "field.rb", "#{model_dir_path}/field.rb"
22
+ template "page.rb", "#{model_dir_path}/page.rb"
23
+ end
24
+
25
+ def add_editable_routes
26
+ editable_route = "namespace :editables do\n\tresources :fields, only: [:update]\nend\n"
27
+ route editable_route
28
+ end
29
+
30
+ def rails5_and_up?
31
+ Rails::VERSION::MAJOR >= 5
32
+ end
33
+
34
+ def migration_version
35
+ if rails5_and_up?
36
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
37
+ end
38
+ end
39
+ private
40
+
41
+ def self.next_migration_number(dirname)
42
+ next_migration_number = current_migration_number(dirname) + 1
43
+ ActiveRecord::Migration.next_migration_number(next_migration_number)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,162 @@
1
+ # this file is an example edit it as you wish
2
+ pages:
3
+ home:
4
+ description: the root page of zedental
5
+ kind: static
6
+ fields:
7
+ hero_title:
8
+ kind: text
9
+ value: Un catalogue incisif de formations décisives pour votre carrière.
10
+ hero_subtitle:
11
+ kind: text
12
+ value: Masterclass, DPC, attestations universitaires, le meilleur pour votre parcours professionnel.
13
+ hero_background_image:
14
+ kind: background_image
15
+ value: /assets/home-hero.jpg
16
+ training_category_section_title:
17
+ kind: text
18
+ value: Nos formations
19
+ featured_trainings_section_title:
20
+ kind: text
21
+ value: Nos formations à la une
22
+ value_section_title:
23
+ kind: text
24
+ value: Nos valeurs
25
+ scientific_comity_image:
26
+ kind: image
27
+ value: /assets/card-image.jpg
28
+ scientific_comity_title:
29
+ kind: text
30
+ value: Comité scientifique
31
+ scientific_comity_description:
32
+ kind: text
33
+ value: Description du comité scientifique
34
+ value_1_description:
35
+ kind: text
36
+ value: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam non dictum dui. Vivamus dictum purus in mollis pretium.
37
+ value_1_title:
38
+ kind: text
39
+ value: value 1
40
+ value_2_title:
41
+ kind: text
42
+ value: value 2
43
+ value_2_description:
44
+ kind: text
45
+ value: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam non dictum dui. Vivamus dictum purus in mollis pretium.
46
+ value_3_title:
47
+ kind: text
48
+ value: value 3
49
+ value_3_description:
50
+ kind: text
51
+ value: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam non dictum dui. Vivamus dictum purus in mollis pretium.
52
+ value_4_title:
53
+ kind: text
54
+ value: value 4
55
+ value_4_description:
56
+ kind: text
57
+ value: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam non dictum dui. Vivamus dictum purus in mollis pretium
58
+ about:
59
+ description: page describing who we are
60
+ fields:
61
+ about_title:
62
+ kind: text
63
+ value: Qui sommes-nous ?
64
+ about_subtitle:
65
+ kind: text
66
+ value: Nous sommes
67
+ about_description:
68
+ kind: text
69
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
70
+ about_image:
71
+ kind: image
72
+ value: /assets/home-hero.jpg
73
+ values_title:
74
+ kind: text
75
+ value: Nos valeurs
76
+ value_1_title:
77
+ kind: text
78
+ value: Value 1
79
+ value_1_description:
80
+ kind: text
81
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
82
+ value_2_title:
83
+ kind: text
84
+ value: Value 2
85
+ value_2_description:
86
+ kind: text
87
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
88
+ value_3_title:
89
+ kind: text
90
+ value: Value 3
91
+ value_3_description:
92
+ kind: text
93
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
94
+ value_4_title:
95
+ kind: text
96
+ value: Value 4
97
+ value_4_description:
98
+ kind: text
99
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
100
+ story_section_title:
101
+ kind: text
102
+ value: Notre histoire
103
+ chapter_1_title:
104
+ kind: text
105
+ value: chapter 1
106
+ chapter_1_image:
107
+ kind: image
108
+ value: /assets/home-hero.jpg
109
+ chapter_1_description:
110
+ kind: text
111
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
112
+ chapter_2_title:
113
+ kind: text
114
+ value: Chapter 2
115
+ chapter_2_image:
116
+ kind: image
117
+ value: /assets/home-hero.jpg
118
+ chapter_2_description:
119
+ kind: text
120
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
121
+ training_categories_title:
122
+ kind: text
123
+ value: Les différentes catégories de formation
124
+ contact:
125
+ description: Contact pages
126
+ fields:
127
+ page_title:
128
+ kind: text
129
+ value: Contactez-nous
130
+ page_subtitle_1:
131
+ kind: text
132
+ value: Une équipe à votre écoute
133
+ page_description_1:
134
+ kind: text
135
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
136
+ socials_subtitle:
137
+ kind: text
138
+ value: Suivez-nous sur les réseaux sociaux
139
+ facebook_subtitle:
140
+ kind: text
141
+ value: Sur Facebook, trouvez ceci.
142
+ facebook_description:
143
+ kind: text
144
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
145
+ youtube_subtitle:
146
+ kind: text
147
+ value: Sur Youtube, trouvez ceci.
148
+ youtube_description:
149
+ kind: text
150
+ value: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
151
+ twitter_subtitle:
152
+ kind: text
153
+ value: Sur Youtube, trouvez ceci.
154
+ twitter_description:
155
+ kind: text
156
+ value: Lorem ipsum
157
+ contact_subtitle:
158
+ kind: text
159
+ value: Formulaire de contact
160
+ contact_description:
161
+ kind: text
162
+ value: Lorem ipsum dolor sit amet, consectetur adipiscing elit.