fes

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit cecc18a69c43d8b6bd2d0b09b1c150d928135538
parent 0eb082c000d05d721b8f7ef01fba2f286fbf2b04
Author: vx-clutch <[email protected]>
Date:   Thu, 20 Nov 2025 18:13:37 -0500

update doc (and builtin)

Diffstat:
Mcore/builtin.lua | 426+++++++++++++++++++++++++++++++++----------------------------------------------
Mdoc/www/index.lua | 55+++++++++++++++++++++++++++++++++++++++++++------------
2 files changed, 223 insertions(+), 258 deletions(-)

diff --git a/core/builtin.lua b/core/builtin.lua @@ -1,3 +1,5 @@ +local std = require("core.std") + local M = {} M.__index = M @@ -17,238 +19,181 @@ function M.site_builder(header, footer) version = site_config.version or "", title = site_config.title or "Document", header = header or [[ -<!DOCTYPE html> + <!DOCTYPE html> <html lang="en"> <head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>{{TITLE}}</title> +<meta charset="UTF-8"> +<meta name="viewport" content="width=device-width,initial-scale=1.0"> +<title>{{TITLE}}</title> <style> - html, - body { - height: 100% - } - - body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; - background: #0f1113; - color: #e6eef3; - line-height: 1.45; - padding: 36px; - } - - .container { - max-width: 1100px; - margin: 0 auto - } - - h1 { - font-size: 40px; - margin: 0 0 18px 0; - font-weight: 700; - } - - .note { - background: #17191b; - border: 1px solid rgba(255, 255, 255, 0.06); - padding: 18px; - border-radius: 4px; - margin: 12px 0 26px 0; - color: #dfe9ee; - } - - .note strong { - color: #f0f6f8 - } - - .callout { - display: block; - margin: 10px 0 - } - - a { - color: #68a6ff; - text-decoration: none - } - - a:hover { - text-decoration: underline - } - - p { - margin: 12px 0 - } - - .muted { - color: #9aa6b1 - } - - .lead { - font-size: 15px; - margin-top: 8px - } - - .highlight { - font-weight: 700; - color: #cde7ff - } - - .small { - font-size: 13px; - color: #9aa6b1; - margin-top: 6px - } - - .links { - margin: 10px 0 - } - - .section { - margin-top: 18px - } - - h2 { - font-size: 32px; - margin: 24px 0 14px 0; - font-weight: 600; - } - - h3 { - font-size: 26px; - margin: 20px 0 12px 0; - font-weight: 600; - } - - h4 { - font-size: 20px; - margin: 16px 0 10px 0; - font-weight: 600; - } - - h5 { - font-size: 16px; - margin: 14px 0 8px 0; - font-weight: 600; - } - - h6 { - font-size: 14px; - margin: 12px 0 6px 0; - font-weight: 600; - color: #9aa6b1; - } - - ul, ol { - margin: 12px 0; - padding-left: 24px; - } - - li { - margin: 6px 0; - } - - code { - background: #17191b; - border: 1px solid rgba(255, 255, 255, 0.06); - padding: 2px 6px; - border-radius: 3px; - font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace; - font-size: 0.9em; - color: #cde7ff; - } - - pre { - background: #17191b; - border: 1px solid rgba(255, 255, 255, 0.06); - padding: 18px; - border-radius: 4px; - margin: 12px 0; - overflow-x: auto; - font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace; - font-size: 14px; - line-height: 1.5; - } - - pre code { - background: none; - border: none; - padding: 0; - font-size: inherit; - } - - blockquote { - border-left: 3px solid #68a6ff; - padding-left: 18px; - margin: 12px 0; - color: #dfe9ee; - font-style: italic; - } - - hr { - border: none; - border-top: 1px solid rgba(255, 255, 255, 0.1); - margin: 24px 0; - } - - img { - max-width: 100%; - height: auto; - border-radius: 4px; - margin: 12px 0; - } - - table { - width: 100%; - border-collapse: collapse; - margin: 12px 0; - } - - th, td { - padding: 10px 14px; - text-align: left; - border-bottom: 1px solid rgba(255, 255, 255, 0.06); - } - - th { - background: #17191b; - font-weight: 600; - color: #f0f6f8; - } - - tr:hover { - background: rgba(255, 255, 255, 0.02); - } - - .divider { - margin: 24px 0; - height: 1px; - background: rgba(255, 255, 255, 0.1); - } - - .section { - margin-top: 32px; - } - - .links { - margin: 10px 0; - } - - .links a { - display: inline-block; - margin-right: 12px; - margin-bottom: 6px; - } - - strong, b { - font-weight: 600; - color: #f0f6f8; - } - - em, i { - font-style: italic; - } - </style> +html,body{ + min-height:100%; + background:#0f1113; +} +body{ + margin:0; + padding:36px; + font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; + background:#0f1113; + color:#e6eef3; + line-height:1.45 +} +.container{max-width:1100px;margin:0 auto} + +h1,h2,h3,h4,h5,h6{ + font-weight:600; + margin:0 0 12px 0 +} + +details { + background:#17191b; + border:1px solid rgba(255,255,255,.06); + border-radius:4px; + padding:12px 14px; + margin:14px 0; +} + +details summary { + list-style: none; + cursor: pointer; + font-weight:600; + color:#e6eef3; +} + +details summary::-webkit-details-marker { + display:none; +} + +details summary::before { + content:"▸"; + display:inline-block; + margin-right:8px; + transition:transform .15s ease; + color:#68a6ff; +} + +details[open] summary::before { + transform:rotate(90deg); +} + +details > *:not(summary) { + margin-top:10px; +} + +h1{font-size:40px;margin-bottom:18px;font-weight:700} +h2{font-size:32px;margin:24px 0 14px} +h3{font-size:26px;margin:20px 0 12px} +h4{font-size:20px;margin:16px 0 10px} +h5{font-size:16px;margin:14px 0 8px} +h6{font-size:14px;margin:12px 0 6px;color:#9aa6b1} + +p{margin:12px 0} + +a{ + color:#68a6ff; + text-decoration:none +} +a:hover{text-decoration:underline} + +.note,pre,code{ + background:#17191b; + border:1px solid rgba(255,255,255,.06) +} +.note{ + padding:18px; + border-radius:4px; + margin:12px 0 26px; + color:#dfe9ee +} +.note strong{color:#f0f6f8} + +.muted{color:#9aa6b1} + +.lead{font-size:15px;margin-top:8px} +.small{font-size:13px;color:#9aa6b1;margin-top:6px} +.highlight{font-weight:700;color:#cde7ff} + +ul,ol{margin:12px 0;padding-left:24px} +li{margin:6px 0} + +code{ + padding:2px 6px; + border-radius:3px; + font-family:"SF Mono",Monaco,"Cascadia Code","Roboto Mono",Consolas,"Courier New",monospace; + font-size:.9em; + color:#cde7ff +} +pre{ + padding:18px; + border-radius:4px; + margin:12px 0; + overflow-x:auto; + font-family:"SF Mono",Monaco,"Cascadia Code","Roboto Mono",Consolas,"Courier New",monospace; + font-size:14px; + line-height:1.5 +} +pre code{ + background:none; + border:none; + padding:0; + font-size:inherit +} + +blockquote{ + border-left:3px solid #68a6ff; + padding-left:18px; + margin:12px 0; + color:#dfe9ee; + font-style:italic +} + +hr{ + border:none; + border-top:1px solid rgba(255,255,255,.1); + margin:24px 0 +} + +img{ + max-width:100%; + height:auto; + border-radius:4px; + margin:12px 0 +} + +table{ + width:100%; + border-collapse:collapse; + margin:12px 0 +} +th,td{ + padding:10px 14px; + text-align:left; + border-bottom:1px solid rgba(255,255,255,.06) +} +th{ + background:#17191b; + font-weight:600; + color:#f0f6f8 +} +tr:hover{background:rgba(255,255,255,.02)} + +.divider{ + margin:24px 0; + height:1px; + background:rgba(255,255,255,.1) +} + +.section{margin-top:32px} + +.links{margin:10px 0} +.links a{ + display:inline-block; + margin:0 12px 6px 0 +} + +strong,b{font-weight:600;color:#f0f6f8} +em,i{font-style:italic} +</style> </head> <body> <div class="container"> @@ -268,44 +213,39 @@ function M:custom(str) return self end -function M:g(str) - self:custom(str) - return self -end - function M:h1(str) str = str or "" - self:custom("<h1>" .. str .. "</h1>") + self:custom(std.h1(str)) return self end function M:h2(str) str = str or "" - self:custom("<h2>" .. str .. "</h2>") + self:custom(std.h2(str)) return self end function M:h3(str) str = str or "" - self:custom("<h3>" .. str .. "</h3>") + self:custom(std.h3(str)) return self end function M:h4(str) str = str or "" - self:custom("<h4>" .. str .. "</h4>") + self:custom(std.h4(str)) return self end function M:h5(str) str = str or "" - self:custom("<h5>" .. str .. "</h5>") + self:custom(std.h5(str)) return self end function M:h6(str) str = str or "" - self:custom("<h6>" .. str .. "</h6>") + self:custom(std.h6(str)) return self end @@ -375,12 +315,6 @@ end function M:code(str) str = str or "" - self:custom("<code>" .. str .. "</code>") - return self -end - -function M:pre(str) - str = str or "" self:custom("<pre><code>" .. str .. "</code></pre>") return self end diff --git a/doc/www/index.lua b/doc/www/index.lua @@ -13,26 +13,57 @@ note that Fes is not production grade or stable, use at your own caution. ]]) -site:muted("Before reading this you should consult the " .. fes.std.external("https://git.vxserver.dev/fSD/fes", "README")) +site:muted("Before reading this you should consult the " .. +fes.std.external("https://git.vxserver.dev/fSD/fes", "README")) local docs = {} local template = [[ -<span class="highlight">%s</span> %s +<span class="highlight">%s</span> +<details> + <summary>Expand description</summary> + <span class="highlight">%s</span> + <br> + %s +</details> ]] -function docs:func(fn, desc) - table.insert(self, string.format(template, fn, desc)) +function docs:func(fn, signature, desc) + table.insert(self, string.format(template, fn, signature, desc)) return self end -docs:func("fes.site_builder", "returns a site object, a required element for this framework.") -docs:func("site:h1", "adds a h1 to the site object.") -docs:func("site:h2", "adds a h2 to the site object.") -docs:func("site:h3", "adds a h3 to the site object.") -docs:func("site:h4", "adds a h4 to the site object.") -docs:func("site:h5", "adds a h5 to the site object.") -docs:func("site:h6", "adds a h6 to the site object.") +docs:func("site_builder", "fes.site_builder()", "returns a site object, a required element for this framework.") +docs:func("custom", "site:custom(content)", "adds a raw string into the site object") +docs:func("h1", "site:h1(content)", "adds a h1 tag to the site object.") +docs:func("h2", "site:h2(content)", "adds a h2 tag to the site object.") +docs:func("h3", "site:h3(content)", "adds a h3 tag to the site object.") +docs:func("h4", "site:h4(content)", "adds a h4 tag to the site object.") +docs:func("h5", "site:h5(content)", "adds a h5 tag to the site object.") +docs:func("h6", "site:h6(content)", "adds a h6 tag to the site object.") +docs:func("p", "site:p(content)", "adds a paragraph tag to the site object.") +docs:func("note", "site:note(content)", "adds a fes note to the site object. A note is a box used for important information or emphasis.") +docs:func("muted", "site:muted(content)", "adds a fes muted block to the site object. A muted block makes text smaller and less noticable, it is useful for small usage notes.") +docs:func("a", "site:a(link, content)", "adds an anchor tag to the site object. By default, if no 'content' is passed is just displays the link") +docs:func("external", "site:external(link, content)", "similarly to 'site:a', it adds an anchor tag to the site object but opens it in a new tab. By default, if no 'content' is passed is just displays the link") +docs:func("ul", "site:ul(items)", "creates an unordered list from passed table, usally 'std.li()'.") +docs:func("ol", "site:ol(items)", "creates an ordered list from passed table, usally 'std.li()'.") +docs:func("li", "site:li(content)", "adds a list entry to the site object") +docs:func("code", "site:code(content)", "adds a code block to the site object.") +docs:func("blockquote", "site:blockquote(content)", "adds a block quote to the site object.") +docs:func("hr", "site:hr()", "adds a horizontal line to the site object.") +docs:func("divider", "site:divider()", "adds a divider to the site object.") +docs:func("img", "site:img(src, alt)", "adds an image to the site object.") +docs:func("table", "site:table(headers, rows)", "adds a table to the site object.") +docs:func("div", "site:div(content, classs)", "adds a custom div to the site object. Custom classes are to be defined in the .css file pointed to by the CUSTOM_CSS variable in Fes.toml") +docs:func("span", "site:span(content, classs)", "adds a custom span to the site object. Custom classes are to be defined in the .css file pointed to by the CUSTOM_CSS variable in Fes.toml") +docs:func("strong", "site:strong(content)", "adds bold text to the site object.") +docs:func("em", "site:em(content)", "adds italicized text to the site object.") +docs:func("br", "site:br()", "adds a break into the document") +docs:func("links", "site:links(link_list)", "adds a formated list of links into the site object.") +docs:func("lead", "site:lead(content)", "adds an instance of the lead class into the site object. This is used in combonation with 'site:note' to create a heading within it.") +docs:func("small", "site:small(content)", "adds a div with class 'small'. The small class changed the size of text within.") +docs:func("highlight", "site:highlight(content)", "adds an instance of the 'highlight' class into the site object. Text with the 'highlight' class will be emphasized") -site:note(table.concat(docs, "\n<br><br>\n")) +site:note(table.concat(docs, "")) return site