From ae482c359ca1e8faaf3a3bed002db170b5f27ca5 Mon Sep 17 00:00:00 2001
From: Jake <j.vondoemming@stud.uni-goettingen.de>
Date: Thu, 4 Aug 2022 20:49:10 +0200
Subject: [PATCH] added support for pages to act as a link

closes GAUMI-fginfo/fg-website#26
---
 theme/templates/macros/link.html | 58 ++++++++++++++++++++------------
 theme/templates/macros/nav.html  |  2 +-
 2 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/theme/templates/macros/link.html b/theme/templates/macros/link.html
index 9526dcb..a5defe9 100644
--- a/theme/templates/macros/link.html
+++ b/theme/templates/macros/link.html
@@ -20,7 +20,7 @@
 				{%- else -%}
 					{%- if reftype == "tag" -%}
 						{{ tagcattitle|e }}
-					{%- else -%}
+					{%- elif reftype == "slug" -%}
 						{{ refpage.title|e }}
 					{%- endif -%}
 				{%- endif -%}
@@ -35,42 +35,56 @@
 {#- returns: (url, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor)-#}
 {%- macro parse_url(rawurl, lang) -%}
 	{%- set urlsplit = rawurl.split('#') -%}
-	{%- set anchor = urlsplit[1]|d(None) -%}
-	{%- set urlwoa = urlsplit[0] -%} {#- url without anchor -#}
+	{%- set ns = namespace(anchor=urlsplit[1]|d(None), url=None, page=None, tagcattitle=None, tagcatcolor=None, tagpage=None, reftype=None, refid=None, reflang=None, is_external = False) -%}
+	{%- set urlwoa = urlsplit[0] -%} {#- url without ns.anchor -#}
 	{%- if not urlwoa|length -%}
-		{{- caller("", anchor, lang, False, None, None, None, None, None) -}}
+		{{- caller("", ns.anchor, lang, False, None, None, None, None, None) -}}
 	{%- else -%}
 
 		{%- set components = urlwoa.split(':') -%}
 
 		{%- if components|length == 1 -%}
-			{%- set url = ['https://', urlwoa]|join('') -%}
-			{{- caller(url, anchor, lang, True, None, None, None, None, None) -}}
+			{%- set ns.url = ['https://', urlwoa]|join('') -%}
+			{{- caller(ns.url, ns.anchor, lang, True, None, None, None, None, None) -}}
 		{%- else -%}
-			{%- set reftype = components[0] -%}
-			{%- set refid = components[1] -%}
-			{%- set reflang = components[2]|d(lang) -%}
-			{%- set ns = namespace(url=None, page=None, tagtitle=None, tagcolor=None, tagpage=None, catcolor=None, cattitle=None) -%}
-			{%- if reftype == "slug" -%}
-				{%- call(page) get.page_by_slug(refid, reflang) -%}
+			{%- set ns.reftype = components[0] -%}
+			{%- set ns.refid = components[1] -%}
+			{%- set ns.reflang = components[2]|d(lang) -%}
+			{%- if ns.reftype == "slug" -%}
+				{%- call(page) get.page_by_slug(ns.refid, ns.reflang) -%}
 					{%- set ns.url = [siteurl, page.url]|join('/') -%}
 					{%- set ns.page = page -%}
-					{%- call(cattitle, catcolor, caturl, catpage, catpages) get.tag_by_name(page.category, reflang) -%}
-						{%- set ns.cattitle = cattitle -%}
-						{%- set ns.catcolor = catcolor -%}
+					{%- call(tagcattitle, tagcatcolor, caturl, catpage, catpages) get.tag_by_name(page.category, ns.reflang) -%}
+						{%- set ns.tagcattitle = tagcattitle -%}
+						{%- set ns.tagcatcolor = tagcatcolor -%}
 					{%- endcall -%}
 				{%- endcall -%}
-				{{- caller(ns.url, anchor, reflang, False, reftype, refid, ns.page, ns.cattitle, ns.catcolor) -}}
-			{%- elif reftype == "tag" -%}
-				{%- call(tagtitle, tagcolor, tagurl, tagpage, tagpages) get.tag_by_name(refid, reflang) -%}
+				{%- if 'link' in ns.page.metadata -%}
+					{%- call(parsedurl, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor) parse_url(ns.page.metadata['link'], ns.reflang) -%}
+						{%- set ns.url = parsedurl -%}
+						{%- set ns.anchor = anchor -%}
+						{%- set ns.reflang = reflang -%}
+						{%- set ns.is_external = is_external -%}
+						{%- set ns.reftype = reftype -%}
+						{%- if not is_external -%}
+							{%- set ns.refid = refid -%}
+							{%- set ns.refpage = refpage -%}
+							{%- set ns.tagcattitle = tagcattitle -%}
+							{%- set ns.tagcatcolor = tagcatcolor -%}
+						{%- endif -%}
+					{%- endcall -%}
+				{%- endif -%}
+				{{- caller(ns.url, ns.anchor, ns.reflang, ns.is_external, ns.reftype, ns.refid, ns.page, ns.tagcattitle, ns.tagcatcolor) -}}
+			{%- elif ns.reftype == "tag" -%}
+				{%- call(tagcattitle, tagcatcolor, tagurl, tagpage, tagpages) get.tag_by_name(ns.refid, ns.reflang) -%}
 					{%- set ns.url = [siteurl, tagurl]|join('/') -%}
-					{%- set ns.tagtitle = tagtitle -%}
-					{%- set ns.tagcolor = tagcolor -%}
+					{%- set ns.tagcattitle = tagcattitle -%}
+					{%- set ns.tagcatcolor = tagcatcolor -%}
 					{%- set ns.tagpage = tagpage -%}
 				{%- endcall -%}
-				{{- caller(ns.url, anchor, reflang, False, reftype, refid, ns.tagpage, ns.tagtitle, ns.tagcolor) -}}
+				{{- caller(ns.url, ns.anchor, ns.reflang, False, ns.reftype, ns.refid, ns.tagpage, ns.tagcattitle, ns.tagcatcolor) -}}
 			{%- else -%}
-				{{- caller(urlwoa, anchor, reflang, True, None, None, None, None, None) -}}
+				{{- caller(urlwoa, ns.anchor, ns.reflang, True, None, None, None, None, None) -}}
 			{%- endif -%}
 		{%- endif -%}
 	{%- endif -%}
diff --git a/theme/templates/macros/nav.html b/theme/templates/macros/nav.html
index 93c77df..511ba0c 100644
--- a/theme/templates/macros/nav.html
+++ b/theme/templates/macros/nav.html
@@ -14,7 +14,7 @@
 	{%- if item is string -%}
 		{%- set url = item -%}
 		{%- call(parsedurl, anchor, reflang, is_external, reftype, refid, refpage, tagcattitle, tagcatcolor) link.parse_url(url, lang) -%}
-			<li style="--category-color: {{ tagcatcolor }}">
+			<li {% if tagcatcolor -%}style="--category-color: {{ tagcatcolor }}"{%- endif -%}>
 				{{ link.render(url, None, lang) }}
 			</li>
 		{%- endcall -%}
-- 
GitLab