mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 07:35:55 +08:00
Allow cancelable
on some custom javascript events.
This commit is contained in:
parent
9f2c06bcd3
commit
80eed213d9
|
@ -27,7 +27,9 @@ export const
|
|||
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'),
|
||||
|
||||
|
|
|
@ -173,59 +173,62 @@ const
|
|||
screenName = defaultScreenName;
|
||||
}
|
||||
|
||||
// Close all popups
|
||||
for (let vm of visiblePopups) {
|
||||
false === vm.onClose() || vm.close();
|
||||
}
|
||||
if (fireEvent('sm-show-screen', screenName, 1)) {
|
||||
|
||||
if (screenName) {
|
||||
vmScreen = screen(screenName);
|
||||
if (!vmScreen) {
|
||||
vmScreen = screen(defaultScreenName);
|
||||
if (vmScreen) {
|
||||
subPart = screenName + '/' + subPart;
|
||||
screenName = defaultScreenName;
|
||||
}
|
||||
// Close all popups
|
||||
for (let vm of visiblePopups) {
|
||||
false === vm.onClose() || vm.close();
|
||||
}
|
||||
|
||||
if (vmScreen && vmScreen.__started) {
|
||||
isSameScreen = currentScreen && vmScreen === currentScreen;
|
||||
|
||||
if (!vmScreen.__builded) {
|
||||
vmScreen.__builded = true;
|
||||
|
||||
vmScreen.viewModels.forEach(ViewModelClass =>
|
||||
buildViewModel(ViewModelClass, vmScreen)
|
||||
);
|
||||
|
||||
vmScreen.onBuild && vmScreen.onBuild();
|
||||
if (screenName) {
|
||||
vmScreen = screen(screenName);
|
||||
if (!vmScreen) {
|
||||
vmScreen = screen(defaultScreenName);
|
||||
if (vmScreen) {
|
||||
subPart = screenName + '/' + subPart;
|
||||
screenName = defaultScreenName;
|
||||
}
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
// hide screen
|
||||
if (currentScreen && !isSameScreen) {
|
||||
hideScreen(currentScreen);
|
||||
if (vmScreen && vmScreen.__started) {
|
||||
isSameScreen = currentScreen && vmScreen === 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
|
||||
if (!isSameScreen) {
|
||||
vmScreen.onShow && vmScreen.onShow();
|
||||
currentScreen = vmScreen;
|
||||
|
||||
forEachViewModel(vmScreen, (vm, dom) => {
|
||||
vm.beforeShow && vm.beforeShow();
|
||||
i18nToNodes(dom);
|
||||
dom.hidden = false;
|
||||
vm.onShow && vm.onShow();
|
||||
autofocus(dom);
|
||||
});
|
||||
}
|
||||
// --
|
||||
// show screen
|
||||
if (!isSameScreen) {
|
||||
vmScreen.onShow && vmScreen.onShow();
|
||||
|
||||
vmScreen.__cross && vmScreen.__cross.parse(subPart);
|
||||
}, 1);
|
||||
forEachViewModel(vmScreen, (vm, dom) => {
|
||||
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) {
|
||||
let form = event.target.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.passwordError(!this.password());
|
||||
|
|
|
@ -90,7 +90,7 @@ export class LoginUserView extends AbstractViewLogin {
|
|||
submitCommand(self, event) {
|
||||
let form = event.target.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.passwordError(!this.password());
|
||||
|
|
|
@ -383,9 +383,15 @@ $Plugin->addHook('hook.name', 'functionName');
|
|||
|
||||
### sm-admin-login
|
||||
event.detail = FormData
|
||||
cancelable using preventDefault()
|
||||
### sm-admin-login-response
|
||||
event.detail = { error: int, data: {JSON response} }
|
||||
### sm-user-login
|
||||
event.detail = FormData
|
||||
cancelable using preventDefault()
|
||||
### sm-user-login-response
|
||||
event.detail = { error: int, data: {JSON response} }
|
||||
|
||||
### sm-show-screen
|
||||
event.detail = 'screenname'
|
||||
cancelable using preventDefault()
|
||||
|
|
Loading…
Reference in a new issue