From dac97826f7d0c9b9135c1a08c4d5f16b61494bd1 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Wed, 26 Aug 2015 10:58:51 +0200 Subject: Renamed output directory to Server --- .../GenerateSelfSignedHTTPSCertUsingOpenssl.cmd | 12 + .../GenerateSelfSignedHTTPSCertUsingOpenssl.sh | 10 + Server/webadmin/files/background.gif | Bin 0 -> 57 bytes Server/webadmin/files/favicon.ico | Bin 0 -> 32038 bytes Server/webadmin/files/guest.html | 18 + Server/webadmin/files/header.png | Bin 0 -> 221 bytes Server/webadmin/files/home.gif | Bin 0 -> 1026 bytes Server/webadmin/files/loading.gif | Bin 0 -> 7364 bytes Server/webadmin/files/log_out.png | Bin 0 -> 995 bytes Server/webadmin/files/login.css | 219 +++++++++++ Server/webadmin/files/login.gif | Bin 0 -> 586 bytes Server/webadmin/files/logo.png | Bin 0 -> 3315 bytes Server/webadmin/files/logo_login.png | Bin 0 -> 18057 bytes Server/webadmin/files/mc-logo.png | Bin 0 -> 66137 bytes Server/webadmin/files/pmfolder.gif | Bin 0 -> 995 bytes Server/webadmin/files/style.css | 427 +++++++++++++++++++++ Server/webadmin/files/sub_pmfolder.gif | Bin 0 -> 1022 bytes Server/webadmin/files/tcat.png | Bin 0 -> 183 bytes Server/webadmin/files/thead.png | Bin 0 -> 132 bytes Server/webadmin/login_template.html | 69 ++++ Server/webadmin/template.html | 140 +++++++ Server/webadmin/template.lua | 200 ++++++++++ 22 files changed, 1095 insertions(+) create mode 100644 Server/webadmin/GenerateSelfSignedHTTPSCertUsingOpenssl.cmd create mode 100755 Server/webadmin/GenerateSelfSignedHTTPSCertUsingOpenssl.sh create mode 100644 Server/webadmin/files/background.gif create mode 100644 Server/webadmin/files/favicon.ico create mode 100644 Server/webadmin/files/guest.html create mode 100644 Server/webadmin/files/header.png create mode 100644 Server/webadmin/files/home.gif create mode 100644 Server/webadmin/files/loading.gif create mode 100644 Server/webadmin/files/log_out.png create mode 100644 Server/webadmin/files/login.css create mode 100644 Server/webadmin/files/login.gif create mode 100644 Server/webadmin/files/logo.png create mode 100644 Server/webadmin/files/logo_login.png create mode 100644 Server/webadmin/files/mc-logo.png create mode 100644 Server/webadmin/files/pmfolder.gif create mode 100644 Server/webadmin/files/style.css create mode 100644 Server/webadmin/files/sub_pmfolder.gif create mode 100644 Server/webadmin/files/tcat.png create mode 100644 Server/webadmin/files/thead.png create mode 100644 Server/webadmin/login_template.html create mode 100644 Server/webadmin/template.html create mode 100644 Server/webadmin/template.lua (limited to 'Server/webadmin') diff --git a/Server/webadmin/GenerateSelfSignedHTTPSCertUsingOpenssl.cmd b/Server/webadmin/GenerateSelfSignedHTTPSCertUsingOpenssl.cmd new file mode 100644 index 000000000..7022ef12a --- /dev/null +++ b/Server/webadmin/GenerateSelfSignedHTTPSCertUsingOpenssl.cmd @@ -0,0 +1,12 @@ +@echo off +echo This script generates the certificate and private key for the https webadmin +echo Note that the generated certificate is self-signed, and therefore not trusted by browsers +echo Note that this script requires openssl to be installed and in PATH +echo. +echo When OpenSSL asks you for Common Name, you need to enter the fully qualified domain name of the server, that is, e. g. gallery.xoft.cz +echo. +echo If OpenSSL fails with an error, "WARNING: can't open config file: /usr/local/ssl/openssl.cnf", you need to run this script as an administrator +echo. + +openssl req -x509 -newkey rsa:2048 -keyout httpskey.pem -out httpscert.crt -days 3650 -nodes +pause diff --git a/Server/webadmin/GenerateSelfSignedHTTPSCertUsingOpenssl.sh b/Server/webadmin/GenerateSelfSignedHTTPSCertUsingOpenssl.sh new file mode 100755 index 000000000..5cf1237c8 --- /dev/null +++ b/Server/webadmin/GenerateSelfSignedHTTPSCertUsingOpenssl.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +echo "This script generates the certificate and private key for the https webadmin" +echo "Note that the generated certificate is self-signed, and therefore not trusted by browsers" +echo "Note that this script requires openssl to be installed and in PATH" +echo "" +echo "When OpenSSL asks you for Common Name, you need to enter the fully qualified domain name of the server, that is, e. g. gallery.xoft.cz" +echo "" + +openssl req -x509 -newkey rsa:2048 -keyout httpskey.pem -out httpscert.crt -days 3650 -nodes diff --git a/Server/webadmin/files/background.gif b/Server/webadmin/files/background.gif new file mode 100644 index 000000000..cab9bed56 Binary files /dev/null and b/Server/webadmin/files/background.gif differ diff --git a/Server/webadmin/files/favicon.ico b/Server/webadmin/files/favicon.ico new file mode 100644 index 000000000..ea4bde926 Binary files /dev/null and b/Server/webadmin/files/favicon.ico differ diff --git a/Server/webadmin/files/guest.html b/Server/webadmin/files/guest.html new file mode 100644 index 000000000..4f965b75c --- /dev/null +++ b/Server/webadmin/files/guest.html @@ -0,0 +1,18 @@ + + + + + + Guest Information + + + +

