Skip to content

Commit

Permalink
Removed for ... in index loops, corrected API ID management
Browse files Browse the repository at this point in the history
  • Loading branch information
AnthonyEdmonds committed Nov 25, 2024
1 parent 72f724c commit 0ddb762
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 91 deletions.
137 changes: 73 additions & 64 deletions AuraRingApi.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ export class AuraRingApi
/**
* Retrieve all Aura Rings
*
* @param {SimpleTokenDocument} simpleTokenDocument
* @param {TokenDocument} tokenDocument
*
* @returns {Array[AuraRing]}
*/
static all(simpleTokenDocument)
static all(tokenDocument)
{
return AuraRingFlags.getAuraRings(simpleTokenDocument);
return AuraRingFlags.getAuraRings(tokenDocument);
}

/**
Expand All @@ -46,55 +46,94 @@ export class AuraRingApi
/**
* Remove an Aura Ring
*
* @param {SimpleTokenDocument*} simpleTokenDocument
* @param {TokenDocument*} tokenDocument
* @param {number} id
*/
static delete(simpleTokenDocument, id)
static delete(tokenDocument, id)
{
const auraRings = AuraRingFlags.getAuraRings(simpleTokenDocument);
const index = AuraRingApi.getAuraRingIndex(id);
const auraRings = AuraRingFlags.getAuraRings(tokenDocument);
const index = AuraRingApi.getAuraRingIndex(auraRings, id);

if (index !== false) {
auraRings.splice(index, 1);
AuraRingFlags.setAuraRings(simpleTokenDocument, auraRings);
AuraRingFlags.setAuraRings(tokenDocument, auraRings);
}
}

/**
* Remove all Aura Rings
*
* @param {SimpleTokenDocument} simpleTokenDocument
* @param {TokenDocument} tokenDocument
*/
static deleteAll(simpleTokenDocument)
static deleteAll(tokenDocument)
{
AuraRingFlags.setAuraRings(simpleTokenDocument, []);
AuraRingFlags.setAuraRings(tokenDocument, []);
}

/**
* Retrieve a specific Aura Ring
*
* @param {SimpleTokenDocument} simpleTokenDocument
* @param {number} id
* @param {TokenDocument} tokenDocument
* @param {number|string} term
* @param {string} field
*
* @returns {AuraRing|false}
*/
static get(tokenDocument, term, field = 'id')
{
const auraRings = AuraRingFlags.getAuraRings(tokenDocument);

return AuraRingApi.getAuraRing(auraRings, term, field);
}

/**
* Retrieve an Aura Ring by any field
*
* @param {AuraRing[]} auraRings
* @param {number|string} term
* @param {string} field
* @returns {AuraRing|false}
*/
static get(simpleTokenDocument, id)
static getAuraRing(auraRings, term, field = 'id')
{
const auraRings = AuraRingFlags.getAuraRings(simpleTokenDocument);
for (const auraRing of auraRings) {
if (auraRing[field] === term) {
return auraRing;
}
}

return AuraRingApi.getAuraRing(auraRings, id);
return false;
}

/**
* Retrieve the index of an Aura Ring by any field
*
* @param {AuraRing[]} auraRings
* @param {number|string} term
* @param {string} field
* @returns {AuraRing|false}
*/
static getAuraRingIndex(auraRings, term, field = 'id')
{
for (let index = 0; index < auraRings.length; ++index) {
if (auraRings[index][field] === term) {
return index;
}
}

return false;
}

