promethee 3.0.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,25 @@
1
+ # Text Component
2
+ # ================
3
+ #
4
+ # V3
5
+ # -----
6
+ #
7
+ # {
8
+ # searchable_body: '<p>Edit me</p>'
9
+ # }
10
+ #
11
+
12
+ module Promethee::StructureUpgrader::Components
13
+ class Text < Base
14
+ def upgraded_attributes
15
+ {
16
+ 'body' => {
17
+ 'searchable' => true,
18
+ 'translatable' => true,
19
+ 'type' => 'text',
20
+ 'value' => attribute('searchable_body')
21
+ }
22
+ }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ # Video Component
2
+ # ================
3
+ #
4
+ # V3
5
+ # -----
6
+ #
7
+ # {
8
+ # url: 'https://vimeo.com/115082758',
9
+ # autoplay: false
10
+ # }
11
+ #
12
+
13
+ module Promethee::StructureUpgrader::Components
14
+ class Video < Base
15
+ def upgraded_attributes
16
+ {
17
+ 'url' => {
18
+ 'searchable' => false,
19
+ 'translatable' => true,
20
+ 'type' => 'string',
21
+ 'value' => string_attribute('url')
22
+ },
23
+ 'autoplay' => {
24
+ 'searchable' => false,
25
+ 'translatable' => false,
26
+ 'type' => 'boolean',
27
+ 'value' => attribute('autoplay')
28
+ }
29
+ }
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,110 @@
1
+ class Promethee::StructureUpgraderService
2
+ BASE_COMPONENTS = {
3
+ aside: Promethee::StructureUpgrader::Components::Aside,
4
+ blockquote: Promethee::StructureUpgrader::Components::Blockquote,
5
+ collection: Promethee::StructureUpgrader::Components::Collection,
6
+ collection_item: Promethee::StructureUpgrader::Components::CollectionItem,
7
+ column: Promethee::StructureUpgrader::Components::Column,
8
+ cover: Promethee::StructureUpgrader::Components::Cover,
9
+ faq: Promethee::StructureUpgrader::Components::Faq,
10
+ faq_item: Promethee::StructureUpgrader::Components::FaqItem,
11
+ image: Promethee::StructureUpgrader::Components::Image,
12
+ page: Promethee::StructureUpgrader::Components::Page,
13
+ row: Promethee::StructureUpgrader::Components::Row,
14
+ slider: Promethee::StructureUpgrader::Components::Slider,
15
+ slider_item: Promethee::StructureUpgrader::Components::SliderItem,
16
+ table: Promethee::StructureUpgrader::Components::Table,
17
+ table_cell: Promethee::StructureUpgrader::Components::TableCell,
18
+ text: Promethee::StructureUpgrader::Components::Text,
19
+ video: Promethee::StructureUpgrader::Components::Video
20
+ }
21
+
22
+ attr_accessor :objects
23
+
24
+ def initialize(model_name)
25
+ begin
26
+ model_class = model_name.constantize
27
+ objects = model_class.all
28
+ rescue
29
+ puts 'Please provide a valid model name (e.g. `rake promethee:upgrade_structure[Page]`)'
30
+ exit
31
+ end
32
+ @objects = objects
33
+ end
34
+
35
+ def start
36
+ puts '= START STRUCTURE UPGRADE ='
37
+ puts "Number of objects: #{objects.count}"
38
+ i = 0
39
+ objects.each do |object|
40
+ next unless can_process?(object.data)
41
+ i += 1
42
+ process_object(object)
43
+ end
44
+ puts "Number of processed objects: #{i}"
45
+ puts '====== END UPGRADER ========'
46
+ end
47
+
48
+ def process_object(object)
49
+ puts "Processing object ##{object.id}"
50
+
51
+ object.data = object.data.has_key?('components') ? process_localization(object.data)
52
+ : process_component(object.data)
53
+ object.save
54
+ puts "End processing object ##{object.id}"
55
+ end
56
+
57
+ def process_localization(data)
58
+ data['components'].map! { |component|
59
+ process_localization_component(component)
60
+ }
61
+
62
+ # We remove the possible children to concatenate them to the list
63
+ children = []
64
+ data['components'].each { |component|
65
+ children.concat component.delete('children').to_a
66
+ }
67
+ data['components'].concat children
68
+
69
+ data
70
+ end
71
+
72
+ def process_localization_component(component)
73
+ upgraded_component = process_component(component)
74
+ # We only keep the translatable attributes
75
+ upgraded_component['attributes'].keep_if { |key, object_value| object_value['translatable'] }
76
+ upgraded_component
77
+ end
78
+
79
+ def process_component(data)
80
+ component_type = data['type']
81
+ component_upgrader = search_component(component_type).new(data)
82
+
83
+ data = component_upgrader.upgraded_data
84
+ data['children'].map! { |child| process_component(child) } if data.has_key? 'children'
85
+
86
+ data
87
+ end
88
+
89
+ protected
90
+
91
+ def can_process?(data)
92
+ data.is_a?(Hash) && (data.has_key?("components") || data.has_key?("children"))
93
+ end
94
+
95
+ def search_component(type)
96
+ component = components_library[type.to_sym]
97
+
98
+ puts "Component <#{type}> not found." if component.nil?
99
+ component
100
+ end
101
+
102
+ def components_library
103
+ @components_library ||= BASE_COMPONENTS.merge(custom_components)
104
+ end
105
+
106
+ def custom_components
107
+ # Overriden in derivated services
108
+ {}
109
+ end
110
+ end
@@ -68,10 +68,39 @@ promethee.controller('PrometheeController', ['$scope', 'summernoteConfig', 'pres
68
68
  id: $scope.generateIdentifier(),
69
69
  type: 'page',
70
70
  attributes: {
71
- searchable_title: 'New page',
72
- searchable_description: '',
73
- stylesheets: '',
74
- javascripts: ''
71
+ title: {
72
+ searchable: true,
73
+ translatable: true,
74
+ type: 'string',
75
+ value: 'New page'
76
+ },
77
+ description: {
78
+ searchable: true,
79
+ translatable: true,
80
+ type: 'text',
81
+ value: ''
82
+ },
83
+ thumbnail: {
84
+ searchable: false,
85
+ translatable: false,
86
+ type: 'blob',
87
+ value: {
88
+ id: undefined,
89
+ name: ''
90
+ }
91
+ },
92
+ stylesheets: {
93
+ searchable: false,
94
+ translatable: false,
95
+ type: 'string',
96
+ value: ''
97
+ },
98
+ javascripts: {
99
+ searchable: false,
100
+ translatable: false,
101
+ type: 'string',
102
+ value: ''
103
+ }
75
104
  },
76
105
  children: []
77
106
  };
@@ -93,6 +122,7 @@ promethee.controller('PrometheeController', ['$scope', 'summernoteConfig', 'pres
93
122
 
94
123
  $scope.addComponentByType = function(type, target, index = -1) {
95
124
  var definition = $scope.findDefinitionByType(type);
125
+
96
126
  $scope.addComponent(definition, target, index);
97
127
  }
98
128
 
@@ -58,6 +58,36 @@ promethee_masters_multiple = Promethee::Data::MastersMultiple.new master_data, o
58
58
  window.warnBeforeUnload.lock();
59
59
  }
60
60
  }, true);
61
+ $scope.copyTranslations = function(event) {
62
+ event.preventDefault();
63
+ if (confirm('Warning: this will overwrite every translations!')) {
64
+ // TODO: ne prendre que les objets utiles/clés utiles
65
+ for (i = 0; i < $scope.masters.current.components.length; i += 1) {
66
+ var master_component = $scope.masters.current.components[i];
67
+ var master_component_attributes = master_component['attributes'];
68
+ var attributes = {};
69
+ // console.log(master_component_attributes);
70
+ for (const attribute_key in master_component_attributes) {
71
+ var attribute = master_component_attributes[attribute_key];
72
+ if (attribute['translatable']) {
73
+ attributes[attribute_key] = attribute;
74
+ }
75
+ }
76
+ // console.log(attributes);
77
+ var target_component = $scope.data.components.filter(function (component) {
78
+ return component['id'] === master_component['id'];
79
+ })[0];
80
+
81
+ if (!target_component) {
82
+ console.log('not found');
83
+ continue;
84
+ }
85
+
86
+ target_component['attributes'] = JSON.parse(JSON.stringify(attributes));
87
+ }
88
+ console.log($scope.data.components);
89
+ }
90
+ }
61
91
  }]);
62
92
  </script>
63
93
 
@@ -79,12 +109,13 @@ promethee_masters_multiple = Promethee::Data::MastersMultiple.new master_data, o
79
109
 
