From: Vladimír Vondruš Date: Thu, 18 Jul 2019 15:21:01 +0000 (+0200) Subject: documentation: provide autocompletion in UTF-8 as well. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~cjwatson/git?a=commitdiff_plain;h=b34a20c25531702663fa9e41ed3678159f4160f8;p=blog.git documentation: provide autocompletion in UTF-8 as well. The search() function returns the result list in UTF-8, but the autocompletion was not. And of course renderResults() assumed it was in UTF-8 and decoded it from UTF-8 *twice*. This wasn't discovered until now because I had no pages with UTF-8 names apart from the test (which doesn't test the UI stuff). --- diff --git a/documentation/search.js b/documentation/search.js index d1a93878..9b94a3c9 100644 --- a/documentation/search.js +++ b/documentation/search.js @@ -194,7 +194,7 @@ var Search = { toUtf8: function(string) { return unescape(encodeURIComponent(string)); }, fromUtf8: function(string) { return decodeURIComponent(escape(string)); }, - autocompletedCharsToString: function(chars) { + autocompletedCharsToUtf8: function(chars) { /* Strip incomplete UTF-8 chars from the autocompletion end */ for(let i = chars.length - 1; i >= 0; --i) { let c = chars[i]; @@ -226,7 +226,7 @@ var Search = { let suggestedTabAutocompletionString = ''; for(let i = 0; i != chars.length; ++i) suggestedTabAutocompletionString += String.fromCharCode(chars[i]); - return this.fromUtf8(suggestedTabAutocompletionString); + return suggestedTabAutocompletionString; }, /* Returns the values in UTF-8, but input is in whatever shitty 16bit @@ -323,7 +323,7 @@ var Search = { /* 'nuff said. */ if(results.length >= this.maxResults) - return [results, this.autocompletedCharsToString(suggestedTabAutocompletionChars)]; + return [results, this.autocompletedCharsToUtf8(suggestedTabAutocompletionChars)]; } /* Dig deeper */ @@ -352,7 +352,7 @@ var Search = { } } - return [results, this.autocompletedCharsToString(suggestedTabAutocompletionChars)]; + return [results, this.autocompletedCharsToUtf8(suggestedTabAutocompletionChars)]; }, gatherResult: function(index, suffixLength, maxUrlPrefix) { diff --git a/documentation/test/test-search.js b/documentation/test/test-search.js index 9e8fb60d..ec45d218 100644 --- a/documentation/test/test-search.js +++ b/documentation/test/test-search.js @@ -304,14 +304,14 @@ const { StringDecoder } = require('string_decoder'); flags: 0, cssClass: 'm-success', typeName: 'page', - suffixLength: 5 }], 'ždě']); + suffixLength: 5 }], Search.toUtf8('ždě')]); assert.deepEqual(Search.search('há'), [[ { name: Search.toUtf8('Hárá'), url: '#b', flags: 0, cssClass: 'm-success', typeName: 'page', - suffixLength: 3 }], 'rá']); + suffixLength: 3 }], Search.toUtf8('rá')]); } /* Properly combine heavily nested URLs */