app/views/promethee/_localize.html.erb
<%
@disable_page_attributes = false
@disable_page_attributes ||= disable_page_attributes
promethee_data = Promethee::Data::Localization.new localization_data, master_data
promethee_masters_multiple = Promethee::Data::MastersMultiple.new master_data, other_data
%>
<script type="text/javascript">
var promethee = angular
.module('PrometheeLocalizer', ['summernote'])
.filter('htmlSafe', ['$sce', function($sce) {
return function(val) {
return $sce.trustAsHtml(val);
};
}])
.service('mastersMultiple', function() {
var all = [];
var current;
return {
set: function(masters) {
this.all = masters;
this.current = this.all[0];
},
choose: function(master) {
this.current = master;
},
masterForComponent: function(component) {
var componentFound;
this.current.components.forEach(function(masterComponent) {
if (masterComponent.id === component.id) {
componentFound = masterComponent;
}
});
return componentFound;
},
multiple: function() {
return this.all.length > 1;
},
all: all,
current: current
};
});
</script>
<% promethee_util_partials.each do |partial| %>
<%= render partial %>
<% end %>
<script type="text/javascript">
promethee.controller('PrometheeLocalizerController',
['$scope', 'summernoteConfig', 'mastersMultiple', function($scope, summernoteConfig, mastersMultiple) {
$scope.summernoteConfig = summernoteConfig;
$scope.data = <%= promethee_data.to_json.html_safe %>;
$scope.masters = mastersMultiple;
$scope.masters.set(<%= promethee_masters_multiple.to_json.html_safe %>);
$scope.$watch('data', function(new_val, old_val) {
if (old_val != new_val) {
window.warnBeforeUnload.lock();
}
}, true);
$scope.freezeData = function (data) {
return JSON.parse(JSON.stringify(data));
};
$scope.copyTranslations = function(event) {
event.preventDefault();
if (confirm('Warning: this will overwrite every translations!')) {
// TODO: ne prendre que les objets utiles/clés utiles
for (i = 0; i < $scope.masters.current.components.length; i += 1) {
var master_component = $scope.masters.current.components[i];
var master_component_attributes = master_component['attributes'];
var attributes = {};
// console.log(master_component_attributes);
for (const attribute_key in master_component_attributes) {
var attribute = master_component_attributes[attribute_key];
if (attribute['translatable']) {
attributes[attribute_key] = attribute;
}
}
// console.log(attributes);
var target_component = $scope.data.components.filter(function (component) {
return component['id'] === master_component['id'];
})[0];
if (!target_component) {
console.log('not found');
continue;
}
target_component['attributes'] = JSON.parse(JSON.stringify(attributes));
}
console.log($scope.data.components);
}
}
}]);
</script>
<div id="prometheeLocalizer"
class="promethee-localizer ng-cloak"
ng-app="PrometheeLocalizer"
ng-controller="PrometheeLocalizerController as prometheeLocalizerController">
<script type="text/ng-template" id="promethee/localize/component">
<span class="hidden d-none" ng-init="frozen_component = freezeData(component)">
{{ master = masters.masterForComponent(component) }}
</span>
<ng-include src="'promethee/components/' + component.type + '/localize'"></ng-include>
</script>
<input type="hidden" name="<%= object_name %>[<%= method_name %>]" id="page_data" value="{{data}}" />
<% promethee_localize_partials.each do |partial| %>
<%= render partial %>
<% end %>
<div class="row">
<div class="col-md-6">
<b ng-hide="masters.multiple()">{{masters.all[0].title}}</b>
<select ng-show="masters.multiple()" ng-model="masters.current" class="float-left pull-left form-control do-not-warn-before-unload reference-choice">
<option ng-repeat="master in masters.all" ng-value="master">{{master.title}}</option>
</select>
<button class="btn btn-sm ml-1 btn-outline-success translation-copy" ng-click="copyTranslations($event)">Copy texts >></button>
</div>
<div class="col-md-6"><h3>Translation</h3></div>
</div>
<div ng-repeat="component in data.components">
<ng-include src="'promethee/localize/component'"></ng-include>
</div>
</div>