A sorter site for Idolm@ster Characters
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

More data formatting, some comments

execfera b0c7e96f 9098a3e0

+957 -649
+951 -649
src/data.js
··· 1 - const imageRoot = 'https://i.imgur.com/'; 1 + const imageRoot = "https://i.imgur.com/"; 2 + 3 + /** 4 + * Sorter options. Characters will be removed from the sorting array based on selected options, working down the array. 5 + * 6 + * @type {{name: string, key: string, tooltip?: string, checked?: boolean, sub?: {name: string, tooltip?: string, checked?: string}[]}[]} 7 + */ 2 8 const options = [ 3 9 { 4 - name: 'Filter by Series Entry', 5 - key: 'series', 6 - tooltip: 'Check this to remove certain series entries.', 10 + name: "Filter by Series Entry", 11 + key: "series", 12 + tooltip: "Check this to remove certain series entries.", 7 13 checked: false, 8 14 sub: [ 9 - { name: 'Books and CDs' }, 10 - { name: 'The Highly Responsive to Prayers', tooltip: '01 - Reiiden' }, 11 - { name: 'The Story of Eastern Wonderland', tooltip: '02 - Fuumaroku' }, 12 - { name: 'Phantasmagoria of Dim.Dream', tooltip: '03 - Yumejikuu' }, 13 - { name: 'Lotus Land Story', tooltip: '04 - Gensoukyou' }, 14 - { name: 'Mystic Square', tooltip: '05 - Kaikidan' }, 15 - { name: 'Embodiment of Scarlet Devil', tooltip: '06 - Koumakan' }, 16 - { name: 'Perfect Cherry Blossom', tooltip: '07 - Youyoumu' }, 17 - { name: 'Immaterial and Missing Power', tooltip: '07.5 - Suimusou' }, 18 - { name: 'Imperishable Night', tooltip: '08 - Eiyashou' }, 19 - { name: 'Phantasmagoria of Flower View', tooltip: '09 - Kaeidzuka' }, 20 - { name: 'Shoot the Bullet', tooltip: '09.5 - Bunkachou' }, 21 - { name: 'Mountain of Faith', tooltip: '10 - Fuujinroku' }, 22 - { name: 'Scarlet Weather Rhapsody', tooltip: '10.5 - Hisouten' }, 23 - { name: 'Subterranean Animism', tooltip: '11 - Chireiden' }, 24 - { name: 'Undefined Fantastic Object', tooltip: '12 - Seirensen' }, 25 - { name: 'Touhou Hisoutensoku', tooltip: '12.3 - Hisoutensoku' }, 26 - { name: 'Double Spoiler', tooltip: '12.5 - Bunkachou' }, 27 - { name: 'Great Fairy Wars', tooltip: '12.8 - Daisensou' }, 28 - { name: 'Ten Desires', tooltip: '13 - Shinreibyou' }, 29 - { name: 'Hopeless Masquerade', tooltip: '13.5 - Shinkirou' }, 30 - { name: 'Double Dealing Character', tooltip: '14 - Kishinjou' }, 31 - { name: 'Impossible Spell Card', tooltip: '14.3 - Amanojaku' }, 32 - { name: 'Urban Legend in Limbo', tooltip: '14.5 - Shinpiroku' }, 33 - { name: 'Legacy of Lunatic Kingdom', tooltip: '15 - Kanjuden' }, 34 - { name: 'Antinomy of Common Flowers', tooltip: '15.5 - Hyouibana' }, 35 - { name: 'Hidden Star in Four Seasons', tooltip: '16 - Tenkuushou' } 15 + { name: "Books and CDs" }, 16 + { name: "The Highly Responsive to Prayers", tooltip: "01 - Reiiden" }, 17 + { name: "The Story of Eastern Wonderland", tooltip: "02 - Fuumaroku" }, 18 + { name: "Phantasmagoria of Dim.Dream", tooltip: "03 - Yumejikuu" }, 19 + { name: "Lotus Land Story", tooltip: "04 - Gensoukyou" }, 20 + { name: "Mystic Square", tooltip: "05 - Kaikidan" }, 21 + { name: "Embodiment of Scarlet Devil", tooltip: "06 - Koumakan" }, 22 + { name: "Perfect Cherry Blossom", tooltip: "07 - Youyoumu" }, 23 + { name: "Immaterial and Missing Power", tooltip: "07.5 - Suimusou" }, 24 + { name: "Imperishable Night", tooltip: "08 - Eiyashou" }, 25 + { name: "Phantasmagoria of Flower View", tooltip: "09 - Kaeidzuka" }, 26 + { name: "Shoot the Bullet", tooltip: "09.5 - Bunkachou" }, 27 + { name: "Mountain of Faith", tooltip: "10 - Fuujinroku" }, 28 + { name: "Scarlet Weather Rhapsody", tooltip: "10.5 - Hisouten" }, 29 + { name: "Subterranean Animism", tooltip: "11 - Chireiden" }, 30 + { name: "Undefined Fantastic Object", tooltip: "12 - Seirensen" }, 31 + { name: "Touhou Hisoutensoku", tooltip: "12.3 - Hisoutensoku" }, 32 + { name: "Double Spoiler", tooltip: "12.5 - Bunkachou" }, 33 + { name: "Great Fairy Wars", tooltip: "12.8 - Daisensou" }, 34 + { name: "Ten Desires", tooltip: "13 - Shinreibyou" }, 35 + { name: "Hopeless Masquerade", tooltip: "13.5 - Shinkirou" }, 36 + { name: "Double Dealing Character", tooltip: "14 - Kishinjou" }, 37 + { name: "Impossible Spell Card", tooltip: "14.3 - Amanojaku" }, 38 + { name: "Urban Legend in Limbo", tooltip: "14.5 - Shinpiroku" }, 39 + { name: "Legacy of Lunatic Kingdom", tooltip: "15 - Kanjuden" }, 40 + { name: "Antinomy of Common Flowers", tooltip: "15.5 - Hyouibana" }, 41 + { name: "Hidden Star in Four Seasons", tooltip: "16 - Tenkuushou" } 36 42 ] 37 43 }, 38 44 { 39 - name: 'Filter by Stage Appearances', 40 - key: 'stage', 41 - tooltip: 'Check this to remove certain stages.', 45 + name: "Filter by Stage Appearances", 46 + key: "stage", 47 + tooltip: "Check this to remove certain stages.", 42 48 checked: false, 43 49 sub: [ 44 - { name: 'Stage 1' }, 45 - { name: 'Stage 2' }, 46 - { name: 'Stage 3' }, 47 - { name: 'Stage 4' }, 48 - { name: 'Stage 5/Penultimate', tooltip: 'Stage 4 in 5-stage games, and Stage 8 in 9-stage games.' }, 49 - { name: 'Stage 6/Final' }, 50 - { name: 'Stage EX/Phantasm' } 50 + { name: "Stage 1" }, 51 + { name: "Stage 2" }, 52 + { name: "Stage 3" }, 53 + { name: "Stage 4" }, 54 + { name: "Stage 5/Penultimate", tooltip: "Stage 4 in 5-stage games, and Stage 8 in 9-stage games." 55 + }, 56 + { name: "Stage 6/Final" }, 57 + { name: "Stage EX/Phantasm" } 51 58 ] 52 59 }, 53 60 { 54 - name: 'Include PC-98 Duplicates', 55 - key: 'pc98', 56 - tooltip: 'Check this to include PC-98 characters with a Windows counterpart.', 61 + name: "Include PC-98 Duplicates", 62 + key: "pc98", 63 + tooltip: 64 + "Check this to include PC-98 characters with a Windows counterpart.", 57 65 checked: false 58 66 }, 59 67 { 60 - name: 'Include Non-Girls', 61 - key: 'notgirl', 62 - tooltip: 'Check this to include certain non-female characters.', 68 + name: "Include Non-Girls", 69 + key: "notgirl", 70 + tooltip: "Check this to include certain non-female characters.", 63 71 checked: false 64 72 } 65 73 ]; 66 74 67 75 const characterData = [ 68 76 { 69 - name: 'Hakurei Reimu', 70 - img: 'c5DqpgX.png', 71 - series: [0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26], 72 - stage: [3] 77 + name: "Hakurei Reimu", 78 + img: "c5DqpgX.png", 79 + opts: { 80 + series: [0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26], 81 + stage: [3] 82 + } 73 83 }, 74 84 { 75 - name: 'Kirisame Marisa', 76 - img: 'tJnkSzK.png', 77 - series: [0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], 78 - stage: [3, 6] 85 + name: "Kirisame Marisa", 86 + img: "tJnkSzK.png", 87 + opts: { 88 + series: [0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], 89 + stage: [3, 6] 90 + } 79 91 }, 80 92 { 81 - name: 'Rumia', 82 - img: '0YT7QlS.png', 83 - series: [0, 6, 11, 20], 84 - stage: [0] 93 + name: "Rumia", 94 + img: "0YT7QlS.png", 95 + opts: { 96 + series: [0, 6, 11, 20], 97 + stage: [0] 98 + } 85 99 }, 86 100 { 87 - name: 'Daiyousei', 88 - img: 'NWlZud3.png', 89 - series: [0, 6], 90 - stage: [1, 6] 101 + name: "Daiyousei", 102 + img: "NWlZud3.png", 103 + opts: { 104 + series: [0, 6], 105 + stage: [1, 6] 106 + } 91 107 }, 92 108 { 93 - name: 'Cirno', 94 - img: 'qdveFSy.png', 95 - series: [0, 6, 7, 10, 11, 16, 18, 20, 21, 22, 26], 96 - stage: [1] 109 + name: "Cirno", 110 + img: "qdveFSy.png", 111 + opts: { 112 + series: [0, 6, 7, 10, 11, 16, 18, 20, 21, 22, 26], 113 + stage: [1] 114 + } 97 115 }, 98 116 { 99 - name: 'Hong Meiling', 100 - img: 'ptGp0x4.png', 101 - series: [0, 6, 8, 11, 16], 102 - stage: [2] 117 + name: "Hong Meiling", 118 + img: "ptGp0x4.png", 119 + opts: { 120 + series: [0, 6, 8, 11, 16], 121 + stage: [2] 122 + } 103 123 }, 104 124 { 105 - name: 'Koakuma', 106 - img: 'vBKdDm4.png', 107 - series: [0, 6], 108 - stage: [3] 125 + name: "Koakuma", 126 + img: "vBKdDm4.png", 127 + opts: { 128 + series: [0, 6], 129 + stage: [3] 130 + } 109 131 }, 110 132 { 111 - name: 'Patchouli Knowledge', 112 - img: 'A7ZnuHo.png', 113 - series: [0, 6, 8, 11, 12, 16, 20], 114 - stage: [3, 6] 133 + name: "Patchouli Knowledge", 134 + img: "A7ZnuHo.png", 135 + opts: { 136 + series: [0, 6, 8, 11, 12, 16, 20], 137 + stage: [3, 6] 138 + } 115 139 }, 116 140 { 117 - name: 'Izayoi Sakuya', 118 - img: 'sgZPf11.png', 119 - series: [0, 6, 7, 8, 9, 10, 11, 12, 16, 20, 21, 22], 120 - stage: [4, 5] 141 + name: "Izayoi Sakuya", 142 + img: "sgZPf11.png", 143 + opts: { 144 + series: [0, 6, 7, 8, 9, 10, 11, 12, 16, 20, 21, 22], 145 + stage: [4, 5] 146 + } 121 147 }, 122 148 { 123 - name: 'Remilia Scarlet', 124 - img: '8UX7hKE.png', 125 - series: [0, 6, 8, 9, 11, 12, 16, 20, 22], 126 - stage: [5] 149 + name: "Remilia Scarlet", 150 + img: "8UX7hKE.png", 151 + opts: { 152 + series: [0, 6, 8, 9, 11, 12, 16, 20, 22], 153 + stage: [5] 154 + } 127 155 }, 128 156 { 129 - name: 'Flandre Scarlet', 130 - img: 'OhaDcnc.png', 131 - series: [0, 6, 11], 132 - stage: [6] 157 + name: "Flandre Scarlet", 158 + img: "OhaDcnc.png", 159 + opts: { 160 + series: [0, 6, 11], 161 + stage: [6] 162 + } 133 163 }, 134 164 { 135 - name: 'Letty Whiterock', 136 - img: 'MgzqjFK.png', 137 - series: [0, 7, 11, 20], 138 - stage: [0] 165 + name: "Letty Whiterock", 166 + img: "MgzqjFK.png", 167 + opts: { 168 + series: [0, 7, 11, 20], 169 + stage: [0] 170 + } 139 171 }, 140 172 { 141 - name: 'Chen', 142 - img: 'ohmetZh.png', 143 - series: [0, 7, 8, 11, 12, 16, 20], 144 - stage: [1, 6] 173 + name: "Chen", 174 + img: "ohmetZh.png", 175 + opts: { 176 + series: [0, 7, 8, 11, 12, 16, 20], 177 + stage: [1, 6] 178 + } 145 179 }, 146 180 { 147 - name: 'Alice Margatroid', 148 - img: 'aDIf0pN.png', 149 - series: [0, 7, 8, 9, 11, 12, 16, 20], 150 - stage: [2] 181 + name: "Alice Margatroid", 182 + img: "aDIf0pN.png", 183 + opts: { 184 + series: [0, 7, 8, 9, 11, 12, 16, 20], 185 + stage: [2] 186 + } 151 187 }, 152 188 { 153 - name: 'Lily White', 154 - img: '2Pr8b2N.png', 155 - series: [0, 7, 10, 20, 26], 156 - stage: [3, 6] 189 + name: "Lily White", 190 + img: "2Pr8b2N.png", 191 + opts: { 192 + series: [0, 7, 10, 20, 26], 193 + stage: [3, 6] 194 + } 157 195 }, 158 196 { 159 - name: 'Lunasa Prismriver', 160 - img: 'htOMdDQ.png', 161 - series: [0, 7, 10, 20, 25], 162 - stage: [3] 197 + name: "Lunasa Prismriver", 198 + img: "htOMdDQ.png", 199 + opts: { 200 + series: [0, 7, 10, 20, 25], 201 + stage: [3] 202 + } 163 203 }, 164 204 { 165 - name: 'Merlin Prismriver', 166 - img: 'PrRPujP.png', 167 - series: [0, 7, 10, 20, 25], 168 - stage: [3] 205 + name: "Merlin Prismriver", 206 + img: "PrRPujP.png", 207 + opts: { 208 + series: [0, 7, 10, 20, 25], 209 + stage: [3] 210 + } 169 211 }, 170 212 { 171 - name: 'Lyrica Prismriver', 172 - img: 'ze79bFC.png', 173 - series: [0, 7, 10, 20, 25], 174 - stage: [3] 213 + name: "Lyrica Prismriver", 214 + img: "ze79bFC.png", 215 + opts: { 216 + series: [0, 7, 10, 20, 25], 217 + stage: [3] 218 + } 175 219 }, 176 220 { 177 - name: 'Konpaku Youmu', 178 - img: 'WMjyRLJ.png', 179 - series: [0, 7, 8, 9, 10, 11, 12, 16, 19, 20, 22], 180 - stage: [4, 5] 221 + name: "Konpaku Youmu", 222 + img: "WMjyRLJ.png", 223 + opts: { 224 + series: [0, 7, 8, 9, 10, 11, 12, 16, 19, 20, 22], 225 + stage: [4, 5] 226 + } 181 227 }, 182 228 { 183 - name: 'Saigyouji Yuyuko', 184 - img: 'VT9mTGb.png', 185 - series: [0, 7, 8, 9, 11, 12, 16, 19, 20, 22], 186 - stage: [0, 5] 229 + name: "Saigyouji Yuyuko", 230 + img: "VT9mTGb.png", 231 + opts: { 232 + series: [0, 7, 8, 9, 11, 12, 16, 19, 20, 22], 233 + stage: [0, 5] 234 + } 187 235 }, 188 236 { 189 - name: 'Yakumo Ran', 190 - img: 'rshnJPV.png', 191 - series: [0, 7, 8, 9, 11, 12, 16, 20], 192 - stage: [6] 237 + name: "Yakumo Ran", 238 + img: "rshnJPV.png", 239 + opts: { 240 + series: [0, 7, 8, 9, 11, 12, 16, 20], 241 + stage: [6] 242 + } 193 243 }, 194 244 { 195 - name: 'Yakumo Yukari', 196 - img: 'qsceD4I.png', 197 - series: [0, 7, 8, 9, 11, 12, 16, 20, 22, 25], 198 - stage: [6] 245 + name: "Yakumo Yukari", 246 + img: "qsceD4I.png", 247 + opts: { 248 + series: [0, 7, 8, 9, 11, 12, 16, 20, 22, 25], 249 + stage: [6] 250 + } 199 251 }, 200 252 { 201 - name: 'Ibuki Suika', 202 - img: 'pLdMjQ3.png', 203 - series: [0, 8, 11, 12, 16, 17, 20, 22], 204 - stage: [5] 253 + name: "Ibuki Suika", 254 + img: "pLdMjQ3.png", 255 + opts: { 256 + series: [0, 8, 11, 12, 16, 17, 20, 22], 257 + stage: [5] 258 + } 205 259 }, 206 260 { 207 - name: 'Wriggle Nightbug', 208 - img: '8DLUAPf.png', 209 - series: [0, 9, 11, 20], 210 - stage: [0] 261 + name: "Wriggle Nightbug", 262 + img: "8DLUAPf.png", 263 + opts: { 264 + series: [0, 9, 11, 20], 265 + stage: [0] 266 + } 211 267 }, 212 268 { 213 - name: 'Mystia Lorelei', 214 - img: '6KyhLqE.png', 215 - series: [0, 9, 10, 11, 20], 216 - stage: [1] 269 + name: "Mystia Lorelei", 270 + img: "6KyhLqE.png", 271 + opts: { 272 + series: [0, 9, 10, 11, 20], 273 + stage: [1] 274 + } 217 275 }, 218 276 { 219 - name: 'Kamishirasawa Keine', 220 - img: '99w0Chm.png', 221 - series: [0, 9, 11, 20, 22], 222 - stage: [2, 6] 277 + name: "Kamishirasawa Keine", 278 + img: "99w0Chm.png", 279 + opts: { 280 + series: [0, 9, 11, 20, 22], 281 + stage: [2, 6] 282 + } 223 283 }, 224 284 { 225 - name: 'Inaba Tewi', 226 - img: 'yqNfNje.png', 227 - series: [0, 9, 10, 11, 20], 228 - stage: [4] 285 + name: "Inaba Tewi", 286 + img: "yqNfNje.png", 287 + opts: { 288 + series: [0, 9, 10, 11, 20], 289 + stage: [4] 290 + } 229 291 }, 230 292 { 231 - name: 'Reisen Udongein Inaba', 232 - img: 'PrYzRcC.png', 233 - series: [0, 9, 10, 11, 16, 20, 24, 25], 234 - stage: [4] 293 + name: "Reisen Udongein Inaba", 294 + img: "PrYzRcC.png", 295 + opts: { 296 + series: [0, 9, 10, 11, 16, 20, 24, 25], 297 + stage: [4] 298 + } 235 299 }, 236 300 { 237 - name: 'Yagokoro Eirin', 238 - img: 'ceo4DhK.png', 239 - series: [0, 9, 11, 20], 240 - stage: [5] 301 + name: "Yagokoro Eirin", 302 + img: "ceo4DhK.png", 303 + opts: { 304 + series: [0, 9, 11, 20], 305 + stage: [5] 306 + } 241 307 }, 242 308 { 243 - name: 'Houraisan Kaguya', 244 - img: '2YDuTk3.png', 245 - series: [0, 9, 11, 20], 246 - stage: [5] 309 + name: "Houraisan Kaguya", 310 + img: "2YDuTk3.png", 311 + opts: { 312 + series: [0, 9, 11, 20], 313 + stage: [5] 314 + } 247 315 }, 248 316 { 249 - name: 'Fujiwara no Mokou', 250 - img: '3zo4VKV.png', 251 - series: [0, 9, 11, 20, 22, 23, 25], 252 - stage: [6] 317 + name: "Fujiwara no Mokou", 318 + img: "3zo4VKV.png", 319 + opts: { 320 + series: [0, 9, 11, 20, 22, 23, 25], 321 + stage: [6] 322 + } 253 323 }, 254 324 { 255 - name: 'Shameimaru Aya', 256 - img: '8TLXMST.png', 257 - series: [0, 10, 11, 12, 13, 16, 20, 22, 26], 258 - stage: [3] 325 + name: "Shameimaru Aya", 326 + img: "8TLXMST.png", 327 + opts: { 328 + series: [0, 10, 11, 12, 13, 16, 20, 22, 26], 329 + stage: [3] 330 + } 259 331 }, 260 332 { 261 - name: 'Medicine Melancholy', 262 - img: 'IImsp7K.png', 263 - series: [0, 10, 11, 20], 264 - stage: [3] 333 + name: "Medicine Melancholy", 334 + img: "IImsp7K.png", 335 + opts: { 336 + series: [0, 10, 11, 20], 337 + stage: [3] 338 + } 265 339 }, 266 340 { 267 - name: 'Kazami Yuuka', 268 - img: 'MZXJQq5.png', 269 - series: [0, 10, 11, 20], 270 - stage: [4] 341 + name: "Kazami Yuuka", 342 + img: "MZXJQq5.png", 343 + opts: { 344 + series: [0, 10, 11, 20], 345 + stage: [4] 346 + } 271 347 }, 272 348 { 273 - name: 'Onozuka Komachi', 274 - img: 'aX4WIH8.png', 275 - series: [0, 10, 11, 12, 16, 20], 276 - stage: [4] 349 + name: "Onozuka Komachi", 350 + img: "aX4WIH8.png", 351 + opts: { 352 + series: [0, 10, 11, 12, 16, 20], 353 + stage: [4] 354 + } 277 355 }, 278 356 { 279 - name: 'Shiki Eiki, Yamaxanadu', 280 - img: 'nPBvatH.png', 281 - series: [0, 10, 11, 20], 282 - stage: [5] 357 + name: "Shiki Eiki, Yamaxanadu", 358 + img: "nPBvatH.png", 359 + opts: { 360 + series: [0, 10, 11, 20], 361 + stage: [5] 362 + } 283 363 }, 284 364 { 285 - name: 'Aki Shizuha', 286 - img: '3pDRgvR.png', 287 - series: [13, 17, 20], 288 - stage: [0] 365 + name: "Aki Shizuha", 366 + img: "3pDRgvR.png", 367 + opts: { 368 + series: [13, 17, 20], 369 + stage: [0] 370 + } 289 371 }, 290 372 { 291 - name: 'Aki Minoriko', 292 - img: 'bV0DaN7.png', 293 - series: [13, 17, 20], 294 - stage: [0] 373 + name: "Aki Minoriko", 374 + img: "bV0DaN7.png", 375 + opts: { 376 + series: [13, 17, 20], 377 + stage: [0] 378 + } 295 379 }, 296 380 { 297 - name: 'Kagiyama Hina', 298 - img: 'J11NjNj.png', 299 - series: [13, 17, 20], 300 - stage: [1] 381 + name: "Kagiyama Hina", 382 + img: "J11NjNj.png", 383 + opts: { 384 + series: [13, 17, 20], 385 + stage: [1] 386 + } 301 387 }, 302 388 { 303 - name: 'Kawashiro Nitori', 304 - img: '4Ufced2.png', 305 - series: [13, 17, 20, 22, 23, 25], 306 - stage: [2] 389 + name: "Kawashiro Nitori", 390 + img: "4Ufced2.png", 391 + opts: { 392 + series: [13, 17, 20, 22, 23, 25], 393 + stage: [2] 394 + } 307 395 }, 308 396 { 309 - name: 'Inubashiri Momiji', 310 - img: 'qGMjnYk.png', 311 - series: [13, 17, 22], 312 - stage: [3] 397 + name: "Inubashiri Momiji", 398 + img: "qGMjnYk.png", 399 + opts: { 400 + series: [13, 17, 22], 401 + stage: [3] 402 + } 313 403 }, 314 404 { 315 - name: 'Kochiya Sanae', 316 - img: 'ATTRSWU.png', 317 - series: [13, 14, 15, 16, 17, 19, 20, 22, 24], 318 - stage: [4, 6] 405 + name: "Kochiya Sanae", 406 + img: "ATTRSWU.png", 407 + opts: { 408 + series: [13, 14, 15, 16, 17, 19, 20, 22, 24], 409 + stage: [4, 6] 410 + } 319 411 }, 320 412 { 321 - name: 'Yasaka Kanako', 322 - img: 'nQ78Lz7.png', 323 - series: [13, 16, 17, 20, 22], 324 - stage: [5, 6] 413 + name: "Yasaka Kanako", 414 + img: "nQ78Lz7.png", 415 + opts: { 416 + series: [13, 16, 17, 20, 22], 417 + stage: [5, 6] 418 + } 325 419 }, 326 420 { 327 - name: 'Moriya Suwako', 328 - img: 'yJaD5ZV.png', 329 - series: [13, 14, 16, 17, 20, 22], 330 - stage: [6] 421 + name: "Moriya Suwako", 422 + img: "yJaD5ZV.png", 423 + opts: { 424 + series: [13, 14, 16, 17, 20, 22], 425 + stage: [6] 426 + } 331 427 }, 332 428 { 333 - name: 'Nagae Iku', 334 - img: 'xgAlECj.png', 335 - series: [12, 16, 17, 20], 336 - stage: [4] 429 + name: "Nagae Iku", 430 + img: "xgAlECj.png", 431 + opts: { 432 + series: [12, 16, 17, 20], 433 + stage: [4] 434 + } 337 435 }, 338 436 { 339 - name: 'Hinanawi Tenshi', 340 - img: 'tZLYivt.png', 341 - series: [12, 16, 17, 20, 22, 25], 342 - stage: [5] 437 + name: "Hinanawi Tenshi", 438 + img: "tZLYivt.png", 439 + opts: { 440 + series: [12, 16, 17, 20, 22, 25], 441 + stage: [5] 442 + } 343 443 }, 344 444 { 345 - name: 'Kisume', 346 - img: 'VgJgaEf.png', 347 - series: [14, 17], 348 - stage: [0] 445 + name: "Kisume", 446 + img: "VgJgaEf.png", 447 + opts: { 448 + series: [14, 17], 449 + stage: [0] 450 + } 349 451 }, 350 452 { 351 - name: 'Kurodani Yamame', 352 - img: 'sqgJ2St.png', 353 - series: [14, 17, 20], 354 - stage: [0] 453 + name: "Kurodani Yamame", 454 + img: "sqgJ2St.png", 455 + opts: { 456 + series: [14, 17, 20], 457 + stage: [0] 458 + } 355 459 }, 356 460 { 357 - name: 'Mizuhashi Parsee', 358 - img: 'lkoAJod.png', 359 - series: [14, 17, 20], 360 - stage: [1] 461 + name: "Mizuhashi Parsee", 462 + img: "lkoAJod.png", 463 + opts: { 464 + series: [14, 17, 20], 465 + stage: [1] 466 + } 361 467 }, 362 468 { 363 - name: 'Hoshiguma Yuugi', 364 - img: 'tDO653L.png', 365 - series: [14, 17, 20], 366 - stage: [2] 469 + name: "Hoshiguma Yuugi", 470 + img: "tDO653L.png", 471 + opts: { 472 + series: [14, 17, 20], 473 + stage: [2] 474 + } 367 475 }, 368 476 { 369 - name: 'Komeiji Satori', 370 - img: 'dup7Nt6.png', 371 - series: [14, 17, 20], 372 - stage: [3] 477 + name: "Komeiji Satori", 478 + img: "dup7Nt6.png", 479 + opts: { 480 + series: [14, 17, 20], 481 + stage: [3] 482 + } 373 483 }, 374 484 { 375 - name: 'Kaenbyou Rin (Orin)', 376 - img: 'uQjbw1W.png', 377 - series: [14, 17, 20], 378 - stage: [3, 4, 5] 485 + name: "Kaenbyou Rin (Orin)", 486 + img: "uQjbw1W.png", 487 + opts: { 488 + series: [14, 17, 20], 489 + stage: [3, 4, 5] 490 + } 379 491 }, 380 492 { 381 - name: 'Reiuji Utsuho (Okuu)', 382 - img: 'DfdaXPW.png', 383 - series: [14, 16, 17, 20], 384 - stage: [5] 493 + name: "Reiuji Utsuho (Okuu)", 494 + img: "DfdaXPW.png", 495 + opts: { 496 + series: [14, 16, 17, 20], 497 + stage: [5] 498 + } 385 499 }, 386 500 { 387 - name: 'Komeiji Koishi', 388 - img: 'wVCcens.png', 389 - series: [14, 17, 20, 23, 25], 390 - stage: [6] 501 + name: "Komeiji Koishi", 502 + img: "wVCcens.png", 503 + opts: { 504 + series: [14, 17, 20, 23, 25], 505 + stage: [6] 506 + } 391 507 }, 392 508 { 393 - name: 'Nazrin', 394 - img: 'EpHQbiY.png', 395 - series: [15, 17, 20], 396 - stage: [0, 4] 509 + name: "Nazrin", 510 + img: "EpHQbiY.png", 511 + opts: { 512 + series: [15, 17, 20], 513 + stage: [0, 4] 514 + } 397 515 }, 398 516 { 399 - name: 'Tatara Kogasa', 400 - img: 'kJbv4dc.png', 401 - series: [15, 17, 20], 402 - stage: [1, 6] 517 + name: "Tatara Kogasa", 518 + img: "kJbv4dc.png", 519 + opts: { 520 + series: [15, 17, 20], 521 + stage: [1, 6] 522 + } 403 523 }, 404 524 { 405 - name: 'Kumoi Ichirin', 406 - img: 'Fyn5yVx.png', 407 - series: [15, 17, 20, 23, 25], 408 - stage: [2] 525 + name: "Kumoi Ichirin", 526 + img: "Fyn5yVx.png", 527 + opts: { 528 + series: [15, 17, 20, 23, 25], 529 + stage: [2] 530 + } 409 531 }, 410 532 { 411 - name: 'Murasa Minamitsu', 412 - img: '39KYpvW.png', 413 - series: [15, 17, 20], 414 - stage: [3] 533 + name: "Murasa Minamitsu", 534 + img: "39KYpvW.png", 535 + opts: { 536 + series: [15, 17, 20], 537 + stage: [3] 538 + } 415 539 }, 416 540 { 417 - name: 'Toramaru Shou', 418 - img: '8bMDDAo.png', 419 - series: [15, 17, 20], 420 - stage: [4] 541 + name: "Toramaru Shou", 542 + img: "8bMDDAo.png", 543 + opts: { 544 + series: [15, 17, 20], 545 + stage: [4] 546 + } 421 547 }, 422 548 { 423 - name: 'Hijiri Byakuren', 424 - img: '2ppPxny.png', 425 - series: [15, 17, 20, 22, 23, 25], 426 - stage: [5] 549 + name: "Hijiri Byakuren", 550 + img: "2ppPxny.png", 551 + opts: { 552 + series: [15, 17, 20, 22, 23, 25], 553 + stage: [5] 554 + } 427 555 }, 428 556 { 429 - name: 'Houjuu Nue', 430 - img: 'zL4S8Mj.png', 431 - series: [15, 17, 19, 20], 432 - stage: [3, 5, 6] 557 + name: "Houjuu Nue", 558 + img: "zL4S8Mj.png", 559 + opts: { 560 + series: [15, 17, 19, 20], 561 + stage: [3, 5, 6] 562 + } 433 563 }, 434 564 { 435 - name: 'Himekaidou Hatate', 436 - img: 'LgvoTaJ.png', 437 - series: [17, 20, 22], 438 - stage: [6] 565 + name: "Himekaidou Hatate", 566 + img: "LgvoTaJ.png", 567 + opts: { 568 + series: [17, 20, 22], 569 + stage: [6] 570 + } 439 571 }, 440 572 { 441 - name: 'Sunny Milk', 442 - img: 'VbqXiB6.png', 443 - series: [0, 18, 20], 444 - stage: [0, 1, 2] 573 + name: "Sunny Milk", 574 + img: "VbqXiB6.png", 575 + opts: { 576 + series: [0, 18, 20], 577 + stage: [0, 1, 2] 578 + } 445 579 }, 446 580 { 447 - name: 'Luna Child', 448 - img: 'OBqgP48.png', 449 - series: [0, 18, 20], 450 - stage: [0, 1, 2] 581 + name: "Luna Child", 582 + img: "OBqgP48.png", 583 + opts: { 584 + series: [0, 18, 20], 585 + stage: [0, 1, 2] 586 + } 451 587 }, 452 588 { 453 - name: 'Star Sapphire', 454 - img: 'sNw61ap.png', 455 - series: [0, 18, 20], 456 - stage: [0, 1, 2] 589 + name: "Star Sapphire", 590 + img: "sNw61ap.png", 591 + opts: { 592 + series: [0, 18, 20], 593 + stage: [0, 1, 2] 594 + } 457 595 }, 458 596 { 459 - name: 'Kasodani Kyouko', 460 - img: 'sLiqEBA.png', 461 - series: [19, 20, 22], 462 - stage: [1] 597 + name: "Kasodani Kyouko", 598 + img: "sLiqEBA.png", 599 + opts: { 600 + series: [19, 20, 22], 601 + stage: [1] 602 + } 463 603 }, 464 604 { 465 - name: 'Miyako Yoshika', 466 - img: '6jq6eh6.png', 467 - series: [19, 20, 22], 468 - stage: [2, 3] 605 + name: "Miyako Yoshika", 606 + img: "6jq6eh6.png", 607 + opts: { 608 + series: [19, 20, 22], 609 + stage: [2, 3] 610 + } 469 611 }, 470 612 { 471 - name: 'Kaku Seiga', 472 - img: '090hLPL.png', 473 - series: [19, 20, 22], 474 - stage: [3] 613 + name: "Kaku Seiga", 614 + img: "090hLPL.png", 615 + opts: { 616 + series: [19, 20, 22], 617 + stage: [3] 618 + } 475 619 }, 476 620 { 477 - name: 'Soga no Tojiko', 478 - img: 'y0UXwFO.png', 479 - series: [19, 20], 480 - stage: [4] 621 + name: "Soga no Tojiko", 622 + img: "y0UXwFO.png", 623 + opts: { 624 + series: [19, 20], 625 + stage: [4] 626 + } 481 627 }, 482 628 { 483 - name: 'Mononobe no Futo', 484 - img: 'WTZ97LE.png', 485 - series: [19, 20, 22, 23, 25], 486 - stage: [4] 629 + name: "Mononobe no Futo", 630 + img: "WTZ97LE.png", 631 + opts: { 632 + series: [19, 20, 22, 23, 25], 633 + stage: [4] 634 + } 487 635 }, 488 636 { 489 - name: 'Toyosatomimi no Miko', 490 - img: '3Xiqd22.png', 491 - series: [19, 20, 22, 23, 25], 492 - stage: [5] 637 + name: "Toyosatomimi no Miko", 638 + img: "3Xiqd22.png", 639 + opts: { 640 + series: [19, 20, 22, 23, 25], 641 + stage: [5] 642 + } 493 643 }, 494 644 { 495 - name: 'Futatsuiwa Mamizou', 496 - img: 'gMpWdmA.png', 497 - series: [19, 20, 22, 23, 25], 498 - stage: [6] 645 + name: "Futatsuiwa Mamizou", 646 + img: "gMpWdmA.png", 647 + opts: { 648 + series: [19, 20, 22, 23, 25], 649 + stage: [6] 650 + } 499 651 }, 500 652 { 501 - name: 'Hata no Kokoro', 502 - img: 'fxCGmUk.png', 503 - series: [0, 20, 23, 25], 504 - stage: [5] 653 + name: "Hata no Kokoro", 654 + img: "fxCGmUk.png", 655 + opts: { 656 + series: [0, 20, 23, 25], 657 + stage: [5] 658 + } 505 659 }, 506 660 { 507 - name: 'Wakasagihime', 508 - img: 'brWCLVx.png', 509 - series: [21, 22], 510 - stage: [0] 661 + name: "Wakasagihime", 662 + img: "brWCLVx.png", 663 + opts: { 664 + series: [21, 22], 665 + stage: [0] 666 + } 511 667 }, 512 668 { 513 - name: 'Sekibanki', 514 - img: 'VAMLiJD.png', 515 - series: [21, 22], 516 - stage: [1] 669 + name: "Sekibanki", 670 + img: "VAMLiJD.png", 671 + opts: { 672 + series: [21, 22], 673 + stage: [1] 674 + } 517 675 }, 518 676 { 519 - name: 'Imaizumi Kagerou', 520 - img: 'b5UMjD8.png', 521 - series: [21, 22], 522 - stage: [2] 677 + name: "Imaizumi Kagerou", 678 + img: "b5UMjD8.png", 679 + opts: { 680 + series: [21, 22], 681 + stage: [2] 682 + } 523 683 }, 524 684 { 525 - name: 'Tsukumo Benben', 526 - img: 'vWNeMaH.png', 527 - series: [21, 22], 528 - stage: [3, 6] 685 + name: "Tsukumo Benben", 686 + img: "vWNeMaH.png", 687 + opts: { 688 + series: [21, 22], 689 + stage: [3, 6] 690 + } 529 691 }, 530 692 { 531 - name: 'Tsukumo Yatsuhashi', 532 - img: 'EJFQHQN.png', 533 - series: [21, 22], 534 - stage: [3, 6] 693 + name: "Tsukumo Yatsuhashi", 694 + img: "EJFQHQN.png", 695 + opts: { 696 + series: [21, 22], 697 + stage: [3, 6] 698 + } 535 699 }, 536 700 { 537 - name: 'Kijin Seija', 538 - img: '16RUacj.png', 539 - series: [21, 22], 540 - stage: [4, 5] 701 + name: "Kijin Seija", 702 + img: "16RUacj.png", 703 + opts: { 704 + series: [21, 22], 705 + stage: [4, 5] 706 + } 541 707 }, 542 708 { 543 - name: 'Sukuna Shinmyoumaru', 544 - img: 'Zl2tN7W.png', 545 - series: [21, 22, 23, 25], 546 - stage: [5] 709 + name: "Sukuna Shinmyoumaru", 710 + img: "Zl2tN7W.png", 711 + opts: { 712 + series: [21, 22, 23, 25], 713 + stage: [5] 714 + } 547 715 }, 548 716 { 549 - name: 'Horikawa Raiko', 550 - img: 'SLLEccR.png', 551 - series: [21, 22, 25], 552 - stage: [6] 717 + name: "Horikawa Raiko", 718 + img: "SLLEccR.png", 719 + opts: { 720 + series: [21, 22, 25], 721 + stage: [6] 722 + } 553 723 }, 554 724 { 555 - name: 'Usami Sumireko', 556 - img: 'mc7ICW6.png', 557 - series: [23, 25], 558 - stage: [5] 725 + name: "Usami Sumireko", 726 + img: "mc7ICW6.png", 727 + opts: { 728 + series: [23, 25], 729 + stage: [5] 730 + } 559 731 }, 560 732 { 561 - name: 'Seiran', 562 - img: '0ra00WG.png', 563 - series: [24], 564 - stage: [0] 733 + name: "Seiran", 734 + img: "0ra00WG.png", 735 + opts: { 736 + series: [24], 737 + stage: [0] 738 + } 565 739 }, 566 740 { 567 - name: 'Ringo', 568 - img: 'xQOsFlZ.png', 569 - series: [24], 570 - stage: [1] 741 + name: "Ringo", 742 + img: "xQOsFlZ.png", 743 + opts: { 744 + series: [24], 745 + stage: [1] 746 + } 571 747 }, 572 748 { 573 - name: 'Doremy Sweet', 574 - img: 'rGS7dyn.png', 575 - series: [24, 25], 576 - stage: [2, 6] 749 + name: "Doremy Sweet", 750 + img: "rGS7dyn.png", 751 + opts: { 752 + series: [24, 25], 753 + stage: [2, 6] 754 + } 577 755 }, 578 756 { 579 - name: 'Kishin Sagume', 580 - img: 'HLT338X.png', 581 - series: [24], 582 - stage: [3] 757 + name: "Kishin Sagume", 758 + img: "HLT338X.png", 759 + opts: { 760 + series: [24], 761 + stage: [3] 762 + } 583 763 }, 584 764 { 585 - name: 'Clownpiece', 586 - img: '9Jje7ZQ.jpg', 587 - series: [24], 588 - stage: [4] 765 + name: "Clownpiece", 766 + img: "9Jje7ZQ.jpg", 767 + opts: { 768 + series: [24], 769 + stage: [4] 770 + } 589 771 }, 590 772 { 591 - name: 'Junko', 592 - img: 'NsfLZjY.jpg', 593 - series: [24], 594 - stage: [5, 6] 773 + name: "Junko", 774 + img: "NsfLZjY.jpg", 775 + opts: { 776 + series: [24], 777 + stage: [5, 6] 778 + } 595 779 }, 596 780 { 597 - name: 'Hecatia Lapislazuli', 598 - img: 'EH3Ulol.png', 599 - series: [24], 600 - stage: [6] 781 + name: "Hecatia Lapislazuli", 782 + img: "EH3Ulol.png", 783 + opts: { 784 + series: [24], 785 + stage: [6] 786 + } 601 787 }, 602 788 { 603 - name: 'Eternity Larva', 604 - img: 'ql5KxJH.png', 605 - series: [26], 606 - stage: [0] 789 + name: "Eternity Larva", 790 + img: "ql5KxJH.png", 791 + opts: { 792 + series: [26], 793 + stage: [0] 794 + } 607 795 }, 608 796 { 609 - name: 'Sakata Nemuno', 610 - img: 'gYFhJ3Y.png', 611 - series: [26], 612 - stage: [1] 797 + name: "Sakata Nemuno", 798 + img: "gYFhJ3Y.png", 799 + opts: { 800 + series: [26], 801 + stage: [1] 802 + } 613 803 }, 614 804 { 615 - name: 'Komano Aunn', 616 - img: 'wWUStkF.png', 617 - series: [26], 618 - stage: [2] 805 + name: "Komano Aunn", 806 + img: "wWUStkF.png", 807 + opts: { 808 + series: [26], 809 + stage: [2] 810 + } 619 811 }, 620 812 { 621 - name: 'Yatadera Narumi', 622 - img: 'wrPVhAo.png', 623 - series: [26], 624 - stage: [3] 813 + name: "Yatadera Narumi", 814 + img: "wrPVhAo.png", 815 + opts: { 816 + series: [26], 817 + stage: [3] 818 + } 625 819 }, 626 820 { 627 - name: 'Nishida Satono', 628 - img: '8w9gAy2.png', 629 - series: [26], 630 - stage: [4] 821 + name: "Nishida Satono", 822 + img: "8w9gAy2.png", 823 + opts: { 824 + series: [26], 825 + stage: [4] 826 + } 631 827 }, 632 828 { 633 - name: 'Teireida Mai', 634 - img: 'DesAqAC.png', 635 - series: [26], 636 - stage: [4] 829 + name: "Teireida Mai", 830 + img: "DesAqAC.png", 831 + opts: { 832 + series: [26], 833 + stage: [4] 834 + } 637 835 }, 638 836 { 639 - name: 'Matara Okina', 640 - img: 'icWvMyo.png', 641 - series: [26], 642 - stage: [5, 6] 837 + name: "Matara Okina", 838 + img: "icWvMyo.png", 839 + opts: { 840 + series: [26], 841 + stage: [5, 6] 842 + } 643 843 }, 644 844 { 645 - name: 'Yorigami Shion', 646 - img: 'LenxXR4.png', 647 - series: [25], 648 - stage: [5] 845 + name: "Yorigami Shion", 846 + img: "LenxXR4.png", 847 + opts: { 848 + series: [25], 849 + stage: [5] 850 + } 649 851 }, 650 852 { 651 - name: 'Yorigami Joon', 652 - img: '0aPaTm8.png', 653 - series: [25], 654 - stage: [5] 853 + name: "Yorigami Joon", 854 + img: "0aPaTm8.png", 855 + opts: { 856 + series: [25], 857 + stage: [5] 858 + } 655 859 }, 656 860 { 657 - name: 'Hieda no Akyuu', 658 - img: 'ogONuLZ.png', 659 - series: [0], 660 - stage: [] 861 + name: "Hieda no Akyuu", 862 + img: "ogONuLZ.png", 863 + opts: { 864 + series: [0], 865 + stage: [] 866 + } 661 867 }, 662 868 { 663 - name: 'Tokiko', 664 - img: 'Y4maOc8.png', 665 - series: [0], 666 - stage: [] 869 + name: "Tokiko", 870 + img: "Y4maOc8.png", 871 + opts: { 872 + series: [0], 873 + stage: [] 874 + } 667 875 }, 668 876 { 669 - name: 'Reisen (Manga)', 670 - img: 'cWjCo2j.png', 671 - series: [0], 672 - stage: [] 877 + name: "Reisen (Manga)", 878 + img: "cWjCo2j.png", 879 + opts: { 880 + series: [0], 881 + stage: [] 882 + } 673 883 }, 674 884 { 675 - name: 'Watatsuki no Toyohime', 676 - img: 'uEBxsEX.png', 677 - series: [0], 678 - stage: [] 885 + name: "Watatsuki no Toyohime", 886 + img: "uEBxsEX.png", 887 + opts: { 888 + series: [0], 889 + stage: [] 890 + } 679 891 }, 680 892 { 681 - name: 'Watatsuki no Yorihime', 682 - img: 'Txu2P7S.png', 683 - series: [0], 684 - stage: [] 893 + name: "Watatsuki no Yorihime", 894 + img: "Txu2P7S.png", 895 + opts: { 896 + series: [0], 897 + stage: [] 898 + } 685 899 }, 686 900 { 687 - name: 'Maribel Hearn', 688 - img: 'XUI9vPo.png', 689 - series: [0], 690 - stage: [] 901 + name: "Maribel Hearn", 902 + img: "XUI9vPo.png", 903 + opts: { 904 + series: [0], 905 + stage: [] 906 + } 691 907 }, 692 908 { 693 - name: 'Usami Renko', 694 - img: '1P5EXRt.png', 695 - series: [0], 696 - stage: [] 909 + name: "Usami Renko", 910 + img: "1P5EXRt.png", 911 + opts: { 912 + series: [0], 913 + stage: [] 914 + } 697 915 }, 698 916 { 699 - name: 'Ibaraki Kasen', 700 - img: 'dQHnPPe.png', 701 - series: [0, 23], 702 - stage: [4] 917 + name: "Ibaraki Kasen", 918 + img: "dQHnPPe.png", 919 + opts: { 920 + series: [0, 23], 921 + stage: [4] 922 + } 703 923 }, 704 924 { 705 - name: 'Motoori Kosuzu', 706 - img: 'jEsJJo8.png', 707 - series: [0], 708 - stage: [] 925 + name: "Motoori Kosuzu", 926 + img: "jEsJJo8.png", 927 + opts: { 928 + series: [0], 929 + stage: [] 930 + } 709 931 }, 710 932 { 711 - name: 'Hakurei Reimu (PC-98)', 712 - img: 'IZsGAMS.png', 713 - series: [1, 2, 3, 4, 5], 714 - stage: [3], 715 - pc98: true 933 + name: "Hakurei Reimu (PC-98)", 934 + img: "IZsGAMS.png", 935 + opts: { 936 + series: [1, 2, 3, 4, 5], 937 + stage: [3], 938 + pc98: true 939 + } 716 940 }, 717 941 { 718 - name: 'Shingyoku (Female)', 719 - img: 'KuPiR2k.png', 720 - series: [1], 721 - stage: [0] 942 + name: "Shingyoku (Female)", 943 + img: "KuPiR2k.png", 944 + opts: { 945 + series: [1], 946 + stage: [0] 947 + } 722 948 }, 723 949 { 724 - name: 'Mima', 725 - img: 'odH03t2.png', 726 - series: [1, 2, 3, 5], 727 - stage: [2, 4, 5] 950 + name: "Mima", 951 + img: "odH03t2.png", 952 + opts: { 953 + series: [1, 2, 3, 5], 954 + stage: [2, 4, 5] 955 + } 728 956 }, 729 957 { 730 - name: 'Elis', 731 - img: 'ytnL1xd.png', 732 - series: [1], 733 - stage: [4] 958 + name: "Elis", 959 + img: "ytnL1xd.png", 960 + opts: { 961 + series: [1], 962 + stage: [4] 963 + } 734 964 }, 735 965 { 736 - name: 'Kikuri', 737 - img: 'fX2Kqik.png', 738 - series: [1], 739 - stage: [4] 966 + name: "Kikuri", 967 + img: "fX2Kqik.png", 968 + opts: { 969 + series: [1], 970 + stage: [4] 971 + } 740 972 }, 741 973 { 742 - name: 'Sariel', 743 - img: 'Wyc7YFw.png', 744 - series: [1], 745 - stage: [5] 974 + name: "Sariel", 975 + img: "Wyc7YFw.png", 976 + opts: { 977 + series: [1], 978 + stage: [5] 979 + } 746 980 }, 747 981 { 748 - name: 'Konngara', 749 - img: 'dg9jLHv.png', 750 - series: [1], 751 - stage: [5] 982 + name: "Konngara", 983 + img: "dg9jLHv.png", 984 + opts: { 985 + series: [1], 986 + stage: [5] 987 + } 752 988 }, 753 989 { 754 - name: 'Rika', 755 - img: '02Xb4pU.png', 756 - series: [2], 757 - stage: [0, 6] 990 + name: "Rika", 991 + img: "02Xb4pU.png", 992 + opts: { 993 + series: [2], 994 + stage: [0, 6] 995 + } 758 996 }, 759 997 { 760 - name: 'Meira', 761 - img: 'p529JgT.png', 762 - series: [2], 763 - stage: [1] 998 + name: "Meira", 999 + img: "p529JgT.png", 1000 + opts: { 1001 + series: [2], 1002 + stage: [1] 1003 + } 764 1004 }, 765 1005 { 766 - name: 'Kirisame Marisa (PC-98)', 767 - img: 'wxE7cBm.png', 768 - series: [2, 3, 4, 5], 769 - stage: [3], 770 - pc98: true 1006 + name: "Kirisame Marisa (PC-98)", 1007 + img: "wxE7cBm.png", 1008 + opts: { 1009 + series: [2, 3, 4, 5], 1010 + stage: [3], 1011 + pc98: true 1012 + } 771 1013 }, 772 1014 { 773 - name: 'Ellen', 774 - img: '3iNNL0c.png', 775 - series: [3], 776 - stage: [] 1015 + name: "Ellen", 1016 + img: "3iNNL0c.png", 1017 + opts: { 1018 + series: [3], 1019 + stage: [] 1020 + } 777 1021 }, 778 1022 { 779 - name: 'Kotohime', 780 - img: 'kRSGtpq.png', 781 - series: [3], 782 - stage: [] 1023 + name: "Kotohime", 1024 + img: "kRSGtpq.png", 1025 + opts: { 1026 + series: [3], 1027 + stage: [] 1028 + } 783 1029 }, 784 1030 { 785 - name: 'Kana Anaberal', 786 - img: 'rBvKMk5.png', 787 - series: [3], 788 - stage: [] 1031 + name: "Kana Anaberal", 1032 + img: "rBvKMk5.png", 1033 + opts: { 1034 + series: [3], 1035 + stage: [] 1036 + } 789 1037 }, 790 1038 { 791 - name: 'Asakura Rikako', 792 - img: 'VIf5gUK.png', 793 - series: [3], 794 - stage: [] 1039 + name: "Asakura Rikako", 1040 + img: "VIf5gUK.png", 1041 + opts: { 1042 + series: [3], 1043 + stage: [] 1044 + } 795 1045 }, 796 1046 { 797 - name: 'Kitashirakawa Chiyuri', 798 - img: 'tZFBycy.png', 799 - series: [3], 800 - stage: [4] 1047 + name: "Kitashirakawa Chiyuri", 1048 + img: "tZFBycy.png", 1049 + opts: { 1050 + series: [3], 1051 + stage: [4] 1052 + } 801 1053 }, 802 1054 { 803 - name: 'Okazaki Yumemi', 804 - img: 'c9rnG3n.png', 805 - series: [3], 806 - stage: [5] 1055 + name: "Okazaki Yumemi", 1056 + img: "c9rnG3n.png", 1057 + opts: { 1058 + series: [3], 1059 + stage: [5] 1060 + } 807 1061 }, 808 1062 { 809 - name: 'Ruukoto', 810 - img: 'dko67SJ.png', 811 - series: [3], 812 - stage: [] 1063 + name: "Ruukoto", 1064 + img: "dko67SJ.png", 1065 + opts: { 1066 + series: [3], 1067 + stage: [] 1068 + } 813 1069 }, 814 1070 { 815 - name: 'Orange', 816 - img: 'm8wXE5U.png', 817 - series: [4], 818 - stage: [0] 1071 + name: "Orange", 1072 + img: "m8wXE5U.png", 1073 + opts: { 1074 + series: [4], 1075 + stage: [0] 1076 + } 819 1077 }, 820 1078 { 821 - name: 'Kurumi', 822 - img: '0rvq1ph.png', 823 - series: [4], 824 - stage: [1] 1079 + name: "Kurumi", 1080 + img: "0rvq1ph.png", 1081 + opts: { 1082 + series: [4], 1083 + stage: [1] 1084 + } 825 1085 }, 826 1086 { 827 - name: 'Elly', 828 - img: 'iIPftHn.png', 829 - series: [4], 830 - stage: [2] 1087 + name: "Elly", 1088 + img: "iIPftHn.png", 1089 + opts: { 1090 + series: [4], 1091 + stage: [2] 1092 + } 831 1093 }, 832 1094 { 833 - name: 'Yuuka (PC-98)', 834 - img: 'ivUSwxp.png', 835 - series: [4, 5], 836 - stage: [4, 5], 837 - pc98: true 1095 + name: "Yuuka (PC-98)", 1096 + img: "ivUSwxp.png", 1097 + opts: { 1098 + series: [4, 5], 1099 + stage: [4, 5], 1100 + pc98: true 1101 + } 838 1102 }, 839 1103 { 840 - name: 'Mugetsu', 841 - img: 'bYA9E16.png', 842 - series: [4], 843 - stage: [6] 1104 + name: "Mugetsu", 1105 + img: "bYA9E16.png", 1106 + opts: { 1107 + series: [4], 1108 + stage: [6] 1109 + } 844 1110 }, 845 1111 { 846 - name: 'Gengetsu', 847 - img: 'TIOTtV9.png', 848 - series: [4], 849 - stage: [6] 1112 + name: "Gengetsu", 1113 + img: "TIOTtV9.png", 1114 + opts: { 1115 + series: [4], 1116 + stage: [6] 1117 + } 850 1118 }, 851 1119 { 852 - name: 'Sara', 853 - img: '2QUbCrU.png', 854 - series: [5], 855 - stage: [0] 1120 + name: "Sara", 1121 + img: "2QUbCrU.png", 1122 + opts: { 1123 + series: [5], 1124 + stage: [0] 1125 + } 856 1126 }, 857 1127 { 858 - name: 'Louise', 859 - img: 'nDM5aB6.png', 860 - series: [5], 861 - stage: [1, 3] 1128 + name: "Louise", 1129 + img: "nDM5aB6.png", 1130 + opts: { 1131 + series: [5], 1132 + stage: [1, 3] 1133 + } 862 1134 }, 863 1135 { 864 - name: 'Alice (PC-98)', 865 - img: 'KaBuRTW.png', 866 - series: [5], 867 - stage: [2, 6], 868 - pc98: true 1136 + name: "Alice (PC-98)", 1137 + img: "KaBuRTW.png", 1138 + opts: { 1139 + series: [5], 1140 + stage: [2, 6], 1141 + pc98: true 1142 + } 869 1143 }, 870 1144 { 871 - name: 'Yuki', 872 - img: 'FfcmDgp.png', 873 - series: [5], 874 - stage: [3] 1145 + name: "Yuki", 1146 + img: "FfcmDgp.png", 1147 + opts: { 1148 + series: [5], 1149 + stage: [3] 1150 + } 875 1151 }, 876 1152 { 877 - name: 'Mai', 878 - img: 'r6w7TX1.png', 879 - series: [5], 880 - stage: [3] 1153 + name: "Mai", 1154 + img: "r6w7TX1.png", 1155 + opts: { 1156 + series: [5], 1157 + stage: [3] 1158 + } 881 1159 }, 882 1160 { 883 - name: 'Yumeko', 884 - img: 'PcPqkdO.png', 885 - series: [5], 886 - stage: [4] 1161 + name: "Yumeko", 1162 + img: "PcPqkdO.png", 1163 + opts: { 1164 + series: [5], 1165 + stage: [4] 1166 + } 887 1167 }, 888 1168 { 889 - name: 'Shinki', 890 - img: 'gPE95S7.png', 891 - series: [5], 892 - stage: [5] 1169 + name: "Shinki", 1170 + img: "gPE95S7.png", 1171 + opts: { 1172 + series: [5], 1173 + stage: [5] 1174 + } 893 1175 }, 894 1176 { 895 - name: 'Mimi-chan', 896 - img: 'zBl2zlv.png', 897 - series: [3], 898 - stage: [], 899 - notgirl: true 1177 + name: "Mimi-chan", 1178 + img: "zBl2zlv.png", 1179 + opts: { 1180 + series: [3], 1181 + stage: [], 1182 + notgirl: true 1183 + } 900 1184 }, 901 1185 { 902 - name: 'Unzan', 903 - img: 'r5eWREh.png', 904 - series: [15, 17, 20, 23, 25], 905 - stage: [2], 906 - notgirl: true 1186 + name: "Unzan", 1187 + img: "r5eWREh.png", 1188 + opts: { 1189 + series: [15, 17, 20, 23, 25], 1190 + stage: [2], 1191 + notgirl: true 1192 + } 907 1193 }, 908 1194 { 909 - name: 'Genji', 910 - img: 'LoUqOuH.png', 911 - series: [2, 3, 4, 5], 912 - stage: [], 913 - notgirl: true 1195 + name: "Genji", 1196 + img: "LoUqOuH.png", 1197 + opts: { 1198 + series: [2, 3, 4, 5], 1199 + stage: [], 1200 + notgirl: true 1201 + } 914 1202 }, 915 1203 { 916 - name: 'Shingyoku (Male)', 917 - img: 'a5uwlgN.png', 918 - series: [1], 919 - stage: [0], 920 - notgirl: true 1204 + name: "Shingyoku (Male)", 1205 + img: "a5uwlgN.png", 1206 + opts: { 1207 + series: [1], 1208 + stage: [0], 1209 + notgirl: true 1210 + } 921 1211 }, 922 1212 { 923 - name: 'YuugenMagan', 924 - img: 'IOW8GdU.png', 925 - series: [1], 926 - stage: [2], 927 - notgirl: true 1213 + name: "YuugenMagan", 1214 + img: "IOW8GdU.png", 1215 + opts: { 1216 + series: [1], 1217 + stage: [2], 1218 + notgirl: true 1219 + } 928 1220 }, 929 1221 { 930 - name: 'Evil Eye Sigma', 931 - img: 'rAFUMwE.png', 932 - series: [2], 933 - stage: [6], 934 - notgirl: true 1222 + name: "Evil Eye Sigma", 1223 + img: "rAFUMwE.png", 1224 + opts: { 1225 + series: [2], 1226 + stage: [6], 1227 + notgirl: true 1228 + } 935 1229 }, 936 1230 { 937 - name: 'Great Catfish', 938 - img: 'BgRi9Oh.png', 939 - series: [16, 25], 940 - stage: [5], 941 - notgirl: true 1231 + name: "Great Catfish", 1232 + img: "BgRi9Oh.png", 1233 + opts: { 1234 + series: [16, 25], 1235 + stage: [5], 1236 + notgirl: true 1237 + } 942 1238 }, 943 1239 { 944 - name: 'Morichika Rinnosuke', 945 - img: 'ITUhsGj.png', 946 - series: [0, 20], 947 - stage: [], 948 - notgirl: true 1240 + name: "Morichika Rinnosuke", 1241 + img: "ITUhsGj.png", 1242 + opts: { 1243 + series: [0, 20], 1244 + stage: [], 1245 + notgirl: true 1246 + } 949 1247 }, 950 1248 { 951 - name: 'Fortune Teller', 952 - img: 'BYot23O.png', 953 - series: [0], 954 - stage: [], 955 - notgirl: true 1249 + name: "Fortune Teller", 1250 + img: "BYot23O.png", 1251 + opts: { 1252 + series: [0], 1253 + stage: [], 1254 + notgirl: true 1255 + } 956 1256 }, 957 1257 { 958 - name: 'Hisoutensoku', 959 - img: 'P4JZ2it.png', 960 - series: [16], 961 - stage: [], 962 - notgirl: true 1258 + name: "Hisoutensoku", 1259 + img: "P4JZ2it.png", 1260 + opts: { 1261 + series: [16], 1262 + stage: [], 1263 + notgirl: true 1264 + } 963 1265 } 964 1266 ];
+6
src/main.js
··· 1 + /** 2 + * Initialize script. 3 + */ 1 4 function init() { 2 5 const optList = document.querySelector('.options'); 3 6 const optInsert = (name, id, tooltip = '', checked = true, disabled = false) => { ··· 7 10 return `<div class="large option"><label title="${tooltip}"><input id="cbgroup-${id}" type="checkbox" ${checked?'checked':''}> ${name}</label></div>`; 8 11 }; 9 12 13 + /** 14 + * Insert sorter options and set grouped option behavior. 15 + */ 10 16 options.forEach(opt => { 11 17 if ('sub' in opt) { 12 18 optList.insertAdjacentHTML('beforeend', optInsertLarge(opt.name, opt.key, opt.tooltip, opt.checked));