Hi,

I think ox-html should insert a viewport to make it mobile friendly.  I
think it's not a W3 standard, though, but it's also just an additional
meta tag.  I'd like to hear from somebody who knows about html.

This patch adds this tag by default.

—Rasmus

-- 
m-mm-mmm-mmmm bacon!
>From 1a0e32d45b70877e9e52cf0fad3500b632259a12 Mon Sep 17 00:00:00 2001
From: Rasmus <ras...@gmx.us>
Date: Wed, 1 Apr 2015 15:39:28 +0200
Subject: [PATCH 7/7] ox-html: Use viewport

* ox-html.el (org-html--build-meta-info): Insert viewport.
  (org-html-viewport): New custom variable.
* ORG-NEWS: Mention viewport.
* org.texi: Mention org-html-viewport.

Viewport makes org-generated html work well with small screens.
---
 doc/org.texi    |  1 +
 etc/ORG-NEWS    | 10 ++++++++-
 lisp/ox-html.el | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 72 insertions(+), 2 deletions(-)

diff --git a/doc/org.texi b/doc/org.texi
index 0342c07..947e6ca 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -14263,6 +14263,7 @@ however, override everything.
 @item @code{:html-use-infojs}                 @tab @code{org-html-use-infojs}
 @item @code{:html-use-unicode-chars}          @tab @code{org-html-use-unicode-chars}
 @item @code{:html-validation-link}            @tab @code{org-html-validation-link}
+@item @code{:html-viewport}                   @tab @code{org-html-viewport}
 @item @code{:html-xml-declaration}            @tab @code{org-html-xml-declaration}
 @end multitable
 
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 28e8394..ec972c9 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -327,6 +327,9 @@ leading spaces within table cells.
 *** New MathJax configuration options.
 Org uses the MathJax CDN by default.  See the manual and the docstring
 of ~org-html-mathjax-options~ for details.
+*** Viewport support in html export
+Viewport for mobile-optimized website is now automatically inserted
+when exporting to html.  See ~org-html-viewport~ for details.
 ** Miscellaneous
 *** Strip all meta data from ITEM special property
 ITEM special property does not contain TODO, priority or tags anymore.
@@ -1430,7 +1433,7 @@ See http://orgmode.org/elpa/
    | =C-c C-x E=     | =E=    | [[doc::org-inc-effort][org-inc-effort]]              |
    |                 | =#=    | [[doc::org-toggle-comment][org-toggle-comment]]          |
    |                 | =:=    | [[doc::org-columns][org-columns]]                 |
-   |                 | =W=    | Set =APPT_WARNTIME=         |
+   |                 | =W=    | Set =APPT_WARNTIME=          |
    | =k=             |        | [[doc::org-agenda-capture][org-agenda-capture]]          |
    | C-c ,           | ,      | [[doc::org-priority][org-priority]]                |
 
@@ -2824,3 +2827,8 @@ that Calc formulas can operate on them.
 
   You should have received a copy of the GNU General Public License
   along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+
+
+
+
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index 8c6406b..7761cca 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -162,6 +162,7 @@
     (:html-use-infojs nil nil org-html-use-infojs)
     (:html-use-unicode-chars nil nil org-html-use-unicode-chars)
     (:html-validation-link nil nil org-html-validation-link)
+    (:html-viewport nil nil org-html-viewport)
     (:html-inline-images nil nil org-html-inline-images)
     (:html-table-attributes nil nil org-html-table-default-attributes)
     (:html-table-row-tags nil nil org-html-table-row-tags)
@@ -1403,6 +1404,53 @@ or for publication projects using the :html-head-extra property."
 ;;;###autoload
 (put 'org-html-head-extra 'safe-local-variable 'stringp)
 
+;;;; Template :: Viewport
+
+(defcustom org-html-viewport '((width "device-width")
+			       (initial-scale "1")
+			       (minimum-scale "")
+			       (maximum-scale "")
+			       (user-scalable ""))
+  "Viewport options for mobile-optimized sites.
+
+The following values are recognized
+
+width          Size of the viewport.
+initial-scale  Zoom level when the page is first loaded.
+minimum-scale  Minimum allowed zoom level.
+maximum-scale  Maximum allowed zoom level.
+user-scalable  Whether zoom can be changed.
+
+The viewport meta tag is inserted if this variable is non-nil.
+
+See the following site for a reference:
+https://developer.mozilla.org/en-US/docs/Mozilla/Mobile/Viewport_meta_tag";
+  :group 'org-export-html
+  :version "25.1"
+  :package-version '(Org . "8.3")
+  :type '(list :greedy t
+	       (list :tag "Width of viewport"
+		     (const :format "             " width)
+		     (choice (const :tag "unset" "")
+			     (string)))
+	       (list :tag "Initial scale"
+		     (const :format "             " initial-scale)
+		     (choice (const :tag "unset" "")
+			     (string)))
+	       (list :tag "Minimum scale/zoom"
+		     (const :format "             " minimum-scale)
+		     (choice (const :tag "unset" "")
+			     (string)))
+	       (list :tag "Maximum scale/zoom"
+		     (const :format "             " maximum-scale)
+		     (choice (const :tag "unset" "")
+			     (string)))
+	       (list :tag "User scalable/zoomable"
+		     (const :format "             " user-scalable)
+		     (choice (const :tag "unset" "")
+			     (const "true")
+			     (const "false")))))
+
 ;;;; Todos
 
 (defcustom org-html-todo-kwd-class-prefix ""
@@ -1681,7 +1729,20 @@ INFO is a plist used as a communication channel."
 			       (format " name=\"keywords\" content=\"%s\""
 				       (funcall protect-string keywords))
 			       info)
-	   "\n")))))
+	   "\n"))
+     (let ((viewport (remove-if-not (lambda (cell)
+				      (org-string-nw-p (cadr cell)))
+				    (plist-get info :html-viewport))))
+       (and viewport
+	    (concat
+	     (org-html-close-tag
+	      "meta"
+	      (format " name=\"viewport\" content=\"%s\""
+		      (mapconcat (lambda (elm)
+				   (format "%s=%s" (car elm) (cadr elm)))
+				 viewport ", "))
+	      info)
+	     "\n"))))))
 
 (defun org-html--build-head (info)
   "Return information for the <head>..</head> of the HTML output.
-- 
2.3.4

Reply via email to