promethee 1.6.63 → 1.7.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.
- checksums.yaml +4 -4
- data/app/views/promethee/_edit.html.erb +1 -1
- data/app/views/promethee/_localize.html.erb +45 -17
- data/app/views/promethee/_show.html.erb +1 -1
- data/app/views/promethee/components/aside/_localize.html.erb +5 -5
- data/app/views/promethee/components/blockquote/_localize.html.erb +4 -4
- data/app/views/promethee/components/collection_item/_localize.html.erb +2 -2
- data/app/views/promethee/components/cover/_localize.html.erb +7 -7
- data/app/views/promethee/components/faq_item/_localize.html.erb +3 -3
- data/app/views/promethee/components/image/_localize.html.erb +5 -5
- data/app/views/promethee/components/page/_localize.html.erb +3 -3
- data/app/views/promethee/components/slider_item/_localize.html.erb +2 -2
- data/app/views/promethee/components/text/_localize.html.erb +2 -2
- data/lib/promethee.rb +4 -0
- data/lib/promethee/core_ext/tags.rb +2 -2
- data/lib/promethee/data.rb +26 -96
- data/lib/promethee/data/localization.rb +39 -0
- data/lib/promethee/data/master.rb +25 -0
- data/lib/promethee/data/master_localized.rb +36 -0
- data/lib/promethee/data/masters_multiple.rb +21 -0
- data/lib/promethee/rails/version.rb +1 -1
- data/node_modules/fancybox/dist/css/jquery.fancybox.css +6 -6
- data/node_modules/fancybox/dist/js/jquery.fancybox.cjs.js +0 -0
- data/node_modules/fancybox/dist/js/jquery.fancybox.js +0 -0
- data/node_modules/fancybox/dist/js/jquery.fancybox.pack.js +0 -0
- data/node_modules/fancybox/package.json +20 -49
- metadata +6 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d615539201ed702b072e8759debef564b7b8981068fa650b672c12c393bd1c82
|
|
4
|
+
data.tar.gz: 61afe497a197687435124bbf7cd19a894ed8db353d2a73dda701e1f7e0f3f847
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e29fb2e45cbc23eac0e068ff7bcb54cd0dd535abae2e913d3a5ea3eca49c30d6002094de6165354d5914008e4bb173c25988f3866f204b69f3080ac1b84670bb
|
|
7
|
+
data.tar.gz: 5686ecc9dcd36ffde59f8746e69511e437c545e86c6214ca494f8b7ccb20682f02f7cf1e82910f9765dd988bee4c4afaef0d603222f22c5f1fe2aaf626db1dac
|
|
@@ -1,16 +1,43 @@
|
|
|
1
1
|
<%
|
|
2
|
-
promethee_data = Promethee::Data.new
|
|
2
|
+
promethee_data = Promethee::Data::Localization.new localization_data, master_data
|
|
3
|
+
promethee_masters_multiple = Promethee::Data::MastersMultiple.new master_data, other_data
|
|
3
4
|
%>
|
|
4
5
|
|
|
5
6
|
<script type="text/javascript">
|
|
6
7
|
var promethee = angular
|
|
7
8
|
.module('PrometheeLocalizer', ['summernote'])
|
|
8
|
-
.value('data', <%= promethee_data.localization_data_to_json.html_safe %>)
|
|
9
9
|
.filter('htmlSafe', ['$sce', function($sce) {
|
|
10
10
|
return function(val) {
|
|
11
11
|
return $sce.trustAsHtml(val);
|
|
12
12
|
};
|
|
13
|
-
}])
|
|
13
|
+
}])
|
|
14
|
+
.service('mastersMultiple', function() {
|
|
15
|
+
var all = [];
|
|
16
|
+
var current;
|
|
17
|
+
return {
|
|
18
|
+
set: function(masters) {
|
|
19
|
+
this.all = masters;
|
|
20
|
+
this.current = this.all[0];
|
|
21
|
+
},
|
|
22
|
+
choose: function(master) {
|
|
23
|
+
this.current = master;
|
|
24
|
+
},
|
|
25
|
+
masterForComponent: function(component) {
|
|
26
|
+
var componentFound;
|
|
27
|
+
this.current.components.forEach(function(masterComponent) {
|
|
28
|
+
if (masterComponent.id === component.id) {
|
|
29
|
+
componentFound = masterComponent;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return componentFound;
|
|
33
|
+
},
|
|
34
|
+
multiple: function() {
|
|
35
|
+
return this.all.length > 1;
|
|
36
|
+
},
|
|
37
|
+
all: all,
|
|
38
|
+
current: current
|
|
39
|
+
};
|
|
40
|
+
});
|
|
14
41
|
</script>
|
|
15
42
|
|
|
16
43
|
<% promethee_util_partials.each do |partial| %>
|
|
@@ -18,13 +45,12 @@ promethee_data = Promethee::Data.new master_data, localization_data: localizatio
|
|
|
18
45
|
<% end %>
|
|
19
46
|
|
|
20
47
|
<script type="text/javascript">
|
|
21
|
-
promethee.controller('PrometheeLocalizerController',
|
|
22
|
-
|
|
23
|
-
$scope.data = data;
|
|
24
|
-
$scope.component = {children: data.components};
|
|
25
|
-
|
|
48
|
+
promethee.controller('PrometheeLocalizerController',
|
|
49
|
+
['$scope', 'summernoteConfig', 'mastersMultiple', function($scope, summernoteConfig, mastersMultiple) {
|
|
26
50
|
$scope.summernoteConfig = summernoteConfig;
|
|
27
|
-
|
|
51
|
+
$scope.data = <%= promethee_data.to_json.html_safe %>;
|
|
52
|
+
$scope.masters = mastersMultiple;
|
|
53
|
+
$scope.masters.set(<%= promethee_masters_multiple.to_json.html_safe %>);
|
|
28
54
|
$scope.$watch('data', function(new_val, old_val) {
|
|
29
55
|
if (old_val != new_val) {
|
|
30
56
|
document.body.classList.add("promethee-page-locked");
|
|
@@ -33,30 +59,32 @@ promethee_data = Promethee::Data.new master_data, localization_data: localizatio
|
|
|
33
59
|
}]);
|
|
34
60
|
</script>
|
|
35
61
|
|
|
36
|
-
|
|
37
|
-
|
|
38
62
|
<div id="prometheeLocalizer"
|
|
39
|
-
class="promethee-localizer"
|
|
63
|
+
class="promethee-localizer ng-cloak"
|
|
40
64
|
ng-app="PrometheeLocalizer"
|
|
41
65
|
ng-controller="PrometheeLocalizerController as prometheeLocalizerController">
|
|
42
66
|
|
|
43
67
|
<script type="text/ng-template" id="promethee/localize/component">
|
|
68
|
+
<span class="hidden">{{ master = masters.masterForComponent(component) }}</span>
|
|
44
69
|
<ng-include src="'promethee/components/' + component.type + '/localize'"></ng-include>
|
|
45
70
|
</script>
|
|
46
71
|
|
|
47
72
|
<input type="hidden" name="<%= object_name %>[<%= method_name %>]" id="page_data" value="{{data}}" />
|
|
48
73
|
|
|
49
74
|
<% promethee_localize_partials.each do |partial| %>
|
|
50
|
-
|
|
75
|
+
<%= render partial %>
|
|
51
76
|
<% end %>
|
|
52
77
|
|
|
53
|
-
<% #TODO override templates from current project %>
|
|
54
|
-
|
|
55
78
|
<div class="row">
|
|
56
|
-
<div class="col-md-6"
|
|
79
|
+
<div class="col-md-6">
|
|
80
|
+
<b ng-hide="masters.multiple()">Master</b>
|
|
81
|
+
<select ng-show="masters.multiple()" ng-model="masters.current" class="form-control ignore-lock">
|
|
82
|
+
<option ng-repeat="master in masters.all" ng-value="master">{{master.title}}</option>
|
|
83
|
+
</select>
|
|
84
|
+
</div>
|
|
57
85
|
<div class="col-md-6"><b>Translation</b></div>
|
|
58
86
|
</div>
|
|
59
|
-
<div ng-repeat="component in
|
|
87
|
+
<div ng-repeat="component in data.components">
|
|
60
88
|
<ng-include src="'promethee/localize/component'"></ng-include>
|
|
61
89
|
</div>
|
|
62
90
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<%
|
|
2
|
-
promethee_data = Promethee::Data.new master_data, localization_data
|
|
2
|
+
promethee_data = Promethee::Data::MasterLocalized.new master_data, localization_data
|
|
3
3
|
%>
|
|
4
4
|
<div class="promethee" class="ng-cloak">
|
|
5
5
|
<%= render 'promethee/show/component', component: promethee_data %>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<div class="row">
|
|
5
5
|
<div class="col-md-6">
|
|
6
6
|
<b>Aside visible content</b>
|
|
7
|
-
<div ng-bind-html="
|
|
7
|
+
<div ng-bind-html="master.attributes.searchable_visible_content | htmlSafe"></div>
|
|
8
8
|
</div>
|
|
9
9
|
<div class="col-md-6">
|
|
10
10
|
<div class="form-group">
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
</div>
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
|
-
<div class="row" ng-show="
|
|
17
|
+
<div class="row" ng-show="master.attributes.searchable_collapsed_content">
|
|
18
18
|
<div class="col-md-6">
|
|
19
19
|
<b>Aside collapsed content</b>
|
|
20
|
-
<div ng-bind-html="
|
|
20
|
+
<div ng-bind-html="master.attributes.searchable_collapsed_content | htmlSafe"></div>
|
|
21
21
|
</div>
|
|
22
22
|
<div class="col-md-6">
|
|
23
23
|
<div class="form-group">
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
</div>
|
|
28
28
|
</div>
|
|
29
29
|
|
|
30
|
-
<div class="row" ng-show="
|
|
30
|
+
<div class="row" ng-show="master.attributes.searchable_collapsed_content">
|
|
31
31
|
<div class="col-md-6">
|
|
32
32
|
<b>Button label</b>
|
|
33
|
-
<div ng-bind-html="
|
|
33
|
+
<div ng-bind-html="master.attributes.searchable_open_label | htmlSafe"></div>
|
|
34
34
|
</div>
|
|
35
35
|
<div class="col-md-6">
|
|
36
36
|
<div class="form-group">
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script type="text/ng-template" id="promethee/components/blockquote/localize">
|
|
2
|
-
<div ng-show="
|
|
2
|
+
<div ng-show="master.attributes.searchable_body">
|
|
3
3
|
<hr>
|
|
4
4
|
<div class="row">
|
|
5
5
|
<div class="col-md-6">
|
|
6
6
|
<b>Body</b>
|
|
7
|
-
<div ng-bind-html="
|
|
7
|
+
<div ng-bind-html="master.attributes.searchable_body | htmlSafe"></div>
|
|
8
8
|
</div>
|
|
9
9
|
<div class="col-md-6">
|
|
10
10
|
<div class="form-group">
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
</div>
|
|
16
16
|
</div>
|
|
17
17
|
|
|
18
|
-
<div class="row" ng-show="
|
|
18
|
+
<div class="row" ng-show="master.attributes.searchable_author">
|
|
19
19
|
<div class="col-md-6">
|
|
20
20
|
<b>Author</b>
|
|
21
|
-
<p>{{
|
|
21
|
+
<p>{{master.attributes.searchable_author}}</p>
|
|
22
22
|
</div>
|
|
23
23
|
<div class="col-md-6">
|
|
24
24
|
<div class="form-group">
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script type="text/ng-template" id="promethee/components/collection_item/localize">
|
|
2
|
-
<div ng-show="
|
|
2
|
+
<div ng-show="master.attributes.searchable_caption !== ''">
|
|
3
3
|
<hr>
|
|
4
4
|
<div class="row">
|
|
5
5
|
<div class="col-md-6">
|
|
6
6
|
<b>Collection Item Caption</b>
|
|
7
|
-
<div class="promethee-edit__wrapper" ng-bind-html="
|
|
7
|
+
<div class="promethee-edit__wrapper" ng-bind-html="master.attributes.searchable_caption | htmlSafe"></div>
|
|
8
8
|
</div>
|
|
9
9
|
<div class="col-md-6">
|
|
10
10
|
<label class="label-control">Collection Item Caption</label>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script type="text/ng-template" id="promethee/components/cover/localize">
|
|
2
|
-
<div ng-show="
|
|
2
|
+
<div ng-show="master.attributes.searchable_surtitle || master.attributes.searchable_title || master.attributes.searchable_subtitle">
|
|
3
3
|
<hr>
|
|
4
4
|
|
|
5
5
|
<div class="row">
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
</div>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
|
-
<div class="row" ng-show="
|
|
11
|
+
<div class="row" ng-show="master.attributes.searchable_surtitle">
|
|
12
12
|
<div class="col-md-6">
|
|
13
13
|
<b>Surtitle</b>
|
|
14
|
-
<p>{{
|
|
14
|
+
<p>{{master.attributes.searchable_surtitle}}</p>
|
|
15
15
|
</div>
|
|
16
16
|
<div class="col-md-6">
|
|
17
17
|
<div class="form-group">
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
|
-
<div class="row" ng-show="
|
|
24
|
+
<div class="row" ng-show="master.attributes.searchable_title">
|
|
25
25
|
<div class="col-md-6">
|
|
26
26
|
<b>Title</b>
|
|
27
|
-
<p>{{
|
|
27
|
+
<p>{{master.attributes.searchable_title}}</p>
|
|
28
28
|
</div>
|
|
29
29
|
<div class="col-md-6">
|
|
30
30
|
<div class="form-group">
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
</div>
|
|
35
35
|
</div>
|
|
36
36
|
|
|
37
|
-
<div class="row" ng-show="
|
|
37
|
+
<div class="row" ng-show="master.attributes.searchable_subtitle">
|
|
38
38
|
<div class="col-md-6">
|
|
39
39
|
<b>Subtitle</b>
|
|
40
|
-
<p>{{
|
|
40
|
+
<p>{{master.attributes.searchable_subtitle}}</p>
|
|
41
41
|
</div>
|
|
42
42
|
<div class="col-md-6">
|
|
43
43
|
<div class="form-group">
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script type="text/ng-template" id="promethee/components/faq_item/localize">
|
|
2
|
-
<div ng-show="
|
|
2
|
+
<div ng-show="master.attributes.searchable_title">
|
|
3
3
|
<hr>
|
|
4
4
|
<div class="row">
|
|
5
5
|
<div class="col-md-6">
|
|
6
6
|
<b>Title</b>
|
|
7
|
-
<p>{{
|
|
7
|
+
<p>{{master.attributes.searchable_title}}</p>
|
|
8
8
|
</div>
|
|
9
9
|
<div class="col-md-6">
|
|
10
10
|
<div class="form-group">
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<div class="row">
|
|
17
17
|
<div class="col-md-6">
|
|
18
18
|
<b>Body</b>
|
|
19
|
-
<p>{{
|
|
19
|
+
<p>{{master.attributes.searchable_body}}</p>
|
|
20
20
|
</div>
|
|
21
21
|
<div class="col-md-6">
|
|
22
22
|
<div class="form-group">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script type="text/ng-template" id="promethee/components/image/localize">
|
|
2
|
-
<div ng-show="
|
|
2
|
+
<div ng-show="master.attributes.searchable_alt || master.attributes.searchable_caption">
|
|
3
3
|
<hr>
|
|
4
4
|
|
|
5
5
|
<div class="row">
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
</div>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
|
-
<div class="row" ng-show="
|
|
11
|
+
<div class="row" ng-show="master.attributes.searchable_alt">
|
|
12
12
|
<div class="col-md-6">
|
|
13
13
|
<b>Alt</b>
|
|
14
|
-
<p>{{
|
|
14
|
+
<p>{{master.attributes.searchable_alt}}</p>
|
|
15
15
|
</div>
|
|
16
16
|
<div class="col-md-6">
|
|
17
17
|
<div class="form-group">
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
|
-
<div class="row" ng-show="
|
|
24
|
+
<div class="row" ng-show="master.attributes.searchable_caption">
|
|
25
25
|
<div class="col-md-6">
|
|
26
26
|
<b>Caption</b>
|
|
27
|
-
<p>{{
|
|
27
|
+
<p>{{master.attributes.searchable_caption}}</p>
|
|
28
28
|
</div>
|
|
29
29
|
<div class="col-md-6">
|
|
30
30
|
<div class="form-group">
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<div class="row">
|
|
5
5
|
<div class="col-md-6">
|
|
6
6
|
<b>Page title</b>
|
|
7
|
-
<p>{{
|
|
7
|
+
<p>{{master.attributes.searchable_title}}</p><br>
|
|
8
8
|
</div>
|
|
9
9
|
<div class="col-md-6">
|
|
10
10
|
<div class="form-group">
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
</div>
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
|
-
<div class="row" ng-show="
|
|
17
|
+
<div class="row" ng-show="master.attributes.searchable_description">
|
|
18
18
|
<div class="col-md-6">
|
|
19
19
|
<div>
|
|
20
20
|
<b>Page description</b>
|
|
21
|
-
<p>{{
|
|
21
|
+
<p>{{master.attributes.searchable_description}}</p>
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
24
24
|
<div class="col-md-6">
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script type="text/ng-template" id="promethee/components/slider_item/localize">
|
|
2
|
-
<div ng-show="
|
|
2
|
+
<div ng-show="master.attributes.text !== ''">
|
|
3
3
|
<hr>
|
|
4
4
|
<div class="row">
|
|
5
5
|
<div class="col-md-6">
|
|
6
6
|
<b>Slider Item Caption</b>
|
|
7
|
-
<div class="promethee-edit__wrapper" ng-bind-html="
|
|
7
|
+
<div class="promethee-edit__wrapper" ng-bind-html="master.attributes.searchable_caption | htmlSafe"></div>
|
|
8
8
|
</div>
|
|
9
9
|
<div class="col-md-6">
|
|
10
10
|
<label class="label-control">Slider Item Caption</label>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script type="text/ng-template" id="promethee/components/text/localize">
|
|
2
|
-
<div ng-show="
|
|
2
|
+
<div ng-show="master.attributes.searchable_body">
|
|
3
3
|
<hr>
|
|
4
4
|
<div class="row">
|
|
5
5
|
<div class="col-md-6">
|
|
6
6
|
<b>Text</b>
|
|
7
|
-
<div ng-bind-html="
|
|
7
|
+
<div ng-bind-html="master.attributes.searchable_body | htmlSafe"></div>
|
|
8
8
|
</div>
|
|
9
9
|
<div class="col-md-6">
|
|
10
10
|
<b>Text</b>
|
data/lib/promethee.rb
CHANGED
|
@@ -16,13 +16,13 @@ module ActionView
|
|
|
16
16
|
def render
|
|
17
17
|
localization_data = object.send @method_name unless object.nil?
|
|
18
18
|
localization_data = @options[:value] if @options.include? :value
|
|
19
|
-
master_data = @options[:master]
|
|
20
19
|
ApplicationController.renderer.render partial: 'promethee/localize',
|
|
21
20
|
locals: {
|
|
22
21
|
object_name: @object_name,
|
|
23
22
|
method_name: @method_name,
|
|
24
23
|
localization_data: localization_data,
|
|
25
|
-
master_data:
|
|
24
|
+
master_data: @options[:master],
|
|
25
|
+
other_data: @options[:other]
|
|
26
26
|
}
|
|
27
27
|
end
|
|
28
28
|
end
|
data/lib/promethee/data.rb
CHANGED
|
@@ -1,104 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
@master_data = hashify data
|
|
6
|
-
@localization_data_raw = hashify(options[:localization_data]) if options.include? :localization_data
|
|
7
|
-
check_master_integrity
|
|
8
|
-
prepare_localization_data
|
|
9
|
-
localize_master_data
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def localization_data_to_json
|
|
13
|
-
@localization_data.to_json
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def to_json
|
|
17
|
-
@master_data.to_json
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# The data acts as a hash
|
|
21
|
-
def [](value)
|
|
22
|
-
@master_data[value]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
protected
|
|
26
|
-
|
|
27
|
-
def hashify(data)
|
|
28
|
-
# https://github.com/bbatsov/ruby-style-guide#indent-conditional-assignment
|
|
29
|
-
h = case data.class.to_s
|
|
30
|
-
when 'Hash', 'ActiveSupport::HashWithIndifferentAccess' then data
|
|
31
|
-
when 'String' then JSON.parse data
|
|
32
|
-
else {}
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
h.deep_symbolize_keys
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def check_master_integrity
|
|
39
|
-
@master_data[:version] = 1 unless @master_data.include? :version
|
|
40
|
-
@master_data[:children] = [] unless @master_data.include? :children
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# We merge the localization data in the components from the master data.
|
|
44
|
-
# This will :
|
|
45
|
-
# 1 get what's already localized, based on the component id
|
|
46
|
-
# 2 add new components
|
|
47
|
-
# 3 remove components not in the master anymore
|
|
48
|
-
# 4 take the order from the master
|
|
49
|
-
def prepare_localization_data
|
|
50
|
-
@localization_data = {
|
|
51
|
-
version: @master_data[:version],
|
|
52
|
-
components: []
|
|
53
|
-
}
|
|
54
|
-
# We create a flat list of the children and all their child, in the master's order
|
|
55
|
-
master_components_flat = Promethee::Data.flatten_components @master_data.deep_dup
|
|
56
|
-
master_components_flat.each do |component|
|
|
57
|
-
localized_component = Promethee::Data.find_localized_component component[:id], @localization_data_raw
|
|
58
|
-
# We take either the localized, or the master component
|
|
59
|
-
data = localized_component || component
|
|
60
|
-
# We add master reference
|
|
61
|
-
data[:master] = component.deep_dup
|
|
62
|
-
# We add it to the list of localized components
|
|
63
|
-
@localization_data[:components] << data
|
|
64
|
-
end
|
|
65
|
-
end
|
|
1
|
+
class Promethee::Data
|
|
2
|
+
def initialize(data)
|
|
3
|
+
@data = hashify data
|
|
4
|
+
end
|
|
66
5
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
end
|
|
6
|
+
def data
|
|
7
|
+
@data
|
|
8
|
+
end
|
|
71
9
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
end
|
|
10
|
+
# The class creates a facade in front of the real hash, therefore include?, [] and to_json are delegated
|
|
11
|
+
def include?(value)
|
|
12
|
+
@data.include? value
|
|
13
|
+
end
|
|
77
14
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
end
|
|
15
|
+
def [](value)
|
|
16
|
+
@data[value]
|
|
17
|
+
end
|
|
82
18
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return if localized_component.nil?
|
|
87
|
-
return unless localized_component.include? :attributes
|
|
88
|
-
component[:attributes].merge! localized_component[:attributes]
|
|
89
|
-
end
|
|
19
|
+
def to_json
|
|
20
|
+
@data.to_json
|
|
21
|
+
end
|
|
90
22
|
|
|
91
|
-
|
|
92
|
-
return unless component.include? :children
|
|
93
|
-
component[:children].each { |child| localize_component child, localization_data }
|
|
94
|
-
end
|
|
23
|
+
protected
|
|
95
24
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
25
|
+
def hashify(data)
|
|
26
|
+
# https://github.com/bbatsov/ruby-style-guide#indent-conditional-assignment
|
|
27
|
+
h = case data.class.to_s
|
|
28
|
+
when 'Hash', 'ActiveSupport::HashWithIndifferentAccess' then data
|
|
29
|
+
when 'String' then JSON.parse data
|
|
30
|
+
else {}
|
|
31
|
+
end
|
|
32
|
+
h.deep_symbolize_keys
|
|
103
33
|
end
|
|
104
34
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
class Promethee::Data::Localization < Promethee::Data
|
|
2
|
+
def initialize(data, master_data = nil)
|
|
3
|
+
super data
|
|
4
|
+
if master_data
|
|
5
|
+
@master_data = Master.new master_data
|
|
6
|
+
merge
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
protected
|
|
11
|
+
|
|
12
|
+
# We want to be up to date with the master, so this method will:
|
|
13
|
+
# 1.take the master's components flattened
|
|
14
|
+
# 2 substitute what's already localized, based on the component id
|
|
15
|
+
# Consequences of step 1 are:
|
|
16
|
+
# 1 it adds new components from the master
|
|
17
|
+
# 2 it removes components not in the master anymore
|
|
18
|
+
# 3 it takes the order from the master
|
|
19
|
+
def merge
|
|
20
|
+
@data_before_merge = @data.deep_dup
|
|
21
|
+
@data = {
|
|
22
|
+
version: @master_data[:version],
|
|
23
|
+
components: []
|
|
24
|
+
}
|
|
25
|
+
@master_data.flat.each do |master_component|
|
|
26
|
+
localized_component = find_localized_component master_component[:id]
|
|
27
|
+
# We take the localized component if it exists, the master component otherwise
|
|
28
|
+
component = localized_component || master_component
|
|
29
|
+
# We add it to the list of localized components
|
|
30
|
+
@data[:components] << component
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def find_localized_component(id)
|
|
35
|
+
return unless @data_before_merge
|
|
36
|
+
return unless @data_before_merge.include? :components
|
|
37
|
+
@data_before_merge[:components].find { |component| component[:id] == id }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class Promethee::Data::Master < Promethee::Data
|
|
2
|
+
def initialize(data)
|
|
3
|
+
super data
|
|
4
|
+
fix_master_integrity
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def flat
|
|
8
|
+
flatten_components @data
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def fix_master_integrity
|
|
14
|
+
@data[:version] = 1 unless @data.include? :version
|
|
15
|
+
@data[:children] = [] unless @data.include? :children
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Takes an array of components and puts every component and their children into a unique flat array
|
|
19
|
+
def flatten_components(component)
|
|
20
|
+
flat_components = [component.except(:children)]
|
|
21
|
+
(component[:children] || []).reduce flat_components do |flat_components, component|
|
|
22
|
+
flat_components + flatten_components(component)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Injects localization data into master data, so the page can be showed in the correct localization
|
|
2
|
+
class Promethee::Data::MasterLocalized < Promethee::Data
|
|
3
|
+
def initialize(master, localization = nil)
|
|
4
|
+
@data = hashify master
|
|
5
|
+
if localization
|
|
6
|
+
@localization = Localization.new localization
|
|
7
|
+
localize_component @data
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def localize_component(component)
|
|
14
|
+
localize_component_attributes component
|
|
15
|
+
localize_component_children component
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def localize_component_attributes(component)
|
|
19
|
+
return unless component.include? :attributes
|
|
20
|
+
localized_component = find_localized_component component[:id]
|
|
21
|
+
return unless localized_component
|
|
22
|
+
return unless localized_component.include? :attributes
|
|
23
|
+
component[:attributes].merge! localized_component[:attributes]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def localize_component_children(component)
|
|
27
|
+
return unless component.include? :children
|
|
28
|
+
component[:children].each { |child| localize_component child }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def find_localized_component(id)
|
|
32
|
+
return if @localization.nil?
|
|
33
|
+
return unless @localization.include? :components
|
|
34
|
+
@localization[:components].find { |component| component[:id] == id }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# List of master version and other localizations, flattened
|
|
2
|
+
class Promethee::Data::MastersMultiple < Promethee::Data
|
|
3
|
+
def initialize(master, localizations = nil)
|
|
4
|
+
@data = []
|
|
5
|
+
@master = Master.new master
|
|
6
|
+
title = 'Master'
|
|
7
|
+
components = @master.flat
|
|
8
|
+
add_data title, components
|
|
9
|
+
localizations.each do |key, value|
|
|
10
|
+
title = key
|
|
11
|
+
components = Localization.new(value, master).data[:components]
|
|
12
|
+
add_data title, components
|
|
13
|
+
end unless localizations.nil?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
protected
|
|
17
|
+
|
|
18
|
+
def add_data(title, components)
|
|
19
|
+
@data << { title: title, components: components }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
max-height: 100%; }
|
|
56
56
|
|
|
57
57
|
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
|
|
58
|
-
background-image: url(
|
|
58
|
+
background-image: url("../img/fancybox_sprite.png"); }
|
|
59
59
|
|
|
60
60
|
#fancybox-loading {
|
|
61
61
|
position: fixed;
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
#fancybox-loading div {
|
|
72
72
|
width: 44px;
|
|
73
73
|
height: 44px;
|
|
74
|
-
background: url(
|
|
74
|
+
background: url("../img/fancybox_loading.gif") center center no-repeat; }
|
|
75
75
|
|
|
76
76
|
.fancybox-close {
|
|
77
77
|
position: absolute;
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
height: 100%;
|
|
90
90
|
cursor: pointer;
|
|
91
91
|
text-decoration: none;
|
|
92
|
-
background: transparent url(
|
|
92
|
+
background: transparent url("../img/blank.gif");
|
|
93
93
|
/* helps IE */
|
|
94
94
|
-webkit-tap-highlight-color: transparent;
|
|
95
95
|
z-index: 8040; }
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
overflow: hidden;
|
|
148
148
|
display: none;
|
|
149
149
|
z-index: 8010;
|
|
150
|
-
background: url(
|
|
150
|
+
background: url("../img/fancybox_overlay.png"); }
|
|
151
151
|
|
|
152
152
|
.fancybox-overlay-fixed {
|
|
153
153
|
position: fixed;
|
|
@@ -213,10 +213,10 @@
|
|
|
213
213
|
/*Retina graphics!*/
|
|
214
214
|
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) {
|
|
215
215
|
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
|
|
216
|
-
background-image: url(
|
|
216
|
+
background-image: url("../img/fancybox_sprite@2x.png");
|
|
217
217
|
background-size: 44px 152px;
|
|
218
218
|
/*The size of the normal image, half the size of the hi-res image*/ }
|
|
219
219
|
#fancybox-loading div {
|
|
220
|
-
background-image: url('data:image/gif;base64,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');
|
|
220
|
+
background-image: url("../img/fancybox_loading@2x.gif");
|
|
221
221
|
background-size: 24px 24px;
|
|
222
222
|
/*The size of the normal image, half the size of the hi-res image*/ } }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,61 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"_integrity": "sha512-HZ57O6j5Zk4Uvusd5pNUgWi7CCjKx+HFlCzjMPeRJ//0bQWUK+xVpkn3EzXWJate4ZSKNFP9kU2l49MP1g+oow==",
|
|
6
|
-
"_location": "/fancybox",
|
|
7
|
-
"_phantomChildren": {},
|
|
8
|
-
"_requested": {
|
|
9
|
-
"type": "tag",
|
|
10
|
-
"registry": true,
|
|
11
|
-
"raw": "fancybox",
|
|
12
|
-
"name": "fancybox",
|
|
13
|
-
"escapedName": "fancybox",
|
|
14
|
-
"rawSpec": "",
|
|
15
|
-
"saveSpec": null,
|
|
16
|
-
"fetchSpec": "latest"
|
|
17
|
-
},
|
|
18
|
-
"_requiredBy": [
|
|
19
|
-
"#USER",
|
|
20
|
-
"/"
|
|
21
|
-
],
|
|
22
|
-
"_resolved": "https://registry.npmjs.org/fancybox/-/fancybox-3.0.1.tgz",
|
|
23
|
-
"_shasum": "13f6927449157ed026c69e78c2ba5bf0f1da9af7",
|
|
24
|
-
"_spec": "fancybox",
|
|
25
|
-
"_where": "/mnt/SharedPart/WebApps/RailsProjects/promethee",
|
|
26
|
-
"author": {
|
|
27
|
-
"name": "fancyapps",
|
|
28
|
-
"url": "https://github.com/fancyapps"
|
|
29
|
-
},
|
|
30
|
-
"bugs": {
|
|
31
|
-
"url": "https://github.com/olsonpm/fancybox/issues"
|
|
32
|
-
},
|
|
33
|
-
"bundleDependencies": false,
|
|
34
|
-
"deprecated": false,
|
|
2
|
+
"name": "fancybox",
|
|
3
|
+
"original-version": "2.1.5",
|
|
4
|
+
"version": "3.0.1",
|
|
35
5
|
"description": "fancyBox is a tool that offers a nice and elegant way to add zooming functionality for images, html content and multi-media on your webpages. It is built on the top of the popular JavaScript framework jQuery and is both easy to implement and a snap to customize.",
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
6
|
+
"main": "dist/js/jquery.fancybox.cjs.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"test": "./node_modules/phantomjs/lib/phantom/bin/phantomjs ./test.js"
|
|
9
|
+
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/olsonpm/fancybox.git"
|
|
41
13
|
},
|
|
42
|
-
"homepage": "https://github.com/olsonpm/fancybox",
|
|
43
14
|
"keywords": [
|
|
44
15
|
"fancybox",
|
|
45
16
|
"fancy",
|
|
46
17
|
"box",
|
|
47
18
|
"lightbox"
|
|
48
19
|
],
|
|
20
|
+
"author": "fancyapps (https://github.com/fancyapps)",
|
|
49
21
|
"license": "CC BY-NC 3.0 (http://creativecommons.org/licenses/by-nc/3.0/)",
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
"original-version": "2.1.5",
|
|
53
|
-
"repository": {
|
|
54
|
-
"type": "git",
|
|
55
|
-
"url": "git+https://github.com/olsonpm/fancybox.git"
|
|
56
|
-
},
|
|
57
|
-
"scripts": {
|
|
58
|
-
"test": "./node_modules/phantomjs/lib/phantom/bin/phantomjs ./test.js"
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/olsonpm/fancybox/issues"
|
|
59
24
|
},
|
|
60
|
-
"
|
|
25
|
+
"homepage": "https://github.com/olsonpm/fancybox",
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"chai": "^1.10.0",
|
|
28
|
+
"jquery": "^2.1.3",
|
|
29
|
+
"node-sass": "^2.0.0-beta",
|
|
30
|
+
"phantomjs": "^1.9.13"
|
|
31
|
+
}
|
|
61
32
|
}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: promethee
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sébastien Gaya
|
|
@@ -14,7 +14,7 @@ authors:
|
|
|
14
14
|
autorequire:
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
|
-
date: 2018-07-
|
|
17
|
+
date: 2018-07-31 00:00:00.000000000 Z
|
|
18
18
|
dependencies:
|
|
19
19
|
- !ruby/object:Gem::Dependency
|
|
20
20
|
name: rails
|
|
@@ -305,6 +305,10 @@ files:
|
|
|
305
305
|
- lib/promethee/core_ext/mapper.rb
|
|
306
306
|
- lib/promethee/core_ext/tags.rb
|
|
307
307
|
- lib/promethee/data.rb
|
|
308
|
+
- lib/promethee/data/localization.rb
|
|
309
|
+
- lib/promethee/data/master.rb
|
|
310
|
+
- lib/promethee/data/master_localized.rb
|
|
311
|
+
- lib/promethee/data/masters_multiple.rb
|
|
308
312
|
- lib/promethee/rails/engine.rb
|
|
309
313
|
- lib/promethee/rails/helper.rb
|
|
310
314
|
- lib/promethee/rails/version.rb
|