diff --git a/app/assets/javascripts/app/frontend/controllers/editor.js b/app/assets/javascripts/app/frontend/controllers/editor.js index 0b04ea0c2..009da5dd7 100644 --- a/app/assets/javascripts/app/frontend/controllers/editor.js +++ b/app/assets/javascripts/app/frontend/controllers/editor.js @@ -58,7 +58,7 @@ angular.module('app.frontend') // Activate new editor if it's different from the one currently activated if(associatedEditor && associatedEditor != this.editorComponent) { - componentManager.activateComponent(associatedEditor); + this.enableComponent(associatedEditor); } this.editorComponent = associatedEditor; @@ -85,6 +85,11 @@ angular.module('app.frontend') return editor; } } + + // No editor found for note. Use default editor, if note does not prefer system editor + if(!note.getAppDataItem("prefersPlainEditor")) { + return editors.filter((e) => {return e.isDefaultEditor()})[0]; + } } this.selectedEditor = function(editorComponent) { @@ -98,7 +103,15 @@ angular.module('app.frontend') } if(editorComponent) { - this.enableComponentForCurrentItem(editorComponent); + this.note.setAppDataItem("prefersPlainEditor", false); + this.note.setDirty(true); + this.enableComponent(editorComponent); + this.associateComponentWithCurrentItem(editorComponent); + } else { + // Note prefers plain editor + this.note.setAppDataItem("prefersPlainEditor", true); + this.note.setDirty(true); + syncManager.sync(); } this.editorComponent = editorComponent; @@ -410,12 +423,15 @@ angular.module('app.frontend') componentManager.contextItemDidChangeInArea("editor-editor"); } - this.enableComponentForCurrentItem = function(component) { + this.enableComponent = function(component) { componentManager.activateComponent(component); - componentManager.associateComponentWithItem(component, this.note); componentManager.setEventFlowForComponent(component, 1); } + this.associateComponentWithCurrentItem = function(component) { + componentManager.associateComponentWithItem(component, this.note); + } + let alertKey = "displayed-component-disable-alert"; this.disableComponentForCurrentItem = function(component, showAlert) { componentManager.disassociateComponentWithItem(component, this.note); diff --git a/app/assets/javascripts/app/frontend/models/app/component.js b/app/assets/javascripts/app/frontend/models/app/component.js index d7fa7f48f..ac0c30d0e 100644 --- a/app/assets/javascripts/app/frontend/models/app/component.js +++ b/app/assets/javascripts/app/frontend/models/app/component.js @@ -61,6 +61,14 @@ class Component extends Item { return "SN|Component"; } + isEditor() { + return this.area == "editor-editor"; + } + + isDefaultEditor() { + return this.getAppDataItem("defaultEditor") == true; + } + /* An associative component depends on being explicitly activated for a given item, compared to a dissaciative component, diff --git a/app/assets/javascripts/app/services/directives/views/globalExtensionsMenu.js b/app/assets/javascripts/app/services/directives/views/globalExtensionsMenu.js index 42bfa6f00..f046d48d5 100644 --- a/app/assets/javascripts/app/services/directives/views/globalExtensionsMenu.js +++ b/app/assets/javascripts/app/services/directives/views/globalExtensionsMenu.js @@ -133,6 +133,23 @@ class GlobalExtensionsMenu { } } + $scope.makeEditorDefault = function(component) { + var currentDefault = componentManager.componentsForArea("editor-editor").filter((e) => {return e.isDefaultEditor()})[0]; + if(currentDefault) { + currentDefault.setAppDataItem("defaultEditor", false); + currentDefault.setDirty(true); + } + component.setAppDataItem("defaultEditor", true); + component.setDirty(true); + syncManager.sync(); + } + + $scope.removeEditorDefault = function(component) { + component.setAppDataItem("defaultEditor", false); + component.setDirty(true); + syncManager.sync(); + } + // Installation $scope.submitInstallLink = function() { diff --git a/app/assets/templates/frontend/directives/editor-menu.html.haml b/app/assets/templates/frontend/directives/editor-menu.html.haml index b028399c7..cad2f2d0b 100644 --- a/app/assets/templates/frontend/directives/editor-menu.html.haml +++ b/app/assets/templates/frontend/directives/editor-menu.html.haml @@ -14,5 +14,5 @@ %li.menu-item{"ng-repeat" => "editor in editors", "ng-click" => "selectEditor($event, editor)"} %strong.red.medium{"ng-if" => "editor.conflict_of"} Conflicted copy %label.menu-item-title + %span.inline.tinted.mr-10{"ng-if" => "selectedEditor === editor"} ✓ {{editor.name}} - %span.inline.tinted{"style" => "margin-left: 8px;", "ng-if" => "selectedEditor === editor"} ✓ diff --git a/app/assets/templates/frontend/directives/global-extensions-menu.html.haml b/app/assets/templates/frontend/directives/global-extensions-menu.html.haml index 4183d255b..fe8965304 100644 --- a/app/assets/templates/frontend/directives/global-extensions-menu.html.haml +++ b/app/assets/templates/frontend/directives/global-extensions-menu.html.haml @@ -99,8 +99,13 @@ %h3 %input.bold{"ng-if" => "component.rename", "ng-model" => "component.tempName", "ng-keyup" => "$event.keyCode == 13 && submitExtensionRename(component);", "mb-autofocus" => "true", "should-focus" => "true"} %span{"ng-if" => "!component.rename"} {{component.name}} - %a{"ng-if" => "!componentManager.isComponentActive(component)", "ng-click" => "componentManager.activateComponent(component); $event.stopPropagation();"} Activate - %a{"ng-if" => "componentManager.isComponentActive(component)", "ng-click" => "componentManager.deactivateComponent(component); $event.stopPropagation();"} Deactivate + + %div{"ng-if" => "component.isEditor()"} + %a{"ng-if" => "!component.isDefaultEditor()", "ng-click" => "makeEditorDefault(component); $event.stopPropagation();"} Make Default + %a{"ng-if" => "component.isDefaultEditor()", "ng-click" => "removeEditorDefault(component); $event.stopPropagation();"} Remove Default + %div{"ng-if" => "!component.isEditor()"} + %a{"ng-if" => "!componentManager.isComponentActive(component)", "ng-click" => "componentManager.activateComponent(component); $event.stopPropagation();"} Activate + %a{"ng-if" => "componentManager.isComponentActive(component)", "ng-click" => "componentManager.deactivateComponent(component); $event.stopPropagation();"} Deactivate .mt-3{"ng-if" => "component.showDetails"} .link-group %a{"ng-click" => "renameExtension(component); $event.stopPropagation();"} Rename