80
110
  <div class="row">
81
111
  <div class="col-md-6">
82
- <b ng-hide="masters.multiple()">Master</b>
83
- <select ng-show="masters.multiple()" ng-model="masters.current" class="form-control do-not-warn-before-unload">
112
+ <b ng-hide="masters.multiple()">{{masters.all[0].title}}</b>
113
+ <select ng-show="masters.multiple()" ng-model="masters.current" class="float-left pull-left form-control do-not-warn-before-unload reference-choice">
84
114
  <option ng-repeat="master in masters.all" ng-value="master">{{master.title}}</option>
85
115
  </select>
116
+ <button class="btn btn-sm ml-1 btn-outline-success translation-copy" ng-click="copyTranslations($event)">Copy texts &gt;&gt;</button>
86
117
  </div>
87
- <div class="col-md-6"><b>Translation</b></div>
118
+ <div class="col-md-6"><h3>Translation</h3></div>
88
119
  </div>
89
120
  <div ng-repeat="component in data.components">
90
121
  <ng-include src="'promethee/localize/component'"></ng-include>
@@ -8,10 +8,35 @@
8
8
  data: {
9
9
  type: 'aside',
10
10
  attributes: {
11
- searchable_visible_content: '<p>Edit me</p>',
12
- searchable_collapsed_content: '',
13
- searchable_open_label: 'See more',
14
- open_label_position: 'left'
11
+ visible_content: {
12
+ searchable: true,
13
+ translatable: true,
14
+ type: 'text',
15
+ value: '<p>Edit me</p>'
16
+ },
17
+ collapsed_content: {
18
+ searchable: true,
19
+ translatable: true,
20
+ type: 'text',
21
+ value: ''
22
+ },
23
+ open_label: {
24
+ searchable: true,
25
+ translatable: true,
26
+ type: 'string',
27
+ value: 'See more'
28
+ },
29
+ open_label_position: {
30
+ collection: [
31
+ { label: 'Left', value: 'left' },
32
+ { label: 'Center', value: 'center' },
33
+ { label: 'Right', value: 'right' }
34
+ ],
35
+ searchable: false,
36
+ translatable: false,
37
+ type: 'enum',
38
+ value: 'left'
39
+ }
15
40
  },
16
41
  children: []
17
42
  }
@@ -1,25 +1,25 @@
1
1
  <script type="text/ng-template" id="promethee/components/aside/edit/inspect">
2
2
  <div class="form-group">
3
3
  <label class="label-control">Visible content</label>
4
- <summernote config="summernoteConfig" ng-model="promethee.inspected.attributes.searchable_visible_content"></summernote>
4
+ <summernote config="summernoteConfig" ng-model="promethee.inspected.attributes.visible_content.value"></summernote>
5
5
  </div>
6
6
 
7
7
  <div class="form-group">
