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,37 +1,40 @@
1
1
  <script type="text/ng-template" id="promethee/components/image/localize">
2
- <div ng-show="master.attributes.searchable_alt || master.attributes.searchable_caption">
2
+ <div ng-show="master.attributes.alt.value || master.attributes.caption.value">
3
3
  <hr>
4
4
 
5
5
  <div class="row">
6
6
  <div class="col-md-6">
7
- <img ng-src="/promethee/blob/{{component.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
- </div>
10
-
11
- <div class="row" ng-show="master.attributes.searchable_alt">
12
9
  <div class="col-md-6">
13
- <b>Alt</b>
14
- <p>{{master.attributes.searchable_alt}}</p>
15
- </div>
16
- <div class="col-md-6">
17
- <div class="form-group">
18
- <label class="label-control">Alt</label>
19
- <input class="form-control" ng-model="component.attributes.searchable_alt" type="text">
20
- </div>
10
+ <img ng-src="/promethee/blob/{{component.attributes.image.value.id}}" class="img-fluid img-responsive" style="max-width: 200px">
21
11
  </div>
22
12
  </div>
23
13
 
24
- <div class="row" ng-show="master.attributes.searchable_caption">
14
+ <div class="row" ng-show="master.attributes.caption.value">
25
15
  <div class="col-md-6">
26
16
  <b>Caption</b>
27
- <p>{{master.attributes.searchable_caption}}</p>
17
+ <p>{{master.attributes.caption.value}}</p>
28
18
  </div>
29
19
  <div class="col-md-6">
30
20
  <div class="form-group">
31
- <label class="label-control">Caption</label>
32
- <input class="form-control" ng-model="component.attributes.searchable_caption" type="text">
21
+ <b>Caption</b>
22
+ <input class="form-control" ng-model="component.attributes.caption.value" type="text">
33
23
  </div>
34
24
  </div>
35
25
  </div>
36
26
  </div>
27
+
28
+ <div class="row" ng-show="master.attributes.alt.value">
29
+ <div class="col-md-6">
30
+ <b>Alt</b>
31
+ <p>{{master.attributes.alt.value}}</p>
32
+ </div>
33
+ <div class="col-md-6">
34
+ <div class="form-group">
35
+ <b>Alt</b>
36
+ <input class="form-control" ng-model="component.attributes.alt.value" type="text">
37
+ </div>
38
+ </div>
39
+ </div>
37
40
  </script>
@@ -1,14 +1,14 @@
1
1
  <%
2
- blob = blob_from_data component[:attributes][:image]
2
+ blob = blob_from_data component[:attributes].dig(:image, :value)
3
3
 
4
- searchable_alt = component[:attributes][:searchable_alt].to_s
5
- searchable_caption = component[:attributes][:searchable_caption].to_s
4
+ alt = component[:attributes].dig(:alt, :value)&.to_s
5
+ caption = component[:attributes].dig(:caption, :value)&.to_s
6
6
  %>
7
7
  <figure class="<%= promethee_class_for component %>">
8
- <%= render 'promethee/show/image.srcset', blob: blob, alt: searchable_alt, caption: searchable_caption if blob %>
9
- <% unless searchable_caption.blank? %>
8
+ <%= render 'promethee/show/image.srcset', blob: blob, alt: alt, caption: caption if blob %>
9
+ <% unless caption.blank? %>
10
10
  <figcaption>
11
- <%= searchable_caption %>
11
+ <%= caption %>
12
12
  </figcaption>
13
13
  <% end %>
14
14
  </figure>
@@ -8,18 +8,43 @@
8
8
  data: {
9
9
  type: 'page',
10
10
  attributes: {
11
- searchable_title: 'New page',
12
- searchable_description: '',
11
+ title: {
12
+ searchable: true,
13
+ translatable: true,
14
+ type: 'string',
15
+ value: 'New page'
16
+ },
17
+ description: {
18
+ searchable: true,
19
+ translatable: true,
20
+ type: 'text',
21
+ value: ''
22
+ },
13
23
  thumbnail: {
14
- id: undefined,
15
- name: ''
24
+ searchable: false,
25
+ translatable: false,
26
+ type: 'blob',
27
+ value: {
28
+ id: undefined,
29
+ name: ''
30
+ }
31
+ },
32
+ stylesheets: {
33
+ searchable: false,
34
+ translatable: false,
35
+ type: 'string',
36
+ value: ''
16
37
  },
17
- stylesheets: '',
18
- javascripts: ''
38
+ javascripts: {
39
+ searchable: false,
40
+ translatable: false,
41
+ type: 'string',
42
+ value: ''
43
+ }
19
44
  },
20
45
  children: []
21
46
  }
