Merged master
This commit is contained in:
@@ -545,11 +545,17 @@ angular.module('app')
|
|||||||
} else if(component.area == "editor-editor") {
|
} else if(component.area == "editor-editor") {
|
||||||
// An editor is already active, ensure the potential replacement is explicitely enabled for this item
|
// An editor is already active, ensure the potential replacement is explicitely enabled for this item
|
||||||
// We also check if the selectedEditor is active. If it's inactive, we want to treat it as an external reference wishing to deactivate this editor (i.e componentView)
|
// We also check if the selectedEditor is active. If it's inactive, we want to treat it as an external reference wishing to deactivate this editor (i.e componentView)
|
||||||
if(this.selectedEditor && this.selectedEditor.active) {
|
if(this.selectedEditor && this.selectedEditor == component && component.active == false) {
|
||||||
if(component.isExplicitlyEnabledForItem(this.note)) {
|
this.selectedEditor = null;
|
||||||
this.selectedEditor = component;
|
}
|
||||||
|
else if(this.selectedEditor) {
|
||||||
|
if(this.selectedEditor.active) {
|
||||||
|
if(component.isExplicitlyEnabledForItem(this.note)) {
|
||||||
|
this.selectedEditor = component;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// If no selected editor, let's see if the incoming one is a candidate
|
// If no selected editor, let's see if the incoming one is a candidate
|
||||||
if(component.active && this.note && (component.isExplicitlyEnabledForItem(this.note) || component.isDefaultEditor())) {
|
if(component.active && this.note && (component.isExplicitlyEnabledForItem(this.note) || component.isDefaultEditor())) {
|
||||||
this.selectedEditor = component;
|
this.selectedEditor = component;
|
||||||
|
|||||||
@@ -160,8 +160,10 @@ class AuthManager extends SFAuthManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
syncUserPreferences() {
|
syncUserPreferences() {
|
||||||
this.userPreferences.setDirty(true);
|
if(this.userPreferences) {
|
||||||
this.$rootScope.sync();
|
this.userPreferences.setDirty(true);
|
||||||
|
this.$rootScope.sync();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getUserPrefValue(key, defaultValue) {
|
getUserPrefValue(key, defaultValue) {
|
||||||
|
|||||||
@@ -47,7 +47,11 @@ class ComponentManager {
|
|||||||
if(this.loggingEnabled) {
|
if(this.loggingEnabled) {
|
||||||
console.log("Web app: received message", event);
|
console.log("Web app: received message", event);
|
||||||
}
|
}
|
||||||
this.handleMessage(this.componentForSessionKey(event.data.sessionKey), event.data);
|
|
||||||
|
// Make sure this message is for us
|
||||||
|
if(event.data.sessionKey) {
|
||||||
|
this.handleMessage(this.componentForSessionKey(event.data.sessionKey), event.data);
|
||||||
|
}
|
||||||
}.bind(this), false);
|
}.bind(this), false);
|
||||||
|
|
||||||
this.modelManager.addItemSyncObserver("component-manager", "*", (allItems, validItems, deletedItems, source, sourceKey) => {
|
this.modelManager.addItemSyncObserver("component-manager", "*", (allItems, validItems, deletedItems, source, sourceKey) => {
|
||||||
@@ -251,6 +255,11 @@ class ComponentManager {
|
|||||||
// Native extension running in web, prefix current host
|
// Native extension running in web, prefix current host
|
||||||
origin = window.location.href + origin;
|
origin = window.location.href + origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!component.window) {
|
||||||
|
alert(`Standard Notes is trying to communicate with ${component.name}, but an error is occurring. Please restart this extension and try again.`)
|
||||||
|
}
|
||||||
|
|
||||||
component.window.postMessage(message, origin);
|
component.window.postMessage(message, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -285,9 +294,8 @@ class ComponentManager {
|
|||||||
handleMessage(component, message) {
|
handleMessage(component, message) {
|
||||||
|
|
||||||
if(!component) {
|
if(!component) {
|
||||||
if(this.loggingEnabled) {
|
console.log("Component not defined for message, returning", message);
|
||||||
console.log("Component not defined, returning");
|
alert("An extension is trying to communicate with Standard Notes, but there is an error establishing a bridge. Please restart the app and try again.");
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -751,13 +759,28 @@ class ComponentManager {
|
|||||||
this.postActiveThemeToComponent(component);
|
this.postActiveThemeToComponent(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
activateComponent(component, dontSync = false) {
|
/* Performs func in timeout, but syncronously, if used `await waitTimeout` */
|
||||||
|
async waitTimeout(func) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.timeout(() => {
|
||||||
|
func();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async activateComponent(component, dontSync = false) {
|
||||||
var didChange = component.active != true;
|
var didChange = component.active != true;
|
||||||
|
|
||||||
component.active = true;
|
component.active = true;
|
||||||
for(var handler of this.handlers) {
|
for(var handler of this.handlers) {
|
||||||
if(handler.areas.includes(component.area) || handler.areas.includes("*")) {
|
if(handler.areas.includes(component.area) || handler.areas.includes("*")) {
|
||||||
handler.activationHandler && handler.activationHandler(component);
|
// We want to run the handler in a $timeout so the UI updates, but we also don't want it to run asyncronously
|
||||||
|
// so that the steps below this one are run before the handler. So we run in a waitTimeout.
|
||||||
|
await this.waitTimeout(() => {
|
||||||
|
handler.activationHandler && handler.activationHandler(component);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -775,14 +798,16 @@ class ComponentManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deactivateComponent(component, dontSync = false) {
|
async deactivateComponent(component, dontSync = false) {
|
||||||
var didChange = component.active != false;
|
var didChange = component.active != false;
|
||||||
component.active = false;
|
component.active = false;
|
||||||
component.sessionKey = null;
|
component.sessionKey = null;
|
||||||
|
|
||||||
for(var handler of this.handlers) {
|
for(let handler of this.handlers) {
|
||||||
if(handler.areas.includes(component.area) || handler.areas.includes("*")) {
|
if(handler.areas.includes(component.area) || handler.areas.includes("*")) {
|
||||||
handler.activationHandler && handler.activationHandler(component);
|
await this.waitTimeout(() => {
|
||||||
|
handler.activationHandler && handler.activationHandler(component);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -806,15 +831,17 @@ class ComponentManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
reloadComponent(component) {
|
async reloadComponent(component) {
|
||||||
//
|
//
|
||||||
// Do soft deactivate
|
// Do soft deactivate
|
||||||
//
|
//
|
||||||
component.active = false;
|
component.active = false;
|
||||||
|
|
||||||
for(var handler of this.handlers) {
|
for(let handler of this.handlers) {
|
||||||
if(handler.areas.includes(component.area) || handler.areas.includes("*")) {
|
if(handler.areas.includes(component.area) || handler.areas.includes("*")) {
|
||||||
handler.activationHandler && handler.activationHandler(component);
|
await this.waitTimeout(() => {
|
||||||
|
handler.activationHandler && handler.activationHandler(component);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -834,11 +861,13 @@ class ComponentManager {
|
|||||||
// Do soft activate
|
// Do soft activate
|
||||||
//
|
//
|
||||||
|
|
||||||
this.timeout(() => {
|
this.timeout(async () => {
|
||||||
component.active = true;
|
component.active = true;
|
||||||
for(var handler of this.handlers) {
|
for(var handler of this.handlers) {
|
||||||
if(handler.areas.includes(component.area) || handler.areas.includes("*")) {
|
if(handler.areas.includes(component.area) || handler.areas.includes("*")) {
|
||||||
handler.activationHandler && handler.activationHandler(component);
|
await this.waitTimeout(() => {
|
||||||
|
handler.activationHandler && handler.activationHandler(component);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user