8
8
  <label class="label-control">Collapsed content</label>
9
- <summernote config="summernoteConfig" ng-model="promethee.inspected.attributes.searchable_collapsed_content"></summernote>
9
+ <summernote config="summernoteConfig" ng-model="promethee.inspected.attributes.collapsed_content.value"></summernote>
10
10
  </div>
11
11
 
12
12
  <div class="form-group">
13
13
  <label class="label-control">Button label</label>
14
- <input ng-model="promethee.inspected.attributes.searchable_open_label" class="form-control" type="text"/>
14
+ <input ng-model="promethee.inspected.attributes.open_label.value" class="form-control" type="text"/>
15
15
  </div>
16
16
 
17
17
  <div class="form-group">
18
18
  <label class="label-control">Button label position</label>
19
19
  <div>
20
- <label class="radio-inline"> <input ng-model="promethee.inspected.attributes.open_label_position" type="radio" value="left" />Left </label>
21
- <label class="radio-inline"> <input ng-model="promethee.inspected.attributes.open_label_position" type="radio" value="center" />Center </label>
22
- <label class="radio-inline"> <input ng-model="promethee.inspected.attributes.open_label_position" type="radio" value="right" />Right </label>
20
+ <label class="radio-inline"> <input ng-model="promethee.inspected.attributes.open_label_position.value" type="radio" value="left" />Left </label>
21
+ <label class="radio-inline"> <input ng-model="promethee.inspected.attributes.open_label_position.value" type="radio" value="center" />Center </label>
22
+ <label class="radio-inline"> <input ng-model="promethee.inspected.attributes.open_label_position.value" type="radio" value="right" />Right </label>
23
23
  </div>
24
24
  </div>
25
25
  </script>
@@ -1,17 +1,17 @@
1
1
  <script type="text/ng-template" id="promethee/components/aside/edit/move">
2
2
  <%= render 'promethee/edit/move.header', type: 'aside' %>
3
- <aside ng-show="component.attributes.searchable_collapsed_content"
3
+ <aside ng-show="component.attributes.collapsed_content.value"
4
4
  ng-init="collapsed = true">
5
- <div ng-bind-html="component.attributes.searchable_visible_content | htmlSafe"></div>
5
+ <div ng-bind-html="component.attributes.visible_content.value | htmlSafe"></div>
6
6
  <div ng-hide="collapsed"
7
- ng-bind-html="component.attributes.searchable_collapsed_content | htmlSafe"></div>
7
+ ng-bind-html="component.attributes.collapsed_content.value | htmlSafe"></div>
8
8
  <a class="btn btn-default btn-light btn-block"
9
- ng-class="component.attributes.open_label_position"
9
+ ng-class="component.attributes.open_label_position.value"
10
10
  ng-click="collapsed = !collapsed"
11
- ng-bind-html="component.attributes.searchable_open_label | htmlSafe"></a>
11
+ ng-bind-html="component.attributes.open_label.value | htmlSafe"></a>
12
12
  </aside>
13
- <aside ng-hide="component.attributes.searchable_collapsed_content"
14
- ng-bind-html="component.attributes.searchable_visible_content | htmlSafe"></aside>
13
+ <aside ng-hide="component.attributes.collapsed_content.value"
14
+ ng-bind-html="component.attributes.visible_content.value | htmlSafe"></aside>
15
15
  </div>
16
16
  </div>
17
17
  </script>
@@ -4,38 +4,38 @@
4
4
  <div class="row">
5
5
  <div class="col-md-6">
6
6
  <b>Aside visible content</b>
7
- <div ng-bind-html="master.attributes.searchable_visible_content | htmlSafe"></div>
7
+ <div ng-bind-html="master.attributes.visible_content.value | htmlSafe"></div>
8
8
  </div>
9
9
  <div class="col-md-6">
10
10
  <div class="form-group">