+ Hello! Welcome to the MCServer WebAdmin. +

+

+ This is a default message, edit files/guest.html to add your own custom message. +

+ + + diff --git a/Server/webadmin/files/header.png b/Server/webadmin/files/header.png new file mode 100644 index 000000000..97b067715 Binary files /dev/null and b/Server/webadmin/files/header.png differ diff --git a/Server/webadmin/files/home.gif b/Server/webadmin/files/home.gif new file mode 100644 index 000000000..b10e0bed7 Binary files /dev/null and b/Server/webadmin/files/home.gif differ diff --git a/Server/webadmin/files/loading.gif b/Server/webadmin/files/loading.gif new file mode 100644 index 000000000..b8d06f669 Binary files /dev/null and b/Server/webadmin/files/loading.gif differ diff --git a/Server/webadmin/files/log_out.png b/Server/webadmin/files/log_out.png new file mode 100644 index 000000000..63232417a Binary files /dev/null and b/Server/webadmin/files/log_out.png differ diff --git a/Server/webadmin/files/login.css b/Server/webadmin/files/login.css new file mode 100644 index 000000000..5d87da4c5 --- /dev/null +++ b/Server/webadmin/files/login.css @@ -0,0 +1,219 @@ +/* Copyright Justin S and MCServer Team, licensed under CC-BY-SA 3.0 */ +* { + margin: 0; +} + +body { + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + -webkit-font-smoothing: antialiased; + background: #fff url(header.png) repeat-x top left; + width: 100%; + min-width: 100%; + overflow: hidden; +} + +a:link { + color: #555; + text-decoration: none; +} + +a:visited { + color: #444; + text-decoration: none; +} + +a:hover, a:active { + color: #000; + text-decoration: underline; +} + +img { + border: none; +} + +h1 { + color: #069; +} + +.row1 { + border-bottom: 1px solid #000; + height: 100px; + max-height: 100px; +} + +.row2 { + margin: 0 auto; + text-align: center; + vertical-align: middle; +} + +.contention { + color: #000; + text-align: left; + line-height: 1.4; + margin: 0; + font-family: Tahoma,Verdana,Arial,Sans-Serif; + font-size: 13px; +} + +button { + background: #fff; + color: #000; + border: 1px solid #ccc; + padding: 3px; + font-family: Tahoma,Verdana,Arial,Sans-Serif; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + margin: -3px 0; +} + +button:hover { + border-top-color: #28597a; + background: #28597a; + color: #ccc; +} + +button:active { + border-top-color: #1b435e; + background: #1b435e; +} + +.push10 { + padding-bottom: 75px; +} + +#panel .upper { + background: #dcdbdc url(tcat.png) repeat-x; + border-top: 1px solid #fff; + border-bottom: 1px solid #bbb; + padding: 7px; +} + +#footer { + z-index: 99999; +} + +#footer ul.menu { + margin: 0; + padding: 0; + list-style: none; +} + +#footer ul.menu li { + margin: 0 5px; + display: inline; +} + +#footer .upper { + background: #dcdbdc url(tcat.png) repeat-x; + border-top: 1px solid #bbb; + padding: 6px; + overflow: hidden; + font-size: 12px; +} + +#footer .upper ul.bottom_links { + float: left; + margin: 3px 0 0 -5px; +} + +#footer .lower { + background: #a1a2a2 url(thead.png) top left repeat-x; + color: #fff; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ddd; + overflow: hidden; + padding: 8px; + font-size: 11px; +} + +#footer .lower a:link, #footer .lower a:visited { + color: #fff; + font-weight: 700; +} + +#footer .lower a:hover, #footer .lower a:active { + color: #fff; + font-weight: 700; +} + +#footer .lower #current_time { + float: right; + padding-right: 6px; +} + +.wrapper { + width: 85%; + min-width: 970px; + max-width: 1500px; + margin: auto; +} + +#footer { + position: fixed; + left: 0; + bottom: 0; + height: 60px; + width: 100%; + background: #999; + border-top: 1px #000 solid; +} + +* html #footer { + position: absolute; + top: expression((0-(footer.offsetHeight)+(document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight)+(ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop))+'px'); +} + +tr td.trow2:first-child { + border-left: 0; +} + +tr td.trow2:last-child { + border-right: 0; +} + +.tborder { + -moz-border-radius: 7px; + -webkit-border-radius: 7px; + border-radius: 7px; +} + +.thead, .rounded_top { + -moz-border-radius-topleft: 6px; + -moz-border-radius-topright: 6px; + -webkit-border-top-left-radius: 6px; + -webkit-border-top-right-radius: 6px; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +table { + color: #000; + font-size: 13px; +} + +.tborder { + background: #fff; + width: 100%; + margin: auto; + border: 1px solid #ccc; + padding: 1px; +} + +.thead { + background: #a1a2a2 url(thead.png) top left repeat-x; + color: #fff; + border-bottom: 1px solid #8e8f8f; + padding: 8px; +} + +.trow2 { + background: #efefef; + border: 1px solid; + border-color: #fff #ddd #ddd #fff; +} + +.padtopp { + padding-top: 25px; +} diff --git a/Server/webadmin/files/login.gif b/Server/webadmin/files/login.gif new file mode 100644 index 000000000..ce2cb6fc0 Binary files /dev/null and b/Server/webadmin/files/login.gif differ diff --git a/Server/webadmin/files/logo.png b/Server/webadmin/files/logo.png new file mode 100644 index 000000000..50733e824 Binary files /dev/null and b/Server/webadmin/files/logo.png differ diff --git a/Server/webadmin/files/logo_login.png b/Server/webadmin/files/logo_login.png new file mode 100644 index 000000000..d2155f928 Binary files /dev/null and b/Server/webadmin/files/logo_login.png differ diff --git a/Server/webadmin/files/mc-logo.png b/Server/webadmin/files/mc-logo.png new file mode 100644 index 000000000..9a77a490f Binary files /dev/null and b/Server/webadmin/files/mc-logo.png differ diff --git a/Server/webadmin/files/pmfolder.gif b/Server/webadmin/files/pmfolder.gif new file mode 100644 index 000000000..3fc68fdcb Binary files /dev/null and b/Server/webadmin/files/pmfolder.gif differ diff --git a/Server/webadmin/files/style.css b/Server/webadmin/files/style.css new file mode 100644 index 000000000..7c0671970 --- /dev/null +++ b/Server/webadmin/files/style.css @@ -0,0 +1,427 @@ +/* Copyright Justin S and MCServer Team, licensed under CC-BY-SA 3.0 */ +* { + margin: 0; +} + +body { + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + -webkit-font-smoothing: antialiased; + background: #fff; + width: 100%; + min-width: 100%; + height:100%; + min-height:100%; + overflow-y: scroll; + overflow-x: hidden; +} + +a:link { + color: #555; + text-decoration: none; +} + +a:visited { + color: #444; + text-decoration: none; +} + +a:hover, a:active { + color: #000; + text-decoration: underline; +} + +img { + border: none; +} + +h1 { + color: #069; + text-shadow: 2px 2px #000; +} + +.row1 { + border-bottom: 1px #000 solid; + height: 100px; + max-height: 100px; + background: #fff url(header.png) repeat-x top left; +} + +.row2 { + margin: 0 auto; + text-align: center; + vertical-align: middle; + margin-top: 25px; + margin-bottom: 25px; +} + +.contention { + color: #000; + text-align: left; + line-height: 1.4; + margin: 0; + font-family: Tahoma,Verdana,Arial,Sans-Serif; + font-size: 13px; + margin-bottom:75px; +} + +.push25 { +} + +#panel ul.menu { + margin: 0; + padding: 0; + list-style: none; +} + +#panel ul.menu li { + margin: 0 5px; + display: inline; +} + +#panel ul.menu li a { + padding-left: 20px; + background-repeat: no-repeat; + background-position: left center; +} + +#panel .upper ul.top_links { + float: right; + font-weight: 700; +} + +#panel .upper { + background: #dcdbdc url(tcat.png) repeat-x; + border-top: 1px solid #fff; + border-bottom: 1px solid #bbb; + padding: 7px; +} + +#footer ul.menu { + margin: 0; + padding: 0; + list-style: none; +} + +#footer ul.menu li { + margin: 0 5px; + display: inline; +} + +#footer .upper { + background: #dcdbdc url(tcat.png) repeat-x; + border-top: 1px solid #bbb; + padding: 6px; + overflow: hidden; + font-size: 12px; +} + +#footer .upper ul.bottom_links { + float: left; + margin: 3px 0 0 -5px; +} + +#footer .lower { + background: #a1a2a2 url(thead.png) top left repeat-x; + color: #fff; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ddd; + overflow: hidden; + padding: 8px; + font-size: 11px; +} + +#footer .lower a:link,#footer .lower a:visited { + color: #fff; + font-weight: 700; +} + +#footer .lower a:hover,#footer .lower a:active { + color: #fff; + font-weight: 700; +} + +#footer .lower #current_time { + float: right; + padding-right: 6px; +} + +.wrapper { + width: 85%; + min-width: 970px; + max-width: 1500px; + margin: auto; +} + +#footer { + position: fixed; + left:0; + bottom:0; + height: 61px; + width: 100%; + background: #999; + border-top: 1px #000 solid; + border-bottom: 1px #000 solid; +} + +* html #footer { + position: absolute; + top: expression((0-(footer.offsetHeight)+(document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight)+(ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop))+'px'); +} + +tr td.trow1:first-child, tr td.trow2:first-child { + border-left: 0; +} + +tr td.trow1:last-child, tr td.trow2:last-child { + border-right: 0; +} + +.tborder { + -moz-border-radius: 7px; + -webkit-border-radius: 7px; + border-radius: 7px; +} + +.thead { + -moz-border-radius-topleft: 6px; + -moz-border-radius-topright: 6px; + -webkit-border-top-left-radius: 6px; + -webkit-border-top-right-radius: 6px; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} + +table { + color: #000; + font-size: 13px; +} + +.tborder { + background: #fff; + width: 100%; + margin: auto; + border: 1px solid #ccc; + padding: 1px; +} + +.thead { + background: #a1a2a2 url(thead.png) top left repeat-x; + color: #fff; + border-bottom: 1px solid #8e8f8f; + padding: 8px; +} + +.tcat { + background: #dcdbdc url(tcat.png) repeat-x; + color: #fff; + border-bottom: 1px solid #bbb; + padding: 6px; + font-size: 12px; +} + +.trow1 { + background: #f5f5f5; + border: 1px solid; + border-color: #fff #ddd #ddd #fff; +} + +.trow2 { + background: #efefef; + border: 1px solid; + border-color: #fff #ddd #ddd #fff; + padding: 15px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +table { + color: #000; + font-size: 13px; + text-align: left; +} + +.tborder { + background: #fff; + width: 100%; + margin: auto; + border: 1px solid #ccc; + padding: 1px; +} + +.thead { + background: #a1a2a2 url(thead.png) top left repeat-x; + color: #fff; + border-bottom: 1px solid #8e8f8f; + padding: 8px; +} + +.tcat { + background: #dcdbdc url(tcat.png) repeat-x; + color: #fff; + border-bottom: 1px solid #bbb; + padding: 6px; + font-size: 12px; +} + +.trow1 { + background: #f5f5f5; + border: 1px solid; + border-color: #fff #ddd #ddd #fff; +} + +.trow2 { + background: #efefef; + border: 1px solid; + border-color: #fff #ddd #ddd #fff; +} + +.smalltext { + font-size: 11px; +} + +textarea { + background: #fff; + color: #000; + border: 1px solid #ccc; + padding: 2px; + line-height: 1.4; + font-family: Tahoma,Verdana,Arial,Sans-Serif; + font-size: 13px; +} + +select { + background: #fff; + padding: 3px; + border: 1px solid #ccc; + font-family: Tahoma,Verdana,Arial,Sans-Serif; +} + +.usercp_nav_item { + display: block; + padding: 1px 0 1px 23px; +} + +.usercp_nav_pmfolder { + background: url(pmfolder.gif) no-repeat left center; +} + +.usercp_nav_sub_pmfolder { + padding-left: 40px; + background: url(sub_pmfolder.gif) no-repeat left center; +} + +.usercp_nav_home { + background: url(home.gif) no-repeat left center; +} + +.pagehead { + top: 0; + left: 0; + width: 100%; +} + +table { + width: 100%; +} + +table th { + border-bottom: 1px solid rgba(0,0,0,0.12); + padding: 5px; + text-align: left; +} + +table tr:nth-child(odd) { + background-color: rgba(0,0,0,0.015); +} + +p { + margin: 4px 0; + padding: 4px 3px; +} + +a { + text-decoration: none; + color: #000; + -webkit-transition: color .1s linear; + -moz-transition: color .1s linear; + transition: color .1s linear; +} + +a:hover { + color: #888; +} + +input[type="text"] { + background: #fff; + color: #000; + border: 1px solid #ccc; + padding: 2px; + line-height: 1.4; + font-family: Tahoma,Verdana,Arial,Sans-Serif; + font-size: 13px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +input[type="text"]:hover { + background-color: #E5E4E2; +} + +input[type="text"]:focus { + background-color: #E5E4E2; +} + +hr { + border: none; + height: 1px; + background-color: rgba(0,0,0,0.12); +} + +h4 { + padding-bottom: 10px; + margin-bottom: 12px; + border-bottom: 1px solid rgba(0,0,0,0.12); +} + +#ChatDiv { + margin-bottom: 10px; +} + +#ChatMessage { + width: 92%; + margin-right: 5px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +input[type="submit"] { + padding: 3px; + padding-left: 5px; + padding-right: 5px; + cursor: pointer; + font-family: Tahoma,Verdana,Arial,Sans-Serif; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + background: #f5f5f5; + border: 1px solid #ccc; +} + +input[type="submit"]:hover { + background-color: #E5E4E2; +} + +button:disabled,input:disabled { + padding: 3px; + padding-left: 5px; + padding-right: 5px; + cursor: pointer; + font-family: Tahoma,Verdana,Arial,Sans-Serif; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + border: none!important; + color: #fff!important; + background-color: #ccc!important; +} diff --git a/Server/webadmin/files/sub_pmfolder.gif b/Server/webadmin/files/sub_pmfolder.gif new file mode 100644 index 000000000..3d0d6e627 Binary files /dev/null and b/Server/webadmin/files/sub_pmfolder.gif differ diff --git a/Server/webadmin/files/tcat.png b/Server/webadmin/files/tcat.png new file mode 100644 index 000000000..eb64eb3d6 Binary files /dev/null and b/Server/webadmin/files/tcat.png differ diff --git a/Server/webadmin/files/thead.png b/Server/webadmin/files/thead.png new file mode 100644 index 000000000..81aa04bac Binary files /dev/null and b/Server/webadmin/files/thead.png differ diff --git a/Server/webadmin/login_template.html b/Server/webadmin/login_template.html new file mode 100644 index 000000000..fb6f21b52 --- /dev/null +++ b/Server/webadmin/login_template.html @@ -0,0 +1,69 @@ + + + + Cuberite WebAdmin - Login + + + + + +
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + + + + + + + + +
+
MCServer WebAdmin
+
+
+ +
+
+
+
+
+ + + diff --git a/Server/webadmin/template.html b/Server/webadmin/template.html new file mode 100644 index 000000000..b0864e35d --- /dev/null +++ b/Server/webadmin/template.html @@ -0,0 +1,140 @@ + + + + {TITLE} | {PLUGIN_NAME} + + + + + + +
+ + Login: {USERNAME} + +
+
+ +
+ +
+ {CONTENT} +
+
+

MCServer is using {MEM}MB of memory, with {NUMCHUNKS} chunks loaded.

+

Web Design by

+
+
+ + diff --git a/Server/webadmin/template.lua b/Server/webadmin/template.lua new file mode 100644 index 000000000..5b3ecf152 --- /dev/null +++ b/Server/webadmin/template.lua @@ -0,0 +1,200 @@ +-- Use a table for fast concatenation of strings +local SiteContent = {} +function Output(String) + table.insert(SiteContent, String) +end + + + + + +function GetTableSize(Table) + local Size = 0 + for key,value in pairs(Table) do + Size = Size + 1 + end + return Size +end + + + + + +function GetDefaultPage() + local PM = cRoot:Get():GetPluginManager() + + local SubTitle = "Current Game" + local Content = "" + + Content = Content .. "

Plugins:

" + Content = Content .. "

Players:


"; + + return Content, SubTitle +end + + + + + +function ShowPage(WebAdmin, TemplateRequest) + SiteContent = {} + local BaseURL = WebAdmin:GetBaseURL(TemplateRequest.Request.Path) + local Title = "Cuberite WebAdmin" + local NumPlayers = cRoot:Get():GetServer():GetNumPlayers() + local MemoryUsageKiB = cRoot:GetPhysicalRAMUsage() + local NumChunks = cRoot:Get():GetTotalChunkCount() + local PluginPage = WebAdmin:GetPage(TemplateRequest.Request) + local PageContent = PluginPage.Content + local SubTitle = PluginPage.PluginName + if (PluginPage.TabName ~= "") then + SubTitle = PluginPage.PluginName .. " - " .. PluginPage.TabName + end + if (PageContent == "") then + PageContent, SubTitle = GetDefaultPage() + end + + local reqParamsClass = "" + + for key,value in pairs(TemplateRequest.Request.Params) do + reqParamsClass = reqParamsClass .. " param-" .. string.lower(string.gsub(key, "[^a-zA-Z0-9]+", "-") .. "-" .. string.gsub(value, "[^a-zA-Z0-9]+", "-")) + end + + if (string.gsub(reqParamsClass, "%s", "") == "") then + reqParamsClass = " no-param" + end + + Output([[ + + + + ]] .. Title .. [[ + + + + + +
+ +
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
Menu
Home
Server Management
+ ]]) + + + local AllPlugins = WebAdmin:GetPlugins() + for key,value in pairs(AllPlugins) do + local PluginWebTitle = value:GetWebTitle() + local TabNames = value:GetTabNames() + if (GetTableSize(TabNames) > 0) then + Output("\n"); + + for webname,prettyname in pairs(TabNames) do + Output("\n") + end + + Output("
\n"); + end + end + + + Output([[ +
+
+ + + + + + + + + +
]] .. SubTitle .. [[
]] .. PageContent .. [[
+
+
+
+ +
+ + +]]) + + return table.concat(SiteContent) +end -- cgit v1.2.3