delete ext option, full screen padding

This commit is contained in:
Mo Bitar
2017-01-07 00:10:54 -06:00
parent 71b6e666b4
commit 73edae57a2
8 changed files with 288 additions and 165 deletions

View File

@@ -44,7 +44,13 @@ angular.module('app.frontend')
}
this.submitNewExtensionForm = function() {
extensionManager.addExtension(this.newExtensionData.url)
if(this.newExtensionData.url) {
extensionManager.addExtension(this.newExtensionData.url, function(response){
if(!response) {
alert("Unable to register this extension. Make sure the link is valid and try again.");
}
})
}
}
this.selectedAction = function(action, extension) {
@@ -55,6 +61,12 @@ angular.module('app.frontend')
})
}
this.deleteExtension = function(extension) {
if(confirm("Are you sure you want to delete this extension?")) {
extensionManager.deleteExtension(extension);
}
}
this.reloadExtensionsPressed = function() {
if(confirm("For your security, reloading extensions will disable any currently enabled repeat actions.")) {
extensionManager.refreshExtensionsFromServer();
@@ -149,18 +161,6 @@ angular.module('app.frontend')
}.bind(this))
}
this.forgotPasswordSubmit = function() {
// $auth.requestPasswordReset(this.resetData)
// .then(function(resp) {
// this.resetData.response = "Success";
// // handle success response
// }.bind(this))
// .catch(function(resp) {
// // handle error response
// this.resetData.response = "Error";
// }.bind(this));
}
this.encryptionStatusForNotes = function() {
var allNotes = modelManager.filteredNotes;
var countEncrypted = 0;
@@ -173,10 +173,12 @@ angular.module('app.frontend')
return countEncrypted + "/" + allNotes.length + " notes encrypted";
}
this.archiveEncryptionFormat = {encrypted: true};
this.downloadDataArchive = function() {
var link = document.createElement('a');
link.setAttribute('download', 'notes.json');
link.href = apiController.itemsDataFile();
link.href = apiController.itemsDataFile(this.archiveEncryptionFormat.encrypted);
link.click();
}

View File

@@ -273,8 +273,8 @@ angular.module('app.frontend')
return this.paramsForItem(item, !item.isPublic(), additionalFields, false);
}
this.paramsForExportFile = function(item) {
return _.omit(this.paramsForItem(item, false, ["created_at", "updated_at"], true), ["deleted"]);
this.paramsForExportFile = function(item, encrypted) {
return _.omit(this.paramsForItem(item, encrypted, ["created_at", "updated_at"], true), ["deleted"]);
}
this.paramsForExtension = function(item, encrypted) {
@@ -358,6 +358,8 @@ angular.module('app.frontend')
this.importJSONData = function(jsonString, callback) {
var data = JSON.parse(jsonString);
console.log("importing data", data);
this.decryptItems(data.items);
modelManager.mapResponseItemsToLocalModels(data.items);
modelManager.items.forEach(function(item){
item.setDirty(true);
@@ -369,7 +371,7 @@ angular.module('app.frontend')
Export
*/
this.itemsDataFile = function() {
this.itemsDataFile = function(encrypted) {
var textFile = null;
var makeTextFile = function (text) {
var data = new Blob([text], {type: 'text/json'});
@@ -387,7 +389,7 @@ angular.module('app.frontend')
}.bind(this);
var items = _.map(modelManager.allItemsMatchingTypes(["Tag", "Note"]), function(item){
return this.paramsForExportFile(item);
return this.paramsForExportFile(item, encrypted);
}.bind(this));
var data = {
@@ -532,13 +534,15 @@ angular.module('app.frontend')
if(item.deleted == true) {
continue;
}
if(item.content.substring(0, 3) == "001" && item.enc_item_key) {
// is encrypted
this.decryptSingleItem(item, masterKey);
} else {
// is base64 encoded
item.content = Neeto.crypto.base64Decode(item.content.substring(3, item.content.length))
var isString = typeof item.content === 'string' || item.content instanceof String;
if(isString) {
if(item.content.substring(0, 3) == "001" && item.enc_item_key) {
// is encrypted
this.decryptSingleItem(item, masterKey);
} else {
// is base64 encoded
item.content = Neeto.crypto.base64Decode(item.content.substring(3, item.content.length))
}
}
}
}

View File

@@ -55,8 +55,22 @@ class ExtensionManager {
console.log("ext with dec", this.decryptedExtensions);
}
addExtension(url) {
this.retrieveExtensionFromServer(url, null);
addExtension(url, callback) {
this.retrieveExtensionFromServer(url, callback);
}
deleteExtension(extension) {
for(var action of extension.actions) {
_.pull(this.decryptedExtensions, extension);
if(action.repeat_type) {
if(this.isRepeatActionEnabled(action)) {
this.disableRepeatAction(action);
}
}
}
this.modelManager.setItemToBeDeleted(extension);
this.apiController.sync(null);
}
retrieveExtensionFromServer(url, callback) {
@@ -69,6 +83,7 @@ class ExtensionManager {
}.bind(this))
.catch(function(response){
console.log("Error registering extension", response);
callback(null);
})
}
@@ -185,10 +200,11 @@ class ExtensionManager {
queueAction(action, extension, delay, changedItems) {
this.actionQueue = this.actionQueue || [];
if(_.find(this.actionQueue, action)) {
if(_.find(this.actionQueue, {url: action.url})) {
return;
}
console.log("Successfully queued", action, this.actionQueue.length);
this.actionQueue.push(action);
setTimeout(function () {
@@ -199,15 +215,13 @@ class ExtensionManager {
}
triggerWatchAction(action, extension, changedItems) {
// console.log("Watch action triggered", action, changedItems);
if(action.repeat_timeout > 0) {
var lastExecuted = action.lastExecuted;
var diffInSeconds = (new Date() - lastExecuted)/1000;
console.log("last executed", action.lastExecuted, "diff", diffInSeconds, "repeatFreq", action.repeatFrequency);
if(diffInSeconds < action.repeat_timeout) {
var delay = action.repeat_timeout - diffInSeconds;
console.log("delaying action by", delay);
this.queueAction(action, delay, changedItems);
console.log("Delaying action by", delay);
this.queueAction(action, extension, delay, changedItems);
return;
}
}