aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/static
diff options
context:
space:
mode:
authorGravatar Hassan Abouelela <[email protected]>2022-08-13 22:53:50 +0200
committerGravatar Hassan Abouelela <[email protected]>2022-08-13 22:53:50 +0200
commitf2ad3eed8ef8872713666f69ec783f59006d3d81 (patch)
tree77ce127c183b566a915a9e176ee2a748aa2f0a5d /pydis_site/static
parentEnable Code Highlighting On All Content Pages (diff)
Improve Tag Cropping
Move the tag cropping logic to the frontend, which makes it easier to crop without crossing boundaries such as link or code block boundaries. Signed-off-by: Hassan Abouelela <[email protected]>
Diffstat (limited to 'pydis_site/static')
-rw-r--r--pydis_site/static/js/content/listing.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/pydis_site/static/js/content/listing.js b/pydis_site/static/js/content/listing.js
new file mode 100644
index 00000000..3502cb2a
--- /dev/null
+++ b/pydis_site/static/js/content/listing.js
@@ -0,0 +1,36 @@
+/**
+ * Trim a tag listing to only show a few lines of content.
+ */
+function trimTag() {
+ const containers = document.getElementsByClassName("tag-container");
+ for (const container of containers) {
+ // Remove every element after the first two paragraphs
+ while (container.children.length > 2) {
+ container.removeChild(container.lastChild);
+ }
+
+ // Trim down the elements if they are too long
+ const containerLength = container.textContent.length;
+ if (containerLength > 300) {
+ if (containerLength - container.firstChild.textContent.length > 300) {
+ // The first element alone takes up more than 300 characters
+ container.removeChild(container.lastChild);
+ }
+
+ let last = container.lastChild.lastChild;
+ while (container.textContent.length > 300 && container.lastChild.childNodes.length > 0) {
+ last = container.lastChild.lastChild;
+ last.remove();
+ }
+
+ if (container.textContent.length > 300 && (last instanceof HTMLElement && last.tagName !== "CODE")) {
+ // Add back the final element (up to a period if possible)
+ const stop = last.textContent.indexOf(".");
+ last.textContent = last.textContent.slice(0, stop > 0 ? stop + 1: null);
+ container.lastChild.appendChild(last);
+ }
+ }
+ }
+}
+
+trimTag();