From 0686ca81467c50e4589b030b0771081eff0a62a2 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 26 Apr 2020 11:19:01 +0100 Subject: [PATCH 01/60] Handle unicode words and punctuation --- www/js/lib/util.js | 31 +++++++++++++++++++++++++++---- www/js/lib/zimArchive.js | 11 ++++++----- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index e8a69ddc9..c0ba42332 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -22,6 +22,13 @@ 'use strict'; define(['q'], function(Q) { + /** + * A Regular Expression to match the first letter of a word even if preceded by Unicode punctuation + * Includes currency signs and mathematical symbols: see https://stackoverflow.com/a/21396529/9727685 + * @type {RegExp} + */ + var firstLetter = /(^|\s+)[\$\uFFE5\^\+=`~<>{}\[\]|\u3000-\u303F!-#%-\x2A,-/:;\x3F@\x5B-\x5D_\x7B}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]*./g; + /** * Utility function : return true if the given string ends with the suffix * @param {String} str @@ -63,13 +70,13 @@ define(['q'], function(Q) { } /** - * Returns the same String with the first letter of every word in upper-case - * @param {String} string - * @returns {String} + * Converts the first letter of each word in a string to upper case + * @param {String} string The string to be converted + * @return {String} The same string with the first letter of each word in upper case */ function ucEveryFirstLetter(string) { if (string) { - return string.replace( /\b\w/g, function (m) { + return string.replace(firstLetter, function (m) { return m.toLocaleUpperCase(); }); } else { @@ -77,6 +84,21 @@ define(['q'], function(Q) { } } + /** + * Converts the first letter of each word in a string to lower case + * @param {String} string The string to be converted + * @return {String} The same string with the first letter of each word in upper case + */ + function lcEveryFirstLetter(string) { + if (string) { + return string.replace(firstLetter, function (m) { + return m.toLocaleLowerCase(); + }); + } else { + return string; + } + } + /** * Generates an array of Strings, where all duplicates have been removed * (without changing the order) @@ -292,6 +314,7 @@ define(['q'], function(Q) { ucFirstLetter: ucFirstLetter, lcFirstLetter: lcFirstLetter, ucEveryFirstLetter: ucEveryFirstLetter, + lcEveryFirstLetter: lcEveryFirstLetter, removeDuplicateStringsInSmallArray: removeDuplicateStringsInSmallArray, readIntegerFrom4Bytes: readIntegerFrom4Bytes, readIntegerFrom2Bytes : readIntegerFrom2Bytes, diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 614cef9a5..80c49a245 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -148,13 +148,14 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * This should be enhanced when the ZIM format will be modified to store normalized titles * See https://phabricator.wikimedia.org/T108536 * - * @param {String} prefix - * @param {Integer} resultSize - * @param {callbackDirEntryList} callback + * @param {String} prefix The search string + * @param {Integer} resultSize The number of dirEntries to find + * @param {callbackDirEntryList} callback The funciton to call with the result */ - ZIMArchive.prototype.findDirEntriesWithPrefix = function(prefix, resultSize, callback) { + ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback) { var that = this; - var prefixVariants = util.removeDuplicateStringsInSmallArray([prefix, util.ucFirstLetter(prefix), util.lcFirstLetter(prefix), util.ucEveryFirstLetter(prefix)]); + var prefixVariants = util.removeDuplicateStringsInSmallArray([prefix, util.ucFirstLetter(prefix), + util.lcFirstLetter(prefix), util.ucEveryFirstLetter(prefix), util.lcEveryFirstLetter(prefix)]); var dirEntries = []; function searchNextVariant() { if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { From d4d7a20f69d4a466b2e8ef5d4c2acdb8dc61b4a6 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 26 Apr 2020 22:20:21 +0100 Subject: [PATCH 02/60] Find all possible combinations of first-letter cases --- www/js/lib/util.js | 105 ++++++++++++++------------------------- www/js/lib/zimArchive.js | 3 +- 2 files changed, 38 insertions(+), 70 deletions(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index c0ba42332..b5deae539 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -27,75 +27,37 @@ define(['q'], function(Q) { * Includes currency signs and mathematical symbols: see https://stackoverflow.com/a/21396529/9727685 * @type {RegExp} */ - var firstLetter = /(^|\s+)[\$\uFFE5\^\+=`~<>{}\[\]|\u3000-\u303F!-#%-\x2A,-/:;\x3F@\x5B-\x5D_\x7B}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]*./g; + var regExpFindStringParts = /(?:^|.+?)(?:[\s$\uFFE5^+=`~<>{}[\]|\u3000-\u303F!-#%-\x2A,-/:;\x3F@\x5B-\x5D_\x7B}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]+|$)/g; /** - * Utility function : return true if the given string ends with the suffix - * @param {String} str - * @param {String} suffix - * @returns {Boolean} - */ - function endsWith(str, suffix) { - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - /** - * Returns the same String with the first letter in upper-case - * @param {String} string - * @returns {String} - */ - function ucFirstLetter(string) { - if (string && string.length >= 1) { - return string[0].toLocaleUpperCase() + string.slice(1); - } else { - return string; - } - } - - /** - * Returns the same String with the first letter in lower-case - * @param {String} string - * @returns {String} - */ - function lcFirstLetter(string) { - if (string) { - if (string.length >= 1) { - return string.charAt(0).toLocaleLowerCase() + string.slice(1); - } else { - return string; - } - } else { - return string; - } - } - - /** - * Converts the first letter of each word in a string to upper case - * @param {String} string The string to be converted - * @return {String} The same string with the first letter of each word in upper case - */ - function ucEveryFirstLetter(string) { - if (string) { - return string.replace(firstLetter, function (m) { - return m.toLocaleUpperCase(); - }); - } else { - return string; - } - } - - /** - * Converts the first letter of each word in a string to lower case + * Generates an array of strings with all possible combinations of first-letter case transformations * @param {String} string The string to be converted - * @return {String} The same string with the first letter of each word in upper case + * @return {Array} An array containing strings with all possible combinations of first-letter cases */ - function lcEveryFirstLetter(string) { + function allCaseFirstLetters(string) { if (string) { - return string.replace(firstLetter, function (m) { - return m.toLocaleLowerCase(); - }); + var strParts = string.match(regExpFindStringParts); + var numCombos = Math.pow(2, strParts.length); + var comboArray = []; + var tempString; + var caseBit = false; + //for (var i = 0; i < numCombos; i++) { + for (var i = numCombos; i--;) { + tempString = ''; + var bitmask = 1; + // for (var j = 0; j < strParts.length; j++) { + for (var j = strParts.length; j--;) { + caseBit = i & bitmask; + tempString = strParts[j].replace(/^./, function (m) { + return caseBit ? m.toLocaleUpperCase() : m.toLocaleLowerCase(); + }) + tempString; + bitmask *= 2; + } + comboArray.push(tempString); + } + return comboArray; } else { - return string; + return [string]; } } @@ -118,6 +80,16 @@ define(['q'], function(Q) { return unique; } + /** + * Utility function : return true if the given string ends with the suffix + * @param {String} str + * @param {String} suffix + * @returns {Boolean} + */ + function endsWith(str, suffix) { + return str.indexOf(suffix, str.length - suffix.length) !== -1; + } + /** * Read an integer encoded in 4 bytes, little endian * @param {Array} byteArray @@ -310,12 +282,9 @@ define(['q'], function(Q) { * Functions and classes exposed by this module */ return { - endsWith: endsWith, - ucFirstLetter: ucFirstLetter, - lcFirstLetter: lcFirstLetter, - ucEveryFirstLetter: ucEveryFirstLetter, - lcEveryFirstLetter: lcEveryFirstLetter, + allCaseFirstLetters: allCaseFirstLetters, removeDuplicateStringsInSmallArray: removeDuplicateStringsInSmallArray, + endsWith: endsWith, readIntegerFrom4Bytes: readIntegerFrom4Bytes, readIntegerFrom2Bytes : readIntegerFrom2Bytes, readFloatFrom4Bytes : readFloatFrom4Bytes, diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 80c49a245..05b20c6f6 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -154,8 +154,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], */ ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback) { var that = this; - var prefixVariants = util.removeDuplicateStringsInSmallArray([prefix, util.ucFirstLetter(prefix), - util.lcFirstLetter(prefix), util.ucEveryFirstLetter(prefix), util.lcEveryFirstLetter(prefix)]); + var prefixVariants = util.removeDuplicateStringsInSmallArray(util.allCaseFirstLetters(prefix)); var dirEntries = []; function searchNextVariant() { if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { From fce77af265c461386580c37ebd9466139a5bf58c Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 26 Apr 2020 23:34:51 +0100 Subject: [PATCH 03/60] =?UTF-8?q?Add=20documentation=20and=20=C2=A3=20and?= =?UTF-8?q?=20=E2=82=AC=20to=20regex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- www/js/lib/util.js | 15 +++++++++------ www/js/lib/zimArchive.js | 3 +++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index b5deae539..49f2f4df6 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -27,7 +27,7 @@ define(['q'], function(Q) { * Includes currency signs and mathematical symbols: see https://stackoverflow.com/a/21396529/9727685 * @type {RegExp} */ - var regExpFindStringParts = /(?:^|.+?)(?:[\s$\uFFE5^+=`~<>{}[\]|\u3000-\u303F!-#%-\x2A,-/:;\x3F@\x5B-\x5D_\x7B}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]+|$)/g; + var regExpFindStringParts = /(?:^|.+?)(?:[\s$£€\uFFE5^+=`~<>{}[\]|\u3000-\u303F!-#%-\x2A,-/:;\x3F@\x5B-\x5D_\x7B}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]+|$)/g; /** * Generates an array of strings with all possible combinations of first-letter case transformations @@ -37,20 +37,23 @@ define(['q'], function(Q) { function allCaseFirstLetters(string) { if (string) { var strParts = string.match(regExpFindStringParts); + // If n = strParts.length, then the number of possible first-letter case combinations (numCombos) is 2 ^ n; + // numCombos can be thought of as a binary number of n bits, with each bit representing lcase (0) or ucase (1) var numCombos = Math.pow(2, strParts.length); var comboArray = []; - var tempString; - var caseBit = false; - //for (var i = 0; i < numCombos; i++) { + var tempString, bitmask, caseBit; + // Iterate through every possible combinations for (var i = numCombos; i--;) { tempString = ''; - var bitmask = 1; - // for (var j = 0; j < strParts.length; j++) { + bitmask = 1; for (var j = strParts.length; j--;) { + // Use bitwise AND to check if combo number i has the case bit set for the current bitmask caseBit = i & bitmask; tempString = strParts[j].replace(/^./, function (m) { + // Set the case of the first letter according to the case bit return caseBit ? m.toLocaleUpperCase() : m.toLocaleLowerCase(); }) + tempString; + // Shift bitmask to the next higher bit bitmask *= 2; } comboArray.push(tempString); diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 05b20c6f6..8f982024e 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -154,6 +154,9 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], */ ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback) { var that = this; + // We still have to remove duplicate string combinations because util.allCaseFirstLetters() can return some combinations + // where uppercase and lowercase of the first "letter" are exactly the same, e.g. where prefix begins with punctuation + // or currency signs, or potentially for languages without case var prefixVariants = util.removeDuplicateStringsInSmallArray(util.allCaseFirstLetters(prefix)); var dirEntries = []; function searchNextVariant() { From b2d6b995fe7e6a588756362f439e5138ef57ad1a Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 26 Apr 2020 23:47:01 +0100 Subject: [PATCH 04/60] Documentation --- www/js/lib/util.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index 49f2f4df6..32e0c5faf 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -31,6 +31,7 @@ define(['q'], function(Q) { /** * Generates an array of strings with all possible combinations of first-letter case transformations + * NB may produce duplicate strings if string begins with punctuation or if it is in a language with no case * @param {String} string The string to be converted * @return {Array} An array containing strings with all possible combinations of first-letter cases */ @@ -42,7 +43,7 @@ define(['q'], function(Q) { var numCombos = Math.pow(2, strParts.length); var comboArray = []; var tempString, bitmask, caseBit; - // Iterate through every possible combinations + // Iterate through every possible combination for (var i = numCombos; i--;) { tempString = ''; bitmask = 1; From 57e57d5c44e85875a55a873148cf78eda8ae0c54 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 27 Apr 2020 09:39:37 +0100 Subject: [PATCH 05/60] Add whole word case variations --- www/js/lib/util.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index 32e0c5faf..a8277ac0a 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -42,22 +42,26 @@ define(['q'], function(Q) { // numCombos can be thought of as a binary number of n bits, with each bit representing lcase (0) or ucase (1) var numCombos = Math.pow(2, strParts.length); var comboArray = []; - var tempString, bitmask, caseBit; + var firstLetterCaseStr, wholeWordCaseStr, bitmask, caseBit; // Iterate through every possible combination for (var i = numCombos; i--;) { - tempString = ''; + firstLetterCaseStr = ''; + wholeWordCaseStr = ''; bitmask = 1; for (var j = strParts.length; j--;) { // Use bitwise AND to check if combo number i has the case bit set for the current bitmask caseBit = i & bitmask; - tempString = strParts[j].replace(/^./, function (m) { + firstLetterCaseStr = strParts[j].replace(/^./, function (m) { // Set the case of the first letter according to the case bit return caseBit ? m.toLocaleUpperCase() : m.toLocaleLowerCase(); - }) + tempString; + }) + firstLetterCaseStr; + wholeWordCaseStr = (caseBit ? strParts[j].toLocaleUpperCase() : strParts[j].toLocaleLowerCase()) + + wholeWordCaseStr; // Shift bitmask to the next higher bit bitmask *= 2; } - comboArray.push(tempString); + comboArray.push(firstLetterCaseStr); + comboArray.push(wholeWordCaseStr); } return comboArray; } else { From 2d374d19e96c6015ef0cf0004cc229d18c64c1e0 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 27 Apr 2020 21:27:48 +0100 Subject: [PATCH 06/60] Preserve search as typed, normalize spacing, start all lowercase --- www/js/lib/util.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index a8277ac0a..10d2c9f6c 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -37,11 +37,16 @@ define(['q'], function(Q) { */ function allCaseFirstLetters(string) { if (string) { + var comboArray = []; + // Ensure a search is done on the string exactly as typed + comboArray.push(string); + // Normalize any spacing and make string all lowercase + string = string.replace(/\s+/g, ' ').toLocaleLowerCase(); + // Split string into parts beginning with first word letters var strParts = string.match(regExpFindStringParts); // If n = strParts.length, then the number of possible first-letter case combinations (numCombos) is 2 ^ n; // numCombos can be thought of as a binary number of n bits, with each bit representing lcase (0) or ucase (1) var numCombos = Math.pow(2, strParts.length); - var comboArray = []; var firstLetterCaseStr, wholeWordCaseStr, bitmask, caseBit; // Iterate through every possible combination for (var i = numCombos; i--;) { From 2295a85d824769cf962b7e5938e50cea0ecb2d5a Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 27 Apr 2020 23:31:37 +0100 Subject: [PATCH 07/60] Document maintenance of punctuation regex --- www/js/lib/util.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index 10d2c9f6c..2afa7fcf2 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -25,6 +25,9 @@ define(['q'], function(Q) { /** * A Regular Expression to match the first letter of a word even if preceded by Unicode punctuation * Includes currency signs and mathematical symbols: see https://stackoverflow.com/a/21396529/9727685 + * DEV: To maintain the list below, see https://github.com/slevithan/xregexp/blob/master/tools/output/categories.js + * where all the different Unicode punctuation categories can be found (simplify double backspacing before using below) + * Note that the XRegExp punctuation categories begin at !-# in list below * @type {RegExp} */ var regExpFindStringParts = /(?:^|.+?)(?:[\s$£€\uFFE5^+=`~<>{}[\]|\u3000-\u303F!-#%-\x2A,-/:;\x3F@\x5B-\x5D_\x7B}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]+|$)/g; From b1ae1f2c0a6728a3f164f68763cd6371e2c4a601 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Thu, 30 Apr 2020 13:38:32 +0100 Subject: [PATCH 08/60] Add UI and implement options --- www/index.html | 32 +++++++++++++++++++++++++++++++- www/js/app.js | 29 ++++++++++++++++++++++++----- www/js/lib/util.js | 13 +++++++++++-- 3 files changed, 66 insertions(+), 8 deletions(-) diff --git a/www/index.html b/www/index.html index 130ab4695..134a5c9bf 100644 --- a/www/index.html +++ b/www/index.html @@ -267,9 +267,39 @@

Display settings


Performance settings

-
+
Speed up archive access
+
+
+
+

Select type of article title search:

+ +
+
+ +
+
+
+
+

Select max number of search results:

+ +
+
+
+
diff --git a/www/js/app.js b/www/js/app.js index 6fcd5d900..5318d9e65 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -70,6 +70,13 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys params['showUIAnimations'] = settingsStore.getItem('showUIAnimations') ? settingsStore.getItem('showUIAnimations') === 'true' : true; document.getElementById('hideActiveContentWarningCheck').checked = params.hideActiveContentWarning; document.getElementById('showUIAnimationsCheck').checked = params.showUIAnimations; + // A parameter to set the case matching type for title search (defaults to 'full') + params['titleSearchCaseMatchType'] = settingsStore.getItem('titleSearchCaseMatchType') || 'full'; + document.querySelector('input[name="caseMatchType"][value="' + params.titleSearchCaseMatchType + '"]').checked = true; + // Maximum number of article titles to return (range is 5 - 50, default 25) + params['maxSearchResultSize'] = settingsStore.getItem('maxSearchResultsSize') || 25; + document.getElementById('titleSearchRange').value = params.maxSearchResultSize; + document.getElementById('titleSearchRangeVal').innerHTML = params.maxSearchResultSize; // A global parameter that turns caching on or off and deletes the cache (it defaults to true unless explicitly turned off in UI) params['useCache'] = settingsStore.getItem('useCache') !== 'false'; // A parameter to set the app theme and, if necessary, the CSS theme for article content (defaults to 'light') @@ -349,6 +356,18 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys refreshCacheStatus(); } }); + Array.prototype.slice.call(document.querySelectorAll('input[name="caseMatchType"]')).forEach(function(input) { + input.addEventListener('change', function(e) { + if (e.target.checked) { + settingsStore.setItem('titleSearchCaseMatchType', e.target.value, Infinity); + params.titleSearchCaseMatchType = e.target.value; + } + }); + }); + document.getElementById('titleSearchRange').addEventListener('change', function(e) { + settingsStore.setItem('maxSearchResultsSize', e.target.value, Infinity); + document.getElementById('titleSearchRangeVal').innerHTML = e.target.value; + }); /** * Displays or refreshes the API status shown to the user @@ -441,7 +460,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys getCacheAttributes().then(function (cache) { document.getElementById('cacheUsed').innerHTML = cache.description; document.getElementById('assetsCount').innerHTML = cache.count; - var cacheSettings = document.getElementById('cacheSettingsDiv'); + var cacheSettings = document.getElementById('performanceSettingsDiv'); var cacheStatusPanel = document.getElementById('cacheStatusPanel'); [cacheSettings, cacheStatusPanel].forEach(function (card) { // IE11 cannot remove more than one class from a list at a time @@ -952,7 +971,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys function searchDirEntriesFromPrefix(prefix) { if (selectedArchive !== null && selectedArchive.isReady()) { $('#activeContent').hide(); - selectedArchive.findDirEntriesWithPrefix(prefix.trim(), MAX_SEARCH_RESULT_SIZE, populateListOfArticles); + selectedArchive.findDirEntriesWithPrefix(prefix.trim(), params.maxSearchResultSize, populateListOfArticles); } else { $('#searchingArticles').hide(); // We have to remove the focus from the search field, @@ -973,8 +992,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys var nbDirEntry = dirEntryArray ? dirEntryArray.length : 0; var message; - if (nbDirEntry >= MAX_SEARCH_RESULT_SIZE) { - message = 'First ' + MAX_SEARCH_RESULT_SIZE + ' articles below (refine your search).'; + if (nbDirEntry >= params.maxSearchResultSize) { + message = 'First ' + params.maxSearchResultSize + ' articles below (refine your search).'; } else { message = nbDirEntry + ' articles found.'; } @@ -986,7 +1005,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys var articleListDiv = $('#articleList'); var articleListDivHtml = ''; - var listLength = dirEntryArray.length < MAX_SEARCH_RESULT_SIZE ? dirEntryArray.length : MAX_SEARCH_RESULT_SIZE; + var listLength = dirEntryArray.length < params.maxSearchResultSize ? dirEntryArray.length : params.maxSearchResultSize; for (var i = 0; i < listLength; i++) { var dirEntry = dirEntryArray[i]; var dirEntryStringId = uiUtil.htmlEscapeChars(dirEntry.toStringId()); diff --git a/www/js/lib/util.js b/www/js/lib/util.js index 2afa7fcf2..3759bc5ce 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -51,11 +51,19 @@ define(['q'], function(Q) { // numCombos can be thought of as a binary number of n bits, with each bit representing lcase (0) or ucase (1) var numCombos = Math.pow(2, strParts.length); var firstLetterCaseStr, wholeWordCaseStr, bitmask, caseBit; - // Iterate through every possible combination + // Iterate through every possible combination, starting with (2 ^ n) - 1 and decreasing; we go from high to low, + // because all uppercase (e.g. binary 1111) has lower Unicode value than lowercase (0000) so will be found first for (var i = numCombos; i--;) { firstLetterCaseStr = ''; wholeWordCaseStr = ''; bitmask = 1; + if (params.titleSearchCaseMatchType === 'basic') { + // For basic searches we skip all byte values that are not, e.g. 1111 (all first letters uc) + // or 0000 (all first letters lc) + if (i > 0 && i < numCombos -1) { + continue; + } + } for (var j = strParts.length; j--;) { // Use bitwise AND to check if combo number i has the case bit set for the current bitmask caseBit = i & bitmask; @@ -68,8 +76,9 @@ define(['q'], function(Q) { // Shift bitmask to the next higher bit bitmask *= 2; } + // Push uppercase first + if (params.titleSearchCaseMatchType === 'full') comboArray.push(wholeWordCaseStr); comboArray.push(firstLetterCaseStr); - comboArray.push(wholeWordCaseStr); } return comboArray; } else { From 2762355bbf61c88f83f4dd9a1d1a191a17415e15 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Thu, 30 Apr 2020 22:27:18 +0100 Subject: [PATCH 09/60] Rationalize case calculations and document --- www/js/lib/util.js | 63 +++++++++++++++++++++------------------- www/js/lib/zimArchive.js | 2 +- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index 3759bc5ce..aea5416c9 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -33,12 +33,15 @@ define(['q'], function(Q) { var regExpFindStringParts = /(?:^|.+?)(?:[\s$£€\uFFE5^+=`~<>{}[\]|\u3000-\u303F!-#%-\x2A,-/:;\x3F@\x5B-\x5D_\x7B}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]+|$)/g; /** - * Generates an array of strings with all possible combinations of first-letter case transformations + * Generates an array of strings with all possible combinations of first-letter or all-letter case transformations + * If caseMatchType is not 'full', then only combinations of first-letter cases for each word are calculated + * If caseMatchType is 'full', then all-uppercase combinations of each word are added to the variations array * NB may produce duplicate strings if string begins with punctuation or if it is in a language with no case * @param {String} string The string to be converted - * @return {Array} An array containing strings with all possible combinations of first-letter cases + * @param {String} caseMatchType ('basic'|'full') The type (complexity) of case variations to calculate + * @return {Array} An array containing strings with all possible combinations of case types */ - function allCaseFirstLetters(string) { + function allCaseFirstLetters(string, caseMatchType) { if (string) { var comboArray = []; // Ensure a search is done on the string exactly as typed @@ -47,38 +50,38 @@ define(['q'], function(Q) { string = string.replace(/\s+/g, ' ').toLocaleLowerCase(); // Split string into parts beginning with first word letters var strParts = string.match(regExpFindStringParts); - // If n = strParts.length, then the number of possible first-letter case combinations (numCombos) is 2 ^ n; - // numCombos can be thought of as a binary number of n bits, with each bit representing lcase (0) or ucase (1) - var numCombos = Math.pow(2, strParts.length); - var firstLetterCaseStr, wholeWordCaseStr, bitmask, caseBit; - // Iterate through every possible combination, starting with (2 ^ n) - 1 and decreasing; we go from high to low, - // because all uppercase (e.g. binary 1111) has lower Unicode value than lowercase (0000) so will be found first + // Set the base (binary or ternary) according to the complexity of the search + var base = caseMatchType === 'full' ? 3 : 2; + // If n = strParts.length, then the number of possible case combinations (numCombos) is base ^ n + // For *basic* case calculation: think of numCombos as a binary number of n bits, with each bit representing lcase (0) or ucase (1) + // For *full* case calculation: think of numCombos as a tertiary base number, e.g. 000, 111, 222, + // with each bit representing all-lowercase (0), First-Letter-Uppercase (1) or ALL-UPPERCASE (2) + var numCombos = Math.pow(base, strParts.length); + var typeCase, mixedTypeCaseStr, bitmask, caseBit; + // Iterate through every possible combination, starting with (base ^ n) - 1 and decreasing; we go from high to low, + // because all uppercase (e.g. tertiary 2222) has lower Unicode value than all lowercase (0000) so will be found first for (var i = numCombos; i--;) { - firstLetterCaseStr = ''; - wholeWordCaseStr = ''; + mixedTypeCaseStr = ''; bitmask = 1; - if (params.titleSearchCaseMatchType === 'basic') { - // For basic searches we skip all byte values that are not, e.g. 1111 (all first letters uc) - // or 0000 (all first letters lc) - if (i > 0 && i < numCombos -1) { - continue; - } - } for (var j = strParts.length; j--;) { - // Use bitwise AND to check if combo number i has the case bit set for the current bitmask - caseBit = i & bitmask; - firstLetterCaseStr = strParts[j].replace(/^./, function (m) { - // Set the case of the first letter according to the case bit - return caseBit ? m.toLocaleUpperCase() : m.toLocaleLowerCase(); - }) + firstLetterCaseStr; - wholeWordCaseStr = (caseBit ? strParts[j].toLocaleUpperCase() : strParts[j].toLocaleLowerCase()) - + wholeWordCaseStr; + // Get modulus of division (this is equivelent to bitwise AND for different bases) + // caseBit will be 0, 1 or 2 (latter only for 'full' case calcualation) + caseBit = ~~(i / bitmask % base); + if (caseBit === 2) { + // All uppercase + typeCase = strParts[j].toLocaleUpperCase() + } else { + // Modify only first letter + typeCase = strParts[j].replace(/^./, function (m) { + // 1 = uppercase, 0 = lowercase + return caseBit ? m.toLocaleUpperCase() : m.toLocaleLowerCase(); + }); + } + mixedTypeCaseStr = typeCase + mixedTypeCaseStr; // Shift bitmask to the next higher bit - bitmask *= 2; + bitmask *= base; } - // Push uppercase first - if (params.titleSearchCaseMatchType === 'full') comboArray.push(wholeWordCaseStr); - comboArray.push(firstLetterCaseStr); + comboArray.push(mixedTypeCaseStr); } return comboArray; } else { diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 8f982024e..e3f147301 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -157,7 +157,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], // We still have to remove duplicate string combinations because util.allCaseFirstLetters() can return some combinations // where uppercase and lowercase of the first "letter" are exactly the same, e.g. where prefix begins with punctuation // or currency signs, or potentially for languages without case - var prefixVariants = util.removeDuplicateStringsInSmallArray(util.allCaseFirstLetters(prefix)); + var prefixVariants = util.removeDuplicateStringsInSmallArray(util.allCaseFirstLetters(prefix, params.titleSearchCaseMatchType)); var dirEntries = []; function searchNextVariant() { if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { From ae7b228f103902b707a109566ca0febe6523d91b Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Fri, 1 May 2020 08:55:02 +0100 Subject: [PATCH 10/60] Make slider value update dynamically --- www/js/app.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/www/js/app.js b/www/js/app.js index 5318d9e65..7b7131b54 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -366,6 +366,9 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys }); document.getElementById('titleSearchRange').addEventListener('change', function(e) { settingsStore.setItem('maxSearchResultsSize', e.target.value, Infinity); + params.maxSearchResultSize = e.target.value; + }); + document.getElementById('titleSearchRange').addEventListener('input', function(e) { document.getElementById('titleSearchRangeVal').innerHTML = e.target.value; }); From a2417f737b8191d8a4ade89e98d62c656c63d69a Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Fri, 1 May 2020 10:47:13 +0100 Subject: [PATCH 11/60] Beautify --- www/js/lib/util.js | 1 - www/js/lib/zimArchive.js | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index aea5416c9..a5d1879eb 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -94,7 +94,6 @@ define(['q'], function(Q) { * (without changing the order) * It is optimized for small arrays. * Source : http://codereview.stackexchange.com/questions/60128/removing-duplicates-from-an-array-quickly - * * @param {Array} array of String * @returns {Array} same array of Strings, without duplicates */ diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index e3f147301..d19709834 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -154,11 +154,13 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], */ ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback) { var that = this; - // We still have to remove duplicate string combinations because util.allCaseFirstLetters() can return some combinations - // where uppercase and lowercase of the first "letter" are exactly the same, e.g. where prefix begins with punctuation - // or currency signs, or potentially for languages without case - var prefixVariants = util.removeDuplicateStringsInSmallArray(util.allCaseFirstLetters(prefix, params.titleSearchCaseMatchType)); + // We have to remove duplicate string combinations because util.allCaseFirstLetters() can return some combinations + // where uppercase and lowercase combinations are exactly the same, e.g. where prefix begins with punctuation + // or currency signs, for languages without case, or where user-entered case duplicates calculated case + var prefixVariants = util.removeDuplicateStringsInSmallArray( + util.allCaseFirstLetters(prefix, params.titleSearchCaseMatchType)); var dirEntries = []; + function searchNextVariant() { if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { callback(dirEntries); From 829f7641fe7082caf80c3894c1c99db5af28a4fb Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Fri, 1 May 2020 10:52:50 +0100 Subject: [PATCH 12/60] Use plural consistently --- www/js/app.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 7b7131b54..52018be81 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -74,9 +74,9 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys params['titleSearchCaseMatchType'] = settingsStore.getItem('titleSearchCaseMatchType') || 'full'; document.querySelector('input[name="caseMatchType"][value="' + params.titleSearchCaseMatchType + '"]').checked = true; // Maximum number of article titles to return (range is 5 - 50, default 25) - params['maxSearchResultSize'] = settingsStore.getItem('maxSearchResultsSize') || 25; - document.getElementById('titleSearchRange').value = params.maxSearchResultSize; - document.getElementById('titleSearchRangeVal').innerHTML = params.maxSearchResultSize; + params['maxSearchResultsSize'] = settingsStore.getItem('maxSearchResultsSize') || 25; + document.getElementById('titleSearchRange').value = params.maxSearchResultsSize; + document.getElementById('titleSearchRangeVal').innerHTML = params.maxSearchResultsSize; // A global parameter that turns caching on or off and deletes the cache (it defaults to true unless explicitly turned off in UI) params['useCache'] = settingsStore.getItem('useCache') !== 'false'; // A parameter to set the app theme and, if necessary, the CSS theme for article content (defaults to 'light') @@ -366,7 +366,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys }); document.getElementById('titleSearchRange').addEventListener('change', function(e) { settingsStore.setItem('maxSearchResultsSize', e.target.value, Infinity); - params.maxSearchResultSize = e.target.value; + params.maxSearchResultsSize = e.target.value; }); document.getElementById('titleSearchRange').addEventListener('input', function(e) { document.getElementById('titleSearchRangeVal').innerHTML = e.target.value; @@ -974,7 +974,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys function searchDirEntriesFromPrefix(prefix) { if (selectedArchive !== null && selectedArchive.isReady()) { $('#activeContent').hide(); - selectedArchive.findDirEntriesWithPrefix(prefix.trim(), params.maxSearchResultSize, populateListOfArticles); + selectedArchive.findDirEntriesWithPrefix(prefix.trim(), params.maxSearchResultsSize, populateListOfArticles); } else { $('#searchingArticles').hide(); // We have to remove the focus from the search field, @@ -995,8 +995,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys var nbDirEntry = dirEntryArray ? dirEntryArray.length : 0; var message; - if (nbDirEntry >= params.maxSearchResultSize) { - message = 'First ' + params.maxSearchResultSize + ' articles below (refine your search).'; + if (nbDirEntry >= params.maxSearchResultsSize) { + message = 'First ' + params.maxSearchResultsSize + ' articles below (refine your search).'; } else { message = nbDirEntry + ' articles found.'; } @@ -1008,7 +1008,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys var articleListDiv = $('#articleList'); var articleListDivHtml = ''; - var listLength = dirEntryArray.length < params.maxSearchResultSize ? dirEntryArray.length : params.maxSearchResultSize; + var listLength = dirEntryArray.length < params.maxSearchResultsSize ? dirEntryArray.length : params.maxSearchResultsSize; for (var i = 0; i < listLength; i++) { var dirEntry = dirEntryArray[i]; var dirEntryStringId = uiUtil.htmlEscapeChars(dirEntry.toStringId()); From c61298cf089a88aca340addd252cd015d14b5a78 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 09:00:34 +0100 Subject: [PATCH 13/60] Add dynamic return of results --- www/js/app.js | 12 ++++++++---- www/js/lib/util.js | 8 ++++---- www/js/lib/zimArchive.js | 10 ++++++++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 52018be81..86cd4d937 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -985,12 +985,15 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } } - + // Allows the search to be cancelled if user clicks on a found title + params.cancelSearch = false; + /** * Display the list of articles with the given array of DirEntry * @param {Array} dirEntryArray The array of dirEntries returned from the binary search + * @param {Boolean} stillSearching A flag to indicate that the search is not complete */ - function populateListOfArticles(dirEntryArray) { + function populateListOfArticles(dirEntryArray, stillSearching) { var articleListHeaderMessageDiv = $('#articleListHeaderMessage'); var nbDirEntry = dirEntryArray ? dirEntryArray.length : 0; @@ -998,7 +1001,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys if (nbDirEntry >= params.maxSearchResultsSize) { message = 'First ' + params.maxSearchResultsSize + ' articles below (refine your search).'; } else { - message = nbDirEntry + ' articles found.'; + message = nbDirEntry + ' articles found' + (stillSearching ? ' (searching for more...)' : '.'); } if (nbDirEntry === 0) { message = 'No articles found.'; @@ -1019,10 +1022,11 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // We have to use mousedown below instead of click as otherwise the prefix blur event fires first // and prevents this event from firing; note that touch also triggers mousedown $('#articleList a').on('mousedown', function (e) { + params.cancelSearch = true; handleTitleClick(e); return false; }); - $('#searchingArticles').hide(); + if (!stillSearching) $('#searchingArticles').hide(); $('#articleListWithHeader').show(); } diff --git a/www/js/lib/util.js b/www/js/lib/util.js index a5d1879eb..a9527fac5 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -59,12 +59,12 @@ define(['q'], function(Q) { var numCombos = Math.pow(base, strParts.length); var typeCase, mixedTypeCaseStr, bitmask, caseBit; // Iterate through every possible combination, starting with (base ^ n) - 1 and decreasing; we go from high to low, - // because all uppercase (e.g. tertiary 2222) has lower Unicode value than all lowercase (0000) so will be found first + // because title case (e.g. tertiary 1111) is more common than all lowercase (0000) so will be found first for (var i = numCombos; i--;) { mixedTypeCaseStr = ''; bitmask = 1; - for (var j = strParts.length; j--;) { - // Get modulus of division (this is equivelent to bitwise AND for different bases) + for (var j = 0; j < strParts.length; j++) { + // Get modulus of division (this is equivalent to bitwise AND for different bases) // caseBit will be 0, 1 or 2 (latter only for 'full' case calcualation) caseBit = ~~(i / bitmask % base); if (caseBit === 2) { @@ -77,7 +77,7 @@ define(['q'], function(Q) { return caseBit ? m.toLocaleUpperCase() : m.toLocaleLowerCase(); }); } - mixedTypeCaseStr = typeCase + mixedTypeCaseStr; + mixedTypeCaseStr += typeCase; // Shift bitmask to the next higher bit bitmask *= base; } diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index d19709834..bcec90523 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -166,11 +166,17 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], callback(dirEntries); return; } + // Dynamically populate list of articles + if (dirEntries.length && !params.cancelSearch) callback(dirEntries, true); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, function (newDirEntries) { dirEntries.push.apply(dirEntries, newDirEntries); - searchNextVariant(); + if (!params.cancelSearch) { + searchNextVariant(); + } else { + params.cancelSearch = false; + } }); } searchNextVariant(); @@ -199,7 +205,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); - if (!title.indexOf(prefix) && dirEntry.namespace === "A") + if (~title.indexOf(prefix) && dirEntry.namespace === "A") dirEntries.push(dirEntry); return addDirEntries(index + 1); }); From 7d29369b6a3945dc0e2cc3fbf35b4667b7c7dc36 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 09:27:29 +0100 Subject: [PATCH 14/60] Optimize for fast return of results --- www/js/lib/zimArchive.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index bcec90523..7de0a53e3 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -158,7 +158,12 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], // where uppercase and lowercase combinations are exactly the same, e.g. where prefix begins with punctuation // or currency signs, for languages without case, or where user-entered case duplicates calculated case var prefixVariants = util.removeDuplicateStringsInSmallArray( - util.allCaseFirstLetters(prefix, params.titleSearchCaseMatchType)); + // Get basic combinations first for speed of returning results + util.allCaseFirstLetters(prefix).concat( + params.titleSearchCaseMatchType === 'full' ? + util.allCaseFirstLetters(prefix, params.titleSearchCaseMatchType) : [] + ) + ); var dirEntries = []; function searchNextVariant() { From c99a07f85491c817bc7c26d1c08924bc70ad2ea8 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 10:44:21 +0100 Subject: [PATCH 15/60] Update Unit Tests --- tests/tests.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 2d7cf4551..70def8225 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -109,10 +109,14 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], var testString2 = "Paris"; var testString3 = "le Couvre-chef Est sur le porte-manteaux"; var testString4 = "épée"; - assert.equal(util.ucFirstLetter(testString1), "Téléphone", "The first letter should be upper-case"); - assert.equal(util.lcFirstLetter(testString2), "paris", "The first letter should be lower-case"); - assert.equal(util.ucEveryFirstLetter(testString3), "Le Couvre-Chef Est Sur Le Porte-Manteaux", "The first letter of every word should be upper-case"); - assert.equal(util.ucFirstLetter(testString4), "Épée", "The first letter should be upper-case (with accent)"); + var testString5 = '“¡xριστός $Άνέστη!”'; + var testString6 = "Καλά Νερά Μαγνησίας"; + assert.equal(util.allCaseFirstLetters(testString1)[1], "Téléphone", "The first letter should be uppercase"); + assert.equal(util.allCaseFirstLetters(testString2)[2], "paris", "The first letter should be lowercase"); + assert.equal(util.allCaseFirstLetters(testString3)[1], "Le Couvre-Chef Est Sur Le Porte-Manteaux", "The first letter of every word should be uppercase"); + assert.equal(util.allCaseFirstLetters(testString4)[1], "Épée", "The first letter should be uppercase (with accent)"); + assert.equal(util.allCaseFirstLetters(testString5)[6], '“¡Xριστός $άνέστη!”', "First non-punctuation Unicode letter should be uppercase, second (with accent) lowercase"); + assert.equal(util.allCaseFirstLetters(testString6, "full")[1], "ΚΑΛΆ ΝΕΡΆ ΜΑΓΝΗΣΊΑΣ", "All Unicode letters should be uppercase"); }); QUnit.test("check removal of parameters in URL", function(assert) { var testUrl1 = "A/question.html"; From 03f85a5570910a0c17323b810f14c4f146430180 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 10:56:10 +0100 Subject: [PATCH 16/60] Correct accent to breath-mark in Modern Greek test --- tests/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 70def8225..e83e25162 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -109,13 +109,13 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], var testString2 = "Paris"; var testString3 = "le Couvre-chef Est sur le porte-manteaux"; var testString4 = "épée"; - var testString5 = '“¡xριστός $Άνέστη!”'; + var testString5 = '“¡xριστός $Ἀνέστη!”'; var testString6 = "Καλά Νερά Μαγνησίας"; assert.equal(util.allCaseFirstLetters(testString1)[1], "Téléphone", "The first letter should be uppercase"); assert.equal(util.allCaseFirstLetters(testString2)[2], "paris", "The first letter should be lowercase"); assert.equal(util.allCaseFirstLetters(testString3)[1], "Le Couvre-Chef Est Sur Le Porte-Manteaux", "The first letter of every word should be uppercase"); assert.equal(util.allCaseFirstLetters(testString4)[1], "Épée", "The first letter should be uppercase (with accent)"); - assert.equal(util.allCaseFirstLetters(testString5)[6], '“¡Xριστός $άνέστη!”', "First non-punctuation Unicode letter should be uppercase, second (with accent) lowercase"); + assert.equal(util.allCaseFirstLetters(testString5)[5], '“¡Xριστός $ἀνέστη!”', "First non-punctuation Unicode letter should be uppercase, second (with breath mark) lowercase"); assert.equal(util.allCaseFirstLetters(testString6, "full")[1], "ΚΑΛΆ ΝΕΡΆ ΜΑΓΝΗΣΊΑΣ", "All Unicode letters should be uppercase"); }); QUnit.test("check removal of parameters in URL", function(assert) { From d8d960a1fd24da2934ddc120be7ce3d7e9036460 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 12:06:54 +0100 Subject: [PATCH 17/60] Provide global params object for tests --- tests/init.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/init.js b/tests/init.js index eef8c2483..da9c5e5e2 100644 --- a/tests/init.js +++ b/tests/init.js @@ -22,6 +22,9 @@ */ 'use strict'; +// Define global params +var params = {}; + require.config({ baseUrl: 'www/js/lib', paths: { From 69e5ad924cd6b29ad2525e0ffb4dcf46f36a1d7f Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 12:38:03 +0100 Subject: [PATCH 18/60] Increase assertion count --- tests/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index e83e25162..5769208ac 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -192,8 +192,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], localZimArchive.findDirEntriesWithPrefix('a', 5, callbackFunction); }); QUnit.test("check findDirEntriesWithPrefix 'blues brothers'", function(assert) { - var done = assert.async(); - assert.expect(2); + var done = assert.async(3); + assert.expect(6); var callbackFunction = function(dirEntryList) { assert.ok(dirEntryList && dirEntryList.length === 3, "Article list with 3 result"); var firstDirEntry = dirEntryList[0]; From 676e63a55ecb1df1fd8be03fc13062827ad4cb7a Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 14:08:17 +0100 Subject: [PATCH 19/60] Improve messaging --- www/js/app.js | 2 +- www/js/lib/zimArchive.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 86cd4d937..5c4510997 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -1004,7 +1004,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys message = nbDirEntry + ' articles found' + (stillSearching ? ' (searching for more...)' : '.'); } if (nbDirEntry === 0) { - message = 'No articles found.'; + message = stillSearching ? 'Searching...' : 'No articles found.'; } articleListHeaderMessageDiv.html(message); diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 7de0a53e3..fcf346e13 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -172,7 +172,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], return; } // Dynamically populate list of articles - if (dirEntries.length && !params.cancelSearch) callback(dirEntries, true); + if (!params.cancelSearch) callback(dirEntries, true); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, function (newDirEntries) { From c75c3a2cc6da49db212f36cc042d9ba7b1f2a761 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 14:56:03 +0100 Subject: [PATCH 20/60] Demo of granular progressive search --- demos/progressive_search.gif | Bin 0 -> 305593 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/progressive_search.gif diff --git a/demos/progressive_search.gif b/demos/progressive_search.gif new file mode 100644 index 0000000000000000000000000000000000000000..c1afe85a453b35f76efffc61faa96588f346f63c GIT binary patch literal 305593 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 `d0x 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 z z4`#eJbsN_Pn{HPje)??`xy}r73;G|V71jr=bHM7t5A!l7#PZt z9FfpTc&``5EbKINtgv_tI0czuKTxB#3WqP0!}k^slmc=2X~-V^;2bmL9P4@iEH58~ zp(-k%{Z=%(hoMy8E#rWpi*}}|bn#s3H;u^nk{a$-cj_I&uL)Ny8*wL5wJ-y9DE;@P z!T0Ns@8?C|sn5!W{K^7N3lWf+z`I3nsTXyDd0EbtL23+Cb9F;J71Q^NnYTmo{fknN zSJBs(b`+mF0?!sI&mo6dMZasORF#bf--)$B*n06{hX;qd7R!SCYD+XCi)!sF$kcN5 zg!+yaX~dQDO_+4(oa1FDaDUhGWRLI^GIY8-_kbs`6lK5ulm+cVM1=b**U=#S}P6+1oL08kxVuNG2RP%C#y3pGZ#{ ziB;H!vuMQF#EoWz;X~l~alM{y>h^!hI0sa<;g%~-;>QQ{FR?YA&3k&@oS*&UzTEm7 ziOcLjV!Pa-{QgtRN;=c+q2n3XTUidnR8x?|U*yYafOQVbd%3~2L}#gBfvJ;bYv`f% zkj$pY9^+aAz`hf@3koRjsX)!1}g?tkj>3ps16BKg8~Ho4+a{A~$Ua zLmAzG@d}KsS~kdE$_s-fExu8vsq1)CrfX|><*V^pv>8W|20R)?f#S=+o?oz^w0$3| z%Rl-b-qGm#BYUG6*|GXdQApe}djAYLW^ANZYGK67%OEDV(e@Lfvf8yxn9M9oPt)HD- z_36m8+C6z5ClKi!9!^brQy8w?GKAu=apZ$lmG}(7-bphjCpsB_h0jS+`GuAO5>9dZ-&;08bEY~1>-yGSRA z0jw}PE4ZL>itpLj*20t6G8}fE^&ZXk${VlvyRyQ#i1k%t$NYGCu5?9LQ=H`fU+Ohm ztl3tqD?7PXb@NYCN7d@r>LU@Pi5gVcTRJ@!egD03Zv~?>ZLcZ}2td}{6fHf&yr_#G zw#b=3@IcaZ19`bFWb; z-O;DaL0EpD5x>%icxNGr{p9_XNrX~R&fye7_VO83%&QZw9Z`>HPYFJ-O^XGXn7t9an$s!brh~CscN!chLHz1ivB-v=P{b0!k8-YSAGP+K7TneF`Ae z>^-OXh`@$IN*+HYohlE%lFIeB!YW7)vLU&_YrTdJN|sRCaq<;b z{q{9VhL4t`#%v8)lO1YIu;X!N4od0OepFlyqRy`t}N(!%3{$IQ-Qpki<8r?#FU!~qnh33hOyS~XfMAZ{_ zp%Vt2s!mQup%p_t8|JkUFyKTRsntfy6(6S`Yx)%ioa*iCqbeB=hbx2|T$&q8NHZ)2 zP;^$JHNuMo80}1L%jZWOn#OF;a17~J*RSu*m^k%R;bL{Uj+55c`4-7czqkA2B>LXgT{9F})0Vg@h5?R%s zIFRzJ9oo&;Ywm97?cKf)d(@`tQA;_x%2-3SwN=09(^x@BW&LE8Zf{p zbTCvQEa44Lm%=x+a1IAd!L4$*#Dw+m5kZ_p3=3AnCVsJOQH(_uYf;29D=>_6d|Vkb zNW6pJOii~=+0K5BE1rcT=b6&^&xV$2 zpo25$vKIQ#j{a$)fwSn*Hd<41Qp(VX^N^xFy3<#R^lv8Z+Dc#LVieJskg#&;q-0t} zJTuxAKf@;qAs}iF{#li$%M5DYh&s2Vwu-4;oh+Griz=($Nvqkz={#L=(g@#-B~BtK5crEU|O=(O)r`%K&c zTQ(_KaI90Y^>E@f32b>|8h=S-4mlp7PSJ zd^auE?#ro?YW?KuJ?L9j?_6!RR)sriuo`%a3Qi=eM;%DNgN$odawwz;rRz80y3pDb z?Vv3s*h@kFdyrD%lV!zZdi@T7UxFeVxDWl#5a*u6Sxa%!S^VNXd6IlsWGiVaTO?0& zJhZ}o>$9C4acK6Mw-ddmM2#UlOE6f|b z?@2BCU5@VFq#GMfHWHGM6h3xp&Bg#eyR`6?C6Jt>oY{}s8m1n>LX052tU?loSLWuY0E*tY~B>m4X|F&(~+pfu) z)QXcVU%)H{XG96rsK(Ls-+GuGiwq$55uCDo+s2jKz9gVWbVp0{1p5)-sl{9Z${$tH zpIZLdUxwkIR1nCM^vFs48+`~#$@NLC#0ljI8>Sr$k1R+GW(I8Z9E;E(QW%KheW2*g z2hS|XzA0V@cHDbloe0_#366ycwipW9oMt$ivTy{8456~YNRr427uE;!Sst^@9IORJ zl2o6$CBVlZ%j|_9#304c=p6B_h8bp|X{-unETO;Mq4PZx`kTL4QF;_13&O~1FbC>Y3$o?mn=B&2K;S8w z93VDR6pFcYhNQmDn)>JHp#Vlf0zD31$w8wY+TLoraBu*orxE;~lNTbwV z*74vm%0~R9NCjSu&8-&qa$Ku7s7`g!eK$qpCA$tAvTvGJ`W-$ zBKo-`o6t!7%?4~xWKSAOWCY`n^dv_Tn@4IM^$}lCdZ4WU9kS7#ju_t&t<#$llt1;b#T;&r0Lm}BTcWseNSp>QT*ree0Z2JC5NY04vHVw7Zh z1!anbWqw6pI*e8pNY3=)s~y|gnT=ceBk2i+`m7{UR*g`UpVdtbCzc&_%E&`#jcgu8 zC$iyskex$x9YA8ER3aRDdWYHlrZ>i93DuWAU6w+QV<7FLe0o}NcExapMRBH5DfVaI z{U=uhC|C?ADp93@rW}H9g@S$sg9;Mw{K|1Y=z-E_4b3EW)g<};+~gc-W5;Re&_$?L zOsH2>sD=7Vb(*LMqG(pAXjiZ(jNT|5$tYIPC|B4hj{fKu>F8DP=vMeBkREAOacB{F zD0_iuf;}dZMk)IUsdMNVINh5#)}oYd=?771RS>CG7%7*IDF}HfRe)($h$)$_X#|<+ zRG=wVs41Jy=_e_v6)~xRg=Kz0DV_Ey=D4X;!0A=Ush<|A`2ebhSm{CODS`2+p+4#i z*=Zr+>4iBd1Boc4W@_{xDpUw6Ug)Q$hN|jt>Qi`XRS>GErfTYts#BOMRiLV>#;WD8 zYE!uCRKTjN=Bn#R>LgKWh%xGj>8h{>53MqVtx5&14y*pMs!g#j#j!?3vM#H%l1#HI z#j`?1v`(wGmP@rJ#kD>~wr;Dqf=jpV#J4&{xQ?s377wpts%m{DepV)^t}DGlQ@c89 z{V6I~W)+v!tG}8|x!T0JHU&KWtHGK~R~D4M#w&61(7`^e$RsR8Ei9Jir#m9y$$_mHGvIWIjDhs)5%El}e-K(#zn9J4?zRIl5R>jIr zM9C_}$?mMshDFad#Lp&0&_$B;zltT*Zmn@NEdU(t zP9!bYj_rI|5P-pJ#mei&k}ca(h1Y_uO^9vV&i<`UT5U;TEuZx(-R>#JIMl>h9xuW$iAn@iuS0Ca-WwFZEKd^)?vxX7BNCuf27z_vSA6P8{(P-t>;I zxR$Tro$n#0uli~$`xc`6+9dqOue8oDP1bLS-Y@ z{_olZaFY)3r7F}#qFO%!TZwk$P>yD-{w3#x)LPgfO*Ljo13PfqKyaRB?Vd6mkN`es$2 z8xIf1x&ceOHHHUQh!6iTwFdFT4sqUUEm&+ESpr3YR)q|sCJjsH7-unYXdfG2$rf|5 z$e?hgO7P1LmD^=p170u&%O)^#a9AvGaO_~DKrw{OF&&$W9sep32dfc-;9$VvMWQhi z&#-9L@F2Uf&!urnVu>OzGPyLe&Ehf6ipA0aM$_@k)4?Zh{!Z12O+*B;Cc_8RUEtK^ z#z{OQNw5Ua;0xMejnyPdC0FJC_nGFYg{OC5J!@SSyv^52khjhV9GZj~7# zUay#8X&&F^W#?ZMOY4zcbZT90M$Gz!^W%A*4u57LnKA8^-aB*64YMBRk>)e@AVRd> z;q`Mq%dqfD^j_ki{~9!LSo4u# zv+6>H{yhx;iSz=_B`97R1Tvoi-ljz-pbIy#lk_154rBz*qfbzvAM*+_v*V%UV3TO{ zO!J!t5+4HkG*J7EP)GjRBS&qjP)j31h6}zL3=-s}0bv2&AdHape-Pv*ddUwqXIaxp zON%vAB;iJ4GGk|T5f(OJ|MgF|b#T13mc=#fs)dv!uwiUrV<&Zg6y`?KvUGBxW4PmB zPevQw3-=0FgpG6$hv@5*|XpC6|7JzI9jVD_FVuHHuSE(;7JGTn+uBjkG;V(KN|Na6g|cvG3UObl z_-=ASR3vKZVsi50Xk+mt*5EW7^Cz|4*d0QiI z?=}`!cYwEd$^N|eqH1>WlE`1AHAD(bI^wsBRCqh`w{4$c&l%%@yGc6l$B74aLCXYf zPj_NIWoqj7jf*$At$282xVUKezJ~D%b9RYfV~FGOW>WQYJ2#PxWG1t5V@ut2E45O_ zT}Zklls6(&nB*a!Hv;N-gZDO!@GyG=d8G)s}^Cm{Yi&qvV;Rd6uYo@3Q&tE;eRCZ;$&KTYekCbYvQ<6)Y2Bl@9t zOfoBaxbylv_U5kx`$3y6^zv?e(@em5`M5g-b2>X~JZIWTw|`G(dJ=S%n{nAdjqK6) zO$@Uziw(Rjc6sXbjvGY4BjK&{c!0m>i;lXwqn5DWEwN|rao^ITUwkJ?`n%WCpo2Ut zW<26@HS>nig$~~(zx*)8Jcpw%Dv{`n<9sdYJdqc1&%0=R0{t@y zeX$og(xPZ($le#e;rD$;$SvUeDcUod z+Ase4w*Bcwugq6AigD(btO>aV`6 zwm#CmKJ2Ti?C&1!*M8tjenP+f*KfVY4^uJ zna;n(*1!F8DgLXi{_j6P01!BkU_pZi5hhf)kYPiI4)oY*lWOq(}x=G3{9XHTC$fd&;ilxR_-N0BDg*-@s% zno32MWI2`UNtaL$HjPLVYgeyd!G;w(mTXzGXVIoj$`qtphf=G?O?fq}R)}2P=GD8G zZ(qNE0S6X5cp%$}PX)u3E0-=~poH$z95NQLpeS2l@uDdw`NM4+Jb?eu$ zXV-rG;dH;tna>?C7W%^8+R>+1zn*>jwA>wf?+ZS>)$wA>D?IO>fBt{}{{akeE05YD zjK2Du!z#ao_7l*-2O*45!r$O)NIt#}3@<^b7DTAQ2|)}|#1Tn6t3rk@+$%%oHdLy^ zgFY-##u;g>(MFL@Tqs4oR=lmnq+T>A#v6$&(#Ruc%u%5o^Xf6QACU^Opdpd0(#k8b zOi#&#m~_j@#h^S&N`k1&(#$i_Omnj>5$aN{FB!Y9E{e)j)6P5b%+o{y5Btod`dA9n zs4)wZPR~OTO;k~+*gVM1wBU?O(4q(xsLn+(%~aD(P2tIHNr|cyfJ>Gs-YoKv(Lp}9BWnQxx{5V#qko*}=?@w_=7Ztstq4Oys> znSSZ!wFyF?aIpy*TqMOALVTgk4a(f6wo(5|^_deupl94M2O4e7jh?*oj2htjV+-asgBiI*`eeB{N7e0CbZ0~A!1In&le9W{*-u=~-AI$IOp>{EF z!5J?|?e(jlnfmQ%wm8-yq<#Iv-b>1d6}A1(YW%ZI0pAzF%*3y0%%d3K5;nf;Ik0O4 z2td*P=epMgFn0O-Uiu8kz>y?SDOy9J`VKf52uhHKl%Zg4oEEzJ0qK4snch=&7Xa@G zqbmt!H0+Tk5>{%5xzG zl>~{~8aHT=7qW4NW&>I+>xD^KN^g?C6s6&$XUt(z?`pst7-Gl>%PsB_k=68zBL6bK z3(hHnkzAwQewa*To==RHqn_G8NkmYRvnE&^U?~mhOVqKGW~Un-I?Fc1@*yrHyJHBzgMSWb&>qvjqLH4Rs1F=mH^X0Esemcmze8L7&n~YmPK8 z*!&J7Mdiq!Kr$!x?589BYXEq}ZFS^=esQT>6kfN`W^?Cxn+@9A}`tYcvqh1ypWmJgu~B&tHB8cL;tZLwmN z?C>I+y~)z?u?S^sV$F(H(LPLNpljp~qtrwERZViq#9Ct;TS%GWQk}mOYGE4}TGyg2 zw!009U+HRC4pz^IWaRB_{)=itQjRrzk4;Dd+t;=Y3e>l1dS3~9<6nZx@$J-)~c8Be5Xkj;B+P-&} zkh2~_*0$d@o>FaZ41i~cyTJidn2quQu6-G}If7nQ#|@sQkp~jt;X01MJ+>(|F&t&2 zXqZPFW|4;}1>&@Muxnmbrh)^UWcZ?3zG3blPaO=ykLEbd0xo9mYI<1!JNL{rvG7mL ztY+-mHlA5sa(4gzd^8C&cXqm!@}Z4F+kh4KtC_{t~3K|lD_f(|r*RefYc?|LmAvyf?1>S&Qc zIwPm++N((!XEC!b(=}0cE_3~4?_}=TEKbg-otjUvKHH;`g>phH7ej&!n#PrdFrd$E z>vX@=&|>~Jui?$H(k{<}ZtV$Nb7H*%k}-Yf(_$M{NoFzX72qpw^SJrP>YDftbut!i zI=e{Mg>rUn1!rBvJ*m;fWwB;AmTvIYt=WpN4$0DXue(c5XpGlWVRw%A%U_~sFERQ_ z!X6#5w@3b6Urs!AKE+47?@W zkVrv5l_*P}(70D|)a7X|DmBunJr63A-W+ zx#KtA z@e|EX6N!QodB_t%@f6`r6o-NoQ_B=l@fD>^6@`Ko&&w5I@fN>J7K4HoKgNp9_eu(7seiW0w3E>ANg@0<;5R& z0w7UOAPI6I$HgFZ0wI}CAsKQarNtq00wU2*A}Mksi^U>w0wY&YBRO&;S;Zr70wk?b zBuR25ImIMx0wuvwC0TMN7sVxE0w&Xu1!;085yd870w;4q9eHvnQN<_zM*=8uLMVxH zDKW(;qhbx|CkYv337N7gb*~7yKg3cakn$#!axV1}N$N5q?$RdmaxVq5`qt7>+Op=}Qb@dVFd36X`Vu4l z5+(w(F)33-9`hn1^Cc#;GC4CsF4H11b0jviGf6W*KC>c1QzS;SG+C2BPLm>1b0b!> zHEB~lUUMR1QzK@xHhB{}Zc`$1Gb47hH;J=2elsG16C;MRIGGbTjuRr1^CFhBIjM7A z3bR)Z)ASN^N*1#^z4JAm^C6^;FOJG*FGgh0vu;1^%^j2o)g=6(SJzxhyM)rl^RH zD2r-MjYud$_ehHJ)I|~QiqI(V#wy}miAL*bkj!XR)##lRkC5V&Nf64XP;KXyG*ba) zQxBq3AL3IJ;v zdvxkx|Eha1E2uW>M6qhdj;c#HD`qb?Qt2qy{xXYWoz;Qb>*PYVVMewfO12?R*0I)1 zY-H#5fL5FW3&Qvc#agw=Y$@q-cE|QjXDL;)y!O4ij)OL~e{9rTnaSuztW}dXUY3?1 znwBA+7M@rO-Gm0VK$g&c40h5MQe8EL*o}c8=f|+kYKrS^j%%|9ugI*exr&u--^|k1 zYjWdOZs~Pk?A81dv{l+qy_`yDj@HD+424oG#{~CC?+a}7E3^_9?BP`AutXmt~|b;0d*m5ybFDTz7`$DY@A zd2Ct{wngQPa4C0#eD`&dw}&V#Rb%kGF## zw?Tn6uQqsCj}{^nZXtH}M?pw%6Zm`=SV|A_K+!QMbuuE1ZG-pcovJO4?vC4JHq?p^ zb>fvmL)dn-=d1enf4VJqu_fFlcZF4mZ2Ip%@pUu7|hM_~M?Za;P%gY|M8OfP{7zOuyKQ=M{@j z%7H)kTNwBvNX|j&Oj;GyjKlseb)@cuhM0OJ8ID6Zm!{R}-d54qR>ZGZ+m`<2* z*N_z$k=II*@ihP&5bh*P?j-MeP&b1K&y5&wTRm;x=q~Uaj+P3KW)AOzcUgLRnKm5n zdOXh|ZdrQ%4Y?GrZ2pv$3o?c~_y1y<0sF;EiNb}knOe{n0Ms`j*cVZ#HY|pAoZ+RM z&lw@o`A~`&D(cyt!v&tTc#%m)Q=X5FY1u237@xD*mB$N~+i(h}#rq2ED_%^12^v}S z8KKS64W%WT$C#aw2%;nUSSFep`MHrhdZc4co9T^tYB(uxn50>{B0d_Ww^*gSxTR?t z1`9+6DY_2NvZi?&C;ndgX+m0tdm5X6T8DyqsF8Xkiu$yUI;ou+BbGYYn)<1!I%RHp z8ew{>t9q+D#h^DVr~7cHxq7UB(5tHqtP4@B$$G67)2tT_ts7CT*?O)S*{x>|t}9Wl z>3Xe~h6cbwXaGB~1$(dqJD#&*rT2QI`}(g5yRjSFunl6K6We^FdhN7&vd6lz>93oA zP^d9`Ks6f)Ia>)m`?KLQw6}7!r?Rw7+dNU*EmgZKS-Z8p^R*E(w&9Ytx!Sh16Soy} zwspHXd7C{G+C782s)yS?eVaRh`?!fSx$m{OJH@%T+OA0tuRHMqsk^GJyMaM^x$$$m zlN!1`7rYfz{=AWzyt!GrWf{GPTD=v}yg}E!dm6qgkiET`zH8dPX%N3VTfg_)q;dMY z{hPD_oTmAk4J%rq51geFJSydzk(;~0Df7Y0Ql~AN!Xw(k5j4X4S;OU(!&4eB5gWvB zRK#PN#An*XL0iDF8mK*7q***uQT(!J+>mQL#wYy7#krBdi9BDS{Dqr5t)KkL<2K9Vdds;yWW7AE!92{3bi?Q3y)%?yqw9Q-b&Henu^E{F1+{u-E(Am7uU-{6r zJkb^YeM$kn76m=hPn*#X+R?up(k;EkyPNm+S;yIDmEEi>Vw6S#w0t`~tuXzoHJ!{k z{dEkEh1%Is1qg&+bj!vTEHbpHb{#7$b=CEz)zA9X(>&I<49##BPr+A$Nj&Q9sCn?{^|LK8}4klgYHIb-M}@Ls)p@Nxw8O&icA^G)>(xK%$loJmV#!eii*?_z*>4)I6|hPUwBS{2nTls?mQHzJdjKKu|8HLBF9RI6GodH_HHr7*904LV?efU#uDnmuba z>{qB;lVz7@{8BH`V(ZErTsdh_6d<|jiAs`=sW z**m+=PmeG-&cG!T7^rB_MC}3h9sv3w6yIqCj3(58w?+0FUJ>@@8*iqqRv(5fUAW&y z2k!OKfb(rfVu>c6h+>K=u87=oT(Q_xb=b{VmUb+5XViCV1s5M}bmhihg%2LK9!fd6 zCtFVmA~c^uKZUfUfdv}*8GsMXwIF}`E%wuItwkxHWgtRm;e;6qd60w_US!^qBNhhK zOHTT9B#d_6iD#aA?#U-oE+!>ipAN}LBaJq$h$B`D3Fle^9`h47|B+V0k(=3q-Iers26JIX?h-~9a0%6 zn)yxnX16D;nk8K6fyr3CL7AH_nYWsm8He9$SQ~}zt~;cxVm`}o!wx?T@runJ)vmG8 zN^2dpDOx)ewqGHJ(QhEN7o~0E7U^hLv9*iuhz9!<<$=C(Xzt7OCH5myrUp4FrzQ)m zYrtj#T=1C(vkMWrlkyyK(@sAPb<}QY_2R=9V|@OW#wcPmFN7#2?7hF+G6Z`puL4SD2} zPoC_=Mpazw)mYa!fSp_i<@Hrg)@h}erV_+n-bV{Y*v_d(M7ENmBJ8?K2sAb~yySYg zJAnaqwqQuN!>$^DxZS>JPyn8qDgp>3P~_mccZE4}!pXocdk}!x+j? zQT6+Y`}zdG_-XA#HT22-tnxhp0){mHX`r|4C92+~$x5gSz=velH%$GOVr4RJQ9-( zlOriliON)}5`Bdn$|3jENsN7xM4@!ZC|7AL)!}lNyzHef`_xLIyi!lGl-4Y_Q%i*0 z@|P&`j~cVsH)cw6n$)bOSArRo{$b{+n1wp#bdq_HWm>a2!cyTl&xy`-sxy<|3=k*9 z5EA95njTh4}2JKmSQeYyw4_c;cp^=655d+!LS-ZKy*Z3Q=2X(pgr6 zXFSt_P(&#-c@gcXM?VTubPCjl@4RT%GFq*T5;UYNZK+FNI=PYhWTkd8=#1vcoO&)4 zrabMbPk)Lmnf8RHFtX{iP`WXd0(GfOZK_l8B-AUF)TEsAoKl~P)vRiDtHOz@Lx{>E zqh1H6%h4%Exr)}bs&%dQn<&MmN>%w;b!uQ`t6lGk*N1u)A$3)eSTlyytz9**ge|OL zLAuw2^fg6)m1kgiIM~DfN_Mi8O=n`=S<$$Xg{;ak>tZVl+R%!Ym2SNpT;s~wfY+Y_gdwxuYdmwU>~m6mF>-Marc`^`388w3?A)$9cEzt(vP`{0H}_`Lwo z>{za{+6#+##LmqyaW`ySgLqf~Af_;hUkqc=n)q2LPH~4l++w=Mc*i`R?2MOH;{)GV zvpH6-f_seQBuD=A$I1$FZdHt9tC&^ERIV~t>v`nuIN7>Gj%$&zYvnMDd8t?~@Rp%W zWGTCN%xrG6Lz$ecE#DT+URJY?-Hhiv0~F54lCy2;Ow})wH_Li1w4r6l=VSS~wtzON zpyPY!NK5*ciMH6HwX@QqBA)bAU0qc5uI1gm=1 zw0wU2inxw<#ero4eS)%8j-m!byY$f>|`t3VZ(-Hv7>zKH7|SG)Yen8iTUg_ zNBhpz?zXq@bnR_syUyD_^|#NBZto6Qm}YkJtK%8#uJt$F^scvh%Z%SezdL^M2Hm{v z4e)?RCH~w69rv!w-D`m>eBn|d_?<>gYG_jh*$l6^#mS3r2pindydLz$KMwM?W?aJ? zhjqsx9rBc`+~GAXIlNE4X_dyW5j} z_UV3IT48tOzu%5`NyptpX*c%7rJeV{AA0X4>bu0JLUF+>KGK9Ik>R!dcWy6!@`Y}^ zmgiomx{LDel<&NfEkB*dlRNU}_PpuG4EpAX{@|of_~~D7<eIyS4rrn z9P0OS>=$!ap-c3!H>J@wNkM<0Vt*ay&r?1n(m$x87aAB%dg33Z;~xPiH3LY1 zlVpI&fq*!tfI4Rt{3049^hQ!Kfx}XPRum>12o?Fa9i|e3$l@j#cs?kYg0MAmCw6Jd z2X@RibRQEtW5YfA5*0UiMFkW^MEDdwI33#;F+<3M=3|6M7)UFK94*LnFX(jsU!hAZ z@iOn%6jr!EScrXL=oDPY9OCCRU}%C-Glpb1LuPm!Xt;c8*nD5XFPQNmZlXs9@<$I6 zMD)i+j_5==2trIECX;w7|HBtS#3LtUPJ_`$djl8U7d!+pMobihg%N@B(TJPa6*PfH zRRl(lD2r?}Jq`4Tpixc|!9pk_in^#Sn)rw?!xyudizUH7s#r%7ff5lh9(LpWq>wx@kd@&r5R{D<)H4qmiU{#ynXqlA;!-s3blvrXKP}zXzv6fhQlxB$^xacXG0TL(_ zJf=~UY6%&7IX)xtfqB!GxG^%F(UUW&BH&mY;;574$dkSnH?AQrx88BD`pcKL@iz6BN*&9nT zk9$F&WJ51ULND=GnDeODV)+ftRkbA z2z}+$lBKRha+|FJe_cWv1zC@w(V0U7M^n0_5p;<&^D1^Kk+5>4g|m+4gr%0D zrJ}MMj@m*X$wySwhha)0V=5eFIwNPQOp(bHjbbp6av`%)sP=Lx3p1yyvo4xSgE7;l zD-;n;^gtORryKez{mGuhX@PN+Js>1UENV1yxfhLkns;i9hDxO%8LX9Rl|RWTnfk1c zN~>UGhoFigqPiBOiXEmJPN>Qh+EPK#7%5bEe*m9WB;`$ZjdL8C! z5Lu^v0}(RKNHU`GGjNJBHWQ%2nuWOYIJinG3M(@I>7xOfGe=Q7a^o|r8L5Z*v(u`m zNAo5*YmA?2tVsHotr)R#sTw!Bp)tF#L#wec!m(cAvDN{y_JpoW0X9B5Hc8TeXOl#N zd97UOvUP|zS}3!>oeNh?Bd*(;JEsQLP-4(l3$%dm3$ zwC)-S+Jkb90ft{O+4JoaO%C~UDD^p07@VJ&3GCrsqD1=KP zv>QH$YpFkJAkjD_J4-&PI~l3sJ4g$;$04~^LAhsPxm`Q5XuG;Y8jsvMqq#Sb1Oy)j z#5kvkJDtivDwMu^>$(%!x5-MdjqNMo31rr>FJV@JCixq{yH0Xqqppxoq@D zZL6mZ^nscPl2sy%m6#-CWFRX%6#CR3ugOMm8nnR6yu0!;I!u%}oJV#f#K1wrQv179 z3&j87n9)nYZ)=LvOB$mHi~db&K~3brGzr2$Cc>pk!kgE@JoUI|+&jf^|1xq$7JZoQvt|iA;^{GOl)$(h3t)oEES3TVQq}2pyjCk3dyG@ z$x%VcEN024n#U1E#ACe4+S$p}vBu>Z%I7-Drwq&fl*&)>$%`Dzw`^Cl>=d=!${|a> zxD3oNrOPq0${*XyT>Hwwtjy9h%uK<{CR)PFEX`Qe%uDgiw%2~stj#}F%}R02hzEGv zEY2U*%}MdiQjvJ$tj>r9qBC`qC`O_q49#x5&h;Ep<%|^P92Mzo&;86$_Jls$p#J4vW(DDC8Bc1(5&pxq8!m1y-oma6axJe{LIlK%}gF$ z6d>&sB2CgOy-Oxd6e!&kD$UX}jY=*(6fn&cGELJvZAmsQ6ga&UI?dBVjf6@;11rK1 zNv+gN&D2T_)Jh@LL@m{bHqj1o)GE@{S*_JiofJ_$)nA=HJ`EPdthL8{xnPaf!By3K zrO**}(Z-z7uAJ6$P1R}KWMo~rX8p@_&DRYh)1M={ui&DhIw z*glciMlofLP1#ao*Kvl|;;Yw{&Dl?L*?pGTcdXaR+}WjV6_4E$kzEvvZQ8B9oolUF zZEaw0UDk2_?aQR?+PU2ns0}Tl9mu1t+riBzygewst;oPF+{q1Yu#H(7w}fi9e%QQ# z%1zyq$=rM0a?kB|;4FF7?cJez-MBru#$Cy_jm+PT-r)V&ibmd`Y~E*`-tj$f;Vs+w zMcaA(-q8u3YPFY1(~w=uFTKZsAh{ z;i4wtkjLGnci|uI6bOD03O*DJ4&o;+Q5oK98$Nm+?s_N=)c0Qtb zo`!OMhGEyq?gr`ODCwEG z>6LEiBnRh#uIGb3>LA|f$@l4(8R{pBd+b<$GKm~2x>UHn>gUtyIQi-&8tc)FKlaBe zeX4!5PJuD3wu>d7|7XEL%)NZl?7JRQrLKgCKH-_Z=r(A7tcioRUKDa@p$?3H_G%Qm zo+tg+zfObh)Gj%_4$r?X&%sX53@9cYh(zE{6ypA)?<>QErh(Bu93AL9>@kAkJ^mF3 z@9u$U?IC>Xk)G<49v6zcpUZhT^M~x;PKOtmu}gu6%%PRDuE`6p)=n;N4-e`QFX~?L zd{X$D6d#8fuev|XKl%Q5Xu!|x;?Iq<&F^4`$&{?PV*ByNbD^Qsg(KdYrH@IrC( z$)SfQDDymD?IvGvC=cr@FY7Vru8K%DjA%#2NE4Ar>({vS@SBNYkByZGlkahnM9D<_ zWA?H0!WDz`uBi60c#NC-8iNWEr?~d|w8j48r+Uha3gV1TO!a77HHZG^m_E?kJ{1Oo zj!$VY_p6b&p^sh!jQ2Z5%Fgih}_B=_6&i+|t^uf|vp>{>7EEI+a4B9w~x#M0N8Fp-qbzm(<+MKwfl(D?jixtK7zB)wsmpm~(-kCfdXKx)KA-cO3p z*zv;OBE%0600a&sSkT}>gb5WcOgO;dLx>S2PIM?xz(tH1HEz_%&?CYE9}OM=5J2R~ zf(8f}2w)Nc0Rk-nz(injCV>Pt0VG%{lb}kLHer_3DUbkwngV$SCCGDU(St)5GTqs; zC`_M2eGXKabKuggPm8{cX%lQwr(TT`Nct5g)TT$nCOn(c>RO`y1Ieo8sa7CRnRN$Z z6)IQf-m6H9cGXD}D%rMa7aK-d+45z~nKf_b+}ZPI(4j?-CSBU}Xp$iS-dY>azsRhbPrmcS3ok$Mm^<;h3Y+V#t{2^6 zYD5@qoJ*+$3{XiRnQFXGt^J-`(V+Ge5;DO0j#R3=^=SS~QAd;Pds4Zh`rEI_xR?U) zrv5Axb4)VJH1kX})AVe@)zr)^LpWyxphG%w8%;NqLOd-#`v~hxr!Qp`w4f|a3Y5#J zoa_=f>SVHVJ3z~m??;0e-EqI^4hoaNO_7w;$R@)S>`zFaY_v*6yDRi3{2sj$IPJiU z(M?)wwe?n9bJdm2%4XH|wK(D2uuj`Pv`kOaz`AKG#_S7J)cVursl0Ci|OXEiUG*MCWWp3Y?-M#DIk`GpTX{MWY`oV-xnpxL|GaMG; zjU>*KVi9qgslTO!boE77^_>#MYNbnBu(N?yxms17Y_Dy^o*bE>aBT(^F0%1e?oXBa zYdhtgx6-%NlP?u8R)C*&{Bg)5mwch9MVdO-sxiD8>x{HM30c#CnrW`=()N$>YRewF zWmcbB2w=fjx3=4r^L4Ujn`9Txb)*`n?kJR5McuD>KgH@(-Q6y{v7r&yI4+KnUUzcp ztGE98T>-#T>Zdc8ZF9~q@*H8VPpdap{z}6PHz${LSG}#g+h56a!i}aXe)$lnj&`^Y z|FJDf`NSzq(ck?1^1s6vpnTf`-nd$V00bn!McH8=Qrzdauq?%N_(O{Rz!Nkq!DliD zJca`=X&@3$P(+Q;rf`E(7 z3U=Vi)L%aMHjJgKCP6&nl#HmCB(}~V)6=4+Y(mAK3=xB4(F)(1C_&uNcB-K!x*ZpgVDdSr*CLEsj%qqiPu%K)1q;t?t3Kt$EgQ|P0V zxD3a?=oC;sF5wCAP!$$U?xZIEh$1JsU#!ENV4F;r;@9L)}rF*L~lK& zld_yk3i0?$U&Trzw7_9nZ;sKVW;LyOO>9z5k8R>iOO9EZ zWNK)c%=C~mj|I(aKJ9twWM@0w`A#|(lOf-%l-?K=PKo>xYk_3QAmM4SA|@Ap%iiNmL>J z{OFkKwMB}yRHiefX+;sLkR5qbr}fk+Ne9x?oc0tnCY2L8n<<*@kuRn-9Zf3#LQAGb zRjO0n=uH#iQ=$O1C|dr-Dp$9v)z1*MBI7iwN)y6Ts-{(~Yh`O&x0X~HZl$X}rE6W~ zO47N;NT>@D>i|$%C$l01t!^c3VGVoOmRc1db>%6L=3>`{`XsMc-K#?S`d2yy_8@~r zY-c_DSwqo=LZn{VG?1TTkG6l_1vTt#1u-S+bH-xe}Ufbj^ES z^rrVT)7`FVh3a1HW>soC?XIuDYt+t}b7D(XZ-4#!-}AEfr|@mBO?*q>`PvgD_r^Qun$A9xzl)o7xMxHoVLn??9MaVHBrW#fH7GYF(UN;oeoo zF_vstyo(tIH@L(CIq`~p{9_=?w8eJiu4;=5WBMZb#+S)4es@gF@&;MTQ>OAjhwS0^ zo|d6nPI8C49OC1S7>5teV}z@GW;CandPC-8m>cY1q(0NkYNm6Y?L06xJFUrOC9_iR z{AWN1`f+(~+MdPRXB|da(2HhtqtirarWu;VhyX=Ey1y2rq8)u{OlLYlkY1Xk#~kN# z&RNr=CUvPd8&ZX}*`&yg7^VAZX;a5q*0VkLi(bcxWxE)b%3%1(h zW_P>)Tke9LJEiG9HMre(+S5P2SOc53Jvr6*+nBeR7z`{Ff;g*vets zaubtW<~!%PHEGVUT)+9^FYkHLjSjh=|H|gc#W|04esriu9eYWqTF`aebSM*D>RabJ zuBeVVt2-IE9tc4PDsc7=gkZ@ak#pDG{&wpPxdXU%v(O#ufwQCC>}U7D@c$VOg!f}D?R==a8_wKx6Z0pR<#dtd(Z zU$6E*V)!I`^9C(wfe~(i;0#-=FAI(HQ#jhQzTld^*(*JPFg}-~KM0J#&v3l}Y>EBj zKmG&2wPQZfC_sxl!0-#MfpEO`69^J)!1$9u6r#w#zpBEcYhKNJkL zBkV#i6gC&+JQ&oe8Ek?7tFFqDz8v%n4-C24Q@{6OvjP((*0 z2r;}vr^`c1JVlMOL>bdCj^VHe*~D@xiM^{mf$#vx+dVA&DarFhQp`G3{Kf9uyuKqc zFWWFeSo#}w>GgWS4* z%tT}oNW~*aE<8wxjJiB4M6j#7tK&5Yi%5+$x+|l|ibOnJ8@i1g$(`#+g$ziG6g!M8 zGm>n{llwYcxkr(7Nt(nsm_$jCw7ZquzMAYwfxF3tOi4c5$wb>npFGMs1Ik*FNvx|z zf;k)px*G=x9HX?JNcyK|K}stdLW6rfii^E@BT6DH4IELUn`y<(fJ%h8%Dq94pUI3v zs>;rYpy}|DlXMNX)RaV0B&ZsbCbA@=%Sx^MC#9qnrWDIpBf7FQ68^MAoX$|ogUHKh zF-y*%N?i#hm=Y7o)QdN2FEcqKG$IYb9L#qrOgA}9hm^$82&f=xm&HuW=7~xrTAR20 zj0lP)3u#RV;-pj3O!_gT657q3=%l+ukoC|c+|-QGB+Yg*O*KJH(9p-yfSL0FrD-|| z$fTLyY)kto&dOL$2MHIAijd6|Pu57z2C)*{X{y>}&eG&ciSx>j151BHOl2cW(vU91l}b)k zlE2)FuxX;O&{SWslCnfp-hos{{T8a2Q#yrE`0P0O>?4pns?^L#9!i~_8Iblc&q=|V z?1)W$K~^%IRkc|cKV6BWD4_jOAT8-1?O+U-h}G==D3KB>qHxWYr0JaknTk?45G zrr=g{^$Ta+B~u+7@Ay{vp^Bvt3o^acaV1lYI!@hriPcfom2i{Tx-0-Oq4c)VPpJ22~L;YLZxj zsu$VVly%F-R0sf}mzv$3CtBIr%*-PSlOn-bwBZY@aEkF%*qPhatMWKsrB9Z#PinKg z^ibFMSSMGR8#x-9vQbpLn2Mfd6?8!#ZN0(1aV4YGjwRU`g)9G)^p8U$5dIPx!LX{4O4>5E+LoY!)VkC*z`Y(br*08R9bR{bcCU1AUV zfQsDR-{W0arbUSMYhICPUVw}&DHO^>!wdy3i02KB!Y$oqL802T-jBgvl+j+djSoGE<;{!=4h`t|8Zi}{ZaLcyZj!mE8#C72{kcI`318GT74Ya}98p)4;2?Az z7d~yzH02n&5o1;^VR|Lwwp3-5c$E3bSzSL(vGl?j6=!Z_jdhCoy zMhVF4fJycZMVgEBc?=2)k_)G*hOiHooN`}9Ta{by2K9-Qt6Y`Q2;s|o1RVh38HEx=^hGT zHIfpzE$9|9W@%JtNMvY8q?jniyNEuriRO%o7729hyNm{nto9TbtRj!qj%+69f#$$%sNM6D4`&7%A8B9Ew4ASUM(79z=YRKxaIzCP+LRTr1J>!*ea`>51^ zJzwW|qePlvLgwE4Ib^TCBd~4>25#tT6Ku=vlfXmd>P(2Hv3<)3Y(|QQ9Cj^^tv6iYp4;4D!#V=2D;dZt13G z>UL7sZ3-hw>d0JfG=^&Njqcv;SR@gZjvnN#mXrZ{jyuPdJDYosQ!fn~x4A^FHAWP@2vFr#} zy$NsRdg}f`*3P^4Gl>MGv1Nw6X6B3$FGw}J=hHCp6lc8^CveX+NB=HsC95ncW-<^D z%gw;Mx#Mje|FMe-@85O}fc|ms3vz;JKMM~(|DHQA4?y0k@vpq`Cda=3AaMz+-#}Fm zsTgJ~zdS7;h!Vs;&RfPP7CmzGl_a+e1Xl=nyz?}Vaw$)5Ev=Y-jdS_a@;MYkAThh^ ztG+0H>jPWG17Gs`biwF@KDZ`yMgMgFT5Sv;Mzr2N(~ETfrfo>iKLa0)KR*Z!_olsr z<_83ITL&;v7rkK&0B4-V7?*U~#_&DoMvufXOpn?y-1Pu}J~h8}XQwS=29j8}33RkR z(*8@}h(<^9gNtHUatH>;E9S{(A9v^?v}CTiW4}461w3+Zcjq#97U#EgXS#K-Ja@nM z+sZQq-?n*gwR%rId=Gfg8Zui%J80{7WczpE6L^O2tRX{3S~NF=H$a7t=7zuc!b;wT zn)nZ__*%z!kXI{>FDZ_9!*DOkkWYE48hHzO^~v*em5+IpqxGM1+8X**PCWUslzE;{ zESd)roA(}^k42qN%$`5`neRop)Wnhp*64(Jq>uXM{P}eZ$|_dLqQ6h6-+Fjr`3P}& zk!W_VAA7{5`lW9Tu>T0LCwsOpX0s3a%o%z(%lfHpd%I6$rHA{fk$Zf6`iH!G{=f$& zulL4pA4tDf&A?CmIvV^}Z2Fu(d|_35$#)^fM@GjdddSD($>02`d;4C!d8k!)x@ULJ zFa0(1{6f3@xzBv^F@4vsp1l8jp$~m}m-M{5eFS{@b9#N=kDS;~{lag^BFBBS^E;^T zedPa@%C|?=@B1+i`{Pf3>2E#MkF@5;MBPXH>EHf?s{T&9eq-{9vs-q<3qP_uyS3+j z^@ot zb{GK8t>=}35~7%*iYv0%qIDE*WZ`BQil*U)s2OMwPayJyUULURXQGTQ5?Q2?MYpN^}$}YF^0vxcw15-qAL-t07uTi+>x^8Fx5*)F_6L)JcLkL5r z@Brx==Ws^tQXI0#BeQDpLKxenF~_HQj1kBr!yL2BcAAV3%5ka8Fsd!f1@X*3106J( zd{$_!tt*?xvqdip-L%tB%U83{Gb)VqUrOUNHPl;k-F0qK-wapI`r^1!zYmA)wc2a5 zofg+*W0&^P4<*3o&B-ac@ti^;qww5Bixe8-51sc4?Y_K03ZOV z0R$wF_DYvmz8mM7A09fzd)wAG*^h%7xkvQ@%PzX}Ta#X!>H4DXoA48{zPm%mH;<6+*WYe=>%0@-dqco? zFVg3e9Z!(~<^!<)^YcR;J#EuBO!ulSU0ysx2pms)49On&C?`GvQlxhlLf`cqf`A10 zk1YyZ$OA8j5cu^3f*7P92RCIu@KjA_m8xDtm}U~%b&q!OYaRg0SHKN61f z!?sMYAuTi@S#sFHA9^rxP2yV!{r0z%1kPouTiy5u2s_v{4}~v0V3&M&J}5TuiV<9k z6)DKPEOw-eKpf+tKB%7}`i+DPF`-HR`qwyB-QZMxc@McSzz=f0c7{O%-yhsvfH5pQ;C4#UGN~B zq?{|gm&@&m@^@JD;^dksyWYW*hpp`AE8|Ddi-Com3z20Ly?4-fV&s=@WMvb9x5MHo z)O#$f=L(s*(8Xkwg6<4x3laWE&wOe#rM%&$X7IPOaBgdyP86U5ANj}@z7Lib{3q;q zxDZa_6nDlnDL!eq&y(gzW+tzZQY7{IiZ+-CQnXH$st?8Z$kq zC`mt>m0SmTWHXz{Q5_EHm)H!eXCE5Ftt=SG33hN-cZ|X7c6Y^Mj!cV5#oPRut!}`D zB5kqSIvg!P$hX9N6y zVBVnaMojI4ucgejI`d1p-N={pZ+Mt|qDgt(RhshHrxwrZvV;5_ix>4fevY6Oi*3*? zavYMvcK3OuOXco?T;MA&d5#OKN8sHX;W}4~!i~jnzB*i-GEt#}X9+(*gOu0ihGlEb z`eR!DJE{6A%W*raAXWm3uaI~cCrea#>1 z1*uPd>YKCq!#Aq$Y485NTYFa6ev-ELC3wGfP1-6l`1|`06Wb>Y?g@(SEzJ^0OGXn+B@j zN^l^~c%Zs~VCsnAtLWM29ZCDh-U{jjlObl8N6H;LnPKOh|#f#j!4=BNgfeOk)DBTe#THrXUi z;N&|(L{AbWwZ$a4xFLqX;Y*&xQTj$vLgkn_<-sK7ek^59!sAXx{^eGR&QH!nP?}^i zq9j+6Wz2Y`On@atc41kv1#JnX;q-94c;$8Y>=;Y-~>?KTk zro?NCL~O<*a3Uwb z2q#JqXGj>QRwie3O3QMdM00|~bIzu8YA4OyX1!EpcwD7WLg#jpCu?>mRputB?ItSr zrXQB)d%g>GnuK+J1a`vbeS(X8mIQrzgni=Ye@2Ubk_3PLc7%Td=z#)@fQ|%#a)f~* z=!3qBf{Fx#ZiItE=!JTUgoXr#YJ`Pi=!Y_jhJpl#W`u`==!urmd0xzSipP4&VtY~| zipnUWi0DU5~#kkshg% zQt6V$Wi-wuYC`Fj5~+%w42$xIi^?U8sv?(~X_55kU0mrlW~pqR>6;EsY-Xoou4y@v zDJ{Zjo(hYX+61j%(DMv7AMK~!*WLb4J+v>F6 zL>y}5`CIyggml>jYw5s~#*bWhu0)j-Lx=-?P>hiTj1>ve$_)rD)ldlFVdkt$w z6stoVYe+O3(Q%lzW`wh9Dzrx0t^O5xodvlakGXEEU3Du)d}~95>!+F+@nqJeVyfP4 z>bgo^yWZNnc30cYE49_@McgYxj@RCwT79$Caj7rtVJ~J zLOkq8Fqt}m5+yy;F-;uu@sP8cU-sGRz+MqF)z*gz)c8CZ?!?kA)l$snlJUjeu=Nr) zWm5PE)}>x6_I<2q^67X!p?nz;Rvsr4nf_Djq!WUjp6>xvw#w7kaTG(zD#rd<*z(jn zd2NNs7L*y3lF1zNff(o6AfjcMf|U$R=wUuE_&e(SBSrJcJ#a3Kh9=zq6gf&#;URCdD6{Ja&-5LPcc9_N87{@J{ z{{1bgKCP*4W}UiYn^tW|%$44j80R(_yRjN$_3Px0mUA7OYOPh{Lf?sj1^KO4V+pVF zg&Qx;8MikKJD#-L~sSurPUY)p_hYk5_VB8@d_-3fvVaT zZR@dV-(sDu{`GIaaqrJ~Z)ngiJ_@QndfWKu7Z&lC01NDb*^$8o zEZJgIzfo_Bjhv?@0EG3E=cW%H-P47YZt?6bXWdW^jqu71@W>RfLx69|LhSC;*jC(I zoMrE;bq=A;?EV^-qZJuxZE!;Mt(;tHbXnP7WZXKd|PP2&Va#dyDc5Pu^lAquOvTL{@$`B^U-T5Zoj2q z^ln7Hk+Kd=>>FE_Fq?AIpz=bfGAQy-PqiC~M4~ZZJk?{ohY3h`YE2wVbbZcbK8p8>6UUl)95^x&H)D` zA)h4SZF46bo-w=L%?fntIi5iq6&q9D@mgM!iInDXv6Z1MswHvgopGkFGt9L#Pq!0E z%S|06;ZELJd3zwkw*n^q{mt;&W6x zjRhvQ4oXdc&@=tnbM30MWfr0HDHR`2whBrOL0tA5W;OypwqeIi4T5%PW8~9%fL=q% zX{U5*S7c`slxMrPK`!?FH1%1z&IWXEt|r zlf`qFwo=lzV-w~oTlaU*#9$ZpZG(4t%Y=CUHb-`MKAU%Ys|0!{_agN*bGvsuOHFKN zw^eR8aQ?41WY_n9n*??vHxTZ(dNZbX19*ZbNNk1xbWh6EF1Lb9_(;GvfkXIwPk4s& zAaLY2couj`PPdk7_=rDDUUztlUU-PRDT%W(5 zjoWyI$GCE1xQ`P#kn6aRtGM_QxqBNqFYfq(v-gr`c$4eqlT&6EOZk-dHVDOcZw+~t zvpAKjr#1i+MehxoMjDnFDy5WA>WEW}CZteZ#qF%Xx9qd7ZcSoojcVJLjJB zd3pP}egpb-#>P+%x`yL8V|O{4CAp$6`h+*SZ$Em&MLK;?x{wyShaY-D6nJucWe7ze>hWKd2~Sgw}ZQ~ zw^VwAII7FVxubh^hx=@Edxd&?yc74lNB6i>ExhBqbE~^vu{*h!xw)_UzvHLAKX|i4 zxnuY{!iToPn@YWR=)FVyWJ~<5P<)A6{KW@$#v=>A3+2Om{9S`Qx`@2(l6=XN^vUN7 z!2$%vCVHx%3nLt+jq~q*ueMx`@t(c zavHsK2R%*7tGaTebZ_^&I75=e|^?7y_x;ICvrWgczxN=YuLkl!OJ|< zyS-|{y|u6XL$rO}pX%LvdD8R!-}*hI=Y0w7J!i~ySg(byJ_ulQM#e%Cum*lIPP?sF z``;J-8XbPK+L@&yudBAUB`K3993@GyQ{h@LJ}YA4@B;i-h{FRJnHhUmfmht@u>-+njdzDIzZvdY@_ zqVwhy^aCs2(&e-<@*6lqeWOPMxx`V^|q0{{x>BpMZ~ z!2w&jcJ=xd?AC$;$d)yG7VX)mRc9VJa22V-fkI!NJO~kh&A0$$VthFlW6+8`p%Tuj zQ?OIR1rs0ksF0vQxHA`%Y`nCxec)ibZF6|NtgaSm2Jz(ri+Gk{hI68w6kdo zSgX_R>Y{Z$Lxzk}u5QbGSO1-S*fxaSiaj*afbg?>xBM!&ki_IP8nHpUKH^Y9=`s|sFB6L-vAPqDENH)p@Iq)xDTDM-%ZYF_NXH}x zWUj{Ux?JtM@X9n2L>7JIt4jz|Vo1Y=cq|ge9T6lEL;**{kfA&OB&g4auH(y1;n-W0 z(MCT)Z9PY4dXLiB0GJO`+nh>`rQEOzFQb7Bt5Ux&{=o!pAq5j;vQ$3}3Q@%uiCSzw zEcFUW)eTiNH9-*(@~qZ_UIy^dVscnuRq-ps|e$aYPg(jv|T+~`~jH;Q*aVE2_% z+H&1B^uKV~O^IEK5`Hx@X!(uzO-VK0m}5w1Qj}u=Dy=lWOlhmHB~POYPRT(3wew{v zZTt|yTO(SKu?6=tK&BIk?Kjzs*qoVAdl|dgML8=oj!>3m#ujD)iQN<6=^D~MA;+sSFdUU5dhtleh zU4MN%k5z-cqmd~s+2piP?)1K>+zwAL)iX01;_EoC46mOXpSB_+D+9Gbcw;3Tr7g4O z4`zOoFP+BefgY?O1nP}-`w1Cu&_$=8$37#>xAvT)#8f{T{`ND*>st8rp0oP%+4mM} z>l>e4$_F+KZL4MBTboS^m_QE+26<8|UH$knK4RHOFZjz~bTCK}4SJA+NrH&-XjeiL zhDLTQ0U5_^_a5BkPA!|lP4A%Nxe@+0#6NH2UQY6pIpZw|IrCdyM~rkC2z3xk)5}h^ zY!XEBF>ZfDoDf_fgcl#JPkBcaQx&=PGz1DMe;5i|(AsCP|Lw0aMvPVKsCPBPk%@B- z6qffK!mEOT5NB-^3SgXgLB_Rhdh;V46B{B(L$a?jQ9R)y83~mXl4OM&YoU8y2t)eF z&_0oz3Cmv6v!Uosk$Wp79Tns^P|cBqLb)Gv6iFB%j)_@+d>5FYJgRvAT__ZFJg94nS=S{ zDPI*xQc}s6GV&we90$E5>Hd(A;Z&t28(B|#V&st{p{JuJ37bk zH#fZI@?;Xk1Suz%44oAm{jw3{C=H4P)8;ML$h;iEg^edFN%jsUz?JZ1UCpZ+GRdf< zonW(n6fDUf1tZPAq|_lN>ETX>`9=aV4yU%dN-|9)Pa(4u!A#@~S9f}wyG1&=Tva|-#bGp$Ygb8ZI_?J^9c4ucT znn<_Y%15e}OI8=zllTb2MYictlrueQMeoH@Ue5I(HtXJD7Yf(wNfwWSwUR6i2-76~ zRC|BDqjPwP*t(kU{-}pV*cPQmSb3iIX-{pURB3Bb(Uumgxz%kxKeEq8b=5Urg<)7n zQqYz0Cm}zp3p|4<(ZmAfp-4?hDlLoJm45NLs01P4@Tw;1IxU%`B?@zsN>X8t@tdi| zu4!T0ymP9qF*`LXG|Tos*e z>p||V0G{X=aeUaKcGj#M$xQ2WAwi^qiKdUrXQ2&%TD*BNAX zO$%Sz%C^D&53cRKSWICvPuRj8!SJFq44+E@6fGY1h;gA(mxMqwqQp~DQ=vO9#!)SP zWHgMPovhu;wzpZT<>}O(y4#(D^A>Vq1?^ zlGk?W8O7m4;@@(d>B{cRCgLk%vM`FXz||6FqowxL;s~O_v6@@cZcvX)8prmw5!>Md z5d&%3(pT;|%nytRpY+P!nl3rgY?`;U_ua0315nIAMKyclO{IYcmL`83Y}9VL@Nw_3 zT6X@a6`x}(=GodBOrQ!JqR!oGlQS~S99c7agzXh#XUfBpheCJVLEy%r??~sqVoZMRZ$qC<_lw)M@ z=V^IYUXH1l;}gVncK6dfEh3)fB-%MjR74-W%4J)AOELagp%UaIfdv^%o2O%+EOdEf z#nn#CHteRE{qCiKeuIuB3ZeB)uUREZX!Ip}{}x^>-189lsTUUrfs`W9A`n)^vi@G7 z!3Qxa6Arh06tJYLeL^ckOf_bM}mZGU@!-N za8Y(J+eQuui*N#6&>?)VIb@IqYr_UB0tb!IQ6LNbq|gdEh6Qfq7px>5k=7zUlA5#asTR2TQ0H9GBJiWvHn_77JJbbe-RiLi5Bn17BvhP&0-G` zq7Q?S8Jp1=pRtjKvE=H>6j5;jRj~n~Q5(0B8@o|bq>&dxqZ+L-6_;Wa=gj`RQ61Nj z9ow-fz_A#C>lm-m9JA3K?-3vKQ6G=35G^s-Jn$41Fc}YG8TZj34-z4R5gz|B37QY1%G4l&Z6#?c!7A+jI}k|bNwC0`N) zO_CZlk{neM09XMPD5J3-dn+EhY97f#C_(Zlqf#oT zvSX6+!j`h1nvx@v!Xsr4Dyb4I!%{3+!zURDCI5EHEG5*-86F)tG{ zixM(vM>2uQtJi}8w$CEtE(>%`;J=0S?*ONWl(>>o4KI2n9=aW9`(?0JLKl4*R_me;SlRIq_ zD3)JAU8+luhpxPxDky_x_Ym`_xbWv_jp~5aARP<#aN2u?zuK zQ5Tg_8`V)C6;dNLLj~0zxin6_6j2#bQa6=TJJnM^6;wmDM=4b)3H25Y)iX0yEk%`8 zTh&!x6;@*vR7v$JP1P7tbv0F$6=juId(~He6wf)GI zWN=kCvlTSm6<_mJU-y+?Cp9{^v^bCSIPJAH`_*6%7GV?CUE!4g<@I*x73PvPA{CZm zE7oE!wpSVU1s&FfAlC6Db|se;V@H-`{!7+m`BY<*kYg#yV?hvPZ&GAWR%U0GW^49I zQ}zpORUTWm246NeY!+yPR%nM-Msd~-b(Sf4)(L$!W{K8mpB8GPmO+iS7Lhh9m39mX z7V@N)YrEEKp_Xci(P{-0YxQtb3IJ`>R&CdIZNt_%-xh9R(Jk1PZtE7Sax-EDs&4l- zZQV9*{}ym1ac=pRZ|~MPgYs+%w{HD5a2wZg{cvyNR+qOUn^$7`3WTv^FVK zAlR1z4FU9PDQqNU6hek)_=KOLf-e|{O(TN~cV+#lgEjGYX*Yxc_$R!CgoT2tZa66( zm?M;!v|LyzCYWPrn1)5eiE|i>PXl~`cZ09>hjTHALHK!TvnVFQ&PqgvS9p(JIE9<| zh<6E!p~6H^hdr3sG_L+Qi}M&Oc6e{QxLm&&8538C&lf2+%cCkpbexKfTUdnwERK^c zkSNBl4E%< zGkJG=*sB1U9E9r>6=?P^8@ocDRAY$Tmv8JZ8;KIC_kAGVW!;*)PqgnK!nzokHbBQ$R)ZT=2` z_amMKdQJj*Z~m%o3BT!*V&kD z+NA%ktN*59&M%3KIipeO?~K{1y?UnAxI${W^IpWRaylZ$+MUIEpAq@1gW9i!I(&)R z%^KP#78oTa+NmRph@JY387u&p7^;QFz3kefm^iJ4#GsLwrDd3vFPnap#G{)b;7WJg^ZQ@P!^k_17NCe z$d^}G{)ZY&oS+4U=Q^Yxt*;+#vpM^p&-!!R3$1@S-JIK%_l&l=InY|WW$LmOTciW45dnSHcv9BYz>sv1XSd=^IqD2Rko^DRS8@h8YsY<$ppC+uQOS{2l zCum8A|E`$JX}X#Dy1^Q!D?Gdj9G%;n!y{6+Ewy)Lmw9&?#E6@?g*(4#6P{HfszZg| zlDWdwJB3HPz|$F-F?+M=n3+ZUm-G3hi6n_hxVkC4yljO*e{qB_sGo2O-bpJ97zY+KZaeN12+y5aoI!MvO-=9dFRjo$__K0VYi+pcRm ztAd6Dx!-?%XEI*k2OgRWK5bQa1!JJxOHjSU&O zN}Gyd{Nm@GhWljZHy+b_8l^%0ja|BhIeLZ{W~X&J>REc_*L|jA8n(+hlCORt^ql5n z+2+v}=Y3e`NrLBn-l>ISu~Yu$ux%&6xvOzq-penITbS&LoW@~=;#vNR^O=$DS##zE zoZB3q?f&lRy45KD>(kt`^I7pVzU(jg?7Q+X4;L-79dv&d)_b1eQG7KJdlHxZ@>73N zGC%EadF@BSun)W2O`oDkU(HTj67gO2cb|Zzxq1&C0bl8A|5*4v!qu}Mzn90PIA;zNz_X{%pFn?#bV;-* z%9srU1VGBPsne%Wqe`7hwW`&tShH%~dNO6vuPeE3%t^K^&7DEhsueI4EZCz|m5QB9 zx31m0c=PJr%eSvzh$!8H{oBy2VVr2!D(=}*-PS+3~Uuw%=fO}n;jyq{6C6kWP>UEM7qBW2C{w(;Z0lPh1&{B>^N z1$g&9{2RJT;W3H3ZqB{C_wV4ti>LS;xb*2}t6RsOz4-X|@Z-y$PoHpk-RIGhRS%tg z{r><4DByqu?sXq(`RRw)Y1S3sUx5%tDB*+@Rw&Vdpe3lFP5c4(poJiYDB_4Dc88&3 z8g6LXTn##SfOas(DC3MY)@b96IOeG1jy(40NG7S|l1w(~1L8vx`ic>S}w?9gCCZt z=bn7_>1SSX4%S(nH*twto_{8)=%S1^+EJiirKqK$pdsq$rI==_siKe;C8>&(I%esn zq?T&xsQ`8w+MtBi6slmOqAKgGwAN~ysxPtHs!j~9r<$$61}p5anc>>fryIWNR;+G}8B4zAuy6&p%TfauD?Y7)@%h9x9Rom*dUoq?Lx#*_*EVwEmt01{XWvlMI^wv8p zyU~eDD7>lJ>+in+lZvmq`tj?MxdA7v@WKQRtZ$tLx5U826jyBV#TaL-@x~l??D5AS zhb;2QB$sUR$tb6+^2#i??DESn$1L;AG}r!Y^UXNtth3Hbv`8>|5wnES&_ow)^wCHs zt@P4NH|_M(P)9BG)Kph(_0?Est@YMickT7pV23UC*kqS&_StBst#%VWKRju#{mIMl z+;rESY6)#~w(E*wwTQ6YfCn!4YzN@o;LpQrgb1}Gp0-MLc2G*}2yK_hiCx|EhZSaLKjG+u?IKvJi=z|Ifp$M5* zLKCiVASYZ%5E~OW8XED4NKB#<30OP#;ZTP=#9a@4C_x|&@gNS=UkjJW#V&gBi(qt| z4Kwt_3z#vAqMITWA!x-b5=3+*phVfAQ~(M9IYQ5=@dEVwVH<}?x;SpJk)RBvC`UQKN6IOZlBA?10f|XM z7V?Ch^rWvyNy}Q=@|MRl{-vNeL%K=!5d}~@V}musPvpK zSt-m|BBXgSL1r_z$<1zhQ%cYDR5YbYO*0PDkXXzeQndNacDnPO@YG%t4am#fO|y^Z zL}xmkx6V(-^Pd0>XgkBXs(RWJkonZ-K8dNtSqk)_5RE7;37RW|9@L!7Qz1heT11I@ z^rIkk5jHvJjWmb&z%FQn+P#wkCAW`&(F&8bdziawcAtE4rx=0Hp^ z5u$PwkvvVRQkN<{pN0#lK}9J55*QH%%Ce(O&8k+n>N=;ki>6U!<5WfXkP==Msa#E~ zTG#qGujUJ?Vb!Gm4pGpM9-g&JE@Z1-_sZ8Vx%GW<gQyX)l~Sx@H_O@1&Iqz_4eVqoX<1fcR#ckxtZG;5SkQJZu!1GXJ;_Rt zOB$7h4rQ%wce_~EY6iBkl`UxjU|W;ml()!DE>nG*8Q@A)xW5dhIgiOw-w}WS2(Xa> z2#|m^Z8y8V`)-dCKmY?M_q?EFE@qr-Qvl4CmA5@DtWrCq>vk7L1}%dmH&?ky)K`ac9L8#rw##D4ARxp7X3d9- z1Y;SYc)-{#u#K05fCLm-O-*KvjDfUe9DA9II<5?ltC*14#+SMsMiO~N9ODpQ`N&ab za-0Fo-5O;_YfBs3FbejS zLH_M+NNZccC=Ri@=ZpXYY9UUPZ7t7~Y#I{}&A^_<(x;(CMn-Ux{Hq|IApH*5LX zeipXvon=@Q`o8Z+q?8Z~kP;OIC1e@23aE6c2uO*DgtT;br*wCWbj}PjL)Xw2&S`G3=rGmrssb8dv_<8?JANx<8#a{B7z?YI z5Cm5QH6*SWkc?M#bryCdSI!xg+V!F|?EB(PbkyG*E*l6u{_wiPD0nokhAMfd?<_#i zhu&^mEa>7~~S*v^BJ`8rK!^axCt_|J=5y2OtVd||%)Q){? zNjqC|b{!Xjtp>iWn}1!@K*~oS*474LcRO<>S6rr{O_x_#I_|4CMzDg)-Z9LWbyc(( zF2E}+ssXXDy2Z}gc~RWCT*>uKlS{vi0o2=dWXSbniIY>0lhYdwsS=$>O8XKxx87F);jZ00wj_3kM-?d)03(3lQp zxrFU`P^x$$^~^&(%|!;RGEw?iZZU&r`+B%Ls^>v^zuDT7?b%{cS~gMcPi!p9cwBkd zw6I`j6@B-Qw(i_v9^X;+Jk~lRj~%)1n65IS$(H@T zi^sN)*V#bAIuPhn1Y~i9&^SY`y85ylzVv)Stas;*cTkLrKdJi?tHZ4&KW-A6`@DWU zDmr9~0rkVaf})oB`+>$h)&daInU{u#RyqVt0S(2j5!Oz{e8C}Jp4l0mj~hKTm2JN) znhnzU+br4tByxB5349Fcb9>I}2LgSPwRYZN^K8%$Y2pidLF+y^>|Ke_7~}KKvJEWv zHa?T(Hpln%<%0nGR{^T#0pg-M%(MnmS#}rR1?rK85nl^svJJ^)4V{F9)D7zBg9Fdm z8cZN=_0qbJ59{31bJ&vb+g|V{0Gh2uzbBIX`huT@I+ljk?#&e-%NCCbtBnhBcM!|D zz@Kle^%iaKjQ9mF`CAN`-27%k;u9nYbUbI{$`GqFs;j-$<_=cQEN69`>iN)Hvg_dO#*>GO9ygnrLTuwMS2o#K6O8F&n#z^t6*oIKF-axS*0 z>4ZX8@*xX3D+Tbq<(0x?3T>b^TrEc2$z3gJKc-MI_O-HpCBwDyVcla2U0DN9d9$xW z=AsPOaTJ=n4qXMUtiv{&*f($#YPeCkzmU5jOH3OYdWK|`eKX+*OTSq|3VSDfhKNxM zKyXexVWE!vvL~SClAh3=MnZn_;wEOBmLI}2*BQ22l!D1!o7un&nXR{B9NS@6?ynYA zKU`GT=^zqztf>1 z3ymK`Iv-WI0n*X=dmcPA342I0RtR^4)O$wMI6-G+33l8TwT7C+Q|Oc@jmiGBFKfa6 zOd#(+Q>b3S!9s$~`Y#I2h&Dlg2mYBtF{@=mCYUwIVgY6yj`}l&{y?x69&WYsZX9lR z|ARvH3Xk^2Y&MQiQ$F{x`@d5t7QG7Iz+yI=@Bcj988ZEOw7*#R6MJ|}p*RR7k*Fb{ z+jJ$BNg<#?)DR17x={tD5VA_t{tltMh+0bfO%G=BR8nz?x=V4Jo@_Fy=amt4)X-lL zDp5~|-1O#aPo=a$)H9(seXzphX;eNE4L5&LXf&eXj=&E;g}}5c*%FQSRDbxZw5L&n ze^DrTI&HH=(}TDlf%-D(bVG>Q-1xd&V8!mKHhtt?*+Cm27<-w-o`D$-JlB(y9dAiYyAu z#!2MQK{Qy#??T3VgvT)#I#Wx9Ysot=-oeVbFZ&J#w#}vvP z^i4)jsxJHqbp{@N{0=wT7f^rnIr3P|TcXL$m z6xupaV85HIMUku0EHzkyBSn2Yg|-fYpu72ILAmOSQbSPWZh>vbF@#p3cMDx9^0Y{# zhwJF}ihO1BwDAxsuvZ)!l&8ZgJ<_VWR}zE!c3nJ#+V7R7P~_{2OCx*Z_R4^=`Ja{B zkb}^@@}eMYzLB2vC=$5`f^^_0v~6?(y$7zLC@}Mp9-E;GNv)b+nyD-n{M8ln(p# z%#_8x;xaRr;`bZaWl%avl| zhT0c+UUdh7wfdBfF|ij~PbDfl8t~R&@n2Bi+HEvTWJ4&uSRta3=@^?pQN% zz>H2&f+5Ya>tEtAV@q;i=upSHH4HPp84QLm%5KDi5in>D=@dJe;Nqfi$qn{qR>ioT2T4H1T%+2zEG}Wxh~>z>3Rlg~cDvvB_7o zDtB&0!4BuSLn_+!resUmk`W>f8gtj@HaVU}KANDCp?X zx@{M10@aDC!W?b5UVu-L$nV$DV>f-};WIQ{`%Qw_AE6=eIac|DRyFKaOc#8Cx9gzO z0lS@Yp>j!F9^D&{-2uv1E-QDT2VvOVqL9i}J$Vdr6uSrMs$93}!c1VWsG18^n?CY~ zGxR_A5%N`A(OriNfg?z4{q;r10ladi75%ugl0)*EJGXLRtW^gzGt4SF$A+ z3W&=EUzdw2E|>LP&f2>Ev~isTh4Z4@^xiia=S|Fay!Q57Q~HJ#r3YQ8#}^< z)7JHVjPt`7H%40b4H}R0Ko4?+2j!9n6{+VXHqR>(p47G;d@3H-eLZggJsE5@_+mU{ zB;3XH-QW7UzX7@{Bi!FDxvPN)aA6B@lL+w85Ac%k z_wfzzLj(i>1A>+ULP!I@vIT}q1V-uyMgs$5ef{J0{S!%pl9vKg5rOFvL7DnN*%BJx zmi%&k1M^9P3)zB;C4x)!gUfw`!NA}O-yj$wxRNxadMUV;Eu>x|q)|Vl**ByG7}B;B z(t!x-0tWR+g!Zw84v>Zpu{o2Egi;=aQeFFciT~@BcVDUPzS4fTCn);LF!Gh@;4AaB zu$%m0EbqeZ;QBbRVfQM+I7Y&_4#K#v`G-H?566AIFOOX~Uu?KQMYzyN_|t=M;cF41 z{1Mx?0Wa+$wmwBj`bGT6jF4@K*qo1ebuMz_cH~>h$n{T=@BAXyG9xuwB3I`lKb(tN zxgGUMGHUr#l!0H=_sl5cmZ+uqDD!jCi?^e#B%>E_xusw9d}g#$OZ41)wA;Cu+1oK* zk})%%V*LCV&z$)Old1tOow-KHP56sRaU6=HQ5=WjXw)(|=I@Omr=RZh1^##e9Fvle zatH%lYYB)6DY^gCWb{8^QdtiIvZpeT&8)vN>6>&yLMm>pZec~hljP6i$4shK@6RZW zW71?ILQ+0FlY-4=TaS~`xL0I+3|hi#h| z+X9|RnPj1520{M37bKjZPL4`y?hSWn)j0QTC4P zYd9taPPvnv*HKW!{&t*<#*8bTzc?4|g=5lbpAr$?F-7Jm{TV;Dn^`viuQ{V;@J#w& zPev7$@Jy=vZ6430|B{Rz2crw|W=(f-Ogd<=_`icms}A?@$tVfOW(^^Y(Pk|vJ{cwF zUEQpw66g5w-$+JJg3;|xA=K)2moN$E&VM@?-9s9I*Y-xunmJLpVAL2jZo8O|!cI7z zGU+Lko-*kvlm4$|((-GrCrrv$Gky=pr0_|?XOOy|iJM;c;nS4Q_!@3$Zu-3unxd}e zs~^oV_t1mSp4qo;#=a~t4|_j0cSYQ;;qAIv)U$+H=4QV3k5%TNUdO42)piIAXNzd| zvBgV^{2gxV=BdpIOILXX5MQ~>vhYTQIHXtn>28?v(VVip-Jo*SZj{Z@JdRZR%$ckc zLn;>xgP{Fw6WfJ9$JRvjFx}IdmKE0%*CoN2-X9Z|RnMNReSQY3CaSis2^ind;f0S} z46!cHaay#`wx7#?YL}<1xe~o-zff6aSHxbmmgwTJG>bi`2&r1ntj2ubPC{1}R&5mi zgw3Aq+OHj|+AMwMxOzDm)3{Of!@x;s`o^Sv3r+G?GZ=T_u-dVMH+j1Y<+veo-Kj?z zm)-In?Y?44b{a5E-W|6&LVbAVJVKJZR}FSTo4YuVM_-@%Gbza6NP&&8?(9F20*(<* zVBrrPb^4dn7x;U>06x6}Fe?b-NP*z;JqE~s)}j0hDTIF%@gN{PFFYJ7-0_$63fG|| zS!dx+$#L@_b2`t>Y$hz4{OT7e{GMJ(5h&)i5@{(+13cBok2{o;C!{burw;f+;r>zv zTr~T8dNtqTN5rwvx?OUdUg1c=a;ZJwhiJRu@1!6L(|$`}b=SJ!gcLl;OjXO7SDF-Q zD5r$r72Av5>Cz$2yf$?S=9g88iX5Q$3MGyds+G4z8^82DWIZ8;*?1P;$`9i^Z_ngK zcU4#8(knS1HMxUCJ_j@_d7fgp+nM9ILuta7W_{ycMvO+&JU+dmZkY(t*xerpX*Ab6?oi$~ z=6fqiBPX1sT%-Nwm=rE4-HuY)lAzKc3Z*?I1zd&lloU?WtJC!AG`%`aul}d$RZ%ad6_;Ky-REyrru-6FnlR7h!r%Il%OboFzHqaezf;Y5G%;Cy@#zIXx6{*| zL>k6L@j|=aPgOh7yo?J^F4%Xbb6F*gf|gmb1qQtetn!{Y&A(5!8_H$cOAgUk{scZ4 z@krYH3U*pnp0sZrlCy-;kFQHK!+Li+Evp2_HxzK0)?|`Zt!d(>QepnsqKR$cS*Fzx z8i(0jra$$}PCWgv-Hg&fj(cWTgcV%f&JYm(Kh{ovQR;mk zY6;Gt8yssnUOWA{XZBf9*v;c?+Rgr!vR`YbU!Fc%hPE8w1|(`c>6x8)`Zk#&34l&H zSru^MFQpDKn=B*PB@i}(6#r7{vD_aU1KDw7r<0!9dpLvDZ*PC~%*qWjGe}|xMwDJXuQ$hc-%9qun2FKe|FL{t4;4~IvG1rU=1(eJpF_1r9v_J6QwTS zB*t{?>5tzUlzxU+>cl{Gk#j%5iLS?o??Wq;KuyV~5j2=fcflGEfjGP5W zC%cIuWkhmo_M;9H<2?J|iv`BHNVWbyyVEC{SNC_#d(vY$5xl28mVc2&r$7FUU*HdS zS_DA+KhV55clru7@UNP;^~&8dfU{|ow)dtC`i>X=fAm=B6>}5`NLv1^d80omy1k;v z$j2@Ge`#J7vx!Qt%j}x%$C{U3{3Yz+?*sn|3j~lT-yYv%`Q8V7V{sdI9eerrfxl=O z9~n#8FLxT;m}m|D)njqI{dTA$T^gr((Hr#yfohY-n%A!jt3-67dCUEMl8$>Uvmp_x zp_PZY9?ObNh{n!wkA>NckV56lwr#xaV`h*LUiQ={uw7P83X9(xB;=NBb z?_ahRr#+U_ZN=%f;&fZ_Z?~<8KIgiBqIoMiG@WqUio6BBzJpF9(8Hu3d5cf_D!QDb z9;TdKTM)S{(53NYCxIe=3Baw|6Y|tDy589EpYB?e`9$r@;@A%|ncKv|I; z-!(DzLz&il-%>f3^U>&`UZuyS?<$Rz_2>u3qjtdtj3#O!^h5K5R!}?RHN!U!9UD#7 zu;j{h{VoUG-Ug&p7_@9bGCEmLY+Fp^Y~;>5I@Km-Te^{N>}4@JJ)z47xxr=P7al*e z0OEuGhFx$49JjfNaGHig6}K>^BmDHc3RY55Ix&Aw3*CQX#drGA{`vyP&hLM;Fg8yG zoVohXcdq{8{D#jp#_?G!|BLhc-1H`XVf?2%SC=BS|J>&05Y5;9wJ^pxzdSG5|G0BS z!#-a1tIhqP-sQsYD%j>uFm7RtKXb*Kl=o|49NcPmtb%hjD~lhUw7F$R9v?fu6B>g& zCkx}wKHifvS4mfI9d|U|n>gYY#>1t01qH_o<8ADh6X#d0IsHA}`Au4$#ND~7c1G;) z;TFbS$;?Ic&$_?EX5IBIGS~9;nYPUa%1eNnGt*(xKbp>ok()Fy_y}p$ofRQ3M6hj(e-S}Z zhHka(8nAD-Z&Zw2nvn%&w11BWQp>q+ zZUGxx803NW8LwHD3XTDtP@r+n4M4Zr1j^Z_YNT?*5;Z#ZlgXy0g>l0k44WeMK^a^Q zHuiitHbJSkUsL_$hlRM%^wnfkBSn(Al_`9JvDz9zfgj@9U}pEl4q#^qj+HSnUKz{a zlrbCO^J8UvqKR=Ac>ZWF=jP`ARYRQq%jpaJ{a)bzs*HbC#k594=^UeaCv@P{MgtpB(Gdw&?}{QJ()myAH}#2>yTJy>D; z%O75aJowdKj$0q>J-NM8F40wRd;pe5cNk=`g4;QwRL81tw|C^=klwzg<4%N~#8fBV zA9mu~SspGmoMb`^oV1rOtUBR45q&LhW`He&=}U>PP$q z*pD*2>-Y<>?)@L}7hqYQKWD;SfPHzV1=n64T+;b>SH{Mrgro`p`7=87uRv!K6xYhf zKIeu42&h6YRV+|87{6R1DCc^u0wTi4fAgqbt6*C~L>X6{V1ped7&7=N(7A`xkfjE;k(Q46_#=tzckD zEn7CBo07q<4*YQkQPEZ7d8Y4|o-;rRT)~N)ftu-LHQ#qYB|j^;>_%?VgWE|&FQ}U7 zTB#wC)=jl;#T*)39`wZbqc}UyxPHh=Po2^MK4iR^p^2rLofajxuBWKl(6Omctsi{Z zP?IQUHXu4iLUQw=)7y*sL`63%&nxg6U(3@x(-wtlTDVVO#2vtdxk)49``F`lq2;xm znQ|rF2KVtIwdwPdq^6_*4y^opN%C7vrB>i;O;kSS?4%=y`;Q))n0o{$&WfPlHWPPx zTc|w04(|4-nCeM24DK1^EI6hvi{@o1U?HTc_6q@ivwIg;$GIKq{JFvuXBp2$zE zUM;FX%jELVxU*!r{3RJ%_SKJdWu(8*Ybn#^yr3i<(Iah=UY|K`32KHIe~q%kvcy%zNOCh~1?h`LjIfIHH~VHv zr@VM5LCE=zUM9{$pSN9YE`_9{S0hlTwqJ=*{u(#eo=oISzkYp@QlVF^+51M8Xzp?Y zUNaE|%{TOV6>~lv7txmuB`>xVrY24aQCXs@^9zqWOZe{ zv?QPSDfZvJYnk4#@FL#zTW671FEFId!Cwq`F)fJ7D!k*SYY%0m4`;=cX$R6(#+4J zyAz>nvK!t0l;D+_W%~EwP__H!oC>D0#%toSSt3vAbPN^YA4P;J`V%!}zt$(_8k!p_ z)dcluMXp9axTwut!P67D`JChP75YA(w6Y38nQ@Uj7>(xNdaaNFpH@}K8k=(3p~RBk z0Pydx`-lgF-;J4AOfQXsKv9O-V^g-u*ThrNS8Lc-(k9f;sea{x)S++B$`H}0$Cz;Y z+esHFDf1#Ranau%@H(#Nt=mutC|9t7vcOvTbgN9u4qa81T&cQY!& zoi6~4VjfiGw5Q);h~p}3DY@^woz&9*!8p8G$>j3u*mUU+ zk!$d!F;Gv`C69RnL(ZA&_t(-UyPNJRU&R;= zD&CsNf7dq$mHUz7x4kFJPC270KHPc7^Gg`Eudy-tY0wC(#ojX~$a{n94^zLeXM7OJ zTg!dNHK|2tW2$DzMHPifc1cq8wCFHVQhEi6m5qg8C)dC4PFFQvSJALnd4J<=ZYM=g zOr-w`LFm{30ZGBb#4$5f@sY{PBpvZ?Ldtm^l16zkk#D9OQ!7C%lSVBS`QRH9$bC7fMKCPK}_#V1-_+k zzHn0xSUNF#`ypsUmTyD(!lcJNnkVzI*rfHLS4JB2<(m(G@`*jQk<-7~ue$MV*p4r} zc=2kKt@>TDombIS-(PKf&YX^$xzQY8;xi=m8l)iasalTWcU#nm$Z#+KKOzUekD_)o z7Jq!C=a~LgdNEv}E!v75WV1`6EBRRW+n&ACr&p7aPT)+T{Vy(7(K@rPE%(%2>}W&CTuHZ?=pGXLgnQD$1`FQ6H|o6k*-{^fJn| z*IJitmf!xC@)-$5friho=N^|@dYHel!anU+CbX7k`1B(1g+yzUMZsBLhQ=?bmjb{A zCzDK`g{V&)L{H?K-5Hv+dRP?mn;+}4de$_F^jdpZ>WI{d8yS4Elw5kyeO6gp$?87s zE4EqNv5UFn-(q~w7ZVigE4txrDtX)SFEbvjKu1w}`=|hunUGc}SBCYhMzgSi_ z$s%>$!hJlE2#Y$2M>(WM91k7rUq0H1k-ZqMDM@OSYAL7UWk%a9L)52ha7#Y%rLih1 z*rfSGfu}(mBCxw&tYy(Lao(8erHR%ftdxXuh%b$3d%u>s#H;b0KoC$H@-WzG=jA?x zzc}4!@Qd$O{R3igGcR3h22Z8-A!YhUAwhQ{koyko-r{!icKoyQSlY;tetj`M{{x?J z;%_>>SM+~)sGYqdu2#lplKCRQ!m{EcFITL7>97dzz-OBJuh`*F`AUIJ`tAg`lwaG1 zeVcj8apTM5)R=4fVW!hDq(78>5AKD1yR;>KIr^MiBq2@w-4CrQvAJ8Ztgqa-%|oty z5VjGCGi8k{tBYe1d3NuIQ<0rP;(MV^(#IQZSm8J>;|d={1b38P=77~Dh}ViQ^` z652-+Iu8=MuO;^KC-%Qf9JEUuj!i^jD-y>>5+@E4r>-T<@F&f^OIol?T8d3tu1H!P zNm@Th+Ps#$#h<+ME_u%`c|SH8U6Fh^l8ik_2GFGt2&53IrV!hwkjAB)ho+DtQz+3X zRCKAA1X8c4rc&Fd(#ECIK~ou!sZ8ipX1cVS0%vmKGy&gg7cI-t7%5bLQ5^tK23#sU4Iz(6E07!3@i`xYkfEkgBMl>N7uxNmXL zZwbh6N$77WbUA4PIT@-sS@t==xSSklP98F+0G(4rms=u`Tc(-|vd@LY*9y&RN9J{+^SbHsdj<0QRr3e!^M~W|k?#C6Pp@oOYLM*xvKwm^4SVX8+ zMC?#R8eeoCRzyBpM2RV)qA$KASbRmTnA)M3Holk+R?IM3%!DasrZ2fESi+)Ka>t>B zExzO)tb}6}Tf&7Y;ifNrAXxfHt(3>1lrO$i09GnATKW`IDokG{Dp>YHtxU|JOd`Ha z3RWgFS|*1nQ=l(@Em*FoR<7hwt`c9a3M*G1E!V`9Yte(W1wlG$AYBKLemv+i3}iG4 zGQoh%=)qqE!Io-ZYX`7xJlGxvb{qveW5BNT5O+a{ry9iD0fPG;9e)@ka1;`ZfrQdm zgb7wes8vKcRK&zr#K9^OMk|sq6)E)4G(l*F8Z^rR3XF&5z@T}f&;ks!h#poV2rE;A zfgE6vco-B0gOB1)(!*-#;dO%W1~qt-0~`?#Z-v3zN8z0qcsG4zuV7`rTIC?tp>jCB z5(%pu8?BtcR8G-X%?MV_sZ}jFR4v6czbz3z@<9a}=(J$N0*SRL149XCV$1EKmy>h(O1^?V8S0`PjFvHGWn^}-Ad zqCyQX)EmSc8zd4Mq~HxQV-0eL4GIj6uZ0>F)f<%@8&wh-RpE{5V~v`Jjam#%+Coh_ z>P@b6Yb`izEn;XZ5o#+_Zv#2DK@!@a@HY5ZTh(D(4MTgKP|qyxv76vYH=#y1u~Ro`V)yyVZu0SN%A;;7#-2-0 zdah{nP&@U|Cic)(_Are1Fdg+UGxpwm(#xXJd&jAlEit(FUS%)GcrVvc?{fjbgC~8D zH2Qcn`W`s;2~_qyNbD0j>U*@-Crr^V`lMe-qhBn)Pa?6Or?Ov$vH!Qje!;c=*G~Y7 zoCC^7{qH*Z)e`$PjQig|>Hi?x|4L&(R%1|?Vt_kgkS}P^$auh{WANiqpM_JudE%he zlK~s!LA(5Z2aN$Ir#?5QLBpfL2aLxnEdUeFR^s42(+D5{+y?lZ90C9PIZdaZ==25t sD=$Dw^-tHpeYu$dH?UV_Kj?g7wlT2OXMXeX%coB!il*WQx&Xod10Eos8~^|S literal 0 HcmV?d00001 From cc794b3c32c354bc4542767a9e43c9a49d591ef3 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 15:28:56 +0100 Subject: [PATCH 21/60] Fix tests again! --- tests/tests.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 5769208ac..59e502bfd 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -172,7 +172,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], QUnit.test("check findDirEntriesWithPrefix 'A'", function(assert) { var done = assert.async(); assert.expect(2); - var callbackFunction = function(dirEntryList) { + var callbackFunction = function(dirEntryList, stillSearching) { + if (stillSearching) return; assert.ok(dirEntryList && dirEntryList.length === 5, "Article list with 5 results"); var firstDirEntry = dirEntryList[0]; assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); @@ -183,7 +184,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], QUnit.test("check findDirEntriesWithPrefix 'a'", function(assert) { var done = assert.async(); assert.expect(2); - var callbackFunction = function(dirEntryList) { + var callbackFunction = function(dirEntryList, stillSearching) { + if (stillSearching) return; assert.ok(dirEntryList && dirEntryList.length === 5, "Article list with 5 results"); var firstDirEntry = dirEntryList[0]; assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); @@ -194,7 +196,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], QUnit.test("check findDirEntriesWithPrefix 'blues brothers'", function(assert) { var done = assert.async(3); assert.expect(6); - var callbackFunction = function(dirEntryList) { + var callbackFunction = function(dirEntryList, stillSearching) { + if (stillSearching) return; assert.ok(dirEntryList && dirEntryList.length === 3, "Article list with 3 result"); var firstDirEntry = dirEntryList[0]; assert.equal(firstDirEntry.getTitleOrUrl() , 'Blues Brothers (film)', 'First result should be "Blues Brothers (film)"'); From f99a8f40c7933a10ad1c3693f9885867826dbb83 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 15:42:41 +0100 Subject: [PATCH 22/60] Second attempt to fix tests --- tests/tests.js | 15 ++++++--------- www/js/lib/zimArchive.js | 5 +++-- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 59e502bfd..f673f10cd 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -172,38 +172,35 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], QUnit.test("check findDirEntriesWithPrefix 'A'", function(assert) { var done = assert.async(); assert.expect(2); - var callbackFunction = function(dirEntryList, stillSearching) { - if (stillSearching) return; + var callbackFunction = function(dirEntryList) { assert.ok(dirEntryList && dirEntryList.length === 5, "Article list with 5 results"); var firstDirEntry = dirEntryList[0]; assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - localZimArchive.findDirEntriesWithPrefix('A', 5, callbackFunction); + localZimArchive.findDirEntriesWithPrefix('A', 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'a'", function(assert) { var done = assert.async(); assert.expect(2); - var callbackFunction = function(dirEntryList, stillSearching) { - if (stillSearching) return; + var callbackFunction = function(dirEntryList) { assert.ok(dirEntryList && dirEntryList.length === 5, "Article list with 5 results"); var firstDirEntry = dirEntryList[0]; assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - localZimArchive.findDirEntriesWithPrefix('a', 5, callbackFunction); + localZimArchive.findDirEntriesWithPrefix('a', 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'blues brothers'", function(assert) { var done = assert.async(3); assert.expect(6); - var callbackFunction = function(dirEntryList, stillSearching) { - if (stillSearching) return; + var callbackFunction = function(dirEntryList) { assert.ok(dirEntryList && dirEntryList.length === 3, "Article list with 3 result"); var firstDirEntry = dirEntryList[0]; assert.equal(firstDirEntry.getTitleOrUrl() , 'Blues Brothers (film)', 'First result should be "Blues Brothers (film)"'); done(); }; - localZimArchive.findDirEntriesWithPrefix('blues brothers', 5, callbackFunction); + localZimArchive.findDirEntriesWithPrefix('blues brothers', 5, callbackFunction, true); }); QUnit.test("article '(The Night Time Is) The Right Time' correctly redirects to 'Night Time Is the Right Time'", function(assert) { var done = assert.async(); diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index fcf346e13..3a824581f 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -151,8 +151,9 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * @param {String} prefix The search string * @param {Integer} resultSize The number of dirEntries to find * @param {callbackDirEntryList} callback The funciton to call with the result + * @param {Boolean} noInterim A flag to prevent callback until all results are ready */ - ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback) { + ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback, noInterim) { var that = this; // We have to remove duplicate string combinations because util.allCaseFirstLetters() can return some combinations // where uppercase and lowercase combinations are exactly the same, e.g. where prefix begins with punctuation @@ -172,7 +173,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], return; } // Dynamically populate list of articles - if (!params.cancelSearch) callback(dirEntries, true); + if (!params.cancelSearch && !noInterim) callback(dirEntries, true); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, function (newDirEntries) { From a6f7c2cef039e4e6c7d4db77b50650842d4cee20 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 2 May 2020 15:18:50 +0100 Subject: [PATCH 23/60] Very granular reporting --- www/js/lib/zimArchive.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 3a824581f..af4da5866 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -166,6 +166,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], ) ); var dirEntries = []; + var inProgressResults = []; function searchNextVariant() { if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { @@ -176,12 +177,18 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], if (!params.cancelSearch && !noInterim) callback(dirEntries, true); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); - that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, function (newDirEntries) { - dirEntries.push.apply(dirEntries, newDirEntries); - if (!params.cancelSearch) { - searchNextVariant(); + that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, function (newDirEntries, interim) { + if (interim) { + inProgressResults = inProgressResults.concat(newDirEntries); + if (!params.cancelSearch) callback(inProgressResults, true); } else { - params.cancelSearch = false; + dirEntries.push.apply(dirEntries, newDirEntries); + if (!params.cancelSearch) { + inProgressResults = dirEntries; + searchNextVariant(); + } else { + params.cancelSearch = false; + } } }); } @@ -211,8 +218,11 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); - if (~title.indexOf(prefix) && dirEntry.namespace === "A") + if (~title.indexOf(prefix) && dirEntry.namespace === "A") { dirEntries.push(dirEntry); + // Report interim result + callback(dirEntry, true); + } return addDirEntries(index + 1); }); }; From 7f414f4c15a57205e9b15a3d4773e624c16c5ee6 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 13:56:07 +0100 Subject: [PATCH 24/60] More effective search cancelling --- www/js/app.js | 13 ++++++++----- www/js/lib/zimArchive.js | 8 ++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 5c4510997..99302eb5f 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -205,7 +205,10 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys }); // Hide the search results if user moves out of prefix field $('#prefix').on('blur', function() { - if (!searchArticlesFocused) $('#articleListWithHeader').hide(); + if (!searchArticlesFocused) { + params.cancelSearch = true; + $('#articleListWithHeader').hide(); + } }); $("#btnRandomArticle").on("click", function(e) { $('#prefix').val(""); @@ -985,9 +988,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } } - // Allows the search to be cancelled if user clicks on a found title - params.cancelSearch = false; - /** * Display the list of articles with the given array of DirEntry * @param {Array} dirEntryArray The array of dirEntries returned from the binary search @@ -1084,7 +1084,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys * @param {DirEntry} dirEntry The directory entry of the article to read */ function readArticle(dirEntry) { - // Only update for expectedArticleURLToBeDisplayed. + params.cancelSearch = true; + // Only update for expectedArticleURLToBeDisplayed. expectedArticleURLToBeDisplayed = dirEntry.namespace + "/" + dirEntry.url; // We must remove focus from UI elements in order to deselect whichever one was clicked (in both jQuery and SW modes), // but we should not do this when opening the landing page (or else one of the Unit Tests fails, at least on Chrome 58) @@ -1566,6 +1567,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } function goToRandomArticle() { + params.cancelSearch = true; $("#searchingArticles").show(); selectedArchive.getRandomDirEntry(function(dirEntry) { if (dirEntry === null || dirEntry === undefined) { @@ -1587,6 +1589,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } function goToMainArticle() { + params.cancelSearch = true; $("#searchingArticles").show(); selectedArchive.getMainPageDirEntry(function(dirEntry) { if (dirEntry === null || dirEntry === undefined) { diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index af4da5866..a5551c8c3 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -154,6 +154,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * @param {Boolean} noInterim A flag to prevent callback until all results are ready */ ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback, noInterim) { + params.cancelSearch = false; var that = this; // We have to remove duplicate string combinations because util.allCaseFirstLetters() can return some combinations // where uppercase and lowercase combinations are exactly the same, e.g. where prefix begins with punctuation @@ -180,14 +181,13 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, function (newDirEntries, interim) { if (interim) { inProgressResults = inProgressResults.concat(newDirEntries); - if (!params.cancelSearch) callback(inProgressResults, true); + if (!params.cancelSearch && !noInterim) callback(inProgressResults, true); + return; } else { - dirEntries.push.apply(dirEntries, newDirEntries); + [].push.apply(dirEntries, newDirEntries); if (!params.cancelSearch) { inProgressResults = dirEntries; searchNextVariant(); - } else { - params.cancelSearch = false; } } }); From 1f9611ca7cfcd791667a979f8f9a597ee5531453 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 14:20:05 +0100 Subject: [PATCH 25/60] Fix tests --- tests/tests.js | 4 ++-- www/js/app.js | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index f673f10cd..a1ff6b1f3 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -192,8 +192,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], localZimArchive.findDirEntriesWithPrefix('a', 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'blues brothers'", function(assert) { - var done = assert.async(3); - assert.expect(6); + var done = assert.async(); + assert.expect(2); var callbackFunction = function(dirEntryList) { assert.ok(dirEntryList && dirEntryList.length === 3, "Article list with 3 result"); var firstDirEntry = dirEntryList[0]; diff --git a/www/js/app.js b/www/js/app.js index 99302eb5f..42afa1c3d 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -207,6 +207,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys $('#prefix').on('blur', function() { if (!searchArticlesFocused) { params.cancelSearch = true; + $("#searchingArticles").hide(); $('#articleListWithHeader').hide(); } }); From 166a4f81ae59fef224bb43c9f17b6c95f4d69c86 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 14:35:23 +0100 Subject: [PATCH 26/60] Remove demo gif --- demos/progressive_search.gif | Bin 305593 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 demos/progressive_search.gif diff --git a/demos/progressive_search.gif b/demos/progressive_search.gif deleted file mode 100644 index c1afe85a453b35f76efffc61faa96588f346f63c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305593 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 `d0x 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 z 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 From 1b0b4747e8608c79ac77f0f76c5260da0dfc2e55 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 15:32:54 +0100 Subject: [PATCH 27/60] Move non-generic elements out of util --- www/js/lib/util.js | 6 +----- www/js/lib/zimArchive.js | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index a9527fac5..693e08739 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -44,10 +44,6 @@ define(['q'], function(Q) { function allCaseFirstLetters(string, caseMatchType) { if (string) { var comboArray = []; - // Ensure a search is done on the string exactly as typed - comboArray.push(string); - // Normalize any spacing and make string all lowercase - string = string.replace(/\s+/g, ' ').toLocaleLowerCase(); // Split string into parts beginning with first word letters var strParts = string.match(regExpFindStringParts); // Set the base (binary or ternary) according to the complexity of the search @@ -69,7 +65,7 @@ define(['q'], function(Q) { caseBit = ~~(i / bitmask % base); if (caseBit === 2) { // All uppercase - typeCase = strParts[j].toLocaleUpperCase() + typeCase = strParts[j].toLocaleUpperCase(); } else { // Modify only first letter typeCase = strParts[j].replace(/^./, function (m) { diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index a5551c8c3..8c2150b77 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -156,14 +156,26 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback, noInterim) { params.cancelSearch = false; var that = this; + // Establish array of initial values that must be searched first + var startArray = []; + // Ensure a search is done on the string exactly as typed + startArray.push(prefix); + // Normalize any spacing and make string all lowercase + prefix = prefix.replace(/\s+/g, ' ').toLocaleLowerCase(); + // Add lowercase string with initial uppercase (this is a very common pattern) + startArray.push(prefix.replace(/^./, function (m) { + return m.toLocaleUpperCase(); + })); // We have to remove duplicate string combinations because util.allCaseFirstLetters() can return some combinations // where uppercase and lowercase combinations are exactly the same, e.g. where prefix begins with punctuation // or currency signs, for languages without case, or where user-entered case duplicates calculated case var prefixVariants = util.removeDuplicateStringsInSmallArray( - // Get basic combinations first for speed of returning results - util.allCaseFirstLetters(prefix).concat( - params.titleSearchCaseMatchType === 'full' ? - util.allCaseFirstLetters(prefix, params.titleSearchCaseMatchType) : [] + startArray.concat( + // Get basic combinations first for speed of returning results + util.allCaseFirstLetters(prefix).concat( + params.titleSearchCaseMatchType === 'full' ? + util.allCaseFirstLetters(prefix, params.titleSearchCaseMatchType) : [] + ) ) ); var dirEntries = []; From 502e45c658806013b7019e90d53d1ed6f8d7a068 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 15:56:40 +0100 Subject: [PATCH 28/60] Fix tests again! Stop fiddling now. --- tests/tests.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index a1ff6b1f3..326ea7ce9 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -109,14 +109,14 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], var testString2 = "Paris"; var testString3 = "le Couvre-chef Est sur le porte-manteaux"; var testString4 = "épée"; - var testString5 = '“¡xριστός $Ἀνέστη!”'; + var testString5 = '“¡xριστός $Ἀνέστη!”'; var testString6 = "Καλά Νερά Μαγνησίας"; - assert.equal(util.allCaseFirstLetters(testString1)[1], "Téléphone", "The first letter should be uppercase"); - assert.equal(util.allCaseFirstLetters(testString2)[2], "paris", "The first letter should be lowercase"); - assert.equal(util.allCaseFirstLetters(testString3)[1], "Le Couvre-Chef Est Sur Le Porte-Manteaux", "The first letter of every word should be uppercase"); - assert.equal(util.allCaseFirstLetters(testString4)[1], "Épée", "The first letter should be uppercase (with accent)"); - assert.equal(util.allCaseFirstLetters(testString5)[5], '“¡Xριστός $ἀνέστη!”', "First non-punctuation Unicode letter should be uppercase, second (with breath mark) lowercase"); - assert.equal(util.allCaseFirstLetters(testString6, "full")[1], "ΚΑΛΆ ΝΕΡΆ ΜΑΓΝΗΣΊΑΣ", "All Unicode letters should be uppercase"); + assert.equal(util.allCaseFirstLetters(testString1)[0], "Téléphone", "The first letter should be uppercase"); + assert.equal(util.allCaseFirstLetters(testString2)[1], "paris", "The first letter should be lowercase"); + assert.equal(util.allCaseFirstLetters(testString3)[0], "Le Couvre-Chef Est Sur Le Porte-Manteaux", "The first letter of every word should be uppercase"); + assert.equal(util.allCaseFirstLetters(testString4)[0], "Épée", "The first letter should be uppercase (with accent)"); + assert.equal(util.allCaseFirstLetters(testString5)[4], '“¡Xριστός $ἀνέστη!”', "First non-punctuation Unicode letter should be uppercase, second (with breath mark) lowercase"); + assert.equal(util.allCaseFirstLetters(testString6, "full")[0], "ΚΑΛΆ ΝΕΡΆ ΜΑΓΝΗΣΊΑΣ", "All Unicode letters should be uppercase"); }); QUnit.test("check removal of parameters in URL", function(assert) { var testUrl1 = "A/question.html"; From 9e9fdbcc8db6223875ae32053c0502cf87793e40 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 21:02:33 +0100 Subject: [PATCH 29/60] Prevent searching same string twice --- www/js/app.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 42afa1c3d..da2f9886a 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -950,26 +950,28 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys }); }; + // A variable to hold the last used prefix (to prevent searching the same string twice) + var lastPrefix = ''; + /** * Handle key input in the prefix input zone - * @param {Event} evt + * @param {Event} evt The event data to handle */ function onKeyUpPrefix(evt) { // Use a timeout, so that very quick typing does not cause a lot of overhead // It is also necessary for the words suggestions to work inside Firefox OS - if(window.timeoutKeyUpPrefix) { + if (window.timeoutKeyUpPrefix) { window.clearTimeout(window.timeoutKeyUpPrefix); } - window.timeoutKeyUpPrefix = window.setTimeout(function() { + window.timeoutKeyUpPrefix = window.setTimeout(function () { var prefix = $("#prefix").val(); - if (prefix && prefix.length>0) { + if (prefix && prefix.length > 0 && prefix !== lastPrefix) { $('#searchArticles').click(); + lastPrefix = prefix; } - } - ,500); + }, 500); } - /** * Search the index for DirEntries with title that start with the given prefix (implemented * with a binary search inside the index file) From 2c56ed88c004d79615fa0521ff871ab646993084 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 23:11:30 +0100 Subject: [PATCH 30/60] Cancel search earlier --- www/js/lib/util.js | 2 +- www/js/lib/zimArchive.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/www/js/lib/util.js b/www/js/lib/util.js index 693e08739..b5e2dc6a6 100644 --- a/www/js/lib/util.js +++ b/www/js/lib/util.js @@ -55,7 +55,7 @@ define(['q'], function(Q) { var numCombos = Math.pow(base, strParts.length); var typeCase, mixedTypeCaseStr, bitmask, caseBit; // Iterate through every possible combination, starting with (base ^ n) - 1 and decreasing; we go from high to low, - // because title case (e.g. tertiary 1111) is more common than all lowercase (0000) so will be found first + // because title case (e.g. binary 1111) is more common than all lowercase (0000) so will be found first for (var i = numCombos; i--;) { mixedTypeCaseStr = ''; bitmask = 1; diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 8c2150b77..3b1f703a2 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -226,7 +226,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], }, true).then(function(firstIndex) { var dirEntries = []; var addDirEntries = function(index) { - if (index >= firstIndex + resultSize || index >= that._file.articleCount) + if (params.cancelSearch || index >= firstIndex + resultSize || index >= that._file.articleCount) return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); From 1e0a5b007a40fd4f0e6c5629e36cceeaf3e8031a Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 23:19:22 +0100 Subject: [PATCH 31/60] More cancellation --- www/js/lib/zimArchive.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 3b1f703a2..9264f2567 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -239,7 +239,9 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], }); }; return addDirEntries(firstIndex); - }).then(callback); + }).then(function (data) { + if (!params.cancelSearch) callback(data); + }); }; /** From 4a455d5a88cc184e329439ce6661e28e06b73fbe Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 3 May 2020 23:25:39 +0100 Subject: [PATCH 32/60] Fix user being unable to search for same string after launching article --- www/js/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/www/js/app.js b/www/js/app.js index da2f9886a..7485b3edd 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -1088,6 +1088,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys */ function readArticle(dirEntry) { params.cancelSearch = true; + // Reset lastPrefix to allow users to search the same string again if they want to + lastPrefix = ''; // Only update for expectedArticleURLToBeDisplayed. expectedArticleURLToBeDisplayed = dirEntry.namespace + "/" + dirEntry.url; // We must remove focus from UI elements in order to deselect whichever one was clicked (in both jQuery and SW modes), From 58dfa1cfb064830ac4aae8f55839cf997cb808ce Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 4 May 2020 17:42:51 +0100 Subject: [PATCH 33/60] Provide state object for search to allow for cancellation --- www/js/app.js | 61 +++++++++++++++++++++++++--------------- www/js/init.js | 7 +++++ www/js/lib/zimArchive.js | 37 ++++++++++++------------ 3 files changed, 65 insertions(+), 40 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 7485b3edd..c40a218b7 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -84,6 +84,13 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys document.getElementById('appThemeSelect').value = params.appTheme; uiUtil.applyAppTheme(params.appTheme); + // Define global state + // An array to hold searches and their state (allows modules to tell which search is current and cancel old searches) + state['searches'] = [{ + 'prefix': '', // A field to hold the original search string + 'state': '' // The state of the search: ''|'init'|'interim'|'cancelled'|'complete' + }]; + // Define globalDropZone (universal drop area) and configDropZone (highlighting area on Config page) var globalDropZone = document.getElementById('search-article'); var configDropZone = document.getElementById('configuration'); @@ -122,7 +129,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys $('.alert').hide(); $("#searchingArticles").show(); pushBrowserHistoryState(null, $('#prefix').val()); - searchDirEntriesFromPrefix($('#prefix').val()); + searchDirEntriesFromPrefix(state.searches[0].prefix); $('.navbar-collapse').collapse('hide'); document.getElementById('prefix').focus(); // This flag is set to true in the mousedown event below @@ -206,7 +213,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // Hide the search results if user moves out of prefix field $('#prefix').on('blur', function() { if (!searchArticlesFocused) { - params.cancelSearch = true; + state.searches[0].state = 'cancelled'; $("#searchingArticles").hide(); $('#articleListWithHeader').hide(); } @@ -714,9 +721,14 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys if (title && !(""===title)) { goToArticle(title); } - else if (titleSearch && !(""===titleSearch)) { + else if (titleSearch && titleSearch !== '') { $('#prefix').val(titleSearch); - searchDirEntriesFromPrefix($('#prefix').val()); + if (titleSearch !== state.searches[0].prefix) { + state.searches.push({'prefix': titleSearch, 'state': ''}); + searchDirEntriesFromPrefix(titleSearch); + } else { + $('#prefix').focus(); + } } } }; @@ -950,8 +962,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys }); }; - // A variable to hold the last used prefix (to prevent searching the same string twice) - var lastPrefix = ''; /** * Handle key input in the prefix input zone @@ -965,22 +975,24 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } window.timeoutKeyUpPrefix = window.setTimeout(function () { var prefix = $("#prefix").val(); - if (prefix && prefix.length > 0 && prefix !== lastPrefix) { + if (prefix && prefix.length > 0 && prefix !== state.searches[0].prefix) { + state.searches.unshift({'prefix': prefix, 'state': ''}); $('#searchArticles').click(); - lastPrefix = prefix; } }, 500); } /** - * Search the index for DirEntries with title that start with the given prefix (implemented - * with a binary search inside the index file) - * @param {String} prefix + * Search the title list for DirEntries with title that starts with the current search prefix of the state object + * (implemented with a binary search inside the index file) */ - function searchDirEntriesFromPrefix(prefix) { + function searchDirEntriesFromPrefix() { if (selectedArchive !== null && selectedArchive.isReady()) { $('#activeContent').hide(); - selectedArchive.findDirEntriesWithPrefix(prefix.trim(), params.maxSearchResultsSize, populateListOfArticles); + // Completely delete any existing search + state.searches[1].state = 'cancelled'; + state.searches[0].state = 'init'; + selectedArchive.findDirEntriesWithPrefix(state.searches[0], params.maxSearchResultsSize, populateListOfArticles); } else { $('#searchingArticles').hide(); // We have to remove the focus from the search field, @@ -993,10 +1005,12 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys /** * Display the list of articles with the given array of DirEntry - * @param {Array} dirEntryArray The array of dirEntries returned from the binary search - * @param {Boolean} stillSearching A flag to indicate that the search is not complete + * @param {Array} dirEntryArray The array of dirEntries returned from the binary + * @param {Object} search The original search object */ - function populateListOfArticles(dirEntryArray, stillSearching) { + function populateListOfArticles(dirEntryArray, search) { + if (search.state === 'cancelled') return; + var stillSearching = search.state === 'interim'; var articleListHeaderMessageDiv = $('#articleListHeaderMessage'); var nbDirEntry = dirEntryArray ? dirEntryArray.length : 0; @@ -1025,12 +1039,15 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // We have to use mousedown below instead of click as otherwise the prefix blur event fires first // and prevents this event from firing; note that touch also triggers mousedown $('#articleList a').on('mousedown', function (e) { - params.cancelSearch = true; + state.searches[0].state = 'cancelled'; handleTitleClick(e); return false; }); if (!stillSearching) $('#searchingArticles').hide(); $('#articleListWithHeader').show(); + // We've finished searching, so we can trim state.search to prevent it from growing too large + if (search.state === 'complete') state.search.pop(); + } /** @@ -1087,9 +1104,9 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys * @param {DirEntry} dirEntry The directory entry of the article to read */ function readArticle(dirEntry) { - params.cancelSearch = true; - // Reset lastPrefix to allow users to search the same string again if they want to - lastPrefix = ''; + state.searches[0].state = 'cancelled'; + // Reset state.searches.lastPrefix to allow users to search the same string again if they want to + state.searches[0].prefix = ''; // Only update for expectedArticleURLToBeDisplayed. expectedArticleURLToBeDisplayed = dirEntry.namespace + "/" + dirEntry.url; // We must remove focus from UI elements in order to deselect whichever one was clicked (in both jQuery and SW modes), @@ -1572,7 +1589,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } function goToRandomArticle() { - params.cancelSearch = true; + state.searches[0].state = 'cancelled'; $("#searchingArticles").show(); selectedArchive.getRandomDirEntry(function(dirEntry) { if (dirEntry === null || dirEntry === undefined) { @@ -1594,7 +1611,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } function goToMainArticle() { - params.cancelSearch = true; + state.searches[0].state = 'cancelled'; $("#searchingArticles").show(); selectedArchive.getMainPageDirEntry(function(dirEntry) { if (dirEntry === null || dirEntry === undefined) { diff --git a/www/js/init.js b/www/js/init.js index 497c63e02..b4ad26f1a 100644 --- a/www/js/init.js +++ b/www/js/init.js @@ -30,6 +30,13 @@ */ var params = {}; +/** + * A global state object + * + * @type Object + */ +var state = {}; + require.config({ baseUrl: 'js/lib', paths: { diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 9264f2567..2d8d47c65 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -142,19 +142,19 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], */ /** - * Look for DirEntries with title starting with the given prefix. + * Look for DirEntries with title starting with the prefix of the current search object. * For now, ZIM titles are case sensitive. * So, as workaround, we try several variants of the prefix to find more results. * This should be enhanced when the ZIM format will be modified to store normalized titles * See https://phabricator.wikimedia.org/T108536 * - * @param {String} prefix The search string + * @param {Object} search The current state.searches object * @param {Integer} resultSize The number of dirEntries to find * @param {callbackDirEntryList} callback The funciton to call with the result * @param {Boolean} noInterim A flag to prevent callback until all results are ready */ - ZIMArchive.prototype.findDirEntriesWithPrefix = function (prefix, resultSize, callback, noInterim) { - params.cancelSearch = false; + ZIMArchive.prototype.findDirEntriesWithPrefix = function (search, resultSize, callback, noInterim) { + var prefix = search.prefix; var that = this; // Establish array of initial values that must be searched first var startArray = []; @@ -182,26 +182,28 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], var inProgressResults = []; function searchNextVariant() { + // If user has initiated a new search, cancel this one + if (search.state === 'cancelled') return; if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { - callback(dirEntries); + search.state = 'complete'; + callback(dirEntries, search); return; } // Dynamically populate list of articles - if (!params.cancelSearch && !noInterim) callback(dirEntries, true); + search.state = 'interim'; + if (!noInterim) callback(dirEntries, search); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); - that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, function (newDirEntries, interim) { + that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, search, function (newDirEntries, interim) { + if (search.state === 'cancelled') return; if (interim) { inProgressResults = inProgressResults.concat(newDirEntries); - if (!params.cancelSearch && !noInterim) callback(inProgressResults, true); - return; } else { [].push.apply(dirEntries, newDirEntries); - if (!params.cancelSearch) { - inProgressResults = dirEntries; - searchNextVariant(); - } + inProgressResults = dirEntries; + searchNextVariant(); } + if (!noInterim) callback(inProgressResults, search); }); } searchNextVariant(); @@ -212,9 +214,10 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * * @param {String} prefix The case-sensitive value against which dirEntry titles (or url) will be compared * @param {Integer} resultSize The maximum number of results to return + * @param {Object} search The original state.searches search object (so that we can cancel long binary searches) * @param {callbackDirEntryList} callback The function to call with the array of dirEntries with titles that begin with prefix */ - ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, callback) { + ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, search, callback) { var that = this; util.binarySearch(0, this._file.articleCount, function(i) { return that._file.dirEntryByTitleIndex(i).then(function(dirEntry) { @@ -226,7 +229,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], }, true).then(function(firstIndex) { var dirEntries = []; var addDirEntries = function(index) { - if (params.cancelSearch || index >= firstIndex + resultSize || index >= that._file.articleCount) + if (search.state === 'cancelled' || index >= firstIndex + resultSize || index >= that._file.articleCount) return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); @@ -239,9 +242,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], }); }; return addDirEntries(firstIndex); - }).then(function (data) { - if (!params.cancelSearch) callback(data); - }); + }).then(callback); }; /** From 2443bef5de72252a5bf0c1047373e0a9ae4a826b Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 4 May 2020 18:37:50 +0100 Subject: [PATCH 34/60] Fix tests --- tests/init.js | 6 +++++- tests/tests.js | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/init.js b/tests/init.js index da9c5e5e2..7d06268a1 100644 --- a/tests/init.js +++ b/tests/init.js @@ -22,8 +22,12 @@ */ 'use strict'; -// Define global params +// Define global params needed for tests to run on existing app code var params = {}; +var search = { + 'prefix' : '', + 'state' : '' +}; require.config({ baseUrl: 'www/js/lib', diff --git a/tests/tests.js b/tests/tests.js index 326ea7ce9..9304eb5f0 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -178,7 +178,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - localZimArchive.findDirEntriesWithPrefix('A', 5, callbackFunction, true); + search.prefix = 'A'; + localZimArchive.findDirEntriesWithPrefix(search, 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'a'", function(assert) { var done = assert.async(); @@ -189,7 +190,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - localZimArchive.findDirEntriesWithPrefix('a', 5, callbackFunction, true); + search.prefix = 'a'; + localZimArchive.findDirEntriesWithPrefix(search, 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'blues brothers'", function(assert) { var done = assert.async(); @@ -200,7 +202,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'Blues Brothers (film)', 'First result should be "Blues Brothers (film)"'); done(); }; - localZimArchive.findDirEntriesWithPrefix('blues brothers', 5, callbackFunction, true); + search.prefix = 'blues brothers'; + localZimArchive.findDirEntriesWithPrefix(search, 5, callbackFunction, true); }); QUnit.test("article '(The Night Time Is) The Right Time' correctly redirects to 'Night Time Is the Right Time'", function(assert) { var done = assert.async(); From 81cd6f06c7c1adf00bcbddf40c69845da51e3a16 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 4 May 2020 21:54:32 +0100 Subject: [PATCH 35/60] Remove unneeded UI elements --- www/index.html | 44 +++++++++++++--------------------------- www/js/app.js | 15 ++------------ www/js/lib/zimArchive.js | 3 +-- 3 files changed, 17 insertions(+), 45 deletions(-) diff --git a/www/index.html b/www/index.html index 134a5c9bf..51a81b241 100644 --- a/www/index.html +++ b/www/index.html @@ -270,36 +270,6 @@

Performance settings

Speed up archive access
-
-
-
-

Select type of article title search:

- -
-
- -
-
-
-
-

Select max number of search results:

- -
-
-
-
@@ -335,6 +305,20 @@

Performance settings

+
+
+
+

Select max number of search results:

+
+
+
+ +
+
+
diff --git a/www/js/app.js b/www/js/app.js index c40a218b7..77740c6c4 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -70,11 +70,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys params['showUIAnimations'] = settingsStore.getItem('showUIAnimations') ? settingsStore.getItem('showUIAnimations') === 'true' : true; document.getElementById('hideActiveContentWarningCheck').checked = params.hideActiveContentWarning; document.getElementById('showUIAnimationsCheck').checked = params.showUIAnimations; - // A parameter to set the case matching type for title search (defaults to 'full') - params['titleSearchCaseMatchType'] = settingsStore.getItem('titleSearchCaseMatchType') || 'full'; - document.querySelector('input[name="caseMatchType"][value="' + params.titleSearchCaseMatchType + '"]').checked = true; - // Maximum number of article titles to return (range is 5 - 50, default 25) - params['maxSearchResultsSize'] = settingsStore.getItem('maxSearchResultsSize') || 25; + // Maximum number of article titles to return (range is 5 - 100, default 30) + params['maxSearchResultsSize'] = settingsStore.getItem('maxSearchResultsSize') || 30; document.getElementById('titleSearchRange').value = params.maxSearchResultsSize; document.getElementById('titleSearchRangeVal').innerHTML = params.maxSearchResultsSize; // A global parameter that turns caching on or off and deletes the cache (it defaults to true unless explicitly turned off in UI) @@ -367,14 +364,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys refreshCacheStatus(); } }); - Array.prototype.slice.call(document.querySelectorAll('input[name="caseMatchType"]')).forEach(function(input) { - input.addEventListener('change', function(e) { - if (e.target.checked) { - settingsStore.setItem('titleSearchCaseMatchType', e.target.value, Infinity); - params.titleSearchCaseMatchType = e.target.value; - } - }); - }); document.getElementById('titleSearchRange').addEventListener('change', function(e) { settingsStore.setItem('maxSearchResultsSize', e.target.value, Infinity); params.maxSearchResultsSize = e.target.value; diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 2d8d47c65..1e933715d 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -173,8 +173,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], startArray.concat( // Get basic combinations first for speed of returning results util.allCaseFirstLetters(prefix).concat( - params.titleSearchCaseMatchType === 'full' ? - util.allCaseFirstLetters(prefix, params.titleSearchCaseMatchType) : [] + util.allCaseFirstLetters(prefix, 'full') ) ) ); From ac37a0492be7790b95486de26f7ba2a504c90522 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 4 May 2020 22:14:39 +0100 Subject: [PATCH 36/60] Rationalize use of state search --- www/js/app.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 77740c6c4..82192dbe2 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -125,8 +125,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys $("#welcomeText").hide(); $('.alert').hide(); $("#searchingArticles").show(); - pushBrowserHistoryState(null, $('#prefix').val()); - searchDirEntriesFromPrefix(state.searches[0].prefix); + pushBrowserHistoryState(null, state.searches[0].prefix); + searchDirEntriesFromPrefix(); $('.navbar-collapse').collapse('hide'); document.getElementById('prefix').focus(); // This flag is set to true in the mousedown event below @@ -713,8 +713,9 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys else if (titleSearch && titleSearch !== '') { $('#prefix').val(titleSearch); if (titleSearch !== state.searches[0].prefix) { - state.searches.push({'prefix': titleSearch, 'state': ''}); - searchDirEntriesFromPrefix(titleSearch); + state.searches.unshift({'prefix': titleSearch, 'state': ''}); + state.searches.pop(); + searchDirEntriesFromPrefix(); } else { $('#prefix').focus(); } From ba32d8103cf354a5b841996bb474db1ece4ca8c2 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 4 May 2020 22:55:25 +0100 Subject: [PATCH 37/60] Reverse some unnecessary changes from previous model --- www/js/app.js | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 82192dbe2..5ec77bafb 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -125,8 +125,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys $("#welcomeText").hide(); $('.alert').hide(); $("#searchingArticles").show(); - pushBrowserHistoryState(null, state.searches[0].prefix); - searchDirEntriesFromPrefix(); + pushBrowserHistoryState(null, $('#prefix').val()); + searchDirEntriesFromPrefix($('#prefix').val()); $('.navbar-collapse').collapse('hide'); document.getElementById('prefix').focus(); // This flag is set to true in the mousedown event below @@ -713,9 +713,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys else if (titleSearch && titleSearch !== '') { $('#prefix').val(titleSearch); if (titleSearch !== state.searches[0].prefix) { - state.searches.unshift({'prefix': titleSearch, 'state': ''}); - state.searches.pop(); - searchDirEntriesFromPrefix(); + searchDirEntriesFromPrefix(titleSearch); } else { $('#prefix').focus(); } @@ -952,7 +950,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys }); }; - /** * Handle key input in the prefix input zone * @param {Event} evt The event data to handle @@ -966,22 +963,23 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys window.timeoutKeyUpPrefix = window.setTimeout(function () { var prefix = $("#prefix").val(); if (prefix && prefix.length > 0 && prefix !== state.searches[0].prefix) { - state.searches.unshift({'prefix': prefix, 'state': ''}); $('#searchArticles').click(); } }, 500); } /** - * Search the title list for DirEntries with title that starts with the current search prefix of the state object - * (implemented with a binary search inside the index file) + * Search the index for DirEntries with title that start with the given prefix (implemented + * with a binary search inside the index file) + * @param {String} prefix The string that must appear at the start of any title searched for */ - function searchDirEntriesFromPrefix() { + function searchDirEntriesFromPrefix(prefix) { if (selectedArchive !== null && selectedArchive.isReady()) { + // Cancel any previous search that may still be running + state.searches[0].state = 'cancelled'; + // Store the new search term at the top of the state.searches array and initialize + state.searches.unshift({'prefix': prefix, 'state': 'init'}); $('#activeContent').hide(); - // Completely delete any existing search - state.searches[1].state = 'cancelled'; - state.searches[0].state = 'init'; selectedArchive.findDirEntriesWithPrefix(state.searches[0], params.maxSearchResultsSize, populateListOfArticles); } else { $('#searchingArticles').hide(); From 22e4c760a6affe3a4e0638b0e003f8354cd6803a Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Tue, 5 May 2020 08:14:47 +0100 Subject: [PATCH 38/60] Remove hard-coded position from tests --- tests/tests.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 9304eb5f0..2741520f2 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -104,19 +104,19 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], var float = util.readFloatFrom4Bytes(byteArray, 0); assert.equal(float, -118.625, "the IEEE_754 float should be converted as -118.625"); }); - QUnit.test("check upper/lower case variations", function(assert) { + QUnit.test("check upper/lower case variations", function (assert) { var testString1 = "téléphone"; var testString2 = "Paris"; var testString3 = "le Couvre-chef Est sur le porte-manteaux"; var testString4 = "épée"; - var testString5 = '“¡xριστός $Ἀνέστη!”'; - var testString6 = "Καλά Νερά Μαγνησίας"; - assert.equal(util.allCaseFirstLetters(testString1)[0], "Téléphone", "The first letter should be uppercase"); - assert.equal(util.allCaseFirstLetters(testString2)[1], "paris", "The first letter should be lowercase"); - assert.equal(util.allCaseFirstLetters(testString3)[0], "Le Couvre-Chef Est Sur Le Porte-Manteaux", "The first letter of every word should be uppercase"); - assert.equal(util.allCaseFirstLetters(testString4)[0], "Épée", "The first letter should be uppercase (with accent)"); - assert.equal(util.allCaseFirstLetters(testString5)[4], '“¡Xριστός $ἀνέστη!”', "First non-punctuation Unicode letter should be uppercase, second (with breath mark) lowercase"); - assert.equal(util.allCaseFirstLetters(testString6, "full")[0], "ΚΑΛΆ ΝΕΡΆ ΜΑΓΝΗΣΊΑΣ", "All Unicode letters should be uppercase"); + var testString5 = '$¥€“«xριστός» †¡Ἀνέστη!”'; + var testString6 = "Καλά Νερά Μαγνησίας žižek"; + assert.equal(util.allCaseFirstLetters(testString1).indexOf("Téléphone") >= 0, true, "The first letter should be uppercase"); + assert.equal(util.allCaseFirstLetters(testString2).indexOf("paris") >= 0, true, "The first letter should be lowercase"); + assert.equal(util.allCaseFirstLetters(testString3).indexOf("Le Couvre-Chef Est Sur Le Porte-Manteaux") >= 0, true, "The first letter of every word should be uppercase"); + assert.equal(util.allCaseFirstLetters(testString4).indexOf("Épée") >= 0, true, "The first letter should be uppercase (with accent)"); + assert.equal(util.allCaseFirstLetters(testString5).indexOf('$¥€“«Xριστός» †¡ἀνέστη!”') >= 0, true, "First non-punctuation/non-currency Unicode letter should be uppercase, second (with breath mark) lowercase"); + assert.equal(util.allCaseFirstLetters(testString6, "full").indexOf("ΚΑΛΆ ΝΕΡΆ ΜΑΓΝΗΣΊΑΣ ŽIŽEK") >= 0, true, "All Unicode letters should be uppercase"); }); QUnit.test("check removal of parameters in URL", function(assert) { var testUrl1 = "A/question.html"; From bdd4a6976bbe640aeb345969e09a490c8d3e3f57 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Tue, 5 May 2020 09:15:01 +0100 Subject: [PATCH 39/60] Put cap on exponential searching --- www/js/lib/zimArchive.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 1e933715d..4c1f854a2 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -166,6 +166,10 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], startArray.push(prefix.replace(/^./, function (m) { return m.toLocaleUpperCase(); })); + // Get the full array of combinations to check number of combinations + var fullCombos = util.removeDuplicateStringsInSmallArray(util.allCaseFirstLetters(prefix, 'full')); + // Put cap on exponential number of combinations (five words = 3^5 = 243 combinations) + search.type = fullCombos.length < 200 ? 'full' : 'basic'; // We have to remove duplicate string combinations because util.allCaseFirstLetters() can return some combinations // where uppercase and lowercase combinations are exactly the same, e.g. where prefix begins with punctuation // or currency signs, for languages without case, or where user-entered case duplicates calculated case @@ -173,7 +177,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], startArray.concat( // Get basic combinations first for speed of returning results util.allCaseFirstLetters(prefix).concat( - util.allCaseFirstLetters(prefix, 'full') + search.type === 'full' ? fullCombos : [] ) ) ); From 2e1e609c6a5e06e4f32dc06706062f3483ee3f05 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Tue, 5 May 2020 09:15:22 +0100 Subject: [PATCH 40/60] More informative messaging for user --- www/js/app.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 5ec77bafb..1e261021f 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -85,7 +85,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // An array to hold searches and their state (allows modules to tell which search is current and cancel old searches) state['searches'] = [{ 'prefix': '', // A field to hold the original search string - 'state': '' // The state of the search: ''|'init'|'interim'|'cancelled'|'complete' + 'state': '', // The state of the search: ''|'init'|'interim'|'cancelled'|'complete' + 'type': '' // The type of the search: 'basic'|'full' (set automatically in search algorithm) }]; // Define globalDropZone (universal drop area) and configDropZone (highlighting area on Config page) @@ -126,6 +127,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys $('.alert').hide(); $("#searchingArticles").show(); pushBrowserHistoryState(null, $('#prefix').val()); + // Initiate the search searchDirEntriesFromPrefix($('#prefix').val()); $('.navbar-collapse').collapse('hide'); document.getElementById('prefix').focus(); @@ -978,7 +980,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // Cancel any previous search that may still be running state.searches[0].state = 'cancelled'; // Store the new search term at the top of the state.searches array and initialize - state.searches.unshift({'prefix': prefix, 'state': 'init'}); + state.searches.unshift({'prefix': prefix, 'state': 'init', 'type': ''}); $('#activeContent').hide(); selectedArchive.findDirEntriesWithPrefix(state.searches[0], params.maxSearchResultsSize, populateListOfArticles); } else { @@ -1006,10 +1008,12 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys if (nbDirEntry >= params.maxSearchResultsSize) { message = 'First ' + params.maxSearchResultsSize + ' articles below (refine your search).'; } else { - message = nbDirEntry + ' articles found' + (stillSearching ? ' (searching for more...)' : '.'); + message = nbDirEntry + ' articles found' + (stillSearching ? ' (searching for more...)' : + search.type === 'full'? '.' : ' with basic search (try fewer words for full search).'); } if (nbDirEntry === 0) { - message = stillSearching ? 'Searching...' : 'No articles found.'; + message = stillSearching ? 'Searching... (' + search.type + ')' : + search.type === 'full' ? 'No articles found (full search).' : 'Basic search: no articles found (try fewer words for full search).'; } articleListHeaderMessageDiv.html(message); From 67dba55c204b3f12c7a4ff38546479c4ea8cb40a Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Wed, 6 May 2020 07:34:10 +0100 Subject: [PATCH 41/60] Remove redundant code and better messaging --- www/js/app.js | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 1e261021f..6056ea31a 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -215,6 +215,10 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys state.searches[0].state = 'cancelled'; $("#searchingArticles").hide(); $('#articleListWithHeader').hide(); + // Prune the searches array (most recent must be kept as comparator) + while (state.searches.length > 1) { + state.searches.pop(); + } } }); $("#btnRandomArticle").on("click", function(e) { @@ -977,7 +981,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys */ function searchDirEntriesFromPrefix(prefix) { if (selectedArchive !== null && selectedArchive.isReady()) { - // Cancel any previous search that may still be running + // Cancel any previous search that may still be running before creating new search state.searches[0].state = 'cancelled'; // Store the new search term at the top of the state.searches array and initialize state.searches.unshift({'prefix': prefix, 'state': 'init', 'type': ''}); @@ -999,21 +1003,19 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys * @param {Object} search The original search object */ function populateListOfArticles(dirEntryArray, search) { + // Do not allow cancelled searches to report if (search.state === 'cancelled') return; var stillSearching = search.state === 'interim'; var articleListHeaderMessageDiv = $('#articleListHeaderMessage'); var nbDirEntry = dirEntryArray ? dirEntryArray.length : 0; var message; - if (nbDirEntry >= params.maxSearchResultsSize) { - message = 'First ' + params.maxSearchResultsSize + ' articles below (refine your search).'; + if (stillSearching) { + message = 'Searching [' + search.type + ']... found: ' + nbDirEntry; + } else if (nbDirEntry >= params.maxSearchResultsSize) { + message = 'First ' + params.maxSearchResultsSize + ' articles found (refine your search).'; } else { - message = nbDirEntry + ' articles found' + (stillSearching ? ' (searching for more...)' : - search.type === 'full'? '.' : ' with basic search (try fewer words for full search).'); - } - if (nbDirEntry === 0) { - message = stillSearching ? 'Searching... (' + search.type + ')' : - search.type === 'full' ? 'No articles found (full search).' : 'Basic search: no articles found (try fewer words for full search).'; + message = 'Finished. ' + (nbDirEntry ? nbDirEntry : 'No') + ' articles found' + (search.type === 'basic' ? ': try fewer words for full search.' : '.'); } articleListHeaderMessageDiv.html(message); @@ -1031,17 +1033,15 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // We have to use mousedown below instead of click as otherwise the prefix blur event fires first // and prevents this event from firing; note that touch also triggers mousedown $('#articleList a').on('mousedown', function (e) { + // Cancel search immediately (we'll prune in the blur event) state.searches[0].state = 'cancelled'; handleTitleClick(e); return false; }); if (!stillSearching) $('#searchingArticles').hide(); $('#articleListWithHeader').show(); - // We've finished searching, so we can trim state.search to prevent it from growing too large - if (search.state === 'complete') state.search.pop(); - } - + /** * Handles the click on the title of an article in search results * @param {Event} event @@ -1096,7 +1096,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys * @param {DirEntry} dirEntry The directory entry of the article to read */ function readArticle(dirEntry) { - state.searches[0].state = 'cancelled'; // Reset state.searches.lastPrefix to allow users to search the same string again if they want to state.searches[0].prefix = ''; // Only update for expectedArticleURLToBeDisplayed. @@ -1581,7 +1580,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } function goToRandomArticle() { - state.searches[0].state = 'cancelled'; $("#searchingArticles").show(); selectedArchive.getRandomDirEntry(function(dirEntry) { if (dirEntry === null || dirEntry === undefined) { @@ -1603,7 +1601,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } function goToMainArticle() { - state.searches[0].state = 'cancelled'; $("#searchingArticles").show(); selectedArchive.getMainPageDirEntry(function(dirEntry) { if (dirEntry === null || dirEntry === undefined) { From 7453da4b003ecfa3a32c13c50ecb46e0f19a9d0b Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 9 May 2020 11:27:34 +0100 Subject: [PATCH 42/60] Changes from self-review --- www/js/app.js | 6 ++++-- www/js/lib/zimArchive.js | 33 +++++++++++++++++---------------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 6056ea31a..724aa1061 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -1015,7 +1015,9 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } else if (nbDirEntry >= params.maxSearchResultsSize) { message = 'First ' + params.maxSearchResultsSize + ' articles found (refine your search).'; } else { - message = 'Finished. ' + (nbDirEntry ? nbDirEntry : 'No') + ' articles found' + (search.type === 'basic' ? ': try fewer words for full search.' : '.'); + message = 'Finished. ' + (nbDirEntry ? nbDirEntry : 'No') + ' articles found' + ( + search.type === 'basic' ? ': try fewer words for full search.' : '.' + ); } articleListHeaderMessageDiv.html(message); @@ -1096,7 +1098,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys * @param {DirEntry} dirEntry The directory entry of the article to read */ function readArticle(dirEntry) { - // Reset state.searches.lastPrefix to allow users to search the same string again if they want to + // Reset search prefix to allow users to search the same string again if they want to state.searches[0].prefix = ''; // Only update for expectedArticleURLToBeDisplayed. expectedArticleURLToBeDisplayed = dirEntry.namespace + "/" + dirEntry.url; diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 4c1f854a2..0bdb735e1 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -150,8 +150,8 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * * @param {Object} search The current state.searches object * @param {Integer} resultSize The number of dirEntries to find - * @param {callbackDirEntryList} callback The funciton to call with the result - * @param {Boolean} noInterim A flag to prevent callback until all results are ready + * @param {callbackDirEntryList} callback The function to call with the result + * @param {Boolean} noInterim A flag to prevent callback until all results are ready (used in testing) */ ZIMArchive.prototype.findDirEntriesWithPrefix = function (search, resultSize, callback, noInterim) { var prefix = search.prefix; @@ -186,28 +186,29 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], function searchNextVariant() { // If user has initiated a new search, cancel this one - if (search.state === 'cancelled') return; + if (search.state === 'cancelled') return callback([], search); if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { search.state = 'complete'; - callback(dirEntries, search); - return; + return callback(dirEntries, search); } // Dynamically populate list of articles search.state = 'interim'; if (!noInterim) callback(dirEntries, search); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); - that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, search, function (newDirEntries, interim) { - if (search.state === 'cancelled') return; - if (interim) { - inProgressResults = inProgressResults.concat(newDirEntries); - } else { - [].push.apply(dirEntries, newDirEntries); - inProgressResults = dirEntries; - searchNextVariant(); + that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, search, + function (newDirEntries, interim) { + if (search.state === 'cancelled') return callback([], search); + if (interim) { + inProgressResults = inProgressResults.concat(newDirEntries); + } else { + [].push.apply(dirEntries, newDirEntries); + inProgressResults = dirEntries; + searchNextVariant(); + } + if (!noInterim) callback(inProgressResults, search); } - if (!noInterim) callback(inProgressResults, search); - }); + ); } searchNextVariant(); }; @@ -239,7 +240,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], if (~title.indexOf(prefix) && dirEntry.namespace === "A") { dirEntries.push(dirEntry); // Report interim result - callback(dirEntry, true); + callback([dirEntry], true); } return addDirEntries(index + 1); }); From 1fa46ced365ed4f9b3b7635121b274db1e8eede1 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 10 May 2020 11:05:00 +0100 Subject: [PATCH 43/60] Restore 50 results max search size --- www/index.html | 2 +- www/js/app.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/www/index.html b/www/index.html index 51a81b241..19c9c94d1 100644 --- a/www/index.html +++ b/www/index.html @@ -313,7 +313,7 @@

Performance settings

diff --git a/www/js/app.js b/www/js/app.js index 724aa1061..f2b97cb68 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -70,8 +70,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys params['showUIAnimations'] = settingsStore.getItem('showUIAnimations') ? settingsStore.getItem('showUIAnimations') === 'true' : true; document.getElementById('hideActiveContentWarningCheck').checked = params.hideActiveContentWarning; document.getElementById('showUIAnimationsCheck').checked = params.showUIAnimations; - // Maximum number of article titles to return (range is 5 - 100, default 30) - params['maxSearchResultsSize'] = settingsStore.getItem('maxSearchResultsSize') || 30; + // Maximum number of article titles to return (range is 5 - 50, default 25) + params['maxSearchResultsSize'] = settingsStore.getItem('maxSearchResultsSize') || 25; document.getElementById('titleSearchRange').value = params.maxSearchResultsSize; document.getElementById('titleSearchRangeVal').innerHTML = params.maxSearchResultsSize; // A global parameter that turns caching on or off and deletes the cache (it defaults to true unless explicitly turned off in UI) From 00d102f9f65d90565c9256a4b4f42318dd4d082d Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 10 May 2020 11:05:42 +0100 Subject: [PATCH 44/60] Simplify interim reporting of search results --- www/js/lib/zimArchive.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 0bdb735e1..ec6c8c277 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -182,7 +182,6 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], ) ); var dirEntries = []; - var inProgressResults = []; function searchNextVariant() { // If user has initiated a new search, cancel this one @@ -199,14 +198,10 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, search, function (newDirEntries, interim) { if (search.state === 'cancelled') return callback([], search); - if (interim) { - inProgressResults = inProgressResults.concat(newDirEntries); - } else { + if (interim) {// Only push interim results (else results will be pushed again at end of variant loop) [].push.apply(dirEntries, newDirEntries); - inProgressResults = dirEntries; - searchNextVariant(); - } - if (!noInterim) callback(inProgressResults, search); + if (!noInterim && newDirEntries.length) callback(dirEntries, search); + } else searchNextVariant(); } ); } From 5a7c686e44c3e5ad6489898b378370662d6dc561 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Thu, 2 Jul 2020 12:14:29 +0100 Subject: [PATCH 45/60] Clean up after rebase --- www/js/app.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index f2b97cb68..4969a30e8 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -29,12 +29,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesystemAccess','q'], function($, zimArchiveLoader, uiUtil, settingsStore, abstractFilesystemAccess, Q) { - /** - * Maximum number of articles to display in a search - * @type Integer - */ - const MAX_SEARCH_RESULT_SIZE = 50; - /** * The delay (in milliseconds) between two "keepalive" messages sent to the ServiceWorker (so that it is not stopped * by the browser, and keeps the MessageChannel to communicate with the application) From 71b93b27cb4c13afffabda1c1b0253d6b5027b7b Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Thu, 2 Jul 2020 12:24:20 +0100 Subject: [PATCH 46/60] Add comment about searching for common patterns first --- www/js/lib/zimArchive.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index ec6c8c277..c2209e844 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -156,7 +156,10 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], ZIMArchive.prototype.findDirEntriesWithPrefix = function (search, resultSize, callback, noInterim) { var prefix = search.prefix; var that = this; - // Establish array of initial values that must be searched first + // Establish array of initial values that must be searched first. All of these patterns are generated by the full + // search type, and some by basic, but we need the most common patterns to be searched first, as it returns search + // results much more quickly if we do this (and the user can click on a result before the rarer patterns complete) + // NB duplicates are removed before processing search array var startArray = []; // Ensure a search is done on the string exactly as typed startArray.push(prefix); From b4eedd9495e5acc82fcd055888e4a0647e57fee7 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Thu, 2 Jul 2020 14:43:57 +0100 Subject: [PATCH 47/60] Only return searches beginning with prefix (rather than containing prefix) --- www/js/lib/zimArchive.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index c2209e844..fd7d0dbad 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -235,7 +235,8 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); - if (~title.indexOf(prefix) && dirEntry.namespace === "A") { + // Only return dirEntries with titles that actually begin with prefix + if (dirEntry.namespace === "A" && title.indexOf(prefix) === 0) { dirEntries.push(dirEntry); // Report interim result callback([dirEntry], true); From 52b554e2dc70300a4286d1635850430a05a59dbb Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Fri, 3 Jul 2020 10:00:08 +0100 Subject: [PATCH 48/60] Remove list of searches and reduce to single object --- www/js/app.js | 26 +++++++++++--------------- www/js/lib/zimArchive.js | 4 ++-- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 4969a30e8..ed49b1bf3 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -77,11 +77,11 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // Define global state // An array to hold searches and their state (allows modules to tell which search is current and cancel old searches) - state['searches'] = [{ + state['search'] = { 'prefix': '', // A field to hold the original search string 'state': '', // The state of the search: ''|'init'|'interim'|'cancelled'|'complete' 'type': '' // The type of the search: 'basic'|'full' (set automatically in search algorithm) - }]; + }; // Define globalDropZone (universal drop area) and configDropZone (highlighting area on Config page) var globalDropZone = document.getElementById('search-article'); @@ -206,13 +206,9 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // Hide the search results if user moves out of prefix field $('#prefix').on('blur', function() { if (!searchArticlesFocused) { - state.searches[0].state = 'cancelled'; + state.search.state = 'cancelled'; $("#searchingArticles").hide(); $('#articleListWithHeader').hide(); - // Prune the searches array (most recent must be kept as comparator) - while (state.searches.length > 1) { - state.searches.pop(); - } } }); $("#btnRandomArticle").on("click", function(e) { @@ -712,7 +708,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } else if (titleSearch && titleSearch !== '') { $('#prefix').val(titleSearch); - if (titleSearch !== state.searches[0].prefix) { + if (titleSearch !== state.search.prefix) { searchDirEntriesFromPrefix(titleSearch); } else { $('#prefix').focus(); @@ -962,7 +958,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } window.timeoutKeyUpPrefix = window.setTimeout(function () { var prefix = $("#prefix").val(); - if (prefix && prefix.length > 0 && prefix !== state.searches[0].prefix) { + if (prefix && prefix.length > 0 && prefix !== state.search.prefix) { $('#searchArticles').click(); } }, 500); @@ -976,11 +972,11 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys function searchDirEntriesFromPrefix(prefix) { if (selectedArchive !== null && selectedArchive.isReady()) { // Cancel any previous search that may still be running before creating new search - state.searches[0].state = 'cancelled'; - // Store the new search term at the top of the state.searches array and initialize - state.searches.unshift({'prefix': prefix, 'state': 'init', 'type': ''}); + state.search.state = 'cancelled'; + // Store the new search term in the state.search global object and initialize + state.search = {'prefix': prefix, 'state': 'init', 'type': ''}; $('#activeContent').hide(); - selectedArchive.findDirEntriesWithPrefix(state.searches[0], params.maxSearchResultsSize, populateListOfArticles); + selectedArchive.findDirEntriesWithPrefix(state.search, params.maxSearchResultsSize, populateListOfArticles); } else { $('#searchingArticles').hide(); // We have to remove the focus from the search field, @@ -1030,7 +1026,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // and prevents this event from firing; note that touch also triggers mousedown $('#articleList a').on('mousedown', function (e) { // Cancel search immediately (we'll prune in the blur event) - state.searches[0].state = 'cancelled'; + state.search.state = 'cancelled'; handleTitleClick(e); return false; }); @@ -1093,7 +1089,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys */ function readArticle(dirEntry) { // Reset search prefix to allow users to search the same string again if they want to - state.searches[0].prefix = ''; + state.search.prefix = ''; // Only update for expectedArticleURLToBeDisplayed. expectedArticleURLToBeDisplayed = dirEntry.namespace + "/" + dirEntry.url; // We must remove focus from UI elements in order to deselect whichever one was clicked (in both jQuery and SW modes), diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index fd7d0dbad..10f3fa7dd 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -148,7 +148,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * This should be enhanced when the ZIM format will be modified to store normalized titles * See https://phabricator.wikimedia.org/T108536 * - * @param {Object} search The current state.searches object + * @param {Object} search The current state.search object * @param {Integer} resultSize The number of dirEntries to find * @param {callbackDirEntryList} callback The function to call with the result * @param {Boolean} noInterim A flag to prevent callback until all results are ready (used in testing) @@ -216,7 +216,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * * @param {String} prefix The case-sensitive value against which dirEntry titles (or url) will be compared * @param {Integer} resultSize The maximum number of results to return - * @param {Object} search The original state.searches search object (so that we can cancel long binary searches) + * @param {Object} search The original state.search object (so that we can cancel long binary searches) * @param {callbackDirEntryList} callback The function to call with the array of dirEntries with titles that begin with prefix */ ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, search, callback) { From 0497822010a5964932dd9f16922d619cd9f5dd2d Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Fri, 3 Jul 2020 10:16:28 +0100 Subject: [PATCH 49/60] Make search object local to tests.js --- tests/init.js | 4 ---- tests/tests.js | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/init.js b/tests/init.js index 7d06268a1..169d35ccb 100644 --- a/tests/init.js +++ b/tests/init.js @@ -24,10 +24,6 @@ // Define global params needed for tests to run on existing app code var params = {}; -var search = { - 'prefix' : '', - 'state' : '' -}; require.config({ baseUrl: 'www/js/lib', diff --git a/tests/tests.js b/tests/tests.js index 2741520f2..331f28637 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -24,6 +24,11 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], var localZimArchive; + // Dummy search object so that we can simulate UI searches + var search = { + 'prefix' : '', + 'state' : '' + }; /** * Make an HTTP request for a Blob and return a Promise From 6abf8dc6ba5a89561ea2ec0dc580be3a9d45ceaa Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Fri, 3 Jul 2020 11:12:42 +0100 Subject: [PATCH 50/60] Rename global state object to "global" --- www/js/app.js | 22 +++++++++++----------- www/js/init.js | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index ed49b1bf3..f3ea0313a 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -76,8 +76,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys uiUtil.applyAppTheme(params.appTheme); // Define global state - // An array to hold searches and their state (allows modules to tell which search is current and cancel old searches) - state['search'] = { + // An object to hold the current search and its state (allows cacncellation of search across modules) + global['search'] = { 'prefix': '', // A field to hold the original search string 'state': '', // The state of the search: ''|'init'|'interim'|'cancelled'|'complete' 'type': '' // The type of the search: 'basic'|'full' (set automatically in search algorithm) @@ -206,7 +206,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // Hide the search results if user moves out of prefix field $('#prefix').on('blur', function() { if (!searchArticlesFocused) { - state.search.state = 'cancelled'; + global.search.state = 'cancelled'; $("#searchingArticles").hide(); $('#articleListWithHeader').hide(); } @@ -708,7 +708,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } else if (titleSearch && titleSearch !== '') { $('#prefix').val(titleSearch); - if (titleSearch !== state.search.prefix) { + if (titleSearch !== global.search.prefix) { searchDirEntriesFromPrefix(titleSearch); } else { $('#prefix').focus(); @@ -958,7 +958,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } window.timeoutKeyUpPrefix = window.setTimeout(function () { var prefix = $("#prefix").val(); - if (prefix && prefix.length > 0 && prefix !== state.search.prefix) { + if (prefix && prefix.length > 0 && prefix !== global.search.prefix) { $('#searchArticles').click(); } }, 500); @@ -972,11 +972,11 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys function searchDirEntriesFromPrefix(prefix) { if (selectedArchive !== null && selectedArchive.isReady()) { // Cancel any previous search that may still be running before creating new search - state.search.state = 'cancelled'; + global.search.state = 'cancelled'; // Store the new search term in the state.search global object and initialize - state.search = {'prefix': prefix, 'state': 'init', 'type': ''}; + global.search = {'prefix': prefix, 'state': 'init', 'type': ''}; $('#activeContent').hide(); - selectedArchive.findDirEntriesWithPrefix(state.search, params.maxSearchResultsSize, populateListOfArticles); + selectedArchive.findDirEntriesWithPrefix(global.search, params.maxSearchResultsSize, populateListOfArticles); } else { $('#searchingArticles').hide(); // We have to remove the focus from the search field, @@ -989,7 +989,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys /** * Display the list of articles with the given array of DirEntry - * @param {Array} dirEntryArray The array of dirEntries returned from the binary + * @param {Array} dirEntryArray The array of dirEntries returned from the binary search * @param {Object} search The original search object */ function populateListOfArticles(dirEntryArray, search) { @@ -1026,7 +1026,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // and prevents this event from firing; note that touch also triggers mousedown $('#articleList a').on('mousedown', function (e) { // Cancel search immediately (we'll prune in the blur event) - state.search.state = 'cancelled'; + global.search.state = 'cancelled'; handleTitleClick(e); return false; }); @@ -1089,7 +1089,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys */ function readArticle(dirEntry) { // Reset search prefix to allow users to search the same string again if they want to - state.search.prefix = ''; + global.search.prefix = ''; // Only update for expectedArticleURLToBeDisplayed. expectedArticleURLToBeDisplayed = dirEntry.namespace + "/" + dirEntry.url; // We must remove focus from UI elements in order to deselect whichever one was clicked (in both jQuery and SW modes), diff --git a/www/js/init.js b/www/js/init.js index b4ad26f1a..f422f50c0 100644 --- a/www/js/init.js +++ b/www/js/init.js @@ -31,11 +31,11 @@ var params = {}; /** - * A global state object + * A global object for storing app state * * @type Object */ -var state = {}; +var global = {}; require.config({ baseUrl: 'js/lib', From 7f225abb72e7c577a7c7ac44a313f29a29e346ee Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Wed, 8 Jul 2020 21:21:51 +0100 Subject: [PATCH 51/60] Change global.search.state to globalstate.search.status --- tests/tests.js | 2 +- www/js/app.js | 32 ++++++++++++++++---------------- www/js/init.js | 2 +- www/js/lib/zimArchive.js | 14 +++++++------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 331f28637..2de76ebf3 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -27,7 +27,7 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], // Dummy search object so that we can simulate UI searches var search = { 'prefix' : '', - 'state' : '' + 'status' : '' }; /** diff --git a/www/js/app.js b/www/js/app.js index f3ea0313a..8f0d8c251 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -75,11 +75,11 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys document.getElementById('appThemeSelect').value = params.appTheme; uiUtil.applyAppTheme(params.appTheme); - // Define global state - // An object to hold the current search and its state (allows cacncellation of search across modules) - global['search'] = { + // Define global state (declared in init.js) + // An object to hold the current search and its state (allows cancellation of search across modules) + globalstate['search'] = { 'prefix': '', // A field to hold the original search string - 'state': '', // The state of the search: ''|'init'|'interim'|'cancelled'|'complete' + 'status': '', // The state of the search: ''|'init'|'interim'|'cancelled'|'complete' 'type': '' // The type of the search: 'basic'|'full' (set automatically in search algorithm) }; @@ -206,7 +206,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // Hide the search results if user moves out of prefix field $('#prefix').on('blur', function() { if (!searchArticlesFocused) { - global.search.state = 'cancelled'; + globalstate.search.status = 'cancelled'; $("#searchingArticles").hide(); $('#articleListWithHeader').hide(); } @@ -708,7 +708,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } else if (titleSearch && titleSearch !== '') { $('#prefix').val(titleSearch); - if (titleSearch !== global.search.prefix) { + if (titleSearch !== globalstate.search.prefix) { searchDirEntriesFromPrefix(titleSearch); } else { $('#prefix').focus(); @@ -958,7 +958,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys } window.timeoutKeyUpPrefix = window.setTimeout(function () { var prefix = $("#prefix").val(); - if (prefix && prefix.length > 0 && prefix !== global.search.prefix) { + if (prefix && prefix.length > 0 && prefix !== globalstate.search.prefix) { $('#searchArticles').click(); } }, 500); @@ -972,11 +972,11 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys function searchDirEntriesFromPrefix(prefix) { if (selectedArchive !== null && selectedArchive.isReady()) { // Cancel any previous search that may still be running before creating new search - global.search.state = 'cancelled'; - // Store the new search term in the state.search global object and initialize - global.search = {'prefix': prefix, 'state': 'init', 'type': ''}; + globalstate.search.status = 'cancelled'; + // Store the new search term in the globalstate.search object and initialize + globalstate.search = {'prefix': prefix, 'status': 'init', 'type': ''}; $('#activeContent').hide(); - selectedArchive.findDirEntriesWithPrefix(global.search, params.maxSearchResultsSize, populateListOfArticles); + selectedArchive.findDirEntriesWithPrefix(globalstate.search, params.maxSearchResultsSize, populateListOfArticles); } else { $('#searchingArticles').hide(); // We have to remove the focus from the search field, @@ -994,8 +994,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys */ function populateListOfArticles(dirEntryArray, search) { // Do not allow cancelled searches to report - if (search.state === 'cancelled') return; - var stillSearching = search.state === 'interim'; + if (search.status === 'cancelled') return; + var stillSearching = search.status === 'interim'; var articleListHeaderMessageDiv = $('#articleListHeaderMessage'); var nbDirEntry = dirEntryArray ? dirEntryArray.length : 0; @@ -1025,8 +1025,8 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // We have to use mousedown below instead of click as otherwise the prefix blur event fires first // and prevents this event from firing; note that touch also triggers mousedown $('#articleList a').on('mousedown', function (e) { - // Cancel search immediately (we'll prune in the blur event) - global.search.state = 'cancelled'; + // Cancel search immediately + globalstate.search.status = 'cancelled'; handleTitleClick(e); return false; }); @@ -1089,7 +1089,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys */ function readArticle(dirEntry) { // Reset search prefix to allow users to search the same string again if they want to - global.search.prefix = ''; + globalstate.search.prefix = ''; // Only update for expectedArticleURLToBeDisplayed. expectedArticleURLToBeDisplayed = dirEntry.namespace + "/" + dirEntry.url; // We must remove focus from UI elements in order to deselect whichever one was clicked (in both jQuery and SW modes), diff --git a/www/js/init.js b/www/js/init.js index f422f50c0..89b737fc1 100644 --- a/www/js/init.js +++ b/www/js/init.js @@ -35,7 +35,7 @@ var params = {}; * * @type Object */ -var global = {}; +var globalstate = {}; require.config({ baseUrl: 'js/lib', diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 10f3fa7dd..4602dd3d0 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -148,7 +148,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * This should be enhanced when the ZIM format will be modified to store normalized titles * See https://phabricator.wikimedia.org/T108536 * - * @param {Object} search The current state.search object + * @param {Object} search The current globalstate.search object * @param {Integer} resultSize The number of dirEntries to find * @param {callbackDirEntryList} callback The function to call with the result * @param {Boolean} noInterim A flag to prevent callback until all results are ready (used in testing) @@ -188,19 +188,19 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], function searchNextVariant() { // If user has initiated a new search, cancel this one - if (search.state === 'cancelled') return callback([], search); + if (search.status === 'cancelled') return callback([], search); if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { - search.state = 'complete'; + search.status = 'complete'; return callback(dirEntries, search); } // Dynamically populate list of articles - search.state = 'interim'; + search.status = 'interim'; if (!noInterim) callback(dirEntries, search); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, search, function (newDirEntries, interim) { - if (search.state === 'cancelled') return callback([], search); + if (search.status === 'cancelled') return callback([], search); if (interim) {// Only push interim results (else results will be pushed again at end of variant loop) [].push.apply(dirEntries, newDirEntries); if (!noInterim && newDirEntries.length) callback(dirEntries, search); @@ -216,7 +216,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * * @param {String} prefix The case-sensitive value against which dirEntry titles (or url) will be compared * @param {Integer} resultSize The maximum number of results to return - * @param {Object} search The original state.search object (so that we can cancel long binary searches) + * @param {Object} search The original globalstate.search object (so that we can cancel long binary searches) * @param {callbackDirEntryList} callback The function to call with the array of dirEntries with titles that begin with prefix */ ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, search, callback) { @@ -231,7 +231,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], }, true).then(function(firstIndex) { var dirEntries = []; var addDirEntries = function(index) { - if (search.state === 'cancelled' || index >= firstIndex + resultSize || index >= that._file.articleCount) + if (search.status === 'cancelled' || index >= firstIndex + resultSize || index >= that._file.articleCount) return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); From fa177a6b5fbc36b8bfcfedaa4b69ab2ee07d010d Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Wed, 8 Jul 2020 21:42:47 +0100 Subject: [PATCH 52/60] Remove dummy search object --- tests/tests.js | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 2de76ebf3..b0eb18a20 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -24,18 +24,12 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], var localZimArchive; - // Dummy search object so that we can simulate UI searches - var search = { - 'prefix' : '', - 'status' : '' - }; - /** * Make an HTTP request for a Blob and return a Promise * * @param {String} url URL to download from * @param {String} name Name to give to the Blob instance - * @returns {Promise} + * @returns {Promise} A Promise for the Blob */ function makeBlobRequest(url, name) { return new Promise(function (resolve, reject) { @@ -183,8 +177,7 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - search.prefix = 'A'; - localZimArchive.findDirEntriesWithPrefix(search, 5, callbackFunction, true); + localZimArchive.findDirEntriesWithPrefix({prefix: 'A'}, 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'a'", function(assert) { var done = assert.async(); @@ -195,8 +188,7 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - search.prefix = 'a'; - localZimArchive.findDirEntriesWithPrefix(search, 5, callbackFunction, true); + localZimArchive.findDirEntriesWithPrefix({prefix: 'a'}, 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'blues brothers'", function(assert) { var done = assert.async(); @@ -207,8 +199,7 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'Blues Brothers (film)', 'First result should be "Blues Brothers (film)"'); done(); }; - search.prefix = 'blues brothers'; - localZimArchive.findDirEntriesWithPrefix(search, 5, callbackFunction, true); + localZimArchive.findDirEntriesWithPrefix({prefix: 'blues brothers'}, 5, callbackFunction, true); }); QUnit.test("article '(The Night Time Is) The Right Time' correctly redirects to 'Night Time Is the Right Time'", function(assert) { var done = assert.async(); From c7a82fb6b2046d01fe82a7a651326862e861c94e Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Thu, 9 Jul 2020 08:43:13 +0100 Subject: [PATCH 53/60] Keep and test original search prefix for more efficient cancelling --- www/js/app.js | 14 +++++++------- www/js/lib/zimArchive.js | 26 ++++++++++++++------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index 8f0d8c251..c018a3cea 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -990,23 +990,23 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys /** * Display the list of articles with the given array of DirEntry * @param {Array} dirEntryArray The array of dirEntries returned from the binary search - * @param {Object} search The original search object + * @param {Object} reportingSearchPrefix The prefix of the reporting search */ - function populateListOfArticles(dirEntryArray, search) { - // Do not allow cancelled searches to report - if (search.status === 'cancelled') return; - var stillSearching = search.status === 'interim'; + function populateListOfArticles(dirEntryArray, reportingSearchPrefix) { + // Do not allow cancelled or changedsearches to report + if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== reportingSearchPrefix) return; + var stillSearching = globalstate.search.status === 'interim'; var articleListHeaderMessageDiv = $('#articleListHeaderMessage'); var nbDirEntry = dirEntryArray ? dirEntryArray.length : 0; var message; if (stillSearching) { - message = 'Searching [' + search.type + ']... found: ' + nbDirEntry; + message = 'Searching [' + globalstate.search.type + ']... found: ' + nbDirEntry; } else if (nbDirEntry >= params.maxSearchResultsSize) { message = 'First ' + params.maxSearchResultsSize + ' articles found (refine your search).'; } else { message = 'Finished. ' + (nbDirEntry ? nbDirEntry : 'No') + ' articles found' + ( - search.type === 'basic' ? ': try fewer words for full search.' : '.' + globalstate.search.type === 'basic' ? ': try fewer words for full search.' : '.' ); } diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 4602dd3d0..88703cb02 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -154,7 +154,8 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * @param {Boolean} noInterim A flag to prevent callback until all results are ready (used in testing) */ ZIMArchive.prototype.findDirEntriesWithPrefix = function (search, resultSize, callback, noInterim) { - var prefix = search.prefix; + // Create a local invariable copy of the search prefix + const localPrefix = search.prefix; var that = this; // Establish array of initial values that must be searched first. All of these patterns are generated by the full // search type, and some by basic, but we need the most common patterns to be searched first, as it returns search @@ -162,9 +163,9 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], // NB duplicates are removed before processing search array var startArray = []; // Ensure a search is done on the string exactly as typed - startArray.push(prefix); + startArray.push(localPrefix); // Normalize any spacing and make string all lowercase - prefix = prefix.replace(/\s+/g, ' ').toLocaleLowerCase(); + var prefix = localPrefix.replace(/\s+/g, ' ').toLocaleLowerCase(); // Add lowercase string with initial uppercase (this is a very common pattern) startArray.push(prefix.replace(/^./, function (m) { return m.toLocaleUpperCase(); @@ -188,22 +189,22 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], function searchNextVariant() { // If user has initiated a new search, cancel this one - if (search.status === 'cancelled') return callback([], search); + if (search.status === 'cancelled' || search.prefix !== localPrefix) return callback([], localPrefix); if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { search.status = 'complete'; - return callback(dirEntries, search); + return callback(dirEntries, localPrefix); } // Dynamically populate list of articles search.status = 'interim'; - if (!noInterim) callback(dirEntries, search); + if (!noInterim) callback(dirEntries, localPrefix); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); - that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, search, + that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, localPrefix, search, function (newDirEntries, interim) { - if (search.status === 'cancelled') return callback([], search); + if (search.status === 'cancelled' || search.prefix !== localPrefix) return callback([], localPrefix); if (interim) {// Only push interim results (else results will be pushed again at end of variant loop) [].push.apply(dirEntries, newDirEntries); - if (!noInterim && newDirEntries.length) callback(dirEntries, search); + if (!noInterim && newDirEntries.length) callback(dirEntries, localPrefix); } else searchNextVariant(); } ); @@ -216,10 +217,11 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * * @param {String} prefix The case-sensitive value against which dirEntry titles (or url) will be compared * @param {Integer} resultSize The maximum number of results to return - * @param {Object} search The original globalstate.search object (so that we can cancel long binary searches) + * @param {String} originalPrefix The original prefix typed by the user to initiate the local search + * @param {Object} search The globalstate.search object (for comparison, so that we can cancel long binary searches) * @param {callbackDirEntryList} callback The function to call with the array of dirEntries with titles that begin with prefix */ - ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, search, callback) { + ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, originalPrefix, search, callback) { var that = this; util.binarySearch(0, this._file.articleCount, function(i) { return that._file.dirEntryByTitleIndex(i).then(function(dirEntry) { @@ -231,7 +233,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], }, true).then(function(firstIndex) { var dirEntries = []; var addDirEntries = function(index) { - if (search.status === 'cancelled' || index >= firstIndex + resultSize || index >= that._file.articleCount) + if (search.status === 'cancelled' || search.prefix !== originalPrefix || index >= firstIndex + resultSize || index >= that._file.articleCount) return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); From d05650129faa7454d6d2734b44c7146633e5c9f9 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Thu, 9 Jul 2020 11:32:56 +0100 Subject: [PATCH 54/60] Minor updates from self-review --- www/js/app.js | 6 ++---- www/js/lib/zimArchive.js | 6 +++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index c018a3cea..c5513b6ac 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -79,7 +79,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // An object to hold the current search and its state (allows cancellation of search across modules) globalstate['search'] = { 'prefix': '', // A field to hold the original search string - 'status': '', // The state of the search: ''|'init'|'interim'|'cancelled'|'complete' + 'status': '', // The status of the search: ''|'init'|'interim'|'cancelled'|'complete' 'type': '' // The type of the search: 'basic'|'full' (set automatically in search algorithm) }; @@ -971,8 +971,6 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys */ function searchDirEntriesFromPrefix(prefix) { if (selectedArchive !== null && selectedArchive.isReady()) { - // Cancel any previous search that may still be running before creating new search - globalstate.search.status = 'cancelled'; // Store the new search term in the globalstate.search object and initialize globalstate.search = {'prefix': prefix, 'status': 'init', 'type': ''}; $('#activeContent').hide(); @@ -993,7 +991,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys * @param {Object} reportingSearchPrefix The prefix of the reporting search */ function populateListOfArticles(dirEntryArray, reportingSearchPrefix) { - // Do not allow cancelled or changedsearches to report + // Do not allow cancelled or changed searches to report if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== reportingSearchPrefix) return; var stillSearching = globalstate.search.status === 'interim'; var articleListHeaderMessageDiv = $('#articleListHeaderMessage'); diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index 88703cb02..a30d88cfd 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -225,8 +225,8 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], var that = this; util.binarySearch(0, this._file.articleCount, function(i) { return that._file.dirEntryByTitleIndex(i).then(function(dirEntry) { - if (dirEntry.namespace < "A") return 1; - if (dirEntry.namespace > "A") return -1; + if (dirEntry.namespace < 'A') return 1; + if (dirEntry.namespace > 'A') return -1; // We should now be in namespace A return prefix <= dirEntry.getTitleOrUrl() ? -1 : 1; }); @@ -238,7 +238,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); // Only return dirEntries with titles that actually begin with prefix - if (dirEntry.namespace === "A" && title.indexOf(prefix) === 0) { + if (dirEntry.namespace === 'A' && title.indexOf(prefix) === 0) { dirEntries.push(dirEntry); // Report interim result callback([dirEntry], true); From 8a7d740ac06cedc9c1d9eb01bbd5ffd015a04c85 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Thu, 9 Jul 2020 21:24:41 +0100 Subject: [PATCH 55/60] Prevent relaunching the same search if it is in progress --- www/js/app.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/www/js/app.js b/www/js/app.js index c5513b6ac..58805001d 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -117,12 +117,15 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys // Define behavior of HTML elements var searchArticlesFocused = false; $('#searchArticles').on('click', function() { + var prefix = document.getElementById('prefix').value; + // Do not initiate the same search if it is already in progress + if (globalstate.search.prefix === prefix && !/cancelled|complete/.test(globalstate.search.status)) return; $("#welcomeText").hide(); $('.alert').hide(); $("#searchingArticles").show(); - pushBrowserHistoryState(null, $('#prefix').val()); + pushBrowserHistoryState(null, prefix); // Initiate the search - searchDirEntriesFromPrefix($('#prefix').val()); + searchDirEntriesFromPrefix(prefix); $('.navbar-collapse').collapse('hide'); document.getElementById('prefix').focus(); // This flag is set to true in the mousedown event below From 01a75d2c7dfd4d6a8f8f45799d0121e85eacbef1 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Fri, 10 Jul 2020 08:05:00 +0100 Subject: [PATCH 56/60] Add early return and check globalstate.search instead of local --- www/js/lib/zimArchive.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index a30d88cfd..ec0d45e02 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -189,7 +189,8 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], function searchNextVariant() { // If user has initiated a new search, cancel this one - if (search.status === 'cancelled' || search.prefix !== localPrefix) return callback([], localPrefix); + if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== localPrefix) + return callback([], localPrefix); if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { search.status = 'complete'; return callback(dirEntries, localPrefix); @@ -199,9 +200,10 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], if (!noInterim) callback(dirEntries, localPrefix); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); - that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, localPrefix, search, + that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, localPrefix, function (newDirEntries, interim) { - if (search.status === 'cancelled' || search.prefix !== localPrefix) return callback([], localPrefix); + if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== localPrefix) + return callback([], localPrefix); if (interim) {// Only push interim results (else results will be pushed again at end of variant loop) [].push.apply(dirEntries, newDirEntries); if (!noInterim && newDirEntries.length) callback(dirEntries, localPrefix); @@ -218,13 +220,15 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * @param {String} prefix The case-sensitive value against which dirEntry titles (or url) will be compared * @param {Integer} resultSize The maximum number of results to return * @param {String} originalPrefix The original prefix typed by the user to initiate the local search - * @param {Object} search The globalstate.search object (for comparison, so that we can cancel long binary searches) * @param {callbackDirEntryList} callback The function to call with the array of dirEntries with titles that begin with prefix */ - ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, originalPrefix, search, callback) { + ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, originalPrefix, callback) { var that = this; util.binarySearch(0, this._file.articleCount, function(i) { return that._file.dirEntryByTitleIndex(i).then(function(dirEntry) { + // Return early if the search is no longer needed + if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== originalPrefix) + return 0; if (dirEntry.namespace < 'A') return 1; if (dirEntry.namespace > 'A') return -1; // We should now be in namespace A @@ -233,7 +237,8 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], }, true).then(function(firstIndex) { var dirEntries = []; var addDirEntries = function(index) { - if (search.status === 'cancelled' || search.prefix !== originalPrefix || index >= firstIndex + resultSize || index >= that._file.articleCount) + if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== originalPrefix || + index >= firstIndex + resultSize || index >= that._file.articleCount) return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); From 115569b61d42d87a8b736c8c3acbdfd5506b3401 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Fri, 10 Jul 2020 08:28:50 +0100 Subject: [PATCH 57/60] Fix tests by reinstating globalstate variable --- tests/init.js | 7 +++++++ tests/tests.js | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/tests/init.js b/tests/init.js index 169d35ccb..66eacb113 100644 --- a/tests/init.js +++ b/tests/init.js @@ -25,6 +25,13 @@ // Define global params needed for tests to run on existing app code var params = {}; +/** + * A global object for storing app state + * + * @type Object + */ +var globalstate = {}; + require.config({ baseUrl: 'www/js/lib', paths: { diff --git a/tests/tests.js b/tests/tests.js index b0eb18a20..3e97d7c31 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -24,6 +24,13 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], var localZimArchive; + // Define global state (declared in init.js) - needed to run tests on live code + globalstate['search'] = { + 'prefix': '', // A field to hold the original search string + 'status': '', // The status of the search: ''|'init'|'interim'|'cancelled'|'complete' + 'type': '' // The type of the search: 'basic'|'full' (set automatically in search algorithm) + }; + /** * Make an HTTP request for a Blob and return a Promise * @@ -177,7 +184,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - localZimArchive.findDirEntriesWithPrefix({prefix: 'A'}, 5, callbackFunction, true); + globalstate.search.prefix = 'A'; + localZimArchive.findDirEntriesWithPrefix(globalstate.search, 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'a'", function(assert) { var done = assert.async(); @@ -188,7 +196,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - localZimArchive.findDirEntriesWithPrefix({prefix: 'a'}, 5, callbackFunction, true); + globalstate.search.prefix = 'a'; + localZimArchive.findDirEntriesWithPrefix(globalstate.search, 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'blues brothers'", function(assert) { var done = assert.async(); @@ -199,7 +208,8 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'Blues Brothers (film)', 'First result should be "Blues Brothers (film)"'); done(); }; - localZimArchive.findDirEntriesWithPrefix({prefix: 'blues brothers'}, 5, callbackFunction, true); + globalstate.search.prefix = 'blues brothers'; + localZimArchive.findDirEntriesWithPrefix(globalstate.search, 5, callbackFunction, true); }); QUnit.test("article '(The Night Time Is) The Right Time' correctly redirects to 'Night Time Is the Right Time'", function(assert) { var done = assert.async(); From 8ff4bd31db2a4f797d10e0a6bf8d0e613c5f6ecc Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 11 Jul 2020 13:01:54 +0100 Subject: [PATCH 58/60] Revert "Fix tests by reinstating globalstate variable" This reverts commit 115569b61d42d87a8b736c8c3acbdfd5506b3401. --- tests/init.js | 7 ------- tests/tests.js | 16 +++------------- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/tests/init.js b/tests/init.js index 66eacb113..169d35ccb 100644 --- a/tests/init.js +++ b/tests/init.js @@ -25,13 +25,6 @@ // Define global params needed for tests to run on existing app code var params = {}; -/** - * A global object for storing app state - * - * @type Object - */ -var globalstate = {}; - require.config({ baseUrl: 'www/js/lib', paths: { diff --git a/tests/tests.js b/tests/tests.js index 3e97d7c31..b0eb18a20 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -24,13 +24,6 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], var localZimArchive; - // Define global state (declared in init.js) - needed to run tests on live code - globalstate['search'] = { - 'prefix': '', // A field to hold the original search string - 'status': '', // The status of the search: ''|'init'|'interim'|'cancelled'|'complete' - 'type': '' // The type of the search: 'basic'|'full' (set automatically in search algorithm) - }; - /** * Make an HTTP request for a Blob and return a Promise * @@ -184,8 +177,7 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - globalstate.search.prefix = 'A'; - localZimArchive.findDirEntriesWithPrefix(globalstate.search, 5, callbackFunction, true); + localZimArchive.findDirEntriesWithPrefix({prefix: 'A'}, 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'a'", function(assert) { var done = assert.async(); @@ -196,8 +188,7 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'A Fool for You', 'First result should be "A Fool for You"'); done(); }; - globalstate.search.prefix = 'a'; - localZimArchive.findDirEntriesWithPrefix(globalstate.search, 5, callbackFunction, true); + localZimArchive.findDirEntriesWithPrefix({prefix: 'a'}, 5, callbackFunction, true); }); QUnit.test("check findDirEntriesWithPrefix 'blues brothers'", function(assert) { var done = assert.async(); @@ -208,8 +199,7 @@ define(['jquery', 'zimArchive', 'zimDirEntry', 'util', 'uiUtil', 'utf8'], assert.equal(firstDirEntry.getTitleOrUrl() , 'Blues Brothers (film)', 'First result should be "Blues Brothers (film)"'); done(); }; - globalstate.search.prefix = 'blues brothers'; - localZimArchive.findDirEntriesWithPrefix(globalstate.search, 5, callbackFunction, true); + localZimArchive.findDirEntriesWithPrefix({prefix: 'blues brothers'}, 5, callbackFunction, true); }); QUnit.test("article '(The Night Time Is) The Right Time' correctly redirects to 'Night Time Is the Right Time'", function(assert) { var done = assert.async(); From 46e5ac3cd0efead76f3c9f04d750670b37188b50 Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 11 Jul 2020 13:02:10 +0100 Subject: [PATCH 59/60] Revert "Add early return and check globalstate.search instead of local" This reverts commit 01a75d2c7dfd4d6a8f8f45799d0121e85eacbef1. --- www/js/lib/zimArchive.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/www/js/lib/zimArchive.js b/www/js/lib/zimArchive.js index ec0d45e02..a30d88cfd 100644 --- a/www/js/lib/zimArchive.js +++ b/www/js/lib/zimArchive.js @@ -189,8 +189,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], function searchNextVariant() { // If user has initiated a new search, cancel this one - if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== localPrefix) - return callback([], localPrefix); + if (search.status === 'cancelled' || search.prefix !== localPrefix) return callback([], localPrefix); if (prefixVariants.length === 0 || dirEntries.length >= resultSize) { search.status = 'complete'; return callback(dirEntries, localPrefix); @@ -200,10 +199,9 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], if (!noInterim) callback(dirEntries, localPrefix); var prefix = prefixVariants[0]; prefixVariants = prefixVariants.slice(1); - that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, localPrefix, + that.findDirEntriesWithPrefixCaseSensitive(prefix, resultSize - dirEntries.length, localPrefix, search, function (newDirEntries, interim) { - if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== localPrefix) - return callback([], localPrefix); + if (search.status === 'cancelled' || search.prefix !== localPrefix) return callback([], localPrefix); if (interim) {// Only push interim results (else results will be pushed again at end of variant loop) [].push.apply(dirEntries, newDirEntries); if (!noInterim && newDirEntries.length) callback(dirEntries, localPrefix); @@ -220,15 +218,13 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], * @param {String} prefix The case-sensitive value against which dirEntry titles (or url) will be compared * @param {Integer} resultSize The maximum number of results to return * @param {String} originalPrefix The original prefix typed by the user to initiate the local search + * @param {Object} search The globalstate.search object (for comparison, so that we can cancel long binary searches) * @param {callbackDirEntryList} callback The function to call with the array of dirEntries with titles that begin with prefix */ - ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, originalPrefix, callback) { + ZIMArchive.prototype.findDirEntriesWithPrefixCaseSensitive = function(prefix, resultSize, originalPrefix, search, callback) { var that = this; util.binarySearch(0, this._file.articleCount, function(i) { return that._file.dirEntryByTitleIndex(i).then(function(dirEntry) { - // Return early if the search is no longer needed - if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== originalPrefix) - return 0; if (dirEntry.namespace < 'A') return 1; if (dirEntry.namespace > 'A') return -1; // We should now be in namespace A @@ -237,8 +233,7 @@ define(['zimfile', 'zimDirEntry', 'util', 'utf8'], }, true).then(function(firstIndex) { var dirEntries = []; var addDirEntries = function(index) { - if (globalstate.search.status === 'cancelled' || globalstate.search.prefix !== originalPrefix || - index >= firstIndex + resultSize || index >= that._file.articleCount) + if (search.status === 'cancelled' || search.prefix !== originalPrefix || index >= firstIndex + resultSize || index >= that._file.articleCount) return dirEntries; return that._file.dirEntryByTitleIndex(index).then(function(dirEntry) { var title = dirEntry.getTitleOrUrl(); From 5b36e4df4ea1b593b63338017c78143e226fe39d Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sat, 11 Jul 2020 13:10:52 +0100 Subject: [PATCH 60/60] Fix description of slider and regex test --- www/index.html | 2 +- www/js/app.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/www/index.html b/www/index.html index 19c9c94d1..8f34c47d4 100644 --- a/www/index.html +++ b/www/index.html @@ -314,7 +314,7 @@

Performance settings

diff --git a/www/js/app.js b/www/js/app.js index 58805001d..0d5f11c0d 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -119,7 +119,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'settingsStore','abstractFilesys $('#searchArticles').on('click', function() { var prefix = document.getElementById('prefix').value; // Do not initiate the same search if it is already in progress - if (globalstate.search.prefix === prefix && !/cancelled|complete/.test(globalstate.search.status)) return; + if (globalstate.search.prefix === prefix && !/^(cancelled|complete)$/.test(globalstate.search.status)) return; $("#welcomeText").hide(); $('.alert').hide(); $("#searchingArticles").show();