155 lines
5.5 KiB
JavaScript
155 lines
5.5 KiB
JavaScript
var Misuzu = function() {
|
|
if(Misuzu.initialised)
|
|
throw 'Misuzu script has already initialised.';
|
|
Misuzu.started = true;
|
|
|
|
console.log(
|
|
"%cMisuzu%c\nhttps://git.flash.moe/flashii/misuzu",
|
|
'font-size: 48px; color: #8559a5; background: #111;'
|
|
+ 'border-radius: 5px; padding: 0 10px; text-shadow: 0 0 1em #fff;',
|
|
);
|
|
|
|
timeago.render(document.querySelectorAll('time'));
|
|
hljs.initHighlighting();
|
|
|
|
Misuzu.CSRF.init();
|
|
Misuzu.Urls.loadFromDocument();
|
|
Misuzu.User.refreshLocalUser();
|
|
Misuzu.FormUtils.initDataRequestMethod();
|
|
Misuzu.initQuickSubmit();
|
|
Misuzu.Comments.init();
|
|
Misuzu.Forum.Editor.init();
|
|
|
|
if(Misuzu.User.isLoggedIn())
|
|
console.log(
|
|
'You are %s with user id %d and colour %s.',
|
|
Misuzu.User.localUser.getUsername(),
|
|
Misuzu.User.localUser.getId(),
|
|
Misuzu.User.localUser.getColour().getCSS()
|
|
);
|
|
else
|
|
console.log('You aren\'t logged in.');
|
|
|
|
Misuzu.Events.dispatch();
|
|
|
|
Misuzu.initLoginPage();
|
|
};
|
|
Misuzu.Parser = DefineEnum({
|
|
plain: 0,
|
|
bbcode: 1,
|
|
markdown: 2,
|
|
});
|
|
Misuzu.supportsSidewaysText = function() { return CSS.supports('writing-mode', 'sideways-lr'); };
|
|
Misuzu.showMessageBox = function(text, title, buttons) {
|
|
if(document.querySelector('.messagebox'))
|
|
return false;
|
|
|
|
text = text || '';
|
|
title = title || '';
|
|
buttons = buttons || [];
|
|
|
|
var element = document.createElement('div');
|
|
element.className = 'messagebox';
|
|
|
|
var container = element.appendChild(document.createElement('div'));
|
|
container.className = 'container messagebox__container';
|
|
|
|
var titleElement = container.appendChild(document.createElement('div')),
|
|
titleBackground = titleElement.appendChild(document.createElement('div')),
|
|
titleText = titleElement.appendChild(document.createElement('div'));
|
|
|
|
titleElement.className = 'container__title';
|
|
titleBackground.className = 'container__title__background';
|
|
titleText.className = 'container__title__text';
|
|
titleText.textContent = title || 'Information';
|
|
|
|
var textElement = container.appendChild(document.createElement('div'));
|
|
textElement.className = 'container__content';
|
|
textElement.textContent = text;
|
|
|
|
var buttonsContainer = container.appendChild(document.createElement('div'));
|
|
buttonsContainer.className = 'messagebox__buttons';
|
|
|
|
var firstButton = null;
|
|
|
|
if(buttons.length < 1) {
|
|
firstButton = buttonsContainer.appendChild(document.createElement('button'));
|
|
firstButton.className = 'input__button';
|
|
firstButton.textContent = 'OK';
|
|
firstButton.addEventListener('click', function() { element.remove(); });
|
|
} else {
|
|
for(var i = 0; i < buttons.length; i++) {
|
|
var button = buttonsContainer.appendChild(document.createElement('button'));
|
|
button.className = 'input__button';
|
|
button.textContent = buttons[i].text;
|
|
button.addEventListener('click', function() {
|
|
element.remove();
|
|
buttons[i].callback();
|
|
});
|
|
|
|
if(firstButton === null)
|
|
firstButton = button;
|
|
}
|
|
}
|
|
|
|
document.body.appendChild(element);
|
|
firstButton.focus();
|
|
return true;
|
|
};
|
|
Misuzu.initLoginPage = function() {
|
|
var updateForm = function(avatarElem, usernameElem) {
|
|
var xhr = new XMLHttpRequest;
|
|
xhr.addEventListener('readystatechange', function() {
|
|
if(xhr.readyState !== 4)
|
|
return;
|
|
|
|
var json = JSON.parse(xhr.responseText);
|
|
if(!json)
|
|
return;
|
|
|
|
if(json.name)
|
|
usernameElem.value = json.name;
|
|
avatarElem.src = json.avatar;
|
|
});
|
|
xhr.open('GET', Misuzu.Urls.format('auth-resolve-user', [{name: 'username', value: encodeURIComponent(usernameElem.value)}]));
|
|
xhr.send();
|
|
};
|
|
|
|
var loginForms = document.getElementsByClassName('js-login-form');
|
|
|
|
for(var i = 0; i < loginForms.length; ++i)
|
|
(function(form) {
|
|
var loginTimeOut = 0,
|
|
loginAvatar = form.querySelector('.js-login-avatar'),
|
|
loginUsername = form.querySelector('.js-login-username');
|
|
|
|
updateForm(loginAvatar, loginUsername);
|
|
loginUsername.addEventListener('keyup', function() {
|
|
if(loginTimeOut)
|
|
return;
|
|
loginTimeOut = setTimeout(function() {
|
|
updateForm(loginAvatar, loginUsername);
|
|
clearTimeout(loginTimeOut);
|
|
loginTimeOut = 0;
|
|
}, 750);
|
|
});
|
|
})(loginForms[i]);
|
|
};
|
|
Misuzu.initQuickSubmit = function() {
|
|
var ctrlSubmit = document.getElementsByClassName('js-quick-submit').toArray().concat(document.getElementsByClassName('js-ctrl-enter-submit').toArray());
|
|
if(!ctrlSubmit)
|
|
return;
|
|
|
|
for(var i = 0; i < ctrlSubmit.length; ++i)
|
|
ctrlSubmit[i].addEventListener('keydown', function(ev) {
|
|
if((ev.code === 'Enter' || ev.code === 'NumpadEnter') // i hate this fucking language so much
|
|
&& ev.ctrlKey && !ev.altKey && !ev.shiftKey && !ev.metaKey) {
|
|
// hack: prevent forum editor from screaming when using this keycombo
|
|
// can probably be done in a less stupid manner
|
|
Misuzu.Forum.Editor.allowWindowClose = true;
|
|
|
|
this.form.submit();
|
|
ev.preventDefault();
|
|
}
|
|
});
|
|
};
|