Changelog verpflichtend machen mittels Tag
Um den Changelog zu einem Pflichtfeld zu machen muss folgender Code in die Personalisierung von Bookstack eingebaut werden:
<script type="module">
const requiredMessage = 'Bitte geben Sie einen Changelog ein.';
const form = document.querySelector('#main-content > form');
const changelogInput = document.getElementById("summary-input");
let changelogRequired = false;
function isChangelogEmpty() {
return changelogInput.value.trim() === "";
}
function checkChangelogOnSubmit(event) {
if (!isChangelogEmpty() || !changelogRequired) {
return;
}
event.preventDefault();
window.$events.error(requiredMessage);
}
async function isChangelogRequired() {
const bookSlugRegex = /\/books\/(.*?)\/(page|draft)\//;
const slugMatchResults = bookSlugRegex.exec(window.location.href);
if (slugMatchResults === null) {
return false;
}
const bookSlug = slugMatchResults[1];
const bookResp = await window.$http.get(`/books/${bookSlug}`);
const parser = new DOMParser();
const bookDom = parser.parseFromString(bookResp.data, 'text/html');
const requiredOnBook = bookDom.querySelector('body.tag-pair-changelog-required') !== null;
if (requiredOnBook) {
return true;
}
const pageUrl = window.location.href.replace(/\/edit\/?$/, '');
const withinChapterLink = bookDom.querySelector(`.book-content a.page[href="${pageUrl}"]`);
if (!withinChapterLink) {
return false;
}
const chapterLink = withinChapterLink.closest('.chapter').previousElementSibling;
const chapterUrl = chapterLink.getAttribute('href');
const chapterResp = await window.$http.get(chapterUrl);
const chapterDom = parser.parseFromString(chapterResp.data, 'text/html');
return chapterDom.querySelector('body.tag-pair-changelog-required') !== null;
}
if (form && changelogInput) {
form.addEventListener("submit", checkChangelogOnSubmit);
isChangelogRequired().then(required => {
changelogRequired = required;
});
}
window.addEventListener('editor-tinymce::setup', event => {
const editor = event.detail.editor;
editor.on('init', () => {
editor.shortcuts.remove('meta+13');
editor.shortcuts.add('meta+13', '', () => {
if (!isChangelogEmpty() || !changelogRequired) {
window.$events.emit('editor-save-page', {});
} else {
window.$events.error(requiredMessage);
}
});
});
});
</script>
Dieses Script nur dann aktiv, wenn ein Buch den Tag Changelog
mit demĀ Tagvalue required
besitzt.