diff --git a/app/assets/javascripts/app/directives/views/componentModal.js b/app/assets/javascripts/app/directives/views/componentModal.js index 006b9b23e..7cda3c897 100644 --- a/app/assets/javascripts/app/directives/views/componentModal.js +++ b/app/assets/javascripts/app/directives/views/componentModal.js @@ -21,7 +21,7 @@ class ComponentModal { $scope.dismiss = function(callback) { $scope.el.remove(); $scope.$destroy(); - $scope.onDismiss && $scope.onDismiss()($scope.component); + $scope.onDismiss && $scope.onDismiss() && $scope.onDismiss()($scope.component); callback && callback(); } } diff --git a/app/assets/javascripts/app/directives/views/componentView.js b/app/assets/javascripts/app/directives/views/componentView.js index 73f390983..61c1a3cb3 100644 --- a/app/assets/javascripts/app/directives/views/componentView.js +++ b/app/assets/javascripts/app/directives/views/componentView.js @@ -17,7 +17,7 @@ class ComponentView { $scope.identifier = "component-view-" + Math.random(); - console.log("Registering handler", $scope.identifier, $scope.component.name); + // console.log("Registering handler", $scope.identifier, $scope.component.name); this.componentManager.registerHandler({identifier: $scope.identifier, areas: [$scope.component.area], activationHandler: (component) => { if(component.active) { @@ -86,7 +86,7 @@ class ComponentView { } $scope.$on("$destroy", function() { - console.log("Deregistering handler", $scope.identifier, $scope.component.name); + // console.log("Deregistering handler", $scope.identifier, $scope.component.name); componentManager.deregisterHandler($scope.identifier); if($scope.component && !$scope.manualDealloc) { componentManager.deactivateComponent($scope.component); diff --git a/app/assets/javascripts/app/services/componentManager.js b/app/assets/javascripts/app/services/componentManager.js index 5e1db02cf..4082df661 100644 --- a/app/assets/javascripts/app/services/componentManager.js +++ b/app/assets/javascripts/app/services/componentManager.js @@ -278,6 +278,8 @@ class ComponentManager { this.handleToggleComponentMessage(component, componentToToggle, message); } else if(message.action === "request-permissions") { this.handleRequestPermissionsMessage(component, message); + } else if(message.action === "install-local-component") { + this.handleInstallLocalComponentMessage(component, message); } // Notify observers @@ -516,6 +518,16 @@ class ComponentManager { } } + handleInstallLocalComponentMessage(sourceComponent, message) { + // Only extensions manager has this permission + if(!this.sysExtManager.isSystemExtension(sourceComponent)) { + return; + } + + let targetComponent = this.modelManager.findItem(message.data.uuid); + this.desktopManager.installComponent(targetComponent); + } + runWithPermissions(component, requiredPermissions, runFunction) { if(!component.permissions) { @@ -625,28 +637,10 @@ class ComponentManager { openModalComponent(component) { var scope = this.$rootScope.$new(true); scope.component = component; - scope.onDismiss = () => { - - } var el = this.$compile( "" )(scope); angular.element(document.body).append(el); } - installComponent(url) { - var name = getParameterByName("name", url); - var area = getParameterByName("area", url); - var component = this.modelManager.createItem({ - content_type: "SN|Component", - url: url, - name: name, - area: area - }) - - this.modelManager.addItem(component); - component.setDirty(true); - this.syncManager.sync("installComponent"); - } - activateComponent(component) { var didChange = component.active != true; diff --git a/app/assets/javascripts/app/services/desktopManager.js b/app/assets/javascripts/app/services/desktopManager.js index 24a1bf152..916d3a968 100644 --- a/app/assets/javascripts/app/services/desktopManager.js +++ b/app/assets/javascripts/app/services/desktopManager.js @@ -37,7 +37,6 @@ class DesktopManager { // All `components` should be installed syncComponentsInstallation(components) { - // console.log("Web Syncing Components", components); if(!this.isDesktop) return; var data = components.map((component) => { @@ -46,18 +45,22 @@ class DesktopManager { this.installationSyncHandler(data); } - desktop_onComponentInstallationComplete(componentData) { - console.log("Web|Component Installation Complete", componentData); - var component = this.modelManager.mapResponseItemsToLocalModels([componentData], ModelManager.MappingSourceDesktopInstalled)[0]; - component.setDirty(true); - this.syncManager.sync("desktop_onComponentInstallationComplete"); + installComponent(component) { + this.installComponentHandler(this.convertComponentForTransmission(component)); } - desktop_updateComponentComplete(componentData) { - console.log("Web|Component Update Complete", componentData); - var component = this.modelManager.mapResponseItemsToLocalModels([componentData], ModelManager.MappingSourceDesktopInstalled)[0]; + desktop_onComponentInstallationComplete(componentData, error) { + console.log("Web|Component Installation/Update Complete", componentData, error); + var component = this.modelManager.findItem(componentData.uuid); + if(error) { + component = this.modelManager.findItem(componentData.uuid); + component.setAppDataItem("installError", error); + } else { + component = this.modelManager.mapResponseItemsToLocalModels([componentData], ModelManager.MappingSourceDesktopInstalled)[0]; + component.setAppDataItem("installError", null); + } component.setDirty(true); - this.syncManager.sync("desktop_updateComponentComplete"); + this.syncManager.sync("onComponentInstallationComplete"); } /* Used to resolve "sn://" */ @@ -69,8 +72,8 @@ class DesktopManager { this.installationSyncHandler = handler; } - desktop_setOfflineComponentInstallationHandler(handler) { - this.componentInstallationHandler = handler; + desktop_setInstallComponentHandler(handler) { + this.installComponentHandler = handler; } desktop_setInitialDataLoadHandler(handler) { diff --git a/app/assets/stylesheets/app/_main.scss b/app/assets/stylesheets/app/_main.scss index 8dc27c5a5..45228e125 100644 --- a/app/assets/stylesheets/app/_main.scss +++ b/app/assets/stylesheets/app/_main.scss @@ -160,18 +160,20 @@ $footer-height: 32px; } > .add-button { - + $button-bg: #e9e9e9; + color: lighten($main-text-color, 40%); font-size: 18px; width: 45px; height: 24px; cursor: pointer; - background-color: #e9e9e9; + background-color: $button-bg; border-radius: 4px; font-weight: normal; text-align: center; &:hover { - background-color: rgba(#e9e9e9, 0.8); + background-color: darken($button-bg, 5%); + color: lighten($main-text-color, 40%); } } } diff --git a/app/assets/templates/directives/editor-menu.html.haml b/app/assets/templates/directives/editor-menu.html.haml index f6508d3af..7d309d19e 100644 --- a/app/assets/templates/directives/editor-menu.html.haml +++ b/app/assets/templates/directives/editor-menu.html.haml @@ -9,11 +9,8 @@ "circle" => "selectedEditor === editor && 'success'", "has-button" => "selectedEditor == editor || defaultEditor == editor", "button-text" => "defaultEditor == editor ? 'Undefault' : 'Set Default'", "button-action" => "toggleDefaultForEditor(editor)", "button-class" => "defaultEditor == editor ? 'warning' : 'info'"} - .row{"ng-if" => "component.conflict_of || offlineAvailableForComponent(editor)"} - .column - %strong.red.medium{"ng-if" => "editor.conflict_of"} Conflicted copy - .sublabel{"ng-if" => "offlineAvailableForComponent(editor)"} - Available Offline + .column{"ng-if" => "component.conflict_of"} + %strong.red.medium{"ng-if" => "editor.conflict_of"} Conflicted copy %a.no-decoration{"ng-if" => "editors.length == 0", "href" => "https://standardnotes.org/extensions", "target" => "blank"} %menu-row{"title" => "'Download More Editors'"} @@ -22,8 +19,5 @@ %h4.title Editor Stack %menu-row{"ng-repeat" => "component in stack", "ng-click" => "selectComponent($event, component)", "title" => "component.name", "circle" => "component.active ? 'success' : 'danger'"} - .row{"ng-if" => "component.conflict_of || offlineAvailableForComponent(component)"} - .column - %strong.red.medium{"ng-if" => "component.conflict_of"} Conflicted copy - .sublabel{"ng-if" => "offlineAvailableForComponent(component)"} - Available Offline + .column{"ng-if" => "component.conflict_of"} + %strong.red.medium{"ng-if" => "component.conflict_of"} Conflicted copy diff --git a/app/assets/templates/editor.html.haml b/app/assets/templates/editor.html.haml index d946b4e07..62c819776 100644 --- a/app/assets/templates/editor.html.haml +++ b/app/assets/templates/editor.html.haml @@ -22,13 +22,13 @@ .section .header %h4.title Note Options - %menu-row{"title" => "ctrl.note.pinned ? 'Unpin' : 'Pin'", "ng-click" => "ctrl.selectedMenuItem($event); ctrl.togglePin()"} - %menu-row{"title" => "ctrl.note.archived ? 'Unarchive' : 'Archive'", "ng-click" => "ctrl.selectedMenuItem($event); ctrl.toggleArchiveNote()"} + %menu-row{"title" => "ctrl.note.pinned ? 'Unpin' : 'Pin'", "ng-click" => "ctrl.selectedMenuItem($event, true); ctrl.togglePin()"} + %menu-row{"title" => "ctrl.note.archived ? 'Unarchive' : 'Archive'", "ng-click" => "ctrl.selectedMenuItem($event, true); ctrl.toggleArchiveNote()"} %menu-row{"title" => "'Delete'", "ng-click" => "ctrl.selectedMenuItem($event); ctrl.deleteNote()"} .section{"ng-if" => "!ctrl.selectedEditor"} .header - %h4.title Display + %h4.title Global Display %menu-row{"title" => "'Monospace Font'", "circle" => "ctrl.monospaceFont ? 'success' : 'default'", "ng-click" => "ctrl.selectedMenuItem($event, true); ctrl.toggleKey('monospaceFont')"} %menu-row{"title" => "'Spellcheck'", "circle" => "ctrl.spellcheck ? 'success' : 'default'", "ng-click" => "ctrl.selectedMenuItem($event, true); ctrl.toggleKey('spellcheck')"} diff --git a/app/assets/templates/footer.html.haml b/app/assets/templates/footer.html.haml index d06f0a86e..1f5e7243a 100644 --- a/app/assets/templates/footer.html.haml +++ b/app/assets/templates/footer.html.haml @@ -9,7 +9,7 @@ %account-menu{"ng-click" => "$event.stopPropagation()", "ng-if" => "ctrl.showAccountMenu", "on-successful-auth" => "ctrl.onAuthSuccess", "close-function" => "ctrl.closeAccountMenu"} .item - .label.title{"href" => "https://standardnotes.org/help", "target" => "_blank"} + %a.no-decoration.label.title{"href" => "https://standardnotes.org/help", "target" => "_blank"} Help .item.border diff --git a/package-lock.json b/package-lock.json index bbfd700e7..69b9a3d84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5781,9 +5781,9 @@ "dev": true }, "sn-stylekit": { - "version": "1.0.1192", - "resolved": "https://registry.npmjs.org/sn-stylekit/-/sn-stylekit-1.0.1192.tgz", - "integrity": "sha512-qvR1rPI1FeG+Us2+P+0XZ0kndd5D9gg93Xla8aqopNbJ3xB2vh3OXvl/3XRSL4xKNrG+4Ub7u5Xg/J5NPPNRoA==", + "version": "1.0.1195", + "resolved": "https://registry.npmjs.org/sn-stylekit/-/sn-stylekit-1.0.1195.tgz", + "integrity": "sha512-XPutiDkA0Jbf3fGHjC6avoWbMsLJKLOXnPJDpE2VFA2/HUf87sjyTvvhg8mrRT2IiE8Cr0gJFQr/ALnoP+u1EQ==", "dev": true }, "snake-case": { diff --git a/package.json b/package.json index f2ced494e..12f5b412f 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "karma-cli": "^1.0.1", "karma-jasmine": "^1.1.0", "karma-phantomjs-launcher": "^1.0.2", - "sn-stylekit": "^1.0.1192" + "sn-stylekit": "^1.0.1195" }, "license": "GPL-3.0" }