promethee 3.0.2 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +5 -5
  2. data/UPGRADING +2 -2
  3. data/app/assets/stylesheets/promethee-edit.sass +1 -0
  4. data/app/assets/stylesheets/promethee-edit/_localizer.sass +4 -0
  5. data/app/models/concerns/promethee_data.rb +57 -34
  6. data/app/services/promethee/structure_upgrader/components/aside.rb +51 -0
  7. data/app/services/promethee/structure_upgrader/components/base.rb +36 -0
  8. data/app/services/promethee/structure_upgrader/components/blockquote.rb +32 -0
  9. data/app/services/promethee/structure_upgrader/components/collection.rb +31 -0
  10. data/app/services/promethee/structure_upgrader/components/collection_item.rb +55 -0
  11. data/app/services/promethee/structure_upgrader/components/column.rb +92 -0
  12. data/app/services/promethee/structure_upgrader/components/cover.rb +49 -0
  13. data/app/services/promethee/structure_upgrader/components/faq.rb +16 -0
  14. data/app/services/promethee/structure_upgrader/components/faq_item.rb +49 -0
  15. data/app/services/promethee/structure_upgrader/components/image.rb +42 -0
  16. data/app/services/promethee/structure_upgrader/components/page.rb +56 -0
  17. data/app/services/promethee/structure_upgrader/components/row.rb +32 -0
  18. data/app/services/promethee/structure_upgrader/components/slider.rb +16 -0
  19. data/app/services/promethee/structure_upgrader/components/slider_item.rb +55 -0
  20. data/app/services/promethee/structure_upgrader/components/table.rb +116 -0
  21. data/app/services/promethee/structure_upgrader/components/table_cell.rb +16 -0
  22. data/app/services/promethee/structure_upgrader/components/text.rb +25 -0
  23. data/app/services/promethee/structure_upgrader/components/video.rb +32 -0
  24. data/app/services/promethee/structure_upgrader_service.rb +110 -0
  25. data/app/views/promethee/_edit.html.erb +34 -4
  26. data/app/views/promethee/_localize.html.erb +34 -3
  27. data/app/views/promethee/components/aside/_edit.define.html.erb +29 -4
  28. data/app/views/promethee/components/aside/_edit.inspect.html.erb +6 -6
  29. data/app/views/promethee/components/aside/_edit.move.html.erb +7 -7
  30. data/app/views/promethee/components/aside/_localize.html.erb +11 -11
  31. data/app/views/promethee/components/aside/_show.html.erb +8 -8
  32. data/app/views/promethee/components/blockquote/_edit.define.html.erb +12 -2
  33. data/app/views/promethee/components/blockquote/_edit.inspect.html.erb +4 -4
  34. data/app/views/promethee/components/blockquote/_edit.move.html.erb +3 -3
  35. data/app/views/promethee/components/blockquote/_localize.html.erb +8 -8
  36. data/app/views/promethee/components/blockquote/_show.html.erb +3 -3
  37. data/app/views/promethee/components/collection/_edit.define.html.erb +12 -1
  38. data/app/views/promethee/components/collection/_edit.inspect.html.erb +4 -4
  39. data/app/views/promethee/components/collection/_edit.move.html.erb +1 -1
  40. data/app/views/promethee/components/collection/_localize.html.erb +0 -1
  41. data/app/views/promethee/components/collection/_show.html.erb +1 -2
  42. data/app/views/promethee/components/collection_item/_edit.define.html.erb +27 -5
  43. data/app/views/promethee/components/collection_item/_edit.inspect.html.erb +6 -6
  44. data/app/views/promethee/components/collection_item/_edit.move.html.erb +5 -5
  45. data/app/views/promethee/components/collection_item/_localize.html.erb +9 -9
  46. data/app/views/promethee/components/collection_item/_show.html.erb +7 -7
  47. data/app/views/promethee/components/column/_edit.define.html.erb +58 -8
  48. data/app/views/promethee/components/column/_edit.inspect.html.erb +19 -19
  49. data/app/views/promethee/components/column/_localize.html.erb +0 -1
  50. data/app/views/promethee/components/column/_show.html.erb +10 -10
  51. data/app/views/promethee/components/cover/_edit.define.html.erb +26 -6
  52. data/app/views/promethee/components/cover/_edit.inspect.html.erb +4 -4
  53. data/app/views/promethee/components/cover/_edit.move.html.erb +4 -4
  54. data/app/views/promethee/components/cover/_localize.html.erb +14 -14
  55. data/app/views/promethee/components/cover/_show.html.erb +10 -10
  56. data/app/views/promethee/components/faq_item/_edit.define.html.erb +25 -5
  57. data/app/views/promethee/components/faq_item/_edit.inspect.html.erb +4 -4
  58. data/app/views/promethee/components/faq_item/_edit.move.html.erb +6 -6
  59. data/app/views/promethee/components/faq_item/_localize.html.erb +7 -7
  60. data/app/views/promethee/components/faq_item/_show.html.erb +7 -7
  61. data/app/views/promethee/components/image/_edit.define.html.erb +19 -4
  62. data/app/views/promethee/components/image/_edit.inspect.html.erb +3 -3
  63. data/app/views/promethee/components/image/_edit.move.html.erb +5 -5
  64. data/app/views/promethee/components/image/_localize.html.erb +20 -17
  65. data/app/views/promethee/components/image/_show.html.erb +6 -6
  66. data/app/views/promethee/components/page/_edit.define.html.erb +32 -7
  67. data/app/views/promethee/components/page/_edit.inspect.html.erb +5 -5
  68. data/app/views/promethee/components/page/_localize.html.erb +8 -8
  69. data/app/views/promethee/components/page/_show.html.erb +4 -4
  70. data/app/views/promethee/components/row/_edit.define.html.erb +12 -2
  71. data/app/views/promethee/components/row/_edit.inspect.html.erb +8 -8
  72. data/app/views/promethee/components/row/_edit.move.html.erb +9 -9
  73. data/app/views/promethee/components/row/_show.html.erb +7 -6
  74. data/app/views/promethee/components/slider_item/_edit.define.html.erb +27 -5
  75. data/app/views/promethee/components/slider_item/_edit.inspect.html.erb +6 -6
  76. data/app/views/promethee/components/slider_item/_edit.move.html.erb +7 -7
  77. data/app/views/promethee/components/slider_item/_localize.html.erb +9 -9
  78. data/app/views/promethee/components/slider_item/_show.html.erb +7 -8
  79. data/app/views/promethee/components/table/_edit.define.html.erb +9 -6
  80. data/app/views/promethee/components/table/_edit.inspect.html.erb +138 -50
  81. data/app/views/promethee/components/table/_edit.move.html.erb +17 -7
  82. data/app/views/promethee/components/table/_localize.html.erb +0 -43
  83. data/app/views/promethee/components/table/_show.html.erb +13 -16
  84. data/app/views/promethee/components/table_cell/_edit.define.html.erb +22 -0
  85. data/app/views/promethee/components/table_cell/_edit.inspect.html.erb +0 -0
  86. data/app/views/promethee/components/table_cell/_edit.move.html.erb +0 -0
  87. data/app/views/promethee/components/table_cell/_icon.svg +3 -0
  88. data/app/views/promethee/components/table_cell/_localize.html.erb +14 -0
  89. data/app/views/promethee/components/table_cell/_show.html.erb +0 -0
  90. data/app/views/promethee/components/text/_edit.define.html.erb +6 -1
  91. data/app/views/promethee/components/text/_edit.inspect.html.erb +3 -3
  92. data/app/views/promethee/components/text/_edit.move.html.erb +1 -1
  93. data/app/views/promethee/components/text/_localize.html.erb +3 -3
  94. data/app/views/promethee/components/text/_show.html.erb +2 -2
  95. data/app/views/promethee/components/video/_edit.define.html.erb +12 -2
  96. data/app/views/promethee/components/video/_edit.inspect.html.erb +2 -2
  97. data/app/views/promethee/components/video/_edit.move.html.erb +6 -6
  98. data/app/views/promethee/components/video/_localize.html.erb +4 -4
  99. data/app/views/promethee/components/video/_show.html.erb +4 -3
  100. data/app/views/promethee/presets/_image-with-text.html.erb +171 -6
  101. data/lib/promethee/data/localization.rb +13 -2
  102. data/lib/promethee/rails/version.rb +1 -1
  103. data/lib/tasks/promethee/promethee.rake +6 -0
  104. metadata +31 -6
