* why prepend "file://" to abs paths in html output? @ 2017-07-08 0:38 Matt Price 2017-07-08 10:33 ` Nicolas Goaziou 0 siblings, 1 reply; 20+ messages in thread From: Matt Price @ 2017-07-08 0:38 UTC (permalink / raw) To: Org Mode [-- Attachment #1: Type: text/plain, Size: 944 bytes --] in org-html-link local links of the form "/some/path/to/file" are rewritten as "file:///some/path/to/file". This makes it difficult to write root-relative URL's in the way that one might expect to be able to (so that export produces links like <img src="/static/images/unicorn.jpg"/> Is this really the most desirable behaviour? In html export, at least, I would think most users would want to allow links of the kind I described. But this seems like a conscious design decision; cf. these lines from org-html-link: ;; If file path is absolute, prepend it with protocol ;; component - "file://". (cond ((file-name-absolute-p raw-path) (setq raw-path (org-export-file-uri raw-path))) ((and home use-abs-url) (setq raw-path (concat (file-name-as-directory home) raw-path)))) I'm wondering whether a user oculd at least set a defcustom to control this behaviour. Thanks, Matt [-- Attachment #2: Type: text/html, Size: 1369 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-08 0:38 why prepend "file://" to abs paths in html output? Matt Price @ 2017-07-08 10:33 ` Nicolas Goaziou 2017-07-08 12:37 ` Kaushal Modi 0 siblings, 1 reply; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-08 10:33 UTC (permalink / raw) To: Matt Price; +Cc: Org Mode Hello, Matt Price <moptop99@gmail.com> writes: > in org-html-link local links of the form > > "/some/path/to/file" > > are rewritten as > > "file:///some/path/to/file". > > This makes it difficult to write root-relative URL's in the way that one > might expect to be able to (so that export produces links like > > <img src="/static/images/unicorn.jpg"/> > > Is this really the most desirable behaviour? In html export, at least, I > would think most users would want to allow links of the kind I described. > But this seems like a conscious design decision; cf. these lines from > org-html-link: > > ;; If file path is absolute, prepend it with protocol > ;; component - "file://". > (cond > ((file-name-absolute-p raw-path) > (setq raw-path (org-export-file-uri raw-path))) > ((and home use-abs-url) > (setq raw-path (concat (file-name-as-directory home) raw-path)))) > > I'm wondering whether a user oculd at least set a defcustom to control this > behaviour. Let me ask this the other way: is there any situation where "file://" prefix is desirable? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-08 10:33 ` Nicolas Goaziou @ 2017-07-08 12:37 ` Kaushal Modi 2017-07-08 14:08 ` Nicolas Goaziou 0 siblings, 1 reply; 20+ messages in thread From: Kaushal Modi @ 2017-07-08 12:37 UTC (permalink / raw) To: Nicolas Goaziou, Matt Price; +Cc: Org Mode [-- Attachment #1: Type: text/plain, Size: 323 bytes --] On Sat, Jul 8, 2017, 6:35 AM Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote: > Let me ask this the other way: is there any situation where "file://" > prefix is desirable? > I don't see why "file://" would be useful in html exports (or pdf, md, etc). It is probably needed only in org to org exports. > -- Kaushal Modi [-- Attachment #2: Type: text/html, Size: 825 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-08 12:37 ` Kaushal Modi @ 2017-07-08 14:08 ` Nicolas Goaziou 2017-07-08 14:19 ` Carsten Dominik 0 siblings, 1 reply; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-08 14:08 UTC (permalink / raw) To: Kaushal Modi; +Cc: Org Mode Hello, Kaushal Modi <kaushal.modi@gmail.com> writes: > I don't see why "file://" would be useful in html exports OK. Il remove the file:// scheme specifications then. > (or pdf, md, etc). Well, those are not related to network based protocols. Does it really make a difference in those cases? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-08 14:08 ` Nicolas Goaziou @ 2017-07-08 14:19 ` Carsten Dominik 2017-07-08 19:13 ` Nicolas Goaziou 0 siblings, 1 reply; 20+ messages in thread From: Carsten Dominik @ 2017-07-08 14:19 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Org Mode, Kaushal Modi [-- Attachment #1: Type: text/plain, Size: 709 bytes --] I think it can be useful to write file: in the org-mode file, to make a clear distinction from internal links. But once it is clear that something is a link to a file, I guess you are right that it might not be needed in HTML. We will see what breaks..... Carsten On Sat, Jul 8, 2017 at 4:08 PM, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote: > Hello, > > Kaushal Modi <kaushal.modi@gmail.com> writes: > > > I don't see why "file://" would be useful in html exports > > OK. Il remove the file:// scheme specifications then. > > > (or pdf, md, etc). > > Well, those are not related to network based protocols. Does it really > make a difference in those cases? > > Regards, > > -- > Nicolas Goaziou > > [-- Attachment #2: Type: text/html, Size: 1242 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-08 14:19 ` Carsten Dominik @ 2017-07-08 19:13 ` Nicolas Goaziou 2017-07-08 23:37 ` Tim Cross 0 siblings, 1 reply; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-08 19:13 UTC (permalink / raw) To: Carsten Dominik; +Cc: Org Mode, Kaushal Modi Hello, Carsten Dominik <dominik@uva.nl> writes: > I think it can be useful to write file: in the org-mode file, to make a > clear distinction from internal links. But once it is clear that something > is a link to a file, I guess you are right that it might not be needed in > HTML. We will see what breaks..... Thinking about it, we should probably not remove the "file://" prefix. I cannot think of any situation where [[/absolute/path/to/file]] would match something like "<img src="/absolute/path/to/file"/>", because "/" never matches web root directory. IOW, to re-use the OP's example, [[/static/images/unicorn.jpg]] is never a valid Org link, in the sense that it points to a non-existing file. Since the OP is writing a link only valid during HTML export, he might as well write raw HTML. Note that that "file:///static/images/unicorn.jpg" is not useful either, but at least it is logical. The only situation where we might do something is during publishing, when we know what web root directory – i.e., base directory – is. In that case, we could replace absolute file names starting with web root dir as root-relative URL. WDYT? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-08 19:13 ` Nicolas Goaziou @ 2017-07-08 23:37 ` Tim Cross 2017-07-09 10:45 ` Nicolas Goaziou 0 siblings, 1 reply; 20+ messages in thread From: Tim Cross @ 2017-07-08 23:37 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Carsten Dominik, Org Mode, Kaushal Modi Ni Nicolas, I think I agree. If I export org files as HTML for use on my local system, I probably want 'real' links and file:/// is probably the right thing as I don't want to have to also install the files in a local web server. However, when I want to export files to HTML and have them served by a web server, file:/// is not the right thing. Perhaps we need a way to easily set a context for web exports. If the context is set, then use it, otherwise, use file:/// (actually, I thought this was already there, but it has been a while since I did html exports where links were necessary). Tim Nicolas Goaziou writes: > Hello, > > Carsten Dominik <dominik@uva.nl> writes: > >> I think it can be useful to write file: in the org-mode file, to make a >> clear distinction from internal links. But once it is clear that something >> is a link to a file, I guess you are right that it might not be needed in >> HTML. We will see what breaks..... > > Thinking about it, we should probably not remove the "file://" prefix. > > I cannot think of any situation where [[/absolute/path/to/file]] would > match something like "<img src="/absolute/path/to/file"/>", because "/" > never matches web root directory. > > IOW, to re-use the OP's example, [[/static/images/unicorn.jpg]] is never > a valid Org link, in the sense that it points to a non-existing file. > Since the OP is writing a link only valid during HTML export, he might > as well write raw HTML. > > Note that that "file:///static/images/unicorn.jpg" is not useful either, > but at least it is logical. > > The only situation where we might do something is during publishing, > when we know what web root directory – i.e., base directory – is. In > that case, we could replace absolute file names starting with web root > dir as root-relative URL. > > WDYT? > > Regards, -- Tim Cross ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-08 23:37 ` Tim Cross @ 2017-07-09 10:45 ` Nicolas Goaziou 2017-07-10 12:53 ` Kaushal Modi ` (2 more replies) 0 siblings, 3 replies; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-09 10:45 UTC (permalink / raw) To: Tim Cross; +Cc: Carsten Dominik, Org Mode, Kaushal Modi Hello, Tim Cross <theophilusx@gmail.com> writes: > Perhaps we need a way to easily set a context for web exports. If the > context is set, then use it, otherwise, use file:/// (actually, I > thought this was already there, but it has been a while since I did html > exports where links were necessary). The following patch implements `org-html-root', which allows to export file links as root-relative URL. I'm not sure the docstring is clear enough, tho. Also, HTML publishing process always bind the above to publishing directory, without user intervention. So, basically, upon exporting the following document to HTML: #+html_link_root: /tmp/ [[/tmp/unicorn.jpg]] the link becomes <img src="/unicorn.jpg" alt="unicorn.jpg" /> WDYT? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-09 10:45 ` Nicolas Goaziou @ 2017-07-10 12:53 ` Kaushal Modi 2017-07-10 13:31 ` Nicolas Goaziou 2017-07-10 13:58 ` Brett Viren 2017-07-10 22:12 ` Tim Cross 2 siblings, 1 reply; 20+ messages in thread From: Kaushal Modi @ 2017-07-10 12:53 UTC (permalink / raw) To: Nicolas Goaziou, Tim Cross; +Cc: Carsten Dominik, emacs-org list [-- Attachment #1: Type: text/plain, Size: 3676 bytes --] Hello, On Sun, Jul 9, 2017, 6:45 AM Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote: > > The following patch implements `org-html-root', which allows to export > file links as root-relative URL. Can you please attach the patch? I'm not sure the docstring is clear > enough, tho. > Also, HTML publishing process always bind the above to publishing > directory, without user intervention. > Matt and I are working on an exporter backend for Hugo, ox-hugo. We are exporting Org to a flavor of Markdown compatible with Hugo. The HTML exporter has some contribution in this exporter. If a link is "/foo/bar" in the Markdown file, Hugo assumes "foo" to be present in the "static/" dir in the site root. So the Markdown link auto expands to "example.org/static/foo/bar". But if the link was "/foo/bar" in the Org file to begin, with it would become "file:///foo/bar" in Markdown (as it is a derivation of ox-md). Though, we got around that by overriding the org-md-link function in ox-hugo. The complication arose when we needed to support "#+ATTR_HTML: :class something" above figure links. We then needed to let the html link exporter take up the link translation job instead of having ox-hugo do that directly (it is OK to have HTML snippets in Markdown). And thus this request. So, basically, upon exporting the following document to HTML: > > #+html_link_root: /tmp/ > [[/tmp/unicorn.jpg]] > > the link becomes > > <img src="/unicorn.jpg" alt="unicorn.jpg" /> > Based on the example, that patch might work! ===== Reply to an earlier email: On Sat, Jul 8, 2017 at 3:14 PM Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote: > Hello, > > Carsten Dominik <dominik@uva.nl> writes: > > > I think it can be useful to write file: in the org-mode file, to make a > > clear distinction from internal links. But once it is clear that > something > > is a link to a file, I guess you are right that it might not be needed > in > > HTML. We will see what breaks..... > > Thinking about it, we should probably not remove the "file://" prefix. > It depends.. if people are using Org files exported as HTML to open referenced files in their browser (though that would work only if they open those HTML pages only on that machine). But at least in one browser (Firefox), I noticed that the browser auto-added the "file://" prefix if user tried to access "/static/images/unicorn.jpg" directly from the address bar. I cannot think of any situation where [[/absolute/path/to/file]] would > match something like "<img src="/absolute/path/to/file"/>", because "/" > never matches web root directory. > As mentioned above, one example is Hugo, which auto-interprets the presence of absolute links in the Markdown files (whether they are of Markdown or HTML style). Note that that "file:///static/images/unicorn.jpg" is not useful either, > but at least it is logical. > I can see the benefit if a browser does not support auto-detection of local links. But if the patch works, all should be good :) The only situation where we might do something is during publishing, > when we know what web root directory – i.e., base directory – is. In > that case, we could replace absolute file names starting with web root > dir as root-relative URL. > In our case, we are delegating that step to Hugo. So Org does the job of content translation from Org to Markdown (plus inline HTML code for figures, etc) "as it is", and Hugo does the job of HTML, RSS, etc. generation, content management (what goes in what directory), link resolution, etc. > -- Kaushal Modi [-- Attachment #2: Type: text/html, Size: 6331 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-10 12:53 ` Kaushal Modi @ 2017-07-10 13:31 ` Nicolas Goaziou 0 siblings, 0 replies; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-10 13:31 UTC (permalink / raw) To: Kaushal Modi; +Cc: Carsten Dominik, Tim Cross, emacs-org list [-- Attachment #1: Type: text/plain, Size: 141 bytes --] Hello, Kaushal Modi <kaushal.modi@gmail.com> writes: > Can you please attach the patch? Oops. Here it is. Regards, -- Nicolas Goaziou [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-ox-html-Implement-root-directory-for-absolute-links.patch --] [-- Type: text/x-diff, Size: 3521 bytes --] From 6eed5dcd4e585dd32e52571189cf395b1a532310 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou <mail@nicolasgoaziou.fr> Date: Sun, 9 Jul 2017 12:40:49 +0200 Subject: [PATCH] ox-html: Implement root directory for absolute links * lisp/ox-html.el (org-html-link-root): New variable. (org-html-link): Use new variable. (org-html-publish-to-html): Set root to base directory. --- lisp/ox-html.el | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/lisp/ox-html.el b/lisp/ox-html.el index 2ceaf0722..edaec4df7 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -118,6 +118,7 @@ (:keywords "KEYWORDS" nil nil space) (:html-html5-fancy nil "html5-fancy" org-html-html5-fancy) (:html-link-use-abs-url nil "html-link-use-abs-url" org-html-link-use-abs-url) + (:html-link-root "HTML_LINK_ROOT" nil org-html-link-root) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) @@ -1403,6 +1404,18 @@ example." :package-version '(Org . "8.1") :type 'boolean) +(defcustom org-html-link-root nil + "Directory considered as web root. +When non-nil, all links to absolute file names belonging to this +directory become root-relative URL. Otherwise, such links keep +the \"file:\" scheme." + :group 'org-export-html + :version "26.1" + :package-version '(Org . "9.1") + :type '(choice (const :tag "No root directory" nil) + (directory :tag "Local web root")) + :safe #'string-or-null-p) + (defcustom org-html-home/up-format "<div id=\"org-div-home-and-up\"> <a accesskey=\"h\" href=\"%s\"> UP </a> @@ -2993,12 +3006,19 @@ INFO is a plist holding contextual information. See (setq raw-path (funcall link-org-files-as-html-maybe raw-path info)) ;; If file path is absolute, prepend it with protocol - ;; component - "file://". + ;; component - "file://" or make it a root-relative URL. (cond ((file-name-absolute-p raw-path) - (setq raw-path (org-export-file-uri raw-path))) + (let ((root (plist-get info :html-link-root))) + (setq raw-path + (if (and root (file-in-directory-p raw-path root)) + (concat "/" + (file-relative-name + (expand-file-name raw-path) + root)) + (org-export-file-uri raw-path))))) ((and home use-abs-url) - (setq raw-path (concat (file-name-as-directory home) raw-path)))) + (setq raw-path (expand-file-name raw-path home)))) ;; Add search option, if any. A search option can be ;; relative to a custom-id, a headline title, a name or ;; a target. @@ -3762,18 +3782,22 @@ Return output file's name." ;;;###autoload (defun org-html-publish-to-html (plist filename pub-dir) - "Publish an org file to HTML. + "Publish an Org file to HTML. FILENAME is the filename of the Org file to be published. PLIST is the property list for the given project. PUB-DIR is the publishing directory. Return output file name." - (org-publish-org-to 'html filename - (concat "." (or (plist-get plist :html-extension) - org-html-extension - "html")) - plist pub-dir)) + (org-publish-org-to + 'html + filename + (concat "." (or (plist-get plist :html-extension) + org-html-extension + "html")) + (org-combine-plists `(:html-link-root ,(plist-get plist :base-directory)) + plist) + pub-dir)) (provide 'ox-html) -- 2.13.2 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-09 10:45 ` Nicolas Goaziou 2017-07-10 12:53 ` Kaushal Modi @ 2017-07-10 13:58 ` Brett Viren 2017-07-10 19:54 ` Kaushal Modi 2017-07-13 12:46 ` Nicolas Goaziou 2017-07-10 22:12 ` Tim Cross 2 siblings, 2 replies; 20+ messages in thread From: Brett Viren @ 2017-07-10 13:58 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Carsten Dominik, Tim Cross, Org Mode, Kaushal Modi [-- Attachment #1: Type: text/plain, Size: 1643 bytes --] Hi Nicolas, Nicolas Goaziou <mail@nicolasgoaziou.fr> writes: > So, basically, upon exporting the following document to HTML: > > #+html_link_root: /tmp/ > [[/tmp/unicorn.jpg]] > > the link becomes > > <img src="/unicorn.jpg" alt="unicorn.jpg" /> Is this saying "subtract the value of 'html_link_root' from the Org link to make its URL"? If so, I think this would not be general enough to help some cases. For example, with Nikola+orgmode and with Nikola's "pretty URLs" option the relative location between either the Org source or its generated HTML and an image that they both link will differ. Some details: Nikola source wants this layout: /path/to/my/nikola/posts/my-blog-post.org /path/to/my/nikola/images/unicorn.jpg The Org source generates to HTML which will be found at this URL path: /mysiteroot/posts/my-blog-post/index.html So, right now, either the Org link to the image must be written to be invalid (for Org): [[../../images/unicorn.jpg]] Or, some mechanism needs to turn the valid Org link: [[../images/unicorn.jpg]] into either: <img src="/mysiteroot/images/unicorn.jpg" ...> or: <img src="../../images/unicorn.jpg" ...> I guess I could use html_link_root set to "/path/to/my/nikola" but then my Org source loses portability. I think better would be able to explicitly state the desired URL path for the HTML <img> like: #+html_url_path: /mysiteroot/images/unicorn.jpg [[../images/unicorn.jpg]] -Brett. PS: imo, in this example, I think the real solution is to make Nikola allow for keeping org+img source together and to output org+img+html all together in one web directory. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 800 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-10 13:58 ` Brett Viren @ 2017-07-10 19:54 ` Kaushal Modi 2017-07-10 21:44 ` Kaushal Modi 2017-07-13 12:39 ` Nicolas Goaziou 2017-07-13 12:46 ` Nicolas Goaziou 1 sibling, 2 replies; 20+ messages in thread From: Kaushal Modi @ 2017-07-10 19:54 UTC (permalink / raw) To: Brett Viren, Nicolas Goaziou; +Cc: Carsten Dominik, Tim Cross, Org Mode [-- Attachment #1: Type: text/plain, Size: 2944 bytes --] Hi Nicolas, I tried out the patch, and my comments are in the MWE below. On Mon, Jul 10, 2017 at 9:59 AM Brett Viren <bv@bnl.gov> wrote: > Is this saying "subtract the value of 'html_link_root' from the Org link > to make its URL"? > > If so, I think this would not be general enough to help some cases. For > example, with Nikola+orgmode and with Nikola's "pretty URLs" option the > relative location between either the Org source or its generated HTML > and an image that they both link will differ. > Good point. I overlooked that. I have this MWE that explains the "would like to have" vs "what this patch gives us": ===== #+TITLE: ox-html root dir #+OPTIONS: toc:nil #+STARTUP: inlineimages #+HTML_LINK_ROOT: /tmp/site/static/ An =image.png= exists as =/tmp/site/static/images/image.png=. * This is how the image links should have worked with the link root already specified [[/images/image.png]] - The =HTML_LINK_ROOT= should to appended to the front of the above link if that concatenated path is a valid one. - Would also like =C-x C-o=, inline image display, etc. to work. - So a thought.. should the link root specification be made exporter agnostic? * This works after adding support for =HTML_LINK_ROOT= .. .. but - The link path becomes too long. - Need to hard-code the full path to the site/blog root directory before each of such links. [[file:/tmp/site/static/images/image.png]] ===== > Some details: > > Nikola source wants this layout: > > /path/to/my/nikola/posts/my-blog-post.org > /path/to/my/nikola/images/unicorn.jpg > > The Org source generates to HTML which will be found at this URL path: > > /mysiteroot/posts/my-blog-post/index.html > The organization for Hugo posts is something similar. So hopefully we can have a solution that works for such blogging platforms in general. In comparsion, the hugo paths would be: /path/to/my/hugo/content/posts/my-blog-post.org /path/to/my/hugo/static/images/unicorn.jpg So, right now, either the Org link to the image must be written to be > invalid (for Org): > > [[../../images/unicorn.jpg]] > Yeah, this is a problem and can probably be fixed if a support for something like "#+LINK_ROOT" can be made in Org and not specific to an exporter backend. Or, some mechanism needs to turn the valid Org link: > > [[../images/unicorn.jpg]] > > into either: > > <img src="/mysiteroot/images/unicorn.jpg" ...> > > or: > > <img src="../../images/unicorn.jpg" ...> > > I guess I could use html_link_root set to "/path/to/my/nikola" but then > my Org source loses portability. > > I think better would be able to explicitly state the desired URL path > for the HTML <img> like: > > #+html_url_path: /mysiteroot/images/unicorn.jpg > [[../images/unicorn.jpg]] > As I mention in my MWE, I am actually looking for a solution so that we do not need to specify the "mysiteroot" for each link.. may be just one as a "#+LINK_ROOT". -- Kaushal Modi [-- Attachment #2: Type: text/html, Size: 4558 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-10 19:54 ` Kaushal Modi @ 2017-07-10 21:44 ` Kaushal Modi 2017-07-13 12:39 ` Nicolas Goaziou 1 sibling, 0 replies; 20+ messages in thread From: Kaushal Modi @ 2017-07-10 21:44 UTC (permalink / raw) To: Brett Viren, Nicolas Goaziou; +Cc: Carsten Dominik, Tim Cross, Org Mode [-- Attachment #1: Type: text/plain, Size: 2376 bytes --] Hello, On Mon, Jul 10, 2017 at 3:54 PM Kaushal Modi <kaushal.modi@gmail.com> wrote: > Hi Nicolas, > > I tried out the patch, and my comments are in the MWE below. > > I have this MWE that explains the "would like to have" vs "what this patch > gives us": > > ===== > #+TITLE: ox-html root dir > #+OPTIONS: toc:nil > #+STARTUP: inlineimages > #+HTML_LINK_ROOT: /tmp/site/static/ > > An =image.png= exists as =/tmp/site/static/images/image.png=. > > * This is how the image links should have worked with the link root > already specified > [[/images/image.png]] > - The =HTML_LINK_ROOT= should to appended to the front of the above link > if that > concatenated path is a valid one. > - Would also like =C-x C-o=, inline image display, etc. to work. > - So a thought.. should the link root specification be made exporter > agnostic? > To expand on my MWE: I have this patch on top of Nicolas's patch: ===== diff --git a/lisp/ox-html.el b/lisp/ox-html.el index 9e710e3e0a..410bb42eec 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -3011,11 +3011,12 @@ INFO is a plist holding contextual information. See ((file-name-absolute-p raw-path) (let ((root (plist-get info :html-link-root))) (setq raw-path - (if (and root (file-in-directory-p raw-path root)) - (concat "/" - (file-relative-name - (expand-file-name raw-path) - root)) + (if (and root + (file-exists-p + (concat (file-name-as-directory root) + (replace-regexp-in-string + "\\`/" "" raw-path)))) + raw-path (org-export-file-uri raw-path))))) ((and home use-abs-url) (setq raw-path (expand-file-name raw-path home)))) ===== This adds the root and link instead of having the root be a subset of link (hope that makes sense). With that, here is the updated MEW: ===== #+TITLE: ox-html root dir #+OPTIONS: toc:nil #+STARTUP: inlineimages #+HTML_LINK_ROOT: /tmp/site/static/ An =image.png= exists at =/tmp/site/static/images/image.png=. * TODO [1/2] This is how the image links should have worked with the link root already specified [[/images/image.png]] - [X] The =HTML_LINK_ROOT= should to appended to the front of the above link if that concatenated path is a valid one. - [ ] Would also like =C-x C-o=, inline image display, etc. to work. - So a thought.. should the link root specification be made exporter agnostic? ===== -- Kaushal Modi [-- Attachment #2: Type: text/html, Size: 4388 bytes --] ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-10 19:54 ` Kaushal Modi 2017-07-10 21:44 ` Kaushal Modi @ 2017-07-13 12:39 ` Nicolas Goaziou 2017-07-13 12:50 ` Kaushal Modi 1 sibling, 1 reply; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-13 12:39 UTC (permalink / raw) To: Kaushal Modi; +Cc: Brett Viren, Carsten Dominik, Org Mode, Tim Cross Hello, Kaushal Modi <kaushal.modi@gmail.com> writes: > #+HTML_LINK_ROOT: /tmp/site/static/ > > An =image.png= exists as =/tmp/site/static/images/image.png=. > > * This is how the image links should have worked with the link root already > specified > [[/images/image.png]] There is only one possible interpretation of this: look for the file at "/images/image.png", which probably doesn't exist. > - The =HTML_LINK_ROOT= should to appended to the front of the above link if > that > concatenated path is a valid one. > - Would also like =C-x C-o=, inline image display, etc. to work. > - So a thought.. should the link root specification be made exporter > agnostic? > * This works after adding support for =HTML_LINK_ROOT= .. > .. but > - The link path becomes too long. > - Need to hard-code the full path to the site/blog root directory before > each of > such links. > [[file:/tmp/site/static/images/image.png]] ISTM you are looking after link abbreviations. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-13 12:39 ` Nicolas Goaziou @ 2017-07-13 12:50 ` Kaushal Modi 2017-07-13 12:55 ` Nicolas Goaziou 0 siblings, 1 reply; 20+ messages in thread From: Kaushal Modi @ 2017-07-13 12:50 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Brett Viren, Carsten Dominik, Org Mode, Tim Cross [-- Attachment #1: Type: text/plain, Size: 609 bytes --] On Thu, Jul 13, 2017 at 8:39 AM Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote: > > There is only one possible interpretation of this: look for the file at > "/images/image.png", which probably doesn't exist. > I agree. It's definitely less confusing to an unknowing user with that strict definition. ISTM you are looking after link abbreviations. > Hmm. Thanks for that hint. Would it be OK to define backend-specific link abbreviations? I'd like to eventually merge ox-hugo[1] into Org. So would like to stay in line with the conventions. [1]: https://github.com/kaushalmodi/ox-hugo -- Kaushal Modi [-- Attachment #2: Type: text/html, Size: 1268 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-13 12:50 ` Kaushal Modi @ 2017-07-13 12:55 ` Nicolas Goaziou 2017-07-13 13:01 ` Kaushal Modi 0 siblings, 1 reply; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-13 12:55 UTC (permalink / raw) To: Kaushal Modi; +Cc: Brett Viren, Carsten Dominik, Org Mode, Tim Cross Kaushal Modi <kaushal.modi@gmail.com> writes: > Hmm. Thanks for that hint. Would it be OK to define backend-specific link > abbreviations? I don't think so. Back-end are able to manipulate links the way they want without Org core interfering. IOW, this black magick should operate whitin "ox-hugo.el" itself, IMO. BTW, I still don't understand why an export back-end (unlike an user) would need to use link abbreviations. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-13 12:55 ` Nicolas Goaziou @ 2017-07-13 13:01 ` Kaushal Modi 2017-07-13 13:14 ` Nicolas Goaziou 0 siblings, 1 reply; 20+ messages in thread From: Kaushal Modi @ 2017-07-13 13:01 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Brett Viren, Carsten Dominik, Org Mode, Tim Cross [-- Attachment #1: Type: text/plain, Size: 1093 bytes --] On Thu, Jul 13, 2017 at 8:55 AM Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote: > Kaushal Modi <kaushal.modi@gmail.com> writes: > > > Hmm. Thanks for that hint. Would it be OK to define backend-specific link > > abbreviations? > > I don't think so. > > Back-end are able to manipulate links the way they want without Org core > interfering. IOW, this black magick should operate whitin "ox-hugo.el" > itself, IMO. > I meant "Would it be OK to have ox-hugo.el define a link abbreviation like `hugo-static:' for the user?" That way, each user of ox-hugo.el does not have to do that in their configs. > BTW, I still don't understand why an export back-end (unlike an user) > would need to use link abbreviations. For static site generators like Hugo, Nikola, etc. it is conventional to dump all "static" attachments like images, code files, etc in a fixed "static/" (or something like that) in the blog structure. So it is very common to have all static links begin with "/path/to/blog/root/static/" for a blog. (That's exactly the #+HTML_LINK_ROOT I mentioned earlier.) -- Kaushal Modi [-- Attachment #2: Type: text/html, Size: 1810 bytes --] ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-13 13:01 ` Kaushal Modi @ 2017-07-13 13:14 ` Nicolas Goaziou 0 siblings, 0 replies; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-13 13:14 UTC (permalink / raw) To: Kaushal Modi; +Cc: Brett Viren, Carsten Dominik, Org Mode, Tim Cross Kaushal Modi <kaushal.modi@gmail.com> writes: > I meant "Would it be OK to have ox-hugo.el define a link abbreviation like > `hugo-static:' for the user?" That way, each user of ox-hugo.el does not > have to do that in their configs. Anything goes, but I'm quite certain there's a better way. > For static site generators like Hugo, Nikola, etc. it is conventional to > dump all "static" attachments like images, code files, etc in a fixed > "static/" (or something like that) in the blog structure. Then you could implement a function that detects static attachments (e.g., per extension, or using a user-provided function), intercepts links to such files, and rewrites them to the fixed "static/" directory. Regards, ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-10 13:58 ` Brett Viren 2017-07-10 19:54 ` Kaushal Modi @ 2017-07-13 12:46 ` Nicolas Goaziou 1 sibling, 0 replies; 20+ messages in thread From: Nicolas Goaziou @ 2017-07-13 12:46 UTC (permalink / raw) To: Brett Viren; +Cc: Tim Cross, Carsten Dominik, Org Mode, Kaushal Modi Hello, Brett Viren <bv@bnl.gov> writes: > Nikola source wants this layout: > > /path/to/my/nikola/posts/my-blog-post.org > /path/to/my/nikola/images/unicorn.jpg > > The Org source generates to HTML which will be found at this URL path: > > /mysiteroot/posts/my-blog-post/index.html > > So, right now, either the Org link to the image must be written to be > invalid (for Org): > > [[../../images/unicorn.jpg]] Your examples do not apply here, as we are talking about absolute file names. Relative links are exported as relative URL, which is good in most cases. The remaining cases can be dealt with filters or some such or by back-end themselves. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: why prepend "file://" to abs paths in html output? 2017-07-09 10:45 ` Nicolas Goaziou 2017-07-10 12:53 ` Kaushal Modi 2017-07-10 13:58 ` Brett Viren @ 2017-07-10 22:12 ` Tim Cross 2 siblings, 0 replies; 20+ messages in thread From: Tim Cross @ 2017-07-10 22:12 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Carsten Dominik, Org Mode, Kaushal Modi Having seen the other posts on this, I think I'll need to spend more time thinking about this and the various use cases. There is something I'm having trouble putting my finger on which doesn't feel quite right, but I feel I need to look more deeply into the whole idea of how to export links generally. Originally, I was thinking just about HTML export and just file:// vs site context specific links. Based on what you have provided, this certainly does seem to address the specific use case I was thinking of, but others have pointed out additional considerations, so I'm now not sure if the suggested approach won't improve one case while making others more difficult/restricted. Tim Nicolas Goaziou writes: > Hello, > > Tim Cross <theophilusx@gmail.com> writes: > >> Perhaps we need a way to easily set a context for web exports. If the >> context is set, then use it, otherwise, use file:/// (actually, I >> thought this was already there, but it has been a while since I did html >> exports where links were necessary). > > The following patch implements `org-html-root', which allows to export > file links as root-relative URL. I'm not sure the docstring is clear > enough, tho. > > Also, HTML publishing process always bind the above to publishing > directory, without user intervention. > > So, basically, upon exporting the following document to HTML: > > #+html_link_root: /tmp/ > [[/tmp/unicorn.jpg]] > > the link becomes > > <img src="/unicorn.jpg" alt="unicorn.jpg" /> > > > WDYT? > > Regards, -- Tim Cross ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2017-07-13 13:15 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-07-08 0:38 why prepend "file://" to abs paths in html output? Matt Price 2017-07-08 10:33 ` Nicolas Goaziou 2017-07-08 12:37 ` Kaushal Modi 2017-07-08 14:08 ` Nicolas Goaziou 2017-07-08 14:19 ` Carsten Dominik 2017-07-08 19:13 ` Nicolas Goaziou 2017-07-08 23:37 ` Tim Cross 2017-07-09 10:45 ` Nicolas Goaziou 2017-07-10 12:53 ` Kaushal Modi 2017-07-10 13:31 ` Nicolas Goaziou 2017-07-10 13:58 ` Brett Viren 2017-07-10 19:54 ` Kaushal Modi 2017-07-10 21:44 ` Kaushal Modi 2017-07-13 12:39 ` Nicolas Goaziou 2017-07-13 12:50 ` Kaushal Modi 2017-07-13 12:55 ` Nicolas Goaziou 2017-07-13 13:01 ` Kaushal Modi 2017-07-13 13:14 ` Nicolas Goaziou 2017-07-13 12:46 ` Nicolas Goaziou 2017-07-10 22:12 ` Tim Cross
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).