c-editables 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +31 -0
- data/Rakefile +30 -0
- data/app/controllers/editables/application_controller.rb +5 -0
- data/app/controllers/editables/fields_controller.rb +28 -0
- data/app/helpers/editables/application_helper.rb +25 -0
- data/app/models/editables/field.rb +9 -0
- data/app/models/editables/page.rb +6 -0
- data/app/views/editables/fields/update.js.erb +6 -0
- data/app/views/layouts/editables/application.html.erb +15 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20200919073703_create_editable_pages.rb +10 -0
- data/db/migrate/20200920082203_create_editable_fields.rb +11 -0
- data/lib/editables.rb +7 -0
- data/lib/editables/data_editable.rb +13 -0
- data/lib/editables/engine.rb +20 -0
- data/lib/editables/fields_collection.rb +29 -0
- data/lib/editables/generators/editables/install_generator.rb +46 -0
- data/lib/editables/generators/editables/templates/config.yml +162 -0
- data/lib/editables/generators/editables/templates/field.rb +9 -0
- data/lib/editables/generators/editables/templates/migration.rb +17 -0
- data/lib/editables/generators/editables/templates/page.rb +6 -0
- data/lib/editables/version.rb +3 -0
- data/lib/tasks/create_editable_objects.rake +23 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +3 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/javascript/packs/application.js +15 -0
- data/spec/dummy/app/jobs/application_job.rb +7 -0
- data/spec/dummy/app/mailers/application_mailer.rb +4 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +33 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/config/application.rb +18 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/cable.yml +10 -0
- data/spec/dummy/config/database.yml +24 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +62 -0
- data/spec/dummy/config/environments/production.rb +112 -0
- data/spec/dummy/config/environments/test.rb +49 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/dummy/config/initializers/assets.rb +12 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/content_security_policy.rb +28 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/puma.rb +38 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config/spring.rb +6 -0
- data/spec/dummy/config/storage.yml +34 -0
- data/spec/dummy/db/schema.rb +37 -0
- data/spec/dummy/log/development.log +36 -0
- data/spec/dummy/log/test.log +449 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/spec/dummy/public/apple-touch-icon.png +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/tmp/development_secret.txt +1 -0
- data/spec/editables_test.rb +7 -0
- data/spec/factories/field.rb +17 -0
- data/spec/factories/page.rb +7 -0
- data/spec/integration/navigation_test.rb +7 -0
- data/spec/lib/editables/data_editable_spec.rb +19 -0
- data/spec/lib/editables/editable_fields_collection_spec.rb +74 -0
- data/spec/rails_helper.rb +75 -0
- data/spec/spec_helper.rb +97 -0
- data/spec/support/database_cleaner.rb +21 -0
- metadata +259 -0
checksums.yaml
ADDED
@@ -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
|
data/README.md
ADDED
@@ -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).
|
data/Rakefile
ADDED
@@ -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,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
|
+
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 %>
|
data/config/routes.rb
ADDED
data/lib/editables.rb
ADDED
@@ -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.
|