Skip to content

Commit 20e52cc

Browse files
ryanachisushain97
authored andcommitted
improved interface for language variants
1 parent 7be069a commit 20e52cc

File tree

4 files changed

+73
-13
lines changed

4 files changed

+73
-13
lines changed

assets/css/translation.css

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ html[dir='rtl'] .languageName {
66
padding-right: .5em;
77
}
88

9+
html[dir='ltr'] .languageVariant {
10+
font-size: 12px;
11+
padding-left: 2.5em;
12+
}
13+
14+
html[dir='rtl'] .languageVariant {
15+
font-size: 12px;
16+
padding-right: 2.5em;
17+
}
18+
919
.languageName {
1020
position: relative;
1121
}

assets/js/translator.js

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -560,15 +560,31 @@ function populateTranslationList() {
560560
dstLangsPerCol = Math.ceil(dstLangs.length / numDstCols);
561561

562562
for(var i = 0; i < numSrcCols; i++) {
563-
var numSrcLang = Math.ceil(srcLangs.length / numSrcCols) * i;
563+
while(srcLangs[i * srcLangsPerCol].indexOf('_') !== -1) {
564+
srcLangsPerCol++;
565+
}
566+
}
567+
568+
for(i = 0; i < numDstCols; i++) {
569+
while(dstLangs[i * dstLangsPerCol].indexOf('_') !== -1) {
570+
dstLangsPerCol++;
571+
}
572+
}
573+
574+
for(i = 0; i < numSrcCols; i++) {
575+
var numSrcLang = srcLangsPerCol * i;
564576
var srcLangCol = $('<div class="languageCol">').appendTo($('#srcLanguages .row'));
565577

566578
for(var j = numSrcLang; j < numSrcLang + srcLangsPerCol; j++) {
567579
if(numSrcLang < srcLangs.length) {
568580
var langCode = srcLangs[j];
569581
var langName = getLangByCode(langCode);
582+
var langClasses = 'languageName';
583+
if(typeof langCode !== 'undefined' && langCode.indexOf('_') !== -1) {
584+
langClasses += ' languageVariant';
585+
}
570586
srcLangCol.append(
571-
$('<div class="languageName"></div>')
587+
$('<div class="' + langClasses + '"></div>')
572588
.attr('data-code', langCode)
573589
.text(langName)
574590
);
@@ -577,15 +593,19 @@ function populateTranslationList() {
577593
}
578594

579595
for(i = 0; i < numDstCols; i++) {
580-
var numDstLang = Math.ceil(dstLangs.length / numDstCols) * i;
596+
var numDstLang = dstLangsPerCol * i;
581597
var dstLangCol = $('<div class="languageCol">').appendTo($('#dstLanguages .row'));
582598

583599
for(j = numDstLang; j < numDstLang + dstLangsPerCol; j++) {
584600
if(numDstLang < dstLangs.length) {
585601
langCode = dstLangs[j];
586602
langName = getLangByCode(langCode);
603+
langClasses = 'languageName';
604+
if(typeof langCode !== 'undefined' && langCode.indexOf('_') !== -1) {
605+
langClasses += ' languageVariant';
606+
}
587607
dstLangCol.append(
588-
$('<div class="languageName"></div>')
608+
$('<div class="' + langClasses + '"></div>')
589609
.attr('data-code', langCode)
590610
.text(langName)
591611
);
@@ -600,10 +620,18 @@ function populateTranslationList() {
600620

601621
$('.langSelect option[value!=detect]').remove();
602622
$.each(srcLangs, function () {
603-
$('#srcLangSelect').append($('<option></option>').prop('value', this).text(getLangByCode(this)));
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)));
604628
});
605629
$.each(dstLangs, function () {
606-
$('#dstLangSelect').append($('<option></option>').prop('value', this).text(getLangByCode(this)));
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)));
607635
});
608636

609637
$('#srcLangSelect').val(curSrcLang);
@@ -623,7 +651,6 @@ function populateTranslationList() {
623651

624652
function compareLangCodes(a, b) {
625653
var aVariant = a.split('_'), bVariant = b.split('_');
626-
627654
var directCompare;
628655
try {
629656
directCompare = getLangByCode(aVariant[0]).localeCompare(getLangByCode(bVariant[0]), sortLocale);
@@ -635,10 +662,10 @@ function populateTranslationList() {
635662
if(aVariant[1] && bVariant[1] && aVariant[0] === bVariant[0]) {
636663
return directCompare;
637664
}
638-
else if(aVariant && a.startsWith(b)) {
665+
else if(aVariant[1] && aVariant[0] === b) {
639666
return 1;
640667
}
641-
else if(bVariant && b.startsWith(a)) {
668+
else if(bVariant[1] && bVariant[0] === a) {
642669
return -1;
643670
}
644671
else {
@@ -647,7 +674,18 @@ function populateTranslationList() {
647674
}
648675

649676
srcLangs = srcLangs.sort(compareLangCodes);
650-
dstLangs = dstLangs.sort(function (a, b) {
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]);
686+
}
687+
}
688+
dstLangs = langsOnly.sort(function (a, b) {
651689
var aPossible = pairs[curSrcLang] && pairs[curSrcLang].indexOf(a) !== -1;
652690
var bPossible = pairs[curSrcLang] && pairs[curSrcLang].indexOf(b) !== -1;
653691

@@ -661,6 +699,16 @@ function populateTranslationList() {
661699
return 1;
662700
}
663701
});
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+
}
664712
}
665713
}
666714

assets/js/util.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ var INSTALLATION_NOTIFICATION_REQUESTS_BUFFER_LENGTH = 5,
1919
INSTALLATION_NOTIFICATION_CUMULATIVE_DURATION_THRESHOLD = 3000,
2020
INSTALLATION_NOTIFICATION_DURATION = 10000;
2121

22-
var apyRequestTimeout /*: number */, apyRequestStartTime/*: ?number */;
22+
var apyRequestTimeout /*: TimeoutID */, apyRequestStartTime/*: ?number */;
2323
var installationNotificationShown = false, lastNAPyRequestDurations = [];
2424

2525
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill
@@ -55,7 +55,9 @@ function debounce(func /*: any */, delay /*: ?number */) { // eslint-disable-lin
5555
var clock = null;
5656
return function () {
5757
var context = this, args = arguments;
58-
clearTimeout(clock);
58+
if(clock) {
59+
clearTimeout(clock);
60+
}
5961
clock = setTimeout(function () {
6062
func.apply(context, args);
6163
}, delay || DEFAULT_DEBOUNCE_DELAY);

flow-typed/jquery.js.flow

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3244,7 +3244,7 @@ declare class JQuery {
32443244
}
32453245

32463246
declare module 'jquery' {
3247-
declare var exports: JQueryStatic;
3247+
declare module.exports: JQueryStatic;
32483248
}
32493249
declare var jQuery: JQueryStatic;
32503250
declare var $: JQueryStatic;

0 commit comments

Comments
 (0)