Browse Source

Enable additional options for JavaScript org-info.js

Carsten Dominik 17 years ago
parent
commit
8489632557
2 changed files with 49 additions and 14 deletions
  1. 14 6
      doc/org.texi
  2. 35 8
      lisp/org-infojs.el

+ 14 - 6
doc/org.texi

@@ -6772,18 +6772,26 @@ needed to invoke the script.  Using the line above, you can set the following
 viewing options:
 
 @example
+path:    @r{The path to the script.  The default is to grab the script from}
+         @r{@url{http://orgmode.org/org-info.js}, but you might want to have}
+         @r{a local copy and use a path like @samp{../scripts/org-info.js}.}
 view:    @r{Initial view when website is first shown.  Possible values are}
          info      @r{Info-like interface with one section per page.}
          overview  @r{Folding interface, initially showing only top-level.}
          content   @r{Folding interface, starting with all headlines visible.}
          showall   @r{Folding interface, all headlines and text visible.}
-toc:     @r{Should the table of content be visible as the first section?}
+sdepth:  @r{Maximum headline level that will still become an independent}
+         @r{section for info and folding modes.  The default is taken from}
+         @r{@code{org-headline-levels} (= the @code{H} @code{#+OPTIONS} switch).}
+         @r{If this is smaller than in @code{org-headline-levels}, each}
+         @r{info/folding section can still contain children headlines.}
+         @r{Default is @code{org-headline-levels} (= the @code{H} @code{#+OPTIONS} switch).}
+toc:     @r{Should the table of content @emph{initially} be visible?}
          @r{Even when @code{nil}, you can always get to the toc with @kbd{i}.}
-ltoc:    @r{Should there be short contents in each section?}
-path:    @r{The path to the script.  The default is to grab the script from}
-         @r{@url{http://orgmode.org/org-info.js}, but you might want to have}
-         @r{a local copy use a path like @samp{../scripts/org-info.js}.}
-mouse:   @r{Headings are highlighted when the mouse is over the.  Should be}
+tdepth:  @r{The depth of the table of contents.  The defaults are taken from}
+         @r{the variables @code{org-headline-levels} and @code{org-export-with-toc}.}
+ltoc:    @r{Should there be short contents (children) in each section?}
+mouse:   @r{Headings are highlighted when the mouse is over themq.  Should be}
          @r{@samp{underline} (default) or a background color like @samp{#cccccc}.}
 buttons: @r{Should view-toggle buttons be everywhere?  When @code{nil} (the}
          @r{default), only one such button will be present.}

+ 35 - 8
lisp/org-infojs.el

@@ -68,6 +68,8 @@ line in the buffer.  See also the variable `org-infojs-options'."
   '((path PATH "http://orgmode.org/org-info.js")
     (view VIEW "info")
     (toc TOC :table-of-contents)
+    (tdepth TOC_DEPTH "max")
+    (sdepth SECTION_DEPTH "max")
     (mouse MOUSE_HINT "underline")
     (runs MAX_RUNS "5")
     (buttons VIEW_BUTTONS "0")
@@ -83,13 +85,19 @@ line in the buffer.  See also the variable `org-infojs-options'."
 Each of the options must have an entry in `org-export-html/infojs-opts-table'.
 The value can either be a string that will be passed to the script, or
 a property.  This property is then assumed to be a property that is defined
-by the Export/Publishing setup of Org."
+by the Export/Publishing setup of Org.
+The `sdepth' and `tdepth' parameters can also be set to \"max\", which
+means to use the maximum value consistent with other options."
   :group 'org-infojs
   :type
-  '(repeat
-    (cons (symbol :tag "Option")
-	  (choice (symbol :tag "Publishing/Export property")
-		  (string :tag "Value")))))
+  `(set :greedy t :inline t
+	,@(mapcar
+	   (lambda (x)
+	     (list 'cons (list 'const (car x))
+		   '(choice
+			    (symbol :tag "Publishing/Export property")
+			    (string :tag "Value"))))
+	   org-infojs-opts-table)))
 
 (defcustom org-infojs-template
   "<script type=\"text/javascript\" language=\"JavaScript\" src=\"%SCRIPT_PATH\"></script>
@@ -114,8 +122,13 @@ Option settings will replace the %MANAGER-OPTIONS cookie."
       ;; We do not want to use the script
       exp-plist
     ;; We do want to use the script, set it up
-  (let ((template org-infojs-template)
-	p1 s p v a1 tmp e opt var val table default)
+    (let ((template org-infojs-template)
+	(ptoc (plist-get exp-plist :table-of-contents))
+	(hlevels (plist-get exp-plist :headline-levels))
+	tdepth sdepth p1 s p v a1 tmp e opt var val table default)
+    (setq sdepth hlevels
+	  tdepth hlevels)
+    (if (integerp ptoc) (setq tdepth (min ptoc tdepth)))
     (setq v (plist-get exp-plist :infojs-opt)
 	  table org-infojs-opts-table)
     (while (setq e (pop table))
@@ -130,6 +143,12 @@ Option settings will replace the %MANAGER-OPTIONS cookie."
        ((eq opt 'path)
 	(and (string-match "%SCRIPT_PATH" template)
 	     (setq template (replace-match val t t template))))
+       ((eq opt 'sdepth)
+	(if (integerp (read val))
+	    (setq sdepth (min (read val) hlevels))))
+       ((eq opt 'tdepth)
+	(if (integerp (read val))
+	    (setq tdepth (min (read val) hlevels))))
        (t
 	(setq val
 	      (cond
@@ -139,6 +158,15 @@ Option settings will replace the %MANAGER-OPTIONS cookie."
 	       (t (format "%s" val))))
 	(push (cons var val) s))))
 
+    ;; Now we set the depth of the *generated* TOC to SDEPTH, because the
+    ;; toc will actually determine the splitting.  How much of the toc will
+    ;; actually be displayed is governed by the TDEPTH option.
+    (setq exp-plist (plist-put exp-plist :table-of-contents sdepth))
+
+    ;; The table of contents should ot show more sections then we generate
+    (setq tdepth (min tdepth sdepth))
+    (push (cons "TOC_DEPTH" tdepth) s)
+
     (setq s (mapconcat
 	     (lambda (x) (format "org_html_manager.set(\"%s\", \"%s\");"
 				 (car x) (cdr x)))
@@ -154,7 +182,6 @@ Option settings will replace the %MANAGER-OPTIONS cookie."
     ;; setting
     (if (not (plist-get exp-plist :table-of-contents))
 	(setq exp-plist (plist-put exp-plist :table-of-contents t)))
-    
     ;; Return the modified property list
     exp-plist)))