promethee 1.6.63 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|