summaryrefslogtreecommitdiff
path: root/posts/post.js
diff options
context:
space:
mode:
authormattkae <mattkae@protonmail.com>2023-06-20 11:35:35 -0400
committermattkae <mattkae@protonmail.com>2023-06-20 11:35:35 -0400
commit8190f7d579443513abfdcf0826fe46dcb73f22a4 (patch)
tree20e77531044212f4e35ba80ff09a6355134cd7d3 /posts/post.js
parentde009f342a5bbbd409a02a5cde0eabd6a0d872e5 (diff)
Tying up the loose strings around the new blogging system
Diffstat (limited to 'posts/post.js')
-rw-r--r--posts/post.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/posts/post.js b/posts/post.js
new file mode 100644
index 0000000..0b5a4e4
--- /dev/null
+++ b/posts/post.js
@@ -0,0 +1,86 @@
+
+function main() {
+
+ // Gather the used set oof tags
+ const tagSet = new Set();
+ const postList = [];
+ const tagContainers = document.getElementsByClassName('sitemap_tag');
+ for (let index = 0; index < tagContainers.length; index++) {
+ const container = tagContainers[index];
+ const pContainer = container.children[0];
+ if (!pContainer) {
+ continue;
+ }
+
+ const tagList = pContainer.textContent.split(',');
+ tagList.forEach(tag => tagSet.add(tag));
+ postList.push({
+ container: container.parentElement,
+ tagList: tagList,
+ enabled: tagList.length
+ });
+ }
+
+ // Create the tag container
+ const contentContainer = document.getElementById('content');
+ const tagContainer = document.createElement('div');
+ tagContainer.id = 'tag-filter-container';
+ contentContainer.before(tagContainer);
+
+ let numEnabled = tagSet.size;
+ for (const tag of tagSet) {
+ const tagElement = document.createElement('div');
+ tagElement.className = "tag-filter-item";
+ const tagElementLabel = document.createElement('span');
+ tagElementLabel.innerHTML = tag;
+ const tagElementButton = document.createElement('button');
+ tagElement.append(tagElementLabel, tagElementButton);
+ tagContainer.append(tagElement);
+
+
+ // Whenever a tag is clicked, execute the filtering behavior
+ tagElementButton.onclick = function() {
+ // Handle enable/disable
+ tagElement.remove();
+
+ if (tagElement.classList.contains('disabled')) {
+ tagElement.classList.remove('disabled');
+ if (numEnabled === 0) {
+ tagContainer.prepend(tagElement);
+ }
+ else {
+ tagContainer.children[numEnabled - 1].after(tagElement);
+ }
+ numEnabled++;
+
+ // Filter
+ postList.forEach(post => {
+ if (post.tagList.includes(tag)) {
+ post.enabled++;
+
+ if (post.enabled) {
+ post.container.style.display = 'list-item';
+ }
+ }
+ });
+ }
+ else {
+ tagElement.classList.add('disabled');
+ tagContainer.append(tagElement);
+ numEnabled--;
+
+ // Filter
+ postList.forEach(post => {
+ if (post.tagList.includes(tag)) {
+ post.enabled--;
+ if (!post.enabled) {
+ post.container.style.display = 'none';
+ }
+ }
+ });
+ }
+ };
+ }
+}
+
+window.onload = main;