@@ -1,3 +1,2 @@
1
1
  <script type="text/ng-template" id="promethee/components/column/localize">
2
-
3
2
  </script>
@@ -1,6 +1,6 @@
1
1
  <%
2
- # 576 768 992 1200
3
- # | | | |
2
+ # 576 768 992 1200
3
+ # | | | |
4
4
  # BS4 xs | sm | md | lg | xl
5
5
  # BS3 xs | sm | md | lg
6
6
 
@@ -14,16 +14,16 @@
14
14
  # - BS3 treats tablets as mobile (wrong behaviour for us)
15
15
 
16
16
  # Desktop
17
- size = component[:attributes][:size]
18
- offset = component[:attributes][:offset]
17
+ size = component[:attributes].dig(:size, :value)
18
+ offset = component[:attributes].dig(:offset, :value)
19
19
  classes = " col-lg-#{size} offset-lg-#{offset} col-lg-offset-#{offset}" # BS4 desktop+, BS3 desktop large
20
20
 
21
21
  # Tablet override
22
22
  # - md for BS4
23
23
  # - sm for BS3
24
- if component[:attributes][:tablet] && component[:attributes][:tablet][:enabled]
25
- size = component[:attributes][:tablet][:size]
26
- offset = component[:attributes][:tablet][:offset]
24
+ if component[:attributes].dig(:tablet, :value, :enabled, :value)
25
+ size = component[:attributes].dig(:tablet, :value, :size, :value)
26
+ offset = component[:attributes].dig(:tablet, :value, :offset, :value)
27
27
  classes += " col-md-#{size} col-md-offset-#{offset} offset-md-#{offset}" # BS4, breaks small desktop for BS3
