diff --git a/.env b/.env
index 5db6437..23b3e29 100644
--- a/.env
+++ b/.env
@@ -8,4 +8,5 @@ POSTGRES_DB=go-dnd
CRYPT_COST=16
CAMPAIGN_DATA_DIR=campaign_data
CAMPAIGN_WEB_DIR=web
+TEMPLATE_DIR=web/templates/
JWT_SECRET=4g85f6134i78rbc12oi343615tcfpb9
\ No newline at end of file
diff --git a/README.md b/README.md
index b1414b3..964cdb9 100644
--- a/README.md
+++ b/README.md
@@ -3,10 +3,13 @@
[![Build and Test](https://github.com/HielkeFellinger/go-dnd/actions/workflows/go.yml/badge.svg)](https://github.com/HielkeFellinger/go-dnd/actions/workflows/go.yml)
[![codecov](https://codecov.io/github/HielkeFellinger/go-dnd/graph/badge.svg?token=JXQX5TZOXE)](https://codecov.io/github/HielkeFellinger/go-dnd)
-This will, most likely, be nothing more than a simple gui+engine for a D&D/TTRPG oneshot,
+- Requires PostgreSql DB (Use `docker-compose.yml`)
+- Run by `docker-compose.yml` or manual building source. Develop mode via [air](https://github.com/air-verse/air)
+
+This will, most likely, be nothing more than a simple gui+engine for a ""D&D""/TTRPG oneshot,
Build for entertainment (On LAN), with friends and getting familiar with Go.
Do NOT look at this software as an example for anything.
-- Security features will be used; but will not be sufficient for more than "localhost" LAN use
+- Some Security features will be used; but will not be sufficient for more than "localhost" LAN use
- A Clean separation html/js/css will be done later if at all (Will look into HTMX)
- Most libraries used are chosen on nothing more than "Looks cool, I want to try that"
\ No newline at end of file
diff --git a/app/game_engine/characterLoadEventHandler.go b/app/game_engine/characterLoadEventHandler.go
index a5709a9..4200b15 100644
--- a/app/game_engine/characterLoadEventHandler.go
+++ b/app/game_engine/characterLoadEventHandler.go
@@ -2,6 +2,7 @@ package game_engine
import (
"errors"
+ "fmt"
"github.com/hielkefellinger/go-dnd/app/ecs"
"github.com/hielkefellinger/go-dnd/app/ecs_components"
"github.com/hielkefellinger/go-dnd/app/ecs_model_translation"
@@ -14,13 +15,19 @@ import (
func (e *baseEventMessageHandler) handleLoadCharacterEvents(message EventMessage, pool CampaignPool) error {
log.Printf("- Char. Load Event Type: '%d' Message: '%s'", message.Type, message.Id)
+ var handled = false
+
if message.Type == TypeLoadCharacters || message.Type == TypeLoadFullGame {
e.loadCharacters(message, pool)
+ handled = true
}
if message.Type == TypeLoadCharactersDetails {
return e.loadCharactersDetails(message, pool)
}
+ if !handled {
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by 'handleLoadCharacterEvents()'", message.Type))
+ }
return nil
}
diff --git a/app/game_engine/characterUpdateEventHandler.go b/app/game_engine/characterUpdateEventHandler.go
index a1f1cee..8f41b44 100644
--- a/app/game_engine/characterUpdateEventHandler.go
+++ b/app/game_engine/characterUpdateEventHandler.go
@@ -3,6 +3,7 @@ package game_engine
import (
"encoding/json"
"errors"
+ "fmt"
"github.com/google/uuid"
"github.com/hielkefellinger/go-dnd/app/ecs"
"github.com/hielkefellinger/go-dnd/app/ecs_components"
@@ -22,7 +23,7 @@ func (e *baseEventMessageHandler) handleUpdateCharacterEvents(message EventMessa
return e.typeUpdateCharacterUsers(message, pool)
}
- return nil
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by 'handleUpdateCharacterEvents()'", message.Type))
}
func (e *baseEventMessageHandler) typeUpdateCharacterUsers(message EventMessage, pool CampaignPool) error {
diff --git a/app/game_engine/chatEventHandler.go b/app/game_engine/chatEventHandler.go
index 875bdde..1ff0498 100644
--- a/app/game_engine/chatEventHandler.go
+++ b/app/game_engine/chatEventHandler.go
@@ -1,6 +1,8 @@
package game_engine
import (
+ "errors"
+ "fmt"
"golang.org/x/net/html"
"log"
"strings"
@@ -27,10 +29,11 @@ func (e *baseEventMessageHandler) handleChatEventMessage(message EventMessage, p
if justPassTroughMessage {
// Just pass message trough
pool.TransmitEventMessage(message)
+ return nil
}
}
- return nil
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by 'handleChatEventMessage()'", message.Type))
}
func getChatMessage(message string) EventMessage {
diff --git a/app/game_engine/engine_test.go b/app/game_engine/engine_test.go
new file mode 100644
index 0000000..e340e6a
--- /dev/null
+++ b/app/game_engine/engine_test.go
@@ -0,0 +1,105 @@
+package game_engine
+
+import (
+ "log"
+ "slices"
+)
+
+var leadId = "lead"
+var playerOneId = "playerOne"
+var playerTwoId = "playerTwo"
+var playerThreeId = "playerThree"
+
+func initTestCampaignPool() *testCampaignPool {
+ lead := testCampaignClient{
+ Id: "lead",
+ Lead: true,
+ }
+ playerOne := testCampaignClient{
+ Id: "playerOne",
+ Lead: false,
+ }
+ playerTwo := testCampaignClient{
+ Id: "playerTwo",
+ Lead: false,
+ }
+ playerThree := testCampaignClient{
+ Id: "playerThree",
+ Lead: false,
+ }
+
+ testPool := testCampaignPool{
+ Id: 0,
+ LeadId: "lead",
+ Clients: make(map[*testCampaignClient]bool),
+ Messages: make([]EventMessage, 0),
+ }
+ testPool.Engine = initTestGameEngine()
+ testPool.Clients[&lead] = true
+ testPool.Clients[&playerOne] = true
+ testPool.Clients[&playerTwo] = true
+ testPool.Clients[&playerThree] = false
+
+ return &testPool
+}
+
+func initTestGameEngine() Engine {
+ var baseEngine = baseEngine{}
+
+ baseEngine.World = loadGame(SpaceGameTest)
+ baseEngine.EventHandler = &baseEventMessageHandler{}
+
+ return &baseEngine
+}
+
+type testCampaignPool struct {
+ Id uint
+ LeadId string
+ Clients map[*testCampaignClient]bool
+ Engine Engine
+ Messages []EventMessage
+}
+
+type testCampaignClient struct {
+ Id string
+ Lead bool
+}
+
+func (c *testCampaignClient) GetId() string {
+ return c.Id
+}
+
+func (c *testCampaignClient) IsLead() bool {
+ return c.Lead
+}
+
+func (pool *testCampaignPool) GetId() uint {
+ return pool.Id
+}
+
+func (pool *testCampaignPool) GetLeadId() string {
+ return pool.LeadId
+}
+
+func (pool *testCampaignPool) GetEngine() Engine {
+ return pool.Engine
+}
+
+func (pool *testCampaignPool) TransmitEventMessage(message EventMessage) {
+ log.Printf("TEST Pool transmission Message: '%+v' Source: '%s' & Destination: '%v'",
+ message.Id, message.Source, message.Destinations)
+ pool.Messages = append(pool.Messages, message)
+}
+
+func (pool *testCampaignPool) GetAllClientIds(filterOut ...string) []string {
+ userIds := make([]string, 0)
+ for client := range pool.Clients {
+
+ // Filter out if applicable
+ if len(filterOut) > 0 && slices.Contains(filterOut, client.Id) {
+ continue
+ }
+ userIds = append(userIds, client.Id)
+ }
+ return userIds
+}
diff --git a/app/game_engine/eventHandler.go b/app/game_engine/eventHandler.go
index ec1d394..7e096b5 100644
--- a/app/game_engine/eventHandler.go
+++ b/app/game_engine/eventHandler.go
@@ -2,8 +2,10 @@ package game_engine
import (
"bytes"
+ "errors"
"fmt"
"log"
+ "os"
"text/template"
)
@@ -16,12 +18,14 @@ type baseEventMessageHandler struct {
func (e *baseEventMessageHandler) HandleEventMessage(message EventMessage, pool CampaignPool) error {
log.Printf("Message Handler Parsing ID: '%+v' of Type: '%d' \n", message.Id, message.Type)
+ var handled = false
if message.Type == TypeGameSave {
err := e.handlePersistDataEvents(message, pool)
if err != nil {
return err
}
+ handled = true
}
if message.Type == TypeLoadFullGame || (message.Type >= TypeLoadCharacters && message.Type <= TypeLoadCharactersDetails) {
@@ -29,6 +33,7 @@ func (e *baseEventMessageHandler) HandleEventMessage(message EventMessage, pool
if err != nil {
return err
}
+ handled = true
}
if message.Type == TypeLoadFullGame || (message.Type >= TypeLoadMap && message.Type <= TypeLoadMapEntity) {
@@ -36,6 +41,7 @@ func (e *baseEventMessageHandler) HandleEventMessage(message EventMessage, pool
if err != nil {
return err
}
+ handled = true
}
if message.Type >= TypeUpdateCharacterHealth && message.Type <= TypeUpdateCharacterUsers {
@@ -43,6 +49,7 @@ func (e *baseEventMessageHandler) HandleEventMessage(message EventMessage, pool
if err != nil {
return err
}
+ handled = true
}
if message.Type >= TypeUpdateMapEntity && message.Type <= TypeChangeMapBackgroundImage {
@@ -50,6 +57,7 @@ func (e *baseEventMessageHandler) HandleEventMessage(message EventMessage, pool
if err != nil {
return err
}
+ handled = true
}
// Management (Overview)
@@ -58,6 +66,7 @@ func (e *baseEventMessageHandler) HandleEventMessage(message EventMessage, pool
if err != nil {
return err
}
+ handled = true
}
// Management (CRUD)
if message.Type > TypeManagementCrudStart && message.Type < TypeManagementCrudEnd {
@@ -65,6 +74,7 @@ func (e *baseEventMessageHandler) HandleEventMessage(message EventMessage, pool
if err != nil {
return err
}
+ handled = true
}
if message.Type >= TypeChatBroadcast && message.Type <= TypeChatWhisper {
@@ -72,15 +82,19 @@ func (e *baseEventMessageHandler) HandleEventMessage(message EventMessage, pool
if err != nil {
return err
}
+ handled = true
}
+ if !handled {
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by server", message.Type))
+ }
return nil
}
func (e *baseEventMessageHandler) handleLoadHtmlBodyMultipleTemplateFiles(fileNames []string, templateName string, data map[string]any) string {
files := make([]string, 0)
for _, fileName := range fileNames {
- files = append(files, fmt.Sprintf("web/templates/%s", fileName))
+ files = append(files, fmt.Sprintf(os.Getenv("TEMPLATE_DIR")+"%s", fileName))
}
var buf bytes.Buffer
@@ -94,7 +108,7 @@ func (e *baseEventMessageHandler) handleLoadHtmlBodyMultipleTemplateFiles(fileNa
func (e *baseEventMessageHandler) handleLoadHtmlBody(fileName string, templateName string, data map[string]any) string {
var buf bytes.Buffer
- tmpl := template.Must(template.ParseFiles(fmt.Sprintf("web/templates/%s", fileName)))
+ tmpl := template.Must(template.ParseFiles(fmt.Sprintf(os.Getenv("TEMPLATE_DIR")+"%s", fileName)))
err := tmpl.ExecuteTemplate(&buf, templateName, data)
if err != nil {
log.Printf("Error parsing %s `%s`", fileName, err.Error())
diff --git a/app/game_engine/eventHandler_test.go b/app/game_engine/eventHandler_test.go
new file mode 100644
index 0000000..c52a578
--- /dev/null
+++ b/app/game_engine/eventHandler_test.go
@@ -0,0 +1,57 @@
+package game_engine
+
+import (
+ "github.com/stretchr/testify/assert"
+ "testing"
+)
+
+// Minimal Regression ""Test""
+func TestHandleEventMessageLoadFullGame(t *testing.T) {
+ // Arrange
+ t.Setenv("TEMPLATE_DIR", "../../web/templates/")
+ testPool := initTestCampaignPool()
+ baseEventMessageHandler := baseEventMessageHandler{}
+ messageStartGame := NewEventMessage()
+ messageStartGame.Type = TypeLoadFullGame
+ messageStartGame.Source = playerOneId
+ messageStartGame.ReloadDateTime()
+
+ // Act
+ result := baseEventMessageHandler.HandleEventMessage(messageStartGame, testPool)
+
+ // Assert
+ assert.Nil(t, result) // No Error
+ assert.Equal(t, countEventMessageIf(testPool.Messages, func(m *EventMessage) bool {
+ return m.Type == TypeLoadCharacters // (501)
+ }), 1)
+ assert.Equal(t, countEventMessageIf(testPool.Messages, func(m *EventMessage) bool {
+ return m.Type == TypeLoadMap // (531)
+ }), 1)
+ assert.Equal(t, countEventMessageIf(testPool.Messages, func(m *EventMessage) bool {
+ return m.Type == TypeLoadMapEntities // (532)
+ }), 1)
+}
+
+func TestHandleEventMessageEmpty(t *testing.T) {
+ // Arrange
+ t.Setenv("TEMPLATE_DIR", "../../web/templates/")
+ testPool := initTestCampaignPool()
+ baseEventMessageHandler := baseEventMessageHandler{}
+ messageStartGame := NewEventMessage()
+
+ // Act
+ result := baseEventMessageHandler.HandleEventMessage(messageStartGame, testPool)
+
+ // Assert
+ assert.Error(t, result)
+}
+
+func countEventMessageIf(list []EventMessage, fn func(m *EventMessage) bool) int {
+ count := 0
+ for _, m := range list {
+ if fn(&m) {
+ count++
+ }
+ }
+ return count
+}
diff --git a/app/game_engine/loadGame_test.go b/app/game_engine/loadGame_test.go
index d8827d1..be3ac32 100644
--- a/app/game_engine/loadGame_test.go
+++ b/app/game_engine/loadGame_test.go
@@ -5,6 +5,7 @@ import (
"testing"
)
+// Minimal Regression ""Test""
func TestLoadingGame(t *testing.T) {
// Arrange
diff --git a/app/game_engine/managementCrudEventHandler.go b/app/game_engine/managementCrudEventHandler.go
index 58f1a6d..42de5ee 100644
--- a/app/game_engine/managementCrudEventHandler.go
+++ b/app/game_engine/managementCrudEventHandler.go
@@ -3,6 +3,7 @@ package game_engine
import (
"encoding/json"
"errors"
+ "fmt"
"github.com/hielkefellinger/go-dnd/app/ecs"
"github.com/hielkefellinger/go-dnd/app/ecs_model_translation"
"github.com/hielkefellinger/go-dnd/app/helpers"
@@ -12,6 +13,7 @@ import (
func (e *baseEventMessageHandler) handleManagementCrudEvents(message EventMessage, pool CampaignPool) error {
log.Printf("- Game Management CRUD Events Type: '%d' Message: '%s'", message.Type, message.Id)
+ var handled = false
// Maps
if message.Type == TypeLoadUpsertMap {
@@ -19,11 +21,13 @@ func (e *baseEventMessageHandler) handleManagementCrudEvents(message EventMessag
if err != nil {
return err
}
+ handled = true
} else if message.Type == TypeUpsertMap {
err := e.typeUpsertMap(message, pool)
if err != nil {
return err
}
+ handled = true
}
// Items
@@ -32,13 +36,18 @@ func (e *baseEventMessageHandler) handleManagementCrudEvents(message EventMessag
if err != nil {
return err
}
+ handled = true
} else if message.Type == TypeUpsertItem {
err := e.typeUpsertItem(message, pool)
if err != nil {
return err
}
+ handled = true
}
+ if !handled {
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by 'handleManagementCrudEvents()'", message.Type))
+ }
return nil
}
diff --git a/app/game_engine/managementEventHandler.go b/app/game_engine/managementEventHandler.go
index d5b5ae9..08cd34f 100644
--- a/app/game_engine/managementEventHandler.go
+++ b/app/game_engine/managementEventHandler.go
@@ -3,6 +3,7 @@ package game_engine
import (
"encoding/json"
"errors"
+ "fmt"
"github.com/hielkefellinger/go-dnd/app/ecs"
"github.com/hielkefellinger/go-dnd/app/ecs_components"
"github.com/hielkefellinger/go-dnd/app/ecs_model_translation"
@@ -27,7 +28,7 @@ func (e *baseEventMessageHandler) handleManagementEvents(message EventMessage, p
return e.typeManageCampaign(message, pool)
}
- return nil
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by 'handleManagementEvents()'", message.Type))
}
func (e *baseEventMessageHandler) typeManageItems(message EventMessage, pool CampaignPool) error {
diff --git a/app/game_engine/mapLoadEventHandler.go b/app/game_engine/mapLoadEventHandler.go
index 95d3187..6212520 100644
--- a/app/game_engine/mapLoadEventHandler.go
+++ b/app/game_engine/mapLoadEventHandler.go
@@ -3,6 +3,7 @@ package game_engine
import (
"encoding/json"
"errors"
+ "fmt"
"github.com/hielkefellinger/go-dnd/app/ecs"
"github.com/hielkefellinger/go-dnd/app/ecs_model_translation"
"github.com/hielkefellinger/go-dnd/app/helpers"
@@ -14,16 +15,23 @@ import (
func (e *baseEventMessageHandler) handleMapLoadEvents(message EventMessage, pool CampaignPool) error {
log.Printf("- Map. Event Type: '%d' Message: '%s'", message.Type, message.Id)
+ var handled = false
+
if message.Type == TypeLoadMap || message.Type == TypeLoadFullGame {
e.typeLoadMap(message, pool)
+ handled = true
}
if message.Type == TypeLoadMapEntities || message.Type == TypeLoadFullGame {
e.typeLoadMapEntities(message, pool)
+ handled = true
}
if message.Type == TypeLoadMapEntity {
return e.typeLoadMapEntity(message, pool)
}
+ if !handled {
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by 'handleMapLoadEvents()'", message.Type))
+ }
return nil
}
diff --git a/app/game_engine/mapUpdateEventHandler.go b/app/game_engine/mapUpdateEventHandler.go
index 4265b7f..603fdec 100644
--- a/app/game_engine/mapUpdateEventHandler.go
+++ b/app/game_engine/mapUpdateEventHandler.go
@@ -15,44 +15,54 @@ import (
func (e *baseEventMessageHandler) handleMapUpdateEvents(message EventMessage, pool CampaignPool) error {
log.Printf("- Map Update Event Type: '%d' Message: '%s'", message.Type, message.Id)
+ var handled = false
if message.Type == TypeUpdateMapEntity {
err := e.typeUpdateMapEntity(message, pool)
if err != nil {
return err
}
+ handled = true
}
if message.Type == TypeUpdateMapVisibility {
err := e.typeUpdateMapVisibility(message, pool)
if err != nil {
return err
}
+ handled = true
}
if message.Type == TypeAddMapItem {
err := e.typeAddMapItem(message, pool)
if err != nil {
return err
}
+ handled = true
}
if message.Type == TypeRemoveMapItem {
err := e.typeRemoveMapItem(message, pool)
if err != nil {
return err
}
+ handled = true
}
if message.Type == TypeSignalMapItem {
err := e.typeSignalMapItem(message, pool)
if err != nil {
return err
}
+ handled = true
}
if message.Type == TypeChangeMapBackgroundImage {
err := e.typeChangeMapBackgroundImage(message, pool)
if err != nil {
return err
}
+ handled = true
}
+ if !handled {
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by 'handleMapUpdateEvents()'", message.Type))
+ }
return nil
}
diff --git a/app/game_engine/persisitDataEventHandler.go b/app/game_engine/persisitDataEventHandler.go
index 125f632..46fec7b 100644
--- a/app/game_engine/persisitDataEventHandler.go
+++ b/app/game_engine/persisitDataEventHandler.go
@@ -2,6 +2,7 @@ package game_engine
import (
"errors"
+ "fmt"
"log"
)
@@ -12,7 +13,7 @@ func (e *baseEventMessageHandler) handlePersistDataEvents(message EventMessage,
return e.typeGameSave(message, pool)
}
- return nil
+ return errors.New(fmt.Sprintf("message of type '%d' is not recognised by 'handlePersistDataEvents()'", message.Type))
}
func (e *baseEventMessageHandler) typeGameSave(message EventMessage, pool CampaignPool) error {
diff --git a/content/space/entities.yml b/content/space/entities.yml
index 0d92829..9ebb1d9 100644
--- a/content/space/entities.yml
+++ b/content/space/entities.yml
@@ -117,7 +117,7 @@ base_maps:
active: "true"
base64: ""
name: background_plane_1_B
- url: /campaign_data/11/images/map_33x27B.png
+ url: /images/space/map_33x27B.png
base_factions:
- id: 0f4505513-bd22-419e-bd80-b3eec3fb6f3e
name: United Earth
diff --git a/docker-compose.yml b/docker-compose.yml
index 81be15e..a617f74 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -29,6 +29,7 @@ services:
- CRYPT_COST=16
- CAMPAIGN_DATA_DIR=/campaign_data
- CAMPAIGN_WEB_DIR=/web
+ - TEMPLATE_DIR=web/templates/
- JWT_SECRET=4g85f6134i78rbc12oi343615tcfpb9
depends_on:
- db
diff --git a/web/templates/campaign.html b/web/templates/campaign.html
index 15b9d78..2c3450f 100644
--- a/web/templates/campaign.html
+++ b/web/templates/campaign.html
@@ -188,92 +188,104 @@
No active event
// Parse Character Events
if (payLoad.type >= 500 && payLoad.type < 510) {
- handleCharacterEvents(payLoad)
- return
+ handleCharacterEvents(payLoad);
+ return;
}
// Parse Map Events
if (payLoad.type >= 530 && payLoad.type < 549) {
if (payLoad.type === 531) {
- handleCampaignContentMapEvents(payLoad)
+ handleCampaignContentMapEvents(payLoad);
} else if (payLoad.type === 532) {
- handleCampaignContentMapItemsEvents(payLoad)
+ handleCampaignContentMapItemsEvents(payLoad);
} else if (payLoad.type === 533) {
- handleCampaignContentMapItemEvents(payLoad)
+ handleCampaignContentMapItemEvents(payLoad);
}
else if (payLoad.type === 544) {
- handleCampaignContentMapVisibility(payLoad)
+ handleCampaignContentMapVisibility(payLoad);
} else if (payLoad.type === 546) {
- handleMapItemRemoval(payLoad)
+ handleMapItemRemoval(payLoad);
} else if (payLoad.type === 547) {
- handleSignal(payLoad)
+ handleSignal(payLoad);
} else if (payLoad.type === 548) {
- handleNewMapBackground(payLoad)
+ handleNewMapBackground(payLoad);
}
- return
+ return;
}
// Parse Manage Events
if (payLoad.type >= 550 && payLoad.type <= 559) {
- handleManagePage(payLoad)
+ handleManagePage(payLoad);
return;
}
if (payLoad.type >= 5500 && payLoad.type <= 5600 ) {
+ // Reset Error-box
+ let element = document.getElementById("managementCrudError");
+ if (element) {
+ element["style"].visibility = "hidden";
+ }
+
// Maps
if (payLoad.type === 5511) {
- handleRightBarCrudHtml(payLoad)
+ handleRightBarCrudHtml(payLoad);
}
// Items
if (payLoad.type === 5541) {
- handleRightBarCrudHtml(payLoad)
+ handleRightBarCrudHtml(payLoad);
}
return;
}
- if (payLoad.type == 5999) {
-
+ if (payLoad.type === 5999) {
+ stopLoadSpinner();
+ let element = document.getElementById("managementCrudError");
+ if (element) {
+ let body = JSON.parse(payLoad.body)
+ element.textContent = body.title + ': ' + body.message;
+ element["style"].visibility = "visible";
+ }
}
// Parse Chat-messages
if ((payLoad.type >= 400 && payLoad.type < 410) || (payLoad.type >= 800 && payLoad.type < 900)) {
- handleChatEvents(payLoad)
- return
+ handleChatEvents(payLoad);
+ return;
}
{{ if .campaign.UserIsLead }}
- document.getElementById("event-content").innerHTML += evt.data;
+ document.getElementById("event-content").innerHTML += payLoad;
{{ end }}
}
let saveGame = () => {
- sendEvent(wrapMessage('', 2))
+ sendEvent(wrapMessage('', 2));
}
let fullRefresh = () => {
selectedCharDetailsId = "";
loadedCharDetailsId = "";
document.getElementById("entity-details-holder").innerHTML = "";
- sendEvent(wrapMessage('', 500))
+ sendEvent(wrapMessage('', 500));
}
let wrapMessage = (body, type) => {
- return {body: body, type: type}
+ return {body: body, type: type};
}
let sendEvent = (event) => {
- console.log("Sending event to server: ", event)
- socket.send(JSON.stringify(event))
+ console.log("Sending event to server: ", event);
+ socket.send(JSON.stringify(event));
}
let updateCharacterList = () => {
- let body = ''
- sendEvent(wrapMessage(body, 501))
+ let body = '';
+ sendEvent(wrapMessage(body, 501));
}
let sendChatMessage = () => {
- let body = '' + document.getElementById("message").value
- document.getElementById("message").value = ''
+ let body = '' + document.getElementById("message")["value"];
+ document.getElementById("message")["value"] = '';
if (body && body.trim()) {
- sendEvent(wrapMessage(body, 800))
+ sendEvent(wrapMessage(body, 800));
}
}
@@ -339,9 +351,9 @@ No active event
item.Restore = formData.get('restore');
item.RangeMin = formData.get('rangeMin');
item.RangeMax = formData.get('rangeMax');
- sendEvent(wrapMessage(JSON.stringify(item), 5542))
+ sendEvent(wrapMessage(JSON.stringify(item), 5542));
} else {
- stopLoadSpinner()
+ stopLoadSpinner();
}
}
@@ -356,13 +368,13 @@ No active event
item.Description = formData.get('description');
item.X = formData.get('area_x');
item.Y = formData.get('area_y');
- item.RemoveImages = []
- if (document.getElementById("removeImages") && document.getElementById("removeImages").value) {
- let images = document.getElementById("removeImages").value
- let splited = images.split('_');
- for (const key in splited) {
- if (splited[key]) {
- item.RemoveImages.push(splited[key])
+ item.RemoveImages = [];
+ if (document.getElementById("removeImages") && document.getElementById("removeImages")["value"]) {
+ let images = document.getElementById("removeImages")["value"];
+ let split = images.split('_');
+ for (const key in split) {
+ if (split[key]) {
+ item.RemoveImages.push(split[key]);
}
}
}
@@ -371,7 +383,7 @@ No active event
let sendFunction = (image) => {
item.Image = image;
sendEvent(wrapMessage(JSON.stringify(item), 5513));
- stopLoadSpinner()
+ stopLoadSpinner();
}
item.ImageName = formData.get('imageName');
parseFormFileToBase64(formData.get('image'), sendFunction);
@@ -380,7 +392,7 @@ No active event
sendEvent(wrapMessage(JSON.stringify(item), 5513));
}
} else {
- stopLoadSpinner()
+ stopLoadSpinner();
}
}
@@ -407,30 +419,30 @@ No active event
reader.readAsArrayBuffer(file);
} catch (e) {
// ignore; send empty
- stopLoadSpinner()
+ stopLoadSpinner();
}
} else {
- stopLoadSpinner()
+ stopLoadSpinner();
}
}
let handleRemovalOfImagesRequest = (id) => {
if (document.getElementById("removeImages")) {
- console.log(document.getElementById("removeImages").value)
+ console.log(document.getElementById("removeImages")["value"]);
// Check if to be removed or needs to be recovered
- if (document.getElementById("removeImages").value &&
- document.getElementById("removeImages").value.indexOf(id) > 0) {
- document.getElementById("image_title_" + id).style.textDecoration = '';
- document.getElementById("image_" + id).style.opacity = '100%';
+ if (document.getElementById("removeImages")["value"] &&
+ document.getElementById("removeImages")["value"].indexOf(id) > 0) {
+ document.getElementById("image_title_" + id)["style"].textDecoration = '';
+ document.getElementById("image_" + id)["style"].opacity = '100%';
let button = document.getElementById("btn_remove_" + id);
button.title = "Remove Image";
button.innerHTML = 'x';
- document.getElementById("removeImages").value =
- document.getElementById("removeImages").value.replace('_' + id, '');
+ document.getElementById("removeImages")["value"] =
+ document.getElementById("removeImages")["value"].replace('_' + id, '');
} else {
- document.getElementById("removeImages").value += '_' + id;
- document.getElementById("image_title_" + id).style.textDecoration = 'line-through';
- document.getElementById("image_" + id).style.opacity = '30%';
+ document.getElementById("removeImages")["value"] += '_' + id;
+ document.getElementById("image_title_" + id)["style"].textDecoration = 'line-through';
+ document.getElementById("image_" + id)["style"].opacity = '30%';
let button = document.getElementById('btn_remove_' + id);
button.title= "Undo Removal of Image";
button.innerHTML = '-';
@@ -439,14 +451,14 @@ No active event
}
let handleRightBarCrudHtml = (data) => {
- let body = JSON.parse(data.body)
+ let body = JSON.parse(data.body);
// Reset possible Char links
- selectedCharDetailsId = ""
- loadedCharDetailsId = ""
+ selectedCharDetailsId = "";
+ loadedCharDetailsId = "";
if (!rightBarVisible) {
- toggleVisibilityRightBar()
+ toggleVisibilityRightBar();
}
- document.getElementById("entity-details-holder").innerHTML = body
+ document.getElementById("entity-details-holder").innerHTML = body;
}
let campaignMapTabIds = [];
@@ -456,45 +468,45 @@ No active event
let contentData = body.Content;
for (let index in contentData) {
- let oldContent = document.getElementById(contentData[index].Id)
+ let oldContent = document.getElementById(contentData[index].Id);
if (oldContent) {
- oldContent.remove()
+ oldContent.remove();
}
- document.getElementById("campaign-content").innerHTML += contentData[index].Html
+ document.getElementById("campaign-content").innerHTML += contentData[index].Html;
}
let lastId;
for (let index in tabs) {
- lastId = tabs[index].Id
- let oldTab = document.getElementById(tabs[index].Id + "List")
+ lastId = tabs[index].Id;
+ let oldTab = document.getElementById(tabs[index].Id + "List");
if (oldTab) {
- oldTab.remove()
+ oldTab.remove();
}
- if (!campaignMapTabIds.includes(tabs[index].Id)) campaignMapTabIds.push(tabs[index].Id)
- document.getElementById("campaign-tabs").innerHTML += tabs[index].Html
+ if (!campaignMapTabIds.includes(tabs[index].Id)) campaignMapTabIds.push(tabs[index].Id);
+ document.getElementById("campaign-tabs").innerHTML += tabs[index].Html;
}
// Open a map (or the last if multiple maps are send)
if (lastId) {
- openTab(lastId)
+ openTab(lastId);
}
}
- let rightBarVisible = false
+ let rightBarVisible = false;
let toggleVisibilityRightBar = () => {
rightBarVisible = !rightBarVisible
- let element = document.getElementById('toggle-right-bar-visibility')
+ let element = document.getElementById('toggle-right-bar-visibility');
if (rightBarVisible) {
- element.innerHTML = ''
- document.getElementById('right-bar-inner-content').style.display = "inherit";
- document.getElementById('right-bar-inner-content').style.width = "543px";
- document.getElementById('ui-right-bar').style.width = "calc(553px + 3em)";
+ element.innerHTML = '';
+ document.getElementById('right-bar-inner-content')["style"].display = "inherit";
+ document.getElementById('right-bar-inner-content')["style"].width = "543px";
+ document.getElementById('ui-right-bar')["style"].width = "calc(553px + 3em)";
} else {
- element.innerHTML = ''
- document.getElementById('right-bar-inner-content').style.display = "none";
- document.getElementById('right-bar-inner-content').style.width = "0";
- document.getElementById('ui-right-bar').style.width = "3em";
- element.style.visibility = "visible";
+ element.innerHTML = '';
+ document.getElementById('right-bar-inner-content')["style"].display = "none";
+ document.getElementById('right-bar-inner-content')["style"].width = "0";
+ document.getElementById('ui-right-bar')["style"].width = "3em";
+ element["style"].visibility = "visible";
}
}
@@ -502,40 +514,40 @@ No active event
let mapItemIdToEntityId = new Map();
let mapItemHtmlIdToMapItem = new Map();
let handleCampaignContentMapItemsEvents = (data) => {
- let body = JSON.parse(data.body)
- let MapId = body.MapId
- let MapElements = body.Elements
+ let body = JSON.parse(data.body);
+ let MapId = body.MapId;
+ let MapElements = body.Elements;
// Remove or create empty
if (mapItems.has(MapId)) {
for (let [elemId, mapItem] of mapItems.get(MapId)) {
if (MapElements && !Object.hasOwn(MapElements, elemId)) {
- let mapItemHtmlId = MapId + "-" + mapItem.Id + "-cell-element"
- document.getElementById(mapItemHtmlId)?.remove()
- mapItemIdToEntityId.delete(mapItem.Id)
- mapItemHtmlIdToMapItem.delete(mapItemHtmlId)
+ let mapItemHtmlId = MapId + "-" + mapItem.Id + "-cell-element";
+ document.getElementById(mapItemHtmlId)?.remove();
+ mapItemIdToEntityId.delete(mapItem.Id);
+ mapItemHtmlIdToMapItem.delete(mapItemHtmlId);
}
}
} else {
- mapItems.set(MapId, new Map())
+ mapItems.set(MapId, new Map());
}
// Add/Modify
for (let elemId in MapElements) {
- let mapItem = MapElements[elemId]
+ let mapItem = MapElements[elemId];
// Get the Cell
- let cell = document.getElementById(MapId + "-cell-y" + mapItem.Position.Y + "-x" + mapItem.Position.X + '-content')
- let mapItemHtmlId = MapId + "-" + mapItem.Id + "-cell-element"
+ let cell = document.getElementById(MapId + "-cell-y" + mapItem.Position.Y + "-x" + mapItem.Position.X + '-content');
+ let mapItemHtmlId = MapId + "-" + mapItem.Id + "-cell-element";
if (cell != null) {
- cell.innerHTML = mapItem.Html
- mapItems.get(MapId).set(elemId, mapItem)
- mapItemIdToEntityId.set(elemId, mapItem.EntityId)
- mapItemHtmlIdToMapItem.set(mapItemHtmlId, mapItem)
+ cell.innerHTML = mapItem.Html;
+ mapItems.get(MapId).set(elemId, mapItem);
+ mapItemIdToEntityId.set(elemId, mapItem.EntityId);
+ mapItemHtmlIdToMapItem.set(mapItemHtmlId, mapItem);
// Add the event handlers
- document.getElementById(mapItemHtmlId).oncontextmenu = showContextMenuOfMapItem
+ document.getElementById(mapItemHtmlId).oncontextmenu = showContextMenuOfMapItem;
}
}
}
@@ -544,51 +556,51 @@ No active event
if (campaignMap) {
let menus = campaignMap.getElementsByClassName("context-menu active");
for (let i = 0; i < menus.length; i++) {
- menus[i].style.marginTop = (0 - campaignMap.scrollTop) + 'px';
- menus[i].style.marginLeft = (0 - campaignMap.scrollLeft - 375) + 'px';
+ menus[i]["style"].marginTop = (0 - campaignMap.scrollTop) + 'px';
+ menus[i]["style"].marginLeft = (0 - campaignMap.scrollLeft - 375) + 'px';
}
}
}
let handleManagePage = (data) => {
- let html = JSON.parse(data.body)
+ let html = JSON.parse(data.body);
if (data.type === 551 ) {
- document.getElementById('manageMapsContent').innerHTML = html
+ document.getElementById('manageMapsContent').innerHTML = html;
}
if (data.type === 552) {
- document.getElementById('manageCharactersContent').innerHTML = html
+ document.getElementById('manageCharactersContent').innerHTML = html;
}
if (data.type === 553) {
- document.getElementById('manageInventoryContent').innerHTML = html
+ document.getElementById('manageInventoryContent').innerHTML = html;
}
if (data.type === 554) {
- document.getElementById('manageItemsContent').innerHTML = html
+ document.getElementById('manageItemsContent').innerHTML = html;
}
if (data.type === 555) {
- document.getElementById('manageCampaignContent').innerHTML = html
+ document.getElementById('manageCampaignContent').innerHTML = html;
}
}
let handleMapItemRemoval = (data) => {
- let mapItemId = data.body
+ let mapItemId = data.body;
for (let [mapId, mapItemsOnMap] of mapItems) {
if (mapItemsOnMap.has(mapItemId)) {
- let mapItemHtmlId = mapId + "-" + mapItemId + "-cell-element"
- document.getElementById(mapItemHtmlId).remove()
- mapItemIdToEntityId.delete(mapItemId)
- mapItemHtmlIdToMapItem.delete(mapItemHtmlId)
- mapItemsOnMap.delete(mapItemId)
+ let mapItemHtmlId = mapId + "-" + mapItemId + "-cell-element";
+ document.getElementById(mapItemHtmlId).remove();
+ mapItemIdToEntityId.delete(mapItemId);
+ mapItemHtmlIdToMapItem.delete(mapItemHtmlId);
+ mapItemsOnMap.delete(mapItemId);
}
}
}
let handleSignal = (data) => {
- let body = JSON.parse(data.body)
- let id = body.Id
- let x = body.X
- let y = body.Y
+ let body = JSON.parse(data.body);
+ let id = body.Id;
+ let x = body.X;
+ let y = body.Y;
- let cell = document.getElementById(id + '-cell-y' + y + '-x' + x + '-content')
+ let cell = document.getElementById(id + '-cell-y' + y + '-x' + x + '-content');
if (cell && body.Html) {
// Check if it has a character
let hasMapItem = false;
@@ -600,11 +612,11 @@ No active event
}
// remove old signals
- removeSignal('signal-' + id + '-y' + y + '-x' + x)
- cell.innerHTML = cell.innerHTML + body.Html
+ removeSignal('signal-' + id + '-y' + y + '-x' + x);
+ cell.innerHTML = cell.innerHTML + body.Html;
if (hasMapItem) {
- document.getElementById('signal-' + id + '-y' + y + '-x' + x).style.transform = 'translateY(-100%)'
+ document.getElementById('signal-' + id + '-y' + y + '-x' + x)["style"].transform = 'translateY(-100%)';
}
}
}
@@ -618,7 +630,7 @@ No active event
console.error(mapGrid);
if (mapGrid) {
- mapGrid.style.backgroundImage = "url('" + url + "')";
+ mapGrid["style"].backgroundImage = "url('" + url + "')";
}
}
@@ -630,35 +642,35 @@ No active event
}
let handleCampaignContentMapVisibility = (data) => {
- let body = JSON.parse(data.body)
- let id = body.Id
- let active = body.Active
+ let body = JSON.parse(data.body);
+ let id = body.Id;
+ let active = body.Active;
// Clean-up or request the new active map
if (!active) {
- closeTab(id)
+ closeTab(id);
} else {
- sendEvent(wrapMessage(id, 531))
- sendEvent(wrapMessage(id, 532))
+ sendEvent(wrapMessage(id, 531));
+ sendEvent(wrapMessage(id, 532));
}
}
let requestMapLoadFromServer = (id) => {
if (!campaignMapTabIds.includes(id)) {
- sendEvent(wrapMessage(id, 531))
- sendEvent(wrapMessage(id, 532))
+ sendEvent(wrapMessage(id, 531));
+ sendEvent(wrapMessage(id, 532));
} else {
- openTab(id)
+ openTab(id);
}
}
let handleCampaignContentMapItemEvents = (data) => {
- let mapItem = JSON.parse(data.body)
- let MapId = mapItem.MapId
+ let mapItem = JSON.parse(data.body);
+ let MapId = mapItem.MapId;
// Get the Cell
- let cell = document.getElementById(MapId + "-cell-y" + mapItem.Position.Y + "-x" + mapItem.Position.X + '-content')
- let mapItemHtmlId = MapId + "-" + mapItem.Id + "-cell-element"
+ let cell = document.getElementById(MapId + "-cell-y" + mapItem.Position.Y + "-x" + mapItem.Position.X + '-content');
+ let mapItemHtmlId = MapId + "-" + mapItem.Id + "-cell-element";
// Delete old
if (document.getElementById(mapItemHtmlId)) {
@@ -678,15 +690,15 @@ No active event
let showContextMenuOfMapItem = (event) => {
let cell = findParentWithSpecificClass(event.target, 'cell');
- let parent = findParentWithSpecificClass(event.target, 'element')
- let map = findParentWithSpecificClass(event.target, 'campaign-map')
+ let parent = findParentWithSpecificClass(event.target, 'element');
+ let map = findParentWithSpecificClass(event.target, 'campaign-map');
if (parent && map ) {
for (const child of parent.children) {
if (child.classList.contains('context-menu')) {
- clearAllMenus()
- setContextMenuToActive(child, map, event)
+ clearAllMenus();
+ setContextMenuToActive(child, map, event);
if (cell) {
- cell.style.border = 'solid #991c2c'
+ cell["style"].border = 'solid #991c2c';
}
break;
}
@@ -718,7 +730,7 @@ No active event
if (child.classList.contains('context-menu')) {
clearAllMenus()
setContextMenuToActive(child, map, event);
- parent.style.border = 'solid #991c2c';
+ parent["style"].border = 'solid #991c2c';
event.preventDefault();
event.stopPropagation();
return;
@@ -730,25 +742,25 @@ No active event
for (const child of parent.children) {
if (child.classList.contains('context-menu')) {
- clearAllMenus()
- setContextMenuToActive(child, map, event)
+ clearAllMenus();
+ setContextMenuToActive(child, map, event);
break;
}
}
- parent.style.border = 'solid #991c2c'
+ parent["style"].border = 'solid #991c2c';
}
event.preventDefault();
event.stopPropagation();
}
let setContextMenuToActive = (target, scrollParent, ev) => {
- target.classList.add('active')
- target.style.display = 'block';
- target.style.marginTop = '' + (0 - scrollParent.scrollTop) + 'px';
- target.style.marginLeft = '' + (0 - scrollParent.scrollLeft - 375) + 'px';
+ target.classList.add('active');
+ target["style"].display = 'block';
+ target["style"].marginTop = '' + (0 - scrollParent.scrollTop) + 'px';
+ target["style"].marginLeft = '' + (0 - scrollParent.scrollLeft - 375) + 'px';
// @todo fix offscreen possibility
- target.style.top = 'calc('+(ev.clientY+scrollParent.scrollTop)+'px - ' + (cellSizeInHalfEms*8) + 'px)';
- target.style.left = (ev.clientX+scrollParent.scrollLeft)+'px';
+ target["style"].top = 'calc('+(ev.clientY+scrollParent.scrollTop)+'px - ' + (cellSizeInHalfEms*8) + 'px)';
+ target["style"].left = (ev.clientX+scrollParent.scrollLeft)+'px';
}
let sendSignal = (mapId, y, x, type) => {
@@ -765,12 +777,12 @@ No active event
let hideCellContextMenu = (event) => {
let cell = findParentWithSpecificClass(event.target, 'cell');
if (cell) {
- cell.style.border = null;
+ cell["style"].border = null;
}
let parent = findParentWithSpecificClass(event.target, 'context-menu');
if (parent) {
parent.classList.remove('active');
- parent.style.display = 'none';
+ parent["style"].display = 'none';
}
event.preventDefault();
event.stopPropagation();
@@ -798,17 +810,17 @@ No active event
return;
}
- let mapItem = {}
- mapItem.MapId = mapId
- mapItem.Id = mapItemId
+ let mapItem = {};
+ mapItem.MapId = mapId;
+ mapItem.Id = mapItemId;
- sendEvent(wrapMessage(JSON.stringify(mapItem), 546))
+ sendEvent(wrapMessage(JSON.stringify(mapItem), 546));
}
let findParentWithSpecificClass = (target, className) => {
if (target) {
if (target.classList.contains(className)) {
- return target
+ return target;
}
return findParentWithSpecificClass(target.parentElement, className);
}
@@ -817,37 +829,37 @@ No active event
let updateMapVisibility = (id) => {
// Send to back
- let mapVisibility = {}
- mapVisibility.Id = id
+ let mapVisibility = {};
+ mapVisibility.Id = id;
- mapVisibility.Active = !document.getElementById("is" + id + "Active").checked
- document.getElementById("is" + id + "Active").checked = mapVisibility.Active
+ mapVisibility.Active = !document.getElementById("is" + id + "Active").checked;
+ document.getElementById("is" + id + "Active").checked = mapVisibility.Active;
if (mapVisibility.Active) {
- document.getElementById("is" + id + "Icon").className = 'bi bi-eye'
+ document.getElementById("is" + id + "Icon").className = 'bi bi-eye';
} else {
- document.getElementById("is" + id + "Icon").className = 'bi bi-eye-slash'
+ document.getElementById("is" + id + "Icon").className = 'bi bi-eye-slash';
}
- sendEvent(wrapMessage(JSON.stringify(mapVisibility), 544))
+ sendEvent(wrapMessage(JSON.stringify(mapVisibility), 544));
}
let addCharacterToMap = (mapId) => {
- let mapItemAdd = {}
- mapItemAdd.EntityId = document.getElementById("charToMap" + mapId + "Select").value
- mapItemAdd.MapId = mapId
+ let mapItemAdd = {};
+ mapItemAdd.EntityId = document.getElementById("charToMap" + mapId + "Select")["value"];
+ mapItemAdd.MapId = mapId;
if (mapItemAdd.EntityId !== 'none') {
- sendEvent(wrapMessage(JSON.stringify(mapItemAdd), 545))
+ sendEvent(wrapMessage(JSON.stringify(mapItemAdd), 545));
}
}
let changeActiveMapBackground = (mapId) => {
- let mapItemAdd = {}
- mapItemAdd.ImageId = document.getElementById("imageAsActive" + mapId + "Select").value
- mapItemAdd.MapId = mapId
+ let mapItemAdd = {};
+ mapItemAdd.ImageId = document.getElementById("imageAsActive" + mapId + "Select")["value"];
+ mapItemAdd.MapId = mapId;
- sendEvent(wrapMessage(JSON.stringify(mapItemAdd), 548))
+ sendEvent(wrapMessage(JSON.stringify(mapItemAdd), 548));
}
let lastMessageSender = ''
@@ -855,24 +867,24 @@ No active event
let handleChatEvents = (data) => {
let chatMessage = '';
if (data.source === currentUser) {
- chatMessage += ''
+ chatMessage += '
';
} else if (data.source.toLowerCase() === "server") {
- chatMessage += '
'
+ chatMessage += '
';
} else {
- chatMessage += '
'
+ chatMessage += '
';
}
if (lastMessageSender !== data.source) {
- lastMessageSender = data.source
- chatMessage += '
' + data.source + ' @ ' + data.dateTime + '
'
+ lastMessageSender = data.source;
+ chatMessage += '
' + data.source + ' @ ' + data.dateTime + '
';
}
- chatMessage += '
'
+ chatMessage += '
';
if (data.type === 802) {
- chatMessage += ' '
+ chatMessage += ' ';
}
- chatMessage += data.body
- chatMessage += '
'
+ chatMessage += data.body;
+ chatMessage += '
';
// Set content and scroll to bottom of chat
let chatContent = document.getElementById("chat-content");
@@ -887,7 +899,7 @@
No active event
// Hide all
let tabContent = document.getElementsByClassName("tab-content");
for (i = 0; i < tabContent.length; i++) {
- tabContent[i].style.display = "none";
+ tabContent[i]["style"].display = "none";
}
let navLinks = document.getElementsByClassName("nav-link");
for (i = 0; i < navLinks.length; i++) {
@@ -896,8 +908,8 @@
No active event
// Show the current tab, and add an "active" class to the button that opened the tab
if (document.getElementById(targetId)) {
- document.getElementById(targetId).style.display = "block";
- document.getElementById(targetId).style.display = "block";
+ document.getElementById(targetId)["style"].display = "block";
+ document.getElementById(targetId)["style"].display = "block";
}
if (document.getElementById(targetId + 'Link')) {
document.getElementById(targetId + 'Link').className += " active";
@@ -905,19 +917,19 @@
No active event
{{ if .campaign.UserIsLead }}
if (targetId === 'manageMaps') {
- sendEvent(wrapMessage('', 551))
+ sendEvent(wrapMessage('', 551));
}
if (targetId === 'manageCharacters') {
- sendEvent(wrapMessage('', 552))
+ sendEvent(wrapMessage('', 552));
}
if (targetId === 'manageInventory') {
- sendEvent(wrapMessage('', 553))
+ sendEvent(wrapMessage('', 553));
}
if (targetId === 'manageItems') {
- sendEvent(wrapMessage('', 554))
+ sendEvent(wrapMessage('', 554));
}
if (targetId === 'manageCampaign') {
- sendEvent(wrapMessage('', 555))
+ sendEvent(wrapMessage('', 555));
}
{{ end }}
}
@@ -925,33 +937,33 @@
No active event
let closeTab = (targetId) => {
if (document.getElementById(targetId + 'Link') &&
document.getElementById(targetId + 'Link').className.indexOf("active") !== -1) {
- openTab('current')
+ openTab('current');
}
- document.getElementById(targetId)?.remove()
- document.getElementById(targetId + 'Link')?.remove()
- campaignMapTabIds = campaignMapTabIds.filter(id => id !== targetId)
+ document.getElementById(targetId)?.remove();
+ document.getElementById(targetId + 'Link')?.remove();
+ campaignMapTabIds = campaignMapTabIds.filter(id => id !== targetId);
}
let cellSizeInHalfEms = 8
let makeMapsSmaller = () => {
if (cellSizeInHalfEms > 4) {
- cellSizeInHalfEms--
- applyMapZoom()
+ cellSizeInHalfEms--;
+ applyMapZoom();
}
}
let makeMapsBigger = () => {
if (cellSizeInHalfEms < 20) {
- cellSizeInHalfEms++
- applyMapZoom()
+ cellSizeInHalfEms++;
+ applyMapZoom();
}
}
let clearAllSignals = () => {
let signals = document.querySelectorAll(".signal");
for (let i = 0; i < signals.length; i++) {
- removeSignal(signals[i].id)
+ removeSignal(signals[i].id);
}
}
@@ -960,9 +972,9 @@
No active event
for (let i = 0; i < menus.length; i++) {
if (menus[i].classList.contains('context-menu')) {
let parent = findParentWithSpecificClass(menus[i], 'cell');
- parent.style.border = null;
- menus[i].style.display = 'none'
- menus[i].classList.remove('active')
+ parent["style"].border = null;
+ menus[i]["style"].display = 'none';
+ menus[i].classList.remove('active');
}
}
}
@@ -986,10 +998,10 @@
No active event
clearAllMenus()
// modifying the rule in the stylesheet
- elementRules.style.setProperty('max-height', '' + (cellSizeInHalfEms/2) + 'em' );
- elementRules.style.setProperty('max-width', '' + (cellSizeInHalfEms/2) + 'em' );
- elementRules.style.setProperty('min-height', '' + (cellSizeInHalfEms/2) + 'em' );
- elementRules.style.setProperty('min-width', '' + (cellSizeInHalfEms/2) + 'em' );
+ elementRules["style"].setProperty('max-height', '' + (cellSizeInHalfEms/2) + 'em' );
+ elementRules["style"].setProperty('max-width', '' + (cellSizeInHalfEms/2) + 'em' );
+ elementRules["style"].setProperty('min-height', '' + (cellSizeInHalfEms/2) + 'em' );
+ elementRules["style"].setProperty('min-width', '' + (cellSizeInHalfEms/2) + 'em' );
}
let allowDrop = (ev) => {
@@ -1005,42 +1017,42 @@
No active event
let data = ev.dataTransfer.getData("cell-element");
// Get the map item
- let mapItem = mapItemHtmlIdToMapItem.get(data)
+ let mapItem = mapItemHtmlIdToMapItem.get(data);
if (!mapItem) {
- return
+ return;
}
// Parse cell to X and Y
let cellId = ev.target.id
- let y = cellId.substring(cellId.indexOf('-y') + 2, cellId.indexOf('-x'))
- let x = cellId.substring(cellId.indexOf('-x') + 2, cellId.indexOf('-content'))
+ let y = cellId.substring(cellId.indexOf('-y') + 2, cellId.indexOf('-x'));
+ let x = cellId.substring(cellId.indexOf('-x') + 2, cellId.indexOf('-content'));
// Update MapItem (position)
- mapItem.Position.Y = y
- mapItem.Position.X = x
+ mapItem.Position.Y = y;
+ mapItem.Position.X = x;
// Add to the right parent; skipping content
- let sendOk = false
+ let sendOk = false;
if (ev.target.classList.contains('content')) {
ev.target.appendChild(document.getElementById(data));
- sendOk = true
+ sendOk = true;
} else {
let parent = findParentWithSpecificClass(ev.target, 'content');
if (parent) {
- let alreadyHasElement = false
+ let alreadyHasElement = false;
for (const child of parent.children) {
if (child.classList.contains('signal')) {
// Close the possible signal
- removeSignal(child.id)
+ removeSignal(child.id);
} else if (child.classList.contains('element')) {
// Already occupied
- alreadyHasElement = true
+ alreadyHasElement = true;
break;
}
}
if (!alreadyHasElement) {
parent.appendChild(document.getElementById(data));
- sendOk = true
+ sendOk = true;
}
}
}
@@ -1048,49 +1060,49 @@
No active event
if (sendOk) {
// Send Updated MapItem
// - Remove Html before sending
- mapItem.Html = ''
- sendEvent(wrapMessage(JSON.stringify(mapItem), 543))
+ mapItem.Html = '';
+ sendEvent(wrapMessage(JSON.stringify(mapItem), 543));
}
}
let updateCharacterHealth = (id) => {
- let charHealth = {}
- charHealth.id = id
- charHealth.damage = document.getElementById("healthDamage").value
- charHealth.temp = document.getElementById("healthTmp").value
- charHealth.max = document.getElementById("healthMax").value
+ let charHealth = {};
+ charHealth.id = id;
+ charHealth.damage = document.getElementById("healthDamage")["value"];
+ charHealth.temp = document.getElementById("healthTmp")["value"];
+ charHealth.max = document.getElementById("healthMax")["value"];
- sendEvent(wrapMessage(JSON.stringify(charHealth), 511))
+ sendEvent(wrapMessage(JSON.stringify(charHealth), 511));
}
let linkCharacterToPlayer = (elementId, id, playerName) => {
- let charToPlayer = {}
- charToPlayer.id = id
- charToPlayer.playerName = playerName
+ let charToPlayer = {};
+ charToPlayer.id = id;
+ charToPlayer.playerName = playerName;
- let element = document.getElementById(elementId)
+ let element = document.getElementById(elementId);
if (element) {
if (element.classList.contains('btn-success')){
- element.classList.remove('btn-success')
- charToPlayer.connect = false
+ element.classList.remove('btn-success');
+ charToPlayer.connect = false;
} else {
- element.classList.add('btn-success')
- charToPlayer.connect = true
+ element.classList.add('btn-success');
+ charToPlayer.connect = true;
}
}
- sendEvent(wrapMessage(JSON.stringify(charToPlayer), 512))
+ sendEvent(wrapMessage(JSON.stringify(charToPlayer), 512));
}
let loadSpinner = () => {
- document.getElementById("spinner").style.display = "block";
+ document.getElementById("spinner")["style"].display = "block";
}
let stopLoadSpinner = () => {
let spinner = document.getElementById("spinner");
if (spinner) {
- document.getElementById("spinner").style.display = "none";
+ document.getElementById("spinner")["style"].display = "none";
}
}
diff --git a/web/templates/campaignUpsertMap.html b/web/templates/campaignUpsertMap.html
index 8687549..b74f675 100644
--- a/web/templates/campaignUpsertMap.html
+++ b/web/templates/campaignUpsertMap.html
@@ -6,7 +6,7 @@
{{ if and .Map .Map.Id }}Update{{else}}Add{{end}} Map