From: Vladimír Vondruš Date: Thu, 18 Jul 2019 11:18:12 +0000 (+0200) Subject: documentation: re-render symbol count if search box gets shown again. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~cjwatson/git?a=commitdiff_plain;h=908a6a8b380174f20c1fd970058b90677d9e3529;p=blog.git documentation: re-render symbol count if search box gets shown again. The (stale) count of found symbols was preserved there even though the search box got emptied again. Also deduplicated the code a bit. --- diff --git a/documentation/search.js b/documentation/search.js index 8b0c9a5b..0ebbf44f 100644 --- a/documentation/search.js +++ b/documentation/search.js @@ -27,11 +27,11 @@ var Search = { formatVersion: 1, /* the data filename contains this number too */ + dataSize: 0, /* used mainly by tests, not here */ + symbolCount: '…', trie: null, map: null, typeMap: null, - dataSize: 0, - symbolCount: 0, maxResults: 0, /* Always contains at least the root node offset and then one node offset @@ -83,15 +83,14 @@ var Search = { /* Set initial properties */ this.dataSize = buffer.byteLength; - this.symbolCount = view.getUint16(4, true); + this.symbolCount = view.getUint16(4, true) + " symbols (" + Math.round(this.dataSize/102.4)/10 + " kB)"; this.maxResults = maxResults ? maxResults : 100; this.searchString = ''; this.searchStack = [this.trie.getUint32(0, true)]; /* istanbul ignore if */ if(typeof document !== 'undefined') { - document.getElementById('search-symbolcount').innerHTML = - this.symbolCount + " symbols (" + Math.round(this.dataSize/102.4)/10 + " kB)"; + document.getElementById('search-symbolcount').innerHTML = this.symbolCount; document.getElementById('search-input').disabled = false; document.getElementById('search-input').placeholder = "Type something here …"; document.getElementById('search-input').focus(); @@ -558,8 +557,7 @@ var Search = { document.getElementById('search-symbolcount').innerHTML = results[0].length + (results.length >= this.maxResults ? '+' : '') + " results (" + Math.round((after - prev)*10)/10 + " ms)"; } else - document.getElementById('search-symbolcount').innerHTML = - this.symbolCount + " symbols (" + Math.round(this.dataSize/102.4)/10 + " kB)"; + document.getElementById('search-symbolcount').innerHTML = this.symbolCount; }, }; @@ -595,6 +593,7 @@ function showSearch() { Search.canGoBackToHideSearch = true; updateForSearchVisible(); + document.getElementById('search-symbolcount').innerHTML = Search.symbolCount; return false; } diff --git a/documentation/test/test-search.js b/documentation/test/test-search.js index d99550ba..9e8fb60d 100644 --- a/documentation/test/test-search.js +++ b/documentation/test/test-search.js @@ -106,7 +106,8 @@ const { StringDecoder } = require('string_decoder'); { let buffer = fs.readFileSync(path.join(__dirname, "js-test-data/empty.bin")); assert.ok(Search.init(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength))); - assert.equal(Search.symbolCount, 0); + assert.equal(Search.dataSize, 26); + assert.equal(Search.symbolCount, "0 symbols (0 kB)"); assert.deepEqual(Search.search(''), [[], '']); } @@ -115,7 +116,7 @@ const { StringDecoder } = require('string_decoder'); let buffer = fs.readFileSync(path.join(__dirname, "js-test-data/searchdata.bin")); assert.ok(Search.init(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength))); assert.equal(Search.dataSize, 674); - assert.equal(Search.symbolCount, 7); + assert.equal(Search.symbolCount, "7 symbols (0.7 kB)"); assert.equal(Search.maxResults, 100); /* Blow up */ @@ -224,7 +225,7 @@ const { StringDecoder } = require('string_decoder'); let buffer = fs.readFileSync(path.join(__dirname, "js-test-data/searchdata.bin")); assert.ok(Search.init(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength), 3)); assert.equal(Search.dataSize, 674); - assert.equal(Search.symbolCount, 7); + assert.equal(Search.symbolCount, "7 symbols (0.7 kB)"); assert.equal(Search.maxResults, 3); assert.deepEqual(Search.search('m'), [[ { name: 'Math', @@ -252,7 +253,7 @@ const { StringDecoder } = require('string_decoder'); let b85 = fs.readFileSync(path.join(__dirname, "js-test-data/searchdata.b85"), {encoding: 'utf-8'}); assert.ok(Search.load(b85)); assert.equal(Search.dataSize, 676); /* some padding on the end, that's okay */ - assert.equal(Search.symbolCount, 7); + assert.equal(Search.symbolCount, "7 symbols (0.7 kB)"); assert.equal(Search.maxResults, 100); assert.deepEqual(Search.search('min'), [[ { name: 'Math::min(int, int)', @@ -280,7 +281,7 @@ const { StringDecoder } = require('string_decoder'); let buffer = fs.readFileSync(path.join(__dirname, "js-test-data/unicode.bin")); assert.ok(Search.init(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength))); assert.equal(Search.dataSize, 160); - assert.equal(Search.symbolCount, 2); + assert.equal(Search.symbolCount, "2 symbols (0.2 kB)"); /* Both "Hýždě" and "Hárá" have common autocompletion to "h\xA1", which is not valid UTF-8, so it has to get truncated */ assert.deepEqual(Search.search('h'), [[ @@ -318,7 +319,7 @@ const { StringDecoder } = require('string_decoder'); let buffer = fs.readFileSync(path.join(__dirname, "js-test-data/nested.bin")); assert.ok(Search.init(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength))); assert.equal(Search.dataSize, 331); - assert.equal(Search.symbolCount, 4); + assert.equal(Search.symbolCount, "4 symbols (0.3 kB)"); assert.deepEqual(Search.search('geo'), [[ { name: 'Magnum::Math::Geometry', url: 'namespaceMagnum_1_1Math_1_1Geometry.html', @@ -341,7 +342,7 @@ const { StringDecoder } = require('string_decoder'); let buffer = fs.readFileSync(path.join(__dirname, "js-test-data/manyresults.bin")); assert.ok(Search.init(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength), 10000)); assert.equal(Search.dataSize, 6415); - assert.equal(Search.symbolCount, 128 + 3); + assert.equal(Search.symbolCount, "131 symbols (6.3 kB)"); assert.equal(Search.maxResults, 10000); assert.deepEqual(Search.search('__init__')[0].length, 128 + 3); assert.deepEqual(Search.search('__init__')[1], '');