diff --git a/src/archive.org b/src/archive.org
index 5b8039b..d494551 100644
--- a/src/archive.org
+++ b/src/archive.org
@@ -2,5 +2,5 @@
#+begin_archive
-@@html:
@@ @@html:@@ Jul 05, 2019 @@html:@@ [[file:posts/2019-07-04-org-publish.org][org-publish]] @@html:@@ @@html:@@
+@@html:@@ @@html:@@ jul 06, 2019 @@html:@@ [[file:posts/2019-07-04-org-publish.org][Static blog with org-mode]] @@html:@@ @@html:@@
#+end_archive
diff --git a/src/index.org b/src/index.org
index 616882f..3a0447f 100644
--- a/src/index.org
+++ b/src/index.org
@@ -1,4 +1,4 @@
-* Code magic :noexport:
+* Code magic :noexport:
#+TITLE: her.esy.fun
#+AUTHOR: Yann Esposito
#+EMAIL: yann.esposito@gmail.com
@@ -9,116 +9,132 @@
#+CREATOR: Spacemacs, org-mode (Emacs 26.1, Org mode 9.2.3)
#+OPTIONS: H:6
#+begin_src elisp :results none
- (require 'org)
- (require 'ox-publish)
- (require 'ox-html)
- (require 'org-element)
- (require 'ox-rss)
+ (require 'org)
+ (require 'ox-publish)
+ (require 'ox-html)
+ (require 'org-element)
+ (require 'ox-rss)
- (defun org-blog-prepare (project-plist)
- "With help from `https://github.com/howardabrams/dot-files'.
- Touch `index.org' to rebuilt it.
- Argument `PROJECT-PLIST' contains information about the current project."
- (let* ((base-directory (plist-get project-plist :base-directory))
- (buffer (find-file-noselect (expand-file-name "index.org" base-directory) t)))
- (with-current-buffer buffer
- (set-buffer-modified-p t)
- (save-buffer 0))
- (kill-buffer buffer)))
+ (defun org-blog-prepare (project-plist)
+ "With help from `https://github.com/howardabrams/dot-files'.
+ Touch `index.org' to rebuilt it.
+ Argument `PROJECT-PLIST' contains information about the current project."
+ (let* ((base-directory (plist-get project-plist :base-directory))
+ (buffer (find-file-noselect (expand-file-name "index.org" base-directory) t)))
+ (with-current-buffer buffer
+ (set-buffer-modified-p t)
+ (save-buffer 0))
+ (kill-buffer buffer)))
- (defvar org-blog-head
- "
- ")
+ (defvar org-blog-head
+ "
+ ")
- (defun org-blog-preamble (_plist)
- "Pre-amble for whole blog."
- "Programing Heresy
")
+ (defun org-blog-preamble (_plist)
+ "Pre-amble for whole blog."
+ "Programing Heresy
")
- (defun org-blog-postamble (_plist)
- "Post-amble for whole blog."
- "
- Home -
- Posts")
+ (defun org-blog-postamble (_plist)
+ "Post-amble for whole blog."
+ "
+ Home -
+ Posts")
- (defun org-blog-sitemap-format-entry (entry _style project)
- "Return string for each ENTRY in PROJECT."
- (when (s-starts-with-p "posts/" entry)
- (format "@@html:@@ %s @@html:@@ [[file:%s][%s]] @@html:@@"
- (format-time-string "%h %d, %Y"
- (org-publish-find-date entry project))
- entry
- (org-publish-find-title entry project))))
+ (defun org-blog-sitemap-format-entry (entry _style project)
+ "Return string for each ENTRY in PROJECT."
+ (when (s-starts-with-p "posts/" entry)
+ (format "@@html:@@ %s @@html:@@ [[file:%s][%s]] @@html:@@"
+ (format-time-string "%h %d, %Y"
+ (org-publish-find-date entry project))
+ entry
+ (org-publish-find-title entry project))))
- (defun org-blog-sitemap-function (title list)
- "Return sitemap using TITLE and LIST returned by `org-blog-sitemap-format-entry'."
- (concat "#+TITLE: " title "\n\n"
- "\n#+begin_archive\n"
- (mapconcat (lambda (li)
- (format "@@html:@@ %s @@html:@@" (car li)))
- (seq-filter #'car (cdr list))
- "\n")
- "\n#+end_archive\n"))
+ (defun org-blog-sitemap-function (title list)
+ "Return sitemap using TITLE and LIST returned by `org-blog-sitemap-format-entry'."
+ (concat "#+TITLE: " title "\n\n"
+ "\n#+begin_archive\n"
+ (mapconcat (lambda (li)
+ (format "@@html:@@ %s @@html:@@" (car li)))
+ (seq-filter #'car (cdr list))
+ "\n")
+ "\n#+end_archive\n"))
- (setq base-dir (concat (projectile-project-root) "src"))
- (setq publish-dir (concat (projectile-project-root) "_site"))
- (setq assets-dir (concat base-dir "/assets"))
- (setq publish-assets-dir (concat publish-dir "/assets"))
- (setq rss-dir base-dir)
- (setq publish-rss-dir publish-dir)
- (setq org-publish-project-alist
- `(("orgfiles"
- :base-directory ,base-dir
- :exclude ".*drafts/.*"
- :base-extension "org"
+ (setq base-dir (concat (projectile-project-root) "src"))
+ (setq publish-dir (concat (projectile-project-root) "_site"))
+ (setq assets-dir (concat base-dir "/assets"))
+ (setq publish-assets-dir (concat publish-dir "/assets"))
+ (setq rss-dir base-dir)
+ (setq publish-rss-dir publish-dir)
+ (setq domainname "https://her.esy.fun")
+ (setq org-publish-project-alist
+ `(("orgfiles"
+ :base-directory ,base-dir
+ :exclude ".*drafts/.*"
+ :base-extension "org"
- :publishing-directory ,publish-dir
+ :publishing-directory ,publish-dir
- :recursive t
- :preparation-function org-blog-prepare
- :publishing-function org-html-publish-to-html
+ :recursive t
+ :preparation-function org-blog-prepare
+ :publishing-function org-html-publish-to-html
- :with-toc nil
- :with-title t
- :with-date t
- :section-numbers nil
- :html-doctype "html5"
- :html-html5-fancy t
- :html-head-include-default-style nil
- :html-head-include-scripts nil
- :htmlized-source t
- :html-head-extra ,org-blog-head
- :html-preamble org-blog-preamble
- :html-postamble org-blog-postamble
+ :with-toc nil
+ :with-title t
+ :with-date t
+ :section-numbers nil
+ :html-doctype "html5"
+ :html-html5-fancy t
+ :html-head-include-default-style nil
+ :html-head-include-scripts nil
+ :htmlized-source t
+ :html-head-extra ,org-blog-head
+ :html-preamble org-blog-preamble
+ :html-postamble org-blog-postamble
- :auto-sitemap t
- :sitemap-filename "archive.org"
- :sitemap-title "Blog Posts"
- :sitemap-style list
- :sitemap-sort-files anti-chronologically
- :sitemap-format-entry org-blog-sitemap-format-entry
- :sitemap-function org-blog-sitemap-function)
+ :auto-sitemap t
+ :sitemap-filename "archive.org"
+ :sitemap-title "Blog Posts"
+ :sitemap-style list
+ :sitemap-sort-files anti-chronologically
+ :sitemap-format-entry org-blog-sitemap-format-entry
+ :sitemap-function org-blog-sitemap-function)
- ("assets"
- :base-directory ,assets-dir
- :base-extension ".*"
- :publishing-directory ,publish-assets-dir
- :publishing-function org-publish-attachment
- :recursive t)
+ ("assets"
+ :base-directory ,assets-dir
+ :base-extension ".*"
+ :publishing-directory ,publish-assets-dir
+ :publishing-function org-publish-attachment
+ :recursive t)
- ("rss"
- :base-directory ,rss-dir
- :base-extension "org"
- :html-link-home "https://her.esy.fun/"
- :html-link-use-abs-url t
- :rss-extension "xml"
- :publishing-directory ,publish-rss-dir
- :publishing-function (org-rss-publish-to-rss)
- :exclude ".*"
- :include ("archive.org")
- :section-numbers nil
- :table-of-contents nil)
+ ("rss"
+ :base-directory ,rss-dir
+ :base-extension "org"
+ :html-link-home ,domainname
+ :html-link-use-abs-url t
+ :rss-extension "xml"
+ :publishing-directory ,publish-rss-dir
+ :publishing-function (org-rss-publish-to-rss)
+ :exclude ".*"
+ :include ("archive.org")
+ :section-numbers nil
+ :table-of-contents nil)
+
+ ("blog" :components ("orgfiles" "assets" "rss"))))
+
+ ;; add target=_blank and rel="noopener noreferrer" to all links by default
+ (defun my-org-export-add-target-blank-to-http-links (text backend info)
+ "Add target=\"_blank\" to external links."
+ (when (and
+ (org-export-derived-backend-p backend 'html)
+ (string-match "href=\"http[^\"]+" text)
+ (not (string-match "target=\"" text))
+ (not (string-match (concat "href=\"" domainname "[^\"]*") text)))
+ (string-match "