From 638e5783acc20a58ec4de258848e44d4470bc6cf Mon Sep 17 00:00:00 2001
From: toasted-nutbread <toasted-nutbread@users.noreply.github.com>
Date: Wed, 10 Mar 2021 20:27:10 -0500
Subject: Fix sorting of non-top-level definitions (#1516)

---
 ext/js/language/translator.js | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

(limited to 'ext/js')

diff --git a/ext/js/language/translator.js b/ext/js/language/translator.js
index c885cd4d..761fac6b 100644
--- a/ext/js/language/translator.js
+++ b/ext/js/language/translator.js
@@ -519,7 +519,7 @@ class Translator {
             );
             glossaryDefinitions.push(glossaryDefinition);
         }
-        this._sortDefinitions(glossaryDefinitions);
+        this._sortDefinitions(glossaryDefinitions, false);
 
         const termDetailsList = this._createTermDetailsList(allDefinitions);
 
@@ -594,7 +594,7 @@ class Translator {
 
         const results = [];
         for (const groupDefinitions of groups.values()) {
-            this._sortDefinitions(groupDefinitions);
+            this._sortDefinitions(groupDefinitions, false);
             const definition = this._createGroupedTermDefinition(groupDefinitions);
             results.push(definition);
         }
@@ -1259,21 +1259,24 @@ class Translator {
         });
     }
 
-    _sortDefinitions(definitions) {
+    _sortDefinitions(definitions, topLevel=true) {
         if (definitions.length <= 1) { return; }
         const stringComparer = this._stringComparer;
         const compareFunction = (v1, v2) => {
-            // Sort by length of source term
-            let i = v2.source.length - v1.source.length;
-            if (i !== 0) { return i; }
+            let i;
+            if (topLevel) {
+                // Sort by length of source term
+                i = v2.source.length - v1.source.length;
+                if (i !== 0) { return i; }
 
-            // Sort by the number of inflection reasons
-            i = v1.reasons.length - v2.reasons.length;
-            if (i !== 0) { return i; }
+                // Sort by the number of inflection reasons
+                i = v1.reasons.length - v2.reasons.length;
+                if (i !== 0) { return i; }
 
-            // Sort by how many terms exactly match the source (e.g. for exact kana prioritization)
-            i = v2.sourceTermExactMatchCount - v1.sourceTermExactMatchCount;
-            if (i !== 0) { return i; }
+                // Sort by how many terms exactly match the source (e.g. for exact kana prioritization)
+                i = v2.sourceTermExactMatchCount - v1.sourceTermExactMatchCount;
+                if (i !== 0) { return i; }
+            }
 
             // Sort by dictionary priority
             i = v2.dictionaryOrder.priority - v1.dictionaryOrder.priority;
-- 
cgit v1.2.3