22
47
  })
23
48
  JAVASCRIPT
24
49
  %>
25
- <div ng-init="<%= init %>"></div>
50
+ <div ng-init="<%= init %>"></div>
@@ -2,26 +2,26 @@
2
2
  <% unless @disable_page_attributes %>
3
3
  <div class="form-group">
4
4
  <label class="label-control">Title</label>
5
- <input class="form-control" ng-model="promethee.inspected.attributes.searchable_title">
5
+ <input class="form-control" ng-model="promethee.inspected.attributes.title.value">
6
6
  </div>
7
7
 
8
8
  <div class="form-group">
9
9
  <label class="label-control">Description</label>
10
- <textarea class="form-control" ng-model="promethee.inspected.attributes.searchable_description"></textarea>
10
+ <textarea class="form-control" ng-model="promethee.inspected.attributes.description.value"></textarea>
11
11
  </div>
12
12
  <% end %>
13
13
 
14
14
  <%= render 'promethee/edit/inspect.advanced' %>
15
- <promethee-uploader ng-model="promethee.inspected.attributes.thumbnail" label="Thumbnail" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
15
+ <promethee-uploader ng-model="promethee.inspected.attributes.thumbnail.value" label="Thumbnail" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
16
16
 
17
17
  <div class="form-group">
18
18
  <label class="label-control">Stylesheets</label>
19
- <textarea class="form-control" ng-model="promethee.inspected.attributes.stylesheets"></textarea>
19
+ <textarea class="form-control" ng-model="promethee.inspected.attributes.stylesheets.value"></textarea>
20
20
  </div>
21
21
 
22
22
  <div class="form-group">
23
23
  <label class="label-control">Javascripts</label>
24
- <textarea class="form-control" ng-model="promethee.inspected.attributes.javascripts"></textarea>
24
+ <textarea class="form-control" ng-model="promethee.inspected.attributes.javascripts.value"></textarea>
25
25
  </div>
26
26
  </div>
27
27
  </script>
@@ -1,31 +1,31 @@
1
1
  <script type="text/ng-template" id="promethee/components/page/localize">
2
2
  <% unless @disable_page_attributes %>
3
3
  <hr>
4
-
4
+
5
5
  <div class="row">
6
6
  <div class="col-md-6">
7
7
  <b>Page title</b>
8
- <p>{{master.attributes.searchable_title}}</p><br>
8
+ <p>{{master.attributes.title.value}}</p><br>
9
9
  </div>
10
10
  <div class="col-md-6">
11
11
  <div class="form-group">
12
- <label class="label-control">Page title</label>
13
- <input class="form-control" ng-model="component.attributes.searchable_title" type="text">
12
+ <b>Page title</b>
13
+ <input class="form-control" ng-model="component.attributes.title.value" type="text">
14
14
  </div>
15
15
  </div>
16
16
  </div>
17
17
 
18
- <div class="row" ng-show="master.attributes.searchable_description">
18
+ <div class="row" ng-show="master.attributes.description.value">
19
19
  <div class="col-md-6">
20
20
  <div>
21
21
  <b>Page description</b>
22
- <p>{{master.attributes.searchable_description}}</p>
22
+ <p>{{master.attributes.description.value}}</p>
23
23
  </div>
24
24
  </div>
25
25
  <div class="col-md-6">
26
26
  <div class="form-group">
27
- <label class="label-control">Page description</label>
28
- <textarea class="form-control" ng-model="component.attributes.searchable_description"></textarea>
27
+ <b>Page description</b>
28
+ <textarea class="form-control" ng-model="component.attributes.description.value"></textarea>
29
29
  </div>
30
30
  </div>
31
31
  </div>
@@ -1,14 +1,14 @@
1
1
  <%
2
- stylesheets = component[:attributes][:stylesheets]
3
- javascripts = component[:attributes][:javascripts]
2
+ stylesheets = component[:attributes].dig(:stylesheets, :value)&.to_s&.html_safe
3
+ javascripts = component[:attributes].dig(:javascripts, :value)&.to_s&.html_safe
4
4
  %>
5
5
 
6
6
  <% if stylesheets.present? %>
7
- <style><%= stylesheets.html_safe %></style>
7
+ <style><%= stylesheets %></style>
8
8
  <% end %>
9
9
 
10
10
  <% if javascripts.present? %>
11
- <script><%= javascripts.html_safe %></script>
11
+ <script><%= javascripts %></script>
12
12
  <% end %>
13
13
 
14
14
  <div class="<%= promethee_class_for component %>">
