Permalink
Browse files

Consistency view: add filters for components (fixes issue #697)

Also add Project::isDesktopRepository method
  • Loading branch information...
flodolo committed Mar 16, 2016
1 parent b8a98db commit b521cef641029dbe9281cd264ab200c909ea1d0b
@@ -52,7 +52,7 @@ public static function findDuplicates($strings_array)
*/
public static function filterStrings($strings_array, $repo)
{
- if (in_array($repo, Project::getDesktopRepositories())) {
+ if (Project::isDesktopRepository($repo)) {
$repository_type = 'desktop';
} elseif (in_array($repo, Project::getGaiaRepositories())) {
$repository_type = 'gaia';
@@ -114,4 +114,25 @@ public static function filterStrings($strings_array, $repo)
return $strings_array;
}
+
+ /**
+ * Filter out strings that belong to a group of components
+ *
+ * @param array $strings_array Array of strings in the form
+ * string_id => string_value
+ * @param array $components Array of component names
+ *
+ * @return array Array of filtered strings, with strings belonging
+ * to requested components removed
+ */
+ public static function filterComponents($strings_array, $components)
+ {
+ foreach ($strings_array as $key => $value) {
+ if (in_array(explode('/', $key)[0], $components)) {
+ unset($strings_array[$key]);
+ }
+ }
+
+ return $strings_array;
+ }
}
@@ -134,7 +134,7 @@ public static function getGaiaRepositories()
}
/**
- * Get the list of repositories for Desktop Applications
+ * Get the list of repositories for desktop applications
*
* @return array list of local repositories folder names
*/
@@ -147,6 +147,17 @@ public static function getDesktopRepositories()
);
}
+ /**
+ * Check if the repository belongs to a desktop application
+ *
+ * @param string $repository ID of the repository
+ * @return boolean True if repository is used for a desktop application
+ */
+ public static function isDesktopRepository($repo)
+ {
+ return in_array($repo, self::getDesktopRepositories());
+ }
+
/**
* Get the list of locales available for a repository
*
@@ -46,7 +46,7 @@ public static function getVCS($repo)
public static function VCSRepoName($repo)
{
// Desktop
- if (in_array($repo, Project::getDesktopRepositories())) {
+ if (Project::isDesktopRepository($repo)) {
$repo = strtoupper($repo == 'central' ? 'trunk' : $repo) . '_L10N';
}
View
@@ -13,6 +13,29 @@
$locale
);
+$available_filters = [
+ 'all' => 'All products',
+ 'firefox' => 'Firefox for desktop and Android',
+ 'seamonkey' => 'SeaMonkey',
+ 'thunderbird' => 'Thunderbird',
+];
+
+if (isset($_GET['filter'])) {
+ $selected_filter = isset($available_filters[$_GET['filter']])
+ ? Utils::secureText($_GET['filter'])
+ : 'all';
+} else {
+ $selected_filter = 'all';
+}
+$filter_visibility = Project::isDesktopRepository($repo)
+ ? ''
+ : 'style="display: none;"';
+$filter_selector = Utils::getHtmlSelectOptions(
+ $available_filters,
+ $selected_filter,
+ true
+);
+
$reference_locale = Project::getReferenceLocale($repo);
// Set a default for the number of strings to display
@@ -25,6 +48,36 @@
if (! empty($source_strings)) {
// Remove known problematic strings
$duplicated_strings_english = Consistency::filterStrings($source_strings, $repo);
+
+ // Filter out components
+ switch ($selected_filter) {
+ case 'firefox':
+ $excluded_components = [
+ 'calendar', 'chat', 'editor', 'extensions', 'mail', 'suite',
+ ];
+ break;
+ case 'seamonkey':
+ $excluded_components = [
+ 'browser', 'calendar', 'chat', 'extensions', 'mail', 'mobile',
+ ];
+ break;
+ case 'thunderbird':
+ $excluded_components = [
+ 'browser', 'extensions', 'mobile', 'suite',
+ ];
+ break;
+ default:
+ $excluded_components = [];
+ break;
+ }
+ $filter_message = empty($excluded_components)
+ ? ''
+ : 'Currently excluding the following folders: ' . implode(', ', $excluded_components) . '.';
+ $duplicated_strings_english = Consistency::filterComponents(
+ $duplicated_strings_english,
+ $excluded_components
+ );
+
// Find strings that are identical in English
$duplicated_strings_english = Consistency::findDuplicates($duplicated_strings_english);
}
@@ -75,7 +75,7 @@
$strings[$ref_locale][$repo] = $cache_filtered_strings($ref_locale, $ref_locale . $repo . 'filteredstrings');
// If Desktop, parse the strings to get components
- if (in_array($repo, Project::getDesktopRepositories())) {
+ if (Project::isDesktopRepository($repo)) {
foreach (Project::getComponents($strings[$locale][$repo]) as $component) {
$filter_pattern = function ($locale_code) use ($component, $repo, $strings) {
return array_filter(
View
@@ -23,10 +23,17 @@
</fieldset>
<?php endif; ?>
+ <fieldset class="desktop_repo_only" <?=$filter_visibility?>>
+ <label>Filter consistency for</label>
+ <select name="filter" title="Filters" id="simplesearch_filter">
+ <?=$filter_selector?>
+ </select>
+ </fieldset>
+
<input type="submit" value="Go" alt="Go" />
+ <p class="desktop_repo_only" id="filter_message"><?=$filter_message?></p>
</fieldset>
</form>
-
<?php
if ($strings_number == 0) {
echo '<div class="message"><p>No inconsistent translations found.</p></div>';
@@ -45,7 +52,8 @@
$search_link = "/?sourcelocale={$reference_locale}"
. "&locale={$locale}"
. "&repo={$repo}"
- . '&search_type=strings&recherche=' . urlencode($data['source']);
+ . '&search_type=strings&recherche=' . urlencode($data['source'])
+ . '&perfect_match=perfect_match';
echo "<tr>\n";
echo '<td>';
echo '<a href="' . $search_link . '" title="Search for this string">' . Utils::secureText($data['source']) . "</a></td>\n";
@@ -110,4 +110,59 @@ public function testFilterStrings($a, $b, $c)
->array($obj->filterStrings($a, $b))
->isEqualTo($c);
}
+
+ public function filterComponents_DP()
+ {
+ return [
+ [
+ [
+ 'browser/chrome/browser/preferences/applicationManager.dtd:appManager.style' => 'width: 30em; min-height: 20em;',
+ 'extensions/irc/chrome/ceip.dtd:window.size' => 'width: 42em;',
+ 'mail/chrome/messenger/importDialog.dtd:window.macWidth' => '45em',
+ 'browser/defines.inc:MOZ_LANGPACK_CREATOR' => 'L\'équipe FrenchMozilla',
+ 'dom/chrome/accessibility/win/accessible.properties:press' => 'Appuyer',
+ 'shared/date/date.properties:days-until-long[many]' => 'dans {{value}} jours',
+ 'dom/chrome/accessibility/AccessFu.properties:notation-phasorangle' => 'angle de phaseur',
+ 'apps/system/accessibility.properties:accessibility-listItemsCount[two]' => '{{count}} éléments',
+ ],
+ ['browser', 'dom'],
+ [
+ 'extensions/irc/chrome/ceip.dtd:window.size' => 'width: 42em;',
+ 'mail/chrome/messenger/importDialog.dtd:window.macWidth' => '45em',
+ 'shared/date/date.properties:days-until-long[many]' => 'dans {{value}} jours',
+ 'apps/system/accessibility.properties:accessibility-listItemsCount[two]' => '{{count}} éléments',
+ ],
+ ],
+ [
+ [
+ 'browser/pdfviewer/viewer.properties:last_page.label' => 'Aller à la dernière page',
+ 'extensions/irc/chrome/ceip.dtd:window.size' => 'width: 42em;',
+ 'mail/chrome/messenger/importDialog.dtd:window.macWidth' => '45em',
+ 'dom/chrome/accessibility/win/accessible.properties:press' => 'Appuyer',
+ 'shared/date/date.properties:days-until-long[many]' => 'dans {{value}} jours',
+ 'apps/system/accessibility.properties:accessibility-listItemsCount[two]' => '{{count}} éléments',
+ ],
+ [],
+ [
+ 'browser/pdfviewer/viewer.properties:last_page.label' => 'Aller à la dernière page',
+ 'extensions/irc/chrome/ceip.dtd:window.size' => 'width: 42em;',
+ 'mail/chrome/messenger/importDialog.dtd:window.macWidth' => '45em',
+ 'dom/chrome/accessibility/win/accessible.properties:press' => 'Appuyer',
+ 'shared/date/date.properties:days-until-long[many]' => 'dans {{value}} jours',
+ 'apps/system/accessibility.properties:accessibility-listItemsCount[two]' => '{{count}} éléments',
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider filterComponents_DP
+ */
+ public function testFilterComponents($a, $b, $c)
+ {
+ $obj = new _Consistency();
+ $this
+ ->array($obj->filterComponents($a, $b))
+ ->isEqualTo($c);
+ }
}
@@ -74,6 +74,28 @@ public function testGetDesktopRepositories()
->isEqualTo($repos);
}
+ public function isDesktopRepositoryDP()
+ {
+ return [
+ ['central', true],
+ ['release', true],
+ ['firefox_ios', false],
+ ['mozilla_org', false],
+ ['randomrepo', false],
+ ];
+ }
+
+ /**
+ * @dataProvider isDesktopRepositoryDP
+ */
+ public function testIsDesktopRepository($a, $b)
+ {
+ $obj = new _Project();
+ $this
+ ->boolean($obj->isDesktopRepository($a))
+ ->isEqualTo($b);
+ }
+
public function getRepositoryLocalesDP()
{
return [
View
@@ -33,6 +33,7 @@ $(document).ready(function() {
$('#simplesearch_repository').on('change', function(){
// Store locale currently selected
var current_locale = $('#simplesearch_locale').val();
+ var repository_id = this.value;
// Empty the select
$('#simplesearch_locale')
@@ -46,6 +47,14 @@ $(document).ready(function() {
.text(locale));
});
+ // Hide elements (e.g. filters in Consistency view) if it's not a desktop repository
+ var desktop_repositories = ['central', 'aurora', 'beta', 'release'];
+ if (desktop_repositories.indexOf(repository_id) === -1) {
+ $('.desktop_repo_only').hide();
+ } else {
+ $('.desktop_repo_only').show();
+ }
+
// Try to select the same locale previously selected.
$('#simplesearch_locale option[value="' + current_locale + '"]')
.prop('selected', true);
@@ -754,6 +754,15 @@ fieldset {
margin: 0 auto;
}
+#consistency #simplesearch_filter {
+ width: 200px;
+}
+
+#consistency #filter_message {
+ font-size: 0.9em;
+ margin-top: -10px;
+}
+
/* Gaia comparison view */
.added_string {
color: #008000;

0 comments on commit b521cef

Please sign in to comment.