1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-01-06 01:50:26 +00:00

Aaaaaa more shortcuts refactoring

This commit is contained in:
handlerug 2021-06-14 13:50:52 +07:00
parent b4910edcca
commit 4dc319116a
No known key found for this signature in database
GPG Key ID: 38009F0605051491
4 changed files with 284 additions and 291 deletions

View File

@ -316,32 +316,33 @@ kbd {
opacity: .4;
}
.dialog-wrap {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.3);
overflow-y: auto;
padding: 0 16px;
}
.dialog {
position: relative;
position: absolute;
top: 0;
left: 50%;
width: 100%;
max-width: 700px;
margin: 96px auto;
padding: 24px;
transform: translate(-50%, 0);
background-color: #fff;
border-radius: 4px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
}
.dialog-backdrop {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.3);
}
.dialog__header {
position: relative;
grid-column: 1 / -1;
}
@ -355,7 +356,7 @@ kbd {
display: block;
top: 0;
right: 0;
margin: 16px;
margin: 0;
padding: 8px;
border: none;
background: url(/static/icon/x.svg) no-repeat 8px 8px / 16px 16px;

View File

@ -122,16 +122,46 @@
}
}
groupStart(title = null) {
if (title) this.fakeItem(title);
group(...args) {
if (typeof args[0] === 'string') this.fakeItem(args.shift());
shortcutsGroup = [];
}
groupEnd() {
args[0].bind(this)();
if (shortcutsGroup && shortcutsGroup.length) allShortcuts.push(shortcutsGroup);
shortcutsGroup = null;
}
bindElement(shortcut, element, ...other) {
element = typeof element === 'string' ? $(element) : element;
if (!element) return;
this.add(shortcut, () => {
if (isTextField(element)) {
element.focus();
} else {
element.click();
}
}, ...other);
}
bindLink(shortcut, link, ...other) {
this.add(shortcut, () => window.location.href = link, ...other);
}
bindCollection(prefix, elements, collectionDescription, itemDescription) {
this.fakeItem(prefix + ' 1 9', collectionDescription);
if (typeof elements === 'string') {
elements = $$(elements);
} else if (Array.isArray(elements)) {
elements = elements.map(el => typeof el === 'string' ? $(el) : el);
}
for (let i = 1; i <= elements.length && i < 10; i++) {
this.bindElement(`${prefix} ${i}`, elements[i-1], `${itemDescription} #${i}`, false);
}
}
fakeItem(shortcut, description = null) {
let list = shortcutsGroup || allShortcuts;
list.push({
@ -154,6 +184,7 @@
this.active = this.active[shortcut];
if (this.active.action) {
event.stopPropagation();
this.active.action(event);
if (this.override) event.preventDefault();
this.resetActive();
@ -173,61 +204,28 @@
}
}
function bindElementFactory(handler) {
return (shortcut, element, ...other) => {
element = typeof element === 'string' ? $(element) : element;
if (!element) return;
handler.add(shortcut, () => {
if (isTextField(element)) {
element.focus();
} else {
element.click();
}
}, ...other);
};
}
function bindLinkFactory(handler) {
return (shortcut, link, ...other) => handler.add(shortcut, () => window.location.href = link, ...other);
}
function bindCollectionFactory(handler) {
return (prefix, elements, collectionDescription, itemDescription) => {
handler.fakeItem(prefix + ' 1 9', collectionDescription);
if (typeof elements === 'string') {
elements = $$(elements);
} else if (Array.isArray(elements)) {
elements = elements.map(el => typeof el === 'string' ? $(el) : el);
}
for (let i = 1; i <= elements.length && i < 10; i++) {
bindElementFactory(handler)(`${prefix} ${i}`, elements[i-1], `${itemDescription} #${i}`, false);
}
}
}
class ShortcutsHelpDialog {
constructor() {
let template = $('#dialog-template');
this.wrap = template.content.firstElementChild.cloneNode(true);
this.wrap.classList.add('shortcuts-help');
this.wrap.hidden = true;
let clonedTemplate = template.content.cloneNode(true);
this.backdrop = clonedTemplate.children[0];
this.dialog = clonedTemplate.children[1];
let handleClose = (event) => {
event.preventDefault();
event.stopPropagation();
this.close();
};
this.dialog.classList.add('shortcuts-help');
this.dialog.hidden = true;
this.backdrop.hidden = true;
this.shortcuts = new ShortcutHandler(this.wrap, false);
this.shortcuts.add('Escape', handleClose, null, false);
document.body.appendChild(this.backdrop);
document.body.appendChild(this.dialog);
this.wrap.querySelector('.dialog__title').textContent = 'List of shortcuts';
this.wrap.querySelector('.dialog__close-button').addEventListener('click', handleClose);
this.close = this.close.bind(this);
this.wrap.addEventListener('click', handleClose);
this.wrap.querySelector('.dialog').addEventListener('click', event => event.stopPropagation());
this.dialog.querySelector('.dialog__title').textContent = 'List of shortcuts';
this.dialog.querySelector('.dialog__close-button').addEventListener('click', this.close);
this.backdrop.addEventListener('click', this.close);
this.shortcuts = new ShortcutHandler(this.dialog, false);
this.shortcuts.add('Escape', this.close, null, false);
let shortcutsGroup;
let shortcutsGroupTemplate = document.createElement('div');
@ -236,7 +234,7 @@
for (let item of allShortcuts) {
if (item.description && !item.shortcut) {
shortcutsGroup = shortcutsGroupTemplate.cloneNode();
this.wrap.querySelector('.dialog__content').appendChild(shortcutsGroup);
this.dialog.querySelector('.dialog__content').appendChild(shortcutsGroup);
let heading = document.createElement('h2');
heading.className = 'shortcuts-group-heading';
@ -268,21 +266,21 @@
shortcutsGroup.appendChild(list);
}
}
document.body.appendChild(this.wrap);
}
open() {
this.prevActiveElement = document.activeElement;
document.body.overflow = 'hidden';
this.wrap.hidden = false;
this.wrap.children[0].focus();
this.backdrop.hidden = false;
this.dialog.hidden = false;
this.dialog.focus();
}
close() {
document.body.overflow = '';
this.wrap.hidden = true;
this.backdrop.hidden = true;
this.dialog.hidden = true;
if (this.prevActiveElement) {
this.prevActiveElement.focus();
@ -300,39 +298,35 @@
// Global shortcuts work everywhere.
let globalShortcuts = new ShortcutHandler(document, false);
globalShortcuts.add('?, ' + (isMac ? 'Meta+/' : 'Ctrl+/'), openShortcutsReference);
globalShortcuts.add('?, ' + (isMac ? 'Meta+/' : 'Ctrl+/'), openHelp);
// Common shortcuts work everywhere except on text fields.
let commonShortcuts = new ShortcutHandler(document, false, notTextField);
let bindElement = bindElementFactory(commonShortcuts);
let bindLink = bindLinkFactory(commonShortcuts);
let bindCollection = bindCollectionFactory(commonShortcuts);
// Page shortcuts work everywhere except on text fields.
let pageShortcuts = new ShortcutHandler(document, false, notTextField);
pageShortcuts.add('?', openHelp, null, false);
// Common shortcuts
commonShortcuts.groupStart('Common');
bindCollection('g', '.header-links__link', 'First 9 header links', 'Header link');
bindLink('g h', '/', 'Home');
bindLink('g l', '/list/', 'List of hyphae');
bindLink('g r', '/recent-changes/', 'Recent changes');
bindElement('g u', '.header-links__entry_user .header-links__link', 'Your profiles hypha');
commonShortcuts.groupEnd();
pageShortcuts.group('Common', function () {
this.bindCollection('g', '.header-links__link', 'First 9 header links', 'Header link');
this.bindLink('g h', '/', 'Home');
this.bindLink('g l', '/list/', 'List of hyphae');
this.bindLink('g r', '/recent-changes/', 'Recent changes');
this.bindElement('g u', '.header-links__entry_user .header-links__link', 'Your profiles hypha');
});
if (typeof editTextarea === 'undefined') {
// Hypha shortcuts
commonShortcuts.groupStart('Hypha');
bindCollection('', 'article .wikilink', 'First 9 hyphas links', 'Hypha link');
bindElement('p, Alt+ArrowLeft, Ctrl+Alt+ArrowLeft', '.prevnext__prev', 'Next hypha');
bindElement('n, Alt+ArrowRight, Ctrl+Alt+ArrowRight', '.prevnext__next', 'Previous hypha');
bindElement('s, Alt+ArrowUp, Ctrl+Alt+ArrowUp', $$('.navi-title a').slice(1, -1).slice(-1)[0], 'Parent hypha');
bindElement('c, Alt+ArrowDown, Ctrl+Alt+ArrowDown', '.subhyphae__link', 'First child hypha');
bindElement('e, Ctrl+Enter', '.hypha-tabs__link[href^="/edit/"]', 'Edit this hypha');
commonShortcuts.groupEnd();
pageShortcuts.group('Hypha', function () {
this.bindCollection('', 'article .wikilink', 'First 9 hyphas links', 'Hypha link');
this.bindElement('p, Alt+ArrowLeft, Ctrl+Alt+ArrowLeft', '.prevnext__prev', 'Next hypha');
this.bindElement('n, Alt+ArrowRight, Ctrl+Alt+ArrowRight', '.prevnext__next', 'Previous hypha');
this.bindElement('s, Alt+ArrowUp, Ctrl+Alt+ArrowUp', $$('.navi-title a').slice(1, -1).slice(-1)[0], 'Parent hypha');
this.bindElement('c, Alt+ArrowDown, Ctrl+Alt+ArrowDown', '.subhyphae__link', 'First child hypha');
this.bindElement('e, Ctrl+Enter', '.hypha-tabs__link[href^="/edit/"]', 'Edit this hypha');
});
} else {
// Hypha editor shortcuts. These work only on editor's text area.
let editorShortcuts = new ShortcutHandler(editTextarea, true);
let bindElement = bindElementFactory(editorShortcuts);
let shortcuts = [
// Win+Linux Mac Action Description
@ -346,19 +340,19 @@
['Ctrl+k', 'Meta+k', wrapLink, 'Format: Link'],
];
editorShortcuts.groupStart('Editor');
for (let shortcut of shortcuts) {
if (isMac) {
editorShortcuts.add(shortcut[1], ...shortcut.slice(2))
} else {
editorShortcuts.add(shortcut[0], ...shortcut.slice(2))
editorShortcuts.group('Editor', function () {
for (let shortcut of shortcuts) {
if (isMac) {
this.add(shortcut[1], ...shortcut.slice(2))
} else {
this.add(shortcut[0], ...shortcut.slice(2))
}
}
}
editorShortcuts.groupEnd();
});
editorShortcuts.groupStart();
bindElement(isMac ? 'Meta+Enter' : 'Ctrl+Enter', $('.edit-form__save'), 'Save changes');
editorShortcuts.groupEnd();
editorShortcuts.group(function () {
this.bindElement(isMac ? 'Meta+Enter' : 'Ctrl+Enter', $('.edit-form__save'), 'Save changes');
});
}
});
})();

View File

@ -29,15 +29,14 @@
</header>
{%s= body %}
<template id="dialog-template">
<div class="dialog-wrap">
<div class="dialog" tabindex="0">
<div class="dialog__header">
<h1 class="dialog__title"></h1>
<button class="dialog__close-button" aria-label="Close this dialog"></button>
</div>
<div class="dialog__content"></div>
<div class="dialog-backdrop"></div>
<div class="dialog" tabindex="0">
<div class="dialog__header">
<h1 class="dialog__title"></h1>
<button class="dialog__close-button" aria-label="Close this dialog"></button>
</div>
<div class="dialog__content"></div>
</div>
</template>
{%= omnipresentScripts() %}

View File

@ -94,63 +94,62 @@ func StreamBaseHTML(qw422016 *qt422016.Writer, title, body string, u *user.User,
//line views/stuff.qtpl:30
qw422016.N().S(`
<template id="dialog-template">
<div class="dialog-wrap">
<div class="dialog" tabindex="0">
<div class="dialog__header">
<h1 class="dialog__title"></h1>
<button class="dialog__close-button" aria-label="Close this dialog"></button>
</div>
<div class="dialog__content"></div>
<div class="dialog-backdrop"></div>
<div class="dialog" tabindex="0">
<div class="dialog__header">
<h1 class="dialog__title"></h1>
<button class="dialog__close-button" aria-label="Close this dialog"></button>
</div>
<div class="dialog__content"></div>
</div>
</template>
`)
//line views/stuff.qtpl:43
//line views/stuff.qtpl:42
streamomnipresentScripts(qw422016)
//line views/stuff.qtpl:43
//line views/stuff.qtpl:42
qw422016.N().S(`
</body>
</html>
`)
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
}
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
func WriteBaseHTML(qq422016 qtio422016.Writer, title, body string, u *user.User, headElements ...string) {
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
StreamBaseHTML(qw422016, title, body, u, headElements...)
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
}
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
func BaseHTML(title, body string, u *user.User, headElements ...string) string {
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
WriteBaseHTML(qb422016, title, body, u, headElements...)
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
qs422016 := string(qb422016.B)
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
return qs422016
//line views/stuff.qtpl:46
//line views/stuff.qtpl:45
}
//line views/stuff.qtpl:48
//line views/stuff.qtpl:47
func StreamUserListHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:48
//line views/stuff.qtpl:47
qw422016.N().S(`
<div class="layout">
<main class="main-width user-list">
<h1>List of users</h1>
`)
//line views/stuff.qtpl:53
//line views/stuff.qtpl:52
var (
admins = make([]string, 0)
moderators = make([]string, 0)
@ -167,303 +166,303 @@ func StreamUserListHTML(qw422016 *qt422016.Writer) {
}
}
//line views/stuff.qtpl:68
//line views/stuff.qtpl:67
qw422016.N().S(`
<section>
<h2>Admins</h2>
<ol>`)
//line views/stuff.qtpl:71
//line views/stuff.qtpl:70
for _, name := range admins {
//line views/stuff.qtpl:71
//line views/stuff.qtpl:70
qw422016.N().S(`
<li><a href="/page/`)
//line views/stuff.qtpl:72
//line views/stuff.qtpl:71
qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:72
//line views/stuff.qtpl:71
qw422016.N().S(`/`)
//line views/stuff.qtpl:72
//line views/stuff.qtpl:71
qw422016.E().S(name)
//line views/stuff.qtpl:72
//line views/stuff.qtpl:71
qw422016.N().S(`">`)
//line views/stuff.qtpl:72
//line views/stuff.qtpl:71
qw422016.E().S(name)
//line views/stuff.qtpl:72
//line views/stuff.qtpl:71
qw422016.N().S(`</a></li>
`)
//line views/stuff.qtpl:73
//line views/stuff.qtpl:72
}
//line views/stuff.qtpl:73
//line views/stuff.qtpl:72
qw422016.N().S(`</ol>
</section>
<section>
<h2>Moderators</h2>
<ol>`)
//line views/stuff.qtpl:77
//line views/stuff.qtpl:76
for _, name := range moderators {
//line views/stuff.qtpl:77
//line views/stuff.qtpl:76
qw422016.N().S(`
<li><a href="/page/`)
//line views/stuff.qtpl:78
//line views/stuff.qtpl:77
qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:78
//line views/stuff.qtpl:77
qw422016.N().S(`/`)
//line views/stuff.qtpl:78
//line views/stuff.qtpl:77
qw422016.E().S(name)
//line views/stuff.qtpl:78
//line views/stuff.qtpl:77
qw422016.N().S(`">`)
//line views/stuff.qtpl:78
//line views/stuff.qtpl:77
qw422016.E().S(name)
//line views/stuff.qtpl:78
//line views/stuff.qtpl:77
qw422016.N().S(`</a></li>
`)
//line views/stuff.qtpl:79
//line views/stuff.qtpl:78
}
//line views/stuff.qtpl:79
//line views/stuff.qtpl:78
qw422016.N().S(`</ol>
</section>
<section>
<h2>Editors</h2>
<ol>`)
//line views/stuff.qtpl:83
//line views/stuff.qtpl:82
for _, name := range editors {
//line views/stuff.qtpl:83
//line views/stuff.qtpl:82
qw422016.N().S(`
<li><a href="/page/`)
//line views/stuff.qtpl:84
//line views/stuff.qtpl:83
qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:84
//line views/stuff.qtpl:83
qw422016.N().S(`/`)
//line views/stuff.qtpl:84
//line views/stuff.qtpl:83
qw422016.E().S(name)
//line views/stuff.qtpl:84
//line views/stuff.qtpl:83
qw422016.N().S(`">`)
//line views/stuff.qtpl:84
//line views/stuff.qtpl:83
qw422016.E().S(name)
//line views/stuff.qtpl:84
//line views/stuff.qtpl:83
qw422016.N().S(`</a></li>
`)
//line views/stuff.qtpl:85
//line views/stuff.qtpl:84
}
//line views/stuff.qtpl:85
//line views/stuff.qtpl:84
qw422016.N().S(`</ol>
</section>
</main>
</div>
`)
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
}
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
func WriteUserListHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
StreamUserListHTML(qw422016)
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
}
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
func UserListHTML() string {
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
WriteUserListHTML(qb422016)
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
qs422016 := string(qb422016.B)
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
return qs422016
//line views/stuff.qtpl:89
//line views/stuff.qtpl:88
}
//line views/stuff.qtpl:91
//line views/stuff.qtpl:90
func StreamHyphaListHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:91
//line views/stuff.qtpl:90
qw422016.N().S(`
<div class="layout">
<main class="main-width">
<h1>List of hyphae</h1>
<p>This wiki has `)
//line views/stuff.qtpl:95
//line views/stuff.qtpl:94
qw422016.N().D(hyphae.Count())
//line views/stuff.qtpl:95
//line views/stuff.qtpl:94
qw422016.N().S(` hyphae.</p>
<ul class="hypha-list">
`)
//line views/stuff.qtpl:97
//line views/stuff.qtpl:96
for h := range hyphae.YieldExistingHyphae() {
//line views/stuff.qtpl:97
//line views/stuff.qtpl:96
qw422016.N().S(`
<li class="hypha-list__entry">
<a class="hypha-list__link" href="/hypha/`)
//line views/stuff.qtpl:99
//line views/stuff.qtpl:98
qw422016.E().S(h.Name)
//line views/stuff.qtpl:99
//line views/stuff.qtpl:98
qw422016.N().S(`">`)
//line views/stuff.qtpl:99
//line views/stuff.qtpl:98
qw422016.E().S(util.BeautifulName(h.Name))
//line views/stuff.qtpl:99
//line views/stuff.qtpl:98
qw422016.N().S(`</a>
`)
//line views/stuff.qtpl:100
//line views/stuff.qtpl:99
if h.BinaryPath != "" {
//line views/stuff.qtpl:100
//line views/stuff.qtpl:99
qw422016.N().S(`
<span class="hypha-list__amnt-type">`)
//line views/stuff.qtpl:101
//line views/stuff.qtpl:100
qw422016.E().S(filepath.Ext(h.BinaryPath)[1:])
//line views/stuff.qtpl:101
//line views/stuff.qtpl:100
qw422016.N().S(`</span>
`)
//line views/stuff.qtpl:102
//line views/stuff.qtpl:101
}
//line views/stuff.qtpl:102
//line views/stuff.qtpl:101
qw422016.N().S(`
</li>
`)
//line views/stuff.qtpl:104
//line views/stuff.qtpl:103
}
//line views/stuff.qtpl:104
//line views/stuff.qtpl:103
qw422016.N().S(`
</ul>
</main>
</div>
`)
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
}
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
func WriteHyphaListHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
StreamHyphaListHTML(qw422016)
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
}
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
func HyphaListHTML() string {
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
WriteHyphaListHTML(qb422016)
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
qs422016 := string(qb422016.B)
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
return qs422016
//line views/stuff.qtpl:108
//line views/stuff.qtpl:107
}
//line views/stuff.qtpl:110
//line views/stuff.qtpl:109
func StreamAboutHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:110
//line views/stuff.qtpl:109
qw422016.N().S(`
<div class="layout">
<main class="main-width">
<section>
<h1>About `)
//line views/stuff.qtpl:114
//line views/stuff.qtpl:113
qw422016.E().S(cfg.WikiName)
//line views/stuff.qtpl:114
//line views/stuff.qtpl:113
qw422016.N().S(`</h1>
<ul>
<li><b><a href="https://mycorrhiza.lesarbr.es">Mycorrhiza Wiki</a> version:</b> 1.2.0 indev</li>
`)
//line views/stuff.qtpl:117
//line views/stuff.qtpl:116
if user.AuthUsed {
//line views/stuff.qtpl:117
//line views/stuff.qtpl:116
qw422016.N().S(` <li><b>User count:</b> `)
//line views/stuff.qtpl:118
//line views/stuff.qtpl:117
qw422016.N().D(user.Count())
//line views/stuff.qtpl:118
//line views/stuff.qtpl:117
qw422016.N().S(`</li>
<li><b>Home page:</b> <a href="/">`)
//line views/stuff.qtpl:119
//line views/stuff.qtpl:118
qw422016.E().S(cfg.HomeHypha)
//line views/stuff.qtpl:119
//line views/stuff.qtpl:118
qw422016.N().S(`</a></li>
<li><b>Administrators:</b>`)
//line views/stuff.qtpl:120
//line views/stuff.qtpl:119
for i, username := range user.ListUsersWithGroup("admin") {
//line views/stuff.qtpl:121
//line views/stuff.qtpl:120
if i > 0 {
//line views/stuff.qtpl:121
//line views/stuff.qtpl:120
qw422016.N().S(`<span aria-hidden="true">, </span>
`)
//line views/stuff.qtpl:122
//line views/stuff.qtpl:121
}
//line views/stuff.qtpl:122
//line views/stuff.qtpl:121
qw422016.N().S(` <a href="/page/`)
//line views/stuff.qtpl:123
//line views/stuff.qtpl:122
qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:123
//line views/stuff.qtpl:122
qw422016.N().S(`/`)
//line views/stuff.qtpl:123
//line views/stuff.qtpl:122
qw422016.E().S(username)
//line views/stuff.qtpl:123
//line views/stuff.qtpl:122
qw422016.N().S(`">`)
//line views/stuff.qtpl:123
//line views/stuff.qtpl:122
qw422016.E().S(username)
//line views/stuff.qtpl:123
//line views/stuff.qtpl:122
qw422016.N().S(`</a>`)
//line views/stuff.qtpl:123
//line views/stuff.qtpl:122
}
//line views/stuff.qtpl:123
//line views/stuff.qtpl:122
qw422016.N().S(`</li>
`)
//line views/stuff.qtpl:124
//line views/stuff.qtpl:123
} else {
//line views/stuff.qtpl:124
//line views/stuff.qtpl:123
qw422016.N().S(` <li>This wiki does not use authorization</li>
`)
//line views/stuff.qtpl:126
//line views/stuff.qtpl:125
}
//line views/stuff.qtpl:126
//line views/stuff.qtpl:125
qw422016.N().S(` </ul>
<p>See <a href="/list">/list</a> for information about hyphae on this wiki.</p>
</section>
</main>
</div>
`)
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
}
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
func WriteAboutHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
StreamAboutHTML(qw422016)
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
}
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
func AboutHTML() string {
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
WriteAboutHTML(qb422016)
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
qs422016 := string(qb422016.B)
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
return qs422016
//line views/stuff.qtpl:132
//line views/stuff.qtpl:131
}
//line views/stuff.qtpl:134
//line views/stuff.qtpl:133
func StreamAdminPanelHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:134
//line views/stuff.qtpl:133
qw422016.N().S(`
<div class="layout">
<main class="main-width">
@ -500,80 +499,80 @@ func StreamAdminPanelHTML(qw422016 *qt422016.Writer) {
</main>
</div>
`)
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
}
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
func WriteAdminPanelHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
StreamAdminPanelHTML(qw422016)
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
}
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
func AdminPanelHTML() string {
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
WriteAdminPanelHTML(qb422016)
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
qs422016 := string(qb422016.B)
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
return qs422016
//line views/stuff.qtpl:169
//line views/stuff.qtpl:168
}
//line views/stuff.qtpl:171
//line views/stuff.qtpl:170
func streamomnipresentScripts(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:171
//line views/stuff.qtpl:170
qw422016.N().S(`
`)
//line views/stuff.qtpl:172
//line views/stuff.qtpl:171
for _, scriptPath := range cfg.OmnipresentScripts {
//line views/stuff.qtpl:172
//line views/stuff.qtpl:171
qw422016.N().S(`
<script src="`)
//line views/stuff.qtpl:173
//line views/stuff.qtpl:172
qw422016.E().S(scriptPath)
//line views/stuff.qtpl:173
//line views/stuff.qtpl:172
qw422016.N().S(`"></script>
`)
//line views/stuff.qtpl:174
//line views/stuff.qtpl:173
}
//line views/stuff.qtpl:174
//line views/stuff.qtpl:173
qw422016.N().S(`
`)
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
}
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
func writeomnipresentScripts(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
streamomnipresentScripts(qw422016)
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
}
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
func omnipresentScripts() string {
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
writeomnipresentScripts(qb422016)
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
qs422016 := string(qb422016.B)
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
return qs422016
//line views/stuff.qtpl:175
//line views/stuff.qtpl:174
}