diff options
Diffstat (limited to 'src/js')
-rw-r--r-- | src/js/Controller/Setting/Get.js | 3 | ||||
-rw-r--r-- | src/js/Controller/Setting/Reset.js | 3 | ||||
-rw-r--r-- | src/js/Controller/Setting/Set.js | 12 | ||||
-rw-r--r-- | src/js/Manager/RecommendationManager.js | 40 | ||||
-rw-r--r-- | src/js/Settings/MasterSettingsProvider.js | 9 |
5 files changed, 61 insertions, 6 deletions
diff --git a/src/js/Controller/Setting/Get.js b/src/js/Controller/Setting/Get.js index 9d9cc63..341bb4e 100644 --- a/src/js/Controller/Setting/Get.js +++ b/src/js/Controller/Setting/Get.js @@ -20,7 +20,8 @@ export default class Get extends AbstractController { 'server.default', 'theme.current', 'theme.custom', - 'debug.localisation.enabled' + 'debug.localisation.enabled', + 'search.recommendation.option' ]; } diff --git a/src/js/Controller/Setting/Reset.js b/src/js/Controller/Setting/Reset.js index bd64e4e..327d27f 100644 --- a/src/js/Controller/Setting/Reset.js +++ b/src/js/Controller/Setting/Reset.js @@ -17,7 +17,8 @@ export default class Reset extends AbstractController { 'server.default', 'theme.current', 'theme.custom', - 'debug.localisation.enabled' + 'debug.localisation.enabled', + 'search.recommendation.option' ]; } diff --git a/src/js/Controller/Setting/Set.js b/src/js/Controller/Setting/Set.js index 6e211c8..1c054bd 100644 --- a/src/js/Controller/Setting/Set.js +++ b/src/js/Controller/Setting/Set.js @@ -36,6 +36,8 @@ export default class Set extends AbstractController { await this._setDefaultServer(value); } else if(setting === 'theme.current') { await this._setCurrentTheme(value); + } else if(setting === 'search.recommendation.option') { + await this._setSearchRecommendationOption(value); } else if(this._booleanSettings.indexOf(setting) !== -1) { await this._setBoolean(setting, value); } else { @@ -83,6 +85,16 @@ export default class Set extends AbstractController { /** * + * @param {String} value + * @return {Promise<void>} + * @private + */ + async _setSearchRecommendationOption(value) { + await SettingsService.set('search.recommendation.option', value); + } + + /** + * * @param {String} setting * @param {Boolean} value * @return {Promise<void>} diff --git a/src/js/Manager/RecommendationManager.js b/src/js/Manager/RecommendationManager.js index 3b9af73..cda001c 100644 --- a/src/js/Manager/RecommendationManager.js +++ b/src/js/Manager/RecommendationManager.js @@ -3,6 +3,7 @@ import Url from 'url-parse'; import TabManager from '@js/Manager/TabManager'; import SearchIndex from '@js/Search/Index/SearchIndex'; import EventQueue from '@js/Event/EventQueue'; +import SettingsService from '@js/Services/SettingsService'; class RecommendationManager { @@ -34,6 +35,17 @@ class RecommendationManager { TabManager.tabChanged.on(this._tabEvent); TabManager.urlChanged.on(this._tabEvent); SearchIndex.listen.on(this._searchEvent); + this.initRecommendationOptions(); + } + + initRecommendationOptions() { + this.options = { searchQuery: "Host", maxResults: 8 } + SettingsService.getValue('search.recommendation.option') + .then((value) => { + if(value) { + this.options.searchQuery = value; + } + }); } /** @@ -66,8 +78,18 @@ class RecommendationManager { let query = new SearchQuery('or'); query .where( - query.field('host').equals(url.host), - query.field('url').contains(url.pathname.length > 1 ? url.host + url.pathname:url.host) + // search by domain + (this.options.searchQuery === "domain" ? query.field('host').contains(this.getSearchDomainFromHost(url.host)): + // search by hostname + (this.options.searchQuery === "host" ? query.field('host').startsWith(url.host.split(':')[0]): + // search by hostname and port + (this.options.searchQuery === "hostport" ? query.field('host').equals(url.host): + // search exact + (this.options.searchQuery === "exact" ? query.field('url').equals(url.protocol + "//" + url.host + (url.pathname.length > 1 ? url.pathname: "")): + "") + ) + ) + ) ) .type('password') .score(0.3) @@ -84,6 +106,20 @@ class RecommendationManager { } /** + * @param {String} host + */ + getSearchDomainFromHost(host) { + var regIPAdress = /((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))/; + if (regIPAdress.test(host)) { + return host; + } + else { + var domain = host.split(':')[0]; + return domain.split('.').reverse()[1] + "." + domain.split('.').reverse()[0]; + } + } + + /** * * @param {Object} tab * @private diff --git a/src/js/Settings/MasterSettingsProvider.js b/src/js/Settings/MasterSettingsProvider.js index bd68303..826b8b0 100644 --- a/src/js/Settings/MasterSettingsProvider.js +++ b/src/js/Settings/MasterSettingsProvider.js @@ -76,7 +76,11 @@ class MasterSettingsProvider { ], 'debug.localisation.enabled' : [ 'local.localisation.enabled' - ] + ], + 'search.recommendation.option' : [ + 'sync.search.recommendation.option', + 'local.search.recommendation.option' + ], }; this._defaults = { 'theme.custom' : null, @@ -91,7 +95,8 @@ class MasterSettingsProvider { 'password.folder.private' : null, 'notification.password.new' : true, 'notification.password.update': true, - 'debug.localisation.enabled' : true + 'debug.localisation.enabled' : true, + 'search.recommendation.option': 'host' }; } |