Browse Source

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.
Rasmus 10 years ago
parent
commit
a7becba686
3 changed files with 66 additions and 1 deletions
  1. 1 0
      doc/org.texi
  2. 3 0
      etc/ORG-NEWS
  3. 62 1
      lisp/ox-html.el

+ 1 - 0
doc/org.texi

@@ -14260,6 +14260,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
 

+ 3 - 0
etc/ORG-NEWS

@@ -353,6 +353,9 @@ However, parsed =KEYWORD= is automatically associated to an
 =:EXPORT_KEYWORD:= property, which can be used to override the keyword
 value during a subtree export.  Moreover, macros are expanded in such
 keywords and properties.
+*** 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.

+ 62 - 1
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-options
+	    (remove-if-not (lambda (cell) (org-string-nw-p (cadr cell)))
+			   (plist-get info :html-viewport))))
+       (and viewport-options
+	    (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.