feat: Use github api for changelog

- Use the github api instead of scraping
- Reorganize files
This commit is contained in:
Guillaume Broder 2021-10-26 20:05:47 +02:00
parent 7207e53f85
commit 9ba2de58ab
No known key found for this signature in database
GPG key ID: 66FB02D063D9E08F
4 changed files with 52 additions and 10 deletions

View file

@ -3,25 +3,24 @@
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="stylesheet" href="changelog.css" />
<link rel="stylesheet" href="./styles/changelog.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Changelog</title>
<script src="./scripts/marked.min.js"></script>
<script src="./scripts/marked-footnotes.min.js"></script>
<script>
const urlSearchParams = new URLSearchParams(window.location.search);
const params = Object.fromEntries(urlSearchParams.entries());
if (params?.tag) {
const url = `https://github.com/MonitorControl/MonitorControl/releases/tag/${params.tag}`;
const proxy =
'https://api.allorigins.win/get?url=' + encodeURIComponent(url);
const url = `https://api.github.com/repos/MonitorControl/MonitorControl/releases/tags/${params.tag}`;
let request = new XMLHttpRequest();
request.open('GET', proxy, true);
request.open('GET', url, true);
request.onload = (event) => {
const el = document.createElement('html');
const page = JSON.parse(event.target.response);
el.innerHTML = page.contents;
const mk = el.getElementsByClassName('markdown-body')[0];
document.body.appendChild(mk);
const response = JSON.parse(event.target.response);
const el = document.createElement('div');
el.innerHTML = marked(response.body);
document.body.appendChild(el);
document.title = `Changelog ${params.tag}`;
};
request.send();

42
docs/scripts/marked-footnotes.min.js vendored Normal file
View file

@ -0,0 +1,42 @@
const footnoteMatch = /^\[\^([^\]]+)\]:([\s\S]*)$/;
const referenceMatch = /\[\^([^\]]+)\](?!\()/g;
const referencePrefix = "fnref";
const footnotePrefix = "fn";
const footnoteTemplate = (ref, text) => {
return `<p id="${footnotePrefix}:${ref}">${ref}. ${text}</p>`;
};
const footnoteContainerTemplate = (text) => {
return `<h3>Footnotes</h3>${text}`
}
const referenceTemplate = ref => {
return `<sup id="${referencePrefix}:${ref}"><a href="#${footnotePrefix}:${ref}">[${ref}]</a></sup>`;
};
const interpolateReferences = (text) => {
return text.replace(referenceMatch, (_, ref) => {
return referenceTemplate(ref);
});
}
const interpolateFootnotes = (text) => {
const found = text.match(footnoteMatch)
if (found) {
const replacedText = text.replace(footnoteMatch, (_, value, text) => {
return footnoteTemplate(value, text);
});
return footnoteContainerTemplate(replacedText)
}
return text
}
const renderer = {
paragraph(text) {
return marked.Renderer.prototype.paragraph.apply(null, [
interpolateReferences(interpolateFootnotes(text))
]);
},
text(text) {
return marked.Renderer.prototype.text.apply(null, [
interpolateReferences(interpolateFootnotes(text))
]);
}
};
marked.use({ renderer });

1
docs/scripts/marked.min.js vendored Normal file

File diff suppressed because one or more lines are too long