28
28
  classes += " col-sm-#{size} col-sm-offset-#{offset} offset-sm-#{offset}" # BS3, breaks mobile landscape for BS4
29
29
  else
@@ -34,9 +34,9 @@ end
34
34
  # Mobile override
35
35
  # - no class for BS4 (xs disappears, sm is treated in the same way)
36
36
  # - xs for BS3
37
- if component[:attributes][:mobile] && component[:attributes][:mobile][:enabled]
38
- size = component[:attributes][:mobile][:size]
39
- offset = component[:attributes][:mobile][:offset]
37
+ if component[:attributes].dig(:mobile, :value, :enabled, :value)
38
+ size = component[:attributes].dig(:mobile, :value, :size, :value)
39
+ offset = component[:attributes].dig(:mobile, :value, :offset, :value)
40
40
  classes += " col-#{size} offset-#{offset}" # BS4, does nothing for BS3
41
41
  classes += " col-xs-#{size} col-xs-offset-#{offset}" # BS3, does nothing for BS4
42
42
  end
@@ -9,15 +9,35 @@
9
9
  type: 'cover',
10
10
  attributes: {
11
11
  image: {
12
- id: undefined,
13
- name: ''
12
+ searchable: false,
13
+ translatable: false,
14
+ type: 'blob',
15
+ value: {
16
+ id: undefined,
17
+ name: ''
18
+ }
14
19
  },
15
- searchable_surtitle: '',
16
- searchable_title: '',
17
- searchable_subtitle: ''
20
+ surtitle: {
21
+ searchable: true,
22
+ translatable: true,
23
+ type: 'string',
24
+ value: ''
25
+ },
26
+ title: {
27
+ searchable: true,
28
+ translatable: true,
29
+ type: 'string',
30
+ value: ''
31
+ },
32
+ subtitle: {
33
+ searchable: true,
34
+ translatable: true,
35
+ type: 'string',
36
+ value: ''
37
+ }
18
38
  }
19
39
  }
20
40
  })
21
41
  JAVASCRIPT
22
42
  %>
23
- <div ng-init="<%= init %>"></div>
43
+ <div ng-init="<%= init %>"></div>
@@ -1,18 +1,18 @@
1
1
  <script type="text/ng-template" id="promethee/components/cover/edit/inspect">
2
- <promethee-uploader ng-model="promethee.inspected.attributes.image" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
2
+ <promethee-uploader ng-model="promethee.inspected.attributes.image.value" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
3
3
 
