mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-29 12:09:20 +03:00
Bugfix boostrap alerts.less was accidentally removed
Bugfix Date.fromNow('past'/'future') reversed
Replace Events[pub/sub]('interval.*') with setInterval()
Events[pub/sub] to native
Cleanup knockout extensions
Replaced momentToNode with proper HTML5 <time>
Cleanup Momentor
This commit is contained in:
parent
6541a1de7c
commit
9f1ea1a0fd
44 changed files with 539 additions and 1126 deletions
|
|
@ -43,7 +43,6 @@ import MessageStore from 'Stores/User/Message';
|
|||
import Remote from 'Remote/User/Ajax';
|
||||
|
||||
import * as Settings from 'Storage/Settings';
|
||||
import * as Events from 'Common/Events';
|
||||
|
||||
import { ComposeAttachmentModel } from 'Model/ComposeAttachment';
|
||||
|
||||
|
|
@ -164,7 +163,9 @@ class ComposePopupView extends AbstractViewNext {
|
|||
|
||||
this.savedTime = ko.observable(0);
|
||||
this.savedTimeText = ko.computed(() =>
|
||||
0 < this.savedTime() ? i18n('COMPOSE/SAVED_TIME', { 'TIME': momentorFormat(this.savedTime() - 1, 'LT') }) : ''
|
||||
this.savedTime()
|
||||
? i18n('COMPOSE/SAVED_TIME', { 'TIME': this.savedTime().format('LT') })
|
||||
: ''
|
||||
);
|
||||
|
||||
this.emptyToError = ko.observable(false);
|
||||
|
|
@ -300,7 +301,7 @@ class ComposePopupView extends AbstractViewNext {
|
|||
this.sendMessageResponse = this.sendMessageResponse.bind(this);
|
||||
this.saveMessageResponse = this.saveMessageResponse.bind(this);
|
||||
|
||||
Events.sub('interval.2m', () => {
|
||||
setInterval(() => {
|
||||
if (
|
||||
this.modalVisibility() &&
|
||||
!FolderStore.draftFolderNotEnabled() &&
|
||||
|
|
@ -312,7 +313,7 @@ class ComposePopupView extends AbstractViewNext {
|
|||
) {
|
||||
this.saveCommand();
|
||||
}
|
||||
});
|
||||
}, 120000);
|
||||
|
||||
this.showCc.subscribe(this.resizerTrigger);
|
||||
this.showBcc.subscribe(this.resizerTrigger);
|
||||
|
|
@ -326,7 +327,7 @@ class ComposePopupView extends AbstractViewNext {
|
|||
// debounce
|
||||
var d, fn = this.tryToClosePopup.bind(this);
|
||||
this.tryToClosePopup = ()=>{
|
||||
d && clearTimeout(d);
|
||||
clearTimeout(d);
|
||||
d = setTimeout(fn, 200);
|
||||
};
|
||||
|
||||
|
|
@ -667,7 +668,7 @@ class ComposePopupView extends AbstractViewNext {
|
|||
this.draftFolder(oData.Result.NewFolder);
|
||||
this.draftUid(oData.Result.NewUid);
|
||||
|
||||
this.savedTime(Math.round(new Date().getTime() / 1000));
|
||||
this.savedTime(new Date);
|
||||
|
||||
if (this.bFromDraft) {
|
||||
setFolderHash(this.draftFolder(), '');
|
||||
|
|
@ -722,15 +723,9 @@ class ComposePopupView extends AbstractViewNext {
|
|||
}
|
||||
|
||||
converSignature(signature) {
|
||||
let limit = 10,
|
||||
fromLine = '';
|
||||
|
||||
const moments = [],
|
||||
momentRegx = /{{MOMENT:([^}]+)}}/g;
|
||||
|
||||
signature = signature.replace(/[\r]/g, '');
|
||||
|
||||
fromLine = this.oLastMessage ? this.emailArrayToStringLineHelper(this.oLastMessage.from, true) : '';
|
||||
let fromLine = this.oLastMessage ? this.emailArrayToStringLineHelper(this.oLastMessage.from, true) : '';
|
||||
if (fromLine) {
|
||||
signature = signature.replace(/{{FROM-FULL}}/g, fromLine);
|
||||
|
||||
|
|
@ -748,36 +743,14 @@ class ComposePopupView extends AbstractViewNext {
|
|||
signature = signature.replace(/{{FROM-FULL}}/g, '');
|
||||
|
||||
if (signature.includes('{{DATE}}')) {
|
||||
signature = signature.replace(/{{DATE}}/g, momentorFormat(0, 'llll'));
|
||||
signature = signature.replace(/{{DATE}}/g, new Date().format('LLLL'));
|
||||
}
|
||||
|
||||
if (signature.includes('{{TIME}}')) {
|
||||
signature = signature.replace(/{{TIME}}/g, momentorFormat(0, 'LT'));
|
||||
signature = signature.replace(/{{TIME}}/g, new Date().format('LT'));
|
||||
}
|
||||
if (signature.includes('{{MOMENT:')) {
|
||||
try {
|
||||
let match = null;
|
||||
while (null !== (match = momentRegx.exec(signature))) {
|
||||
// eslint-disable-line no-cond-assign
|
||||
if (match && match[0] && match[1]) {
|
||||
moments.push([match[0], match[1]]);
|
||||
}
|
||||
|
||||
limit -= 1;
|
||||
if (0 === limit) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (moments) {
|
||||
moments.forEach(data => {
|
||||
signature = signature.replace(data[0], momentorFormat(0, data[1]));
|
||||
});
|
||||
}
|
||||
|
||||
signature = signature.replace(/{{MOMENT:[^}]+}}/g, '');
|
||||
} catch (e) {} // eslint-disable-line no-empty
|
||||
}
|
||||
signature = signature.replace(/{{MOMENT:[^}]+}}/g, '');
|
||||
|
||||
return signature;
|
||||
}
|
||||
|
|
@ -1244,11 +1217,10 @@ class ComposePopupView extends AbstractViewNext {
|
|||
return false;
|
||||
});
|
||||
|
||||
Events.sub('window.resize.real', this.resizerTrigger);
|
||||
var d, o = this;
|
||||
Events.sub('window.resize.real', ()=>{
|
||||
addEventListener('resize.real', ()=>{
|
||||
// debounce
|
||||
d && clearTimeout(d);
|
||||
clearTimeout(d);
|
||||
d = setTimeout(o.resizerTrigger, 50);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ class FolderSystemPopupView extends AbstractViewNext {
|
|||
},
|
||||
fSaveSystemFolders = ()=>{
|
||||
// debounce
|
||||
d && clearTimeout(d);
|
||||
clearTimeout(d);
|
||||
d = setTimeout(()=>{
|
||||
fSetSystemFolders();
|
||||
Remote.saveSystemFolders(()=>{}, {
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ class PluginPopupView extends AbstractViewNext {
|
|||
var d, fn = this.tryToClosePopup.bind(this);
|
||||
this.tryToClosePopup = ()=>{
|
||||
// debounce
|
||||
d && clearTimeout(d);
|
||||
clearTimeout(d);
|
||||
d = setTimeout(fn, 200);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import MessageStore from 'Stores/User/Message';
|
|||
import { Capa, KeyState } from 'Common/Enums';
|
||||
import { settings } from 'Common/Links';
|
||||
|
||||
import * as Events from 'Common/Events';
|
||||
import * as Settings from 'Storage/Settings';
|
||||
|
||||
import { getApp } from 'Helper/Apps/User';
|
||||
|
|
@ -40,12 +39,12 @@ class AbstractSystemDropDownUserView extends AbstractViewNext {
|
|||
|
||||
this.addAccountClick = this.addAccountClick.bind(this);
|
||||
|
||||
Events.sub('audio.stop', () => AppStore.currentAudio(''));
|
||||
Events.sub('audio.start', (name) => AppStore.currentAudio(name));
|
||||
addEventListener('audio.stop', () => AppStore.currentAudio(''));
|
||||
addEventListener('audio.start', e => AppStore.currentAudio(e.detail));
|
||||
}
|
||||
|
||||
stopPlay() {
|
||||
Events.pub('audio.api.stop');
|
||||
dispatchEvent(new CustomEvent('audio.api.stop'));
|
||||
}
|
||||
|
||||
accountClick(account, event) {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import { computedPagenatorHelper, draggablePlace, friendlySize } from 'Common/Ut
|
|||
|
||||
import { mailBox, append } from 'Common/Links';
|
||||
import { Selector } from 'Common/Selector';
|
||||
import * as Events from 'Common/Events';
|
||||
|
||||
import { i18n, initOnStartOrLangChange } from 'Common/Translator';
|
||||
|
||||
|
|
@ -238,15 +237,17 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
this.goToUpUpOrDownDown(v);
|
||||
});
|
||||
|
||||
Events.sub('mailbox.message-list.selector.go-down', (select) => {
|
||||
this.selector.goDown(select);
|
||||
addEventListener('mailbox.message-list.selector.go-down', e => {
|
||||
this.selector.goDown(e.detail);
|
||||
});
|
||||
|
||||
Events.sub('mailbox.message-list.selector.go-up', (select) => {
|
||||
this.selector.goUp(select);
|
||||
addEventListener('mailbox.message-list.selector.go-up', e => {
|
||||
this.selector.goUp(e.detail);
|
||||
});
|
||||
|
||||
Events.sub('mailbox.message.show', (sFolder, sUid) => {
|
||||
addEventListener('mailbox.message.show', e => {
|
||||
const sFolder = e.detail.Folder, sUid = e.detail.Uid;
|
||||
|
||||
const message = this.messageList().find(
|
||||
item => item && sFolder === item.folderFullNameRaw && sUid === item.uid
|
||||
);
|
||||
|
|
@ -781,7 +782,7 @@ class MessageListMailBoxUserView extends AbstractViewNext {
|
|||
initShortcuts() {
|
||||
key('enter', KeyState.MessageList, () => {
|
||||
if (this.message() && this.useAutoSelect()) {
|
||||
Events.pub('mailbox.message-view.toggle-full-screen');
|
||||
dispatchEvent(new CustomEvent('mailbox.message-view.toggle-full-screen'));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ import {
|
|||
} from 'Common/Utils';
|
||||
|
||||
import Audio from 'Common/Audio';
|
||||
import * as Events from 'Common/Events';
|
||||
|
||||
import { i18n } from 'Common/Translator';
|
||||
import { attachmentDownload } from 'Common/Links';
|
||||
|
|
@ -328,7 +327,7 @@ class MessageViewMailBoxUserView extends AbstractViewNext {
|
|||
() => MessageStore.messageListCompleteLoadingThrottle() || MessageStore.messageLoadingThrottle()
|
||||
);
|
||||
|
||||
Events.sub('mailbox.message-view.toggle-full-screen', () => {
|
||||
addEventListener('mailbox.message-view.toggle-full-screen', () => {
|
||||
this.toggleFullScreen();
|
||||
});
|
||||
|
||||
|
|
@ -350,12 +349,16 @@ class MessageViewMailBoxUserView extends AbstractViewNext {
|
|||
|
||||
@command((self) => !self.messageListAndMessageViewLoading())
|
||||
goUpCommand() {
|
||||
Events.pub('mailbox.message-list.selector.go-up', [Layout.NoPreview === this.layout() ? !!this.message() : true]);
|
||||
dispatchEvent(new CustomEvent('mailbox.message-list.selector.go-up',
|
||||
{detail:Layout.NoPreview === this.layout() ? !!this.message() : true}
|
||||
));
|
||||
}
|
||||
|
||||
@command((self) => !self.messageListAndMessageViewLoading())
|
||||
goDownCommand() {
|
||||
Events.pub('mailbox.message-list.selector.go-down', [Layout.NoPreview === this.layout() ? !!this.message() : true]);
|
||||
dispatchEvent(new CustomEvent('mailbox.message-list.selector.go-up',
|
||||
{detail:Layout.NoPreview === this.layout() ? !!this.message() : true}
|
||||
));
|
||||
}
|
||||
|
||||
detectDomBackgroundColor(dom) {
|
||||
|
|
@ -537,8 +540,8 @@ class MessageViewMailBoxUserView extends AbstractViewNext {
|
|||
this.message.subscribe(fCheckHeaderHeight);
|
||||
|
||||
var t;
|
||||
Events.sub(
|
||||
'window.resize',
|
||||
addEventListener(
|
||||
'resize',
|
||||
()=>{
|
||||
// throttle
|
||||
if (!t) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue