@@ -4,11 +4,11 @@ import {MissingToggleError} from './errors/MissingToggleError.js'
44import { DuplicateToggleValueError } from './errors/DuplicateToggleValueError.js'
55
66export class ToggleModule {
7-
7+
88 constructor ( assets ) {
99 this . previousFrame = { }
1010 this . missingToggles = { }
11-
11+
1212 ToggleModule . refreshContent = ( ) => {
1313 if ( ! this . currentFrame || ! ToggleModule . toggles ) {
1414 return
@@ -17,7 +17,7 @@ export class ToggleModule {
1717 const entity = entityModule . entities . get ( parseInt ( registeredEntity ) )
1818 const toggleInfo = this . currentFrame . registered [ registeredEntity ]
1919 const toggleState = ToggleModule . toggles [ toggleInfo . name ]
20-
20+
2121 if ( toggleState == null && ! this . missingToggles [ toggleInfo . name ] ) {
2222 ErrorLog . push ( new MissingToggleError ( toggleInfo . name ) )
2323 this . missingToggles [ toggleInfo . name ] = true
@@ -27,19 +27,14 @@ export class ToggleModule {
2727 )
2828 }
2929 }
30-
31- for ( const e of ToggleModule . errors ) {
32- ErrorLog . push ( e )
33- }
34-
30+
31+ pushDuplicateErrors ( ) ;
3532 }
3633
3734 static refreshContent ( ) { }
3835
3936 static defineToggle ( option ) {
40- if ( new Set ( Object . values ( option . values ) ) . size != Object . values ( option . values ) . length ) {
41- ToggleModule . errors . push ( new DuplicateToggleValueError ( option . toggle ) )
42- }
37+ checkDuplicates ( option ) ;
4338
4439 ToggleModule . toggles [ option . toggle ] = option . default
4540 option . get = ( ) => ToggleModule . toggles [ option . toggle ]
@@ -77,4 +72,42 @@ export class ToggleModule {
7772}
7873
7974ToggleModule . toggles = { }
80- ToggleModule . errors = [ ]
75+ ToggleModule . duplicateErrors = { }
76+
77+ function createIfNull ( obj , key , value ) {
78+ obj [ key ] = obj [ key ] || value
79+ }
80+
81+ function insertNewDuplicate ( dups , v , key ) {
82+ createIfNull ( dups , v . key , { keys : [ ] , value : v . value } )
83+
84+ if ( ! dups [ v . key ] . keys . includes ( v . key ) ) {
85+ dups [ v . key ] . keys . push ( v . key )
86+ }
87+ dups [ v . key ] . keys . push ( key )
88+ }
89+
90+ function checkDuplicates ( option ) {
91+ var values = [ ]
92+
93+ ToggleModule . duplicateErrors [ option . toggle ] = { }
94+
95+ for ( const key in option . values ) {
96+ const value = option . values [ key ]
97+ const v = values . find ( elem => elem . value == value )
98+
99+ if ( v ) {
100+ insertNewDuplicate ( ToggleModule . duplicateErrors [ option . toggle ] , v , key )
101+ } else {
102+ values . push ( { key : key , value : value } )
103+ }
104+ }
105+ }
106+
107+ function pushDuplicateErrors ( ) {
108+ for ( const toggle in ToggleModule . duplicateErrors ) {
109+ for ( const dup of Object . values ( ToggleModule . duplicateErrors [ toggle ] ) ) {
110+ ErrorLog . push ( new DuplicateToggleValueError ( toggle , dup ) )
111+ }
112+ }
113+ }
0 commit comments