726 lines
23 KiB
Plaintext
726 lines
23 KiB
Plaintext
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
# local title = module and ldoc.module_typename(module).." "..module.name.." - "..ldoc.title or ldoc.title
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=$(ldoc.doc_charset)"/>
|
|
<title>$(title)</title>
|
|
<link rel="stylesheet" href="$(ldoc.css)" type="text/css" />
|
|
# if ldoc.custom_css then -- add custom CSS file if configured.
|
|
<link rel="stylesheet" href="$(ldoc.custom_css)" type="text/css" />
|
|
# end
|
|
<script>
|
|
function show_extra(id) {
|
|
var cur = document.getElementById("item"+id).className
|
|
|
|
if (cur == "hide_extra") {
|
|
document.getElementById("item"+id).className = "show_more"
|
|
document.getElementById("button"+id).className = "hide_extra"
|
|
}
|
|
}
|
|
</script>
|
|
|
|
</head>
|
|
<body>
|
|
|
|
<div id="container">
|
|
<div id="main">
|
|
|
|
# local no_spaces = ldoc.no_spaces
|
|
# local use_li = ldoc.use_li
|
|
# local display_name = ldoc.display_name
|
|
# local iter = ldoc.modules.iter
|
|
# local function un_cmake(s) return s:gsub(";", ";"):gsub(""", '"'):gsub('&#34', '"') end
|
|
# local function M(txt,item) return ldoc.markup(txt and un_cmake(txt) or nil,item,ldoc.plain) end
|
|
# local nowrap = ldoc.wrap and '' or 'nowrap'
|
|
# local html_space = function(s) return s:gsub(" ", "%%20") end
|
|
# local no_underscores = function(s) return s:gsub("_", " ") end
|
|
# local get_item = function(mod, name) for item in iter(mod.items) do if item.name == name then return item end end; return name == "" and mod or nil end
|
|
|
|
# -- Poke a hole to allow config.ld code to have a global initialization.
|
|
# for m in iter(ldoc.modules) do
|
|
# if #m.items > 0 then
|
|
# display_name(m.items[1])
|
|
# m.items[1].global_init(ldoc)
|
|
# break
|
|
# end
|
|
# end
|
|
|
|
# --------- modules hierarchy -------------
|
|
# local hierarchy = {}
|
|
# local curr = module
|
|
# while curr do
|
|
# hierarchy[#hierarchy + 1] = curr
|
|
# -- no need to do anything more if there is no explicite @supermodule
|
|
# if not curr.tags.supermodule then break end
|
|
# local super = curr.tags.supermodule[1] -- only consider one way inheritance
|
|
# local found = false
|
|
# for kind, mods, type in ldoc.kinds() do
|
|
# for mod in mods() do
|
|
# local name = display_name(mod)
|
|
# if name == super then
|
|
# curr = mod
|
|
# found = true
|
|
# end
|
|
# if found then break end
|
|
# end
|
|
# if found then break end
|
|
# end
|
|
# if not found then curr = nil end
|
|
# end
|
|
|
|
# --------- merge modules content with supermodules -------------
|
|
# local all_module_kinds = {}
|
|
# if module then
|
|
# for kind,items in module.kinds() do
|
|
# local myitems = {}
|
|
# for item in items() do
|
|
# myitems[#myitems + 1] = item
|
|
# end
|
|
# all_module_kinds[#all_module_kinds + 1] = { kind = kind, items = myitems }
|
|
# end
|
|
# local filtered_kinds = { "Constructors", "Static module functions",
|
|
# "Functions", "Methods", "lib.gears.object.properties Functions" }
|
|
# for supermodule in iter(hierarchy) do
|
|
# for kind,items in supermodule.kinds() do
|
|
# local ignored = false
|
|
# for _,filtered in ldoc.pairs(filtered_kinds) do
|
|
# if kind == filtered then
|
|
# ignored = true
|
|
# break
|
|
# end
|
|
# end
|
|
# if not ignored then
|
|
# local curr_kind = nil
|
|
# for k in iter(all_module_kinds) do
|
|
# if k.kind == kind then
|
|
# curr_kind = k
|
|
# break
|
|
# end
|
|
# end
|
|
# if not curr_kind then
|
|
# curr_kind = { kind = kind, items = {} }
|
|
# all_module_kinds[#all_module_kinds + 1] = curr_kind
|
|
# end
|
|
# for item in items() do
|
|
# local tobeadded = true
|
|
# for i in iter(curr_kind.items) do
|
|
# if item.name == i.name then
|
|
# tobeadded = false
|
|
# break
|
|
# end
|
|
# end
|
|
# if tobeadded then
|
|
# item.inherited = true -- force inherited status
|
|
# curr_kind.items[#curr_kind.items + 1] = item
|
|
# end
|
|
# end
|
|
# end
|
|
# end
|
|
# end
|
|
# end
|
|
|
|
<!-- Menu -->
|
|
|
|
<div id="navigation">
|
|
<h1>$(ldoc.project)</h1>
|
|
|
|
<div class="select">
|
|
<select name="theme" id="theme-select">
|
|
<option selected disabled>Choose a theme</option>
|
|
<option value="light">LDoc Light</option>
|
|
<option value="dark">Awesome Dark</option>
|
|
<option value="monokai">Monokai</option>
|
|
<option value="onedark">One Dark</option>
|
|
</select>
|
|
</div>
|
|
|
|
# if not ldoc.single and module then -- reference back to project index
|
|
<ul>
|
|
<li><a href="../$(ldoc.output).html">Index</a></li>
|
|
</ul>
|
|
# end
|
|
|
|
# --------- contents of module -------------
|
|
# if module and not ldoc.no_summary and #module.items > 0 then
|
|
<h2>Contents</h2>
|
|
<ul>
|
|
# for k in iter(all_module_kinds) do
|
|
# local kind = k.kind
|
|
# if not kind:match("^ldoc_skip") then
|
|
<li><a href="#$(no_spaces(kind))">$(kind)</a></li>
|
|
# end
|
|
# end
|
|
</ul>
|
|
# end
|
|
|
|
|
|
# if ldoc.no_summary and module and not ldoc.one then -- bang out the functions on the side
|
|
# for kind, items in module.kinds() do
|
|
# if not kind:match("^ldoc_skip") then
|
|
<h2>$(kind)</h2>
|
|
<ul class="nowrap">
|
|
# end
|
|
# for item in items() do
|
|
<li><a href="#$(item.name)">$(display_name(item))</a></li>
|
|
# end
|
|
# if not kind:match("^ldoc_skip") then
|
|
</ul>
|
|
# end
|
|
# end
|
|
# end
|
|
# -------- contents of project ----------
|
|
# local this_mod = module and module.name
|
|
# for kind, mods, type in ldoc.kinds() do
|
|
# if ldoc.allowed_in_contents(type,module) then
|
|
<h2>$(no_underscores(kind))</h2>
|
|
<ul class="$(kind=='Topics' and '' or 'nowrap')">
|
|
# for mod in mods() do local name = display_name(mod)
|
|
# if mod.name == this_mod then
|
|
<li><strong>$(name)</strong></li>
|
|
# else
|
|
<li><a href="$(ldoc.ref_to_module(mod))">$(name)</a></li>
|
|
# end
|
|
# end
|
|
# end
|
|
</ul>
|
|
# end
|
|
|
|
</div>
|
|
|
|
<div id="content">
|
|
|
|
# if ldoc.body then -- verbatim HTML as contents; 'non-code' entries
|
|
$(un_cmake(ldoc.body))
|
|
# elseif module then -- module documentation
|
|
<h1>Module: <code>$(module.name)</code></h1>
|
|
<p>$(M(module.summary,module))</p>
|
|
<p>$(M(module.description,module))</p>
|
|
# if module.usage then
|
|
# local li,il = use_li(module.usage)
|
|
<h3>Usage:</h3>
|
|
<ul>
|
|
# for usage in iter(module.usage) do
|
|
$(li)<pre class="example">$(ldoc.escape(un_cmake(usage)))</pre>$(il)
|
|
# end -- for
|
|
</ul>
|
|
# end -- if usage
|
|
<div class="extra-header">
|
|
# if module.tags.supermodule then
|
|
<div class="extra-header__section">
|
|
<h3>Class Hierarchy</h3>
|
|
<div class="inheritance">
|
|
# local function draw_hierary_recursifly(i)
|
|
# local is_root_level = (i == #hierarchy)
|
|
<ul class="inheritance__level $(is_root_level and 'inheritance__level--root' or '')">
|
|
<li class="inheritance__level__node $(is_root_level and 'inheritance__level__node--root' or '')">
|
|
# local mod = hierarchy[i]
|
|
# local name = display_name(hierarchy[i])
|
|
# if mod == module then
|
|
<strong>$(name)</strong>
|
|
# else
|
|
<a href="$(ldoc.ref_to_module(mod))">$(name)</a>
|
|
# end
|
|
</li>
|
|
# if i > 1 then
|
|
<li>
|
|
# draw_hierary_recursifly(i - 1)
|
|
</li>
|
|
# end
|
|
</ul>
|
|
# end -- function draw_hierary_recursifly
|
|
# draw_hierary_recursifly(#hierarchy)
|
|
</div>
|
|
</div>
|
|
# end -- module.tags.supermodule
|
|
|
|
# if module.tags.include then
|
|
$(M(ldoc.include_file(module.tags.include)))
|
|
# end
|
|
|
|
# if module.info then
|
|
<div class="extra-header__section">
|
|
<h3>Info:</h3>
|
|
<ul>
|
|
# for tag, value in module.info:iter() do
|
|
# if tag == 'Author' then
|
|
<li>
|
|
<strong>Originally authored by</strong>: $(M(value,module))<br />
|
|
<small>(Full contributors list available on
|
|
<a href="https://github.com/awesomeWM/awesome/graphs/contributors">
|
|
our github project)
|
|
</a></small>
|
|
|
|
</li>
|
|
# else
|
|
<li><strong>$(tag)</strong>: $(M(value,module))</li>
|
|
# end
|
|
# end
|
|
</ul>
|
|
</div>
|
|
# end -- if module.info
|
|
|
|
# if module.see then
|
|
<div class="extra-header__section">
|
|
# local li,il = use_li(module.see)
|
|
# local list_or_p =(#module.see > 1) and 'ul' or 'p'
|
|
<h3>See also:</h3>
|
|
<$(list_or_p)>
|
|
# for see in iter(module.see) do
|
|
$(li)<a href="$(ldoc.href(see))">$(see.label)</a>$(il)
|
|
# end -- for
|
|
</$(list_or_p)>
|
|
</div>
|
|
# end -- if module.see
|
|
</div>
|
|
|
|
|
|
# if not ldoc.no_summary then
|
|
# -- bang out the tables of item types for this module (e.g Functions, Tables, etc)
|
|
# local last_kind = ""
|
|
# for k in iter(all_module_kinds) do
|
|
# local kind = k.kind
|
|
# if not kind:match("^ldoc_skip") then
|
|
# if last_kind ~= "" then
|
|
</table>
|
|
# end
|
|
<h2><a href="#$(no_spaces(kind))">$(kind)</a></h2>
|
|
<table class="function_list">
|
|
# end
|
|
# for item in iter(k.items) do if not item.tags.hidden then
|
|
# local dn = display_name(item)
|
|
# local inherited = (item.baseclass ~= module.name)
|
|
# if item.sanitize_type then item.sanitize_type(item, ldoc) end
|
|
<tr class="summary_row">
|
|
# if item.display_type and not item.compact_signature then
|
|
<td class="shortname" $(nowrap)><a href="#$(item.name)">$(dn)</a></td>
|
|
<td class="summarytype" nowrap>$(item.display_type)</td>
|
|
# else
|
|
<td class="name" $(nowrap)>
|
|
<a href="#$(item.name)">$(dn)</a>
|
|
# if item.display_type and item.compact_signature then
|
|
<span class="summarytype">$(item.display_type)</span>
|
|
# end
|
|
</td>
|
|
# end
|
|
<td class="summary">
|
|
$(M(item.summary,item))
|
|
</td>
|
|
<td class="baseclass" nowrap>
|
|
# if item.tags.is_deprecated then
|
|
<span class="chips">Deprecated</span>
|
|
# end
|
|
# if item.tags.readonly then
|
|
<span class="chips">Read only</span>
|
|
# end
|
|
# if inherited then
|
|
<span class="chips">Inherited from $(item.baseclass)</span>
|
|
# end
|
|
</td>
|
|
</tr>
|
|
# end end -- for items
|
|
# last_kind = kind
|
|
#end -- for kinds
|
|
</table>
|
|
|
|
<br/>
|
|
<br/>
|
|
|
|
#end -- if not no_summary
|
|
|
|
# --- currently works for both Functions and Tables. The params field either contains
|
|
# --- function parameters or table fields.
|
|
# local show_return = not ldoc.no_return_or_parms
|
|
# local show_parms, last_kind = show_return, ""
|
|
# for k in iter(all_module_kinds) do
|
|
# local kind = k.kind
|
|
# local kitem = module.kinds:get_item(kind)
|
|
# local has_description = kitem and ldoc.descript(kitem) ~= ""
|
|
# if not kind:match("^ldoc_skip") then
|
|
# if last_kind ~= "" then
|
|
</dl>
|
|
# end
|
|
<h2 class="section-header $(has_description and 'has-description')"><a name="$(no_spaces(kind))"></a>$(kind)</h2>
|
|
# end
|
|
$(M(module.kinds:get_section_description(kind),nil))
|
|
# if kitem then
|
|
# if has_description then
|
|
<div class="section-description">
|
|
$(M(ldoc.descript(kitem),kitem))
|
|
</div>
|
|
# end
|
|
# if kitem.usage then
|
|
<h3>Usage:</h3>
|
|
<pre class="example">$(ldoc.prettify(un_cmake(kitem.usage[1])))</pre>
|
|
# end
|
|
# end
|
|
# if not kind:match("^ldoc_skip") then
|
|
<dl class="function">
|
|
# end
|
|
# for item in iter(k.items) do if not item.tags.hidden then
|
|
<dt>
|
|
<a class="copy-link js-copy-link" name="$(item.name)" href="#$(item.name)">🔗</a>
|
|
<strong>$(display_name(item))</strong>
|
|
# if item.display_inheritance then
|
|
<span class="inheritance">
|
|
· Inherited from
|
|
<a href="$(item.display_inheritance)">$(item.display_inheritance)</a>
|
|
</span>
|
|
# end -- display_inheritance
|
|
# if item.display_type then
|
|
<span class="proptype">$(item.display_type)</span>
|
|
# end
|
|
<span class="baseclass" $(nowrap)>
|
|
# if item.baseclass ~= module.name then
|
|
· Inherited from $(M(item.baseclass, item))
|
|
# end
|
|
# if item.extra_summary then
|
|
# for _, col in ldoc.ipairs(item.extra_summary) do
|
|
· $((col.showcount and col.count.." " or "")..col.title)
|
|
# end -- summary col
|
|
# end -- summary
|
|
</span>
|
|
# if ldoc.prettify_files and ldoc.is_file_prettified[item.module.file.filename] then
|
|
<a style="float:right;" href="$(ldoc.source_ref(item))">line $(item.lineno)</a>
|
|
# end
|
|
</dt>
|
|
<dd>
|
|
$(M(ldoc.descript(item),item))
|
|
|
|
# if kind == "Object properties" and item.params[1] and #item.metadata > 0 then
|
|
<h3>Constraints:</h3>
|
|
<span class="property_type">
|
|
<table class="see_also">
|
|
# local current_level
|
|
# current_level = function(metadata, level)
|
|
# for _, metadata in ldoc.ipairs(metadata, level) do
|
|
<tr class="$(level>0 and "see_also_sublist" or "")">
|
|
<td style="padding-left:$(level*15)px;">
|
|
<i>
|
|
$(metadata.title)$(#(metadata.metadata or {}) > 0 and ":" or "")
|
|
</i>
|
|
# if metadata.datatype then
|
|
<span class="inline_types"> ($(metadata.datatype))</span>
|
|
# end
|
|
</td>
|
|
# if metadata.description and not metadata.description:match("^[\t\n ]*$") then
|
|
<td>: $(metadata.description)</td>
|
|
# end
|
|
<tr/>
|
|
# current_level(metadata.metadata, level + 1)
|
|
# end
|
|
# end --current_level
|
|
# current_level(item.metadata or {}, 0)
|
|
</table>
|
|
</span>
|
|
# elseif show_parms and item.params and #item.params > 0 and not item.hide_params then
|
|
# local subnames = module.kinds:type_of(item).subnames
|
|
# if subnames then
|
|
<h3>$(subnames):</h3>
|
|
# end
|
|
# local has_optional, has_named_call = false, false
|
|
# for parm in iter(item.params) do
|
|
# local param,sublist = item:subparam(parm)
|
|
# has_named_call = has_named_call or (sublist and item.is_named_call)
|
|
# for p in iter(param) do
|
|
# local def = item:default_of_param(p)
|
|
# has_optional = has_optional or (def and def ~= true)
|
|
# end
|
|
# end
|
|
# if has_named_call then
|
|
<div class="important_box">
|
|
<b>Note:</b> This $(item.kind) uses named parameters calling convention. It
|
|
means you call it with $(M('`{}`')) and omit the parantheses. For example,
|
|
calling this will all default argument would be <code>$(item.name){}</code>.
|
|
This is a Lua shortcut syntax equivalent to <code>$(item.name)({})</code>.
|
|
<code>args</code> is only a placeholder name for the "lone table argument"
|
|
used in named parameters calls.
|
|
</div>
|
|
# end
|
|
<table class="see_also">
|
|
<tr class="param_header">
|
|
<th>Name</th>
|
|
<th></th>
|
|
<th>Type(s)</th>
|
|
<th>Description</th>
|
|
# if has_optional then
|
|
<th>Default value</th>
|
|
# end
|
|
</tr>
|
|
# for parm in iter(item.params) do
|
|
# local param,sublist = item:subparam(parm)
|
|
# if sublist then
|
|
# local def = item:default_of_param(sublist)
|
|
<tr>
|
|
<td><span class="parameter">$(sublist)</span></td>
|
|
<td>$(def and '<span class="chips">Optional</span>' or '')</td>
|
|
<td><span class="types"><span class="type">table</span></span></td>
|
|
<td class="see_also_description">$(M(item.params.map[sublist],item)) </td>
|
|
# if has_optional then
|
|
# if def and def ~= true then
|
|
<td><span class="default_value"><code>$(def)</code></span></td>
|
|
# elseif def then
|
|
<td><span class="not_applicable">Undefined</span></td>
|
|
# else
|
|
<td><span class="not_applicable" title="This parameter is mandatory">Not applicable</span></td>
|
|
# end
|
|
# end
|
|
</tr>
|
|
# end
|
|
# for p in iter(param) do
|
|
# local name,tp,def = item:display_name_of(p), ldoc.typename(item:type_of_param(p)), item:default_of_param(p)
|
|
<tr$(sublist and ' class="see_also_sublist"' or '')>
|
|
<td><span class="parameter">$(name)</span></td>
|
|
<td>$(def and '<span class="chips">Optional</span>' or '')</td>
|
|
<td><span class="types">$(tp)</span></td>
|
|
<td class="see_also_description">$(M(item.params.map[p],item))</td>
|
|
# if has_optional then
|
|
# if def and def ~= true then
|
|
<td><span class="default_value"><code>$(def)</code></span></td>
|
|
# elseif def then
|
|
<td><span class="not_applicable">Undefined</span></td>
|
|
# else
|
|
<td><span class="not_applicable" title="This parameter is mandatory">Not applicable</span></td>
|
|
# end
|
|
# end
|
|
</tr>
|
|
# end
|
|
# end -- for
|
|
</table>
|
|
# end -- if params
|
|
|
|
# if show_return and item.retgroups then local groups = item.retgroups
|
|
<h3>Returns:</h3>
|
|
# for i,group in ldoc.ipairs(groups) do local li,il = use_li(group)
|
|
<ol>
|
|
# for r in group:iter() do local type, ctypes = item:return_type(r); local rt = ldoc.typename(type)
|
|
$(li)
|
|
# if rt ~= '' then
|
|
<span class="types">$(rt)</span>
|
|
# end
|
|
$(M(r.text,item))$(il)
|
|
# if ctypes then
|
|
<ul>
|
|
# for c in ctypes:iter() do
|
|
<li><span class="parameter">$(c.name)</span>
|
|
<span class="types">$(ldoc.typename(c.type))</span>
|
|
$(M(c.comment,item))</li>
|
|
# end
|
|
</ul>
|
|
# end -- if ctypes
|
|
# end -- for r
|
|
</ol>
|
|
# if i < #groups then
|
|
<h3>Or</h3>
|
|
# end
|
|
# end -- for group
|
|
# end -- if returns
|
|
|
|
# if show_return and item.raise then
|
|
<h3>Raises:</h3>
|
|
$(M(item.raise,item))
|
|
# end
|
|
|
|
# if item.see then
|
|
# local li,il = use_li(item.see)
|
|
<h3>See also:</h3>
|
|
<table class="see_also">
|
|
# for see in iter(item.see) do
|
|
# local see_item = see.mod and get_item(see.mod, see.name)
|
|
# local see_mod = (see_item and see.mod and see.mod ~= item.module and see.mod.name ~= see_item.name) and "("..see.mod.name..")" or ""
|
|
<tr>
|
|
<td><a href="$(ldoc.href(see))" title="In the $(see.mod and see.mod.name) module.">$(see.label)</a></td>
|
|
<td>$(see_item and M(see_item.summary)) $(see_mod)</td>
|
|
<td>
|
|
# if see_item or see.name == "" then
|
|
<span class="chips">$(see.name == "" and "module" or (see_item and see_item.kind))</span>
|
|
# end
|
|
</td>
|
|
<tr>
|
|
# end -- for
|
|
</table>
|
|
# end -- if see
|
|
|
|
# if item.usage then
|
|
# local li,il = use_li(item.usage)
|
|
<h3>Usage:</h3>
|
|
<ul>
|
|
# for usage in iter(item.usage) do
|
|
$(li)<pre class="example">$(ldoc.prettify(un_cmake(usage)))</pre>$(il)
|
|
# end -- for
|
|
</ul>
|
|
# end -- if usage
|
|
|
|
# if item.has_show_more then
|
|
<br />
|
|
<center id=button$(item.uid)>
|
|
<a class="show_more_button" onclick="show_extra('$(item.uid)')">
|
|
Click to display more
|
|
</a>
|
|
</center>
|
|
# end
|
|
|
|
<span id=item$(item.uid) class="hide_extra">
|
|
# if ldoc.custom_tags then
|
|
# for custom in iter(ldoc.custom_tags) do
|
|
# local tag = item.tags[custom[1]]
|
|
# if tag and not custom.hidden then
|
|
# local group_begin, group_end, row_type_begin, row_type_end, group_header = item.get_delim(custom[1])
|
|
<h3>$(custom.title or custom[1]):</h3>
|
|
<$(group_begin)>
|
|
# if group_header then
|
|
<tr style='font-weight: bold;'>
|
|
# for _, g in ldoc.ipairs(group_header) do
|
|
<th>$(g)</th>
|
|
# end -- for g
|
|
</tr>
|
|
# end -- if group_header then
|
|
# for value in iter(tag) do
|
|
<$(row_type_begin)>$(custom.format and custom.format(value, item, M) or M(value))</$(row_type_end)>
|
|
# local sub_values, sub_custom, extra_data = item.get_auto_params(custom[1], value)
|
|
# if sub_values then
|
|
<ul>
|
|
# for _, value in ldoc.ipairs(sub_values) do
|
|
<li>$(sub_custom.format(value, item, M))</li>
|
|
# end -- for auto_params
|
|
</ul>
|
|
# end -- if item.auto_params
|
|
# if extra_data.usage then
|
|
<br/>
|
|
<p>
|
|
<pre class="auto_genenerated_code">$(extra_data.usage)</pre>
|
|
# end -- extra_data.usage
|
|
|
|
# end -- for
|
|
</$(group_end)>
|
|
# end -- if tag
|
|
# end -- iter tags
|
|
# end -- ldoc.custom_tags
|
|
</span>
|
|
|
|
</dd>
|
|
# end end -- for items
|
|
# last_kind = kind
|
|
# end -- for kinds
|
|
</dl>
|
|
|
|
# else -- if module; project-level contents
|
|
|
|
# if ldoc.description then
|
|
<h2>$(M(ldoc.description,nil))</h2>
|
|
# end
|
|
# if ldoc.full_description then
|
|
<p>$(M(ldoc.full_description,nil))</p>
|
|
# end
|
|
|
|
# for kind, mods in ldoc.kinds() do
|
|
<h2>$(kind)</h2>
|
|
# kind = kind:lower()
|
|
<table class="module_list">
|
|
# for m in mods() do
|
|
<tr>
|
|
<td class="name" $(nowrap)><a href="$(html_space(kind))/$(m.name).html">$(m.name)</a></td>
|
|
<td class="summary">$(M(ldoc.strip_header(m.summary),m))</td>
|
|
</tr>
|
|
# end -- for modules
|
|
</table>
|
|
# end -- for kinds
|
|
# end -- if module
|
|
|
|
</div> <!-- id="content" -->
|
|
</div> <!-- id="main" -->
|
|
<div id="about">
|
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc $(ldoc.version)</a></i>
|
|
</div> <!-- id="about" -->
|
|
</div> <!-- id="container" -->
|
|
|
|
<script defer type="text/javascript">
|
|
// Theme selection and its local storage
|
|
var select = document.getElementById("theme-select");
|
|
|
|
var storedTheme = localStorage.getItem('theme') || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
|
|
if (storedTheme) {
|
|
select.value = storedTheme;
|
|
document.documentElement.setAttribute('data-theme', storedTheme)
|
|
}
|
|
|
|
select.addEventListener("change", function() {
|
|
var targetTheme = this.value;
|
|
document.documentElement.setAttribute('data-theme', targetTheme)
|
|
localStorage.setItem('theme', targetTheme);
|
|
});
|
|
|
|
const $nav = document.querySelector("#navigation");
|
|
|
|
// When clicking the sidebar, open it
|
|
$nav.addEventListener("click", function(ev) {
|
|
if (document.body.clientWidth >= 768) {
|
|
return;
|
|
}
|
|
|
|
const target = $nav;
|
|
if (!target.classList.contains("open")) {
|
|
target.classList.add("open");
|
|
ev.stopPropagation();
|
|
}
|
|
});
|
|
|
|
// When clicking anywhere else than the sidebar, close it
|
|
document.querySelector("body").addEventListener("click", function(ev) {
|
|
if (document.body.clientWidth >= 768 || ev.target.contains($nav)) {
|
|
return;
|
|
}
|
|
|
|
const target = $nav;
|
|
if (target.classList.contains("open")) {
|
|
target.classList.remove("open");
|
|
}
|
|
});
|
|
|
|
const copyResultClasses = {
|
|
success : "copy-link--success",
|
|
failure: "copy-link--failure"
|
|
};
|
|
|
|
const removeCopyResultClasses = ($target) =>
|
|
Object.values(copyResultClasses).forEach(c => $target.classList.remove(c));
|
|
|
|
document.querySelectorAll(".js-copy-link").forEach(copyLink => {
|
|
copyLink.addEventListener("click", function(e) {
|
|
e.preventDefault();
|
|
const $target = e.target;
|
|
|
|
removeCopyResultClasses($target);
|
|
|
|
let link = $target.href;
|
|
if (!link) {
|
|
return;
|
|
}
|
|
if (link.startsWith("#")) {
|
|
const curr = window.location.pathname;
|
|
link = curr.substring(0, curr.indexOf("#")) + link;
|
|
}
|
|
|
|
// We need to create a fake element to copy the text from
|
|
const fakeElement = document.createElement("textarea");
|
|
fakeElement.value = link;
|
|
document.body.appendChild(fakeElement);
|
|
fakeElement.select();
|
|
|
|
let success = false;
|
|
try {
|
|
success = document.execCommand("copy");
|
|
} catch(err) {
|
|
success = false;
|
|
}
|
|
|
|
fakeElement.remove();
|
|
$target.classList.add(success ? copyResultClasses.success : copyResultClasses.failure);
|
|
setInterval(() => removeCopyResultClasses($target), 1500);
|
|
});
|
|
});
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|