diff --git a/app/assets/javascripts/app/directives/views/componentView.js b/app/assets/javascripts/app/directives/views/componentView.js index 6ab682db7..28765d59d 100644 --- a/app/assets/javascripts/app/directives/views/componentView.js +++ b/app/assets/javascripts/app/directives/views/componentView.js @@ -58,15 +58,21 @@ class ComponentView { } $scope.reloadStatus = function() { + let component = $scope.component; $scope.reloading = true; let previouslyValid = $scope.componentValid; - $scope.componentValid = !$scope.component.valid_until || ($scope.component.valid_until && $scope.component.valid_until > new Date()); + + $scope.offlineRestricted = component.offlineOnly && !isDesktopApplication(); + + $scope.componentValid = !$scope.offlineRestricted && (!component.valid_until || (component.valid_until && component.valid_until > new Date())); + if($scope.componentValid !== previouslyValid) { if($scope.componentValid) { - componentManager.activateComponent($scope.component); + componentManager.activateComponent(component); } } + $timeout(() => { $scope.reloading = false; }, 500) diff --git a/app/assets/javascripts/app/services/componentManager.js b/app/assets/javascripts/app/services/componentManager.js index b12c6afe1..71979c82e 100644 --- a/app/assets/javascripts/app/services/componentManager.js +++ b/app/assets/javascripts/app/services/componentManager.js @@ -197,7 +197,7 @@ class ComponentManager { urlForComponent(component) { if(component.offlineOnly || (isDesktopApplication() && component.local_url)) { - return component.local_url.replace("sn://", this.desktopManager.getApplicationDataPath() + "/"); + return component.local_url && component.local_url.replace("sn://", this.desktopManager.getApplicationDataPath() + "/"); } else { return component.url || component.hosted_url; } @@ -402,6 +402,7 @@ class ComponentManager { // Allow handlers to be notified when a save begins and ends, to update the UI var saveMessage = Object.assign({}, message); saveMessage.action = response && response.error ? "save-error" : "save-success"; + this.replyToMessage(component, message, {error: response.error}) this.handleMessage(component, saveMessage); }); }); @@ -599,7 +600,7 @@ class ComponentManager { } return; } - + if(this.loggingEnabled) { console.log("Web|sendMessageToComponent", component, message); } diff --git a/app/assets/stylesheets/app/_modals.scss b/app/assets/stylesheets/app/_modals.scss index c63ddaa9a..c1d472e04 100644 --- a/app/assets/stylesheets/app/_modals.scss +++ b/app/assets/stylesheets/app/_modals.scss @@ -79,6 +79,11 @@ flex-grow: 1; display: flex; overflow: auto; + + .sn-component { + min-width: 100%; + } + iframe { flex: 1; width: 100%; diff --git a/app/assets/templates/directives/component-view.html.haml b/app/assets/templates/directives/component-view.html.haml index c5a000baa..8489d07c2 100644 --- a/app/assets/templates/directives/component-view.html.haml +++ b/app/assets/templates/directives/component-view.html.haml @@ -1,7 +1,7 @@ -.sn-component{"ng-if" => "!componentValid"} +.sn-component{"ng-if" => "!componentValid && !offlineRestricted"} .panel.static .content - .panel-section + .panel-section.stretch %h2.title Unable to load Standard Notes Extended %p Your Extended subscription expired on {{component.dateToLocalizedString(component.valid_until)}}. %p @@ -32,7 +32,26 @@ %a{"href" => "https://standardnotes.org/help", "target" => "_blank"} Help page. -%iframe{"ng-if" => "component && componentValid", +.sn-component{"ng-if" => "offlineRestricted"} + .panel.static + .content + .panel-section.stretch + %h2.title You have restricted this extension to be used offline only. + %p Offline extensions are not available in the Web app. + .panel-row + .panel-column + %p You can either: + %p + %ul + %li Enable the Hosted option for this extension by opening the 'Extensions' menu and toggling 'Use hosted when local is unavailable' under this extension's options. Then press Reload below. + %li Use the Desktop application. + .panel-row + .button.info{"ng-if" => "!reloading", "ng-click" => "reloadStatus()"} + .label Reload + .spinner.info.small{"ng-if" => "reloading"} + + +%iframe{"ng-if" => "component && componentValid && !offlineRestricted", "ng-attr-id" => "component-{{component.uuid}}", "ng-src" => "{{getUrl() | trusted}}", "frameBorder" => "0", "sandbox" => "allow-scripts allow-top-navigation-by-user-activation allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-modals allow-forms",