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
@@ -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 %>