paradox icon indicating copy to clipboard operation
paradox copied to clipboard

Unable to define the source_url base when the input source is a generated directory

Open AlexITC opened this issue 5 years ago • 7 comments

I'm using mdoc with paradox, which means that I set the paradox source to be from the mdoc output, specifically Compile / paradox / sourceDirectory := mdocOut.value.

Unfortunately, this means that I have dead-links on every page, because they link to the mdoc output directory instead of the proper source.

This is from the page footers with this content:

 The source code for this page can be found here. 

From my research, this gets rendered from the source_url variable, and I see no way to override this to the proper source, any hints appreciated.

AlexITC avatar Nov 10 '20 02:11 AlexITC

I am having the same issue. The url is accessed in themes/generic/src/main/assets/source.st which is used in themes/generic/src/main/assets/page.st.

I think that source_url is exposed to the template via the PageContents.getSource_url (imposed by PageTemplate.Contents). getSource_url is based on GithubLink.href which uses GithubResolver.treeUrl defined in terms of GithubResolver.baseUrl that reads the github.base_url property. Writer.Context is passed to the creation of GithubLink and its properties are used to initialize variables used in PropertyUrl.collect

Initally I thought that maybe this or this ++ could be responsible. If this is the case, both the properties passed to process and those coming from the page contain github.base_url and one is taken in favor of the other (as map keys must be unique). pageProperties is used to build the Writer.Context which is then used to build a PageContents.

However if in my project sbt console I run show Paradox/paradoxProperties, github.base_url contains the correct address to the folder containing my md files. So a conflict is not the problem.

vincenzobaz avatar Jun 10 '21 10:06 vincenzobaz

I forget to post that I found a way to solve this, the drawback is that it very simple and link sources from a single branch, it involves overriding the source url template, and a simple js to fix the source url.

src/main/paradox/_template/source.st:

<script type="text/javascript" src="$page.base$js/link_fix.js"></script>

$if(page.source_url)$
<div class="source-github">
The source code for this page can be found <a id="source-link" href="$page.source_url$">here</a>.
</div>
$endif$

<script type="text/javascript">jQuery(function(){sourceUrlFix('$page.source_url$')});</script>

src/main/paradox/_template/js/link_fix.js (this just creates a function to link the correct source:

function sourceUrlFix(sourceUrl) {
    // TODO: Use any branch instead of master
    $("#source-link").attr("href", sourceUrl.replace("tree/master/docs/target/mdoc", "tree/master/docs/src/main/paradox"))
}

AlexITC avatar Jun 11 '21 04:06 AlexITC

Thanks for sharing your workaround @AlexITC! However, I think it would be better if we could fix the root cause of the problem instead. I think the issue should be re-opened.

julienrf avatar Jun 11 '21 07:06 julienrf

I agree wtih @julienrf . I do not like this solution and I think the issue should be still be open.

It is not an easy fix but I think it is very important. Paradox is one of the very few resources allowing to create a site without relying on node, yarn, jekyll or ruby and having a broken link on each page does not look great.

vincenzobaz avatar Jun 11 '21 12:06 vincenzobaz

I know it is not an ideal workaround but at least, there is a way.

I'd have preferred to have a plugin option to either disable the generation, or to set the right source url.

AlexITC avatar Jun 11 '21 15:06 AlexITC

This is pretty important

nafg avatar Jan 17 '22 02:01 nafg

Here's my "solution" https://github.com/slick/slick/blob/dbb46ac190c7fc10bf39350f2ebe1fe2239fac4d/project/Docs.scala#L116-L128

nafg avatar Jan 17 '22 04:01 nafg