diff --git a/ox-reveal.el b/ox-reveal.el index 36252db..22b0465 100755 --- a/ox-reveal.el +++ b/ox-reveal.el @@ -92,6 +92,7 @@ default fragment style, otherwise return \"fragment style\"." '((export-block . org-reveal-export-block) (headline . org-reveal-headline) (inner-template . org-reveal-inner-template) + (item . org-reveal-item) (keyword . org-reveal-keyword) (plain-list . org-reveal-plain-list) (quote-block . org-reveal-quote-block) @@ -666,6 +667,62 @@ holding export options." tokens ""))) +;; Copied from org-html-format-list-item. Overwrite HTML class +;; attribute when there is attr_html attributes. +(defun org-reveal-format-list-item (contents type checkbox attributes info + &optional term-counter-id + headline) + "Format a list item into HTML." + (let ((attr-html (cond (attributes (format " %s" (org-html--make-attribute-string attributes))) + (checkbox (format " class=\"%s\"" (symbol-name checkbox))) + (t ""))) + (checkbox (concat (org-html-checkbox checkbox info) + (and checkbox " "))) + (br (org-html-close-tag "br" nil info))) + (concat + (case type + (ordered + (let* ((counter term-counter-id) + (extra (if counter (format " value=\"%s\"" counter) ""))) + (concat + (format "" attr-html extra) + (when headline (concat headline br))))) + (unordered + (let* ((id term-counter-id) + (extra (if id (format " id=\"%s\"" id) ""))) + (concat + (format "" attr-html extra) + (when headline (concat headline br))))) + (descriptive + (let* ((term term-counter-id)) + (setq term (or term "(no term)")) + ;; Check-boxes in descriptive lists are associated to tag. + (concat (format "%s" + attr-html (concat checkbox term)) + "
")))) + (unless (eq type 'descriptive) checkbox) + (and contents (org-trim contents)) + (case type + (ordered "") + (unordered "") + (descriptive "
"))))) + +;; Copied from org-html-item, changed to call +;; org-reveal-format-list-item. +(defun org-reveal-item (item contents info) + "Transcode an ITEM element from Org to Reveal. +CONTENTS holds the contents of the item. INFO is a plist holding +contextual information." + (let* ((plain-list (org-export-get-parent item)) + (type (org-element-property :type plain-list)) + (counter (org-element-property :counter item)) + (attributes (org-export-read-attribute :attr_html item)) + ; (attributes (org-html--make-attribute-string (org-export-read-attribute :attr_html item))) + (checkbox (org-element-property :checkbox item)) + (tag (let ((tag (org-element-property :tag item))) + (and tag (org-export-data tag info))))) + (org-reveal-format-list-item + contents type checkbox attributes info (or tag counter)))) (defun org-reveal-keyword (keyword contents info) "Transcode a KEYWORD element from Org to HTML, @@ -810,33 +867,33 @@ Each `attr_reveal' attribute is mapped to corresponding ;; Return the updated tree. tree) +(defun org-reveal--update-attr-html (elem frag-attr) + "Update ELEM's attr_html atrribute with reveal's +fragment attributes." + (let ((attr-html (org-element-property :attr_html elem))) + (push (cond ((string= frag-attr t) ":class fragment") + (t (format ":class fragment %s" frag-attr))) + attr-html) + (org-element-put-property elem :attr_html attr-html))) + (defun org-reveal-append-frag (elem) "Read org-reveal's fragment attribute from ELEM and append transformed fragment attribute to ELEM's attr_html plist." (let ((frag-attr (org-export-read-attribute :attr_reveal elem :frag))) (if frag-attr - (cond - ((and (string= (org-element-type elem) 'plain-list) - (char-equal (string-to-char frag-attr) ?\()) - (mapcar* - (lambda (item frag) - "Overwrite item's `:checkbox' property with reveal's -fragment attribute." - (and (not (string= frag "none")) - (org-element-put-property - item :checkbox - (intern (cond ((string= frag t) "fragment") - (t (format "fragment %s" frag))))))) - (org-element-contents elem) - (car (read-from-string frag-attr)))) - (t - ;; Convert reveal's fragment attribute to HTML attribute. - (let ((attr-html (org-element-property :attr_html elem))) - (push - (cond ((string= frag-attr t) ":class fragment") - (t (concat ":class fragment " frag-attr))) - attr-html) - (org-element-put-property elem :attr_html attr-html))))) + (cond ((and (string= (org-element-type elem) 'plain-list) + (char-equal (string-to-char frag-attr) ?\()) + (mapcar* + (lambda (item frag) + "Append reveal's fragment attribute to item's +`:attr_html' property." + (and (not (string= frag "none")) + (org-reveal--update-attr-html item frag)) + ;; Return nil. + nil) + (org-element-contents elem) + (car (read-from-string frag-attr)))) + (t (org-reveal--update-attr-html elem frag-attr)))) elem)) (defun org-reveal-append-frag-index (elem)