@@ -8,8 +8,18 @@
8
8
  data: {
9
9
  type: 'row',
10
10
  attributes: {
11
- bgcolor: "rgba(255,255,255,0)",
12
- backgrounds: []
11
+ bgcolor: {
12
+ searchable: false,
13
+ translatable: false,
14
+ type: 'color',
15
+ value: "rgba(255,255,255,0)",
16
+ },
17
+ backgrounds: {
18
+ searchable: false,
19
+ translatable: false,
20
+ type: 'array',
21
+ value: []
22
+ }
13
23
  },
14
24
  children: []
15
25
  }
@@ -20,22 +20,22 @@
20
20
  <%= render 'promethee/edit/inspect.advanced' %>
21
21
  <div class="form-group">
22
22
  <label class="label-control">Background color</label>
23
- <input ng-model="promethee.inspected.attributes.bgcolor"
23
+ <input ng-model="promethee.inspected.attributes.bgcolor.value"
24
24
  colorpicker="rgba"
25
25
  class="form-control"
26
26
  type="text" />
27
27
  </div>
28
28
 
29
29
  <div>
30
- <div class="btn btn-default btn-light" ng-click="promethee.inspected.attributes.backgrounds.push( { image: { id: undefined, name: '' }, posh: 'center', posv: 'center', size: 'auto' } )">Add background image</div>
30
+ <div class="btn btn-default btn-light" ng-click="promethee.inspected.attributes.backgrounds.value.push( { image: { searchable: false, type: 'blob', value: { id: undefined, name: '' } }, posh: { collection: [ { label: 'Left', value: 'left' }, { label: 'Center', value: 'center' }, { label: 'Right', value: 'right' } ], searchable: false, type: 'enum', value: 'center' }, posv: { collection: [ { label: 'Top', value: 'top' }, { label: 'Center', value: 'center' }, { label: 'Bottom', value: 'bottom' } ], searchable: false, type: 'enum', value: 'center' }, size: { collection: [ { label: 'Auto', value: 'auto' }, { label: 'Cover', value: 'cover' }, { label: 'Contain', value: 'contain' } ], searchable: false, type: 'enum', value: 'auto' } } )">Add background image</div>
31
31
 
32
- <div ng-repeat="background in promethee.inspected.attributes.backgrounds" style="margin-top: 20px">
33
- <h3>Background {{$index + 1}} <span class="fa fa-trash" ng-click="promethee.inspected.attributes.backgrounds.splice($index, 1)" style="cursor: pointer"></span></h3>
34
- <promethee-uploader ng-model="background.image" label="" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
32
+ <div ng-repeat="background in promethee.inspected.attributes.backgrounds.value" style="margin-top: 20px">
33
+ <h3>Background {{$index + 1}} <span class="fa fa-trash" ng-click="promethee.inspected.attributes.backgrounds.value.splice($index, 1)" style="cursor: pointer"></span></h3>
34
+ <promethee-uploader ng-model="background.image.value" label="" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
35
35
 
36
- <%= render 'promethee/edit/radiobuttons', label: 'Horizontal position', model: 'background.posh', values: ['left', 'center', 'right'] %>
37
- <%= render 'promethee/edit/radiobuttons', label: 'Vertical position', model: 'background.posv', values: ['top', 'center', 'bottom'] %>
38
- <%= render 'promethee/edit/radiobuttons', label: 'Size', model: 'background.size', values: ['auto', 'cover', 'contain'] %>
36
+ <%= render 'promethee/edit/radiobuttons', label: 'Horizontal position', model: 'background.posh.value', values: ['left', 'center', 'right'] %>
37
+ <%= render 'promethee/edit/radiobuttons', label: 'Vertical position', model: 'background.posv.value', values: ['top', 'center', 'bottom'] %>
38
+ <%= render 'promethee/edit/radiobuttons', label: 'Size', model: 'background.size.value', values: ['auto', 'cover', 'contain'] %>
39
39
  </div>
40
40
 
41
41
  </div>
@@ -2,23 +2,23 @@
2
2
  <%= render 'promethee/edit/move.header', type: 'row' %>
3
3
  <div class="header">Row</div>
4
4
  <div class="row" ng-controller="RowMoveController">
5
- <div class="row__background row__background--color" ng-style="{'background': component.attributes.bgcolor}"></div>
5
+ <div class="row__background row__background--color" ng-style="{'background': component.attributes.bgcolor.value}"></div>
6
6
 
7
- <div ng-repeat="background in component.attributes.backgrounds"
7
+ <div ng-repeat="background in component.attributes.backgrounds.value"
8
8
  class="row__background"
9
9
  style="
