diff --git a/app/assets/javascripts/app/frontend/controllers/editor.js b/app/assets/javascripts/app/frontend/controllers/editor.js index 556c6ef60..4dddf3867 100644 --- a/app/assets/javascripts/app/frontend/controllers/editor.js +++ b/app/assets/javascripts/app/frontend/controllers/editor.js @@ -245,7 +245,6 @@ angular.module('app.frontend') this.onNameBlur = function() { this.editingName = false; - this.updateTagsFromTagsString() } this.toggleFullScreen = function() { diff --git a/app/assets/javascripts/app/frontend/controllers/footer.js b/app/assets/javascripts/app/frontend/controllers/footer.js index 218469abb..66447688a 100644 --- a/app/assets/javascripts/app/frontend/controllers/footer.js +++ b/app/assets/javascripts/app/frontend/controllers/footer.js @@ -115,8 +115,8 @@ angular.module('app.frontend') this.rooms = []; modelManager.addItemSyncObserver("room-bar", "SN|Component", (allItems, validItems, deletedItems, source) => { - this.rooms = _.uniq(this.rooms.concat(allItems.filter((candidate) => {return candidate.area == "rooms"}))) - .filter((candidate) => {return !candidate.deleted}); + var incomingRooms = allItems.filter((candidate) => {return candidate.area == "rooms"}); + this.rooms = _.uniq(this.rooms.concat(incomingRooms)).filter((candidate) => {return !candidate.deleted}); }); componentManager.registerHandler({identifier: "roomBar", areas: ["rooms"], activationHandler: (component) => { @@ -161,9 +161,7 @@ angular.module('app.frontend') // Handle singleton ProLink instance singletonManager.registerSingleton({content_type: "SN|Component", package_info: {identifier: "org.standardnotes.prolink"}}, (resolvedSingleton) => { - }, (valueCallback) => { - // Safe to create. Create and return object. let url = window._prolink_package_url; console.log("Installing ProLink from URL", url); diff --git a/app/assets/javascripts/app/services/modelManager.js b/app/assets/javascripts/app/services/modelManager.js index a72488668..0e8bdcc8b 100644 --- a/app/assets/javascripts/app/services/modelManager.js +++ b/app/assets/javascripts/app/services/modelManager.js @@ -62,9 +62,10 @@ class ModelManager { } if(removeOriginal) { - this.removeItemLocally(item, function(){ - block(); - }); + // Set to deleted, then run through mapping function so that observers can be notified + item.deleted = true; + this.mapResponseItemsToLocalModels([item], ModelManager.MappingSourceLocalSaved); + block(); } else { block(); } @@ -81,13 +82,13 @@ class ModelManager { } allItemsMatchingTypes(contentTypes) { - return this.items.filter(function(item){ + return this.allItems.filter(function(item){ return (_.includes(contentTypes, item.content_type) || _.includes(contentTypes, "*")) && !item.dummy; }) } itemsForContentType(contentType) { - return this.items.filter(function(item){ + return this.allItems.filter(function(item){ return item.content_type == contentType; }); } diff --git a/app/assets/javascripts/app/services/singletonManager.js b/app/assets/javascripts/app/services/singletonManager.js index f2f2c015e..2da203229 100644 --- a/app/assets/javascripts/app/services/singletonManager.js +++ b/app/assets/javascripts/app/services/singletonManager.js @@ -24,10 +24,10 @@ class SingletonManager { }) // Testing code to make sure only 1 exists - setTimeout(function () { - var userPrefs = modelManager.itemsForContentType("SN|UserPreferences"); - console.assert(userPrefs.length == 1); - }, 1000); + // setTimeout(function () { + // var userPrefs = modelManager.itemsForContentType("SN|UserPreferences"); + // console.assert(userPrefs.length == 1); + // }, 1000); } registerSingleton(predicate, resolveCallback, createBlock) { diff --git a/app/assets/javascripts/app/services/syncManager.js b/app/assets/javascripts/app/services/syncManager.js index 571aac588..c9571b36d 100644 --- a/app/assets/javascripts/app/services/syncManager.js +++ b/app/assets/javascripts/app/services/syncManager.js @@ -84,6 +84,8 @@ class SyncManager { // use a copy, as alternating uuid will affect array var originalItems = this.modelManager.allItems.slice(); + console.log("markAllItemsDirtyAndSaveOffline", originalItems); + var block = () => { var allItems = this.modelManager.allItems; for(var item of allItems) { @@ -97,7 +99,7 @@ class SyncManager { let alternateNextItem = () => { if(index >= originalItems.length) { - // We don't use originalItems as altnerating UUID will have deleted them. + // We don't use originalItems as alternating UUID will have deleted them. block(); return; } diff --git a/app/assets/templates/frontend/directives/account-menu.html.haml b/app/assets/templates/frontend/directives/account-menu.html.haml index 38db58dec..d70e3d12f 100644 --- a/app/assets/templates/frontend/directives/account-menu.html.haml +++ b/app/assets/templates/frontend/directives/account-menu.html.haml @@ -7,11 +7,13 @@ .panel-section.hero{"ng-if" => "!user && !formData.showLogin && !formData.showRegister && !formData.mfa"} %h1.title Sign in or register to enable sync and end-to-end encryption. - .button-group.stretch - .button.info.featured{"ng-click" => "formData.showLogin = true"} - .label Sign In - .button.info.featured{"ng-click" => "formData.showRegister = true"} - .label Register + .panel-row + .panel-row + .button-group.stretch + .button.info.featured{"ng-click" => "formData.showLogin = true"} + .label Sign In + .button.info.featured{"ng-click" => "formData.showRegister = true"} + .label Register %p Standard Notes is free on every platform, and comes standard with sync and encryption. @@ -30,9 +32,9 @@ %h2.title No Password Reset. .text Because your notes are encrypted using your password, Standard Notes does not have a password reset option. You cannot forget your password. .advanced-options.panel-row{"ng-if" => "formData.showAdvanced"} - .float-group + .panel-column %label.pull-left Sync Server Domain - %input.form-control.mt-5{:name => 'server', :placeholder => 'Server URL', :required => true, :type => 'text', 'ng-model' => 'formData.url'} + %input.form-control.mt-5{:name => 'server', :placeholder => 'Server URL', :required => true, :type => 'text', 'ng-model' => 'formData.url'} .button-group.stretch.panel-row.form-submit .button.info.featured{"ng-click" => "submitAuthForm()"} @@ -41,7 +43,7 @@ %label %input{"type" => "checkbox", "ng-model" => "formData.ephemeral", "ng-true-value" => "false", "ng-false-value" => "true"} Stay signed in - %label + %label{"ng-if" => "notesAndTagsCount() > 0"} %input{"type" => "checkbox", "ng-model" => "formData.mergeLocal", "ng-bind" => "true", "ng-change" => "mergeLocalChanged()"} Merge local data ({{notesAndTagsCount()}} notes and tags) diff --git a/app/assets/templates/frontend/footer.html.haml b/app/assets/templates/frontend/footer.html.haml index 4ed1d1de5..a859448e2 100644 --- a/app/assets/templates/frontend/footer.html.haml +++ b/app/assets/templates/frontend/footer.html.haml @@ -19,7 +19,7 @@ .item.border - .item{"ng-repeat" => "room in ctrl.rooms"} + .item{"ng-repeat" => "room in ctrl.rooms track by room.uuid"} .column{"ng-click" => "ctrl.selectRoom(room)"} .label {{room.name}} %component-modal{"ng-if" => "room.showRoom", "component" => "room", "controller" => "room.directiveController"} diff --git a/package.json b/package.json index 7a14ae8d6..4ece22493 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "neeto", + "name": "standard-notes", "version": "1.0.0", "repository": { "type": "git",