11
- <label class="label-control">Aside visible content</label>
12
- <summernote config="summernoteConfig" ng-model="component.attributes.searchable_visible_content"></summernote>
11
+ <b>Aside visible content</b>
12
+ <summernote config="summernoteConfig" ng-model="component.attributes.visible_content.value"></summernote>
13
13
  </div>
14
14
  </div>
15
15
  </div>
16
16
 
17
- <div class="row" ng-show="master.attributes.searchable_collapsed_content">
17
+ <div class="row" ng-show="master.attributes.collapsed_content.value">
18
18
  <div class="col-md-6">
19
19
  <b>Aside collapsed content</b>
20
- <div ng-bind-html="master.attributes.searchable_collapsed_content | htmlSafe"></div>
20
+ <div ng-bind-html="master.attributes.collapsed_content.value | htmlSafe"></div>
21
21
  </div>
22
22
  <div class="col-md-6">
23
23
  <div class="form-group">
24
- <label class="label-control">Aside collapsed content</label>
25
- <summernote config="summernoteConfig" ng-model="component.attributes.searchable_collapsed_content"></summernote>
24
+ <b>Aside collapsed content</b>
25
+ <summernote config="summernoteConfig" ng-model="component.attributes.collapsed_content.value"></summernote>
26
26
  </div>
27
27
  </div>
28
28
  </div>
29
29
 
30
- <div class="row" ng-show="master.attributes.searchable_collapsed_content">
30
+ <div class="row" ng-show="master.attributes.collapsed_content.value">
31
31
  <div class="col-md-6">
32
32
  <b>Button label</b>
33
- <div ng-bind-html="master.attributes.searchable_open_label | htmlSafe"></div>
33
+ <div ng-bind-html="master.attributes.open_label.value | htmlSafe"></div>
34
34
  </div>
35
35
  <div class="col-md-6">
36
36
  <div class="form-group">
37
- <label class="label-control">Button label</label>
38
- <input class="form-control" ng-model="component.attributes.searchable_open_label" type="text">
37
+ <b>Button label</b>
38
+ <input class="form-control" ng-model="component.attributes.open_label.value" type="text">
39
39
  </div>
40
40
  </div>
41
41
  </div>
@@ -1,21 +1,21 @@
1
1
  <%
2
- searchable_visible_content = component[:attributes][:searchable_visible_content].to_s
3
- searchable_collapsed_content = component[:attributes][:searchable_collapsed_content].to_s
4
- searchable_open_label = component[:attributes][:searchable_open_label].to_s
5
- open_label_position = component[:attributes][:open_label_position].to_s
2
+ visible_content = component[:attributes].dig(:visible_content, :value)&.to_s&.html_safe
3
+ collapsed_content = component[:attributes].dig(:collapsed_content, :value)&.to_s&.html_safe
4
+ open_label = component[:attributes].dig(:open_label, :value)&.to_s
5
+ open_label_position = component[:attributes].dig(:open_label_position, :value)&.to_s
6
6
  %>
7
7
 
8
8
  <aside class="<%= promethee_class_for component %> aside">
9
- <%= searchable_visible_content.html_safe %>
9
+ <%= visible_content %>
10
10
 
11
- <% if searchable_collapsed_content.present? %>
11
+ <% if collapsed_content.present? %>
12
12
 
13
13
  <div class="collapse aside__collapse" id="aside-collapse-<%= component[:id] %>">
14
- <%= searchable_collapsed_content.html_safe %>
14
+ <%= collapsed_content %>
15
15
  </div>
16
16
 
17
17
  <div class="aside__button aside__button--<%= open_label_position %>">
18
- <a href="#aside-collapse-<%= component[:id] %>" data-toggle="collapse"><%= searchable_open_label %></a>
18
+ <a href="#aside-collapse-<%= component[:id] %>" data-toggle="collapse"><%= open_label %></a>
19
19
  </div>
20
20
 
21
21
  <% end %>