Merge pull request #3809 from consul/pluralize_js
Simplify JavaScript to pluralize translations
This commit is contained in:
@@ -80,6 +80,7 @@
|
||||
//= require investment_report_alert
|
||||
//= require send_newsletter_alert
|
||||
//= require managers
|
||||
//= require i18n
|
||||
//= require globalize
|
||||
//= require send_admin_notification_alert
|
||||
//= require modal_download
|
||||
|
||||
@@ -1,33 +1,25 @@
|
||||
(function() {
|
||||
"use strict";
|
||||
App.BudgetEditAssociations = {
|
||||
set_text: function(response) {
|
||||
$(".js-budget-show-administrators-list").text(response.administrators);
|
||||
$(".js-budget-show-valuators-list").text(response.valuators);
|
||||
$(".js-budget-show-trackers-list").text(response.trackers);
|
||||
},
|
||||
initialize: function() {
|
||||
$(".js-budget-list-checkbox-user").on({
|
||||
click: function() {
|
||||
var admin_count, budget, params, tracker_count, url, valuator_count;
|
||||
var admin_count, tracker_count, valuator_count;
|
||||
|
||||
admin_count = $(".js-budget-list-checkbox-administrators:checkbox:checked").length;
|
||||
valuator_count = $(".js-budget-list-checkbox-valuators:checkbox:checked").length;
|
||||
tracker_count = $(".js-budget-list-checkbox-trackers:checkbox:checked").length;
|
||||
budget = $(".js-budget-id").attr("id");
|
||||
url = "/admin/budgets/" + budget + "/assigned_users_translation.json";
|
||||
params = {
|
||||
administrators: admin_count,
|
||||
valuators: valuator_count,
|
||||
trackers: tracker_count
|
||||
};
|
||||
$.get(url, params, function(response) {
|
||||
App.BudgetEditAssociations.set_text(response, "json");
|
||||
});
|
||||
|
||||
App.I18n.set_pluralize($(".js-budget-show-administrators-list"), admin_count);
|
||||
App.I18n.set_pluralize($(".js-budget-show-valuators-list"), valuator_count);
|
||||
App.I18n.set_pluralize($(".js-budget-show-trackers-list"), tracker_count);
|
||||
}
|
||||
});
|
||||
$(".js-budget-show-users-list").on({
|
||||
click: function() {
|
||||
click: function(e) {
|
||||
var div_id;
|
||||
|
||||
e.preventDefault();
|
||||
div_id = $(this).data().toggle;
|
||||
$(".js-budget-users-list").each(function() {
|
||||
if (this.id !== div_id && !$(this).hasClass("is-hidden")) {
|
||||
|
||||
@@ -75,22 +75,9 @@
|
||||
App.Globalize.display_translations(locale);
|
||||
},
|
||||
update_description: function() {
|
||||
var count, description;
|
||||
var count;
|
||||
count = App.Globalize.enabled_locales().length;
|
||||
description = $(App.Globalize.language_description(count)).filter(".description").text();
|
||||
|
||||
$(".js-languages-description .description").text(description);
|
||||
$(".js-languages-description .count").text(count);
|
||||
},
|
||||
language_description: function(count) {
|
||||
switch (count) {
|
||||
case 0:
|
||||
return $(".globalize-languages").data("zero-languages-description");
|
||||
case 1:
|
||||
return $(".globalize-languages").data("one-languages-description");
|
||||
default:
|
||||
return $(".globalize-languages").data("other-languages-description");
|
||||
}
|
||||
App.I18n.set_pluralize($(".js-languages-description"), count);
|
||||
},
|
||||
initialize: function() {
|
||||
$(".js-add-language").on("change", function() {
|
||||
|
||||
21
app/assets/javascripts/i18n.js
Normal file
21
app/assets/javascripts/i18n.js
Normal file
@@ -0,0 +1,21 @@
|
||||
(function() {
|
||||
"use strict";
|
||||
App.I18n = {
|
||||
set_pluralize: function(element, count) {
|
||||
element.text(this.pluralize(element.data("texts"), count));
|
||||
},
|
||||
pluralize: function(texts, count) {
|
||||
return this.raw_text(texts, count).replace("%{count}", count);
|
||||
},
|
||||
raw_text: function(texts, count) {
|
||||
switch (count) {
|
||||
case 0:
|
||||
return texts.zero;
|
||||
case 1:
|
||||
return texts.one;
|
||||
default:
|
||||
return texts.other;
|
||||
}
|
||||
}
|
||||
};
|
||||
}).call(this);
|
||||
@@ -72,13 +72,6 @@ class Admin::BudgetsController < Admin::BaseController
|
||||
end
|
||||
end
|
||||
|
||||
def assigned_users_translation
|
||||
render json: { administrators: t("admin.budgets.edit.administrators", count: params[:administrators].to_i),
|
||||
valuators: t("admin.budgets.edit.valuators", count: params[:valuators].to_i),
|
||||
trackers: t("admin.budgets.edit.trackers", count: params[:trackers].to_i)
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def budget_params
|
||||
|
||||
@@ -59,7 +59,7 @@ module Abilities
|
||||
|
||||
can :manage, Dashboard::Action
|
||||
|
||||
can [:index, :read, :new, :create, :update, :destroy, :calculate_winners, :assigned_users_translation], Budget
|
||||
can [:index, :read, :new, :create, :update, :destroy, :calculate_winners], Budget
|
||||
can [:read, :create, :update, :destroy], Budget::Group
|
||||
can [:read, :create, :update, :destroy], Budget::Heading
|
||||
can [:hide, :admin_update, :toggle_selection], Budget::Investment
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
<%= translatable_form_for [:admin, @budget] do |f| %>
|
||||
|
||||
<div class="js-budget-id" id="<%= @budget.id %>"></div>
|
||||
|
||||
<%= render "shared/errors", resource: @budget %>
|
||||
|
||||
<div class="row">
|
||||
@@ -24,18 +22,14 @@
|
||||
</div>
|
||||
|
||||
<div class="margin-top">
|
||||
<div class="small-12 medium-4 column end">
|
||||
<a id="administrators_button" class="button expanded hollow js-budget-show-users-list js-budget-show-administrators-list" data-toggle="administrators_list"><%= t("admin.budgets.edit.administrators", count: @budget.administrators.count) %>
|
||||
</a>
|
||||
</div>
|
||||
<div class="small-12 medium-4 column end">
|
||||
<a id="valuators_button" class="button expanded hollow js-budget-show-users-list js-budget-show-valuators-list" data-toggle="valuators_list"><%= t("admin.budgets.edit.valuators", count: @budget.valuators.count) %>
|
||||
</a>
|
||||
</div>
|
||||
<div class="small-12 medium-4 column end">
|
||||
<a id="trackers_button" class="button expanded hollow js-budget-show-users-list js-budget-show-trackers-list" data-toggle="trackers_list"><%= t("admin.budgets.edit.trackers", count: @budget.trackers.count) %>
|
||||
</a>
|
||||
</div>
|
||||
<% %w[administrators valuators trackers].each do |staff| %>
|
||||
<div class="small-12 medium-4 column end">
|
||||
<%= link_to t("admin.budgets.edit.#{staff}", count: @budget.send(staff).count),
|
||||
"#",
|
||||
class: "button expanded hollow js-budget-show-#{staff}-list js-budget-show-users-list",
|
||||
data: { toggle: "#{staff}_list", texts: t("admin.budgets.edit.#{staff}") } %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="margin-top">
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<div class="row globalize-languages column padding-top <%= highlight_translation_html_class %>"
|
||||
data-zero-languages-description="<%= t("shared.translations.languages_in_use", count: 0) %>"
|
||||
data-one-languages-description="<%= t("shared.translations.languages_in_use", count: 1) %>"
|
||||
data-other-languages-description="<%= t("shared.translations.languages_in_use", count: 2) %>">
|
||||
<div class="row globalize-languages column padding-top <%= highlight_translation_html_class %>">
|
||||
<div class="small-6 large-3 column">
|
||||
<span class="small">
|
||||
<strong class="js-languages-description"><%= selected_languages_description(resource) %></strong>
|
||||
<strong class="js-languages-description"
|
||||
data-texts="<%= t("shared.translations.languages_in_use").to_json %>">
|
||||
<%= selected_languages_description(resource) %>
|
||||
</strong>
|
||||
</span>
|
||||
<%= select_tag :select_language,
|
||||
options_for_select_language(resource),
|
||||
|
||||
@@ -141,6 +141,7 @@ ignore_unused:
|
||||
- "admin.hidden_proposals.index.filter*"
|
||||
- "admin.proposal_notifications.index.filter*"
|
||||
- "admin.budgets.index.filter*"
|
||||
- "admin.budgets.edit.(administrators|trackers|valuators).*"
|
||||
- "admin.budget_investments.index.filter*"
|
||||
- "admin.organizations.index.filter*"
|
||||
- "admin.hidden_users.index.filter*"
|
||||
|
||||
@@ -788,9 +788,9 @@ en:
|
||||
remove_language: Remove language
|
||||
add_language: Add language
|
||||
languages_in_use:
|
||||
zero: "<span class='count'>0</span> <span class='description'>languages in use</span>"
|
||||
one: "<span class='count'>1</span> <span class='description'>language in use</span>"
|
||||
other: "<span class='count'>%{count}</span> <span class='description'>languages in use</span>"
|
||||
zero: "0 languages in use"
|
||||
one: "1 language in use"
|
||||
other: "%{count} languages in use"
|
||||
social:
|
||||
facebook: "%{org} Facebook"
|
||||
twitter: "%{org} Twitter"
|
||||
|
||||
@@ -786,9 +786,9 @@ es:
|
||||
remove_language: Eliminar idioma
|
||||
add_language: Añadir idioma
|
||||
languages_in_use:
|
||||
zero: "<span class='count'>0</span> <span class='description'>idiomas en uso</span>"
|
||||
one: "<span class='count'>1</span> <span class='description'> idioma en uso</span>"
|
||||
other: "<span class='count'>%{count}</span> <span class='description'>idiomas en uso</span>"
|
||||
zero: "0 idiomas en uso"
|
||||
one: "1 idioma en uso"
|
||||
other: "%{count} idiomas en uso"
|
||||
social:
|
||||
facebook: "Facebook de %{org}"
|
||||
twitter: "Twitter de %{org}"
|
||||
|
||||
@@ -54,7 +54,6 @@ namespace :admin do
|
||||
resources :budgets do
|
||||
member do
|
||||
put :calculate_winners
|
||||
get :assigned_users_translation
|
||||
end
|
||||
|
||||
resources :groups, except: [:show], controller: "budget_groups" do
|
||||
|
||||
Reference in New Issue
Block a user