lespoupeesrusses/promethee

View on GitHub
app/views/promethee/_localize.html.erb

Summary

Maintainability
Test Coverage
<%
@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 &gt;&gt;</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>