From 68236af6abe6d36d0d8845916d79f11ec90979de Mon Sep 17 00:00:00 2001
From: Johannes Loher <johannes.loher@fg4f.de>
Date: Sun, 21 Aug 2022 23:29:26 +0200
Subject: [PATCH] fix: make the DDV Config work with the Default Token Config

Closes #2
---
 .eslintrc.js                             |  1 +
 src/darkness-dependent-vision-config.js  | 20 +++++++++++++++++++-
 src/hooks/getTokenConfigHeaderButtons.js |  2 +-
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index 6775348..816a922 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -19,6 +19,7 @@ module.exports = {
   plugins: [],
 
   globals: {
+    DefaultTokenConfig: false,
     PrototypeTokenDocument: false,
   },
 
diff --git a/src/darkness-dependent-vision-config.js b/src/darkness-dependent-vision-config.js
index 6f2f0f7..3e02e61 100644
--- a/src/darkness-dependent-vision-config.js
+++ b/src/darkness-dependent-vision-config.js
@@ -52,6 +52,10 @@ export class DarknessDependentVisionConfig extends FormApplication {
     return `${name}: ${game.i18n.localize('DarknessDependentVision.Title')}`;
   }
 
+  get isDefault() {
+    return this.options.tokenConfig instanceof DefaultTokenConfig;
+  }
+
   async getData() {
     const data = this.isPrototype ? this.actor.data.token : this.token.data;
     return {
@@ -69,9 +73,23 @@ export class DarknessDependentVisionConfig extends FormApplication {
   }
 
   async _updateObject(event, formData) {
+    // Configure the Default Token Configuration
+    if (this.isDefault) {
+      const current = game.settings.get('core', DefaultTokenConfig.SETTING);
+      const update = foundry.utils.mergeObject(current, formData, { inplace: false });
+      const result = await game.settings.set('core', DefaultTokenConfig.SETTING, update);
+      const tokenConfig = this.options.tokenConfig;
+      tokenConfig.data = new foundry.data.TokenData(result);
+      tokenConfig.object = new TokenDocument(tokenConfig.data, { actor: null });
+      tokenConfig.token = tokenConfig.object;
+      tokenConfig.render();
+      return result;
+    }
+
     // Configure the Prototype Token data of an Actor
     if (this.isPrototype) return this.actor.update({ token: formData });
+
     // Update an embedded Token document
-    else return this.token.update(formData);
+    return this.token.update(formData);
   }
 }
diff --git a/src/hooks/getTokenConfigHeaderButtons.js b/src/hooks/getTokenConfigHeaderButtons.js
index 2e4546c..96d231e 100644
--- a/src/hooks/getTokenConfigHeaderButtons.js
+++ b/src/hooks/getTokenConfigHeaderButtons.js
@@ -22,7 +22,7 @@ function onGetTokenConfigHeaderButtons(tokenConfig, buttons) {
     class: 'configure-darkness-dependent-vision',
     icon: 'fas fa-eye',
     onclick: async () => {
-      return new DarknessDependentVisionConfig(tokenConfig.object).render(true);
+      return new DarknessDependentVisionConfig(tokenConfig.object, { tokenConfig }).render(true);
     },
   });
 }