Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marius-wieschollek/passwords-webextension.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js')
-rw-r--r--src/js/Controller/Setting/Get.js3
-rw-r--r--src/js/Controller/Setting/Reset.js3
-rw-r--r--src/js/Controller/Setting/Set.js12
-rw-r--r--src/js/Manager/RecommendationManager.js40
-rw-r--r--src/js/Settings/MasterSettingsProvider.js9
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'
};
}