Specifikationer att implementera
Det nuvarande användargränsnittet och dess utseende är gjort så som traditionella webbsidor av HTML brukar vara. Det fungerar utan Javascript. Javascript används för vissa förbättringar som inte är nödvändiga, men eftersom det huvudsakligen är gjort utan Javascript återstår mycket som går att förbättra med mer Javascript.
Nyttan av att stödja webbläsare som inte stödjer Javascript är praktiskt taget obetydligt liten, medan nyttan med Javascript är stor. Därför är det bra att sluta stödja webbläsare som inte stödjer Javascript.
Då användargränssnittet är gjort helt med Javascript är det lätt att göra något som inte ser ut som en traditionell webbsida. Min första tanke var att göra så det ser ut som ett klassiskt datorspel i stället, till exempel som Diablo. Sen ändrade jag mig. Nu vill jag i stället att det ska se ut som ett bord med brädspel eller bordsrollspel. Det tycker jag passar Setrak alldeles utmärkt.
Jag har önskat att ha den mycket användbara funktionen av det system för paneler som öppnas sida vid sida som finns i spelledarskärmen, men tyckt att det inte går att göra på samma sätt som i spelledarskärmen eftersom det ser för mycket ut som en instrumentbräda för experter och inte alls som ett spel. Nu har jag kommit på en snyggare variant som passar i spelet.
Sidans bakgrund ser ut som ett bord. Den blir nog en enkel gradient, då vi inte har god tillgång till bilder. På bordet finns paneler uppradade från vänster till höger. Till skillnad mot i spelledarskärmen har panelerna ingen bakgrundsfärg, ingen kantlinje och ingen rullningslist, så panelerna i sig är osynliga. På paneler vars innehåll är så högt så det går att rulla syns ett litet handtag för att rulla. I panelerna ligger lappar som har bakgrundsfärger, kantlinje och skugga. Det kommer alltså att se ut som lappar som ligger på ett helt bord och det kommer inte se uppdelat ut som i spelledarskärmen. Då fler paneler visas än vad som får plats på skärmen förminskas vissa paneler och man kan klicka på dem för att åter förstora dem.
En lapp i den första panelen visar huvudmeny. Vissa alternativ i huvudmenyn öppnar en lapp med undermeny. Lappen visas i en ny panel om platsen räcker, annars under huvudmenyn i samma panel som huvudmenyn. Andra sidor öppnas i nya paneler. Vissa typer av paneler går att kombinera. När man öppnar en panel som går att kombinera med en panel som redan är öppen så kommer båda visas sida vid sida. Tidigare paneler som inte passar ihop stängs.
Kombinationer:
Vissa lappar öppnar lappar till höger. Till exempel öppnas strider i en lapp till höger från lappen med lista över strider.
På mobila enheter med små skärmar visas bara en panel åt gången. Ovanför panelen visas en rad med en knapp för varje panel man har öppen som man kan använda för att växla till den panelen. Knappen för första panelen visar en speciell symbol så man förstår att det är för huvudmenyn. Man kan dra åt höger var som helst på sidan för att växla till den panel som är direkt åt vänster om aktuell panel. Man kan dra åt vänster var som helst på sidan för att växla till den panel som är direkt till höger om aktuell panel.
Huvudmenyn visar en lista över chattar. I dessa ingår diskussioner, konversationer mellan spelare, konversationer mellan rollpersoner, klanprat och spelbrädeprat. Diskussionen Småprat och spelbrädeprat är hela tiden med i menyn. Andra chattar man bevakar läggs till i menyn när man får ett inkommande meddelande. Chattar i menyn visas i olika stil beroende på huruvida de har olästa meddelanden. Det finns en knapp för att visa fler chattar som väljer ut fler chattar att tillfälligt visa i menyn. Chattar går att ta bort från menyn genom att dra dem till knappen för att visa fler chattar.
Aviseringar visas i nedre högra hörnet av sidan. Aviseringar visas bara en kort tid och tonar sedan bort. Under aviseringarna finns en knapp för att visa en panel med de senaste aviseringarna så man kan se dem även om man missade dem innan de tonade bort. Den panelen visar en inställning för att aktivera och inaktivera att ljud spelas när aviseringar uppkommer. Den innehåller även en inställning för att aktivera att skrivbordsaviseringar visas när Setrak inte är i fokus. Skrivbordsaviseringar visas utanför webbläsaren så man kan se dem även medan man använder andra program.
Javascript-koden som utgör användargränssnittet distribueras enligt senaste versionen av GNU General Public License och är uppdelad i många skilda filer kallade moduler. Det finns en funktion för att lägga till ett reguljärt uttryck tillsammans med en funktion som anropas när man besöker adresser som matchar uttrycket. Det finns funktioner för att lägga till alternativ i menyer.
Vem som helst kan ändra användargränssnittet genom att skriva egna moduler och ladda upp. Uppladdade moduler lagras som tillägg. Uppladdade moduler kan ersätta standardmoduler eller lägga till ytterliggare funktionalitet utöver standardmodulerna.
Varje tillägg har status av följande:
Tillägg är från början markerade som nya. Spelledare kan markera moduler som fungerande eller trasiga. När en modul markeras som trasig inaktiveras den för alla spelare. Jag kan manuellt markera moduler som säkra efter att ha läst genom dem. Spelare kan välja vilka moduler de vill använda. När man är på väg att aktivera en modul som inte är markerad som säker visas ett varningsmeddelande. Är modulen markerad som trasig visas ett extra allvarligt varningsmeddelande.
Uppladdade moduler kontrolleras automatiskt för att avgöra vilka externa symboler och vilka egenskaper de använder samt vilka adresser de kommunicerar med. Moduler som kommer åt symboler, egenskaper och adresser som inte ingår i en lista över tillåtna symboler, egenskaper och adresser stoppas från att läggas till som tillägg. Detta är viktigt till exempel för att moduler inte ska kunna komma åt kakor. I varningsmeddelanden som visas när man är på väg att aktivera en modul visas lättlästa beskrivningar av alla adresser modulen kommer åt så man vet vad den kan göra. Detta är viktigt till exempel för att se till att moduler inte kommer åt spelledarfunktioner utan att man vet om det. Moduler kan inte kommunicera med metoden POST annat än medan de hanterar att spelaren klickar på något som tillhör modulen.
Tillägg kan göras som kan väljas av klaner och som körs när man visar en sida som tillhör en klan. Tillägg för klaner får inte ändra i huvudmenyn, bara i klanens meny. Om tillägget inte är markerat som fungerande visas en knapp för att starta tillägget i stället för att det startar automatiskt.
Tillägg kan begära att lagra information och hämta lagrad information. Information kan lagras antingen för inloggad spelare, aktiv rollperson eller valfri klan som inloggad spelare har en rollperson med i.
Där man hanterar tillägg syns det vilka strängar i tillägget som saknar översättning. Man kan där ange översättning till de strängarna.
Följande tillägg lägger till ett alternativ i huvudmenyn som visar en lapp med en hälsning.
add_command_pattern(/^greeting$/, open_greeting)
add_menu_link(_("Greeting"), "greeting")
function open_greeting() {
add_panel(<div class=box> (<div class=message> _"Hello!"))
}Följande tillägg lägger till ett alternativ i huvudmenyn som visar en lapp som visar resultatet av två stycken sexsidiga tärningar och en knapp för att slå tärningarna på nytt.
add_command_pattern(/^dice$/, open_dice)
add_menu_link(_("Dice"), "dice")
function open_dice() {
function throw_dice() {
var a = parseInt(6 * Math.random()) + 1
var b = parseInt(6 * Math.random()) + 1
clear_el(result_el,
<div style=font-size:200%;margin-top:1em>
(cte(a + b)), (cte(a + " + " + b)))
button_el.focus()
}
var result_el = <div>
var button_el = <input type=button value=_"Throw"
style="margin:1em;padding:.25em .5em">
button_el.onclick = throw_dice
add_panel(<div class=box>
(<div style=margin:1em;text-align:center>
(result_el) (button_el)))
throw_dice()
}