4
4
  <div class="form-group">
5
5
  <label class="label-control">Surtitle</label>
6
- <input ng-model="promethee.inspected.attributes.searchable_surtitle" class="form-control" type="text"/>
6
+ <input ng-model="promethee.inspected.attributes.surtitle.value" class="form-control" type="text"/>
7
7
  </div>
8
8
 
9
9
  <div class="form-group">
10
10
  <label class="label-control">Title</label>
11
- <input ng-model="promethee.inspected.attributes.searchable_title" class="form-control" type="text"/>
11
+ <input ng-model="promethee.inspected.attributes.title.value" class="form-control" type="text"/>
12
12
  </div>
13
13
 
14
14
  <div class="form-group">
15
15
  <label class="label-control">Subtitle</label>
16
- <input ng-model="promethee.inspected.attributes.searchable_subtitle" class="form-control" type="text"/>
16
+ <input ng-model="promethee.inspected.attributes.subtitle.value" class="form-control" type="text"/>
17
17
  </div>
18
18
  </script>
@@ -2,11 +2,11 @@
2
2
  <%= render 'promethee/edit/move.header', type: 'cover' %>
3
3
  <div class=" promethee-edit__wrapper
4
4
  promethee-edit__cover-content"
5
- style="background-image:url('{{ component.attributes.image.id ? '/promethee/blob/' + component.attributes.image.id : '' }}')">
5
+ style="background-image:url('{{ component.attributes.image.value.id ? '/promethee/blob/' + component.attributes.image.value.id : '' }}')">
6
6
  <hgroup>
7
- <h2 class="surtitle">{{component.attributes.searchable_surtitle}}</h2>
8
- <h1>{{component.attributes.searchable_title}}</h1>
9
- <h2 class="subtitle">{{component.attributes.searchable_subtitle}}</h2>
7
+ <h2 class="surtitle">{{component.attributes.surtitle.value}}</h2>
8
+ <h1>{{component.attributes.title.value}}</h1>
9
+ <h2 class="subtitle">{{component.attributes.subtitle.value}}</h2>
10
10
  </hgroup>
11
11
  </div>
12
12
  </div>
@@ -1,48 +1,48 @@
1
1
  <script type="text/ng-template" id="promethee/components/cover/localize">
2
- <div ng-show="master.attributes.searchable_surtitle || master.attributes.searchable_title || master.attributes.searchable_subtitle">
2
+ <div ng-show="master.attributes.surtitle.value || master.attributes.title.value || master.attributes.subtitle.value">
3
3
  <hr>
4
4
 
5
5
  <div class="row">
6
6
  <div class="col-md-6">
7
- <img ng-src="/promethee/blob/{{master.attributes.image.id}}" class="img-fluid img-responsive">
7
+ <img ng-src="/promethee/blob/{{master.attributes.image.value.id}}" class="img-fluid img-responsive" style="max-width: 200px">
8
8
  </div>
9
9
  </div>
10
10
 
11
- <div class="row" ng-show="master.attributes.searchable_surtitle">
11
+ <div class="row" ng-show="master.attributes.surtitle.value">
12
12
  <div class="col-md-6">
13
13
  <b>Surtitle</b>
14
- <p>{{master.attributes.searchable_surtitle}}</p>
14
+ <p>{{master.attributes.surtitle.value}}</p>
15
15
  </div>
16
16
  <div class="col-md-6">
17
17
  <div class="form-group">
18
- <label class="label-control">Surtitle</label>
19
- <input class="form-control" ng-model="component.attributes.searchable_surtitle" type="text">
18
+ <b>Surtitle</b>
19
+ <input class="form-control" ng-model="component.attributes.surtitle.value" type="text">
20
20
  </div>
21
21
  </div>
22
22
  </div>
23
23
 
24
- <div class="row" ng-show="master.attributes.searchable_title">
24
+ <div class="row" ng-show="master.attributes.title.value">
25
25
  <div class="col-md-6">
26
26
  <b>Title</b>
27
- <p>{{master.attributes.searchable_title}}</p>
27
+ <p>{{master.attributes.title.value}}</p>
28
28
  </div>