/**
* Retrieve a list of Aura Ring names keyed by their ID
*
* @param {SimpleTokenDocument} simpleTokenDocument
* @param {TokenDocument} tokenDocument
*
* @returns {Object}
*/
static index(simpleTokenDocument)
static index(tokenDocument)
{
const auraRings = AuraRingFlags.getAuraRings(simpleTokenDocument);
const auraRings = AuraRingFlags.getAuraRings(tokenDocument);
const index = {};

for (const auraRing of auraRings) {
Expand All @@ -108,95 +147,65 @@ export class AuraRingApi
* Create a new Aura Ring from the default settings
* The ID of the Aura Ring will be set to the next available
*
* @param {SimpleTokenDocument} simpleTokenDocument
* @param {TokenDocument} tokenDocument
*
* @returns {AuraRing} As given, but with the new ID
*/
static new(simpleTokenDocument)
static new(tokenDocument)
{
const auraRings = AuraRingFlags.getAuraRings(simpleTokenDocument);
const auraRings = AuraRingFlags.getAuraRings(tokenDocument);
const auraRing = AuraRingDataModel.defaultSettings();

auraRing.id = AuraRingFlags.nextAvailableId(auraRings);
auraRings.push(auraRing);
AuraRingFlags.setAuraRings(simpleTokenDocument, auraRings);
AuraRingFlags.setAuraRings(tokenDocument, auraRings);

return auraRing;
}

/**
* Overwrite an Aura Ring with new settings
*
* @param {SimpleTokenDocument} simpleTokenDocument
* @param {TokenDocument} tokenDocument
* @param {AuraRing} auraRing
*/
static set(simpleTokenDocument, auraRing)
static set(tokenDocument, auraRing)
{
const auraRings = AuraRingFlags.getAuraRings(simpleTokenDocument);
const auraRings = AuraRingFlags.getAuraRings(tokenDocument);
const index = AuraRingApi.getAuraRingIndex(auraRings, auraRing.id);

if (index !== false) {
auraRings.splice(index, 1);
}

auraRings.push(auraRing);
AuraRingFlags.setAuraRings(simpleTokenDocument, auraRings);
AuraRingFlags.setAuraRings(tokenDocument, auraRings);
}

/**
* Overwrite all Aura Rings with a new set
*
* @param {SimpleTokenDocument} simpleTokenDocument
* @param {TokenDocument} tokenDocument
* @param {Array[AuraRing]} auraRings
*/
static setAll(simpleTokenDocument, auraRings)
static setAll(tokenDocument, auraRings)
{
AuraRingFlags.setAuraRings(simpleTokenDocument, auraRings);
AuraRingFlags.setAuraRings(tokenDocument, auraRings);
}

/**
* Update a specific Aura Ring value directly
*
* @param {SimpleTokenDocument} simpleTokenDocument
* @param {TokenDocument} tokenDocument
* @param {number} id
* @param {string} key
* @param {number|string|boolean} value
*/
static setValue(simpleTokenDocument, id, key, value)
static setValue(tokenDocument, id, key, value)
{
const auraRings = AuraRingFlags.getAuraRings(simpleTokenDocument);
const auraRings = AuraRingFlags.getAuraRings(tokenDocument);
const index = this.getAuraRingIndex(auraRings, id);
auraRings[index][key] = value;
AuraRingFlags.setAuraRings(simpleTokenDocument, auraRings);
}

static getAuraRing(auraRings, id)
{
if (typeof id === 'number') {
id = `${id}`;
}

for (const auraRing of auraRings) {
if (auraRing.id === id) {
return auraRing;
}
}

return false;
}

static getAuraRingIndex(auraRings, id)
{
if (typeof id === 'number') {
id = `${id}`;
}

for (const index in auraRings) {
if (auraRings[index].id === id) {
return index;
}
}

return false;
AuraRingFlags.setAuraRings(tokenDocument, auraRings);
}
}
12 changes: 2 additions & 10 deletions AuraRingFormApplication.js
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,6 @@ export class AuraRingFormApplication extends HandlebarsApplicationMixin(Applicat

getAuraRing(id)
{
if (typeof id === 'number') {
id = `${id}`;
}

for (const auraRing of this.auraRings) {
if (auraRing.id === id) {
return auraRing;
Expand All @@ -182,11 +178,7 @@ export class AuraRingFormApplication extends HandlebarsApplicationMixin(Applicat

getAuraRingIndex(id)
{
if (typeof id === 'number') {
id = `${id}`;
}

for (const index in this.auraRings) {
for (let index = 0; index < this.auraRings.length; ++index) {
if (this.auraRings[index].id === id) {
return index;
}
Expand Down Expand Up @@ -305,7 +297,7 @@ export class AuraRingFormApplication extends HandlebarsApplicationMixin(Applicat
const formData = new FormDataExtended(form);
const newAuraRings = this.gatherFormData(formData);

for (const index in newAuraRings) {
for (let index = 0; index < newAuraRings.length; ++index) {
this.auraRings[index] = newAuraRings[index];
}

Expand Down
4 changes: 2 additions & 2 deletions GridBased.js
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ export class GridBased
let inverse = false;
let startIndex = null;

for (const index in points) {
for (let index = 0; index < points.length; ++index) {
const point = points[index];

if (
Expand Down Expand Up @@ -558,7 +558,7 @@ export class GridBased
endIndex = swap;
}

for (const index in points) {
for (let index = 0; index < points.length; ++index) {
if (inverse === true) {
if (index < startIndex || index > endIndex) {
continue;
Expand Down
24 changes: 12 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,18 +106,18 @@ Module developers can control Aura Rings using the `AuraRingApi` class.

Macro developers can control Aura Rings using the `TokenAuraRing` global variable.

| Function | Parameters | Returns | Description |
| --------- | ------------------------------------ | ---------------- | ----------- |
| all | SimpleTokenDocument | Array[AuraRing] | Retrieve all Aura Rings |
| blank | | AuraRing | Get an unsaved empty Aura Ring without an ID |
| delete | SimpleTokenDocument, id | | Remove an Aura Ring |
| deleteAll | SimpleTokenDocument | | Remove all Aura Rings |
| get | SimpleTokenDocument, id | AuraRing|false | Retrieve a specific Aura Ring |
| index | SimpleTokenDocument | Object{id: name} | Retrieve a list of Aura Ring names keyed by their ID |
| new | SimpleTokenDocument | AuraRing | Create a new Aura Ring from the default settings |
| set | SimpleTokenDocument, AuraRing | | Overwrite an Aura Ring with new settings |
| setAll | SimpleTokenDocument, Array[AuraRing] | | Overwrite all Aura Rings with a new set |
| setValue | simpleTokenDocument, id, key, value | | Update a specific Aura Ring value directly |
| Function | Parameters | Returns | Description |
|-----------|-----------------------------------|------------------|-------------|
| all | TokenDocument | Array[AuraRing] | Retrieve all Aura Rings |
| blank | | AuraRing | Get an unsaved empty Aura Ring without an ID |
| delete | TokenDocument, id | | Remove an Aura Ring |
| deleteAll | TokenDocument | | Remove all Aura Rings |
| get | TokenDocument, term, field = 'id' | AuraRing|false | Retrieve a specific Aura Ring by a field, ID by default |
| index | TokenDocument | Object{id: name} | Retrieve a list of Aura Ring names keyed by their ID |
| new | TokenDocument | AuraRing | Create a new Aura Ring from the default settings |
| set | TokenDocument, AuraRing | | Overwrite an Aura Ring with new settings |
| setAll | TokenDocument, Array[AuraRing] | | Overwrite all Aura Rings with a new set |
| setValue | TokenDocument, id, key, value | | Update a specific Aura Ring value directly |

All changes will trigger flag updates on the SimpleTokenDocument, and can be edited in the normal UI.

Expand Down
6 changes: 3 additions & 3 deletions module.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
"title": "Token Aura Ring",
"description": "A simple module for Foundry VTT which adds an outlined ring aura to a token.",
"url": "https://github.com/AnthonyEdmonds/token-aura-ring",
"manifest": "https://raw.githubusercontent.com/AnthonyEdmonds/token-aura-ring/2.1.2/module.json",
"download": "https://github.com/AnthonyEdmonds/token-aura-ring/archive/refs/tags/2.1.2.zip",
"manifest": "https://raw.githubusercontent.com/AnthonyEdmonds/token-aura-ring/2.1.3/module.json",
"download": "https://github.com/AnthonyEdmonds/token-aura-ring/archive/refs/tags/2.1.3.zip",
"authors": [
{
"name": "Anthony Edmonds",
"url": "https://github.com/AnthonyEdmonds",
"flags": {}
}
],
"version": "2.1.2",
"version": "2.1.3",
"compatibility": {
"minimum": "12",
"verified": "12"
Expand Down

0 comments on commit 0ddb762

Please sign in to comment.