10
- background-image:url('{{background.image.id ? '/promethee/blob/'+background.image.id : ''}}');
11
- background-position:{{background.posh+' '+background.posv}};
12
- background-size: {{background.size}}" >
10
+ background-image:url('{{background.image.value.id ? '/promethee/blob/'+background.image.value.id : ''}}');
11
+ background-position:{{background.posh.value+' '+background.posv.value}};
12
+ background-size: {{background.size.value}}" >
13
13
  </div>
14
14
 
15
15
  <div ng-click="inspect(component, $event)"
16
16
  ng-class="{'promethee-edit__component--selected': promethee.inspected === component}"
17
17
  ng-repeat="component in components"
18
18
  class=" <%= promethee_bem_classes 'promethee-edit__component', "--column" %>
19
- col-md-{{component.attributes.size}}
20
- offset-md-{{component.attributes.offset}}
21
- col-md-offset-{{component.attributes.offset}}">
19
+ col-md-{{component.attributes.size.value}}
20
+ offset-md-{{component.attributes.offset.value}}
21
+ col-md-offset-{{component.attributes.offset.value}}">
22
22
  <div class="promethee-edit__component__inner">
23
23
  <%= render 'promethee/edit/move.remove' %>
24
24
  <div class="header">Column {{$index + 1}}</div>
@@ -39,4 +39,4 @@
39
39
  $scope.parent_type = $scope.component.type;
40
40
  $scope.components = $scope.component.children;
41
41
  }]);
42
- </script>
42
+ </script>
@@ -1,20 +1,21 @@
1
1
  <%
2
- background_color = component[:attributes][:bgcolor] || "rgba(255, 255, 255, 0)"
2
+ background_color = component[:attributes].dig(:bgcolor, :value)&.to_s || "rgba(255, 255, 255, 0)"
3
+ backgrounds = component[:attributes].dig(:backgrounds, :value)
3
4
  background_images = []
4
5
  background_positions = []
5
6
  background_sizes = []
6
7
 
7
8
  has_background = !(background_color =~ /rgba\(\s*255\s*,\s*255\s*,\s*255\s*,\s*0\s*\)/)
8
9
 
9
- if component[:attributes] && component[:attributes].has_key?(:backgrounds) # retro-compatibility
10
- component[:attributes][:backgrounds].each do |item|
11
- blob = blob_from_data item[:image]
10
+ if backgrounds
11
+ backgrounds.each do |item|
12
+ blob = blob_from_data item.dig(:image, :value)
12
13
  if blob
13
14
  url = "url(#{url_for(blob)})"
14
- position = "#{item[:posh]} #{item[:posv]}"
15
+ position = "#{item.dig(:posh, :value)} #{item.dig(:posv, :value)}"
15
16
  background_images << url
16
17
  background_positions << position
17
- background_sizes << item[:size]
18
+ background_sizes << item.dig(:size, :value)
18
19
  end
19
20
  end
20
21
  end
@@ -8,14 +8,36 @@
8
8
  data: {
9
9
  type: 'slider_item',
10
10
  attributes: {
11
- searchable_caption: "",
12
- media_type: "image",
11
+ caption: {
12
+ searchable: true,
13
+ translatable: true,
14
+ type: 'text',
15
+ value: ''
16
+ },
17
+ media_type: {
18
+ collection: [
19
+ { label: 'Image', value: 'image' },
20
+ { label: 'Video', value: 'video' }
21
+ ],
22
+ searchable: false,
23
+ translatable: false,
24
+ type: 'enum',
25
+ value: 'image'
26
+ },
13
27
  image: {
14
- id: undefined,
15
- name: ""
28
+ searchable: false,
29
+ translatable: false,
30
+ type: 'blob',
31
+ value: {
32
+ id: undefined,
33
+ name: ""
34
+ }
16
35
  },
17
36
  video: {
18
- url: "https://vimeo.com/115082758"
37
+ searchable: false,
38
+ translatable: true,
39
+ type: 'string',
40
+ value: 'https://vimeo.com/115082758'
19
41
  }
20
42
  }
21
43
  }
@@ -3,28 +3,28 @@
3
3
  <label class="label-control">Media type</label>
4
4
  <div>
5
5
  <label for="sliderItemMediaTypeImage" class="radio-inline form-check form-check-inline">
6
- <input ng-model="promethee.inspected.attributes.media_type" class="form-check-input" type="radio" value="image" id="sliderItemMediaTypeImage" />
6
+ <input ng-model="promethee.inspected.attributes.media_type.value" class="form-check-input" type="radio" value="image" id="sliderItemMediaTypeImage" />
7
7
  <span class="form-check-label">Image</span>
8
8
  </label>
