diff --git a/src/main/java/org/mangorage/mangobotsite/website/WebsiteConstants.java b/src/main/java/org/mangorage/mangobotsite/website/WebsiteConstants.java index 9636410..30d6117 100644 --- a/src/main/java/org/mangorage/mangobotsite/website/WebsiteConstants.java +++ b/src/main/java/org/mangorage/mangobotsite/website/WebsiteConstants.java @@ -9,6 +9,7 @@ public final class WebsiteConstants { new HeaderData("/home", "Home", true), new HeaderData("/home#plugins", "Plugins", true), new HeaderData("/tricks", "Tricks", true), - new HeaderData("/home#contact", "Contact", true) + new HeaderData("/home#contact", "Contact", true), + new HeaderData("/commands", "Commands", true) ); } diff --git a/src/main/java/org/mangorage/mangobotsite/website/servlet/CommandsServlet.java b/src/main/java/org/mangorage/mangobotsite/website/servlet/CommandsServlet.java index 2ef2069..894983d 100644 --- a/src/main/java/org/mangorage/mangobotsite/website/servlet/CommandsServlet.java +++ b/src/main/java/org/mangorage/mangobotsite/website/servlet/CommandsServlet.java @@ -6,6 +6,7 @@ import org.mangorage.mangobotcore.api.command.v1.AbstractCommand; import org.mangorage.mangobotcore.api.plugin.v1.PluginManager; import org.mangorage.mangobotplugin.entrypoint.MangoBot; +import org.mangorage.mangobotsite.website.WebsiteConstants; import org.mangorage.mangobotsite.website.servlet.impl.StandardHttpServlet; import org.mangorage.mangobotsite.website.util.MapBuilder; import org.mangorage.mangobotsite.website.util.WebUtil; @@ -20,6 +21,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se WebUtil.processTemplate( MapBuilder.of() + .put("headers", WebsiteConstants.headers) .put("commandDataList", dispatcher.getAllRegisteredCommands() .stream() diff --git a/src/main/resources/templates/commands.ftl b/src/main/resources/templates/commands.ftl index f2fc1ef..ff81af6 100644 --- a/src/main/resources/templates/commands.ftl +++ b/src/main/resources/templates/commands.ftl @@ -1,131 +1,118 @@ - - - Commands - - - - -

Command List

- + + + + + Commands - MangoBot + + + + + + + + + + + + + + + +
+
<#list commandDataList as data>
- -

${data.cmd()}

<#list data.commandParts() as cmd>
- - <#if cmd.getCommandNotes()?has_content> - ${cmd.getName()} - - <#list cmd.getCommandNotes() as note> -
• ${note}
- + ${cmd.getName()} + + <#list cmd.getCommandNotes() as note> +
${note}
+ +
-
<#else> - ${cmd.getName()} + ${cmd.getName()} - <#list cmd.getParameters() as p> - <#if p.isRequired()> - <${p.getName()}> - <#else> - [${p.getName()}] - - - -
Name: ${p.getName()}
-
Type: ${p.getType()}
-
Argument Type: ${p.getArgumentType()}
-
Description: ${p.getDescription()}
-
Suggestions: ${p.getSuggestions()}
-
Required: ${p.isRequired()?string("yes","no")}
+ <#if p.isRequired()> + <${p.getName()}> + <#else> + [${p.getName()}] + + + +
Name: ${p.getName()}
+
Type: ${p.getType()}
+
Argument Type: ${p.getArgumentType()}
+
Description: ${p.getDescription()}
+
Suggestions: ${p.getSuggestions()}
+
Required: ${p.isRequired()?string("yes","no")}
+
-
-
-
- - - +
+
+ + + + + \ No newline at end of file diff --git a/src/main/resources/webpage-internal/css/main.css b/src/main/resources/webpage-internal/css/main.css index 2e36346..70a7378 100644 --- a/src/main/resources/webpage-internal/css/main.css +++ b/src/main/resources/webpage-internal/css/main.css @@ -58,13 +58,16 @@ body { color: var(--color-text); line-height: 1.6; overflow-x: hidden; + min-height: 100vh; + display: flex; + flex-direction: column; } - a { text-decoration: none; color: inherit; } + ul { list-style: none; } @@ -141,11 +144,6 @@ img { background: var(--color-bg-tertiary); } -.nav-link.active { - color: var(--color-primary); - background: rgba(255, 149, 0, 0.1); -} - .nav-cta { display: flex; align-items: center; @@ -856,6 +854,7 @@ section { background: var(--color-bg-secondary); border-top: 1px solid var(--color-border); padding: 40px 0; + margin-top: auto; } .footer-content { @@ -1243,3 +1242,184 @@ html { justify-content: center; } } +.page-header { + padding-top: 140px; + padding-bottom: 60px; + background: var(--gradient-hero); +} + +.header-content { + text-align: center; +} + +.header-subtitle { + font-size: 1.1rem; + color: var(--color-text-secondary); + max-width: 600px; + margin: 0 auto; +} + +.commands-content { + padding: 60px 0 100px; +} + +.command-block { + margin-bottom: 40px; + background: var(--color-bg-card); + border: 1px solid var(--color-border); + border-radius: var(--radius-lg); + padding: 24px; + transition: all var(--transition-base); +} + +.command-block:hover { + border-color: var(--color-border-light); + box-shadow: var(--shadow-md); +} + +.command-block > h2 { + font-size: 1.5rem; + font-weight: 700; + color: var(--color-primary); + margin-bottom: 20px; + padding-bottom: 16px; + border-bottom: 1px solid var(--color-border); + display: flex; + align-items: center; + gap: 12px; +} + +.command-block > h2::before { + content: "⚡"; + font-size: 1.25rem; +} + +.command { + margin: 12px 0; + padding: 14px 16px; + background: var(--color-bg-tertiary); + border: 1px solid var(--color-border); + border-radius: var(--radius-md); + font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', monospace; + font-size: 0.9rem; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px; + transition: all var(--transition-fast); +} + +.command:hover { + background: var(--color-bg-elevated); + border-color: var(--color-border-light); +} + +.cmd { + cursor: help; + position: relative; + color: var(--color-primary); + font-weight: 600; + padding: 4px 8px; + background: rgba(255, 149, 0, 0.1); + border-radius: var(--radius-sm); +} + +.cmd .tooltip { + display: none; + position: absolute; + background: var(--color-bg-elevated); + border: 1px solid var(--color-border-light); + padding: 12px; + border-radius: var(--radius-md); + top: calc(100% + 8px); + left: 0; + white-space: nowrap; + z-index: 100; + box-shadow: var(--shadow-lg); + font-family: var(--font-sans); + font-size: 0.85rem; + min-width: 200px; +} + +.cmd .tooltip > div { + margin: 4px 0; + padding-left: 8px; + color: var(--color-text-secondary); +} + +.cmd .tooltip > div::before { + content: "•"; + color: var(--color-primary); + margin-right: 8px; +} + +.cmd:hover .tooltip { + display: block; + animation: fadeIn 0.2s ease; +} + +.param { + cursor: help; + position: relative; + color: var(--color-secondary); + font-weight: 500; + padding: 4px 8px; + background: rgba(88, 101, 242, 0.1); + border-radius: var(--radius-sm); +} + +.param.required { + color: #ef4444; + background: rgba(239, 68, 68, 0.1); +} + +.param .tooltip { + display: none; + position: absolute; + background: var(--color-bg-elevated); + border: 1px solid var(--color-border-light); + padding: 12px 16px; + border-radius: var(--radius-md); + top: calc(100% + 8px); + left: 0; + z-index: 100; + box-shadow: var(--shadow-lg); + font-family: var(--font-sans); + font-size: 0.85rem; + min-width: 280px; + white-space: normal; +} + +.param .tooltip > div { + margin: 6px 0; + line-height: 1.5; +} + +.param .tooltip b { + color: var(--color-text); + font-weight: 600; + display: inline-block; + min-width: 120px; +} + +.param:hover .tooltip { + display: block; + animation: fadeIn 0.2s ease; +} + +@media (max-width: 768px) { + .command { + font-size: 0.85rem; + } + + .param .tooltip, + .cmd .tooltip { + left: auto; + right: 0; + min-width: 250px; + } + + .command-block { + padding: 16px; + } +} \ No newline at end of file