aboutsummaryrefslogtreecommitdiffstats
path: root/src/js/settings.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/settings.js')
-rw-r--r--src/js/settings.js113
1 files changed, 109 insertions, 4 deletions
diff --git a/src/js/settings.js b/src/js/settings.js
index acd1625..cf9981b 100644
--- a/src/js/settings.js
+++ b/src/js/settings.js
@@ -20,11 +20,12 @@
*/
/* global vAPI, uDom */
-'use strict';
/******************************************************************************/
-uDom.onLoad(function() {
+(function() {
+
+'use strict';
/******************************************************************************/
@@ -32,6 +33,95 @@ var messager = vAPI.messaging.channel('settings.js');
/******************************************************************************/
+var exportToFile = function() {
+ var onUserDataReady = function(userData) {
+ if (!userData) {
+ return;
+ }
+ var now = new Date();
+ var filename = vAPI.i18n('aboutBackupFilename')
+ .replace('{{datetime}}', now.toLocaleString())
+ .replace(/ +/g, '_');
+ vAPI.download({
+ 'url': 'data:text/plain;charset=utf-8,' + encodeURIComponent(JSON.stringify(userData, null, ' ')),
+ 'filename': filename
+ });
+ };
+
+ messager.send({ what: 'getUserData' }, onUserDataReady);
+};
+
+/******************************************************************************/
+
+var handleImportFilePicker = function() {
+ var fileReaderOnLoadHandler = function() {
+ var userData;
+ try {
+ userData = JSON.parse(this.result);
+ if ( typeof userData !== 'object' ) {
+ throw 'Invalid';
+ }
+ if ( typeof userData.userSettings !== 'object' ) {
+ throw 'Invalid';
+ }
+ if ( typeof userData.netWhitelist !== 'string' ) {
+ throw 'Invalid';
+ }
+ if ( typeof userData.filterLists !== 'object' ) {
+ throw 'Invalid';
+ }
+ }
+ catch (e) {
+ userData = undefined;
+ }
+ if ( userData === undefined ) {
+ window.alert(vAPI.i18n('aboutRestoreDataError'));
+ return;
+ }
+ var time = new Date(userData.timeStamp);
+ var msg = vAPI.i18n('aboutRestoreDataConfirm')
+ .replace('{{time}}', time.toLocaleString());
+ var proceed = window.confirm(msg);
+ if ( proceed ) {
+ messager.send({ what: 'restoreUserData', userData: userData });
+ }
+ };
+
+ var file = this.files[0];
+ if ( file === undefined || file.name === '' ) {
+ return;
+ }
+ if ( file.type.indexOf('text') !== 0 ) {
+ return;
+ }
+ var fr = new FileReader();
+ fr.onload = fileReaderOnLoadHandler;
+ fr.readAsText(file);
+};
+
+/******************************************************************************/
+
+var startImportFilePicker = function() {
+ var input = document.getElementById('restoreFilePicker');
+ // Reset to empty string, this will ensure an change event is properly
+ // triggered if the user pick a file, even if it is the same as the last
+ // one picked.
+ input.value = '';
+ input.click();
+};
+
+/******************************************************************************/
+
+var resetUserData = function() {
+ var msg = vAPI.i18n('aboutResetDataConfirm');
+ var proceed = window.confirm(msg);
+ if ( proceed ) {
+ messager.send({ what: 'resetUserData' });
+ }
+};
+
+/******************************************************************************/
+
var changeUserSettings = function(name, value) {
messager.send({
what: 'userSettings',
@@ -63,15 +153,30 @@ var onUserSettingsReceived = function(details) {
changeUserSettings('contextMenuEnabled', this.checked);
});
+ uDom('#advanced-user-enabled')
+ .prop('checked', details.advancedUserEnabled === true)
+ .on('change', function(){
+ changeUserSettings('advancedUserEnabled', this.checked);
+ });
+
uDom('#experimental-enabled')
.prop('checked', details.experimentalEnabled === true)
.on('change', function(){
changeUserSettings('experimentalEnabled', this.checked);
});
-};
-messager.send({ what: 'userSettings' }, onUserSettingsReceived);
+ uDom('#export').on('click', exportToFile);
+ uDom('#import').on('click', startImportFilePicker);
+ uDom('#reset').on('click', resetUserData);
+ uDom('#restoreFilePicker').on('change', handleImportFilePicker);
+};
/******************************************************************************/
+uDom.onLoad(function() {
+ messager.send({ what: 'userSettings' }, onUserSettingsReceived);
});
+
+/******************************************************************************/
+
+})();