From a4f05b8c31df2a8b9a73e6c58611fdf0efec3306 Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Sat, 7 Jan 2017 13:15:30 -0600 Subject: [PATCH] extension css and logic updates --- .../app/frontend/controllers/editor.js | 2 +- .../app/frontend/controllers/header.js | 12 +- .../app/frontend/controllers/home.js | 14 ++- .../app/frontend/models/app/extension.js | 6 + .../javascripts/app/services/apiController.js | 15 ++- .../app/services/extensionManager.js | 38 ++++-- .../javascripts/app/services/modelManager.js | 20 +++- app/assets/stylesheets/app/_header.scss | 52 ++++++++- .../templates/frontend/header.html.haml | 25 ++-- vendor/assets/javascripts/transpiled.js | 109 +++++++++++++----- vendor/assets/javascripts/transpiled.js.map | 2 +- 11 files changed, 225 insertions(+), 70 deletions(-) diff --git a/app/assets/javascripts/app/frontend/controllers/editor.js b/app/assets/javascripts/app/frontend/controllers/editor.js index ade9c2d9c..724e8c201 100644 --- a/app/assets/javascripts/app/frontend/controllers/editor.js +++ b/app/assets/javascripts/app/frontend/controllers/editor.js @@ -210,7 +210,7 @@ angular.module('app.frontend') this.note.setDirty(true); apiController.sync(function(response){ - if(!response) { + if(response && response.error) { this.note.presentation_name = original; this.url.token = original; alert("This URL is not available."); diff --git a/app/assets/javascripts/app/frontend/controllers/header.js b/app/assets/javascripts/app/frontend/controllers/header.js index 6d7d449aa..b31d2a7d2 100644 --- a/app/assets/javascripts/app/frontend/controllers/header.js +++ b/app/assets/javascripts/app/frontend/controllers/header.js @@ -32,9 +32,11 @@ angular.module('app.frontend') this.showAccountMenu = !this.showAccountMenu; this.showFaq = false; this.showNewPasswordForm = false; + this.showExtensionsMenu = false; } this.toggleExtensions = function() { + this.showAccountMenu = false; this.showExtensionsMenu = !this.showExtensionsMenu; } @@ -57,7 +59,13 @@ angular.module('app.frontend') action.running = true; extensionManager.executeAction(action, extension, null, function(response){ action.running = false; - apiController.sync(null); + if(response && response.error) { + action.error = true; + alert("There was an error performing this action. Please try again."); + } else { + action.error = false; + apiController.sync(null); + } }) } @@ -118,7 +126,7 @@ angular.module('app.frontend') $timeout(function(){ this.isRefreshing = false; }.bind(this), 200) - if(!response) { + if(response && response.error) { alert("There was an error syncing. Please try again. If all else fails, log out and log back in."); } else { this.syncUpdated(); diff --git a/app/assets/javascripts/app/frontend/controllers/home.js b/app/assets/javascripts/app/frontend/controllers/home.js index 343d44c08..226f3ab6b 100644 --- a/app/assets/javascripts/app/frontend/controllers/home.js +++ b/app/assets/javascripts/app/frontend/controllers/home.js @@ -113,11 +113,15 @@ angular.module('app.frontend') $scope.saveNote = function(note, callback) { note.setDirty(true); - apiController.sync(function(){ - note.hasChanges = false; - - if(callback) { - callback(true); + apiController.sync(function(response){ + if(response && response.error) { + alert("There was an error saving your note. Please try again."); + callback(false); + } else { + note.hasChanges = false; + if(callback) { + callback(true); + } } }) } diff --git a/app/assets/javascripts/app/frontend/models/app/extension.js b/app/assets/javascripts/app/frontend/models/app/extension.js index 16d360fe4..acd42b4e2 100644 --- a/app/assets/javascripts/app/frontend/models/app/extension.js +++ b/app/assets/javascripts/app/frontend/models/app/extension.js @@ -2,6 +2,11 @@ class Action { constructor(json) { _.merge(this, json); this.running = false; // in case running=true was synced with server since model is uploaded nondiscriminatory + this.error = false; + if(this.lastExecuted) { + // is string + this.lastExecuted = new Date(this.lastExecuted); + } } get permissionsString() { @@ -47,6 +52,7 @@ class Extension extends Item { super(json); _.merge(this, json); + this.encrypted = true; this.content_type = "Extension"; } diff --git a/app/assets/javascripts/app/services/apiController.js b/app/assets/javascripts/app/services/apiController.js index 667bc2ce1..2b2493bb0 100644 --- a/app/assets/javascripts/app/services/apiController.js +++ b/app/assets/javascripts/app/services/apiController.js @@ -57,6 +57,10 @@ angular.module('app.frontend') Auth */ + this.isUserSignedIn = function() { + return this.user.email && this.retrieveMk(); + } + this.getAuthParamsForEmail = function(email, callback) { var request = Restangular.one("auth", "params"); request.get({email: email}).then(function(response){ @@ -219,7 +223,6 @@ angular.module('app.frontend') this.syncWithOptions = function(callback, options = {}) { if(!this.user.uuid) { this.writeItemsToLocalStorage(function(responseItems){ - this.handleItemsResponse(responseItems); modelManager.clearDirtyItems(); if(callback) { callback(); @@ -256,7 +259,7 @@ angular.module('app.frontend') }.bind(this)) .catch(function(response){ console.log("Sync error: ", response); - callback(null); + callback({error: "Sync error"}); }) } @@ -361,7 +364,7 @@ angular.module('app.frontend') console.log("importing data", data); this.decryptItems(data.items); modelManager.mapResponseItemsToLocalModels(data.items); - modelManager.items.forEach(function(item){ + modelManager.allItems.forEach(function(item){ item.setDirty(true); }) this.syncWithOptions(callback, {additionalFields: ["created_at", "updated_at"]}); @@ -430,10 +433,10 @@ angular.module('app.frontend') } this.writeItemsToLocalStorage = function(callback) { - var items = _.map(modelManager.items, function(item){ + var items = _.map(modelManager.allItems, function(item){ return this.paramsForItem(item, false, ["created_at", "updated_at"], false) }.bind(this)); - console.log("writing items to local", items); + console.log("Writing items to local", items); this.writeToLocalStorage('items', items); callback(items); } @@ -445,7 +448,7 @@ angular.module('app.frontend') this.loadLocalItemsAndUser = function() { var user = {}; var items = JSON.parse(localStorage.getItem('items')) || []; - items = this.handleItemsResponse(items); + items = this.handleItemsResponse(items, null); Item.sortItemsByDate(items); user.items = items; user.shouldMerge = true; diff --git a/app/assets/javascripts/app/services/extensionManager.js b/app/assets/javascripts/app/services/extensionManager.js index 91c5b72e7..9809f7a3f 100644 --- a/app/assets/javascripts/app/services/extensionManager.js +++ b/app/assets/javascripts/app/services/extensionManager.js @@ -62,7 +62,7 @@ class ExtensionManager { deleteExtension(extension) { for(var action of extension.actions) { _.pull(this.decryptedExtensions, extension); - if(action.repeat_type) { + if(action.repeat_mode) { if(this.isRepeatActionEnabled(action)) { this.disableRepeatAction(action); } @@ -105,7 +105,9 @@ class ExtensionManager { refreshExtensionsFromServer() { for (var url of this.enabledRepeatActionUrls) { var action = this.actionWithURL(url); - this.disableRepeatAction(action); + if(action) { + this.disableRepeatAction(action); + } } for(var ext of this.extensions) { @@ -117,14 +119,24 @@ class ExtensionManager { executeAction(action, extension, item, callback) { + if(this.extensionUsesEncryptedData(extension) && !this.apiController.isUserSignedIn()) { + alert("To send data encrypted, you must have an encryption key, and must therefore be signed in."); + callback(null); + return; + } + switch (action.verb) { case "get": { this.Restangular.oneUrl(action.url, action.url).get().then(function(response){ console.log("Execute action response", response); + action.error = false; var items = response.items; this.modelManager.mapResponseItemsToLocalModels(items); callback(items); }.bind(this)) + .catch(function(response){ + action.error = true; + }) break; } @@ -133,6 +145,7 @@ class ExtensionManager { var win = window.open(action.url, '_blank'); win.focus(); callback(); + break; } case "post": { @@ -149,9 +162,11 @@ class ExtensionManager { params.item = this.outgoingParamsForItem(item, extension); } - this.performPost(action, extension, params, function(items){ - callback(items); + this.performPost(action, extension, params, function(response){ + callback(response); }); + + break; } default: { @@ -170,6 +185,7 @@ class ExtensionManager { console.log("Disabling action", action); _.pull(this.enabledRepeatActionUrls, action.url); + localStorage.setItem("enabledRepeatActionUrls", JSON.stringify(this.enabledRepeatActionUrls)); this.modelManager.removeItemChangeObserver(action.url); console.assert(this.isRepeatActionEnabled(action) == false); @@ -220,16 +236,15 @@ class ExtensionManager { var diffInSeconds = (new Date() - lastExecuted)/1000; if(diffInSeconds < action.repeat_timeout) { var delay = action.repeat_timeout - diffInSeconds; - console.log("Delaying action by", delay); this.queueAction(action, extension, delay, changedItems); return; } } - console.log("Performing action immediately", action); - action.lastExecuted = new Date(); + console.log("Performing action immediately", action); + if(action.verb == "post") { var params = {}; params.items = changedItems.map(function(item){ @@ -251,11 +266,18 @@ class ExtensionManager { _.merge(request, params); request.post().then(function(response){ - // console.log("watch action response", response); + action.error = false; if(callback) { callback(response.plain()); } }) + .catch(function(response){ + action.error = true; + console.log("Action error response:", response); + if(callback) { + callback({error: "Request error"}); + } + }) } } diff --git a/app/assets/javascripts/app/services/modelManager.js b/app/assets/javascripts/app/services/modelManager.js index 4cb1dc3d9..b97d5ab9a 100644 --- a/app/assets/javascripts/app/services/modelManager.js +++ b/app/assets/javascripts/app/services/modelManager.js @@ -6,7 +6,19 @@ class ModelManager { this.itemSyncObservers = []; this.itemChangeObservers = []; this.items = []; - this.extensions = []; + this._extensions = []; + } + + get allItems() { + return this.items.filter(function(item){ + return !item.dummy; + }) + } + + get extensions() { + return this._extensions.filter(function(ext){ + return !ext.deleted; + }) } allItemsMatchingTypes(contentTypes) { @@ -111,8 +123,8 @@ class ModelManager { this.notes.unshift(item); } } else if(item.content_type == "Extension") { - if(!_.find(this.extensions, {uuid: item.uuid})) { - this.extensions.unshift(item); + if(!_.find(this._extensions, {uuid: item.uuid})) { + this._extensions.unshift(item); } } }.bind(this)) @@ -199,7 +211,7 @@ class ModelManager { } else if(item.content_type == "Note") { _.pull(this.notes, item); } else if(item.content_type == "Extension") { - _.pull(this.extensions, item); + _.pull(this._extensions, item); } } diff --git a/app/assets/stylesheets/app/_header.scss b/app/assets/stylesheets/app/_header.scss index 32e68a4bd..1b878049a 100644 --- a/app/assets/stylesheets/app/_header.scss +++ b/app/assets/stylesheets/app/_header.scss @@ -114,6 +114,10 @@ .email { font-size: 18px; font-weight: bold; + margin-bottom: 2px; + } + + .server { margin-bottom: 10px; } @@ -286,8 +290,10 @@ Extensions .extension { margin-bottom: 18px; - background-color: #ededed; - padding: 10px; + background-color: #f6f6f6; + border: 1px solid #f2f2f2; + padding: 14px 6px; + padding-bottom: 8px; color: black; a { @@ -299,16 +305,18 @@ Extensions > .name { font-weight: bold; font-size: 16px; - margin-bottom: 2px; + margin-bottom: 6px; + text-align: center; } .encryption-format { margin-top: 4px; font-size: 12px; + text-align: center; > .title { font-size: 13px; - font-weight: bold; + // font-weight: bold; margin-bottom: 2px; } } @@ -323,16 +331,44 @@ Extensions font-size: 12px; .action { + padding: 13px; margin-bottom: 10px; + background-color: rgba(white, 0.9); + border: 1px solid rgba(gray, 0.15); > .name { font-weight: bold; } + > .permissions { + margin-top: 2px; + a { + font-weight: normal !important; + } + } + > .execute { font-weight: bold; margin-bottom: 0px; font-size: 12px; + height: 30px; + padding-top: 7px; + text-align: center; + margin-top: 6px; + border: 1px solid rgba(gray, 0.15); + cursor: pointer; + color: $blue-color; + + &:hover { + background-color: rgba(gray, 0.10); + } + + .execution-spinner { + margin-left: auto; + margin-right: auto; + text-align: center; + margin-top: 3px; + } } > .execute-type { @@ -340,9 +376,15 @@ Extensions margin-bottom: 1px; } + > .error { + color: red; + margin-top: 6px; + } + > .last-run { opacity: 0.5; - font-size: 12px; + font-size: 11px; + margin-top: 6px; } } diff --git a/app/assets/templates/frontend/header.html.haml b/app/assets/templates/frontend/header.html.haml index c9188fd83..40052be94 100644 --- a/app/assets/templates/frontend/header.html.haml +++ b/app/assets/templates/frontend/header.html.haml @@ -49,6 +49,7 @@ .account-item{"ng-if" => "ctrl.user.email"} .email {{ctrl.user.email}} + .server {{ctrl.serverData.url}} .links{"ng-if" => "ctrl.user.email"} .link-item %a{"ng-click" => "ctrl.changePasswordPressed()"} Change Password @@ -98,7 +99,7 @@ .extension{"ng-repeat" => "extension in ctrl.extensionManager.extensions"} .name {{extension.name}} .encryption-format - .title Send data + .title Send data: %label %input{"type" => "radio", "ng-model" => "extension.encrypted", "ng-value" => "true", "ng-change" => "ctrl.extensionManager.changeExtensionEncryptionFormat(true, extension)"} Encrypted @@ -120,16 +121,18 @@ .encryption-type %span {{action.encryptionModeString}} .execute - %a{"ng-if" => "action.repeat_mode"} - %span{"ng-if" => "ctrl.extensionManager.isRepeatActionEnabled(action)", "ng-click" => "ctrl.extensionManager.disableRepeatAction(action, extension)"} Disable - %span{"ng-if" => "!ctrl.extensionManager.isRepeatActionEnabled(action)", "ng-click" => "ctrl.extensionManager.enableRepeatAction(action, extension)"} Enable - %a{"ng-if" => "!action.repeat_mode", "ng-click" => "ctrl.selectedAction(action, extension)"} - %span{"ng-if" => "!action.running"} - Run - %span{"ng-if" => "action.running"} - .spinner{"style" => "margin-top: 3px;"} - .last-run{"ng-if" => "action.lastExecuted && !action.running"} - Last executed {{action.lastExecuted | appDateTime}} + %div{"ng-if" => "action.repeat_mode"} + %div{"ng-if" => "ctrl.extensionManager.isRepeatActionEnabled(action)", "ng-click" => "ctrl.extensionManager.disableRepeatAction(action, extension)"} Disable + %div{"ng-if" => "!ctrl.extensionManager.isRepeatActionEnabled(action)", "ng-click" => "ctrl.extensionManager.enableRepeatAction(action, extension)"} Enable + %div{"ng-if" => "!action.repeat_mode", "ng-click" => "ctrl.selectedAction(action, extension)"} + %div{"ng-if" => "!action.running"} + Perform Action + %div{"ng-if" => "action.running"} + .spinner.execution-spinner + .last-run{"ng-if" => "!action.error && action.lastExecuted && !action.running"} + Last run {{action.lastExecuted | appDateTime}} + .error{"ng-if" => "action.error"} + Error performing action. %a{"ng-click" => "ctrl.deleteExtension(extension)", "style" => "margin-top: 22px; display: block;"} Remove extension .extension-link diff --git a/vendor/assets/javascripts/transpiled.js b/vendor/assets/javascripts/transpiled.js index 73ec1d2a1..35d118523 100644 --- a/vendor/assets/javascripts/transpiled.js +++ b/vendor/assets/javascripts/transpiled.js @@ -659,7 +659,7 @@ angular.module('app.frontend').controller('BaseCtrl', BaseCtrl); this.note.setDirty(true); apiController.sync(function (response) { - if (!response) { + if (response && response.error) { this.note.presentation_name = original; this.url.token = original; alert("This URL is not available."); @@ -744,9 +744,11 @@ angular.module('app.frontend').controller('BaseCtrl', BaseCtrl); this.showAccountMenu = !this.showAccountMenu; this.showFaq = false; this.showNewPasswordForm = false; + this.showExtensionsMenu = false; }; this.toggleExtensions = function () { + this.showAccountMenu = false; this.showExtensionsMenu = !this.showExtensionsMenu; }; @@ -769,7 +771,13 @@ angular.module('app.frontend').controller('BaseCtrl', BaseCtrl); action.running = true; extensionManager.executeAction(action, extension, null, function (response) { action.running = false; - apiController.sync(null); + if (response && response.error) { + action.error = true; + alert("There was an error performing this action. Please try again."); + } else { + action.error = false; + apiController.sync(null); + } }); }; @@ -827,7 +835,7 @@ angular.module('app.frontend').controller('BaseCtrl', BaseCtrl); $timeout(function () { this.isRefreshing = false; }.bind(this), 200); - if (!response) { + if (response && response.error) { alert("There was an error syncing. Please try again. If all else fails, log out and log back in."); } else { this.syncUpdated(); @@ -1036,11 +1044,15 @@ angular.module('app.frontend').controller('BaseCtrl', BaseCtrl); $scope.saveNote = function (note, callback) { note.setDirty(true); - apiController.sync(function () { - note.hasChanges = false; - - if (callback) { - callback(true); + apiController.sync(function (response) { + if (response && response.error) { + alert("There was an error saving your note. Please try again."); + callback(false); + } else { + note.hasChanges = false; + if (callback) { + callback(true); + } } }); }; @@ -1498,6 +1510,11 @@ var Action = function () { _.merge(this, json); this.running = false; // in case running=true was synced with server since model is uploaded nondiscriminatory + this.error = false; + if (this.lastExecuted) { + // is string + this.lastExecuted = new Date(this.lastExecuted); + } } _createClass(Action, [{ @@ -1574,6 +1591,7 @@ var Extension = function (_Item) { _.merge(_this3, json); + _this3.encrypted = true; _this3.content_type = "Extension"; return _this3; } @@ -1927,6 +1945,10 @@ var User = function User(json_obj) { Auth */ + this.isUserSignedIn = function () { + return this.user.email && this.retrieveMk(); + }; + this.getAuthParamsForEmail = function (email, callback) { var request = Restangular.one("auth", "params"); request.get({ email: email }).then(function (response) { @@ -2084,7 +2106,6 @@ var User = function User(json_obj) { if (!this.user.uuid) { this.writeItemsToLocalStorage(function (responseItems) { - this.handleItemsResponse(responseItems); modelManager.clearDirtyItems(); if (callback) { callback(); @@ -2120,7 +2141,7 @@ var User = function User(json_obj) { } }.bind(this)).catch(function (response) { console.log("Sync error: ", response); - callback(null); + callback({ error: "Sync error" }); }); }; @@ -2226,7 +2247,7 @@ var User = function User(json_obj) { console.log("importing data", data); this.decryptItems(data.items); modelManager.mapResponseItemsToLocalModels(data.items); - modelManager.items.forEach(function (item) { + modelManager.allItems.forEach(function (item) { item.setDirty(true); }); this.syncWithOptions(callback, { additionalFields: ["created_at", "updated_at"] }); @@ -2290,10 +2311,10 @@ var User = function User(json_obj) { }; this.writeItemsToLocalStorage = function (callback) { - var items = _.map(modelManager.items, function (item) { + var items = _.map(modelManager.allItems, function (item) { return this.paramsForItem(item, false, ["created_at", "updated_at"], false); }.bind(this)); - console.log("writing items to local", items); + console.log("Writing items to local", items); this.writeToLocalStorage('items', items); callback(items); }; @@ -2305,7 +2326,7 @@ var User = function User(json_obj) { this.loadLocalItemsAndUser = function () { var user = {}; var items = JSON.parse(localStorage.getItem('items')) || []; - items = this.handleItemsResponse(items); + items = this.handleItemsResponse(items, null); Item.sortItemsByDate(items); user.items = items; user.shouldMerge = true; @@ -2960,7 +2981,7 @@ var ExtensionManager = function () { var action = _step8.value; _.pull(this.decryptedExtensions, extension); - if (action.repeat_type) { + if (action.repeat_mode) { if (this.isRepeatActionEnabled(action)) { this.disableRepeatAction(action); } @@ -3026,7 +3047,9 @@ var ExtensionManager = function () { var url = _step9.value; var action = this.actionWithURL(url); - this.disableRepeatAction(action); + if (action) { + this.disableRepeatAction(action); + } } } catch (err) { _didIteratorError9 = true; @@ -3074,15 +3097,24 @@ var ExtensionManager = function () { key: 'executeAction', value: function executeAction(action, extension, item, callback) { + if (this.extensionUsesEncryptedData(extension) && !this.apiController.isUserSignedIn()) { + alert("To send data encrypted, you must have an encryption key, and must therefore be signed in."); + callback(null); + return; + } + switch (action.verb) { case "get": { this.Restangular.oneUrl(action.url, action.url).get().then(function (response) { console.log("Execute action response", response); + action.error = false; var items = response.items; this.modelManager.mapResponseItemsToLocalModels(items); callback(items); - }.bind(this)); + }.bind(this)).catch(function (response) { + action.error = true; + }); break; } @@ -3092,6 +3124,7 @@ var ExtensionManager = function () { var win = window.open(action.url, '_blank'); win.focus(); callback(); + break; } case "post": @@ -3108,9 +3141,11 @@ var ExtensionManager = function () { params.item = this.outgoingParamsForItem(item, extension); } - this.performPost(action, extension, params, function (items) { - callback(items); + this.performPost(action, extension, params, function (response) { + callback(response); }); + + break; } default: @@ -3130,6 +3165,7 @@ var ExtensionManager = function () { console.log("Disabling action", action); _.pull(this.enabledRepeatActionUrls, action.url); + localStorage.setItem("enabledRepeatActionUrls", JSON.stringify(this.enabledRepeatActionUrls)); this.modelManager.removeItemChangeObserver(action.url); console.assert(this.isRepeatActionEnabled(action) == false); @@ -3182,16 +3218,15 @@ var ExtensionManager = function () { var diffInSeconds = (new Date() - lastExecuted) / 1000; if (diffInSeconds < action.repeat_timeout) { var delay = action.repeat_timeout - diffInSeconds; - console.log("Delaying action by", delay); this.queueAction(action, extension, delay, changedItems); return; } } - console.log("Performing action immediately", action); - action.lastExecuted = new Date(); + console.log("Performing action immediately", action); + if (action.verb == "post") { var params = {}; params.items = changedItems.map(function (item) { @@ -3215,10 +3250,16 @@ var ExtensionManager = function () { _.merge(request, params); request.post().then(function (response) { - // console.log("watch action response", response); + action.error = false; if (callback) { callback(response.plain()); } + }).catch(function (response) { + action.error = true; + console.log("Action error response:", response); + if (callback) { + callback({ error: "Request error" }); + } }); } }, { @@ -3269,7 +3310,7 @@ var ModelManager = function () { this.itemSyncObservers = []; this.itemChangeObservers = []; this.items = []; - this.extensions = []; + this._extensions = []; } _createClass(ModelManager, [{ @@ -3448,8 +3489,8 @@ var ModelManager = function () { this.notes.unshift(item); } } else if (item.content_type == "Extension") { - if (!_.find(this.extensions, { uuid: item.uuid })) { - this.extensions.unshift(item); + if (!_.find(this._extensions, { uuid: item.uuid })) { + this._extensions.unshift(item); } } }.bind(this)); @@ -3567,7 +3608,7 @@ var ModelManager = function () { } else if (item.content_type == "Note") { _.pull(this.notes, item); } else if (item.content_type == "Extension") { - _.pull(this.extensions, item); + _.pull(this._extensions, item); } } @@ -3593,6 +3634,20 @@ var ModelManager = function () { itemOne.setDirty(true); itemTwo.setDirty(true); } + }, { + key: 'allItems', + get: function get() { + return this.items.filter(function (item) { + return !item.dummy; + }); + } + }, { + key: 'extensions', + get: function get() { + return this._extensions.filter(function (ext) { + return !ext.deleted; + }); + } }, { key: 'filteredNotes', get: function get() { diff --git a/vendor/assets/javascripts/transpiled.js.map b/vendor/assets/javascripts/transpiled.js.map index 8e751e378..ca5f91b1f 100644 --- a/vendor/assets/javascripts/transpiled.js.map +++ b/vendor/assets/javascripts/transpiled.js.map @@ -1 +1 @@ -{"version":3,"sources":["app.js"],"names":["SNCrypto","CryptoJS","lib","WordArray","random","toString","crypto","window","msCrypto","buf","Uint32Array","getRandomValues","idx","replace","c","r","v","d","Date","getTime","performance","now","uuid","Math","floor","encrypted_content","key","keyData","enc","Hex","parse","ivData","decrypted","AES","decrypt","iv","mode","CBC","padding","pad","Pkcs7","Utf8","text","encrypted","encrypt","salt","Neeto","generateRandomKey","passphrase","PBKDF2","keySize","substring","length","Base64","base64String","SHA256","SHA1","message","messageData","HmacSHA256","email","password","pw_salt","pw_func","pw_alg","pw_cost","pw_key_size","callback","generateSymmetricKeyPair","keys","pw","mk","defaults","defaultPasswordGenerationParams","pw_nonce","sha1","_","merge","SNCryptoJS","algMapping","algo","SHA512","fnMapping","alg","kdf","output","hasher","iterations","outputLength","firstHalf","slice","secondHalf","subtleCrypto","subtle","SNCryptoWeb","stretchPassword","webCryptoImportKey","console","log","webCryptoDeriveBits","bind","input","importKey","stringToArrayBuffer","name","toUpperCase","then","catch","err","error","deriveBits","hash","bits","arrayBufferToHexString","Uint8Array","string","encoder","TextEncoder","encode","arrayBuffer","byteArray","hexString","nextHexByte","i","byteLength","angular","module","config","RestangularProvider","apiControllerProvider","setDefaultHeaders","url","defaultServerURL","setBaseUrl","setFullRequestInterceptor","element","operation","route","headers","params","httpConfig","token","localStorage","getItem","extend","Authorization","$qProvider","$stateProvider","$urlRouterProvider","$locationProvider","state","abstract","parent","views","templateUrl","controller","otherwise","$injector","$location","get","go","path","html5Mode","BaseCtrl","$rootScope","modelManager","directive","$timeout","restrict","scope","save","remove","note","user","controllerAs","bindToController","link","elem","attrs","ctrl","handler","event","ctrlKey","metaKey","String","fromCharCode","which","toLowerCase","preventDefault","saveNote","clickedEditNote","toggleMarkdown","toggleFullScreen","addEventListener","$on","removeEventListener","$watch","oldNote","setNote","$sce","apiController","markdownRenderer","editorMode","safeText","dummy","focusTitle","hasChanges","onPreviewDoubleClick","focusEditor","delay","setTimeout","document","getElementById","focus","clickedTextArea","showMenu","renderedContent","renderHtml","renderedContentForText","statusTimeout","$event","success","clearDraft","cancel","noteStatus","saveTitle","target","blur","saveTimeout","changesMade","saveDraftToDisk","contentChanged","nameChanged","onNameFocus","editingName","onContentFocus","showSampler","$broadcast","editingUrl","onNameBlur","fullscreen","selectedMenuItem","editUrlPressed","publicUrlForNote","presentation_name","base","saveUrl","original","setDirty","sync","response","alert","shareNote","openInNewTab","a","createElement","href","click","shareItem","unshareNote","unshareItem","presentationURL","clickedMenu","locked","deleteNote","extensionManager","logout","syncUpdated","$state","serverSideValidation","changePasswordPressed","showNewPasswordForm","accountMenuPressed","serverData","getServer","showAccountMenu","showFaq","toggleExtensions","showExtensionsMenu","toggleExtensionForm","newExtensionData","showNewExtensionForm","submitNewExtensionForm","addExtension","selectedAction","action","extension","running","executeAction","deleteExtension","confirm","reloadExtensionsPressed","refreshExtensionsFromServer","changeServer","setServer","signOutPressed","signout","location","reload","submitPasswordChange","passwordChangeData","status","data","password_confirmation","changePassword","current_password","new_password","hasLocalData","filteredNotes","mergeLocalChanged","shouldMerge","refreshData","isRefreshing","lastSyncDate","loginSubmitPressed","loginData","login","user_password","onAuthSuccess","submitRegistrationForm","register","encryptionStatusForNotes","allNotes","countEncrypted","forEach","encryptionEnabled","archiveEncryptionFormat","downloadDataArchive","setAttribute","itemsDataFile","importFileSelected","files","file","reader","FileReader","onload","e","importJSONData","result","readAsText","showLogin","showRegistration","$scope","bodyClass","onUserSet","setUser","defaultUser","allTag","Tag","all","title","tags","notes","setInterval","getCurrentUser","User","loadLocalItemsAndUser","updateAllTag","tagsWillMakeSelection","tag","tagsSelectionMade","selectedTag","selectedNote","removeItemLocally","tagsAddNew","addItem","tagsSave","tagsUpdateNoteTag","noteCopy","newTag","oldTag","originalNote","find","createRelationshipBetweenItems","notesRemoveTag","validNotes","Note","filterDummyNotes","setItemToBeDeleted","notesSelectionMade","notesAddNew","headerLogout","addNew","selectionMade","removeTag","tagDidChange","isFirstLoad","noteFilter","visible","selectFirstNote","draft","getDraft","selectNote","createNewNote","selectedTagDelete","selectedTagShare","selectedTagUnshare","createNew","visibleNotes","filter","newNote","createItem","content_type","filterNotes","includes","filterTextChanged","willSelect","updateNoteTag","newTags","setTags","setAllTag","initialLoad","selectTag","clickedAddNewTag","editingTag","originalTagName","onTagTitleFocus","tagTitleDidChange","saveTag","savedTag","noteCount","handleDrop","Restangular","formData","saveUsername","setUsername","username","closeThisDialog","Item","json_obj","updateFromJSON","observers","generateUUID","json","created_at","updated_at","content","mapContentToLocalProperties","contentObject","dirty","notifyObserversOfChange","observer","push","contentObj","structureParams","references","referenceParams","item","omit","enc_item_key","presentation_url","JSON","items","sort","b","Action","permissions","permission","charAt","content_types","contentType","verb","encryptionMode","accepts_encrypted","accepts_decrypted","Extension","actions","context","map","externalResponseItem","pull","hasOnePublicTag","isPublic","filtered","unshift","provider","domainName","domain_comps","hostname","split","domain","$get","ngDialog","ApiController","refresh","setItem","getAuthParamsForEmail","request","one","plain","authParams","computeEncryptionKeysForUser","setMk","post","generateInitialEncryptionKeysForUser","currentKeys","newKeys","_performPasswordChange","reencryptAllItemsAndSave","current_keys","new_keys","patch","verifyEncryptionStatusOfAllItems","allItems","filteredItems","itemsNeedingUpdate","isEncrypted","saveBatchItems","syncWithOptions","options","writeItemsToLocalStorage","responseItems","handleItemsResponse","clearDirtyItems","dirtyItems","getDirtyItems","createRequestParamsForItem","additionalFields","syncToken","sync_token","retrieved_items","omitFields","saved_items","undefined","decryptItems","mapResponseItemsToLocalModelsOmittingFields","paramsForItem","paramsForExportFile","paramsForExtension","forExportFile","itemCopy","cloneDeep","assert","deleted","encryptSingleItem","retrieveMk","auth_hash","createContentJSONFromProperties","base64","stringify","pick","shareFn","needsUpdate","concat","referencesAffectedBySharingChange","needingUpdate","open","template","resolve","className","disableAnimation","jsonString","mapResponseItemsToLocalModels","textFile","makeTextFile","Blob","type","URL","revokeObjectURL","createObjectURL","allItemsMatchingTypes","mergeLocalDataRemotely","tag_id","tag_name","removeItem","staticifyObject","object","writeToLocalStorage","value","toJson","sortItemsByDate","draftString","jsonObj","masterKey","item_key","decryptText","generateRandomEncryptionKey","encryptText","ek","firstHalfOfKey","ak","secondHalfOfKey","encryptedContent","authHash","hmac256","local_encryption_scheme","decryptSingleItem","isString","base64Decode","newMasterKey","oldMasterKey","shouldFocus","$element","ContextualExtensionsMenu","extensions","extensionsInContextOfItem","accessTypeForExtension","extensionUsesEncryptedData","el","draggable","dataTransfer","effectAllowed","setData","classList","add","drop","bin","dropEffect","counter","stopPropagation","binId","getData","$apply","fn","on","require","modelCtrl","lowercase","inputValue","lowercased","$setViewValue","$render","$parsers","ngModel","$window","getSelection","setSelectionRange","linkFunction","$attrs","timer","initialDelay","getTypeDelay","typeDelay","eraseDelay","blinkDelay","getAnimationDelay","cursor","blinkCursor","currentText","textArray","auxStyle","Array","start","typewrite","updateIt","charIndex","arrIndex","updateValue","iterationCallback","cleanAndRestart","iterationDelay","callbackFn","blinkIt","prebeginFn","parseInt","prop","val","html","newVal","oldVal","ExtensionManager","enabledRepeatActionUrls","decryptedExtensions","addItemSyncObserver","ext","enableRepeatAction","actionsWithContextForItem","retrieveExtensionFromServer","repeat_type","isRepeatActionEnabled","disableRepeatAction","oneUrl","handleExtensionLoadExternalResponseItem","updateFromExternalResponseItem","actionWithURL","win","outgoingParamsForItem","performPost","lastExecuted","removeItemChangeObserver","repeat_mode","addItemChangeObserver","changedItems","triggerWatchAction","actionQueue","repeat_timeout","diffInSeconds","queueAction","service","$filter","marked","setOptions","breaks","sanitize","html_code","trustAsHtml","ModelManager","itemSyncObservers","itemChangeObservers","contentTypes","itemId","models","findItem","resolveReferencesForItem","notifySyncObserversOfModels","sortItems","relevantItems","addObserver","changedItem","notifyItemChangeObserversOfModels","uniq","addItems","reference","referencedItem","addItemAsRelationship","id","removeAllRelationships","itemOne","itemTwo","removeItemAsRelationship","showErrors","formErrors","form","errors","$setDirty","$setValidity","$error","server","join","parseErrors"],"mappings":"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","file":"transpiled.js","sourcesContent":["class SNCrypto {\n\n generateRandomKey() {\n return CryptoJS.lib.WordArray.random(512/8).toString();\n }\n\n generateUUID() {\n var crypto = window.crypto || window.msCrypto;\n if(crypto) {\n var buf = new Uint32Array(4);\n crypto.getRandomValues(buf);\n var idx = -1;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n idx++;\n var r = (buf[idx>>3] >> ((idx%8)*4))&15;\n var v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n } else {\n var d = new Date().getTime();\n if(window.performance && typeof window.performance.now === \"function\"){\n d += performance.now(); //use high-precision timer if available\n }\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random()*16)%16 | 0;\n d = Math.floor(d/16);\n return (c=='x' ? r : (r&0x3|0x8)).toString(16);\n });\n return uuid;\n }\n }\n\n decryptText(encrypted_content, key) {\n var keyData = CryptoJS.enc.Hex.parse(key);\n var ivData = CryptoJS.enc.Hex.parse(\"\");\n var decrypted = CryptoJS.AES.decrypt(encrypted_content, keyData, { iv: ivData, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });\n return decrypted.toString(CryptoJS.enc.Utf8);\n }\n\n encryptText(text, key) {\n var keyData = CryptoJS.enc.Hex.parse(key);\n var ivData = CryptoJS.enc.Hex.parse(\"\");\n var encrypted = CryptoJS.AES.encrypt(text, keyData, { iv: ivData, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });\n return encrypted.toString();\n }\n\n generateRandomEncryptionKey() {\n var salt = Neeto.crypto.generateRandomKey();\n var passphrase = Neeto.crypto.generateRandomKey();\n return CryptoJS.PBKDF2(passphrase, salt, { keySize: 512/32 }).toString();\n }\n\n firstHalfOfKey(key) {\n return key.substring(0, key.length/2);\n }\n\n secondHalfOfKey(key) {\n return key.substring(key.length/2, key.length);\n }\n\n base64(text) {\n return CryptoJS.enc.Utf8.parse(text).toString(CryptoJS.enc.Base64)\n }\n\n base64Decode(base64String) {\n return CryptoJS.enc.Base64.parse(base64String).toString(CryptoJS.enc.Utf8)\n }\n\n sha256(text) {\n return CryptoJS.SHA256(text).toString();\n }\n\n sha1(text) {\n return CryptoJS.SHA1(text).toString();\n }\n\n hmac256(message, key) {\n var keyData = CryptoJS.enc.Hex.parse(key);\n var messageData = CryptoJS.enc.Utf8.parse(message);\n return CryptoJS.HmacSHA256(messageData, keyData).toString();\n }\n\n computeEncryptionKeysForUser({email, password, pw_salt, pw_func, pw_alg, pw_cost, pw_key_size} = {}, callback) {\n this.generateSymmetricKeyPair({password: password, pw_salt: pw_salt,\n pw_func: pw_func, pw_alg: pw_alg, pw_cost: pw_cost, pw_key_size: pw_key_size}, function(keys){\n var pw = keys[0];\n var mk = keys[1];\n\n callback({pw: pw, mk: mk});\n });\n }\n\n generateInitialEncryptionKeysForUser({email, password} = {}, callback) {\n var defaults = this.defaultPasswordGenerationParams();\n var {pw_func, pw_alg, pw_key_size, pw_cost} = defaults;\n var pw_nonce = this.generateRandomKey();\n var pw_salt = this.sha1(email + \"SN\" + pw_nonce);\n this.generateSymmetricKeyPair(_.merge({email: email, password: password, pw_salt: pw_salt}, defaults), function(keys){\n var pw = keys[0];\n var mk = keys[1];\n\n callback(_.merge({pw: pw, mk: mk, pw_nonce: pw_nonce}, defaults));\n });\n }\n}\n\nexport { SNCrypto }\n;class SNCryptoJS extends SNCrypto {\n\n /** Generates two deterministic keys based on one input */\n generateSymmetricKeyPair({password, pw_salt, pw_func, pw_alg, pw_cost, pw_key_size} = {}, callback) {\n var algMapping = {\n \"sha256\" : CryptoJS.algo.SHA256,\n \"sha512\" : CryptoJS.algo.SHA512\n }\n var fnMapping = {\n \"pbkdf2\" : CryptoJS.PBKDF2\n }\n\n var alg = algMapping[pw_alg];\n var kdf = fnMapping[pw_func];\n var output = kdf(password, pw_salt, { keySize: pw_key_size/32, hasher: alg, iterations: pw_cost }).toString();\n\n var outputLength = output.length;\n var firstHalf = output.slice(0, outputLength/2);\n var secondHalf = output.slice(outputLength/2, outputLength);\n callback([firstHalf, secondHalf])\n }\n\n defaultPasswordGenerationParams() {\n return {pw_func: \"pbkdf2\", pw_alg: \"sha512\", pw_key_size: 512, pw_cost: 3000};\n }\n }\n\n\nexport { SNCryptoJS }\n;var subtleCrypto = window.crypto.subtle;\n\nclass SNCryptoWeb extends SNCrypto {\n\n /**\n Overrides\n */\n defaultPasswordGenerationParams() {\n return {pw_func: \"pbkdf2\", pw_alg: \"sha512\", pw_key_size: 512, pw_cost: 5000};\n }\n\n /** Generates two deterministic keys based on one input */\n generateSymmetricKeyPair({password, pw_salt, pw_func, pw_alg, pw_cost, pw_key_size} = {}, callback) {\n this.stretchPassword({password: password, pw_func: pw_func, pw_alg: pw_alg, pw_salt: pw_salt, pw_cost: pw_cost, pw_key_size: pw_key_size}, function(output){\n var outputLength = output.length;\n var firstHalf = output.slice(0, outputLength/2);\n var secondHalf = output.slice(outputLength/2, outputLength);\n callback([firstHalf, secondHalf]);\n })\n }\n\n /**\n Internal\n */\n\n stretchPassword({password, pw_salt, pw_cost, pw_func, pw_alg, pw_key_size} = {}, callback) {\n\n this.webCryptoImportKey(password, pw_func, function(key){\n\n if(!key) {\n console.log(\"Key is null, unable to continue\");\n callback(null);\n return;\n }\n\n this.webCryptoDeriveBits({key: key, pw_func: pw_func, pw_alg: pw_alg, pw_salt: pw_salt, pw_cost: pw_cost, pw_key_size: pw_key_size}, function(key){\n if(!key) {\n callback(null);\n return;\n }\n\n callback(key);\n\n }.bind(this))\n }.bind(this))\n }\n\n webCryptoImportKey(input, pw_func, callback) {\n subtleCrypto.importKey(\n \"raw\",\n this.stringToArrayBuffer(input),\n {name: pw_func.toUpperCase()},\n false,\n [\"deriveBits\"]\n )\n .then(function(key){\n callback(key);\n })\n .catch(function(err){\n console.error(err);\n callback(null);\n });\n }\n\n webCryptoDeriveBits({key, pw_func, pw_alg, pw_salt, pw_cost, pw_key_size} = {}, callback) {\n var algMapping = {\n \"sha256\" : \"SHA-256\",\n \"sha512\" : \"SHA-512\",\n }\n var alg = algMapping[pw_alg];\n subtleCrypto.deriveBits(\n {\n \"name\": pw_func.toUpperCase(),\n salt: this.stringToArrayBuffer(pw_salt),\n iterations: pw_cost,\n hash: {name: alg},\n },\n key,\n pw_key_size\n )\n .then(function(bits){\n var key = this.arrayBufferToHexString(new Uint8Array(bits));\n callback(key);\n }.bind(this))\n .catch(function(err){\n console.error(err);\n callback(null);\n });\n }\n\n stringToArrayBuffer(string) {\n var encoder = new TextEncoder(\"utf-8\");\n return encoder.encode(string);\n }\n\n arrayBufferToHexString(arrayBuffer) {\n var byteArray = new Uint8Array(arrayBuffer);\n var hexString = \"\";\n var nextHexByte;\n\n for (var i=0; i 0;\n }\n\n this.mergeLocalChanged = function() {\n if(!this.user.shouldMerge) {\n if(!confirm(\"Unchecking this option means any locally stored tags and notes you have now will be deleted. Are you sure you want to continue?\")) {\n this.user.shouldMerge = true;\n }\n }\n }\n\n this.refreshData = function() {\n this.isRefreshing = true;\n apiController.sync(function(response){\n $timeout(function(){\n this.isRefreshing = false;\n }.bind(this), 200)\n if(!response) {\n alert(\"There was an error syncing. Please try again. If all else fails, log out and log back in.\");\n } else {\n this.syncUpdated();\n }\n }.bind(this));\n }\n\n this.syncUpdated = function() {\n this.lastSyncDate = new Date();\n }\n\n this.loginSubmitPressed = function() {\n this.loginData.status = \"Generating Login Keys...\";\n $timeout(function(){\n apiController.login(this.loginData.email, this.loginData.user_password, function(response){\n if(!response || response.error) {\n var error = response ? response.error : {message: \"An unknown error occured.\"}\n this.loginData.status = null;\n alert(error.message);\n } else {\n this.onAuthSuccess(response.user);\n }\n }.bind(this));\n }.bind(this))\n }\n\n this.submitRegistrationForm = function() {\n this.loginData.status = \"Generating Account Keys...\";\n\n $timeout(function(){\n apiController.register(this.loginData.email, this.loginData.user_password, function(response){\n if(!response || response.error) {\n var error = response ? response.error : {message: \"An unknown error occured.\"}\n this.loginData.status = null;\n alert(error.message);\n } else {\n this.onAuthSuccess(response.user);\n }\n }.bind(this));\n }.bind(this))\n }\n\n this.encryptionStatusForNotes = function() {\n var allNotes = modelManager.filteredNotes;\n var countEncrypted = 0;\n allNotes.forEach(function(note){\n if(note.encryptionEnabled()) {\n countEncrypted++;\n }\n }.bind(this))\n\n return countEncrypted + \"/\" + allNotes.length + \" notes encrypted\";\n }\n\n this.archiveEncryptionFormat = {encrypted: true};\n\n this.downloadDataArchive = function() {\n var link = document.createElement('a');\n link.setAttribute('download', 'notes.json');\n link.href = apiController.itemsDataFile(this.archiveEncryptionFormat.encrypted);\n link.click();\n }\n\n this.importFileSelected = function(files) {\n var file = files[0];\n var reader = new FileReader();\n reader.onload = function(e) {\n apiController.importJSONData(e.target.result, function(success, response){\n console.log(\"import response\", success, response);\n if(success) {\n // window.location.reload();\n } else {\n alert(\"There was an error importing your data. Please try again.\");\n }\n })\n }\n reader.readAsText(file);\n }\n\n this.onAuthSuccess = function(user) {\n this.user.uuid = user.uuid;\n\n // if(this.user.shouldMerge && this.hasLocalData()) {\n // apiController.mergeLocalDataRemotely(this.user, function(){\n // window.location.reload();\n // });\n // } else {\n window.location.reload();\n // }\n\n this.showLogin = false;\n this.showRegistration = false;\n }\n\n });\n;angular.module('app.frontend')\n.controller('HomeCtrl', function ($scope, $rootScope, $timeout, apiController, modelManager) {\n $rootScope.bodyClass = \"app-body-class\";\n\n var onUserSet = function() {\n apiController.setUser($scope.defaultUser);\n $scope.allTag = new Tag({all: true});\n $scope.allTag.title = \"All\";\n $scope.tags = modelManager.tags;\n $scope.allTag.notes = modelManager.notes;\n\n apiController.sync(null);\n // refresh every 30s\n setInterval(function () {\n apiController.sync(null);\n }, 30000);\n }\n\n apiController.getCurrentUser(function(user){\n if(user) {\n $scope.defaultUser = user;\n $rootScope.title = \"Notes — Standard Notes\";\n onUserSet();\n } else {\n $scope.defaultUser = new User(apiController.loadLocalItemsAndUser());\n onUserSet();\n }\n });\n\n /*\n Tags Ctrl Callbacks\n */\n\n $scope.updateAllTag = function() {\n // $scope.allTag.notes = modelManager.notes;\n }\n\n $scope.tagsWillMakeSelection = function(tag) {\n if(tag.all) {\n $scope.updateAllTag();\n }\n }\n\n $scope.tagsSelectionMade = function(tag) {\n $scope.selectedTag = tag;\n\n if($scope.selectedNote && $scope.selectedNote.dummy) {\n modelManager.removeItemLocally($scope.selectedNote);\n }\n }\n\n $scope.tagsAddNew = function(tag) {\n modelManager.addItem(tag);\n }\n\n $scope.tagsSave = function(tag, callback) {\n tag.setDirty(true);\n apiController.sync(callback);\n }\n\n /*\n Called to update the tag of a note after drag and drop change\n The note object is a copy of the original\n */\n $scope.tagsUpdateNoteTag = function(noteCopy, newTag, oldTag) {\n\n var originalNote = _.find(modelManager.notes, {uuid: noteCopy.uuid});\n if(!newTag.all) {\n modelManager.createRelationshipBetweenItems(newTag, originalNote);\n }\n\n apiController.sync(function(){});\n }\n\n /*\n Notes Ctrl Callbacks\n */\n\n $scope.notesRemoveTag = function(tag) {\n var validNotes = Note.filterDummyNotes(tag.notes);\n if(validNotes == 0) {\n modelManager.setItemToBeDeleted(tag);\n // if no more notes, delete tag\n apiController.sync(function(){\n // force scope tags to update on sub directives\n $scope.tags = [];\n $timeout(function(){\n $scope.tags = modelManager.tags;\n })\n });\n } else {\n alert(\"To delete this tag, remove all its notes first.\");\n }\n }\n\n $scope.notesSelectionMade = function(note) {\n $scope.selectedNote = note;\n }\n\n $scope.notesAddNew = function(note) {\n modelManager.addItem(note);\n\n if(!$scope.selectedTag.all) {\n modelManager.createRelationshipBetweenItems($scope.selectedTag, note);\n $scope.updateAllTag();\n }\n }\n\n /*\n Shared Callbacks\n */\n\n $scope.saveNote = function(note, callback) {\n note.setDirty(true);\n\n apiController.sync(function(){\n note.hasChanges = false;\n\n if(callback) {\n callback(true);\n }\n })\n }\n\n $scope.deleteNote = function(note) {\n\n modelManager.setItemToBeDeleted(note);\n\n if(note == $scope.selectedNote) {\n $scope.selectedNote = null;\n }\n\n if(note.dummy) {\n modelManager.removeItemLocally(note);\n return;\n }\n\n apiController.sync(null);\n }\n\n /*\n Header Ctrl Callbacks\n */\n\n $scope.headerLogout = function() {\n $scope.defaultUser = apiController.loadLocalItemsAndUser();\n $scope.tags = $scope.defaultUser.tags;\n }\n\n\n});\n;angular.module('app.frontend')\n .directive(\"notesSection\", function(){\n return {\n scope: {\n addNew: \"&\",\n selectionMade: \"&\",\n remove: \"&\",\n tag: \"=\",\n user: \"=\",\n removeTag: \"&\"\n },\n\n templateUrl: 'frontend/notes.html',\n replace: true,\n controller: 'NotesCtrl',\n controllerAs: 'ctrl',\n bindToController: true,\n\n link:function(scope, elem, attrs, ctrl) {\n scope.$watch('ctrl.tag', function(tag, oldTag){\n if(tag) {\n ctrl.tagDidChange(tag, oldTag);\n }\n });\n }\n }\n })\n .controller('NotesCtrl', function (apiController, $timeout, $rootScope, modelManager) {\n\n $rootScope.$on(\"editorFocused\", function(){\n this.showMenu = false;\n }.bind(this))\n\n var isFirstLoad = true;\n\n this.tagDidChange = function(tag, oldTag) {\n this.showMenu = false;\n\n if(this.selectedNote && this.selectedNote.dummy) {\n _.remove(oldTag.notes, this.selectedNote);\n }\n\n this.noteFilter.text = \"\";\n\n tag.notes.forEach(function(note){\n note.visible = true;\n })\n this.selectFirstNote(false);\n\n if(isFirstLoad) {\n $timeout(function(){\n var draft = apiController.getDraft();\n if(draft) {\n var note = draft;\n this.selectNote(note);\n } else {\n this.createNewNote();\n isFirstLoad = false;\n }\n }.bind(this))\n } else if(tag.notes.length == 0) {\n this.createNewNote();\n }\n }\n\n this.selectedTagDelete = function() {\n this.showMenu = false;\n this.removeTag()(this.tag);\n }\n\n this.selectedTagShare = function() {\n this.showMenu = false;\n\n if(!this.user.uuid) {\n alert(\"You must be signed in to share a tag.\");\n return;\n }\n\n if(this.tag.all) {\n alert(\"You cannot share the 'All' tag.\");\n return;\n }\n\n apiController.shareItem(this.tag, function(response){})\n }\n\n this.selectedTagUnshare = function() {\n this.showMenu = false;\n apiController.unshareItem(this.tag, function(response){\n\n })\n }\n\n this.selectFirstNote = function(createNew) {\n var visibleNotes = this.tag.notes.filter(function(note){\n return note.visible;\n });\n\n if(visibleNotes.length > 0) {\n this.selectNote(visibleNotes[0]);\n } else if(createNew) {\n this.createNewNote();\n }\n }\n\n this.selectNote = function(note) {\n this.selectedNote = note;\n this.selectionMade()(note);\n }\n\n this.createNewNote = function() {\n var title = \"New Note\" + (this.tag.notes ? (\" \" + (this.tag.notes.length + 1)) : \"\");\n this.newNote = modelManager.createItem({content_type: \"Note\", dummy: true, text: \"\"});\n this.newNote.title = title;\n this.selectNote(this.newNote);\n this.addNew()(this.newNote);\n }\n\n this.noteFilter = {text : ''};\n\n this.filterNotes = function(note) {\n if(this.noteFilter.text.length == 0) {\n note.visible = true;\n } else {\n note.visible = note.title.toLowerCase().includes(this.noteFilter.text) || note.text.toLowerCase().includes(this.noteFilter.text);\n }\n return note.visible;\n }.bind(this)\n\n this.filterTextChanged = function() {\n $timeout(function(){\n if(!this.selectedNote.visible) {\n this.selectFirstNote(false);\n }\n }.bind(this), 100)\n }\n });\n;angular.module('app.frontend')\n .directive(\"tagsSection\", function(){\n return {\n restrict: 'E',\n scope: {\n addNew: \"&\",\n selectionMade: \"&\",\n willSelect: \"&\",\n save: \"&\",\n tags: \"=\",\n allTag: \"=\",\n user: \"=\",\n updateNoteTag: \"&\"\n },\n templateUrl: 'frontend/tags.html',\n replace: true,\n controller: 'TagsCtrl',\n controllerAs: 'ctrl',\n bindToController: true,\n\n link:function(scope, elem, attrs, ctrl) {\n scope.$watch('ctrl.tags', function(newTags){\n if(newTags) {\n ctrl.setTags(newTags);\n }\n });\n\n scope.$watch('ctrl.allTag', function(allTag){\n if(allTag) {\n ctrl.setAllTag(allTag);\n }\n });\n }\n }\n })\n .controller('TagsCtrl', function (modelManager) {\n\n var initialLoad = true;\n\n this.setAllTag = function(allTag) {\n this.selectTag(this.allTag);\n }\n\n this.setTags = function(tags) {\n if(initialLoad) {\n initialLoad = false;\n this.selectTag(this.allTag);\n } else {\n if(tags && tags.length > 0) {\n this.selectTag(tags[0]);\n }\n }\n }\n\n this.selectTag = function(tag) {\n this.willSelect()(tag);\n this.selectedTag = tag;\n this.selectionMade()(tag);\n }\n\n this.clickedAddNewTag = function() {\n if(this.editingTag) {\n return;\n }\n\n this.newTag = modelManager.createItem({content_type: \"Tag\"});\n this.selectedTag = this.newTag;\n this.editingTag = this.newTag;\n this.addNew()(this.newTag);\n }\n\n var originalTagName = \"\";\n this.onTagTitleFocus = function(tag) {\n originalTagName = tag.title;\n }\n\n this.tagTitleDidChange = function(tag) {\n this.editingTag = tag;\n }\n\n this.saveTag = function($event, tag) {\n this.editingTag = null;\n if(tag.title.length == 0) {\n tag.title = originalTagName;\n originalTagName = \"\";\n return;\n }\n\n $event.target.blur();\n if(!tag.title || tag.title.length == 0) {\n return;\n }\n\n this.save()(tag, function(savedTag){\n // _.merge(tag, savedTag);\n this.selectTag(tag);\n this.newTag = null;\n }.bind(this));\n }\n\n this.noteCount = function(tag) {\n var validNotes = Note.filterDummyNotes(tag.notes);\n return validNotes.length;\n }\n\n this.handleDrop = function(e, newTag, note) {\n this.updateNoteTag()(note, newTag, this.selectedTag);\n }.bind(this)\n\n\n });\n;angular.module('app.frontend')\n.controller('UsernameModalCtrl', function ($scope, apiController, Restangular, user, callback, $timeout) {\n $scope.formData = {};\n\n $scope.saveUsername = function() {\n apiController.setUsername(user, $scope.formData.username, function(response){\n var username = response.username;\n user.username = username;\n callback(username);\n $scope.closeThisDialog();\n })\n }\n});\n;class Item {\n\n constructor(json_obj) {\n\n this.updateFromJSON(json_obj);\n\n this.observers = [];\n\n if(!this.uuid) {\n this.uuid = Neeto.crypto.generateUUID();\n }\n }\n\n static sortItemsByDate(items) {\n items.sort(function(a,b){\n return new Date(b.created_at) - new Date(a.created_at);\n });\n }\n\n get contentObject() {\n if(!this.content) {\n return {};\n }\n\n if(this.content !== null && typeof this.content === 'object') {\n // this is the case when mapping localStorage content, in which case the content is already parsed\n return this.content;\n }\n\n return JSON.parse(this.content);\n }\n\n updateFromJSON(json) {\n _.merge(this, json);\n if(this.created_at) {\n this.created_at = new Date(this.created_at);\n this.updated_at = new Date(this.updated_at);\n } else {\n this.created_at = new Date();\n this.updated_at = new Date();\n }\n\n if(json.content) {\n this.mapContentToLocalProperties(this.contentObject);\n }\n }\n\n setDirty(dirty) {\n this.dirty = dirty;\n\n if(dirty) {\n this.notifyObserversOfChange();\n }\n }\n\n addObserver(observer, callback) {\n if(!_.find(this.observers, observer)) {\n this.observers.push({observer: observer, callback: callback});\n }\n }\n\n removeObserver(observer) {\n _.remove(this.observers, {observer: observer})\n }\n\n notifyObserversOfChange() {\n for(var observer of this.observers) {\n observer.callback(this);\n }\n }\n\n mapContentToLocalProperties(contentObj) {\n\n }\n\n createContentJSONFromProperties() {\n return this.structureParams();\n }\n\n referenceParams() {\n // must override\n }\n\n structureParams() {\n return {references: this.referenceParams()}\n }\n\n addItemAsRelationship(item) {\n // must override\n }\n\n removeItemAsRelationship(item) {\n // must override\n }\n\n removeAllRelationships() {\n // must override\n }\n\n mergeMetadataFromItem(item) {\n _.merge(this, _.omit(item, [\"content\"]));\n }\n\n referencesAffectedBySharingChange() {\n // should be overriden to determine which references should be decrypted/encrypted\n return null;\n }\n\n isPublic() {\n return this.presentation_name;\n }\n\n isEncrypted() {\n return this.encryptionEnabled() && this.content.substring(0, 3) === '001' ? true : false;\n }\n\n encryptionEnabled() {\n return this.enc_item_key;\n }\n\n presentationURL() {\n return this.presentation_url;\n }\n\n}\n;class Action {\n constructor(json) {\n _.merge(this, json);\n this.running = false; // in case running=true was synced with server since model is uploaded nondiscriminatory\n }\n\n get permissionsString() {\n if(!this.permissions) {\n return \"\";\n }\n var permission = this.permissions.charAt(0).toUpperCase() + this.permissions.slice(1); // capitalize first letter\n permission += \": \";\n for(var contentType of this.content_types) {\n if(contentType == \"*\") {\n permission += \"All items\";\n } else {\n permission += contentType;\n }\n\n permission += \" \";\n }\n\n return permission;\n }\n\n get encryptionModeString() {\n if(this.verb != \"post\") {\n return null;\n }\n var encryptionMode = \"This action accepts data \";\n if(this.accepts_encrypted && this.accepts_decrypted) {\n encryptionMode += \"encrypted or decrypted.\";\n } else {\n if(this.accepts_encrypted) {\n encryptionMode += \"encrypted.\";\n } else {\n encryptionMode += \"decrypted.\";\n }\n }\n return encryptionMode;\n }\n\n}\n\nclass Extension extends Item {\n constructor(json) {\n super(json);\n _.merge(this, json);\n\n this.content_type = \"Extension\";\n }\n\n actionsInGlobalContext() {\n return this.actions.filter(function(action){\n return action.context == \"global\";\n })\n }\n\n actionsWithContextForItem(item) {\n return this.actions.filter(function(action){\n return action.context == item.content_type || action.context == \"Item\";\n })\n }\n\n mapContentToLocalProperties(contentObject) {\n super.mapContentToLocalProperties(contentObject)\n this.name = contentObject.name;\n this.url = contentObject.url;\n this.actions = contentObject.actions.map(function(action){\n return new Action(action);\n })\n }\n\n updateFromExternalResponseItem(externalResponseItem) {\n _.merge(this, externalResponseItem);\n this.actions = externalResponseItem.actions.map(function(action){\n return new Action(action);\n })\n }\n\n referenceParams() {\n return null;\n }\n\n structureParams() {\n var params = {\n name: this.name,\n url: this.url,\n actions: this.actions\n };\n\n _.merge(params, super.structureParams());\n return params;\n }\n\n}\n;class Note extends Item {\n\n constructor(json_obj) {\n super(json_obj);\n\n if(!this.tags) {\n this.tags = [];\n }\n }\n\n mapContentToLocalProperties(contentObject) {\n super.mapContentToLocalProperties(contentObject)\n this.title = contentObject.title;\n this.text = contentObject.text;\n }\n\n referenceParams() {\n var references = _.map(this.tags, function(tag){\n return {uuid: tag.uuid, content_type: tag.content_type};\n })\n\n return references;\n }\n\n structureParams() {\n var params = {\n title: this.title,\n text: this.text\n };\n\n _.merge(params, super.structureParams());\n return params;\n }\n\n addItemAsRelationship(item) {\n if(item.content_type == \"Tag\") {\n if(!_.find(this.tags, item)) {\n this.tags.push(item);\n }\n }\n super.addItemAsRelationship(item);\n }\n\n removeItemAsRelationship(item) {\n if(item.content_type == \"Tag\") {\n _.pull(this.tags, item);\n }\n super.removeItemAsRelationship(item);\n }\n\n removeAllRelationships() {\n this.tags.forEach(function(tag){\n _.pull(tag.notes, this);\n tag.setDirty(true);\n }.bind(this))\n this.tags = [];\n }\n\n static filterDummyNotes(notes) {\n var filtered = notes.filter(function(note){return note.dummy == false || note.dummy == null});\n return filtered;\n }\n\n referencesAffectedBySharingChange() {\n return super.referencesAffectedBySharingChange();\n }\n\n get hasOnePublicTag() {\n for (var tag of this.tags) {\n if(tag.isPublic()) {\n return true\n }\n }\n return false;\n }\n\n safeText() {\n return this.text || \"\";\n }\n\n safeTitle() {\n return this.title || \"\";\n }\n\n toJSON() {\n return {uuid: this.uuid}\n }\n\n isSharedIndividually() {\n return this.presentation_name;\n }\n\n isPublic() {\n return super.isPublic() || this.hasOnePublicTag;\n }\n\n get content_type() {\n return \"Note\";\n }\n}\n;class Tag extends Item {\n\n constructor(json_obj) {\n super(json_obj);\n\n if(!this.notes) {\n this.notes = [];\n }\n }\n\n mapContentToLocalProperties(contentObject) {\n super.mapContentToLocalProperties(contentObject)\n this.title = contentObject.title;\n }\n\n referenceParams() {\n var references = _.map(this.notes, function(note){\n return {uuid: note.uuid, content_type: note.content_type};\n })\n\n return references;\n }\n\n structureParams() {\n var params = {\n title: this.title\n };\n\n _.merge(params, super.structureParams());\n return params;\n }\n\n addItemAsRelationship(item) {\n if(item.content_type == \"Note\") {\n if(!_.find(this.notes, item)) {\n this.notes.unshift(item);\n }\n }\n super.addItemAsRelationship(item);\n }\n\n removeItemAsRelationship(item) {\n if(item.content_type == \"Note\") {\n _.pull(this.notes, item);\n }\n super.removeItemAsRelationship(item);\n }\n\n removeAllRelationships() {\n this.notes.forEach(function(note){\n _.pull(note.tags, this);\n note.setDirty(true);\n }.bind(this))\n\n this.notes = [];\n }\n\n get content_type() {\n return \"Tag\";\n }\n\n referencesAffectedBySharingChange() {\n return this.notes;\n }\n}\n;class User {\n constructor(json_obj) {\n _.merge(this, json_obj);\n }\n}\n;angular.module('app.frontend')\n .provider('apiController', function () {\n\n function domainName() {\n var domain_comps = location.hostname.split(\".\");\n var domain = domain_comps[domain_comps.length - 2] + \".\" + domain_comps[domain_comps.length - 1];\n return domain;\n }\n\n var url;\n\n this.defaultServerURL = function() {\n if(!url) {\n url = localStorage.getItem(\"server\");\n if(!url) {\n url = \"https://n3.standardnotes.org\";\n }\n }\n return url;\n }\n\n\n this.$get = function($rootScope, Restangular, modelManager, ngDialog) {\n return new ApiController($rootScope, Restangular, modelManager, ngDialog);\n }\n\n function ApiController($rootScope, Restangular, modelManager, ngDialog) {\n\n this.setUser = function(user) {\n this.user = user;\n }\n\n /*\n Config\n */\n\n this.getServer = function() {\n if(!url) {\n url = localStorage.getItem(\"server\");\n if(!url) {\n url = \"https://n3.standardnotes.org\";\n this.setServer(url);\n }\n }\n return url;\n }\n\n this.setServer = function(url, refresh) {\n localStorage.setItem(\"server\", url);\n if(refresh) {\n window.location.reload();\n }\n }\n\n\n /*\n Auth\n */\n\n this.getAuthParamsForEmail = function(email, callback) {\n var request = Restangular.one(\"auth\", \"params\");\n request.get({email: email}).then(function(response){\n callback(response.plain());\n })\n .catch(function(response){\n console.log(\"Error getting current user\", response);\n callback(response.data);\n })\n }\n\n this.getCurrentUser = function(callback) {\n if(!localStorage.getItem(\"jwt\")) {\n callback(null);\n return;\n }\n Restangular.one(\"users/current\").get().then(function(response){\n var user = response.plain();\n callback(user);\n }.bind(this))\n .catch(function(response){\n console.log(\"Error getting current user\", response);\n callback(response.data);\n })\n }\n\n this.login = function(email, password, callback) {\n this.getAuthParamsForEmail(email, function(authParams){\n if(!authParams) {\n callback(null);\n return;\n }\n Neeto.crypto.computeEncryptionKeysForUser(_.merge({email: email, password: password}, authParams), function(keys){\n this.setMk(keys.mk);\n var request = Restangular.one(\"auth/sign_in\");\n var params = {password: keys.pw, email: email};\n _.merge(request, params);\n request.post().then(function(response){\n localStorage.setItem(\"jwt\", response.token);\n callback(response);\n })\n .catch(function(response){\n callback(response.data);\n })\n }.bind(this));\n }.bind(this))\n }\n\n this.register = function(email, password, callback) {\n Neeto.crypto.generateInitialEncryptionKeysForUser({password: password, email: email}, function(keys){\n this.setMk(keys.mk);\n keys.mk = null;\n var request = Restangular.one(\"auth\");\n var params = _.merge({password: keys.pw, email: email}, keys);\n _.merge(request, params);\n request.post().then(function(response){\n localStorage.setItem(\"jwt\", response.token);\n callback(response);\n })\n .catch(function(response){\n callback(response.data);\n })\n }.bind(this));\n }\n\n this.changePassword = function(user, current_password, new_password) {\n this.getAuthParamsForEmail(email, function(authParams){\n if(!authParams) {\n callback(null);\n return;\n }\n Neeto.crypto.computeEncryptionKeysForUser(_.merge({password: current_password, email: user.email}, authParams), function(currentKeys) {\n Neeto.crypto.computeEncryptionKeysForUser(_.merge({password: new_password, email: user.email}, authParams), function(newKeys){\n var data = {};\n data.current_password = currentKeys.pw;\n data.password = newKeys.pw;\n data.password_confirmation = newKeys.pw;\n\n var user = this.user;\n\n this._performPasswordChange(currentKeys, newKeys, function(response){\n if(response && !response.error) {\n // this.showNewPasswordForm = false;\n // reencrypt data with new mk\n this.reencryptAllItemsAndSave(user, newKeys.mk, currentKeys.mk, function(success){\n if(success) {\n this.setMk(newKeys.mk);\n alert(\"Your password has been changed and your data re-encrypted.\");\n } else {\n // rollback password\n this._performPasswordChange(newKeys, currentKeys, function(response){\n alert(\"There was an error changing your password. Your password has been rolled back.\");\n window.location.reload();\n })\n }\n }.bind(this));\n } else {\n // this.showNewPasswordForm = false;\n alert(\"There was an error changing your password. Please try again.\");\n }\n }.bind(this))\n }.bind(this));\n }.bind(this));\n }.bind(this));\n }\n\n this._performPasswordChange = function(email, current_keys, new_keys, callback) {\n var request = Restangular.one(\"auth\");\n var params = {password: new_keys.pw, password_confirmation: new_keys.pw, current_password: current_keys.pw, email: email};\n _.merge(request, params);\n request.patch().then(function(response){\n callback(response);\n })\n }\n\n\n /*\n User\n */\n\n this.setUsername = function(user, username, callback) {\n var request = Restangular.one(\"users\", user.uuid);\n request.username = username;\n request.patch().then(function(response){\n callback(response.plain());\n })\n }\n\n /*\n Ensures that if encryption is disabled, all local items are uncrypted,\n and that if it's enabled, that all local items are encrypted\n */\n this.verifyEncryptionStatusOfAllItems = function(user, callback) {\n var allItems = user.filteredItems();\n var itemsNeedingUpdate = [];\n allItems.forEach(function(item){\n if(!item.isPublic()) {\n if(item.encryptionEnabled() && !item.isEncrypted()) {\n itemsNeedingUpdate.push(item);\n }\n } else {\n if(item.isEncrypted()) {\n itemsNeedingUpdate.push(item);\n }\n }\n }.bind(this))\n\n if(itemsNeedingUpdate.length > 0) {\n console.log(\"verifying encryption, items need updating\", itemsNeedingUpdate);\n this.saveBatchItems(user, itemsNeedingUpdate, callback)\n }\n }\n\n\n\n /*\n Items\n */\n\n this.syncWithOptions = function(callback, options = {}) {\n if(!this.user.uuid) {\n this.writeItemsToLocalStorage(function(responseItems){\n this.handleItemsResponse(responseItems);\n modelManager.clearDirtyItems();\n if(callback) {\n callback();\n }\n }.bind(this))\n return;\n }\n\n var dirtyItems = modelManager.getDirtyItems();\n var request = Restangular.one(\"items/sync\");\n request.items = _.map(dirtyItems, function(item){\n return this.createRequestParamsForItem(item, options.additionalFields);\n }.bind(this));\n\n // console.log(\"syncing items\", request.items);\n\n if(this.syncToken) {\n request.sync_token = this.syncToken;\n }\n\n request.post().then(function(response) {\n modelManager.clearDirtyItems();\n this.syncToken = response.sync_token;\n $rootScope.$broadcast(\"sync:updated_token\", this.syncToken);\n\n this.handleItemsResponse(response.retrieved_items, null);\n // merge only metadata for saved items\n var omitFields = [\"content\", \"enc_item_key\", \"auth_hash\"];\n this.handleItemsResponse(response.saved_items, omitFields);\n\n if(callback) {\n callback(response);\n }\n }.bind(this))\n .catch(function(response){\n console.log(\"Sync error: \", response);\n callback(null);\n })\n }\n\n this.sync = function(callback) {\n this.syncWithOptions(callback, undefined);\n }\n\n this.handleItemsResponse = function(responseItems, omitFields) {\n this.decryptItems(responseItems);\n return modelManager.mapResponseItemsToLocalModelsOmittingFields(responseItems, omitFields);\n }\n\n this.createRequestParamsForItem = function(item, additionalFields) {\n return this.paramsForItem(item, !item.isPublic(), additionalFields, false);\n }\n\n this.paramsForExportFile = function(item, encrypted) {\n return _.omit(this.paramsForItem(item, encrypted, [\"created_at\", \"updated_at\"], true), [\"deleted\"]);\n }\n\n this.paramsForExtension = function(item, encrypted) {\n return _.omit(this.paramsForItem(item, encrypted, [\"created_at\", \"updated_at\"], true), [\"deleted\"]);\n }\n\n this.paramsForItem = function(item, encrypted, additionalFields, forExportFile) {\n var itemCopy = _.cloneDeep(item);\n\n console.assert(!item.dummy, \"Item is dummy, should not have gotten here.\", item.dummy)\n\n var params = {uuid: item.uuid, content_type: item.content_type,\n presentation_name: item.presentation_name, deleted: item.deleted};\n\n if(encrypted) {\n this.encryptSingleItem(itemCopy, this.retrieveMk());\n params.content = itemCopy.content;\n params.enc_item_key = itemCopy.enc_item_key;\n params.auth_hash = itemCopy.auth_hash;\n }\n else {\n params.content = forExportFile ? itemCopy.createContentJSONFromProperties() : \"000\" + Neeto.crypto.base64(JSON.stringify(itemCopy.createContentJSONFromProperties()));\n if(!forExportFile) {\n params.enc_item_key = null;\n params.auth_hash = null;\n }\n }\n\n if(additionalFields) {\n _.merge(params, _.pick(item, additionalFields));\n }\n\n return params;\n }\n\n this.shareItem = function(item, callback) {\n if(!this.user.uuid) {\n alert(\"You must be signed in to share.\");\n return;\n }\n\n var shareFn = function() {\n item.presentation_name = \"_auto_\";\n var needsUpdate = [item].concat(item.referencesAffectedBySharingChange() || []);\n needsUpdate.forEach(function(needingUpdate){\n needingUpdate.setDirty(true);\n })\n this.sync();\n }.bind(this)\n\n if(!this.user.username) {\n ngDialog.open({\n template: 'frontend/modals/username.html',\n controller: 'UsernameModalCtrl',\n resolve: {\n user: function() {return this.user}.bind(this),\n callback: function() {\n return shareFn;\n }\n },\n className: 'ngdialog-theme-default',\n disableAnimation: true\n });\n } else {\n shareFn();\n }\n }\n\n this.unshareItem = function(item, callback) {\n item.presentation_name = null;\n var needsUpdate = [item].concat(item.referencesAffectedBySharingChange() || []);\n needsUpdate.forEach(function(needingUpdate){\n needingUpdate.setDirty(true);\n })\n this.sync(null);\n }\n\n /*\n Import\n */\n\n this.importJSONData = function(jsonString, callback) {\n var data = JSON.parse(jsonString);\n console.log(\"importing data\", data);\n this.decryptItems(data.items);\n modelManager.mapResponseItemsToLocalModels(data.items);\n modelManager.items.forEach(function(item){\n item.setDirty(true);\n })\n this.syncWithOptions(callback, {additionalFields: [\"created_at\", \"updated_at\"]});\n }\n\n /*\n Export\n */\n\n this.itemsDataFile = function(encrypted) {\n var textFile = null;\n var makeTextFile = function (text) {\n var data = new Blob([text], {type: 'text/json'});\n\n // If we are replacing a previously generated file we need to\n // manually revoke the object URL to avoid memory leaks.\n if (textFile !== null) {\n window.URL.revokeObjectURL(textFile);\n }\n\n textFile = window.URL.createObjectURL(data);\n\n // returns a URL you can use as a href\n return textFile;\n }.bind(this);\n\n var items = _.map(modelManager.allItemsMatchingTypes([\"Tag\", \"Note\"]), function(item){\n return this.paramsForExportFile(item, encrypted);\n }.bind(this));\n\n var data = {\n items: items\n }\n\n return makeTextFile(JSON.stringify(data, null, 2 /* pretty print */));\n }\n\n\n\n /*\n Merging\n */\n this.mergeLocalDataRemotely = function(user, callback) {\n var request = Restangular.one(\"users\", user.uuid).one(\"merge\");\n var tags = user.tags;\n request.items = user.items;\n request.items.forEach(function(item){\n if(item.tag_id) {\n var tag = tags.filter(function(tag){return tag.uuid == item.tag_id})[0];\n item.tag_name = tag.title;\n }\n })\n request.post().then(function(response){\n callback();\n localStorage.removeItem('user');\n })\n }\n\n\n\n\n\n\n this.staticifyObject = function(object) {\n return JSON.parse(JSON.stringify(object));\n }\n\n this.writeItemsToLocalStorage = function(callback) {\n var items = _.map(modelManager.items, function(item){\n return this.paramsForItem(item, false, [\"created_at\", \"updated_at\"], false)\n }.bind(this));\n console.log(\"writing items to local\", items);\n this.writeToLocalStorage('items', items);\n callback(items);\n }\n\n this.writeToLocalStorage = function(key, value) {\n localStorage.setItem(key, angular.toJson(value));\n }\n\n this.loadLocalItemsAndUser = function() {\n var user = {};\n var items = JSON.parse(localStorage.getItem('items')) || [];\n items = this.handleItemsResponse(items);\n Item.sortItemsByDate(items);\n user.items = items;\n user.shouldMerge = true;\n return user;\n }\n\n /*\n Drafts\n */\n\n this.saveDraftToDisk = function(draft) {\n localStorage.setItem(\"draft\", JSON.stringify(draft));\n }\n\n this.clearDraft = function() {\n localStorage.removeItem(\"draft\");\n }\n\n this.getDraft = function() {\n var draftString = localStorage.getItem(\"draft\");\n if(!draftString || draftString == 'undefined') {\n return null;\n }\n var jsonObj = _.merge({content_type: \"Note\"}, JSON.parse(draftString));\n return modelManager.createItem(jsonObj);\n }\n\n\n /*\n Encrpytion\n */\n\n this.retrieveMk = function() {\n if(!this.mk) {\n this.mk = localStorage.getItem(\"mk\");\n }\n return this.mk;\n }\n\n this.setMk = function(mk) {\n localStorage.setItem('mk', mk);\n }\n\n this.signout = function() {\n localStorage.removeItem(\"jwt\");\n localStorage.removeItem(\"mk\");\n }\n\n this.encryptSingleItem = function(item, masterKey) {\n var item_key = null;\n if(item.enc_item_key) {\n item_key = Neeto.crypto.decryptText(item.enc_item_key, masterKey);\n } else {\n item_key = Neeto.crypto.generateRandomEncryptionKey();\n item.enc_item_key = Neeto.crypto.encryptText(item_key, masterKey);\n }\n\n var ek = Neeto.crypto.firstHalfOfKey(item_key);\n var ak = Neeto.crypto.secondHalfOfKey(item_key);\n var encryptedContent = \"001\" + Neeto.crypto.encryptText(JSON.stringify(item.createContentJSONFromProperties()), ek);\n var authHash = Neeto.crypto.hmac256(encryptedContent, ak);\n\n item.content = encryptedContent;\n item.auth_hash = authHash;\n item.local_encryption_scheme = \"1.0\";\n }\n\n this.decryptSingleItem = function(item, masterKey) {\n var item_key = Neeto.crypto.decryptText(item.enc_item_key, masterKey);\n\n var ek = Neeto.crypto.firstHalfOfKey(item_key);\n var ak = Neeto.crypto.secondHalfOfKey(item_key);\n var authHash = Neeto.crypto.hmac256(item.content, ak);\n if(authHash !== item.auth_hash || !item.auth_hash) {\n console.log(\"Authentication hash does not match.\")\n return;\n }\n\n var content = Neeto.crypto.decryptText(item.content.substring(3, item.content.length), ek);\n item.content = content;\n }\n\n this.decryptItems = function(items) {\n var masterKey = this.retrieveMk();\n for (var item of items) {\n if(item.deleted == true) {\n continue;\n }\n var isString = typeof item.content === 'string' || item.content instanceof String;\n if(isString) {\n if(item.content.substring(0, 3) == \"001\" && item.enc_item_key) {\n // is encrypted\n this.decryptSingleItem(item, masterKey);\n } else {\n // is base64 encoded\n item.content = Neeto.crypto.base64Decode(item.content.substring(3, item.content.length))\n }\n }\n }\n }\n\n this.reencryptAllItemsAndSave = function(user, newMasterKey, oldMasterKey, callback) {\n var items = user.filteredItems();\n items.forEach(function(item){\n if(item.content.substring(0, 3) == \"001\" && item.enc_item_key) {\n // first decrypt item_key with old key\n var item_key = Neeto.crypto.decryptText(item.enc_item_key, oldMasterKey);\n // now encrypt item_key with new key\n item.enc_item_key = Neeto.crypto.encryptText(item_key, newMasterKey);\n }\n });\n\n this.saveBatchItems(user, items, function(success) {\n callback(success);\n }.bind(this));\n }\n }\n});\n;angular\n .module('app.frontend')\n .directive('mbAutofocus', ['$timeout', function($timeout) {\n return {\n restrict: 'A',\n scope: {\n shouldFocus: \"=\"\n },\n link : function($scope, $element) {\n $timeout(function() {\n if($scope.shouldFocus) {\n $element[0].focus();\n }\n });\n }\n }\n }]);\n;class ContextualExtensionsMenu {\n\n constructor() {\n this.restrict = \"E\";\n this.templateUrl = \"frontend/directives/contextual-menu.html\";\n this.scope = {\n item: \"=\"\n };\n }\n\n controller($scope, modelManager, extensionManager) {\n $scope.extensions = extensionManager.extensionsInContextOfItem($scope.item);\n\n $scope.executeAction = function(action, extension) {\n action.running = true;\n extensionManager.executeAction(action, extension, $scope.item, function(response){\n action.running = false;\n })\n }\n\n $scope.accessTypeForExtension = function(extension) {\n return extensionManager.extensionUsesEncryptedData(extension) ? \"encrypted\" : \"decrypted\";\n }\n\n }\n\n\n}\n\nangular.module('app.frontend').directive('contextualExtensionsMenu', () => new ContextualExtensionsMenu);\n;angular\n .module('app.frontend')\n .directive('draggable', function() {\n return {\n scope: {\n note: \"=\"\n },\n link: function(scope, element) {\n // this gives us the native JS object\n var el = element[0];\n\n el.draggable = true;\n\n el.addEventListener(\n 'dragstart',\n function(e) {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('Note', JSON.stringify(scope.note));\n this.classList.add('drag');\n return false;\n },\n false\n );\n\n el.addEventListener(\n 'dragend',\n function(e) {\n this.classList.remove('drag');\n return false;\n },\n false\n );\n }\n }\n});\n\nangular\n .module('app.frontend')\n .directive('droppable', function() {\n return {\n scope: {\n drop: '&',\n bin: '=',\n tag: \"=\"\n },\n link: function(scope, element) {\n // again we need the native object\n var el = element[0];\n\n el.addEventListener(\n 'dragover',\n function(e) {\n e.dataTransfer.dropEffect = 'move';\n // allows us to drop\n if (e.preventDefault) e.preventDefault();\n this.classList.add('over');\n return false;\n },\n false\n );\n\n var counter = 0;\n\n el.addEventListener(\n 'dragenter',\n function(e) {\n counter++;\n this.classList.add('over');\n return false;\n },\n false\n );\n\n el.addEventListener(\n 'dragleave',\n function(e) {\n counter--;\n if (counter === 0) {\n this.classList.remove('over');\n }\n return false;\n },\n false\n );\n\n el.addEventListener(\n 'drop',\n function(e) {\n // Stops some browsers from redirecting.\n if (e.stopPropagation) e.stopPropagation();\n\n this.classList.remove('over');\n\n var binId = this.uuid;\n var note = new Note(JSON.parse(e.dataTransfer.getData('Note')));\n scope.$apply(function(scope) {\n var fn = scope.drop();\n if ('undefined' !== typeof fn) {\n fn(e, scope.tag, note);\n }\n });\n\n return false;\n },\n false\n );\n }\n }\n});\n;angular\n .module('app.frontend')\n .directive('fileChange', function() {\n return {\n restrict: 'A',\n scope: {\n handler: '&'\n },\n link: function (scope, element) {\n element.on('change', function (event) {\n scope.$apply(function(){\n scope.handler({files: event.target.files});\n });\n });\n }\n };\n});\n;angular\n .module('app.frontend')\n .directive('lowercase', function() {\n return {\n require: 'ngModel',\n link: function(scope, element, attrs, modelCtrl) {\n var lowercase = function(inputValue) {\n if (inputValue == undefined) inputValue = '';\n var lowercased = inputValue.toLowerCase();\n if (lowercased !== inputValue) {\n modelCtrl.$setViewValue(lowercased);\n modelCtrl.$render();\n }\n return lowercased;\n }\n modelCtrl.$parsers.push(lowercase);\n lowercase(scope[attrs.ngModel]);\n }\n };\n });\n;angular\n .module('app.frontend')\n .directive('selectOnClick', ['$window', function ($window) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.on('focus', function () {\n if (!$window.getSelection().toString()) {\n // Required for mobile Safari\n this.setSelectionRange(0, this.value.length)\n }\n });\n }\n };\n}]);\n;angular\n .module('app.frontend')\n .directive('note', function($timeout) {\n return {\n restrict: 'E',\n controller: 'SingleNoteCtrl',\n templateUrl: \"frontend/directives/note.html\",\n scope: {\n note: \"=\"\n },\n }\n })\n .controller('SingleNoteCtrl', function ($rootScope, $scope, $state, markdownRenderer) {\n $scope.renderedContent = function() {\n return markdownRenderer.renderHtml(markdownRenderer.renderedContentForText($scope.note.text));\n }\n });\n;/**\n * AngularJS directive that simulates the effect of typing on a text editor - with a blinking cursor.\n * This directive works as an attribute to any HTML element, and it changes the speed/delay of its animation.\n *\n * There's also a simple less file included for basic styling of the dialog, which can be overridden.\n * The config object also lets the user define custom CSS classes for the modal.\n *\n * How to use:\n *\n * Just add the desired text to the 'text' attribute of the element and the directive takes care of the rest.\n * The 'text' attribute can be a single string or an array of string. In case an array is passed, the string\n * on each index is erased so the next item can be printed. When the last index is reached, that string stays\n * on the screen. (So if you want to erase the last string, just push an empty string to the end of the array)\n *\n * These are the optional preferences:\n * - initial delay: set an 'initial-delay' attribute for the element\n * - type delay: set a 'type-delay' attribute for the element\n * - erase delay: set a 'erase-delay' attribute for the element\n * - specify cursor : set a 'cursor' attribute for the element, specifying which cursor to use\n * - turn off cursor blinking: set the 'blink-cursor' attribute to \"false\"\n * - cursor blinking speed: set a 'blink-delay' attribute for the element\n * - scope callback: pass the desired scope callback as the 'callback-fn' attribute of the element\n *\n * Note:\n * Each time/delay value should be set either on seconds (1s) or milliseconds (1000)\n *\n * Dependencies:\n * The directive needs the css file provided in order to replicate the cursor blinking effect.\n */\n\n\nangular\n .module('app.frontend').directive('typewrite', ['$timeout', function ($timeout) {\n function linkFunction($scope, $element, $attrs) {\n var timer = null,\n initialDelay = $attrs.initialDelay ? getTypeDelay($attrs.initialDelay) : 200,\n typeDelay = $attrs.typeDelay || 200,\n eraseDelay = $attrs.eraseDelay || typeDelay / 2,\n blinkDelay = $attrs.blinkDelay ? getAnimationDelay($attrs.blinkDelay) : false,\n cursor = $attrs.cursor || '|',\n blinkCursor = typeof $attrs.blinkCursor !== 'undefined' ? $attrs.blinkCursor === 'true' : true,\n currentText,\n textArray,\n running,\n auxStyle;\n\n\n\n if ($scope.text) {\n if ($scope.text instanceof Array) {\n textArray = $scope.text;\n currentText = textArray[0];\n } else {\n currentText = $scope.text;\n }\n }\n if (typeof $scope.start === 'undefined' || $scope.start) {\n typewrite();\n }\n\n function typewrite() {\n timer = $timeout(function () {\n updateIt($element, 0, 0, currentText);\n }, initialDelay);\n }\n\n function updateIt(element, charIndex, arrIndex, text) {\n if (charIndex <= text.length) {\n updateValue(element, text.substring(0, charIndex) + cursor);\n charIndex++;\n timer = $timeout(function () {\n updateIt(element, charIndex, arrIndex, text);\n }, typeDelay);\n return;\n } else {\n charIndex--;\n\n if($scope.iterationCallback) {\n $scope.iterationCallback()(arrIndex);\n }\n\n // check if it's an array\n if (textArray && arrIndex < textArray.length - 1) {\n timer = $timeout(function () {\n cleanAndRestart(element, charIndex, arrIndex, textArray[arrIndex]);\n }, $scope.iterationDelay);\n } else {\n if ($scope.callbackFn) {\n $scope.callbackFn();\n }\n blinkIt(element, charIndex, currentText);\n }\n }\n }\n\n function blinkIt(element, charIndex) {\n var text = element.text().substring(0, element.text().length - 1);\n if (blinkCursor) {\n if (blinkDelay) {\n auxStyle = '-webkit-animation:blink-it steps(1) ' + blinkDelay + ' infinite;-moz-animation:blink-it steps(1) ' + blinkDelay + ' infinite ' +\n '-ms-animation:blink-it steps(1) ' + blinkDelay + ' infinite;-o-animation:blink-it steps(1) ' + blinkDelay + ' infinite; ' +\n 'animation:blink-it steps(1) ' + blinkDelay + ' infinite;';\n updateValue(element, text.substring(0, charIndex) + '' + cursor + '');\n } else {\n updateValue(element, text.substring(0, charIndex) + '' + cursor + '');\n }\n } else {\n updateValue(element, text.substring(0, charIndex));\n }\n }\n\n function cleanAndRestart(element, charIndex, arrIndex, currentText) {\n if(charIndex == 0) {\n if($scope.prebeginFn) {\n $scope.prebeginFn()();\n }\n }\n if (charIndex > 0) {\n currentText = currentText.slice(0, -1);\n // element.html(currentText.substring(0, currentText.length - 1) + cursor);\n updateValue(element, currentText + cursor);\n charIndex--;\n timer = $timeout(function () {\n cleanAndRestart(element, charIndex, arrIndex, currentText);\n }, eraseDelay);\n return;\n } else {\n arrIndex++;\n currentText = textArray[arrIndex];\n timer = $timeout(function () {\n updateIt(element, 0, arrIndex, currentText);\n }, typeDelay);\n }\n }\n\n function getTypeDelay(delay) {\n if (typeof delay === 'string') {\n return delay.charAt(delay.length - 1) === 's' ? parseInt(delay.substring(0, delay.length - 1), 10) * 1000 : +delay;\n } else {\n return false;\n }\n }\n\n function getAnimationDelay(delay) {\n if (typeof delay === 'string') {\n return delay.charAt(delay.length - 1) === 's' ? delay : parseInt(delay.substring(0, delay.length - 1), 10) / 1000;\n }\n }\n\n function updateValue(element, value) {\n if (element.prop('nodeName').toUpperCase() === 'INPUT') {\n return element.val(value);\n }\n return element.html(value);\n }\n\n $scope.$on('$destroy', function () {\n if (timer) {\n $timeout.cancel(timer);\n }\n });\n\n $scope.$watch('start', function (newVal) {\n if (!running && newVal) {\n running = !running;\n typewrite();\n }\n });\n\n $scope.$watch('text', function (newVal, oldVal) {\n if(!(newVal instanceof Array)) {\n currentText = newVal;\n typewrite();\n }\n });\n }\n\n return {\n restrict: 'A',\n link: linkFunction,\n replace: true,\n scope: {\n text: '=',\n callbackFn: '&',\n iterationCallback: '&',\n iterationDelay: '=',\n prebeginFn: '&',\n start: '='\n }\n };\n\n }]);\n;class ExtensionManager {\n\n constructor(Restangular, modelManager, apiController) {\n this.Restangular = Restangular;\n this.modelManager = modelManager;\n this.apiController = apiController;\n this.enabledRepeatActionUrls = JSON.parse(localStorage.getItem(\"enabledRepeatActionUrls\")) || [];\n this.decryptedExtensions = JSON.parse(localStorage.getItem(\"decryptedExtensions\")) || [];\n\n modelManager.addItemSyncObserver(\"extensionManager\", \"Extension\", function(items){\n for (var ext of items) {\n\n ext.encrypted = this.extensionUsesEncryptedData(ext);\n\n for (var action of ext.actions) {\n if(this.enabledRepeatActionUrls.includes(action.url)) {\n this.enableRepeatAction(action, ext);\n }\n }\n }\n }.bind(this))\n }\n\n get extensions() {\n return this.modelManager.extensions;\n }\n\n extensionsInContextOfItem(item) {\n return this.extensions.filter(function(ext){\n return ext.actionsWithContextForItem(item).length > 0;\n })\n }\n\n actionWithURL(url) {\n for (var extension of this.extensions) {\n return _.find(extension.actions, {url: url})\n }\n }\n\n extensionUsesEncryptedData(extension) {\n return !this.decryptedExtensions.includes(extension.url);\n }\n\n changeExtensionEncryptionFormat(encrypted, extension) {\n if(encrypted) {\n _.pull(this.decryptedExtensions, extension.url);\n } else {\n this.decryptedExtensions.push(extension.url);\n }\n\n localStorage.setItem(\"decryptedExtensions\", JSON.stringify(this.decryptedExtensions))\n\n extension.encrypted = this.extensionUsesEncryptedData(extension);\n\n console.log(\"ext with dec\", this.decryptedExtensions);\n }\n\n addExtension(url, callback) {\n this.retrieveExtensionFromServer(url, callback);\n }\n\n deleteExtension(extension) {\n for(var action of extension.actions) {\n _.pull(this.decryptedExtensions, extension);\n if(action.repeat_type) {\n if(this.isRepeatActionEnabled(action)) {\n this.disableRepeatAction(action);\n }\n }\n }\n\n this.modelManager.setItemToBeDeleted(extension);\n this.apiController.sync(null);\n }\n\n retrieveExtensionFromServer(url, callback) {\n console.log(\"Registering URL\", url);\n this.Restangular.oneUrl(url, url).get().then(function(response){\n var ext = this.handleExtensionLoadExternalResponseItem(url, response.plain());\n if(callback) {\n callback(ext);\n }\n }.bind(this))\n .catch(function(response){\n console.log(\"Error registering extension\", response);\n callback(null);\n })\n }\n\n handleExtensionLoadExternalResponseItem(url, externalResponseItem) {\n var extension = _.find(this.extensions, {url: url});\n if(extension) {\n extension.updateFromExternalResponseItem(externalResponseItem);\n } else {\n extension = new Extension(externalResponseItem);\n extension.url = url;\n extension.setDirty(true);\n this.modelManager.addItem(extension);\n this.apiController.sync(null);\n }\n\n return extension;\n }\n\n refreshExtensionsFromServer() {\n for (var url of this.enabledRepeatActionUrls) {\n var action = this.actionWithURL(url);\n this.disableRepeatAction(action);\n }\n\n for(var ext of this.extensions) {\n this.retrieveExtensionFromServer(ext.url, function(extension){\n extension.setDirty(true);\n });\n }\n }\n\n executeAction(action, extension, item, callback) {\n\n switch (action.verb) {\n case \"get\": {\n this.Restangular.oneUrl(action.url, action.url).get().then(function(response){\n console.log(\"Execute action response\", response);\n var items = response.items;\n this.modelManager.mapResponseItemsToLocalModels(items);\n callback(items);\n }.bind(this))\n\n break;\n }\n\n case \"show\": {\n var win = window.open(action.url, '_blank');\n win.focus();\n callback();\n }\n\n case \"post\": {\n var params = {};\n\n if(action.all) {\n var items = this.modelManager.allItemsMatchingTypes(action.content_types);\n params.items = items.map(function(item){\n var params = this.outgoingParamsForItem(item, extension);\n return params;\n }.bind(this))\n\n } else {\n params.item = this.outgoingParamsForItem(item, extension);\n }\n\n this.performPost(action, extension, params, function(items){\n callback(items);\n });\n }\n\n default: {\n\n }\n }\n\n action.lastExecuted = new Date();\n }\n\n isRepeatActionEnabled(action) {\n return this.enabledRepeatActionUrls.includes(action.url);\n }\n\n disableRepeatAction(action, extension) {\n console.log(\"Disabling action\", action);\n\n _.pull(this.enabledRepeatActionUrls, action.url);\n this.modelManager.removeItemChangeObserver(action.url);\n\n console.assert(this.isRepeatActionEnabled(action) == false);\n }\n\n enableRepeatAction(action, extension) {\n // console.log(\"Enabling repeat action\", action);\n\n if(!_.find(this.enabledRepeatActionUrls, action.url)) {\n this.enabledRepeatActionUrls.push(action.url);\n localStorage.setItem(\"enabledRepeatActionUrls\", JSON.stringify(this.enabledRepeatActionUrls));\n }\n\n if(action.repeat_mode) {\n\n if(action.repeat_mode == \"watch\") {\n this.modelManager.addItemChangeObserver(action.url, action.content_types, function(changedItems){\n this.triggerWatchAction(action, extension, changedItems);\n }.bind(this))\n }\n\n if(action.repeat_mode == \"loop\") {\n // todo\n }\n\n }\n }\n\n queueAction(action, extension, delay, changedItems) {\n this.actionQueue = this.actionQueue || [];\n if(_.find(this.actionQueue, {url: action.url})) {\n return;\n }\n\n console.log(\"Successfully queued\", action, this.actionQueue.length);\n this.actionQueue.push(action);\n\n setTimeout(function () {\n console.log(\"Performing queued action\", action);\n this.triggerWatchAction(action, extension, changedItems);\n _.pull(this.actionQueue, action);\n }.bind(this), delay * 1000);\n }\n\n triggerWatchAction(action, extension, changedItems) {\n if(action.repeat_timeout > 0) {\n var lastExecuted = action.lastExecuted;\n var diffInSeconds = (new Date() - lastExecuted)/1000;\n if(diffInSeconds < action.repeat_timeout) {\n var delay = action.repeat_timeout - diffInSeconds;\n console.log(\"Delaying action by\", delay);\n this.queueAction(action, extension, delay, changedItems);\n return;\n }\n }\n\n console.log(\"Performing action immediately\", action);\n\n action.lastExecuted = new Date();\n\n if(action.verb == \"post\") {\n var params = {};\n params.items = changedItems.map(function(item){\n var params = this.outgoingParamsForItem(item, extension);\n return params;\n }.bind(this))\n this.performPost(action, extension, params, null);\n } else {\n // todo\n }\n }\n\n outgoingParamsForItem(item, extension) {\n return this.apiController.paramsForExtension(item, this.extensionUsesEncryptedData(extension));\n }\n\n performPost(action, extension, params, callback) {\n var request = this.Restangular.oneUrl(action.url, action.url);\n _.merge(request, params);\n\n request.post().then(function(response){\n // console.log(\"watch action response\", response);\n if(callback) {\n callback(response.plain());\n }\n })\n }\n\n}\n\nangular.module('app.frontend').service('extensionManager', ExtensionManager);\n;angular.module('app.frontend')\n .filter('appDate', function ($filter) {\n return function (input) {\n return input ? $filter('date')(new Date(input), 'MM/dd/yyyy', 'UTC') : '';\n };\n })\n .filter('appDateTime', function ($filter) {\n return function (input) {\n return input ? $filter('date')(new Date(input), 'MM/dd/yyyy h:mm a') : '';\n };\n });\n;angular.module('app.frontend')\n .service('markdownRenderer', function ($sce) {\n\n marked.setOptions({\n breaks: true,\n sanitize: true\n });\n\n this.renderedContentForText = function(text) {\n if(!text || text.length == 0) {\n return \"\";\n }\n return marked(text);\n }\n\n this.renderHtml = function(html_code) {\n return $sce.trustAsHtml(html_code);\n };\n\n\n });\n;class ModelManager {\n\n constructor() {\n this.notes = [];\n this.tags = [];\n this.itemSyncObservers = [];\n this.itemChangeObservers = [];\n this.items = [];\n this.extensions = [];\n }\n\n allItemsMatchingTypes(contentTypes) {\n return this.items.filter(function(item){\n return (contentTypes.includes(item.content_type) || contentTypes.includes(\"*\")) && !item.dummy;\n })\n }\n\n findItem(itemId) {\n return _.find(this.items, {uuid: itemId});\n }\n\n mapResponseItemsToLocalModels(items) {\n return this.mapResponseItemsToLocalModelsOmittingFields(items, null);\n }\n\n mapResponseItemsToLocalModelsOmittingFields(items, omitFields) {\n var models = []\n for (var json_obj of items) {\n json_obj = _.omit(json_obj, omitFields || [])\n var item = this.findItem(json_obj[\"uuid\"]);\n if(json_obj[\"deleted\"] == true) {\n if(item) {\n this.removeItemLocally(item)\n }\n continue;\n }\n\n _.omit(json_obj, omitFields);\n\n if(!item) {\n item = this.createItem(json_obj);\n } else {\n item.updateFromJSON(json_obj);\n }\n\n this.addItem(item);\n\n if(json_obj.content) {\n this.resolveReferencesForItem(item)\n }\n\n models.push(item)\n }\n\n this.notifySyncObserversOfModels(models);\n\n this.sortItems();\n return models;\n }\n\n notifySyncObserversOfModels(models) {\n for(var observer of this.itemSyncObservers) {\n var relevantItems = models.filter(function(item){return item.content_type == observer.type});\n if(relevantItems.length > 0) {\n observer.callback(relevantItems);\n }\n }\n }\n\n notifyItemChangeObserversOfModels(models) {\n for(var observer of this.itemChangeObservers) {\n var relevantItems = models.filter(function(item){\n return observer.content_types.includes(item.content_type) || observer.content_types.includes(\"*\");\n });\n\n if(relevantItems.length > 0) {\n observer.callback(relevantItems);\n }\n }\n }\n\n createItem(json_obj) {\n var item;\n if(json_obj.content_type == \"Note\") {\n item = new Note(json_obj);\n } else if(json_obj.content_type == \"Tag\") {\n item = new Tag(json_obj);\n } else if(json_obj.content_type == \"Extension\") {\n item = new Extension(json_obj);\n } else {\n item = new Item(json_obj);\n }\n\n item.addObserver(this, function(changedItem){\n this.notifyItemChangeObserversOfModels([changedItem]);\n }.bind(this));\n\n return item;\n }\n\n addItems(items) {\n this.items = _.uniq(this.items.concat(items));\n\n items.forEach(function(item){\n if(item.content_type == \"Tag\") {\n if(!_.find(this.tags, {uuid: item.uuid})) {\n this.tags.unshift(item);\n }\n } else if(item.content_type == \"Note\") {\n if(!_.find(this.notes, {uuid: item.uuid})) {\n this.notes.unshift(item);\n }\n } else if(item.content_type == \"Extension\") {\n if(!_.find(this.extensions, {uuid: item.uuid})) {\n this.extensions.unshift(item);\n }\n }\n }.bind(this))\n }\n\n addItem(item) {\n this.addItems([item])\n }\n\n itemsForContentType(contentType) {\n return this.items.filter(function(item){\n return item.content_type == contentType;\n });\n }\n\n resolveReferencesForItem(item) {\n var contentObject = item.contentObject;\n if(!contentObject.references) {\n return;\n }\n\n for(var reference of contentObject.references) {\n var referencedItem = this.findItem(reference.uuid);\n if(referencedItem) {\n item.addItemAsRelationship(referencedItem);\n referencedItem.addItemAsRelationship(item);\n } else {\n // console.log(\"Unable to find item:\", reference.uuid);\n }\n }\n }\n\n sortItems() {\n Item.sortItemsByDate(this.notes);\n\n this.tags.forEach(function(tag){\n Item.sortItemsByDate(tag.notes);\n })\n }\n\n addItemSyncObserver(id, type, callback) {\n this.itemSyncObservers.push({id: id, type: type, callback: callback});\n }\n\n removeItemSyncObserver(id) {\n _.remove(this.itemSyncObservers, _.find(this.itemSyncObservers, {id: id}));\n }\n\n addItemChangeObserver(id, content_types, callback) {\n this.itemChangeObservers.push({id: id, content_types: content_types, callback: callback});\n }\n\n removeItemChangeObserver(id) {\n _.remove(this.itemChangeObservers, _.find(this.itemChangeObservers, {id: id}));\n }\n\n get filteredNotes() {\n return Note.filterDummyNotes(this.notes);\n }\n\n getDirtyItems() {\n return this.items.filter(function(item){return item.dirty == true && !item.dummy})\n }\n\n clearDirtyItems() {\n this.getDirtyItems().forEach(function(item){\n item.setDirty(false);\n })\n }\n\n setItemToBeDeleted(item) {\n item.deleted = true;\n if(!item.dummy) {\n item.setDirty(true);\n }\n item.removeAllRelationships();\n }\n\n removeItemLocally(item) {\n _.pull(this.items, item);\n\n if(item.content_type == \"Tag\") {\n _.pull(this.tags, item);\n } else if(item.content_type == \"Note\") {\n _.pull(this.notes, item);\n } else if(item.content_type == \"Extension\") {\n _.pull(this.extensions, item);\n }\n }\n\n /*\n Relationships\n */\n\n createRelationshipBetweenItems(itemOne, itemTwo) {\n itemOne.addItemAsRelationship(itemTwo);\n itemTwo.addItemAsRelationship(itemOne);\n\n itemOne.setDirty(true);\n itemTwo.setDirty(true);\n }\n\n removeRelationshipBetweenItems(itemOne, itemTwo) {\n itemOne.removeItemAsRelationship(itemTwo);\n itemTwo.removeItemAsRelationship(itemOne);\n\n itemOne.setDirty(true);\n itemTwo.setDirty(true);\n }\n}\n\nangular.module('app.frontend').service('modelManager', ModelManager);\n;angular.module('app.frontend')\n .service('serverSideValidation', function ($sce) {\n // Show validation errors in form.\n this.showErrors = function (formErrors, form) {\n angular.forEach(formErrors, function (errors, key) {\n if (typeof form[key] !== 'undefined') {\n form[key].$setDirty();\n form[key].$setValidity('server', false);\n form[key].$error.server = $sce.trustAsHtml(errors.join(', '));\n }\n });\n };\n\n // Get validation errors from server response and show them in form.\n this.parseErrors = function (response, form) {\n if (response.status === 422) {\n this.showErrors(response.data, form);\n }\n };\n});\n"]} \ No newline at end of file +{"version":3,"sources":["app.js"],"names":["SNCrypto","CryptoJS","lib","WordArray","random","toString","crypto","window","msCrypto","buf","Uint32Array","getRandomValues","idx","replace","c","r","v","d","Date","getTime","performance","now","uuid","Math","floor","encrypted_content","key","keyData","enc","Hex","parse","ivData","decrypted","AES","decrypt","iv","mode","CBC","padding","pad","Pkcs7","Utf8","text","encrypted","encrypt","salt","Neeto","generateRandomKey","passphrase","PBKDF2","keySize","substring","length","Base64","base64String","SHA256","SHA1","message","messageData","HmacSHA256","email","password","pw_salt","pw_func","pw_alg","pw_cost","pw_key_size","callback","generateSymmetricKeyPair","keys","pw","mk","defaults","defaultPasswordGenerationParams","pw_nonce","sha1","_","merge","SNCryptoJS","algMapping","algo","SHA512","fnMapping","alg","kdf","output","hasher","iterations","outputLength","firstHalf","slice","secondHalf","subtleCrypto","subtle","SNCryptoWeb","stretchPassword","webCryptoImportKey","console","log","webCryptoDeriveBits","bind","input","importKey","stringToArrayBuffer","name","toUpperCase","then","catch","err","error","deriveBits","hash","bits","arrayBufferToHexString","Uint8Array","string","encoder","TextEncoder","encode","arrayBuffer","byteArray","hexString","nextHexByte","i","byteLength","angular","module","config","RestangularProvider","apiControllerProvider","setDefaultHeaders","url","defaultServerURL","setBaseUrl","setFullRequestInterceptor","element","operation","route","headers","params","httpConfig","token","localStorage","getItem","extend","Authorization","$qProvider","$stateProvider","$urlRouterProvider","$locationProvider","state","abstract","parent","views","templateUrl","controller","otherwise","$injector","$location","get","go","path","html5Mode","BaseCtrl","$rootScope","modelManager","directive","$timeout","restrict","scope","save","remove","note","user","controllerAs","bindToController","link","elem","attrs","ctrl","handler","event","ctrlKey","metaKey","String","fromCharCode","which","toLowerCase","preventDefault","saveNote","clickedEditNote","toggleMarkdown","toggleFullScreen","addEventListener","$on","removeEventListener","$watch","oldNote","setNote","$sce","apiController","markdownRenderer","editorMode","safeText","dummy","focusTitle","hasChanges","onPreviewDoubleClick","focusEditor","delay","setTimeout","document","getElementById","focus","clickedTextArea","showMenu","renderedContent","renderHtml","renderedContentForText","statusTimeout","$event","success","clearDraft","cancel","noteStatus","saveTitle","target","blur","saveTimeout","changesMade","saveDraftToDisk","contentChanged","nameChanged","onNameFocus","editingName","onContentFocus","showSampler","$broadcast","editingUrl","onNameBlur","fullscreen","selectedMenuItem","editUrlPressed","publicUrlForNote","presentation_name","base","saveUrl","original","setDirty","sync","response","alert","shareNote","openInNewTab","a","createElement","href","click","shareItem","unshareNote","unshareItem","presentationURL","clickedMenu","locked","deleteNote","extensionManager","logout","syncUpdated","$state","serverSideValidation","changePasswordPressed","showNewPasswordForm","accountMenuPressed","serverData","getServer","showAccountMenu","showFaq","showExtensionsMenu","toggleExtensions","toggleExtensionForm","newExtensionData","showNewExtensionForm","submitNewExtensionForm","addExtension","selectedAction","action","extension","running","executeAction","deleteExtension","confirm","reloadExtensionsPressed","refreshExtensionsFromServer","changeServer","setServer","signOutPressed","signout","location","reload","submitPasswordChange","passwordChangeData","status","data","password_confirmation","changePassword","current_password","new_password","hasLocalData","filteredNotes","mergeLocalChanged","shouldMerge","refreshData","isRefreshing","lastSyncDate","loginSubmitPressed","loginData","login","user_password","onAuthSuccess","submitRegistrationForm","register","encryptionStatusForNotes","allNotes","countEncrypted","forEach","encryptionEnabled","archiveEncryptionFormat","downloadDataArchive","setAttribute","itemsDataFile","importFileSelected","files","file","reader","FileReader","onload","e","importJSONData","result","readAsText","showLogin","showRegistration","$scope","bodyClass","onUserSet","setUser","defaultUser","allTag","Tag","all","title","tags","notes","setInterval","getCurrentUser","User","loadLocalItemsAndUser","updateAllTag","tagsWillMakeSelection","tag","tagsSelectionMade","selectedTag","selectedNote","removeItemLocally","tagsAddNew","addItem","tagsSave","tagsUpdateNoteTag","noteCopy","newTag","oldTag","originalNote","find","createRelationshipBetweenItems","notesRemoveTag","validNotes","Note","filterDummyNotes","setItemToBeDeleted","notesSelectionMade","notesAddNew","headerLogout","addNew","selectionMade","removeTag","tagDidChange","isFirstLoad","noteFilter","visible","selectFirstNote","draft","getDraft","selectNote","createNewNote","selectedTagDelete","selectedTagShare","selectedTagUnshare","createNew","visibleNotes","filter","newNote","createItem","content_type","filterNotes","includes","filterTextChanged","willSelect","updateNoteTag","newTags","setTags","setAllTag","initialLoad","selectTag","clickedAddNewTag","editingTag","originalTagName","onTagTitleFocus","tagTitleDidChange","saveTag","savedTag","noteCount","handleDrop","Restangular","formData","saveUsername","setUsername","username","closeThisDialog","Item","json_obj","updateFromJSON","observers","generateUUID","json","created_at","updated_at","content","mapContentToLocalProperties","contentObject","dirty","notifyObserversOfChange","observer","push","contentObj","structureParams","references","referenceParams","item","omit","enc_item_key","presentation_url","JSON","items","sort","b","Action","lastExecuted","permissions","permission","charAt","content_types","contentType","verb","encryptionMode","accepts_encrypted","accepts_decrypted","Extension","actions","context","map","externalResponseItem","pull","hasOnePublicTag","isPublic","filtered","unshift","provider","domainName","domain_comps","hostname","split","domain","$get","ngDialog","ApiController","refresh","setItem","isUserSignedIn","retrieveMk","getAuthParamsForEmail","request","one","plain","authParams","computeEncryptionKeysForUser","setMk","post","generateInitialEncryptionKeysForUser","currentKeys","newKeys","_performPasswordChange","reencryptAllItemsAndSave","current_keys","new_keys","patch","verifyEncryptionStatusOfAllItems","allItems","filteredItems","itemsNeedingUpdate","isEncrypted","saveBatchItems","syncWithOptions","options","writeItemsToLocalStorage","responseItems","clearDirtyItems","dirtyItems","getDirtyItems","createRequestParamsForItem","additionalFields","syncToken","sync_token","handleItemsResponse","retrieved_items","omitFields","saved_items","undefined","decryptItems","mapResponseItemsToLocalModelsOmittingFields","paramsForItem","paramsForExportFile","paramsForExtension","forExportFile","itemCopy","cloneDeep","assert","deleted","encryptSingleItem","auth_hash","createContentJSONFromProperties","base64","stringify","pick","shareFn","needsUpdate","concat","referencesAffectedBySharingChange","needingUpdate","open","template","resolve","className","disableAnimation","jsonString","mapResponseItemsToLocalModels","textFile","makeTextFile","Blob","type","URL","revokeObjectURL","createObjectURL","allItemsMatchingTypes","mergeLocalDataRemotely","tag_id","tag_name","removeItem","staticifyObject","object","writeToLocalStorage","value","toJson","sortItemsByDate","draftString","jsonObj","masterKey","item_key","decryptText","generateRandomEncryptionKey","encryptText","ek","firstHalfOfKey","ak","secondHalfOfKey","encryptedContent","authHash","hmac256","local_encryption_scheme","decryptSingleItem","isString","base64Decode","newMasterKey","oldMasterKey","shouldFocus","$element","ContextualExtensionsMenu","extensions","extensionsInContextOfItem","accessTypeForExtension","extensionUsesEncryptedData","el","draggable","dataTransfer","effectAllowed","setData","classList","add","drop","bin","dropEffect","counter","stopPropagation","binId","getData","$apply","fn","on","require","modelCtrl","lowercase","inputValue","lowercased","$setViewValue","$render","$parsers","ngModel","$window","getSelection","setSelectionRange","linkFunction","$attrs","timer","initialDelay","getTypeDelay","typeDelay","eraseDelay","blinkDelay","getAnimationDelay","cursor","blinkCursor","currentText","textArray","auxStyle","Array","start","typewrite","updateIt","charIndex","arrIndex","updateValue","iterationCallback","cleanAndRestart","iterationDelay","callbackFn","blinkIt","prebeginFn","parseInt","prop","val","html","newVal","oldVal","ExtensionManager","enabledRepeatActionUrls","decryptedExtensions","addItemSyncObserver","ext","enableRepeatAction","actionsWithContextForItem","retrieveExtensionFromServer","repeat_mode","isRepeatActionEnabled","disableRepeatAction","oneUrl","handleExtensionLoadExternalResponseItem","updateFromExternalResponseItem","actionWithURL","win","outgoingParamsForItem","performPost","removeItemChangeObserver","addItemChangeObserver","changedItems","triggerWatchAction","actionQueue","repeat_timeout","diffInSeconds","queueAction","service","$filter","marked","setOptions","breaks","sanitize","html_code","trustAsHtml","ModelManager","itemSyncObservers","itemChangeObservers","_extensions","contentTypes","itemId","models","findItem","resolveReferencesForItem","notifySyncObserversOfModels","sortItems","relevantItems","addObserver","changedItem","notifyItemChangeObserversOfModels","uniq","addItems","reference","referencedItem","addItemAsRelationship","id","removeAllRelationships","itemOne","itemTwo","removeItemAsRelationship","showErrors","formErrors","form","errors","$setDirty","$setValidity","$error","server","join","parseErrors"],"mappings":"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","file":"transpiled.js","sourcesContent":["class SNCrypto {\n\n generateRandomKey() {\n return CryptoJS.lib.WordArray.random(512/8).toString();\n }\n\n generateUUID() {\n var crypto = window.crypto || window.msCrypto;\n if(crypto) {\n var buf = new Uint32Array(4);\n crypto.getRandomValues(buf);\n var idx = -1;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n idx++;\n var r = (buf[idx>>3] >> ((idx%8)*4))&15;\n var v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n } else {\n var d = new Date().getTime();\n if(window.performance && typeof window.performance.now === \"function\"){\n d += performance.now(); //use high-precision timer if available\n }\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random()*16)%16 | 0;\n d = Math.floor(d/16);\n return (c=='x' ? r : (r&0x3|0x8)).toString(16);\n });\n return uuid;\n }\n }\n\n decryptText(encrypted_content, key) {\n var keyData = CryptoJS.enc.Hex.parse(key);\n var ivData = CryptoJS.enc.Hex.parse(\"\");\n var decrypted = CryptoJS.AES.decrypt(encrypted_content, keyData, { iv: ivData, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });\n return decrypted.toString(CryptoJS.enc.Utf8);\n }\n\n encryptText(text, key) {\n var keyData = CryptoJS.enc.Hex.parse(key);\n var ivData = CryptoJS.enc.Hex.parse(\"\");\n var encrypted = CryptoJS.AES.encrypt(text, keyData, { iv: ivData, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });\n return encrypted.toString();\n }\n\n generateRandomEncryptionKey() {\n var salt = Neeto.crypto.generateRandomKey();\n var passphrase = Neeto.crypto.generateRandomKey();\n return CryptoJS.PBKDF2(passphrase, salt, { keySize: 512/32 }).toString();\n }\n\n firstHalfOfKey(key) {\n return key.substring(0, key.length/2);\n }\n\n secondHalfOfKey(key) {\n return key.substring(key.length/2, key.length);\n }\n\n base64(text) {\n return CryptoJS.enc.Utf8.parse(text).toString(CryptoJS.enc.Base64)\n }\n\n base64Decode(base64String) {\n return CryptoJS.enc.Base64.parse(base64String).toString(CryptoJS.enc.Utf8)\n }\n\n sha256(text) {\n return CryptoJS.SHA256(text).toString();\n }\n\n sha1(text) {\n return CryptoJS.SHA1(text).toString();\n }\n\n hmac256(message, key) {\n var keyData = CryptoJS.enc.Hex.parse(key);\n var messageData = CryptoJS.enc.Utf8.parse(message);\n return CryptoJS.HmacSHA256(messageData, keyData).toString();\n }\n\n computeEncryptionKeysForUser({email, password, pw_salt, pw_func, pw_alg, pw_cost, pw_key_size} = {}, callback) {\n this.generateSymmetricKeyPair({password: password, pw_salt: pw_salt,\n pw_func: pw_func, pw_alg: pw_alg, pw_cost: pw_cost, pw_key_size: pw_key_size}, function(keys){\n var pw = keys[0];\n var mk = keys[1];\n\n callback({pw: pw, mk: mk});\n });\n }\n\n generateInitialEncryptionKeysForUser({email, password} = {}, callback) {\n var defaults = this.defaultPasswordGenerationParams();\n var {pw_func, pw_alg, pw_key_size, pw_cost} = defaults;\n var pw_nonce = this.generateRandomKey();\n var pw_salt = this.sha1(email + \"SN\" + pw_nonce);\n this.generateSymmetricKeyPair(_.merge({email: email, password: password, pw_salt: pw_salt}, defaults), function(keys){\n var pw = keys[0];\n var mk = keys[1];\n\n callback(_.merge({pw: pw, mk: mk, pw_nonce: pw_nonce}, defaults));\n });\n }\n}\n\nexport { SNCrypto }\n;class SNCryptoJS extends SNCrypto {\n\n /** Generates two deterministic keys based on one input */\n generateSymmetricKeyPair({password, pw_salt, pw_func, pw_alg, pw_cost, pw_key_size} = {}, callback) {\n var algMapping = {\n \"sha256\" : CryptoJS.algo.SHA256,\n \"sha512\" : CryptoJS.algo.SHA512\n }\n var fnMapping = {\n \"pbkdf2\" : CryptoJS.PBKDF2\n }\n\n var alg = algMapping[pw_alg];\n var kdf = fnMapping[pw_func];\n var output = kdf(password, pw_salt, { keySize: pw_key_size/32, hasher: alg, iterations: pw_cost }).toString();\n\n var outputLength = output.length;\n var firstHalf = output.slice(0, outputLength/2);\n var secondHalf = output.slice(outputLength/2, outputLength);\n callback([firstHalf, secondHalf])\n }\n\n defaultPasswordGenerationParams() {\n return {pw_func: \"pbkdf2\", pw_alg: \"sha512\", pw_key_size: 512, pw_cost: 3000};\n }\n }\n\n\nexport { SNCryptoJS }\n;var subtleCrypto = window.crypto.subtle;\n\nclass SNCryptoWeb extends SNCrypto {\n\n /**\n Overrides\n */\n defaultPasswordGenerationParams() {\n return {pw_func: \"pbkdf2\", pw_alg: \"sha512\", pw_key_size: 512, pw_cost: 5000};\n }\n\n /** Generates two deterministic keys based on one input */\n generateSymmetricKeyPair({password, pw_salt, pw_func, pw_alg, pw_cost, pw_key_size} = {}, callback) {\n this.stretchPassword({password: password, pw_func: pw_func, pw_alg: pw_alg, pw_salt: pw_salt, pw_cost: pw_cost, pw_key_size: pw_key_size}, function(output){\n var outputLength = output.length;\n var firstHalf = output.slice(0, outputLength/2);\n var secondHalf = output.slice(outputLength/2, outputLength);\n callback([firstHalf, secondHalf]);\n })\n }\n\n /**\n Internal\n */\n\n stretchPassword({password, pw_salt, pw_cost, pw_func, pw_alg, pw_key_size} = {}, callback) {\n\n this.webCryptoImportKey(password, pw_func, function(key){\n\n if(!key) {\n console.log(\"Key is null, unable to continue\");\n callback(null);\n return;\n }\n\n this.webCryptoDeriveBits({key: key, pw_func: pw_func, pw_alg: pw_alg, pw_salt: pw_salt, pw_cost: pw_cost, pw_key_size: pw_key_size}, function(key){\n if(!key) {\n callback(null);\n return;\n }\n\n callback(key);\n\n }.bind(this))\n }.bind(this))\n }\n\n webCryptoImportKey(input, pw_func, callback) {\n subtleCrypto.importKey(\n \"raw\",\n this.stringToArrayBuffer(input),\n {name: pw_func.toUpperCase()},\n false,\n [\"deriveBits\"]\n )\n .then(function(key){\n callback(key);\n })\n .catch(function(err){\n console.error(err);\n callback(null);\n });\n }\n\n webCryptoDeriveBits({key, pw_func, pw_alg, pw_salt, pw_cost, pw_key_size} = {}, callback) {\n var algMapping = {\n \"sha256\" : \"SHA-256\",\n \"sha512\" : \"SHA-512\",\n }\n var alg = algMapping[pw_alg];\n subtleCrypto.deriveBits(\n {\n \"name\": pw_func.toUpperCase(),\n salt: this.stringToArrayBuffer(pw_salt),\n iterations: pw_cost,\n hash: {name: alg},\n },\n key,\n pw_key_size\n )\n .then(function(bits){\n var key = this.arrayBufferToHexString(new Uint8Array(bits));\n callback(key);\n }.bind(this))\n .catch(function(err){\n console.error(err);\n callback(null);\n });\n }\n\n stringToArrayBuffer(string) {\n var encoder = new TextEncoder(\"utf-8\");\n return encoder.encode(string);\n }\n\n arrayBufferToHexString(arrayBuffer) {\n var byteArray = new Uint8Array(arrayBuffer);\n var hexString = \"\";\n var nextHexByte;\n\n for (var i=0; i 0;\n }\n\n this.mergeLocalChanged = function() {\n if(!this.user.shouldMerge) {\n if(!confirm(\"Unchecking this option means any locally stored tags and notes you have now will be deleted. Are you sure you want to continue?\")) {\n this.user.shouldMerge = true;\n }\n }\n }\n\n this.refreshData = function() {\n this.isRefreshing = true;\n apiController.sync(function(response){\n $timeout(function(){\n this.isRefreshing = false;\n }.bind(this), 200)\n if(response && response.error) {\n alert(\"There was an error syncing. Please try again. If all else fails, log out and log back in.\");\n } else {\n this.syncUpdated();\n }\n }.bind(this));\n }\n\n this.syncUpdated = function() {\n this.lastSyncDate = new Date();\n }\n\n this.loginSubmitPressed = function() {\n this.loginData.status = \"Generating Login Keys...\";\n $timeout(function(){\n apiController.login(this.loginData.email, this.loginData.user_password, function(response){\n if(!response || response.error) {\n var error = response ? response.error : {message: \"An unknown error occured.\"}\n this.loginData.status = null;\n alert(error.message);\n } else {\n this.onAuthSuccess(response.user);\n }\n }.bind(this));\n }.bind(this))\n }\n\n this.submitRegistrationForm = function() {\n this.loginData.status = \"Generating Account Keys...\";\n\n $timeout(function(){\n apiController.register(this.loginData.email, this.loginData.user_password, function(response){\n if(!response || response.error) {\n var error = response ? response.error : {message: \"An unknown error occured.\"}\n this.loginData.status = null;\n alert(error.message);\n } else {\n this.onAuthSuccess(response.user);\n }\n }.bind(this));\n }.bind(this))\n }\n\n this.encryptionStatusForNotes = function() {\n var allNotes = modelManager.filteredNotes;\n var countEncrypted = 0;\n allNotes.forEach(function(note){\n if(note.encryptionEnabled()) {\n countEncrypted++;\n }\n }.bind(this))\n\n return countEncrypted + \"/\" + allNotes.length + \" notes encrypted\";\n }\n\n this.archiveEncryptionFormat = {encrypted: true};\n\n this.downloadDataArchive = function() {\n var link = document.createElement('a');\n link.setAttribute('download', 'notes.json');\n link.href = apiController.itemsDataFile(this.archiveEncryptionFormat.encrypted);\n link.click();\n }\n\n this.importFileSelected = function(files) {\n var file = files[0];\n var reader = new FileReader();\n reader.onload = function(e) {\n apiController.importJSONData(e.target.result, function(success, response){\n console.log(\"import response\", success, response);\n if(success) {\n // window.location.reload();\n } else {\n alert(\"There was an error importing your data. Please try again.\");\n }\n })\n }\n reader.readAsText(file);\n }\n\n this.onAuthSuccess = function(user) {\n this.user.uuid = user.uuid;\n\n // if(this.user.shouldMerge && this.hasLocalData()) {\n // apiController.mergeLocalDataRemotely(this.user, function(){\n // window.location.reload();\n // });\n // } else {\n window.location.reload();\n // }\n\n this.showLogin = false;\n this.showRegistration = false;\n }\n\n });\n;angular.module('app.frontend')\n.controller('HomeCtrl', function ($scope, $rootScope, $timeout, apiController, modelManager) {\n $rootScope.bodyClass = \"app-body-class\";\n\n var onUserSet = function() {\n apiController.setUser($scope.defaultUser);\n $scope.allTag = new Tag({all: true});\n $scope.allTag.title = \"All\";\n $scope.tags = modelManager.tags;\n $scope.allTag.notes = modelManager.notes;\n\n apiController.sync(null);\n // refresh every 30s\n setInterval(function () {\n apiController.sync(null);\n }, 30000);\n }\n\n apiController.getCurrentUser(function(user){\n if(user) {\n $scope.defaultUser = user;\n $rootScope.title = \"Notes — Standard Notes\";\n onUserSet();\n } else {\n $scope.defaultUser = new User(apiController.loadLocalItemsAndUser());\n onUserSet();\n }\n });\n\n /*\n Tags Ctrl Callbacks\n */\n\n $scope.updateAllTag = function() {\n // $scope.allTag.notes = modelManager.notes;\n }\n\n $scope.tagsWillMakeSelection = function(tag) {\n if(tag.all) {\n $scope.updateAllTag();\n }\n }\n\n $scope.tagsSelectionMade = function(tag) {\n $scope.selectedTag = tag;\n\n if($scope.selectedNote && $scope.selectedNote.dummy) {\n modelManager.removeItemLocally($scope.selectedNote);\n }\n }\n\n $scope.tagsAddNew = function(tag) {\n modelManager.addItem(tag);\n }\n\n $scope.tagsSave = function(tag, callback) {\n tag.setDirty(true);\n apiController.sync(callback);\n }\n\n /*\n Called to update the tag of a note after drag and drop change\n The note object is a copy of the original\n */\n $scope.tagsUpdateNoteTag = function(noteCopy, newTag, oldTag) {\n\n var originalNote = _.find(modelManager.notes, {uuid: noteCopy.uuid});\n if(!newTag.all) {\n modelManager.createRelationshipBetweenItems(newTag, originalNote);\n }\n\n apiController.sync(function(){});\n }\n\n /*\n Notes Ctrl Callbacks\n */\n\n $scope.notesRemoveTag = function(tag) {\n var validNotes = Note.filterDummyNotes(tag.notes);\n if(validNotes == 0) {\n modelManager.setItemToBeDeleted(tag);\n // if no more notes, delete tag\n apiController.sync(function(){\n // force scope tags to update on sub directives\n $scope.tags = [];\n $timeout(function(){\n $scope.tags = modelManager.tags;\n })\n });\n } else {\n alert(\"To delete this tag, remove all its notes first.\");\n }\n }\n\n $scope.notesSelectionMade = function(note) {\n $scope.selectedNote = note;\n }\n\n $scope.notesAddNew = function(note) {\n modelManager.addItem(note);\n\n if(!$scope.selectedTag.all) {\n modelManager.createRelationshipBetweenItems($scope.selectedTag, note);\n $scope.updateAllTag();\n }\n }\n\n /*\n Shared Callbacks\n */\n\n $scope.saveNote = function(note, callback) {\n note.setDirty(true);\n\n apiController.sync(function(response){\n if(response && response.error) {\n alert(\"There was an error saving your note. Please try again.\");\n callback(false);\n } else {\n note.hasChanges = false;\n if(callback) {\n callback(true);\n }\n }\n })\n }\n\n $scope.deleteNote = function(note) {\n\n modelManager.setItemToBeDeleted(note);\n\n if(note == $scope.selectedNote) {\n $scope.selectedNote = null;\n }\n\n if(note.dummy) {\n modelManager.removeItemLocally(note);\n return;\n }\n\n apiController.sync(null);\n }\n\n /*\n Header Ctrl Callbacks\n */\n\n $scope.headerLogout = function() {\n $scope.defaultUser = apiController.loadLocalItemsAndUser();\n $scope.tags = $scope.defaultUser.tags;\n }\n\n\n});\n;angular.module('app.frontend')\n .directive(\"notesSection\", function(){\n return {\n scope: {\n addNew: \"&\",\n selectionMade: \"&\",\n remove: \"&\",\n tag: \"=\",\n user: \"=\",\n removeTag: \"&\"\n },\n\n templateUrl: 'frontend/notes.html',\n replace: true,\n controller: 'NotesCtrl',\n controllerAs: 'ctrl',\n bindToController: true,\n\n link:function(scope, elem, attrs, ctrl) {\n scope.$watch('ctrl.tag', function(tag, oldTag){\n if(tag) {\n ctrl.tagDidChange(tag, oldTag);\n }\n });\n }\n }\n })\n .controller('NotesCtrl', function (apiController, $timeout, $rootScope, modelManager) {\n\n $rootScope.$on(\"editorFocused\", function(){\n this.showMenu = false;\n }.bind(this))\n\n var isFirstLoad = true;\n\n this.tagDidChange = function(tag, oldTag) {\n this.showMenu = false;\n\n if(this.selectedNote && this.selectedNote.dummy) {\n _.remove(oldTag.notes, this.selectedNote);\n }\n\n this.noteFilter.text = \"\";\n\n tag.notes.forEach(function(note){\n note.visible = true;\n })\n this.selectFirstNote(false);\n\n if(isFirstLoad) {\n $timeout(function(){\n var draft = apiController.getDraft();\n if(draft) {\n var note = draft;\n this.selectNote(note);\n } else {\n this.createNewNote();\n isFirstLoad = false;\n }\n }.bind(this))\n } else if(tag.notes.length == 0) {\n this.createNewNote();\n }\n }\n\n this.selectedTagDelete = function() {\n this.showMenu = false;\n this.removeTag()(this.tag);\n }\n\n this.selectedTagShare = function() {\n this.showMenu = false;\n\n if(!this.user.uuid) {\n alert(\"You must be signed in to share a tag.\");\n return;\n }\n\n if(this.tag.all) {\n alert(\"You cannot share the 'All' tag.\");\n return;\n }\n\n apiController.shareItem(this.tag, function(response){})\n }\n\n this.selectedTagUnshare = function() {\n this.showMenu = false;\n apiController.unshareItem(this.tag, function(response){\n\n })\n }\n\n this.selectFirstNote = function(createNew) {\n var visibleNotes = this.tag.notes.filter(function(note){\n return note.visible;\n });\n\n if(visibleNotes.length > 0) {\n this.selectNote(visibleNotes[0]);\n } else if(createNew) {\n this.createNewNote();\n }\n }\n\n this.selectNote = function(note) {\n this.selectedNote = note;\n this.selectionMade()(note);\n }\n\n this.createNewNote = function() {\n var title = \"New Note\" + (this.tag.notes ? (\" \" + (this.tag.notes.length + 1)) : \"\");\n this.newNote = modelManager.createItem({content_type: \"Note\", dummy: true, text: \"\"});\n this.newNote.title = title;\n this.selectNote(this.newNote);\n this.addNew()(this.newNote);\n }\n\n this.noteFilter = {text : ''};\n\n this.filterNotes = function(note) {\n if(this.noteFilter.text.length == 0) {\n note.visible = true;\n } else {\n note.visible = note.title.toLowerCase().includes(this.noteFilter.text) || note.text.toLowerCase().includes(this.noteFilter.text);\n }\n return note.visible;\n }.bind(this)\n\n this.filterTextChanged = function() {\n $timeout(function(){\n if(!this.selectedNote.visible) {\n this.selectFirstNote(false);\n }\n }.bind(this), 100)\n }\n });\n;angular.module('app.frontend')\n .directive(\"tagsSection\", function(){\n return {\n restrict: 'E',\n scope: {\n addNew: \"&\",\n selectionMade: \"&\",\n willSelect: \"&\",\n save: \"&\",\n tags: \"=\",\n allTag: \"=\",\n user: \"=\",\n updateNoteTag: \"&\"\n },\n templateUrl: 'frontend/tags.html',\n replace: true,\n controller: 'TagsCtrl',\n controllerAs: 'ctrl',\n bindToController: true,\n\n link:function(scope, elem, attrs, ctrl) {\n scope.$watch('ctrl.tags', function(newTags){\n if(newTags) {\n ctrl.setTags(newTags);\n }\n });\n\n scope.$watch('ctrl.allTag', function(allTag){\n if(allTag) {\n ctrl.setAllTag(allTag);\n }\n });\n }\n }\n })\n .controller('TagsCtrl', function (modelManager) {\n\n var initialLoad = true;\n\n this.setAllTag = function(allTag) {\n this.selectTag(this.allTag);\n }\n\n this.setTags = function(tags) {\n if(initialLoad) {\n initialLoad = false;\n this.selectTag(this.allTag);\n } else {\n if(tags && tags.length > 0) {\n this.selectTag(tags[0]);\n }\n }\n }\n\n this.selectTag = function(tag) {\n this.willSelect()(tag);\n this.selectedTag = tag;\n this.selectionMade()(tag);\n }\n\n this.clickedAddNewTag = function() {\n if(this.editingTag) {\n return;\n }\n\n this.newTag = modelManager.createItem({content_type: \"Tag\"});\n this.selectedTag = this.newTag;\n this.editingTag = this.newTag;\n this.addNew()(this.newTag);\n }\n\n var originalTagName = \"\";\n this.onTagTitleFocus = function(tag) {\n originalTagName = tag.title;\n }\n\n this.tagTitleDidChange = function(tag) {\n this.editingTag = tag;\n }\n\n this.saveTag = function($event, tag) {\n this.editingTag = null;\n if(tag.title.length == 0) {\n tag.title = originalTagName;\n originalTagName = \"\";\n return;\n }\n\n $event.target.blur();\n if(!tag.title || tag.title.length == 0) {\n return;\n }\n\n this.save()(tag, function(savedTag){\n // _.merge(tag, savedTag);\n this.selectTag(tag);\n this.newTag = null;\n }.bind(this));\n }\n\n this.noteCount = function(tag) {\n var validNotes = Note.filterDummyNotes(tag.notes);\n return validNotes.length;\n }\n\n this.handleDrop = function(e, newTag, note) {\n this.updateNoteTag()(note, newTag, this.selectedTag);\n }.bind(this)\n\n\n });\n;angular.module('app.frontend')\n.controller('UsernameModalCtrl', function ($scope, apiController, Restangular, user, callback, $timeout) {\n $scope.formData = {};\n\n $scope.saveUsername = function() {\n apiController.setUsername(user, $scope.formData.username, function(response){\n var username = response.username;\n user.username = username;\n callback(username);\n $scope.closeThisDialog();\n })\n }\n});\n;class Item {\n\n constructor(json_obj) {\n\n this.updateFromJSON(json_obj);\n\n this.observers = [];\n\n if(!this.uuid) {\n this.uuid = Neeto.crypto.generateUUID();\n }\n }\n\n static sortItemsByDate(items) {\n items.sort(function(a,b){\n return new Date(b.created_at) - new Date(a.created_at);\n });\n }\n\n get contentObject() {\n if(!this.content) {\n return {};\n }\n\n if(this.content !== null && typeof this.content === 'object') {\n // this is the case when mapping localStorage content, in which case the content is already parsed\n return this.content;\n }\n\n return JSON.parse(this.content);\n }\n\n updateFromJSON(json) {\n _.merge(this, json);\n if(this.created_at) {\n this.created_at = new Date(this.created_at);\n this.updated_at = new Date(this.updated_at);\n } else {\n this.created_at = new Date();\n this.updated_at = new Date();\n }\n\n if(json.content) {\n this.mapContentToLocalProperties(this.contentObject);\n }\n }\n\n setDirty(dirty) {\n this.dirty = dirty;\n\n if(dirty) {\n this.notifyObserversOfChange();\n }\n }\n\n addObserver(observer, callback) {\n if(!_.find(this.observers, observer)) {\n this.observers.push({observer: observer, callback: callback});\n }\n }\n\n removeObserver(observer) {\n _.remove(this.observers, {observer: observer})\n }\n\n notifyObserversOfChange() {\n for(var observer of this.observers) {\n observer.callback(this);\n }\n }\n\n mapContentToLocalProperties(contentObj) {\n\n }\n\n createContentJSONFromProperties() {\n return this.structureParams();\n }\n\n referenceParams() {\n // must override\n }\n\n structureParams() {\n return {references: this.referenceParams()}\n }\n\n addItemAsRelationship(item) {\n // must override\n }\n\n removeItemAsRelationship(item) {\n // must override\n }\n\n removeAllRelationships() {\n // must override\n }\n\n mergeMetadataFromItem(item) {\n _.merge(this, _.omit(item, [\"content\"]));\n }\n\n referencesAffectedBySharingChange() {\n // should be overriden to determine which references should be decrypted/encrypted\n return null;\n }\n\n isPublic() {\n return this.presentation_name;\n }\n\n isEncrypted() {\n return this.encryptionEnabled() && this.content.substring(0, 3) === '001' ? true : false;\n }\n\n encryptionEnabled() {\n return this.enc_item_key;\n }\n\n presentationURL() {\n return this.presentation_url;\n }\n\n}\n;class Action {\n constructor(json) {\n _.merge(this, json);\n this.running = false; // in case running=true was synced with server since model is uploaded nondiscriminatory\n this.error = false;\n if(this.lastExecuted) {\n // is string\n this.lastExecuted = new Date(this.lastExecuted);\n }\n }\n\n get permissionsString() {\n if(!this.permissions) {\n return \"\";\n }\n var permission = this.permissions.charAt(0).toUpperCase() + this.permissions.slice(1); // capitalize first letter\n permission += \": \";\n for(var contentType of this.content_types) {\n if(contentType == \"*\") {\n permission += \"All items\";\n } else {\n permission += contentType;\n }\n\n permission += \" \";\n }\n\n return permission;\n }\n\n get encryptionModeString() {\n if(this.verb != \"post\") {\n return null;\n }\n var encryptionMode = \"This action accepts data \";\n if(this.accepts_encrypted && this.accepts_decrypted) {\n encryptionMode += \"encrypted or decrypted.\";\n } else {\n if(this.accepts_encrypted) {\n encryptionMode += \"encrypted.\";\n } else {\n encryptionMode += \"decrypted.\";\n }\n }\n return encryptionMode;\n }\n\n}\n\nclass Extension extends Item {\n constructor(json) {\n super(json);\n _.merge(this, json);\n\n this.encrypted = true;\n this.content_type = \"Extension\";\n }\n\n actionsInGlobalContext() {\n return this.actions.filter(function(action){\n return action.context == \"global\";\n })\n }\n\n actionsWithContextForItem(item) {\n return this.actions.filter(function(action){\n return action.context == item.content_type || action.context == \"Item\";\n })\n }\n\n mapContentToLocalProperties(contentObject) {\n super.mapContentToLocalProperties(contentObject)\n this.name = contentObject.name;\n this.url = contentObject.url;\n this.actions = contentObject.actions.map(function(action){\n return new Action(action);\n })\n }\n\n updateFromExternalResponseItem(externalResponseItem) {\n _.merge(this, externalResponseItem);\n this.actions = externalResponseItem.actions.map(function(action){\n return new Action(action);\n })\n }\n\n referenceParams() {\n return null;\n }\n\n structureParams() {\n var params = {\n name: this.name,\n url: this.url,\n actions: this.actions\n };\n\n _.merge(params, super.structureParams());\n return params;\n }\n\n}\n;class Note extends Item {\n\n constructor(json_obj) {\n super(json_obj);\n\n if(!this.tags) {\n this.tags = [];\n }\n }\n\n mapContentToLocalProperties(contentObject) {\n super.mapContentToLocalProperties(contentObject)\n this.title = contentObject.title;\n this.text = contentObject.text;\n }\n\n referenceParams() {\n var references = _.map(this.tags, function(tag){\n return {uuid: tag.uuid, content_type: tag.content_type};\n })\n\n return references;\n }\n\n structureParams() {\n var params = {\n title: this.title,\n text: this.text\n };\n\n _.merge(params, super.structureParams());\n return params;\n }\n\n addItemAsRelationship(item) {\n if(item.content_type == \"Tag\") {\n if(!_.find(this.tags, item)) {\n this.tags.push(item);\n }\n }\n super.addItemAsRelationship(item);\n }\n\n removeItemAsRelationship(item) {\n if(item.content_type == \"Tag\") {\n _.pull(this.tags, item);\n }\n super.removeItemAsRelationship(item);\n }\n\n removeAllRelationships() {\n this.tags.forEach(function(tag){\n _.pull(tag.notes, this);\n tag.setDirty(true);\n }.bind(this))\n this.tags = [];\n }\n\n static filterDummyNotes(notes) {\n var filtered = notes.filter(function(note){return note.dummy == false || note.dummy == null});\n return filtered;\n }\n\n referencesAffectedBySharingChange() {\n return super.referencesAffectedBySharingChange();\n }\n\n get hasOnePublicTag() {\n for (var tag of this.tags) {\n if(tag.isPublic()) {\n return true\n }\n }\n return false;\n }\n\n safeText() {\n return this.text || \"\";\n }\n\n safeTitle() {\n return this.title || \"\";\n }\n\n toJSON() {\n return {uuid: this.uuid}\n }\n\n isSharedIndividually() {\n return this.presentation_name;\n }\n\n isPublic() {\n return super.isPublic() || this.hasOnePublicTag;\n }\n\n get content_type() {\n return \"Note\";\n }\n}\n;class Tag extends Item {\n\n constructor(json_obj) {\n super(json_obj);\n\n if(!this.notes) {\n this.notes = [];\n }\n }\n\n mapContentToLocalProperties(contentObject) {\n super.mapContentToLocalProperties(contentObject)\n this.title = contentObject.title;\n }\n\n referenceParams() {\n var references = _.map(this.notes, function(note){\n return {uuid: note.uuid, content_type: note.content_type};\n })\n\n return references;\n }\n\n structureParams() {\n var params = {\n title: this.title\n };\n\n _.merge(params, super.structureParams());\n return params;\n }\n\n addItemAsRelationship(item) {\n if(item.content_type == \"Note\") {\n if(!_.find(this.notes, item)) {\n this.notes.unshift(item);\n }\n }\n super.addItemAsRelationship(item);\n }\n\n removeItemAsRelationship(item) {\n if(item.content_type == \"Note\") {\n _.pull(this.notes, item);\n }\n super.removeItemAsRelationship(item);\n }\n\n removeAllRelationships() {\n this.notes.forEach(function(note){\n _.pull(note.tags, this);\n note.setDirty(true);\n }.bind(this))\n\n this.notes = [];\n }\n\n get content_type() {\n return \"Tag\";\n }\n\n referencesAffectedBySharingChange() {\n return this.notes;\n }\n}\n;class User {\n constructor(json_obj) {\n _.merge(this, json_obj);\n }\n}\n;angular.module('app.frontend')\n .provider('apiController', function () {\n\n function domainName() {\n var domain_comps = location.hostname.split(\".\");\n var domain = domain_comps[domain_comps.length - 2] + \".\" + domain_comps[domain_comps.length - 1];\n return domain;\n }\n\n var url;\n\n this.defaultServerURL = function() {\n if(!url) {\n url = localStorage.getItem(\"server\");\n if(!url) {\n url = \"https://n3.standardnotes.org\";\n }\n }\n return url;\n }\n\n\n this.$get = function($rootScope, Restangular, modelManager, ngDialog) {\n return new ApiController($rootScope, Restangular, modelManager, ngDialog);\n }\n\n function ApiController($rootScope, Restangular, modelManager, ngDialog) {\n\n this.setUser = function(user) {\n this.user = user;\n }\n\n /*\n Config\n */\n\n this.getServer = function() {\n if(!url) {\n url = localStorage.getItem(\"server\");\n if(!url) {\n url = \"https://n3.standardnotes.org\";\n this.setServer(url);\n }\n }\n return url;\n }\n\n this.setServer = function(url, refresh) {\n localStorage.setItem(\"server\", url);\n if(refresh) {\n window.location.reload();\n }\n }\n\n\n /*\n Auth\n */\n\n this.isUserSignedIn = function() {\n return this.user.email && this.retrieveMk();\n }\n\n this.getAuthParamsForEmail = function(email, callback) {\n var request = Restangular.one(\"auth\", \"params\");\n request.get({email: email}).then(function(response){\n callback(response.plain());\n })\n .catch(function(response){\n console.log(\"Error getting current user\", response);\n callback(response.data);\n })\n }\n\n this.getCurrentUser = function(callback) {\n if(!localStorage.getItem(\"jwt\")) {\n callback(null);\n return;\n }\n Restangular.one(\"users/current\").get().then(function(response){\n var user = response.plain();\n callback(user);\n }.bind(this))\n .catch(function(response){\n console.log(\"Error getting current user\", response);\n callback(response.data);\n })\n }\n\n this.login = function(email, password, callback) {\n this.getAuthParamsForEmail(email, function(authParams){\n if(!authParams) {\n callback(null);\n return;\n }\n Neeto.crypto.computeEncryptionKeysForUser(_.merge({email: email, password: password}, authParams), function(keys){\n this.setMk(keys.mk);\n var request = Restangular.one(\"auth/sign_in\");\n var params = {password: keys.pw, email: email};\n _.merge(request, params);\n request.post().then(function(response){\n localStorage.setItem(\"jwt\", response.token);\n callback(response);\n })\n .catch(function(response){\n callback(response.data);\n })\n }.bind(this));\n }.bind(this))\n }\n\n this.register = function(email, password, callback) {\n Neeto.crypto.generateInitialEncryptionKeysForUser({password: password, email: email}, function(keys){\n this.setMk(keys.mk);\n keys.mk = null;\n var request = Restangular.one(\"auth\");\n var params = _.merge({password: keys.pw, email: email}, keys);\n _.merge(request, params);\n request.post().then(function(response){\n localStorage.setItem(\"jwt\", response.token);\n callback(response);\n })\n .catch(function(response){\n callback(response.data);\n })\n }.bind(this));\n }\n\n this.changePassword = function(user, current_password, new_password) {\n this.getAuthParamsForEmail(email, function(authParams){\n if(!authParams) {\n callback(null);\n return;\n }\n Neeto.crypto.computeEncryptionKeysForUser(_.merge({password: current_password, email: user.email}, authParams), function(currentKeys) {\n Neeto.crypto.computeEncryptionKeysForUser(_.merge({password: new_password, email: user.email}, authParams), function(newKeys){\n var data = {};\n data.current_password = currentKeys.pw;\n data.password = newKeys.pw;\n data.password_confirmation = newKeys.pw;\n\n var user = this.user;\n\n this._performPasswordChange(currentKeys, newKeys, function(response){\n if(response && !response.error) {\n // this.showNewPasswordForm = false;\n // reencrypt data with new mk\n this.reencryptAllItemsAndSave(user, newKeys.mk, currentKeys.mk, function(success){\n if(success) {\n this.setMk(newKeys.mk);\n alert(\"Your password has been changed and your data re-encrypted.\");\n } else {\n // rollback password\n this._performPasswordChange(newKeys, currentKeys, function(response){\n alert(\"There was an error changing your password. Your password has been rolled back.\");\n window.location.reload();\n })\n }\n }.bind(this));\n } else {\n // this.showNewPasswordForm = false;\n alert(\"There was an error changing your password. Please try again.\");\n }\n }.bind(this))\n }.bind(this));\n }.bind(this));\n }.bind(this));\n }\n\n this._performPasswordChange = function(email, current_keys, new_keys, callback) {\n var request = Restangular.one(\"auth\");\n var params = {password: new_keys.pw, password_confirmation: new_keys.pw, current_password: current_keys.pw, email: email};\n _.merge(request, params);\n request.patch().then(function(response){\n callback(response);\n })\n }\n\n\n /*\n User\n */\n\n this.setUsername = function(user, username, callback) {\n var request = Restangular.one(\"users\", user.uuid);\n request.username = username;\n request.patch().then(function(response){\n callback(response.plain());\n })\n }\n\n /*\n Ensures that if encryption is disabled, all local items are uncrypted,\n and that if it's enabled, that all local items are encrypted\n */\n this.verifyEncryptionStatusOfAllItems = function(user, callback) {\n var allItems = user.filteredItems();\n var itemsNeedingUpdate = [];\n allItems.forEach(function(item){\n if(!item.isPublic()) {\n if(item.encryptionEnabled() && !item.isEncrypted()) {\n itemsNeedingUpdate.push(item);\n }\n } else {\n if(item.isEncrypted()) {\n itemsNeedingUpdate.push(item);\n }\n }\n }.bind(this))\n\n if(itemsNeedingUpdate.length > 0) {\n console.log(\"verifying encryption, items need updating\", itemsNeedingUpdate);\n this.saveBatchItems(user, itemsNeedingUpdate, callback)\n }\n }\n\n\n\n /*\n Items\n */\n\n this.syncWithOptions = function(callback, options = {}) {\n if(!this.user.uuid) {\n this.writeItemsToLocalStorage(function(responseItems){\n modelManager.clearDirtyItems();\n if(callback) {\n callback();\n }\n }.bind(this))\n return;\n }\n\n var dirtyItems = modelManager.getDirtyItems();\n var request = Restangular.one(\"items/sync\");\n request.items = _.map(dirtyItems, function(item){\n return this.createRequestParamsForItem(item, options.additionalFields);\n }.bind(this));\n\n // console.log(\"syncing items\", request.items);\n\n if(this.syncToken) {\n request.sync_token = this.syncToken;\n }\n\n request.post().then(function(response) {\n modelManager.clearDirtyItems();\n this.syncToken = response.sync_token;\n $rootScope.$broadcast(\"sync:updated_token\", this.syncToken);\n\n this.handleItemsResponse(response.retrieved_items, null);\n // merge only metadata for saved items\n var omitFields = [\"content\", \"enc_item_key\", \"auth_hash\"];\n this.handleItemsResponse(response.saved_items, omitFields);\n\n if(callback) {\n callback(response);\n }\n }.bind(this))\n .catch(function(response){\n console.log(\"Sync error: \", response);\n callback({error: \"Sync error\"});\n })\n }\n\n this.sync = function(callback) {\n this.syncWithOptions(callback, undefined);\n }\n\n this.handleItemsResponse = function(responseItems, omitFields) {\n this.decryptItems(responseItems);\n return modelManager.mapResponseItemsToLocalModelsOmittingFields(responseItems, omitFields);\n }\n\n this.createRequestParamsForItem = function(item, additionalFields) {\n return this.paramsForItem(item, !item.isPublic(), additionalFields, false);\n }\n\n this.paramsForExportFile = function(item, encrypted) {\n return _.omit(this.paramsForItem(item, encrypted, [\"created_at\", \"updated_at\"], true), [\"deleted\"]);\n }\n\n this.paramsForExtension = function(item, encrypted) {\n return _.omit(this.paramsForItem(item, encrypted, [\"created_at\", \"updated_at\"], true), [\"deleted\"]);\n }\n\n this.paramsForItem = function(item, encrypted, additionalFields, forExportFile) {\n var itemCopy = _.cloneDeep(item);\n\n console.assert(!item.dummy, \"Item is dummy, should not have gotten here.\", item.dummy)\n\n var params = {uuid: item.uuid, content_type: item.content_type,\n presentation_name: item.presentation_name, deleted: item.deleted};\n\n if(encrypted) {\n this.encryptSingleItem(itemCopy, this.retrieveMk());\n params.content = itemCopy.content;\n params.enc_item_key = itemCopy.enc_item_key;\n params.auth_hash = itemCopy.auth_hash;\n }\n else {\n params.content = forExportFile ? itemCopy.createContentJSONFromProperties() : \"000\" + Neeto.crypto.base64(JSON.stringify(itemCopy.createContentJSONFromProperties()));\n if(!forExportFile) {\n params.enc_item_key = null;\n params.auth_hash = null;\n }\n }\n\n if(additionalFields) {\n _.merge(params, _.pick(item, additionalFields));\n }\n\n return params;\n }\n\n this.shareItem = function(item, callback) {\n if(!this.user.uuid) {\n alert(\"You must be signed in to share.\");\n return;\n }\n\n var shareFn = function() {\n item.presentation_name = \"_auto_\";\n var needsUpdate = [item].concat(item.referencesAffectedBySharingChange() || []);\n needsUpdate.forEach(function(needingUpdate){\n needingUpdate.setDirty(true);\n })\n this.sync();\n }.bind(this)\n\n if(!this.user.username) {\n ngDialog.open({\n template: 'frontend/modals/username.html',\n controller: 'UsernameModalCtrl',\n resolve: {\n user: function() {return this.user}.bind(this),\n callback: function() {\n return shareFn;\n }\n },\n className: 'ngdialog-theme-default',\n disableAnimation: true\n });\n } else {\n shareFn();\n }\n }\n\n this.unshareItem = function(item, callback) {\n item.presentation_name = null;\n var needsUpdate = [item].concat(item.referencesAffectedBySharingChange() || []);\n needsUpdate.forEach(function(needingUpdate){\n needingUpdate.setDirty(true);\n })\n this.sync(null);\n }\n\n /*\n Import\n */\n\n this.importJSONData = function(jsonString, callback) {\n var data = JSON.parse(jsonString);\n console.log(\"importing data\", data);\n this.decryptItems(data.items);\n modelManager.mapResponseItemsToLocalModels(data.items);\n modelManager.allItems.forEach(function(item){\n item.setDirty(true);\n })\n this.syncWithOptions(callback, {additionalFields: [\"created_at\", \"updated_at\"]});\n }\n\n /*\n Export\n */\n\n this.itemsDataFile = function(encrypted) {\n var textFile = null;\n var makeTextFile = function (text) {\n var data = new Blob([text], {type: 'text/json'});\n\n // If we are replacing a previously generated file we need to\n // manually revoke the object URL to avoid memory leaks.\n if (textFile !== null) {\n window.URL.revokeObjectURL(textFile);\n }\n\n textFile = window.URL.createObjectURL(data);\n\n // returns a URL you can use as a href\n return textFile;\n }.bind(this);\n\n var items = _.map(modelManager.allItemsMatchingTypes([\"Tag\", \"Note\"]), function(item){\n return this.paramsForExportFile(item, encrypted);\n }.bind(this));\n\n var data = {\n items: items\n }\n\n return makeTextFile(JSON.stringify(data, null, 2 /* pretty print */));\n }\n\n\n\n /*\n Merging\n */\n this.mergeLocalDataRemotely = function(user, callback) {\n var request = Restangular.one(\"users\", user.uuid).one(\"merge\");\n var tags = user.tags;\n request.items = user.items;\n request.items.forEach(function(item){\n if(item.tag_id) {\n var tag = tags.filter(function(tag){return tag.uuid == item.tag_id})[0];\n item.tag_name = tag.title;\n }\n })\n request.post().then(function(response){\n callback();\n localStorage.removeItem('user');\n })\n }\n\n\n\n\n\n\n this.staticifyObject = function(object) {\n return JSON.parse(JSON.stringify(object));\n }\n\n this.writeItemsToLocalStorage = function(callback) {\n var items = _.map(modelManager.allItems, function(item){\n return this.paramsForItem(item, false, [\"created_at\", \"updated_at\"], false)\n }.bind(this));\n console.log(\"Writing items to local\", items);\n this.writeToLocalStorage('items', items);\n callback(items);\n }\n\n this.writeToLocalStorage = function(key, value) {\n localStorage.setItem(key, angular.toJson(value));\n }\n\n this.loadLocalItemsAndUser = function() {\n var user = {};\n var items = JSON.parse(localStorage.getItem('items')) || [];\n items = this.handleItemsResponse(items, null);\n Item.sortItemsByDate(items);\n user.items = items;\n user.shouldMerge = true;\n return user;\n }\n\n /*\n Drafts\n */\n\n this.saveDraftToDisk = function(draft) {\n localStorage.setItem(\"draft\", JSON.stringify(draft));\n }\n\n this.clearDraft = function() {\n localStorage.removeItem(\"draft\");\n }\n\n this.getDraft = function() {\n var draftString = localStorage.getItem(\"draft\");\n if(!draftString || draftString == 'undefined') {\n return null;\n }\n var jsonObj = _.merge({content_type: \"Note\"}, JSON.parse(draftString));\n return modelManager.createItem(jsonObj);\n }\n\n\n /*\n Encrpytion\n */\n\n this.retrieveMk = function() {\n if(!this.mk) {\n this.mk = localStorage.getItem(\"mk\");\n }\n return this.mk;\n }\n\n this.setMk = function(mk) {\n localStorage.setItem('mk', mk);\n }\n\n this.signout = function() {\n localStorage.removeItem(\"jwt\");\n localStorage.removeItem(\"mk\");\n }\n\n this.encryptSingleItem = function(item, masterKey) {\n var item_key = null;\n if(item.enc_item_key) {\n item_key = Neeto.crypto.decryptText(item.enc_item_key, masterKey);\n } else {\n item_key = Neeto.crypto.generateRandomEncryptionKey();\n item.enc_item_key = Neeto.crypto.encryptText(item_key, masterKey);\n }\n\n var ek = Neeto.crypto.firstHalfOfKey(item_key);\n var ak = Neeto.crypto.secondHalfOfKey(item_key);\n var encryptedContent = \"001\" + Neeto.crypto.encryptText(JSON.stringify(item.createContentJSONFromProperties()), ek);\n var authHash = Neeto.crypto.hmac256(encryptedContent, ak);\n\n item.content = encryptedContent;\n item.auth_hash = authHash;\n item.local_encryption_scheme = \"1.0\";\n }\n\n this.decryptSingleItem = function(item, masterKey) {\n var item_key = Neeto.crypto.decryptText(item.enc_item_key, masterKey);\n\n var ek = Neeto.crypto.firstHalfOfKey(item_key);\n var ak = Neeto.crypto.secondHalfOfKey(item_key);\n var authHash = Neeto.crypto.hmac256(item.content, ak);\n if(authHash !== item.auth_hash || !item.auth_hash) {\n console.log(\"Authentication hash does not match.\")\n return;\n }\n\n var content = Neeto.crypto.decryptText(item.content.substring(3, item.content.length), ek);\n item.content = content;\n }\n\n this.decryptItems = function(items) {\n var masterKey = this.retrieveMk();\n for (var item of items) {\n if(item.deleted == true) {\n continue;\n }\n var isString = typeof item.content === 'string' || item.content instanceof String;\n if(isString) {\n if(item.content.substring(0, 3) == \"001\" && item.enc_item_key) {\n // is encrypted\n this.decryptSingleItem(item, masterKey);\n } else {\n // is base64 encoded\n item.content = Neeto.crypto.base64Decode(item.content.substring(3, item.content.length))\n }\n }\n }\n }\n\n this.reencryptAllItemsAndSave = function(user, newMasterKey, oldMasterKey, callback) {\n var items = user.filteredItems();\n items.forEach(function(item){\n if(item.content.substring(0, 3) == \"001\" && item.enc_item_key) {\n // first decrypt item_key with old key\n var item_key = Neeto.crypto.decryptText(item.enc_item_key, oldMasterKey);\n // now encrypt item_key with new key\n item.enc_item_key = Neeto.crypto.encryptText(item_key, newMasterKey);\n }\n });\n\n this.saveBatchItems(user, items, function(success) {\n callback(success);\n }.bind(this));\n }\n }\n});\n;angular\n .module('app.frontend')\n .directive('mbAutofocus', ['$timeout', function($timeout) {\n return {\n restrict: 'A',\n scope: {\n shouldFocus: \"=\"\n },\n link : function($scope, $element) {\n $timeout(function() {\n if($scope.shouldFocus) {\n $element[0].focus();\n }\n });\n }\n }\n }]);\n;class ContextualExtensionsMenu {\n\n constructor() {\n this.restrict = \"E\";\n this.templateUrl = \"frontend/directives/contextual-menu.html\";\n this.scope = {\n item: \"=\"\n };\n }\n\n controller($scope, modelManager, extensionManager) {\n $scope.extensions = extensionManager.extensionsInContextOfItem($scope.item);\n\n $scope.executeAction = function(action, extension) {\n action.running = true;\n extensionManager.executeAction(action, extension, $scope.item, function(response){\n action.running = false;\n })\n }\n\n $scope.accessTypeForExtension = function(extension) {\n return extensionManager.extensionUsesEncryptedData(extension) ? \"encrypted\" : \"decrypted\";\n }\n\n }\n\n\n}\n\nangular.module('app.frontend').directive('contextualExtensionsMenu', () => new ContextualExtensionsMenu);\n;angular\n .module('app.frontend')\n .directive('draggable', function() {\n return {\n scope: {\n note: \"=\"\n },\n link: function(scope, element) {\n // this gives us the native JS object\n var el = element[0];\n\n el.draggable = true;\n\n el.addEventListener(\n 'dragstart',\n function(e) {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('Note', JSON.stringify(scope.note));\n this.classList.add('drag');\n return false;\n },\n false\n );\n\n el.addEventListener(\n 'dragend',\n function(e) {\n this.classList.remove('drag');\n return false;\n },\n false\n );\n }\n }\n});\n\nangular\n .module('app.frontend')\n .directive('droppable', function() {\n return {\n scope: {\n drop: '&',\n bin: '=',\n tag: \"=\"\n },\n link: function(scope, element) {\n // again we need the native object\n var el = element[0];\n\n el.addEventListener(\n 'dragover',\n function(e) {\n e.dataTransfer.dropEffect = 'move';\n // allows us to drop\n if (e.preventDefault) e.preventDefault();\n this.classList.add('over');\n return false;\n },\n false\n );\n\n var counter = 0;\n\n el.addEventListener(\n 'dragenter',\n function(e) {\n counter++;\n this.classList.add('over');\n return false;\n },\n false\n );\n\n el.addEventListener(\n 'dragleave',\n function(e) {\n counter--;\n if (counter === 0) {\n this.classList.remove('over');\n }\n return false;\n },\n false\n );\n\n el.addEventListener(\n 'drop',\n function(e) {\n // Stops some browsers from redirecting.\n if (e.stopPropagation) e.stopPropagation();\n\n this.classList.remove('over');\n\n var binId = this.uuid;\n var note = new Note(JSON.parse(e.dataTransfer.getData('Note')));\n scope.$apply(function(scope) {\n var fn = scope.drop();\n if ('undefined' !== typeof fn) {\n fn(e, scope.tag, note);\n }\n });\n\n return false;\n },\n false\n );\n }\n }\n});\n;angular\n .module('app.frontend')\n .directive('fileChange', function() {\n return {\n restrict: 'A',\n scope: {\n handler: '&'\n },\n link: function (scope, element) {\n element.on('change', function (event) {\n scope.$apply(function(){\n scope.handler({files: event.target.files});\n });\n });\n }\n };\n});\n;angular\n .module('app.frontend')\n .directive('lowercase', function() {\n return {\n require: 'ngModel',\n link: function(scope, element, attrs, modelCtrl) {\n var lowercase = function(inputValue) {\n if (inputValue == undefined) inputValue = '';\n var lowercased = inputValue.toLowerCase();\n if (lowercased !== inputValue) {\n modelCtrl.$setViewValue(lowercased);\n modelCtrl.$render();\n }\n return lowercased;\n }\n modelCtrl.$parsers.push(lowercase);\n lowercase(scope[attrs.ngModel]);\n }\n };\n });\n;angular\n .module('app.frontend')\n .directive('selectOnClick', ['$window', function ($window) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.on('focus', function () {\n if (!$window.getSelection().toString()) {\n // Required for mobile Safari\n this.setSelectionRange(0, this.value.length)\n }\n });\n }\n };\n}]);\n;angular\n .module('app.frontend')\n .directive('note', function($timeout) {\n return {\n restrict: 'E',\n controller: 'SingleNoteCtrl',\n templateUrl: \"frontend/directives/note.html\",\n scope: {\n note: \"=\"\n },\n }\n })\n .controller('SingleNoteCtrl', function ($rootScope, $scope, $state, markdownRenderer) {\n $scope.renderedContent = function() {\n return markdownRenderer.renderHtml(markdownRenderer.renderedContentForText($scope.note.text));\n }\n });\n;/**\n * AngularJS directive that simulates the effect of typing on a text editor - with a blinking cursor.\n * This directive works as an attribute to any HTML element, and it changes the speed/delay of its animation.\n *\n * There's also a simple less file included for basic styling of the dialog, which can be overridden.\n * The config object also lets the user define custom CSS classes for the modal.\n *\n * How to use:\n *\n * Just add the desired text to the 'text' attribute of the element and the directive takes care of the rest.\n * The 'text' attribute can be a single string or an array of string. In case an array is passed, the string\n * on each index is erased so the next item can be printed. When the last index is reached, that string stays\n * on the screen. (So if you want to erase the last string, just push an empty string to the end of the array)\n *\n * These are the optional preferences:\n * - initial delay: set an 'initial-delay' attribute for the element\n * - type delay: set a 'type-delay' attribute for the element\n * - erase delay: set a 'erase-delay' attribute for the element\n * - specify cursor : set a 'cursor' attribute for the element, specifying which cursor to use\n * - turn off cursor blinking: set the 'blink-cursor' attribute to \"false\"\n * - cursor blinking speed: set a 'blink-delay' attribute for the element\n * - scope callback: pass the desired scope callback as the 'callback-fn' attribute of the element\n *\n * Note:\n * Each time/delay value should be set either on seconds (1s) or milliseconds (1000)\n *\n * Dependencies:\n * The directive needs the css file provided in order to replicate the cursor blinking effect.\n */\n\n\nangular\n .module('app.frontend').directive('typewrite', ['$timeout', function ($timeout) {\n function linkFunction($scope, $element, $attrs) {\n var timer = null,\n initialDelay = $attrs.initialDelay ? getTypeDelay($attrs.initialDelay) : 200,\n typeDelay = $attrs.typeDelay || 200,\n eraseDelay = $attrs.eraseDelay || typeDelay / 2,\n blinkDelay = $attrs.blinkDelay ? getAnimationDelay($attrs.blinkDelay) : false,\n cursor = $attrs.cursor || '|',\n blinkCursor = typeof $attrs.blinkCursor !== 'undefined' ? $attrs.blinkCursor === 'true' : true,\n currentText,\n textArray,\n running,\n auxStyle;\n\n\n\n if ($scope.text) {\n if ($scope.text instanceof Array) {\n textArray = $scope.text;\n currentText = textArray[0];\n } else {\n currentText = $scope.text;\n }\n }\n if (typeof $scope.start === 'undefined' || $scope.start) {\n typewrite();\n }\n\n function typewrite() {\n timer = $timeout(function () {\n updateIt($element, 0, 0, currentText);\n }, initialDelay);\n }\n\n function updateIt(element, charIndex, arrIndex, text) {\n if (charIndex <= text.length) {\n updateValue(element, text.substring(0, charIndex) + cursor);\n charIndex++;\n timer = $timeout(function () {\n updateIt(element, charIndex, arrIndex, text);\n }, typeDelay);\n return;\n } else {\n charIndex--;\n\n if($scope.iterationCallback) {\n $scope.iterationCallback()(arrIndex);\n }\n\n // check if it's an array\n if (textArray && arrIndex < textArray.length - 1) {\n timer = $timeout(function () {\n cleanAndRestart(element, charIndex, arrIndex, textArray[arrIndex]);\n }, $scope.iterationDelay);\n } else {\n if ($scope.callbackFn) {\n $scope.callbackFn();\n }\n blinkIt(element, charIndex, currentText);\n }\n }\n }\n\n function blinkIt(element, charIndex) {\n var text = element.text().substring(0, element.text().length - 1);\n if (blinkCursor) {\n if (blinkDelay) {\n auxStyle = '-webkit-animation:blink-it steps(1) ' + blinkDelay + ' infinite;-moz-animation:blink-it steps(1) ' + blinkDelay + ' infinite ' +\n '-ms-animation:blink-it steps(1) ' + blinkDelay + ' infinite;-o-animation:blink-it steps(1) ' + blinkDelay + ' infinite; ' +\n 'animation:blink-it steps(1) ' + blinkDelay + ' infinite;';\n updateValue(element, text.substring(0, charIndex) + '' + cursor + '');\n } else {\n updateValue(element, text.substring(0, charIndex) + '' + cursor + '');\n }\n } else {\n updateValue(element, text.substring(0, charIndex));\n }\n }\n\n function cleanAndRestart(element, charIndex, arrIndex, currentText) {\n if(charIndex == 0) {\n if($scope.prebeginFn) {\n $scope.prebeginFn()();\n }\n }\n if (charIndex > 0) {\n currentText = currentText.slice(0, -1);\n // element.html(currentText.substring(0, currentText.length - 1) + cursor);\n updateValue(element, currentText + cursor);\n charIndex--;\n timer = $timeout(function () {\n cleanAndRestart(element, charIndex, arrIndex, currentText);\n }, eraseDelay);\n return;\n } else {\n arrIndex++;\n currentText = textArray[arrIndex];\n timer = $timeout(function () {\n updateIt(element, 0, arrIndex, currentText);\n }, typeDelay);\n }\n }\n\n function getTypeDelay(delay) {\n if (typeof delay === 'string') {\n return delay.charAt(delay.length - 1) === 's' ? parseInt(delay.substring(0, delay.length - 1), 10) * 1000 : +delay;\n } else {\n return false;\n }\n }\n\n function getAnimationDelay(delay) {\n if (typeof delay === 'string') {\n return delay.charAt(delay.length - 1) === 's' ? delay : parseInt(delay.substring(0, delay.length - 1), 10) / 1000;\n }\n }\n\n function updateValue(element, value) {\n if (element.prop('nodeName').toUpperCase() === 'INPUT') {\n return element.val(value);\n }\n return element.html(value);\n }\n\n $scope.$on('$destroy', function () {\n if (timer) {\n $timeout.cancel(timer);\n }\n });\n\n $scope.$watch('start', function (newVal) {\n if (!running && newVal) {\n running = !running;\n typewrite();\n }\n });\n\n $scope.$watch('text', function (newVal, oldVal) {\n if(!(newVal instanceof Array)) {\n currentText = newVal;\n typewrite();\n }\n });\n }\n\n return {\n restrict: 'A',\n link: linkFunction,\n replace: true,\n scope: {\n text: '=',\n callbackFn: '&',\n iterationCallback: '&',\n iterationDelay: '=',\n prebeginFn: '&',\n start: '='\n }\n };\n\n }]);\n;class ExtensionManager {\n\n constructor(Restangular, modelManager, apiController) {\n this.Restangular = Restangular;\n this.modelManager = modelManager;\n this.apiController = apiController;\n this.enabledRepeatActionUrls = JSON.parse(localStorage.getItem(\"enabledRepeatActionUrls\")) || [];\n this.decryptedExtensions = JSON.parse(localStorage.getItem(\"decryptedExtensions\")) || [];\n\n modelManager.addItemSyncObserver(\"extensionManager\", \"Extension\", function(items){\n for (var ext of items) {\n\n ext.encrypted = this.extensionUsesEncryptedData(ext);\n\n for (var action of ext.actions) {\n if(this.enabledRepeatActionUrls.includes(action.url)) {\n this.enableRepeatAction(action, ext);\n }\n }\n }\n }.bind(this))\n }\n\n get extensions() {\n return this.modelManager.extensions;\n }\n\n extensionsInContextOfItem(item) {\n return this.extensions.filter(function(ext){\n return ext.actionsWithContextForItem(item).length > 0;\n })\n }\n\n actionWithURL(url) {\n for (var extension of this.extensions) {\n return _.find(extension.actions, {url: url})\n }\n }\n\n extensionUsesEncryptedData(extension) {\n return !this.decryptedExtensions.includes(extension.url);\n }\n\n changeExtensionEncryptionFormat(encrypted, extension) {\n if(encrypted) {\n _.pull(this.decryptedExtensions, extension.url);\n } else {\n this.decryptedExtensions.push(extension.url);\n }\n\n localStorage.setItem(\"decryptedExtensions\", JSON.stringify(this.decryptedExtensions))\n\n extension.encrypted = this.extensionUsesEncryptedData(extension);\n\n console.log(\"ext with dec\", this.decryptedExtensions);\n }\n\n addExtension(url, callback) {\n this.retrieveExtensionFromServer(url, callback);\n }\n\n deleteExtension(extension) {\n for(var action of extension.actions) {\n _.pull(this.decryptedExtensions, extension);\n if(action.repeat_mode) {\n if(this.isRepeatActionEnabled(action)) {\n this.disableRepeatAction(action);\n }\n }\n }\n\n this.modelManager.setItemToBeDeleted(extension);\n this.apiController.sync(null);\n }\n\n retrieveExtensionFromServer(url, callback) {\n console.log(\"Registering URL\", url);\n this.Restangular.oneUrl(url, url).get().then(function(response){\n var ext = this.handleExtensionLoadExternalResponseItem(url, response.plain());\n if(callback) {\n callback(ext);\n }\n }.bind(this))\n .catch(function(response){\n console.log(\"Error registering extension\", response);\n callback(null);\n })\n }\n\n handleExtensionLoadExternalResponseItem(url, externalResponseItem) {\n var extension = _.find(this.extensions, {url: url});\n if(extension) {\n extension.updateFromExternalResponseItem(externalResponseItem);\n } else {\n extension = new Extension(externalResponseItem);\n extension.url = url;\n extension.setDirty(true);\n this.modelManager.addItem(extension);\n this.apiController.sync(null);\n }\n\n return extension;\n }\n\n refreshExtensionsFromServer() {\n for (var url of this.enabledRepeatActionUrls) {\n var action = this.actionWithURL(url);\n if(action) {\n this.disableRepeatAction(action);\n }\n }\n\n for(var ext of this.extensions) {\n this.retrieveExtensionFromServer(ext.url, function(extension){\n extension.setDirty(true);\n });\n }\n }\n\n executeAction(action, extension, item, callback) {\n\n if(this.extensionUsesEncryptedData(extension) && !this.apiController.isUserSignedIn()) {\n alert(\"To send data encrypted, you must have an encryption key, and must therefore be signed in.\");\n callback(null);\n return;\n }\n\n switch (action.verb) {\n case \"get\": {\n this.Restangular.oneUrl(action.url, action.url).get().then(function(response){\n console.log(\"Execute action response\", response);\n action.error = false;\n var items = response.items;\n this.modelManager.mapResponseItemsToLocalModels(items);\n callback(items);\n }.bind(this))\n .catch(function(response){\n action.error = true;\n })\n\n break;\n }\n\n case \"show\": {\n var win = window.open(action.url, '_blank');\n win.focus();\n callback();\n break;\n }\n\n case \"post\": {\n var params = {};\n\n if(action.all) {\n var items = this.modelManager.allItemsMatchingTypes(action.content_types);\n params.items = items.map(function(item){\n var params = this.outgoingParamsForItem(item, extension);\n return params;\n }.bind(this))\n\n } else {\n params.item = this.outgoingParamsForItem(item, extension);\n }\n\n this.performPost(action, extension, params, function(response){\n callback(response);\n });\n\n break;\n }\n\n default: {\n\n }\n }\n\n action.lastExecuted = new Date();\n }\n\n isRepeatActionEnabled(action) {\n return this.enabledRepeatActionUrls.includes(action.url);\n }\n\n disableRepeatAction(action, extension) {\n console.log(\"Disabling action\", action);\n\n _.pull(this.enabledRepeatActionUrls, action.url);\n localStorage.setItem(\"enabledRepeatActionUrls\", JSON.stringify(this.enabledRepeatActionUrls));\n this.modelManager.removeItemChangeObserver(action.url);\n\n console.assert(this.isRepeatActionEnabled(action) == false);\n }\n\n enableRepeatAction(action, extension) {\n // console.log(\"Enabling repeat action\", action);\n\n if(!_.find(this.enabledRepeatActionUrls, action.url)) {\n this.enabledRepeatActionUrls.push(action.url);\n localStorage.setItem(\"enabledRepeatActionUrls\", JSON.stringify(this.enabledRepeatActionUrls));\n }\n\n if(action.repeat_mode) {\n\n if(action.repeat_mode == \"watch\") {\n this.modelManager.addItemChangeObserver(action.url, action.content_types, function(changedItems){\n this.triggerWatchAction(action, extension, changedItems);\n }.bind(this))\n }\n\n if(action.repeat_mode == \"loop\") {\n // todo\n }\n\n }\n }\n\n queueAction(action, extension, delay, changedItems) {\n this.actionQueue = this.actionQueue || [];\n if(_.find(this.actionQueue, {url: action.url})) {\n return;\n }\n\n console.log(\"Successfully queued\", action, this.actionQueue.length);\n this.actionQueue.push(action);\n\n setTimeout(function () {\n console.log(\"Performing queued action\", action);\n this.triggerWatchAction(action, extension, changedItems);\n _.pull(this.actionQueue, action);\n }.bind(this), delay * 1000);\n }\n\n triggerWatchAction(action, extension, changedItems) {\n if(action.repeat_timeout > 0) {\n var lastExecuted = action.lastExecuted;\n var diffInSeconds = (new Date() - lastExecuted)/1000;\n if(diffInSeconds < action.repeat_timeout) {\n var delay = action.repeat_timeout - diffInSeconds;\n this.queueAction(action, extension, delay, changedItems);\n return;\n }\n }\n\n action.lastExecuted = new Date();\n\n console.log(\"Performing action immediately\", action);\n\n if(action.verb == \"post\") {\n var params = {};\n params.items = changedItems.map(function(item){\n var params = this.outgoingParamsForItem(item, extension);\n return params;\n }.bind(this))\n this.performPost(action, extension, params, null);\n } else {\n // todo\n }\n }\n\n outgoingParamsForItem(item, extension) {\n return this.apiController.paramsForExtension(item, this.extensionUsesEncryptedData(extension));\n }\n\n performPost(action, extension, params, callback) {\n var request = this.Restangular.oneUrl(action.url, action.url);\n _.merge(request, params);\n\n request.post().then(function(response){\n action.error = false;\n if(callback) {\n callback(response.plain());\n }\n })\n .catch(function(response){\n action.error = true;\n console.log(\"Action error response:\", response);\n if(callback) {\n callback({error: \"Request error\"});\n }\n })\n }\n\n}\n\nangular.module('app.frontend').service('extensionManager', ExtensionManager);\n;angular.module('app.frontend')\n .filter('appDate', function ($filter) {\n return function (input) {\n return input ? $filter('date')(new Date(input), 'MM/dd/yyyy', 'UTC') : '';\n };\n })\n .filter('appDateTime', function ($filter) {\n return function (input) {\n return input ? $filter('date')(new Date(input), 'MM/dd/yyyy h:mm a') : '';\n };\n });\n;angular.module('app.frontend')\n .service('markdownRenderer', function ($sce) {\n\n marked.setOptions({\n breaks: true,\n sanitize: true\n });\n\n this.renderedContentForText = function(text) {\n if(!text || text.length == 0) {\n return \"\";\n }\n return marked(text);\n }\n\n this.renderHtml = function(html_code) {\n return $sce.trustAsHtml(html_code);\n };\n\n\n });\n;class ModelManager {\n\n constructor() {\n this.notes = [];\n this.tags = [];\n this.itemSyncObservers = [];\n this.itemChangeObservers = [];\n this.items = [];\n this._extensions = [];\n }\n\n get allItems() {\n return this.items.filter(function(item){\n return !item.dummy;\n })\n }\n\n get extensions() {\n return this._extensions.filter(function(ext){\n return !ext.deleted;\n })\n }\n\n allItemsMatchingTypes(contentTypes) {\n return this.items.filter(function(item){\n return (contentTypes.includes(item.content_type) || contentTypes.includes(\"*\")) && !item.dummy;\n })\n }\n\n findItem(itemId) {\n return _.find(this.items, {uuid: itemId});\n }\n\n mapResponseItemsToLocalModels(items) {\n return this.mapResponseItemsToLocalModelsOmittingFields(items, null);\n }\n\n mapResponseItemsToLocalModelsOmittingFields(items, omitFields) {\n var models = []\n for (var json_obj of items) {\n json_obj = _.omit(json_obj, omitFields || [])\n var item = this.findItem(json_obj[\"uuid\"]);\n if(json_obj[\"deleted\"] == true) {\n if(item) {\n this.removeItemLocally(item)\n }\n continue;\n }\n\n _.omit(json_obj, omitFields);\n\n if(!item) {\n item = this.createItem(json_obj);\n } else {\n item.updateFromJSON(json_obj);\n }\n\n this.addItem(item);\n\n if(json_obj.content) {\n this.resolveReferencesForItem(item)\n }\n\n models.push(item)\n }\n\n this.notifySyncObserversOfModels(models);\n\n this.sortItems();\n return models;\n }\n\n notifySyncObserversOfModels(models) {\n for(var observer of this.itemSyncObservers) {\n var relevantItems = models.filter(function(item){return item.content_type == observer.type});\n if(relevantItems.length > 0) {\n observer.callback(relevantItems);\n }\n }\n }\n\n notifyItemChangeObserversOfModels(models) {\n for(var observer of this.itemChangeObservers) {\n var relevantItems = models.filter(function(item){\n return observer.content_types.includes(item.content_type) || observer.content_types.includes(\"*\");\n });\n\n if(relevantItems.length > 0) {\n observer.callback(relevantItems);\n }\n }\n }\n\n createItem(json_obj) {\n var item;\n if(json_obj.content_type == \"Note\") {\n item = new Note(json_obj);\n } else if(json_obj.content_type == \"Tag\") {\n item = new Tag(json_obj);\n } else if(json_obj.content_type == \"Extension\") {\n item = new Extension(json_obj);\n } else {\n item = new Item(json_obj);\n }\n\n item.addObserver(this, function(changedItem){\n this.notifyItemChangeObserversOfModels([changedItem]);\n }.bind(this));\n\n return item;\n }\n\n addItems(items) {\n this.items = _.uniq(this.items.concat(items));\n\n items.forEach(function(item){\n if(item.content_type == \"Tag\") {\n if(!_.find(this.tags, {uuid: item.uuid})) {\n this.tags.unshift(item);\n }\n } else if(item.content_type == \"Note\") {\n if(!_.find(this.notes, {uuid: item.uuid})) {\n this.notes.unshift(item);\n }\n } else if(item.content_type == \"Extension\") {\n if(!_.find(this._extensions, {uuid: item.uuid})) {\n this._extensions.unshift(item);\n }\n }\n }.bind(this))\n }\n\n addItem(item) {\n this.addItems([item])\n }\n\n itemsForContentType(contentType) {\n return this.items.filter(function(item){\n return item.content_type == contentType;\n });\n }\n\n resolveReferencesForItem(item) {\n var contentObject = item.contentObject;\n if(!contentObject.references) {\n return;\n }\n\n for(var reference of contentObject.references) {\n var referencedItem = this.findItem(reference.uuid);\n if(referencedItem) {\n item.addItemAsRelationship(referencedItem);\n referencedItem.addItemAsRelationship(item);\n } else {\n // console.log(\"Unable to find item:\", reference.uuid);\n }\n }\n }\n\n sortItems() {\n Item.sortItemsByDate(this.notes);\n\n this.tags.forEach(function(tag){\n Item.sortItemsByDate(tag.notes);\n })\n }\n\n addItemSyncObserver(id, type, callback) {\n this.itemSyncObservers.push({id: id, type: type, callback: callback});\n }\n\n removeItemSyncObserver(id) {\n _.remove(this.itemSyncObservers, _.find(this.itemSyncObservers, {id: id}));\n }\n\n addItemChangeObserver(id, content_types, callback) {\n this.itemChangeObservers.push({id: id, content_types: content_types, callback: callback});\n }\n\n removeItemChangeObserver(id) {\n _.remove(this.itemChangeObservers, _.find(this.itemChangeObservers, {id: id}));\n }\n\n get filteredNotes() {\n return Note.filterDummyNotes(this.notes);\n }\n\n getDirtyItems() {\n return this.items.filter(function(item){return item.dirty == true && !item.dummy})\n }\n\n clearDirtyItems() {\n this.getDirtyItems().forEach(function(item){\n item.setDirty(false);\n })\n }\n\n setItemToBeDeleted(item) {\n item.deleted = true;\n if(!item.dummy) {\n item.setDirty(true);\n }\n item.removeAllRelationships();\n }\n\n removeItemLocally(item) {\n _.pull(this.items, item);\n\n if(item.content_type == \"Tag\") {\n _.pull(this.tags, item);\n } else if(item.content_type == \"Note\") {\n _.pull(this.notes, item);\n } else if(item.content_type == \"Extension\") {\n _.pull(this._extensions, item);\n }\n }\n\n /*\n Relationships\n */\n\n createRelationshipBetweenItems(itemOne, itemTwo) {\n itemOne.addItemAsRelationship(itemTwo);\n itemTwo.addItemAsRelationship(itemOne);\n\n itemOne.setDirty(true);\n itemTwo.setDirty(true);\n }\n\n removeRelationshipBetweenItems(itemOne, itemTwo) {\n itemOne.removeItemAsRelationship(itemTwo);\n itemTwo.removeItemAsRelationship(itemOne);\n\n itemOne.setDirty(true);\n itemTwo.setDirty(true);\n }\n}\n\nangular.module('app.frontend').service('modelManager', ModelManager);\n;angular.module('app.frontend')\n .service('serverSideValidation', function ($sce) {\n // Show validation errors in form.\n this.showErrors = function (formErrors, form) {\n angular.forEach(formErrors, function (errors, key) {\n if (typeof form[key] !== 'undefined') {\n form[key].$setDirty();\n form[key].$setValidity('server', false);\n form[key].$error.server = $sce.trustAsHtml(errors.join(', '));\n }\n });\n };\n\n // Get validation errors from server response and show them in form.\n this.parseErrors = function (response, form) {\n if (response.status === 422) {\n this.showErrors(response.data, form);\n }\n };\n});\n"]} \ No newline at end of file