Add a site for worldwideportal.

This commit is contained in:
Condorra 2024-10-12 23:46:47 +11:00
parent ed1654322c
commit c4db69a1fe
111 changed files with 4337 additions and 2 deletions

View File

@ -2,7 +2,7 @@
set -Eeuo pipefail set -Eeuo pipefail
if [[ ! -f hugo/hugo ]] || ( ! ( hugo/hugo version | grep -q extended ) ); then if [[ ! -f hugo/hugo ]] || ( ! ( hugo/hugo version | grep -q extended ) ); then
curl -L https://github.com/gohugoio/hugo/releases/download/v0.110.0/hugo_extended_0.110.0_linux-amd64.tar.gz | tar -xvz -C hugo/ curl -L https://github.com/gohugoio/hugo/releases/download/v0.135.0/hugo_extended_0.135.0_linux-amd64.tar.gz | tar -xvz -C hugo/
fi fi
export PATH="$(pwd)/hugo:$PATH" export PATH="$(pwd)/hugo:$PATH"
@ -11,3 +11,5 @@ npm config set registry http://172.19.10.7:4873/
./build.sh ./build.sh
rm ./hugo-static/public/manifest.json # Conflicts with main manifest. rm ./hugo-static/public/manifest.json # Conflicts with main manifest.
cp -r ./assets/* ./assets/.??* ./hugo-static/public/* ../sitegen/ cp -r ./assets/* ./assets/.??* ./hugo-static/public/* ../sitegen/
mkdir -p ../sitegen/worldwideportal
cp -r ./worldwideportal-static/public/* ../sitegen/worldwideportal

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "hugo-static/themes/hugo-book"] [submodule "hugo-static/themes/hugo-book"]
path = hugo-static/themes/hugo-book path = hugo-static/themes/hugo-book
url = https://github.com/alex-shpak/hugo-book url = https://github.com/alex-shpak/hugo-book
[submodule "worldwideportal-static/themes/hugo-book"]
path = worldwideportal-static/themes/hugo-book
url = https://github.com/alex-shpak/hugo-book

View File

@ -4,5 +4,9 @@ npm install -Dy
npm -y exec webpack npm -y exec webpack
cp ./node_modules/xterm/css/xterm.css ./assets/ cp ./node_modules/xterm/css/xterm.css ./assets/
cp dist/main.js ./assets/main.js cp dist/main.js ./assets/main.js
cd hugo-static pushd hugo-static
hugo --theme hugo-book hugo --theme hugo-book
popd
pushd worldwideportal-static
hugo --theme hugo-book
popd

View File

View File

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

View File

@ -0,0 +1,3 @@
baseURL = 'https://blastmud.org/worldwideportal/'
languageCode = 'en-au'
title = 'Worldwideportal'

View File

@ -0,0 +1,4 @@
# Worldwideportal
Worldwideportal is a web-based MUD client with automation support.
It makes it easier to play MUDs (multi-player text-based virtual worlds).

View File

@ -0,0 +1,277 @@
# Getting started with Worldwideportal
To access Worldwideportal (WWP), you need to connect to an instance of it. As Free / Open Source software,
the administrator of your favourite MUD might have made an instance of WWP available for playing their
MUD. If not, you can ask the MUD administrators to install it for you, or install Worldwideportal yourself. This guide
will assume you already have access to a working copy.
Note that if you are using a version provided by your MUD administrator, it might be configured to use a special layout and settings on startup - but the principles are the same.
## Using the terminal
You interact with WWP primarily by entering commands at the terminal - either for WWP, or for the MUD.
Most commands for WWP start with a `#` symbol, while, unless you (or the administrator of the instance you
are using) configure it otherwise with aliases or Lua scripting, anything else is sent to the MUD server.
## Connecting to the server
If you are using a WWP provided by your MUD's administrators, it might be configured to connect on load. If not, or if you want to connect to another MUD, this section can help.
Use the `#connect_mud` command to connect to a MUD. Follow it with two parameters: a name of the MUD connection,
so you can reference the connection later, and a URL for the WebSocket server for the MUD.
Note: Due to browser security restrictions, it is not possible for your browser to connect directly to a MUD server's
telnet port. Instead, Worldwideportal uses a protocol called "WebSockets" for browser-MUD connections, and provides a
separate component MUD administrators or interested users can run to bridge from WebSocket to telnet. You will need the WebSocket URL. WebSocket URLs start with `wss://`, e.g. they might look like `wss://example.com/ws`. If you wanted to create a MUD connection named `ex` to that URL, you'd type `#connect_mud ex wss://example.com/ws` at the prompt.
## Sending commands directly to the MUD
To send a command to the MUD, just type it into the terminal and press enter. You'll see the response on your screen.
For example, you might type in your username and password for a MUD (each followed by enter), and
## Sending multiple commands
You can type in several commands and have them all be sent in quick succession by separating them with `;`.
For example, you might type `n;e` to go north and then east (assuming the MUD you are connected to accepts `n` and `e`
as direction commands). Neither command will be sent until you press enter.
## Sending repeats of the same command
If you want to repeat a command, use `#` followed by a number, then a space, and then your command. The command will be
sent that number of times.
For example `#5 n` might be used to go north 5 places. You can combine it with `;`, e.g. `#5 n;#3 e` to send:
```
n
n
n
n
n
e
e
e
```
to the MUD server.
## Replaying commands
Use the up arrow to see and re-play the last command you typed. Use the up and down arrows repeatedly to navigate through the history.
History is saved in your browser (last 1000 lines entered only), so it will persist even if you close the browser tab and come back later (unless you access Worldwideportal in Private Browsing / Incognito Mode, in which case it will be lost when you exit out
of that mode).
## Copying and pasting
You can copy from the terminal - Ctrl Insert works best for copying, while Shift Insert works best for pasting.
Some other common keypresses don't work in all browsers.
## Setting aliases
If you often send the same command, you can set an alias - meaning that anytime you type a certain thing, instead
of sending it to the MUD, it is replaced by another command (which could use `;` to actually execute several commands).
You set an alias with `#alias what-to-match commands-to-run`.
The what-to-match is interpreted as a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) (regex), meaning a description of text to match that also uses special symbols to describe non-exact matches. One such special character is `^`, which means to match at the start of the line only. It is a good one to start your alias regex with if you don't want your regex to match if the text appears in the middle of a line.
Note: Whenever you invoke a Worldwideportal command, you can wrap each argument between `{` and `}`, allowing you to include characters like `;` in the argument.
Here's a simple example:
`#alias {^hi} {#echo Hello}`
After running this, if you type `hi` in the terminal, it will run the echo command (to send Hello back to your terminal).
You can do more advanced regular expressions. For example, suppose you wanted to add a menace command to taunt and
attack an opponent, but let you specify a player and an insult. You could do something like:
`#alias {^menace (?<player>[^ ]+) (?<insult>.*)} {'$player You're $insult!;k $player}`
`menace Rahrah a dragon-breathed hobbit-sized pea brain`
This one is a bit more complex to understand, so let's step through it:
* `^` is at the start again. This is important, we don't want it to match on something like `You're a menace, Charlie Brown` - `^` ensures it only matches if `menance ` is at the start.
* The round brackets demarcate what is called "capture groups" - parts of the text you want to capture and use in the substituted commands.
* Capture are automatically assigned a number - $0 represents the entire matched text, $1 the first bracketed capture group, $2 the second and so on. However, it is sometimes nicer to give them a name. If you start your capture group with `?<name>`, then the capture group gets named `$name` and can be referred to as such on the other side.
* The square brackets `[]` denote a group of characters where any character inside the brackets can match. However, when it starts with `^`, it is inverted, so will match any character not in the square brackets. So `[^ ]` means to match any character that is not a space.
* The `+` symbol means to match one or more of what is immediately before it, instead of just one. So `[^ ]+` means to match one or more characters that are not spaces. Putting it together, `(?<player>[^ ]+)` means to capture one or more characters that are not spaces as `$player`. This assumes player names can't have spaces in your MUD!
* The `.` symbol means to match any character. The `*` symbol means to match zero or more of what comes before. So `.*` means zero or more of any character. This puts the entire end of the line into the `$insult` capture group.
Note: Aliases are not persisted once you close the tab, but there is a way to script them to come back on every startup.
### Listing aliases
Use `#alias` by itself to see all aliases currently set.
### Deleting aliases
Use `#unalias what-to-match` to remove an alias.
## Setting triggers
Aliases act on what you type into the terminal. Triggers, on the other hand, act on what a MUD sends to you. This is useful if you want to automatically take an action when something happens.
The syntax is `#act what-to-match commands-to-run`, just like aliases.
As an example, consider:
`#act {^The (.*) attacks you.} {"Hey $1, you're going to wish you hadn't done that!}`
If the game sends `The giant squid attacks you.`, you'll send back:
`"Hey giant squid, you're going to wish you hadn't done that!`
### Listing triggers
Use `#act` by itself to see triggers that are set.
### Deleting triggers
Use `#unact what-to-match` to remove a trigger.
## Delays
You can schedule something to happen after a certain amount of time (in seconds, but fractional seconds allowed):
Syntax: `#delay time-to-wait commands-to-run optional-name`
Example:
`#delay 5 {#echo Ding!}`
Giving it a name makes it easier to cancel:
`#delay 5 {#echo Ding!} ding`
(there can only be one active delay for each name at a time, repeating it replaces it).
If you don't give it a name, it will get a numeric identifier assigned.
### Listing delays
Use `#delay` by itself to list delays (and ticks). It will show the name of the delay first, or `#number` if there is no name.
### Cancelling delays
Use `#undelay delay-name` to cancel - delay-name can be `#number` instead.
## Ticks
Sometimes, you don't just want something to happen once after a time period, you want it to recur. `#tick` does this.
Syntax: `#tick time-interval commands-to-run optional-name`
For example, `#tick 60 {#echo Cockadoodledoo!} rooster` will echo a message to the terminal every 60 seconds forever
until you cancel it.
Giving it a name (rooster in the example) is optional, but makes it easier to cancel. If you don't give it a name, it will get a numeric identifier assigned.
### Listing ticks
Use `#tick` by itself to list ticks (and delays still active).
### Cancelling ticks
Use `#untick tick-name` to cancel - tick-name can be `#number` instead.
## Managing the screen
The overall browser window can be divided up (tiled) into different frames if you want. This allows you to connect to several MUDs, or filter different messages into different windows, or to have the editor open at the same time as a MUD connection.
### Referencing a frame position on the screen
WWP has a little language for referencing a position on the screen, allowing you to act on that position.
When there is only one frame, it can be referenced by an empty string - `{}` as an argument to the commands below.
Each of the following letters can take you from `{}` into a further split out frame:
* `l` and `r` take you into the left or right side of a horizontally split screen.
* `t` and `b` take you into the top or bottom side of a vertically split screen.
You put them together into a string to reference a position, for example brt would mean go to the bottom frame of a vertical split, and within that expect a horizontal split - going to the the right side of that, and then in that expecting another vertical split, and take the top. This way, you can uniquely reference any frame on the screen.
### Splitting the screen vertically
To initiate a vertical split, use `#vsplit frame-to-split new-frame-number`.
For example, if you only have one frame up, `#vsplit {} 2` will split the screen in half vertically. Note that you can
use any frame number that hasn't been used (1 is the initially created default frame), and it will be created for you.
Aliases and so on are not shared between frames, so you have to recreate them in the other frame.
### Splitting the screen horizontally
To initiate a horizontal split, use `#hsplit frame-to-split new-frame-number`.
For example, if you only have one frame up, `#hsplit {} 2` will split the screen in half horizontally.
### Rejoining frames
Use `#panel_merge frame-path-to-merge`. The second panel (right or bottom) will be hidden, leaving the left or top.
e.g. to get rid of the top-level split, `#panel_merge {}`.
### Resizing frames
You can use the mouse to drag the separator between frames / panels to a size that suits you.
## Managing scripts
Aliases, triggers, and so on only exist for the current session. But what if you want to build something really advanced and save it? That is where scripts come in. Scripts are saved in your browser and persist when you come back to the same Worldwideportal instance after closing the tab (unless you use Private Browsing / Incognito, in which case they are generally lost between sessions).
Scripts are written in [Lua](https://www.lua.org/manual/5.4/).
### Opening the editor
Type `#editor` to get into the editor, where you can manage scripts. This will temporarily put the frame you are in into editor mode (split first if you want to have the editor and your MUD open at the same time).
### The script browser and the editor area
On the left is the script browser, showing all your scripts. On the right is the editor area - a text editor for the currently selected script.
By default, there is only one script, called `init.lua`. This is a special script which you can't delete, and which gets run when you start your client.
At the top of the script browser is a bar with actions you can take in the editor. You can run a script now in the current frame (Ctrl+Enter also works), create a new script, or exit out of the editor mode.
### Getting out of the editor
You can press escape, or use the back arrow in the bar at the top of the script browser (right hand side).
### Editing a script
Click on the script name. It should highlight. If you tab in to the script browser, you can also use the up and down arrows to select a script.
Once it is selected, head over to the editor area on the right hand side and you can type in text to it. Press Ctrl+Enter to test out the script to see if it works. If there is an error, it appears at the top of the screen in a bar (and will disappear if you run a script with no errors).
Note: There is no need to save - scripts are immediately saved in your browser as you edit them. If you make a mistake and mess up your script, you can undo (only until you leave the editor or switch scripts though) with Ctrl+Z.
### Creating a script
You can create a script by clicking on the plus icon at the top of the script browser. You'll need to enter a name for it. It will start off empty.
### Deleting a script
You can delete a script by clicking on the bin icon alongside the script. You can never delete `init.lua`, but if you don't want anything to happen at startup, you can delete all the text from the file. You'll need to confirm a deletion, but then it is irreversible.
### Writing Lua code to control the client
Scripts should contain Lua code, which is different to the syntax of a normal command. You can, however, submit a normal
command from Lua by using `commands.command("command to send")`, e.g. `commands.command("n")`.
In general, the global `commands` table gives you access to all commands - and you call them with parameters using
Lua syntax as needed.
For example, to set an alias, you can use `commands.alias("^hi", "#echo Hello")` from Lua.
You can register new global commands as well, e.g.
```
commands.mycustomcommand = function(x)
commands.echo("You called mycustomcommand with argument "..x);
end
```
Don't forget to run your Lua code before expecting it to work!
Unlike aliases, commands are global - they will work in any frame.
Tip: When setting aliases or triggers to call into Lua code, the most robust way is to register a new custom command, and make the alias or trigger submit that command.
If you want to write a comment in your Lua code, use `-- ` to make the rest of the line a comment, or
`--[[` to open a comment block that runs until you close it with `--]]`.

View File

@ -0,0 +1,54 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#343a40">
<meta name="color-scheme" content="light dark"><meta property="og:url" content="https://blastmud.org/worldwideportal/404.html">
<meta property="og:site_name" content="Worldwideportal">
<meta property="og:title" content="404 Page not found">
<meta property="og:locale" content="en_au">
<meta property="og:type" content="website">
<title>404 Page not found | Worldwideportal</title>
<link rel="icon" href="/worldwideportal/favicon.png" >
<link rel="manifest" href="/worldwideportal/manifest.json">
<link rel="canonical" href="https://blastmud.org/worldwideportal/404.html">
<link rel="stylesheet" href="/worldwideportal/book.min.6c8b9d2a1fc95075ed7da46ca81060b39add8fff6741ac51259f768929281e2c.css" integrity="sha256-bIudKh/JUHXtfaRsqBBgs5rdj/9nQaxRJZ92iSkoHiw=" crossorigin="anonymous">
<script defer src="/worldwideportal/fuse.min.js"></script>
<script defer src="/worldwideportal/en.search.min.dc09e6b436f929496f8981a8ecb6c9ecad123573562c109805a8ffb7eaa4244c.js" integrity="sha256-3AnmtDb5KUlviYGo7LbJ7K0SNXNWLBCYBaj/t&#43;qkJEw=" crossorigin="anonymous"></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
<style>
.not-found {
text-align: center;
}
.not-found h1 {
margin: .25em 0 0 0;
opacity: .25;
font-size: 40vmin;
}
</style>
</head>
<body>
<main class="flex justify-center not-found">
<div>
<h1>404</h1>
<h2>Page Not Found</h2>
<h3>
<a href="/worldwideportal/">Worldwideportal</a>
</h3>
</div>
</main>
</body>
</html>

View File

@ -0,0 +1,239 @@
<!DOCTYPE html>
<html lang="en-au" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#343a40">
<meta name="color-scheme" content="light dark"><meta property="og:url" content="https://blastmud.org/worldwideportal/categories/">
<meta property="og:site_name" content="Worldwideportal">
<meta property="og:title" content="Categories">
<meta property="og:locale" content="en_au">
<meta property="og:type" content="website">
<title>Categories | Worldwideportal</title>
<link rel="icon" href="/worldwideportal/favicon.png" >
<link rel="manifest" href="/worldwideportal/manifest.json">
<link rel="canonical" href="https://blastmud.org/worldwideportal/categories/">
<link rel="stylesheet" href="/worldwideportal/book.min.6c8b9d2a1fc95075ed7da46ca81060b39add8fff6741ac51259f768929281e2c.css" integrity="sha256-bIudKh/JUHXtfaRsqBBgs5rdj/9nQaxRJZ92iSkoHiw=" crossorigin="anonymous">
<script defer src="/worldwideportal/fuse.min.js"></script>
<script defer src="/worldwideportal/en.search.min.dc09e6b436f929496f8981a8ecb6c9ecad123573562c109805a8ffb7eaa4244c.js" integrity="sha256-3AnmtDb5KUlviYGo7LbJ7K0SNXNWLBCYBaj/t&#43;qkJEw=" crossorigin="anonymous"></script>
<link rel="alternate" type="application/rss+xml" href="https://blastmud.org/worldwideportal/categories/index.xml" title="Worldwideportal" />
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a class="flex align-center" href="/worldwideportal/"><span>Worldwideportal</span>
</a>
</h2>
<div class="book-search hidden">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<script>document.querySelector(".book-search").classList.remove("hidden")</script>
<ul>
<li>
<a href="/worldwideportal/docs/getting-started/" class="">Getting Started</a>
</li>
</ul>
</nav>
<script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/worldwideportal/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<h3>Categories</h3>
<label for="toc-control">
<img src="/worldwideportal/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav>
<ul>
<li class="book-section-flat">
<strong>Categories</strong>
<ul>
</ul>
</li>
<li class="book-section-flat">
<strong>Tags</strong>
<ul>
</ul>
</li>
</ul>
</nav>
</aside>
</header>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
<script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script>
</footer>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav>
<ul>
<li class="book-section-flat">
<strong>Categories</strong>
<ul>
</ul>
</li>
<li class="book-section-flat">
<strong>Tags</strong>
<ul>
</ul>
</li>
</ul>
</nav>
</div>
</aside>
</main>
</body>
</html>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Categories on Worldwideportal</title>
<link>https://blastmud.org/worldwideportal/categories/</link>
<description>Recent content in Categories on Worldwideportal</description>
<generator>Hugo</generator>
<language>en-au</language>
<atom:link href="https://blastmud.org/worldwideportal/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en-au">
<head>
<title>https://blastmud.org/worldwideportal/categories/</title>
<link rel="canonical" href="https://blastmud.org/worldwideportal/categories/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=https://blastmud.org/worldwideportal/categories/">
</head>
</html>

View File

@ -0,0 +1,582 @@
<!DOCTYPE html>
<html lang="en-au" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="
Getting started with Worldwideportal
#
To access Worldwideportal (WWP), you need to connect to an instance of it. As Free / Open Source software,
the administrator of your favourite MUD might have made an instance of WWP available for playing their
MUD. If not, you can ask the MUD administrators to install it for you, or install Worldwideportal yourself. This guide
will assume you already have access to a working copy.">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#343a40">
<meta name="color-scheme" content="light dark"><meta property="og:url" content="https://blastmud.org/worldwideportal/docs/getting-started/">
<meta property="og:site_name" content="Worldwideportal">
<meta property="og:title" content="Worldwideportal">
<meta property="og:description" content=" Getting started with Worldwideportal # To access Worldwideportal (WWP), you need to connect to an instance of it. As Free / Open Source software, the administrator of your favourite MUD might have made an instance of WWP available for playing their MUD. If not, you can ask the MUD administrators to install it for you, or install Worldwideportal yourself. This guide will assume you already have access to a working copy.">
<meta property="og:locale" content="en_au">
<meta property="og:type" content="article">
<meta property="article:section" content="docs">
<title>Getting Started | Worldwideportal</title>
<link rel="icon" href="/worldwideportal/favicon.png" >
<link rel="manifest" href="/worldwideportal/manifest.json">
<link rel="canonical" href="https://blastmud.org/worldwideportal/docs/getting-started/">
<link rel="stylesheet" href="/worldwideportal/book.min.6c8b9d2a1fc95075ed7da46ca81060b39add8fff6741ac51259f768929281e2c.css" integrity="sha256-bIudKh/JUHXtfaRsqBBgs5rdj/9nQaxRJZ92iSkoHiw=" crossorigin="anonymous">
<script defer src="/worldwideportal/fuse.min.js"></script>
<script defer src="/worldwideportal/en.search.min.dc09e6b436f929496f8981a8ecb6c9ecad123573562c109805a8ffb7eaa4244c.js" integrity="sha256-3AnmtDb5KUlviYGo7LbJ7K0SNXNWLBCYBaj/t&#43;qkJEw=" crossorigin="anonymous"></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a class="flex align-center" href="/worldwideportal/"><span>Worldwideportal</span>
</a>
</h2>
<div class="book-search hidden">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<script>document.querySelector(".book-search").classList.remove("hidden")</script>
<ul>
<li>
<a href="/worldwideportal/docs/getting-started/" class="active">Getting Started</a>
</li>
</ul>
</nav>
<script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/worldwideportal/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<h3>Getting Started</h3>
<label for="toc-control">
<img src="/worldwideportal/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav id="TableOfContents">
<ul>
<li><a href="#using-the-terminal">Using the terminal</a></li>
<li><a href="#connecting-to-the-server">Connecting to the server</a></li>
<li><a href="#sending-commands-directly-to-the-mud">Sending commands directly to the MUD</a></li>
<li><a href="#sending-multiple-commands">Sending multiple commands</a></li>
<li><a href="#sending-repeats-of-the-same-command">Sending repeats of the same command</a></li>
<li><a href="#replaying-commands">Replaying commands</a></li>
<li><a href="#copying-and-pasting">Copying and pasting</a></li>
<li><a href="#setting-aliases">Setting aliases</a>
<ul>
<li><a href="#listing-aliases">Listing aliases</a></li>
<li><a href="#deleting-aliases">Deleting aliases</a></li>
</ul>
</li>
<li><a href="#setting-triggers">Setting triggers</a>
<ul>
<li><a href="#listing-triggers">Listing triggers</a></li>
<li><a href="#deleting-triggers">Deleting triggers</a></li>
</ul>
</li>
<li><a href="#delays">Delays</a>
<ul>
<li><a href="#listing-delays">Listing delays</a></li>
<li><a href="#cancelling-delays">Cancelling delays</a></li>
</ul>
</li>
<li><a href="#ticks">Ticks</a>
<ul>
<li><a href="#listing-ticks">Listing ticks</a></li>
<li><a href="#cancelling-ticks">Cancelling ticks</a></li>
</ul>
</li>
<li><a href="#managing-the-screen">Managing the screen</a>
<ul>
<li><a href="#referencing-a-frame-position-on-the-screen">Referencing a frame position on the screen</a></li>
<li><a href="#splitting-the-screen-vertically">Splitting the screen vertically</a></li>
<li><a href="#splitting-the-screen-horizontally">Splitting the screen horizontally</a></li>
<li><a href="#rejoining-frames">Rejoining frames</a></li>
<li><a href="#resizing-frames">Resizing frames</a></li>
</ul>
</li>
<li><a href="#managing-scripts">Managing scripts</a>
<ul>
<li><a href="#opening-the-editor">Opening the editor</a></li>
<li><a href="#the-script-browser-and-the-editor-area">The script browser and the editor area</a></li>
<li><a href="#getting-out-of-the-editor">Getting out of the editor</a></li>
<li><a href="#editing-a-script">Editing a script</a></li>
<li><a href="#creating-a-script">Creating a script</a></li>
<li><a href="#deleting-a-script">Deleting a script</a></li>
<li><a href="#writing-lua-code-to-control-the-client">Writing Lua code to control the client</a></li>
</ul>
</li>
</ul>
</nav>
</aside>
</header>
<article class="markdown book-article"><h1 id="getting-started-with-worldwideportal">
Getting started with Worldwideportal
<a class="anchor" href="#getting-started-with-worldwideportal">#</a>
</h1>
<p>To access Worldwideportal (WWP), you need to connect to an instance of it. As Free / Open Source software,
the administrator of your favourite MUD might have made an instance of WWP available for playing their
MUD. If not, you can ask the MUD administrators to install it for you, or install Worldwideportal yourself. This guide
will assume you already have access to a working copy.</p>
<p>Note that if you are using a version provided by your MUD administrator, it might be configured to use a special layout and settings on startup - but the principles are the same.</p>
<h2 id="using-the-terminal">
Using the terminal
<a class="anchor" href="#using-the-terminal">#</a>
</h2>
<p>You interact with WWP primarily by entering commands at the terminal - either for WWP, or for the MUD.
Most commands for WWP start with a <code>#</code> symbol, while, unless you (or the administrator of the instance you
are using) configure it otherwise with aliases or Lua scripting, anything else is sent to the MUD server.</p>
<h2 id="connecting-to-the-server">
Connecting to the server
<a class="anchor" href="#connecting-to-the-server">#</a>
</h2>
<p>If you are using a WWP provided by your MUD&rsquo;s administrators, it might be configured to connect on load. If not, or if you want to connect to another MUD, this section can help.</p>
<p>Use the <code>#connect_mud</code> command to connect to a MUD. Follow it with two parameters: a name of the MUD connection,
so you can reference the connection later, and a URL for the WebSocket server for the MUD.</p>
<p>Note: Due to browser security restrictions, it is not possible for your browser to connect directly to a MUD server&rsquo;s
telnet port. Instead, Worldwideportal uses a protocol called &ldquo;WebSockets&rdquo; for browser-MUD connections, and provides a
separate component MUD administrators or interested users can run to bridge from WebSocket to telnet. You will need the WebSocket URL. WebSocket URLs start with <code>wss://</code>, e.g. they might look like <code>wss://example.com/ws</code>. If you wanted to create a MUD connection named <code>ex</code> to that URL, you&rsquo;d type <code>#connect_mud ex wss://example.com/ws</code> at the prompt.</p>
<h2 id="sending-commands-directly-to-the-mud">
Sending commands directly to the MUD
<a class="anchor" href="#sending-commands-directly-to-the-mud">#</a>
</h2>
<p>To send a command to the MUD, just type it into the terminal and press enter. You&rsquo;ll see the response on your screen.</p>
<p>For example, you might type in your username and password for a MUD (each followed by enter), and</p>
<h2 id="sending-multiple-commands">
Sending multiple commands
<a class="anchor" href="#sending-multiple-commands">#</a>
</h2>
<p>You can type in several commands and have them all be sent in quick succession by separating them with <code>;</code>.
For example, you might type <code>n;e</code> to go north and then east (assuming the MUD you are connected to accepts <code>n</code> and <code>e</code>
as direction commands). Neither command will be sent until you press enter.</p>
<h2 id="sending-repeats-of-the-same-command">
Sending repeats of the same command
<a class="anchor" href="#sending-repeats-of-the-same-command">#</a>
</h2>
<p>If you want to repeat a command, use <code>#</code> followed by a number, then a space, and then your command. The command will be
sent that number of times.</p>
<p>For example <code>#5 n</code> might be used to go north 5 places. You can combine it with <code>;</code>, e.g. <code>#5 n;#3 e</code> to send:</p>
<pre tabindex="0"><code>n
n
n
n
n
e
e
e
</code></pre><p>to the MUD server.</p>
<h2 id="replaying-commands">
Replaying commands
<a class="anchor" href="#replaying-commands">#</a>
</h2>
<p>Use the up arrow to see and re-play the last command you typed. Use the up and down arrows repeatedly to navigate through the history.</p>
<p>History is saved in your browser (last 1000 lines entered only), so it will persist even if you close the browser tab and come back later (unless you access Worldwideportal in Private Browsing / Incognito Mode, in which case it will be lost when you exit out
of that mode).</p>
<h2 id="copying-and-pasting">
Copying and pasting
<a class="anchor" href="#copying-and-pasting">#</a>
</h2>
<p>You can copy from the terminal - Ctrl Insert works best for copying, while Shift Insert works best for pasting.
Some other common keypresses don&rsquo;t work in all browsers.</p>
<h2 id="setting-aliases">
Setting aliases
<a class="anchor" href="#setting-aliases">#</a>
</h2>
<p>If you often send the same command, you can set an alias - meaning that anytime you type a certain thing, instead
of sending it to the MUD, it is replaced by another command (which could use <code>;</code> to actually execute several commands).</p>
<p>You set an alias with <code>#alias what-to-match commands-to-run</code>.</p>
<p>The what-to-match is interpreted as a <a href="https://en.wikipedia.org/wiki/Regular_expression">regular expression</a> (regex), meaning a description of text to match that also uses special symbols to describe non-exact matches. One such special character is <code>^</code>, which means to match at the start of the line only. It is a good one to start your alias regex with if you don&rsquo;t want your regex to match if the text appears in the middle of a line.</p>
<p>Note: Whenever you invoke a Worldwideportal command, you can wrap each argument between <code>{</code> and <code>}</code>, allowing you to include characters like <code>;</code> in the argument.</p>
<p>Here&rsquo;s a simple example:
<code>#alias {^hi} {#echo Hello}</code></p>
<p>After running this, if you type <code>hi</code> in the terminal, it will run the echo command (to send Hello back to your terminal).</p>
<p>You can do more advanced regular expressions. For example, suppose you wanted to add a menace command to taunt and
attack an opponent, but let you specify a player and an insult. You could do something like:</p>
<p><code>#alias {^menace (?&lt;player&gt;[^ ]+) (?&lt;insult&gt;.*)} {'$player You're $insult!;k $player}</code>
<code>menace Rahrah a dragon-breathed hobbit-sized pea brain</code></p>
<p>This one is a bit more complex to understand, so let&rsquo;s step through it:</p>
<ul>
<li><code>^</code> is at the start again. This is important, we don&rsquo;t want it to match on something like <code>You're a menace, Charlie Brown</code> - <code>^</code> ensures it only matches if <code>menance </code> is at the start.</li>
<li>The round brackets demarcate what is called &ldquo;capture groups&rdquo; - parts of the text you want to capture and use in the substituted commands.</li>
<li>Capture are automatically assigned a number - $0 represents the entire matched text, $1 the first bracketed capture group, $2 the second and so on. However, it is sometimes nicer to give them a name. If you start your capture group with <code>?&lt;name&gt;</code>, then the capture group gets named <code>$name</code> and can be referred to as such on the other side.</li>
<li>The square brackets <code>[]</code> denote a group of characters where any character inside the brackets can match. However, when it starts with <code>^</code>, it is inverted, so will match any character not in the square brackets. So <code>[^ ]</code> means to match any character that is not a space.</li>
<li>The <code>+</code> symbol means to match one or more of what is immediately before it, instead of just one. So <code>[^ ]+</code> means to match one or more characters that are not spaces. Putting it together, <code>(?&lt;player&gt;[^ ]+)</code> means to capture one or more characters that are not spaces as <code>$player</code>. This assumes player names can&rsquo;t have spaces in your MUD!</li>
<li>The <code>.</code> symbol means to match any character. The <code>*</code> symbol means to match zero or more of what comes before. So <code>.*</code> means zero or more of any character. This puts the entire end of the line into the <code>$insult</code> capture group.</li>
</ul>
<p>Note: Aliases are not persisted once you close the tab, but there is a way to script them to come back on every startup.</p>
<h3 id="listing-aliases">
Listing aliases
<a class="anchor" href="#listing-aliases">#</a>
</h3>
<p>Use <code>#alias</code> by itself to see all aliases currently set.</p>
<h3 id="deleting-aliases">
Deleting aliases
<a class="anchor" href="#deleting-aliases">#</a>
</h3>
<p>Use <code>#unalias what-to-match</code> to remove an alias.</p>
<h2 id="setting-triggers">
Setting triggers
<a class="anchor" href="#setting-triggers">#</a>
</h2>
<p>Aliases act on what you type into the terminal. Triggers, on the other hand, act on what a MUD sends to you. This is useful if you want to automatically take an action when something happens.</p>
<p>The syntax is <code>#act what-to-match commands-to-run</code>, just like aliases.</p>
<p>As an example, consider:</p>
<p><code>#act {^The (.*) attacks you.} {&quot;Hey $1, you're going to wish you hadn't done that!}</code></p>
<p>If the game sends <code>The giant squid attacks you.</code>, you&rsquo;ll send back:</p>
<p><code>&quot;Hey giant squid, you're going to wish you hadn't done that!</code></p>
<h3 id="listing-triggers">
Listing triggers
<a class="anchor" href="#listing-triggers">#</a>
</h3>
<p>Use <code>#act</code> by itself to see triggers that are set.</p>
<h3 id="deleting-triggers">
Deleting triggers
<a class="anchor" href="#deleting-triggers">#</a>
</h3>
<p>Use <code>#unact what-to-match</code> to remove a trigger.</p>
<h2 id="delays">
Delays
<a class="anchor" href="#delays">#</a>
</h2>
<p>You can schedule something to happen after a certain amount of time (in seconds, but fractional seconds allowed):</p>
<p>Syntax: <code>#delay time-to-wait commands-to-run optional-name</code></p>
<p>Example:
<code>#delay 5 {#echo Ding!}</code></p>
<p>Giving it a name makes it easier to cancel:</p>
<p><code>#delay 5 {#echo Ding!} ding</code></p>
<p>(there can only be one active delay for each name at a time, repeating it replaces it).
If you don&rsquo;t give it a name, it will get a numeric identifier assigned.</p>
<h3 id="listing-delays">
Listing delays
<a class="anchor" href="#listing-delays">#</a>
</h3>
<p>Use <code>#delay</code> by itself to list delays (and ticks). It will show the name of the delay first, or <code>#number</code> if there is no name.</p>
<h3 id="cancelling-delays">
Cancelling delays
<a class="anchor" href="#cancelling-delays">#</a>
</h3>
<p>Use <code>#undelay delay-name</code> to cancel - delay-name can be <code>#number</code> instead.</p>
<h2 id="ticks">
Ticks
<a class="anchor" href="#ticks">#</a>
</h2>
<p>Sometimes, you don&rsquo;t just want something to happen once after a time period, you want it to recur. <code>#tick</code> does this.</p>
<p>Syntax: <code>#tick time-interval commands-to-run optional-name</code></p>
<p>For example, <code>#tick 60 {#echo Cockadoodledoo!} rooster</code> will echo a message to the terminal every 60 seconds forever
until you cancel it.</p>
<p>Giving it a name (rooster in the example) is optional, but makes it easier to cancel. If you don&rsquo;t give it a name, it will get a numeric identifier assigned.</p>
<h3 id="listing-ticks">
Listing ticks
<a class="anchor" href="#listing-ticks">#</a>
</h3>
<p>Use <code>#tick</code> by itself to list ticks (and delays still active).</p>
<h3 id="cancelling-ticks">
Cancelling ticks
<a class="anchor" href="#cancelling-ticks">#</a>
</h3>
<p>Use <code>#untick tick-name</code> to cancel - tick-name can be <code>#number</code> instead.</p>
<h2 id="managing-the-screen">
Managing the screen
<a class="anchor" href="#managing-the-screen">#</a>
</h2>
<p>The overall browser window can be divided up (tiled) into different frames if you want. This allows you to connect to several MUDs, or filter different messages into different windows, or to have the editor open at the same time as a MUD connection.</p>
<h3 id="referencing-a-frame-position-on-the-screen">
Referencing a frame position on the screen
<a class="anchor" href="#referencing-a-frame-position-on-the-screen">#</a>
</h3>
<p>WWP has a little language for referencing a position on the screen, allowing you to act on that position.</p>
<p>When there is only one frame, it can be referenced by an empty string - <code>{}</code> as an argument to the commands below.
Each of the following letters can take you from <code>{}</code> into a further split out frame:</p>
<ul>
<li><code>l</code> and <code>r</code> take you into the left or right side of a horizontally split screen.</li>
<li><code>t</code> and <code>b</code> take you into the top or bottom side of a vertically split screen.</li>
</ul>
<p>You put them together into a string to reference a position, for example brt would mean go to the bottom frame of a vertical split, and within that expect a horizontal split - going to the the right side of that, and then in that expecting another vertical split, and take the top. This way, you can uniquely reference any frame on the screen.</p>
<h3 id="splitting-the-screen-vertically">
Splitting the screen vertically
<a class="anchor" href="#splitting-the-screen-vertically">#</a>
</h3>
<p>To initiate a vertical split, use <code>#vsplit frame-to-split new-frame-number</code>.</p>
<p>For example, if you only have one frame up, <code>#vsplit {} 2</code> will split the screen in half vertically. Note that you can
use any frame number that hasn&rsquo;t been used (1 is the initially created default frame), and it will be created for you.</p>
<p>Aliases and so on are not shared between frames, so you have to recreate them in the other frame.</p>
<h3 id="splitting-the-screen-horizontally">
Splitting the screen horizontally
<a class="anchor" href="#splitting-the-screen-horizontally">#</a>
</h3>
<p>To initiate a horizontal split, use <code>#hsplit frame-to-split new-frame-number</code>.</p>
<p>For example, if you only have one frame up, <code>#hsplit {} 2</code> will split the screen in half horizontally.</p>
<h3 id="rejoining-frames">
Rejoining frames
<a class="anchor" href="#rejoining-frames">#</a>
</h3>
<p>Use <code>#panel_merge frame-path-to-merge</code>. The second panel (right or bottom) will be hidden, leaving the left or top.
e.g. to get rid of the top-level split, <code>#panel_merge {}</code>.</p>
<h3 id="resizing-frames">
Resizing frames
<a class="anchor" href="#resizing-frames">#</a>
</h3>
<p>You can use the mouse to drag the separator between frames / panels to a size that suits you.</p>
<h2 id="managing-scripts">
Managing scripts
<a class="anchor" href="#managing-scripts">#</a>
</h2>
<p>Aliases, triggers, and so on only exist for the current session. But what if you want to build something really advanced and save it? That is where scripts come in. Scripts are saved in your browser and persist when you come back to the same Worldwideportal instance after closing the tab (unless you use Private Browsing / Incognito, in which case they are generally lost between sessions).</p>
<p>Scripts are written in <a href="https://www.lua.org/manual/5.4/">Lua</a>.</p>
<h3 id="opening-the-editor">
Opening the editor
<a class="anchor" href="#opening-the-editor">#</a>
</h3>
<p>Type <code>#editor</code> to get into the editor, where you can manage scripts. This will temporarily put the frame you are in into editor mode (split first if you want to have the editor and your MUD open at the same time).</p>
<h3 id="the-script-browser-and-the-editor-area">
The script browser and the editor area
<a class="anchor" href="#the-script-browser-and-the-editor-area">#</a>
</h3>
<p>On the left is the script browser, showing all your scripts. On the right is the editor area - a text editor for the currently selected script.</p>
<p>By default, there is only one script, called <code>init.lua</code>. This is a special script which you can&rsquo;t delete, and which gets run when you start your client.</p>
<p>At the top of the script browser is a bar with actions you can take in the editor. You can run a script now in the current frame (Ctrl+Enter also works), create a new script, or exit out of the editor mode.</p>
<h3 id="getting-out-of-the-editor">
Getting out of the editor
<a class="anchor" href="#getting-out-of-the-editor">#</a>
</h3>
<p>You can press escape, or use the back arrow in the bar at the top of the script browser (right hand side).</p>
<h3 id="editing-a-script">
Editing a script
<a class="anchor" href="#editing-a-script">#</a>
</h3>
<p>Click on the script name. It should highlight. If you tab in to the script browser, you can also use the up and down arrows to select a script.</p>
<p>Once it is selected, head over to the editor area on the right hand side and you can type in text to it. Press Ctrl+Enter to test out the script to see if it works. If there is an error, it appears at the top of the screen in a bar (and will disappear if you run a script with no errors).</p>
<p>Note: There is no need to save - scripts are immediately saved in your browser as you edit them. If you make a mistake and mess up your script, you can undo (only until you leave the editor or switch scripts though) with Ctrl+Z.</p>
<h3 id="creating-a-script">
Creating a script
<a class="anchor" href="#creating-a-script">#</a>
</h3>
<p>You can create a script by clicking on the plus icon at the top of the script browser. You&rsquo;ll need to enter a name for it. It will start off empty.</p>
<h3 id="deleting-a-script">
Deleting a script
<a class="anchor" href="#deleting-a-script">#</a>
</h3>
<p>You can delete a script by clicking on the bin icon alongside the script. You can never delete <code>init.lua</code>, but if you don&rsquo;t want anything to happen at startup, you can delete all the text from the file. You&rsquo;ll need to confirm a deletion, but then it is irreversible.</p>
<h3 id="writing-lua-code-to-control-the-client">
Writing Lua code to control the client
<a class="anchor" href="#writing-lua-code-to-control-the-client">#</a>
</h3>
<p>Scripts should contain Lua code, which is different to the syntax of a normal command. You can, however, submit a normal
command from Lua by using <code>commands.command(&quot;command to send&quot;)</code>, e.g. <code>commands.command(&quot;n&quot;)</code>.</p>
<p>In general, the global <code>commands</code> table gives you access to all commands - and you call them with parameters using
Lua syntax as needed.</p>
<p>For example, to set an alias, you can use <code>commands.alias(&quot;^hi&quot;, &quot;#echo Hello&quot;)</code> from Lua.</p>
<p>You can register new global commands as well, e.g.</p>
<pre tabindex="0"><code>commands.mycustomcommand = function(x)
commands.echo(&#34;You called mycustomcommand with argument &#34;..x);
end
</code></pre><p>Don&rsquo;t forget to run your Lua code before expecting it to work!</p>
<p>Unlike aliases, commands are global - they will work in any frame.</p>
<p>Tip: When setting aliases or triggers to call into Lua code, the most robust way is to register a new custom command, and make the alias or trigger submit that command.</p>
<p>If you want to write a comment in your Lua code, use <code>-- </code> to make the rest of the line a comment, or
<code>--[[</code> to open a comment block that runs until you close it with <code>--]]</code>.</p>
</article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
<script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script>
</footer>
<div class="book-comments">
</div>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav id="TableOfContents">
<ul>
<li><a href="#using-the-terminal">Using the terminal</a></li>
<li><a href="#connecting-to-the-server">Connecting to the server</a></li>
<li><a href="#sending-commands-directly-to-the-mud">Sending commands directly to the MUD</a></li>
<li><a href="#sending-multiple-commands">Sending multiple commands</a></li>
<li><a href="#sending-repeats-of-the-same-command">Sending repeats of the same command</a></li>
<li><a href="#replaying-commands">Replaying commands</a></li>
<li><a href="#copying-and-pasting">Copying and pasting</a></li>
<li><a href="#setting-aliases">Setting aliases</a>
<ul>
<li><a href="#listing-aliases">Listing aliases</a></li>
<li><a href="#deleting-aliases">Deleting aliases</a></li>
</ul>
</li>
<li><a href="#setting-triggers">Setting triggers</a>
<ul>
<li><a href="#listing-triggers">Listing triggers</a></li>
<li><a href="#deleting-triggers">Deleting triggers</a></li>
</ul>
</li>
<li><a href="#delays">Delays</a>
<ul>
<li><a href="#listing-delays">Listing delays</a></li>
<li><a href="#cancelling-delays">Cancelling delays</a></li>
</ul>
</li>
<li><a href="#ticks">Ticks</a>
<ul>
<li><a href="#listing-ticks">Listing ticks</a></li>
<li><a href="#cancelling-ticks">Cancelling ticks</a></li>
</ul>
</li>
<li><a href="#managing-the-screen">Managing the screen</a>
<ul>
<li><a href="#referencing-a-frame-position-on-the-screen">Referencing a frame position on the screen</a></li>
<li><a href="#splitting-the-screen-vertically">Splitting the screen vertically</a></li>
<li><a href="#splitting-the-screen-horizontally">Splitting the screen horizontally</a></li>
<li><a href="#rejoining-frames">Rejoining frames</a></li>
<li><a href="#resizing-frames">Resizing frames</a></li>
</ul>
</li>
<li><a href="#managing-scripts">Managing scripts</a>
<ul>
<li><a href="#opening-the-editor">Opening the editor</a></li>
<li><a href="#the-script-browser-and-the-editor-area">The script browser and the editor area</a></li>
<li><a href="#getting-out-of-the-editor">Getting out of the editor</a></li>
<li><a href="#editing-a-script">Editing a script</a></li>
<li><a href="#creating-a-script">Creating a script</a></li>
<li><a href="#deleting-a-script">Deleting a script</a></li>
<li><a href="#writing-lua-code-to-control-the-client">Writing Lua code to control the client</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</aside>
</main>
</body>
</html>

View File

@ -0,0 +1,197 @@
<!DOCTYPE html>
<html lang="en-au" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#343a40">
<meta name="color-scheme" content="light dark"><meta property="og:url" content="https://blastmud.org/worldwideportal/docs/">
<meta property="og:site_name" content="Worldwideportal">
<meta property="og:title" content="Docs">
<meta property="og:locale" content="en_au">
<meta property="og:type" content="website">
<title>Docs | Worldwideportal</title>
<link rel="icon" href="/worldwideportal/favicon.png" >
<link rel="manifest" href="/worldwideportal/manifest.json">
<link rel="canonical" href="https://blastmud.org/worldwideportal/docs/">
<link rel="stylesheet" href="/worldwideportal/book.min.6c8b9d2a1fc95075ed7da46ca81060b39add8fff6741ac51259f768929281e2c.css" integrity="sha256-bIudKh/JUHXtfaRsqBBgs5rdj/9nQaxRJZ92iSkoHiw=" crossorigin="anonymous">
<script defer src="/worldwideportal/fuse.min.js"></script>
<script defer src="/worldwideportal/en.search.min.dc09e6b436f929496f8981a8ecb6c9ecad123573562c109805a8ffb7eaa4244c.js" integrity="sha256-3AnmtDb5KUlviYGo7LbJ7K0SNXNWLBCYBaj/t&#43;qkJEw=" crossorigin="anonymous"></script>
<link rel="alternate" type="application/rss+xml" href="https://blastmud.org/worldwideportal/docs/index.xml" title="Worldwideportal" />
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a class="flex align-center" href="/worldwideportal/"><span>Worldwideportal</span>
</a>
</h2>
<div class="book-search hidden">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<script>document.querySelector(".book-search").classList.remove("hidden")</script>
<ul>
<li>
<a href="/worldwideportal/docs/getting-started/" class="">Getting Started</a>
</li>
</ul>
</nav>
<script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/worldwideportal/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<h3>Docs</h3>
<label for="toc-control">
<img src="/worldwideportal/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav id="TableOfContents"></nav>
</aside>
</header>
<article class="markdown book-article"></article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
<script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script>
</footer>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav id="TableOfContents"></nav>
</div>
</aside>
</main>
</body>
</html>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Docs on Worldwideportal</title>
<link>https://blastmud.org/worldwideportal/docs/</link>
<description>Recent content in Docs on Worldwideportal</description>
<generator>Hugo</generator>
<language>en-au</language>
<atom:link href="https://blastmud.org/worldwideportal/docs/index.xml" rel="self" type="application/rss+xml" />
<item>
<title></title>
<link>https://blastmud.org/worldwideportal/docs/getting-started/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://blastmud.org/worldwideportal/docs/getting-started/</guid>
<description>&lt;h1 id=&#34;getting-started-with-worldwideportal&#34;&gt;&#xA; Getting started with Worldwideportal&#xA; &lt;a class=&#34;anchor&#34; href=&#34;#getting-started-with-worldwideportal&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;To access Worldwideportal (WWP), you need to connect to an instance of it. As Free / Open Source software,&#xA;the administrator of your favourite MUD might have made an instance of WWP available for playing their&#xA;MUD. If not, you can ask the MUD administrators to install it for you, or install Worldwideportal yourself. This guide&#xA;will assume you already have access to a working copy.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1 @@
"use strict";(function(){const o="/en.search-data.min.4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.json",i=Object.assign({cache:!0},{includeScore:!0,useExtendedSearch:!0,fieldNormWeight:1.5,threshold:.2,ignoreLocation:!0,keys:[{name:"title",weight:.7},{name:"content",weight:.3}]}),e=document.querySelector("#book-search-input"),t=document.querySelector("#book-search-results");if(!e)return;e.addEventListener("focus",n),e.addEventListener("keyup",s),document.addEventListener("keypress",a);function a(t){if(t.target.value!==void 0)return;if(e===document.activeElement)return;const n=String.fromCharCode(t.charCode);if(!r(n))return;e.focus(),t.preventDefault()}function r(t){const n=e.getAttribute("data-hotkeys")||"";return n.indexOf(t)>=0}function n(){e.removeEventListener("focus",n),e.required=!0,fetch(o).then(e=>e.json()).then(e=>{window.bookSearchIndex=new Fuse(e,i)}).then(()=>e.required=!1).then(s)}function s(){for(;t.firstChild;)t.removeChild(t.firstChild);if(!e.value)return;const n=window.bookSearchIndex.search(e.value).slice(0,10);n.forEach(function(e){const n=c("<li><a href></a><small></small></li>"),s=n.querySelector("a"),o=n.querySelector("small");s.href=e.item.href,s.textContent=e.item.title,o.textContent=e.item.section,t.appendChild(n)})}function c(e){const t=document.createElement("div");return t.innerHTML=e,t.firstChild}})()

View File

@ -0,0 +1 @@
"use strict";(function(){const o="/worldwideportal/en.search-data.min.4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945.json",i=Object.assign({cache:!0},{includeScore:!0,useExtendedSearch:!0,fieldNormWeight:1.5,threshold:.2,ignoreLocation:!0,keys:[{name:"title",weight:.7},{name:"content",weight:.3}]}),e=document.querySelector("#book-search-input"),t=document.querySelector("#book-search-results");if(!e)return;e.addEventListener("focus",n),e.addEventListener("keyup",s),document.addEventListener("keypress",a);function a(t){if(t.target.value!==void 0)return;if(e===document.activeElement)return;const n=String.fromCharCode(t.charCode);if(!r(n))return;e.focus(),t.preventDefault()}function r(t){const n=e.getAttribute("data-hotkeys")||"";return n.indexOf(t)>=0}function n(){e.removeEventListener("focus",n),e.required=!0,fetch(o).then(e=>e.json()).then(e=>{window.bookSearchIndex=new Fuse(e,i)}).then(()=>e.required=!1).then(s)}function s(){for(;t.firstChild;)t.removeChild(t.firstChild);if(!e.value)return;const n=window.bookSearchIndex.search(e.value).slice(0,10);n.forEach(function(e){const n=c("<li><a href></a><small></small></li>"),s=n.querySelector("a"),o=n.querySelector("small");s.href=e.item.href,s.textContent=e.item.title,o.textContent=e.item.section,t.appendChild(n)})}function c(e){const t=document.createElement("div");return t.innerHTML=e,t.firstChild}})()

View File

@ -0,0 +1 @@
"use strict";(function(){const o="/worldwideportal/en.search-data.min.d011ac786d1501e01502cead5287d26d5381bba887376effd8c01ee9385b04ef.json",i=Object.assign({cache:!0},{includeScore:!0,useExtendedSearch:!0,fieldNormWeight:1.5,threshold:.2,ignoreLocation:!0,keys:[{name:"title",weight:.7},{name:"content",weight:.3}]}),e=document.querySelector("#book-search-input"),t=document.querySelector("#book-search-results");if(!e)return;e.addEventListener("focus",n),e.addEventListener("keyup",s),document.addEventListener("keypress",a);function a(t){if(t.target.value!==void 0)return;if(e===document.activeElement)return;const n=String.fromCharCode(t.charCode);if(!r(n))return;e.focus(),t.preventDefault()}function r(t){const n=e.getAttribute("data-hotkeys")||"";return n.indexOf(t)>=0}function n(){e.removeEventListener("focus",n),e.required=!0,fetch(o).then(e=>e.json()).then(e=>{window.bookSearchIndex=new Fuse(e,i)}).then(()=>e.required=!1).then(s)}function s(){for(;t.firstChild;)t.removeChild(t.firstChild);if(!e.value)return;const n=window.bookSearchIndex.search(e.value).slice(0,10);n.forEach(function(e){const n=c("<li><a href></a><small></small></li>"),s=n.querySelector("a"),o=n.querySelector("small");s.href=e.item.href,s.textContent=e.item.title,o.textContent=e.item.section,t.appendChild(n)})}function c(e){const t=document.createElement("div");return t.innerHTML=e,t.firstChild}})()

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M480-160q-48-38-104-59t-116-21q-42 0-82.5 11T100-198q-21 11-40.5-1T40-234v-482q0-11 5.5-21T62-752q46-24 96-36t102-12q58 0 113.5 15T480-740v484q51-32 107-48t113-16q36 0 70.5 6t69.5 18v-480q15 5 29.5 10.5T898-752q11 5 16.5 15t5.5 21v482q0 23-19.5 35t-40.5 1q-37-20-77.5-31T700-240q-60 0-116 21t-104 59Zm80-200v-380l200-200v400L560-360Zm-160 65v-396q-33-14-68.5-21.5T260-720q-37 0-72 7t-68 21v397q35-13 69.5-19t70.5-6q36 0 70.5 6t69.5 19Zm0 0v-396 396Z"/></svg>

After

Width:  |  Height:  |  Size: 559 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="en-au" dir="ltr">
<head><script src="/worldwideportal/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=worldwideportal/livereload" data-no-instant defer></script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="
Getting started with Worldwideportal
#
">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#343a40">
<meta name="color-scheme" content="light dark"><meta property="og:url" content="http://localhost:1313/worldwideportal/getting-started/">
<meta property="og:site_name" content="Worldwideportal">
<meta property="og:title" content="Worldwideportal">
<meta property="og:description" content=" Getting started with Worldwideportal # ">
<meta property="og:locale" content="en_au">
<meta property="og:type" content="article">
<title>Getting Started | Worldwideportal</title>
<link rel="icon" href="/worldwideportal/favicon.png" >
<link rel="manifest" href="/worldwideportal/manifest.json">
<link rel="canonical" href="http://localhost:1313/worldwideportal/getting-started/">
<link rel="stylesheet" href="/worldwideportal/book.min.6c8b9d2a1fc95075ed7da46ca81060b39add8fff6741ac51259f768929281e2c.css" integrity="sha256-bIudKh/JUHXtfaRsqBBgs5rdj/9nQaxRJZ92iSkoHiw=" crossorigin="anonymous">
<script defer src="/worldwideportal/fuse.min.js"></script>
<script defer src="/worldwideportal/en.search.min.ac9fdff2c5649deafccc7ea027c2b670eb2fdf291f829eb03971d228f8b46cf1.js" integrity="sha256-rJ/f8sVkner8zH6gJ8K2cOsv3ykfgp6wOXHSKPi0bPE=" crossorigin="anonymous"></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a class="flex align-center" href="/worldwideportal/"><span>Worldwideportal</span>
</a>
</h2>
<div class="book-search hidden">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<script>document.querySelector(".book-search").classList.remove("hidden")</script>
</nav>
<script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/worldwideportal/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<h3>Getting Started</h3>
<label for="toc-control">
<img src="/worldwideportal/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav id="TableOfContents"></nav>
</aside>
</header>
<article class="markdown book-article"><h1 id="getting-started-with-worldwideportal">
Getting started with Worldwideportal
<a class="anchor" href="#getting-started-with-worldwideportal">#</a>
</h1>
</article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
<script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script>
</footer>
<div class="book-comments">
</div>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav id="TableOfContents"></nav>
</div>
</aside>
</main>
</body>
</html>

View File

@ -0,0 +1,215 @@
<!DOCTYPE html>
<html lang="en-au" dir="ltr">
<head>
<meta name="generator" content="Hugo 0.135.0">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="
Worldwideportal
#
Worldwideportal is a web-based MUD client with automation support.
It makes it easier to play MUDs (multi-player text-based virtual worlds).">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#343a40">
<meta name="color-scheme" content="light dark"><meta property="og:url" content="https://blastmud.org/worldwideportal/">
<meta property="og:site_name" content="Worldwideportal">
<meta property="og:title" content="Worldwideportal">
<meta property="og:description" content=" Worldwideportal # Worldwideportal is a web-based MUD client with automation support.
It makes it easier to play MUDs (multi-player text-based virtual worlds).">
<meta property="og:locale" content="en_au">
<meta property="og:type" content="website">
<title> | Worldwideportal</title>
<link rel="icon" href="/worldwideportal/favicon.png" >
<link rel="manifest" href="/worldwideportal/manifest.json">
<link rel="canonical" href="https://blastmud.org/worldwideportal/">
<link rel="stylesheet" href="/worldwideportal/book.min.6c8b9d2a1fc95075ed7da46ca81060b39add8fff6741ac51259f768929281e2c.css" integrity="sha256-bIudKh/JUHXtfaRsqBBgs5rdj/9nQaxRJZ92iSkoHiw=" crossorigin="anonymous">
<script defer src="/worldwideportal/fuse.min.js"></script>
<script defer src="/worldwideportal/en.search.min.dc09e6b436f929496f8981a8ecb6c9ecad123573562c109805a8ffb7eaa4244c.js" integrity="sha256-3AnmtDb5KUlviYGo7LbJ7K0SNXNWLBCYBaj/t&#43;qkJEw=" crossorigin="anonymous"></script>
<link rel="alternate" type="application/rss+xml" href="https://blastmud.org/worldwideportal/index.xml" title="Worldwideportal" />
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a class="flex align-center" href="/worldwideportal/"><span>Worldwideportal</span>
</a>
</h2>
<div class="book-search hidden">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<script>document.querySelector(".book-search").classList.remove("hidden")</script>
<ul>
<li>
<a href="/worldwideportal/docs/getting-started/" class="">Getting Started</a>
</li>
</ul>
</nav>
<script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/worldwideportal/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<h3></h3>
<label for="toc-control">
<img src="/worldwideportal/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav id="TableOfContents"></nav>
</aside>
</header>
<article class="markdown book-article"><h1 id="worldwideportal">
Worldwideportal
<a class="anchor" href="#worldwideportal">#</a>
</h1>
<p>Worldwideportal is a web-based MUD client with automation support.</p>
<p>It makes it easier to play MUDs (multi-player text-based virtual worlds).</p>
</article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
<script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script>
</footer>
<div class="book-comments">
</div>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav id="TableOfContents"></nav>
</div>
</aside>
</main>
</body>
</html>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Worldwideportal</title>
<link>https://blastmud.org/worldwideportal/</link>
<description>Recent content on Worldwideportal</description>
<generator>Hugo</generator>
<language>en-au</language>
<atom:link href="https://blastmud.org/worldwideportal/index.xml" rel="self" type="application/rss+xml" />
<item>
<title></title>
<link>https://blastmud.org/worldwideportal/docs/getting-started/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://blastmud.org/worldwideportal/docs/getting-started/</guid>
<description>&lt;h1 id=&#34;getting-started-with-worldwideportal&#34;&gt;&#xA; Getting started with Worldwideportal&#xA; &lt;a class=&#34;anchor&#34; href=&#34;#getting-started-with-worldwideportal&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;To access Worldwideportal (WWP), you need to connect to an instance of it. As Free / Open Source software,&#xA;the administrator of your favourite MUD might have made an instance of WWP available for playing their&#xA;MUD. If not, you can ask the MUD administrators to install it for you, or install Worldwideportal yourself. This guide&#xA;will assume you already have access to a working copy.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};return function(){r.d(o,{default:function(){return d}});var e=r(771),t=r.n(e);const n=function(e,t,n){let r=n,o=0;const i=e.length;for(;r<t.length;){const n=t[r];if(o<=0&&t.slice(r,r+i)===e)return r;"\\"===n?r++:"{"===n?o++:"}"===n&&o--,r++}return-1},i=/^\\begin{/;var a=function(e,t){let r;const o=[],a=new RegExp("("+t.map((e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;r=e.search(a),-1!==r;){r>0&&(o.push({type:"text",data:e.slice(0,r)}),e=e.slice(r));const a=t.findIndex((t=>e.startsWith(t.left)));if(r=n(t[a].right,e,t[a].left.length),-1===r)break;const l=e.slice(0,r+t[a].right.length),s=i.test(l)?l:e.slice(t[a].left.length,r);o.push({type:"math",data:s,rawData:l,display:t[a].display}),e=e.slice(r+t[a].right.length)}return""!==e&&o.push({type:"text",data:e}),o};const l=function(e,n){const r=a(e,n.delimiters);if(1===r.length&&"text"===r[0].type)return null;const o=document.createDocumentFragment();for(let e=0;e<r.length;e++)if("text"===r[e].type)o.appendChild(document.createTextNode(r[e].data));else{const i=document.createElement("span");let a=r[e].data;n.displayMode=r[e].display;try{n.preProcess&&(a=n.preProcess(a)),t().render(a,i,n)}catch(i){if(!(i instanceof t().ParseError))throw i;n.errorCallback("KaTeX auto-render: Failed to parse `"+r[e].data+"` with ",i),o.appendChild(document.createTextNode(r[e].rawData));continue}o.appendChild(i)}return o},s=function(e,t){for(let n=0;n<e.childNodes.length;n++){const r=e.childNodes[n];if(3===r.nodeType){let o=r.textContent,i=r.nextSibling,a=0;for(;i&&i.nodeType===Node.TEXT_NODE;)o+=i.textContent,i=i.nextSibling,a++;const s=l(o,t);if(s){for(let e=0;e<a;e++)r.nextSibling.remove();n+=s.childNodes.length-1,e.replaceChild(s,r)}else n+=a}else if(1===r.nodeType){const e=" "+r.className+" ";-1===t.ignoredTags.indexOf(r.nodeName.toLowerCase())&&t.ignoredClasses.every((t=>-1===e.indexOf(" "+t+" ")))&&s(r,t)}}};var d=function(e,t){if(!e)throw new Error("No element provided to render");const n={};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=n.ignoredTags||["script","noscript","style","textarea","pre","code","option"],n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},s(e,n)}}(),o=o.default}()}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
{
"name": "Worldwideportal",
"short_name": "Worldwideportal",
"start_url": "/worldwideportal/",
"scope": "/worldwideportal/",
"display": "standalone",
"background_color": "#000000",
"theme_color": "#000000",
"icons": [
{
"src": "/worldwideportal/favicon.svg",
"sizes": "512x512"
}
]
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://blastmud.org/worldwideportal/</loc>
</url><url>
<loc>https://blastmud.org/worldwideportal/docs/getting-started/</loc>
</url><url>
<loc>https://blastmud.org/worldwideportal/categories/</loc>
</url><url>
<loc>https://blastmud.org/worldwideportal/docs/</loc>
</url><url>
<loc>https://blastmud.org/worldwideportal/tags/</loc>
</url>
</urlset>

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"/><path fill="none" d="M0 0h24v24H0z"/></svg>

After

Width:  |  Height:  |  Size: 248 B

Some files were not shown because too many files have changed in this diff Show More