9
9
  <label for="sliderItemMediaTypeVideo" class="radio-inline form-check form-check-inline">
10
- <input ng-model="promethee.inspected.attributes.media_type" class="form-check-input" type="radio" value="video" id="sliderItemMediaTypeVideo" />
10
+ <input ng-model="promethee.inspected.attributes.media_type.value" class="form-check-input" type="radio" value="video" id="sliderItemMediaTypeVideo" />
11
11
  <span class="form-check-label">Video</span>
12
12
  </label>
13
13
  </div>
14
14
  </div>
15
15
 
16
- <promethee-uploader ng-show="promethee.inspected.attributes.media_type == 'image'" ng-model="promethee.inspected.attributes.image" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
16
+ <promethee-uploader ng-show="promethee.inspected.attributes.media_type.value == 'image'" ng-model="promethee.inspected.attributes.image.value" label="Image" limits="'.jpg,.jpeg,.png,.gif'"></promethee-uploader>
17
17
 
18
- <div class="form-group" ng-show="promethee.inspected.attributes.media_type == 'video'">
18
+ <div class="form-group" ng-show="promethee.inspected.attributes.media_type.value == 'video'">
19
19
  <label class="label-control">Video URL</label>
20
- <input class="form-control" ng-model="promethee.inspected.attributes.video.url"></summernote>
20
+ <input class="form-control" ng-model="promethee.inspected.attributes.video.value"></summernote>
21
21
  </div>
22
22
 
23
23
  <div class="row">
24
24
  <div class="col-xs-12 col-12">
25
25
  <div class="form-group">
26
26
  <label class="label-control">Caption</label>
27
- <summernote config="summernoteConfig" ng-model="promethee.inspected.attributes.searchable_caption"></summernote>
27
+ <summernote config="summernoteConfig" ng-model="promethee.inspected.attributes.caption.value"></summernote>
28
28
  </div>
29
29
  </div>
30
30
  </div>
@@ -3,8 +3,8 @@
3
3
  <div class="header">Slider Item</div>
4
4
  <div class="row">
5
5
  <div class="col-12 col-xs-12">
6
- <img ng-show="component.attributes.media_type == 'image'" ng-if="component.attributes.image.id != undefined" ng-src="/promethee/blob/{{component.attributes.image.id}}" class="img-fluid img-responsive">
7
- <div ng-show="component.attributes.media_type == 'video'" ng-controller="SliderItemVideoController">
6
+ <img ng-show="component.attributes.media_type.value == 'image'" ng-if="component.attributes.image.value.id != undefined" ng-src="/promethee/blob/{{component.attributes.image.value.id}}" class="img-fluid img-responsive">
7
+ <div ng-show="component.attributes.media_type.value == 'video'" ng-controller="SliderItemVideoController">
8
8
  <div class="embed-responsive embed-responsive-16by9">
9
9
  <iframe ng-if="embed" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="allowfullscreen" ng-src="{{embed | urlSafe}}"></iframe>
10
10
  <div class="video-neutralizing-overlay"></div>
@@ -13,7 +13,7 @@
13
13
  </div>
14
14
  </div>
15
15
  <div class="row">
16
- <div class="col-12 col-xs-12 slider-item-caption" ng-show="component.attributes.searchable_caption !== ''">Caption</div>
16
+ <div class="col-12 col-xs-12 slider-item-caption" ng-show="component.attributes.caption.value !== ''" ng-bind-html="component.attributes.caption.value | htmlSafe"></div>
17
17
  </div>
18
18
  </div>
19
19
  </div>
@@ -24,13 +24,13 @@
24
24
  Object.defineProperty($scope, 'embed', {
25
25
  get: function() {
26
26
  var embed = null;
27
- var url = this.component.attributes.video.url + '';
27
+ var url = this.component.attributes.video.value + '';
28
28
 
29
- if(url.includes('vimeo')) {
29
+ if (url.includes('vimeo')) {
30
30
  var id = url.replace(/^(?:https?:)?\/\/(?:(?:www|player)\.)?vimeo\.com\/(?:video\/)?(\d+).*?$/, '$1');
31
31
  embed = 'https://player.vimeo.com/video/' + id + '?color=ffffff&title=0&byline=0&portrait=0';
32
32
  }
33
- else if(url.includes('youtube')) {
33
+ else if (url.includes('youtube')) {
34
34
  var parts = url.split('watch?v=');
35
35
  var id = parts[parts.length - 1];
36
36
  embed = 'https://www.youtube.com/embed/' + id;
@@ -43,4 +43,4 @@
43
43
  }
44
44
  })
45
45
  }]);
46
- </script>
46
+ </script>