snappymail/dev/bootstrap.js

141 lines
3.8 KiB
JavaScript
Raw Normal View History

2020-09-15 15:29:25 +08:00
import { dropdownVisibility } from 'Common/Globals';
2016-06-16 07:36:44 +08:00
import * as Enums from 'Common/Enums';
import * as Plugins from 'Common/Plugins';
2019-07-05 03:19:24 +08:00
import { i18n } from 'Common/Translator';
2016-06-07 05:57:52 +08:00
import { root } from 'Common/Links';
2015-11-19 01:32:29 +08:00
export default (App) => {
addEventListener('keydown', event => {
event = event || window.event;
if (event && event.ctrlKey && !event.shiftKey && !event.altKey) {
const key = event.keyCode || event.which;
if (key === Enums.EventKeyCode.S) {
event.preventDefault();
return;
} else if (key === Enums.EventKeyCode.A) {
const sender = event.target || event.srcElement;
if (
sender &&
('true' === '' + sender.contentEditable || (sender.tagName && sender.tagName.match(/INPUT|TEXTAREA/i)))
) {
return;
}
getSelection().removeAllRanges();
event.preventDefault();
}
}
});
2015-11-19 01:32:29 +08:00
addEventListener('click', ()=>rl.Dropdowns.detectVisibility());
2015-11-19 01:32:29 +08:00
rl.app = App;
rl.logoutReload = () => App && App.logoutReload && App.logoutReload();
2015-11-19 01:32:29 +08:00
2016-06-17 07:23:49 +08:00
rl.i18n = i18n;
2015-11-19 01:32:29 +08:00
2016-06-16 07:36:44 +08:00
rl.addSettingsViewModel = Plugins.addSettingsViewModel;
rl.addSettingsViewModelForAdmin = Plugins.addSettingsViewModelForAdmin;
2015-11-19 01:32:29 +08:00
2016-06-16 07:36:44 +08:00
rl.settingsGet = Plugins.mainSettingsGet;
rl.pluginSettingsGet = Plugins.settingsGet;
rl.pluginRemoteRequest = Plugins.remoteRequest;
2015-11-19 01:32:29 +08:00
2016-06-07 05:57:52 +08:00
rl.Enums = Enums;
2015-11-19 01:32:29 +08:00
2020-08-24 17:14:35 +08:00
rl.Dropdowns = [];
rl.Dropdowns.registrate = function(element) {
this.push(element);
element.addEventListener('click', () => rl.Dropdowns.detectVisibility());
};
rl.Dropdowns.detectVisibility = (() =>
dropdownVisibility(!!rl.Dropdowns.find(item => item.classList.contains('open')))
).debounce(50);
rl.route = {
root: () => {
rl.route.setHash(root(), true);
rl.route.off();
},
reload: () => {
2020-09-17 05:28:29 +08:00
rl.route.root();
setTimeout(() => (rl.settings.app('inIframe') ? parent : window).location.reload(), 100);
},
off: () => hasher.changed.active = false,
on: () => hasher.changed.active = true,
/**
* @param {string} sHash
* @param {boolean=} silence = false
* @param {boolean=} replace = false
* @returns {void}
*/
setHash: (hash, silence = false, replace = false) => {
hash = hash.replace(/^[#/]+/, '');
const cmd = replace ? 'replaceHash' : 'setHash';
if (silence) {
hasher.changed.active = false;
hasher[cmd](hash);
hasher.changed.active = true;
} else {
hasher.changed.active = true;
hasher[cmd](hash);
hasher.setHash(hash);
}
}
};
2020-09-15 17:51:07 +08:00
rl.fetchJSON = (resource, init, postData) => {
init = Object.assign({
mode: 'same-origin',
cache: 'no-cache',
redirect: 'error',
referrerPolicy: 'no-referrer',
credentials: 'same-origin'
}, init);
if (postData) {
init.method = 'POST';
init.headers = {
// 'Content-Type': 'application/json'
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
postData.XToken = rl.settings.app('token');
// init.body = JSON.stringify(postData);
const formData = new FormData(),
buildFormData = (formData, data, parentKey) => {
if (data && typeof data === 'object' && !(data instanceof Date || data instanceof File)) {
Object.keys(data).forEach(key =>
buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key)
);
} else {
formData.set(parentKey, data == null ? '' : data);
}
};
buildFormData(formData, postData);
init.body = new URLSearchParams(formData);
}
return fetch(resource, init).then(response => response.json());
};
window.__APP_BOOT = fErrorCallback => {
const doc = document,
cb = () => setTimeout(() => {
if (window.rainloopTEMPLATES && rainloopTEMPLATES[0]) {
doc.getElementById('rl-templates').innerHTML = rainloopTEMPLATES[0];
setTimeout(() => App.bootstart(), 10);
2019-07-05 03:19:24 +08:00
} else {
2016-06-07 05:57:52 +08:00
fErrorCallback();
}
2015-11-19 01:32:29 +08:00
2016-06-07 05:57:52 +08:00
window.__APP_BOOT = null;
2020-08-14 04:58:41 +08:00
}, 10);
('loading' !== doc.readyState) ? cb() : doc.addEventListener('DOMContentLoaded', cb);
2015-11-19 01:32:29 +08:00
};
2016-04-21 01:12:51 +08:00
};