29
29
  <div class="col-md-6">
30
30
  <div class="form-group">
31
- <label class="label-control">Title</label>
32
- <input class="form-control" ng-model="component.attributes.searchable_title" type="text">
31
+ <b>Title</b>
32
+ <input class="form-control" ng-model="component.attributes.title.value" type="text">
33
33
  </div>
34
34
  </div>
35
35
  </div>
36
36
 
37
- <div class="row" ng-show="master.attributes.searchable_subtitle">
37
+ <div class="row" ng-show="master.attributes.subtitle.value">
38
38
  <div class="col-md-6">
39
39
  <b>Subtitle</b>
40
- <p>{{master.attributes.searchable_subtitle}}</p>
40
+ <p>{{master.attributes.subtitle.value}}</p>
41
41
  </div>
42
42
  <div class="col-md-6">
43
43
  <div class="form-group">
44
- <label class="label-control">Subtitle</label>
45
- <input class="form-control" ng-model="component.attributes.searchable_subtitle" type="text">
44
+ <b>Subtitle</b>
45
+ <input class="form-control" ng-model="component.attributes.subtitle.value" type="text">
46
46
  </div>
47
47
  </div>
48
48
  </div>
@@ -1,21 +1,21 @@
1
1
  <%
2
- blob = blob_from_data component[:attributes][:image]
2
+ blob = blob_from_data component[:attributes].dig(:image, :value)
3
3
 
4
- searchable_surtitle = component[:attributes][:searchable_surtitle].to_s
5
- searchable_title = component[:attributes][:searchable_title].to_s
6
- searchable_subtitle = component[:attributes][:searchable_subtitle].to_s
4
+ surtitle = component[:attributes].dig(:surtitle, :value)&.to_s
5
+ title = component[:attributes].dig(:title, :value)&.to_s
6
+ subtitle = component[:attributes].dig(:subtitle, :value)&.to_s
7
7
  %>
8
8
  <div id="component-<%= component[:id] %>" class="<%= promethee_class_for(component) %>" style="background-image: url(<%= url_for(blob.variant(resize: '1920>', quality: 95)) if blob %>)">
9
- <% if searchable_surtitle.present? %>
10
- <p><%= searchable_surtitle %></p>
9
+ <% if surtitle.present? %>
10
+ <p><%= surtitle %></p>
11
11
  <% end %>
12
12
 
13
- <% if searchable_title.present? %>
14
- <h1><%= searchable_title %></h1>
13
+ <% if title.present? %>
14
+ <h1><%= title %></h1>
15
15
  <% end %>
16
16
 
17
- <% if searchable_subtitle.present? %>
18
- <p><%= searchable_subtitle %></p>
17
+ <% if subtitle.present? %>
18
+ <p><%= subtitle %></p>
19
19
  <% end %>
20
20
 
21
21
  </div>
@@ -9,12 +9,32 @@
9
9
  type: 'faq_item',
10
10
  attributes: {
11
11
  image: {
12
- id: undefined,
13
- name: ""
12
+ searchable: false,
13
+ translatable: false,
14
+ type: 'blob',
15
+ value: {
16
+ id: undefined,
17
+ name: ''
18
+ }
14
19
  },
15
- searchable_title: "",
16
- searchable_body: "",
17
- special_question: false
20
+ title: {
21
+ searchable: true,
22
+ translatable: true,
23
+ type: 'string',
24
+ value: ''
25
+ },
26
+ body: {
27
+ searchable: true,
28
+ translatable: true,
29
+ type: 'text',
30
+ value: ''
31
+ },
32
+ special_question: {
33
+ searchable: false,
34
+ translatable: false,
35
+ type: 'boolean',
36
+ value: false
37
+ }
18
38
  }
19
39
  }
20
40
  })
@@ -1,18 +1,18 @@
1
1
  <script type="text/ng-template" id="promethee/components/faq_item/edit/inspect">
2
- <promethee-uploader ng-model="promethee.inspected.attributes.image" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
2
+ <promethee-uploader ng-model="promethee.inspected.attributes.image.value" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
3
3
 
4
4
  <div class="form-group">
5
5
  <label class="label-control">Title</label>
6
- <input class="form-control" ng-model="promethee.inspected.attributes.searchable_title" type="text">
6
+ <input class="form-control" ng-model="promethee.inspected.attributes.title.value" type="text">
7
7
  </div>
8
8
 
9
9
  <div class="form-group">
10
10
  <label class="label-control">Body</label>
11
- <summernote config="summernoteConfig" ng-model="promethee.inspected.attributes.searchable_body"></summernote>
11
+ <summernote config="summernoteConfig" ng-model="promethee.inspected.attributes.body.value"></summernote>
12
12
  </div>
13
13
 
14
14
  <div class="form-group">
15
- <input ng-model="promethee.inspected.attributes.special_question" type="checkbox" />
15
+ <input ng-model="promethee.inspected.attributes.special_question.value" type="checkbox" />
16
16
  <label class="label-control"> Special question</label>
17
17
  </div>
18
18
  </script>
@@ -1,17 +1,17 @@
1
1
  <script type="text/ng-template" id="promethee/components/faq_item/edit/move">
2
2
  <%= render 'promethee/edit/move.header', type: 'faq_item' %>
3
3
  <div class="header">FAQ Item</div>
4
- <div class="row promethee-edit__faq_item__content{{ component.attributes.special_question ? '--special' : '' }}">
4
+ <div class="row promethee-edit__faq_item__content{{ component.attributes.special_question.value ? '--special' : '' }}">
5
5
  <div class="col-9 col-xs-9">
6
- <h4>{{component.attributes.searchable_title}}</h4>
7
- <div ng-bind-html="component.attributes.searchable_body | htmlSafe"></div>
6
+ <h4>{{component.attributes.title.value}}</h4>
7
+ <div ng-bind-html="component.attributes.body.value | htmlSafe"></div>
8
8
  </div>
9
9
  <div class="col-3 col-xs-3">
10
- <figure ng-show="component.attributes.image.id">
11
- <img ng-src="{{ component.attributes.image.id ? '/promethee/blob/' + component.attributes.image.id : '#' }}" class="img-fluid img-responsive">
10
+ <figure ng-show="component.attributes.image.value.id">
11
+ <img ng-src="{{ component.attributes.image.value.id ? '/promethee/blob/' + component.attributes.image.value.id : '#' }}" class="img-fluid img-responsive">
12
12
  </figure>
13
13
  </div>
14
14
  </div>
15
15
  </div>
16
16
  </div>
17
- </script>
17
+ </script>
@@ -1,27 +1,27 @@
1
1
  <script type="text/ng-template" id="promethee/components/faq_item/localize">
2
- <div ng-show="master.attributes.searchable_title">
2
+ <div ng-show="master.attributes.title.value">
3
3
  <hr>
4
4
  <div class="row">
5
5
  <div class="col-md-6">
6
6
  <b>Title</b>
7
- <p>{{master.attributes.searchable_title}}</p>
7
+ <p>{{master.attributes.title.value}}</p>
8
8
  </div>
9
9
  <div class="col-md-6">
10
10
  <div class="form-group">
11
- <label class="label-control">Title</label>
12
- <input class="form-control" ng-model="component.attributes.searchable_title" type="text">
11
+ <b>Title</b>
12
+ <input class="form-control" ng-model="component.attributes.title.value" type="text">
13
13
  </div>
14
14
  </div>
15
15
  </div>
16
16
  <div class="row">
17
17
  <div class="col-md-6">
18
18
  <b>Body</b>
19
- <div ng-bind-html="master.attributes.searchable_body | htmlSafe"></div>
19
+ <div ng-bind-html="master.attributes.body.value | htmlSafe"></div>
20
20
  </div>
21
21
  <div class="col-md-6">
22
22
  <div class="form-group">
23
- <label class="label-control">Body</label>
24
- <summernote config="summernoteConfig" ng-model="component.attributes.searchable_body"></summernote>
23
+ <b>Body</b>
24
+ <summernote config="summernoteConfig" ng-model="component.attributes.body.value"></summernote>
25
25
  </div>
26
26
  </div>
27
27
  </div>
@@ -1,9 +1,9 @@
1
1
  <%
