Best JavaScript code snippet using storybook-root
hunter.ts
Source:hunter.ts
1import { HunterTalents, HunterMajorGlyph, HunterMinorGlyph, HunterPetTalents } from '../proto/hunter.js';2import { GlyphsConfig } from './glyphs_picker.js';3import { TalentsConfig, newTalentsConfig } from './talents_picker.js';4export const hunterTalentsConfig: TalentsConfig<HunterTalents> = newTalentsConfig([5 {6 "name": "Beast Mastery",7 "backgroundUrl": "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/361.jpg",8 "talents": [9 {10 "fieldName": "improvedAspectOfTheHawk",11 "location": {12 "rowIdx": 0,13 "colIdx": 114 },15 "spellIds": [16 19552,17 19553,18 19554,19 19555,20 1955621 ],22 "maxPoints": 523 },24 {25 "fieldName": "enduranceTraining",26 "location": {27 "rowIdx": 0,28 "colIdx": 229 },30 "spellIds": [31 19583,32 19584,33 19585,34 19586,35 1958736 ],37 "maxPoints": 538 },39 {40 "fieldName": "focusedFire",41 "location": {42 "rowIdx": 1,43 "colIdx": 044 },45 "spellIds": [46 35029,47 3503048 ],49 "maxPoints": 250 },51 {52 "fieldName": "improvedAspectOfTheMonkey",53 "location": {54 "rowIdx": 1,55 "colIdx": 156 },57 "spellIds": [58 19549,59 19550,60 1955161 ],62 "maxPoints": 363 },64 {65 "fieldName": "thickHide",66 "location": {67 "rowIdx": 1,68 "colIdx": 269 },70 "spellIds": [71 19609,72 19610,73 1961274 ],75 "maxPoints": 376 },77 {78 "fieldName": "improvedRevivePet",79 "location": {80 "rowIdx": 1,81 "colIdx": 382 },83 "spellIds": [84 24443,85 1957586 ],87 "maxPoints": 288 },89 {90 "fieldName": "pathfinding",91 "location": {92 "rowIdx": 2,93 "colIdx": 094 },95 "spellIds": [96 19559,97 1956098 ],99 "maxPoints": 2100 },101 {102 "fieldName": "aspectMastery",103 "location": {104 "rowIdx": 2,105 "colIdx": 1106 },107 "spellIds": [108 53265109 ],110 "maxPoints": 1111 },112 {113 "fieldName": "unleashedFury",114 "location": {115 "rowIdx": 2,116 "colIdx": 2117 },118 "spellIds": [119 19616,120 19617,121 19618,122 19619,123 19620124 ],125 "maxPoints": 5126 },127 {128 "fieldName": "improvedMendPet",129 "location": {130 "rowIdx": 3,131 "colIdx": 1132 },133 "spellIds": [134 19572,135 19573136 ],137 "maxPoints": 2138 },139 {140 "fieldName": "ferocity",141 "location": {142 "rowIdx": 3,143 "colIdx": 2144 },145 "spellIds": [146 19598,147 19599,148 19600,149 19601,150 19602151 ],152 "maxPoints": 5153 },154 {155 "fieldName": "spiritBond",156 "location": {157 "rowIdx": 4,158 "colIdx": 0159 },160 "spellIds": [161 19578,162 20895163 ],164 "maxPoints": 2165 },166 {167 "fieldName": "intimidation",168 "location": {169 "rowIdx": 4,170 "colIdx": 1171 },172 "spellIds": [173 19577174 ],175 "maxPoints": 1176 },177 {178 "fieldName": "bestialDiscipline",179 "location": {180 "rowIdx": 4,181 "colIdx": 3182 },183 "spellIds": [184 19590,185 19592186 ],187 "maxPoints": 2188 },189 {190 "fieldName": "animalHandler",191 "location": {192 "rowIdx": 5,193 "colIdx": 0194 },195 "spellIds": [196 34453,197 34454198 ],199 "maxPoints": 2200 },201 {202 "fieldName": "frenzy",203 "location": {204 "rowIdx": 5,205 "colIdx": 2206 },207 "spellIds": [208 19621,209 19622,210 19623,211 19624,212 19625213 ],214 "maxPoints": 5,215 "prereqLocation": {216 "rowIdx": 3,217 "colIdx": 2218 }219 },220 {221 "fieldName": "ferociousInspiration",222 "location": {223 "rowIdx": 6,224 "colIdx": 0225 },226 "spellIds": [227 34455,228 34459,229 34460230 ],231 "maxPoints": 3232 },233 {234 "fieldName": "bestialWrath",235 "location": {236 "rowIdx": 6,237 "colIdx": 1238 },239 "spellIds": [240 19574241 ],242 "maxPoints": 1,243 "prereqLocation": {244 "rowIdx": 4,245 "colIdx": 1246 }247 },248 {249 "fieldName": "catlikeReflexes",250 "location": {251 "rowIdx": 6,252 "colIdx": 2253 },254 "spellIds": [255 34462,256 34464,257 34465258 ],259 "maxPoints": 3260 },261 {262 "fieldName": "invigoration",263 "location": {264 "rowIdx": 7,265 "colIdx": 0266 },267 "spellIds": [268 53252,269 53253270 ],271 "maxPoints": 2,272 "prereqLocation": {273 "rowIdx": 6,274 "colIdx": 0275 }276 },277 {278 "fieldName": "serpentsSwiftness",279 "location": {280 "rowIdx": 7,281 "colIdx": 2282 },283 "spellIds": [284 34466,285 34467,286 34468,287 34469,288 34470289 ],290 "maxPoints": 5291 },292 {293 "fieldName": "longevity",294 "location": {295 "rowIdx": 8,296 "colIdx": 0297 },298 "spellIds": [299 53262,300 53263,301 53264302 ],303 "maxPoints": 3304 },305 {306 "fieldName": "theBeastWithin",307 "location": {308 "rowIdx": 8,309 "colIdx": 1310 },311 "spellIds": [312 34692313 ],314 "maxPoints": 1,315 "prereqLocation": {316 "rowIdx": 6,317 "colIdx": 1318 }319 },320 {321 "fieldName": "cobraStrikes",322 "location": {323 "rowIdx": 8,324 "colIdx": 2325 },326 "spellIds": [327 53256,328 53259,329 53260330 ],331 "maxPoints": 3,332 "prereqLocation": {333 "rowIdx": 7,334 "colIdx": 2335 }336 },337 {338 "fieldName": "kindredSpirits",339 "location": {340 "rowIdx": 9,341 "colIdx": 1342 },343 "spellIds": [344 56314,345 56315,346 56316,347 56317,348 56318349 ],350 "maxPoints": 5351 },352 {353 "fieldName": "beastMastery",354 "location": {355 "rowIdx": 10,356 "colIdx": 1357 },358 "spellIds": [359 53270360 ],361 "maxPoints": 1362 }363 ]364 },365 {366 "name": "Marksmanship",367 "backgroundUrl": "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/363.jpg",368 "talents": [369 {370 "fieldName": "improvedConcussiveShot",371 "location": {372 "rowIdx": 0,373 "colIdx": 0374 },375 "spellIds": [376 19407,377 19412378 ],379 "maxPoints": 2380 },381 {382 "fieldName": "focusedAim",383 "location": {384 "rowIdx": 0,385 "colIdx": 1386 },387 "spellIds": [388 53620,389 53621,390 53622391 ],392 "maxPoints": 3393 },394 {395 "fieldName": "lethalShots",396 "location": {397 "rowIdx": 0,398 "colIdx": 2399 },400 "spellIds": [401 19426,402 19427,403 19429,404 19430,405 19431406 ],407 "maxPoints": 5408 },409 {410 "fieldName": "carefulAim",411 "location": {412 "rowIdx": 1,413 "colIdx": 0414 },415 "spellIds": [416 34482,417 34483,418 34484419 ],420 "maxPoints": 3421 },422 {423 "fieldName": "improvedHuntersMark",424 "location": {425 "rowIdx": 1,426 "colIdx": 1427 },428 "spellIds": [429 19421,430 19422,431 19423432 ],433 "maxPoints": 3434 },435 {436 "fieldName": "mortalShots",437 "location": {438 "rowIdx": 1,439 "colIdx": 2440 },441 "spellIds": [442 19485,443 19487,444 19488,445 19489,446 19490447 ],448 "maxPoints": 5449 },450 {451 "fieldName": "goForTheThroat",452 "location": {453 "rowIdx": 2,454 "colIdx": 0455 },456 "spellIds": [457 34950,458 34954459 ],460 "maxPoints": 2461 },462 {463 "fieldName": "improvedArcaneShot",464 "location": {465 "rowIdx": 2,466 "colIdx": 1467 },468 "spellIds": [469 19454,470 19455,471 19456472 ],473 "maxPoints": 3474 },475 {476 "fieldName": "aimedShot",477 "location": {478 "rowIdx": 2,479 "colIdx": 2480 },481 "spellIds": [482 19434483 ],484 "maxPoints": 1,485 "prereqLocation": {486 "rowIdx": 1,487 "colIdx": 2488 }489 },490 {491 "fieldName": "rapidKilling",492 "location": {493 "rowIdx": 2,494 "colIdx": 3495 },496 "spellIds": [497 34948,498 34949499 ],500 "maxPoints": 2501 },502 {503 "fieldName": "improvedStings",504 "location": {505 "rowIdx": 3,506 "colIdx": 1507 },508 "spellIds": [509 19464,510 19465,511 19466512 ],513 "maxPoints": 3514 },515 {516 "fieldName": "efficiency",517 "location": {518 "rowIdx": 3,519 "colIdx": 2520 },521 "spellIds": [522 19416,523 19417,524 19418,525 19419,526 19420527 ],528 "maxPoints": 5529 },530 {531 "fieldName": "concussiveBarrage",532 "location": {533 "rowIdx": 4,534 "colIdx": 0535 },536 "spellIds": [537 35100,538 35102539 ],540 "maxPoints": 2541 },542 {543 "fieldName": "readiness",544 "location": {545 "rowIdx": 4,546 "colIdx": 1547 },548 "spellIds": [549 23989550 ],551 "maxPoints": 1552 },553 {554 "fieldName": "barrage",555 "location": {556 "rowIdx": 4,557 "colIdx": 2558 },559 "spellIds": [560 19461,561 19462,562 24691563 ],564 "maxPoints": 3565 },566 {567 "fieldName": "combatExperience",568 "location": {569 "rowIdx": 5,570 "colIdx": 0571 },572 "spellIds": [573 34475,574 34476575 ],576 "maxPoints": 2577 },578 {579 "fieldName": "rangedWeaponSpecialization",580 "location": {581 "rowIdx": 5,582 "colIdx": 3583 },584 "spellIds": [585 19507,586 19508,587 19509588 ],589 "maxPoints": 3590 },591 {592 "fieldName": "piercingShots",593 "location": {594 "rowIdx": 6,595 "colIdx": 0596 },597 "spellIds": [598 53234,599 53237,600 53238601 ],602 "maxPoints": 3603 },604 {605 "fieldName": "trueshotAura",606 "location": {607 "rowIdx": 6,608 "colIdx": 1609 },610 "spellIds": [611 19506612 ],613 "maxPoints": 1,614 "prereqLocation": {615 "rowIdx": 4,616 "colIdx": 1617 }618 },619 {620 "fieldName": "improvedBarrage",621 "location": {622 "rowIdx": 6,623 "colIdx": 2624 },625 "spellIds": [626 35104,627 35110,628 35111629 ],630 "maxPoints": 3,631 "prereqLocation": {632 "rowIdx": 4,633 "colIdx": 2634 }635 },636 {637 "fieldName": "masterMarksman",638 "location": {639 "rowIdx": 7,640 "colIdx": 1641 },642 "spellIds": [643 34485,644 34486,645 34487,646 34488,647 34489648 ],649 "maxPoints": 5650 },651 {652 "fieldName": "rapidRecuperation",653 "location": {654 "rowIdx": 7,655 "colIdx": 2656 },657 "spellIds": [658 53228,659 53232660 ],661 "maxPoints": 2662 },663 {664 "fieldName": "wildQuiver",665 "location": {666 "rowIdx": 8,667 "colIdx": 0668 },669 "spellIds": [670 53215,671 53216,672 53217673 ],674 "maxPoints": 3675 },676 {677 "fieldName": "silencingShot",678 "location": {679 "rowIdx": 8,680 "colIdx": 1681 },682 "spellIds": [683 34490684 ],685 "maxPoints": 1,686 "prereqLocation": {687 "rowIdx": 7,688 "colIdx": 1689 }690 },691 {692 "fieldName": "improvedSteadyShot",693 "location": {694 "rowIdx": 8,695 "colIdx": 2696 },697 "spellIds": [698 53221,699 53222,700 53224701 ],702 "maxPoints": 3703 },704 {705 "fieldName": "markedForDeath",706 "location": {707 "rowIdx": 9,708 "colIdx": 1709 },710 "spellIds": [711 53241,712 53243,713 53244,714 53245,715 53246716 ],717 "maxPoints": 5718 },719 {720 "fieldName": "chimeraShot",721 "location": {722 "rowIdx": 10,723 "colIdx": 1724 },725 "spellIds": [726 53209727 ],728 "maxPoints": 1729 }730 ]731 },732 {733 "name": "Survival",734 "backgroundUrl": "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/362.jpg",735 "talents": [736 {737 "fieldName": "improvedTracking",738 "location": {739 "rowIdx": 0,740 "colIdx": 0741 },742 "spellIds": [743 52783,744 52785,745 52786,746 52787,747 52788748 ],749 "maxPoints": 5750 },751 {752 "fieldName": "hawkEye",753 "location": {754 "rowIdx": 0,755 "colIdx": 1756 },757 "spellIds": [758 19498,759 19499,760 19500761 ],762 "maxPoints": 3763 },764 {765 "fieldName": "savageStrikes",766 "location": {767 "rowIdx": 0,768 "colIdx": 2769 },770 "spellIds": [771 19159,772 19160773 ],774 "maxPoints": 2775 },776 {777 "fieldName": "surefooted",778 "location": {779 "rowIdx": 1,780 "colIdx": 0781 },782 "spellIds": [783 19290,784 19294,785 24283786 ],787 "maxPoints": 3788 },789 {790 "fieldName": "entrapment",791 "location": {792 "rowIdx": 1,793 "colIdx": 1794 },795 "spellIds": [796 19184,797 19387,798 19388799 ],800 "maxPoints": 3801 },802 {803 "fieldName": "trapMastery",804 "location": {805 "rowIdx": 1,806 "colIdx": 2807 },808 "spellIds": [809 19376,810 63457,811 63458812 ],813 "maxPoints": 3814 },815 {816 "fieldName": "survivalInstincts",817 "location": {818 "rowIdx": 1,819 "colIdx": 3820 },821 "spellIds": [822 34494,823 34496824 ],825 "maxPoints": 2826 },827 {828 "fieldName": "survivalist",829 "location": {830 "rowIdx": 2,831 "colIdx": 0832 },833 "spellIds": [834 19255,835 19256,836 19257,837 19258,838 19259839 ],840 "maxPoints": 5841 },842 {843 "fieldName": "scatterShot",844 "location": {845 "rowIdx": 2,846 "colIdx": 1847 },848 "spellIds": [849 19503850 ],851 "maxPoints": 1852 },853 {854 "fieldName": "deflection",855 "location": {856 "rowIdx": 2,857 "colIdx": 2858 },859 "spellIds": [860 19295,861 19297,862 19298863 ],864 "maxPoints": 3865 },866 {867 "fieldName": "survivalTactics",868 "location": {869 "rowIdx": 2,870 "colIdx": 3871 },872 "spellIds": [873 19286,874 19287875 ],876 "maxPoints": 2877 },878 {879 "fieldName": "tNT",880 "location": {881 "rowIdx": 3,882 "colIdx": 1883 },884 "spellIds": [885 56333,886 56336,887 56337888 ],889 "maxPoints": 3890 },891 {892 "fieldName": "lockAndLoad",893 "location": {894 "rowIdx": 3,895 "colIdx": 3896 },897 "spellIds": [898 56342,899 56343,900 56344901 ],902 "maxPoints": 3903 },904 {905 "fieldName": "hunterVsWild",906 "location": {907 "rowIdx": 4,908 "colIdx": 0909 },910 "spellIds": [911 56339,912 56340,913 56341914 ],915 "maxPoints": 3,916 "prereqLocation": {917 "rowIdx": 2,918 "colIdx": 0919 }920 },921 {922 "fieldName": "killerInstinct",923 "location": {924 "rowIdx": 4,925 "colIdx": 1926 },927 "spellIds": [928 19370,929 19371,930 19373931 ],932 "maxPoints": 3933 },934 {935 "fieldName": "counterattack",936 "location": {937 "rowIdx": 4,938 "colIdx": 2939 },940 "spellIds": [941 19306942 ],943 "maxPoints": 1,944 "prereqLocation": {945 "rowIdx": 2,946 "colIdx": 2947 }948 },949 {950 "fieldName": "lightningReflexes",951 "location": {952 "rowIdx": 5,953 "colIdx": 0954 },955 "spellIds": [956 19168,957 19180,958 19181,959 24296,960 24297961 ],962 "maxPoints": 5963 },964 {965 "fieldName": "resourcefulness",966 "location": {967 "rowIdx": 5,968 "colIdx": 2969 },970 "spellIds": [971 34491,972 34492,973 34493974 ],975 "maxPoints": 3976 },977 {978 "fieldName": "exposeWeakness",979 "location": {980 "rowIdx": 6,981 "colIdx": 0982 },983 "spellIds": [984 34500,985 34502,986 34503987 ],988 "maxPoints": 3,989 "prereqLocation": {990 "rowIdx": 5,991 "colIdx": 0992 }993 },994 {995 "fieldName": "wyvernSting",996 "location": {997 "rowIdx": 6,998 "colIdx": 1999 },1000 "spellIds": [1001 193861002 ],1003 "maxPoints": 1,1004 "prereqLocation": {1005 "rowIdx": 4,1006 "colIdx": 11007 }1008 },1009 {1010 "fieldName": "thrillOfTheHunt",1011 "location": {1012 "rowIdx": 6,1013 "colIdx": 21014 },1015 "spellIds": [1016 34497,1017 34498,1018 344991019 ],1020 "maxPoints": 31021 },1022 {1023 "fieldName": "masterTactician",1024 "location": {1025 "rowIdx": 7,1026 "colIdx": 01027 },1028 "spellIds": [1029 34506,1030 34507,1031 34508,1032 34838,1033 348391034 ],1035 "maxPoints": 51036 },1037 {1038 "fieldName": "noxiousStings",1039 "location": {1040 "rowIdx": 7,1041 "colIdx": 11042 },1043 "spellIds": [1044 53295,1045 53296,1046 532971047 ],1048 "maxPoints": 3,1049 "prereqLocation": {1050 "rowIdx": 6,1051 "colIdx": 11052 }1053 },1054 {1055 "fieldName": "pointOfNoEscape",1056 "location": {1057 "rowIdx": 8,1058 "colIdx": 01059 },1060 "spellIds": [1061 53298,1062 532991063 ],1064 "maxPoints": 21065 },1066 {1067 "fieldName": "blackArrow",1068 "location": {1069 "rowIdx": 8,1070 "colIdx": 11071 },1072 "spellIds": [1073 36741074 ],1075 "maxPoints": 11076 },1077 {1078 "fieldName": "sniperTraining",1079 "location": {1080 "rowIdx": 8,1081 "colIdx": 31082 },1083 "spellIds": [1084 53302,1085 53303,1086 533041087 ],1088 "maxPoints": 31089 },1090 {1091 "fieldName": "huntingParty",1092 "location": {1093 "rowIdx": 9,1094 "colIdx": 21095 },1096 "spellIds": [1097 53290,1098 53291,1099 532921100 ],1101 "maxPoints": 3,1102 "prereqLocation": {1103 "rowIdx": 6,1104 "colIdx": 21105 }1106 },1107 {1108 "fieldName": "explosiveShot",1109 "location": {1110 "rowIdx": 10,1111 "colIdx": 11112 },1113 "spellIds": [1114 533011115 ],1116 "maxPoints": 1,1117 "prereqLocation": {1118 "rowIdx": 8,1119 "colIdx": 11120 }1121 }1122 ]1123 }1124]);1125export const hunterGlyphsConfig: GlyphsConfig = {1126 majorGlyphs: {1127 [HunterMajorGlyph.GlyphOfAimedShot]: {1128 name: 'Glyph of Aimed Shot',1129 description: 'Reduces the cooldown of your Aimed Shot ability by 2 sec.',1130 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/inv_spear_07.jpg',1131 },1132 [HunterMajorGlyph.GlyphOfArcaneShot]: {1133 name: 'Glyph of Arcane Shot',1134 description: 'Your Arcane Shot refunds 20% of its mana cost if the target has one of your Stings active on it.',1135 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_impalingbolt.jpg',1136 },1137 [HunterMajorGlyph.GlyphOfAspectOfTheViper]: {1138 name: 'Glyph of Aspect of the Viper',1139 description: 'Increases the amount of mana gained from attacks while Aspect of the Viper is active by 10%.',1140 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_aspectoftheviper.jpg',1141 },1142 [HunterMajorGlyph.GlyphOfBestialWrath]: {1143 name: 'Glyph of Bestial Wrath',1144 description: 'Decreases the cooldown of Bestial Wrath by 20 sec.',1145 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_ferociousbite.jpg',1146 },1147 [HunterMajorGlyph.GlyphOfChimeraShot]: {1148 name: 'Glyph of Chimera Shot',1149 description: 'Reduces the cooldown of Chimera Shot by 1 sec.',1150 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_chimerashot2.jpg',1151 },1152 [HunterMajorGlyph.GlyphOfDeterrence]: {1153 name: 'Glyph of Deterrence',1154 description: 'Decreases the cooldown of Deterrence by 10 sec.',1155 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_whirlwind.jpg',1156 },1157 [HunterMajorGlyph.GlyphOfDisengage]: {1158 name: 'Glyph of Disengage',1159 description: 'Decreases the cooldown of Disengage by 5 sec.',1160 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_rogue_feint.jpg',1161 },1162 [HunterMajorGlyph.GlyphOfExplosiveShot]: {1163 name: 'Glyph of Explosive Shot',1164 description: 'Increases the critical strike chance of Explosive Shot by 4%.',1165 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_explosiveshot.jpg',1166 },1167 [HunterMajorGlyph.GlyphOfExplosiveTrap]: {1168 name: 'Glyph of Explosive Trap',1169 description: 'The periodic damage from your Explosive Trap can now be critical strikes.',1170 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_fire_selfdestruct.jpg',1171 },1172 [HunterMajorGlyph.GlyphOfFreezingTrap]: {1173 name: 'Glyph of Freezing Trap',1174 description: 'When your Freezing Trap breaks, the victim\'s movement speed is reduced by 30% for 4 sec.',1175 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_frost_chainsofice.jpg',1176 },1177 [HunterMajorGlyph.GlyphOfFrostTrap]: {1178 name: 'Glyph of Frost Trap',1179 description: 'Increases the radius of the effect from your Frost Trap by 2 yards.',1180 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_frost_freezingbreath.jpg',1181 },1182 [HunterMajorGlyph.GlyphOfHuntersMark]: {1183 name: 'Glyph of Hunter\'s Mark',1184 description: 'Increases the attack power bonus of your Hunter\'s Mark by 20%.',1185 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_snipershot.jpg',1186 },1187 [HunterMajorGlyph.GlyphOfImmolationTrap]: {1188 name: 'Glyph of Immolation Trap',1189 description: 'Decreases the duration of the effect from your Immolation Trap by 6 sec., but damage while active is increased by 100%.',1190 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_fire_flameshock.jpg',1191 },1192 [HunterMajorGlyph.GlyphOfKillShot]: {1193 name: 'Glyph of Kill Shot',1194 description: 'Reduces the cooldown of Kill Shot by 6 sec.',1195 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_assassinate2.jpg',1196 },1197 [HunterMajorGlyph.GlyphOfMending]: {1198 name: 'Glyph of Mending',1199 description: 'Increases the healing done by your Mend Pet ability by 40%.',1200 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_mendpet.jpg',1201 },1202 [HunterMajorGlyph.GlyphOfMultiShot]: {1203 name: 'Glyph of Multi-Shot',1204 description: 'Decreases the cooldown of Multi-Shot by 1 sec.',1205 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_upgrademoonglaive.jpg',1206 },1207 [HunterMajorGlyph.GlyphOfRapidFire]: {1208 name: 'Glyph of Rapid Fire',1209 description: 'Increases the haste from Rapid Fire by an additional 8%.',1210 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_runningshot.jpg',1211 },1212 [HunterMajorGlyph.GlyphOfRaptorStrike]: {1213 name: 'Glyph of Raptor Strike',1214 description: 'Reduces damage taken by 20% for 3 sec after using Raptor Strike.',1215 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_meleedamage.jpg',1216 },1217 [HunterMajorGlyph.GlyphOfScatterShot]: {1218 name: 'Glyph of Scatter Shot',1219 description: 'Increases the range of Scatter Shot by 3 yards.',1220 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_golemstormbolt.jpg',1221 },1222 [HunterMajorGlyph.GlyphOfSerpentSting]: {1223 name: 'Glyph of Serpent Sting',1224 description: 'Increases the duration of your Serpent Sting by 6 sec.',1225 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_quickshot.jpg',1226 },1227 [HunterMajorGlyph.GlyphOfSnakeTrap]: {1228 name: 'Glyph of Snake Trap',1229 description: 'Snakes from your Snake Trap take 90% reduced damage from area of effect spells.',1230 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_snaketrap.jpg',1231 },1232 [HunterMajorGlyph.GlyphOfSteadyShot]: {1233 name: 'Glyph of Steady Shot',1234 description: 'Increases the damage dealt by Steady Shot by 10% when your target is afflicted with Serpent Sting.',1235 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_steadyshot.jpg',1236 },1237 [HunterMajorGlyph.GlyphOfTheBeast]: {1238 name: 'Glyph of the Beast',1239 description: 'Increases the attack power bonus of Aspect of the Beast for you and your pet by an additional 2%.',1240 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_mount_pinktiger.jpg',1241 },1242 [HunterMajorGlyph.GlyphOfTheHawk]: {1243 name: 'Glyph of the Hawk',1244 description: 'Increases the haste bonus of the Improved Aspect of the Hawk effect by an additional 6%.',1245 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_ravenform.jpg',1246 },1247 [HunterMajorGlyph.GlyphOfTrueshotAura]: {1248 name: 'Glyph of Trueshot Aura',1249 description: 'While your Trueshot Aura is active, you have 10% increased critical strike chance on your Aimed Shot.',1250 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_trueshot.jpg',1251 },1252 [HunterMajorGlyph.GlyphOfVolley]: {1253 name: 'Glyph of Volley',1254 description: 'Decreases the mana cost of Volley by 20%.',1255 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_marksmanship.jpg',1256 },1257 [HunterMajorGlyph.GlyphOfWyvernSting]: {1258 name: 'Glyph of Wyvern Sting',1259 description: 'Decreases the cooldown of your Wyvern Sting by 6 sec.',1260 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/inv_spear_02.jpg',1261 },1262 },1263 minorGlyphs: {1264 [HunterMinorGlyph.GlyphOfFeignDeath]: {1265 name: 'Glyph of Feign Death',1266 description: 'Reduces the cooldown of your Feign Death spell by 5 sec.',1267 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_rogue_feigndeath.jpg',1268 },1269 [HunterMinorGlyph.GlyphOfMendPet]: {1270 name: 'Glyph of Mend Pet',1271 description: 'Your Mend Pet spell increases your pet\'s happiness slightly.',1272 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_mendpet.jpg',1273 },1274 [HunterMinorGlyph.GlyphOfPossessedStrength]: {1275 name: 'Glyph of Possessed Strength',1276 description: 'Increases the damage your pet inflicts while using Eyes of the Beast by 50%.',1277 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_eyeoftheowl.jpg',1278 },1279 [HunterMinorGlyph.GlyphOfRevivePet]: {1280 name: 'Glyph of Revive Pet',1281 description: 'Reduces the pushback suffered from damaging attacks while casting Revive Pet by 100%.',1282 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_hunter_beastsoothe.jpg',1283 },1284 [HunterMinorGlyph.GlyphOfScareBeast]: {1285 name: 'Glyph of Scare Beast',1286 description: 'Reduces the pushback suffered from damaging attacks while casting Scare Beast by 75%.',1287 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_cower.jpg',1288 },1289 [HunterMinorGlyph.GlyphOfThePack]: {1290 name: 'Glyph of the Pack',1291 description: 'Increases the range of your Aspect of the Pack ability by 15 yards.',1292 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_mount_jungletiger.jpg',1293 },1294 },...
druid.ts
Source:druid.ts
1import { DruidTalents, DruidMajorGlyph, DruidMinorGlyph } from '../proto/druid.js';2import { GlyphsConfig, } from './glyphs_picker.js';3import { TalentsConfig, newTalentsConfig } from './talents_picker.js';4export const druidTalentsConfig: TalentsConfig<DruidTalents> = newTalentsConfig([5 {6 "name": "Balance",7 "backgroundUrl": "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/283.jpg",8 "talents": [9 {10 "fieldName": "starlightWrath",11 "location": {12 "rowIdx": 0,13 "colIdx": 114 },15 "spellIds": [16 16814,17 16815,18 16816,19 16817,20 1681821 ],22 "maxPoints": 523 },24 {25 "fieldName": "genesis",26 "location": {27 "rowIdx": 0,28 "colIdx": 229 },30 "spellIds": [31 57810,32 57811,33 57812,34 57813,35 5781436 ],37 "maxPoints": 538 },39 {40 "fieldName": "moonglow",41 "location": {42 "rowIdx": 1,43 "colIdx": 044 },45 "spellIds": [46 16845,47 16846,48 1684749 ],50 "maxPoints": 351 },52 {53 "fieldName": "naturesMajesty",54 "location": {55 "rowIdx": 1,56 "colIdx": 157 },58 "spellIds": [59 35363,60 3536461 ],62 "maxPoints": 2,63 },64 {65 "fieldName": "improvedMoonfire",66 "location": {67 "rowIdx": 1,68 "colIdx": 369 },70 "spellIds": [71 16821,72 1682273 ],74 "maxPoints": 275 },76 {77 "fieldName": "brambles",78 "location": {79 "rowIdx": 2,80 "colIdx": 081 },82 "spellIds": [83 16836,84 16839,85 1684086 ],87 "maxPoints": 388 },89 {90 "fieldName": "naturesGrace",91 "location": {92 "rowIdx": 2,93 "colIdx": 194 },95 "spellIds": [96 16880,97 61345,98 6134699 ],100 "maxPoints": 3,101 "prereqLocation": {102 "rowIdx": 1,103 "colIdx": 1104 }105 },106 {107 "fieldName": "naturesSplendor",108 "location": {109 "rowIdx": 2,110 "colIdx": 2111 },112 "spellIds": [113 57865114 ],115 "maxPoints": 1116 },117 {118 "fieldName": "naturesReach",119 "location": {120 "rowIdx": 2,121 "colIdx": 3122 },123 "spellIds": [124 16819,125 16820126 ],127 "maxPoints": 2128 },129 {130 "fieldName": "vengeance",131 "location": {132 "rowIdx": 3,133 "colIdx": 1134 },135 "spellIds": [136 16909,137 16910,138 16911,139 16912,140 16913141 ],142 "maxPoints": 5143 },144 {145 "fieldName": "celestialFocus",146 "location": {147 "rowIdx": 3,148 "colIdx": 2149 },150 "spellIds": [151 16850,152 16923,153 16924154 ],155 "maxPoints": 3156 },157 {158 "fieldName": "lunarGuidance",159 "location": {160 "rowIdx": 4,161 "colIdx": 0162 },163 "spellIds": [164 33589,165 33590,166 33591167 ],168 "maxPoints": 3169 },170 {171 "fieldName": "insectSwarm",172 "location": {173 "rowIdx": 4,174 "colIdx": 1175 },176 "spellIds": [177 5570178 ],179 "maxPoints": 1180 },181 {182 "fieldName": "improvedInsectSwarm",183 "location": {184 "rowIdx": 4,185 "colIdx": 2186 },187 "spellIds": [188 57849,189 57850,190 57851191 ],192 "maxPoints": 3,193 "prereqLocation": {194 "rowIdx": 4,195 "colIdx": 1196 }197 },198 {199 "fieldName": "dreamstate",200 "location": {201 "rowIdx": 5,202 "colIdx": 0203 },204 "spellIds": [205 33597,206 33599,207 33956208 ],209 "maxPoints": 3210 },211 {212 "fieldName": "moonfury",213 "location": {214 "rowIdx": 5,215 "colIdx": 1216 },217 "spellIds": [218 16896,219 16897,220 16899221 ],222 "maxPoints": 3223 },224 {225 "fieldName": "balanceOfPower",226 "location": {227 "rowIdx": 5,228 "colIdx": 2229 },230 "spellIds": [231 33592,232 33596233 ],234 "maxPoints": 2235 },236 {237 "fieldName": "moonkinForm",238 "location": {239 "rowIdx": 6,240 "colIdx": 1241 },242 "spellIds": [243 24858244 ],245 "maxPoints": 1,246 },247 {248 "fieldName": "improvedMoonkinForm",249 "location": {250 "rowIdx": 6,251 "colIdx": 2252 },253 "spellIds": [254 48384,255 48395,256 48396257 ],258 "maxPoints": 3,259 "prereqLocation": {260 "rowIdx": 6,261 "colIdx": 1262 }263 },264 {265 "fieldName": "improvedFaerieFire",266 "location": {267 "rowIdx": 6,268 "colIdx": 3269 },270 "spellIds": [271 33600,272 33601,273 33602274 ],275 "maxPoints": 3276 },277 {278 "fieldName": "owlkinFrenzy",279 "location": {280 "rowIdx": 7,281 "colIdx": 0282 },283 "spellIds": [284 48389,285 48392,286 48393287 ],288 "maxPoints": 3289 },290 {291 "fieldName": "wrathOfCenarius",292 "location": {293 "rowIdx": 7,294 "colIdx": 2295 },296 "spellIds": [297 33603,298 33604,299 33605,300 33606,301 33607302 ],303 "maxPoints": 5304 },305 {306 "fieldName": "eclipse",307 "location": {308 "rowIdx": 8,309 "colIdx": 0310 },311 "spellIds": [312 48516,313 48521,314 48525315 ],316 "maxPoints": 3317 },318 {319 "fieldName": "typhoon",320 "location": {321 "rowIdx": 8,322 "colIdx": 1323 },324 "spellIds": [325 50516326 ],327 "maxPoints": 1,328 "prereqLocation": {329 "rowIdx": 6,330 "colIdx": 1331 }332 },333 {334 "fieldName": "forceOfNature",335 "location": {336 "rowIdx": 8,337 "colIdx": 2338 },339 "spellIds": [340 33831341 ],342 "maxPoints": 1343 },344 {345 "fieldName": "galeWinds",346 "location": {347 "rowIdx": 8,348 "colIdx": 3349 },350 "spellIds": [351 48488,352 48514353 ],354 "maxPoints": 2355 },356 {357 "fieldName": "earthAndMoon",358 "location": {359 "rowIdx": 9,360 "colIdx": 1361 },362 "spellIds": [363 48506,364 48510,365 48511366 ],367 "maxPoints": 3368 },369 {370 "fieldName": "starfall",371 "location": {372 "rowIdx": 10,373 "colIdx": 1374 },375 "spellIds": [376 48505377 ],378 "maxPoints": 1379 }380 ]381 },382 {383 "name": "Feral Combat",384 "backgroundUrl": "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/281.jpg",385 "talents": [386 {387 "fieldName": "ferocity",388 "location": {389 "rowIdx": 0,390 "colIdx": 1391 },392 "spellIds": [393 16934,394 16935,395 16936,396 16937,397 16938398 ],399 "maxPoints": 5400 },401 {402 "fieldName": "feralAggression",403 "location": {404 "rowIdx": 0,405 "colIdx": 2406 },407 "spellIds": [408 16858,409 16859,410 16860,411 16861,412 16862413 ],414 "maxPoints": 5415 },416 {417 "fieldName": "feralInstinct",418 "location": {419 "rowIdx": 1,420 "colIdx": 0421 },422 "spellIds": [423 16947,424 16948,425 16949426 ],427 "maxPoints": 3428 },429 {430 "fieldName": "savageFury",431 "location": {432 "rowIdx": 1,433 "colIdx": 1434 },435 "spellIds": [436 16998,437 16999438 ],439 "maxPoints": 2440 },441 {442 "fieldName": "thickHide",443 "location": {444 "rowIdx": 1,445 "colIdx": 2446 },447 "spellIds": [448 16929,449 16930,450 16931451 ],452 "maxPoints": 3453 },454 {455 "fieldName": "feralSwiftness",456 "location": {457 "rowIdx": 2,458 "colIdx": 0459 },460 "spellIds": [461 17002,462 24866463 ],464 "maxPoints": 2465 },466 {467 "fieldName": "survivalInstincts",468 "location": {469 "rowIdx": 2,470 "colIdx": 1471 },472 "spellIds": [473 61336474 ],475 "maxPoints": 1476 },477 {478 "fieldName": "sharpenedClaws",479 "location": {480 "rowIdx": 2,481 "colIdx": 2482 },483 "spellIds": [484 16942,485 16943,486 16944487 ],488 "maxPoints": 3,489 },490 {491 "fieldName": "shreddingAttacks",492 "location": {493 "rowIdx": 3,494 "colIdx": 0495 },496 "spellIds": [497 16966,498 16968499 ],500 "maxPoints": 2501 },502 {503 "fieldName": "predatoryStrikes",504 "location": {505 "rowIdx": 3,506 "colIdx": 1507 },508 "spellIds": [509 16972,510 16974,511 16975512 ],513 "maxPoints": 3514 },515 {516 "fieldName": "primalFury",517 "location": {518 "rowIdx": 3,519 "colIdx": 2520 },521 "spellIds": [522 37116,523 37117524 ],525 "maxPoints": 2,526 "prereqLocation": {527 "rowIdx": 2,528 "colIdx": 2529 }530 },531 {532 "fieldName": "primalPrecision",533 "location": {534 "rowIdx": 3,535 "colIdx": 3536 },537 "spellIds": [538 48409,539 48410540 ],541 "maxPoints": 2542 },543 {544 "fieldName": "brutalImpact",545 "location": {546 "rowIdx": 4,547 "colIdx": 0548 },549 "spellIds": [550 16940,551 16941552 ],553 "maxPoints": 2554 },555 {556 "fieldName": "feralCharge",557 "location": {558 "rowIdx": 4,559 "colIdx": 2560 },561 "spellIds": [562 49377563 ],564 "maxPoints": 1565 },566 {567 "fieldName": "nurturingInstinct",568 "location": {569 "rowIdx": 4,570 "colIdx": 3571 },572 "spellIds": [573 33872,574 33873575 ],576 "maxPoints": 2577 },578 {579 "fieldName": "naturalReaction",580 "location": {581 "rowIdx": 5,582 "colIdx": 0583 },584 "spellIds": [585 57878,586 57880,587 57881588 ],589 "maxPoints": 3590 },591 {592 "fieldName": "heartOfTheWild",593 "location": {594 "rowIdx": 5,595 "colIdx": 1596 },597 "spellIds": [598 17003,599 17004,600 17005,601 17006,602 24894603 ],604 "maxPoints": 5,605 "prereqLocation": {606 "rowIdx": 3,607 "colIdx": 1608 }609 },610 {611 "fieldName": "survivalOfTheFittest",612 "location": {613 "rowIdx": 5,614 "colIdx": 2615 },616 "spellIds": [617 33853,618 33855,619 33856620 ],621 "maxPoints": 3622 },623 {624 "fieldName": "leaderOfThePack",625 "location": {626 "rowIdx": 6,627 "colIdx": 1628 },629 "spellIds": [630 17007631 ],632 "maxPoints": 1,633 },634 {635 "fieldName": "improvedLeaderOfThePack",636 "location": {637 "rowIdx": 6,638 "colIdx": 2639 },640 "spellIds": [641 34297,642 34300643 ],644 "maxPoints": 2,645 "prereqLocation": {646 "rowIdx": 6,647 "colIdx": 1648 }649 },650 {651 "fieldName": "primalTenacity",652 "location": {653 "rowIdx": 6,654 "colIdx": 3655 },656 "spellIds": [657 33851,658 33852,659 33957660 ],661 "maxPoints": 3662 },663 {664 "fieldName": "protectorOfThePack",665 "location": {666 "rowIdx": 7,667 "colIdx": 0668 },669 "spellIds": [670 57873,671 57876,672 57877673 ],674 "maxPoints": 3675 },676 {677 "fieldName": "predatoryInstincts",678 "location": {679 "rowIdx": 7,680 "colIdx": 2681 },682 "spellIds": [683 33859,684 33866,685 33867686 ],687 "maxPoints": 3688 },689 {690 "fieldName": "infectedWounds",691 "location": {692 "rowIdx": 7,693 "colIdx": 3694 },695 "spellIds": [696 48483,697 48484,698 48485699 ],700 "maxPoints": 3701 },702 {703 "fieldName": "kingOfTheJungle",704 "location": {705 "rowIdx": 8,706 "colIdx": 0707 },708 "spellIds": [709 48492,710 48494,711 48495712 ],713 "maxPoints": 3714 },715 {716 "fieldName": "mangle",717 "location": {718 "rowIdx": 8,719 "colIdx": 1720 },721 "spellIds": [722 33917723 ],724 "maxPoints": 1,725 "prereqLocation": {726 "rowIdx": 6,727 "colIdx": 1728 }729 },730 {731 "fieldName": "improvedMangle",732 "location": {733 "rowIdx": 8,734 "colIdx": 2735 },736 "spellIds": [737 48532,738 48489,739 48491740 ],741 "maxPoints": 3,742 "prereqLocation": {743 "rowIdx": 8,744 "colIdx": 1745 }746 },747 {748 "fieldName": "rendAndTear",749 "location": {750 "rowIdx": 9,751 "colIdx": 1752 },753 "spellIds": [754 48432,755 48433,756 48434,757 51268,758 51269759 ],760 "maxPoints": 5761 },762 {763 "fieldName": "primalGore",764 "location": {765 "rowIdx": 9,766 "colIdx": 2767 },768 "spellIds": [769 63503770 ],771 "maxPoints": 1,772 "prereqLocation": {773 "rowIdx": 9,774 "colIdx": 1775 }776 },777 {778 "fieldName": "berserk",779 "location": {780 "rowIdx": 10,781 "colIdx": 1782 },783 "spellIds": [784 50334785 ],786 "maxPoints": 1787 }788 ]789 },790 {791 "name": "Restoration",792 "backgroundUrl": "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/282.jpg",793 "talents": [794 {795 "fieldName": "improvedMarkOfTheWild",796 "location": {797 "rowIdx": 0,798 "colIdx": 0799 },800 "spellIds": [801 17050,802 17051803 ],804 "maxPoints": 2805 },806 {807 "fieldName": "naturesFocus",808 "location": {809 "rowIdx": 0,810 "colIdx": 1811 },812 "spellIds": [813 17063,814 17065,815 17066816 ],817 "maxPoints": 3818 },819 {820 "fieldName": "furor",821 "location": {822 "rowIdx": 0,823 "colIdx": 2824 },825 "spellIds": [826 17056,827 17058,828 17059,829 17060,830 17061831 ],832 "maxPoints": 5833 },834 {835 "fieldName": "naturalist",836 "location": {837 "rowIdx": 1,838 "colIdx": 0839 },840 "spellIds": [841 17069,842 17070,843 17071,844 17072,845 17073846 ],847 "maxPoints": 5848 },849 {850 "fieldName": "subtlety",851 "location": {852 "rowIdx": 1,853 "colIdx": 1854 },855 "spellIds": [856 17118,857 17119,858 17120859 ],860 "maxPoints": 3861 },862 {863 "fieldName": "naturalShapeshifter",864 "location": {865 "rowIdx": 1,866 "colIdx": 2867 },868 "spellIds": [869 16833,870 16834,871 16835872 ],873 "maxPoints": 3874 },875 {876 "fieldName": "intensity",877 "location": {878 "rowIdx": 2,879 "colIdx": 0880 },881 "spellIds": [882 17106,883 17107,884 17108885 ],886 "maxPoints": 3887 },888 {889 "fieldName": "omenOfClarity",890 "location": {891 "rowIdx": 2,892 "colIdx": 1893 },894 "spellIds": [895 16864896 ],897 "maxPoints": 1898 },899 {900 "fieldName": "masterShapeshifter",901 "location": {902 "rowIdx": 2,903 "colIdx": 2904 },905 "spellIds": [906 48411,907 48412908 ],909 "maxPoints": 2,910 "prereqLocation": {911 "rowIdx": 1,912 "colIdx": 2913 }914 },915 {916 "fieldName": "tranquilSpirit",917 "location": {918 "rowIdx": 3,919 "colIdx": 1920 },921 "spellIds": [922 24968,923 24969,924 24970,925 24971,926 24972927 ],928 "maxPoints": 5929 },930 {931 "fieldName": "improvedRejuvenation",932 "location": {933 "rowIdx": 3,934 "colIdx": 2935 },936 "spellIds": [937 17111,938 17112,939 17113940 ],941 "maxPoints": 3942 },943 {944 "fieldName": "naturesSwiftness",945 "location": {946 "rowIdx": 4,947 "colIdx": 0948 },949 "spellIds": [950 17116951 ],952 "maxPoints": 1,953 "prereqLocation": {954 "rowIdx": 2,955 "colIdx": 0956 }957 },958 {959 "fieldName": "giftOfNature",960 "location": {961 "rowIdx": 4,962 "colIdx": 1963 },964 "spellIds": [965 17104,966 24943,967 24944,968 24945,969 24946970 ],971 "maxPoints": 5972 },973 {974 "fieldName": "improvedTranquility",975 "location": {976 "rowIdx": 4,977 "colIdx": 3978 },979 "spellIds": [980 17123,981 17124982 ],983 "maxPoints": 2984 },985 {986 "fieldName": "empoweredTouch",987 "location": {988 "rowIdx": 5,989 "colIdx": 0990 },991 "spellIds": [992 33879,993 33880994 ],995 "maxPoints": 2996 },997 {998 "fieldName": "naturesBounty",999 "location": {1000 "rowIdx": 5,1001 "colIdx": 21002 },1003 "spellIds": [1004 17074,1005 17075,1006 17076,1007 17077,1008 170781009 ],1010 "maxPoints": 5,1011 "prereqLocation": {1012 "rowIdx": 3,1013 "colIdx": 21014 }1015 },1016 {1017 "fieldName": "livingSpirit",1018 "location": {1019 "rowIdx": 6,1020 "colIdx": 01021 },1022 "spellIds": [1023 34151,1024 34152,1025 341531026 ],1027 "maxPoints": 31028 },1029 {1030 "fieldName": "swiftmend",1031 "location": {1032 "rowIdx": 6,1033 "colIdx": 11034 },1035 "spellIds": [1036 185621037 ],1038 "maxPoints": 1,1039 "prereqLocation": {1040 "rowIdx": 4,1041 "colIdx": 11042 }1043 },1044 {1045 "fieldName": "naturalPerfection",1046 "location": {1047 "rowIdx": 6,1048 "colIdx": 21049 },1050 "spellIds": [1051 33881,1052 33882,1053 338831054 ],1055 "maxPoints": 31056 },1057 {1058 "fieldName": "empoweredRejuvenation",1059 "location": {1060 "rowIdx": 7,1061 "colIdx": 11062 },1063 "spellIds": [1064 33886,1065 33887,1066 33888,1067 33889,1068 338901069 ],1070 "maxPoints": 51071 },1072 {1073 "fieldName": "livingSeed",1074 "location": {1075 "rowIdx": 7,1076 "colIdx": 21077 },1078 "spellIds": [1079 48496,1080 48499,1081 485001082 ],1083 "maxPoints": 31084 },1085 {1086 "fieldName": "revitalize",1087 "location": {1088 "rowIdx": 8,1089 "colIdx": 01090 },1091 "spellIds": [1092 48539,1093 48544,1094 485451095 ],1096 "maxPoints": 31097 },1098 {1099 "fieldName": "treeOfLife",1100 "location": {1101 "rowIdx": 8,1102 "colIdx": 11103 },1104 "spellIds": [1105 651391106 ],1107 "maxPoints": 1,1108 "prereqLocation": {1109 "rowIdx": 7,1110 "colIdx": 11111 }1112 },1113 {1114 "fieldName": "improvedTreeOfLife",1115 "location": {1116 "rowIdx": 8,1117 "colIdx": 21118 },1119 "spellIds": [1120 48535,1121 48536,1122 485371123 ],1124 "maxPoints": 3,1125 "prereqLocation": {1126 "rowIdx": 8,1127 "colIdx": 11128 }1129 },1130 {1131 "fieldName": "improvedBarkskin",1132 "location": {1133 "rowIdx": 9,1134 "colIdx": 01135 },1136 "spellIds": [1137 63410,1138 634111139 ],1140 "maxPoints": 21141 },1142 {1143 "fieldName": "giftOfTheEarthmother",1144 "location": {1145 "rowIdx": 9,1146 "colIdx": 21147 },1148 "spellIds": [1149 51179,1150 51180,1151 51181,1152 51182,1153 511831154 ],1155 "maxPoints": 51156 },1157 {1158 "fieldName": "wildGrowth",1159 "location": {1160 "rowIdx": 10,1161 "colIdx": 11162 },1163 "spellIds": [1164 484381165 ],1166 "maxPoints": 1,1167 "prereqLocation": {1168 "rowIdx": 8,1169 "colIdx": 11170 }1171 }1172 ]1173 }1174]);1175export const druidGlyphsConfig: GlyphsConfig = {1176 majorGlyphs: {1177 [DruidMajorGlyph.GlyphOfBarkskin]: {1178 name: 'Glyph of Barkskin',1179 description: 'Reduces the chance you\'ll be critically hit by 25% while Barkskin is active.',1180 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_stoneclawtotem.jpg',1181 },1182 [DruidMajorGlyph.GlyphOfBerserk]: {1183 name: 'Glyph of Berserk',1184 description: 'Increases the duration of Berserk by 5 sec.',1185 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_berserk.jpg',1186 },1187 [DruidMajorGlyph.GlyphOfClaw]: {1188 name: 'Glyph of Claw',1189 description: 'Reduces the energy cost of your Claw ability by 5.',1190 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_rake.jpg',1191 },1192 [DruidMajorGlyph.GlyphOfEntanglingRoots]: {1193 name: 'Glyph of Entangling Roots',1194 description: 'Increases the damage your Entangling Roots victims can take before the Entangling Roots automatically breaks by 20%.',1195 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_stranglevines.jpg',1196 },1197 [DruidMajorGlyph.GlyphOfFocus]: {1198 name: 'Glyph of Focus',1199 description: 'Increases the damage done by Starfall by 10%, but decreases its radius by 50%.',1200 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_starfall.jpg',1201 },1202 [DruidMajorGlyph.GlyphOfFrenziedRegeneration]: {1203 name: 'Glyph of Frenzied Regeneration',1204 description: 'While Frenzied Regeneration is active, healing effects on you are 20% more powerful.',1205 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_bullrush.jpg',1206 },1207 [DruidMajorGlyph.GlyphOfGrowling]: {1208 name: 'Glyph of Growling',1209 description: 'Increases the chance for your Growl ability to work successfully by 8%.',1210 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_physical_taunt.jpg',1211 },1212 [DruidMajorGlyph.GlyphOfHealingTouch]: {1213 name: 'Glyph of Healing Touch',1214 description: 'Decreases the cast time of Healing Touch by 1.5 sec, the mana cost by 25%, and the amount healed by 50%.',1215 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_healingtouch.jpg',1216 },1217 [DruidMajorGlyph.GlyphOfHurricane]: {1218 name: 'Glyph of Hurricane',1219 description: 'Your Hurricane ability now also slows the movement speed of its victims by 20%.',1220 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_cyclone.jpg',1221 },1222 [DruidMajorGlyph.GlyphOfInnervate]: {1223 name: 'Glyph of Innervate',1224 description: 'Innervate now grants the caster 45% of <dfn title="her">his</dfn> base mana pool over 10 sec in addition to the normal effects of Innervate.',1225 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_lightning.jpg',1226 },1227 [DruidMajorGlyph.GlyphOfInsectSwarm]: {1228 name: 'Glyph of Insect Swarm',1229 description: 'Increases the damage of your Insect Swarm ability by 30%, but it no longer affects your victim\'s chance to hit.',1230 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_insectswarm.jpg',1231 },1232 [DruidMajorGlyph.GlyphOfLifebloom]: {1233 name: 'Glyph of Lifebloom',1234 description: 'Increases the duration of Lifebloom by 1 sec.',1235 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/inv_misc_herb_felblossom.jpg',1236 },1237 [DruidMajorGlyph.GlyphOfMangle]: {1238 name: 'Glyph of Mangle',1239 description: 'Increases the damage done by Mangle by 10%.',1240 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_mangle2.jpg',1241 },1242 [DruidMajorGlyph.GlyphOfMaul]: {1243 name: 'Glyph of Maul',1244 description: 'Your Maul ability now hits 1 additional target.',1245 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_maul.jpg',1246 },1247 [DruidMajorGlyph.GlyphOfMonsoon]: {1248 name: 'Glyph of Monsoon',1249 description: 'Reduces the cooldown of your Typhoon spell by 3 sec.',1250 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_typhoon.jpg',1251 },1252 [DruidMajorGlyph.GlyphOfMoonfire]: {1253 name: 'Glyph of Moonfire',1254 description: 'Increases the periodic damage of your Moonfire ability by 75%, but initial damage is decreased by 90%.',1255 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_starfall.jpg',1256 },1257 [DruidMajorGlyph.GlyphOfNourish]: {1258 name: 'Glyph of Nourish',1259 description: 'Your Nourish heals an additional 6% for each of your heal over time effects present on the target.',1260 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_nourish.jpg',1261 },1262 [DruidMajorGlyph.GlyphOfRake]: {1263 name: 'Glyph of Rake',1264 description: 'Your Rake ability prevents targets from fleeing.',1265 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_disembowel.jpg',1266 },1267 [DruidMajorGlyph.GlyphOfRapidRejuvenation]: {1268 name: 'Glyph of Rapid Rejuvenation',1269 description: 'Your haste now reduces the time between the periodic healing ticks of your Rejuvenation spell.',1270 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_rejuvenation.jpg',1271 },1272 [DruidMajorGlyph.GlyphOfRebirth]: {1273 name: 'Glyph of Rebirth',1274 description: 'Players resurrected by Rebirth are returned to life with 100% health.',1275 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_reincarnation.jpg',1276 },1277 [DruidMajorGlyph.GlyphOfRegrowth]: {1278 name: 'Glyph of Regrowth',1279 description: 'Increases the healing of your Regrowth spell by 20% if your Regrowth effect is still active on the target.',1280 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_resistnature.jpg',1281 },1282 [DruidMajorGlyph.GlyphOfRejuvenation]: {1283 name: 'Glyph of Rejuvenation',1284 description: 'While your Rejuvenation targets are below 50% health, you will heal them for an additional 50% health.',1285 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_rejuvenation.jpg',1286 },1287 [DruidMajorGlyph.GlyphOfRip]: {1288 name: 'Glyph of Rip',1289 description: 'Increases the duration of your Rip ability by 4 sec.',1290 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_ghoulfrenzy.jpg',1291 },1292 [DruidMajorGlyph.GlyphOfSavageRoar]: {1293 name: 'Glyph of Savage Roar',1294 description: 'Your Savage Roar ability grants an additional 3% bonus damage done.',1295 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_skinteeth.jpg',1296 },1297 [DruidMajorGlyph.GlyphOfShred]: {1298 name: 'Glyph of Shred',1299 description: 'Each time you Shred, the duration of your Rip on the target is extended 2 sec, up to a maximum of 6 sec.',1300 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_vampiricaura.jpg',1301 },1302 [DruidMajorGlyph.GlyphOfStarfall]: {1303 name: 'Glyph of Starfall',1304 description: 'Reduces the cooldown of Starfall by 30 sec.',1305 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_starfall.jpg',1306 },1307 [DruidMajorGlyph.GlyphOfStarfire]: {1308 name: 'Glyph of Starfire',1309 description: 'Your Starfire ability increases the duration of your Moonfire effect on the target by 3 sec, up to a maximum of 9 additional seconds.',1310 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_arcane_starfire.jpg',1311 },1312 [DruidMajorGlyph.GlyphOfSurvivalInstincts]: {1313 name: 'Glyph of Survival Instincts',1314 description: 'Your Survival Instincts ability grants an additional 15% of your maximum health.',1315 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_tigersroar.jpg',1316 },1317 [DruidMajorGlyph.GlyphOfSwiftmend]: {1318 name: 'Glyph of Swiftmend',1319 description: 'Your Swiftmend ability no longer consumes a Rejuvenation or Regrowth effect from the target.',1320 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/inv_relics_idolofrejuvenation.jpg',1321 },1322 [DruidMajorGlyph.GlyphOfWildGrowth]: {1323 name: 'Glyph of Wild Growth',1324 description: 'Wild Growth can affect 1 additional target.',1325 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_flourish.jpg',1326 },1327 [DruidMajorGlyph.GlyphOfWrath]: {1328 name: 'Glyph of Wrath',1329 description: 'Reduces the pushback suffered from damaging attacks while casting your Wrath spell by 50%.',1330 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_abolishmagic.jpg',1331 },1332 },1333 minorGlyphs: {1334 [DruidMinorGlyph.GlyphOfAquaticForm]: {1335 name: 'Glyph of Aquatic Form',1336 description: 'Increases your swim speed by 50% while in Aquatic Form.',1337 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_aquaticform.jpg',1338 },1339 [DruidMinorGlyph.GlyphOfChallengingRoar]: {1340 name: 'Glyph of Challenging Roar',1341 description: 'Reduces the cooldown of your Challenging Roar ability by 30 sec.',1342 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_challangingroar.jpg',1343 },1344 [DruidMinorGlyph.GlyphOfDash]: {1345 name: 'Glyph of Dash',1346 description: 'Reduces the cooldown of your Dash ability by 20%.',1347 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_dash.jpg',1348 },1349 [DruidMinorGlyph.GlyphOfTheWild]: {1350 name: 'Glyph of the Wild',1351 description: 'Mana cost of your Mark of the Wild and Gift of the Wild spells reduced by 50%.',1352 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_regeneration.jpg',1353 },1354 [DruidMinorGlyph.GlyphOfThorns]: {1355 name: 'Glyph of Thorns',1356 description: 'Increases the duration of your Thorns ability by 50 min when cast on yourself.',1357 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_thorns.jpg',1358 },1359 [DruidMinorGlyph.GlyphOfTyphoon]: {1360 name: 'Glyph of Typhoon',1361 description: 'Reduces the cost of your Typhoon spell by 8% and increases its radius by 10 yards, but it no longer knocks enemies back.',1362 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_druid_typhoon.jpg',1363 },1364 [DruidMinorGlyph.GlyphOfUnburdenedRebirth]: {1365 name: 'Glyph of Unburdened Rebirth',1366 description: 'Your Rebirth spell no longer requires a reagent.',1367 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_nature_reincarnation.jpg',1368 },1369 },...
warlock.ts
Source:warlock.ts
1import { WarlockTalents, WarlockMajorGlyph, WarlockMinorGlyph } from '../proto/warlock.js';2import { GlyphsConfig } from './glyphs_picker.js';3import { TalentsConfig, newTalentsConfig } from './talents_picker.js';4export const warlockTalentsConfig: TalentsConfig<WarlockTalents> = newTalentsConfig([5 {6 name: "Affliction",7 backgroundUrl: "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/302.jpg",8 talents: [9 {10 fieldName: "improvedCurseOfAgony",11 location: {12 rowIdx: 0,13 colIdx: 014 },15 spellIds: [16 18827,17 1882918 ],19 maxPoints: 220 },21 {22 fieldName: "suppression",23 location: {24 rowIdx: 0,25 colIdx: 126 },27 spellIds: [28 18174,29 18175,30 1817631 ],32 maxPoints: 333 },34 {35 fieldName: "improvedCorruption",36 location: {37 rowIdx: 0,38 colIdx: 239 },40 spellIds: [41 17810,42 17811,43 17812,44 17813,45 1781446 ],47 maxPoints: 548 },49 {50 fieldName: "improvedCurseOfWeakness",51 location: {52 rowIdx: 1,53 colIdx: 054 },55 spellIds: [56 18179,57 1818058 ],59 maxPoints: 260 },61 {62 fieldName: "improvedDrainSoul",63 location: {64 rowIdx: 1,65 colIdx: 166 },67 spellIds: [68 18213,69 1837270 ],71 maxPoints: 272 },73 {74 fieldName: "improvedLifeTap",75 location: {76 rowIdx: 1,77 colIdx: 278 },79 spellIds: [80 18182,81 1818382 ],83 maxPoints: 284 },85 {86 fieldName: "soulSiphon",87 location: {88 rowIdx: 1,89 colIdx: 390 },91 spellIds: [92 17804,93 1780594 ],95 maxPoints: 296 },97 {98 fieldName: "improvedFear",99 location: {100 rowIdx: 2,101 colIdx: 0102 },103 spellIds: [104 53754,105 53759106 ],107 maxPoints: 2108 },109 {110 fieldName: "felConcentration",111 location: {112 rowIdx: 2,113 colIdx: 1114 },115 spellIds: [116 17783,117 17784,118 17785119 ],120 maxPoints: 3121 },122 {123 fieldName: "amplifyCurse",124 location: {125 rowIdx: 2,126 colIdx: 2127 },128 spellIds: [129 18288130 ],131 maxPoints: 1132 },133 {134 fieldName: "grimReach",135 location: {136 rowIdx: 3,137 colIdx: 0138 },139 spellIds: [140 18218,141 18219142 ],143 maxPoints: 2144 },145 {146 fieldName: "nightfall",147 location: {148 rowIdx: 3,149 colIdx: 1150 },151 spellIds: [152 18094,153 18095154 ],155 maxPoints: 2156 },157 {158 fieldName: "empoweredCorruption",159 location: {160 rowIdx: 3,161 colIdx: 3162 },163 spellIds: [164 32381,165 32382,166 32383167 ],168 maxPoints: 3169 },170 {171 fieldName: "shadowEmbrace",172 location: {173 rowIdx: 4,174 colIdx: 0175 },176 spellIds: [177 32385,178 32387,179 32392,180 32393,181 32394182 ],183 maxPoints: 5184 },185 {186 fieldName: "siphonLife",187 location: {188 rowIdx: 4,189 colIdx: 1190 },191 spellIds: [192 63108193 ],194 maxPoints: 1195 },196 {197 fieldName: "curseOfExhaustion",198 location: {199 rowIdx: 4,200 colIdx: 2201 },202 spellIds: [203 18223204 ],205 maxPoints: 1,206 "prereqLocation": {207 rowIdx: 2,208 colIdx: 2209 }210 },211 {212 fieldName: "improvedFelhunter",213 location: {214 rowIdx: 5,215 colIdx: 0216 },217 spellIds: [218 54037,219 54038220 ],221 maxPoints: 2222 },223 {224 fieldName: "shadowMastery",225 location: {226 rowIdx: 5,227 colIdx: 1228 },229 spellIds: [230 18271,231 18272,232 18273,233 18274,234 18275235 ],236 maxPoints: 5,237 "prereqLocation": {238 rowIdx: 4,239 colIdx: 1240 }241 },242 {243 fieldName: "eradication",244 location: {245 rowIdx: 6,246 colIdx: 0247 },248 spellIds: [249 47195,250 47196,251 47197252 ],253 maxPoints: 3254 },255 {256 fieldName: "contagion",257 location: {258 rowIdx: 6,259 colIdx: 1260 },261 spellIds: [262 30060,263 30061,264 30062,265 30063,266 30064267 ],268 maxPoints: 5269 },270 {271 fieldName: "darkPact",272 location: {273 rowIdx: 6,274 colIdx: 2275 },276 spellIds: [277 18220278 ],279 maxPoints: 1280 },281 {282 fieldName: "improvedHowlOfTerror",283 location: {284 rowIdx: 7,285 colIdx: 0286 },287 spellIds: [288 30054,289 30057290 ],291 maxPoints: 2292 },293 {294 fieldName: "malediction",295 location: {296 rowIdx: 7,297 colIdx: 2298 },299 spellIds: [300 32477,301 32483,302 32484303 ],304 maxPoints: 3305 },306 {307 fieldName: "deathsEmbrace",308 location: {309 rowIdx: 8,310 colIdx: 0311 },312 spellIds: [313 47198,314 47199,315 47200316 ],317 maxPoints: 3318 },319 {320 fieldName: "unstableAffliction",321 location: {322 rowIdx: 8,323 colIdx: 1324 },325 spellIds: [326 30108327 ],328 maxPoints: 1,329 "prereqLocation": {330 rowIdx: 6,331 colIdx: 1332 }333 },334 {335 fieldName: "pandemic",336 location: {337 rowIdx: 8,338 colIdx: 2339 },340 spellIds: [341 58435342 ],343 maxPoints: 1,344 "prereqLocation": {345 rowIdx: 8,346 colIdx: 1347 }348 },349 {350 fieldName: "everlastingAffliction",351 location: {352 rowIdx: 9,353 colIdx: 1354 },355 spellIds: [356 47201,357 47202,358 47203,359 47204,360 47205361 ],362 maxPoints: 5363 },364 {365 fieldName: "haunt",366 location: {367 rowIdx: 10,368 colIdx: 1369 },370 spellIds: [371 48181372 ],373 maxPoints: 1374 }375 ]376 },377 {378 name: "Demonology",379 backgroundUrl: "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/303.jpg",380 talents: [381 {382 fieldName: "improvedHealthstone",383 location: {384 rowIdx: 0,385 colIdx: 0386 },387 spellIds: [388 18692,389 18693390 ],391 maxPoints: 2392 },393 {394 fieldName: "improvedImp",395 location: {396 rowIdx: 0,397 colIdx: 1398 },399 spellIds: [400 18694,401 18695,402 18696403 ],404 maxPoints: 3405 },406 {407 fieldName: "demonicEmbrace",408 location: {409 rowIdx: 0,410 colIdx: 2411 },412 spellIds: [413 18697,414 18698,415 18699416 ],417 maxPoints: 3418 },419 {420 fieldName: "felSynergy",421 location: {422 rowIdx: 0,423 colIdx: 3424 },425 spellIds: [426 47230,427 47231428 ],429 maxPoints: 2430 },431 {432 fieldName: "improvedHealthFunnel",433 location: {434 rowIdx: 1,435 colIdx: 0436 },437 spellIds: [438 18703,439 18704440 ],441 maxPoints: 2442 },443 {444 fieldName: "demonicBrutality",445 location: {446 rowIdx: 1,447 colIdx: 1448 },449 spellIds: [450 18705,451 18706,452 18707453 ],454 maxPoints: 3455 },456 {457 fieldName: "felVitality",458 location: {459 rowIdx: 1,460 colIdx: 2461 },462 spellIds: [463 18731,464 18743,465 18744466 ],467 maxPoints: 3468 },469 {470 fieldName: "improvedSayaad",471 location: {472 rowIdx: 2,473 colIdx: 0474 },475 spellIds: [476 18754,477 18755,478 18756479 ],480 maxPoints: 3481 },482 {483 fieldName: "soulLink",484 location: {485 rowIdx: 2,486 colIdx: 1487 },488 spellIds: [489 19028490 ],491 maxPoints: 1492 },493 {494 fieldName: "felDomination",495 location: {496 rowIdx: 2,497 colIdx: 2498 },499 spellIds: [500 18708501 ],502 maxPoints: 1503 },504 {505 fieldName: "demonicAegis",506 location: {507 rowIdx: 2,508 colIdx: 3509 },510 spellIds: [511 30143,512 30144,513 30145514 ],515 maxPoints: 3516 },517 {518 fieldName: "unholyPower",519 location: {520 rowIdx: 3,521 colIdx: 1522 },523 spellIds: [524 18769,525 18770,526 18771,527 18772,528 18773529 ],530 maxPoints: 5,531 "prereqLocation": {532 rowIdx: 2,533 colIdx: 1534 }535 },536 {537 fieldName: "masterSummoner",538 location: {539 rowIdx: 3,540 colIdx: 2541 },542 spellIds: [543 18709,544 18710545 ],546 maxPoints: 2,547 "prereqLocation": {548 rowIdx: 2,549 colIdx: 2550 }551 },552 {553 fieldName: "manaFeed",554 location: {555 rowIdx: 4,556 colIdx: 0557 },558 spellIds: [559 30326560 ],561 maxPoints: 1,562 "prereqLocation": {563 rowIdx: 3,564 colIdx: 1565 }566 },567 {568 fieldName: "masterConjuror",569 location: {570 rowIdx: 4,571 colIdx: 2572 },573 spellIds: [574 18767,575 18768576 ],577 maxPoints: 2578 },579 {580 fieldName: "masterDemonologist",581 location: {582 rowIdx: 5,583 colIdx: 1584 },585 spellIds: [586 23785,587 23822,588 23823,589 23824,590 23825591 ],592 maxPoints: 5,593 "prereqLocation": {594 rowIdx: 3,595 colIdx: 1596 }597 },598 {599 fieldName: "moltenCore",600 location: {601 rowIdx: 5,602 colIdx: 2603 },604 spellIds: [605 47245,606 47246,607 47247608 ],609 maxPoints: 3610 },611 {612 fieldName: "demonicResilience",613 location: {614 rowIdx: 6,615 colIdx: 0616 },617 spellIds: [618 30319,619 30320,620 30321621 ],622 maxPoints: 3623 },624 {625 fieldName: "demonicEmpowerment",626 location: {627 rowIdx: 6,628 colIdx: 1629 },630 spellIds: [631 47193632 ],633 maxPoints: 1,634 "prereqLocation": {635 rowIdx: 5,636 colIdx: 1637 }638 },639 {640 fieldName: "demonicKnowledge",641 location: {642 rowIdx: 6,643 colIdx: 2644 },645 spellIds: [646 35691,647 35692,648 35693649 ],650 maxPoints: 3651 },652 {653 fieldName: "demonicTactics",654 location: {655 rowIdx: 7,656 colIdx: 1657 },658 spellIds: [659 30242,660 30245,661 30246,662 30247,663 30248664 ],665 maxPoints: 5666 },667 {668 fieldName: "decimation",669 location: {670 rowIdx: 7,671 colIdx: 2672 },673 spellIds: [674 63156,675 63158676 ],677 maxPoints: 2678 },679 {680 fieldName: "improvedDemonicTactics",681 location: {682 rowIdx: 8,683 colIdx: 0684 },685 spellIds: [686 54347,687 54348,688 54349689 ],690 maxPoints: 3,691 "prereqLocation": {692 rowIdx: 7,693 colIdx: 1694 }695 },696 {697 fieldName: "summonFelguard",698 location: {699 rowIdx: 8,700 colIdx: 1701 },702 spellIds: [703 30146704 ],705 maxPoints: 1706 },707 {708 fieldName: "nemesis",709 location: {710 rowIdx: 8,711 colIdx: 2712 },713 spellIds: [714 63117,715 63121,716 63123717 ],718 maxPoints: 3719 },720 {721 fieldName: "demonicPact",722 location: {723 rowIdx: 9,724 colIdx: 1725 },726 spellIds: [727 47236,728 47237,729 47238,730 47239,731 47240732 ],733 maxPoints: 5734 },735 {736 fieldName: "metamorphosis",737 location: {738 rowIdx: 10,739 colIdx: 1740 },741 spellIds: [742 59672743 ],744 maxPoints: 1745 }746 ]747 },748 {749 name: "Destruction",750 backgroundUrl: "https://wow.zamimg.com/images/wow/talents/backgrounds/wrath/301.jpg",751 talents: [752 {753 fieldName: "improvedShadowBolt",754 location: {755 rowIdx: 0,756 colIdx: 1757 },758 spellIds: [759 17793,760 17796,761 17801,762 17802,763 17803764 ],765 maxPoints: 5766 },767 {768 fieldName: "bane",769 location: {770 rowIdx: 0,771 colIdx: 2772 },773 spellIds: [774 17788,775 17789,776 17790,777 17791,778 17792779 ],780 maxPoints: 5781 },782 {783 fieldName: "aftermath",784 location: {785 rowIdx: 1,786 colIdx: 0787 },788 spellIds: [789 18119,790 18120791 ],792 maxPoints: 2793 },794 {795 fieldName: "moltenSkin",796 location: {797 rowIdx: 1,798 colIdx: 1799 },800 spellIds: [801 63349,802 63350,803 63351804 ],805 maxPoints: 3806 },807 {808 fieldName: "cataclysm",809 location: {810 rowIdx: 1,811 colIdx: 2812 },813 spellIds: [814 17778,815 17779,816 17780817 ],818 maxPoints: 3819 },820 {821 fieldName: "demonicPower",822 location: {823 rowIdx: 2,824 colIdx: 0825 },826 spellIds: [827 18126,828 18127829 ],830 maxPoints: 2831 },832 {833 fieldName: "shadowburn",834 location: {835 rowIdx: 2,836 colIdx: 1837 },838 spellIds: [839 17877840 ],841 maxPoints: 1842 },843 {844 fieldName: "ruin",845 location: {846 rowIdx: 2,847 colIdx: 2848 },849 spellIds: [850 17959,851 59738,852 59739,853 59740,854 59741855 ],856 maxPoints: 5857 },858 {859 fieldName: "intensity",860 location: {861 rowIdx: 3,862 colIdx: 0863 },864 spellIds: [865 18135,866 18136867 ],868 maxPoints: 2869 },870 {871 fieldName: "destructiveReach",872 location: {873 rowIdx: 3,874 colIdx: 1875 },876 spellIds: [877 17917,878 17918879 ],880 maxPoints: 2881 },882 {883 fieldName: "improvedSearingPain",884 location: {885 rowIdx: 3,886 colIdx: 3887 },888 spellIds: [889 17927,890 17929,891 17930892 ],893 maxPoints: 3894 },895 {896 fieldName: "backlash",897 location: {898 rowIdx: 4,899 colIdx: 0900 },901 spellIds: [902 34935,903 34938,904 34939905 ],906 maxPoints: 3,907 "prereqLocation": {908 rowIdx: 3,909 colIdx: 0910 }911 },912 {913 fieldName: "improvedImmolate",914 location: {915 rowIdx: 4,916 colIdx: 1917 },918 spellIds: [919 17815,920 17833,921 17834922 ],923 maxPoints: 3924 },925 {926 fieldName: "devastation",927 location: {928 rowIdx: 4,929 colIdx: 2930 },931 spellIds: [932 18130933 ],934 maxPoints: 1,935 "prereqLocation": {936 rowIdx: 2,937 colIdx: 2938 }939 },940 {941 fieldName: "netherProtection",942 location: {943 rowIdx: 5,944 colIdx: 0945 },946 spellIds: [947 30299,948 30301,949 30302950 ],951 maxPoints: 3952 },953 {954 fieldName: "emberstorm",955 location: {956 rowIdx: 5,957 colIdx: 2958 },959 spellIds: [960 17954,961 17955,962 17956,963 17957,964 17958965 ],966 maxPoints: 5967 },968 {969 fieldName: "conflagrate",970 location: {971 rowIdx: 6,972 colIdx: 1973 },974 spellIds: [975 17962976 ],977 maxPoints: 1,978 "prereqLocation": {979 rowIdx: 4,980 colIdx: 1981 }982 },983 {984 fieldName: "soulLeech",985 location: {986 rowIdx: 6,987 colIdx: 2988 },989 spellIds: [990 30293,991 30295,992 30296993 ],994 maxPoints: 3995 },996 {997 fieldName: "pyroclasm",998 location: {999 rowIdx: 6,1000 colIdx: 31001 },1002 spellIds: [1003 18096,1004 18073,1005 632451006 ],1007 maxPoints: 31008 },1009 {1010 fieldName: "shadowAndFlame",1011 location: {1012 rowIdx: 7,1013 colIdx: 11014 },1015 spellIds: [1016 30288,1017 30289,1018 30290,1019 30291,1020 302921021 ],1022 maxPoints: 51023 },1024 {1025 fieldName: "improvedSoulLeech",1026 location: {1027 rowIdx: 7,1028 colIdx: 21029 },1030 spellIds: [1031 54117,1032 541181033 ],1034 maxPoints: 2,1035 "prereqLocation": {1036 rowIdx: 6,1037 colIdx: 21038 }1039 },1040 {1041 fieldName: "backdraft",1042 location: {1043 rowIdx: 8,1044 colIdx: 01045 },1046 spellIds: [1047 47258,1048 47259,1049 472601050 ],1051 maxPoints: 3,1052 "prereqLocation": {1053 rowIdx: 6,1054 colIdx: 11055 }1056 },1057 {1058 fieldName: "shadowfury",1059 location: {1060 rowIdx: 8,1061 colIdx: 11062 },1063 spellIds: [1064 302831065 ],1066 maxPoints: 11067 },1068 {1069 fieldName: "empoweredImp",1070 location: {1071 rowIdx: 8,1072 colIdx: 21073 },1074 spellIds: [1075 47220,1076 47221,1077 472231078 ],1079 maxPoints: 31080 },1081 {1082 fieldName: "fireAndBrimstone",1083 location: {1084 rowIdx: 9,1085 colIdx: 11086 },1087 spellIds: [1088 47266,1089 47267,1090 47268,1091 47269,1092 472701093 ],1094 maxPoints: 51095 },1096 {1097 fieldName: "chaosBolt",1098 location: {1099 rowIdx: 10,1100 colIdx: 11101 },1102 spellIds: [1103 507961104 ],1105 maxPoints: 11106 }1107 ]1108 }1109]);1110export const warlockGlyphsConfig: GlyphsConfig = {1111 majorGlyphs: {1112 [WarlockMajorGlyph.GlyphOfChaosBolt]: {1113 name: 'Glyph of Chaos Bolt',1114 description: 'Reduces the cooldown on Chaos Bolt by 2 sec.',1115 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_warlock_chaosbolt.jpg',1116 },1117 [WarlockMajorGlyph.GlyphOfConflagrate]: {1118 name: 'Glyph of Conflagrate',1119 description: 'Your Conflagrate spell no longer consumes your Immolate or Shadowflame spell from the target.',1120 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_fire_fireball.jpg',1121 },1122 [WarlockMajorGlyph.GlyphOfCorruption]: {1123 name: 'Glyph of Corruption',1124 description: 'Your Corruption spell has a 4% chance to cause you to enter a Shadow Trance state after damaging the opponent. The Shadow Trance state reduces the casting time of your next Shadow Bolt spell by 100%.',1125 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_abominationexplosion.jpg',1126 },1127 [WarlockMajorGlyph.GlyphOfCurseOfAgony]: {1128 name: 'Glyph of Curse of Agony',1129 description: 'Increases the duration of your Curse of Agony by 4 sec.',1130 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_curseofsargeras.jpg',1131 },1132 [WarlockMajorGlyph.GlyphOfDeathCoil]: {1133 name: 'Glyph of Death Coil',1134 description: 'Increases the duration of your Death Coil by 0.5 sec.',1135 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_deathcoil.jpg',1136 },1137 [WarlockMajorGlyph.GlyphOfDemonicCircle]: {1138 name: 'Glyph of Demonic Circle',1139 description: 'Reduces the cooldown on Demonic Circle by 4 sec.',1140 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_demoniccirclesummon.jpg',1141 },1142 [WarlockMajorGlyph.GlyphOfFear]: {1143 name: 'Glyph of Fear',1144 description: 'Increases the damage your Fear target can take before the Fear effect is removed by 20%.',1145 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_possession.jpg',1146 },1147 [WarlockMajorGlyph.GlyphOfFelguard]: {1148 name: 'Glyph of Felguard',1149 description: 'Increases the Felguard\'s total attack power by 20%.',1150 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_summonfelguard.jpg',1151 },1152 [WarlockMajorGlyph.GlyphOfFelhunter]: {1153 name: 'Glyph of Felhunter',1154 description: 'When your Felhunter uses Devour Magic, you will also be healed for that amount.',1155 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_summonfelhunter.jpg',1156 },1157 [WarlockMajorGlyph.GlyphOfHaunt]: {1158 name: 'Glyph of Haunt',1159 description: 'The bonus damage granted by your Haunt spell is increased by an additional 3%.',1160 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_warlock_haunt.jpg',1161 },1162 [WarlockMajorGlyph.GlyphOfHealthFunnel]: {1163 name: 'Glyph of Health Funnel',1164 description: 'Reduces the pushback suffered from damaging attacks while channeling your Health Funnel spell by 100%.',1165 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_lifedrain.jpg',1166 },1167 [WarlockMajorGlyph.GlyphOfHealthstone]: {1168 name: 'Glyph of Healthstone',1169 description: 'You receive 30% more healing from using a healthstone.',1170 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/inv_stone_04.jpg',1171 },1172 [WarlockMajorGlyph.GlyphOfHowlOfTerror]: {1173 name: 'Glyph of Howl of Terror',1174 description: 'Reduces the cooldown on your Howl of Terror spell by 8 sec.',1175 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_deathscream.jpg',1176 },1177 [WarlockMajorGlyph.GlyphOfImmolate]: {1178 name: 'Glyph of Immolate',1179 description: 'Increases the periodic damage of your Immolate by 10%.',1180 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_fire_immolation.jpg',1181 },1182 [WarlockMajorGlyph.GlyphOfImp]: {1183 name: 'Glyph of Imp',1184 description: 'Increases the damage done by your Imp\'s Firebolt spell by 20%.',1185 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_summonimp.jpg',1186 },1187 [WarlockMajorGlyph.GlyphOfIncinerate]: {1188 name: 'Glyph of Incinerate',1189 description: 'Increases the damage done by Incinerate by 5%.',1190 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_fire_burnout.jpg',1191 },1192 [WarlockMajorGlyph.GlyphOfLifeTap]: {1193 name: 'Glyph of Life Tap',1194 description: 'When you use Life Tap or Dark Pact, you gain 20% of your Spirit as spell power for 40 sec.',1195 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_burningspirit.jpg',1196 },1197 [WarlockMajorGlyph.GlyphOfMetamorphosis]: {1198 name: 'Glyph of Metamorphosis',1199 description: 'Increases the duration of your Metamorphosis by 6 sec.',1200 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_demonform.jpg',1201 },1202 [WarlockMajorGlyph.GlyphOfQuickDecay]: {1203 name: 'Glyph of Quick Decay',1204 description: 'Your haste now reduces the time between periodic damage ticks of your Corruption spell.',1205 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_abominationexplosion.jpg',1206 },1207 [WarlockMajorGlyph.GlyphOfSearingPain]: {1208 name: 'Glyph of Searing Pain',1209 description: 'Increases the critical strike bonus of your Searing Pain by 20%.',1210 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_fire_soulburn.jpg',1211 },1212 [WarlockMajorGlyph.GlyphOfShadowBolt]: {1213 name: 'Glyph of Shadow Bolt',1214 description: 'Reduces the mana cost of your Shadow Bolt by 10%.',1215 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_shadowbolt.jpg',1216 },1217 [WarlockMajorGlyph.GlyphOfShadowburn]: {1218 name: 'Glyph of Shadowburn',1219 description: 'Increases the critical strike chance of Shadowburn by 20% when the target is below 35% health.',1220 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_scourgebuild.jpg',1221 },1222 [WarlockMajorGlyph.GlyphOfShadowflame]: {1223 name: 'Glyph of Shadowflame',1224 description: 'Your Shadowflame also applies a 70% movement speed slow on its victims.',1225 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/ability_warlock_shadowflame.jpg',1226 },1227 [WarlockMajorGlyph.GlyphOfSiphonLife]: {1228 name: 'Glyph of Siphon Life',1229 description: 'Increases the healing you receive from your Siphon Life talent by 25%.',1230 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_requiem.jpg',1231 },1232 [WarlockMajorGlyph.GlyphOfSoulLink]: {1233 name: 'Glyph of Soul Link',1234 description: 'Increases the percentage of damage shared via your Soul Link by an additional 5%.',1235 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_gathershadows.jpg',1236 },1237 [WarlockMajorGlyph.GlyphOfSoulstone]: {1238 name: 'Glyph of Soulstone',1239 description: 'Increases the amount of health you gain from resurrecting via a Soulstone by 300%.',1240 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_soulgem.jpg',1241 },1242 [WarlockMajorGlyph.GlyphOfSuccubus]: {1243 name: 'Glyph of Succubus',1244 description: 'Your Succubus\'s Seduction ability also removes all damage over time effects from the target.',1245 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_summonsuccubus.jpg',1246 },1247 [WarlockMajorGlyph.GlyphOfUnstableAffliction]: {1248 name: 'Glyph of Unstable Affliction',1249 description: 'Decreases the casting time of your Unstable Affliction by 0.2 sec.',1250 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_unstableaffliction_3.jpg',1251 },1252 [WarlockMajorGlyph.GlyphOfVoidwalker]: {1253 name: 'Glyph of Voidwalker',1254 description: 'Increases your Voidwalker\'s total Stamina by 20%.',1255 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_summonvoidwalker.jpg',1256 },1257 },1258 minorGlyphs: {1259 [WarlockMinorGlyph.GlyphOfCurseOfExhausion]: {1260 name: 'Glyph of Curse of Exhausion',1261 description: 'Increases the range of your Curse of Exhaustion spell by 5 yards.',1262 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_grimward.jpg',1263 },1264 [WarlockMinorGlyph.GlyphOfDrainSoul]: {1265 name: 'Glyph of Drain Soul',1266 description: 'Your Drain Soul ability occasionally creates an additional soul shard.',1267 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_haunting.jpg',1268 },1269 [WarlockMinorGlyph.GlyphOfEnslaveDemon]: {1270 name: 'Glyph of Enslave Demon',1271 description: 'Reduces the cast time of your Enslave Demon spell by 50%.',1272 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_enslavedemon.jpg',1273 },1274 [WarlockMinorGlyph.GlyphOfKilrogg]: {1275 name: 'Glyph of Kilrogg',1276 description: 'Increases the movement speed of your Eye of Kilrogg by 50% and allows it to fly in areas where flying mounts are enabled.',1277 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_evileye.jpg',1278 },1279 [WarlockMinorGlyph.GlyphOfSouls]: {1280 name: 'Glyph of Souls',1281 description: 'Reduces the mana cost of your Ritual of Souls spell by 70%.',1282 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_shadesofdarkness.jpg',1283 },1284 [WarlockMinorGlyph.GlyphOfUnendingBreath]: {1285 name: 'Glyph of Unending Breath',1286 description: 'Increases the swim speed of targets affected by your Unending Breath spell by 20%.',1287 iconUrl: 'https://wow.zamimg.com/images/wow/icons/large/spell_shadow_demonbreath.jpg',1288 },1289 },...
preprocess.js
Source:preprocess.js
1/*2 * Inspired by the shp.js , dbf.js by Mano Marks3 *4 * I found there were something wrong to show chinese characters from DBF file,5 * so i added some code that is needed to deal with this problem.6 *7 * Created by Gipong <sheu781230@gmail.com>8 *9 */10var geojsonData = {};11// Shapefile parser, following the specification at12// http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf13SHP = {14 NULL: 0,15 POINT: 1,16 POLYLINE: 3,17 POLYGON: 518};19SHP.getShapeName = function(id) {20 for (name in this) {21 if (id === this[name]) {22 return name;23 }24 }25};26SHPParser = function() {};27SHPParser.load = function(url, callback, returnData) {28 var xhr = new XMLHttpRequest();29 xhr.open('GET', url);30 xhr.responseType = 'arraybuffer';31 xhr.onload = function() {32 geojsonData['shp'] = new SHPParser().parse(xhr.response,url);33 callback(geojsonData['shp'], returnData);34 URL.revokeObjectURL(url);35 };36 xhr.onerror = onerror;37 xhr.send(null);38};39SHPParser.prototype.parse = function(arrayBuffer,url) {40 var o = {},41 dv = new DataView(arrayBuffer),42 idx = 0;43 o.fileName = url;44 o.fileCode = dv.getInt32(idx, false);45 if (o.fileCode != 0x0000270a) {46 throw (new Error("Unknown file code: " + o.fileCode));47 }48 idx += 6*4;49 o.wordLength = dv.getInt32(idx, false);50 o.byteLength = o.wordLength * 2;51 idx += 4;52 o.version = dv.getInt32(idx, true);53 idx += 4;54 o.shapeType = dv.getInt32(idx, true);55 idx += 4;56 o.minX = dv.getFloat64(idx, true);57 o.minY = dv.getFloat64(idx+8, true);58 o.maxX = dv.getFloat64(idx+16, true);59 o.maxY = dv.getFloat64(idx+24, true);60 o.minZ = dv.getFloat64(idx+32, true);61 o.maxZ = dv.getFloat64(idx+40, true);62 o.minM = dv.getFloat64(idx+48, true);63 o.maxM = dv.getFloat64(idx+56, true);64 idx += 8*8;65 o.records = [];66 while (idx < o.byteLength) {67 var record = {};68 record.number = dv.getInt32(idx, false);69 idx += 4;70 record.length = dv.getInt32(idx, false);71 idx += 4;72 try {73 record.shape = this.parseShape(dv, idx, record.length);74 } catch(e) {75 console.log(e, record);76 }77 idx += record.length * 2;78 o.records.push(record);79 }80 return o;81};82SHPParser.prototype.parseShape = function(dv, idx, length) {83 var i=0,84 c=null,85 shape = {};86 shape.type = dv.getInt32(idx, true);87 idx += 4;88 var byteLen = length * 2;89 switch (shape.type) {90 case SHP.NULL: // Null91 break;92 case SHP.POINT: // Point (x,y)93 shape.content = {94 x: dv.getFloat64(idx, true),95 y: dv.getFloat64(idx+8, true)96 };97 break;98 case SHP.POLYLINE: // Polyline (MBR, partCount, pointCount, parts, points)99 case SHP.POLYGON: // Polygon (MBR, partCount, pointCount, parts, points)100 c = shape.content = {101 minX: dv.getFloat64(idx, true),102 minY: dv.getFloat64(idx+8, true),103 maxX: dv.getFloat64(idx+16, true),104 maxY: dv.getFloat64(idx+24, true),105 parts: new Int32Array(dv.getInt32(idx+32, true)),106 points: new Float64Array(dv.getInt32(idx+36, true)*2)107 };108 idx += 40;109 for (i=0; i<c.parts.length; i++) {110 c.parts[i] = dv.getInt32(idx, true);111 idx += 4;112 }113 for (i=0; i<c.points.length; i++) {114 c.points[i] = dv.getFloat64(idx, true);115 idx += 8;116 }117 break;118 case 8: // MultiPoint (MBR, pointCount, points)119 case 11: // PointZ (X, Y, Z, M)120 case 13: // PolylineZ121 case 15: // PolygonZ122 case 18: // MultiPointZ123 case 21: // PointM (X, Y, M)124 case 23: // PolylineM125 case 25: // PolygonM126 case 28: // MultiPointM127 case 31: // MultiPatch128 throw new Error("Shape type not supported: "129 + shape.type + ':' +130 + SHP.getShapeName(shape.type));131 default:132 throw new Error("Unknown shape type at " + (idx-4) + ': ' + shape.type);133 }134 return shape;135};136 /**137 * @fileoverview Parses a .dbf file based on the xbase standards as documented138 * here: http://www.clicketyclick.dk/databases/xbase/format/dbf.html139 * @author Mano Marks140 */141 // Creates global namespace.142DBF = {};143DBFParser = function() {};144DBFParser.load = function(url, encoding, callback, returnData) {145 var xhr = new XMLHttpRequest();146 xhr.open('GET', url);147 xhr.responseType = 'arraybuffer';148 xhr.onload = function() {149 var xhrText = new XMLHttpRequest();150 var xhrTextResponse = '';151 xhrText.open('GET', url);152 xhrText.overrideMimeType('text/plain; charset='+encoding);153 xhrText.onload = function() {154 geojsonData['dbf'] = new DBFParser().parse(xhr.response,url,xhrText.responseText,encoding);155 callback(geojsonData['dbf'], returnData);156 URL.revokeObjectURL(url);157 };158 xhrText.send();159 };160 xhr.onerror = onerror;161 xhr.send(null);162};163DBFParser.prototype.parse = function(arrayBuffer,src,response,encoding) {164 var o = {},165 dv = new DataView(arrayBuffer),166 idx = 0,167 offset = (encoding.match(/big5/i))?2:3;168 o.fileName = src;169 o.version = dv.getInt8(idx, false);170 idx += 1;171 o.year = dv.getUint8(idx) + 1900;172 idx += 1;173 o.month = dv.getUint8(idx);174 idx += 1;175 o.day = dv.getUint8(idx);176 idx += 1;177 o.numberOfRecords = dv.getInt32(idx, true);178 idx += 4;179 o.bytesInHeader = dv.getInt16(idx, true);180 idx += 2;181 o.bytesInRecord = dv.getInt16(idx, true);182 idx += 2;183 //reserved bytes184 idx += 2;185 o.incompleteTransation = dv.getUint8(idx);186 idx += 1;187 o.encryptionFlag = dv.getUint8(idx);188 idx += 1;189 // skip free record thread for LAN only190 idx += 4;191 // reserved for multi-user dBASE in dBASE III+192 idx += 8;193 o.mdxFlag = dv.getUint8(idx);194 idx += 1;195 o.languageDriverId = dv.getUint8(idx);196 idx += 1;197 // reserved bytes198 idx += 2;199 o.fields = [];200 var response_handler = response.split('\r');201 if(response_handler.length > 2) {202 response_handler.pop();203 responseHeader = response_handler.join('\r');204 responseHeader = responseHeader.slice(32, responseHeader.length);205 } else {206 responseHeader = response_handler[0];207 responseHeader = responseHeader.slice(32, responseHeader.length);208 offset = 2;209 }210 var charString = [],211 count = 0,212 index = 0,213 sum = (responseHeader.length+1)/32;214 215 while(responseHeader.length > 0) {216 while(count < 10) {217 try {218 if( encodeURIComponent(responseHeader[z]).match(/%[A-F\d]{2}/g) ) {219 if( encodeURIComponent(responseHeader[z]).match(/%[A-F\d]{2}/g).length > 1 ) {220 count += offset;221 z++;222 } else {223 count += 1;224 z++;225 }226 } else {227 count += 1;228 z++;229 }230 } catch(error) { // avoid malformed URI231 count += 1;232 z++;233 }234 }235 charString.push(responseHeader.slice(0, 10).replace(/\0/g, ''))236 responseHeader = responseHeader.slice(32, responseHeader.length);237 }238 while (true) {239 var field = {},240 nameArray = [];241 for (var i = 0, z=0; i < 10; i++) {242 var letter = dv.getUint8(idx);243 if (letter != 0) nameArray.push(String.fromCharCode(letter));244 idx += 1;245 }246 field.name = charString[index++];247 idx += 1;248 field.type = String.fromCharCode(dv.getUint8(idx));249 idx += 1;250 // Skip field data address251 idx += 4;252 field.fieldLength = dv.getUint8(idx);253 idx += 1;254 //field.decimalCount = dv.getUint8(idx);255 idx += 1;256 // Skip reserved bytes multi-user dBASE.257 idx += 2;258 field.workAreaId = dv.getUint8(idx);259 idx += 1;260 // Skip reserved bytes multi-user dBASE.261 idx += 2;262 field.setFieldFlag = dv.getUint8(idx);263 idx += 1;264 // Skip reserved bytes.265 idx += 7;266 field.indexFieldFlag = dv.getUint8(idx);267 idx += 1;268 o.fields.push(field);269 var test = dv.getUint8(idx);270 // Checks for end of field descriptor array. Valid .dbf files will have this271 // flag.272 if (dv.getUint8(idx) == 0x0D) break;273 }274 idx += 1;275 o.fieldpos = idx;276 o.records = [];277 responseText = response.split('\r')[response.split('\r').length-1];278 for (var i = 0; i < o.numberOfRecords; i++) {279 responseText = responseText.slice(1, responseText.length);280 var record = {};281 for (var j = 0; j < o.fields.length; j++) {282 var charString = [],283 count = 0,284 z = 0;285 while(count < o.fields[j].fieldLength) {286 try {287 if( encodeURIComponent(responseText[z]).match(/%[A-F\d]{2}/g) ) {288 if( encodeURIComponent(responseText[z]).match(/%[A-F\d]{2}/g).length > 1 ) {289 count += offset;290 z++;291 check = 1;292 } else {293 count += 1;294 z++;295 }296 } else {297 count += 1;298 z++;299 }300 } catch(error) { // avoid malformed URI301 count += 1;302 z++;303 }304 }305 charString.push(responseText.slice(0, z).replace(/\0/g, ''));306 responseText = responseText.slice(z, responseText.length);307 if(charString.join('').trim().match(/\d{1}\.\d{11}e\+\d{3}/g)) {308 record[o.fields[j].name] = parseFloat(charString.join('').trim());309 } else {310 record[o.fields[j].name] = charString.join('').trim();311 }312 }313 o.records.push(record);314 }315 return o;...
ZaSkinPoolChooser.js
Source:ZaSkinPoolChooser.js
1/*2 * ***** BEGIN LICENSE BLOCK *****3 * Zimbra Collaboration Suite Web Client4 * Copyright (C) 2006, 2007, 2009, 2010, 2013, 2014, 2016 Synacor, Inc.5 *6 * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the "License");7 * you may not use this file except in compliance with the License.8 * You may obtain a copy of the License at: https://www.zimbra.com/license9 * The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 1510 * have been added to cover use of software over a computer network and provide for limited attribution11 * for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.12 *13 * Software distributed under the License is distributed on an "AS IS" basis,14 * WITHOUT WARRANTY OF ANY KIND, either express or implied.15 * See the License for the specific language governing rights and limitations under the License.16 * The Original Code is Zimbra Open Source Web Client.17 * The Initial Developer of the Original Code is Zimbra, Inc. All rights to the Original Code were18 * transferred by Zimbra, Inc. to Synacor, Inc. on September 14, 2015.19 *20 * All portions of the code are Copyright (C) 2006, 2007, 2009, 2010, 2013, 2014, 2016 Synacor, Inc. All Rights Reserved.21 * ***** END LICENSE BLOCK *****22 */23ZaSkinPoolChooser = function(params) {24 if (arguments.length == 0) return;25/*26 this.splitButtons = params.splitButtons;27 28 if(params.labelWidth)29 this.labelWidth = params.labelWidth;30 else31 this.labelWidth = "300px"32 33 if(params.tableWidth)34 this.tableWidth = params.tableWidth;35 else36 this.tableWidth = "300px";*/37 38 DwtChooser.call(this, params);39}40 41ZaSkinPoolChooser.prototype = new DwtChooser;42ZaSkinPoolChooser.prototype.constructor = ZaSkinPoolChooser;43ZaSkinPoolChooser.prototype._createHtml = 44function() {45 this._sourceListViewDivId = Dwt.getNextId();46 this._targetListViewDivId = Dwt.getNextId();47 this._buttonsDivId = Dwt.getNextId();48 this._removeButtonDivId = Dwt.getNextId();49 if (this._allButtons) {50 this._addAllButtonDivId = Dwt.getNextId();51 this._removeAllButtonDivId = Dwt.getNextId();52 }53 var html = [];54 var idx = 0;55 /*56 // start new table for list views57 html[idx++] = "<table cellspacing=0 cellpadding=0 border=0>";58 html[idx++] = "<colgroup><col width='";59 html[idx++] = this.labelWidth;60 html[idx++] = "'/><col width='";61 html[idx++] = this.tableWidth;62 html[idx++] = "'/></colgroup>";63 html[idx++] = "<tbody>";64 html[idx++] = "<tr><td style='text-align:right;width:";65 html[idx++] = this.labelWidth;66 html[idx++] = "' class='xform_label'";67 html[idx++] = ">" + ZaMsg.NAD_zimbraInstalledSkin + "</td>";68 // source list69 html[idx++] = "<td class='xform_field_container' width='";70 html[idx++] = this.tableWidth;71 html[idx++] = "'><div id='";72 html[idx++] = this._sourceListViewDivId;73 html[idx++] = "'></div></td>";74 html[idx++] = "</tr>";75 // transfer buttons76 html[idx++] = "<tr><td style='text-align:right;width:";77 html[idx++] = this.labelWidth; 78 html[idx++] = "' class='xform_label'";79 html[idx++] = "'> </td>";80 html[idx++] = "<td valign='middle' style='text-align:center;width:";81 html[idx++] = this.tableWidth; 82 html[idx++] = "'><div id='";83 html[idx++] = this._buttonsDivId;84 html[idx++] = "'>";85 html[idx++] = "<table cellspacing=2 cellpadding=0 border=0><tr>";86 if(this.splitButtons) {87 for (var i = 0; i < this._buttonInfo.length; i++) {88 var id = this._buttonInfo[i].id;89 html[idx++] = "<td><div id='";90 html[idx++] = this._buttonDivId[id];91 html[idx++] = "'></div></td>";92 }93 if (this._allButtons) {94 html[idx++] = "<td><div id='";95 html[idx++] = this._addAllButtonDivId;96 html[idx++] = "'></div></td>";97 }98 99 html[idx++] = "</tr><tr>";100 // remove button101 html[idx++] = "<td><div id='";102 html[idx++] = this._removeButtonDivId;103 html[idx++] = "'></div></td>";104 if (this._allButtons) {105 html[idx++] = "<td><div id='";106 html[idx++] = this._removeAllButtonDivId;107 html[idx++] = "'></div></td>";108 }109 } else {110 if (this._allButtons) {111 html[idx++] = "<td><div id='";112 html[idx++] = this._addAllButtonDivId;113 html[idx++] = "'></div></td>";114 }115 for (var i = 0; i < this._buttonInfo.length; i++) {116 var id = this._buttonInfo[i].id;117 html[idx++] = "<td><div id='";118 html[idx++] = this._buttonDivId[id];119 html[idx++] = "'></div></td>";120 }121 122 // remove button123 html[idx++] = "<td><div id='";124 html[idx++] = this._removeButtonDivId;125 html[idx++] = "'></div></td>";126 if (this._allButtons) {127 html[idx++] = "<td><div id='";128 html[idx++] = this._removeAllButtonDivId;129 html[idx++] = "'></div></td>";130 }131 }132 html[idx++] = "</tr></table>";133 html[idx++] = "</div></td></tr>";134 html[idx++] = "<tr><td style='text-align:right' class='xform_label'>" + ZaMsg.NAD_zimbraAvailableSkin + "</td>";135 // target list136 html[idx++] = "<td class='xform_field_container' width='";137 html[idx++] = this.tableWidth;138 html[idx++] = "'><div id='";139 html[idx++] = this._targetListViewDivId;140 html[idx++] = "'></div></td>";141 html[idx++] = "</tr></tbody></table>";142 */143 144 // start new table for list views145 html[idx++] = "<table cellspacing=0 cellpadding=0 border=0 width=100%>";146 html[idx++] = "<colgroup><col width='40%'/><col width='20%'/><col width='40%'/> </colgroup>";147 html[idx++] = "<tbody>";148 html[idx++] = "<tr><td style='text-align:center' class='xform_label'>" + ZaMsg.NAD_zimbraInstalledSkin + "</td><td> </td><td style='text-align:center' class='xform_label'>" + ZaMsg.NAD_zimbraAvailableSkin + "</td</tr>"149 html[idx++] = "<tr>";150 // source list151 html[idx++] = "<td align='center' style='text-align:center' id='";152 html[idx++] = this._sourceListViewDivId;153 html[idx++] = "'></td>";154 // transfer buttons155 html[idx++] = "<td valign='middle' style='text-align:center' id='";156 html[idx++] = this._buttonsDivId;157 html[idx++] = "'>";158 if (this._allButtons) {159 html[idx++] = "<div id='";160 html[idx++] = this._addAllButtonDivId;161 html[idx++] = "'></div><br>";162 }163 for (var i = 0; i < this._buttonInfo.length; i++) {164 var id = this._buttonInfo[i].id;165 html[idx++] = "<div id='";166 html[idx++] = this._buttonDivId[id];167 html[idx++] = "'></div><br>";168 }169 // remove button170 html[idx++] = "<br><div id='";171 html[idx++] = this._removeButtonDivId;172 html[idx++] = "'></div>";173 if (this._allButtons) {174 html[idx++] = "<br><div id='";175 html[idx++] = this._removeAllButtonDivId;176 html[idx++] = "'></div><br>";177 }178 html[idx++] = "</td>";179 // target list180 html[idx++] = "<td align='center' style='text-align:center' id='";181 html[idx++] = this._targetListViewDivId;182 html[idx++] = "'></td>"; 183 html[idx++] = "</tr></tbody></table>"; 184 this.getHtmlElement().innerHTML = html.join("");...
CSSValueExpression.js
Source:CSSValueExpression.js
1//.CommonJS2var CSSOM = {3 CSSValue: require('./CSSValue').CSSValue4};5///CommonJS6/**7 * @constructor8 * @see http://msdn.microsoft.com/en-us/library/ms537634(v=vs.85).aspx9 *10 */11CSSOM.CSSValueExpression = function CSSValueExpression(token, idx) {12 this._token = token;13 this._idx = idx;14};15CSSOM.CSSValueExpression.prototype = new CSSOM.CSSValue();16CSSOM.CSSValueExpression.prototype.constructor = CSSOM.CSSValueExpression;17/**18 * parse css expression() value19 *20 * @return {Object}21 * - error:22 * or23 * - idx:24 * - expression:25 *26 * Example:27 *28 * .selector {29 * zoom: expression(documentElement.clientWidth > 1000 ? '1000px' : 'auto');30 * }31 */32CSSOM.CSSValueExpression.prototype.parse = function() {33 var token = this._token,34 idx = this._idx;35 var character = '',36 expression = '',37 error = '',38 info,39 paren = [];40 for (; ; ++idx) {41 character = token.charAt(idx);42 // end of token43 if (character === '') {44 error = 'css expression error: unfinished expression!';45 break;46 }47 switch(character) {48 case '(':49 paren.push(character);50 expression += character;51 break;52 case ')':53 paren.pop(character);54 expression += character;55 break;56 case '/':57 if ((info = this._parseJSComment(token, idx))) { // comment?58 if (info.error) {59 error = 'css expression error: unfinished comment in expression!';60 } else {61 idx = info.idx;62 // ignore the comment63 }64 } else if ((info = this._parseJSRexExp(token, idx))) { // regexp65 idx = info.idx;66 expression += info.text;67 } else { // other68 expression += character;69 }70 break;71 case "'":72 case '"':73 info = this._parseJSString(token, idx, character);74 if (info) { // string75 idx = info.idx;76 expression += info.text;77 } else {78 expression += character;79 }80 break;81 default:82 expression += character;83 break;84 }85 if (error) {86 break;87 }88 // end of expression89 if (paren.length === 0) {90 break;91 }92 }93 var ret;94 if (error) {95 ret = {96 error: error97 };98 } else {99 ret = {100 idx: idx,101 expression: expression102 };103 }104 return ret;105};106/**107 *108 * @return {Object|false}109 * - idx:110 * - text:111 * or112 * - error:113 * or114 * false115 *116 */117CSSOM.CSSValueExpression.prototype._parseJSComment = function(token, idx) {118 var nextChar = token.charAt(idx + 1),119 text;120 if (nextChar === '/' || nextChar === '*') {121 var startIdx = idx,122 endIdx,123 commentEndChar;124 if (nextChar === '/') { // line comment125 commentEndChar = '\n';126 } else if (nextChar === '*') { // block comment127 commentEndChar = '*/';128 }129 endIdx = token.indexOf(commentEndChar, startIdx + 1 + 1);130 if (endIdx !== -1) {131 endIdx = endIdx + commentEndChar.length - 1;132 text = token.substring(idx, endIdx + 1);133 return {134 idx: endIdx,135 text: text136 };137 } else {138 var error = 'css expression error: unfinished comment in expression!';139 return {140 error: error141 };142 }143 } else {144 return false;145 }146};147/**148 *149 * @return {Object|false}150 * - idx:151 * - text:152 * or 153 * false154 *155 */156CSSOM.CSSValueExpression.prototype._parseJSString = function(token, idx, sep) {157 var endIdx = this._findMatchedIdx(token, idx, sep),158 text;159 if (endIdx === -1) {160 return false;161 } else {162 text = token.substring(idx, endIdx + sep.length);163 return {164 idx: endIdx,165 text: text166 };167 }168};169/**170 * parse regexp in css expression171 *172 * @return {Object|false}173 * - idx:174 * - regExp:175 * or 176 * false177 */178/*179all legal RegExp180 181/a/182(/a/)183[/a/]184[12, /a/]185!/a/186+/a/187-/a/188* /a/189/ /a/190%/a/191===/a/192!==/a/193==/a/194!=/a/195>/a/196>=/a/197</a/198<=/a/199&/a/200|/a/201^/a/202~/a/203<</a/204>>/a/205>>>/a/206&&/a/207||/a/208?/a/209=/a/210,/a/211 delete /a/212 in /a/213instanceof /a/214 new /a/215 typeof /a/216 void /a/217*/218CSSOM.CSSValueExpression.prototype._parseJSRexExp = function(token, idx) {219 var before = token.substring(0, idx).replace(/\s+$/, ""),220 legalRegx = [221 /^$/,222 /\($/,223 /\[$/,224 /\!$/,225 /\+$/,226 /\-$/,227 /\*$/,228 /\/\s+/,229 /\%$/,230 /\=$/,231 /\>$/,232 /<$/,233 /\&$/,234 /\|$/,235 /\^$/,236 /\~$/,237 /\?$/,238 /\,$/,239 /delete$/,240 /in$/,241 /instanceof$/,242 /new$/,243 /typeof$/,244 /void$/245 ];246 var isLegal = legalRegx.some(function(reg) {247 return reg.test(before);248 });249 if (!isLegal) {250 return false;251 } else {252 var sep = '/';253 // same logic as string254 return this._parseJSString(token, idx, sep);255 }256};257/**258 *259 * find next sep(same line) index in `token`260 *261 * @return {Number}262 *263 */264CSSOM.CSSValueExpression.prototype._findMatchedIdx = function(token, idx, sep) {265 var startIdx = idx,266 endIdx;267 var NOT_FOUND = -1;268 while(true) {269 endIdx = token.indexOf(sep, startIdx + 1);270 if (endIdx === -1) { // not found271 endIdx = NOT_FOUND;272 break;273 } else {274 var text = token.substring(idx + 1, endIdx),275 matched = text.match(/\\+$/);276 if (!matched || matched[0] % 2 === 0) { // not escaped277 break;278 } else {279 startIdx = endIdx;280 }281 }282 }283 // boundary must be in the same line(js sting or regexp)284 var nextNewLineIdx = token.indexOf('\n', idx + 1);285 if (nextNewLineIdx < endIdx) {286 endIdx = NOT_FOUND;287 }288 return endIdx;289};290//.CommonJS291exports.CSSValueExpression = CSSOM.CSSValueExpression;...
Using AI Code Generation
1import { storiesOf } from '@storybook/react';2import { action } from '@storybook/addon-actions';3import { linkTo } from '@storybook/addon-links';4import { Button, Welcome } from 'idx/components';5storiesOf('Welcome', module).add('to Storybook', () => <Welcome showApp={linkTo('Button')} />);6storiesOf('Button', module)7 .add('with text', () => (8 <Button onClick={action('clicked')}>Hello Button</Button>9 .add('with some emoji', () => (10 <Button onClick={action('clicked')}><span role="img" aria-label="so cool">😀 😎 👍 💯</span></Button>11 ));12const path = require('path');13module.exports = {14 module: {15 {16 path.resolve(__dirname, 'src'),17 path.resolve(__dirname, 'test')18 options: {19 ['module-resolver', {20 alias: {21 }22 }]23 }24 }25 }26};27{28 ["module-resolver", {29 }]30}31For `webpack`, you can use the `resolve.root` option to specify a root directory. All modules that are imported from a subdirectory of that root will be resolved from that root directory. For example, if your root is `./src`, then `import foo from './bar
Using AI Code Generation
1import { idx } from 'storybook-root';2import { storiesOf } from '@storybook/react';3import { action } from '@storybook/addon-actions';4import { linkTo } from '@storybook/addon-links';5import { Welcome } from '@storybook/react/demo';6import Button from './Button';7import Welcome from './Welcome';8storiesOf('Welcome', module).add('to Storybook', () => <Welcome showApp={linkTo('Button')} />);9storiesOf('Button', module)10 .add('with text', () => <Button onClick={action('clicked')}>Hello Button</Button>)11 .add('with some emoji', () => (12 <Button onClick={action('clicked')}>13 ));14import { idx } from 'storybook-root';15import { shallow } from 'enzyme';16import React from 'react';17import Button from './Button';18describe('Button', () => {19 it('should render correctly', () => {20 const component = shallow(<Button />);21 expect(component).toMatchSnapshot();22 });23});24import { idx } from 'storybook-root';25import { shallow } from 'enzyme';26import React from 'react';27import Welcome from './Welcome';28describe('Welcome', () => {29 it('should render correctly', () => {30 const component = shallow(<Welcome />);31 expect(component).toMatchSnapshot();32 });33});34{35 "scripts": {36 },37 "devDependencies": {
Using AI Code Generation
1import { idx } from "storybook-root";2import { idx } from "storybook-root";3import { idx } from "storybook-root";4import { idx } from "storybook-root";5import { idx } from "storybook-root";6import { idx } from "storybook-root";7import { idx } from "storybook-root";8import { idx } from "storybook-root";9import { idx } from "storybook-root";10import { idx } from "storybook-root";11import { idx } from "storybook-root";12import { idx } from "storybook-root";13import { idx } from "storybook-root";14import { idx } from "storybook-root";15import { idx } from "storybook-root";16import { idx } from "storybook-root";17import { idx } from "storybook-root";18import { idx } from "storybook-root";19import { idx } from "storybook-root";20import { idx } from "storybook-root";21MIT © [Nikhil](
Using AI Code Generation
1const root = require('storybook-root-require');2const { idx } = require(root('src/utils/idx'));3const root = require('storybook-root-require');4const { idx } = require(root('src/utils/idx'));5const root = require('storybook-root-require');6const { idx } = require(root('src/utils/idx'));7const root = require('storybook-root-require');8const { idx } = require(root('src/utils/idx'));9const data = {10 a: {11 b: {12 },13 },14};15const root = require('storybook-root-require');16const { idx } = require(root('src/utils/idx'));17const data = {18 a: {19 b: {20 },21 },22};23const root = require('storybook-root-require');24const { idx } = require(root('src/utils/idx'));25const data = {26 a: {27 b: {28 },29 },30};31const root = require('storybook-root-require');32const { idx } = require(root('src/utils/
Using AI Code Generation
1const path = require("path");2const root = require("storybook-root-require").default;3const pkg = require(root("package.json"));4const src = root("src");5const dist = root("dist");6const test = root("test");7const rootPath = root();8- [app-root-path](
Using AI Code Generation
1const { idx } = require('storybook-root/idx');2const { prop } = require('ramda');3const { path } = require('ramda');4const { pathOr } = require('ramda');5const { propOr } = require('ramda');6const obj = {7 a: {8 b: {9 }10 }11};12const { idx } = require('storybook-root/idx');13const { prop } = require('ramda');14const { path } = require('ramda');15const { pathOr } = require('ramda');16const { propOr } = require('ramda');17const obj = {18 a: {19 b: {20 }21 }22};23import { idx } from 'storybook-root/idx';24import { prop } from 'ramda';
Using AI Code Generation
1const { idx } = require('storybook-root-cause');2test('test', () => {3 const { getByText, getByTestId } = render(<App />);4 const element = getByText(/learn react/i);5 expect(element).toBeInTheDocument();6 const element2 = idx(() => getByTestId('test-id'));7 expect(element2).toBeInTheDocument();8});
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!