commit cecc18a69c43d8b6bd2d0b09b1c150d928135538
parent 0eb082c000d05d721b8f7ef01fba2f286fbf2b04
Author: vx-clutch <[email protected]>
Date: Thu, 20 Nov 2025 18:13:37 -0500
update doc (and builtin)
Diffstat:
| M | core/builtin.lua | | | 426 | +++++++++++++++++++++++++++++++++---------------------------------------------- |
| M | doc/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