File size: 1,585 Bytes
fd5f45b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
-- defining all possible callout types
local callouts_all = {
        caution = 'callout-caution', 
  			important = 'callout-important',
  			tip = 'callout-tip', 
  			note = 'callout-note', 
  			warning = 'callout-warning'
    }

-- function for adding collapse attributes to callout divs
function collapse_callout(callouts, bool)
  local callout_filter = {
    Div = function(el)
        for key, val in pairs(callouts) do
          if el.classes:includes(val) then
            if el.attributes["collapse"] == nil then
              el.attributes["collapse"] = bool
              return el
            end
          end
        end
    end
  }
  return callout_filter
end

-- make changes to input file if the format is html
if quarto.doc.isFormat("html:js") then
  function Pandoc (doc)
    local collapse = doc.meta['collapse-callout']
    if not collapse then
     return nil
    end
    
    if collapse.all == false then
      return doc:walk(collapse_callout(callouts_all,'false'))
    elseif collapse.all == true then
      return doc:walk(collapse_callout(callouts_all, 'true'))
    else
      filtered_doc = doc
      for k, v in pairs{"caution", "important", "tip", "note", "warning"} do
        if collapse[v] == true then
          filtered_doc = filtered_doc:walk(
            collapse_callout({callouts_all[v]}, 'true')
          )
        elseif collapse[v] == false then
          filtered_doc = filtered_doc:walk(
            collapse_callout({callouts_all[v]}, 'false')
          )
        end
      end
      return filtered_doc
    end
    return nil
  end
end