Skip to content

Commit 7aa537c

Browse files
ryanachisushain97
authored andcommitted
revised ordering algorithm
1 parent e19710f commit 7aa537c

File tree

2 files changed

+77
-61
lines changed

2 files changed

+77
-61
lines changed

assets/js/compat.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,3 +184,30 @@ if (!String.prototype.trim) {
184184
if (!Date.now) {
185185
Date.now = function() { return new Date().getTime(); };
186186
}
187+
188+
// From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some#Polyfill
189+
if (!Array.prototype.some) {
190+
Array.prototype.some = function(fun/*, thisArg*/) {
191+
'use strict';
192+
193+
if (this == null) {
194+
throw new TypeError('Array.prototype.some called on null or undefined');
195+
}
196+
197+
if (typeof fun !== 'function') {
198+
throw new TypeError();
199+
}
200+
201+
var t = Object(this);
202+
var len = t.length >>> 0;
203+
204+
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
205+
for (var i = 0; i < len; i++) {
206+
if (i in t && fun.call(thisArg, t[i], i, t)) {
207+
return true;
208+
}
209+
}
210+
211+
return false;
212+
};
213+
}

assets/js/translator.js

Lines changed: 50 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,9 @@ function populateTranslationList() {
533533
sortTranslationList();
534534
$('.languageCol').remove();
535535

536+
function isVariant(lang) {
537+
return lang.indexOf('_') !== -1;
538+
}
536539
var minColumnWidth = TRANSLATION_LIST_MAX_WIDTH / TRANSLATION_LIST_MAX_COLUMNS;
537540

538541
// figure out how much space is actually available for the columns
@@ -560,13 +563,13 @@ function populateTranslationList() {
560563
dstLangsPerCol = Math.ceil(dstLangs.length / numDstCols);
561564

562565
for(var i = 0; i < numSrcCols; i++) {
563-
while(srcLangs[i * srcLangsPerCol].indexOf('_') !== -1) {
566+
while(isVariant(srcLangs[i * srcLangsPerCol])) {
564567
srcLangsPerCol++;
565568
}
566569
}
567570

568571
for(i = 0; i < numDstCols; i++) {
569-
while(dstLangs[i * dstLangsPerCol].indexOf('_') !== -1) {
572+
while(isVariant(dstLangs[i * dstLangsPerCol])) {
570573
dstLangsPerCol++;
571574
}
572575
}
@@ -575,41 +578,37 @@ function populateTranslationList() {
575578
var numSrcLang = srcLangsPerCol * i;
576579
var srcLangCol = $('<div class="languageCol">').appendTo($('#srcLanguages .row'));
577580

578-
for(var j = numSrcLang; j < numSrcLang + srcLangsPerCol; j++) {
579-
if(numSrcLang < srcLangs.length) {
580-
var langCode = srcLangs[j];
581-
var langName = getLangByCode(langCode);
582-
var langClasses = 'languageName';
583-
if(typeof langCode !== 'undefined' && langCode.indexOf('_') !== -1) {
584-
langClasses += ' languageVariant';
585-
}
586-
srcLangCol.append(
587-
$('<div class="' + langClasses + '"></div>')
588-
.attr('data-code', langCode)
589-
.text(langName)
590-
);
581+
for(var j = numSrcLang; j < srcLangs.length && j < numSrcLang + srcLangsPerCol; j++) {
582+
var langCode = srcLangs[j];
583+
var langName = getLangByCode(langCode);
584+
var langClasses = 'languageName';
585+
if(isVariant(langCode)) {
586+
langClasses += ' languageVariant';
591587
}
588+
srcLangCol.append(
589+
$('<div class="' + langClasses + '"></div>')
590+
.attr('data-code', langCode)
591+
.text(langName)
592+
);
592593
}
593594
}
594595

595596
for(i = 0; i < numDstCols; i++) {
596597
var numDstLang = dstLangsPerCol * i;
597598
var dstLangCol = $('<div class="languageCol">').appendTo($('#dstLanguages .row'));
598599

599-
for(j = numDstLang; j < numDstLang + dstLangsPerCol; j++) {
600-
if(numDstLang < dstLangs.length) {
601-
langCode = dstLangs[j];
602-
langName = getLangByCode(langCode);
603-
langClasses = 'languageName';
604-
if(typeof langCode !== 'undefined' && langCode.indexOf('_') !== -1) {
605-
langClasses += ' languageVariant';
606-
}
607-
dstLangCol.append(
608-
$('<div class="' + langClasses + '"></div>')
609-
.attr('data-code', langCode)
610-
.text(langName)
611-
);
600+
for(j = numDstLang; j < dstLangs.length && j < numDstLang + dstLangsPerCol; j++) {
601+
langCode = dstLangs[j];
602+
langName = getLangByCode(langCode);
603+
langClasses = 'languageName';
604+
if(isVariant(langCode)) {
605+
langClasses += ' languageVariant';
612606
}
607+
dstLangCol.append(
608+
$('<div class="' + langClasses + '"></div>')
609+
.attr('data-code', langCode)
610+
.text(langName)
611+
);
613612
}
614613
}
615614

@@ -620,18 +619,18 @@ function populateTranslationList() {
620619

621620
$('.langSelect option[value!=detect]').remove();
622621
$.each(srcLangs, function () {
623-
var indent = '';
624-
if(typeof this !== 'undefined' && this.indexOf('_') !== -1) {
625-
indent += '&nbsp;&nbsp;&nbsp;&nbsp;';
626-
}
627-
$('#srcLangSelect').append($('<option></option>').prop('value', this).html(indent + getLangByCode(this)));
622+
$('#srcLangSelect').append(
623+
$('<option></option>')
624+
.prop('value', this)
625+
.html((isVariant(this) ? '&nbsp;&nbsp;&nbsp;&nbsp;' : '') + getLangByCode(this))
626+
);
628627
});
629628
$.each(dstLangs, function () {
630-
var indent = '';
631-
if(typeof this !== 'undefined' && this.indexOf('_') !== -1) {
632-
indent += '&nbsp;&nbsp;&nbsp;&nbsp;';
633-
}
634-
$('#dstLangSelect').append($('<option></option>').prop('value', this).html(indent + getLangByCode(this)));
629+
$('#dstLangSelect').append(
630+
$('<option></option>')
631+
.prop('value', this)
632+
.html((isVariant(this) ? '&nbsp;&nbsp;&nbsp;&nbsp;' : '') + getLangByCode(this))
633+
);
635634
});
636635

637636
$('#srcLangSelect').val(curSrcLang);
@@ -674,21 +673,21 @@ function populateTranslationList() {
674673
}
675674

676675
srcLangs = srcLangs.sort(compareLangCodes);
677-
678-
var langsOnly = [];
679-
var variantsOnly = [];
680-
for(var i = 0; i < dstLangs.length; i++) {
681-
if(dstLangs[i].indexOf('_') !== -1) {
682-
variantsOnly.push(dstLangs[i]);
683-
}
684-
else {
685-
langsOnly.push(dstLangs[i]);
676+
dstLangs = dstLangs.sort(function (a, b) {
677+
var possibleDstLangs = pairs[curSrcLang];
678+
function isPossible(lang) {
679+
var parentLanguage = lang.split('_')[0];
680+
681+
return possibleDstLangs && (
682+
possibleDstLangs.indexOf(lang) !== -1 ||
683+
possibleDstLangs.indexOf(parentLanguage) !== -1 ||
684+
possibleDstLangs.some(function (possibleLang) {
685+
return possibleLang.startsWith(parentLanguage);
686+
})
687+
);
686688
}
687-
}
688-
dstLangs = langsOnly.sort(function (a, b) {
689-
var aPossible = pairs[curSrcLang] && pairs[curSrcLang].indexOf(a) !== -1;
690-
var bPossible = pairs[curSrcLang] && pairs[curSrcLang].indexOf(b) !== -1;
691689

690+
var aPossible = isPossible(a), bPossible = isPossible(b);
692691
if(aPossible === bPossible) {
693692
return compareLangCodes(a, b);
694693
}
@@ -699,16 +698,6 @@ function populateTranslationList() {
699698
return 1;
700699
}
701700
});
702-
703-
for(i = 0; i < variantsOnly.length; i++) {
704-
var baseLang = variantsOnly[i].split('_')[0];
705-
for(var j = 0; j < dstLangs.length; j++) {
706-
if(baseLang === dstLangs[j]) {
707-
dstLangs.splice(j + 1, 0, variantsOnly[i]);
708-
break;
709-
}
710-
}
711-
}
712701
}
713702
}
714703

0 commit comments

Comments
 (0)