From f8613398848ff7ff8a0c5ee753714e6fc8135aa1 Mon Sep 17 00:00:00 2001 From: Alec Date: Mon, 8 Nov 2021 18:26:07 -0500 Subject: [PATCH] beginning of large-scale redesign --- Procfile | 2 +- README.md | 6 +- _config.yml | 2 - assets/fonts/Diavlo_BLACK_II_37.otf | Bin 33964 -> 0 bytes assets/fonts/Diavlo_BOLD_II_37.otf | Bin 33460 -> 0 bytes assets/fonts/Diavlo_BOOK_II_37.otf | Bin 32704 -> 0 bytes assets/fonts/Diavlo_LIGHT_II_37.otf | Bin 33404 -> 0 bytes assets/fonts/Diavlo_MEDIUM_II_37.otf | Bin 34696 -> 0 bytes assets/fonts/REVOLUTION.ttf | Bin 18640 -> 0 bytes assets/fonts/manrope-light.otf | Bin 70796 -> 0 bytes assets/images/Wolf_Logo.gif | Bin 206508 -> 0 bytes assets/images/custom.svg | 107 - assets/images/delete.svg | 14 - assets/images/gallery.svg | 90 - assets/images/import.svg | 1 - assets/images/info.svg | 14 - assets/images/list.svg | 109 - assets/images/pause-button.svg | 8 - assets/images/pencil.svg | 14 - assets/images/pencil_green.svg | 14 - assets/images/play-button.svg | 7 - assets/images/question_mark.svg | 14 - assets/images/roles-small/DreamWolf.png | Bin 2286 -> 0 bytes assets/images/roles-small/Hunter.png | Bin 1117 -> 0 bytes assets/images/roles-small/Mason.png | Bin 753 -> 0 bytes assets/images/roles-small/Minion.png | Bin 1025 -> 0 bytes assets/images/roles-small/Seer.png | Bin 871 -> 0 bytes assets/images/roles-small/Shadow.png | Bin 824 -> 0 bytes assets/images/roles-small/Sorcerer.png | Bin 1102 -> 0 bytes assets/images/roles-small/Villager.png | Bin 1012 -> 0 bytes assets/images/roles-small/wolf_logo.png | Bin 3921 -> 0 bytes assets/images/roles/DreamWolf.png | Bin 8886 -> 0 bytes assets/images/roles/Hunter.png | Bin 1875 -> 0 bytes assets/images/roles/Mason.png | Bin 1364 -> 0 bytes assets/images/roles/Minion.png | Bin 1810 -> 0 bytes assets/images/roles/Seer.png | Bin 1401 -> 0 bytes assets/images/roles/Shadow.png | Bin 1178 -> 0 bytes assets/images/roles/Sorcerer.png | Bin 1903 -> 0 bytes assets/images/roles/Villager.png | Bin 1773 -> 0 bytes assets/images/screenshots/create.PNG | Bin 44673 -> 0 bytes assets/images/screenshots/game.PNG | Bin 35278 -> 0 bytes assets/images/screenshots/home.PNG | Bin 66356 -> 0 bytes assets/images/screenshots/hunter.PNG | Bin 34001 -> 0 bytes assets/images/screenshots/killed.PNG | Bin 31479 -> 0 bytes assets/images/screenshots/lobby.PNG | Bin 24781 -> 0 bytes assets/images/vanilla_js.png | Bin 218 -> 0 bytes {javascript => client/config}/cards.js | 27 +- .../android-chrome-192x192.png | Bin 0 -> 16342 bytes .../android-chrome-256x256.png | Bin 0 -> 20372 bytes client/favicon_package/apple-touch-icon.png | Bin 0 -> 15829 bytes client/favicon_package/browserconfig.xml | 9 + client/favicon_package/favicon-16x16.png | Bin 0 -> 1158 bytes client/favicon_package/favicon-32x32.png | Bin 0 -> 2093 bytes client/favicon_package/favicon.ico | Bin 0 -> 15086 bytes client/favicon_package/mstile-150x150.png | Bin 0 -> 12089 bytes client/favicon_package/safari-pinned-tab.svg | 54 + client/favicon_package/site.webmanifest | 19 + .../roles => client/images}/Werewolf.png | Bin .../images/Werewolf_Small.png | Bin client/scripts/create.js | 3 + .../scripts/game.js | 0 client/scripts/home.js | 3 + client/styles/GLOBAL.css | 17 + client/styles/create.css | 0 client/styles/home.css | 0 client/views/404.html | 24 + client/views/create.html | 38 + client/views/home.html | 33 + .../roles-small/Werewolf.png => favicon.ico | Bin javascript/game.js | 456 - javascript/index.js | 27 - javascript/join.js | 45 - javascript/modules/card-manager.js | 133 - javascript/setup.js | 585 -- javascript/util.js | 50 - lib/jasmine-3.5.0/boot.js | 136 - lib/jasmine-3.5.0/jasmine-html.js | 817 -- lib/jasmine-3.5.0/jasmine.css | 128 - lib/jasmine-3.5.0/jasmine.js | 8218 ----------------- lib/jasmine-3.5.0/jasmine_favicon.png | Bin 1486 -> 0 bytes manifest.json | 23 + package.json | 5 +- server-helper.js | 206 - server.js | 79 - server/main.js | 94 + .../logger.js => server/modules/Logger.js | 8 +- server/routes/favicon-router.js | 18 + server/routes/router.js | 13 + server/routes/static-router.js | 66 + server/routes/util.js | 9 + spec/support/jasmine.json | 11 - spec/unit/ServerSpec.js | 65 - stylesheets/styles.css | 1918 ---- views/create_game.html | 165 - views/faq.html | 30 - views/game.html | 27 - views/index.html | 57 - views/join_game.html | 41 - views/learn.html | 60 - 99 files changed, 436 insertions(+), 13683 deletions(-) delete mode 100644 _config.yml delete mode 100644 assets/fonts/Diavlo_BLACK_II_37.otf delete mode 100644 assets/fonts/Diavlo_BOLD_II_37.otf delete mode 100644 assets/fonts/Diavlo_BOOK_II_37.otf delete mode 100644 assets/fonts/Diavlo_LIGHT_II_37.otf delete mode 100644 assets/fonts/Diavlo_MEDIUM_II_37.otf delete mode 100644 assets/fonts/REVOLUTION.ttf delete mode 100644 assets/fonts/manrope-light.otf delete mode 100644 assets/images/Wolf_Logo.gif delete mode 100644 assets/images/custom.svg delete mode 100644 assets/images/delete.svg delete mode 100644 assets/images/gallery.svg delete mode 100644 assets/images/import.svg delete mode 100644 assets/images/info.svg delete mode 100644 assets/images/list.svg delete mode 100644 assets/images/pause-button.svg delete mode 100644 assets/images/pencil.svg delete mode 100644 assets/images/pencil_green.svg delete mode 100644 assets/images/play-button.svg delete mode 100644 assets/images/question_mark.svg delete mode 100644 assets/images/roles-small/DreamWolf.png delete mode 100644 assets/images/roles-small/Hunter.png delete mode 100644 assets/images/roles-small/Mason.png delete mode 100644 assets/images/roles-small/Minion.png delete mode 100644 assets/images/roles-small/Seer.png delete mode 100644 assets/images/roles-small/Shadow.png delete mode 100644 assets/images/roles-small/Sorcerer.png delete mode 100644 assets/images/roles-small/Villager.png delete mode 100644 assets/images/roles-small/wolf_logo.png delete mode 100644 assets/images/roles/DreamWolf.png delete mode 100644 assets/images/roles/Hunter.png delete mode 100644 assets/images/roles/Mason.png delete mode 100644 assets/images/roles/Minion.png delete mode 100644 assets/images/roles/Seer.png delete mode 100644 assets/images/roles/Shadow.png delete mode 100644 assets/images/roles/Sorcerer.png delete mode 100644 assets/images/roles/Villager.png delete mode 100644 assets/images/screenshots/create.PNG delete mode 100644 assets/images/screenshots/game.PNG delete mode 100644 assets/images/screenshots/home.PNG delete mode 100644 assets/images/screenshots/hunter.PNG delete mode 100644 assets/images/screenshots/killed.PNG delete mode 100644 assets/images/screenshots/lobby.PNG delete mode 100644 assets/images/vanilla_js.png rename {javascript => client/config}/cards.js (53%) create mode 100644 client/favicon_package/android-chrome-192x192.png create mode 100644 client/favicon_package/android-chrome-256x256.png create mode 100644 client/favicon_package/apple-touch-icon.png create mode 100644 client/favicon_package/browserconfig.xml create mode 100644 client/favicon_package/favicon-16x16.png create mode 100644 client/favicon_package/favicon-32x32.png create mode 100644 client/favicon_package/favicon.ico create mode 100644 client/favicon_package/mstile-150x150.png create mode 100644 client/favicon_package/safari-pinned-tab.svg create mode 100644 client/favicon_package/site.webmanifest rename {assets/images/roles => client/images}/Werewolf.png (100%) rename assets/images/favicon.ico => client/images/Werewolf_Small.png (100%) create mode 100644 client/scripts/create.js rename javascript/modules/heroku-client.js => client/scripts/game.js (100%) create mode 100644 client/scripts/home.js create mode 100644 client/styles/GLOBAL.css create mode 100644 client/styles/create.css create mode 100644 client/styles/home.css create mode 100644 client/views/404.html create mode 100644 client/views/create.html create mode 100644 client/views/home.html rename assets/images/roles-small/Werewolf.png => favicon.ico (100%) delete mode 100644 javascript/game.js delete mode 100644 javascript/index.js delete mode 100644 javascript/join.js delete mode 100644 javascript/modules/card-manager.js delete mode 100644 javascript/setup.js delete mode 100644 javascript/util.js delete mode 100644 lib/jasmine-3.5.0/boot.js delete mode 100644 lib/jasmine-3.5.0/jasmine-html.js delete mode 100644 lib/jasmine-3.5.0/jasmine.css delete mode 100644 lib/jasmine-3.5.0/jasmine.js delete mode 100644 lib/jasmine-3.5.0/jasmine_favicon.png create mode 100644 manifest.json delete mode 100644 server-helper.js delete mode 100644 server.js create mode 100644 server/main.js rename javascript/modules/logger.js => server/modules/Logger.js (76%) create mode 100644 server/routes/favicon-router.js create mode 100644 server/routes/router.js create mode 100644 server/routes/static-router.js create mode 100644 server/routes/util.js delete mode 100644 spec/support/jasmine.json delete mode 100644 spec/unit/ServerSpec.js delete mode 100644 stylesheets/styles.css delete mode 100644 views/create_game.html delete mode 100644 views/faq.html delete mode 100644 views/game.html delete mode 100644 views/index.html delete mode 100644 views/join_game.html delete mode 100644 views/learn.html diff --git a/Procfile b/Procfile index 489b270..8fbd1b9 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: node server.js +web: node main.js diff --git a/README.md b/README.md index 4ec0518..8e86ca0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This app is still in active development. The latest deployment can be found

To turn on logging at the debug level, add the `debug` argument like so: -`node server.js -- debug` +`node main.js -- debug` # Contributing diff --git a/_config.yml b/_config.yml deleted file mode 100644 index f3da9b6..0000000 --- a/_config.yml +++ /dev/null @@ -1,2 +0,0 @@ -theme: jekyll-theme-minimal -logo: /assets/images/roles-small/wolf_logo.png diff --git a/assets/fonts/Diavlo_BLACK_II_37.otf b/assets/fonts/Diavlo_BLACK_II_37.otf deleted file mode 100644 index eb42a9e284e4676870866350506ccea773750f9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33964 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 E1^fP@6951J diff --git a/assets/fonts/Diavlo_BOLD_II_37.otf b/assets/fonts/Diavlo_BOLD_II_37.otf deleted file mode 100644 index 31aeb803f55f39289b7499fd3e3c11c8bf20e36a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33460 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%0Akz^!Fb=+N|{Z-+fsI<-YmD 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 LgmH40;;;V)H^7I` diff --git a/assets/fonts/Diavlo_LIGHT_II_37.otf b/assets/fonts/Diavlo_LIGHT_II_37.otf deleted file mode 100644 index 18528eda37c4a35c88977ab405eb97f0c69416a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33404 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 Msr29Khg|gk2Pzv9i~s-t diff --git a/assets/fonts/Diavlo_MEDIUM_II_37.otf b/assets/fonts/Diavlo_MEDIUM_II_37.otf deleted file mode 100644 index 1cfea27f762865ca1e288f466c9d39b230c9dd38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34696 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

`&} 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 b`$qaOXYrD=3^>Vs;F7j6y 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 F{{WN<;v4_~ diff --git a/assets/fonts/manrope-light.otf b/assets/fonts/manrope-light.otf deleted file mode 100644 index 2b319153061ba63951d431fc7129cd96f262d739..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70796 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 z 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 DC*d*Z diff --git a/assets/images/Wolf_Logo.gif b/assets/images/Wolf_Logo.gif deleted file mode 100644 index fe14c7409dc2b1686997ec5e7f145667d8cf18d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206508 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 diff --git a/assets/images/custom.svg b/assets/images/custom.svg deleted file mode 100644 index 8eb5fe6..0000000 --- a/assets/images/custom.svg +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/assets/images/delete.svg b/assets/images/delete.svg deleted file mode 100644 index 8938fe0..0000000 --- a/assets/images/delete.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - background - - - - - - - Layer 1 - - - diff --git a/assets/images/gallery.svg b/assets/images/gallery.svg deleted file mode 100644 index 56a2e0f..0000000 --- a/assets/images/gallery.svg +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/assets/images/import.svg b/assets/images/import.svg deleted file mode 100644 index 4507e6c..0000000 --- a/assets/images/import.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/images/info.svg b/assets/images/info.svg deleted file mode 100644 index 8a71b01..0000000 --- a/assets/images/info.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - background - - - - - - - Layer 1 - - - diff --git a/assets/images/list.svg b/assets/images/list.svg deleted file mode 100644 index d3d8453..0000000 --- a/assets/images/list.svg +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/assets/images/pause-button.svg b/assets/images/pause-button.svg deleted file mode 100644 index 8ac6ece..0000000 --- a/assets/images/pause-button.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - Layer 1 - - - - - diff --git a/assets/images/pencil.svg b/assets/images/pencil.svg deleted file mode 100644 index 584c54e..0000000 --- a/assets/images/pencil.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - background - - - - - - - Layer 1 - - - diff --git a/assets/images/pencil_green.svg b/assets/images/pencil_green.svg deleted file mode 100644 index 53c2bd5..0000000 --- a/assets/images/pencil_green.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - background - - - - - - - Layer 1 - - - diff --git a/assets/images/play-button.svg b/assets/images/play-button.svg deleted file mode 100644 index 96e17dc..0000000 --- a/assets/images/play-button.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - Layer 1 - - - - diff --git a/assets/images/question_mark.svg b/assets/images/question_mark.svg deleted file mode 100644 index a90b9f9..0000000 --- a/assets/images/question_mark.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - background - - - - - - - Layer 1 - - - diff --git a/assets/images/roles-small/DreamWolf.png b/assets/images/roles-small/DreamWolf.png deleted file mode 100644 index 67b7a20976a5369f96de952e9efa910ae5fbb82f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2286 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 II;Vst0H-O#?EnA( diff --git a/assets/images/roles-small/Mason.png b/assets/images/roles-small/Mason.png deleted file mode 100644 index 7182d35674f6dd0d80910feaa978a971b6ffe47b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 753 zcmeAS@N?(olHy`uVBq!ia0vp^DIm14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>I{@#?djqel5y|twS#$w z6$D%Z3lb+a%>DL%|F#1R$JG49ZInW1?OriSr^bXWSXzB7%nT(QuUFh$+c5I&U1II0?F1P>YJLrU5e5Ts8H?dHt*omiV(vH18 z`&E88Z*srj(*L0R1Eb;>HZ?0vmlnB}yzQ%G-ihb*RrdZpz`YMJ0^u!7AI9)u0DTKv2Kcq$ikAE(#)2Nd&)1q7Fe(Q z_VnE?cFh83-N9i#Y29yD*Jjlsk+6nvU`(o(xJHzuB$lLFB^RXvDF!10LrYx)OI<_L w5Can{LlY|lV_hJ_z+n2qw>2mla`RI%(<*Umc=jjs08j&ir>mdKI;Vst0FbsMRR910 diff --git a/assets/images/roles-small/Minion.png b/assets/images/roles-small/Minion.png deleted file mode 100644 index ead2d61387c755c52310e7f2a79372cdcc98239b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmeAS@N?(olHy`uVBq!ia0vp^DIm14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>p1!W^ zk2(2S_>_%ixpp%!FfI0UaSX}0_x5^b@ht-ZwuF;R*ESvCypj3)e|=_nduh7SwS(

    n$!^hMWr8X1O&&tx5 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 diff --git a/assets/images/screenshots/hunter.PNG b/assets/images/screenshots/hunter.PNG deleted file mode 100644 index abbb19b6292c1f9452c60978756f49d41f3f309a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34001 zcmeFZcT`ht(=UvQBA^se5T!{Gk*3tpMWjhnP>`-SO==7fkgkZ*JAyy}k={#y&{3oZ zLa(7{=m{aT(979)KhGoH=l#|?-&yNh-#Kf&e;5~G?|scR^P8F9%r%?9N1DnPDXvkF zkdRzdRe7LILUIa4LUQKT`E$TGO6DZT|DAHuR=!VCh+hluCd0z_lUfFObV9$Opt>emF8Ph=Q{ADy!IUgv-aIS=8H>B$X%dn*cWAgtNba5f z@6Z3+HITrM%A%6JN<#9vaAk+@vH|QEaQFUy`MlWplOs&m>d-MH;m)Fvs4dC}`aM)U zM=_Wo&jJ~19m}Wx#i4q~QgjPzJ7A%cnQNNtlq|V6GF=CicLU6DkJ+iMm=;?LVaTTcHsEf2L>gM{7;757SoZn7Nr!&7eNH#L8_E?LrW6aVvg|5SZn^9 zT6NM6KX>P>XpiOl-Ud~sjWcrE=mJv;T=glLJja-UOH2_x-g78BA|Rl6CRuH2zhY*e zQlJm**!;1-ZXHf~{A78ha0zk2T*k>A>sP&8bQ@yr*(Ou_`ENj{NNg^+C3N?p!Ft0c z;!{#`8tKhEYts16-pL((lH)yI6}IXc+OqCAL*cpJZ@%#2`-a(`L-nF1VW02U?dSUy zJ-%(L)vnvV?N>h122VHB-E^N9mkfY^xLW>K+87ZfWiy;dotyLhz#{kV<}!bkWO9`} zGd7-(#x;Z%GD=@YGubPb@pq$K=Pt^rhDzIpT!Ri-+f>RhkHzk2&7nR%5-ZX+^CJ57 ze8F8y4XfIggib|YA4J)|w{WR1d0fx{E=d5{_*um}SN?3dK1dWFUr3r4S_|pjJw!dM zL~eJCs3a{5$7-fj>EY;&U%F$jjs@JP)oWuy=b>^OsK2pMeZXLc&|3#b3`OIQij){R2d; zYw`|HadBF@9C(wDX@WuN2?R*s>w{(ISqZ`zZiA>WCCzFbq*G}#WLIv!s7$xqH z$c=^sLz_B&GE6=+q|>BfkDag|o4$j)ZS*1Aq*e8Oto4trtcPAIN=JkDbtTh+DQNM8tcFuJ+WjIHfJ(3mLA!+aRmS1`8Nc zo+u5F7eQL~iZv&$T?&a_|8~oGw7&PdV;ydJ&}MoLzvEEDBsDeiMNGE(nTAY_k)Ekb zHZLUMn_{9~&T9RRz<2N?9MOtpo7qO5N*1HSUl16_Rb#GAi4i%I5LJ7xW>OxOBXqyZ zn{P^HWBf1Z7lb<7@QlJ=xOXzhFqR&4@x^j-T7jB!&>LuhZ3D% zJ^FbKziXI>DAmw&v8MF!y9R${Twfk(Hh@izGJxd~-@wHueB z{+1(AK~U5&xM_R*wkX;@_1I4v7Tcda%HX&f9khO4)W+KTf%(RnA6ISNd7K6fCU!$N z-C||D{H}q|rM8I`)ISZC`zCSIy+$u@c&g*$=+4YV#*bO+J8h6EmyhoI@kA{2fWs`! zpkY@Y+L|AHdbylAHB3Tb85s)tK76J(3P&-MKMSF5A=-P&txL>@_peFp`k4!67M_Jr z^gZP*VqNdDeL!OsG(yetX#u6>{N3k<`Tat0#kf1O66y&xIA{iLB{e^d zD+=|tG~~K;{8Jyr9eq2?UsZTV)2LQf&(w)!tmlD1e1yl;T+erZkNLPX-6kGHPiF$% zN?M)#J(%^~@v=7^ey^hT=%-CPt`9O>xy_-=X516iQ-jN&ZD`PBiMHkJpJ7tU9?f$y zE^J0jJUf&AMb~_m-ZqSmVeUJ0`k`ota6?IaCQC)l&)L*dTgF*86X?x0(ri1+nr-km z`|FqwuEv{cz8q{C1vK@1<|1}f+!06N^I8RYgD@83U%fZ?^a~)=R*H#K!zPQ$lmQzm z1~fMWtrGOCdV8Ck)FoT={FgDo*;pg6)1BdGuF`k95+*N0&Mo;=ktsA43>IL2<_v8- zdC6twS{eIsTxyh4tx*VuvD8)UQ~AmRmV zU?%;tmnE(yTsDd@r=t3s+jrlFl3>)|`?7U}T~%kh!;y*|7B_UMd%={Y2}J$`5Kb40 zTO%7B8^jI778nkq_KA&{M0Da!)P3GDx%;5Qk{=b9y58hwqgK$=6o`WuJF{~j=K=Hb znR?~Hs9fLDbDu>^pp!RolJ1W33E&6wLn>PFVxR9ejqXx6XJ4VQqG%dM-=0vSQHU~t{ySC53{KG>;0N>)#}$T_J#wygLxb| z{v~&}Gj~ITOJ4;)$qU!E@2FN%lB--xnJp~nb^C~UH_5G4cYng9)wq0Zvd6&F^`-4w z5E|A$5H;^;s%w2CmO13o?c(iS%ksop!`Ht8kMJ_D^p?|nCKUT~7Lhv|-IDz{>vDK8 zQBJcU2NQB9{JJx^wd5Ri)v(XB{Y&-$_%&75j$Wpy0=0AQ1>L6oI;q8u5qnct*E zRhH*Bx&)OA0@mje!Hr%hZeeKV&{!lyA@byT>!)wG6Lod#>qi@L{LSv4HuJP{ z4F$9Ji{H>QSV@0M-*$<9h{$VN*S@M4f5m3?ExEr*wYL4;I0~^sZMyKyI9oN8EWwk% zz)VYeRH}igoE?{187`0*9@ zz_P|r6Q-OUxK%|B%3gazio0fIIE9G2s2SuTVc?T)Gg7SyJA8g99fXR81`mF^wll6J zO%&lTfVaSKNv2^2H1l`4Vd-(vu5Ptt=6HKmE~+Tx>a@dntQXCLG$HKRpbhdm`g@8!Q}{j2J2nzp$RggYbC=gw zE*?ea^_d;h8@1HviZL5`m>KGNUYyk7Oe8=U&SUI!1hieHtypGt-`^4`d&cf4I5Ckc zCg4g+AN*yE*hOzrZMp$`rmIDvk);W+{7d^m+~Y5wTGHWk+qeb>66)%sIVTbiGi+Q%#vaU>zWr z7RyPn0JttWjiP7ha>gvbtFU*(=ZAqs`nokHFDG6WT0e#;wKhp#v7Si7LS+6bb+j#A z`ScZUbI@4w(NKJcn?vh#>R5CQ$t2grW$qQ~;E@`q0!hrCRB%b;<2{;gGF zZ{1_trTAu>e5oJzlSOT02vB5;=cn>w5M^4(`V+4l*MV#L`d7*KcWt^2ADN?zydK$$ zG=>|9>cHJKHqxzE!~KoHc2B~mMC6&xm?^8SEDkA)(;K*Qb#sV4@zAw@03U`XBpf_D zWG*Mz73``smq}o^$G`UpCg16mno=IaFcFb=-5Ga=#T))5Ta3p`H(~2s5XVehL)C{e zTmc?SB;sPES3WO@8iN&2-Q<^AFH4D~&l)_q9Wyz+Xy$j#NkJZ)AOuz(T^;X8xcWZ+ zwz8J4YXKr$ZDU7rVxK*i-g-jR%-BpXA=dJNvn;)FRCb#?RQaLS`zSKFX z{XDEnFYi4igWJ5Q5MZjDn?aSqcN3nO4V#B=&M_j?An*e*2u+mW} z`?65IkXR}PCSz6Tedi$cJ6xQd`Iy_&WQFf$IJCFtwRo=Eo~oL9QnBj0%HVO#-swm_ zw|o-w`amD;?7usg)qY&sQ8MsruQTwipt?{0`aNi=Ep5=Ak|FmxxRz&i-PSNM9&Tlu zlk(aIuUc1dT!f0YSzFDWI~?fy-hW&cAr|*34OZwYB}tE0zcn9P^C`qKKj zIMrzQ`kgIDHcgT@*IJ|>zubK)T(^!s?L>(j;4R!hbzl3nD5J;E*Zcx*`WwBiDGU7l z*V>3rX)E&gN_pZukmkS2B(f06JtpWL9yw5IfgF%9Yjs1GaXK1?)P6QdmstK{H|e7N ztK8#ef{q8;pa%79)bZko@8hqgL$NXa-5aq;q2pCi5z1@rbusMX zZoc8ttF3wh>4sIY7B{oZ&1Q#^(!-BY+wnA`TY{?4}fgo{Qo+x{m$GlE;JLYRne&XE1{ms z{otZ_ZX&qqDRS*YwgnI7a$twOKvweIhs>U&rRv9pCW#8k|BKIj2`Vy@S1T50)6Zh; zu6S~LUsa$wMRKbp?#j4p3EU>aYxNjH+RNl41o zAz?d?R2^?YbZ>8+`do60KKln!wpbn}KcjhTN|lVHM}@5i%Z4f~%jBazL-O*4r+&Y4 zgq0hO75R(C4M9qhN2c3rUC-Bg5Js``Fhw>Ek~Wrlm@r$nHjUMVKGHW!7^Kv7QUel* z%|3S!_0gJyK=K_`enW461Gr_V`{t{a4#ONBmo#G4=O?rp(JMXawd3Q@{YYA%|p4psVMuNP9e;^XMD zxmnlQQ0hPB$Q@@i>9r*D=-ldvBcC1o9y5eNcw z4}o`d2}MInq}L}ZZqnglo$h(U)0oZ!cZ!d5r^u-IbI>x3Ufg^n_r@yqXD#Dr46~)- zli1D*Q0N^|S!<E|x7)D*B{VEaYc-*> zn`)C!J+&Xzhv__O?BfpQ(v-+KcR{u|-FwS?BdM5##CqEDW1>YASi+4y7~W%%$dL8C ziRbm&708fG25WAMiq4%rzWy<$2(bOK+3h9qA!M{28p7Eh_zsnf%pY9nFMVkcKV%=<7Ew+$$}mDRN4Z z2r&oUD*c-~mI%qNa?R+#>cK#eDC6av-wBRi`NIox80HM?_r zM}txg*Ba1=KH1`vds^5cxr6S>9TMV)f1%VMX|o(fF;Ol*ED=21drPDkq$bzIBnz3- z42bG2(-gNqIzwYsx6<^%M{nLVYrxO&&_6c2NS(`}mT(jtx79_KEk2&_2v=X@&#w^^ z)a36rinYW`T5UF2r^hp7IoRt~)?2&wZ%RFX)b2hW-Rs(TA8ppeGhV)Vv=*D=N1N4i zdG++bwZFGDhcD!(&6>b=2J5WM@MH3&9?Crkjm-QJq@zhio7Jxo48lx9mAUg^<~*$UXmNr`4)6`Vl3a$Yn`M?U&~w-wplMmOb`%} zJzglYdC_Hfu37&jlwC7bzFB|wRLfQCSjNZKgZr!MN41(HNFYO$`d6~{r}WN!{oAuR z=ha;c=&jnJC?f(BWfgY@H>;a4jvGC$g?JgB;ZAGv9_6OuI0E)p_LB1#HH{US6p@(zQ^TnPfe^s>GPoi zp21LU22Gh&@DV~>V6>tEGRWSFPXgZa-i zTLTep%hA#RR-HI>C2M2e77`>vsdeE#jHqZB2sfDc*fF*)P`BgrvLtBSyjtE|)V|#( z97*oL00{tPI3UVz8|PZq=bK_9p$~D74nNvQvYvC1aX|Jab6aGDP1UcZ5M9&`EYY(^ zn~pu3zcgbCBV*U39=((mc@tyz+Ady2FSW|@Y7n1UEJNT36gg#Sq813(mSLB!vAFeD z={$Px_7P(K>HQ(=*!A+87b~PE94)J#Yl#QUSeTRx*uV5T2092KaNIYjI?1xL$ z*!t4qBadTsFk&u{LD*3rnqpN&d3GW!I@dx4P>*I>{iMFOC4;s6$G#t9oyH0jAbbxt zmm?3vk$bSgyGTE_iK=>!yLh2x>1_UEu{r~Uw>H?C^vRn7LDw%e=`+Ja$~b2wGwZs2 z_xU+&ctZoqk$ZCr_+Qa;u!(2qmP85jCX03NT891{w&u|AalGTU(o}*ZsVmC>{jtw}0DYH-J#A)G?GJGBY0?)oe+pYR zJFrWKg?twENwgrXfl;rso!Rmd&|AH74(JR2X*fg6)Bg!&C8H1K{?Q|c; zBQwS9Z)kd$WZ>`anQyjw$E3vTQqh*iI1Ss!GW=Ut@iW&k7tS1OD;;p2k-o@6O;bke zj8QO44ri?m`dLnXh>Pet=_rfGy>L7KS`4yN9Bm`_P|J@Oe6K_q)p2BzAnn@|6K&Dy z`Az*lPyM$A(#xBz(vTCE=dc!@o3Cp9bH%SX*u+SMc>uc@ zTo#sYTLRG72O)D1ulgO|^IhX-ted#lqmGcyw8d;kt~C;8a}51B*C*Trv~{uBPlg7# zadCK>yGURIdy+!eX>%oXOGETEBk*wt8~ogjVz~7#|FLiX1_~XJB+s2#ktE{OF+eUr zKD+}APGU~-Z^&x`36k+wEIr28f8Pc~f&XJwVr9I#GjE#BU^?r(3xPf7E*|yFF6TWf5+}8vLZHwwm8i868XB^ixb#w@KKOlarrVKEV9LzUvfXCEFywxG9$|Xh3>AtLQHE_zdZdh1 z*e8B)K>tn($Htm%a$ESu-P~`#x#;xVsKs*oXO;&NiN9J==DC3vR!Q>iXbuEndg$s# zECeKdEJMI`0`+(X&pqA|M8XJ@$G|8gelDPY?mdIaMy&tFiNFCpi{bl$_Wp)wIF0H2 zMRI=y`~Y~N%59Wv9a$djchmrrSNfp+^@9nIqBA0O?)03Tj*I1bKA~+nQ}tvY?|eSG zf!&C1)teol6AX}83(%>Bc|Uw2)?MjT7{X&P@2yZbvSp~ZwYUy7Zz=1xgDU&B)K z)W!^)2W}v(QI{}y2&0x>dE<^NK!_-_df7=Ij9Lx5#l5fi1Gqr+yWf9u>+ktd2b+w! z%3Ty>tgmaw@;rPr!ezFCks}+6GPeZ4PEDy>0#)#$F&{yj?Gu3Rm~gpX|0QPe!}(WVcjk^FX3?-O8a1!I4r%^ z#$hvDXw22~9{tBg8|kw`r9T^;+dof6CD~$_$;AG|P~{x$;MsZ8kLNwy3}KtjQ;w-4 z#F6dIyi3YVl0vd36I&z0hBtFSS?ck*^a4iNqs1>2#&@NE`q51bi8(S4=y8`(ok(Vd z_h9ec?L7CMk~hWwqBno12`l3gm#%*7=NsQe4z{FjQSGE-2GXoNmWmb;-QN^12~B)S z(@a_TsK?b=>I-bL8eH{g311c|p!*K&W84wwwDS2oW_oYbD#b(YOd=d5X^2Od`gAn~ zMi11wt&6M~k5ohREH@TRb7j4DV~cGD>#+S=a)bM`f|_dji{=!)GCu)F<2xQezJbb=&`(UHKmQT<`8gfgf~Nt z=6cYbZ%ajwKvd0bHLB=`ux`1dTKDxXaZxFkrIjG3@k+`k2nP?F;~5p=cWSwphnt87 zx8bwxC*vES<}oIx8GS|HyCVgikF!j#4eL-v_CzYfaw55xMxx*)!@W$9-HLC`g>a^N zGfdwYrcA%VyG{=#=7{effP3yRPeSD#|GBx?@2=`bG*)6Ky)T$w)9uY(@pnyLc@wTV zx{jB&8~OYw84mYnOTAEVXn@o9Ppg+o7p^~biCMDd4i7JBw$?%*(ZmtsZjQolcdj+4p9fWG30%0%?&$2YxT8)o`seOA&RCbM2-G>B#^j%1hE@u1KzV;I zZg(E24QQ+?PN3l8TYl8rGas5ui&KhqG+|;^NfIS0x6ehQChN|{^<=rO9;C@iRFBN! zp(DhxetSGWUd5aMn+=jZnLQFG6Cc$DO)^H_-uQ#t$?j=964a_}1++Uu7_-h|0Bn8h>HpmY^))so>CSfF?lbBTA1iO$fd3s`6EHvU}i zK4ae1Q2)9FaRGDT1eX;f4S)lO1FR>)F#xi&G~C-KktiPkqLx@7EqZAO2|C}kA?u;X zV8f*;wX=V9YX8v^E(xg8>g4LZTyq#8lXArD?V%VCZmKY@T|vQ+t=J~Q>EX|a{r~v29c1j7Rm1|Equ%SB``IU9j>90{$C|KAmK)~o5_YL$$gz=9JLDGR zX0x|r565um#>3Uf#nzTfb$b~3k_SgshwR{;qm3P%NvOq@KR}6UEENmrZ>Z<{)n@$< zD)pZYorCNS$0?o&#tM%BcLvx4H~m9^$QB=co3u#uei>m9Tn zt(b})?eEAnSx7ET-bfZ0LHesB?&5&bdi3%KW)}lbJ{!DC3=L!~KN;%D*L#J5Duioy zUfgH4fR)Ayn5ClqUyEH(BzDj?xas*VZq$u;N=-jKo4(3miZwdK8zi{t#~Tg=k9rL= zc}6h6I3k6m&wEEq+0I&UQEh9rXyw9};Gl}`SC0NJ*jxd;DA>p&2uN$lELK)QDJv8c zp_&9z!3mJaA^rfkq@~Z5bj4_7>(+O}KxOve5Kh2F!fyRJL|PR}_X3ma&ntd05qA z0Q~B2sOclpxll)ovx~V-trMbk9?qMw%etWabw2e{sJ{JaQq{68DFrsQwgrf0-}j~{8E1` z0HlF)0%7ca_n-pc4)Uo)VR*QjpALD`sIx%*_Fsc_9KId@ZGW5a%t$<2u&p*}Wb$Ss_1wr=Btq7g*rLp=4P0KU;FXZKV08==}oFVDF z@MY9%OA`_yrVKl(_X^uxU)K@!(U%)Eym?tC{72%HQRg8Av!rv-LcRp1M`zlMbJ(w& zQAV*pZ~jn}7iC*mb#p9JOGIveMZpN@@2fX>A3}3=_FNJUBng>eqj~SS6wCW3e<4Dwfygm#gvo34$p1#-*ZQeiUS0Gn|ZqxGeG6vbhS#jNl|O zwOGDDB;k5sf0-=xxY^e0U9LDIjB!Qp32pyKngS;TruC60zi;l>lF17LEjMWf zXbp}cYL7DT@FmoO0Sybr?qqRL_jBb}-sC0eiJ(KVYyIV@!O5H{tx9_qe_M~Duax)xxo4W&Xu zikW-i?<_~^J#rMNBpwI@p$;q)8gRlDc*tlNQ%$Pm0He!hSmF0LW>RbtVVu^uNp+q(n2{tFYGu zM3A#Jns8GI&%FsrOib4L1ykr9%fkw1QDR%;%h-n6>y;FG(k6V(TIy@=QjDqYpnaVw;*F|sJ~9cY~#0} zgApkG^grc_rJHxi^{PQ7$Vj^CaI@4GSz_YJ+?p>p`b>&R6=q!`$U46WDN4?KzNxrE z0PnptiTlJs#mvZ>mX4|2=u;akX=O2NWbs&{E#T%(r;{qvG2_s$8h<=zkjamlPP5pn z2sdZwEjKQdy^#ZI*v3$nTOjGXeBFk#WjM$w9TPi>UwSo09&Cjnd?st%Cf%={J*mqw z7|1o8w2xmaZh>F~VwL`!rKf&lKLv~m!{zvaN9VLh7~F)y!9I$x_d-By{OQliGB`ga z{#_zz|J|GAMPp-_zd?a|VmeT`mD@Zu(n?YJkx6u0Nq#>x57hE_U$f@%0;{c#L^s?O+hG%!9V1G=P46NcadRMv5jZm4p9eZ(hgZ7~IlUF-F+{cHE zTKeHd#@A(*BR}7}IstkGR8yoWyEAiXX}&9YJT*yDJSrWD0n*&w*0Ofv7Z&Ehi;?+8 zy3b~{utwX`nHq_iVs;~+BZoiipaOySBrtZWz(+o>fy=81jrHbH`cHViW`tIAj7KC? z0#X6idrj*s(V}>%)G+459{Z_XgII*~7WL^;!nE{6wX4(4+U(>y8xN4g|IXxB0)!Ds z8QYsVSDWJV=pb{i{?$RZG6p(?{>+Z0*POq;>hj)WN*^o7!LoEN$5uR>sWy-rEO1hW zZmymYiA(Vc&@-|A>%OeAL!#5j9wtiy0~@Q0u68Iwadl!V67~GbZ=$s14xStU)%Ku~ zlxrAvG__7C`Gv=`tqD=(izCWOZgcSoXDR7l<8rJ{ViS-+4Cn~mWMPWFPBX(0LXLmC zx3u_CFX59t@+W$84QLngb_Bfo#!};<_{ z%j$__d)tPw;!2m+J_@?B&hr>k^p(oP{^%d^(qx5#(ZQ?u8cN{w<@DdjZPj03pw_S| z?IdUmXO}g%>C6>Bpm5pDev*h;DQt4UqjTWllQqq&1$mdJDiAtJQqb_xtnRmWzZdwk zjKG}7-LNy$-NQ?Rb*7%4+*=D@EQw3$Rk?XS8+O`|P5z+_py>kh znzJyGADL-d49dQHr?oX>{0Cbii^noUTtgOtrR01OzY|(j8$wk^svlNEs7LROBF^RM z6@?9>kv3i(cpl4YY5sPEUEPVw6h{G^5IT7ReHWhN`smjgWOXCGRf@@(!JZqfFT0BBkYZQn0lXhX6^+t8vvv5Enk{kLE>J*XYe( zqTgD$8dnl|3=V%~$I`7)wh6c+{_*w!!H00LWO$|tcyH(U=*r6YMR31m+gA>{!1W(z z!o%Yx8gM3%;DtUDuO|rMxR=#Oj#bw@n{^TtZc0BIa1=74eR0}lD_fMfWz}8O(NG}8 z)56EQ4YX*)&Re2MYeI?!xkp-W<$$=MJZ0Bd7tw=;K7D(j@Z}{|Qs<+CEe|;YP$bdc z`*kXG-1Y~i(b<0ICu-S|43^hFXuD>0ik>jL5b_smwoYLO=vu8cr8kX=F5B5bHn9?S z5?t!%R?==}dkK20z^AyvIWJiOTzw$DpX|wOknnEHCyTQ+CUBYiPEBq~afNpecB!83 z;dSD5YVfpiDMJ~rjD>SRtq=N`N6Rm}ZsbdQ8oxv?>nBpn?cbUF0E`{!>^VCWEi&Nu zA{=UL!>(1PBuKlJW=ar9HGa(|9Up9KHt8dzcNfwi=eHK>T{#&WIK4(N<7NZ}Ge+X} zEVJSlA-@2470|8mEkk@yc8J?j)hI?fi|-k}ZP(@P2Rg}n5w{z@0jggAi<}`)(-%q&2`hNf!W*OFb4~-EOj0Un51f&W~3q zB~<`7`Pga5#3RRhkAR_SnOG( ziA|@%*M72hTK#xs$=zN)mM+WKLah@?czm57HWlD7y zSnn3whS8qc(s7#W>@90KvtamZWb0o>Uk7*}z~R7ekd#qgZw0sLb~})t>2&}|zYGJ3 z+mFp0>|-P6lRX3`i&y|=_AIh62Owjn(SOm8q1@tLG*Xld**uMV^{p;_P_1v4{-o_SobtwtAq!ItnqJ3 zdAL!IZHAJb{I}fl{CS)p1TQnjQH(UU&trP6?-Cp*s)Fn)9B$DwSpg6tRKbP}>=z*9 zX%!s$b?;arij38hhA=&&Ca8O+dO0(4euP~U=nv9bb+J+R zh^3l4z2sDyZx*qtoE_wH4I$TW@fHmep+b;-~3@fcWIcZZn(0Ix6g zEy{nj77=as9|Qg{Yyd18vNU4CJe-=88O^2Xc6MaE%1PAJbM^h!y6uyhZ|5zi?3XL2 zslYo1Cy&|yQK%6H@nXQKCDCN!$(~EbQbQszC?34~4DtCHhUw0Z`07SIx9Rn`xY$qN zx;{rZuKaJWgPX(wPPaP9y*(s&Y}9(&c-=Wvl2ly^;{f%E{+{JMShJ7_o90XM6O<{} zZle0Bs~fph5>%IIpw)FugMWFngp^UXbe-f^M$BYqvWnT^KzQ?PwG1>3~*V zzx|TCT_%f5Zrt4=G4-jmXgwI+P4!2>`A&}~aZqovn;J{@J6^`$7N2m|VHyxitJyV- zbtSG*pT0IxqQHlu@}TC8iU?0OTjskI1sr&FC0p^Y$ASd_qE%n|ab@svpnP0WXk6Ww z*5p-4S@TY>GOL@M@E>CUxooJue_#ENMe`zUPNnao^h)T zW;y_Lo${nY0))N(JPykFD|o$0vnB`a?%dP1Fj~W*THU6xn;FujXzUt}lZUnc*@esu z;z!+`pcod_d*HiK&WD_6l|Wc!RRYBJ!k?W)c;s7q2^muoUv2fXz@Y_L*TpoA7CkGSl|km9qIzKL>g16Zut(v7 zJrJ2ug`_}AjEoXLacK0iC($31C-{%XD`t_Q0F=#V7uMwY z?>hI6(*`;nved*CS1PwwhIDw-@bXNab9Kj9s5S*lO zqfof9Ve+q~wf}PeWy{lLj5MkPe1=rCq2STjCWHyYl%vL}f2y`W{CJ*XHUSus_`?`B z8Za_-@B6O9x?i|ztdKtqi-N&bnQ#6yz()f*EBb%v{=a}AfG*Ibd9Eb1?VKy&GYcMF z?k5E_Y}c#tx{VUOLYe;sv_~*y5&%IPD{JwB0q^$z0}ua`hn4=-Od#feG{5I*&fD^5W&&-|eXxMguO4~HGM zt3y$h(51QY!WwIO;zBmdRF*Bdo-$^s*IT?Rxz0bkFpIBegQ@P>MOf+0)`4;ph&l70 ze%SRqxPNY=@V%~O)gB1EXmZO5ZvxPkq8lZb$1s6%#Pk1H_8x5UPi5yb9%rLLxRsVh zoPaTgL@oolj7_aK7FFBCrf0f1m^PMsxC9_OON(4LnbNDnYE}Ccs_nUDPE&cnT-1JE z#ZL$xUI4libcA_QV&HEt%2$mQG-U~fOO)+3A9scv+#X~fI_hV7)fBGY-38_l>QcxC z`$6KN! z?yER8$!Dgh>rt%rZom6J>W^W4`1@*fBvI^DH+Fs|>iy?%{rLIAe4hQMNOB`ZZ6|#LynmNT25@(hNB%%g2WTNAx*Z1L^!SnU7&u!#Bj6dzrm-To9e?^hjdt4Hf8M_;^m7r~P| z5oeCqvm=2xOl?*qNLqyL&f(-*`j00`vbj_C3#wo5U%~o9bOz|Oq;<+J#QepoOpZ?k zR~sM9iEDWvGvDv&9~}_n@(`2mdR|8d)QYpoUYlp3t!q!Q$MbHz8}46SmkhC<0`2=yS~YN*~f@?22BVnqZZ7=yi|y!v?l*W*ut57MuBJZKhkg6p82i z8V!n{r@C*(6RQV_6NsriDZTML+%>07F6=Z-M2;+{+I>KHx+)tTYk^X5+dC ziOC))Qc*%e;vj>m=aslfdz0!J0b*Zp;=oKh+*yJy`FO0=eI{~h0Uxb13xy)p5y zY}jlan1apa3f7~?BZYgt6NVD&>RetYPR}l<@tB2uT*2mnW0v~;YaUJw2)5eqeq0a2 z#tfy~r3~;u6Boe^bvkjtkQNwYzrXNZYampdPd830DGep%`XxbR_4a{8cS6-YuZ>>r z)skrYL=nh`NfsUiHrbz8A`Gp0BBdlI8(+7#Oc)$l=U&8%^v}Re%3i%+Hn}K~wPeQX zD0}_3eT`8~p>wS|bLoMQ@tm3jkDw2-WdCrFKy)cE+`8YpskXH`7iZePXNgsH6cD*` z3{l}UepI>b@FLsJVityGq8!J;Owa1GPsV?D2P3z;aE*vZOfBAtcvby#R}oub7>9df zn+xLV;Zl*^{=s2fk}Q?gFCx!u*q<$OPbkZ--(RzpG0r@|E|aCP z!HN*=CUIuw*6&8M!x#qMt}EU$l`Ddf1)EMW|!4{1yXL_-l5`f_U$J#;tS5Z zJRE4B!4TX48jK%!!Ed)a!7KU9b?G&?iDtyw*7$lvHLh@P`XFlBYcxF`8x@?jI1TQQ z-S4ph{)mzB?$xT+vhmd|<{EJQj_!o>bl;`B*YAf#hT5g6%%+70A)XHLro4~8xyOZx zVY*8N-d)zX4|@dBYrN!QuO}t$~qM>T1802E45i?00w_ zycCet&R{}%tB4i9Qqd*!Zjz!32j0R`SyDO_5OtYmJ9$}96Z>V;^SE(>j)t2z>LbU18*3?$E!Q1_)IJBRibArS{!>y~P2~sZiGr9*KEncm%z)$n@zmo7V zziyG}vh3NgupVVkE|HaRTQha6LQm4v-gCZiv=HcRmp}D7a4qK>&o<&Mgd!V1)1p$0ZYXJr9h&uMJ87&MYFHb(xw+ejUY-;iZcI;n zJl9?^HvGeA+}7H+D%0BgjSAASHOv)S`S1tQrES+j%G|@8aqE-rr7Xhw7C!FA%+)Gn z8-(UXzu1dAGT`xSt}ig z{byqznt2LH8Ov@IoT39}9V1PTN@0A0#7bm*X({Xitfc0WJtv>n+dYfJggB|sjTdiD z$&T>T3G@4z%2g|==~oOVJFrUa9o0vO$cd!y^*dW9#ukv46iLCa^@U2fqC#zua|OGg zj&jKyg~JBx{yfDq<>|G1z@P<4AuLkH_zt@IaOdK#kz;|FMZ@0jCNt5+qlxa=6U_%@DQK5@dM2EH;LoHEdCj_7XK7vrM+D;j;}( z=|Z_q=?N;HE+M05RR8gia((h?_yX%W%bIj3JAd|;PXn(2>uq1h*23|U^D;`C(!!?a zB;to+mcrHJrf;;WprWtvE)S-J=H!h@%%Wo-&O1ffgDD|mL?acT2BL0?hd_cnXNFg2 zke0C*+#}xJ(Jl&T3}K6j3=+Cy)y$lSDRm58Zlui2CgQ|fIL`YZAi>LpjtI4gWexq5 ziKr-RM~&tE^_wl2eTCee zjXfI~ZD%G5p1F_J!a;DW_QpwDRP!FLKBB?Y5zxi-x<~9)~y>6 zY^X>Pwy5+fRX~c;R6vRZ6a_+yg(4teLX)l(sY>qw6zMHW2@;wh2qX|Bp-9(AKmvjS z0YbeC-RJxEy<^-l?mgq2f5#vE5!SobdgnXKGv|CJ5=zIsCDKv0qxiEjT&%DBT~{%w zm%M_d2nE^9dcU0zd1+`%=lh{?>V&(fRBK_juk?|3twoxL51cwAz>p$`+|3Lv>KB!| z3jY%Lvn8Cm!4$pn(|_1&Ho^ab6H}V={hI|u_0A27MT(@%T+)-IFUhWVYRmYB-kWOd zBpsK(+~&Qz-8^{L9&=s`#kPgSM>w7xS)Njk*b;i*gE+w-VQ!mkJ*ZOwz%YYS{Pjd$ zMq;qM^^84su`0#VH?Q7IDE}I9VdLHW+ft4l{*F#-9dNt_k^;%Dc`7`n?)bwZFR1Xz z!Z_Q}fDU|xLEL@m@!n}3bCsN)02F993sM5Fm0|C-4nxQfrHT1MEi(tsK>DSB>xhr- z;?04Si*Z(kCHJ;|qWcx@g_B|xveJD~=nTm}ilatD;Tlket?(vPO#kGk|&1QB|w)A4r z(SS9vYBfiH^(6skpU9Q9$=xqmZenK8iQVBbcWlj{{W?^EUQ%526R;M#al?L?Ydgj7 zuspfUg}Cmo6>0{p*J)hB%}vmsAu0cXPxllEw~2qf=!rw+D$(ls2pfzD%<fme?UBFGH4h5ZDX%;{8|T9UCnwhU{=_Sy36d=@b>D#Wnido$TY50 zPPoFt%bdTuco!`;Z8tsen{t~ypt#A`Vb{YB+?dalhkIU2&4a$IUvJ|Vrhw7BI_^2N z{kF{x9=N+{y(jf#WTFVc*izB$dF-puUt4poqz)%)(y;G%^lRVd?bS=PF*i7IpLEBq z7qMsL{Z408jz8mqkLATS)4N^r!Zemk=+xMtEmOC``P6`;GuG}^8^90x2K*=W!zr6L z1k-wFdX&7sZ!68T%)^*HhU%>`BlL5f>gd2N@$IVygwrYniPy_lU-W?vBL~lK$D(OI zLOCJbsmr#5-AvTivFed?MW)bI_t}K{{;J-xAsQZ|TX%a+wXC+U-(+EH0`sGM-Q7*< zx9A?=oPqBwnR$MoMSB<O-x;pYn@ z46j^Yy@BgG|IX>7C$;a|P}}BDkZCTlbb}SR)_c}fOjel1%@qr|yAv)B1Rxp4cyMq=814>p{>FFDB_ThW#DA{mqDP_7}bq zXF(H7>sURNb-QlsVhMb3dDZd~ZL*RV35{q2m7mvSNVgCf zz1Lnu&c8-4#4X=0h%~2M%brh_6zxFvWH`{yZ$298@Xb&`XOhTCE-63ado2eg<`QYR zz>ND%KFiJ<4Hsr=lM=s)YE;ZG*IxjT&r{{o<|raDj`M@}TM3K12D(Yb;t#Bb!^ zzCS3lS!LU$fA*1A9lCi(r&iVKZK&jZj5cm(g=8eWDZbouK1sG|gPOT=UTGP80avAl z&R&{$UKp9A1-;oMKKetzQ}tJyJT^>t^g%(;>M+-a{E77R-P4iDmY8DlnV>$(?YZMB zaLQkuEYE)iQ4`*nm!uu!;It5*-j+9#^b6>+v{o2KE#!2frJ|8AAvF23=3q6@yoQ^VS zoi9Z>(oL42^)j-G zJ;98=Pe6ks&tS93kGHS<^5(&uS3qy6NxH6K=&H6&0ao*J!G3|Y2mWZTC=z3OfZ8YR zim(23ikaR1kDc>XM$KZUqk=;tj8Mt8-w&9&x5Hdv@{eXg7sJq;{7|L;=b_tSPG2QF zGhN~bJ1Xs(iPllQs#P`z3nX{@O?odFpzKd4Jgj9&ml>}l21u2^20_&gDf2hR@DGX2 z_`^5e)V{T`{-uJlsnPZ&NyE*s=7=8)CVg$K}UDh#x~rm$uZ$w|)Pl{O^p;Sq9DN(kdC zG{yAzVMCbCmHsS;T4l;E-nH3sJYZTg5at166O4USjHY^nJuWd__GL;&|4MKhmB{6OOd3ej}MHvguZt_ zfYR%0+Ql~?!mDcVx)M4THm(qTgX<{>^sys1O)Cs>n50Y3Dzmkj%@qFJsJF^>iRIbC z9FnKBwXc~~VLyL|@syK{;9TlloSc|W3RhoOV9?5qU$Oj~k3W-`=>Ai$I0vXe#_jx+ znzt;vHkg)Sc%RRlOFnR_CI6d!t z*u;DY;}>8+tScMpV;+Wt<{rIw{SFuh^DVb3;c_LW*wB1wx}`<0fIYpe`#nz;x^h=eS+AfA)9G_JRt^*2 zdrjx~CN(AgO~EDkDgR_UJI3-eRYvMN3O3=@=5~xV)e#go_oH_Gl_>WDltCSmpPbY@ zzHEsx!e-f7P7R)1>wtn1_PtN~jWW~WpL-TOJfAVszsqdwt$x6%u(#bTfc4_X#C=hz zqjk?}eQ73k?c$g3P0omP?v8JcU1<~V^gnD`hY`|U505h0N%7mB_q&nrXJi3Ko*A<{ zwxE`T^uvK_`R{iw>^oP^a;i+A19rvQf@Gw%tk|%EtZEm(HR@V?X=**)G~p7~EUx!M zQ>@7g^cm+B#-V|!!V}`OWsL|@d03NuJ~`$e*E$=E?&@|Ddh`J@bk)-hShei zQR|ebtTmV-fJ(f69N-)JaL4o{7rf3Gyb%0${nC8`YEr<^$KTdj-{g;;wnBZnmOUz>@(l@4E;BA{M;ZtHjryJAi-jjTyD#wgW4;1IE8Q2$Jm+lNY=7yFTIg8xAh)3vOt?FO@Kb*r%>QS=@IUQn zI+S!;>P-2dS4;C>+R^DVIkb9d%3sV&LFv;H%(VS~uu7BmfW=pg^$mDq8!Od4kJC?< z6u6zdn3b-$WMklSxoZ21$MVSeNk6FN>9wr*)lGeg#-JLWM{82}Ker=)8<@5{>70w# z8ds^A7f46SMWB<>)g+F>GfIx__))8=MIE-ndN)2s0X`FT?4G42J59SgaI^W6WX{gTpk@Q><~#8=&_Q`e^3fW*<-vFD z=jP1!Fu{5GIhv}tpq<(H@}oYCE?voHvZ5jbktHpNK9T4PR7!>!YO!h4Z&4AC1uOc2 z*1_#G4<&q)K^9kR^OYe7Oi$U`fZ3#RDqLO32Hmi@{K1-+tGqWU;CoBQz*)Rm@)@q- z-b`03ZuF(RQd4Xy{P9L>qt1xXHpVjyFo#`@nXo9XZ5~%jz;JEC64D-$?iUjT~#C zZl5nNbjS`=&lVy6<+merww3LpoZ$gfr=J9`-^223k*6a2WL`-;m3bxl>fAj!yh3fe z_*aR_jq#6C7th$K?ID>5U&n`(U1gv>o8u}5?VLAL_inhx*0$MpHxJc+o?e+w1s-9) z#?CL6=UZ?p7C4ZGP6+)7{I57(wo02i&U3UbMLm^tjD1hlMq0!6AmMRiX5d;>%KVG7 zi*26Vw!2zH%vjzWvL!fdqvPq;Ux!W>CUM;WvF9~kORc<0wVTbuys%hZJ)3DMyn%|! z3#2OLT?ValMsky%GF6r0h(x(H+NEQE3{rj}6cs298|NjC|#7A6fE2JzjCBL|=Cxj6C=JiA0rapIP*J##O*q%mql$pm>9y3z?6@&ft ztlf8a-lyO;2JvnB@koU=uj6nR%i$_lOKG4B6TB=#mSCL@_g;imKT4H^!EP?hp_}{W zl4zkxe&3#-)h31I%_O@`YE@gl=2b3$URF0!`B=$PsV3mYini8S-KNhd74>9B`$4Fn zV`wj1ae$u~my*TU7@=u#S^(mB1Bdnz7rYDVMwDg;pIuLNg~63dL$jr7Qr>+Of4VW@ z$NT+dlB+svZt;+Hc*~(H)1#XXsjSx@DQTl(HFj+E#0=Dk+TscF9o^LxV@L|7Oa0lx zq#m#st6d)AqUCS$4Hk*k<&_OmH%un(SOgE?x>WdPK7_=ZkNfBmB!)lgZ`uzz4?1G~ zwMU4-&5IM)Je*;9j;ZKte-bIDLLDi(vie^PhSEZ_LNgc(x|J$D>Pc1)<1YaArAl+m zyqOaSW~k{7gL9@)jPoW&YGz(%4_peBC^w^Ks%>tFM3TIZ&O7^6x(JBJhsVO?xr$=d z&$)^-6I+u!16TTZmvVZZJAHU&#jFqs(9&mRSFtzq{mchx9U9Zvw{||Y4bcGD6&+#; z*yLZYFcVcl+YTEej#Ro-mca^FygJpT)0&N~WnH5d=<8qh?>bnp{H+Sp!g(#q>&bze zqg7JatJxw>Lu|>T2P^| z-H~AeboU-=^%%uc&fTqW)K9IoTIM*fXP`eF7PX9j&^&eVwwx?{Uag$ZyhAjo=%0HuGqiut2^J+EwI9XQuG~3t*pWR?pc!~v zMWr(nMTK~pWO@bqn|8T^BkPD~nlnmHOuH4ULY5rjmK#mdLakmnUmwGF&yo6tkNu}2 zMmgV87$3DYhP*Tx0FUL|raJ`H=FX=cea|*qW{z+h+cwveUOg}2U1pbQ3rUoe$%(hB zU$J(kC0EtQ9ux4PH{>^{jmJ$jI7KPjouVJj_q3^qF{-FJ{zv_X#D7ZWjJotmrxmKB zIPz60)-%z#_L>~78M%F3$o{~w+w6rgSCU5$jqOtm4lNzqKr9=E?NgS^U1>SULmJNk zvKNFevZxEVvXi_mTh4ZvrXLcb6?#(#m*Mz|%<*+=qwfMX+GO?i4rWMVyq9uiJOY3A z4Es3{s^P@$Eeq=4a0>J>f`;3@hKA}LTc1#(RJZIe)C@wYF~qWc8j=r*lxC~sX+ z+x4E={dv!qi4O5y{Zg%9Vp6dPG#xJe7n7qn?g2#@RuJQPZnts5z)#?u5 z5gP4E-E*x47{@RCd$zjc=1>&UYEYy3vcdILlN7{ae)U^G_l5V>_MhIl0YmHRS=`fk zpnlz~c)qG``zp|^-HFcrNVLy3ElH%nT4 zbqB=8JCFg!*u?zybPp}r>Z5<2z*rQe3N@-I#MKzo?MO%&`W#1Zm%$%c{&~p%W0Lj% z&u2={RW_@zg8llz1%apwDG6!#FXR4Ia|Zr%s0{WRB%pRn&Ox3abzOA>*Qb;J)eJ1J zjR@TO)!{Tya(lx-6VDDQ;s2eZ2I*!Alm9K<+}S15d?tTXy8;G*Bwa;bSrRB#_*b6| zA*uZ^gA)K(mtD$Lm_*x8zCE()Tj2K^!&EVBD|#@}I@zO^hfkmWs5D2;to z@;k%a;4WG+$0d2Qd3U=)Ku>*ho|%eucDo(4Jr_&;7Q6eh0GeJt5w!au7klom%wp!^ z(pvLw8Q|ctrfsijJf0DyfQAV(gVeG7kJ%b}hS{nHZkwwvZr3)?Ukg~K@zPjA{*|>) z4d3`j!;C#=JQ-wiO;W8?4b|$rvNpbkYs}69@T_X2K}BghQZze~;uyUMQdQy7GIl>M zN`RIffo_RH>(_vt$a8T^s8byf3tV*qKqyD#XU@W;curcZ#xob*ey)ENOhm|6`7d=9 zT5t;()!R9){{$)PP=mtKA)5e`-K<;w(vDG8R?bAgC32Sg9~36(FrL5%HQ3pY`F57( z0;F&rf2;AwAIQ3@8rnH-m;IY6Mr1%3E(L4&ozGubO0Jj$DSD`P9nK#ZZKq_@mk&c6 ze;nDXd!SvE0nvi@X`_tC$-lAQzY)&9Q5s0J7vW`cN{8GRRM`6)oLxdLaouAzrtwEq+H-AX60Ty$}a`YQSQ}n%f)(4NKr#r)QNK`o_cFF zhs-SIz5b7V5R+U#A;}!CbnzZt3CR|ct8xPEdw85>((001Lz6Z0+_-lT{MN+B+UGd| zt6|yGM{Z&+huT|otg5~$CMV4`EH=8(Dto^^bb`^gQ7`L*S9V zXi2z}614dv3){X5;Hu)Fo#mW~%3!zCl-<1?sb!59>@r3h3)ik#Xefvx&7&J*_(u85 z9Zy}KB7}_m=9c}#kYUf}n5;KfW?@ziYQ~@Go2R5YC$t7LF%Rq^%Wf(m=m~u}5WHMa zxQ#+?;y|SE`oSr06+q!9@=rnQ{PGfMof$kEY`y37EC%iRt@JFf^S^q;7*s~5dtdm95xNq}3xf3e*`hj-AURGew>s9?yh*Gx8KFYwh zZycl~Jh{sHrHDzRS_@5cPuUPSIh|}un~Rpc4h5%BY^F1SLoVIor&|tfcl&w*NU0n^ zK03_!9URtnlE?qc`3u`PAK(5r)?EGnV8D`Jj^MD>0xcxjV~dXgcwZB$#aUn_j5x9o zfD*7d1zGtPTUT+%4Alzi6F#xP;%;Enos|CW#)qc|a@sAGveGThcEPps{|B!qz{tW)#s;3Ws zVL~YWqc5KQJ^op$&EOhh36u2kABE2UeGGx4ZlIlv31ND2CN5a{H9Ouq)lY5%Y7Ti) zz4sLW0!UDCby5>0B?)S9R{+KK{y${SzbQC5IcG9Qx7_Lgq4(b$&%b+F3{V!?Jcv~^ zAK`-YAV*frkd@M;ADID?7dDlUWs+d&nsN%EKS6IRmS5t#hB_!nIFP&Yfm9u=oGR7) z`g>?Yz%Vi(0Vku1b=k)!B@`qSE)*-2I*&>i1H_@l%I@WcZNr*Lfsa)ZqL$y6kQ*Mi z=H;@pL0%5VgI_4Sg^E{TE#zu*Y&(^8LI-tlz0Kzd9Mwt|HfR(D1##v4J{0_UDT3I{ zZ>pRKWm+SO((VHWe|54$oOrs#yCmQ*+Q~6X1kS=KezN2N1eV+{=&X%8$P`WD8|Ov- zcz;%wagX~N&}BC*z)m+SYiC4|gh}M?uBuAFDjIr(oMg8(2YB#}goe&V$p=a31NMcj zm}L%xB11l}&5P-1lbuyG;B;4yw*p{ZkRV}6p-4H5$nr^s5W$8xPK&C7d)(_c3 ztR3kzfUGb_d5&dC}f28BMfm*jVcOH3|eGn^q=p@? z8&-sp6j{O62DPV8Vbd22$E{DZdJl10&s9&&dW@zV>W>$LXx^URlC9+EzF>GQLj_PG zyHE%1gB)Ef#;b3m-LSQ}=H%{A+hD&^lFkjOd|MdNFNZd(jt@G#)jAu`07()~ zJ>~V{ue(l;(`d)(yxF;2Ps_|O*Ae|8C4+1IfQsGO1<*p~u7s5RrsTEAMz$u+Rd`xt zOif-%aaUPBv}fUkUedr4tPHGpBDv&%JW9RlG`n+Ie>Mdu9bqfHG+q!Gzc z!_(3P9Tyi+eiX#U(FPl{o^$rhaL)1#bM;@PB%Lf`*~CL2eCw6DPoxZ5 zY>mEV*k8^Nwyw?|v>$KT%bpN^!l zYlJUG?}H4t^@N|vSGlLt!+rfgvab8CmHjO5u8(61Mo|!uJ||!lnLrcfl)CC)KE4*7H|N-JG7N3F@!9+95QRXrus`iO(KXRW^_qRml zFLmc=out6deahtoXMMHKXcU?v4Y6f_A4uZo%$G1g%a&Fv)F@oF$V_gV#eeK7%l;8qIL-RXSCP#84B0+pN> zsoW^f9ZO_U`FK$r$%rGl23*|xvjX!X#U>dBi0x^(>C{gO$gjSYWiId5C&sipP6i4j zfeY%L_$YXl%(2Cb5lOMn-qJHU*NfW|uOnfJwR|_ZCL>uOUp}PrtIRiuC)@el#qNLV zPvk(7SEd}aOf51Q$T3}69IJXaC5_BpGWnz&xz%ZKOAPGRFLysgs69~%BX+DpHjFa? z^q!pN-VM+GAlU0)>vH)e2I!S@ZER9(#Vx2$Dd1piU#4}Bi#nH`LCTltrd_eg5SiN| zO3Dx<^-MZnDl_ed^WM*r1;Z7R=-SgKi>~Dc2QYAb&HfI7=>4SVhsuPe3=9;ha8Tvty%Szz3$oER`+Ro$7Z z5C%%ye&!r)Pl_-6g7RmIP)?t+Pm#FJFAC-{bUPW4;(QR#x=f1r zjOVzEp8F9wzh!@cKn&Yc&+k|*b=}k*#C2CFgvCUg=t}o4F2)?_9A zDn{%W)7>LYV-imk-1!K9?M9M2E)EO$i{2NXW+dcvLm*ONSuzt_;vWg<6L*gs0{!%o z0^Z1VXaPY_5?OX>w}p``qM zj(}Flt}9EnDY4iwEpe#TJ9s}N^b4NDZB^k|9*n0AmYl)~^!JZoSwPdr{#0w<%U@!h zYn#40fXnF~LvTCre_>84>Ip%~X$|fz|a$Mhd z&!=`Q+c7-(C@^GbnSI4(UG9JddmAidJ@7^fj<`{i(Xpm04JmRNTYUS`F<@HAB7?bU z>&f6j#Nc1T@E6~i-7l{QTOfb(Q-6i9m>Mx?eh`@a)y~Q_#XGj3-!Ezmf1x=CW+F1K z;rZZkuUKofTUP>FATQt6d46x9z7IK$u{mk46{Sf6!yg$4T$)WBOBBrv$gs|oqm5M- z`vV^z-zp{xpk()d7Hy874(pS-KFM_$QrZ44_arhe*~K|?BMnJw!VFIy zzP0^s?D_sgtm^WR`j4%j_D8D$#k$>m;zYF~WoU}}oq3r9V$0JNyf1|1T*}O+s}DR2 zK-0jf%}}LsL;8i;O@@7%io-!apK34V4WxrAHp8;SaaR`{T5mG-Af&QuC*+wHSyh(J zL8y1Xpbxejx@{cVpv(lH(2RbnY$B9W5XV)x6_o@}Y?5Jt*e34m57%0f9HL4tRA{5h zS;*H}Em7E-^u>a+U^K=1Trh6Jw3K8umshU{3WuUTi()wos};j}a_jHg4w2oFb0eGjbe{Qsb3xenS?h-^( zQ9Qx~>l}@C2MnavGb>Zas?S8oOT_>ak@560=%RSIaqLYy>>VLenFPv{!8oQTnj6Rd zD%#-v!d2*PTQ1}NvK>qWe5$;UFK+vUgW*$U5(DVC;1htJg4OS8w!xVB2-RSe5E$`- z3Xw$cgeseWPL1Eo#3)m2pl#{u;BjE&4Je3#zaM&{4QBcG6AqEfz|~lQVM~V?5rdrn_hn&MyUhR*<_q7&1q8jhqgY9) z`L$PLm8pxk_-M*h?fqqRfAj?1#jxDP$V>C@t-!AG5oGsP|9d}W{8oqzN5Fu#x8=Wg z<9x^r)lr?QS*kk@`V&a`)z=`BZ+Mr_1a@R>G(y41jg)fv1 zU9k7dN9Z3hMfu!4e)p?pu4LJx-e&4+1JtZ=~Rh#S|^iP>UeiHZ`k< z?nxP1TM$$#<+}Enf>aIo=t0{^Jl%hAbjeOo{qsB1M)hwBv}zMm-6pk9Bmds7zZBtK zwQ`Lvrli*G40`bF`73G~%VyMZrCdk1GBY=Htk5def<|5c)=v`DDSeL59w5`dbkV7` z*&9cj8(qtN;neZ1cOw_wbA1E*AJE7YrBat(m*;H_w;N?DCD;a7srg%&hTXAkr{&PT zJ~{S*>H3_Wfo1A9D#e7ErXl~;jH*_+Gb3u1Sh}0#Lj5rZeStsHReNxR;XhvC1+90= zla1x(3P$h*F4CpB0q2xA)n69k?G#IgIz~uR(08y#LA>imvTt#oop0sHl5LZ=V>GpL zv*xq^6~)n|7PLdVR9B%)opocCYgp~hP{ViWr&kmiOsd6%i zG%hG{u@p>KRco#ub=QX?-QY9VdzZI}$8Ka<4q(K0=tfys<3>xN62X3askTjTiJ8$O z9A^)FZkTX$a2%t4t{&Ftqqnd)HM$>saeriwz%6hK)zor@J{Nd{`ORbBwy-+RJ1PiQ zA2|zx>#t;4Xk$|s=WQEeuT%`W5vv-oUDfC1YI4cmcRE%Xrl#RlGUEU3htnvvW8hNd z_~5GWB+moDjs8dO2TwRg$Ul7fJSAP+{Ypjq+JxG-M!O4i&nCZ71l^JTR0}w&Di%goPiE~FB%!oH7S%Oy0kAd%t&n5boU11+05(nHnD03t!To1K}IZKXPKCb9Zz~1Wz zJT!m4;0sz8$^O*P2aQO$ZSbfD5-HKRdlN7L(e1KtTfTU)lTClul-fT;_P1}{M%21B z1Q>qid2ssQw<8`YPp+-v?NxhpXU@0ACEMrA`ztk9ss7F(BjUT9k>}VxXN-Mdp0Et4 z_l0Rd?pBY;E}BtY#821A)>=Dir7v1Mw}^L}Obc3X`CLq`xu*Etv#D8q4c+*Am;Vq_ zUouBFk38JPvi5So&lFuKuIYF|7L$uroa{RAY_Fh|EkmO!-u=d~jSV)x6 z; z4Fl!J@z!X?9M#8lx#`5Wm>Z z1COxs{!xB4UQ{!sj;>i>1M?3sK?*3z9ztL)fFsSbk1J_D&|P7wOHL8h6k&Dbk-cM# za0WAqX3yS`c)WDL;&@xSh)xFg+(n0`dQ3Qj`J$l zak0B_NRf(ub7|OOr9YasW?8GiOkAl|oGmci-I zn&&BbBD-ps(Db=%sbqUSXA+y}c(n^CDmpFLqbgiZc!wWMad@kFe~P)#j;ebS;uP2F zjrs0};<8`JD7cnUt!M&t0%SE3K1P-7Bvq?YxUap{bZ3*g+~jXj1~GO{TXdN9R$9xF zK2#N>P_s9AD_92pk^-#w6Hl`9xi0z1jedsb!Wr!1kbZgkVr7aQG|iXq1hEV_rqAyL z?Ng{w1-H&^@UoqacDKnNVqE{Ysa_{VyR}Txuq9RE(?vc4ck8x5+ftJADPe{lgMK!! zkjnHWsY*#!5n>q_f&2VxApemi4E}-6xkK7Y`z8g^f+x1t8`GnziuD6nKC<7c*@N(nZF?YN`tSL zaV=Mm6TuzqCvXAJ?qF-#SulI+tA9Fhv@fUB940^H=uSNf#-&ZJaXYaAuLTkZ`JbQv h^*3;$o0YnIFx~*q=+tue5(NCy(}rqQT)7kczW{vbJvIOU diff --git a/assets/images/screenshots/killed.PNG b/assets/images/screenshots/killed.PNG deleted file mode 100644 index 3f764f31bfbd16edc2866bcc04998c2efaedb765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31479 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 diff --git a/assets/images/vanilla_js.png b/assets/images/vanilla_js.png deleted file mode 100644 index 0b030a326fc4c4979caa8eb1c021ed3671345050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0YJ>p!VDxEpNH-NQYryHA+G<^7&`kZ)6&xZ!@#Ol ztANbUHzoiXKvh8YCeda0fUH7K7sn8diCZTfGPzkcujXNGkgX8B&sC*A`sXYh3Ob6Mw< G&;$U5nO>y; diff --git a/javascript/cards.js b/client/config/cards.js similarity index 53% rename from javascript/cards.js rename to client/config/cards.js index 0f64861..9229e93 100644 --- a/javascript/cards.js +++ b/client/config/cards.js @@ -1,57 +1,32 @@ -export let cards = [ +export const cards = [ { role: "Villager", team: "good", description: "During the day, find the wolves and kill them.", - isTypeOfWerewolf: false }, { role: "Werewolf", team: "evil", description: "During the night, choose a villager to kill. Don't get killed.", - isTypeOfWerewolf: true }, { role: "Dream Wolf", team: "evil", description: "If a Werewolf dies, you become a Werewolf. You do not wake up with the Werewolves until this happens. You count for parity only after converting to a wolf.", - isTypeOfWerewolf: false }, { role: "Minion", team: "evil", description: "You are an evil villager - you know who the wolves are, and you want them to win.", - isTypeOfWerewolf: false }, { role: "Seer", team: "good", description: "During each night, choose one person. The moderator will tell you whether that player is a wolf.", - isTypeOfWerewolf: false - }, - { - role: "Shadow", - team: "evil", - description: "If the Seer checks you, the Seer dies that night instead of whoever the wolves chose to kill. Reveal" + - " yourself to the moderator.", - isTypeOfWerewolf: false }, { role: "Hunter", team: "good", description: "If you are alive with a wolf at the end of the game, you best the wolf, and the village wins.", - isTypeOfWerewolf: false - }, - { - role: "Sorcerer", - team: "good", - description: "Once a game, change who the wolves are going to kill to someone else, including yourself.", - isTypeOfWerewolf: false - }, - { - role: "Mason", - team: "good", - description: "Masons know who other Masons are. Wake them up to see each other on the first night.", - isTypeOfWerewolf: false } ]; diff --git a/client/favicon_package/android-chrome-192x192.png b/client/favicon_package/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd76452c905b393d6f60d26972bef4be9e7412b GIT binary patch literal 16342 zcmcJ0RajeH&~AX>7Nocr2~r3YcPQ?pl;T?4i@UoOcPJ7l#R|pUDQ?A~SaB~F{LlB_ zor`mIp7SKxJK4$3+H23unwfXriPlh)$Hk(+0ssKGiV8AN#J>B#7X}()3thEGN9=%B zQmRq_Ky4!SqbVxlGo85tR22a5VFmz#!T^AK#G#;l0Kgpr034bC0K%C70I73stEMR8 z3p6ujc^SaVe~+&nWhsaw=x&OtvgkY57$jT(o`gT$0D!osqKuT5*YZh+_ZP+`|MgpM z@3}SkYd-nOu|M6&${0YYN`)^vDXG9LI=Xy_AI1-btUBw_#!3h)8;3j`^a_vNT9ZLm z6G$H`tP;Zz4(mq2L53*WWY7f}a{O2{Jmwa;RarN*(l$D~OU%eh`(QY?Ha9!F_BLfb zDk1Cp*ofcVzo&#-5qkLqDxuGRe@D-gI7*|v@{?&lfzLql)EJaF)v9bKa#`syLt2o@m>R- z)i>g|$u3=#gHW$_f0U$3V?^2flifH&I^|AuBJL!D8vzUG{e_QQ&i0ygMhneVO z@bfPaNE=8x>{@Ne#pmGj6L-`W{MF}Om55Elx#A_c_;CtArkzHDcMhDD*Gn5)?7^9#q zrZWYcp!?KSF5DuEgM(wMm6M%aAPG8N)Uw2WQR0^9m5X+cbY`!2||Vum)e-D;OWg^7J>UO?}u>T?GGf;B+hL2P2F;A2%=IA73$=cO)riph0vk} zpu>d{j0lOReZNLV?pZb(l^IljO_f#}9=sRM-^-RJ3q(2(HbycM8R?-3#VP?4$8d1u z&v1QY*?;{|GI;ViHq%bGI}lwo zW>*i{A)&;mpiBqML)ZR_IF_kowFURwzW|Jd*#|Lfm&OR8BNGh#?E(`%xB$nro@`ug3kH&*dF3~4 zFGYOFAN$$gH7oP>6b>ng+rRGB!6F6|V-d&7Qj9zB3oIaU0s{Gd*4$I+F;G!#34Qwt zyKdR6UD(@YO;ZxtsAi#OgoRmLegZp;{N>4 zN}vd&3U+n{^10v_Tx)#A2xdKtWwN0iv+A9%RYIfy)-cH49tkaPRo-l2YSHY$7i+?V z_uahXsk8XznXaTUvQ$HxUord&jA{h_=@hZGI2O@k0YhfXGG;L^+KuW2yolj8k`oIV zxEl<53}Fvx7#FK^(+|z8lFN;ThB^k>+&C$fjTRUvqjea4U*_gsg>=gUdLcRnI=u;V zVyVLOC-*M;!DcQrKU#h4Bt_X^;IvWEXE>2gIx2?fq=mmj8W_q~-)FNS+|9OJ^rJR$ z?^!+ANeQD?JEsU*e!6j7r5$TDsY=>lv80nO3j)Fe3T6|(K*2C)sz{{JgbG0w70^^G^HY7GDK%xLNej`VFvAtod6Aor%AHJVeWa*Hejr zYXatflh(%N^Y9zLpA* z9B4do3xr5?WlqSpttm0~F8U4*?M@MzTf*Uwy<2!@XD`}yjg7)|e4eu>ud=7o zprxR#*VfTjzEnxZ8!|+IPt08W)PI^?RAcY%WL0K?-4I}zS^;xRQSiDFtFEy=6HXt) za&=coW7J}|E+AE!E&9w?CTX>HBeEvzs}7sx@x8zDJasU|?X}v|QXNMOj8Mr&I*OJ% z4Wsb{Vc^+doJlA9>X#a&a_}zv>4=Rfc3{TL-?3V--Ai>gMyOM1Prd?1Pxl2%D62Vg zaeEm+N}8UTpKogJPrWXoXEzni62wu2kn#>m!g~`(M|$&j0=fpG4VRCQPj;>;-M84i z5VRW{B~}?Zt84!PI*c2KXfR3ag|tY37=P_|>%dUO25s2F(X^vO>E0DnNZ(d3t8m`U zQvCQeEiK=3KYLfbo3I7X_SqX(IqB;A7YyVZ&)ek^`Pj5+F zv-=TR!U;s6E666hn6wDQ!I{T!E;hfgVBVo+Y#v}rz~Z6O;z-K6^DCMwT}dZB`sgN# z$5QEJT=aRsX^EtvJewwEhES3<+~V-84^p((T5e0MjssO9A-NKtua6*UVQ5@G^BV-m z=olNz%IR6eeIlM*dlq~KgJB5{oM*zwfG0w2$F+VJD$66+17%vdt&dSfQ70!SzinTK znV1G7eTMZ8E(<$a5(&jY%M}WB7|&69b)>1TEG%jyMr?T>p8`yDNwgbUw|!@M%I9sp z#1iw526tzkjd~g#NcPlCGtoRubHydB=cXqV3)1uj(ETWeOuHmFR?~ohXvQy<)vLW8 zRJ*&o@-cQ*huyusMFBR_FY|R(i@)`HSq0;;V|i5ljcT>}>#D9qN3-n@eH`&8kA`lD zV^L#Z3}Q|4H46*A*aOG|W}6zj3asHaSz0_mLRtUljhoiY^l+OTb5a+w2z&d=Vl!-A zvT%j+(?i*U0d9hzMbjIV{tZSVN?E;Ebq+a8OG{qwmv8w?J>TMxWT4$*3|~N7+G~7Y zDZ~8p1pe8Ce?7XfwilS)%c)X-&z7-&E!x;fagb?gSqe^zi7X{#^bPq$)hPfbupcUg zR>jdYneGd9di!@P``2&;2%;e?@aHx;{^@q1I&{5UY#c9tZ*}gUI6fX9Z4^+HTv=6Z zl6~)j)AvwUhxoY z^Gi@G>zkk7UBo>Ql+o-T&k?xCx6oBloh+HoaCQTNB9bAiHo|;wa=xETIW}R20v1lD zPi*zQx6Z$7H?a5+BLCnpUq^^e=3BgIdc#Vj>96>sg{Y$Q1g__8#_D3`AiM4tTmz8w z<5v*FhhyxQ;c5C9pwkau}GZjKnTU*d1H zIB`Cu=Ie!+*uA|0#rAJ{?g@24W2(mE7jaH#g}AB6k@_7^1a^-`C4v)LAC0ica7s7zE^Bf4NUvNP<71-y>SP4z# z8l#So)ag#q=15c+aYaRwb%Wl6M?N)k!YGy-5nPCMr=?*o?d&J@PUJc|Lf62*zL z!L+FZFg)B&T<-=;z4Gec>*r4~q&? zFS_hWf?)c+-fkfAUH!*FgZ@pLEk z7qQJR4&iS{YHQ{mjR_}$I_chDWz(G>KfO72$7S8A-h+2akAT;}$}kVc-s5YPVl7nG zxnJW=G?&knvU-G>V_Y1BaPgHD{m4Pl8BbFYopf#4rlzKIe+dr=&4>f@V6;mZb%Zfp zETi21RhETP6T#27tV4-K)(aiVTavhbCm+%^>tDaO7sxCXN(YE?t?qa}q<|U`@?1qV zXi_e&^|wy$hPZuxUv8l08sfCpE>$-B=Z(yL!uBF29d}DrO^w+K-t6pKo%G?=M`S6` zlpuhVFrsJd3MauKF_DNuni%)9<1FvZ^;V?Nvy8bIK=Y6>#k!Jl@x;^gTVNBdqDl6= zLq}-R0yUoDNriY`}F z4IgFG4kpc?NTwO_P9?yj;l|QKEo5H!oGa*U_XB~BuA-m~MWHE~imIyl%7oS69zNGEq`+J z`#O?IW0YE1He`q-RM_%1Hpq+OB&y!3JKF=lTwp(f&sDoU_b;gI5pG4A3~h9Dk5#4n z&R>GcW&|f>t>wN)C=iM^P`u(`vO;2^nV0#6Q1OdN7on+FjR{!@)J7C(xpBPZ62D~o zrk$py{jtGtw2^TN_{sU^xQ>&7B=KQ4-p)-p&wTEQh^h&wQ0N-;x{+UCOLWmjWwykq zh6so>ZfSnZz>O2SoT{CN6X90KrLFS`rQbO)bk3V$dTT zaI{cYbZWBpPel-X_=#cTc3Qmf`dv;Gri&Q{;L2!Y1{Rw-V(|xBWx9e#O5+t}G`W+O z(Z#Q!!qx`B?b}#wK?kd7*qBi5tz(;#o$5c*G7(0bkPXUM=%mgNnsO8|6LF!lmX zUV5YfOKs}>PDKaISeYh{7HUf7=%>;)p83ziw>kd$LNQFR;qGo#Q)i$o7bXKM%SJU2 zygpmFq**&>#z)*FYZuAwITZKmN8UTAQV3l)B<>wHsvw1;3FNJa^2S5G-guIV=^hpK zl;YV7?ef;oVebF*_yT8gAwweOwCJC_q&r0J*KRO6P0_;9#mFd^85!Chm#APPPmd$n zpIYJ;!~+pK*BTk1#o)sUXBX!p1Bc4XU(! zLLvn^w%hjmE$9LSv}$eTkQ$e1v0bJ&iRUvnGA5gJY1k4Ek%}0FAeQAS_jaR<4zP)( zN3dDB=#~-s-l{Z4>l$A5ikYo#`oYqjVcw^063u@^^xe0j+3_7%f3F25)e3)=&$hOg z?V%E#VGhQ>jbW%Z>WEuecv2@;qd?-FvgpVNa_Y#turUnuqGoN+Z+mC_0sM)$mbO9# zz*uIR@Ja)ixkE4&!ef9o6i?n7;M()3-i^ULNd z08fl_n*+{lkp@@|jOiiGD%&>4fZ`SYGIOzJC2w^?lZ+3oog z&45{!t-Iw%>;zDVQO)T6{Wx{#TO4ebV&Q}F<5NC=w82+sl~sTGU9fV6U1|1}L(HbL zyaI`32|iZ0XT3Q-DpH>6f-I$-a;V`TF;W&aD=lrJ6|>9Mlo9n1O|Wl43}%0z$zD2g z3BP4CC3DfT`cb2S%gSW?%bV}C9gIWpPP-6{gNbbH`htVVA?h4(`nq`@&R`+A*Y6hLOXPtc>Fa$9MXq$dRU^>i1%~n^jJ-e?pu&cBBE3`ab zAtBMT4qdWJShh-dV16DgN58`6^W^F(VMF=SN)uiSB4yW3W&zeKF0vAToBYGMcP7zf zll|Lvww#eH@c9%G6DvD)Ce1xnbW0$mPOX;4Cp`E(^P>lX1wD{|IX^o|dP2F#B23ej zEU*R`QU*sqE#yG4){h8eHT9P4$)q;yI{fezP4sW7g&QnZh>I9B$q3~(3mwheO4Gw% zDHEeE&Yv4m3GH5B7s`BpBFf?o|; zrNfd^n17WSF7wwl9BRHP^BTdlkZ0r&wPbkm^Xe|uLmLN^s!D~Y|~NlhwacSOpvMGtloL5a|q@&nxxEqjN`{tpvq6%a-)H=kCu zp6T2P$&2ZVnt#q^J?bA1{RTK^><{kqu9v)(VE;H{bpqGz?Pu)mp#}PgWsGFSV32<=MjzxfvnWrd@#ItT z?9-wW;}4BRCHmqo04@j8Gjy6#o6l(v4wOf$!WKnN*s|qz?0&{ zgI#qVqMDOs<4}&6Odr1A?jA{P?sMCLTa%4N09RVcM(Utah%HR60a`r0ShQwy5@>=h zLx$GeQJuhc(gN>PF7BwE{q{<^v-?(eU1x4w_7Ju+Q~hS?%*X^`4$hmw zkqE!u@NvJC+;k}RAp&r}t08uvXjEyM=@Pu`wM~ka>2iiNH9VrfPZ9xeAeQ=^e|GW( z_>^ziB=AQjB+OUmbFy}cW(iD^Tqo{~mR^t&UskF7$SEQ?og}N)7T-I}QK(VkVNR;D zZTNW?p5ae>i;F}S!M%}r*uUy+tCV4iv=w&pMo*Fqu7eyvETzo~7Xlgs^{UXSv_qG& zghqA@ZGG|dKi+U_Q&TUS*}1w;UNV%g6ouSCo>(_(EKY3z=|SLg#1!cnE}#{>dOv4v z2C(nFaBnyMhaEhGllH5LG}RM!F^o#$yKC@VR;iLu?B9o@EhQ_+*|a2w zb;C65e+BemGri)$YPQi)fJtId>HC(u`&hX#_~cQOCg>x#$1gtPTh9(5$=cOg58ix>^^(Rd241)dxX;y}{Zr)=&}lOz1in(_TxVe(eh zE(zlK^LhZuP6KqMu@>MdKibG@)jAjVJ%bKZ8&g#A*4}~T;@L%I>R432o2w)mX~SC# zfw+IcVt|1KQ4y+x(HCXu>bv!O*cW$56~L^)hf|zd0;J*P(i{o>U>mh18pO!5P{&c? zhGC{SrI~CJW+5XmPs39dvuMfru!)Mvg5O8y(R@JU9@pNP4zjj;zfm^S2UZcNjxe>( zGm4-CmYOn;!?vgQUBXxn2KuXd%k`)3#Q;MZ3 zS@^BL#z209skf5VW;Nas;?btqwx%GL15LF!0KN+HC_^LGtZ==M9hUqla zlyB25_tM`l-xWyyEL9(^%c|mHV0M%FQ-yE~fH%wdt#G2_iAUL1B$|2elow@kdRWqD zgEyG=5twqUTM`)K_z7+im`-fhEJBvXKldhmG|2tjR$(!kMM-Kw;n=&75ot+wT+e^AzKQ z%yi`Qm8noIHa^RvSl%3cd#5VG2qaT7lNH5)Acc-y>`P^$@!)6A-Ju}}Csa6g=5T9x-l zk12!3)WqS^!3uH=I3d};&2ARwH~rrMz9@u{r$Tutb7Tr9o5iHosbJLBbInl0T8$8C zRztAZq-wD$y$72t;b>~q*fD>Oe!ZSP0`PFzJx1ZB$f?iPSDCXcR~=72e(z@HTL7Uh zQ-JZPlKH^%W1%#f#E8Tcwsk6&;I3sYSuw|0`+)D{^Jc}=(gSH5lpJ~!S}70TqO7sB z4Wq$7Wk&{VMXAHyu$HEkhRJAtYjGQUg8(F{Wrcg>^wqXj|BNAjs8a_|E$pPoNk;n{ zv6j2qA@%)$gyGenDyMzoVsKB8w!~2y=9MX=%_1Lo$okuIZyqI|K6uOc;j*q}bl5+o zV?mR%mv`|3XkT|Gf*e%I7}cc_GuLqBB_?2qf&JE%IL2ar!Ewq}gg68XBi6&0T}@@7 zTB6|f?n^QIvM@l*0Na3BxMS0jde*9iL7rO5NfjSfIM3U+v0g?QCnpVV zxx*BK>`S2R<*AbbSr%$o?Z9TD>3ll*0qZbT= z;41q<&DoQ*c#0=0wA?jZv@FbUXA0tZw|HB=rSjl)@q>E%A@$WYuc1!?hIBB0ASTlA zx5>HpHbrI?(?JtlGfH;SWQr>-UX?tZfijH6^%SyZc|5A@38u?p$B%06%c6?SPMCDq z^g!23Wd&Bgp|chQyg%3wR+nQY1>*^aP94~9KR7-7ZV}S@;78#z0jzc6`jxVU!_f&c{?IU8v9^n)he&(m*&54Yf?B z1*$y6Vxd5GGt-W~e&lkwyOSD(9nNrxZFQsNn+$*1JUiuE{RxCriw+Bt$&JC@P>xb) z?#W+wl!e~-W^MLoQ&L7mYwvEy@chH6Eu|f)Qd{ryiS|Eqeh`5GD#`)?~5XSSXduR z?UNjpsV$jy<$`>CQjmg!d|4XKoa=1M+96zj8m0dD(`3MQ7`6jMceuoIl><#kuzbQ_!)~_+oL+{wby+qsMa?(UIL~ zu=ByEcUA7Unz!k-r?hyh@26h!RH{k!1KrT{woFeSXb45RlCru?PsJZ!o?f+!3GT53 zBy``Ni>hPNXG>x?;}{GdAtxQ9`n2C4vZux{(fFNj24^&P*+H}k85e8Ze*&Z1FlPI}nr6!goIYthZ$I5=Hk-634%hKO5_zBUHU_!q7fVdty)!fF zdpWoiv_;J{iytt^%y&u8&~4tldI1+QxU9YfM z8dpA>)yXE0d}!#kjUFkEP5+_)f}YQ!A8QOsrx(%cWDqq3TjJO>w`uQu`HHzF8h7C} zq*GBU+oZ2+rzT{SweCYbb(PIuK4=@0*8Wu8BR~|1RHJJUG>W>B)nVEn6PoY0A zH8}KcE6tB(2)n_@Wng;}#Wy4NnY|O++l5suYz=erNvCM$x+Dlh?5DhDR#%vpJMMT` zD1OBIV?*z%moX%bZkLE?zMP>iqKUy4ODM_mo;8Xkv2tgx65C`Q^;dV-w}i^-I1;Nr0=6(wVIM`tT@q^aBaW zga${tP~h{Xm{?aI1V^e6LdND&!x_-5i~)dQgq};{@fddT+`TuyMSIuuI;Mh`aXz=x zLaC$$>E2+esiXJ-*UN}&r?Jt&Oee)**A$Y@nloUrqDHY$@E0p6fejZ~LTtX~LE`SP zqhO?Dl^O^MhSQ*r&k-JT5`=*`IC7#lfX(={9D15xZAeAnaM*9~?w|yv{gnHG;Bw3|Bq~-bNERO-V(4@{8b$ z?Hp@*#$<6S^9@1?mX~p326$p)tyr=v7WF1xFweuQ3iQsztg|2EhTrV-rBavr zhxnp!Qp{>)h!y>ehiL9PGX_zpt&(W7JcdM{7Yj^tiIL&L=T<>Y*!1Ew;hNsQuGlM$ zS=mcVY&uGc=54`%QszY>m4s*PoC1k)gm+BX#?i40=~mZ=F;{&ooV=L*8t!ryU~M>} zur(x8`bz=W_f_M^d&MseFWB_fP5KD)9!*txwY#gPi4dUY>86+CjnQKSy>o8=va8oy zaB`y z7n!bJX@fNSB#b9e7@RgsD<<SjIQz zUT6n~n$;?`Kb+Z~m=#N1*3??j5hn2V=B_UH1%jYvw5&ztxG02ys5fc=Tqreb(;56o zYMe+>0r`?4o0HBWl`?UU*I#9(sXrPt#iq7)KtWz!`LQ;7siSE+Lo`>9mR#Jcin6C$ z-V^y5Vb3_mPR@^L={7Ja&!svRQ?f(V7KoYhH2m?;yS>M&^$*N{8Ie1&{B{_EMp=v(CIKuP1Dv@sjk2CZuWwaoM~dO;*n+xA!@;`+XB;Th(>q*n#983Ie| zaMjTwgK|PSr0SJI9S)Q1?3Ff0dD126e&0|vpTy&?tcm!@L>;W~&F7IhT2eJeBpIHf zIa`x#k~F1PeITuo4<=ztm;CDm+d7D9p~nf9V^fZBEeYwQ#@H2ro!BjL10jEdCd2}U z@FBLXEcgIMUd1MQ$PK7Mrc&rMf2Gy0-`8 zoLBiPb2HmL4ENNGvYl06|>PxS61CgOq^@3&2!Mnv9f8RE=G2?esp zKd}-krz(AjxWyFatL+<8F^FBi-S=3LF>U5*Fwj$f zSLeudQYerkTq6VrGTw*p{2q+FPU{oMLdud1h*)Y(O;#(52ZboXeB`ed829bG??hpr zvnoDTPaU-9|2bN{Loc5zEnmn$6lRJwz(uJ=M#d%x$M7| zLhG~Nd?H5Vy%Y`(!~D&^`sobYJhIZ#D02-1g38M~J$>x#5S7~T$4Al8(NTjIzv%1h z1{Ityj1;wZAD|+$MGA+z?!^g-UK3eM!e#0OebH^p8A`7v^8FzW=WDk7%^oK+CQMN( zoxOjng>cDj)Dl66VqoF^xL-#H%gX?-0kQ1;L|)yX2XQu{x>Xl9=@dU(9y%%g#KF1Xq>0g0` z8e>z3hOS?}`O0KKc;~5RBcjB1c^T^|cl%)jL4Ly`$;qKK==8H0av=P0F-1?9;(YI7 z!kGqj6FyPdSXm2BkptM+rcJnh09R_^FA(;`vVSX23P4&vQ^qkb3jfjNx>B|K>nz23 zNY5cg&*3mZU5gBE?^uls2hXqwg#`UH%}P@^>N##oNksfpMo=Ok5fJ#1^@Ez*QYRy* zJcIkFk}ZQ>#C{pdsyEIYVG6DKFtpqr4$2j3Qz45WR)!gldv22~%&}+a8X9iCi@j|3 z{XPiP8}Bs5@~U3iN~t*VGIH9&t%Amw)%L%`m-v2*L+)x%EL*StlyFgM1Ff3VfKJ;s z%=~?n8BuzrAGn2D18a;-Wy9pLL6X2U09MmH+f(5o0N(z4Q*#71z0yt8KiBIP{wWwb zAJlwuhO1@Z?k&^yby1o=>?^eD*ykn8?(8_HO@cQE_mgYRLGrkMEdOSqRhqRfT&`_+ z(BBlg08OHAec9r{|6#s=FTY`7`pA|LZ7UhSYRi-*Q^U1bDhIz7$b z{&TMFE;maWSAQX?+Uw-~{d+5DAtU)vpfk2b;sr^3>e5Sja(l_DV3Vi-4nra6`NdzJ z_3|lH0%!J`}zD-7vA6(@;Bp7t2ce?rn!R1zZ62&fq$?bxg;$DZDGB) z9l<_NFz8)^ZHW>qW3rRqLL2<~>?NR`PLdq$gfu^LUmZ^#ONL;gd{(97Oe9k~*>jP< z^X%e6{gEM}_2-*}Fc7hF>%L>z8jYgpyN(R8jiz7$HJ&|n=Pe8qVl8GQG(cgjriH*z zo|?$h%eQftwxyWSoc*wLkBWF3GA-K=h{E-(qur%-L+e>x9Oho&r0<_Tk@dR?!GD_i z1(uyhlhA-ihsbvTrOjNS*cg;iQC9DTw$5l{_+4NxY3F%3ied;j&bn!(w%T~jTQtTj zR_{gkEMh7`(d8ouun%YfN@HlucaL89I~_X_QF@RBJho`DnrAZ`O(K9rrJa8=?uzS| z`7C$mkrKI_&-H%8`m|+_^G&dpjwe)NCxR4QztZLpjra92LwPhAJSXaOu)n?G*rGR! z=427WEaDf+M3ZHy$q0T`Ye1UmXgnv|yhu@#ub6uF?3U91Lo&@aUARad`GkQU zoJwFy_StR+?ZhKR;(1$QbFQXq5M2UJpYQiiQT)1G{bKCxijjU9+(_U%7uqWcWr)lcJ^Kx2PCKm{7Y&7H^Pqi38hne&#bz{ zIB6%G1wsG1*ormYJSdYG#^&-v?St%lbN(;whayO_@XM#~^6F7CggDB-Os!d$`))g2 z!e&qcsNoHWORH*=dWlToLW-zGd&KW_l@{y92l)u7ET~gKYKghJ^+bp9v++!MWe?VyYl+n z`DZ=T#j(cpa9enZNiB>QNBD%KrsJ8=Y9e>{?Bz=0Z#Ze^7}v``iMA6=H9>zfNevgM zZ`b%?^iCFfui+(ct&BC&OAYk!V=?$pE=f(2_8R@EBY5vx?)ln>6Tug1npJJlpPXBl zo%WiOW*vC=b1N=>Q=6z+Gx_;w9#^y`(uSh^xmu(@=b%@;Rm`&Or&V9UY;__-`QI_g zG#kUGC549w@6MqreE|doe%GA#flOWO`ZxRn54Fc)vGaO=Ds?PeE%DA z;XIG;SRMC=M~@YOcNGR*0SJmR{9i`bnEKQ2^}>~t8EgBC?od*%f5V$tR(^X9}1S1$~rxOx(nV7JBKnl`OnmKUeDa8L*-H5m54g?*gS0SJg33;OK zL~a>CiWE+`o;9LCV81fxZs-?y2KZSM`1B#)fA`YHJbo|VH-RhQBDS2-YcrhG>-lc) z!85)lgDP+*?W5NLEMsPJp=N#KaL%s$Q?u6vLrvGSFv!CF}+@PHPu3dLon%7xvqL3>BwKCYbYc z4sJPuA>Zkw0Zv65D`+L@njg3gm3f)uJhnfcKHsD6q7}~PZ6|XVjVbcq`^SvS`-yn^ zq_yq4#}f3PuzOwJAeu!DsjMjlVSMBBBd;^=o2)ao)dnC)IfVaQ9SOm+`#N3{NS;Y~ zTatBfrl>!HeiPNfs;W{nYywL%HF@Q;wpK=ZB zug*nDUvrkW?Y-@%lDJgK>6VZjdW`a#XmYw8pe8*fM^>zhR2%k9P7`jr5yx4v zXsq4m;k?qwt(x+=o%CGP2{Ee9wc^(x1y&k2j!u{!gD?Oy6Jty*k<<|XJ&xQn3tRHu zb+gMQmcIVclkdufwm) zTF$$@^L-BeQ1-y~!@Ogs!E+t_owmMOR zkcsI(-5g1)Xg~8`pFlW=9%`To8FP5=pSi-H^mu(3eMo6elvVeYYuLFGJ%2lVPob&G zHt;X_eyIJgmCBbL*YJO;?zXPg_j$Lgb{)i2QbbmF&w{|uUaKZ^(;F~dv{ zMC`qS7oM7qd9GG_U49r8v;21upJI;2^)5fFB+0<;m;$rv6C)Hh-nkH5fFzFVhlJ63 zx?exlMsOPsjA}`jFgAV`)JP~gmq42!OW@|I;n!s>wHTbv4IPrW%$ht$xW5v%!T0K7 z1GfR|w-+$A&`|-d_ciI|uavXf&g`}04#7U1>OCHr)mnp|Q&H|Ok+`8*Q`?Us`5QSe zM_nUM;!nHJddKwV~4H!2=7s4Br1Q;OrJmDq(4K+&7V8uvcfc>zyt;E+r8V- ze@C<`0EFOa64MVv`8>IBs1a@%aAqL7fEMPGyDxnd$Tiv0YB>yzd2!w`utpQRi6ugk zQ>oCcz^_$t(oC!}#6oC+&7Fy~XbQk8j}!r}jtL+8YsHbTEF^5Bb*vf6#8|R11JGQ~ z@0bjV7Al7v7VpM14@s7DvtY=<301Ke{47B3(7YdaGH~$No{ODi03Vq zRv-PlD$`^|g>L!K7*4*^=$Q@{>z9>8zYk$8*U(&-V@!74KJw}u@+d2gW{k0J%0?(_ z^!T`Y7{~>+`Q+-k(Sch`EYx9%7#nt#t;u-c@elxLNZDQoKI2WbkP1BsuGRoSUt8AB z-ufikDv&?1K!?%mk|jTy9Yrb}pJRh%5m_WS@ZkZ2t3%Ow8?B+KD|DbqLh5LsX2yS; z@4J(4$VhP_f!_hPy~GO>TVhA}fM-C;d{em8?Ur4A*A2r?ByHhMzsLrxruOc*%j!N! zUiWd(b6a)coW44=#ECsjL8$9hq#GlU@7JBYo+rXgvGV#vvWoxflamKN;BV3y~We#6o2Obj_q0>aP;0QgHzLY2+=ixLMwOwg1@$4WO_*X zOspKZiEi!I_KoWqb8cvTqMY^~gDnPBI=t-kBC>4kA3X9p(dEAHh5VG|1@|Am_~_W{ z#EVASXZFf!gS~&Sh3$?=nx9atq1vphENTTqs^Pmiyoo?u_)3tkgv&GVmKsSVM&a;N zimBok4xR;f%)T#^{->_?j*dKCkkKo*_;Alo?1xnp6^Sbd8_t0@&3JWeN3D|AwW{8@ zT<$V?g(P?6jbDLWlk(iHhG|qov&`K}XS|6`66FHt#dS?r@7u{obWWponV(B4urD!o z*%T4M4nh};t>rNphmT5zC;_-@b-w_dD4U;tem$OFaX7i^;rTsg3k)0QBebv#9SDCB^8*ynca1h#-Lcq`2{J_&Oy-e zxo`VLB$XcDmR-O~p5ZG(d?J&_`n2jITdb^E-dCD5chC55Z*k8Q7KPaq8wGHRAS&C* zG6vMeIvksV*+=p`%RP6nI63XF6G=qfc>M;N$S>eK$IecUUa%jT0_In(`J7F#-fIj$ zL{ws{TgwqEXC8ZUqDtepL11ZVsr%emCiv2M_V?e;LW|Eeq1E$M(`Uy!sl4CS#QhWB z-=E!Ess+xbfMGfIW!lV0={5ur^!h7Lou~=h8Z`^=qY)&*&V@uR4JCrG+qFL)>%TBJ zf)v`z65dY@ABrW?og)HvVqoUw_Cp`7`PTM%+~6&fX_ zosHQTJ6BhTq{#~ZfEo9R0T)a~ndrNU_Q!}zWAp%QFVw1+y$wgUZQr=e8ZPV&f#5T8 zacz$D9}YR!*VkHD-;$CRF>i=a`!g?7>cU$;{C<4&)3XEPp!jqcK7A-ad8PvGwg%F+ z02d|13+E7K{p;V2vbb_uwZe^xZ$`P=%1eg z{_A7ifWNLs=NnCbb^c}_PavpT+LQuq^J{*m(|*4G>%a%*bK2w;K!L<5W(#G~e|@qX zDiX!X!tBB3M{Ds+x@@^KK z(E9pKL9z(WJhBKRDbT9+^&XY)YnK1oZsP+@5y$|x)W(Y+==}VL!ygwco5fy4|G;9p zYPnY7n&Z^r0oIhzDb;6WL9@(KL=B>^@gen6naO1hFJKD4A>o4g+~5(0>37jwuwx{t z29U=JHy6eOVLI^lflfU$4eQf)*)&Pj?^ok?R7*gdlu; zeOeB}Zw40a`Km9`@$7wbm_bmW%6TLUq0d8&7^8(sSi#q21=I(S(0z=dE836ep9fof@gmK&ZPRKRW z3wK=stJ|HlUx>Pgduos+6uS&8s_&_g5ck8!0Qd|NoRl<@Y8@Uo?2?c2!*{-d3!W3V zl6^=pm*YfA04etRx08Aid6As3{Fq8x`b@?BS)!Ypjv0{B^Y4lPwBzyo|I)5)PW&7w zcctS^gH`!opE{G9td83!Q#T7?^UoHD9e@YI!~KSv`wc`;i-$*;S3np7VTV8vTg+Dy z0sqGd4o;tJEWQ8lCwM7D_99OB=%c0M1~v7hbN=jPX=86e=jQEfL1*LaW)1*&9*oaWd>uZfgXh*5~>WP*76KB2t+sYN%s`1@D?SU*)i`e=~C cS0zrsAt`~|KWV-+#1H^QSv8qzX_Juu0WU$UhyVZp literal 0 HcmV?d00001 diff --git a/client/favicon_package/android-chrome-256x256.png b/client/favicon_package/android-chrome-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5e54ee5cf5423dcaa3cac3057d0a31d14b5b05 GIT binary patch literal 20372 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 literal 0 HcmV?d00001 diff --git a/client/favicon_package/apple-touch-icon.png b/client/favicon_package/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7e809316974dbd5dae788fb87477becd91dd8e GIT binary patch literal 15829 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 + + + + + #da532c + + + diff --git a/client/favicon_package/favicon-16x16.png b/client/favicon_package/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..c973b9d5c7e3f93d6b1698cb3bf13c4cf578303f GIT binary patch literal 1158 zcmaJHZ{Jp=%Q@Kx>t0v#PHDRm;rS2k8QdkY63o@1M%R0{-Gz|`M&Rb=X?CV z@0=%F;tl+g>Jk6|KN?{ZPzu&Imjk&8FW(47L3bb)0N}mDyyf;nct+BZL=1r41^}{; z1Mnv_W$yqmKmah`1_1K{09Ad*&u;JlkaxYMIT?ZuqDn$eD5|L`l z=7)@W60^AYJh8>(#LUiGH(Te4ILJChwO*|>RSK%h`4Xu_Ba>(qGCjAbOm1`tE98Zo zQn^gGu7D4HvY5BX8#MBHBB9^tD8mosS{FJkvrs~~v z7(=YM#%j2Fa-TQubh4u%NH9T%bNs)kdu_1N?9G4BFGRdu(#3q{bSTWk=@Uy#Odo@F^0qZKurIze z`YI0|iZanysOUD2E3pClvo}71rYli4kd$6cw;^2V(Ob8UibW$w?oXzsr&F_1smuBP znSso&zwk?+ITUN2l}T$SznsGD_S2*IJN<9>&d8+h-XHsy7I`I4Kh?CL%;jX#LB)y2 ziE+#_aq{GeEra{sSp4wpwdt>}(N4#x^c z*u!5DE-xR*<}c*!6B^^kJe~7r?gl=-V=iVLmOWcsD_@8#)Lzce@cNH(~c4B^MQ-7H+?45n(1iIbTaAwPAGt#u#-4R z;)FYCw=+(fAqb2hATJjC9{pE9@Ai(Ku3i5fFc^8_5)627cd|8;Xy1wS^>6R$dAJkF z?CR@8dipYH00xiWTrB18c)(;DUq3M!y`2CYlvk7H2~lCwu!ti>*sSxD4i0)ciA>B) ke>yffrWh-l$VOgntO4^?6`94LYXp`6(NLT{6>Qu8H$UM(_W%F@ literal 0 HcmV?d00001 diff --git a/client/favicon_package/favicon-32x32.png b/client/favicon_package/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b679ae9c2675f7a93e781f1af95731771db321 GIT binary patch literal 2093 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 literal 0 HcmV?d00001 diff --git a/client/favicon_package/mstile-150x150.png b/client/favicon_package/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2c94c348b2b16fd9f397f6da9f228bcffa5818 GIT binary patch literal 12089 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 + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/client/favicon_package/site.webmanifest b/client/favicon_package/site.webmanifest new file mode 100644 index 0000000..de65106 --- /dev/null +++ b/client/favicon_package/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/assets/images/roles/Werewolf.png b/client/images/Werewolf.png similarity index 100% rename from assets/images/roles/Werewolf.png rename to client/images/Werewolf.png diff --git a/assets/images/favicon.ico b/client/images/Werewolf_Small.png similarity index 100% rename from assets/images/favicon.ico rename to client/images/Werewolf_Small.png diff --git a/client/scripts/create.js b/client/scripts/create.js new file mode 100644 index 0000000..d00368b --- /dev/null +++ b/client/scripts/create.js @@ -0,0 +1,3 @@ +export const create = () => { + +} diff --git a/javascript/modules/heroku-client.js b/client/scripts/game.js similarity index 100% rename from javascript/modules/heroku-client.js rename to client/scripts/game.js diff --git a/client/scripts/home.js b/client/scripts/home.js new file mode 100644 index 0000000..26d0413 --- /dev/null +++ b/client/scripts/home.js @@ -0,0 +1,3 @@ +export const home = () => { + +}; diff --git a/client/styles/GLOBAL.css b/client/styles/GLOBAL.css new file mode 100644 index 0000000..c1ffd0f --- /dev/null +++ b/client/styles/GLOBAL.css @@ -0,0 +1,17 @@ +canvas, caption, center, cite, code, +dd, del, dfn, div, dl, dt, em, embed, +fieldset, font, form, h1, h2, h3, h4, +h5, h6, hr, i, iframe, img, ins, kbd, +label, legend, li, menu, object, ol, p, +pre, q, s, samp, small, span, strike, +strong, sub, sup, table, tbody, td, tfoot, +th, thead, tr, tt, u, ul, var { + margin: 0; + padding: 0; + border: 0; + background: transparent; +} + +html { + font-family: sans-serif; +} diff --git a/client/styles/create.css b/client/styles/create.css new file mode 100644 index 0000000..e69de29 diff --git a/client/styles/home.css b/client/styles/home.css new file mode 100644 index 0000000..e69de29 diff --git a/client/views/404.html b/client/views/404.html new file mode 100644 index 0000000..07ab078 --- /dev/null +++ b/client/views/404.html @@ -0,0 +1,24 @@ + + + + + + + Werewolf Utility + + + + + + + + + + + + + + +

    404

    + + diff --git a/client/views/create.html b/client/views/create.html new file mode 100644 index 0000000..5198cf1 --- /dev/null +++ b/client/views/create.html @@ -0,0 +1,38 @@ + + + + + + Create A Game + + + + + + + + + + + + + +

    Create A Game

    +

    + Creating a game gives you the moderator role. You will not be dealt a card. You will know everyone's role and can + remove any player from the game. You can also play/pause the optional timer and, if desired, delegate your moderator + role to any other player. +

    +
    + +
    + + + + + diff --git a/client/views/home.html b/client/views/home.html new file mode 100644 index 0000000..bb16341 --- /dev/null +++ b/client/views/home.html @@ -0,0 +1,33 @@ + + + + + + + Werewolf Utility + + + + + + + + + + + + + + + +
    Create A Game + + + + + diff --git a/assets/images/roles-small/Werewolf.png b/favicon.ico similarity index 100% rename from assets/images/roles-small/Werewolf.png rename to favicon.ico diff --git a/javascript/game.js b/javascript/game.js deleted file mode 100644 index e1b4dae..0000000 --- a/javascript/game.js +++ /dev/null @@ -1,456 +0,0 @@ -import {utility} from './util.js' - -const socket = io(); - -const standardRoles = ["Villager", "Werewolf", "Seer", "Shadow", "Hunter", "Mason", "Minion", "Sorcerer", "Dream Wolf"]; -let clock; -let currentGame = null; -let lastGameState = null; -let cardFlippedOver = false; -let cardRendered = false; -let lastKilled = null; - -// respond to the game state received from the server -socket.on('state', function(game) { - currentGame = game; - if(detectChanges(game)) { - buildGameBasedOnState(game); - } -}); - -function buildGameBasedOnState(game) { - switch(game.status) { - case "lobby": - renderLobby(); - break; - case "started": - renderGame(); - break; - case "ended": - renderEndSplash(); - break; - default: - break; - } -} - -function detectChanges(game) { - if (lastGameState === null || - lastGameState.status !== game.status || - lastGameState.paused !== game.paused || - lastGameState.lastKilled !== game.lastKilled || - lastGameState.startTime !== game.startTime || - lastGameState.players.length !== game.players.length) { - lastGameState = game; - return true; - } - return false; -} - -function hideAfterExit(e) { - e.target.style.display = 'none'; - e.target.classList.remove(e.target.exitClass); -} - -function triggerExitAnimation(e) { - e.target.classList.remove(e.target.entranceClass); - e.target.classList.remove(e.target.exitClass); - e.target.offsetWidth; - e.target.classList.add(e.target.exitClass); - window.setTimeout(()=>{ - e.target.addEventListener('animationend', hideAfterExit, true); - },0); -} - -function triggerEntranceAnimation(selector, entranceClass, exitClass, image) { - let transitionEl = document.querySelector(selector); - transitionEl.style.display = 'flex'; - transitionEl.addEventListener('animationend', triggerExitAnimation, true); - transitionEl.classList.remove(entranceClass); - transitionEl.entranceClass = entranceClass; - transitionEl.exitClass = exitClass; - transitionEl.offsetWidth; - if (currentGame.reveals) { - if (image && standardRoles.includes(currentGame.killedRole)) { - transitionEl.classList.remove("killed-role-custom"); - transitionEl.setAttribute("src", "../assets/images/roles/" + currentGame.killedRole.replace(/\s/g, '') + ".png"); - } else { - if (image) { - transitionEl.setAttribute("src", "../assets/images/custom.svg"); - transitionEl.setAttribute("class", "killed-role-custom"); - } - } - } else { - transitionEl.setAttribute("src", "../assets/images/question_mark.svg"); - transitionEl.setAttribute("class", "killed-role-hidden"); - } - transitionEl.classList.add(entranceClass); -} - -function playKilledAnimation() { - triggerEntranceAnimation('#overlay', 'animate-overlay-in', 'animate-overlay-out', false); - triggerEntranceAnimation('#killed-role', 'animate-role-in', 'animate-role-out', true); - triggerEntranceAnimation('#killed-name', 'animate-name-in', 'animate-name-out', false); -} - -function launchGame() { - randomlyDealCardsToPlayers(); - utility.shuffle(currentGame.players); // put the players in a random order - socket.emit('startGame', { players: currentGame.players , code: currentGame.accessCode}); -} - -function randomlyDealCardsToPlayers() { - for (let player of currentGame.players) { - player.card = drawRandomCard(); - } -} - -function drawRandomCard() { - return currentGame.deck.splice(utility.getRandomInt(currentGame.deck.length) - 1, 1)[0]; -} - -function getLiveCount() { - let liveCount = 0; - for (let player of currentGame.players) { - if (!player.dead) { - liveCount ++; - } - } - return liveCount; -} - -function renderEndSplash() { - clearInterval(clock); - document.getElementById("game-container").remove(); - document.querySelector("#message-box").style.display = 'none'; - currentGame.winningTeam === "village" - ? document.getElementById("end-container").innerHTML ="

    Village

    wins!
    " - : document.getElementById("end-container").innerHTML ="

    Wolves

    win!
    "; - const rosterContainer = document.createElement("div"); - rosterContainer.setAttribute("id", "roster"); - document.getElementById("end-container").innerHTML += "
    Here's what everyone was:
    "; - let rosterContent = ""; - for (const player of currentGame.players) { - rosterContent += "
    "; - rosterContent += standardRoles.includes(player.card.role) - ? "" - : ""; - rosterContent += player.name + ": " + player.card.role + "
    " - } - rosterContainer.innerHTML = rosterContent; - document.getElementById("end-container").appendChild(rosterContainer); - document.getElementById("end-container").innerHTML += ""; - -} - -function renderGame() { - // remove lobby components if present - if (document.getElementById("lobby-container") !== null && document.getElementById("launch") !== null) { - document.getElementById("lobby-container").remove(); - document.getElementById("launch").remove(); - } - - document.querySelector("#message-box").style.display = 'block'; - if (currentGame.killedRole && currentGame.lastKilled !== lastKilled) { // a new player has been killed - lastKilled = currentGame.lastKilled; - document.getElementById("killed-name").innerText = currentGame.reveals - ? currentGame.killedPlayer + " was a " + currentGame.killedRole + "!" - : currentGame.killedPlayer + " has died!"; - playKilledAnimation(); - document.getElementById("message-box").innerText = currentGame.message; - } - const player = currentGame.players.find((player) => player.id === sessionStorage.getItem("id")); - - // render the header - document.getElementById("game-container").setAttribute("class", "game-container"); - const gameHeader = document.createElement("div"); - gameHeader.setAttribute("id", "game-header"); - gameHeader.innerHTML = - "
    " + getLiveCount() + "/" + currentGame.size + " alive
    " + - "
    " + - "
    "; - if (document.getElementById("game-header")) { - document.getElementById("card-container").removeChild(document.getElementById("game-header")); - } - document.getElementById("card-container").prepend(gameHeader); - - // render the card if it hasn't been yet - if (!cardRendered) { - renderPlayerCard(player); - cardRendered = true; - } - - // build the clock - if (currentGame.time) { - updateClock(); - document.getElementById("pause-container").innerHTML = currentGame.paused ? - "pause" - : "pause"; - document.getElementById("play-pause").addEventListener("click", pauseOrResumeGame) - } - - // add the "I'm dead" button - let killedBtn = document.createElement("button"); - killedBtn.setAttribute("id", "dead-btn"); - - if (player.dead) { - killedBtn.setAttribute("class", "app-btn killed-btn disabled"); - killedBtn.innerText = "Killed" - } else { - killedBtn.setAttribute("class", "app-btn killed-btn"); - killedBtn.innerText = "I'm dead"; - } - if (document.getElementById("dead-btn")) { - document.getElementById("card-container").removeChild(document.getElementById("dead-btn")); - } - document.getElementById("card-container").appendChild(killedBtn); - document.getElementById("dead-btn").addEventListener("click", killPlayer); - - // add the list of dead/alive players - renderDeadAndAliveInformation(); -} - -function renderDeadAndAliveInformation() { - // TODO: Refactor this function. - currentGame.players = currentGame.players.sort((a, b) => - { - return a.card.role > b.card.role ? 1 : -1; - }); - let infoContainer = document.getElementById("info-container"); - let alivePlayers = currentGame.players.filter((player) => !player.dead); - let deadPlayers = currentGame.players.filter((player) => player.dead); - deadPlayers.sort((a, b) => { // sort players by the time they died - return new Date(a.deadAt) > new Date(b.deadAt) ? -1 : 1; - }); - - let killedContainer = document.createElement("div"); - killedContainer.setAttribute("id", "killed-container"); - let killedHeader = document.createElement("h2"); - killedHeader.innerText = "Killed Players"; - killedContainer.appendChild(killedHeader); - - addDeadPlayers(deadPlayers, killedContainer); - - let aliveContainer = document.createElement("div"); - aliveContainer.setAttribute("id", "alive-container"); - let aliveHeader = document.createElement("h2"); - aliveContainer.appendChild(aliveHeader); - aliveHeader.innerText = currentGame.reveals - ? "Roles Still Alive" - : "Roles in the Game"; - var rollCounter = {}; // RTM - - if (currentGame.reveals) { - addAlivePlayers(alivePlayers, aliveContainer, rollCounter); - } else { - addAlivePlayers(currentGame.players, aliveContainer, rollCounter); - } - - if (infoContainer === null) { - infoContainer = document.createElement("div"); - infoContainer.setAttribute("id", "info-container"); - infoContainer.appendChild(killedContainer); - infoContainer.appendChild(aliveContainer); - document.getElementById("game-container").appendChild(infoContainer); - // Has to be done AFTER the infoContainer is rendered in the DOM to insert the updated counts - for (let x of document.getElementsByClassName("alive-player")) { - x.getElementsByClassName("rolecount")[0].innerText = rollCounter[x.getElementsByTagName("p")[0].innerText]; - } - } else { - document.getElementById("killed-container").remove(); - document.getElementById("alive-container").remove(); - document.getElementById("info-container").append(killedContainer); - document.getElementById("info-container").append(aliveContainer); - // Has to be done AFTER the infoContainer is rendered in the DOM to insert the updated counts - for (let x of document.getElementsByClassName("alive-player")) { - x.getElementsByClassName("rolecount")[0].innerText = rollCounter[x.getElementsByTagName("p")[0].innerText]; - } - } -} - -function addDeadPlayers(deadPlayers, killedContainer) { - deadPlayers.forEach((player) => { - let deadPlayerClass = player.card.team === "good" ? "dead-player-village" : "dead-player-evil"; - if (player.card.isTypeOfWerewolf) { - deadPlayerClass += " dead-player-wolf"; - } - const killedPlayer = document.createElement("div"); - if (currentGame.reveals) { - killedPlayer.setAttribute("class", "killed-player " + deadPlayerClass); - } else { - killedPlayer.setAttribute("class", "killed-player dead-player-no-reveals"); - } - killedPlayer.innerText = currentGame.reveals - ? player.name + ": " + player.card.role - : player.name; - killedContainer.appendChild(killedPlayer); - }); -} - -function addAlivePlayers(alivePlayers, aliveContainer, rollCounter) { - alivePlayers.forEach((player) => { - let alivePlayerClass = player.card.team === "good" ? "alive-player-village" : "alive-player-evil"; - if (player.card.isTypeOfWerewolf) { - alivePlayerClass += " alive-player-wolf"; - } - //RTM - if (rollCounter.hasOwnProperty(player.card.role)) { - rollCounter[player.card.role] += 1; - } else { - rollCounter[player.card.role] = 1; - //RTM - const alivePlayer = document.createElement("div"); - alivePlayer.setAttribute("class", "alive-player " + alivePlayerClass); - alivePlayer.innerHTML = "

    " + player.card.role + "

    "; - let roleCount = document.createElement("span"); // RTM - roleCount.setAttribute("class", "rolecount"); - //Add hidden description span - RTM 4/18/2020 - let playerCardInfo=document.createElement("span"); - playerCardInfo.setAttribute("class","tooltiptext"); - playerCardInfo.innerText=player.card.description; - alivePlayer.prepend(roleCount); - alivePlayer.appendChild(playerCardInfo); - aliveContainer.appendChild(alivePlayer); - } - }); -} - -function renderPlayerCard(player) { - const card = player.card; - const cardArt = standardRoles.includes(card.role) ? - "" + card.role + "" - : "
    Custom Role
    "; - const cardClass = player.card.team === "good" ? "game-card-inner village" : "game-card-inner wolf"; - const playerCard = document.createElement("div"); - playerCard.setAttribute("id", "game-card"); - playerCard.setAttribute("class", getFlipState()); - playerCard.innerHTML = - "
    " + - "
    " + - "

    " + card.role + "

    " + - cardArt + - "
    " + - "

    " + card.description + "

    " + - "

    Click to flip

    " + - "
    " + - "
    " + - "
    " + - "
    "; - document.getElementById("card-container").appendChild(playerCard); - document.getElementById("game-card").addEventListener("click", flipCard); -} - -function pauseOrResumeGame() { - if (currentGame.paused) { - socket.emit('resumeGame', currentGame.accessCode); - } else { - socket.emit('pauseGame', currentGame.accessCode); - } -} - -function getFlipState() { - return cardFlippedOver ? "flip-down" : "flip-up"; -} - -function flipCard() { - cardFlippedOver - ? flipUp() - : flipDown(); - - cardFlippedOver = !cardFlippedOver; -} - -function flipUp(){ - const card = document.getElementById("game-card"); - card.classList.add("flip-up"); - card.classList.remove("flip-down"); -} - -function flipDown(){ - const card = document.getElementById("game-card"); - card.classList.add("flip-down"); - card.classList.remove("flip-up"); -} - -function displayTime() { - const start = currentGame.paused ? new Date(currentGame.pauseTime) : new Date(); - const end = new Date(currentGame.endTime); - const delta = end - start; - let seconds = Math.floor((delta / 1000) % 60); - let minutes = Math.floor((delta / 1000 / 60) % 60); - let hours = Math.floor((delta / (1000 * 60 * 60)) % 24); - - seconds = seconds < 10 ? "0" + seconds : seconds; - minutes = minutes < 10 ? "0" + minutes : minutes; - - document.getElementById("clock").innerText = hours > 0 - ? hours + ":" + minutes + ":" + seconds - : minutes + ":" + seconds; -} - -function updateClock() { - clearInterval(clock); - if (document.getElementById("clock") !== null) { - displayTime(); - clock = setInterval(function() { - displayTime(); - }, 1000); - } -} - -function killPlayer() { - if(confirm("Are you sure you are dead?")) { - socket.emit("killPlayer", currentGame.players.find((player) => player.id === sessionStorage.getItem("id")).id, currentGame.accessCode); - } -} - -function renderLobby() { - document.querySelector("#message-box").style.display = 'none'; - // Render lobby header - if (document.getElementsByClassName("lobby-player").length === 0) { - let header = document.createElement("h2"); - header.setAttribute("class", "app-header-secondary"); - header.innerText = "Lobby"; - document.getElementById("lobby-container").appendChild(header); - let subHeader = document.createElement("div"); - subHeader.setAttribute("id", "lobby-subheader"); - subHeader.innerHTML = "
    " + - "" + currentGame.players.length + "" + - "/" + currentGame.size + " Players" + - "
    " + - "
    " + - "
    Access Code: " + currentGame.accessCode + "
    "; - document.getElementById("lobby-container").appendChild(subHeader); - } - // Render all players that are new - let i = 1; - for (let player of currentGame.players) { - if(!document.getElementById("player-" + i)) { - const playerContainer = document.createElement("div"); - player.id === sessionStorage.getItem("id") ? - playerContainer.setAttribute("class", "lobby-player highlighted") - : playerContainer.setAttribute("class", "lobby-player"); - playerContainer.setAttribute("id", "player-" + i); - playerContainer.innerHTML = "

    " + player.name + "

    "; - document.getElementById("lobby-container").appendChild(playerContainer); - document.getElementById("join-count").innerText = currentGame.players.length.toString(); - } - i ++; - } - // display the launch button if the player is the host - if (sessionStorage.getItem("host")) { - if (currentGame.players.length === currentGame.size) { - document.getElementById("launch").innerHTML = ""; - document.getElementById("launch").addEventListener("click", launchGame); - } else { - document.getElementById("launch").innerHTML = ""; - } - } else { - document.getElementById("launch").innerHTML = "

    The host will start the game.

    " - } -} - -// request game state from server periodically -setInterval(function () { - socket.emit('requestState', {code: sessionStorage.getItem("code")}); -}, 200); diff --git a/javascript/index.js b/javascript/index.js deleted file mode 100644 index 419cfa1..0000000 --- a/javascript/index.js +++ /dev/null @@ -1,27 +0,0 @@ -let gameModeSelect = false; - -window.onload = function() { - document.getElementById("create-game").addEventListener("click", toggleGameModeSelect); - document.getElementById("game-mode-back").addEventListener("click", toggleGameModeSelect) -}; - -function toggleGameModeSelect() { - gameModeSelect = !gameModeSelect; - let mainButtons = document.getElementById("main-buttons"); - let gameModes = document.getElementById("game-mode-select"); - if (gameModeSelect) { - mainButtons.classList.remove("slide-in"); - mainButtons.offsetWidth; - mainButtons.classList.add("slide-out"); - mainButtons.addEventListener("animationend", function() { mainButtons.style.display = "none" }, {capture: true, once: true}); - - gameModes.style.display = "flex"; - } else { - gameModes.style.display = "none"; - - mainButtons.style.display = "flex"; - mainButtons.classList.remove("slide-out"); - mainButtons.offsetWidth; - mainButtons.classList.add("slide-in"); - } -} diff --git a/javascript/join.js b/javascript/join.js deleted file mode 100644 index 512e2e0..0000000 --- a/javascript/join.js +++ /dev/null @@ -1,45 +0,0 @@ -const socket = io(); -import { utility } from './util.js' - -// respond to the game state received from the server -socket.on('joinError', function(message) { - document.getElementById("join-btn").classList.remove('disabled'); - document.getElementById("code").classList.add("error"); - document.getElementById("join-error").innerText = message; -}); - -// respond to the game state received from the server -socket.on('success', function() { - document.getElementById("join-btn").classList.remove('disabled'); - if (document.getElementById("code").classList.contains("error")) { - document.getElementById("code").classList.remove("error"); - document.getElementById("join-error").innerText = ""; - } - // If a player was a host of a previous game, don't make them the host of this one - if (sessionStorage.getItem("host")) { - sessionStorage.removeItem("host"); - } - window.location.replace('/' + document.getElementById("code").value.toString().trim().toLowerCase()); -}); - -document.getElementById("join-btn").addEventListener("click", function() { - document.getElementById("join-btn").classList.add('disabled'); - if (document.getElementById("name").value.length > 0) { - const code = document.getElementById("code").value.toString().trim().toLowerCase(); - if (document.getElementById("name").classList.contains("error")) { - document.getElementById("name").classList.remove("error"); - document.getElementById("name-error").innerText = ""; - } - sessionStorage.setItem("code", code); - let playerId = utility.generateID(); - sessionStorage.setItem("id", playerId); - const playerInfo = {name: document.getElementById("name").value, id: playerId, code: code}; - socket.emit('joinGame', playerInfo); - } else { - document.getElementById("join-btn").classList.remove('disabled'); - document.getElementById("name").classList.add("error"); - document.getElementById("name-error").innerText = "Name is required."; - } - -}); - diff --git a/javascript/modules/card-manager.js b/javascript/modules/card-manager.js deleted file mode 100644 index 1b852a7..0000000 --- a/javascript/modules/card-manager.js +++ /dev/null @@ -1,133 +0,0 @@ -const finishedArtArray = ["Villager", "Werewolf", "Seer", "Shadow", "Hunter", "Mason", "Minion", "Sorcerer", "Dream Wolf"]; - -export class CardManager { - constructor() {} - - static createCard(card) { - return new Card(card.role, card.team, card.description, card.quantity, card.isTypeOfWerewolf, card.custom, card.saved); - } - - // builds element for the informational role modal on the setup page - static constructModalRoleElement(card) { - const modalRole = document.createElement("div"); - modalRole.setAttribute("class", "modal-role"); - const roleClass = card.team === "good" ? "role-village" : "role-wolf"; - let roleImage; - if (card.custom === true) { - roleImage = "No art"; - } else { - roleImage = finishedArtArray.includes(card.role) ? - "No art" - : "Art soon."; - } - modalRole.innerHTML = - "
    " + - roleImage + - "
    " + - "

    " + card.role + "

    " + - "

    " + card.team + "

    " + - "
    " + - "
    " + - "

    " + card.description + "

    "; - return modalRole; - } - - static constructDeckBuilderElement(card, index) { - const cardContainer = document.createElement("div"); - - const quantityClass = card.team === "good" ? "card-quantity quantity-village" : "card-quantity quantity-wolf"; - - let cardClass = card.isTypeOfWerewolf ? "card card-werewolf" : "card"; - cardContainer.setAttribute("class", cardClass); - if (card.team === "good") { - cardContainer.setAttribute("id", "card-" + index); - } else { - cardContainer.setAttribute("id", "card-" + index); - } - cardContainer.innerHTML = - "
    " + - "
    " + - "
    " + - "

    " + card.role + "

    " + - "
    " + card.quantity + "
    " + - "
    " + - "

    +

    " + - "
    " + - "
    "; - cardContainer.innerHTML = card.custom - ? cardContainer.innerHTML += "" + card.role + "" - : cardContainer.innerHTML +="" + card.role + ""; - cardContainer.innerHTML += - "
    " + - "

    -

    " + - "
    "; - - return cardContainer; - } - - static constructCompactDeckBuilderElement(card, index) { - const cardContainer = document.createElement("div"); - - const quantityClass = card.team === "good" ? "card-quantity quantity-village" : "card-quantity quantity-wolf"; - - let cardClass = card.isTypeOfWerewolf ? "compact-card card-werewolf" : "compact-card"; - cardContainer.setAttribute("class", cardClass); - if (card.team === "good") { - cardContainer.setAttribute("id", "card-" + index); - } else { - cardContainer.setAttribute("id", "card-" + index); - } - cardContainer.innerHTML = - "
    " + - "

    -

    " + - "
    " + - "
    " + - "

    " + card.role + "

    " + - "
    " + card.quantity + "
    " + - "
    " + - "
    " + - "

    +

    " + - "
    "; - return cardContainer; - } - - static constructCustomCardIndicator(isCondensed, team) { - let customCard = document.createElement("div"); - if (isCondensed) { - customCard.classList.add("compact-card", "custom-card"); - } else { - customCard.classList.add("card", "custom-card"); - } - - if (team === "good") { - customCard.setAttribute("id", "custom-good"); - } else { - customCard.setAttribute("id", "custom-evil"); - } - - let cardHeader = document.createElement("h1"); - cardHeader.innerText = "Add Custom Role"; - - let cardBody = document.createElement("div"); - cardBody.innerText = "+"; - - customCard.appendChild(cardHeader); - customCard.appendChild(cardBody); - - return customCard; - } - -} - -class Card { - constructor(role, team, description, quantity, isTypeOfWerewolf, custom, saved) { - this.id = null; - this.role = role; - this.isTypeOfWerewolf = isTypeOfWerewolf; - this.team = team; - this.description = description; - this.quantity = quantity || 0; - this.custom = custom; - this.saved = saved; - } -} diff --git a/javascript/setup.js b/javascript/setup.js deleted file mode 100644 index 5dc8c5f..0000000 --- a/javascript/setup.js +++ /dev/null @@ -1,585 +0,0 @@ -import {cards} from './cards.js' -import {utility} from './util.js' -import {CardManager} from './modules/card-manager.js' - -const socket = io(); - -class Game { - constructor(accessCode, reveals, size, deck, time, hasDreamWolf) { - this.accessCode = accessCode; - this.reveals = reveals; - this.size = size; - this.deck = deck; - this.time = time; - this.players = []; - this.status = "lobby"; - this.hasDreamWolf = hasDreamWolf; - this.endTime = null; - } -} - -let gameSize = 0; -let atLeastOnePlayer = false; - -// register event listeners on buttons -document.getElementById("reset-btn").addEventListener("click", resetCardQuantities); -document.getElementById("create-btn").addEventListener("click", createGame); -document.getElementById("role-view-changer-gallery").addEventListener("click", function() { toggleViewChanger(false) }); -document.getElementById("role-view-changer-list").addEventListener("click", function() { toggleViewChanger(true) }); -document.getElementById("role-btn").addEventListener("click", function() { displayModal("role-modal", undefined) }); -document.getElementById("edit-role-btn").addEventListener("click", function() { displayModal("edit-custom-roles-modal", undefined) }); -document.getElementById("import-role-btn").addEventListener("click", function() { - document.getElementById("import-file-input").click(); -}); -document.getElementById("import-file-input").addEventListener("change", function(e) { - selectRoleImportFile(e); -}); -document.getElementById("custom-role-form").addEventListener("submit", function(e) { - addCustomCardToRoles(e); -}); -Array.from(document.getElementsByClassName("close")).forEach(function(element) { - element.addEventListener('click', closeModal); -}); - -// render all of the available cards to the user -window.onload = function() { - const urlParams = new URLSearchParams(window.location.search); - document.getElementById("create-game-header").innerText = urlParams.get('reveals') === "true" - ? "Create Reveal Game" - : "Create No-Reveal Game"; - readInUserCustomRoles(); - renderAvailableCards(false); -}; - -function renderAvailableCards(isCondensed) { - cards.sort(function(a, b) { - return a.role.toUpperCase().localeCompare(b.role); - }); - document.getElementById("card-select-good").innerHTML = ""; - document.getElementById("card-select-evil").innerHTML = ""; - document.getElementById("roles").innerHTML = ""; - document.getElementById("custom-roles").innerHTML = ""; - - for (let i = 0; i < cards.length; i ++) { - if (!cards[i].quantity) cards[i].quantity = 0; - cards[i].team === "good" - ? renderGoodRole(cards[i], i, isCondensed) - : renderEvilRole(cards[i], i, isCondensed); - } - - if (document.getElementById("custom-roles").getElementsByClassName("custom-role-edit").length === 0) { - document.getElementById("custom-roles").innerHTML = "

    You haven't added any custom cards.

    "; - } - - let customCardGood = CardManager.constructCustomCardIndicator(isCondensed, "good"); - let customCardEvil = CardManager.constructCustomCardIndicator(isCondensed, "evil"); - document.getElementById("card-select-good").appendChild(customCardGood); - document.getElementById("card-select-evil").appendChild(customCardEvil); - customCardGood.addEventListener("click", function() { - displayModal("custom-card-modal", "Good"); - }); - customCardEvil.addEventListener("click", function() { - displayModal("custom-card-modal", "Evil"); - }); -} - -function renderGoodRole(cardInfo, i, isCondensed) { - const card = CardManager.createCard(cardInfo); - if (card.custom) { - document.getElementById("custom-roles").appendChild(renderCustomRole(cardInfo)); - } - - document.getElementById("roles").appendChild(CardManager.constructModalRoleElement(card)); - if (isCondensed) { - document.getElementById("card-select-good").appendChild(CardManager.constructCompactDeckBuilderElement(card, i)); - let cardLeft = document.getElementById("card-" + i).getElementsByClassName("compact-card-left")[0]; - let cardQuantity = document.getElementById("card-" + i).getElementsByClassName("card-quantity")[0]; - let cardRight = document.getElementById("card-" + i).getElementsByClassName("compact-card-right")[0]; - cardRight.addEventListener("click", function() { incrementCardQuantity(cardRight) }, true); - cardLeft.addEventListener("click", function() { decrementCardQuantity(cardLeft) }, true); - cardRight.card = card; - cardRight.quantityEl = cardQuantity; - cardLeft.card = card; - cardLeft.quantityEl = cardQuantity; - } else { - document.getElementById("card-select-good").appendChild(CardManager.constructDeckBuilderElement(card, i)); - // Add event listeners to the top and bottom halves of the card to change the quantity. - let cardTop = document.getElementById("card-" + i).getElementsByClassName("card-top")[0]; - let cardQuantity = document.getElementById("card-" + i).getElementsByClassName("card-quantity")[0]; - let cardBottom = document.getElementById("card-" + i).getElementsByClassName("card-bottom")[0]; - cardTop.addEventListener("click", function() { incrementCardQuantity(cardTop) }, false); - cardBottom.addEventListener("click", function() { decrementCardQuantity(cardBottom) }, false); - cardTop.card = card; - cardTop.quantityEl = cardQuantity; - cardBottom.card = card; - cardBottom.quantityEl = cardQuantity; - } -} - -function renderEvilRole(cardInfo, i, isCondensed) { - const card = CardManager.createCard(cardInfo); - if (card.custom) { - document.getElementById("custom-roles").appendChild(renderCustomRole(cardInfo)); - } - - document.getElementById("roles").appendChild(CardManager.constructModalRoleElement(card)); - if (isCondensed) { - document.getElementById("card-select-evil").appendChild(CardManager.constructCompactDeckBuilderElement(card, i)); - let cardLeft = document.getElementById("card-" + i).getElementsByClassName("compact-card-left")[0]; - let cardQuantity = document.getElementById("card-" + i).getElementsByClassName("card-quantity")[0]; - let cardRight = document.getElementById("card-" + i).getElementsByClassName("compact-card-right")[0]; - cardRight.addEventListener("click", function() { incrementCardQuantity(cardRight) }, false); - cardLeft.addEventListener("click", function() { decrementCardQuantity(cardLeft) }, false); - cardRight.card = card; - cardRight.quantityEl = cardQuantity; - cardLeft.card = card; - cardLeft.quantityEl = cardQuantity; - } else { - document.getElementById("card-select-evil").appendChild(CardManager.constructDeckBuilderElement(card, i)); - // Add event listeners to the top and bottom halves of the card to change the quantity. - let cardTop = document.getElementById("card-" + i).getElementsByClassName("card-top")[0]; - let cardQuantity = document.getElementById("card-" + i).getElementsByClassName("card-quantity")[0]; - let cardBottom = document.getElementById("card-" + i).getElementsByClassName("card-bottom")[0]; - cardTop.addEventListener("click", function() { incrementCardQuantity(cardTop) }, false); - cardBottom.addEventListener("click", function() { decrementCardQuantity(cardBottom) }, false); - cardTop.card = card; - cardTop.quantityEl = cardQuantity; - cardBottom.card = card; - cardBottom.quantityEl = cardQuantity; - } -} - -function addCustomCardToRoles(e) { - e.preventDefault(); - if (!cards.find((card) => card.role === document.getElementById("custom-role-name").value)) { - let newCard = { - role: document.getElementById("custom-role-name").value, - team: document.getElementById("custom-role-team").value, - description: document.getElementById("custom-role-desc").value, - isTypeOfWerewolf: document.getElementById("custom-role-wolf").checked, - custom: true, - saved: document.getElementById("custom-role-remember").checked - }; - cards.push(newCard); - renderAvailableCards(document.getElementById("role-view-changer-list").classList.contains("selected")); - - if (newCard.saved === true) { - let existingRoles = localStorage.getItem("play-werewolf-custom-roles"); - if (existingRoles !== null) { - let rolesArray; - try { - rolesArray = JSON.parse(existingRoles); - } catch (e) { - console.error(e.message); - } - if (rolesArray) { - rolesArray.push(newCard); - } - localStorage.setItem("play-werewolf-custom-roles", JSON.stringify(rolesArray)); - } else { - localStorage.setItem("play-werewolf-custom-roles", JSON.stringify(new Array(newCard))); - } - } - updateCustomRoleModal(); - closeModal(); - document.getElementById("custom-role-form").reset(); - } else { - alert("A custom or standard card already exists with that name!") - } -} - -function addImportFileToRoles (e) { - //parse roles from file - let match = /^data:(.*);base64,(.*)$/.exec(e.target.result); - if (match == null) { - throw 'Could not parse result'; // should not happen - } - let mimeType = match[1]; - let content = match[2]; - let newRoles; - try { - newRoles = JSON.parse(atob(content)); - } catch(ex) { - console.error(ex.message); - } - - //add roles - let succesfullyAddedRoles = []; - let rolesThatFailedToImport = []; - let expectedKeys = ["role", "description", "team", "isTypeOfWerewolf"]; - newRoles.forEach(newRole => { - newRole.custom = true; - newRole.saved = true; - let newRoleValidationResult = validateNewRole(newRole, expectedKeys); - if (newRoleValidationResult.isValid) { - succesfullyAddedRoles.push(newRole); - } - else { - rolesThatFailedToImport.push(newRoleValidationResult); - } - }); - cards.push(...succesfullyAddedRoles); - renderAvailableCards(document.getElementById("role-view-changer-list").classList.contains("selected")); - // always save imported roles - let existingRoles = localStorage.getItem("play-werewolf-custom-roles"); - if (existingRoles !== null) { - let rolesArray; - try { - rolesArray = JSON.parse(existingRoles); - } catch (e) { - console.error(e.message); - } - if (rolesArray) { - rolesArray.push(...succesfullyAddedRoles); - } - localStorage.setItem("play-werewolf-custom-roles", JSON.stringify(rolesArray)); - } else { - localStorage.setItem("play-werewolf-custom-roles", JSON.stringify(succesfullyAddedRoles)); - } - updateCustomRoleModal(); - updateImportRolesModal(succesfullyAddedRoles, rolesThatFailedToImport); - displayModal("import-custom-roles-result-modal", undefined); -} - -function validateNewRole(newCard,expectedKeys) { - let newRoleValidationResult = {}; - newRoleValidationResult.role = newCard; - newRoleValidationResult.issues = []; - - //add warning if there already exists a loaded role with the same name - if (cards.find((card) => card.role === newCard.role)) { - newRoleValidationResult.issues.push({level: "warning", description: "duplicate entry"}); - } - - //For each required field, add error if the role is missing it - let missingKeys = expectedKeys.filter(function(key){ return Object.keys(newCard).indexOf(key) < 0 }); - missingKeys.forEach(missingKey => { - newRoleValidationResult.issues.push({level: "error", description: "Missing data: " + missingKey}); - }); - - newRoleValidationResult.isValid = ( newRoleValidationResult.issues.length == 0 ); - - return newRoleValidationResult; -} - -function updateCustomRoleModal() { - const customRoles = document.getElementById("custom-roles"); - customRoles.innerHTML = ""; - for (let i = 0; i < cards.length; i++){ - if (cards[i].custom) { - customRoles.appendChild(renderCustomRole(cards[i])); - } - } -} - -function updateImportRolesModal(succesfullyAddedRoles, rolesThatFailedToImport) { - let numAddedRoles = succesfullyAddedRoles.length; - if (numAddedRoles > 0) { - let successSubheader = (numAddedRoles == 1) ? "role successfully imported" : "roles successfully imported"; - document.getElementById("import-successes-subheader").innerHTML = numAddedRoles + " " + successSubheader; - const successfulRoleList = document.getElementById("import-successes-role-list"); - successfulRoleList.innerHTML = ""; - succesfullyAddedRoles.forEach(role => { - successfulRoleList.appendChild(renderCustomRole(role)); - }); - } - - let numFailedRoles = rolesThatFailedToImport.length; - if (numFailedRoles > 0) { - let failureSubheader = (numFailedRoles == 1) ? "role failed to import" : "roles failed to import"; - document.getElementById("import-failures-subheader").innerHTML = numFailedRoles + " " + failureSubheader; - document.getElementById("import-failures-issue-list").innerHTML = ""; - rolesThatFailedToImport.forEach(failureInfo => { - document.getElementById("import-failures-issue-list").appendChild(renderImportFailure(failureInfo)); - }); - } -} - -function renderImportFailure(failureInfo) { - let importFailure = document.createElement("div"); - importFailure.classList.add("import-failure"); - - let failureLabelContainer = document.createElement("div"); - failureLabelContainer.classList.add("import-failure-label"); - let triangle = document.createElement("div"); - triangle.classList.add("triangle"); - let roleName = document.createElement("p"); - roleName.innerText = failureInfo.role.role; - failureLabelContainer.appendChild(triangle); - failureLabelContainer.appendChild(roleName); - - let issueDescriptionContainer = document.createElement("div"); - issueDescriptionContainer.classList.add("import-failure-data"); - let levelSeverityOrder = ["warning", "error"]; - let levelIdx = 0; - let issueDescriptionList = document.createElement("ul"); - failureInfo.issues.forEach(issue => { - let description = document.createElement("li"); - description.innerText = issue.description; - let thisIssueLevelIdx = levelSeverityOrder.indexOf(issue.level); - if (thisIssueLevelIdx > levelIdx) { levelIdx = thisIssueLevelIdx; } - issueDescriptionList.appendChild(description); - }); - issueDescriptionContainer.appendChild(issueDescriptionList); - - importFailure.classList.add(levelSeverityOrder[levelIdx]); - importFailure.appendChild(failureLabelContainer); - importFailure.appendChild(issueDescriptionContainer); - return importFailure; -} - -function readInUserCustomRoles() { - let expectedKeys = ["role", "description", "team", "isTypeOfWerewolf", "custom", "saved"]; - let userCustomRoles = utility.validateCustomRolesJsonObject("play-werewolf-custom-roles", expectedKeys); - if (userCustomRoles) { - for (let i = 0; i < userCustomRoles.length; i++) { - cards.push(userCustomRoles[i]); - } - } -} - -function renderCustomRole(card) { - let roleElement = document.createElement("div"); - let editRemoveContainer = document.createElement("div"); - let editFormDiv = document.createElement("div"); - let roleLabel = document.createElement("div"); - let roleName = document.createElement("p"); - let remove = document.createElement("img"); - let edit = document.createElement("img"); - let editRoleTemplate = document.getElementById("edit-custom-role-template"); - let editForm = editRoleTemplate.content.cloneNode(true); - - roleName.innerText = card.role; - remove.setAttribute("src", "../assets/images/delete.svg"); - remove.setAttribute("title", "Delete"); - remove.classList.add("custom-role-button"); - remove.addEventListener("click", function() { removeCustomRole(card.role) }); - - edit.setAttribute("src", "../assets/images/pencil_green.svg"); - edit.setAttribute("title", "Edit"); - edit.classList.add("custom-role-button"); - edit.addEventListener("click", function(e) { toggleEditForm(e, editFormDiv, card) }); - roleElement.setAttribute("class", "custom-role-edit"); - - editRemoveContainer.appendChild(remove); - editRemoveContainer.appendChild(edit); - roleLabel.appendChild(roleName); - roleLabel.appendChild(editRemoveContainer); - roleElement.appendChild(roleLabel); - const shadowRoot = editFormDiv.attachShadow({mode: 'open'}); - shadowRoot.appendChild(editForm); - shadowRoot.getElementById("edit-role-form").addEventListener("submit", function(e) { - updateCustomRole(e, editFormDiv, card); - }); - - editFormDiv.style.display = "none"; - roleElement.appendChild(editFormDiv); - - return roleElement; -} - -function toggleEditForm(event, formDiv, card) { - event.preventDefault(); - let displayRule = formDiv.style.display; - formDiv.style.display = displayRule === "none" ? "block" : "none"; - - if (formDiv.style.display === "block") { - populateEditRoleForm(formDiv, card); - } -} - -function toggleViewChanger(isCondensed) { - - if (isCondensed) { - document.getElementById("role-view-changer-gallery").classList.remove("selected"); - document.getElementById("role-view-changer-list").classList.add("selected"); - } else { - document.getElementById("role-view-changer-gallery").classList.add("selected"); - document.getElementById("role-view-changer-list").classList.remove("selected"); - } - renderAvailableCards(isCondensed); -} - -function populateEditRoleForm(formDiv, card) { - formDiv.shadowRoot.querySelector("#edit-role-desc").value = card.description; - formDiv.shadowRoot.querySelector("#edit-role-team").value = card.team; - formDiv.shadowRoot.querySelector("#edit-role-wolf").checked = card.isTypeOfWerewolf; - formDiv.shadowRoot.querySelector("#edit-role-remember").checked = card.saved; -} - -function removeCustomRole(name) { - if (confirm("Delete this role?")) { - let matchingCards = cards.filter((card) => card.role === name); - matchingCards.forEach((card) => { - cards.splice(cards.indexOf(card), 1); - }); - let expectedKeys = ["role", "description", "team", "isTypeOfWerewolf", "custom", "saved"]; - let userCustomRoles = utility.validateCustomRolesJsonObject("play-werewolf-custom-roles", expectedKeys); - if (userCustomRoles) { - userCustomRoles = userCustomRoles.filter((card) => card.role !== name); - localStorage.setItem("play-werewolf-custom-roles", JSON.stringify(userCustomRoles)); - } - updateCustomRoleModal(); - renderAvailableCards(document.getElementById("role-view-changer-list").classList.contains("selected")); - } -} - -function updateCustomRole(event, formDiv, cardToUpdate) { - event.preventDefault(); - cardToUpdate.team = formDiv.shadowRoot.querySelector("#edit-role-team").value; - cardToUpdate.description = formDiv.shadowRoot.querySelector("#edit-role-desc").value; - cardToUpdate.isTypeOfWerewolf = formDiv.shadowRoot.querySelector("#edit-role-wolf").checked; - cardToUpdate.saved = formDiv.shadowRoot.querySelector("#edit-role-remember").checked; - - removeOrAddSavedRoleIfNeeded(cardToUpdate); - toggleEditForm(event, formDiv, cardToUpdate); - renderAvailableCards(document.getElementById("role-view-changer-list").classList.contains("selected")); -} - -function removeOrAddSavedRoleIfNeeded(card) { - let expectedKeys = ["role", "description", "team", "isTypeOfWerewolf", "custom", "saved"]; - let userCustomRoles = utility.validateCustomRolesJsonObject("play-werewolf-custom-roles", expectedKeys); - if (userCustomRoles) { - if (card.saved) { - let roleToUpdate = userCustomRoles.find((savedCard) => savedCard.role === card.role); - if (roleToUpdate) { - userCustomRoles[userCustomRoles.indexOf(roleToUpdate)] = card; - } else { - userCustomRoles.push(card); - } - localStorage.setItem("play-werewolf-custom-roles", JSON.stringify(userCustomRoles)); - } else { - let roleToRemove = userCustomRoles.find((savedCard) => savedCard.role === card.role); - if (roleToRemove) { - userCustomRoles.splice(userCustomRoles.indexOf(roleToRemove), 1); - localStorage.setItem("play-werewolf-custom-roles", JSON.stringify(userCustomRoles)); - } - } - } -} - - -function incrementCardQuantity(e) { - if(e.card.quantity < 25) { - e.card.quantity += 1; - cards.find((card) => card.role === e.card.role).quantity += 1; - } - e.quantityEl.innerHTML = e.card.quantity; - updateGameSize(); -} - -function decrementCardQuantity(e) { - if(e.card.quantity > 0) { - e.card.quantity -= 1; - cards.find((card) => card.role === e.card.role).quantity -= 1; - } - e.quantityEl.innerHTML = e.card.quantity; - updateGameSize(); -} - -function updateGameSize() { - gameSize = 0; - for (let card of cards) { - gameSize += card.quantity; - } - document.getElementById("game-size").innerText = gameSize + " Players"; - atLeastOnePlayer = gameSize > 0; - return gameSize; -} - -function resetCardQuantities() { - for (let card of cards) { - card.quantity = 0; - } - updateGameSize(); - Array.prototype.filter.call(document.getElementsByClassName("card-quantity"), function(quantities){ - return quantities.innerHTML = 0; - }); -} - -function displayModal(modalId, teamForCustomRole) { - if (teamForCustomRole === "Good") { - document.getElementById("option-evil").removeAttribute("selected"); - document.getElementById("option-good").setAttribute("selected", "selected"); - } - if (teamForCustomRole === "Evil") { - document.getElementById("option-good").removeAttribute("selected"); - document.getElementById("option-evil").setAttribute("selected", "selected"); - } - document.getElementById(modalId).classList.remove("hidden"); - document.getElementById("app-content").classList.add("hidden"); -} - -function closeModal() { - document.getElementById("role-modal").classList.add("hidden"); - document.getElementById("custom-card-modal").classList.add("hidden"); - document.getElementById("edit-custom-roles-modal").classList.add("hidden"); - document.getElementById("import-custom-roles-result-modal").classList.add("hidden"); - document.getElementById("app-content").classList.remove("hidden"); -} - -function buildDeckFromQuantities() { - let playerDeck = []; - for (const card of cards) { - for (let i = 0; i < card.quantity; i++) { - card.id = utility.generateID(); - playerDeck.push(card); - } - } - return playerDeck; -} - -function createGame() { - if (document.getElementById("name").value.length > 0 && atLeastOnePlayer) { - const urlParams = new URLSearchParams(window.location.search); - const revealParam = urlParams.get('reveals'); - - // generate 6 digit access code - let code = ""; - let charPool = "abcdefghijklmnopqrstuvwxyz0123456789"; - for (let i = 0; i < 6; i++) { - code += charPool[utility.getRandomInt(36)] - } - - // generate unique player Id for session - let id = utility.generateID(); - sessionStorage.setItem("id", id); - - // player who creates the game is the host - sessionStorage.setItem("host", true); - - // send a new game to the server, and then join it - const playerInfo = {name: document.getElementById("name").value, code: code, id: id}; - let gameDeck = buildDeckFromQuantities(); - const game = new Game( - code, - revealParam === "true", - gameSize, - gameDeck, - Math.ceil(document.getElementById("time").value), - gameDeck.find((card) => card.role === "Dream Wolf") !== undefined - ); - socket.emit('newGame', game, function() { - socket.emit('joinGame', playerInfo); - sessionStorage.setItem('code', code); - window.location.replace('/' + code); - }); - } else { - document.getElementById("some-error").innerText = "There are problems with your above setup."; - if (!atLeastOnePlayer) { - document.getElementById("game-size").classList.add("error"); - } else { - document.getElementById("game-size").classList.remove("error"); - } - document.getElementById("name").classList.add("error"); - document.getElementById("name-error").innerText = "Name is required."; - } -} -function selectRoleImportFile(e) { - var files = e.target.files; - if (files.length < 1) { return; } - var file = files[0]; - var reader = new FileReader(); - reader.onload = addImportFileToRoles; - reader.readAsDataURL(file); -} diff --git a/javascript/util.js b/javascript/util.js deleted file mode 100644 index 90fddb5..0000000 --- a/javascript/util.js +++ /dev/null @@ -1,50 +0,0 @@ -export const utility = -{ - generateID() { - let code = ""; - let charPool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - for (let i = 0; i < 10; i++) { - code += charPool[this.getRandomInt(61)] - } - return code; - }, - - getRandomInt(max) { - return Math.floor(Math.random() * Math.floor(max)); - }, - - shuffle(array) { - for (let i = array.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [array[i], array[j]] = [array[j], array[i]]; - } - return array; - }, - - validateCustomRolesJsonObject(name, expectedKeys) { - let value = localStorage.getItem(name); - if (value !== null) { - let valueJson; - try { - valueJson = JSON.parse(value); - } catch(e) { - console.error(e.message); - localStorage.removeItem(name); - return false; - } - if (valueJson && Array.isArray(valueJson)) { // some defensive programming - check if it's an array, and that the object has the expected structure - for (let i = 0; i < valueJson.length; i++){ - if (expectedKeys.some((key) => !Object.keys(valueJson[i]).includes(key))) { - console.error("tried to read invalid object: " + valueJson[i] + " with expected keys: " + expectedKeys); - valueJson.splice(i, 1); - localStorage.setItem(name, JSON.stringify(valueJson)); - } - } - return valueJson; - } else { // object has been messed with. remove it. - localStorage.removeItem(name); - return false; - } - } - } -}; diff --git a/lib/jasmine-3.5.0/boot.js b/lib/jasmine-3.5.0/boot.js deleted file mode 100644 index 2d68462..0000000 --- a/lib/jasmine-3.5.0/boot.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. - - If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. - - The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. - - [jasmine-gem]: http://github.com/pivotal/jasmine-gem - */ - -(function() { - - /** - * ## Require & Instantiate - * - * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. - */ - window.jasmine = jasmineRequire.core(jasmineRequire); - - /** - * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. - */ - jasmineRequire.html(jasmine); - - /** - * Create the Jasmine environment. This is used to run all specs in a project. - */ - var env = jasmine.getEnv(); - - /** - * ## The Global Interface - * - * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. - */ - var jasmineInterface = jasmineRequire.interface(jasmine, env); - - /** - * Add all of the Jasmine global/public interface to the global scope, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. - */ - extend(window, jasmineInterface); - - /** - * ## Runner Parameters - * - * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. - */ - - var queryString = new jasmine.QueryString({ - getWindowLocation: function() { return window.location; } - }); - - var filterSpecs = !!queryString.getParam("spec"); - - var config = { - failFast: queryString.getParam("failFast"), - oneFailurePerSpec: queryString.getParam("oneFailurePerSpec"), - hideDisabled: queryString.getParam("hideDisabled") - }; - - var random = queryString.getParam("random"); - - if (random !== undefined && random !== "") { - config.random = random; - } - - var seed = queryString.getParam("seed"); - if (seed) { - config.seed = seed; - } - - /** - * ## Reporters - * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). - */ - var htmlReporter = new jasmine.HtmlReporter({ - env: env, - navigateWithNewParam: function(key, value) { return queryString.navigateWithNewParam(key, value); }, - addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); }, - getContainer: function() { return document.body; }, - createElement: function() { return document.createElement.apply(document, arguments); }, - createTextNode: function() { return document.createTextNode.apply(document, arguments); }, - timer: new jasmine.Timer(), - filterSpecs: filterSpecs - }); - - /** - * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. - */ - env.addReporter(jasmineInterface.jsApiReporter); - env.addReporter(htmlReporter); - - /** - * Filter which specs will be run by matching the start of the full name against the `spec` query param. - */ - var specFilter = new jasmine.HtmlSpecFilter({ - filterString: function() { return queryString.getParam("spec"); } - }); - - config.specFilter = function(spec) { - return specFilter.matches(spec.getFullName()); - }; - - env.configure(config); - - /** - * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. - */ - window.setTimeout = window.setTimeout; - window.setInterval = window.setInterval; - window.clearTimeout = window.clearTimeout; - window.clearInterval = window.clearInterval; - - /** - * ## Execution - * - * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. - */ - var currentWindowOnload = window.onload; - - window.onload = function() { - if (currentWindowOnload) { - currentWindowOnload(); - } - htmlReporter.initialize(); - env.execute(); - }; - - /** - * Helper function for readability above. - */ - function extend(destination, source) { - for (var property in source) destination[property] = source[property]; - return destination; - } - -}()); diff --git a/lib/jasmine-3.5.0/jasmine-html.js b/lib/jasmine-3.5.0/jasmine-html.js deleted file mode 100644 index aecf2f1..0000000 --- a/lib/jasmine-3.5.0/jasmine-html.js +++ /dev/null @@ -1,817 +0,0 @@ -/* -Copyright (c) 2008-2019 Pivotal Labs - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -jasmineRequire.html = function(j$) { - j$.ResultsNode = jasmineRequire.ResultsNode(); - j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); - j$.QueryString = jasmineRequire.QueryString(); - j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); -}; - -jasmineRequire.HtmlReporter = function(j$) { - function ResultsStateBuilder() { - this.topResults = new j$.ResultsNode({}, '', null); - this.currentParent = this.topResults; - this.specsExecuted = 0; - this.failureCount = 0; - this.pendingSpecCount = 0; - } - - ResultsStateBuilder.prototype.suiteStarted = function(result) { - this.currentParent.addChild(result, 'suite'); - this.currentParent = this.currentParent.last(); - }; - - ResultsStateBuilder.prototype.suiteDone = function(result) { - this.currentParent.updateResult(result); - if (this.currentParent !== this.topResults) { - this.currentParent = this.currentParent.parent; - } - - if (result.status === 'failed') { - this.failureCount++; - } - }; - - ResultsStateBuilder.prototype.specStarted = function(result) {}; - - ResultsStateBuilder.prototype.specDone = function(result) { - this.currentParent.addChild(result, 'spec'); - - if (result.status !== 'excluded') { - this.specsExecuted++; - } - - if (result.status === 'failed') { - this.failureCount++; - } - - if (result.status == 'pending') { - this.pendingSpecCount++; - } - }; - - function HtmlReporter(options) { - var config = function() { - return (options.env && options.env.configuration()) || {}; - }, - getContainer = options.getContainer, - createElement = options.createElement, - createTextNode = options.createTextNode, - navigateWithNewParam = options.navigateWithNewParam || function() {}, - addToExistingQueryString = - options.addToExistingQueryString || defaultQueryString, - filterSpecs = options.filterSpecs, - htmlReporterMain, - symbols, - deprecationWarnings = []; - - this.initialize = function() { - clearPrior(); - htmlReporterMain = createDom( - 'div', - { className: 'jasmine_html-reporter' }, - createDom( - 'div', - { className: 'jasmine-banner' }, - createDom('a', { - className: 'jasmine-title', - href: 'http://jasmine.github.io/', - target: '_blank' - }), - createDom('span', { className: 'jasmine-version' }, j$.version) - ), - createDom('ul', { className: 'jasmine-symbol-summary' }), - createDom('div', { className: 'jasmine-alert' }), - createDom( - 'div', - { className: 'jasmine-results' }, - createDom('div', { className: 'jasmine-failures' }) - ) - ); - getContainer().appendChild(htmlReporterMain); - }; - - var totalSpecsDefined; - this.jasmineStarted = function(options) { - totalSpecsDefined = options.totalSpecsDefined || 0; - }; - - var summary = createDom('div', { className: 'jasmine-summary' }); - - var stateBuilder = new ResultsStateBuilder(); - - this.suiteStarted = function(result) { - stateBuilder.suiteStarted(result); - }; - - this.suiteDone = function(result) { - stateBuilder.suiteDone(result); - - if (result.status === 'failed') { - failures.push(failureDom(result)); - } - addDeprecationWarnings(result); - }; - - this.specStarted = function(result) { - stateBuilder.specStarted(result); - }; - - var failures = []; - this.specDone = function(result) { - stateBuilder.specDone(result); - - if (noExpectations(result)) { - var noSpecMsg = "Spec '" + result.fullName + "' has no expectations."; - if (result.status === 'failed') { - console.error(noSpecMsg); - } else { - console.warn(noSpecMsg); - } - } - - if (!symbols) { - symbols = find('.jasmine-symbol-summary'); - } - - symbols.appendChild( - createDom('li', { - className: this.displaySpecInCorrectFormat(result), - id: 'spec_' + result.id, - title: result.fullName - }) - ); - - if (result.status === 'failed') { - failures.push(failureDom(result)); - } - - addDeprecationWarnings(result); - }; - - this.displaySpecInCorrectFormat = function(result) { - return noExpectations(result) && result.status === 'passed' - ? 'jasmine-empty' - : this.resultStatus(result.status); - }; - - this.resultStatus = function(status) { - if (status === 'excluded') { - return config().hideDisabled - ? 'jasmine-excluded-no-display' - : 'jasmine-excluded'; - } - return 'jasmine-' + status; - }; - - this.jasmineDone = function(doneResult) { - var banner = find('.jasmine-banner'); - var alert = find('.jasmine-alert'); - var order = doneResult && doneResult.order; - var i; - alert.appendChild( - createDom( - 'span', - { className: 'jasmine-duration' }, - 'finished in ' + doneResult.totalTime / 1000 + 's' - ) - ); - - banner.appendChild(optionsMenu(config())); - - if (stateBuilder.specsExecuted < totalSpecsDefined) { - var skippedMessage = - 'Ran ' + - stateBuilder.specsExecuted + - ' of ' + - totalSpecsDefined + - ' specs - run all'; - var skippedLink = addToExistingQueryString('spec', ''); - alert.appendChild( - createDom( - 'span', - { className: 'jasmine-bar jasmine-skipped' }, - createDom( - 'a', - { href: skippedLink, title: 'Run all specs' }, - skippedMessage - ) - ) - ); - } - var statusBarMessage = ''; - var statusBarClassName = 'jasmine-overall-result jasmine-bar '; - var globalFailures = (doneResult && doneResult.failedExpectations) || []; - var failed = stateBuilder.failureCount + globalFailures.length > 0; - - if (totalSpecsDefined > 0 || failed) { - statusBarMessage += - pluralize('spec', stateBuilder.specsExecuted) + - ', ' + - pluralize('failure', stateBuilder.failureCount); - if (stateBuilder.pendingSpecCount) { - statusBarMessage += - ', ' + pluralize('pending spec', stateBuilder.pendingSpecCount); - } - } - - if (doneResult.overallStatus === 'passed') { - statusBarClassName += ' jasmine-passed '; - } else if (doneResult.overallStatus === 'incomplete') { - statusBarClassName += ' jasmine-incomplete '; - statusBarMessage = - 'Incomplete: ' + - doneResult.incompleteReason + - ', ' + - statusBarMessage; - } else { - statusBarClassName += ' jasmine-failed '; - } - - var seedBar; - if (order && order.random) { - seedBar = createDom( - 'span', - { className: 'jasmine-seed-bar' }, - ', randomized with seed ', - createDom( - 'a', - { - title: 'randomized with seed ' + order.seed, - href: seedHref(order.seed) - }, - order.seed - ) - ); - } - - alert.appendChild( - createDom( - 'span', - { className: statusBarClassName }, - statusBarMessage, - seedBar - ) - ); - - var errorBarClassName = 'jasmine-bar jasmine-errored'; - var afterAllMessagePrefix = 'AfterAll '; - - for (i = 0; i < globalFailures.length; i++) { - alert.appendChild( - createDom( - 'span', - { className: errorBarClassName }, - globalFailureMessage(globalFailures[i]) - ) - ); - } - - function globalFailureMessage(failure) { - if (failure.globalErrorType === 'load') { - var prefix = 'Error during loading: ' + failure.message; - - if (failure.filename) { - return ( - prefix + ' in ' + failure.filename + ' line ' + failure.lineno - ); - } else { - return prefix; - } - } else { - return afterAllMessagePrefix + failure.message; - } - } - - addDeprecationWarnings(doneResult); - - var warningBarClassName = 'jasmine-bar jasmine-warning'; - for (i = 0; i < deprecationWarnings.length; i++) { - var warning = deprecationWarnings[i]; - alert.appendChild( - createDom( - 'span', - { className: warningBarClassName }, - 'DEPRECATION: ' + warning - ) - ); - } - - var results = find('.jasmine-results'); - results.appendChild(summary); - - summaryList(stateBuilder.topResults, summary); - - if (failures.length) { - alert.appendChild( - createDom( - 'span', - { className: 'jasmine-menu jasmine-bar jasmine-spec-list' }, - createDom('span', {}, 'Spec List | '), - createDom( - 'a', - { className: 'jasmine-failures-menu', href: '#' }, - 'Failures' - ) - ) - ); - alert.appendChild( - createDom( - 'span', - { className: 'jasmine-menu jasmine-bar jasmine-failure-list' }, - createDom( - 'a', - { className: 'jasmine-spec-list-menu', href: '#' }, - 'Spec List' - ), - createDom('span', {}, ' | Failures ') - ) - ); - - find('.jasmine-failures-menu').onclick = function() { - setMenuModeTo('jasmine-failure-list'); - }; - find('.jasmine-spec-list-menu').onclick = function() { - setMenuModeTo('jasmine-spec-list'); - }; - - setMenuModeTo('jasmine-failure-list'); - - var failureNode = find('.jasmine-failures'); - for (i = 0; i < failures.length; i++) { - failureNode.appendChild(failures[i]); - } - } - }; - - return this; - - function failureDom(result) { - var failure = createDom( - 'div', - { className: 'jasmine-spec-detail jasmine-failed' }, - failureDescription(result, stateBuilder.currentParent), - createDom('div', { className: 'jasmine-messages' }) - ); - var messages = failure.childNodes[1]; - - for (var i = 0; i < result.failedExpectations.length; i++) { - var expectation = result.failedExpectations[i]; - messages.appendChild( - createDom( - 'div', - { className: 'jasmine-result-message' }, - expectation.message - ) - ); - messages.appendChild( - createDom( - 'div', - { className: 'jasmine-stack-trace' }, - expectation.stack - ) - ); - } - - if (result.failedExpectations.length === 0) { - messages.appendChild( - createDom( - 'div', - { className: 'jasmine-result-message' }, - 'Spec has no expectations' - ) - ); - } - - return failure; - } - - function summaryList(resultsTree, domParent) { - var specListNode; - for (var i = 0; i < resultsTree.children.length; i++) { - var resultNode = resultsTree.children[i]; - if (filterSpecs && !hasActiveSpec(resultNode)) { - continue; - } - if (resultNode.type === 'suite') { - var suiteListNode = createDom( - 'ul', - { className: 'jasmine-suite', id: 'suite-' + resultNode.result.id }, - createDom( - 'li', - { - className: - 'jasmine-suite-detail jasmine-' + resultNode.result.status - }, - createDom( - 'a', - { href: specHref(resultNode.result) }, - resultNode.result.description - ) - ) - ); - - summaryList(resultNode, suiteListNode); - domParent.appendChild(suiteListNode); - } - if (resultNode.type === 'spec') { - if (domParent.getAttribute('class') !== 'jasmine-specs') { - specListNode = createDom('ul', { className: 'jasmine-specs' }); - domParent.appendChild(specListNode); - } - var specDescription = resultNode.result.description; - if (noExpectations(resultNode.result)) { - specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription; - } - if ( - resultNode.result.status === 'pending' && - resultNode.result.pendingReason !== '' - ) { - specDescription = - specDescription + - ' PENDING WITH MESSAGE: ' + - resultNode.result.pendingReason; - } - specListNode.appendChild( - createDom( - 'li', - { - className: 'jasmine-' + resultNode.result.status, - id: 'spec-' + resultNode.result.id - }, - createDom( - 'a', - { href: specHref(resultNode.result) }, - specDescription - ) - ) - ); - } - } - } - - function optionsMenu(config) { - var optionsMenuDom = createDom( - 'div', - { className: 'jasmine-run-options' }, - createDom('span', { className: 'jasmine-trigger' }, 'Options'), - createDom( - 'div', - { className: 'jasmine-payload' }, - createDom( - 'div', - { className: 'jasmine-stop-on-failure' }, - createDom('input', { - className: 'jasmine-fail-fast', - id: 'jasmine-fail-fast', - type: 'checkbox' - }), - createDom( - 'label', - { className: 'jasmine-label', for: 'jasmine-fail-fast' }, - 'stop execution on spec failure' - ) - ), - createDom( - 'div', - { className: 'jasmine-throw-failures' }, - createDom('input', { - className: 'jasmine-throw', - id: 'jasmine-throw-failures', - type: 'checkbox' - }), - createDom( - 'label', - { className: 'jasmine-label', for: 'jasmine-throw-failures' }, - 'stop spec on expectation failure' - ) - ), - createDom( - 'div', - { className: 'jasmine-random-order' }, - createDom('input', { - className: 'jasmine-random', - id: 'jasmine-random-order', - type: 'checkbox' - }), - createDom( - 'label', - { className: 'jasmine-label', for: 'jasmine-random-order' }, - 'run tests in random order' - ) - ), - createDom( - 'div', - { className: 'jasmine-hide-disabled' }, - createDom('input', { - className: 'jasmine-disabled', - id: 'jasmine-hide-disabled', - type: 'checkbox' - }), - createDom( - 'label', - { className: 'jasmine-label', for: 'jasmine-hide-disabled' }, - 'hide disabled tests' - ) - ) - ) - ); - - var failFastCheckbox = optionsMenuDom.querySelector('#jasmine-fail-fast'); - failFastCheckbox.checked = config.failFast; - failFastCheckbox.onclick = function() { - navigateWithNewParam('failFast', !config.failFast); - }; - - var throwCheckbox = optionsMenuDom.querySelector( - '#jasmine-throw-failures' - ); - throwCheckbox.checked = config.oneFailurePerSpec; - throwCheckbox.onclick = function() { - navigateWithNewParam('throwFailures', !config.oneFailurePerSpec); - }; - - var randomCheckbox = optionsMenuDom.querySelector( - '#jasmine-random-order' - ); - randomCheckbox.checked = config.random; - randomCheckbox.onclick = function() { - navigateWithNewParam('random', !config.random); - }; - - var hideDisabled = optionsMenuDom.querySelector('#jasmine-hide-disabled'); - hideDisabled.checked = config.hideDisabled; - hideDisabled.onclick = function() { - navigateWithNewParam('hideDisabled', !config.hideDisabled); - }; - - var optionsTrigger = optionsMenuDom.querySelector('.jasmine-trigger'), - optionsPayload = optionsMenuDom.querySelector('.jasmine-payload'), - isOpen = /\bjasmine-open\b/; - - optionsTrigger.onclick = function() { - if (isOpen.test(optionsPayload.className)) { - optionsPayload.className = optionsPayload.className.replace( - isOpen, - '' - ); - } else { - optionsPayload.className += ' jasmine-open'; - } - }; - - return optionsMenuDom; - } - - function failureDescription(result, suite) { - var wrapper = createDom( - 'div', - { className: 'jasmine-description' }, - createDom( - 'a', - { title: result.description, href: specHref(result) }, - result.description - ) - ); - var suiteLink; - - while (suite && suite.parent) { - wrapper.insertBefore(createTextNode(' > '), wrapper.firstChild); - suiteLink = createDom( - 'a', - { href: suiteHref(suite) }, - suite.result.description - ); - wrapper.insertBefore(suiteLink, wrapper.firstChild); - - suite = suite.parent; - } - - return wrapper; - } - - function suiteHref(suite) { - var els = []; - - while (suite && suite.parent) { - els.unshift(suite.result.description); - suite = suite.parent; - } - - return addToExistingQueryString('spec', els.join(' ')); - } - - function addDeprecationWarnings(result) { - if (result && result.deprecationWarnings) { - for (var i = 0; i < result.deprecationWarnings.length; i++) { - var warning = result.deprecationWarnings[i].message; - if (!j$.util.arrayContains(warning)) { - deprecationWarnings.push(warning); - } - } - } - } - - function find(selector) { - return getContainer().querySelector('.jasmine_html-reporter ' + selector); - } - - function clearPrior() { - // return the reporter - var oldReporter = find(''); - - if (oldReporter) { - getContainer().removeChild(oldReporter); - } - } - - function createDom(type, attrs, childrenVarArgs) { - var el = createElement(type); - - for (var i = 2; i < arguments.length; i++) { - var child = arguments[i]; - - if (typeof child === 'string') { - el.appendChild(createTextNode(child)); - } else { - if (child) { - el.appendChild(child); - } - } - } - - for (var attr in attrs) { - if (attr == 'className') { - el[attr] = attrs[attr]; - } else { - el.setAttribute(attr, attrs[attr]); - } - } - - return el; - } - - function pluralize(singular, count) { - var word = count == 1 ? singular : singular + 's'; - - return '' + count + ' ' + word; - } - - function specHref(result) { - return addToExistingQueryString('spec', result.fullName); - } - - function seedHref(seed) { - return addToExistingQueryString('seed', seed); - } - - function defaultQueryString(key, value) { - return '?' + key + '=' + value; - } - - function setMenuModeTo(mode) { - htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode); - } - - function noExpectations(result) { - var allExpectations = - result.failedExpectations.length + result.passedExpectations.length; - - return ( - allExpectations === 0 && - (result.status === 'passed' || result.status === 'failed') - ); - } - - function hasActiveSpec(resultNode) { - if (resultNode.type == 'spec' && resultNode.result.status != 'excluded') { - return true; - } - - if (resultNode.type == 'suite') { - for (var i = 0, j = resultNode.children.length; i < j; i++) { - if (hasActiveSpec(resultNode.children[i])) { - return true; - } - } - } - } - } - - return HtmlReporter; -}; - -jasmineRequire.HtmlSpecFilter = function() { - function HtmlSpecFilter(options) { - var filterString = - options && - options.filterString() && - options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); - var filterPattern = new RegExp(filterString); - - this.matches = function(specName) { - return filterPattern.test(specName); - }; - } - - return HtmlSpecFilter; -}; - -jasmineRequire.ResultsNode = function() { - function ResultsNode(result, type, parent) { - this.result = result; - this.type = type; - this.parent = parent; - - this.children = []; - - this.addChild = function(result, type) { - this.children.push(new ResultsNode(result, type, this)); - }; - - this.last = function() { - return this.children[this.children.length - 1]; - }; - - this.updateResult = function(result) { - this.result = result; - }; - } - - return ResultsNode; -}; - -jasmineRequire.QueryString = function() { - function QueryString(options) { - this.navigateWithNewParam = function(key, value) { - options.getWindowLocation().search = this.fullStringWithNewParam( - key, - value - ); - }; - - this.fullStringWithNewParam = function(key, value) { - var paramMap = queryStringToParamMap(); - paramMap[key] = value; - return toQueryString(paramMap); - }; - - this.getParam = function(key) { - return queryStringToParamMap()[key]; - }; - - return this; - - function toQueryString(paramMap) { - var qStrPairs = []; - for (var prop in paramMap) { - qStrPairs.push( - encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop]) - ); - } - return '?' + qStrPairs.join('&'); - } - - function queryStringToParamMap() { - var paramStr = options.getWindowLocation().search.substring(1), - params = [], - paramMap = {}; - - if (paramStr.length > 0) { - params = paramStr.split('&'); - for (var i = 0; i < params.length; i++) { - var p = params[i].split('='); - var value = decodeURIComponent(p[1]); - if (value === 'true' || value === 'false') { - value = JSON.parse(value); - } - paramMap[decodeURIComponent(p[0])] = value; - } - } - - return paramMap; - } - } - - return QueryString; -}; diff --git a/lib/jasmine-3.5.0/jasmine.css b/lib/jasmine-3.5.0/jasmine.css deleted file mode 100644 index 81dd5b3..0000000 --- a/lib/jasmine-3.5.0/jasmine.css +++ /dev/null @@ -1,128 +0,0 @@ -@charset "UTF-8"; -body { overflow-y: scroll; } - -.jasmine_html-reporter { width: 100%; background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333; } - -.jasmine_html-reporter a { text-decoration: none; } - -.jasmine_html-reporter a:hover { text-decoration: underline; } - -.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; } - -.jasmine_html-reporter .jasmine-banner, .jasmine_html-reporter .jasmine-symbol-summary, .jasmine_html-reporter .jasmine-summary, .jasmine_html-reporter .jasmine-result-message, .jasmine_html-reporter .jasmine-spec .jasmine-description, .jasmine_html-reporter .jasmine-spec-detail .jasmine-description, .jasmine_html-reporter .jasmine-alert .jasmine-bar, .jasmine_html-reporter .jasmine-stack-trace { padding-left: 9px; padding-right: 9px; } - -.jasmine_html-reporter .jasmine-banner { position: relative; } - -.jasmine_html-reporter .jasmine-banner .jasmine-title { background: url("data:image/png;base64,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") no-repeat; background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=") no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; } - -.jasmine_html-reporter .jasmine-banner .jasmine-version { margin-left: 14px; position: relative; top: 6px; } - -.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; } - -.jasmine_html-reporter .jasmine-version { color: #aaa; } - -.jasmine_html-reporter .jasmine-banner { margin-top: 14px; } - -.jasmine_html-reporter .jasmine-duration { color: #fff; float: right; line-height: 28px; padding-right: 9px; } - -.jasmine_html-reporter .jasmine-symbol-summary { overflow: hidden; margin: 14px 0; } - -.jasmine_html-reporter .jasmine-symbol-summary li { display: inline-block; height: 10px; width: 14px; font-size: 16px; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed { font-size: 14px; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed:before { color: #007069; content: "•"; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed { line-height: 9px; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed:before { color: #ca3a11; content: "×"; font-weight: bold; margin-left: -1px; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-excluded { font-size: 14px; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-excluded:before { color: #bababa; content: "•"; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-excluded-no-display { font-size: 14px; display: none; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending { line-height: 17px; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending:before { color: #ba9d37; content: "*"; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty { font-size: 14px; } - -.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty:before { color: #ba9d37; content: "•"; } - -.jasmine_html-reporter .jasmine-run-options { float: right; margin-right: 5px; border: 1px solid #8a4182; color: #8a4182; position: relative; line-height: 20px; } - -.jasmine_html-reporter .jasmine-run-options .jasmine-trigger { cursor: pointer; padding: 8px 16px; } - -.jasmine_html-reporter .jasmine-run-options .jasmine-payload { position: absolute; display: none; right: -1px; border: 1px solid #8a4182; background-color: #eee; white-space: nowrap; padding: 4px 8px; } - -.jasmine_html-reporter .jasmine-run-options .jasmine-payload.jasmine-open { display: block; } - -.jasmine_html-reporter .jasmine-bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } - -.jasmine_html-reporter .jasmine-bar.jasmine-failed, .jasmine_html-reporter .jasmine-bar.jasmine-errored { background-color: #ca3a11; border-bottom: 1px solid #eee; } - -.jasmine_html-reporter .jasmine-bar.jasmine-passed { background-color: #007069; } - -.jasmine_html-reporter .jasmine-bar.jasmine-incomplete { background-color: #bababa; } - -.jasmine_html-reporter .jasmine-bar.jasmine-skipped { background-color: #bababa; } - -.jasmine_html-reporter .jasmine-bar.jasmine-warning { background-color: #ba9d37; color: #333; } - -.jasmine_html-reporter .jasmine-bar.jasmine-menu { background-color: #fff; color: #aaa; } - -.jasmine_html-reporter .jasmine-bar.jasmine-menu a { color: #333; } - -.jasmine_html-reporter .jasmine-bar a { color: white; } - -.jasmine_html-reporter.jasmine-spec-list .jasmine-bar.jasmine-menu.jasmine-failure-list, .jasmine_html-reporter.jasmine-spec-list .jasmine-results .jasmine-failures { display: none; } - -.jasmine_html-reporter.jasmine-failure-list .jasmine-bar.jasmine-menu.jasmine-spec-list, .jasmine_html-reporter.jasmine-failure-list .jasmine-summary { display: none; } - -.jasmine_html-reporter .jasmine-results { margin-top: 14px; } - -.jasmine_html-reporter .jasmine-summary { margin-top: 14px; } - -.jasmine_html-reporter .jasmine-summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } - -.jasmine_html-reporter .jasmine-summary ul.jasmine-suite { margin-top: 7px; margin-bottom: 7px; } - -.jasmine_html-reporter .jasmine-summary li.jasmine-passed a { color: #007069; } - -.jasmine_html-reporter .jasmine-summary li.jasmine-failed a { color: #ca3a11; } - -.jasmine_html-reporter .jasmine-summary li.jasmine-empty a { color: #ba9d37; } - -.jasmine_html-reporter .jasmine-summary li.jasmine-pending a { color: #ba9d37; } - -.jasmine_html-reporter .jasmine-summary li.jasmine-excluded a { color: #bababa; } - -.jasmine_html-reporter .jasmine-specs li.jasmine-passed a:before { content: "• "; } - -.jasmine_html-reporter .jasmine-specs li.jasmine-failed a:before { content: "× "; } - -.jasmine_html-reporter .jasmine-specs li.jasmine-empty a:before { content: "* "; } - -.jasmine_html-reporter .jasmine-specs li.jasmine-pending a:before { content: "• "; } - -.jasmine_html-reporter .jasmine-specs li.jasmine-excluded a:before { content: "• "; } - -.jasmine_html-reporter .jasmine-description + .jasmine-suite { margin-top: 0; } - -.jasmine_html-reporter .jasmine-suite { margin-top: 14px; } - -.jasmine_html-reporter .jasmine-suite a { color: #333; } - -.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail { margin-bottom: 28px; } - -.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description { background-color: #ca3a11; color: white; } - -.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description a { color: white; } - -.jasmine_html-reporter .jasmine-result-message { padding-top: 14px; color: #333; white-space: pre-wrap; } - -.jasmine_html-reporter .jasmine-result-message span.jasmine-result { display: block; } - -.jasmine_html-reporter .jasmine-stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/lib/jasmine-3.5.0/jasmine.js b/lib/jasmine-3.5.0/jasmine.js deleted file mode 100644 index 4875624..0000000 --- a/lib/jasmine-3.5.0/jasmine.js +++ /dev/null @@ -1,8218 +0,0 @@ -/* -Copyright (c) 2008-2019 Pivotal Labs - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -// eslint-disable-next-line no-unused-vars -var getJasmineRequireObj = (function(jasmineGlobal) { - var jasmineRequire; - - if ( - typeof module !== 'undefined' && - module.exports && - typeof exports !== 'undefined' - ) { - if (typeof global !== 'undefined') { - jasmineGlobal = global; - } else { - jasmineGlobal = {}; - } - jasmineRequire = exports; - } else { - if ( - typeof window !== 'undefined' && - typeof window.toString === 'function' && - window.toString() === '[object GjsGlobal]' - ) { - jasmineGlobal = window; - } - jasmineRequire = jasmineGlobal.jasmineRequire = {}; - } - - function getJasmineRequire() { - return jasmineRequire; - } - - getJasmineRequire().core = function(jRequire) { - var j$ = {}; - - jRequire.base(j$, jasmineGlobal); - j$.util = jRequire.util(j$); - j$.errors = jRequire.errors(); - j$.formatErrorMsg = jRequire.formatErrorMsg(); - j$.Any = jRequire.Any(j$); - j$.Anything = jRequire.Anything(j$); - j$.CallTracker = jRequire.CallTracker(j$); - j$.MockDate = jRequire.MockDate(); - j$.getClearStack = jRequire.clearStack(j$); - j$.Clock = jRequire.Clock(); - j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$); - j$.Env = jRequire.Env(j$); - j$.StackTrace = jRequire.StackTrace(j$); - j$.ExceptionFormatter = jRequire.ExceptionFormatter(j$); - j$.ExpectationFilterChain = jRequire.ExpectationFilterChain(); - j$.Expector = jRequire.Expector(j$); - j$.Expectation = jRequire.Expectation(j$); - j$.buildExpectationResult = jRequire.buildExpectationResult(); - j$.noopTimer = jRequire.noopTimer(); - j$.JsApiReporter = jRequire.JsApiReporter(j$); - j$.matchersUtil = jRequire.matchersUtil(j$); - j$.ObjectContaining = jRequire.ObjectContaining(j$); - j$.ArrayContaining = jRequire.ArrayContaining(j$); - j$.ArrayWithExactContents = jRequire.ArrayWithExactContents(j$); - j$.MapContaining = jRequire.MapContaining(j$); - j$.SetContaining = jRequire.SetContaining(j$); - j$.pp = jRequire.pp(j$); - j$.QueueRunner = jRequire.QueueRunner(j$); - j$.ReportDispatcher = jRequire.ReportDispatcher(j$); - j$.Spec = jRequire.Spec(j$); - j$.Spy = jRequire.Spy(j$); - j$.SpyFactory = jRequire.SpyFactory(j$); - j$.SpyRegistry = jRequire.SpyRegistry(j$); - j$.SpyStrategy = jRequire.SpyStrategy(j$); - j$.StringMatching = jRequire.StringMatching(j$); - j$.UserContext = jRequire.UserContext(j$); - j$.Suite = jRequire.Suite(j$); - j$.Timer = jRequire.Timer(); - j$.TreeProcessor = jRequire.TreeProcessor(); - j$.version = jRequire.version(); - j$.Order = jRequire.Order(); - j$.DiffBuilder = jRequire.DiffBuilder(j$); - j$.NullDiffBuilder = jRequire.NullDiffBuilder(j$); - j$.ObjectPath = jRequire.ObjectPath(j$); - j$.GlobalErrors = jRequire.GlobalErrors(j$); - - j$.Truthy = jRequire.Truthy(j$); - j$.Falsy = jRequire.Falsy(j$); - j$.Empty = jRequire.Empty(j$); - j$.NotEmpty = jRequire.NotEmpty(j$); - - j$.matchers = jRequire.requireMatchers(jRequire, j$); - j$.asyncMatchers = jRequire.requireAsyncMatchers(jRequire, j$); - - return j$; - }; - - return getJasmineRequire; -})(this); - -getJasmineRequireObj().requireMatchers = function(jRequire, j$) { - var availableMatchers = [ - 'nothing', - 'toBe', - 'toBeCloseTo', - 'toBeDefined', - 'toBeInstanceOf', - 'toBeFalse', - 'toBeFalsy', - 'toBeGreaterThan', - 'toBeGreaterThanOrEqual', - 'toBeLessThan', - 'toBeLessThanOrEqual', - 'toBeNaN', - 'toBeNegativeInfinity', - 'toBeNull', - 'toBePositiveInfinity', - 'toBeTrue', - 'toBeTruthy', - 'toBeUndefined', - 'toContain', - 'toEqual', - 'toHaveBeenCalled', - 'toHaveBeenCalledBefore', - 'toHaveBeenCalledTimes', - 'toHaveBeenCalledWith', - 'toHaveClass', - 'toMatch', - 'toThrow', - 'toThrowError', - 'toThrowMatching' - ], - matchers = {}; - - for (var i = 0; i < availableMatchers.length; i++) { - var name = availableMatchers[i]; - matchers[name] = jRequire[name](j$); - } - - return matchers; -}; - -getJasmineRequireObj().base = function(j$, jasmineGlobal) { - j$.unimplementedMethod_ = function() { - throw new Error('unimplemented method'); - }; - - /** - * Maximum object depth the pretty printer will print to. - * Set this to a lower value to speed up pretty printing if you have large objects. - * @name jasmine.MAX_PRETTY_PRINT_DEPTH - * @since 1.3.0 - */ - j$.MAX_PRETTY_PRINT_DEPTH = 8; - /** - * Maximum number of array elements to display when pretty printing objects. - * This will also limit the number of keys and values displayed for an object. - * Elements past this number will be ellipised. - * @name jasmine.MAX_PRETTY_PRINT_ARRAY_LENGTH - * @since 2.7.0 - */ - j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 50; - /** - * Maximum number of characters to display when pretty printing objects. - * Characters past this number will be ellipised. - * @name jasmine.MAX_PRETTY_PRINT_CHARS - * @since 2.9.0 - */ - j$.MAX_PRETTY_PRINT_CHARS = 1000; - /** - * Default number of milliseconds Jasmine will wait for an asynchronous spec to complete. - * @name jasmine.DEFAULT_TIMEOUT_INTERVAL - * @since 1.3.0 - */ - j$.DEFAULT_TIMEOUT_INTERVAL = 5000; - - j$.getGlobal = function() { - return jasmineGlobal; - }; - - /** - * Get the currently booted Jasmine Environment. - * - * @name jasmine.getEnv - * @since 1.3.0 - * @function - * @return {Env} - */ - j$.getEnv = function(options) { - var env = (j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options)); - //jasmine. singletons in here (setTimeout blah blah). - return env; - }; - - j$.isArray_ = function(value) { - return j$.isA_('Array', value); - }; - - j$.isObject_ = function(value) { - return ( - !j$.util.isUndefined(value) && value !== null && j$.isA_('Object', value) - ); - }; - - j$.isString_ = function(value) { - return j$.isA_('String', value); - }; - - j$.isNumber_ = function(value) { - return j$.isA_('Number', value); - }; - - j$.isFunction_ = function(value) { - return j$.isA_('Function', value); - }; - - j$.isAsyncFunction_ = function(value) { - return j$.isA_('AsyncFunction', value); - }; - - j$.isTypedArray_ = function(value) { - return ( - j$.isA_('Float32Array', value) || - j$.isA_('Float64Array', value) || - j$.isA_('Int16Array', value) || - j$.isA_('Int32Array', value) || - j$.isA_('Int8Array', value) || - j$.isA_('Uint16Array', value) || - j$.isA_('Uint32Array', value) || - j$.isA_('Uint8Array', value) || - j$.isA_('Uint8ClampedArray', value) - ); - }; - - j$.isA_ = function(typeName, value) { - return j$.getType_(value) === '[object ' + typeName + ']'; - }; - - j$.isError_ = function(value) { - if (value instanceof Error) { - return true; - } - if (value && value.constructor && value.constructor.constructor) { - var valueGlobal = value.constructor.constructor('return this'); - if (j$.isFunction_(valueGlobal)) { - valueGlobal = valueGlobal(); - } - - if (valueGlobal.Error && value instanceof valueGlobal.Error) { - return true; - } - } - return false; - }; - - j$.getType_ = function(value) { - return Object.prototype.toString.apply(value); - }; - - j$.isDomNode = function(obj) { - // Node is a function, because constructors - return typeof jasmineGlobal.Node !== 'undefined' - ? obj instanceof jasmineGlobal.Node - : obj !== null && - typeof obj === 'object' && - typeof obj.nodeType === 'number' && - typeof obj.nodeName === 'string'; - // return obj.nodeType > 0; - }; - - j$.isMap = function(obj) { - return ( - obj !== null && - typeof obj !== 'undefined' && - typeof jasmineGlobal.Map !== 'undefined' && - obj.constructor === jasmineGlobal.Map - ); - }; - - j$.isSet = function(obj) { - return ( - obj !== null && - typeof obj !== 'undefined' && - typeof jasmineGlobal.Set !== 'undefined' && - obj.constructor === jasmineGlobal.Set - ); - }; - - j$.isPromise = function(obj) { - return ( - typeof jasmineGlobal.Promise !== 'undefined' && - !!obj && - obj.constructor === jasmineGlobal.Promise - ); - }; - - j$.isPromiseLike = function(obj) { - return !!obj && j$.isFunction_(obj.then); - }; - - j$.fnNameFor = function(func) { - if (func.name) { - return func.name; - } - - var matches = - func.toString().match(/^\s*function\s*(\w+)\s*\(/) || - func.toString().match(/^\s*\[object\s*(\w+)Constructor\]/); - - return matches ? matches[1] : ''; - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value being compared is an instance of the specified class/constructor. - * @name jasmine.any - * @since 1.3.0 - * @function - * @param {Constructor} clazz - The constructor to check against. - */ - j$.any = function(clazz) { - return new j$.Any(clazz); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value being compared is not `null` and not `undefined`. - * @name jasmine.anything - * @since 2.2.0 - * @function - */ - j$.anything = function() { - return new j$.Anything(); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value being compared is `true` or anything truthy. - * @name jasmine.truthy - * @since 3.1.0 - * @function - */ - j$.truthy = function() { - return new j$.Truthy(); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value being compared is `null`, `undefined`, `0`, `false` or anything falsey. - * @name jasmine.falsy - * @since 3.1.0 - * @function - */ - j$.falsy = function() { - return new j$.Falsy(); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value being compared is empty. - * @name jasmine.empty - * @since 3.1.0 - * @function - */ - j$.empty = function() { - return new j$.Empty(); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value being compared is not empty. - * @name jasmine.notEmpty - * @since 3.1.0 - * @function - */ - j$.notEmpty = function() { - return new j$.NotEmpty(); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value being compared contains at least the keys and values. - * @name jasmine.objectContaining - * @since 1.3.0 - * @function - * @param {Object} sample - The subset of properties that _must_ be in the actual. - */ - j$.objectContaining = function(sample) { - return new j$.ObjectContaining(sample); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value is a `String` that matches the `RegExp` or `String`. - * @name jasmine.stringMatching - * @since 2.2.0 - * @function - * @param {RegExp|String} expected - */ - j$.stringMatching = function(expected) { - return new j$.StringMatching(expected); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value is an `Array` that contains at least the elements in the sample. - * @name jasmine.arrayContaining - * @since 2.2.0 - * @function - * @param {Array} sample - */ - j$.arrayContaining = function(sample) { - return new j$.ArrayContaining(sample); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if the actual value is an `Array` that contains all of the elements in the sample in any order. - * @name jasmine.arrayWithExactContents - * @since 2.8.0 - * @function - * @param {Array} sample - */ - j$.arrayWithExactContents = function(sample) { - return new j$.ArrayWithExactContents(sample); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if every key/value pair in the sample passes the deep equality comparison - * with at least one key/value pair in the actual value being compared - * @name jasmine.mapContaining - * @since 3.5.0 - * @function - * @param {Map} sample - The subset of items that _must_ be in the actual. - */ - j$.mapContaining = function(sample) { - return new j$.MapContaining(sample); - }; - - /** - * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}), - * that will succeed if every item in the sample passes the deep equality comparison - * with at least one item in the actual value being compared - * @name jasmine.setContaining - * @since 3.5.0 - * @function - * @param {Set} sample - The subset of items that _must_ be in the actual. - */ - j$.setContaining = function(sample) { - return new j$.SetContaining(sample); - }; - - j$.isSpy = function(putativeSpy) { - if (!putativeSpy) { - return false; - } - return ( - putativeSpy.and instanceof j$.SpyStrategy && - putativeSpy.calls instanceof j$.CallTracker - ); - }; -}; - -getJasmineRequireObj().util = function(j$) { - var util = {}; - - util.inherit = function(childClass, parentClass) { - var Subclass = function() {}; - Subclass.prototype = parentClass.prototype; - childClass.prototype = new Subclass(); - }; - - util.htmlEscape = function(str) { - if (!str) { - return str; - } - return str - .replace(/&/g, '&') - .replace(//g, '>'); - }; - - util.argsToArray = function(args) { - var arrayOfArgs = []; - for (var i = 0; i < args.length; i++) { - arrayOfArgs.push(args[i]); - } - return arrayOfArgs; - }; - - util.isUndefined = function(obj) { - return obj === void 0; - }; - - util.arrayContains = function(array, search) { - var i = array.length; - while (i--) { - if (array[i] === search) { - return true; - } - } - return false; - }; - - util.clone = function(obj) { - if (Object.prototype.toString.apply(obj) === '[object Array]') { - return obj.slice(); - } - - var cloned = {}; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - cloned[prop] = obj[prop]; - } - } - - return cloned; - }; - - util.cloneArgs = function(args) { - var clonedArgs = []; - var argsAsArray = j$.util.argsToArray(args); - for (var i = 0; i < argsAsArray.length; i++) { - var str = Object.prototype.toString.apply(argsAsArray[i]), - primitives = /^\[object (Boolean|String|RegExp|Number)/; - - // All falsey values are either primitives, `null`, or `undefined. - if (!argsAsArray[i] || str.match(primitives)) { - clonedArgs.push(argsAsArray[i]); - } else { - clonedArgs.push(j$.util.clone(argsAsArray[i])); - } - } - return clonedArgs; - }; - - util.getPropertyDescriptor = function(obj, methodName) { - var descriptor, - proto = obj; - - do { - descriptor = Object.getOwnPropertyDescriptor(proto, methodName); - proto = Object.getPrototypeOf(proto); - } while (!descriptor && proto); - - return descriptor; - }; - - util.objectDifference = function(obj, toRemove) { - var diff = {}; - - for (var key in obj) { - if (util.has(obj, key) && !util.has(toRemove, key)) { - diff[key] = obj[key]; - } - } - - return diff; - }; - - util.has = function(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); - }; - - util.errorWithStack = function errorWithStack() { - // Don't throw and catch if we don't have to, because it makes it harder - // for users to debug their code with exception breakpoints. - var error = new Error(); - - if (error.stack) { - return error; - } - - // But some browsers (e.g. Phantom) only provide a stack trace if we throw. - try { - throw new Error(); - } catch (e) { - return e; - } - }; - - function callerFile() { - var trace = new j$.StackTrace(util.errorWithStack()); - return trace.frames[2].file; - } - - util.jasmineFile = (function() { - var result; - - return function() { - if (!result) { - result = callerFile(); - } - - return result; - }; - })(); - - function StopIteration() {} - StopIteration.prototype = Object.create(Error.prototype); - StopIteration.prototype.constructor = StopIteration; - - // useful for maps and sets since `forEach` is the only IE11-compatible way to iterate them - util.forEachBreakable = function(iterable, iteratee) { - function breakLoop() { - throw new StopIteration(); - } - - try { - iterable.forEach(function(value, key) { - iteratee(breakLoop, value, key, iterable); - }); - } catch (error) { - if (!(error instanceof StopIteration)) throw error; - } - }; - - return util; -}; - -getJasmineRequireObj().Spec = function(j$) { - function Spec(attrs) { - this.expectationFactory = attrs.expectationFactory; - this.asyncExpectationFactory = attrs.asyncExpectationFactory; - this.resultCallback = attrs.resultCallback || function() {}; - this.id = attrs.id; - this.description = attrs.description || ''; - this.queueableFn = attrs.queueableFn; - this.beforeAndAfterFns = - attrs.beforeAndAfterFns || - function() { - return { befores: [], afters: [] }; - }; - this.userContext = - attrs.userContext || - function() { - return {}; - }; - this.onStart = attrs.onStart || function() {}; - this.getSpecName = - attrs.getSpecName || - function() { - return ''; - }; - this.expectationResultFactory = - attrs.expectationResultFactory || function() {}; - this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; - this.catchingExceptions = - attrs.catchingExceptions || - function() { - return true; - }; - this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure; - this.timer = attrs.timer || j$.noopTimer; - - if (!this.queueableFn.fn) { - this.pend(); - } - - /** - * @typedef SpecResult - * @property {Int} id - The unique id of this spec. - * @property {String} description - The description passed to the {@link it} that created this spec. - * @property {String} fullName - The full description including all ancestors of this spec. - * @property {Expectation[]} failedExpectations - The list of expectations that failed during execution of this spec. - * @property {Expectation[]} passedExpectations - The list of expectations that passed during execution of this spec. - * @property {Expectation[]} deprecationWarnings - The list of deprecation warnings that occurred during execution this spec. - * @property {String} pendingReason - If the spec is {@link pending}, this will be the reason. - * @property {String} status - Once the spec has completed, this string represents the pass/fail status of this spec. - * @property {number} duration - The time in ms used by the spec execution, including any before/afterEach. - */ - this.result = { - id: this.id, - description: this.description, - fullName: this.getFullName(), - failedExpectations: [], - passedExpectations: [], - deprecationWarnings: [], - pendingReason: '', - duration: null - }; - } - - Spec.prototype.addExpectationResult = function(passed, data, isError) { - var expectationResult = this.expectationResultFactory(data); - if (passed) { - this.result.passedExpectations.push(expectationResult); - } else { - this.result.failedExpectations.push(expectationResult); - - if (this.throwOnExpectationFailure && !isError) { - throw new j$.errors.ExpectationFailed(); - } - } - }; - - Spec.prototype.expect = function(actual) { - return this.expectationFactory(actual, this); - }; - - Spec.prototype.expectAsync = function(actual) { - return this.asyncExpectationFactory(actual, this); - }; - - Spec.prototype.execute = function(onComplete, excluded, failSpecWithNoExp) { - var self = this; - - var onStart = { - fn: function(done) { - self.timer.start(); - self.onStart(self, done); - } - }; - - var complete = { - fn: function(done) { - self.queueableFn.fn = null; - self.result.status = self.status(excluded, failSpecWithNoExp); - self.resultCallback(self.result, done); - } - }; - - var fns = this.beforeAndAfterFns(); - var regularFns = fns.befores.concat(this.queueableFn); - - var runnerConfig = { - isLeaf: true, - queueableFns: regularFns, - cleanupFns: fns.afters, - onException: function() { - self.onException.apply(self, arguments); - }, - onComplete: function() { - self.result.duration = self.timer.elapsed(); - onComplete( - self.result.status === 'failed' && - new j$.StopExecutionError('spec failed') - ); - }, - userContext: this.userContext() - }; - - if (this.markedPending || excluded === true) { - runnerConfig.queueableFns = []; - runnerConfig.cleanupFns = []; - } - - runnerConfig.queueableFns.unshift(onStart); - runnerConfig.cleanupFns.push(complete); - - this.queueRunnerFactory(runnerConfig); - }; - - Spec.prototype.onException = function onException(e) { - if (Spec.isPendingSpecException(e)) { - this.pend(extractCustomPendingMessage(e)); - return; - } - - if (e instanceof j$.errors.ExpectationFailed) { - return; - } - - this.addExpectationResult( - false, - { - matcherName: '', - passed: false, - expected: '', - actual: '', - error: e - }, - true - ); - }; - - Spec.prototype.pend = function(message) { - this.markedPending = true; - if (message) { - this.result.pendingReason = message; - } - }; - - Spec.prototype.getResult = function() { - this.result.status = this.status(); - return this.result; - }; - - Spec.prototype.status = function(excluded, failSpecWithNoExpectations) { - if (excluded === true) { - return 'excluded'; - } - - if (this.markedPending) { - return 'pending'; - } - - if ( - this.result.failedExpectations.length > 0 || - (failSpecWithNoExpectations && - this.result.failedExpectations.length + - this.result.passedExpectations.length === - 0) - ) { - return 'failed'; - } - - return 'passed'; - }; - - Spec.prototype.getFullName = function() { - return this.getSpecName(this); - }; - - Spec.prototype.addDeprecationWarning = function(deprecation) { - if (typeof deprecation === 'string') { - deprecation = { message: deprecation }; - } - this.result.deprecationWarnings.push( - this.expectationResultFactory(deprecation) - ); - }; - - var extractCustomPendingMessage = function(e) { - var fullMessage = e.toString(), - boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage), - boilerplateEnd = - boilerplateStart + Spec.pendingSpecExceptionMessage.length; - - return fullMessage.substr(boilerplateEnd); - }; - - Spec.pendingSpecExceptionMessage = '=> marked Pending'; - - Spec.isPendingSpecException = function(e) { - return !!( - e && - e.toString && - e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1 - ); - }; - - return Spec; -}; - -if (typeof window == void 0 && typeof exports == 'object') { - /* globals exports */ - exports.Spec = jasmineRequire.Spec; -} - -/*jshint bitwise: false*/ - -getJasmineRequireObj().Order = function() { - function Order(options) { - this.random = 'random' in options ? options.random : true; - var seed = (this.seed = options.seed || generateSeed()); - this.sort = this.random ? randomOrder : naturalOrder; - - function naturalOrder(items) { - return items; - } - - function randomOrder(items) { - var copy = items.slice(); - copy.sort(function(a, b) { - return jenkinsHash(seed + a.id) - jenkinsHash(seed + b.id); - }); - return copy; - } - - function generateSeed() { - return String(Math.random()).slice(-5); - } - - // Bob Jenkins One-at-a-Time Hash algorithm is a non-cryptographic hash function - // used to get a different output when the key changes slightly. - // We use your return to sort the children randomly in a consistent way when - // used in conjunction with a seed - - function jenkinsHash(key) { - var hash, i; - for (hash = i = 0; i < key.length; ++i) { - hash += key.charCodeAt(i); - hash += hash << 10; - hash ^= hash >> 6; - } - hash += hash << 3; - hash ^= hash >> 11; - hash += hash << 15; - return hash; - } - } - - return Order; -}; - -getJasmineRequireObj().Env = function(j$) { - /** - * _Note:_ Do not construct this directly, Jasmine will make one during booting. - * @name Env - * @since 2.0.0 - * @classdesc The Jasmine environment - * @constructor - */ - function Env(options) { - options = options || {}; - - var self = this; - var global = options.global || j$.getGlobal(); - var customPromise; - - var totalSpecsDefined = 0; - - var realSetTimeout = global.setTimeout; - var realClearTimeout = global.clearTimeout; - var clearStack = j$.getClearStack(global); - this.clock = new j$.Clock( - global, - function() { - return new j$.DelayedFunctionScheduler(); - }, - new j$.MockDate(global) - ); - - var runnableResources = {}; - - var currentSpec = null; - var currentlyExecutingSuites = []; - var currentDeclarationSuite = null; - var hasFailures = false; - - /** - * This represents the available options to configure Jasmine. - * Options that are not provided will use their default values - * @interface Configuration - * @since 3.3.0 - */ - var config = { - /** - * Whether to randomize spec execution order - * @name Configuration#random - * @since 3.3.0 - * @type Boolean - * @default true - */ - random: true, - /** - * Seed to use as the basis of randomization. - * Null causes the seed to be determined randomly at the start of execution. - * @name Configuration#seed - * @since 3.3.0 - * @type function - * @default null - */ - seed: null, - /** - * Whether to stop execution of the suite after the first spec failure - * @name Configuration#failFast - * @since 3.3.0 - * @type Boolean - * @default false - */ - failFast: false, - /** - * Whether to fail the spec if it ran no expectations. By default - * a spec that ran no expectations is reported as passed. Setting this - * to true will report such spec as a failure. - * @name Configuration#failSpecWithNoExpectations - * @since 3.5.0 - * @type Boolean - * @default false - */ - failSpecWithNoExpectations: false, - /** - * Whether to cause specs to only have one expectation failure. - * @name Configuration#oneFailurePerSpec - * @since 3.3.0 - * @type Boolean - * @default false - */ - oneFailurePerSpec: false, - /** - * Function to use to filter specs - * @name Configuration#specFilter - * @since 3.3.0 - * @type function - * @default true - */ - specFilter: function() { - return true; - }, - /** - * Whether or not reporters should hide disabled specs from their output. - * Currently only supported by Jasmine's HTMLReporter - * @name Configuration#hideDisabled - * @since 3.3.0 - * @type Boolean - * @default false - */ - hideDisabled: false, - /** - * Set to provide a custom promise library that Jasmine will use if it needs - * to create a promise. If not set, it will default to whatever global Promise - * library is available (if any). - * @name Configuration#Promise - * @since 3.5.0 - * @type function - * @default undefined - */ - Promise: undefined - }; - - var currentSuite = function() { - return currentlyExecutingSuites[currentlyExecutingSuites.length - 1]; - }; - - var currentRunnable = function() { - return currentSpec || currentSuite(); - }; - - var globalErrors = null; - - var installGlobalErrors = function() { - if (globalErrors) { - return; - } - - globalErrors = new j$.GlobalErrors(); - globalErrors.install(); - }; - - if (!options.suppressLoadErrors) { - installGlobalErrors(); - globalErrors.pushListener(function( - message, - filename, - lineno, - colNo, - err - ) { - topSuite.result.failedExpectations.push({ - passed: false, - globalErrorType: 'load', - message: message, - stack: err && err.stack, - filename: filename, - lineno: lineno - }); - }); - } - - /** - * Configure your jasmine environment - * @name Env#configure - * @since 3.3.0 - * @argument {Configuration} configuration - * @function - */ - this.configure = function(configuration) { - if (configuration.specFilter) { - config.specFilter = configuration.specFilter; - } - - if (configuration.hasOwnProperty('random')) { - config.random = !!configuration.random; - } - - if (configuration.hasOwnProperty('seed')) { - config.seed = configuration.seed; - } - - if (configuration.hasOwnProperty('failFast')) { - config.failFast = configuration.failFast; - } - - if (configuration.hasOwnProperty('failSpecWithNoExpectations')) { - config.failSpecWithNoExpectations = - configuration.failSpecWithNoExpectations; - } - - if (configuration.hasOwnProperty('oneFailurePerSpec')) { - config.oneFailurePerSpec = configuration.oneFailurePerSpec; - } - - if (configuration.hasOwnProperty('hideDisabled')) { - config.hideDisabled = configuration.hideDisabled; - } - - // Don't use hasOwnProperty to check for Promise existence because Promise - // can be initialized to undefined, either explicitly or by using the - // object returned from Env#configuration. In particular, Karma does this. - if (configuration.Promise) { - if ( - typeof configuration.Promise.resolve === 'function' && - typeof configuration.Promise.reject === 'function' - ) { - customPromise = configuration.Promise; - } else { - throw new Error( - 'Custom promise library missing `resolve`/`reject` functions' - ); - } - } - }; - - /** - * Get the current configuration for your jasmine environment - * @name Env#configuration - * @since 3.3.0 - * @function - * @returns {Configuration} - */ - this.configuration = function() { - var result = {}; - for (var property in config) { - result[property] = config[property]; - } - return result; - }; - - Object.defineProperty(this, 'specFilter', { - get: function() { - self.deprecated( - 'Getting specFilter directly from Env is deprecated and will be removed in a future version of Jasmine, please check the specFilter option from `configuration`' - ); - return config.specFilter; - }, - set: function(val) { - self.deprecated( - 'Setting specFilter directly on Env is deprecated and will be removed in a future version of Jasmine, please use the specFilter option in `configure`' - ); - config.specFilter = val; - } - }); - - this.setDefaultSpyStrategy = function(defaultStrategyFn) { - if (!currentRunnable()) { - throw new Error( - 'Default spy strategy must be set in a before function or a spec' - ); - } - runnableResources[ - currentRunnable().id - ].defaultStrategyFn = defaultStrategyFn; - }; - - this.addSpyStrategy = function(name, fn) { - if (!currentRunnable()) { - throw new Error( - 'Custom spy strategies must be added in a before function or a spec' - ); - } - runnableResources[currentRunnable().id].customSpyStrategies[name] = fn; - }; - - this.addCustomEqualityTester = function(tester) { - if (!currentRunnable()) { - throw new Error( - 'Custom Equalities must be added in a before function or a spec' - ); - } - runnableResources[currentRunnable().id].customEqualityTesters.push( - tester - ); - }; - - this.addMatchers = function(matchersToAdd) { - if (!currentRunnable()) { - throw new Error( - 'Matchers must be added in a before function or a spec' - ); - } - var customMatchers = - runnableResources[currentRunnable().id].customMatchers; - for (var matcherName in matchersToAdd) { - customMatchers[matcherName] = matchersToAdd[matcherName]; - } - }; - - this.addAsyncMatchers = function(matchersToAdd) { - if (!currentRunnable()) { - throw new Error( - 'Async Matchers must be added in a before function or a spec' - ); - } - var customAsyncMatchers = - runnableResources[currentRunnable().id].customAsyncMatchers; - for (var matcherName in matchersToAdd) { - customAsyncMatchers[matcherName] = matchersToAdd[matcherName]; - } - }; - - j$.Expectation.addCoreMatchers(j$.matchers); - j$.Expectation.addAsyncCoreMatchers(j$.asyncMatchers); - - var nextSpecId = 0; - var getNextSpecId = function() { - return 'spec' + nextSpecId++; - }; - - var nextSuiteId = 0; - var getNextSuiteId = function() { - return 'suite' + nextSuiteId++; - }; - - var expectationFactory = function(actual, spec) { - return j$.Expectation.factory({ - util: j$.matchersUtil, - customEqualityTesters: runnableResources[spec.id].customEqualityTesters, - customMatchers: runnableResources[spec.id].customMatchers, - actual: actual, - addExpectationResult: addExpectationResult - }); - - function addExpectationResult(passed, result) { - return spec.addExpectationResult(passed, result); - } - }; - - var asyncExpectationFactory = function(actual, spec) { - return j$.Expectation.asyncFactory({ - util: j$.matchersUtil, - customEqualityTesters: runnableResources[spec.id].customEqualityTesters, - customAsyncMatchers: runnableResources[spec.id].customAsyncMatchers, - actual: actual, - addExpectationResult: addExpectationResult - }); - - function addExpectationResult(passed, result) { - return spec.addExpectationResult(passed, result); - } - }; - - var defaultResourcesForRunnable = function(id, parentRunnableId) { - var resources = { - spies: [], - customEqualityTesters: [], - customMatchers: {}, - customAsyncMatchers: {}, - customSpyStrategies: {}, - defaultStrategyFn: undefined - }; - - if (runnableResources[parentRunnableId]) { - resources.customEqualityTesters = j$.util.clone( - runnableResources[parentRunnableId].customEqualityTesters - ); - resources.customMatchers = j$.util.clone( - runnableResources[parentRunnableId].customMatchers - ); - resources.customAsyncMatchers = j$.util.clone( - runnableResources[parentRunnableId].customAsyncMatchers - ); - resources.defaultStrategyFn = - runnableResources[parentRunnableId].defaultStrategyFn; - } - - runnableResources[id] = resources; - }; - - var clearResourcesForRunnable = function(id) { - spyRegistry.clearSpies(); - delete runnableResources[id]; - }; - - var beforeAndAfterFns = function(suite) { - return function() { - var befores = [], - afters = []; - - while (suite) { - befores = befores.concat(suite.beforeFns); - afters = afters.concat(suite.afterFns); - - suite = suite.parentSuite; - } - - return { - befores: befores.reverse(), - afters: afters - }; - }; - }; - - var getSpecName = function(spec, suite) { - var fullName = [spec.description], - suiteFullName = suite.getFullName(); - - if (suiteFullName !== '') { - fullName.unshift(suiteFullName); - } - return fullName.join(' '); - }; - - // TODO: we may just be able to pass in the fn instead of wrapping here - var buildExpectationResult = j$.buildExpectationResult, - exceptionFormatter = new j$.ExceptionFormatter(), - expectationResultFactory = function(attrs) { - attrs.messageFormatter = exceptionFormatter.message; - attrs.stackFormatter = exceptionFormatter.stack; - - return buildExpectationResult(attrs); - }; - - /** - * Sets whether Jasmine should throw an Error when an expectation fails. - * This causes a spec to only have one expectation failure. - * @name Env#throwOnExpectationFailure - * @since 2.3.0 - * @function - * @param {Boolean} value Whether to throw when a expectation fails - * @deprecated Use the `oneFailurePerSpec` option with {@link Env#configure} - */ - this.throwOnExpectationFailure = function(value) { - this.deprecated( - 'Setting throwOnExpectationFailure directly on Env is deprecated and will be removed in a future version of Jasmine, please use the oneFailurePerSpec option in `configure`' - ); - this.configure({ oneFailurePerSpec: !!value }); - }; - - this.throwingExpectationFailures = function() { - this.deprecated( - 'Getting throwingExpectationFailures directly from Env is deprecated and will be removed in a future version of Jasmine, please check the oneFailurePerSpec option from `configuration`' - ); - return config.oneFailurePerSpec; - }; - - /** - * Set whether to stop suite execution when a spec fails - * @name Env#stopOnSpecFailure - * @since 2.7.0 - * @function - * @param {Boolean} value Whether to stop suite execution when a spec fails - * @deprecated Use the `failFast` option with {@link Env#configure} - */ - this.stopOnSpecFailure = function(value) { - this.deprecated( - 'Setting stopOnSpecFailure directly is deprecated and will be removed in a future version of Jasmine, please use the failFast option in `configure`' - ); - this.configure({ failFast: !!value }); - }; - - this.stoppingOnSpecFailure = function() { - this.deprecated( - 'Getting stoppingOnSpecFailure directly from Env is deprecated and will be removed in a future version of Jasmine, please check the failFast option from `configuration`' - ); - return config.failFast; - }; - - /** - * Set whether to randomize test execution order - * @name Env#randomizeTests - * @since 2.4.0 - * @function - * @param {Boolean} value Whether to randomize execution order - * @deprecated Use the `random` option with {@link Env#configure} - */ - this.randomizeTests = function(value) { - this.deprecated( - 'Setting randomizeTests directly is deprecated and will be removed in a future version of Jasmine, please use the random option in `configure`' - ); - config.random = !!value; - }; - - this.randomTests = function() { - this.deprecated( - 'Getting randomTests directly from Env is deprecated and will be removed in a future version of Jasmine, please check the random option from `configuration`' - ); - return config.random; - }; - - /** - * Set the random number seed for spec randomization - * @name Env#seed - * @since 2.4.0 - * @function - * @param {Number} value The seed value - * @deprecated Use the `seed` option with {@link Env#configure} - */ - this.seed = function(value) { - this.deprecated( - 'Setting seed directly is deprecated and will be removed in a future version of Jasmine, please use the seed option in `configure`' - ); - if (value) { - config.seed = value; - } - return config.seed; - }; - - this.hidingDisabled = function(value) { - this.deprecated( - 'Getting hidingDisabled directly from Env is deprecated and will be removed in a future version of Jasmine, please check the hideDisabled option from `configuration`' - ); - return config.hideDisabled; - }; - - /** - * @name Env#hideDisabled - * @since 3.2.0 - * @function - */ - this.hideDisabled = function(value) { - this.deprecated( - 'Setting hideDisabled directly is deprecated and will be removed in a future version of Jasmine, please use the hideDisabled option in `configure`' - ); - config.hideDisabled = !!value; - }; - - this.deprecated = function(deprecation) { - var runnable = currentRunnable() || topSuite; - runnable.addDeprecationWarning(deprecation); - if ( - typeof console !== 'undefined' && - typeof console.error === 'function' - ) { - console.error('DEPRECATION:', deprecation); - } - }; - - var queueRunnerFactory = function(options, args) { - var failFast = false; - if (options.isLeaf) { - failFast = config.oneFailurePerSpec; - } else if (!options.isReporter) { - failFast = config.failFast; - } - options.clearStack = options.clearStack || clearStack; - options.timeout = { - setTimeout: realSetTimeout, - clearTimeout: realClearTimeout - }; - options.fail = self.fail; - options.globalErrors = globalErrors; - options.completeOnFirstError = failFast; - options.onException = - options.onException || - function(e) { - (currentRunnable() || topSuite).onException(e); - }; - options.deprecated = self.deprecated; - - new j$.QueueRunner(options).execute(args); - }; - - var topSuite = new j$.Suite({ - env: this, - id: getNextSuiteId(), - description: 'Jasmine__TopLevel__Suite', - expectationFactory: expectationFactory, - asyncExpectationFactory: asyncExpectationFactory, - expectationResultFactory: expectationResultFactory - }); - defaultResourcesForRunnable(topSuite.id); - currentDeclarationSuite = topSuite; - - this.topSuite = function() { - return topSuite; - }; - - /** - * This represents the available reporter callback for an object passed to {@link Env#addReporter}. - * @interface Reporter - * @see custom_reporter - */ - var reporter = new j$.ReportDispatcher( - [ - /** - * `jasmineStarted` is called after all of the specs have been loaded, but just before execution starts. - * @function - * @name Reporter#jasmineStarted - * @param {JasmineStartedInfo} suiteInfo Information about the full Jasmine suite that is being run - * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on. - * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion. - * @see async - */ - 'jasmineStarted', - /** - * When the entire suite has finished execution `jasmineDone` is called - * @function - * @name Reporter#jasmineDone - * @param {JasmineDoneInfo} suiteInfo Information about the full Jasmine suite that just finished running. - * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on. - * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion. - * @see async - */ - 'jasmineDone', - /** - * `suiteStarted` is invoked when a `describe` starts to run - * @function - * @name Reporter#suiteStarted - * @param {SuiteResult} result Information about the individual {@link describe} being run - * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on. - * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion. - * @see async - */ - 'suiteStarted', - /** - * `suiteDone` is invoked when all of the child specs and suites for a given suite have been run - * - * While jasmine doesn't require any specific functions, not defining a `suiteDone` will make it impossible for a reporter to know when a suite has failures in an `afterAll`. - * @function - * @name Reporter#suiteDone - * @param {SuiteResult} result - * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on. - * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion. - * @see async - */ - 'suiteDone', - /** - * `specStarted` is invoked when an `it` starts to run (including associated `beforeEach` functions) - * @function - * @name Reporter#specStarted - * @param {SpecResult} result Information about the individual {@link it} being run - * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on. - * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion. - * @see async - */ - 'specStarted', - /** - * `specDone` is invoked when an `it` and its associated `beforeEach` and `afterEach` functions have been run. - * - * While jasmine doesn't require any specific functions, not defining a `specDone` will make it impossible for a reporter to know when a spec has failed. - * @function - * @name Reporter#specDone - * @param {SpecResult} result - * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on. - * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion. - * @see async - */ - 'specDone' - ], - queueRunnerFactory - ); - - this.execute = function(runnablesToRun) { - installGlobalErrors(); - - if (!runnablesToRun) { - if (focusedRunnables.length) { - runnablesToRun = focusedRunnables; - } else { - runnablesToRun = [topSuite.id]; - } - } - - var order = new j$.Order({ - random: config.random, - seed: config.seed - }); - - var processor = new j$.TreeProcessor({ - tree: topSuite, - runnableIds: runnablesToRun, - queueRunnerFactory: queueRunnerFactory, - failSpecWithNoExpectations: config.failSpecWithNoExpectations, - nodeStart: function(suite, next) { - currentlyExecutingSuites.push(suite); - defaultResourcesForRunnable(suite.id, suite.parentSuite.id); - reporter.suiteStarted(suite.result, next); - suite.startTimer(); - }, - nodeComplete: function(suite, result, next) { - if (suite !== currentSuite()) { - throw new Error('Tried to complete the wrong suite'); - } - - clearResourcesForRunnable(suite.id); - currentlyExecutingSuites.pop(); - - if (result.status === 'failed') { - hasFailures = true; - } - suite.endTimer(); - reporter.suiteDone(result, next); - }, - orderChildren: function(node) { - return order.sort(node.children); - }, - excludeNode: function(spec) { - return !config.specFilter(spec); - } - }); - - if (!processor.processTree().valid) { - throw new Error( - 'Invalid order: would cause a beforeAll or afterAll to be run multiple times' - ); - } - - var jasmineTimer = new j$.Timer(); - jasmineTimer.start(); - - /** - * Information passed to the {@link Reporter#jasmineStarted} event. - * @typedef JasmineStartedInfo - * @property {Int} totalSpecsDefined - The total number of specs defined in this suite. - * @property {Order} order - Information about the ordering (random or not) of this execution of the suite. - */ - reporter.jasmineStarted( - { - totalSpecsDefined: totalSpecsDefined, - order: order - }, - function() { - currentlyExecutingSuites.push(topSuite); - - processor.execute(function() { - clearResourcesForRunnable(topSuite.id); - currentlyExecutingSuites.pop(); - var overallStatus, incompleteReason; - - if (hasFailures || topSuite.result.failedExpectations.length > 0) { - overallStatus = 'failed'; - } else if (focusedRunnables.length > 0) { - overallStatus = 'incomplete'; - incompleteReason = 'fit() or fdescribe() was found'; - } else if (totalSpecsDefined === 0) { - overallStatus = 'incomplete'; - incompleteReason = 'No specs found'; - } else { - overallStatus = 'passed'; - } - - /** - * Information passed to the {@link Reporter#jasmineDone} event. - * @typedef JasmineDoneInfo - * @property {OverallStatus} overallStatus - The overall result of the suite: 'passed', 'failed', or 'incomplete'. - * @property {Int} totalTime - The total time (in ms) that it took to execute the suite - * @property {IncompleteReason} incompleteReason - Explanation of why the suite was incomplete. - * @property {Order} order - Information about the ordering (random or not) of this execution of the suite. - * @property {Expectation[]} failedExpectations - List of expectations that failed in an {@link afterAll} at the global level. - * @property {Expectation[]} deprecationWarnings - List of deprecation warnings that occurred at the global level. - */ - reporter.jasmineDone( - { - overallStatus: overallStatus, - totalTime: jasmineTimer.elapsed(), - incompleteReason: incompleteReason, - order: order, - failedExpectations: topSuite.result.failedExpectations, - deprecationWarnings: topSuite.result.deprecationWarnings - }, - function() {} - ); - }); - } - ); - }; - - /** - * Add a custom reporter to the Jasmine environment. - * @name Env#addReporter - * @since 2.0.0 - * @function - * @param {Reporter} reporterToAdd The reporter to be added. - * @see custom_reporter - */ - this.addReporter = function(reporterToAdd) { - reporter.addReporter(reporterToAdd); - }; - - /** - * Provide a fallback reporter if no other reporters have been specified. - * @name Env#provideFallbackReporter - * @since 2.5.0 - * @function - * @param {Reporter} reporterToAdd The reporter - * @see custom_reporter - */ - this.provideFallbackReporter = function(reporterToAdd) { - reporter.provideFallbackReporter(reporterToAdd); - }; - - /** - * Clear all registered reporters - * @name Env#clearReporters - * @since 2.5.2 - * @function - */ - this.clearReporters = function() { - reporter.clearReporters(); - }; - - var spyFactory = new j$.SpyFactory( - function getCustomStrategies() { - var runnable = currentRunnable(); - - if (runnable) { - return runnableResources[runnable.id].customSpyStrategies; - } - - return {}; - }, - function getDefaultStrategyFn() { - var runnable = currentRunnable(); - - if (runnable) { - return runnableResources[runnable.id].defaultStrategyFn; - } - - return undefined; - }, - function getPromise() { - return customPromise || global.Promise; - } - ); - - var spyRegistry = new j$.SpyRegistry({ - currentSpies: function() { - if (!currentRunnable()) { - throw new Error( - 'Spies must be created in a before function or a spec' - ); - } - return runnableResources[currentRunnable().id].spies; - }, - createSpy: function(name, originalFn) { - return self.createSpy(name, originalFn); - } - }); - - this.allowRespy = function(allow) { - spyRegistry.allowRespy(allow); - }; - - this.spyOn = function() { - return spyRegistry.spyOn.apply(spyRegistry, arguments); - }; - - this.spyOnProperty = function() { - return spyRegistry.spyOnProperty.apply(spyRegistry, arguments); - }; - - this.spyOnAllFunctions = function() { - return spyRegistry.spyOnAllFunctions.apply(spyRegistry, arguments); - }; - - this.createSpy = function(name, originalFn) { - if (arguments.length === 1 && j$.isFunction_(name)) { - originalFn = name; - name = originalFn.name; - } - - return spyFactory.createSpy(name, originalFn); - }; - - this.createSpyObj = function(baseName, methodNames, propertyNames) { - return spyFactory.createSpyObj(baseName, methodNames, propertyNames); - }; - - var ensureIsFunction = function(fn, caller) { - if (!j$.isFunction_(fn)) { - throw new Error( - caller + ' expects a function argument; received ' + j$.getType_(fn) - ); - } - }; - - var ensureIsFunctionOrAsync = function(fn, caller) { - if (!j$.isFunction_(fn) && !j$.isAsyncFunction_(fn)) { - throw new Error( - caller + ' expects a function argument; received ' + j$.getType_(fn) - ); - } - }; - - function ensureIsNotNested(method) { - var runnable = currentRunnable(); - if (runnable !== null && runnable !== undefined) { - throw new Error( - "'" + method + "' should only be used in 'describe' function" - ); - } - } - - var suiteFactory = function(description) { - var suite = new j$.Suite({ - env: self, - id: getNextSuiteId(), - description: description, - parentSuite: currentDeclarationSuite, - expectationFactory: expectationFactory, - asyncExpectationFactory: asyncExpectationFactory, - expectationResultFactory: expectationResultFactory, - throwOnExpectationFailure: config.oneFailurePerSpec - }); - - return suite; - }; - - this.describe = function(description, specDefinitions) { - ensureIsNotNested('describe'); - ensureIsFunction(specDefinitions, 'describe'); - var suite = suiteFactory(description); - if (specDefinitions.length > 0) { - throw new Error('describe does not expect any arguments'); - } - if (currentDeclarationSuite.markedPending) { - suite.pend(); - } - addSpecsToSuite(suite, specDefinitions); - return suite; - }; - - this.xdescribe = function(description, specDefinitions) { - ensureIsNotNested('xdescribe'); - ensureIsFunction(specDefinitions, 'xdescribe'); - var suite = suiteFactory(description); - suite.pend(); - addSpecsToSuite(suite, specDefinitions); - return suite; - }; - - var focusedRunnables = []; - - this.fdescribe = function(description, specDefinitions) { - ensureIsNotNested('fdescribe'); - ensureIsFunction(specDefinitions, 'fdescribe'); - var suite = suiteFactory(description); - suite.isFocused = true; - - focusedRunnables.push(suite.id); - unfocusAncestor(); - addSpecsToSuite(suite, specDefinitions); - - return suite; - }; - - function addSpecsToSuite(suite, specDefinitions) { - var parentSuite = currentDeclarationSuite; - parentSuite.addChild(suite); - currentDeclarationSuite = suite; - - var declarationError = null; - try { - specDefinitions.call(suite); - } catch (e) { - declarationError = e; - } - - if (declarationError) { - suite.onException(declarationError); - } - - currentDeclarationSuite = parentSuite; - } - - function findFocusedAncestor(suite) { - while (suite) { - if (suite.isFocused) { - return suite.id; - } - suite = suite.parentSuite; - } - - return null; - } - - function unfocusAncestor() { - var focusedAncestor = findFocusedAncestor(currentDeclarationSuite); - if (focusedAncestor) { - for (var i = 0; i < focusedRunnables.length; i++) { - if (focusedRunnables[i] === focusedAncestor) { - focusedRunnables.splice(i, 1); - break; - } - } - } - } - - var specFactory = function(description, fn, suite, timeout) { - totalSpecsDefined++; - var spec = new j$.Spec({ - id: getNextSpecId(), - beforeAndAfterFns: beforeAndAfterFns(suite), - expectationFactory: expectationFactory, - asyncExpectationFactory: asyncExpectationFactory, - resultCallback: specResultCallback, - getSpecName: function(spec) { - return getSpecName(spec, suite); - }, - onStart: specStarted, - description: description, - expectationResultFactory: expectationResultFactory, - queueRunnerFactory: queueRunnerFactory, - userContext: function() { - return suite.clonedSharedUserContext(); - }, - queueableFn: { - fn: fn, - timeout: timeout || 0 - }, - throwOnExpectationFailure: config.oneFailurePerSpec, - timer: new j$.Timer() - }); - return spec; - - function specResultCallback(result, next) { - clearResourcesForRunnable(spec.id); - currentSpec = null; - - if (result.status === 'failed') { - hasFailures = true; - } - - reporter.specDone(result, next); - } - - function specStarted(spec, next) { - currentSpec = spec; - defaultResourcesForRunnable(spec.id, suite.id); - reporter.specStarted(spec.result, next); - } - }; - - this.it = function(description, fn, timeout) { - ensureIsNotNested('it'); - // it() sometimes doesn't have a fn argument, so only check the type if - // it's given. - if (arguments.length > 1 && typeof fn !== 'undefined') { - ensureIsFunctionOrAsync(fn, 'it'); - } - var spec = specFactory(description, fn, currentDeclarationSuite, timeout); - if (currentDeclarationSuite.markedPending) { - spec.pend(); - } - currentDeclarationSuite.addChild(spec); - return spec; - }; - - this.xit = function(description, fn, timeout) { - ensureIsNotNested('xit'); - // xit(), like it(), doesn't always have a fn argument, so only check the - // type when needed. - if (arguments.length > 1 && typeof fn !== 'undefined') { - ensureIsFunctionOrAsync(fn, 'xit'); - } - var spec = this.it.apply(this, arguments); - spec.pend('Temporarily disabled with xit'); - return spec; - }; - - this.fit = function(description, fn, timeout) { - ensureIsNotNested('fit'); - ensureIsFunctionOrAsync(fn, 'fit'); - var spec = specFactory(description, fn, currentDeclarationSuite, timeout); - currentDeclarationSuite.addChild(spec); - focusedRunnables.push(spec.id); - unfocusAncestor(); - return spec; - }; - - this.expect = function(actual) { - if (!currentRunnable()) { - throw new Error( - "'expect' was used when there was no current spec, this could be because an asynchronous test timed out" - ); - } - - return currentRunnable().expect(actual); - }; - - this.expectAsync = function(actual) { - if (!currentRunnable()) { - throw new Error( - "'expectAsync' was used when there was no current spec, this could be because an asynchronous test timed out" - ); - } - - return currentRunnable().expectAsync(actual); - }; - - this.beforeEach = function(beforeEachFunction, timeout) { - ensureIsNotNested('beforeEach'); - ensureIsFunctionOrAsync(beforeEachFunction, 'beforeEach'); - currentDeclarationSuite.beforeEach({ - fn: beforeEachFunction, - timeout: timeout || 0 - }); - }; - - this.beforeAll = function(beforeAllFunction, timeout) { - ensureIsNotNested('beforeAll'); - ensureIsFunctionOrAsync(beforeAllFunction, 'beforeAll'); - currentDeclarationSuite.beforeAll({ - fn: beforeAllFunction, - timeout: timeout || 0 - }); - }; - - this.afterEach = function(afterEachFunction, timeout) { - ensureIsNotNested('afterEach'); - ensureIsFunctionOrAsync(afterEachFunction, 'afterEach'); - afterEachFunction.isCleanup = true; - currentDeclarationSuite.afterEach({ - fn: afterEachFunction, - timeout: timeout || 0 - }); - }; - - this.afterAll = function(afterAllFunction, timeout) { - ensureIsNotNested('afterAll'); - ensureIsFunctionOrAsync(afterAllFunction, 'afterAll'); - currentDeclarationSuite.afterAll({ - fn: afterAllFunction, - timeout: timeout || 0 - }); - }; - - this.pending = function(message) { - var fullMessage = j$.Spec.pendingSpecExceptionMessage; - if (message) { - fullMessage += message; - } - throw fullMessage; - }; - - this.fail = function(error) { - if (!currentRunnable()) { - throw new Error( - "'fail' was used when there was no current spec, this could be because an asynchronous test timed out" - ); - } - - var message = 'Failed'; - if (error) { - message += ': '; - if (error.message) { - message += error.message; - } else if (j$.isString_(error)) { - message += error; - } else { - // pretty print all kind of objects. This includes arrays. - message += j$.pp(error); - } - } - - currentRunnable().addExpectationResult(false, { - matcherName: '', - passed: false, - expected: '', - actual: '', - message: message, - error: error && error.message ? error : null - }); - - if (config.oneFailurePerSpec) { - throw new Error(message); - } - }; - } - - return Env; -}; - -getJasmineRequireObj().JsApiReporter = function(j$) { - /** - * @name jsApiReporter - * @classdesc {@link Reporter} added by default in `boot.js` to record results for retrieval in javascript code. An instance is made available as `jsApiReporter` on the global object. - * @class - * @hideconstructor - */ - function JsApiReporter(options) { - var timer = options.timer || j$.noopTimer, - status = 'loaded'; - - this.started = false; - this.finished = false; - this.runDetails = {}; - - this.jasmineStarted = function() { - this.started = true; - status = 'started'; - timer.start(); - }; - - var executionTime; - - this.jasmineDone = function(runDetails) { - this.finished = true; - this.runDetails = runDetails; - executionTime = timer.elapsed(); - status = 'done'; - }; - - /** - * Get the current status for the Jasmine environment. - * @name jsApiReporter#status - * @since 2.0.0 - * @function - * @return {String} - One of `loaded`, `started`, or `done` - */ - this.status = function() { - return status; - }; - - var suites = [], - suites_hash = {}; - - this.suiteStarted = function(result) { - suites_hash[result.id] = result; - }; - - this.suiteDone = function(result) { - storeSuite(result); - }; - - /** - * Get the results for a set of suites. - * - * Retrievable in slices for easier serialization. - * @name jsApiReporter#suiteResults - * @since 2.1.0 - * @function - * @param {Number} index - The position in the suites list to start from. - * @param {Number} length - Maximum number of suite results to return. - * @return {SuiteResult[]} - */ - this.suiteResults = function(index, length) { - return suites.slice(index, index + length); - }; - - function storeSuite(result) { - suites.push(result); - suites_hash[result.id] = result; - } - - /** - * Get all of the suites in a single object, with their `id` as the key. - * @name jsApiReporter#suites - * @since 2.0.0 - * @function - * @return {Object} - Map of suite id to {@link SuiteResult} - */ - this.suites = function() { - return suites_hash; - }; - - var specs = []; - - this.specDone = function(result) { - specs.push(result); - }; - - /** - * Get the results for a set of specs. - * - * Retrievable in slices for easier serialization. - * @name jsApiReporter#specResults - * @since 2.0.0 - * @function - * @param {Number} index - The position in the specs list to start from. - * @param {Number} length - Maximum number of specs results to return. - * @return {SpecResult[]} - */ - this.specResults = function(index, length) { - return specs.slice(index, index + length); - }; - - /** - * Get all spec results. - * @name jsApiReporter#specs - * @since 2.0.0 - * @function - * @return {SpecResult[]} - */ - this.specs = function() { - return specs; - }; - - /** - * Get the number of milliseconds it took for the full Jasmine suite to run. - * @name jsApiReporter#executionTime - * @since 2.0.0 - * @function - * @return {Number} - */ - this.executionTime = function() { - return executionTime; - }; - } - - return JsApiReporter; -}; - -getJasmineRequireObj().Any = function(j$) { - - function Any(expectedObject) { - if (typeof expectedObject === 'undefined') { - throw new TypeError( - 'jasmine.any() expects to be passed a constructor function. ' + - 'Please pass one or use jasmine.anything() to match any object.' - ); - } - this.expectedObject = expectedObject; - } - - Any.prototype.asymmetricMatch = function(other) { - if (this.expectedObject == String) { - return typeof other == 'string' || other instanceof String; - } - - if (this.expectedObject == Number) { - return typeof other == 'number' || other instanceof Number; - } - - if (this.expectedObject == Function) { - return typeof other == 'function' || other instanceof Function; - } - - if (this.expectedObject == Object) { - return other !== null && typeof other == 'object'; - } - - if (this.expectedObject == Boolean) { - return typeof other == 'boolean'; - } - - /* jshint -W122 */ - /* global Symbol */ - if (typeof Symbol != 'undefined' && this.expectedObject == Symbol) { - return typeof other == 'symbol'; - } - /* jshint +W122 */ - - return other instanceof this.expectedObject; - }; - - Any.prototype.jasmineToString = function() { - return ''; - }; - - return Any; -}; - -getJasmineRequireObj().Anything = function(j$) { - - function Anything() {} - - Anything.prototype.asymmetricMatch = function(other) { - return !j$.util.isUndefined(other) && other !== null; - }; - - Anything.prototype.jasmineToString = function() { - return ''; - }; - - return Anything; -}; - -getJasmineRequireObj().ArrayContaining = function(j$) { - function ArrayContaining(sample) { - this.sample = sample; - } - - ArrayContaining.prototype.asymmetricMatch = function(other, customTesters) { - if (!j$.isArray_(this.sample)) { - throw new Error('You must provide an array to arrayContaining, not ' + j$.pp(this.sample) + '.'); - } - - // If the actual parameter is not an array, we can fail immediately, since it couldn't - // possibly be an "array containing" anything. However, we also want an empty sample - // array to match anything, so we need to double-check we aren't in that case - if (!j$.isArray_(other) && this.sample.length > 0) { - return false; - } - - for (var i = 0; i < this.sample.length; i++) { - var item = this.sample[i]; - if (!j$.matchersUtil.contains(other, item, customTesters)) { - return false; - } - } - - return true; - }; - - ArrayContaining.prototype.jasmineToString = function () { - return ''; - }; - - return ArrayContaining; -}; - -getJasmineRequireObj().ArrayWithExactContents = function(j$) { - - function ArrayWithExactContents(sample) { - this.sample = sample; - } - - ArrayWithExactContents.prototype.asymmetricMatch = function(other, customTesters) { - if (!j$.isArray_(this.sample)) { - throw new Error('You must provide an array to arrayWithExactContents, not ' + j$.pp(this.sample) + '.'); - } - - if (this.sample.length !== other.length) { - return false; - } - - for (var i = 0; i < this.sample.length; i++) { - var item = this.sample[i]; - if (!j$.matchersUtil.contains(other, item, customTesters)) { - return false; - } - } - - return true; - }; - - ArrayWithExactContents.prototype.jasmineToString = function() { - return ''; - }; - - return ArrayWithExactContents; -}; - -getJasmineRequireObj().Empty = function (j$) { - - function Empty() {} - - Empty.prototype.asymmetricMatch = function (other) { - if (j$.isString_(other) || j$.isArray_(other) || j$.isTypedArray_(other)) { - return other.length === 0; - } - - if (j$.isMap(other) || j$.isSet(other)) { - return other.size === 0; - } - - if (j$.isObject_(other)) { - return Object.keys(other).length === 0; - } - return false; - }; - - Empty.prototype.jasmineToString = function () { - return ''; - }; - - return Empty; -}; - -getJasmineRequireObj().Falsy = function(j$) { - - function Falsy() {} - - Falsy.prototype.asymmetricMatch = function(other) { - return !other; - }; - - Falsy.prototype.jasmineToString = function() { - return ''; - }; - - return Falsy; -}; - -getJasmineRequireObj().MapContaining = function(j$) { - function MapContaining(sample) { - if (!j$.isMap(sample)) { - throw new Error('You must provide a map to `mapContaining`, not ' + j$.pp(sample)); - } - - this.sample = sample; - } - - MapContaining.prototype.asymmetricMatch = function(other, customTesters) { - if (!j$.isMap(other)) return false; - - var hasAllMatches = true; - j$.util.forEachBreakable(this.sample, function(breakLoop, value, key) { - // for each key/value pair in `sample` - // there should be at least one pair in `other` whose key and value both match - var hasMatch = false; - j$.util.forEachBreakable(other, function(oBreakLoop, oValue, oKey) { - if ( - j$.matchersUtil.equals(oKey, key, customTesters) - && j$.matchersUtil.equals(oValue, value, customTesters) - ) { - hasMatch = true; - oBreakLoop(); - } - }); - if (!hasMatch) { - hasAllMatches = false; - breakLoop(); - } - }); - - return hasAllMatches; - }; - - MapContaining.prototype.jasmineToString = function() { - return ''; - }; - - return MapContaining; -}; - -getJasmineRequireObj().NotEmpty = function (j$) { - - function NotEmpty() {} - - NotEmpty.prototype.asymmetricMatch = function (other) { - if (j$.isString_(other) || j$.isArray_(other) || j$.isTypedArray_(other)) { - return other.length !== 0; - } - - if (j$.isMap(other) || j$.isSet(other)) { - return other.size !== 0; - } - - if (j$.isObject_(other)) { - return Object.keys(other).length !== 0; - } - - return false; - }; - - NotEmpty.prototype.jasmineToString = function () { - return ''; - }; - - return NotEmpty; -}; - -getJasmineRequireObj().ObjectContaining = function(j$) { - - function ObjectContaining(sample) { - this.sample = sample; - } - - function getPrototype(obj) { - if (Object.getPrototypeOf) { - return Object.getPrototypeOf(obj); - } - - if (obj.constructor.prototype == obj) { - return null; - } - - return obj.constructor.prototype; - } - - function hasProperty(obj, property) { - if (!obj) { - return false; - } - - if (Object.prototype.hasOwnProperty.call(obj, property)) { - return true; - } - - return hasProperty(getPrototype(obj), property); - } - - ObjectContaining.prototype.asymmetricMatch = function(other, customTesters) { - if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } - - for (var property in this.sample) { - if (!hasProperty(other, property) || - !j$.matchersUtil.equals(this.sample[property], other[property], customTesters)) { - return false; - } - } - - return true; - }; - - ObjectContaining.prototype.jasmineToString = function() { - return ''; - }; - - return ObjectContaining; -}; - -getJasmineRequireObj().SetContaining = function(j$) { - function SetContaining(sample) { - if (!j$.isSet(sample)) { - throw new Error('You must provide a set to `setContaining`, not ' + j$.pp(sample)); - } - - this.sample = sample; - } - - SetContaining.prototype.asymmetricMatch = function(other, customTesters) { - if (!j$.isSet(other)) return false; - - var hasAllMatches = true; - j$.util.forEachBreakable(this.sample, function(breakLoop, item) { - // for each item in `sample` there should be at least one matching item in `other` - // (not using `j$.matchersUtil.contains` because it compares set members by reference, - // not by deep value equality) - var hasMatch = false; - j$.util.forEachBreakable(other, function(oBreakLoop, oItem) { - if (j$.matchersUtil.equals(oItem, item, customTesters)) { - hasMatch = true; - oBreakLoop(); - } - }); - if (!hasMatch) { - hasAllMatches = false; - breakLoop(); - } - }); - - return hasAllMatches; - }; - - SetContaining.prototype.jasmineToString = function() { - return ''; - }; - - return SetContaining; -}; - -getJasmineRequireObj().StringMatching = function(j$) { - - function StringMatching(expected) { - if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { - throw new Error('Expected is not a String or a RegExp'); - } - - this.regexp = new RegExp(expected); - } - - StringMatching.prototype.asymmetricMatch = function(other) { - return this.regexp.test(other); - }; - - StringMatching.prototype.jasmineToString = function() { - return ''; - }; - - return StringMatching; -}; - -getJasmineRequireObj().Truthy = function(j$) { - - function Truthy() {} - - Truthy.prototype.asymmetricMatch = function(other) { - return !!other; - }; - - Truthy.prototype.jasmineToString = function() { - return ''; - }; - - return Truthy; -}; - -getJasmineRequireObj().CallTracker = function(j$) { - /** - * @namespace Spy#calls - * @since 2.0.0 - */ - function CallTracker() { - var calls = []; - var opts = {}; - - this.track = function(context) { - if (opts.cloneArgs) { - context.args = j$.util.cloneArgs(context.args); - } - calls.push(context); - }; - - /** - * Check whether this spy has been invoked. - * @name Spy#calls#any - * @since 2.0.0 - * @function - * @return {Boolean} - */ - this.any = function() { - return !!calls.length; - }; - - /** - * Get the number of invocations of this spy. - * @name Spy#calls#count - * @since 2.0.0 - * @function - * @return {Integer} - */ - this.count = function() { - return calls.length; - }; - - /** - * Get the arguments that were passed to a specific invocation of this spy. - * @name Spy#calls#argsFor - * @since 2.0.0 - * @function - * @param {Integer} index The 0-based invocation index. - * @return {Array} - */ - this.argsFor = function(index) { - var call = calls[index]; - return call ? call.args : []; - }; - - /** - * Get the raw calls array for this spy. - * @name Spy#calls#all - * @since 2.0.0 - * @function - * @return {Spy.callData[]} - */ - this.all = function() { - return calls; - }; - - /** - * Get all of the arguments for each invocation of this spy in the order they were received. - * @name Spy#calls#allArgs - * @since 2.0.0 - * @function - * @return {Array} - */ - this.allArgs = function() { - var callArgs = []; - for (var i = 0; i < calls.length; i++) { - callArgs.push(calls[i].args); - } - - return callArgs; - }; - - /** - * Get the first invocation of this spy. - * @name Spy#calls#first - * @since 2.0.0 - * @function - * @return {ObjecSpy.callData} - */ - this.first = function() { - return calls[0]; - }; - - /** - * Get the most recent invocation of this spy. - * @name Spy#calls#mostRecent - * @since 2.0.0 - * @function - * @return {ObjecSpy.callData} - */ - this.mostRecent = function() { - return calls[calls.length - 1]; - }; - - /** - * Reset this spy as if it has never been called. - * @name Spy#calls#reset - * @since 2.0.0 - * @function - */ - this.reset = function() { - calls = []; - }; - - /** - * Set this spy to do a shallow clone of arguments passed to each invocation. - * @name Spy#calls#saveArgumentsByValue - * @since 2.5.0 - * @function - */ - this.saveArgumentsByValue = function() { - opts.cloneArgs = true; - }; - } - - return CallTracker; -}; - -getJasmineRequireObj().clearStack = function(j$) { - var maxInlineCallCount = 10; - - function messageChannelImpl(global, setTimeout) { - var channel = new global.MessageChannel(), - head = {}, - tail = head; - - var taskRunning = false; - channel.port1.onmessage = function() { - head = head.next; - var task = head.task; - delete head.task; - - if (taskRunning) { - global.setTimeout(task, 0); - } else { - try { - taskRunning = true; - task(); - } finally { - taskRunning = false; - } - } - }; - - var currentCallCount = 0; - return function clearStack(fn) { - currentCallCount++; - - if (currentCallCount < maxInlineCallCount) { - tail = tail.next = { task: fn }; - channel.port2.postMessage(0); - } else { - currentCallCount = 0; - setTimeout(fn); - } - }; - } - - function getClearStack(global) { - var currentCallCount = 0; - var realSetTimeout = global.setTimeout; - var setTimeoutImpl = function clearStack(fn) { - Function.prototype.apply.apply(realSetTimeout, [global, [fn, 0]]); - }; - - if (j$.isFunction_(global.setImmediate)) { - var realSetImmediate = global.setImmediate; - return function(fn) { - currentCallCount++; - - if (currentCallCount < maxInlineCallCount) { - realSetImmediate(fn); - } else { - currentCallCount = 0; - - setTimeoutImpl(fn); - } - }; - } else if (!j$.util.isUndefined(global.MessageChannel)) { - return messageChannelImpl(global, setTimeoutImpl); - } else { - return setTimeoutImpl; - } - } - - return getClearStack; -}; - -getJasmineRequireObj().Clock = function() { - /* global process */ - var NODE_JS = - typeof process !== 'undefined' && - process.versions && - typeof process.versions.node === 'string'; - - /** - * _Note:_ Do not construct this directly, Jasmine will make one during booting. You can get the current clock with {@link jasmine.clock}. - * @class Clock - * @classdesc Jasmine's mock clock is used when testing time dependent code. - */ - function Clock(global, delayedFunctionSchedulerFactory, mockDate) { - var self = this, - realTimingFunctions = { - setTimeout: global.setTimeout, - clearTimeout: global.clearTimeout, - setInterval: global.setInterval, - clearInterval: global.clearInterval - }, - fakeTimingFunctions = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval - }, - installed = false, - delayedFunctionScheduler, - timer; - - self.FakeTimeout = FakeTimeout; - - /** - * Install the mock clock over the built-in methods. - * @name Clock#install - * @since 2.0.0 - * @function - * @return {Clock} - */ - self.install = function() { - if (!originalTimingFunctionsIntact()) { - throw new Error( - 'Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?' - ); - } - replace(global, fakeTimingFunctions); - timer = fakeTimingFunctions; - delayedFunctionScheduler = delayedFunctionSchedulerFactory(); - installed = true; - - return self; - }; - - /** - * Uninstall the mock clock, returning the built-in methods to their places. - * @name Clock#uninstall - * @since 2.0.0 - * @function - */ - self.uninstall = function() { - delayedFunctionScheduler = null; - mockDate.uninstall(); - replace(global, realTimingFunctions); - - timer = realTimingFunctions; - installed = false; - }; - - /** - * Execute a function with a mocked Clock - * - * The clock will be {@link Clock#install|install}ed before the function is called and {@link Clock#uninstall|uninstall}ed in a `finally` after the function completes. - * @name Clock#withMock - * @since 2.3.0 - * @function - * @param {Function} closure The function to be called. - */ - self.withMock = function(closure) { - this.install(); - try { - closure(); - } finally { - this.uninstall(); - } - }; - - /** - * Instruct the installed Clock to also mock the date returned by `new Date()` - * @name Clock#mockDate - * @since 2.1.0 - * @function - * @param {Date} [initialDate=now] The `Date` to provide. - */ - self.mockDate = function(initialDate) { - mockDate.install(initialDate); - }; - - self.setTimeout = function(fn, delay, params) { - return Function.prototype.apply.apply(timer.setTimeout, [ - global, - arguments - ]); - }; - - self.setInterval = function(fn, delay, params) { - return Function.prototype.apply.apply(timer.setInterval, [ - global, - arguments - ]); - }; - - self.clearTimeout = function(id) { - return Function.prototype.call.apply(timer.clearTimeout, [global, id]); - }; - - self.clearInterval = function(id) { - return Function.prototype.call.apply(timer.clearInterval, [global, id]); - }; - - /** - * Tick the Clock forward, running any enqueued timeouts along the way - * @name Clock#tick - * @since 1.3.0 - * @function - * @param {int} millis The number of milliseconds to tick. - */ - self.tick = function(millis) { - if (installed) { - delayedFunctionScheduler.tick(millis, function(millis) { - mockDate.tick(millis); - }); - } else { - throw new Error( - 'Mock clock is not installed, use jasmine.clock().install()' - ); - } - }; - - return self; - - function originalTimingFunctionsIntact() { - return ( - global.setTimeout === realTimingFunctions.setTimeout && - global.clearTimeout === realTimingFunctions.clearTimeout && - global.setInterval === realTimingFunctions.setInterval && - global.clearInterval === realTimingFunctions.clearInterval - ); - } - - function replace(dest, source) { - for (var prop in source) { - dest[prop] = source[prop]; - } - } - - function setTimeout(fn, delay) { - if (!NODE_JS) { - return delayedFunctionScheduler.scheduleFunction( - fn, - delay, - argSlice(arguments, 2) - ); - } - - var timeout = new FakeTimeout(); - - delayedFunctionScheduler.scheduleFunction( - fn, - delay, - argSlice(arguments, 2), - false, - timeout - ); - - return timeout; - } - - function clearTimeout(id) { - return delayedFunctionScheduler.removeFunctionWithId(id); - } - - function setInterval(fn, interval) { - if (!NODE_JS) { - return delayedFunctionScheduler.scheduleFunction( - fn, - interval, - argSlice(arguments, 2), - true - ); - } - - var timeout = new FakeTimeout(); - - delayedFunctionScheduler.scheduleFunction( - fn, - interval, - argSlice(arguments, 2), - true, - timeout - ); - - return timeout; - } - - function clearInterval(id) { - return delayedFunctionScheduler.removeFunctionWithId(id); - } - - function argSlice(argsObj, n) { - return Array.prototype.slice.call(argsObj, n); - } - } - - /** - * Mocks Node.js Timeout class - */ - function FakeTimeout() {} - - FakeTimeout.prototype.ref = function() { - return this; - }; - - FakeTimeout.prototype.unref = function() { - return this; - }; - - return Clock; -}; - -getJasmineRequireObj().DelayedFunctionScheduler = function(j$) { - function DelayedFunctionScheduler() { - var self = this; - var scheduledLookup = []; - var scheduledFunctions = {}; - var currentTime = 0; - var delayedFnCount = 0; - var deletedKeys = []; - - self.tick = function(millis, tickDate) { - millis = millis || 0; - var endTime = currentTime + millis; - - runScheduledFunctions(endTime, tickDate); - currentTime = endTime; - }; - - self.scheduleFunction = function( - funcToCall, - millis, - params, - recurring, - timeoutKey, - runAtMillis - ) { - var f; - if (typeof funcToCall === 'string') { - /* jshint evil: true */ - f = function() { - return eval(funcToCall); - }; - /* jshint evil: false */ - } else { - f = funcToCall; - } - - millis = millis || 0; - timeoutKey = timeoutKey || ++delayedFnCount; - runAtMillis = runAtMillis || currentTime + millis; - - var funcToSchedule = { - runAtMillis: runAtMillis, - funcToCall: f, - recurring: recurring, - params: params, - timeoutKey: timeoutKey, - millis: millis - }; - - if (runAtMillis in scheduledFunctions) { - scheduledFunctions[runAtMillis].push(funcToSchedule); - } else { - scheduledFunctions[runAtMillis] = [funcToSchedule]; - scheduledLookup.push(runAtMillis); - scheduledLookup.sort(function(a, b) { - return a - b; - }); - } - - return timeoutKey; - }; - - self.removeFunctionWithId = function(timeoutKey) { - deletedKeys.push(timeoutKey); - - for (var runAtMillis in scheduledFunctions) { - var funcs = scheduledFunctions[runAtMillis]; - var i = indexOfFirstToPass(funcs, function(func) { - return func.timeoutKey === timeoutKey; - }); - - if (i > -1) { - if (funcs.length === 1) { - delete scheduledFunctions[runAtMillis]; - deleteFromLookup(runAtMillis); - } else { - funcs.splice(i, 1); - } - - // intervals get rescheduled when executed, so there's never more - // than a single scheduled function with a given timeoutKey - break; - } - } - }; - - return self; - - function indexOfFirstToPass(array, testFn) { - var index = -1; - - for (var i = 0; i < array.length; ++i) { - if (testFn(array[i])) { - index = i; - break; - } - } - - return index; - } - - function deleteFromLookup(key) { - var value = Number(key); - var i = indexOfFirstToPass(scheduledLookup, function(millis) { - return millis === value; - }); - - if (i > -1) { - scheduledLookup.splice(i, 1); - } - } - - function reschedule(scheduledFn) { - self.scheduleFunction( - scheduledFn.funcToCall, - scheduledFn.millis, - scheduledFn.params, - true, - scheduledFn.timeoutKey, - scheduledFn.runAtMillis + scheduledFn.millis - ); - } - - function forEachFunction(funcsToRun, callback) { - for (var i = 0; i < funcsToRun.length; ++i) { - callback(funcsToRun[i]); - } - } - - function runScheduledFunctions(endTime, tickDate) { - tickDate = tickDate || function() {}; - if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { - tickDate(endTime - currentTime); - return; - } - - do { - deletedKeys = []; - var newCurrentTime = scheduledLookup.shift(); - tickDate(newCurrentTime - currentTime); - - currentTime = newCurrentTime; - - var funcsToRun = scheduledFunctions[currentTime]; - - delete scheduledFunctions[currentTime]; - - forEachFunction(funcsToRun, function(funcToRun) { - if (funcToRun.recurring) { - reschedule(funcToRun); - } - }); - - forEachFunction(funcsToRun, function(funcToRun) { - if (j$.util.arrayContains(deletedKeys, funcToRun.timeoutKey)) { - // skip a timeoutKey deleted whilst we were running - return; - } - funcToRun.funcToCall.apply(null, funcToRun.params || []); - }); - deletedKeys = []; - } while ( - scheduledLookup.length > 0 && - // checking first if we're out of time prevents setTimeout(0) - // scheduled in a funcToRun from forcing an extra iteration - currentTime !== endTime && - scheduledLookup[0] <= endTime - ); - - // ran out of functions to call, but still time left on the clock - if (currentTime !== endTime) { - tickDate(endTime - currentTime); - } - } - } - - return DelayedFunctionScheduler; -}; - -getJasmineRequireObj().errors = function() { - function ExpectationFailed() {} - - ExpectationFailed.prototype = new Error(); - ExpectationFailed.prototype.constructor = ExpectationFailed; - - return { - ExpectationFailed: ExpectationFailed - }; -}; - -getJasmineRequireObj().ExceptionFormatter = function(j$) { - var ignoredProperties = [ - 'name', - 'message', - 'stack', - 'fileName', - 'sourceURL', - 'line', - 'lineNumber', - 'column', - 'description', - 'jasmineMessage' - ]; - - function ExceptionFormatter(options) { - var jasmineFile = (options && options.jasmineFile) || j$.util.jasmineFile(); - this.message = function(error) { - var message = ''; - - if (error.jasmineMessage) { - message += error.jasmineMessage; - } else if (error.name && error.message) { - message += error.name + ': ' + error.message; - } else if (error.message) { - message += error.message; - } else { - message += error.toString() + ' thrown'; - } - - if (error.fileName || error.sourceURL) { - message += ' in ' + (error.fileName || error.sourceURL); - } - - if (error.line || error.lineNumber) { - message += ' (line ' + (error.line || error.lineNumber) + ')'; - } - - return message; - }; - - this.stack = function(error) { - if (!error || !error.stack) { - return null; - } - - var stackTrace = new j$.StackTrace(error); - var lines = filterJasmine(stackTrace); - var result = ''; - - if (stackTrace.message) { - lines.unshift(stackTrace.message); - } - - result += formatProperties(error); - result += lines.join('\n'); - - return result; - }; - - function filterJasmine(stackTrace) { - var result = [], - jasmineMarker = - stackTrace.style === 'webkit' ? '' : ' at '; - - stackTrace.frames.forEach(function(frame) { - if (frame.file && frame.file !== jasmineFile) { - result.push(frame.raw); - } else if (result[result.length - 1] !== jasmineMarker) { - result.push(jasmineMarker); - } - }); - - return result; - } - - function formatProperties(error) { - if (!(error instanceof Object)) { - return; - } - - var result = {}; - var empty = true; - - for (var prop in error) { - if (j$.util.arrayContains(ignoredProperties, prop)) { - continue; - } - result[prop] = error[prop]; - empty = false; - } - - if (!empty) { - return 'error properties: ' + j$.pp(result) + '\n'; - } - - return ''; - } - } - - return ExceptionFormatter; -}; - -getJasmineRequireObj().Expectation = function(j$) { - /** - * Matchers that come with Jasmine out of the box. - * @namespace matchers - */ - function Expectation(options) { - this.expector = new j$.Expector(options); - - var customMatchers = options.customMatchers || {}; - for (var matcherName in customMatchers) { - this[matcherName] = wrapSyncCompare( - matcherName, - customMatchers[matcherName] - ); - } - } - - /** - * Add some context for an {@link expect} - * @function - * @name matchers#withContext - * @since 3.3.0 - * @param {String} message - Additional context to show when the matcher fails - * @return {matchers} - */ - Expectation.prototype.withContext = function withContext(message) { - return addFilter(this, new ContextAddingFilter(message)); - }; - - /** - * Invert the matcher following this {@link expect} - * @member - * @name matchers#not - * @since 1.3.0 - * @type {matchers} - * @example - * expect(something).not.toBe(true); - */ - Object.defineProperty(Expectation.prototype, 'not', { - get: function() { - return addFilter(this, syncNegatingFilter); - } - }); - - /** - * Asynchronous matchers. - * @namespace async-matchers - */ - function AsyncExpectation(options) { - var global = options.global || j$.getGlobal(); - this.expector = new j$.Expector(options); - - if (!global.Promise) { - throw new Error( - 'expectAsync is unavailable because the environment does not support promises.' - ); - } - - var customAsyncMatchers = options.customAsyncMatchers || {}; - for (var matcherName in customAsyncMatchers) { - this[matcherName] = wrapAsyncCompare( - matcherName, - customAsyncMatchers[matcherName] - ); - } - } - - /** - * Add some context for an {@link expectAsync} - * @function - * @name async-matchers#withContext - * @since 3.3.0 - * @param {String} message - Additional context to show when the async matcher fails - * @return {async-matchers} - */ - AsyncExpectation.prototype.withContext = function withContext(message) { - return addFilter(this, new ContextAddingFilter(message)); - }; - - /** - * Invert the matcher following this {@link expectAsync} - * @member - * @name async-matchers#not - * @type {async-matchers} - * @example - * await expectAsync(myPromise).not.toBeResolved(); - * @example - * return expectAsync(myPromise).not.toBeResolved(); - */ - Object.defineProperty(AsyncExpectation.prototype, 'not', { - get: function() { - return addFilter(this, asyncNegatingFilter); - } - }); - - function wrapSyncCompare(name, matcherFactory) { - return function() { - var result = this.expector.compare(name, matcherFactory, arguments); - this.expector.processResult(result); - }; - } - - function wrapAsyncCompare(name, matcherFactory) { - return function() { - var self = this; - - // Capture the call stack here, before we go async, so that it will contain - // frames that are relevant to the user instead of just parts of Jasmine. - var errorForStack = j$.util.errorWithStack(); - - return this.expector - .compare(name, matcherFactory, arguments) - .then(function(result) { - self.expector.processResult(result, errorForStack); - }); - }; - } - - function addCoreMatchers(prototype, matchers, wrapper) { - for (var matcherName in matchers) { - var matcher = matchers[matcherName]; - prototype[matcherName] = wrapper(matcherName, matcher); - } - } - - function addFilter(source, filter) { - var result = Object.create(source); - result.expector = source.expector.addFilter(filter); - return result; - } - - function negatedFailureMessage(result, matcherName, args, util) { - if (result.message) { - if (j$.isFunction_(result.message)) { - return result.message(); - } else { - return result.message; - } - } - - args = args.slice(); - args.unshift(true); - args.unshift(matcherName); - return util.buildFailureMessage.apply(null, args); - } - - function negate(result) { - result.pass = !result.pass; - return result; - } - - var syncNegatingFilter = { - selectComparisonFunc: function(matcher) { - function defaultNegativeCompare() { - return negate(matcher.compare.apply(null, arguments)); - } - - return matcher.negativeCompare || defaultNegativeCompare; - }, - buildFailureMessage: negatedFailureMessage - }; - - var asyncNegatingFilter = { - selectComparisonFunc: function(matcher) { - function defaultNegativeCompare() { - return matcher.compare.apply(this, arguments).then(negate); - } - - return matcher.negativeCompare || defaultNegativeCompare; - }, - buildFailureMessage: negatedFailureMessage - }; - - function ContextAddingFilter(message) { - this.message = message; - } - - ContextAddingFilter.prototype.modifyFailureMessage = function(msg) { - return this.message + ': ' + msg; - }; - - return { - factory: function(options) { - return new Expectation(options || {}); - }, - addCoreMatchers: function(matchers) { - addCoreMatchers(Expectation.prototype, matchers, wrapSyncCompare); - }, - asyncFactory: function(options) { - return new AsyncExpectation(options || {}); - }, - addAsyncCoreMatchers: function(matchers) { - addCoreMatchers(AsyncExpectation.prototype, matchers, wrapAsyncCompare); - } - }; -}; - -getJasmineRequireObj().ExpectationFilterChain = function() { - function ExpectationFilterChain(maybeFilter, prev) { - this.filter_ = maybeFilter; - this.prev_ = prev; - } - - ExpectationFilterChain.prototype.addFilter = function(filter) { - return new ExpectationFilterChain(filter, this); - }; - - ExpectationFilterChain.prototype.selectComparisonFunc = function(matcher) { - return this.callFirst_('selectComparisonFunc', arguments).result; - }; - - ExpectationFilterChain.prototype.buildFailureMessage = function( - result, - matcherName, - args, - util - ) { - return this.callFirst_('buildFailureMessage', arguments).result; - }; - - ExpectationFilterChain.prototype.modifyFailureMessage = function(msg) { - var result = this.callFirst_('modifyFailureMessage', arguments).result; - return result || msg; - }; - - ExpectationFilterChain.prototype.callFirst_ = function(fname, args) { - var prevResult; - - if (this.prev_) { - prevResult = this.prev_.callFirst_(fname, args); - - if (prevResult.found) { - return prevResult; - } - } - - if (this.filter_ && this.filter_[fname]) { - return { - found: true, - result: this.filter_[fname].apply(this.filter_, args) - }; - } - - return { found: false }; - }; - - return ExpectationFilterChain; -}; - -//TODO: expectation result may make more sense as a presentation of an expectation. -getJasmineRequireObj().buildExpectationResult = function() { - function buildExpectationResult(options) { - var messageFormatter = options.messageFormatter || function() {}, - stackFormatter = options.stackFormatter || function() {}; - - /** - * @typedef Expectation - * @property {String} matcherName - The name of the matcher that was executed for this expectation. - * @property {String} message - The failure message for the expectation. - * @property {String} stack - The stack trace for the failure if available. - * @property {Boolean} passed - Whether the expectation passed or failed. - * @property {Object} expected - If the expectation failed, what was the expected value. - * @property {Object} actual - If the expectation failed, what actual value was produced. - */ - var result = { - matcherName: options.matcherName, - message: message(), - stack: stack(), - passed: options.passed - }; - - if (!result.passed) { - result.expected = options.expected; - result.actual = options.actual; - } - - return result; - - function message() { - if (options.passed) { - return 'Passed.'; - } else if (options.message) { - return options.message; - } else if (options.error) { - return messageFormatter(options.error); - } - return ''; - } - - function stack() { - if (options.passed) { - return ''; - } - - var error = options.error; - if (!error) { - if (options.errorForStack) { - error = options.errorForStack; - } else if (options.stack) { - error = options; - } else { - try { - throw new Error(message()); - } catch (e) { - error = e; - } - } - } - return stackFormatter(error); - } - } - - return buildExpectationResult; -}; - -getJasmineRequireObj().Expector = function(j$) { - function Expector(options) { - this.util = options.util || { buildFailureMessage: function() {} }; - this.customEqualityTesters = options.customEqualityTesters || []; - this.actual = options.actual; - this.addExpectationResult = options.addExpectationResult || function() {}; - this.filters = new j$.ExpectationFilterChain(); - } - - Expector.prototype.instantiateMatcher = function( - matcherName, - matcherFactory, - args - ) { - this.matcherName = matcherName; - this.args = Array.prototype.slice.call(args, 0); - this.expected = this.args.slice(0); - - this.args.unshift(this.actual); - - var matcher = matcherFactory(this.util, this.customEqualityTesters); - var comparisonFunc = this.filters.selectComparisonFunc(matcher); - return comparisonFunc || matcher.compare; - }; - - Expector.prototype.buildMessage = function(result) { - var self = this; - - if (result.pass) { - return ''; - } - - var msg = this.filters.buildFailureMessage( - result, - this.matcherName, - this.args, - this.util, - defaultMessage - ); - return this.filters.modifyFailureMessage(msg || defaultMessage()); - - function defaultMessage() { - if (!result.message) { - var args = self.args.slice(); - args.unshift(false); - args.unshift(self.matcherName); - return self.util.buildFailureMessage.apply(null, args); - } else if (j$.isFunction_(result.message)) { - return result.message(); - } else { - return result.message; - } - } - }; - - Expector.prototype.compare = function(matcherName, matcherFactory, args) { - var matcherCompare = this.instantiateMatcher( - matcherName, - matcherFactory, - args - ); - return matcherCompare.apply(null, this.args); - }; - - Expector.prototype.addFilter = function(filter) { - var result = Object.create(this); - result.filters = this.filters.addFilter(filter); - return result; - }; - - Expector.prototype.processResult = function(result, errorForStack) { - var message = this.buildMessage(result); - - if (this.expected.length === 1) { - this.expected = this.expected[0]; - } - - this.addExpectationResult(result.pass, { - matcherName: this.matcherName, - passed: result.pass, - message: message, - error: errorForStack ? undefined : result.error, - errorForStack: errorForStack || undefined, - actual: this.actual, - expected: this.expected // TODO: this may need to be arrayified/sliced - }); - }; - - return Expector; -}; - -getJasmineRequireObj().formatErrorMsg = function() { - function generateErrorMsg(domain, usage) { - var usageDefinition = usage ? '\nUsage: ' + usage : ''; - - return function errorMsg(msg) { - return domain + ' : ' + msg + usageDefinition; - }; - } - - return generateErrorMsg; -}; - -getJasmineRequireObj().GlobalErrors = function(j$) { - function GlobalErrors(global) { - var handlers = []; - global = global || j$.getGlobal(); - - var onerror = function onerror() { - var handler = handlers[handlers.length - 1]; - - if (handler) { - handler.apply(null, Array.prototype.slice.call(arguments, 0)); - } else { - throw arguments[0]; - } - }; - - this.originalHandlers = {}; - this.jasmineHandlers = {}; - this.installOne_ = function installOne_(errorType, jasmineMessage) { - function taggedOnError(error) { - error.jasmineMessage = jasmineMessage + ': ' + error; - - var handler = handlers[handlers.length - 1]; - - if (handler) { - handler(error); - } else { - throw error; - } - } - - this.originalHandlers[errorType] = global.process.listeners(errorType); - this.jasmineHandlers[errorType] = taggedOnError; - - global.process.removeAllListeners(errorType); - global.process.on(errorType, taggedOnError); - - this.uninstall = function uninstall() { - var errorTypes = Object.keys(this.originalHandlers); - for (var iType = 0; iType < errorTypes.length; iType++) { - var errorType = errorTypes[iType]; - global.process.removeListener( - errorType, - this.jasmineHandlers[errorType] - ); - for (var i = 0; i < this.originalHandlers[errorType].length; i++) { - global.process.on(errorType, this.originalHandlers[errorType][i]); - } - delete this.originalHandlers[errorType]; - delete this.jasmineHandlers[errorType]; - } - }; - }; - - this.install = function install() { - if ( - global.process && - global.process.listeners && - j$.isFunction_(global.process.on) - ) { - this.installOne_('uncaughtException', 'Uncaught exception'); - this.installOne_('unhandledRejection', 'Unhandled promise rejection'); - } else { - var originalHandler = global.onerror; - global.onerror = onerror; - - this.uninstall = function uninstall() { - global.onerror = originalHandler; - }; - } - }; - - this.pushListener = function pushListener(listener) { - handlers.push(listener); - }; - - this.popListener = function popListener() { - handlers.pop(); - }; - } - - return GlobalErrors; -}; - -getJasmineRequireObj().toBeRejected = function(j$) { - /** - * Expect a promise to be rejected. - * @function - * @async - * @name async-matchers#toBeRejected - * @since 3.1.0 - * @example - * await expectAsync(aPromise).toBeRejected(); - * @example - * return expectAsync(aPromise).toBeRejected(); - */ - return function toBeRejected(util) { - return { - compare: function(actual) { - if (!j$.isPromiseLike(actual)) { - throw new Error('Expected toBeRejected to be called on a promise.'); - } - return actual.then( - function() { return {pass: false}; }, - function() { return {pass: true}; } - ); - } - }; - }; -}; - -getJasmineRequireObj().toBeRejectedWith = function(j$) { - /** - * Expect a promise to be rejected with a value equal to the expected, using deep equality comparison. - * @function - * @async - * @name async-matchers#toBeRejectedWith - * @since 3.3.0 - * @param {Object} expected - Value that the promise is expected to be rejected with - * @example - * await expectAsync(aPromise).toBeRejectedWith({prop: 'value'}); - * @example - * return expectAsync(aPromise).toBeRejectedWith({prop: 'value'}); - */ - return function toBeRejectedWith(util, customEqualityTesters) { - return { - compare: function(actualPromise, expectedValue) { - if (!j$.isPromiseLike(actualPromise)) { - throw new Error('Expected toBeRejectedWith to be called on a promise.'); - } - - function prefix(passed) { - return 'Expected a promise ' + - (passed ? 'not ' : '') + - 'to be rejected with ' + j$.pp(expectedValue); - } - - return actualPromise.then( - function() { - return { - pass: false, - message: prefix(false) + ' but it was resolved.' - }; - }, - function(actualValue) { - if (util.equals(actualValue, expectedValue, customEqualityTesters)) { - return { - pass: true, - message: prefix(true) + '.' - }; - } else { - return { - pass: false, - message: prefix(false) + ' but it was rejected with ' + j$.pp(actualValue) + '.' - }; - } - } - ); - } - }; - }; -}; - -getJasmineRequireObj().toBeRejectedWithError = function(j$) { - /** - * Expect a promise to be rejected with a value matched to the expected - * @function - * @async - * @name async-matchers#toBeRejectedWithError - * @since 3.5.0 - * @param {Error} [expected] - `Error` constructor the object that was thrown needs to be an instance of. If not provided, `Error` will be used. - * @param {RegExp|String} [message] - The message that should be set on the thrown `Error` - * @example - * await expectAsync(aPromise).toBeRejectedWithError(MyCustomError, 'Error message'); - * await expectAsync(aPromise).toBeRejectedWithError(MyCustomError, /Error message/); - * await expectAsync(aPromise).toBeRejectedWithError(MyCustomError); - * await expectAsync(aPromise).toBeRejectedWithError('Error message'); - * return expectAsync(aPromise).toBeRejectedWithError(/Error message/); - */ - return function toBeRejectedWithError() { - return { - compare: function(actualPromise, arg1, arg2) { - if (!j$.isPromiseLike(actualPromise)) { - throw new Error('Expected toBeRejectedWithError to be called on a promise.'); - } - - var expected = getExpectedFromArgs(arg1, arg2); - - return actualPromise.then( - function() { - return { - pass: false, - message: 'Expected a promise to be rejected but it was resolved.' - }; - }, - function(actualValue) { return matchError(actualValue, expected); } - ); - } - }; - }; - - function matchError(actual, expected) { - if (!j$.isError_(actual)) { - return fail(expected, 'rejected with ' + j$.pp(actual)); - } - - if (!(actual instanceof expected.error)) { - return fail(expected, 'rejected with type ' + j$.fnNameFor(actual.constructor)); - } - - var actualMessage = actual.message; - - if (actualMessage === expected.message || typeof expected.message === 'undefined') { - return pass(expected); - } - - if (expected.message instanceof RegExp && expected.message.test(actualMessage)) { - return pass(expected); - } - - return fail(expected, 'rejected with ' + j$.pp(actual)); - } - - function pass(expected) { - return { - pass: true, - message: 'Expected a promise not to be rejected with ' + expected.printValue + ', but it was.' - }; - } - - function fail(expected, message) { - return { - pass: false, - message: 'Expected a promise to be rejected with ' + expected.printValue + ' but it was ' + message + '.' - }; - } - - - function getExpectedFromArgs(arg1, arg2) { - var error, message; - - if (isErrorConstructor(arg1)) { - error = arg1; - message = arg2; - } else { - error = Error; - message = arg1; - } - - return { - error: error, - message: message, - printValue: j$.fnNameFor(error) + (typeof message === 'undefined' ? '' : ': ' + j$.pp(message)) - }; - } - - function isErrorConstructor(value) { - return typeof value === 'function' && (value === Error || j$.isError_(value.prototype)); - } -}; - -getJasmineRequireObj().toBeResolved = function(j$) { - /** - * Expect a promise to be resolved. - * @function - * @async - * @name async-matchers#toBeResolved - * @since 3.1.0 - * @example - * await expectAsync(aPromise).toBeResolved(); - * @example - * return expectAsync(aPromise).toBeResolved(); - */ - return function toBeResolved(util) { - return { - compare: function(actual) { - if (!j$.isPromiseLike(actual)) { - throw new Error('Expected toBeResolved to be called on a promise.'); - } - - return actual.then( - function() { return {pass: true}; }, - function() { return {pass: false}; } - ); - } - }; - }; -}; - -getJasmineRequireObj().toBeResolvedTo = function(j$) { - /** - * Expect a promise to be resolved to a value equal to the expected, using deep equality comparison. - * @function - * @async - * @name async-matchers#toBeResolvedTo - * @since 3.1.0 - * @param {Object} expected - Value that the promise is expected to resolve to - * @example - * await expectAsync(aPromise).toBeResolvedTo({prop: 'value'}); - * @example - * return expectAsync(aPromise).toBeResolvedTo({prop: 'value'}); - */ - return function toBeResolvedTo(util, customEqualityTesters) { - return { - compare: function(actualPromise, expectedValue) { - if (!j$.isPromiseLike(actualPromise)) { - throw new Error('Expected toBeResolvedTo to be called on a promise.'); - } - - function prefix(passed) { - return 'Expected a promise ' + - (passed ? 'not ' : '') + - 'to be resolved to ' + j$.pp(expectedValue); - } - - return actualPromise.then( - function(actualValue) { - if (util.equals(actualValue, expectedValue, customEqualityTesters)) { - return { - pass: true, - message: prefix(true) + '.' - }; - } else { - return { - pass: false, - message: prefix(false) + ' but it was resolved to ' + j$.pp(actualValue) + '.' - }; - } - }, - function() { - return { - pass: false, - message: prefix(false) + ' but it was rejected.' - }; - } - ); - } - }; - }; -}; - -getJasmineRequireObj().DiffBuilder = function(j$) { - return function DiffBuilder() { - var path = new j$.ObjectPath(), - mismatches = []; - - return { - record: function (actual, expected, formatter) { - formatter = formatter || defaultFormatter; - mismatches.push(formatter(actual, expected, path)); - }, - - getMessage: function () { - return mismatches.join('\n'); - }, - - withPath: function (pathComponent, block) { - var oldPath = path; - path = path.add(pathComponent); - block(); - path = oldPath; - } - }; - - function defaultFormatter (actual, expected, path) { - return 'Expected ' + - path + (path.depth() ? ' = ' : '') + - j$.pp(actual) + - ' to equal ' + - j$.pp(expected) + - '.'; - } - }; -}; - -getJasmineRequireObj().matchersUtil = function(j$) { - // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? - - return { - equals: equals, - - contains: function(haystack, needle, customTesters) { - customTesters = customTesters || []; - - if (j$.isSet(haystack)) { - return haystack.has(needle); - } - - if ((Object.prototype.toString.apply(haystack) === '[object Array]') || - (!!haystack && !haystack.indexOf)) - { - for (var i = 0; i < haystack.length; i++) { - if (equals(haystack[i], needle, customTesters)) { - return true; - } - } - return false; - } - - return !!haystack && haystack.indexOf(needle) >= 0; - }, - - buildFailureMessage: function() { - var args = Array.prototype.slice.call(arguments, 0), - matcherName = args[0], - isNot = args[1], - actual = args[2], - expected = args.slice(3), - englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); - - var message = 'Expected ' + - j$.pp(actual) + - (isNot ? ' not ' : ' ') + - englishyPredicate; - - if (expected.length > 0) { - for (var i = 0; i < expected.length; i++) { - if (i > 0) { - message += ','; - } - message += ' ' + j$.pp(expected[i]); - } - } - - return message + '.'; - } - }; - - function isAsymmetric(obj) { - return obj && j$.isA_('Function', obj.asymmetricMatch); - } - - function asymmetricMatch(a, b, customTesters, diffBuilder) { - var asymmetricA = isAsymmetric(a), - asymmetricB = isAsymmetric(b), - result; - - if (asymmetricA && asymmetricB) { - return undefined; - } - - if (asymmetricA) { - result = a.asymmetricMatch(b, customTesters); - if (!result) { - diffBuilder.record(a, b); - } - return result; - } - - if (asymmetricB) { - result = b.asymmetricMatch(a, customTesters); - if (!result) { - diffBuilder.record(a, b); - } - return result; - } - } - - function equals(a, b, customTesters, diffBuilder) { - customTesters = customTesters || []; - diffBuilder = diffBuilder || j$.NullDiffBuilder(); - - return eq(a, b, [], [], customTesters, diffBuilder); - } - - // Equality function lovingly adapted from isEqual in - // [Underscore](http://underscorejs.org) - function eq(a, b, aStack, bStack, customTesters, diffBuilder) { - var result = true, i; - - var asymmetricResult = asymmetricMatch(a, b, customTesters, diffBuilder); - if (!j$.util.isUndefined(asymmetricResult)) { - return asymmetricResult; - } - - for (i = 0; i < customTesters.length; i++) { - var customTesterResult = customTesters[i](a, b); - if (!j$.util.isUndefined(customTesterResult)) { - if (!customTesterResult) { - diffBuilder.record(a, b); - } - return customTesterResult; - } - } - - if (a instanceof Error && b instanceof Error) { - result = a.message == b.message; - if (!result) { - diffBuilder.record(a, b); - } - return result; - } - - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) { - result = a !== 0 || 1 / a == 1 / b; - if (!result) { - diffBuilder.record(a, b); - } - return result; - } - // A strict comparison is necessary because `null == undefined`. - if (a === null || b === null) { - result = a === b; - if (!result) { - diffBuilder.record(a, b); - } - return result; - } - var className = Object.prototype.toString.call(a); - if (className != Object.prototype.toString.call(b)) { - diffBuilder.record(a, b); - return false; - } - switch (className) { - // Strings, numbers, dates, and booleans are compared by value. - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - result = a == String(b); - if (!result) { - diffBuilder.record(a, b); - } - return result; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for - // other numeric values. - result = a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); - if (!result) { - diffBuilder.record(a, b); - } - return result; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - result = +a == +b; - if (!result) { - diffBuilder.record(a, b); - } - return result; - // RegExps are compared by their source patterns and flags. - case '[object RegExp]': - return a.source == b.source && - a.global == b.global && - a.multiline == b.multiline && - a.ignoreCase == b.ignoreCase; - } - if (typeof a != 'object' || typeof b != 'object') { - diffBuilder.record(a, b); - return false; - } - - var aIsDomNode = j$.isDomNode(a); - var bIsDomNode = j$.isDomNode(b); - if (aIsDomNode && bIsDomNode) { - // At first try to use DOM3 method isEqualNode - result = a.isEqualNode(b); - if (!result) { - diffBuilder.record(a, b); - } - return result; - } - if (aIsDomNode || bIsDomNode) { - diffBuilder.record(a, b); - return false; - } - - var aIsPromise = j$.isPromise(a); - var bIsPromise = j$.isPromise(b); - if (aIsPromise && bIsPromise) { - return a === b; - } - - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] == a) { return bStack[length] == b; } - } - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - var size = 0; - // Recursively compare objects and arrays. - // Compare array lengths to determine if a deep comparison is necessary. - if (className == '[object Array]') { - var aLength = a.length; - var bLength = b.length; - - diffBuilder.withPath('length', function() { - if (aLength !== bLength) { - diffBuilder.record(aLength, bLength); - result = false; - } - }); - - for (i = 0; i < aLength || i < bLength; i++) { - diffBuilder.withPath(i, function() { - if (i >= bLength) { - diffBuilder.record(a[i], void 0, actualArrayIsLongerFormatter); - result = false; - } else { - result = eq(i < aLength ? a[i] : void 0, i < bLength ? b[i] : void 0, aStack, bStack, customTesters, diffBuilder) && result; - } - }); - } - if (!result) { - return false; - } - } else if (j$.isMap(a) && j$.isMap(b)) { - if (a.size != b.size) { - diffBuilder.record(a, b); - return false; - } - - var keysA = []; - var keysB = []; - a.forEach( function( valueA, keyA ) { - keysA.push( keyA ); - }); - b.forEach( function( valueB, keyB ) { - keysB.push( keyB ); - }); - - // For both sets of keys, check they map to equal values in both maps. - // Keep track of corresponding keys (in insertion order) in order to handle asymmetric obj keys. - var mapKeys = [keysA, keysB]; - var cmpKeys = [keysB, keysA]; - var mapIter, mapKey, mapValueA, mapValueB; - var cmpIter, cmpKey; - for (i = 0; result && i < mapKeys.length; i++) { - mapIter = mapKeys[i]; - cmpIter = cmpKeys[i]; - - for (var j = 0; result && j < mapIter.length; j++) { - mapKey = mapIter[j]; - cmpKey = cmpIter[j]; - mapValueA = a.get(mapKey); - - // Only use the cmpKey when one of the keys is asymmetric and the corresponding key matches, - // otherwise explicitly look up the mapKey in the other Map since we want keys with unique - // obj identity (that are otherwise equal) to not match. - if (isAsymmetric(mapKey) || isAsymmetric(cmpKey) && - eq(mapKey, cmpKey, aStack, bStack, customTesters, j$.NullDiffBuilder())) { - mapValueB = b.get(cmpKey); - } else { - mapValueB = b.get(mapKey); - } - result = eq(mapValueA, mapValueB, aStack, bStack, customTesters, j$.NullDiffBuilder()); - } - } - - if (!result) { - diffBuilder.record(a, b); - return false; - } - } else if (j$.isSet(a) && j$.isSet(b)) { - if (a.size != b.size) { - diffBuilder.record(a, b); - return false; - } - - var valuesA = []; - a.forEach( function( valueA ) { - valuesA.push( valueA ); - }); - var valuesB = []; - b.forEach( function( valueB ) { - valuesB.push( valueB ); - }); - - // For both sets, check they are all contained in the other set - var setPairs = [[valuesA, valuesB], [valuesB, valuesA]]; - var stackPairs = [[aStack, bStack], [bStack, aStack]]; - var baseValues, baseValue, baseStack; - var otherValues, otherValue, otherStack; - var found; - var prevStackSize; - for (i = 0; result && i < setPairs.length; i++) { - baseValues = setPairs[i][0]; - otherValues = setPairs[i][1]; - baseStack = stackPairs[i][0]; - otherStack = stackPairs[i][1]; - // For each value in the base set... - for (var k = 0; result && k < baseValues.length; k++) { - baseValue = baseValues[k]; - found = false; - // ... test that it is present in the other set - for (var l = 0; !found && l < otherValues.length; l++) { - otherValue = otherValues[l]; - prevStackSize = baseStack.length; - // compare by value equality - found = eq(baseValue, otherValue, baseStack, otherStack, customTesters, j$.NullDiffBuilder()); - if (!found && prevStackSize !== baseStack.length) { - baseStack.splice(prevStackSize); - otherStack.splice(prevStackSize); - } - } - result = result && found; - } - } - - if (!result) { - diffBuilder.record(a, b); - return false; - } - } else { - - // Objects with different constructors are not equivalent, but `Object`s - // or `Array`s from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && - isFunction(aCtor) && isFunction(bCtor) && - a instanceof aCtor && b instanceof bCtor && - !(aCtor instanceof aCtor && bCtor instanceof bCtor)) { - - diffBuilder.record(a, b, constructorsAreDifferentFormatter); - return false; - } - } - - // Deep compare objects. - var aKeys = keys(a, className == '[object Array]'), key; - size = aKeys.length; - - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b, className == '[object Array]').length !== size) { - diffBuilder.record(a, b, objectKeysAreDifferentFormatter); - return false; - } - - for (i = 0; i < size; i++) { - key = aKeys[i]; - // Deep compare each member - if (!j$.util.has(b, key)) { - diffBuilder.record(a, b, objectKeysAreDifferentFormatter); - result = false; - continue; - } - - diffBuilder.withPath(key, function() { - if(!eq(a[key], b[key], aStack, bStack, customTesters, diffBuilder)) { - result = false; - } - }); - } - - if (!result) { - return false; - } - - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - - return result; - } - - function keys(obj, isArray) { - var allKeys = Object.keys ? Object.keys(obj) : - (function(o) { - var keys = []; - for (var key in o) { - if (j$.util.has(o, key)) { - keys.push(key); - } - } - return keys; - })(obj); - - if (!isArray) { - return allKeys; - } - - if (allKeys.length === 0) { - return allKeys; - } - - var extraKeys = []; - for (var i = 0; i < allKeys.length; i++) { - if (!/^[0-9]+$/.test(allKeys[i])) { - extraKeys.push(allKeys[i]); - } - } - - return extraKeys; - } - - function isFunction(obj) { - return typeof obj === 'function'; - } - - function objectKeysAreDifferentFormatter(actual, expected, path) { - var missingProperties = j$.util.objectDifference(expected, actual), - extraProperties = j$.util.objectDifference(actual, expected), - missingPropertiesMessage = formatKeyValuePairs(missingProperties), - extraPropertiesMessage = formatKeyValuePairs(extraProperties), - messages = []; - - if (!path.depth()) { - path = 'object'; - } - - if (missingPropertiesMessage.length) { - messages.push('Expected ' + path + ' to have properties' + missingPropertiesMessage); - } - - if (extraPropertiesMessage.length) { - messages.push('Expected ' + path + ' not to have properties' + extraPropertiesMessage); - } - - return messages.join('\n'); - } - - function constructorsAreDifferentFormatter(actual, expected, path) { - if (!path.depth()) { - path = 'object'; - } - - return 'Expected ' + - path + ' to be a kind of ' + - j$.fnNameFor(expected.constructor) + - ', but was ' + j$.pp(actual) + '.'; - } - - function actualArrayIsLongerFormatter(actual, expected, path) { - return 'Unexpected ' + - path + (path.depth() ? ' = ' : '') + - j$.pp(actual) + - ' in array.'; - } - - function formatKeyValuePairs(obj) { - var formatted = ''; - for (var key in obj) { - formatted += '\n ' + key + ': ' + j$.pp(obj[key]); - } - return formatted; - } -}; - -getJasmineRequireObj().nothing = function() { - /** - * {@link expect} nothing explicitly. - * @function - * @name matchers#nothing - * @since 2.8.0 - * @example - * expect().nothing(); - */ - function nothing() { - return { - compare: function() { - return { - pass: true - }; - } - }; - } - - return nothing; -}; - -getJasmineRequireObj().NullDiffBuilder = function(j$) { - return function() { - return { - withPath: function(_, block) { - block(); - }, - record: function() {} - }; - }; -}; - -getJasmineRequireObj().ObjectPath = function(j$) { - function ObjectPath(components) { - this.components = components || []; - } - - ObjectPath.prototype.toString = function() { - if (this.components.length) { - return '$' + map(this.components, formatPropertyAccess).join(''); - } else { - return ''; - } - }; - - ObjectPath.prototype.add = function(component) { - return new ObjectPath(this.components.concat([component])); - }; - - ObjectPath.prototype.depth = function() { - return this.components.length; - }; - - function formatPropertyAccess(prop) { - if (typeof prop === 'number') { - return '[' + prop + ']'; - } - - if (isValidIdentifier(prop)) { - return '.' + prop; - } - - return '[\'' + prop + '\']'; - } - - function map(array, fn) { - var results = []; - for (var i = 0; i < array.length; i++) { - results.push(fn(array[i])); - } - return results; - } - - function isValidIdentifier(string) { - return /^[A-Za-z\$_][A-Za-z0-9\$_]*$/.test(string); - } - - return ObjectPath; -}; - -getJasmineRequireObj().requireAsyncMatchers = function(jRequire, j$) { - var availableMatchers = [ - 'toBeResolved', - 'toBeRejected', - 'toBeResolvedTo', - 'toBeRejectedWith', - 'toBeRejectedWithError' - ], - matchers = {}; - - for (var i = 0; i < availableMatchers.length; i++) { - var name = availableMatchers[i]; - matchers[name] = jRequire[name](j$); - } - - return matchers; -}; - -getJasmineRequireObj().toBe = function(j$) { - /** - * {@link expect} the actual value to be `===` to the expected value. - * @function - * @name matchers#toBe - * @since 1.3.0 - * @param {Object} expected - The expected value to compare against. - * @example - * expect(thing).toBe(realThing); - */ - function toBe(util) { - var tip = ' Tip: To check for deep equality, use .toEqual() instead of .toBe().'; - - return { - compare: function(actual, expected) { - var result = { - pass: actual === expected - }; - - if (typeof expected === 'object') { - result.message = util.buildFailureMessage('toBe', result.pass, actual, expected) + tip; - } - - return result; - } - }; - } - - return toBe; -}; - -getJasmineRequireObj().toBeCloseTo = function() { - /** - * {@link expect} the actual value to be within a specified precision of the expected value. - * @function - * @name matchers#toBeCloseTo - * @since 1.3.0 - * @param {Object} expected - The expected value to compare against. - * @param {Number} [precision=2] - The number of decimal points to check. - * @example - * expect(number).toBeCloseTo(42.2, 3); - */ - function toBeCloseTo() { - return { - compare: function(actual, expected, precision) { - if (precision !== 0) { - precision = precision || 2; - } - - if (expected === null || actual === null) { - throw new Error('Cannot use toBeCloseTo with null. Arguments evaluated to: ' + - 'expect(' + actual + ').toBeCloseTo(' + expected + ').' - ); - } - - var pow = Math.pow(10, precision + 1); - var delta = Math.abs(expected - actual); - var maxDelta = Math.pow(10, -precision) / 2; - - return { - pass: Math.round(delta * pow) <= maxDelta * pow - }; - } - }; - } - - return toBeCloseTo; -}; - -getJasmineRequireObj().toBeDefined = function() { - /** - * {@link expect} the actual value to be defined. (Not `undefined`) - * @function - * @name matchers#toBeDefined - * @since 1.3.0 - * @example - * expect(result).toBeDefined(); - */ - function toBeDefined() { - return { - compare: function(actual) { - return { - pass: (void 0 !== actual) - }; - } - }; - } - - return toBeDefined; -}; - -getJasmineRequireObj().toBeFalse = function() { - /** - * {@link expect} the actual value to be `false`. - * @function - * @name matchers#toBeFalse - * @since 3.5.0 - * @example - * expect(result).toBeFalse(); - */ - function toBeFalse() { - return { - compare: function(actual) { - return { - pass: actual === false - }; - } - }; - } - - return toBeFalse; -}; - -getJasmineRequireObj().toBeFalsy = function() { - /** - * {@link expect} the actual value to be falsy - * @function - * @name matchers#toBeFalsy - * @since 2.0.0 - * @example - * expect(result).toBeFalsy(); - */ - function toBeFalsy() { - return { - compare: function(actual) { - return { - pass: !actual - }; - } - }; - } - - return toBeFalsy; -}; - -getJasmineRequireObj().toBeGreaterThan = function() { - /** - * {@link expect} the actual value to be greater than the expected value. - * @function - * @name matchers#toBeGreaterThan - * @since 2.0.0 - * @param {Number} expected - The value to compare against. - * @example - * expect(result).toBeGreaterThan(3); - */ - function toBeGreaterThan() { - return { - compare: function(actual, expected) { - return { - pass: actual > expected - }; - } - }; - } - - return toBeGreaterThan; -}; - - -getJasmineRequireObj().toBeGreaterThanOrEqual = function() { - /** - * {@link expect} the actual value to be greater than or equal to the expected value. - * @function - * @name matchers#toBeGreaterThanOrEqual - * @since 2.0.0 - * @param {Number} expected - The expected value to compare against. - * @example - * expect(result).toBeGreaterThanOrEqual(25); - */ - function toBeGreaterThanOrEqual() { - return { - compare: function(actual, expected) { - return { - pass: actual >= expected - }; - } - }; - } - - return toBeGreaterThanOrEqual; -}; - -getJasmineRequireObj().toBeInstanceOf = function(j$) { - var usageError = j$.formatErrorMsg('', 'expect(value).toBeInstanceOf()'); - - /** - * {@link expect} the actual to be an instance of the expected class - * @function - * @name matchers#toBeInstanceOf - * @since 3.5.0 - * @param {Object} expected - The class or constructor function to check for - * @example - * expect('foo').toBeInstanceOf(String); - * expect(3).toBeInstanceOf(Number); - * expect(new Error()).toBeInstanceOf(Error); - */ - function toBeInstanceOf(util, customEqualityTesters) { - return { - compare: function(actual, expected) { - var actualType = actual && actual.constructor ? j$.fnNameFor(actual.constructor) : j$.pp(actual), - expectedType = expected ? j$.fnNameFor(expected) : j$.pp(expected), - expectedMatcher, - pass; - - try { - expectedMatcher = new j$.Any(expected); - pass = expectedMatcher.asymmetricMatch(actual); - } catch (error) { - throw new Error(usageError('Expected value is not a constructor function')); - } - - if (pass) { - return { - pass: true, - message: 'Expected instance of ' + actualType + ' not to be an instance of ' + expectedType - }; - } else { - return { - pass: false, - message: 'Expected instance of ' + actualType + ' to be an instance of ' + expectedType - }; - } - } - }; - } - - return toBeInstanceOf; -}; - -getJasmineRequireObj().toBeLessThan = function() { - /** - * {@link expect} the actual value to be less than the expected value. - * @function - * @name matchers#toBeLessThan - * @since 2.0.0 - * @param {Number} expected - The expected value to compare against. - * @example - * expect(result).toBeLessThan(0); - */ - function toBeLessThan() { - return { - - compare: function(actual, expected) { - return { - pass: actual < expected - }; - } - }; - } - - return toBeLessThan; -}; - -getJasmineRequireObj().toBeLessThanOrEqual = function() { - /** - * {@link expect} the actual value to be less than or equal to the expected value. - * @function - * @name matchers#toBeLessThanOrEqual - * @since 2.0.0 - * @param {Number} expected - The expected value to compare against. - * @example - * expect(result).toBeLessThanOrEqual(123); - */ - function toBeLessThanOrEqual() { - return { - - compare: function(actual, expected) { - return { - pass: actual <= expected - }; - } - }; - } - - return toBeLessThanOrEqual; -}; - -getJasmineRequireObj().toBeNaN = function(j$) { - /** - * {@link expect} the actual value to be `NaN` (Not a Number). - * @function - * @name matchers#toBeNaN - * @since 1.3.0 - * @example - * expect(thing).toBeNaN(); - */ - function toBeNaN() { - return { - compare: function(actual) { - var result = { - pass: (actual !== actual) - }; - - if (result.pass) { - result.message = 'Expected actual not to be NaN.'; - } else { - result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; - } - - return result; - } - }; - } - - return toBeNaN; -}; - -getJasmineRequireObj().toBeNegativeInfinity = function(j$) { - /** - * {@link expect} the actual value to be `-Infinity` (-infinity). - * @function - * @name matchers#toBeNegativeInfinity - * @since 2.6.0 - * @example - * expect(thing).toBeNegativeInfinity(); - */ - function toBeNegativeInfinity() { - return { - compare: function(actual) { - var result = { - pass: (actual === Number.NEGATIVE_INFINITY) - }; - - if (result.pass) { - result.message = 'Expected actual not to be -Infinity.'; - } else { - result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be -Infinity.'; }; - } - - return result; - } - }; - } - - return toBeNegativeInfinity; -}; - -getJasmineRequireObj().toBeNull = function() { - /** - * {@link expect} the actual value to be `null`. - * @function - * @name matchers#toBeNull - * @since 1.3.0 - * @example - * expect(result).toBeNull(); - */ - function toBeNull() { - return { - compare: function(actual) { - return { - pass: actual === null - }; - } - }; - } - - return toBeNull; -}; - -getJasmineRequireObj().toBePositiveInfinity = function(j$) { - /** - * {@link expect} the actual value to be `Infinity` (infinity). - * @function - * @name matchers#toBePositiveInfinity - * @since 2.6.0 - * @example - * expect(thing).toBePositiveInfinity(); - */ - function toBePositiveInfinity() { - return { - compare: function(actual) { - var result = { - pass: (actual === Number.POSITIVE_INFINITY) - }; - - if (result.pass) { - result.message = 'Expected actual not to be Infinity.'; - } else { - result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be Infinity.'; }; - } - - return result; - } - }; - } - - return toBePositiveInfinity; -}; - -getJasmineRequireObj().toBeTrue = function() { - /** - * {@link expect} the actual value to be `true`. - * @function - * @name matchers#toBeTrue - * @since 3.5.0 - * @example - * expect(result).toBeTrue(); - */ - function toBeTrue() { - return { - compare: function(actual) { - return { - pass: actual === true - }; - } - }; - } - - return toBeTrue; -}; - -getJasmineRequireObj().toBeTruthy = function() { - /** - * {@link expect} the actual value to be truthy. - * @function - * @name matchers#toBeTruthy - * @since 2.0.0 - * @example - * expect(thing).toBeTruthy(); - */ - function toBeTruthy() { - return { - compare: function(actual) { - return { - pass: !!actual - }; - } - }; - } - - return toBeTruthy; -}; - -getJasmineRequireObj().toBeUndefined = function() { - /** - * {@link expect} the actual value to be `undefined`. - * @function - * @name matchers#toBeUndefined - * @since 1.3.0 - * @example - * expect(result).toBeUndefined(): - */ - function toBeUndefined() { - return { - compare: function(actual) { - return { - pass: void 0 === actual - }; - } - }; - } - - return toBeUndefined; -}; - -getJasmineRequireObj().toContain = function() { - /** - * {@link expect} the actual value to contain a specific value. - * @function - * @name matchers#toContain - * @since 2.0.0 - * @param {Object} expected - The value to look for. - * @example - * expect(array).toContain(anElement); - * expect(string).toContain(substring); - */ - function toContain(util, customEqualityTesters) { - customEqualityTesters = customEqualityTesters || []; - - return { - compare: function(actual, expected) { - - return { - pass: util.contains(actual, expected, customEqualityTesters) - }; - } - }; - } - - return toContain; -}; - -getJasmineRequireObj().toEqual = function(j$) { - /** - * {@link expect} the actual value to be equal to the expected, using deep equality comparison. - * @function - * @name matchers#toEqual - * @since 1.3.0 - * @param {Object} expected - Expected value - * @example - * expect(bigObject).toEqual({"foo": ['bar', 'baz']}); - */ - function toEqual(util, customEqualityTesters) { - customEqualityTesters = customEqualityTesters || []; - - return { - compare: function(actual, expected) { - var result = { - pass: false - }, - diffBuilder = j$.DiffBuilder(); - - result.pass = util.equals(actual, expected, customEqualityTesters, diffBuilder); - - // TODO: only set error message if test fails - result.message = diffBuilder.getMessage(); - - return result; - } - }; - } - - return toEqual; -}; - -getJasmineRequireObj().toHaveBeenCalled = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toHaveBeenCalled()'); - - /** - * {@link expect} the actual (a {@link Spy}) to have been called. - * @function - * @name matchers#toHaveBeenCalled - * @since 1.3.0 - * @example - * expect(mySpy).toHaveBeenCalled(); - * expect(mySpy).not.toHaveBeenCalled(); - */ - function toHaveBeenCalled() { - return { - compare: function(actual) { - var result = {}; - - if (!j$.isSpy(actual)) { - throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.')); - } - - if (arguments.length > 1) { - throw new Error(getErrorMsg('Does not take arguments, use toHaveBeenCalledWith')); - } - - result.pass = actual.calls.any(); - - result.message = result.pass ? - 'Expected spy ' + actual.and.identity + ' not to have been called.' : - 'Expected spy ' + actual.and.identity + ' to have been called.'; - - return result; - } - }; - } - - return toHaveBeenCalled; -}; - -getJasmineRequireObj().toHaveBeenCalledBefore = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toHaveBeenCalledBefore()'); - - /** - * {@link expect} the actual value (a {@link Spy}) to have been called before another {@link Spy}. - * @function - * @name matchers#toHaveBeenCalledBefore - * @since 2.6.0 - * @param {Spy} expected - {@link Spy} that should have been called after the `actual` {@link Spy}. - * @example - * expect(mySpy).toHaveBeenCalledBefore(otherSpy); - */ - function toHaveBeenCalledBefore() { - return { - compare: function(firstSpy, latterSpy) { - if (!j$.isSpy(firstSpy)) { - throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(firstSpy) + '.')); - } - if (!j$.isSpy(latterSpy)) { - throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(latterSpy) + '.')); - } - - var result = { pass: false }; - - if (!firstSpy.calls.count()) { - result.message = 'Expected spy ' + firstSpy.and.identity + ' to have been called.'; - return result; - } - if (!latterSpy.calls.count()) { - result.message = 'Expected spy ' + latterSpy.and.identity + ' to have been called.'; - return result; - } - - var latest1stSpyCall = firstSpy.calls.mostRecent().invocationOrder; - var first2ndSpyCall = latterSpy.calls.first().invocationOrder; - - result.pass = latest1stSpyCall < first2ndSpyCall; - - if (result.pass) { - result.message = 'Expected spy ' + firstSpy.and.identity + ' to not have been called before spy ' + latterSpy.and.identity + ', but it was'; - } else { - var first1stSpyCall = firstSpy.calls.first().invocationOrder; - var latest2ndSpyCall = latterSpy.calls.mostRecent().invocationOrder; - - if(first1stSpyCall < first2ndSpyCall) { - result.message = 'Expected latest call to spy ' + firstSpy.and.identity + ' to have been called before first call to spy ' + latterSpy.and.identity + ' (no interleaved calls)'; - } else if (latest2ndSpyCall > latest1stSpyCall) { - result.message = 'Expected first call to spy ' + latterSpy.and.identity + ' to have been called after latest call to spy ' + firstSpy.and.identity + ' (no interleaved calls)'; - } else { - result.message = 'Expected spy ' + firstSpy.and.identity + ' to have been called before spy ' + latterSpy.and.identity; - } - } - - return result; - } - }; - } - - return toHaveBeenCalledBefore; -}; - -getJasmineRequireObj().toHaveBeenCalledTimes = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toHaveBeenCalledTimes()'); - - /** - * {@link expect} the actual (a {@link Spy}) to have been called the specified number of times. - * @function - * @name matchers#toHaveBeenCalledTimes - * @since 2.4.0 - * @param {Number} expected - The number of invocations to look for. - * @example - * expect(mySpy).toHaveBeenCalledTimes(3); - */ - function toHaveBeenCalledTimes() { - return { - compare: function(actual, expected) { - if (!j$.isSpy(actual)) { - throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.')); - } - - var args = Array.prototype.slice.call(arguments, 0), - result = { pass: false }; - - if (!j$.isNumber_(expected)) { - throw new Error(getErrorMsg('The expected times failed is a required argument and must be a number.')); - } - - actual = args[0]; - var calls = actual.calls.count(); - var timesMessage = expected === 1 ? 'once' : expected + ' times'; - result.pass = calls === expected; - result.message = result.pass ? - 'Expected spy ' + actual.and.identity + ' not to have been called ' + timesMessage + '. It was called ' + calls + ' times.' : - 'Expected spy ' + actual.and.identity + ' to have been called ' + timesMessage + '. It was called ' + calls + ' times.'; - return result; - } - }; - } - - return toHaveBeenCalledTimes; -}; - -getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toHaveBeenCalledWith(...arguments)'); - - /** - * {@link expect} the actual (a {@link Spy}) to have been called with particular arguments at least once. - * @function - * @name matchers#toHaveBeenCalledWith - * @since 1.3.0 - * @param {...Object} - The arguments to look for - * @example - * expect(mySpy).toHaveBeenCalledWith('foo', 'bar', 2); - */ - function toHaveBeenCalledWith(util, customEqualityTesters) { - return { - compare: function() { - var args = Array.prototype.slice.call(arguments, 0), - actual = args[0], - expectedArgs = args.slice(1), - result = { pass: false }; - - if (!j$.isSpy(actual)) { - throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.')); - } - - if (!actual.calls.any()) { - result.message = function() { - return 'Expected spy ' + actual.and.identity + ' to have been called with:\n' + - ' ' + j$.pp(expectedArgs) + - '\nbut it was never called.'; - }; - return result; - } - - if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { - result.pass = true; - result.message = function() { - return 'Expected spy ' + actual.and.identity + ' not to have been called with:\n' + - ' ' + j$.pp(expectedArgs) + - '\nbut it was.'; - }; - } else { - result.message = function() { - var prettyPrintedCalls = actual.calls.allArgs().map(function(argsForCall) { - return ' ' + j$.pp(argsForCall); - }); - - var diffs = actual.calls.allArgs().map(function(argsForCall, callIx) { - var diffBuilder = new j$.DiffBuilder(); - util.equals(argsForCall, expectedArgs, customEqualityTesters, diffBuilder); - return 'Call ' + callIx + ':\n' + - diffBuilder.getMessage().replace(/^/mg, ' '); - }); - - return 'Expected spy ' + actual.and.identity + ' to have been called with:\n' + - ' ' + j$.pp(expectedArgs) + '\n' + '' + - 'but actual calls were:\n' + - prettyPrintedCalls.join(',\n') + '.\n\n' + - diffs.join('\n'); - }; - } - - return result; - } - }; - } - - return toHaveBeenCalledWith; -}; - -getJasmineRequireObj().toHaveClass = function(j$) { - /** - * {@link expect} the actual value to be a DOM element that has the expected class - * @function - * @name matchers#toHaveClass - * @since 3.0.0 - * @param {Object} expected - The class name to test for - * @example - * var el = document.createElement('div'); - * el.className = 'foo bar baz'; - * expect(el).toHaveClass('bar'); - */ - function toHaveClass(util, customEqualityTesters) { - return { - compare: function(actual, expected) { - if (!isElement(actual)) { - throw new Error(j$.pp(actual) + ' is not a DOM element'); - } - - return { - pass: actual.classList.contains(expected) - }; - } - }; - } - - function isElement(maybeEl) { - return maybeEl && - maybeEl.classList && - j$.isFunction_(maybeEl.classList.contains); - } - - return toHaveClass; -}; - -getJasmineRequireObj().toMatch = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toMatch( || )'); - - /** - * {@link expect} the actual value to match a regular expression - * @function - * @name matchers#toMatch - * @since 1.3.0 - * @param {RegExp|String} expected - Value to look for in the string. - * @example - * expect("my string").toMatch(/string$/); - * expect("other string").toMatch("her"); - */ - function toMatch() { - return { - compare: function(actual, expected) { - if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { - throw new Error(getErrorMsg('Expected is not a String or a RegExp')); - } - - var regexp = new RegExp(expected); - - return { - pass: regexp.test(actual) - }; - } - }; - } - - return toMatch; -}; - -getJasmineRequireObj().toThrow = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect(function() {}).toThrow()'); - - /** - * {@link expect} a function to `throw` something. - * @function - * @name matchers#toThrow - * @since 2.0.0 - * @param {Object} [expected] - Value that should be thrown. If not provided, simply the fact that something was thrown will be checked. - * @example - * expect(function() { return 'things'; }).toThrow('foo'); - * expect(function() { return 'stuff'; }).toThrow(); - */ - function toThrow(util) { - return { - compare: function(actual, expected) { - var result = { pass: false }, - threw = false, - thrown; - - if (typeof actual != 'function') { - throw new Error(getErrorMsg('Actual is not a Function')); - } - - try { - actual(); - } catch (e) { - threw = true; - thrown = e; - } - - if (!threw) { - result.message = 'Expected function to throw an exception.'; - return result; - } - - if (arguments.length == 1) { - result.pass = true; - result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; - - return result; - } - - if (util.equals(thrown, expected)) { - result.pass = true; - result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; - } else { - result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; - } - - return result; - } - }; - } - - return toThrow; -}; - -getJasmineRequireObj().toThrowError = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect(function() {}).toThrowError(, )'); - - /** - * {@link expect} a function to `throw` an `Error`. - * @function - * @name matchers#toThrowError - * @since 2.0.0 - * @param {Error} [expected] - `Error` constructor the object that was thrown needs to be an instance of. If not provided, `Error` will be used. - * @param {RegExp|String} [message] - The message that should be set on the thrown `Error` - * @example - * expect(function() { return 'things'; }).toThrowError(MyCustomError, 'message'); - * expect(function() { return 'things'; }).toThrowError(MyCustomError, /bar/); - * expect(function() { return 'stuff'; }).toThrowError(MyCustomError); - * expect(function() { return 'other'; }).toThrowError(/foo/); - * expect(function() { return 'other'; }).toThrowError(); - */ - function toThrowError () { - return { - compare: function(actual) { - var errorMatcher = getMatcher.apply(null, arguments), - thrown; - - if (typeof actual != 'function') { - throw new Error(getErrorMsg('Actual is not a Function')); - } - - try { - actual(); - return fail('Expected function to throw an Error.'); - } catch (e) { - thrown = e; - } - - if (!j$.isError_(thrown)) { - return fail(function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }); - } - - return errorMatcher.match(thrown); - } - }; - - function getMatcher() { - var expected, errorType; - - if (arguments[2]) { - errorType = arguments[1]; - expected = arguments[2]; - if (!isAnErrorType(errorType)) { - throw new Error(getErrorMsg('Expected error type is not an Error.')); - } - - return exactMatcher(expected, errorType); - } else if (arguments[1]) { - expected = arguments[1]; - - if (isAnErrorType(arguments[1])) { - return exactMatcher(null, arguments[1]); - } else { - return exactMatcher(arguments[1], null); - } - } else { - return anyMatcher(); - } - } - - function anyMatcher() { - return { - match: function(error) { - return pass('Expected function not to throw an Error, but it threw ' + j$.fnNameFor(error) + '.'); - } - }; - } - - function exactMatcher(expected, errorType) { - if (expected && !isStringOrRegExp(expected)) { - if (errorType) { - throw new Error(getErrorMsg('Expected error message is not a string or RegExp.')); - } else { - throw new Error(getErrorMsg('Expected is not an Error, string, or RegExp.')); - } - } - - function messageMatch(message) { - if (typeof expected == 'string') { - return expected == message; - } else { - return expected.test(message); - } - } - - var errorTypeDescription = errorType ? j$.fnNameFor(errorType) : 'an exception'; - - function thrownDescription(thrown) { - var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception', - thrownMessage = ''; - - if (expected) { - thrownMessage = ' with message ' + j$.pp(thrown.message); - } - - return thrownName + thrownMessage; - } - - function messageDescription() { - if (expected === null) { - return ''; - } else if (expected instanceof RegExp) { - return ' with a message matching ' + j$.pp(expected); - } else { - return ' with message ' + j$.pp(expected); - } - } - - function matches(error) { - return (errorType === null || error instanceof errorType) && - (expected === null || messageMatch(error.message)); - } - - return { - match: function(thrown) { - if (matches(thrown)) { - return pass(function() { - return 'Expected function not to throw ' + errorTypeDescription + messageDescription() + '.'; - }); - } else { - return fail(function() { - return 'Expected function to throw ' + errorTypeDescription + messageDescription() + - ', but it threw ' + thrownDescription(thrown) + '.'; - }); - } - } - }; - } - - function isStringOrRegExp(potential) { - return potential instanceof RegExp || (typeof potential == 'string'); - } - - function isAnErrorType(type) { - if (typeof type !== 'function') { - return false; - } - - var Surrogate = function() {}; - Surrogate.prototype = type.prototype; - return j$.isError_(new Surrogate()); - } - } - - function pass(message) { - return { - pass: true, - message: message - }; - } - - function fail(message) { - return { - pass: false, - message: message - }; - } - - return toThrowError; -}; - -getJasmineRequireObj().toThrowMatching = function(j$) { - var usageError = j$.formatErrorMsg('', 'expect(function() {}).toThrowMatching()'); - - /** - * {@link expect} a function to `throw` something matching a predicate. - * @function - * @name matchers#toThrowMatching - * @since 3.0.0 - * @param {Function} predicate - A function that takes the thrown exception as its parameter and returns true if it matches. - * @example - * expect(function() { throw new Error('nope'); }).toThrowMatching(function(thrown) { return thrown.message === 'nope'; }); - */ - function toThrowMatching() { - return { - compare: function(actual, predicate) { - var thrown; - - if (typeof actual !== 'function') { - throw new Error(usageError('Actual is not a Function')); - } - - if (typeof predicate !== 'function') { - throw new Error(usageError('Predicate is not a Function')); - } - - try { - actual(); - return fail('Expected function to throw an exception.'); - } catch (e) { - thrown = e; - } - - if (predicate(thrown)) { - return pass('Expected function not to throw an exception matching a predicate.'); - } else { - return fail(function() { - return 'Expected function to throw an exception matching a predicate, ' + - 'but it threw ' + thrownDescription(thrown) + '.'; - }); - } - } - }; - } - - function thrownDescription(thrown) { - if (thrown && thrown.constructor) { - return j$.fnNameFor(thrown.constructor) + ' with message ' + - j$.pp(thrown.message); - } else { - return j$.pp(thrown); - } - } - - function pass(message) { - return { - pass: true, - message: message - }; - } - - function fail(message) { - return { - pass: false, - message: message - }; - } - - return toThrowMatching; -}; - -getJasmineRequireObj().MockDate = function() { - function MockDate(global) { - var self = this; - var currentTime = 0; - - if (!global || !global.Date) { - self.install = function() {}; - self.tick = function() {}; - self.uninstall = function() {}; - return self; - } - - var GlobalDate = global.Date; - - self.install = function(mockDate) { - if (mockDate instanceof GlobalDate) { - currentTime = mockDate.getTime(); - } else { - currentTime = new GlobalDate().getTime(); - } - - global.Date = FakeDate; - }; - - self.tick = function(millis) { - millis = millis || 0; - currentTime = currentTime + millis; - }; - - self.uninstall = function() { - currentTime = 0; - global.Date = GlobalDate; - }; - - createDateProperties(); - - return self; - - function FakeDate() { - switch (arguments.length) { - case 0: - return new GlobalDate(currentTime); - case 1: - return new GlobalDate(arguments[0]); - case 2: - return new GlobalDate(arguments[0], arguments[1]); - case 3: - return new GlobalDate(arguments[0], arguments[1], arguments[2]); - case 4: - return new GlobalDate( - arguments[0], - arguments[1], - arguments[2], - arguments[3] - ); - case 5: - return new GlobalDate( - arguments[0], - arguments[1], - arguments[2], - arguments[3], - arguments[4] - ); - case 6: - return new GlobalDate( - arguments[0], - arguments[1], - arguments[2], - arguments[3], - arguments[4], - arguments[5] - ); - default: - return new GlobalDate( - arguments[0], - arguments[1], - arguments[2], - arguments[3], - arguments[4], - arguments[5], - arguments[6] - ); - } - } - - function createDateProperties() { - FakeDate.prototype = GlobalDate.prototype; - - FakeDate.now = function() { - if (GlobalDate.now) { - return currentTime; - } else { - throw new Error('Browser does not support Date.now()'); - } - }; - - FakeDate.toSource = GlobalDate.toSource; - FakeDate.toString = GlobalDate.toString; - FakeDate.parse = GlobalDate.parse; - FakeDate.UTC = GlobalDate.UTC; - } - } - - return MockDate; -}; - -getJasmineRequireObj().pp = function(j$) { - function PrettyPrinter() { - this.ppNestLevel_ = 0; - this.seen = []; - this.length = 0; - this.stringParts = []; - } - - function hasCustomToString(value) { - // value.toString !== Object.prototype.toString if value has no custom toString but is from another context (e.g. - // iframe, web worker) - try { - return ( - j$.isFunction_(value.toString) && - value.toString !== Object.prototype.toString && - value.toString() !== Object.prototype.toString.call(value) - ); - } catch (e) { - // The custom toString() threw. - return true; - } - } - - PrettyPrinter.prototype.format = function(value) { - this.ppNestLevel_++; - try { - if (j$.util.isUndefined(value)) { - this.emitScalar('undefined'); - } else if (value === null) { - this.emitScalar('null'); - } else if (value === 0 && 1 / value === -Infinity) { - this.emitScalar('-0'); - } else if (value === j$.getGlobal()) { - this.emitScalar(''); - } else if (value.jasmineToString) { - this.emitScalar(value.jasmineToString()); - } else if (typeof value === 'string') { - this.emitString(value); - } else if (j$.isSpy(value)) { - this.emitScalar('spy on ' + value.and.identity); - } else if (j$.isSpy(value.toString)) { - this.emitScalar('spy on ' + value.toString.and.identity); - } else if (value instanceof RegExp) { - this.emitScalar(value.toString()); - } else if (typeof value === 'function') { - this.emitScalar('Function'); - } else if (j$.isDomNode(value)) { - if (value.tagName) { - this.emitDomElement(value); - } else { - this.emitScalar('HTMLNode'); - } - } else if (value instanceof Date) { - this.emitScalar('Date(' + value + ')'); - } else if (j$.isSet(value)) { - this.emitSet(value); - } else if (j$.isMap(value)) { - this.emitMap(value); - } else if (j$.isTypedArray_(value)) { - this.emitTypedArray(value); - } else if ( - value.toString && - typeof value === 'object' && - !j$.isArray_(value) && - hasCustomToString(value) - ) { - try { - this.emitScalar(value.toString()); - } catch (e) { - this.emitScalar('has-invalid-toString-method'); - } - } else if (j$.util.arrayContains(this.seen, value)) { - this.emitScalar( - '' - ); - } else if (j$.isArray_(value) || j$.isA_('Object', value)) { - this.seen.push(value); - if (j$.isArray_(value)) { - this.emitArray(value); - } else { - this.emitObject(value); - } - this.seen.pop(); - } else { - this.emitScalar(value.toString()); - } - } catch (e) { - if (this.ppNestLevel_ > 1 || !(e instanceof MaxCharsReachedError)) { - throw e; - } - } finally { - this.ppNestLevel_--; - } - }; - - PrettyPrinter.prototype.iterateObject = function(obj, fn) { - var objKeys = keys(obj, j$.isArray_(obj)); - var isGetter = function isGetter(prop) {}; - - if (obj.__lookupGetter__) { - isGetter = function isGetter(prop) { - var getter = obj.__lookupGetter__(prop); - return !j$.util.isUndefined(getter) && getter !== null; - }; - } - var length = Math.min(objKeys.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); - for (var i = 0; i < length; i++) { - var property = objKeys[i]; - fn(property, isGetter(property)); - } - - return objKeys.length > length; - }; - - PrettyPrinter.prototype.emitScalar = function(value) { - this.append(value); - }; - - PrettyPrinter.prototype.emitString = function(value) { - this.append("'" + value + "'"); - }; - - PrettyPrinter.prototype.emitArray = function(array) { - if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { - this.append('Array'); - return; - } - var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); - this.append('[ '); - for (var i = 0; i < length; i++) { - if (i > 0) { - this.append(', '); - } - this.format(array[i]); - } - if (array.length > length) { - this.append(', ...'); - } - - var self = this; - var first = array.length === 0; - var truncated = this.iterateObject(array, function(property, isGetter) { - if (first) { - first = false; - } else { - self.append(', '); - } - - self.formatProperty(array, property, isGetter); - }); - - if (truncated) { - this.append(', ...'); - } - - this.append(' ]'); - }; - - PrettyPrinter.prototype.emitSet = function(set) { - if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { - this.append('Set'); - return; - } - this.append('Set( '); - var size = Math.min(set.size, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); - var i = 0; - set.forEach(function(value, key) { - if (i >= size) { - return; - } - if (i > 0) { - this.append(', '); - } - this.format(value); - - i++; - }, this); - if (set.size > size) { - this.append(', ...'); - } - this.append(' )'); - }; - - PrettyPrinter.prototype.emitMap = function(map) { - if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { - this.append('Map'); - return; - } - this.append('Map( '); - var size = Math.min(map.size, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); - var i = 0; - map.forEach(function(value, key) { - if (i >= size) { - return; - } - if (i > 0) { - this.append(', '); - } - this.format([key, value]); - - i++; - }, this); - if (map.size > size) { - this.append(', ...'); - } - this.append(' )'); - }; - - PrettyPrinter.prototype.emitObject = function(obj) { - var ctor = obj.constructor, - constructorName; - - constructorName = - typeof ctor === 'function' && obj instanceof ctor - ? j$.fnNameFor(obj.constructor) - : 'null'; - - this.append(constructorName); - - if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { - return; - } - - var self = this; - this.append('({ '); - var first = true; - - var truncated = this.iterateObject(obj, function(property, isGetter) { - if (first) { - first = false; - } else { - self.append(', '); - } - - self.formatProperty(obj, property, isGetter); - }); - - if (truncated) { - this.append(', ...'); - } - - this.append(' })'); - }; - - PrettyPrinter.prototype.emitTypedArray = function(arr) { - var constructorName = j$.fnNameFor(arr.constructor), - limitedArray = Array.prototype.slice.call( - arr, - 0, - j$.MAX_PRETTY_PRINT_ARRAY_LENGTH - ), - itemsString = Array.prototype.join.call(limitedArray, ', '); - - if (limitedArray.length !== arr.length) { - itemsString += ', ...'; - } - - this.append(constructorName + ' [ ' + itemsString + ' ]'); - }; - - PrettyPrinter.prototype.emitDomElement = function(el) { - var tagName = el.tagName.toLowerCase(), - attrs = el.attributes, - i, - len = attrs.length, - out = '<' + tagName, - attr; - - for (i = 0; i < len; i++) { - attr = attrs[i]; - out += ' ' + attr.name; - - if (attr.value !== '') { - out += '="' + attr.value + '"'; - } - } - - out += '>'; - - if (el.childElementCount !== 0 || el.textContent !== '') { - out += '...'; - } - - this.append(out); - }; - - PrettyPrinter.prototype.formatProperty = function(obj, property, isGetter) { - this.append(property); - this.append(': '); - if (isGetter) { - this.append(''); - } else { - this.format(obj[property]); - } - }; - - PrettyPrinter.prototype.append = function(value) { - // This check protects us from the rare case where an object has overriden - // `toString()` with an invalid implementation (returning a non-string). - if (typeof value !== 'string') { - value = Object.prototype.toString.call(value); - } - - var result = truncate(value, j$.MAX_PRETTY_PRINT_CHARS - this.length); - this.length += result.value.length; - this.stringParts.push(result.value); - - if (result.truncated) { - throw new MaxCharsReachedError(); - } - }; - - function truncate(s, maxlen) { - if (s.length <= maxlen) { - return { value: s, truncated: false }; - } - - s = s.substring(0, maxlen - 4) + ' ...'; - return { value: s, truncated: true }; - } - - function MaxCharsReachedError() { - this.message = - 'Exceeded ' + - j$.MAX_PRETTY_PRINT_CHARS + - ' characters while pretty-printing a value'; - } - - MaxCharsReachedError.prototype = new Error(); - - function keys(obj, isArray) { - var allKeys = Object.keys - ? Object.keys(obj) - : (function(o) { - var keys = []; - for (var key in o) { - if (j$.util.has(o, key)) { - keys.push(key); - } - } - return keys; - })(obj); - - if (!isArray) { - return allKeys; - } - - if (allKeys.length === 0) { - return allKeys; - } - - var extraKeys = []; - for (var i = 0; i < allKeys.length; i++) { - if (!/^[0-9]+$/.test(allKeys[i])) { - extraKeys.push(allKeys[i]); - } - } - - return extraKeys; - } - return function(value) { - var prettyPrinter = new PrettyPrinter(); - prettyPrinter.format(value); - return prettyPrinter.stringParts.join(''); - }; -}; - -getJasmineRequireObj().QueueRunner = function(j$) { - function StopExecutionError() {} - StopExecutionError.prototype = new Error(); - j$.StopExecutionError = StopExecutionError; - - function once(fn) { - var called = false; - return function(arg) { - if (!called) { - called = true; - // Direct call using single parameter, because cleanup/next does not need more - fn(arg); - } - return null; - }; - } - - function emptyFn() {} - - function QueueRunner(attrs) { - var queueableFns = attrs.queueableFns || []; - this.queueableFns = queueableFns.concat(attrs.cleanupFns || []); - this.firstCleanupIx = queueableFns.length; - this.onComplete = attrs.onComplete || emptyFn; - this.clearStack = - attrs.clearStack || - function(fn) { - fn(); - }; - this.onException = attrs.onException || emptyFn; - this.userContext = attrs.userContext || new j$.UserContext(); - this.timeout = attrs.timeout || { - setTimeout: setTimeout, - clearTimeout: clearTimeout - }; - this.fail = attrs.fail || emptyFn; - this.globalErrors = attrs.globalErrors || { - pushListener: emptyFn, - popListener: emptyFn - }; - this.completeOnFirstError = !!attrs.completeOnFirstError; - this.errored = false; - - if (typeof this.onComplete !== 'function') { - throw new Error('invalid onComplete ' + JSON.stringify(this.onComplete)); - } - this.deprecated = attrs.deprecated; - } - - QueueRunner.prototype.execute = function() { - var self = this; - this.handleFinalError = function(message, source, lineno, colno, error) { - // Older browsers would send the error as the first parameter. HTML5 - // specifies the the five parameters above. The error instance should - // be preffered, otherwise the call stack would get lost. - self.onException(error || message); - }; - this.globalErrors.pushListener(this.handleFinalError); - this.run(0); - }; - - QueueRunner.prototype.skipToCleanup = function(lastRanIndex) { - if (lastRanIndex < this.firstCleanupIx) { - this.run(this.firstCleanupIx); - } else { - this.run(lastRanIndex + 1); - } - }; - - QueueRunner.prototype.clearTimeout = function(timeoutId) { - Function.prototype.apply.apply(this.timeout.clearTimeout, [ - j$.getGlobal(), - [timeoutId] - ]); - }; - - QueueRunner.prototype.setTimeout = function(fn, timeout) { - return Function.prototype.apply.apply(this.timeout.setTimeout, [ - j$.getGlobal(), - [fn, timeout] - ]); - }; - - QueueRunner.prototype.attempt = function attempt(iterativeIndex) { - var self = this, - completedSynchronously = true, - handleError = function handleError(error) { - onException(error); - next(error); - }, - cleanup = once(function cleanup() { - if (timeoutId !== void 0) { - self.clearTimeout(timeoutId); - } - self.globalErrors.popListener(handleError); - }), - next = once(function next(err) { - cleanup(); - - if (j$.isError_(err)) { - if (!(err instanceof StopExecutionError) && !err.jasmineMessage) { - self.fail(err); - } - self.errored = errored = true; - } - - function runNext() { - if (self.completeOnFirstError && errored) { - self.skipToCleanup(iterativeIndex); - } else { - self.run(iterativeIndex + 1); - } - } - - if (completedSynchronously) { - self.setTimeout(runNext); - } else { - runNext(); - } - }), - errored = false, - queueableFn = self.queueableFns[iterativeIndex], - timeoutId; - - next.fail = function nextFail() { - self.fail.apply(null, arguments); - self.errored = errored = true; - next(); - }; - - self.globalErrors.pushListener(handleError); - - if (queueableFn.timeout !== undefined) { - var timeoutInterval = queueableFn.timeout || j$.DEFAULT_TIMEOUT_INTERVAL; - timeoutId = self.setTimeout(function() { - var error = new Error( - 'Timeout - Async function did not complete within ' + - timeoutInterval + - 'ms ' + - (queueableFn.timeout - ? '(custom timeout)' - : '(set by jasmine.DEFAULT_TIMEOUT_INTERVAL)') - ); - onException(error); - next(); - }, timeoutInterval); - } - - try { - if (queueableFn.fn.length === 0) { - var maybeThenable = queueableFn.fn.call(self.userContext); - - if (maybeThenable && j$.isFunction_(maybeThenable.then)) { - maybeThenable.then(next, onPromiseRejection); - completedSynchronously = false; - return { completedSynchronously: false }; - } - } else { - queueableFn.fn.call(self.userContext, next); - completedSynchronously = false; - return { completedSynchronously: false }; - } - } catch (e) { - onException(e); - self.errored = errored = true; - } - - cleanup(); - return { completedSynchronously: true, errored: errored }; - - function onException(e) { - self.onException(e); - self.errored = errored = true; - } - - function onPromiseRejection(e) { - onException(e); - next(); - } - }; - - QueueRunner.prototype.run = function(recursiveIndex) { - var length = this.queueableFns.length, - self = this, - iterativeIndex; - - for ( - iterativeIndex = recursiveIndex; - iterativeIndex < length; - iterativeIndex++ - ) { - var result = this.attempt(iterativeIndex); - - if (!result.completedSynchronously) { - return; - } - - self.errored = self.errored || result.errored; - - if (this.completeOnFirstError && result.errored) { - this.skipToCleanup(iterativeIndex); - return; - } - } - - this.clearStack(function() { - self.globalErrors.popListener(self.handleFinalError); - self.onComplete(self.errored && new StopExecutionError()); - }); - }; - - return QueueRunner; -}; - -getJasmineRequireObj().ReportDispatcher = function(j$) { - function ReportDispatcher(methods, queueRunnerFactory) { - var dispatchedMethods = methods || []; - - for (var i = 0; i < dispatchedMethods.length; i++) { - var method = dispatchedMethods[i]; - this[method] = (function(m) { - return function() { - dispatch(m, arguments); - }; - })(method); - } - - var reporters = []; - var fallbackReporter = null; - - this.addReporter = function(reporter) { - reporters.push(reporter); - }; - - this.provideFallbackReporter = function(reporter) { - fallbackReporter = reporter; - }; - - this.clearReporters = function() { - reporters = []; - }; - - return this; - - function dispatch(method, args) { - if (reporters.length === 0 && fallbackReporter !== null) { - reporters.push(fallbackReporter); - } - var onComplete = args[args.length - 1]; - args = j$.util.argsToArray(args).splice(0, args.length - 1); - var fns = []; - for (var i = 0; i < reporters.length; i++) { - var reporter = reporters[i]; - addFn(fns, reporter, method, args); - } - - queueRunnerFactory({ - queueableFns: fns, - onComplete: onComplete, - isReporter: true - }); - } - - function addFn(fns, reporter, method, args) { - var fn = reporter[method]; - if (!fn) { - return; - } - - var thisArgs = j$.util.cloneArgs(args); - if (fn.length <= 1) { - fns.push({ - fn: function() { - return fn.apply(reporter, thisArgs); - } - }); - } else { - fns.push({ - fn: function(done) { - return fn.apply(reporter, thisArgs.concat([done])); - } - }); - } - } - } - - return ReportDispatcher; -}; - -getJasmineRequireObj().interface = function(jasmine, env) { - var jasmineInterface = { - /** - * Callback passed to parts of the Jasmine base interface. - * - * By default Jasmine assumes this function completes synchronously. - * If you have code that you need to test asynchronously, you can declare that you receive a `done` callback, return a Promise, or use the `async` keyword if it is supported in your environment. - * @callback implementationCallback - * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on. - * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion. - */ - - /** - * Create a group of specs (often called a suite). - * - * Calls to `describe` can be nested within other calls to compose your suite as a tree. - * @name describe - * @since 1.3.0 - * @function - * @global - * @param {String} description Textual description of the group - * @param {Function} specDefinitions Function for Jasmine to invoke that will define inner suites and specs - */ - describe: function(description, specDefinitions) { - return env.describe(description, specDefinitions); - }, - - /** - * A temporarily disabled [`describe`]{@link describe} - * - * Specs within an `xdescribe` will be marked pending and not executed - * @name xdescribe - * @since 1.3.0 - * @function - * @global - * @param {String} description Textual description of the group - * @param {Function} specDefinitions Function for Jasmine to invoke that will define inner suites and specs - */ - xdescribe: function(description, specDefinitions) { - return env.xdescribe(description, specDefinitions); - }, - - /** - * A focused [`describe`]{@link describe} - * - * If suites or specs are focused, only those that are focused will be executed - * @see fit - * @name fdescribe - * @since 2.1.0 - * @function - * @global - * @param {String} description Textual description of the group - * @param {Function} specDefinitions Function for Jasmine to invoke that will define inner suites and specs - */ - fdescribe: function(description, specDefinitions) { - return env.fdescribe(description, specDefinitions); - }, - - /** - * Define a single spec. A spec should contain one or more {@link expect|expectations} that test the state of the code. - * - * A spec whose expectations all succeed will be passing and a spec with any failures will fail. - * @name it - * @since 1.3.0 - * @function - * @global - * @param {String} description Textual description of what this spec is checking - * @param {implementationCallback} [testFunction] Function that contains the code of your test. If not provided the test will be `pending`. - * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async spec. - * @see async - */ - it: function() { - return env.it.apply(env, arguments); - }, - - /** - * A temporarily disabled [`it`]{@link it} - * - * The spec will report as `pending` and will not be executed. - * @name xit - * @since 1.3.0 - * @function - * @global - * @param {String} description Textual description of what this spec is checking. - * @param {implementationCallback} [testFunction] Function that contains the code of your test. Will not be executed. - */ - xit: function() { - return env.xit.apply(env, arguments); - }, - - /** - * A focused [`it`]{@link it} - * - * If suites or specs are focused, only those that are focused will be executed. - * @name fit - * @since 2.1.0 - * @function - * @global - * @param {String} description Textual description of what this spec is checking. - * @param {implementationCallback} testFunction Function that contains the code of your test. - * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async spec. - * @see async - */ - fit: function() { - return env.fit.apply(env, arguments); - }, - - /** - * Run some shared setup before each of the specs in the {@link describe} in which it is called. - * @name beforeEach - * @since 1.3.0 - * @function - * @global - * @param {implementationCallback} [function] Function that contains the code to setup your specs. - * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async beforeEach. - * @see async - */ - beforeEach: function() { - return env.beforeEach.apply(env, arguments); - }, - - /** - * Run some shared teardown after each of the specs in the {@link describe} in which it is called. - * @name afterEach - * @since 1.3.0 - * @function - * @global - * @param {implementationCallback} [function] Function that contains the code to teardown your specs. - * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async afterEach. - * @see async - */ - afterEach: function() { - return env.afterEach.apply(env, arguments); - }, - - /** - * Run some shared setup once before all of the specs in the {@link describe} are run. - * - * _Note:_ Be careful, sharing the setup from a beforeAll makes it easy to accidentally leak state between your specs so that they erroneously pass or fail. - * @name beforeAll - * @since 2.1.0 - * @function - * @global - * @param {implementationCallback} [function] Function that contains the code to setup your specs. - * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async beforeAll. - * @see async - */ - beforeAll: function() { - return env.beforeAll.apply(env, arguments); - }, - - /** - * Run some shared teardown once after all of the specs in the {@link describe} are run. - * - * _Note:_ Be careful, sharing the teardown from a afterAll makes it easy to accidentally leak state between your specs so that they erroneously pass or fail. - * @name afterAll - * @since 2.1.0 - * @function - * @global - * @param {implementationCallback} [function] Function that contains the code to teardown your specs. - * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async afterAll. - * @see async - */ - afterAll: function() { - return env.afterAll.apply(env, arguments); - }, - - /** - * Create an expectation for a spec. - * @name expect - * @since 1.3.0 - * @function - * @global - * @param {Object} actual - Actual computed value to test expectations against. - * @return {matchers} - */ - expect: function(actual) { - return env.expect(actual); - }, - - /** - * Create an asynchronous expectation for a spec. Note that the matchers - * that are provided by an asynchronous expectation all return promises - * which must be either returned from the spec or waited for using `await` - * in order for Jasmine to associate them with the correct spec. - * @name expectAsync - * @since 3.3.0 - * @function - * @global - * @param {Object} actual - Actual computed value to test expectations against. - * @return {async-matchers} - * @example - * await expectAsync(somePromise).toBeResolved(); - * @example - * return expectAsync(somePromise).toBeResolved(); - */ - expectAsync: function(actual) { - return env.expectAsync(actual); - }, - - /** - * Mark a spec as pending, expectation results will be ignored. - * @name pending - * @since 2.0.0 - * @function - * @global - * @param {String} [message] - Reason the spec is pending. - */ - pending: function() { - return env.pending.apply(env, arguments); - }, - - /** - * Explicitly mark a spec as failed. - * @name fail - * @since 2.1.0 - * @function - * @global - * @param {String|Error} [error] - Reason for the failure. - */ - fail: function() { - return env.fail.apply(env, arguments); - }, - - /** - * Install a spy onto an existing object. - * @name spyOn - * @since 1.3.0 - * @function - * @global - * @param {Object} obj - The object upon which to install the {@link Spy}. - * @param {String} methodName - The name of the method to replace with a {@link Spy}. - * @returns {Spy} - */ - spyOn: function(obj, methodName) { - return env.spyOn(obj, methodName); - }, - - /** - * Install a spy on a property installed with `Object.defineProperty` onto an existing object. - * @name spyOnProperty - * @since 2.6.0 - * @function - * @global - * @param {Object} obj - The object upon which to install the {@link Spy} - * @param {String} propertyName - The name of the property to replace with a {@link Spy}. - * @param {String} [accessType=get] - The access type (get|set) of the property to {@link Spy} on. - * @returns {Spy} - */ - spyOnProperty: function(obj, methodName, accessType) { - return env.spyOnProperty(obj, methodName, accessType); - }, - - /** - * Installs spies on all writable and configurable properties of an object. - * @name spyOnAllFunctions - * @since 3.2.1 - * @function - * @global - * @param {Object} obj - The object upon which to install the {@link Spy}s - * @returns {Object} the spied object - */ - spyOnAllFunctions: function(obj) { - return env.spyOnAllFunctions(obj); - }, - - jsApiReporter: new jasmine.JsApiReporter({ - timer: new jasmine.Timer() - }), - - /** - * @namespace jasmine - */ - jasmine: jasmine - }; - - /** - * Add a custom equality tester for the current scope of specs. - * - * _Note:_ This is only callable from within a {@link beforeEach}, {@link it}, or {@link beforeAll}. - * @name jasmine.addCustomEqualityTester - * @since 2.0.0 - * @function - * @param {Function} tester - A function which takes two arguments to compare and returns a `true` or `false` comparison result if it knows how to compare them, and `undefined` otherwise. - * @see custom_equality - */ - jasmine.addCustomEqualityTester = function(tester) { - env.addCustomEqualityTester(tester); - }; - - /** - * Add custom matchers for the current scope of specs. - * - * _Note:_ This is only callable from within a {@link beforeEach}, {@link it}, or {@link beforeAll}. - * @name jasmine.addMatchers - * @since 2.0.0 - * @function - * @param {Object} matchers - Keys from this object will be the new matcher names. - * @see custom_matcher - */ - jasmine.addMatchers = function(matchers) { - return env.addMatchers(matchers); - }; - - /** - * Add custom async matchers for the current scope of specs. - * - * _Note:_ This is only callable from within a {@link beforeEach}, {@link it}, or {@link beforeAll}. - * @name jasmine.addAsyncMatchers - * @since 3.5.0 - * @function - * @param {Object} matchers - Keys from this object will be the new async matcher names. - * @see custom_matcher - */ - jasmine.addAsyncMatchers = function(matchers) { - return env.addAsyncMatchers(matchers); - }; - - /** - * Get the currently booted mock {Clock} for this Jasmine environment. - * @name jasmine.clock - * @since 2.0.0 - * @function - * @returns {Clock} - */ - jasmine.clock = function() { - return env.clock; - }; - - /** - * Create a bare {@link Spy} object. This won't be installed anywhere and will not have any implementation behind it. - * @name jasmine.createSpy - * @since 1.3.0 - * @function - * @param {String} [name] - Name to give the spy. This will be displayed in failure messages. - * @param {Function} [originalFn] - Function to act as the real implementation. - * @return {Spy} - */ - jasmine.createSpy = function(name, originalFn) { - return env.createSpy(name, originalFn); - }; - - /** - * Create an object with multiple {@link Spy}s as its members. - * @name jasmine.createSpyObj - * @since 1.3.0 - * @function - * @param {String} [baseName] - Base name for the spies in the object. - * @param {String[]|Object} methodNames - Array of method names to create spies for, or Object whose keys will be method names and values the {@link Spy#and#returnValue|returnValue}. - * @param {String[]|Object} [propertyNames] - Array of property names to create spies for, or Object whose keys will be propertynames and values the {@link Spy#and#returnValue|returnValue}. - * @return {Object} - */ - jasmine.createSpyObj = function(baseName, methodNames, propertyNames) { - return env.createSpyObj(baseName, methodNames, propertyNames); - }; - - /** - * Add a custom spy strategy for the current scope of specs. - * - * _Note:_ This is only callable from within a {@link beforeEach}, {@link it}, or {@link beforeAll}. - * @name jasmine.addSpyStrategy - * @since 3.5.0 - * @function - * @param {String} name - The name of the strategy (i.e. what you call from `and`) - * @param {Function} factory - Factory function that returns the plan to be executed. - */ - jasmine.addSpyStrategy = function(name, factory) { - return env.addSpyStrategy(name, factory); - }; - - /** - * Set the default spy strategy for the current scope of specs. - * - * _Note:_ This is only callable from within a {@link beforeEach}, {@link it}, or {@link beforeAll}. - * @name jasmine.setDefaultSpyStrategy - * @function - * @param {Function} defaultStrategyFn - a function that assigns a strategy - * @example - * beforeEach(function() { - * jasmine.setDefaultSpyStrategy(and => and.returnValue(true)); - * }); - */ - jasmine.setDefaultSpyStrategy = function(defaultStrategyFn) { - return env.setDefaultSpyStrategy(defaultStrategyFn); - }; - - return jasmineInterface; -}; - -getJasmineRequireObj().Spy = function(j$) { - var nextOrder = (function() { - var order = 0; - - return function() { - return order++; - }; - })(); - - /** - * _Note:_ Do not construct this directly, use {@link spyOn}, {@link spyOnProperty}, {@link jasmine.createSpy}, or {@link jasmine.createSpyObj} - * @constructor - * @name Spy - */ - function Spy( - name, - originalFn, - customStrategies, - defaultStrategyFn, - getPromise - ) { - var numArgs = typeof originalFn === 'function' ? originalFn.length : 0, - wrapper = makeFunc(numArgs, function() { - return spy.apply(this, Array.prototype.slice.call(arguments)); - }), - strategyDispatcher = new SpyStrategyDispatcher({ - name: name, - fn: originalFn, - getSpy: function() { - return wrapper; - }, - customStrategies: customStrategies, - getPromise: getPromise - }), - callTracker = new j$.CallTracker(), - spy = function() { - /** - * @name Spy.callData - * @property {object} object - `this` context for the invocation. - * @property {number} invocationOrder - Order of the invocation. - * @property {Array} args - The arguments passed for this invocation. - */ - var callData = { - object: this, - invocationOrder: nextOrder(), - args: Array.prototype.slice.apply(arguments) - }; - - callTracker.track(callData); - var returnValue = strategyDispatcher.exec(this, arguments); - callData.returnValue = returnValue; - - return returnValue; - }; - - function makeFunc(length, fn) { - switch (length) { - case 1: - return function(a) { - return fn.apply(this, arguments); - }; - case 2: - return function(a, b) { - return fn.apply(this, arguments); - }; - case 3: - return function(a, b, c) { - return fn.apply(this, arguments); - }; - case 4: - return function(a, b, c, d) { - return fn.apply(this, arguments); - }; - case 5: - return function(a, b, c, d, e) { - return fn.apply(this, arguments); - }; - case 6: - return function(a, b, c, d, e, f) { - return fn.apply(this, arguments); - }; - case 7: - return function(a, b, c, d, e, f, g) { - return fn.apply(this, arguments); - }; - case 8: - return function(a, b, c, d, e, f, g, h) { - return fn.apply(this, arguments); - }; - case 9: - return function(a, b, c, d, e, f, g, h, i) { - return fn.apply(this, arguments); - }; - default: - return function() { - return fn.apply(this, arguments); - }; - } - } - - for (var prop in originalFn) { - if (prop === 'and' || prop === 'calls') { - throw new Error( - "Jasmine spies would overwrite the 'and' and 'calls' properties on the object being spied upon" - ); - } - - wrapper[prop] = originalFn[prop]; - } - - /** - * @member {SpyStrategy} - Accesses the default strategy for the spy. This strategy will be used - * whenever the spy is called with arguments that don't match any strategy - * created with {@link Spy#withArgs}. - * @name Spy#and - * @since 2.0.0 - * @example - * spyOn(someObj, 'func').and.returnValue(42); - */ - wrapper.and = strategyDispatcher.and; - /** - * Specifies a strategy to be used for calls to the spy that have the - * specified arguments. - * @name Spy#withArgs - * @since 3.0.0 - * @function - * @param {...*} args - The arguments to match - * @type {SpyStrategy} - * @example - * spyOn(someObj, 'func').withArgs(1, 2, 3).and.returnValue(42); - * someObj.func(1, 2, 3); // returns 42 - */ - wrapper.withArgs = function() { - return strategyDispatcher.withArgs.apply(strategyDispatcher, arguments); - }; - wrapper.calls = callTracker; - - if (defaultStrategyFn) { - defaultStrategyFn(wrapper.and); - } - - return wrapper; - } - - function SpyStrategyDispatcher(strategyArgs) { - var baseStrategy = new j$.SpyStrategy(strategyArgs); - var argsStrategies = new StrategyDict(function() { - return new j$.SpyStrategy(strategyArgs); - }); - - this.and = baseStrategy; - - this.exec = function(spy, args) { - var strategy = argsStrategies.get(args); - - if (!strategy) { - if (argsStrategies.any() && !baseStrategy.isConfigured()) { - throw new Error( - "Spy '" + - strategyArgs.name + - "' received a call with arguments " + - j$.pp(Array.prototype.slice.call(args)) + - ' but all configured strategies specify other arguments.' - ); - } else { - strategy = baseStrategy; - } - } - - return strategy.exec(spy, args); - }; - - this.withArgs = function() { - return { and: argsStrategies.getOrCreate(arguments) }; - }; - } - - function StrategyDict(strategyFactory) { - this.strategies = []; - this.strategyFactory = strategyFactory; - } - - StrategyDict.prototype.any = function() { - return this.strategies.length > 0; - }; - - StrategyDict.prototype.getOrCreate = function(args) { - var strategy = this.get(args); - - if (!strategy) { - strategy = this.strategyFactory(); - this.strategies.push({ - args: args, - strategy: strategy - }); - } - - return strategy; - }; - - StrategyDict.prototype.get = function(args) { - var i; - - for (i = 0; i < this.strategies.length; i++) { - if (j$.matchersUtil.equals(args, this.strategies[i].args)) { - return this.strategies[i].strategy; - } - } - }; - - return Spy; -}; - -getJasmineRequireObj().SpyFactory = function(j$) { - function SpyFactory(getCustomStrategies, getDefaultStrategyFn, getPromise) { - var self = this; - - this.createSpy = function(name, originalFn) { - return j$.Spy( - name, - originalFn, - getCustomStrategies(), - getDefaultStrategyFn(), - getPromise - ); - }; - - this.createSpyObj = function(baseName, methodNames, propertyNames) { - var baseNameIsCollection = - j$.isObject_(baseName) || j$.isArray_(baseName); - - if (baseNameIsCollection) { - propertyNames = methodNames; - methodNames = baseName; - baseName = 'unknown'; - } - - var obj = {}; - var spy, descriptor; - - var methods = normalizeKeyValues(methodNames); - for (var i = 0; i < methods.length; i++) { - spy = obj[methods[i][0]] = self.createSpy( - baseName + '.' + methods[i][0] - ); - if (methods[i].length > 1) { - spy.and.returnValue(methods[i][1]); - } - } - - var properties = normalizeKeyValues(propertyNames); - for (var i = 0; i < properties.length; i++) { - descriptor = { - get: self.createSpy(baseName + '.' + properties[i][0] + '.get'), - set: self.createSpy(baseName + '.' + properties[i][0] + '.set') - }; - if (properties[i].length > 1) { - descriptor.get.and.returnValue(properties[i][1]); - descriptor.set.and.returnValue(properties[i][1]); - } - Object.defineProperty(obj, properties[i][0], descriptor); - } - - if (methods.length === 0 && properties.length === 0) { - throw 'createSpyObj requires a non-empty array or object of method names to create spies for'; - } - - return obj; - }; - } - - function normalizeKeyValues(object) { - var result = []; - if (j$.isArray_(object)) { - for (var i = 0; i < object.length; i++) { - result.push([object[i]]); - } - } else if (j$.isObject_(object)) { - for (var key in object) { - if (object.hasOwnProperty(key)) { - result.push([key, object[key]]); - } - } - } - return result; - } - - return SpyFactory; -}; - -getJasmineRequireObj().SpyRegistry = function(j$) { - var spyOnMsg = j$.formatErrorMsg('', 'spyOn(, )'); - var spyOnPropertyMsg = j$.formatErrorMsg( - '', - 'spyOnProperty(, , [accessType])' - ); - - function SpyRegistry(options) { - options = options || {}; - var global = options.global || j$.getGlobal(); - var createSpy = options.createSpy; - var currentSpies = - options.currentSpies || - function() { - return []; - }; - - this.allowRespy = function(allow) { - this.respy = allow; - }; - - this.spyOn = function(obj, methodName) { - var getErrorMsg = spyOnMsg; - - if (j$.util.isUndefined(obj) || obj === null) { - throw new Error( - getErrorMsg( - 'could not find an object to spy upon for ' + methodName + '()' - ) - ); - } - - if (j$.util.isUndefined(methodName) || methodName === null) { - throw new Error(getErrorMsg('No method name supplied')); - } - - if (j$.util.isUndefined(obj[methodName])) { - throw new Error(getErrorMsg(methodName + '() method does not exist')); - } - - if (obj[methodName] && j$.isSpy(obj[methodName])) { - if (this.respy) { - return obj[methodName]; - } else { - throw new Error( - getErrorMsg(methodName + ' has already been spied upon') - ); - } - } - - var descriptor = Object.getOwnPropertyDescriptor(obj, methodName); - - if (descriptor && !(descriptor.writable || descriptor.set)) { - throw new Error( - getErrorMsg(methodName + ' is not declared writable or has no setter') - ); - } - - var originalMethod = obj[methodName], - spiedMethod = createSpy(methodName, originalMethod), - restoreStrategy; - - if ( - Object.prototype.hasOwnProperty.call(obj, methodName) || - (obj === global && methodName === 'onerror') - ) { - restoreStrategy = function() { - obj[methodName] = originalMethod; - }; - } else { - restoreStrategy = function() { - if (!delete obj[methodName]) { - obj[methodName] = originalMethod; - } - }; - } - - currentSpies().push({ - restoreObjectToOriginalState: restoreStrategy - }); - - obj[methodName] = spiedMethod; - - return spiedMethod; - }; - - this.spyOnProperty = function(obj, propertyName, accessType) { - var getErrorMsg = spyOnPropertyMsg; - - accessType = accessType || 'get'; - - if (j$.util.isUndefined(obj)) { - throw new Error( - getErrorMsg( - 'spyOn could not find an object to spy upon for ' + - propertyName + - '' - ) - ); - } - - if (j$.util.isUndefined(propertyName)) { - throw new Error(getErrorMsg('No property name supplied')); - } - - var descriptor = j$.util.getPropertyDescriptor(obj, propertyName); - - if (!descriptor) { - throw new Error(getErrorMsg(propertyName + ' property does not exist')); - } - - if (!descriptor.configurable) { - throw new Error( - getErrorMsg(propertyName + ' is not declared configurable') - ); - } - - if (!descriptor[accessType]) { - throw new Error( - getErrorMsg( - 'Property ' + - propertyName + - ' does not have access type ' + - accessType - ) - ); - } - - if (j$.isSpy(descriptor[accessType])) { - if (this.respy) { - return descriptor[accessType]; - } else { - throw new Error( - getErrorMsg( - propertyName + '#' + accessType + ' has already been spied upon' - ) - ); - } - } - - var originalDescriptor = j$.util.clone(descriptor), - spy = createSpy(propertyName, descriptor[accessType]), - restoreStrategy; - - if (Object.prototype.hasOwnProperty.call(obj, propertyName)) { - restoreStrategy = function() { - Object.defineProperty(obj, propertyName, originalDescriptor); - }; - } else { - restoreStrategy = function() { - delete obj[propertyName]; - }; - } - - currentSpies().push({ - restoreObjectToOriginalState: restoreStrategy - }); - - descriptor[accessType] = spy; - - Object.defineProperty(obj, propertyName, descriptor); - - return spy; - }; - - this.spyOnAllFunctions = function(obj) { - if (j$.util.isUndefined(obj)) { - throw new Error( - 'spyOnAllFunctions could not find an object to spy upon' - ); - } - - var pointer = obj, - props = [], - prop, - descriptor; - - while (pointer) { - for (prop in pointer) { - if ( - Object.prototype.hasOwnProperty.call(pointer, prop) && - pointer[prop] instanceof Function - ) { - descriptor = Object.getOwnPropertyDescriptor(pointer, prop); - if ( - (descriptor.writable || descriptor.set) && - descriptor.configurable - ) { - props.push(prop); - } - } - } - pointer = Object.getPrototypeOf(pointer); - } - - for (var i = 0; i < props.length; i++) { - this.spyOn(obj, props[i]); - } - - return obj; - }; - - this.clearSpies = function() { - var spies = currentSpies(); - for (var i = spies.length - 1; i >= 0; i--) { - var spyEntry = spies[i]; - spyEntry.restoreObjectToOriginalState(); - } - }; - } - - return SpyRegistry; -}; - -getJasmineRequireObj().SpyStrategy = function(j$) { - /** - * @interface SpyStrategy - */ - function SpyStrategy(options) { - options = options || {}; - - var self = this; - - /** - * Get the identifying information for the spy. - * @name SpyStrategy#identity - * @since 3.0.0 - * @member - * @type {String} - */ - this.identity = options.name || 'unknown'; - this.originalFn = options.fn || function() {}; - this.getSpy = options.getSpy || function() {}; - this.plan = this._defaultPlan = function() {}; - - var k, - cs = options.customStrategies || {}; - for (k in cs) { - if (j$.util.has(cs, k) && !this[k]) { - this[k] = createCustomPlan(cs[k]); - } - } - - var getPromise = - typeof options.getPromise === 'function' - ? options.getPromise - : function() {}; - - var requirePromise = function(name) { - var Promise = getPromise(); - - if (!Promise) { - throw new Error( - name + - ' requires global Promise, or `Promise` configured with `jasmine.getEnv().configure()`' - ); - } - - return Promise; - }; - - /** - * Tell the spy to return a promise resolving to the specified value when invoked. - * @name SpyStrategy#resolveTo - * @since 3.5.0 - * @function - * @param {*} value The value to return. - */ - this.resolveTo = function(value) { - var Promise = requirePromise('resolveTo'); - self.plan = function() { - return Promise.resolve(value); - }; - return self.getSpy(); - }; - - /** - * Tell the spy to return a promise rejecting with the specified value when invoked. - * @name SpyStrategy#rejectWith - * @since 3.5.0 - * @function - * @param {*} value The value to return. - */ - this.rejectWith = function(value) { - var Promise = requirePromise('rejectWith'); - - self.plan = function() { - return Promise.reject(value); - }; - return self.getSpy(); - }; - } - - function createCustomPlan(factory) { - return function() { - var plan = factory.apply(null, arguments); - - if (!j$.isFunction_(plan)) { - throw new Error('Spy strategy must return a function'); - } - - this.plan = plan; - return this.getSpy(); - }; - } - - /** - * Execute the current spy strategy. - * @name SpyStrategy#exec - * @since 2.0.0 - * @function - */ - SpyStrategy.prototype.exec = function(context, args) { - return this.plan.apply(context, args); - }; - - /** - * Tell the spy to call through to the real implementation when invoked. - * @name SpyStrategy#callThrough - * @since 2.0.0 - * @function - */ - SpyStrategy.prototype.callThrough = function() { - this.plan = this.originalFn; - return this.getSpy(); - }; - - /** - * Tell the spy to return the value when invoked. - * @name SpyStrategy#returnValue - * @since 2.0.0 - * @function - * @param {*} value The value to return. - */ - SpyStrategy.prototype.returnValue = function(value) { - this.plan = function() { - return value; - }; - return this.getSpy(); - }; - - /** - * Tell the spy to return one of the specified values (sequentially) each time the spy is invoked. - * @name SpyStrategy#returnValues - * @since 2.1.0 - * @function - * @param {...*} values - Values to be returned on subsequent calls to the spy. - */ - SpyStrategy.prototype.returnValues = function() { - var values = Array.prototype.slice.call(arguments); - this.plan = function() { - return values.shift(); - }; - return this.getSpy(); - }; - - /** - * Tell the spy to throw an error when invoked. - * @name SpyStrategy#throwError - * @since 2.0.0 - * @function - * @param {Error|String} something Thing to throw - */ - SpyStrategy.prototype.throwError = function(something) { - var error = something instanceof Error ? something : new Error(something); - this.plan = function() { - throw error; - }; - return this.getSpy(); - }; - - /** - * Tell the spy to call a fake implementation when invoked. - * @name SpyStrategy#callFake - * @since 2.0.0 - * @function - * @param {Function} fn The function to invoke with the passed parameters. - */ - SpyStrategy.prototype.callFake = function(fn) { - if (!(j$.isFunction_(fn) || j$.isAsyncFunction_(fn))) { - throw new Error( - 'Argument passed to callFake should be a function, got ' + fn - ); - } - this.plan = fn; - return this.getSpy(); - }; - - /** - * Tell the spy to do nothing when invoked. This is the default. - * @name SpyStrategy#stub - * @since 2.0.0 - * @function - */ - SpyStrategy.prototype.stub = function(fn) { - this.plan = function() {}; - return this.getSpy(); - }; - - SpyStrategy.prototype.isConfigured = function() { - return this.plan !== this._defaultPlan; - }; - - return SpyStrategy; -}; - -getJasmineRequireObj().StackTrace = function(j$) { - function StackTrace(error) { - var lines = error.stack.split('\n').filter(function(line) { - return line !== ''; - }); - - var extractResult = extractMessage(error.message, lines); - - if (extractResult) { - this.message = extractResult.message; - lines = extractResult.remainder; - } - - var parseResult = tryParseFrames(lines); - this.frames = parseResult.frames; - this.style = parseResult.style; - } - - var framePatterns = [ - // PhantomJS on Linux, Node, Chrome, IE, Edge - // e.g. " at QueueRunner.run (http://localhost:8888/__jasmine__/jasmine.js:4320:20)" - // Note that the "function name" can include a surprisingly large set of - // characters, including angle brackets and square brackets. - { - re: /^\s*at ([^\)]+) \(([^\)]+)\)$/, - fnIx: 1, - fileLineColIx: 2, - style: 'v8' - }, - - // NodeJS alternate form, often mixed in with the Chrome style - // e.g. " at /some/path:4320:20 - { re: /\s*at (.+)$/, fileLineColIx: 1, style: 'v8' }, - - // PhantomJS on OS X, Safari, Firefox - // e.g. "run@http://localhost:8888/__jasmine__/jasmine.js:4320:27" - // or "http://localhost:8888/__jasmine__/jasmine.js:4320:27" - { - re: /^(([^@\s]+)@)?([^\s]+)$/, - fnIx: 2, - fileLineColIx: 3, - style: 'webkit' - } - ]; - - // regexes should capture the function name (if any) as group 1 - // and the file, line, and column as group 2. - function tryParseFrames(lines) { - var style = null; - var frames = lines.map(function(line) { - var convertedLine = first(framePatterns, function(pattern) { - var overallMatch = line.match(pattern.re), - fileLineColMatch; - if (!overallMatch) { - return null; - } - - fileLineColMatch = overallMatch[pattern.fileLineColIx].match( - /^(.*):(\d+):\d+$/ - ); - if (!fileLineColMatch) { - return null; - } - - style = style || pattern.style; - return { - raw: line, - file: fileLineColMatch[1], - line: parseInt(fileLineColMatch[2], 10), - func: overallMatch[pattern.fnIx] - }; - }); - - return convertedLine || { raw: line }; - }); - - return { - style: style, - frames: frames - }; - } - - function first(items, fn) { - var i, result; - - for (i = 0; i < items.length; i++) { - result = fn(items[i]); - - if (result) { - return result; - } - } - } - - function extractMessage(message, stackLines) { - var len = messagePrefixLength(message, stackLines); - - if (len > 0) { - return { - message: stackLines.slice(0, len).join('\n'), - remainder: stackLines.slice(len) - }; - } - } - - function messagePrefixLength(message, stackLines) { - if (!stackLines[0].match(/^Error/)) { - return 0; - } - - var messageLines = message.split('\n'); - var i; - - for (i = 1; i < messageLines.length; i++) { - if (messageLines[i] !== stackLines[i]) { - return 0; - } - } - - return messageLines.length; - } - - return StackTrace; -}; - -getJasmineRequireObj().Suite = function(j$) { - function Suite(attrs) { - this.env = attrs.env; - this.id = attrs.id; - this.parentSuite = attrs.parentSuite; - this.description = attrs.description; - this.expectationFactory = attrs.expectationFactory; - this.asyncExpectationFactory = attrs.asyncExpectationFactory; - this.expectationResultFactory = attrs.expectationResultFactory; - this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure; - - this.beforeFns = []; - this.afterFns = []; - this.beforeAllFns = []; - this.afterAllFns = []; - - this.timer = attrs.timer || j$.noopTimer; - - this.children = []; - - /** - * @typedef SuiteResult - * @property {Int} id - The unique id of this suite. - * @property {String} description - The description text passed to the {@link describe} that made this suite. - * @property {String} fullName - The full description including all ancestors of this suite. - * @property {Expectation[]} failedExpectations - The list of expectations that failed in an {@link afterAll} for this suite. - * @property {Expectation[]} deprecationWarnings - The list of deprecation warnings that occurred on this suite. - * @property {String} status - Once the suite has completed, this string represents the pass/fail status of this suite. - * @property {number} duration - The time in ms for Suite execution, including any before/afterAll, before/afterEach. - */ - this.result = { - id: this.id, - description: this.description, - fullName: this.getFullName(), - failedExpectations: [], - deprecationWarnings: [], - duration: null - }; - } - - Suite.prototype.expect = function(actual) { - return this.expectationFactory(actual, this); - }; - - Suite.prototype.expectAsync = function(actual) { - return this.asyncExpectationFactory(actual, this); - }; - - Suite.prototype.getFullName = function() { - var fullName = []; - for ( - var parentSuite = this; - parentSuite; - parentSuite = parentSuite.parentSuite - ) { - if (parentSuite.parentSuite) { - fullName.unshift(parentSuite.description); - } - } - return fullName.join(' '); - }; - - Suite.prototype.pend = function() { - this.markedPending = true; - }; - - Suite.prototype.beforeEach = function(fn) { - this.beforeFns.unshift(fn); - }; - - Suite.prototype.beforeAll = function(fn) { - this.beforeAllFns.push(fn); - }; - - Suite.prototype.afterEach = function(fn) { - this.afterFns.unshift(fn); - }; - - Suite.prototype.afterAll = function(fn) { - this.afterAllFns.unshift(fn); - }; - - Suite.prototype.startTimer = function() { - this.timer.start(); - }; - - Suite.prototype.endTimer = function() { - this.result.duration = this.timer.elapsed(); - }; - - function removeFns(queueableFns) { - for (var i = 0; i < queueableFns.length; i++) { - queueableFns[i].fn = null; - } - } - - Suite.prototype.cleanupBeforeAfter = function() { - removeFns(this.beforeAllFns); - removeFns(this.afterAllFns); - removeFns(this.beforeFns); - removeFns(this.afterFns); - }; - - Suite.prototype.addChild = function(child) { - this.children.push(child); - }; - - Suite.prototype.status = function() { - if (this.markedPending) { - return 'pending'; - } - - if (this.result.failedExpectations.length > 0) { - return 'failed'; - } else { - return 'passed'; - } - }; - - Suite.prototype.canBeReentered = function() { - return this.beforeAllFns.length === 0 && this.afterAllFns.length === 0; - }; - - Suite.prototype.getResult = function() { - this.result.status = this.status(); - return this.result; - }; - - Suite.prototype.sharedUserContext = function() { - if (!this.sharedContext) { - this.sharedContext = this.parentSuite - ? this.parentSuite.clonedSharedUserContext() - : new j$.UserContext(); - } - - return this.sharedContext; - }; - - Suite.prototype.clonedSharedUserContext = function() { - return j$.UserContext.fromExisting(this.sharedUserContext()); - }; - - Suite.prototype.onException = function() { - if (arguments[0] instanceof j$.errors.ExpectationFailed) { - return; - } - - var data = { - matcherName: '', - passed: false, - expected: '', - actual: '', - error: arguments[0] - }; - var failedExpectation = this.expectationResultFactory(data); - - if (!this.parentSuite) { - failedExpectation.globalErrorType = 'afterAll'; - } - - this.result.failedExpectations.push(failedExpectation); - }; - - Suite.prototype.addExpectationResult = function() { - if (isFailure(arguments)) { - var data = arguments[1]; - this.result.failedExpectations.push(this.expectationResultFactory(data)); - if (this.throwOnExpectationFailure) { - throw new j$.errors.ExpectationFailed(); - } - } - }; - - Suite.prototype.addDeprecationWarning = function(deprecation) { - if (typeof deprecation === 'string') { - deprecation = { message: deprecation }; - } - this.result.deprecationWarnings.push( - this.expectationResultFactory(deprecation) - ); - }; - - function isFailure(args) { - return !args[0]; - } - - return Suite; -}; - -if (typeof window == void 0 && typeof exports == 'object') { - /* globals exports */ - exports.Suite = jasmineRequire.Suite; -} - -getJasmineRequireObj().Timer = function() { - var defaultNow = (function(Date) { - return function() { - return new Date().getTime(); - }; - })(Date); - - function Timer(options) { - options = options || {}; - - var now = options.now || defaultNow, - startTime; - - this.start = function() { - startTime = now(); - }; - - this.elapsed = function() { - return now() - startTime; - }; - } - - return Timer; -}; - -getJasmineRequireObj().noopTimer = function() { - return { - start: function() {}, - elapsed: function() { - return 0; - } - }; -}; - -getJasmineRequireObj().TreeProcessor = function() { - function TreeProcessor(attrs) { - var tree = attrs.tree, - runnableIds = attrs.runnableIds, - queueRunnerFactory = attrs.queueRunnerFactory, - nodeStart = attrs.nodeStart || function() {}, - nodeComplete = attrs.nodeComplete || function() {}, - failSpecWithNoExpectations = !!attrs.failSpecWithNoExpectations, - orderChildren = - attrs.orderChildren || - function(node) { - return node.children; - }, - excludeNode = - attrs.excludeNode || - function(node) { - return false; - }, - stats = { valid: true }, - processed = false, - defaultMin = Infinity, - defaultMax = 1 - Infinity; - - this.processTree = function() { - processNode(tree, true); - processed = true; - return stats; - }; - - this.execute = function(done) { - if (!processed) { - this.processTree(); - } - - if (!stats.valid) { - throw 'invalid order'; - } - - var childFns = wrapChildren(tree, 0); - - queueRunnerFactory({ - queueableFns: childFns, - userContext: tree.sharedUserContext(), - onException: function() { - tree.onException.apply(tree, arguments); - }, - onComplete: done - }); - }; - - function runnableIndex(id) { - for (var i = 0; i < runnableIds.length; i++) { - if (runnableIds[i] === id) { - return i; - } - } - } - - function processNode(node, parentExcluded) { - var executableIndex = runnableIndex(node.id); - - if (executableIndex !== undefined) { - parentExcluded = false; - } - - if (!node.children) { - var excluded = parentExcluded || excludeNode(node); - stats[node.id] = { - excluded: excluded, - willExecute: !excluded && !node.markedPending, - segments: [ - { - index: 0, - owner: node, - nodes: [node], - min: startingMin(executableIndex), - max: startingMax(executableIndex) - } - ] - }; - } else { - var hasExecutableChild = false; - - var orderedChildren = orderChildren(node); - - for (var i = 0; i < orderedChildren.length; i++) { - var child = orderedChildren[i]; - - processNode(child, parentExcluded); - - if (!stats.valid) { - return; - } - - var childStats = stats[child.id]; - - hasExecutableChild = hasExecutableChild || childStats.willExecute; - } - - stats[node.id] = { - excluded: parentExcluded, - willExecute: hasExecutableChild - }; - - segmentChildren(node, orderedChildren, stats[node.id], executableIndex); - - if (!node.canBeReentered() && stats[node.id].segments.length > 1) { - stats = { valid: false }; - } - } - } - - function startingMin(executableIndex) { - return executableIndex === undefined ? defaultMin : executableIndex; - } - - function startingMax(executableIndex) { - return executableIndex === undefined ? defaultMax : executableIndex; - } - - function segmentChildren( - node, - orderedChildren, - nodeStats, - executableIndex - ) { - var currentSegment = { - index: 0, - owner: node, - nodes: [], - min: startingMin(executableIndex), - max: startingMax(executableIndex) - }, - result = [currentSegment], - lastMax = defaultMax, - orderedChildSegments = orderChildSegments(orderedChildren); - - function isSegmentBoundary(minIndex) { - return ( - lastMax !== defaultMax && - minIndex !== defaultMin && - lastMax < minIndex - 1 - ); - } - - for (var i = 0; i < orderedChildSegments.length; i++) { - var childSegment = orderedChildSegments[i], - maxIndex = childSegment.max, - minIndex = childSegment.min; - - if (isSegmentBoundary(minIndex)) { - currentSegment = { - index: result.length, - owner: node, - nodes: [], - min: defaultMin, - max: defaultMax - }; - result.push(currentSegment); - } - - currentSegment.nodes.push(childSegment); - currentSegment.min = Math.min(currentSegment.min, minIndex); - currentSegment.max = Math.max(currentSegment.max, maxIndex); - lastMax = maxIndex; - } - - nodeStats.segments = result; - } - - function orderChildSegments(children) { - var specifiedOrder = [], - unspecifiedOrder = []; - - for (var i = 0; i < children.length; i++) { - var child = children[i], - segments = stats[child.id].segments; - - for (var j = 0; j < segments.length; j++) { - var seg = segments[j]; - - if (seg.min === defaultMin) { - unspecifiedOrder.push(seg); - } else { - specifiedOrder.push(seg); - } - } - } - - specifiedOrder.sort(function(a, b) { - return a.min - b.min; - }); - - return specifiedOrder.concat(unspecifiedOrder); - } - - function executeNode(node, segmentNumber) { - if (node.children) { - return { - fn: function(done) { - var onStart = { - fn: function(next) { - nodeStart(node, next); - } - }; - - queueRunnerFactory({ - onComplete: function() { - var args = Array.prototype.slice.call(arguments, [0]); - node.cleanupBeforeAfter(); - nodeComplete(node, node.getResult(), function() { - done.apply(undefined, args); - }); - }, - queueableFns: [onStart].concat(wrapChildren(node, segmentNumber)), - userContext: node.sharedUserContext(), - onException: function() { - node.onException.apply(node, arguments); - } - }); - } - }; - } else { - return { - fn: function(done) { - node.execute( - done, - stats[node.id].excluded, - failSpecWithNoExpectations - ); - } - }; - } - } - - function wrapChildren(node, segmentNumber) { - var result = [], - segmentChildren = stats[node.id].segments[segmentNumber].nodes; - - for (var i = 0; i < segmentChildren.length; i++) { - result.push( - executeNode(segmentChildren[i].owner, segmentChildren[i].index) - ); - } - - if (!stats[node.id].willExecute) { - return result; - } - - return node.beforeAllFns.concat(result).concat(node.afterAllFns); - } - } - - return TreeProcessor; -}; - -getJasmineRequireObj().UserContext = function(j$) { - function UserContext() {} - - UserContext.fromExisting = function(oldContext) { - var context = new UserContext(); - - for (var prop in oldContext) { - if (oldContext.hasOwnProperty(prop)) { - context[prop] = oldContext[prop]; - } - } - - return context; - }; - - return UserContext; -}; - -getJasmineRequireObj().version = function() { - return '3.5.0'; -}; diff --git a/lib/jasmine-3.5.0/jasmine_favicon.png b/lib/jasmine-3.5.0/jasmine_favicon.png deleted file mode 100644 index 3b84583be4b9d5ae9cd5cae07b2dbaa5ebb0ad1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1486 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0VDb;}332@o1PuQh8X8uGu4-^- zn3*=SA+%wV=cI;&hMB$%-Lc(MLmN8%IwwUpbcA;F2Q;)twND9bn-tpC9oR4-vb8I; zp+Bg#FSKP+P(yD-%f!%zo}iZgh=%Ua=KkP@iNVbiLYsSn8~VeW`+}P$1~&ACHcbd_ z=nZb_32o{NZkZ6&1k^hrxT!a&r8lIdAIJ@9nh?|iRMsET+#A%`AKKg-(%2K)*cZ|~ zA-J&*$PEUH08MM`4Q=iVY3vVfhN$TUscGs5sR8P31X|G_+SnTcv<0XVC=Rr!u|K4# zHyCJU6UYRR;%2BtKv^I=q#2|DECn_k@wXU|=@ zeD&J(8#iy=zH|5fgNKiwJbm`!<*V0k-oF3v@zdvTKYsrD^Y>rGdNDU(R>|^oaSW-5 z%f0Y2x+hSk{p0&HA;E60Oq1S3r7U;(X3MH#?W9nxXzk)srlC4P;cZYe&v*G}mgi%< ze(bTl{@&_)cX8b-kvX%ff9D22e*M~7edm|;|Jb8m2JBzkzKiSBKR0n*?XSyM6fxZY zJ4bb;vGKRiKP(ztq3sJx9iq$Re`-EEQU0KE$sdyqayzp6H-7x+oGKZ_6;hQ_Y|p&y z7o`N7g@ z8Yl1HKL;mFo4BdxljF1}KbfMR6nNdLyPnEap1MqBdI?{g$L58$P8+wftLX5R70)7n`#pwItnbma$w{%`M(`wpsu2rJ60rdGCc> z+~lm)viMYM`=uXwK_$`#_UtRZMO=2-IV)l2vc~)doyPvg-RmxtACQ#v{7}5$&isV+ zPws~n?@yNGy#H1=vTI?;CAl9~9#VgqJ+7`4y~R+Wyj0U+){?lm9r6mtf0gl_VmUW^ z%eje%?jM%^eLuUg#ybXaQM{yQy&8UgiQ`HQ+=iTpjfd0iJ@ ssyFi&dF4%9dEry;pNN)Q>$jg_dr3r;PHA*CFc&d+y85}Sb4q9e0J812W&i*H diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..13566cd --- /dev/null +++ b/manifest.json @@ -0,0 +1,23 @@ +{ + "name": "Werewolf Utility", + "short_name": "Werewolf", + "icons": [ + { + "src": "/client/favicon_package/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/client/favicon_package/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#000000", + "background_color": "#000000", + "start_url": "/?source=pwa", + "display": "fullscreen", + "display_override": ["fullscreen", "standalone", "minimal-ui"], + + "description": "A utility to deal Werewolf cards and run games in any setting, on any device." +} diff --git a/package.json b/package.json index 990b59f..3b48b62 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "description": "", "main": "index.js", "scripts": { - "test": "jasmine" + "start": "node server/main.js", + "test": "jasmine && node browsertest.js openBrowser socket", + "test:unit": "jasmine", + "test:e2e": "node browsertest.js" }, "author": "", "license": "ISC", diff --git a/server-helper.js b/server-helper.js deleted file mode 100644 index 2b7a0db..0000000 --- a/server-helper.js +++ /dev/null @@ -1,206 +0,0 @@ -const debugMode = Array.from(process.argv.map( (arg)=>arg.trim().toLowerCase() )).includes("debug"); -const LOGGER = require("./javascript/modules/logger")(debugMode); - -module.exports = class { - - constructor(CronJob) { - // TODO: do better than a plain object - this.activeGames = {}; - this.timers = {}; - - // cron job for periodically clearing finished games - const scope = this; - this.job = new CronJob('0 0 */2 * * *', function() { - console.log(scope.activeGames); - for (const key in scope.activeGames) { - if (scope.activeGames.hasOwnProperty(key) && (Math.abs((new Date()) - (new Date(scope.activeGames[key].startTime))) / 36e5) >= 2) { - delete scope.activeGames[key]; - } - } - console.log("Games pruned at: " + (new Date().toDateString()) + " " + (new Date()).toTimeString()); - }); - console.log("cron job created"); - this.job.start(); - } - - killPlayer(id, code) { - let game = this.findGame(code); - if (game) { - let player = game.players.find((player) => player.id === id); - if (player) { - player.dead = true; - player.deadAt = new Date().toJSON(); - game.killedPlayer = player.name; - game.lastKilled = player.id; - game.killedRole = player.card.role; - game.message = game.reveals - ? player.name + ", a " + player.card.role + ", was killed!" - : player.name + " has died!"; - console.log(game.message); - if (player.card.isTypeOfWerewolf && game.hasDreamWolf) { - this.activateDreamWolvesIfNeeded(game); - } - const winCheck = module.exports.teamWon(game); - if (winCheck === "wolf") { - console.log("wolves won the game!"); - game.winningTeam = "wolf"; - game.status = "ended"; - } - if (winCheck === "village") { - console.log("village won the game!"); - game.winningTeam = "village"; - game.status = "ended"; - } - } - } - } - - endGameDueToTimeExpired(code) { - if (this.timers[code]) { - clearInterval(this.timers[code]); - } - let game = this.findGame(code); - if (game) { - LOGGER.debug("Game " + code + " has ended due to expired timer."); - game.winningTeam = "wolf"; - game.status = "ended"; - } - } - - clearGameTimer(code) { - if (this.timers[code]) { - clearInterval(this.timers[code]); - LOGGER.debug("game paused and timer cleared for " + code); - } - } - - resumeGame(code) { - let game = this.findGame(code); - if (game) { - game.paused = false; - let newTime = new Date(game.endTime).getTime() + (new Date().getTime() - new Date(game.pauseTime).getTime()); - let newDate = new Date(game.endTime); - newDate.setTime(newTime); - game.endTime = newDate.toJSON(); - LOGGER.debug("Game " + code + " timer has been unpaused, starting clock anew..."); - this.startGameClock(code, newDate - Date.now()); - } - } - - pauseGame(code) { - let game = this.findGame(code); - if (game) { - game.pauseTime = (new Date()).toJSON(); - game.paused = true; - this.clearGameTimer(code); - } - } - - startGameClock(code, time) { - LOGGER.debug("timer started for game " + code); - let moduleScope = this; - if (this.timers[code]) { - clearInterval(this.timers[code]); - } - this.timers[code] = setInterval(function() { - moduleScope.endGameDueToTimeExpired(code) - }, time); - } - - startGame(gameData) { - let game = this.findGame(gameData.code); - if (game) { - LOGGER.debug("game " + gameData.code + " started"); - game.status = "started"; - game.players = gameData.players; - if (game.time) { - let d = new Date(); - d.setMinutes(d.getMinutes() + parseInt(game.time)); - game.endTime = d.toJSON(); - this.startGameClock(gameData.code, game.time * 60 * 1000); // provided time is in minutes - } - } - } - - requestState(data, socket) { - const game = this.findGame(data.code); - if (game && Object.keys(socket.rooms).includes(data.code) === false) { - socket.join(data.code, function() { - socket.emit('state', game); - }); - } else { - if (game) { - socket.emit('state', game); - } - } - } - - joinGame(playerInfo, socket) { - - const game = this.findGame(playerInfo.code); - if (game && game.players.length < game.size && !game.players.find((player) => player.id === playerInfo.id)) { - game.players.push({name: playerInfo.name, id: playerInfo.id}); - console.log(playerInfo.name + " joined the game!"); - socket.emit('success'); - } else { - if (game && game.players.length === game.size) { - socket.emit("joinError", "This game is full - sorry!"); - } else { - socket.emit("joinError", "No game found"); - } - } - } - - newGame(game, onSuccess) { - this.activeGames[game.accessCode] = game; - this.activeGames[game.accessCode].startTime = (new Date()).toJSON(); - console.log("Game created at " + (new Date().toDateString()) + " " + (new Date()).toTimeString()); - onSuccess(); - } - - findGame(code) { - return this.activeGames[Object.keys(this.activeGames).find((key) => key === code)]; - } - - // If there are multiple dream wolves, convert them all. - activateDreamWolvesIfNeeded(game) { - game.players.forEach((player) => { - if (!player.dead && player.card.role === "Dream Wolf") { - player.card.isTypeOfWerewolf = true; - console.log("player " + player.name + " was converted to a wolf!"); - } - }) - } - - static teamWon(game) { - let wolvesAlive = 0; - let villagersAlive = 0; - let totalAlive = 0; - let hunterAlive = false; - for (const player of game.players) { - if (!player.card.isTypeOfWerewolf && !player.dead) { - villagersAlive ++; - } - if (player.card.isTypeOfWerewolf && !player.dead) { - wolvesAlive ++; - } - if (player.card.role === "Hunter" && !player.dead) { - hunterAlive = true; - } - if (!player.dead) { - totalAlive ++; - } - } - if (wolvesAlive === 0) { - return "village" - } - if ((wolvesAlive >= villagersAlive) && (totalAlive !== 2)) { - return "wolf"; - } - if (totalAlive === 2) { - return hunterAlive ? "village" : "wolf" - } - return false; - } -}; - diff --git a/server.js b/server.js deleted file mode 100644 index ae6f96f..0000000 --- a/server.js +++ /dev/null @@ -1,79 +0,0 @@ -// Dependencies -const express = require('express'); -const http = require('http'); -const socketIO = require('socket.io'); -const app = express(); -const server = http.Server(app); -const io = socketIO(server); -const ServerHelper = require('./server-helper.js'); -const secure = require('express-force-https'); -app.use(secure); - -// Link websocket interaction functions, separated to aid testing -const CronJob = require('cron').CronJob; -const serverHelper = new ServerHelper(CronJob); - -const debugMode = Array.from(process.argv.map( (arg)=>arg.trim().toLowerCase() )).includes("debug"); -const LOGGER = require("./javascript/modules/logger")(debugMode); - -app.set('port', 5000); - -app.use('/javascript', express.static(__dirname + '/javascript')); // Routing -app.use('/assets', express.static(__dirname + '/assets')); // Routing -app.use('/stylesheets', express.static(__dirname + '/stylesheets')); // Routing -app.use('/node_modules/socket.io-client', express.static(__dirname + '/node_modules/socket.io-client')); // Routing -app.get('', function(request, response) { - response.sendFile(__dirname + '/views/index.html'); -}); - -app.get('/learn', function(request, response) { - response.sendFile(__dirname + '/views/learn.html'); -}); - -app.get('/faq', function(request, response) { - response.sendFile(__dirname + '/views/faq.html'); -}); - -app.get('/create', function(request, response) { - response.sendFile(__dirname + '/views/create_game.html'); -}); - -app.get('/join', function(request, response) { - response.sendFile(__dirname + '/views/join_game.html'); -}); - -app.get('/:code', function(request, response) { - response.sendFile(__dirname + '/views/game.html'); -}); - -// Starts the server. -server.listen(process.env.PORT || 5000, function() { - console.log('Starting server on port 5000'); -}); - -// Add the WebSocket handlers -io.on('connection', function(socket) { - socket.on('newGame', function(game, onSuccess) { - serverHelper.newGame(game, onSuccess); - }); - socket.on('joinGame', function(playerInfo) { - serverHelper.joinGame(playerInfo, socket); - }); - // send the game state to the client that requested it - socket.on('requestState', function(data) { - serverHelper.requestState(data, socket); - }); - socket.on('startGame', function(gameData) { - serverHelper.startGame(gameData); - }); - socket.on('pauseGame', function(code) { - serverHelper.pauseGame(code); - }); - socket.on('resumeGame', function(code) { - serverHelper.resumeGame(code); - }); - socket.on('killPlayer', function(id, code) { - serverHelper.killPlayer(id, code); - }); -}); - diff --git a/server/main.js b/server/main.js new file mode 100644 index 0000000..4a494b6 --- /dev/null +++ b/server/main.js @@ -0,0 +1,94 @@ +const express = require('express'); +const http = require('http'); +const https = require('https'); +const path = require('path'); +const fs = require('fs'); +const socketIO = require('socket.io'); +const app = express(); +let main; +const bodyParser = require('body-parser'); +// const GameManager = require('./modules/managers/GameManager.js'); +// const QueueManager = require('./modules/managers/QueueManager'); + +app.use(bodyParser.json()); // to support JSON-encoded bodies +app.use(bodyParser.urlencoded({ // to support URL-encoded bodies + extended: true +})); + +const debugMode = Array.from(process.argv.map((arg) => arg.trim().toLowerCase())).includes('debug'); +const localServer = Array.from(process.argv.map((arg) => arg.trim().toLowerCase())).includes('local'); +const useHttps = Array.from(process.argv.map((arg) => arg.trim().toLowerCase())).includes('https'); +const port = process.env.PORT || Array + .from(process.argv.map((arg) => { + return arg.trim().toLowerCase(); + })) + .filter((arg) => { + return /port=\d+/.test(arg); + }) + .map((arg) => { + return /port=(\d+)/.exec(arg)[1]; + })[0] || 5000; +const logger = require('./modules/Logger')(debugMode); + +if (localServer) { + logger.log('starting main in LOCAL mode.'); + if (useHttps && fs.existsSync(path.join(__dirname, './certs/localhost-key.pem')) && fs.existsSync(path.join(__dirname, './certs/localhost.pem'))) { + const key = fs.readFileSync(path.join(__dirname, './certs/localhost-key.pem'), 'utf-8'); + const cert = fs.readFileSync(path.join(__dirname, './certs/localhost.pem'), 'utf-8'); + logger.log('local certs detected. Using HTTPS.'); + main = https.createServer({ key, cert }, app); + logger.log(`navigate to https://localhost:${port}`); + } else { + logger.log('https not specified or no local certs detected. Using HTTP.'); + main = http.createServer(app); + logger.log(`navigate to http://localhost:${port}`); + } +} else { + logger.log('starting main in PRODUCTION mode. WARNING: This should not be used for local development.'); + main = http.createServer(app); + const secure = require('express-force-https'); + app.use(secure); +} + +const io = socketIO(main); + +app.set('port', port); + +/* Instantiate the singleton game manager */ +//const gameManager = new GameManager(logger).getInstance(); + +/* Instantiate the singleton queue manager */ +//const queueManager = new QueueManager(matchmaking, logger).getInstance(); + + +/* api endpoints */ +// const games = require('./api/GamesAPI'); +// const words = require('./api/WordsAPI'); +// app.use('/api/games', games); +// app.use('/api/words', words); + +/* serve all the app's pages */ +app.use('/manifest.json', (req, res) => { + res.sendFile(path.join(__dirname, '../manifest.json')); +}); + +app.use('/favicon.ico', (req, res) => { + res.sendFile(path.join(__dirname, '../client/favicon_package/favicon.ico')); +}); + +const router = require('./routes/router'); +const faviconRouter = require('./routes/favicon-router'); +const staticRouter = require('./routes/static-router'); + +app.use('', router); +app.use('', staticRouter); +app.use('', faviconRouter); + +app.use(function (req, res) { + res.sendFile(path.join(__dirname, '../client/views/404.html')); +}); + +// Starts the main. +main.listen(port, function () { + logger.log(`Starting server on port ${port} http://localhost:${port}` ); +}); diff --git a/javascript/modules/logger.js b/server/modules/Logger.js similarity index 76% rename from javascript/modules/logger.js rename to server/modules/Logger.js index c49a1f4..62a30ba 100644 --- a/javascript/modules/logger.js +++ b/server/modules/Logger.js @@ -1,17 +1,17 @@ -module.exports = function(debugMode = false){ +module.exports = function (debugMode = false) { return { - log(message = "") { + log (message = '') { const now = new Date(); console.log('LOG ', now.toGMTString(), ': ', message); }, - debug(message = "") { + debug (message = '') { if (!debugMode) return; const now = new Date(); console.debug('DEBUG ', now.toGMTString(), ': ', message); }, - error(message = "") { + error (message = '') { if (!debugMode) return; const now = new Date(); console.error('ERROR ', now.toGMTString(), ': ', message); diff --git a/server/routes/favicon-router.js b/server/routes/favicon-router.js new file mode 100644 index 0000000..bb101f0 --- /dev/null +++ b/server/routes/favicon-router.js @@ -0,0 +1,18 @@ +const express = require('express'); +const faviconRouter = express.Router(); +const path = require('path'); +const checkIfFileExists = require("./util"); + +faviconRouter.use('/client/favicon_package/*', (req, res) => { + let filePath = path.join(__dirname, ('../../' + req.baseUrl)); + let extension = path.extname(filePath); + checkIfFileExists(filePath).then((fileExists) => { + if (fileExists && (extension === '.png' || extension === '.ico' || extension === '.svg' || extension === 'xml')) { + res.sendFile(filePath); + } else { + res.sendStatus(404); + } + }); +}); + +module.exports = faviconRouter; diff --git a/server/routes/router.js b/server/routes/router.js new file mode 100644 index 0000000..e523e23 --- /dev/null +++ b/server/routes/router.js @@ -0,0 +1,13 @@ +const express = require('express'); +const router = express.Router(); +const path = require('path'); + +router.get('/', function (request, response) { + response.sendFile(path.join(__dirname, '../../client/views/home.html')); +}); + +router.get('/create', function (request, response) { + response.sendFile(path.join(__dirname, '../../client/views/create.html')); +}); + +module.exports = router; diff --git a/server/routes/static-router.js b/server/routes/static-router.js new file mode 100644 index 0000000..1a006ca --- /dev/null +++ b/server/routes/static-router.js @@ -0,0 +1,66 @@ +const express = require('express'); +const staticRouter = express.Router(); +const path = require('path'); +const checkIfFileExists = require("./util"); + +staticRouter.use('/styles/*', (req, res) => { + let filePath = path.join(__dirname, ('../../client/' + req.baseUrl)); + let extension = path.extname(filePath); + checkIfFileExists(filePath).then((fileExists) => { + if (fileExists && (extension === '.css')) { + res.sendFile(filePath); + } else { + res.sendStatus(404); + } + }); +}); + +staticRouter.use('/client/webfonts/*', (req, res) => { + let filePath = path.join(__dirname, ('../' + req.baseUrl)); + let extension = path.extname(filePath); + checkIfFileExists(filePath).then((fileExists) => { + if (fileExists && (extension === '.ttf' || extension === '.woff2')) { + res.sendFile(filePath); + } else { + res.sendStatus(404); + } + }); +}); + +staticRouter.use('/client/images/*', (req, res) => { + let filePath = path.join(__dirname, ('../' + req.baseUrl)); + let extension = path.extname(filePath); + checkIfFileExists(filePath).then((fileExists) => { + if (fileExists && (extension === '.svg' || extension === '.png' || extension === '.jpg')) { + res.sendFile(filePath); + } else { + res.sendStatus(404); + } + }); +}); + +staticRouter.use('/scripts/*', (req, res) => { + let filePath = path.join(__dirname, ('../../client/' + req.baseUrl)); + let extension = path.extname(filePath); + checkIfFileExists(filePath).then((fileExists) => { + if (fileExists && (extension === '.js')) { + res.sendFile(filePath); + } else { + res.sendStatus(404); + } + }); +}); + +staticRouter.use('/views/*', (req, res) => { + let filePath = path.join(__dirname, ('../../client/' + req.baseUrl)); + let extension = path.extname(filePath); + checkIfFileExists(filePath).then((fileExists) => { + if (fileExists && (extension === '.html')) { + res.sendFile(filePath); + } else { + res.sendFile('../views/404.html'); + } + }); +}); + +module.exports = staticRouter; diff --git a/server/routes/util.js b/server/routes/util.js new file mode 100644 index 0000000..56b38c7 --- /dev/null +++ b/server/routes/util.js @@ -0,0 +1,9 @@ +const fs = require('fs'); + +function checkIfFileExists(file) { + return fs.promises.access(file, fs.constants.F_OK) + .then(() => true) + .catch((e) => { console.error(e); return false }); +} + +module.exports = checkIfFileExists; diff --git a/spec/support/jasmine.json b/spec/support/jasmine.json deleted file mode 100644 index f004bf2..0000000 --- a/spec/support/jasmine.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "spec_dir": "spec/unit", - "spec_files": [ - "**/*[sS]pec.js" - ], - "helpers": [ - "helpers/**/*.js" - ], - "stopSpecOnExpectationFailure": false, - "random": true -} \ No newline at end of file diff --git a/spec/unit/ServerSpec.js b/spec/unit/ServerSpec.js deleted file mode 100644 index d81bf95..0000000 --- a/spec/unit/ServerSpec.js +++ /dev/null @@ -1,65 +0,0 @@ -const ServerHelper = require('../../server-helper.js'); -const CronJob = require('cron').CronJob; - -describe('server helper', function() { - - let serverHelper; - - beforeEach(function(){ - serverHelper = new ServerHelper(CronJob); - }); - - it('should be instantiated with a cron job', function() { - - expect(serverHelper.job).toBeDefined(); - expect(serverHelper.job instanceof CronJob).toBeTrue(); - - }); - - it('should find a specific game by code in activeGames', function() { - - const expectedGame = {"startTime": 12345}; - serverHelper.activeGames = { - "somegame": {"startTime": 24156}, - "expected": expectedGame, - "filler": {"eh": "i dunno"}, - "wrong": {"this is": -Infinity} - }; - - expect(serverHelper.findGame("expected")).toBe(expectedGame); - - }); - - it('should create a new game', function(){ - - const spy = jasmine.createSpy("spy"); - const game = {"accessCode": "werewolf"}; - - serverHelper.newGame(game,spy); - - expect(serverHelper.findGame("werewolf")).toBeDefined(); - expect(serverHelper.findGame("werewolf").accessCode).toEqual("werewolf"); - expect(spy).toHaveBeenCalled(); - }); - - xdescribe('should handle players joining', function() { - - const socket = { - "emit": (value) => { - return value; - } - }; - - it('successful adds a player to game', function() { - - }); - - it('rejects a player when the game is full', function() { - - }); - - it('rejects a player when game is not found', function() { - - }); - }); -}); \ No newline at end of file diff --git a/stylesheets/styles.css b/stylesheets/styles.css deleted file mode 100644 index 88fa8ab..0000000 --- a/stylesheets/styles.css +++ /dev/null @@ -1,1918 +0,0 @@ -@media(max-width: 750px) { - .app-header { - font-size: 45px; - margin: 2em 0 0.5em 0; - } - - .app-header-secondary { - font-size: 35px; - margin: 0.3em 0; - } - - - #game-container #card-container { - min-width: 20em; - } - - h3 { - font-size: 20px; - } - - textarea { - font-size: 14px; - } - - #game-container { - flex-direction: column; - } - - #app-content { - width: 92%; - } - - .card { - padding: 0.5em; - width: 8em; - height: 11.5em; - font-size: 0.9em; - } - - .custom-role-edit { - font-size: 15px; - } - - .compact-card, .compact-card-header { - width: 9em; - } - - #card-select-header #role-view-changer img { - width: 20px; - } - - #role-view-changer div { - font-size: 14px; - } - - .card-header > p { - right: 7px; - top: 19px; - } - - .card-image { - top: 25%; - left: 12%;; - } - - .disclaimer, .custom-card h1 { - font-size: 15px; - } - - .modal { - width: 92%; - } - - .modal-content { - width: 90%; - } - - .modal-body { - padding: 1em; - } - - .modal-header { - padding: 0 1em; - } - - .modal-role { - margin-right: 2em; - } - - #learn-container, #faq-container { - margin: 3em 1em; - } - - .app-title img { - width: 100%; - } - - #card-select-header, #game-start { - align-items: center; - justify-content: center; - } - - #join-game-container { - display: flex; - flex-direction: column - } - - #join-game-container input[type=text] { - width: 10em; - height: 1.3em; - font-size: 1em; - } - - #join-game-container label { - font-size: 1.3em; - } - - #join-game-container h2 { - font-size: 2.5em; - margin-bottom: 1em; - } - - #join-game-container button, #join-game-container a { - width: 45%; - max-width: 15em; - margin-right: 0.5em; - } - - #join-game-container a button { - width: 100%; - } - - #overlay { - justify-content: center; - align-items: center; - } - - #killed-name { - padding-top: 0; - margin: 0 0.5em; - font-size: 2em; - } - - #game-container .alive-player .tooltiptext { - width: 12em; - right: 45%; - bottom: 80%; - font-size: 12px; - } - -} - -@media(min-width: 750.01px) { - .app-header { - font-size: 70px; - margin: 0.5em 0; - } - - #card-select-header #role-view-changer img { - width: 25px; - } - - .card-header > p { - right: 17px; - top: 30px; - } - - textarea { - font-size: 1.1em; - } - - #game-container #card-container { - min-width: 25em; - } - - .app-header-secondary { - font-size: 70px; - margin: 0.3em 0; - } - - .card { - width: 7em; - height: 10.5em; - padding: 1em; - font-size: 1.1em; - margin: 0.5em; - } - - .compact-card, .compact-card-header { - width: 11em; - } - - .custom-role-edit { - font-size: 19px; - } - - .disclaimer, .custom-card h1 { - font-size: 18px; - } - - h3 { - font-size: 30px; - } - - #app-content { - width: 80%; - } - - #learn-container, #faq-container { - margin: 3em; - } - - .modal-body { - padding: 2em 4em; - } - - .modal { - width: 92%; - } - - .modal-content { - width: 90%; - } - - #custom-card-modal .modal-content, #edit-custom-roles-modal .modal-content { - width: 50%; - } - - .modal-header { - padding: 0 3em; - } - - .modal-role { - margin-right: 3em; - } - - .app-title img { - width: 35em; - } - - #main-buttons a, #main-buttons button { - max-width: 15em; - } - - #card-select { - justify-content: flex-start; - } - - .card-image { - top: 29%; - left: 20%; - } - - #join-game-container input[type=text] { - width: 17em; - height: 1.7em; - font-size: 1.1em; - } - - #join-game-container label { - font-size: 1.3em; - } - - #join-game-container h2 { - font-size: 4em; - } - - #join-game-container button, #join-game-container a button { - width: 15em; - padding: 1.5em; - margin-right: 1em; - } - - #killed-name { - padding-top: 2em; - font-size: 2.5em; - margin: 0; - } - - #overlay { - justify-content: flex-start; - align-items: center; - } - - #game-container .alive-player .tooltiptext { - width: 15em; - font-size: 14px; - right: 106%; -/* bottom: -36%;*/ - } - -} - -@media(max-width: 850px) { - #card-select-header span:nth-child(2) { - flex-direction: column; - } - - #card-select-header span:nth-child(2) > div { - margin: 0.5em 0; - } -} - -@media(max-width: 1225px) and (min-width: 750.01px) { - #custom-card-modal .modal-content, #edit-custom-roles-modal .modal-content { - width: 75%; - } -} - -@font-face { - font-family: 'diavlo'; - src: url("../assets/fonts/Diavlo_LIGHT_II_37.otf") format("opentype"); -} - -@font-face { - font-family: 'diavlo-bold'; - src: url("../assets/fonts/Diavlo_BOOK_II_37.otf") format("opentype"); -} - -@font-face { - font-family: 'sitewide-sans-serif'; - src: url("../assets/fonts/manrope-light.otf") format("opentype"); -} - -html, body { - margin: 0 auto; - height: 100%; - color: #bfb8b8; - font-family: 'sitewide-sans-serif', sans-serif; - background-color: #23282b !important; -} - -@keyframes fadein { - from { - opacity: 0; - - } - to { - opacity: 1; - } -} - -@keyframes slide-fade { - from { - opacity: 0; - transform: translateX(80px) - - } - to { - opacity: 1; - transform: translateX(0); - } -} - -@keyframes slide-fade-remove { - from { - opacity: 1; - transform: translateX(0px) - - } - to { - opacity: 0; - transform: translateX(-80px); - } -} - -#app-content { - text-align: center; - margin: 0 auto; - position: relative; -} - -#landing-container { - width: 100%; - height: 100%; - position: relative; - text-align: center; - background: linear-gradient(0deg, rgba(35,40,43,0.7959558823529411) 18%, rgba(131,131,131,0.6222864145658263) 100%); -} - -.app-title .app-header { - width: 6em; - display: flex; - font-family: diavlo-bold, sans-serif; -} - -.app-title { - display: flex; - align-items: center; - flex-direction: column; - line-height: 0.95; -} - -#footer { - position: absolute; - bottom: 0; - width: 100%; - margin-bottom: 1.5em; - font-size: 0.75em; - text-align: center; - align-items: center; - display: flex; - flex-direction: column; - justify-content: center; -} - -.bmc-button span:nth-child(1) { - font-size: 20px; -} - -.bmc-button { - line-height: 35px !important; - height:40px !important; - text-decoration: none !important; - display:inline-flex !important; - align-items: center !important; - margin-bottom: 3em !important; - color:#ffffff !important; - background-color:#FF5F5F !important; - border-radius: 5px !important; - border: 1px solid transparent !important; - padding: 7px 15px 7px 10px !important; - font-size: 15px !important; - box-shadow: 0px 1px 2px rgba(190, 190, 190, 0.5) !important; - -webkit-box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important; - font-family: sitewide-sans-serif, sans-serif !important; - -webkit-box-sizing: border-box !important; - box-sizing: border-box !important; -} - -.bmc-button:hover, .bmc-button:active, .bmc-button:focus { - -webkit-box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important; - text-decoration: none !important;box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important; - opacity: 0.85 !important;color:#ffffff !important; -} - -#footer div { - display: flex; - align-items: center; -} - -#footer p { - margin: 0 0 0 1em; - color: lightgray; -} - -#footer a { - color: #d13d3d; - text-decoration: #d13d3d; - cursor: pointer; - margin: 0 0 0 1em; -} - -#footer a:hover { - color: #333243; -} - -.app-header, .app-header-secondary { - font-family: 'diavlo', sans-serif; - filter: drop-shadow(2px 2px 4px black); - color: #992626; -} - -h3 { - color: gray; -} - -button { - font-family: 'sitewide-sans-serif', sans-serif; -} - -.error { - border: 1px solid #bd2a2a !important; - background-color: rgba(189, 42, 42, 0.1) !important; -} - -#join-error, #name-error, #size-error, #some-error { - color: #bd2a2a; - font-size: 0.9em; - height: 2em; - margin: 0; - font-weight: bold; -} - -#join-game-container span { - display: flex; - flex-direction: column; -} - -#join-game-container div { - width: 100%; - display: flex; - justify-content: center; -} - -#join-game-container form { - margin-bottom: 2em; -} - -#join-game-container input[type=text], #create-game-container input[type=text] { - margin-right: 0.5em; - margin-bottom: 0; -} - -.app-btn { - background-color: #992626; - box-shadow: 2px 3px 8px rgba(0, 0, 0, 0.4); - color: #bfb8b8; - border: none; - width: 10em; - padding: 1em; - border-radius: 3px; - margin-bottom: 1em; -} - -#create-game-container .app-btn { - display: flex; - align-items: center; - justify-content: center; -} - -.app-btn img, .app-btn-secondary img { - width: 15px; -} - -img.custom-role-button { - width: 25px; -} - -.custom-role-edit { - display: flex; - width: 100%; - flex-direction: column; - justify-content: space-around; - align-items: center; - background-color: black; - border-radius: 5px; - margin: 0.3em; -} - -.edit-role-form { - background-color: #1a1a1a; - padding: 1em; -} - -.custom-role-edit > div:nth-child(1) { - display: flex; - width: 100%; - justify-content: space-around; -} - -.custom-role-edit > div:nth-child(1) div { - display: flex; - align-items: center; -} - -.custom-role-edit > div:nth-child(2) { - display: flex; - width: 100%; -} - -.custom-role-edit p { - text-overflow: ellipsis; - overflow-x: hidden; - white-space: nowrap; - max-width: 7em; -} - -.custom-role-edit div > img { - margin: 0 1em; - cursor: pointer; - user-select: none; -} - -.custom-role-edit div > img:hover { - filter: brightness(70%); -} - -#import-file-input { - display: none; -} - -.card, .compact-card { - text-align: center; - cursor: pointer; - position: relative; - margin: 0.3em; - background-color: #393a40; - color: gray; - box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.4); - border-radius: 3px; - user-select: none; -} - -.compact-card { - display: flex; - height: max-content; - position: relative; -} - -.compact-card h1 { - display: flex; - align-items: center; - font-size: 14px; - margin: 0 10px 0 10px; -} - -.compact-card .card-role { - color: #bfb8b8; - margin: 0; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - max-width: 8em; -} - -.compact-card-right p { - font-size: 40px; - margin: 0 10px 0 0; - display: flex; - justify-content: flex-end; -} - -.compact-card-left p { - font-size: 40px; - margin: 0 0 0 10px; - display: flex; - justify-content: flex-start; -} - -.compact-card-left, .compact-card-right { - width: 50%; -} - -.compact-card .card-quantity { - text-align: center; - margin: 0; -} - -.compact-card-header { - position: absolute; - flex-direction: column; - align-items: center; - justify-content: center; - display: flex; - top: 0; - right: 0; - pointer-events: none; - text-align: center; -} - -.card-werewolf { - border: 1px solid red; -} - -.custom-card { - border: 1px dashed whitesmoke; - background-color: transparent; -} - -.custom-card div { - font-size: 40px; - color: whitesmoke; - margin-right: 5px; -} - -.custom-card h1 { - color: whitesmoke; -} - -.card:hover, .compact-card:hover { - background-color: #55565c; -} - -.card-top { - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: space-between; - height: 50%; -} - -.card-bottom { - display: flex; - display: -webkit-flex; - justify-content: flex-end; - height: 50%; - align-items: flex-end; -} - -.card-top p { - margin: 0; - font-size: 2.5em; - pointer-events: none; - line-height: 1; - color: #bfb8b8; -} - -.card-top p.card-role { - font-size: 1em; - height: 1.2em; - pointer-events: none; - max-width: 7em; - white-space: nowrap; - overflow-x: hidden; - text-overflow: ellipsis; - overflow-y: visible; -} - -.card-header { - display: flex; - width: 100%; - justify-content: space-between; - align-items: flex-start; - pointer-events: none; -} - -.card-header > p { - position: absolute; -} - -.card-bottom p { - pointer-events: none; - line-height: 1; - font-size: 3em; - margin: 0; - color: #bfb8b8; -} - -.card-image { - position: absolute; - pointer-events: none; -} - -.card-image-custom { - width: 50px; - height: 50px; - padding: 25px; -} - -.card-quantity { - pointer-events: none; - font-weight: bold; - text-align: left; - color: #bd2a2a; - font-size: 1.5em; - margin: 0 0 0 0.2em; - width: 1.5em; -} - -.card-role { - color: #bfb8b8; - margin: 0; -} - -#card-select { - margin-bottom: 2em; -} - -#card-select-good, #card-select-evil { - display: flex; - display: -webkit-flex; - -webkit-flex-wrap: wrap; -} - -#card-select > h2:nth-child(1) { - color: #4a6bff; -} - -#card-select > h2:nth-child(3) { - color: #bd2a2a; -} - - -.app-btn-secondary { - display: flex; - justify-content: space-around; - align-items: center; - background-color: lightgray; - border-radius: 3px; - color: black; - border: none; - width: 10em; - padding: 0.5em; - margin-right: 1em; -} - -@keyframes press-down { - from { box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.4); } - to { box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.5); } -} - -.app-btn:hover, .app-btn:focus { - cursor: pointer; - background-color: #333243 !important; -} - -#main-buttons .app-btn:hover, #main-buttons .app-btn:focus { - box-shadow: none !important; - cursor: pointer; - background-color: #333243; - animation: press-down 0.2s; - animation-fill-mode: forwards; - animation-direction: normal; -} - -.app-btn-secondary:hover, .app-btn-secondary:focus { - cursor: pointer; - filter: brightness(70%); -} - -#main-buttons { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - max-width: 18em; - margin: 0 auto; - overflow: hidden; -} - -#main-buttons button { - width: 100%; - padding: 1em; - font-size: 0.9em; - box-shadow: 2px 3px 8px rgba(0, 0, 0, 0.4); - background-color: #992626; - color: #bfb8b8; -} - -#main-buttons a { - width: 100%; -} - -#game-mode-select { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - position: absolute; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -} - -#landing-container .slide-in { - animation: slide-fade 0.25s; - animation-delay: 0.125s; - animation-fill-mode: both; -} - -#landing-container .slide-out { - animation: slide-fade-remove 0.25s; -} - - -#game-mode-select .game-mode { - width: 7em; - background-color: transparent; - color: whitesmoke; - border: 1px solid whitesmoke; - font-size: 30px; - font-weight: bold; - padding: 5px; - margin-bottom: 0.5em; - border-radius: 5px; -} - -#game-mode-select .game-mode:hover { - cursor: pointer; - background-color: #494f52; -} - -#game-mode-select span { - font-size: 50px; - font-weight: bold; - cursor: pointer; - margin-bottom: 0.2em; - text-align: left; - width: 100%; -} - -#game-mode-select span:hover { - color: #333243; -} - -#card-select-header { - display: flex; - width: 100%; - justify-content: center; - align-items: flex-start; - margin-bottom: 0.5em; - flex-direction: column; -} - -#card-select-header a, #landing-container #game-mode-select a:nth-child(2) { - text-decoration: underline; - color: #b8c4ff; -} - -#landing-container #game-mode-select a:nth-child(2) { - text-decoration: underline; - color: #b8c4ff; - text-align: left; - width: 100%; - margin-bottom: 1em; -} - -#card-select-header span > div { - display: flex; - align-items: center; -} - -#card-select-header #role-view-changer img { - margin-left: 15px; -} - -#role-view-changer div { - display: flex; - justify-content: space-around; - width: max-content; - margin: 0 15px 0 0; - padding: 5px; - border-radius: 3px; -} - -.selected { - background: #494f52; -} - -#role-view-changer div:hover { - cursor: pointer; - background-color: #494f52; -} - -#role-view-changer { - margin: 15px 0 0 0; -} - -#role-view-changer p { - margin: 0; -} - -#card-select-header h3 { - margin: 0; - font-size: 1.2em; - color: #bfb8b8; -} - -#create-game-container button { - padding: 0.8em; - height: 3em; - width: max-content; -} - -#edit-role-btn > img { - margin-left: 0.5em; -} - -#import-role-btn > img { - margin-left: 0.5em; -} - -#game-start a button { - width: 100%; -} - -#game-start { - display: flex; - width: 100%; -} - -#game-start a { - margin-right: 0.3em; -} - -#game-start > button { - background-color: #8EA604; - color: black; - margin-left: 0.3em; - width: 12em; -} - -#game-start a button { - margin-right: 0.3em; - margin-left: 0; - width: 12em; -} - -#card-select-header button:nth-child(1) { - margin-right: 0.3em; -} - -#card-select-header button:nth-child(2) { - margin-left: 0.3em; -} - -#card-select-header span { - display: flex; - align-items: center; -} - -#reset-btn { - /*background-color: transparent;*/ - /*color: #bd2a2a;*/ - /*border-radius: 5px;*/ - /*border: 1px solid #bd2a2a;*/ - /*width: 8em;*/ - /*padding: 0.5em;*/ - /*margin: 0 1em 0 0;*/ - /*cursor: pointer;*/ -} - -#create-game-container, #join-game-container { - text-align: left; - margin: 1em 0.5em 2em 0.5em; -} - -#game-size { - border-radius: 5px; - padding: 0.3em 0.5em; - margin-right: 0.5em !important; -} - -#create-game-container { - display: flex; - flex-direction: column; - align-items: flex-start; - animation: slide-fade 0.5s; -} - -#create-game-container #werewolf-key { - width: 25px; - height: 25px; - border: 1px solid red; - border-radius: 3px; - margin-right: 10px; -} - - -#join-game-container { - display: flex; - flex-direction: column; - align-items: center; - animation: slide-fade 0.5s; -} - -a { - text-decoration: none; - color: inherit; -} - -input[type=text] { - background-color: transparent; - border: 1px solid #464552; - caret-color: gray; - margin: 0.5em 0 1em 0; - color: gray; - padding: 0.9em; - height: 1.2em; - width: 12em; - border-radius: 5px; - font-size: 1.1em; -} - -textarea { - resize: none; - background-color: transparent; - border: 1px solid #464552; - caret-color: gray; - font-family: inherit; - margin: 0.5em 0 1em 0; - color: gray; - padding: 0.9em; - border-radius: 5px; -} - -.checkbox label::before{ - content: ""; - display: inline-block; - height: 30px; - left: -42px; - width: 30px; - border: 1px solid whitesmoke; - border-radius: 3px; -} - -.checkbox input[type=checkbox] { - opacity: 0; -} - -.checkbox label::after { - display: inline-block; - height: 8px; - width: 16px; - left: -35px; - top: 8px; - border-left: 3px solid; - border-bottom: 3px solid; - transform: rotate(-55deg); -} - -.checkbox { - display: flex; - width: 100%; - margin: 1em 0; -} - -.checkbox label { - position: relative; - margin: 1em 0 1em 1.5em; -} - -.checkbox label::before, -.checkbox label::after { - position: absolute; -} - -.checkbox input[type="checkbox"] + label::after { - content: none; -} - -.checkbox input[type="checkbox"]:checked + label::after { - content: ""; -} - -.checkbox input[type="checkbox"]:focus + label::before { - outline: rgb(59, 153, 252) auto 5px; -} - -.checkbox label:hover::before { - border: 1px solid #333243 !important; - cursor: pointer; -} - -.checkbox label:hover { - cursor: pointer; -} - - -.disclaimer { - color: #bd2a2a; -} - -select { - border-radius: 5px; - padding: 10px 20px; - font-size: 20px; - font-family: inherit; - background-color: transparent; - color: whitesmoke; -} - -select option { - background: rgb(35,40,43); -} - -input[type=number] { - background-color: transparent; - border: 1px solid #464552; - border-radius: 5px; - caret-color: gray; - margin: 0.5em 0 1em 0; - color: gray; - padding: 0.9em; - height: 1.2em; - width: 5em; - font-size: 1.1em; -} - -input[type=text]:hover, input[type=number]:hover { - background-color: rgba(51, 50, 67, 0.35); -} - -label { - margin-bottom: 1em; - font-size: 1em; - display: flex; - flex-direction: column; -} - -#message-box { - height: 2em; - max-width: 25em; - margin: 1em auto; - border-bottom: 1px solid #992626; - padding: 0.5em; -} - -.import-failure { - display: flex; - width: 100%; - flex-direction: row; - justify-content: space-between; - background-color: black; - border-radius: 5px; - margin: 0.3em; -} - -.import-failure-label { - display: flex; - flex-direction: row; - width: 33%; -} - -.import-failure-label p { - text-overflow: ellipsis; - overflow-x: hidden; - white-space: nowrap; - max-width: 20em; -} - -.import-failure-data { - display: flex; - flex: 1 1 auto; - flex-direction: row; - justify-content: center; -} - -.import-failure-data ul { - max-width: 40em; -} - -.triangle { - width: 0; - height: 0; - border-style: solid; - border-width: 8px; - float: left; - position: relative; - z-index: 1; - } - -div.import-failure.warning .triangle { - border-color: #dbec3b transparent transparent #dbec3b; -} - -div.import-failure.error .triangle { - border-color: #c7360a transparent transparent #c7360a; -} - -/* lobby */ - -#lobby-container { - padding: 1em; - max-width: 26em; - margin: 0 auto; -} - -.lobby-player { - color: #bfb8b8; - border-radius: 3px; - font-size: 1em; - background-color: rgba(51, 50, 67, 0.35); - padding: 0.3em; - margin: 0.5em 0; - text-align: left; - box-shadow: 2px 2px 7px rgba(0, 0, 0, 0.3); -} - -#game-code { - font-family: "Courier New", serif; -} - -.highlighted { - border: 2px solid #bd2a2a; -} - -.disabled { - opacity: 0.5; - color: gray; - background-color: white; - pointer-events: none; - border: none; -} - -.hidden { - display: none !important; -} - -#lobby-subheader { - text-align: left; - margin-bottom: 2em; -} - -#join-count, #deck-size { - font-size: 1.5em; -} - -.lobby-player p { - margin: 0; -} - -#launch-btn { - margin-top: 2em; -} - -/* GAME */ - -@keyframes flip-up { - 0% { - transform: rotateY(0deg); - } - 100% { - transform: rotateY(-180deg); - } -} - -@keyframes flip-slide { - 0% { - transform: rotateY(0deg); - transform: translateX(-100px); - } - 100% { - transform: rotateY(-90deg); - transform: translateX(0px); - } -} - -@keyframes flip-down { - 0% { - transform: rotateY(0deg); - } - 100% { - transform: rotateY(180deg); - } -} - - -#game-card { - background-color: transparent; - display: flex; - flex-direction: column; - cursor: pointer; - justify-content: space-between; - max-width: 17em; - border-radius: 3px; - height: 23em; - margin: 0 auto 2em auto; - width: 100%; - box-shadow: 0 13px 17px rgba(0,0,0,0.6); - perspective: 1000px; - transform-style: preserve-3d; -} - -#game-card img { - width: 215px; - top: 35px; - position: absolute; - z-index: 4; - user-drag: none; - user-select: none; - -moz-user-select: none; - -webkit-user-drag: none; - -webkit-user-select: none; - -ms-user-select: none; -} - -.placeholder { - width: 150px; - height: 150px; -} - -.village h2 { - color: #4a6bff; -} - -.wolf h2 { - color: #bd2a2a; -} - -.flip-up { - animation: flip-up 0.7s; - animation-fill-mode: forwards; - animation-direction: reverse; -} - -.flip-down { - animation: flip-down 0.7s; - animation-fill-mode: forwards; -} - -.flip-slide{ - animation: flip-slide 1s; - animation-fill-mode: forwards; -} - - -#game-card h2 { - font-size: 1.7em; - font-family: 'diavlo', sans-serif; - margin: 0.3em 0 0.4em 0; -} - -#game-card p { - padding: 0.5em; - font-size: 0.8em; - color: #464552; - max-height: 68px; - overflow: auto; -} - -.game-container { - margin-top: 1em; -} - -/* This container is needed to position the front and back side */ -.game-card-inner { - position: relative; - width: 95%; - height: 97%; - margin: auto auto; - border-radius: 5px; - text-align: center; - border: 3px solid #9c9c9c; -} - -/* Position the front and back side */ -.game-card-front, .game-card-back { - background-color: #dedede; - position: absolute; - display: flex; - border-radius: 3px; - flex-direction: column; - justify-content: space-between; - align-items: center; - width: 100%; - height: 100%; - transform: rotateX(0deg); - -webkit-perspective: 0; - -webkit-backface-visibility: hidden; - -webkit-transform: translate3d(0,0,0); - -moz-backface-visibility: hidden; - -moz-transform: translate3d(0, 0, 0); - -moz-perspective: 0; - visibility:visible; - backface-visibility: hidden; -} - -.game-card-back { - transform: rotateY(180deg); -} - -.game-card-front p:first-of-type { - margin: 0.7em; - border: 1px solid gray; - border-radius: 3px; -} - -.killed-btn { - border-radius: 5px; - width: 13em; - font-size: 1em; - margin: 0 -} - -#players-remaining { - font-size: 1.5em; - color: #bfb8b8; - width: 6em; - margin-bottom: 0.5em; -} - -#clock { - font-size: 1.5em; - width: 3.8em; - margin: 0 0.5em 0.5em 0; -} - -#flip-instruction { - color: gray; - margin: 0; -} - -#game-header { - display: flex; - margin: 0 auto; - max-width: 35em; - justify-content: center; -} - -#game-container { - display: flex; - justify-content: center; - align-items: center; -} - -#game-container .killed-player, #game-container .alive-player { - background-color: black; - border-radius: 5px; - padding: 5px; - display: flex; - align-items: center; - justify-content: space-between; - box-shadow: 3px 10px 10px rgba(0,0,0,0.6); - margin: 0.3em; - position: relative; -} - -#game-container .killed-player p, #game-container .alive-player p { - margin: 0; -} - -#play-pause { - width: 2.5em; - height: 2.5em; - cursor: pointer; -} - -#play-pause:hover { - opacity: 0.5; -} - -#play-pause:hover { -} - -#play-pause:active, #play-pause:focus { - opacity: 0.4; - transform: scale(0.90); -} - -/* end splash */ - -#end-container { - margin: 0 auto; - display: inline-block; - text-align: left; - width: 100%; -} - -#end-container #roster { - width: 100%; - flex-wrap: wrap; - display: flex; -} - -#end-container .winner-header { - display: flex; - align-items: center; - margin: 0; - font-size: 30px; - margin: 10px 0 30px 0; -} - -#end-container .evil-subheader { - font-family: 'diavlo', sans-serif; - color: #bd2a2a; - margin: 0 0.3em; - font-size: 1.5em; -} - -#end-container .roster-list-item { - background-color: #40464a; - padding: 10px; - border-radius: 5px; - display: flex; - align-items: center; - font-size: 20px; - width: 33%; - min-width: 13em; - margin: 0.3em; -} - -#end-container .roster-header { - font-size: 25px; - margin-bottom: 1em; - -} - -#end-container .roster-list-item img { - margin-right: 0.5em; -} - -#end-container .evil-header { - display: flex; - align-items: center; - font-size: 20px; - margin-bottom: 2em; -} - - -#end-container p { - font-weight: bold; - margin: 0 0.3em 0 0; - font-size: 70px; -} - -#end-container button { - margin-top: 3em; -} - -#end-container .winner-village { - font-family: 'diavlo', sans-serif; - color: #4a6bff; -} - -#end-container .winner-wolf { - font-family: 'diavlo', sans-serif; - color: #bd2a2a; -} - -#learn-container h2, #faq-container h2 { - font-family: 'diavlo', sans-serif; - color: #bd2a2a; - font-size: 40px; -} - -.faq-question { - max-width: 60em; -} - -#learn-container button, #faq-container button { - margin-top: 1em; -} - -#roles { - display: flex; - flex-wrap: wrap; -} - -.modal-role { - width: 22em; - position: relative; - border-bottom: 1px solid #494f52; - padding-bottom: 0.5em; -} - -.modal-role div { - display: flex; - justify-content: center; - align-items: center; -} - -.modal-role div div { - display: flex; - flex-direction: column; - align-items: flex-start; -} - -.modal-role p:first-of-type { - margin: 0; - color: #bfb8b8; -} - -.modal-role h2 { - margin: 0; -} - -.modal { - position: fixed; - z-index: 1; - left: 0; - top: 0; - width: 100%; - height: 100%; - overflow: auto; - -webkit-overflow-scrolling: touch; - background-color: rgb(0,0,0); - background-color: rgba(0,0,0,0.4); -} - -.modal-header { - border-radius: 5px; - display: flex; - justify-content: flex-end; - background-color: #23282b; - color: #bfb8b8; -} - -.modal-header h2 { - margin-top: 2em; - margin-bottom: 0; - color: #bfb8b8; -} - -.modal-footer { - padding: 1em; - background-color: #23282b; - color: #bfb8b8; -} - -.modal-content { - position: relative; - color: #bfb8b8; - background-color: #23282b; - margin: 1em auto; - padding: 0; - border: none; - box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19); - animation-name: animatetop; - animation-duration: 0.4s -} - -.role-wolf { - color: #bd2a2a; - font-family: 'diavlo', sans-serif; -} - -.role-village { - color: #4a6bff; - font-family: 'diavlo', sans-serif; -} - -.quantity-village, .alive-player-village, .dead-player-village { - color: #4a6bff; -} - -.quantity-wolf, .alive-player-evil, .dead-player-evil { - color: #bd2a2a; -} - -.dead-player-no-reveals { - color: whitesmoke !important; -} - -.alive-player-wolf, .dead-player-wolf { - border: 2px solid #bd2a2a; -} - -#overlay { - position: fixed; - user-select: none; - display: none; - flex-direction: column; - width: 100%; - height: 100%; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0,0,0,0.9); - z-index: 3; -} - -#killed-name { - display: none; - color: #bfb8b8; -} - -#killed-role { - display: none; - margin: 0 auto; -} - -.killed-role-custom { - width: 190px; - padding: 95px; -} - -.killed-role-hidden { - padding-top: 3em; -} - -@keyframes slide-fade-in-top { - 0% { - opacity: 0; - transform: translateY(-150px) - - } - 100% { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes slide-fade-out-top { - 0% { - opacity: 1; - transform: translateY(0px) - - } - 100% { - opacity: 0; - transform: translateY(-150px); - } -} - -@keyframes slide-fade-in-bottom { - 0% { - opacity: 0; - transform: translateY(150px) - - } - 100% { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes slide-fade-out-bottom { - 0% { - opacity: 1; - transform: translateY(0); - } - 100% { - opacity: 0; - transform: translateY(150px) - - } -} - -@keyframes fade-overlay-in { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} - -@keyframes fade-overlay-out { - 0% { - opacity: 1; - } - 100% { - opacity: 0; - } -} - -.animate-overlay-in { - animation: fade-overlay-in 5s; - animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); - animation-fill-mode: forwards; - -webkit-animation: fade-overlay-in 5s; - -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); - -webkit-animation-fill-mode: forwards; -} - -.animate-overlay-out { - animation: fade-overlay-out 1s; - animation-timing-function: cubic-bezier(0.95, 0.05, 0.795, 0.035); - animation-fill-mode: forwards; - -webkit-animation: fade-overlay-out 1s; - -webkit-animation-timing-function: cubic-bezier(0.95, 0.05, 0.795, 0.035); - -webkit-animation-fill-mode: forwards; -} - -.animate-name-in { - animation: slide-fade-in-top 5s; - animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); - animation-fill-mode: forwards; - -webkit-animation: slide-fade-in-top 5s; - -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); - -webkit-animation-fill-mode: forwards; -} - -.animate-name-out { - animation: slide-fade-out-top 1s; - animation-timing-function: cubic-bezier(0.95, 0.05, 0.795, 0.035); - animation-fill-mode: forwards; - -webkit-animation: slide-fade-out-top 1s; - -webkit-animation-timing-function: cubic-bezier(0.95, 0.05, 0.795, 0.035); - -webkit-animation-fill-mode: forwards; -} - -.animate-role-in { - animation: slide-fade-in-bottom 5s; - animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); - animation-fill-mode: forwards; - -webkit-animation: slide-fade-in-bottom 5s; - -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); - -webkit-animation-fill-mode: forwards; -} - -.animate-role-out { - animation: slide-fade-out-bottom 1s; - animation-timing-function: cubic-bezier(0.95, 0.05, 0.795, 0.035); - animation-fill-mode: forwards; - -webkit-animation: slide-fade-out-bottom 1s; - -webkit-animation-timing-function: cubic-bezier(0.95, 0.05, 0.795, 0.035); - -webkit-animation-fill-mode: forwards; -} - -@keyframes animatetop { - from {top: -300px; opacity: 0} - to {top: 0; opacity: 1} -} - -.close { - margin-top: 0.2em; - color: #bfb8b8; - float: right; - font-size: 46px; - height: 1em; - display: flex; - align-items: center; - font-weight: bold; -} - -.close:hover, -.close:focus { -color: #333243; -text-decoration: none; -cursor: pointer; -} - -/*Tooltip styles. Taken from w3schools*/ -#game-container .alive-player .tooltiptext { - visibility: hidden; - background-color: black; - color: #fff; - text-align: left; - border-radius: 6px; - padding: 5px; - position: absolute; - z-index: 1; -} - -#game-container .alive-player img { - width: 25px; - height: 25px; -} - -#game-container .alive-player:hover .tooltiptext, #game-container .alive-player:focus .tooltiptext { - visibility: visible; - opacity: 1; -} diff --git a/views/create_game.html b/views/create_game.html deleted file mode 100644 index 344201f..0000000 --- a/views/create_game.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - Werewolf - - - - - - - - - - - - -
    -
    -

    Create A Game

    - - -
    - - - - - -
    -

    0 Players

    - - -
    -
    -
    -
    = Werewolf role (counts for parity)
    -
    -
    - - -
    -

    Condensed View

    - -
    -
    -
    -
    -

    Good Roles

    -
    -

    Evil Roles

    -
    -
    -
    - - - - -
    -

    -
    -
    - - - diff --git a/views/faq.html b/views/faq.html deleted file mode 100644 index a063c55..0000000 --- a/views/faq.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Title - - - - - - -
    - -

    FAQ

    -
    -

    What is Parity?

    -

    Parity means equal, and in the context of the game, this refers to an equal number of wolves and villagers. - This is a victory condition for the wolves, because if at any time during the day parity is reached, it is certain that the wolves - will be able to kill all the remaining villagers. Thus, if a standard or custom role is marked as a Werewolf, it will be considered - when the game determines if parity has been reached. -

    -
    -
    -

    What does it mean when a game is "Reveal" or "No-Reveal"?

    -

    If you are playing a game with "reveals," players' roles will be revealed when they die. Otherwise, they remain a mystery.

    -
    -
    - - - diff --git a/views/game.html b/views/game.html deleted file mode 100644 index 03de719..0000000 --- a/views/game.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - Werewolf - - - - - - - -
    -
    -

    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - diff --git a/views/index.html b/views/index.html deleted file mode 100644 index 4340696..0000000 --- a/views/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - Werewolf - - - - - - - - - - - diff --git a/views/join_game.html b/views/join_game.html deleted file mode 100644 index 8b99d5d..0000000 --- a/views/join_game.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - Werewolf - - - - - - - -
    -
    -

    Join a Game

    -
    - - -
    -
    - - - - -
    -
    -
    - - - diff --git a/views/learn.html b/views/learn.html deleted file mode 100644 index e5d0b54..0000000 --- a/views/learn.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - Title - - - - - - -
    - -

    Introduction

    -

    This is a social strategy game involving deception, deduction, cooperation, and any number of clever tactics. - There are two teams - the village and the werewolves. The village has the objective of finding and killing all - the wolves, and the wolves are trying to eat all the villagers. The game is divided into two phases: day and - night. At night is when the werewolves operate, deciding together which villager to kill off. The daytime is when - the village is active, deciding which among them seem evil and killing them to end the day. During the day, everyone - is disguised as a villager - even those that are actually wolves. -

    -

    Setup

    -

    At least 5 players are needed for a sensible game. Players can decide on which cards should go in the deck to create - a balanced experience. For example, a 7 player game might involve 2 werewolves, 3 villagers, a hunter, and a seer. - For larger games, this can be a bit trickier, but the goal is to create a game that isn't too easy for the wolves - or the villagers. Once the deck is chosen, the deck is dealt, and players see only their card. -

    -

    Gameplay

    -

    Play begins with the Night One. Everyone "goes to sleep," closing their eyes and creating some sort of white - noise (commonly a patting of the hand on the thigh). At this point, the moderator will ask the Werewolves to wake - up and see each other. If you do not have a designated moderator, choose someone arbitrarily for the first night, - and then the first player to die can moderate the rest of the game.

    - - First, The Werewolves will wake up and see the other wolves, giving them the knowledge that will guide the game. - Then, the werewolves go back to sleep. If you are playing with a Minion, next the Werewolves will raise their - hands (but not awake), and the Minion will awake to spot the wolves. You can also play with a "double-blind" - minion, who does not know who the wolves are, but is still playing on the same team as the wolves. This is all - that needs to happen on the first night.

    - - At this point, everyone wakes up, and Day One begins. This is an open debate between everyone in the circle about - who they should kill in suspicion of being a wolf. This can take any amount of time, but watch out, because the - wolves win if time expires! You should have some system for exhibiting votes to kill another player. If a player - receives a majority vote, they should press the "I'm dead" button on their screen, and everyone else will have - that player's role revealed to them. At this point, everyone immediately goes to sleep, and the next night begins.

    - - On every night after the first, wolves will, in silence, agree on someone in the circle (other than themselves) - to eat during the night. After this concludes, and everyone wakes up, the player that was killed will be revealed - by the moderator, and they will reveal their role. Then, of course, Day Two begins.

    - - The game continues in this alternating fashion until an endgame is reached. If a day ends with the same number of - wolves as villagers, the wolves win (as they can kill a villager at night, and then have the majority to kill the - remaining villager during the day). If the village manages to kill every wolf, then they win. In the scenario - where there is one villager and one wolf remaining, if the remaining villager is a Hunter, then the village wins. - There are several "power cards" such as the Hunter, which can help the village or the wolves. If you are a power - role, you can read the description on your card to find out what your special ability is. -

    - -
    - -

veQrI+3u9$>rQxm*p!j zx+T6@bV_6L-1nW^tQBrv4H0U+w}5w|^OF(}=2?o@cI=9@JhpP`A(GtJWhd}<}5bagAOcN9JDlXU@wwW%q>#3@%-b1Mw>2V!5u1)vu*`a+#VSAFQ z=L8ia&jntd>bBNDO*_<6PyLp539!6db#N0;-H89TZt_*X>*#RU#y( zXyd`O`hbG#iO)YnI%48%W|oWfh$$_3!18&*nNM6|;_KFy>N-zzm8xv{T#>7}#ARb! z`-T+8=2>NdZ7JK7{aj>NIA=PatDeYY{=F|@PfTC4fc6A7j&(`@j0|@ei#$+VE-D|m zT;+P{nz#bXuodnOQ*CPxPO&IrX!yP^xXa1MdgI$0ufJB+K73uf`R!tvRE~ysTi)*e zbwKEj(vkCpQ4>#GUO_QmvAUQh^kMk%6J5u7Rblp=pSLiIt&=m9eQVkYQj@_3!>t6b-rg aDVb@NxHWJuPL~8~VDNPHb6Mw<&;$UYPM@~` diff --git a/assets/images/roles-small/Seer.png b/assets/images/roles-small/Seer.png deleted file mode 100644 index 3e3373ba3cd2ecf9b3b8985373612d5a2dfa5a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmeAS@N?(olHy`uVBq!ia0vp^DIm14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>xEN&G77mKKmYeX_1biK%Z7wyLfjW(4@_u1 z?@^~Z$8V;O+T@cdMl;XIb0|J^aZHj`%nDWC(i7z@YSegQ&V*?z9c`m}_h0JmoT%v` zdCa3j$-{ifl+M7O?|UK?-An>+WEHx5bY}=nYYXHt;?dB#{HXhdo{GuJw~azA2?bey z*^7A&xuE`{|Sf6``G@~29)a`R29JMKMOO^>-U>ZV{~ zPDu4c3nhOo^Jaq;J-?P2wur~Kh<#bjE%m2z-igIioE5p3$tA~|ESn?#Dd3pIj;z^b zTnBcoJ2vG~f$DEX1ChX_P`8O`-3K@`OC{b!aOk zv?Nc(aSBMx&Q|>`c<1@wg|Vsb^K2sC7%8rPlKAN9k?+<@tM}=BQ>}@Psd!hKe^GGb z+)L)k?lJG&s&DHhpN>D)HhuDe_tU25Yrp;bu;GpHyB|mIh8xx1and{e%DvAQO` zioSn8nf>sT0vD0|C*6u&@1N_3y)yUs^1s^%8bkk$=Zkd6UMfB3bsZS*iY2ZQCC){u zi6xo&c?uz!xv30B28Nba29{Qah6)A-Rz`+aCT6@LQ~v@LtAZ4#B$lLFC4+Q8lKdAc7?@ZYnpzo{=>i!B23pZ8pQ32U%}>cps|1^kRYNqJU?fljgQu&X%Q~loCID&c BMw0*l diff --git a/assets/images/roles-small/Shadow.png b/assets/images/roles-small/Shadow.png deleted file mode 100644 index a591ff093e05ca96499bb2983c06c640fa8e7766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 zcmeAS@N?(olHy`uVBq!ia0vp^DImNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|Kp-O{6BiRB zC@8prg@uic?Ypt@eR=tycJKXsd~?{?>e$#4SXi7TIR5|t-?B4uJ5U2-NswPKgTu2M zX&_FLx4R3!#4d)LKn`btM`SSr1K(i~W;~w10_0})5>H=O_Q#z3Ec_~4pFYe4>e=S$ z;usQf`0Z3fzrzj!u8*Y+wgp{KsJ!OolG!hP>&PPigRBmZ7&50xA1Qhnvd=LkuVJU- zA>IWiSc}-wt{>~r+RW>^C4SqJL;nBYpF8s|<z?K8$_9dJ7OlV z8>|=MoG|g_DH}hJ_1q5Als8S7Dla58F(ySg;ZtzUf|x6*ifS$|9iB|GG*+G?Ub|(D zfMS|L=)RQs9Y*tJd_MWcve9O;O+xD_6?KPxjX3jL+O8zN`Q){wzkl309n;gBRlrlWTeQTdGxe0?F*SO)A!vOwbdS1{)#;edbeZBD^H_oHS(?762014Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>TbOxFY)0H2;b}R-BD*~#MpX!zW@LK|E)CdSQ6wH z%;50s2FU4*N#5=*ibryI#ef|45>H=O_Q#z3ECQUi37eZ37?^H&x;Tbp+TCQ@A;)1YHPZ;oFc>Fi=`d96a z=Kd?k9~*8~>YRCTj^FWJCw&wixk^j-D!bpJA zZT7R8JR`A9T?>>ZZ=Y~Db=`vEb18qSRqD4-^O%|)Xp`bk1X6PPXGB<1vo$J+3~c7uYAXIi#QJn`k-b2hE^0L3TOF`D}c!(?S=nbdERJEwQy+<$|>(I7yY?J^`V}p z`wQvN&Ar>D09&`Ml!YaP#=uhjv3fzL; zE-Fe6sl2jfE{eIk--v0=QLQawoND^zQy>41R}cNR9Q-utmn-ijO_dtvasT1f zRYD5SME$2L@!M_qd^4|f@1CgAIR{;Nj6$CIY`XljV{T>Dx7)er(tnxqh-Mr)bNP1d zrY4T}3>Ax}I4T|ViC5V7vB&66TVmsv*KdV3Uw;?c_OR^~&&#wEZ5zuYmm~__aB0ww zO7*_ESmTJsHS>+@zZYHy ze($(&;*HCl6Z7hPy_-62U(Z_p##t_H&9VNE*Z3YYarU@8DOP#h?v&8CA;!a0sVRPy zduc;8$LY=kH~KOTFmX=qDEKRVM4@KtLmTcxSC7xF+BWHfxR;I5-w9FvlM+RyS)ER9 z{Twd6%30ss3k?2k|HHa)SJ+3leOY&a$zHX@HKHUXu_VKdAc u7?@ZYnppwaK!$;Vxk?g0iiX_$l+3hB+#1{}Z*2x@VDNPHb6Mw<&;$SwYRK#W diff --git a/assets/images/roles-small/Villager.png b/assets/images/roles-small/Villager.png deleted file mode 100644 index 281636071ac970521992ebfa76f52e239d0630b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmeAS@N?(olHy`uVBq!ia0vp^DIm14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>x#u7^9*k?Y26 zZ(*kjwU`-C=UD&$|KIcnPaaSkV@Z%-FoVOh8zA>FCV9KNNX*V`l>>6vOFVsD*&lQA zvj}Li@lEz(U|^c*>EalYaqsQ*+eNn(1lSTzt~ke)D5ULH```R+kzHC;;|JfL>2m^Y zKGwyFrKHbt1A~9d&%9@NHt$r9-1c`K=fiSx@4BiV)xCVD@L#Hw`d zU0DWG<-9h<%@sS7zq&8DGkRy%&JNE@r+WHtmmX94d|IA4n}~ zIPt4!ZrTo>!eet=x}uh^7I`$$!Eh(fPIk|U-BV7Sn40Dy-^bF)=d*axDdh+_WMmNL5c_OD>R*Y zc}e=1;SaUR7hbGjFsNCVB%a@&d&@^#RVAy%kk2$d^|p`klVIhPul9mJc|;z}xvIcn zv&Cs&*NN%w4vM13>#A4e>=K@(VDgH^;;`GQ3C};T6xg{p!){W>R)LvX?-Ce;Zp2-D zc4+U>O4&`hmo${8EUWfbH0?50+msyU!-gzEYvgm)>aOo-8NsQ?DLVnBF)7y;d0m8l<;81QxiAt7O#<)i4u(EJ8-x5 zV9QNAhMK37yPSM1)%ezYt=e1n_^V>f&n5jHNuqk=<$iYv>4Kc|X2G-dZyHty%J?iXGiZ?eOUfn}QQ z6KB_Wj-M*oW+qDZA-O+w76}H*-}*GiC*NV&I*#OD+wue!wiU=+Ots$hD*D|mVa9d# zHdRVLcz4yS|Ek{gE1u!a!Gh0aF~*CmXI8z_Tj?^l#7V8(uW2b4%b8Y=6}Q918lL@r zJf(i(iA#Ph9>@2v@62%hx9p2KG=Z7cGi*KL*XFYJ<5^(3RV{IiC`m~yNwrEYN(E93 zMh1qKx(1fIhNd9~CRT=KRwjnJK!$-qL!;6p6b-rgDVb@NxHWvdGfNMsfx*+&&t;uc GLK6UvH=26@ diff --git a/assets/images/roles-small/wolf_logo.png b/assets/images/roles-small/wolf_logo.png deleted file mode 100644 index f57147a48c802077b395685e7b228dc96552e250..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3921 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 m5a_oK0Qm2L@qM(Iv$CfDJi$V diff --git a/assets/images/roles/DreamWolf.png b/assets/images/roles/DreamWolf.png deleted file mode 100644 index bf5b085ed82fe913ddd4c27f7ab4a049085c488e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8886 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 diff --git a/assets/images/roles/Hunter.png b/assets/images/roles/Hunter.png deleted file mode 100644 index c4251e3204003c7642b172cda4a5a867f4af3f22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1875 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 diff --git a/assets/images/roles/Minion.png b/assets/images/roles/Minion.png deleted file mode 100644 index e48ec91a434b4f4863507bff978a7b3862951db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1810 zcmZ`)Yfw^Y82(U{5{b6m#3;qubgU%E%o0-~voz8&&2hxSG;OsAE74L`3{z_Dva`)* znZ=?xUN&_rH7_X;TTaa~Wf$>Q%9>(c^0;Ll6*+qVXZKe#=gc?n`+d*%KF@RBdC&Ph z!8-^xWE%hgAuwRuUH~vc<2%n1&CGZ~FuGt5vw~Ov+`Wv~AGAVar`UkKK>(z=0FZeW zfN3<9IS7D&4!}?}0E}w@kdg`-LN=ot!FzUv`J?L{45q`?6>9rC~NT@$L_2Csp`IRG0KGw6Zf!&sSTqVySENTa&%ammgE_k zI#-|5*xH$PCmd_64P{Z^+BQ}Xisj2qrR086yCEOGdZ26;>hCMA&*hcam{?0zE0}`( zrHVx{1cQ6XbW@A@V&(RBDXBBI)nO)XP~bXyi{fHte3YjDvLX`CEL8E$lw@rRlD@|B zT35i5EsIS;iTk!_daITw@_V`FBg$HZ#d*wCYHTZS3T(E z*I!R5e`O2IPTs{wTui0vyS-{{`!wwDGp0nH1Vd{U5fQ@d+=Qt(i4W9rQtjirG1J1( zwNMB{LWZk$OnPk6eE??RaDH_-0NkUf-^hO$#NB zXKYYB5y)=^Io zn;z42Z^g*O%S`~?Qc2_v&29~$miEUD%Z9XGtE9*<45O*T6`OnTZsK z=5lFuqoDThypu=wC*g%1hkiY%Kso#BCt%UOAZ;Gz^V&*YMRRG2+WPk=dM+Ti##OMk&Y(vNQ5g_2h69wLN(GyJ+6yD&{8XBj#M4O_>`Y4y0RK&g+P33V%Z> z+{L?Rc4ivmrlb*mYmP`6j^PwN!1HEU&ty20i>Z|l+iPfW{>8S=?3DRUhT?O@la?qi z3BjO*hL@H;X(pW00AxCtl(bqZ1eM*c$_yJk>JNDU%sUGhB7kw_;Er z^BS2}UD*Ih$iT>$2@K0#ws*a_EF%x3zv=Ot81K8=ce2f?=iZA)CJ%UUv17m){&>1- zbqhCFE|B@mDY_uXhSF-;Nr>$mcyg=ptPpNd^?aK3d2hD%0u%QsCE?E~{Asnzk=?Fn zv62ccb7$PQ_pRhnVd+FYXX8Hh*!ocd5+X)Bq}yeFplnD_J$kce5V_Fh?qC5Qa5wge{RU>7&f8@E^(grYuy!Dlq~q>*AH! zM5G;M9jv!_m|QecBcIoVJ%B?$+bgWGXWpe$`iMF$4A+gKmnnw5uX>)dGLMvs#~Sas z=`uI2psWrEJ2#3Hrh!R^zcyI^%i~5wXJ=z>Mm{C2LPxrDvVTPKp@YeBjMx)#=mOm7 z>%6FRFX}pvFn2n`!=16gol5s$(CI%Z@Wx-){{SBUP(u9auLEXo-j|~Q5a=Jgt#WI$ F_+M+3T{8dx diff --git a/assets/images/roles/Seer.png b/assets/images/roles/Seer.png deleted file mode 100644 index cc4ed3f09be68266d0da5ca6f2a42a0ba46470e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1401 zcmaJ=X;4#F7`Pw zl%yCN%XO9j0Gqhjs8j$5eEeHQ#F*E?S{U2R^4W=O09wUXNDc|Z^xW9gL;#My2Y~2v z0CX57nggJm0l-2w0L*g$&<ykH&UvIl1L|$&kwi7SOh@W0C%jXjkc7dSCNXJzuie8@l2Nx4~sYz)d{OLFs2YcgV zqNvtgyXrAO=EWsOlhqch?HOwwg_NUMUhlXlcKRoii;sp&rarL!VtBk{IR`5toc?^amW`OH z$ki?z1+gyrnSlb^`7z!62@KZ31d03WKYT?lQ3xG6CZ`limizX5wz1)%mn+zgm1l35 zzg<9Zx*cK^xK=2IH(zzMO>@D2qF_s*9BiN)+r5OA?<~hlOZJ~_X0=bVjkf2#r!tqu zz7>GQsvE-=^-C4I>hWmRE&*Ack{KOyX!CRpE9=($^3Ps)3OiPT1M0~S5gl5kQkX0X z?@FO5N^-MD2hkQaGgi%c3Y-pi^-vxwcHGZEsJJi|Y3zaZKZQ|c_3f~SF)~{M%X*F^ zBUuks4W^XSRMZ;Mn1KEYJm^exw8g}9C~~1`G?3rVI@tQqOQ6pgpfw#fU0mOE9hNED zX$i&03e?-S=(KuLXCANxd9-j z!tDY-lr$ViyL_D@oO46=IKO`IELMu?@eVPQS_v$f>k)ur_b zHD@p}h;tM0;+0Z(u_CR)_5kimh8jnaBiwGc5C<^^*r!u~aEm zaRka5+|egcB%!`9=KuB)xrK(NRjt%<3P3q~q)54~%8vsjU)jgM8lIv+{esBAn`NA2ru^<~sDcS@{^4avFN; z5_6Eq(P%@VfI5NZW7SDvqN-}3DWe^Iae#MisbY7naax!BRaPul+ zo4dMfjSb651c#WWP+Y5^gd@(zXP4r#Fs#)Bxxy%}>YxQw=JA!uMlIp3ui12%?T!*T z>!#_XAG_CJlshkaCoeCDw~v`ywh!BYAHz4;n-T2o8<6hDUPAHNXa52W>v0zV diff --git a/assets/images/roles/Shadow.png b/assets/images/roles/Shadow.png deleted file mode 100644 index 11f5e645d9a8d52e70a812c625ee8edc1f1dce0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yV5|XQ7G|J`-AUP>K#C>Z(btiIVPik{pF~z5Um@8e z$d`ekN{xY`p@o6r7f`6-1p`B=0RzLU1O^7H84L{K1#@-<+5jaC0(?STfiw`v$jHRS z#0UxsZeU?yV`KYnY_!@hljQC0!Y{Fl;UPsCUysVAnHfq^;7)5S5Q;?~Yp*C!E?+{?22PiYGSob;0iDgAeL1bNtD>mih1Q!RChrKbEX!{_s)z z61(@G0?UL8Ta|nI<0a)^RLWW%`td{bWwTICI@^QC;m4+5{w$xcc3wmOe!)5u-`n$_ z%IeAa->Pf)_|g1Wzqose_Ur-+-mO&(c6CqRx&GL)Rlc=Y&tulxu8{y32b54EFz{IGp4zn1re{Nu;pJLThM^wuYKvmg0? z?D%`@|GPeX{1`242Lb==KWtBL-~Q~?-Esjhr|H225lGTsBn*Z26> zr`-Maz|Xi&8|du(4*7L`c{RT;mVPg>HN78S9z9i8w)^XjDfW>)a~?h}pI84i z*KF}2-|LTg$|~~uF z*&jUqpZ~`I7#s0__CG!hjJ|yz4tIxcf4u$4Q_Vlyt`zRWp3K2%|4KnULy~6KyOsHO+t(etV|89jLmcnOsotHCPg}hplHa= bPsvQH#I4~m%P(Ld!oc9^>gTe~DWM4fZPXPt diff --git a/assets/images/roles/Sorcerer.png b/assets/images/roles/Sorcerer.png deleted file mode 100644 index a85b4da539bfca29fb5e7002acf530cba00aa08b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1903 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 z 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%0DqR6^OVeFAx-? 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