2
- title = component[:attributes][:searchable_title].to_s
3
- body = component[:attributes][:searchable_body].to_s
4
- special_question = component[:attributes][:special_question]
2
+ title = component[:attributes].dig(:title, :value)&.to_s
3
+ body = component[:attributes].dig(:body, :value)&.to_s.html_safe
4
+ special_question = component[:attributes].dig(:special_question, :value)
5
5
 
6
- image_blob = blob_from_data component[:attributes][:image]
6
+ image_blob = blob_from_data component[:attributes].dig(:image, :value)
7
7
  %>
8
8
 
9
9
  <div class="<%= promethee_class_for component %> <%= 'promethee__component__faq_item--special' if special_question %>">
@@ -18,14 +18,14 @@ image_blob = blob_from_data component[:attributes][:image]
18
18
  <% if image_blob %>
19
19
  <div class="row ">
20
20
  <div class="col-9 col-xs-9">
21
- <%= body.html_safe %>
21
+ <%= body %>
22
22
  </div>
23
23
  <div class="col-3 col-xs-3">
24
24
  <%= render 'promethee/show/image.srcset', blob: image_blob, alt: '', caption: '' %>
25
25
  </div>
26
26
  </div>
27
27
  <% else %>
28
- <%= body.html_safe %>
28
+ <%= body %>
29
29
  <% end %>
30
30
  </div>
31
- </div>
31
+ </div>
@@ -9,11 +9,26 @@
9
9
  type: 'image',
10
10
  attributes: {
11
11
  image: {
12
- id: undefined,
13
- name: ''
12
+ searchable: false,
13
+ translatable: false,
14
+ type: 'blob',
15
+ value: {
16
+ id: undefined,
17
+ name: ''
18
+ }
14
19
  },
15
- searchable_alt: '',
16
- searchable_caption: ''
20
+ alt: {
21
+ searchable: true,
22
+ translatable: true,
23
+ type: 'string',
24
+ value: ''
25
+ },
26
+ caption: {
27
+ searchable: true,
28
+ translatable: true,
29
+ type: 'string',
30
+ value: ''
31
+ }
17
32
  }
18
33
  }
19
34
  })
@@ -1,16 +1,16 @@
1
1
  <script type="text/ng-template" id="promethee/components/image/edit/inspect">
2
2
 
3
- <promethee-uploader ng-model="promethee.inspected.attributes.image" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
3
+ <promethee-uploader ng-model="promethee.inspected.attributes.image.value" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
4
4
 
5
5
  <div class="form-group">
6
6
  <label class="label-control">Caption</label>
7
- <input class="form-control" ng-model="promethee.inspected.attributes.searchable_caption">
7
+ <input class="form-control" ng-model="promethee.inspected.attributes.caption.value">
8
8
  </div>
9
9
 
10
10
  <%= render 'promethee/edit/inspect.advanced' %>
11
11
  <div class="form-group">
12
12
  <label class="label-control">Alt</label>
13
- <input class="form-control" ng-model="promethee.inspected.attributes.searchable_alt">
13
+ <input class="form-control" ng-model="promethee.inspected.attributes.alt.value">
14
14
  </div>
15
15
  </div>
16
16
  </script>
@@ -1,13 +1,13 @@
1
1
  <script type="text/ng-template" id="promethee/components/image/edit/move">
2
2
  <%= render 'promethee/edit/move.header', type: 'image' %>
3
- <figure ng-show="component.attributes.image.id">
4
- <img ng-src="{{ component.attributes.image.id ? '/promethee/blob/' + component.attributes.image.id : '#' }}"
3
+ <figure ng-show="component.attributes.image.value.id">
4
+ <img ng-src="{{ component.attributes.image.value.id ? '/promethee/blob/' + component.attributes.image.value.id : '#' }}"
5
5
  class="img-fluid img-responsive">
6
- <figcaption ng-show="component.attributes.searchable_caption">
7
- {{component.attributes.searchable_caption}}
6
+ <figcaption ng-show="component.attributes.caption.value">
7
+ {{component.attributes.caption.value}}
8
8
  </figcaption>
9
9
  </figure>
10
- <div ng-hide="component.attributes.image.id">
10
+ <div ng-hide="component.attributes.image.value.id">
11
11
  <p ng-hide="editing"
12
12
  class="text-center text-empty">Click to set the image</p>
13
13
  </div>