mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Allow cancelable on some custom javascript events.
This commit is contained in:
parent
9f2c06bcd3
commit
80eed213d9
5 changed files with 57 additions and 46 deletions
|
|
@ -27,7 +27,9 @@ export const
|
||||||
return el;
|
return el;
|
||||||
},
|
},
|
||||||
|
|
||||||
fireEvent = (name, detail) => dispatchEvent(new CustomEvent(name, {detail:detail})),
|
fireEvent = (name, detail, cancelable) => dispatchEvent(
|
||||||
|
new CustomEvent(name, {detail:detail, cancelable: !!cancelable})
|
||||||
|
),
|
||||||
|
|
||||||
formFieldFocused = () => doc.activeElement && doc.activeElement.matches('input,textarea'),
|
formFieldFocused = () => doc.activeElement && doc.activeElement.matches('input,textarea'),
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -173,59 +173,62 @@ const
|
||||||
screenName = defaultScreenName;
|
screenName = defaultScreenName;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close all popups
|
if (fireEvent('sm-show-screen', screenName, 1)) {
|
||||||
for (let vm of visiblePopups) {
|
|
||||||
false === vm.onClose() || vm.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (screenName) {
|
// Close all popups
|
||||||
vmScreen = screen(screenName);
|
for (let vm of visiblePopups) {
|
||||||
if (!vmScreen) {
|
false === vm.onClose() || vm.close();
|
||||||
vmScreen = screen(defaultScreenName);
|
|
||||||
if (vmScreen) {
|
|
||||||
subPart = screenName + '/' + subPart;
|
|
||||||
screenName = defaultScreenName;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vmScreen && vmScreen.__started) {
|
if (screenName) {
|
||||||
isSameScreen = currentScreen && vmScreen === currentScreen;
|
vmScreen = screen(screenName);
|
||||||
|
if (!vmScreen) {
|
||||||
if (!vmScreen.__builded) {
|
vmScreen = screen(defaultScreenName);
|
||||||
vmScreen.__builded = true;
|
if (vmScreen) {
|
||||||
|
subPart = screenName + '/' + subPart;
|
||||||
vmScreen.viewModels.forEach(ViewModelClass =>
|
screenName = defaultScreenName;
|
||||||
buildViewModel(ViewModelClass, vmScreen)
|
}
|
||||||
);
|
|
||||||
|
|
||||||
vmScreen.onBuild && vmScreen.onBuild();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(() => {
|
if (vmScreen && vmScreen.__started) {
|
||||||
// hide screen
|
isSameScreen = currentScreen && vmScreen === currentScreen;
|
||||||
if (currentScreen && !isSameScreen) {
|
|
||||||
hideScreen(currentScreen);
|
if (!vmScreen.__builded) {
|
||||||
|
vmScreen.__builded = true;
|
||||||
|
|
||||||
|
vmScreen.viewModels.forEach(ViewModelClass =>
|
||||||
|
buildViewModel(ViewModelClass, vmScreen)
|
||||||
|
);
|
||||||
|
|
||||||
|
vmScreen.onBuild && vmScreen.onBuild();
|
||||||
}
|
}
|
||||||
// --
|
|
||||||
|
|
||||||
currentScreen = vmScreen;
|
setTimeout(() => {
|
||||||
|
// hide screen
|
||||||
|
if (currentScreen && !isSameScreen) {
|
||||||
|
hideScreen(currentScreen);
|
||||||
|
}
|
||||||
|
// --
|
||||||
|
|
||||||
// show screen
|
currentScreen = vmScreen;
|
||||||
if (!isSameScreen) {
|
|
||||||
vmScreen.onShow && vmScreen.onShow();
|
|
||||||
|
|
||||||
forEachViewModel(vmScreen, (vm, dom) => {
|
// show screen
|
||||||
vm.beforeShow && vm.beforeShow();
|
if (!isSameScreen) {
|
||||||
i18nToNodes(dom);
|
vmScreen.onShow && vmScreen.onShow();
|
||||||
dom.hidden = false;
|
|
||||||
vm.onShow && vm.onShow();
|
|
||||||
autofocus(dom);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// --
|
|
||||||
|
|
||||||
vmScreen.__cross && vmScreen.__cross.parse(subPart);
|
forEachViewModel(vmScreen, (vm, dom) => {
|
||||||
}, 1);
|
vm.beforeShow && vm.beforeShow();
|
||||||
|
i18nToNodes(dom);
|
||||||
|
dom.hidden = false;
|
||||||
|
vm.onShow && vm.onShow();
|
||||||
|
autofocus(dom);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// --
|
||||||
|
|
||||||
|
vmScreen.__cross && vmScreen.__cross.parse(subPart);
|
||||||
|
}, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ export class AdminLoginView extends AbstractViewLogin {
|
||||||
submitCommand(self, event) {
|
submitCommand(self, event) {
|
||||||
let form = event.target.form,
|
let form = event.target.form,
|
||||||
data = new FormData(form),
|
data = new FormData(form),
|
||||||
valid = form.reportValidity() && fireEvent('sm-admin-login', data);
|
valid = form.reportValidity() && fireEvent('sm-admin-login', data, 1);
|
||||||
|
|
||||||
this.loginError(!this.login());
|
this.loginError(!this.login());
|
||||||
this.passwordError(!this.password());
|
this.passwordError(!this.password());
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ export class LoginUserView extends AbstractViewLogin {
|
||||||
submitCommand(self, event) {
|
submitCommand(self, event) {
|
||||||
let form = event.target.form,
|
let form = event.target.form,
|
||||||
data = new FormData(form),
|
data = new FormData(form),
|
||||||
valid = form.reportValidity() && fireEvent('sm-user-login', data);
|
valid = form.reportValidity() && fireEvent('sm-user-login', data, 1);
|
||||||
|
|
||||||
this.emailError(!this.email());
|
this.emailError(!this.email());
|
||||||
this.passwordError(!this.password());
|
this.passwordError(!this.password());
|
||||||
|
|
|
||||||
|
|
@ -383,9 +383,15 @@ $Plugin->addHook('hook.name', 'functionName');
|
||||||
|
|
||||||
### sm-admin-login
|
### sm-admin-login
|
||||||
event.detail = FormData
|
event.detail = FormData
|
||||||
|
cancelable using preventDefault()
|
||||||
### sm-admin-login-response
|
### sm-admin-login-response
|
||||||
event.detail = { error: int, data: {JSON response} }
|
event.detail = { error: int, data: {JSON response} }
|
||||||
### sm-user-login
|
### sm-user-login
|
||||||
event.detail = FormData
|
event.detail = FormData
|
||||||
|
cancelable using preventDefault()
|
||||||
### sm-user-login-response
|
### sm-user-login-response
|
||||||
event.detail = { error: int, data: {JSON response} }
|
event.detail = { error: int, data: {JSON response} }
|
||||||
|
|
||||||
|
### sm-show-screen
|
||||||
|
event.detail = 'screenname'
|
||||||
|
cancelable using preventDefault()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue