1
1
import { ChallengeTrackerSettings , ChallengeTracker } from './main.js'
2
2
import { ChallengeTrackerFlag } from './flags.js'
3
- import jscolor from './lib/jscolor.js'
4
3
5
4
Hooks . on ( 'closeChallengeTrackerForm' , ( ) => {
6
5
const buttonLocation = game . settings . get ( 'challenge-tracker' , 'buttonLocation' )
@@ -16,6 +15,11 @@ Hooks.on('closeChallengeTrackerForm', () => {
16
15
17
16
/* Display challenge trackers in a list with options */
18
17
export class ChallengeTrackerForm extends FormApplication {
18
+ constructor ( options ) {
19
+ super ( options )
20
+ this . scrollTop = 0
21
+ }
22
+
19
23
static get defaultOptions ( ) {
20
24
const defaults = super . defaultOptions
21
25
@@ -44,7 +48,16 @@ export class ChallengeTrackerForm extends FormApplication {
44
48
45
49
/* Initialise the ChallengeTrackerForm */
46
50
static init ( ) {
47
- this . challengeTrackerForm = new ChallengeTrackerForm ( )
51
+ game . challengeTrackerForm = new ChallengeTrackerForm ( )
52
+ game . challengeTrackerForm . _init ( )
53
+ }
54
+
55
+ _init ( ) {
56
+ Hooks . on ( 'renderChallengeTrackerForm' , async ( ) => {
57
+ const ul = $ ( 'ul.challenge-tracker-form' ) [ 0 ]
58
+ if ( ! ul ) return
59
+ ul . scrollTop = this . scrollTop
60
+ } )
48
61
}
49
62
50
63
/**
@@ -53,7 +66,7 @@ export class ChallengeTrackerForm extends FormApplication {
53
66
**/
54
67
static openByEvent ( event ) {
55
68
const userId = $ ( event . currentTarget ) . parents ( '[data-user-id]' ) ?. data ( ) ?. userId
56
- ChallengeTrackerForm . challengeTrackerForm . render ( true , { userId } )
69
+ game . challengeTrackerForm . render ( true , { userId } )
57
70
}
58
71
59
72
/**
@@ -71,7 +84,7 @@ export class ChallengeTrackerForm extends FormApplication {
71
84
} else {
72
85
userId = game . userId
73
86
}
74
- ChallengeTrackerForm . challengeTrackerForm . render ( true , { userId } )
87
+ game . challengeTrackerForm . render ( true , { userId } )
75
88
}
76
89
77
90
activateListeners ( html ) {
@@ -84,15 +97,16 @@ export class ChallengeTrackerForm extends FormApplication {
84
97
* @param {object } event Event trigger
85
98
**/
86
99
async _handleButtonClick ( event ) {
100
+ event . preventDefault ( )
87
101
const clickedElement = $ ( event . currentTarget )
88
102
const action = clickedElement . data ( ) . action
89
103
const ownerId = clickedElement . parents ( '[data-owner-id]' ) ?. data ( ) ?. ownerId
90
104
const challengeTrackerId = clickedElement . parents ( 'li' ) ?. data ( ) ?. challengeTrackerId
91
-
105
+ const ul = $ ( 'ul.challenge-tracker-form' ) [ 0 ]
106
+ this . scrollTop = ul . scrollTop
92
107
switch ( action ) {
93
108
case 'open' : {
94
109
ChallengeTracker . open ( null , null , { id : challengeTrackerId , ownerId } )
95
- this . render ( false , { width : 'auto' , height : 'auto' } )
96
110
break
97
111
}
98
112
case 'edit' : {
@@ -101,20 +115,49 @@ export class ChallengeTrackerForm extends FormApplication {
101
115
}
102
116
case 'copy' : {
103
117
await ChallengeTrackerFlag . copy ( ownerId , challengeTrackerId )
104
- this . render ( false , { width : 'auto' , height : 'auto' } )
105
118
break
106
119
}
107
120
case 'delete' : {
108
121
await ChallengeTrackerFlag . unset ( ownerId , challengeTrackerId )
122
+ break
123
+ }
124
+ case 'move-up' : {
125
+ await this . move ( 'up' , ownerId , challengeTrackerId )
126
+ this . render ( false , { width : 'auto' , height : 'auto' } )
127
+ break
128
+ }
129
+ case 'move-down' : {
130
+ await this . move ( 'down' , ownerId , challengeTrackerId )
109
131
this . render ( false , { width : 'auto' , height : 'auto' } )
110
132
break
111
133
}
112
134
case 'new' : {
113
135
await ChallengeTrackerEditForm . open ( ownerId )
114
- this . render ( false , { width : 'auto' , height : 'auto' } )
115
136
break
116
137
}
117
138
}
139
+ this . render ( false , { width : 'auto' , height : 'auto' } )
140
+ }
141
+
142
+ async move ( direction , ownerId , challengeTrackerId ) {
143
+ const flagLength = Object . keys ( game . users . get ( ownerId ) . data . flags [ 'challenge-tracker' ] ) . length
144
+ const challengeTracker1 = ChallengeTrackerFlag . get ( ownerId , challengeTrackerId )
145
+ if ( ! challengeTracker1 ) return
146
+ const originalPosition = challengeTracker1 . listPosition
147
+ if ( ( direction === 'up' && originalPosition === 1 ) ||
148
+ ( direction === 'down' && originalPosition >= flagLength ) ) return
149
+ let newPosition = null
150
+ switch ( direction ) {
151
+ case 'up' :
152
+ newPosition = originalPosition - 1
153
+ break
154
+ case 'down' :
155
+ newPosition = originalPosition + 1
156
+ break
157
+ }
158
+ const challengeTracker2 = Object . values ( game . users . get ( ownerId ) . data . flags [ 'challenge-tracker' ] ) . find ( ct => ct . listPosition === newPosition )
159
+ await ChallengeTrackerFlag . set ( ownerId , { id : challengeTrackerId , listPosition : newPosition } )
160
+ if ( challengeTracker2 ) await ChallengeTrackerFlag . set ( ownerId , { id : challengeTracker2 . id , listPosition : originalPosition } )
118
161
}
119
162
}
120
163
@@ -124,7 +167,6 @@ export class ChallengeTrackerEditForm extends FormApplication {
124
167
super ( )
125
168
this . ownerId = ownerId
126
169
this . challengeTrackerId = challengeTrackerId
127
- this . jscolor = jscolor
128
170
}
129
171
130
172
static get defaultOptions ( ) {
@@ -152,6 +194,7 @@ export class ChallengeTrackerEditForm extends FormApplication {
152
194
return {
153
195
challengeTracker : {
154
196
frameColor : null ,
197
+ frameWidth : 'medium' ,
155
198
id : `${ ChallengeTrackerSettings . id } -${ Math . random ( ) . toString ( 16 ) . slice ( 2 ) } ` ,
156
199
innerBackgroundColor : null ,
157
200
innerColor : null ,
@@ -190,7 +233,7 @@ export class ChallengeTrackerEditForm extends FormApplication {
190
233
191
234
activateListeners ( html ) {
192
235
super . activateListeners ( html )
193
- this . jscolor . install ( )
236
+ ColorPicker . install ( )
194
237
}
195
238
196
239
/**
@@ -209,7 +252,8 @@ export class ChallengeTrackerEditForm extends FormApplication {
209
252
const title = formData . title ?? game . i18n . localize ( 'challengeTracker.labels.challengeTrackerTitle' )
210
253
const persist = true
211
254
const id = challengeTrackerId
212
- challengeTrackerOptions = foundry . utils . mergeObject ( formData , { ownerId, id, persist, title } )
255
+ const listPosition = Object . keys ( game . users . get ( ownerId ) . data . flags [ 'challenge-tracker' ] ) . length + 1
256
+ challengeTrackerOptions = foundry . utils . mergeObject ( formData , { ownerId, id, listPosition, persist, title } )
213
257
}
214
258
await ChallengeTrackerFlag . set ( ownerId , challengeTrackerOptions )
215
259
await ChallengeTracker . draw ( challengeTrackerOptions )
0 commit comments