@turnipxenon/pineapple 2.4.71 → 2.4.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +5 -1
- package/.idea/shelf/Fix_attempt_for_slug/shelved.patch +63 -0
- package/.idea/shelf/Fix_attempt_for_slug.xml +4 -0
- package/.idea/workspace.xml +106 -89
- package/.svelte-kit/__package__/.gitignore +1 -1
- package/.svelte-kit/__package__/template/seaweed/ChumBucket.svelte +60 -60
- package/.svelte-kit/__package__/template/seaweed/SeaweedTemplate.svelte +36 -158
- package/.svelte-kit/__package__/template/seaweed/SeaweedTemplate.svelte.d.ts +6 -0
- package/.svelte-kit/__package__/template/seaweed/SeaweedTemplateData.js +3 -9
- package/.svelte-kit/__package__/template/seaweed/entries/EntryProps.d.ts +6 -0
- package/.svelte-kit/__package__/template/seaweed/entries/WorkExperience.svelte +143 -0
- package/.svelte-kit/__package__/template/seaweed/entries/WorkExperience.svelte.d.ts +18 -0
- package/.svelte-kit/__package__/template/seaweed/entry_order_config/EntryOrderConfig.svelte +2 -2
- package/.svelte-kit/__package__/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +1 -0
- package/.svelte-kit/ambient.d.ts +1 -12
- package/.svelte-kit/generated/client/app.js +1 -1
- package/.svelte-kit/generated/client-optimized/app.js +47 -0
- package/.svelte-kit/generated/client-optimized/matchers.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/0.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/1.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/10.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/11.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/12.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/13.js +3 -0
- package/.svelte-kit/generated/client-optimized/nodes/14.js +3 -0
- package/.svelte-kit/generated/client-optimized/nodes/15.js +3 -0
- package/.svelte-kit/generated/client-optimized/nodes/16.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/2.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/3.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/4.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/5.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/6.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/7.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/8.js +1 -0
- package/.svelte-kit/generated/client-optimized/nodes/9.js +1 -0
- package/.svelte-kit/generated/server/internal.js +1 -1
- package/.svelte-kit/output/client/.vite/manifest.json +694 -0
- package/.svelte-kit/output/client/_app/immutable/assets/0.BZfguPbX.css +10 -0
- package/.svelte-kit/output/client/_app/immutable/assets/13.BIMIBpeM.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/4.ClTmhFiH.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/NavigationComponent.DcXBcmND.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/PineappleBaseLayout.BJNkM2lS.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ProgressBar.Cirlo5Z8.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/_layout.BgClWDWR.css +10 -0
- package/.svelte-kit/output/client/_app/immutable/assets/_page.BIMIBpeM.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/_page.ClTmhFiH.css +1 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_blushing.B6Q0SsBp.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_disappointed.LOpkh7Q7.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_happy.Cz9WhdwO.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_lets_go.BxjJjKUv.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_logo.C_a3ZQAP.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_mad.DofDLDmM.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_neutral.Hp923t8N.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_slightly_mad.DdwOp6J5.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_surprised.BxbNH_w8.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/ares_yay.EM2SNr0e.webp +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_ares.DTcFskeK.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_corn.D22ZwTZ0.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_pineapple.D28N65_A.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_reinhard.D22NV0xw.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_tomato.O9Z7_E07.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/bg_tiled_turnip.DMU0uHH4.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/footage-chef-wings.dVBm8Uit.gif +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/header-hep-cat.DcyPS3Oy.mp4 +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/header-pengi.DWAOeO4q.mp4 +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/header-soulwork.BQRWmhTu.mp4 +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/placeholder_circle.Ij3bN7bI.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/seaweed-showcase.TTVTTC5m.mp4 +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/weaver-footage.sjDEbkrX.gif +0 -0
- package/.svelte-kit/output/client/_app/immutable/assets/window-set.IpgsYUna.png +0 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/DialogManagerStore.uKBS8wDS.js +7 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/NavigationComponent.svelte_svelte_type_style_lang.DfEIDspS.js +33 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/PineappleBaseLayout.svelte_svelte_type_style_lang.DYXCZxRe.js +5 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/PineappleSlideToggle.Cpnzq8nG.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/ProgressBar.svelte_svelte_type_style_lang.gYVkR-Pp.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/SeaweedTemplate.D8BMpFyR.js +42 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/Toast.CfxCQiZJ.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.BCsXwAds.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.CER3LJw4.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.CJqYI1vC.js +7 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.CRke_Vt-.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.CdlE3ZqM.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.D8F_fKwN.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.DOjmKWLN.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/_page.UybeXHGE.js +8 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/close.BSBWitOq.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/each.SQ7NrLlo.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/entry.B9Zoh-6L.js +3 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.BID2VU8k.js +4 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.D_vqlE3X.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.DbwYs1Xx.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.lAcdadTB.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/index.qztrOHW4.js +6 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/preload-helper.BQ24v_F8.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/scheduler.DsUDfRdB.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/spread.CgU5AtxT.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/store.yyGEKEAe.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/stores.BVA7LtvQ.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/stores.CYFggfyT.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/stores.DEMC0xoI.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/stores.UNf3hc21.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/transitions.FXurGCgU.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/chunks/util.CpV-3U2s.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/entry/app.CsPg_tSG.js +7 -0
- package/.svelte-kit/output/client/_app/immutable/entry/start.BK4UymrI.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/0.DpxE_iuA.js +2 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/1.CfFtBDAU.js +4 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/10.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/11.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/12.CnXaShb6.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/13.D6l5S0uo.js +61 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/14.D-06Eivu.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/15.UZK1S76t.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/16.C52UdDDz.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/2.C_PeLfm6.js +5 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/3.DRZNxJIx.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/4.7r5Yp15Y.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/5.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/6.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/7.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/8.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/immutable/nodes/9.B_ssKps0.js +1 -0
- package/.svelte-kit/output/client/_app/version.json +1 -0
- package/.svelte-kit/output/client/default-card.png +0 -0
- package/.svelte-kit/output/client/favicon.png +0 -0
- package/.svelte-kit/output/client/robots.txt +5 -0
- package/.svelte-kit/output/server/.vite/manifest.json +617 -0
- package/.svelte-kit/output/server/_app/immutable/assets/NavigationComponent.DcXBcmND.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/PineappleBaseLayout.BJNkM2lS.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ProgressBar.Cirlo5Z8.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/_layout.BgClWDWR.css +10 -0
- package/.svelte-kit/output/server/_app/immutable/assets/_page.BIMIBpeM.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/_page.ClTmhFiH.css +1 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_blushing.B6Q0SsBp.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_disappointed.LOpkh7Q7.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_happy.Cz9WhdwO.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_lets_go.BxjJjKUv.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_logo.C_a3ZQAP.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_mad.DofDLDmM.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_neutral.Hp923t8N.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_slightly_mad.DdwOp6J5.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_surprised.BxbNH_w8.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/ares_yay.EM2SNr0e.webp +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_ares.DTcFskeK.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_corn.D22ZwTZ0.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_pineapple.D28N65_A.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_reinhard.D22NV0xw.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_tomato.O9Z7_E07.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/bg_tiled_turnip.DMU0uHH4.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/footage-chef-wings.dVBm8Uit.gif +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/header-hep-cat.DcyPS3Oy.mp4 +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/header-pengi.DWAOeO4q.mp4 +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/header-soulwork.BQRWmhTu.mp4 +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/placeholder_circle.Ij3bN7bI.png +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/seaweed-showcase.TTVTTC5m.mp4 +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/weaver-footage.sjDEbkrX.gif +0 -0
- package/.svelte-kit/output/server/_app/immutable/assets/window-set.IpgsYUna.png +0 -0
- package/.svelte-kit/output/server/chunks/CreateUrl.js +17 -0
- package/.svelte-kit/output/server/chunks/DialogManagerStore.js +1412 -0
- package/.svelte-kit/output/server/chunks/NavigationComponent.svelte_svelte_type_style_lang.js +272 -0
- package/.svelte-kit/output/server/chunks/PineappleBaseLayout.svelte_svelte_type_style_lang.js +50 -0
- package/.svelte-kit/output/server/chunks/PineappleSlideToggle.js +120 -0
- package/.svelte-kit/output/server/chunks/ProgressBar.svelte_svelte_type_style_lang.js +60 -0
- package/.svelte-kit/output/server/chunks/SeaweedTemplate.js +786 -0
- package/.svelte-kit/output/server/chunks/_page.js +4 -0
- package/.svelte-kit/output/server/chunks/_page2.js +4 -0
- package/.svelte-kit/output/server/chunks/_page3.js +4 -0
- package/.svelte-kit/output/server/chunks/_page4.js +4 -0
- package/.svelte-kit/output/server/chunks/_page5.js +4 -0
- package/.svelte-kit/output/server/chunks/_page6.js +4 -0
- package/.svelte-kit/output/server/chunks/_page7.js +4 -0
- package/.svelte-kit/output/server/chunks/_page8.js +4 -0
- package/.svelte-kit/output/server/chunks/client.js +12 -0
- package/.svelte-kit/output/server/chunks/close.js +262 -0
- package/.svelte-kit/output/server/chunks/exports.js +200 -0
- package/.svelte-kit/output/server/chunks/index.js +52 -0
- package/.svelte-kit/output/server/chunks/index2.js +34 -0
- package/.svelte-kit/output/server/chunks/index3.js +48 -0
- package/.svelte-kit/output/server/chunks/index4.js +12 -0
- package/.svelte-kit/output/server/chunks/internal.js +247 -0
- package/.svelte-kit/output/server/chunks/prod-ssr.js +6 -0
- package/.svelte-kit/output/server/chunks/ssr.js +322 -0
- package/.svelte-kit/output/server/chunks/stores.js +5 -0
- package/.svelte-kit/output/server/chunks/stores2.js +26 -0
- package/.svelte-kit/output/server/chunks/stores3.js +38 -0
- package/.svelte-kit/output/server/chunks/stores4.js +79 -0
- package/.svelte-kit/output/server/entries/endpoints/api/create-url/_server.ts.js +21 -0
- package/.svelte-kit/output/server/entries/endpoints/api/get-latest-blogs/_server.ts.js +11 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/_layout.svelte.js +291 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/_page.svelte.js +21 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page1/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page2/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page5/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page6/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page7/(test_layout)/page8/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page3/page7/_page.svelte.js +20 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(extra-pages)/page4/_page.svelte.js +16 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(pineapple)/_page.svelte.js +333 -0
- package/.svelte-kit/output/server/entries/pages/(pineapple)/pineapple/(pineapple)/_page.ts.js +9 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/_layout.svelte.js +301 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/_page.svelte.js +19 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/_page.ts.js +9 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_page.svelte.js +23 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_page.ts.js +9 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_slug_/_page.server.ts.js +32 -0
- package/.svelte-kit/output/server/entries/pages/(seaweed)/portfolio/actual/_slug_/_page.svelte.js +39 -0
- package/.svelte-kit/output/server/entries/pages/_error.svelte.js +29 -0
- package/.svelte-kit/output/server/entries/pages/_layout.svelte.js +58 -0
- package/.svelte-kit/output/server/index.js +2955 -0
- package/.svelte-kit/output/server/internal.js +13 -0
- package/.svelte-kit/output/server/manifest-full.js +147 -0
- package/.svelte-kit/output/server/manifest.js +147 -0
- package/.svelte-kit/output/server/nodes/0.js +8 -0
- package/.svelte-kit/output/server/nodes/1.js +8 -0
- package/.svelte-kit/output/server/nodes/10.js +8 -0
- package/.svelte-kit/output/server/nodes/11.js +8 -0
- package/.svelte-kit/output/server/nodes/12.js +8 -0
- package/.svelte-kit/output/server/nodes/13.js +10 -0
- package/.svelte-kit/output/server/nodes/14.js +10 -0
- package/.svelte-kit/output/server/nodes/15.js +10 -0
- package/.svelte-kit/output/server/nodes/16.js +10 -0
- package/.svelte-kit/output/server/nodes/2.js +8 -0
- package/.svelte-kit/output/server/nodes/3.js +8 -0
- package/.svelte-kit/output/server/nodes/4.js +8 -0
- package/.svelte-kit/output/server/nodes/5.js +8 -0
- package/.svelte-kit/output/server/nodes/6.js +8 -0
- package/.svelte-kit/output/server/nodes/7.js +8 -0
- package/.svelte-kit/output/server/nodes/8.js +8 -0
- package/.svelte-kit/output/server/nodes/9.js +8 -0
- package/.svelte-kit/types/route_meta_data.json +1 -2
- package/.svelte-kit/types/src/routes/(seaweed)/portfolio/$types.d.ts +2 -9
- package/dist/.gitignore +1 -1
- package/dist/template/seaweed/ChumBucket.svelte +60 -60
- package/dist/template/seaweed/SeaweedTemplate.svelte +36 -158
- package/dist/template/seaweed/SeaweedTemplate.svelte.d.ts +6 -0
- package/dist/template/seaweed/SeaweedTemplateData.js +3 -9
- package/dist/template/seaweed/entries/EntryProps.d.ts +6 -0
- package/dist/template/seaweed/entries/WorkExperience.svelte +143 -0
- package/dist/template/seaweed/entries/WorkExperience.svelte.d.ts +18 -0
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte +2 -2
- package/dist/template/seaweed/entry_order_config/EntryOrderConfig.svelte.d.ts +1 -0
- package/package.json +1 -2
- package/src/lib/.gitignore +1 -1
- package/src/lib/api/GetLatestBlogs.ts +7 -7
- package/src/lib/api/index.ts +3 -3
- package/src/lib/template/seaweed/ChumBucket.svelte +75 -75
- package/src/lib/template/seaweed/SeaweedTemplate.svelte +41 -161
- package/src/lib/template/seaweed/SeaweedTemplateData.ts +3 -9
- package/src/lib/template/seaweed/entries/EntryProps.ts +7 -0
- package/src/lib/template/seaweed/entries/WorkExperience.svelte +146 -0
- package/src/lib/template/seaweed/entry_order_config/EntryOrderConfig.svelte +1 -2
- package/src/routes/(seaweed)/portfolio/+page.svelte +12 -1
- package/src/routes/(seaweed)/portfolio/actual/+page.svelte +9 -0
- package/src/routes/(seaweed)/portfolio/actual/[slug]/+page.svelte +8 -0
- package/src/routes/api/get-latest-blogs/+server.ts +4 -4
- package/.env +0 -5
- package/.svelte-kit/__package__/scripts/SetDefaultEnvironment.d.ts +0 -1
- package/.svelte-kit/__package__/scripts/SetDefaultEnvironment.js +0 -41
- package/.svelte-kit/types/src/routes/(seaweed)/portfolio/proxy+page.server.ts +0 -46
- package/dist/scripts/SetDefaultEnvironment.d.ts +0 -1
- package/dist/scripts/SetDefaultEnvironment.js +0 -41
- package/src/lib/scripts/SetDefaultEnvironment.ts +0 -45
- package/src/routes/(seaweed)/portfolio/+page.server.ts +0 -44
|
@@ -0,0 +1,1412 @@
|
|
|
1
|
+
import { w as writable } from "./index.js";
|
|
2
|
+
import { r as noop, t as assign, u as identity } from "./ssr.js";
|
|
3
|
+
import { b as backOut } from "./index4.js";
|
|
4
|
+
import { B as BROWSER } from "./prod-ssr.js";
|
|
5
|
+
const is_client = typeof window !== "undefined";
|
|
6
|
+
let now = is_client ? () => window.performance.now() : () => Date.now();
|
|
7
|
+
let raf = is_client ? (cb) => requestAnimationFrame(cb) : noop;
|
|
8
|
+
const tasks = /* @__PURE__ */ new Set();
|
|
9
|
+
function run_tasks(now2) {
|
|
10
|
+
tasks.forEach((task) => {
|
|
11
|
+
if (!task.c(now2)) {
|
|
12
|
+
tasks.delete(task);
|
|
13
|
+
task.f();
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
if (tasks.size !== 0)
|
|
17
|
+
raf(run_tasks);
|
|
18
|
+
}
|
|
19
|
+
function loop(callback) {
|
|
20
|
+
let task;
|
|
21
|
+
if (tasks.size === 0)
|
|
22
|
+
raf(run_tasks);
|
|
23
|
+
return {
|
|
24
|
+
promise: new Promise((fulfill) => {
|
|
25
|
+
tasks.add(task = { c: callback, f: fulfill });
|
|
26
|
+
}),
|
|
27
|
+
abort() {
|
|
28
|
+
tasks.delete(task);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const browser = BROWSER;
|
|
33
|
+
const createNewMapStore = () => {
|
|
34
|
+
return {
|
|
35
|
+
// dumb storage if not in browser
|
|
36
|
+
length: 0,
|
|
37
|
+
setItem: (key, value) => {
|
|
38
|
+
},
|
|
39
|
+
getItem: (key) => {
|
|
40
|
+
return null;
|
|
41
|
+
},
|
|
42
|
+
clear: () => {
|
|
43
|
+
},
|
|
44
|
+
key: (index) => {
|
|
45
|
+
return null;
|
|
46
|
+
},
|
|
47
|
+
removeItem: (key) => {
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
var DialogState = /* @__PURE__ */ ((DialogState2) => {
|
|
52
|
+
DialogState2[DialogState2["Invisible"] = 0] = "Invisible";
|
|
53
|
+
DialogState2[DialogState2["Visible"] = 1] = "Visible";
|
|
54
|
+
DialogState2[DialogState2["Busy"] = 2] = "Busy";
|
|
55
|
+
DialogState2[DialogState2["Inherit"] = 3] = "Inherit";
|
|
56
|
+
return DialogState2;
|
|
57
|
+
})(DialogState || {});
|
|
58
|
+
function is_date(obj) {
|
|
59
|
+
return Object.prototype.toString.call(obj) === "[object Date]";
|
|
60
|
+
}
|
|
61
|
+
function get_interpolator(a, b) {
|
|
62
|
+
if (a === b || a !== a)
|
|
63
|
+
return () => a;
|
|
64
|
+
const type = typeof a;
|
|
65
|
+
if (type !== typeof b || Array.isArray(a) !== Array.isArray(b)) {
|
|
66
|
+
throw new Error("Cannot interpolate values of different type");
|
|
67
|
+
}
|
|
68
|
+
if (Array.isArray(a)) {
|
|
69
|
+
const arr = b.map((bi, i) => {
|
|
70
|
+
return get_interpolator(a[i], bi);
|
|
71
|
+
});
|
|
72
|
+
return (t) => arr.map((fn) => fn(t));
|
|
73
|
+
}
|
|
74
|
+
if (type === "object") {
|
|
75
|
+
if (!a || !b)
|
|
76
|
+
throw new Error("Object cannot be null");
|
|
77
|
+
if (is_date(a) && is_date(b)) {
|
|
78
|
+
a = a.getTime();
|
|
79
|
+
b = b.getTime();
|
|
80
|
+
const delta = b - a;
|
|
81
|
+
return (t) => new Date(a + t * delta);
|
|
82
|
+
}
|
|
83
|
+
const keys = Object.keys(b);
|
|
84
|
+
const interpolators = {};
|
|
85
|
+
keys.forEach((key) => {
|
|
86
|
+
interpolators[key] = get_interpolator(a[key], b[key]);
|
|
87
|
+
});
|
|
88
|
+
return (t) => {
|
|
89
|
+
const result = {};
|
|
90
|
+
keys.forEach((key) => {
|
|
91
|
+
result[key] = interpolators[key](t);
|
|
92
|
+
});
|
|
93
|
+
return result;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (type === "number") {
|
|
97
|
+
const delta = b - a;
|
|
98
|
+
return (t) => a + t * delta;
|
|
99
|
+
}
|
|
100
|
+
throw new Error(`Cannot interpolate ${type} values`);
|
|
101
|
+
}
|
|
102
|
+
function tweened(value, defaults = {}) {
|
|
103
|
+
const store = writable(value);
|
|
104
|
+
let task;
|
|
105
|
+
let target_value = value;
|
|
106
|
+
function set(new_value, opts) {
|
|
107
|
+
if (value == null) {
|
|
108
|
+
store.set(value = new_value);
|
|
109
|
+
return Promise.resolve();
|
|
110
|
+
}
|
|
111
|
+
target_value = new_value;
|
|
112
|
+
let previous_task = task;
|
|
113
|
+
let started = false;
|
|
114
|
+
let {
|
|
115
|
+
delay = 0,
|
|
116
|
+
duration = 400,
|
|
117
|
+
easing = identity,
|
|
118
|
+
interpolate = get_interpolator
|
|
119
|
+
} = assign(assign({}, defaults), opts);
|
|
120
|
+
if (duration === 0) {
|
|
121
|
+
if (previous_task) {
|
|
122
|
+
previous_task.abort();
|
|
123
|
+
previous_task = null;
|
|
124
|
+
}
|
|
125
|
+
store.set(value = target_value);
|
|
126
|
+
return Promise.resolve();
|
|
127
|
+
}
|
|
128
|
+
const start = now() + delay;
|
|
129
|
+
let fn;
|
|
130
|
+
task = loop((now2) => {
|
|
131
|
+
if (now2 < start)
|
|
132
|
+
return true;
|
|
133
|
+
if (!started) {
|
|
134
|
+
fn = interpolate(value, new_value);
|
|
135
|
+
if (typeof duration === "function")
|
|
136
|
+
duration = duration(value, new_value);
|
|
137
|
+
started = true;
|
|
138
|
+
}
|
|
139
|
+
if (previous_task) {
|
|
140
|
+
previous_task.abort();
|
|
141
|
+
previous_task = null;
|
|
142
|
+
}
|
|
143
|
+
const elapsed = now2 - start;
|
|
144
|
+
if (elapsed > /** @type {number} */
|
|
145
|
+
duration) {
|
|
146
|
+
store.set(value = new_value);
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
store.set(value = fn(easing(elapsed / duration)));
|
|
150
|
+
return true;
|
|
151
|
+
});
|
|
152
|
+
return task.promise;
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
set,
|
|
156
|
+
update: (fn, opts) => set(fn(target_value, value), opts),
|
|
157
|
+
subscribe: store.subscribe
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
var PortraitType = /* @__PURE__ */ ((PortraitType2) => {
|
|
161
|
+
PortraitType2["AresHappy"] = "AresHappy";
|
|
162
|
+
PortraitType2["AresDisappointed"] = "AresDisappointed";
|
|
163
|
+
PortraitType2["AresBlushing"] = "AresBlushing";
|
|
164
|
+
PortraitType2["AresLetsGo"] = "AresLetsGo";
|
|
165
|
+
PortraitType2["AresMad"] = "AresMad";
|
|
166
|
+
PortraitType2["AresNeutral"] = "AresNeutral";
|
|
167
|
+
PortraitType2["AresSlightlyMad"] = "AresSlightlyMad";
|
|
168
|
+
PortraitType2["AresSurprised"] = "AresSurprised";
|
|
169
|
+
PortraitType2["AresYay"] = "AresYay";
|
|
170
|
+
return PortraitType2;
|
|
171
|
+
})(PortraitType || {});
|
|
172
|
+
const AresHappy = "/_app/immutable/assets/ares_happy.Cz9WhdwO.webp";
|
|
173
|
+
const AresBlushing = "/_app/immutable/assets/ares_blushing.B6Q0SsBp.webp";
|
|
174
|
+
const AresDisappointed = "/_app/immutable/assets/ares_disappointed.LOpkh7Q7.webp";
|
|
175
|
+
const AresLetsGo = "/_app/immutable/assets/ares_lets_go.BxjJjKUv.webp";
|
|
176
|
+
const AresMad = "/_app/immutable/assets/ares_mad.DofDLDmM.webp";
|
|
177
|
+
const AresNeutral = "/_app/immutable/assets/ares_neutral.Hp923t8N.webp";
|
|
178
|
+
const AresSlightlyMad = "/_app/immutable/assets/ares_slightly_mad.DdwOp6J5.webp";
|
|
179
|
+
const AresSurprised = "/_app/immutable/assets/ares_surprised.BxbNH_w8.webp";
|
|
180
|
+
const TestImage = "/_app/immutable/assets/ares_yay.EM2SNr0e.webp";
|
|
181
|
+
var IfMode = /* @__PURE__ */ ((IfMode2) => {
|
|
182
|
+
IfMode2[IfMode2["Search"] = 0] = "Search";
|
|
183
|
+
IfMode2[IfMode2["Ignore"] = 1] = "Ignore";
|
|
184
|
+
IfMode2[IfMode2["Evaluated"] = 2] = "Evaluated";
|
|
185
|
+
IfMode2[IfMode2["EvaluateNext"] = 3] = "EvaluateNext";
|
|
186
|
+
return IfMode2;
|
|
187
|
+
})(IfMode || {});
|
|
188
|
+
class BehaviorState {
|
|
189
|
+
ifModeStack = [IfMode.Search];
|
|
190
|
+
ignoreJumps = false;
|
|
191
|
+
}
|
|
192
|
+
var BehaviorStatus = /* @__PURE__ */ ((BehaviorStatus2) => {
|
|
193
|
+
BehaviorStatus2[BehaviorStatus2["Running"] = 0] = "Running";
|
|
194
|
+
BehaviorStatus2[BehaviorStatus2["Success"] = 1] = "Success";
|
|
195
|
+
BehaviorStatus2[BehaviorStatus2["Failure"] = 2] = "Failure";
|
|
196
|
+
return BehaviorStatus2;
|
|
197
|
+
})(BehaviorStatus || {});
|
|
198
|
+
var OperatorType = /* @__PURE__ */ ((OperatorType2) => {
|
|
199
|
+
OperatorType2[OperatorType2["Unary"] = 0] = "Unary";
|
|
200
|
+
OperatorType2[OperatorType2["Binary"] = 1] = "Binary";
|
|
201
|
+
return OperatorType2;
|
|
202
|
+
})(OperatorType || {});
|
|
203
|
+
class OperatorLogicNode {
|
|
204
|
+
process(nodeArgs) {
|
|
205
|
+
const currentOperands = [];
|
|
206
|
+
switch (this.getOperatorType()) {
|
|
207
|
+
case 0:
|
|
208
|
+
currentOperands.unshift(nodeArgs.initState.operandStack.pop());
|
|
209
|
+
break;
|
|
210
|
+
case 1:
|
|
211
|
+
currentOperands.unshift(nodeArgs.initState.operandStack.pop());
|
|
212
|
+
currentOperands.unshift(nodeArgs.initState.operandStack.pop());
|
|
213
|
+
break;
|
|
214
|
+
default:
|
|
215
|
+
console.error(`Unimplemented operator type: ${this.getOperatorType()}`);
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
this.doOperation(currentOperands, nodeArgs);
|
|
219
|
+
return {
|
|
220
|
+
nextState: nodeArgs.initState,
|
|
221
|
+
status: BehaviorStatus.Success
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
class EqualityOperator extends OperatorLogicNode {
|
|
226
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
227
|
+
nodeArgs.initState.operandStack.push(String(currentOperands[0] === currentOperands[1]));
|
|
228
|
+
};
|
|
229
|
+
getOperatorType = () => {
|
|
230
|
+
return OperatorType.Binary;
|
|
231
|
+
};
|
|
232
|
+
getToken = () => {
|
|
233
|
+
return "==";
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
class InequalityOperator extends OperatorLogicNode {
|
|
237
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
238
|
+
nodeArgs.initState.operandStack.push(String(currentOperands[0] !== currentOperands[1]));
|
|
239
|
+
};
|
|
240
|
+
getOperatorType = () => {
|
|
241
|
+
return OperatorType.Binary;
|
|
242
|
+
};
|
|
243
|
+
getToken = () => {
|
|
244
|
+
return "!=";
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
class GreaterThanOperator extends OperatorLogicNode {
|
|
248
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
249
|
+
nodeArgs.initState.operandStack.push(
|
|
250
|
+
String(Number(currentOperands[0]) > Number(currentOperands[1]))
|
|
251
|
+
);
|
|
252
|
+
};
|
|
253
|
+
getOperatorType = () => {
|
|
254
|
+
return OperatorType.Binary;
|
|
255
|
+
};
|
|
256
|
+
getToken = () => {
|
|
257
|
+
return ">";
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
class GreaterThanEqualOperator extends OperatorLogicNode {
|
|
261
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
262
|
+
nodeArgs.initState.operandStack.push(
|
|
263
|
+
String(Number(currentOperands[0]) >= Number(currentOperands[1]))
|
|
264
|
+
);
|
|
265
|
+
};
|
|
266
|
+
getOperatorType = () => {
|
|
267
|
+
return OperatorType.Binary;
|
|
268
|
+
};
|
|
269
|
+
getToken = () => {
|
|
270
|
+
return ">=";
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
class LessThanOperator extends OperatorLogicNode {
|
|
274
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
275
|
+
nodeArgs.initState.operandStack.push(
|
|
276
|
+
String(Number(currentOperands[0]) < Number(currentOperands[1]))
|
|
277
|
+
);
|
|
278
|
+
};
|
|
279
|
+
getOperatorType = () => {
|
|
280
|
+
return OperatorType.Binary;
|
|
281
|
+
};
|
|
282
|
+
getToken = () => {
|
|
283
|
+
return "<";
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
class LessThanEqualOperator extends OperatorLogicNode {
|
|
287
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
288
|
+
nodeArgs.initState.operandStack.push(
|
|
289
|
+
String(Number(currentOperands[0]) <= Number(currentOperands[1]))
|
|
290
|
+
);
|
|
291
|
+
};
|
|
292
|
+
getOperatorType = () => {
|
|
293
|
+
return OperatorType.Binary;
|
|
294
|
+
};
|
|
295
|
+
getToken = () => {
|
|
296
|
+
return "<=";
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
class BTreeUtils {
|
|
300
|
+
/**
|
|
301
|
+
* peek the top of a stack object with the assumption it's not an empty stack
|
|
302
|
+
* todo: add possible protection like an assertion
|
|
303
|
+
* @param stack
|
|
304
|
+
* @return top of the stack
|
|
305
|
+
*/
|
|
306
|
+
peek = (stack) => {
|
|
307
|
+
return stack[stack.length - 1];
|
|
308
|
+
};
|
|
309
|
+
removeQuotes = (value) => {
|
|
310
|
+
return value.replace(/^"/, "").replace(/"$/, "");
|
|
311
|
+
};
|
|
312
|
+
simplifyToken = (oldToken) => {
|
|
313
|
+
if (oldToken[0] == "$") {
|
|
314
|
+
const value = localStorage.getItem(oldToken);
|
|
315
|
+
if (value) {
|
|
316
|
+
return value;
|
|
317
|
+
}
|
|
318
|
+
console.error(`Value obtained in local storage false: ${oldToken}`);
|
|
319
|
+
return "";
|
|
320
|
+
}
|
|
321
|
+
return btreeUtils.removeQuotes(oldToken);
|
|
322
|
+
};
|
|
323
|
+
isTrue = (value) => {
|
|
324
|
+
return value.trim().toLowerCase() === "true";
|
|
325
|
+
};
|
|
326
|
+
isFalse = (value) => {
|
|
327
|
+
return value.trim().toLowerCase() === "false";
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
const btreeUtils = new BTreeUtils();
|
|
331
|
+
class NegationOperator extends OperatorLogicNode {
|
|
332
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
333
|
+
nodeArgs.initState.operandStack.push(String(!btreeUtils.isTrue(currentOperands[0])));
|
|
334
|
+
};
|
|
335
|
+
getOperatorType = () => {
|
|
336
|
+
return OperatorType.Unary;
|
|
337
|
+
};
|
|
338
|
+
getToken = () => {
|
|
339
|
+
return "!";
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
class AndOperator extends OperatorLogicNode {
|
|
343
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
344
|
+
nodeArgs.initState.operandStack.push(
|
|
345
|
+
String(btreeUtils.isTrue(currentOperands[0]) && btreeUtils.isTrue(currentOperands[1]))
|
|
346
|
+
);
|
|
347
|
+
};
|
|
348
|
+
getOperatorType = () => {
|
|
349
|
+
return OperatorType.Binary;
|
|
350
|
+
};
|
|
351
|
+
getToken = () => {
|
|
352
|
+
return "&&";
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
class OrOperator extends OperatorLogicNode {
|
|
356
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
357
|
+
nodeArgs.initState.operandStack.push(
|
|
358
|
+
String(btreeUtils.isTrue(currentOperands[0]) || btreeUtils.isTrue(currentOperands[1]))
|
|
359
|
+
);
|
|
360
|
+
};
|
|
361
|
+
getOperatorType = () => {
|
|
362
|
+
return OperatorType.Binary;
|
|
363
|
+
};
|
|
364
|
+
getToken = () => {
|
|
365
|
+
return "||";
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
class XorOperator extends OperatorLogicNode {
|
|
369
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
370
|
+
const A = btreeUtils.isTrue(currentOperands[0]);
|
|
371
|
+
const B = btreeUtils.isTrue(currentOperands[1]);
|
|
372
|
+
nodeArgs.initState.operandStack.push(String(!(A && B || A || B)));
|
|
373
|
+
};
|
|
374
|
+
getOperatorType = () => {
|
|
375
|
+
return OperatorType.Binary;
|
|
376
|
+
};
|
|
377
|
+
getToken = () => {
|
|
378
|
+
return "^";
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
class AddOperator extends OperatorLogicNode {
|
|
382
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
383
|
+
nodeArgs.initState.operandStack.push(
|
|
384
|
+
String(Number(currentOperands[0]) + Number(currentOperands[1]))
|
|
385
|
+
);
|
|
386
|
+
};
|
|
387
|
+
getOperatorType = () => {
|
|
388
|
+
return OperatorType.Binary;
|
|
389
|
+
};
|
|
390
|
+
getToken = () => {
|
|
391
|
+
return "+";
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
class MinusOperator extends OperatorLogicNode {
|
|
395
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
396
|
+
nodeArgs.initState.operandStack.push(
|
|
397
|
+
String(Number(currentOperands[0]) - Number(currentOperands[1]))
|
|
398
|
+
);
|
|
399
|
+
};
|
|
400
|
+
getOperatorType = () => {
|
|
401
|
+
return OperatorType.Binary;
|
|
402
|
+
};
|
|
403
|
+
getToken = () => {
|
|
404
|
+
return "-";
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
class MultiplicationOperator extends OperatorLogicNode {
|
|
408
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
409
|
+
nodeArgs.initState.operandStack.push(
|
|
410
|
+
String(Number(currentOperands[0]) * Number(currentOperands[1]))
|
|
411
|
+
);
|
|
412
|
+
};
|
|
413
|
+
getOperatorType = () => {
|
|
414
|
+
return OperatorType.Binary;
|
|
415
|
+
};
|
|
416
|
+
getToken = () => {
|
|
417
|
+
return "*";
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
class DivisionOperator extends OperatorLogicNode {
|
|
421
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
422
|
+
nodeArgs.initState.operandStack.push(
|
|
423
|
+
String(Number(currentOperands[0]) / Number(currentOperands[1]))
|
|
424
|
+
);
|
|
425
|
+
};
|
|
426
|
+
getOperatorType = () => {
|
|
427
|
+
return OperatorType.Binary;
|
|
428
|
+
};
|
|
429
|
+
getToken = () => {
|
|
430
|
+
return "/";
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
class RemainderDivisionOperator extends OperatorLogicNode {
|
|
434
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
435
|
+
nodeArgs.initState.operandStack.push(
|
|
436
|
+
String(Number(currentOperands[0]) % Number(currentOperands[1]))
|
|
437
|
+
);
|
|
438
|
+
};
|
|
439
|
+
getOperatorType = () => {
|
|
440
|
+
return OperatorType.Binary;
|
|
441
|
+
};
|
|
442
|
+
getToken = () => {
|
|
443
|
+
return "%";
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
class OperatorMap {
|
|
447
|
+
_operatorLogicMap = /* @__PURE__ */ new Map();
|
|
448
|
+
constructor() {
|
|
449
|
+
[
|
|
450
|
+
new EqualityOperator(),
|
|
451
|
+
new InequalityOperator(),
|
|
452
|
+
new GreaterThanOperator(),
|
|
453
|
+
new GreaterThanEqualOperator(),
|
|
454
|
+
new LessThanOperator(),
|
|
455
|
+
new LessThanEqualOperator(),
|
|
456
|
+
new NegationOperator(),
|
|
457
|
+
new AndOperator(),
|
|
458
|
+
new OrOperator(),
|
|
459
|
+
new XorOperator(),
|
|
460
|
+
new AddOperator(),
|
|
461
|
+
new MinusOperator(),
|
|
462
|
+
new MultiplicationOperator(),
|
|
463
|
+
new DivisionOperator(),
|
|
464
|
+
new RemainderDivisionOperator()
|
|
465
|
+
].forEach((operatorLogic) => {
|
|
466
|
+
this._operatorLogicMap.set(operatorLogic.getToken(), operatorLogic);
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
get = (operator) => {
|
|
470
|
+
return this._operatorLogicMap.get(operator);
|
|
471
|
+
};
|
|
472
|
+
exists = (operator) => {
|
|
473
|
+
return this.get(operator) !== void 0;
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
const operatorMap = new OperatorMap();
|
|
477
|
+
class OperatorNode {
|
|
478
|
+
process(nodeArgs) {
|
|
479
|
+
if (!operatorMap.exists(nodeArgs.token)) {
|
|
480
|
+
return {
|
|
481
|
+
nextState: nodeArgs.initState,
|
|
482
|
+
status: BehaviorStatus.Failure
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
const logic = operatorMap.get(nodeArgs.token);
|
|
486
|
+
if (logic === void 0) {
|
|
487
|
+
console.error(`Unimplemented operator: ${nodeArgs.token}`);
|
|
488
|
+
return {
|
|
489
|
+
nextState: nodeArgs.initState,
|
|
490
|
+
status: BehaviorStatus.Failure
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
logic.process(nodeArgs);
|
|
494
|
+
return {
|
|
495
|
+
nextState: nodeArgs.initState,
|
|
496
|
+
status: BehaviorStatus.Success
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
class OperandNode {
|
|
501
|
+
process(nodeArgs) {
|
|
502
|
+
nodeArgs.initState.operandStack.push(btreeUtils.simplifyToken(nodeArgs.token));
|
|
503
|
+
return {
|
|
504
|
+
nextState: nodeArgs.initState,
|
|
505
|
+
status: BehaviorStatus.Success
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
class SelectorNode {
|
|
510
|
+
nodeList;
|
|
511
|
+
constructor(nodeList) {
|
|
512
|
+
this.nodeList = nodeList;
|
|
513
|
+
}
|
|
514
|
+
process(nodeArgs) {
|
|
515
|
+
let finalResult = this.defaultResult();
|
|
516
|
+
for (const node of this.nodeList) {
|
|
517
|
+
const currentResult = node.process(nodeArgs);
|
|
518
|
+
if (currentResult.status !== BehaviorStatus.Failure) {
|
|
519
|
+
finalResult = currentResult;
|
|
520
|
+
break;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return finalResult;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
class ExpressionSelectorNode extends SelectorNode {
|
|
527
|
+
constructor(nodeList) {
|
|
528
|
+
super(nodeList);
|
|
529
|
+
}
|
|
530
|
+
defaultResult = () => {
|
|
531
|
+
return {
|
|
532
|
+
nextState: {
|
|
533
|
+
operandStack: []
|
|
534
|
+
},
|
|
535
|
+
status: BehaviorStatus.Failure
|
|
536
|
+
};
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
class CommandLogicNode {
|
|
540
|
+
// do side effects on to the result instead
|
|
541
|
+
process(nodeArgs) {
|
|
542
|
+
const currentOperands = nodeArgs.initState.operandStack.slice(
|
|
543
|
+
nodeArgs.initState.operandStack.length - this.getArgumentCount(),
|
|
544
|
+
nodeArgs.initState.operandStack.length
|
|
545
|
+
);
|
|
546
|
+
nodeArgs.initState.operandStack = nodeArgs.initState.operandStack.slice(
|
|
547
|
+
0,
|
|
548
|
+
nodeArgs.initState.operandStack.length - this.getArgumentCount()
|
|
549
|
+
);
|
|
550
|
+
if (currentOperands.length !== this.getArgumentCount()) {
|
|
551
|
+
console.error(`Insufficient operands/arguments found for command ${this.getToken()}`);
|
|
552
|
+
console.error(`Arguments found instead: ${currentOperands}`);
|
|
553
|
+
console.error(`Error occurred at token: ${nodeArgs.token}`);
|
|
554
|
+
} else {
|
|
555
|
+
this.doOperation(currentOperands, nodeArgs);
|
|
556
|
+
}
|
|
557
|
+
return {
|
|
558
|
+
nextState: nodeArgs.initState,
|
|
559
|
+
status: BehaviorStatus.Success
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
class RandomRangeCommand extends CommandLogicNode {
|
|
564
|
+
/**
|
|
565
|
+
* From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values
|
|
566
|
+
*/
|
|
567
|
+
getRandomInt = (min, max) => {
|
|
568
|
+
min = Math.ceil(min);
|
|
569
|
+
max = Math.floor(max);
|
|
570
|
+
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
571
|
+
};
|
|
572
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
573
|
+
nodeArgs.initState.operandStack.push(
|
|
574
|
+
String(this.getRandomInt(Number(currentOperands[0]), Number(currentOperands[1])))
|
|
575
|
+
);
|
|
576
|
+
};
|
|
577
|
+
getArgumentCount = () => {
|
|
578
|
+
return 2;
|
|
579
|
+
};
|
|
580
|
+
getToken = () => {
|
|
581
|
+
return "#random_range";
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
class VisitedCountCommand extends CommandLogicNode {
|
|
585
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
586
|
+
const value = Number(dialogVariableStore.getItem(`+${currentOperands[0]}`));
|
|
587
|
+
if (isNaN(value) || value === 0) {
|
|
588
|
+
nodeArgs.initState.operandStack.push("0");
|
|
589
|
+
} else {
|
|
590
|
+
nodeArgs.initState.operandStack.push(String(value));
|
|
591
|
+
}
|
|
592
|
+
};
|
|
593
|
+
getArgumentCount = () => {
|
|
594
|
+
return 1;
|
|
595
|
+
};
|
|
596
|
+
getToken = () => {
|
|
597
|
+
return "#visited_count";
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
class VisitedCommand extends CommandLogicNode {
|
|
601
|
+
visitedCountCommand = new VisitedCountCommand();
|
|
602
|
+
doOperation = (currentOperands, nodeArgs) => {
|
|
603
|
+
this.visitedCountCommand.process(nodeArgs);
|
|
604
|
+
const value = Number(nodeArgs.initState.operandStack.pop());
|
|
605
|
+
if (isNaN(value) || value === 0) {
|
|
606
|
+
nodeArgs.initState.operandStack.push("false");
|
|
607
|
+
} else {
|
|
608
|
+
nodeArgs.initState.operandStack.push("true");
|
|
609
|
+
}
|
|
610
|
+
};
|
|
611
|
+
getArgumentCount = () => {
|
|
612
|
+
return 0;
|
|
613
|
+
};
|
|
614
|
+
getToken = () => {
|
|
615
|
+
return "#visited";
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
class CommandMap {
|
|
619
|
+
_commandMap = /* @__PURE__ */ new Map();
|
|
620
|
+
constructor() {
|
|
621
|
+
[new RandomRangeCommand(), new VisitedCountCommand(), new VisitedCommand()].forEach(
|
|
622
|
+
(commandLogic) => {
|
|
623
|
+
this._commandMap.set(commandLogic.getToken(), commandLogic);
|
|
624
|
+
}
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
get = (command) => {
|
|
628
|
+
return this._commandMap.get(command);
|
|
629
|
+
};
|
|
630
|
+
exists = (command) => {
|
|
631
|
+
return this.get(command) !== void 0;
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
const commandMap = new CommandMap();
|
|
635
|
+
class CommandExpressionNode {
|
|
636
|
+
process(nodeArgs) {
|
|
637
|
+
const commandNode = commandMap.get(nodeArgs.token);
|
|
638
|
+
if (commandNode === void 0) {
|
|
639
|
+
if (nodeArgs.token.startsWith("#")) {
|
|
640
|
+
console.error(`Unimplemented command: ${nodeArgs.token}`);
|
|
641
|
+
}
|
|
642
|
+
return {
|
|
643
|
+
nextState: nodeArgs.initState,
|
|
644
|
+
status: BehaviorStatus.Failure
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
commandNode.process(nodeArgs);
|
|
648
|
+
return {
|
|
649
|
+
nextState: nodeArgs.initState,
|
|
650
|
+
status: BehaviorStatus.Success
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
class ExpressionEvaluator {
|
|
655
|
+
evaluatorTree = new ExpressionSelectorNode([
|
|
656
|
+
new OperatorNode(),
|
|
657
|
+
new CommandExpressionNode(),
|
|
658
|
+
new OperandNode()
|
|
659
|
+
]);
|
|
660
|
+
// from https://stackoverflow.com/a/175787/17836168
|
|
661
|
+
isNumeric = (str) => {
|
|
662
|
+
return (
|
|
663
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
664
|
+
// @ts-ignore
|
|
665
|
+
!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
|
|
666
|
+
!isNaN(parseFloat(str))
|
|
667
|
+
);
|
|
668
|
+
};
|
|
669
|
+
getPrecedence = (token) => {
|
|
670
|
+
switch (token) {
|
|
671
|
+
case "&&":
|
|
672
|
+
case "||":
|
|
673
|
+
case "^":
|
|
674
|
+
return 1;
|
|
675
|
+
case "==":
|
|
676
|
+
case "!=":
|
|
677
|
+
return 2;
|
|
678
|
+
case "<":
|
|
679
|
+
case ">":
|
|
680
|
+
case ">=":
|
|
681
|
+
case "<=":
|
|
682
|
+
return 3;
|
|
683
|
+
case "+":
|
|
684
|
+
case "-":
|
|
685
|
+
return 4;
|
|
686
|
+
case "*":
|
|
687
|
+
case "/":
|
|
688
|
+
case "%":
|
|
689
|
+
return 3;
|
|
690
|
+
case "!":
|
|
691
|
+
return 4;
|
|
692
|
+
case "(":
|
|
693
|
+
case ")":
|
|
694
|
+
return 0;
|
|
695
|
+
default:
|
|
696
|
+
return -1;
|
|
697
|
+
}
|
|
698
|
+
};
|
|
699
|
+
evaluateFreeform = (line, prefix) => {
|
|
700
|
+
{
|
|
701
|
+
return [];
|
|
702
|
+
}
|
|
703
|
+
};
|
|
704
|
+
/**
|
|
705
|
+
* evaluates a yarn if or elseif statement
|
|
706
|
+
* @param line is the current line being evaluated
|
|
707
|
+
* @param prefix is either "<<if" or "<<elseif"
|
|
708
|
+
*/
|
|
709
|
+
evaluate = (line, prefix) => {
|
|
710
|
+
{
|
|
711
|
+
return false;
|
|
712
|
+
}
|
|
713
|
+
};
|
|
714
|
+
}
|
|
715
|
+
const expressionEvaluator = new ExpressionEvaluator();
|
|
716
|
+
class IfNode {
|
|
717
|
+
process(nodeArgs) {
|
|
718
|
+
if (!nodeArgs.line.startsWith("<<if")) {
|
|
719
|
+
return {
|
|
720
|
+
renderedLine: "",
|
|
721
|
+
nextState: nodeArgs.initState,
|
|
722
|
+
status: BehaviorStatus.Failure
|
|
723
|
+
};
|
|
724
|
+
}
|
|
725
|
+
const currentIfMode = btreeUtils.peek(nodeArgs.initState.ifModeStack);
|
|
726
|
+
if ([IfMode.EvaluateNext, IfMode.Ignore].includes(currentIfMode)) {
|
|
727
|
+
console.log("Skipping if node because");
|
|
728
|
+
nodeArgs.initState.ifModeStack.push(IfMode.Ignore);
|
|
729
|
+
return {
|
|
730
|
+
renderedLine: "",
|
|
731
|
+
nextState: nodeArgs.initState,
|
|
732
|
+
status: BehaviorStatus.Success
|
|
733
|
+
};
|
|
734
|
+
}
|
|
735
|
+
if (expressionEvaluator.evaluate(nodeArgs.line, "<<if")) {
|
|
736
|
+
nodeArgs.initState.ifModeStack.push(IfMode.Evaluated);
|
|
737
|
+
} else {
|
|
738
|
+
nodeArgs.initState.ifModeStack.push(IfMode.EvaluateNext);
|
|
739
|
+
}
|
|
740
|
+
return {
|
|
741
|
+
renderedLine: "",
|
|
742
|
+
nextState: nodeArgs.initState,
|
|
743
|
+
status: BehaviorStatus.Success
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
class EndIfNode {
|
|
748
|
+
process(nodeArgs) {
|
|
749
|
+
if (!nodeArgs.line.startsWith("<<endif>>")) {
|
|
750
|
+
return {
|
|
751
|
+
nextState: nodeArgs.initState,
|
|
752
|
+
renderedLine: "",
|
|
753
|
+
status: BehaviorStatus.Failure
|
|
754
|
+
};
|
|
755
|
+
}
|
|
756
|
+
nodeArgs.initState.ifModeStack.pop();
|
|
757
|
+
return {
|
|
758
|
+
nextState: nodeArgs.initState,
|
|
759
|
+
renderedLine: "",
|
|
760
|
+
status: BehaviorStatus.Success
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
class ElseNode {
|
|
765
|
+
process(nodeArgs) {
|
|
766
|
+
if (!nodeArgs.line.startsWith("<<else>>")) {
|
|
767
|
+
return {
|
|
768
|
+
nextState: nodeArgs.initState,
|
|
769
|
+
renderedLine: "",
|
|
770
|
+
status: BehaviorStatus.Failure
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
const currentIfMode = btreeUtils.peek(nodeArgs.initState.ifModeStack);
|
|
774
|
+
switch (currentIfMode) {
|
|
775
|
+
case IfMode.Search:
|
|
776
|
+
console.error("Syntax error found in yarn dialog!");
|
|
777
|
+
console.error(`Check out line ${nodeArgs.lineIndex + 1}: ${nodeArgs.line}`);
|
|
778
|
+
break;
|
|
779
|
+
case IfMode.Ignore:
|
|
780
|
+
break;
|
|
781
|
+
case IfMode.Evaluated:
|
|
782
|
+
nodeArgs.initState.ifModeStack.pop();
|
|
783
|
+
nodeArgs.initState.ifModeStack.push(IfMode.Ignore);
|
|
784
|
+
break;
|
|
785
|
+
case IfMode.EvaluateNext:
|
|
786
|
+
nodeArgs.initState.ifModeStack.pop();
|
|
787
|
+
nodeArgs.initState.ifModeStack.push(IfMode.Evaluated);
|
|
788
|
+
break;
|
|
789
|
+
default:
|
|
790
|
+
console.error("Unimplemented if state!");
|
|
791
|
+
console.error(`Check out line ${nodeArgs.lineIndex + 1}: ${nodeArgs.line}`);
|
|
792
|
+
break;
|
|
793
|
+
}
|
|
794
|
+
return {
|
|
795
|
+
nextState: nodeArgs.initState,
|
|
796
|
+
renderedLine: "",
|
|
797
|
+
status: BehaviorStatus.Success
|
|
798
|
+
};
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
class ElseIfNode {
|
|
802
|
+
process(nodeArgs) {
|
|
803
|
+
if (!nodeArgs.line.startsWith("<<elseif")) {
|
|
804
|
+
return {
|
|
805
|
+
nextState: nodeArgs.initState,
|
|
806
|
+
renderedLine: "",
|
|
807
|
+
status: BehaviorStatus.Failure
|
|
808
|
+
};
|
|
809
|
+
}
|
|
810
|
+
const currentIfMode = btreeUtils.peek(nodeArgs.initState.ifModeStack);
|
|
811
|
+
switch (currentIfMode) {
|
|
812
|
+
case IfMode.Search:
|
|
813
|
+
console.error("Syntax error found in yarn dialog!");
|
|
814
|
+
console.error(`Check out line ${nodeArgs.lineIndex + 1}: ${nodeArgs.line}`);
|
|
815
|
+
break;
|
|
816
|
+
case IfMode.Ignore:
|
|
817
|
+
break;
|
|
818
|
+
case IfMode.Evaluated:
|
|
819
|
+
nodeArgs.initState.ifModeStack.pop();
|
|
820
|
+
nodeArgs.initState.ifModeStack.push(IfMode.Ignore);
|
|
821
|
+
break;
|
|
822
|
+
case IfMode.EvaluateNext:
|
|
823
|
+
if (expressionEvaluator.evaluate(nodeArgs.line, "<<elseif")) {
|
|
824
|
+
nodeArgs.initState.ifModeStack.pop();
|
|
825
|
+
nodeArgs.initState.ifModeStack.push(IfMode.Evaluated);
|
|
826
|
+
}
|
|
827
|
+
break;
|
|
828
|
+
default:
|
|
829
|
+
console.error("Unimplemented if state!");
|
|
830
|
+
console.error(`Check out line ${nodeArgs.lineIndex + 1}: ${nodeArgs.line}`);
|
|
831
|
+
break;
|
|
832
|
+
}
|
|
833
|
+
return {
|
|
834
|
+
nextState: nodeArgs.initState,
|
|
835
|
+
renderedLine: "",
|
|
836
|
+
status: BehaviorStatus.Success
|
|
837
|
+
};
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
class SetVariableNode {
|
|
841
|
+
process(nodeArgs) {
|
|
842
|
+
if (!nodeArgs.line.startsWith("<<set")) {
|
|
843
|
+
return {
|
|
844
|
+
nextState: nodeArgs.initState,
|
|
845
|
+
renderedLine: "",
|
|
846
|
+
status: BehaviorStatus.Failure
|
|
847
|
+
};
|
|
848
|
+
}
|
|
849
|
+
const setValuePair = nodeArgs.line.split("=");
|
|
850
|
+
const key = setValuePair[0].slice("<<set ".length).trim();
|
|
851
|
+
setValuePair.shift();
|
|
852
|
+
const preValue = setValuePair.join("=").trim();
|
|
853
|
+
const value = expressionEvaluator.evaluateFreeform(preValue, "");
|
|
854
|
+
dialogVariableStore.setItem(key, btreeUtils.peek(value));
|
|
855
|
+
return {
|
|
856
|
+
nextState: nodeArgs.initState,
|
|
857
|
+
renderedLine: "",
|
|
858
|
+
status: BehaviorStatus.Success
|
|
859
|
+
};
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
class IgnoreGuardNode {
|
|
863
|
+
process(nodeArgs) {
|
|
864
|
+
const currentIfMode = btreeUtils.peek(nodeArgs.initState.ifModeStack);
|
|
865
|
+
if ([IfMode.Ignore, IfMode.EvaluateNext].includes(currentIfMode)) {
|
|
866
|
+
return {
|
|
867
|
+
nextState: nodeArgs.initState,
|
|
868
|
+
renderedLine: "",
|
|
869
|
+
status: BehaviorStatus.Success
|
|
870
|
+
};
|
|
871
|
+
}
|
|
872
|
+
return {
|
|
873
|
+
nextState: nodeArgs.initState,
|
|
874
|
+
renderedLine: "",
|
|
875
|
+
status: BehaviorStatus.Failure
|
|
876
|
+
};
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
class NormalLineProcessorNode {
|
|
880
|
+
process(nodeArgs) {
|
|
881
|
+
const renderedLine = nodeArgs.line.split("{$").map((token, index) => {
|
|
882
|
+
if (index == 0) {
|
|
883
|
+
return token;
|
|
884
|
+
}
|
|
885
|
+
return token.split("}").map((varToken, index2) => {
|
|
886
|
+
if (index2 == 0 && browser) {
|
|
887
|
+
const varValue = localStorage.getItem(`$${varToken}`);
|
|
888
|
+
if (varValue !== null) {
|
|
889
|
+
return varValue;
|
|
890
|
+
}
|
|
891
|
+
console.warn(
|
|
892
|
+
`Null variable in yarn: ${varToken}. Make sure that all variables were set before using them.`
|
|
893
|
+
);
|
|
894
|
+
}
|
|
895
|
+
return varToken;
|
|
896
|
+
}).join("");
|
|
897
|
+
}).join("");
|
|
898
|
+
return {
|
|
899
|
+
nextState: nodeArgs.initState,
|
|
900
|
+
renderedLine,
|
|
901
|
+
status: BehaviorStatus.Success
|
|
902
|
+
};
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
class LineSelectorNode extends SelectorNode {
|
|
906
|
+
constructor(nodeList) {
|
|
907
|
+
super(nodeList);
|
|
908
|
+
}
|
|
909
|
+
defaultResult = () => {
|
|
910
|
+
return {
|
|
911
|
+
nextState: new BehaviorState(),
|
|
912
|
+
renderedLine: "",
|
|
913
|
+
status: BehaviorStatus.Failure
|
|
914
|
+
};
|
|
915
|
+
};
|
|
916
|
+
}
|
|
917
|
+
class LineCommentNode {
|
|
918
|
+
process(nodeArgs) {
|
|
919
|
+
if (!nodeArgs.line.startsWith("//")) {
|
|
920
|
+
return {
|
|
921
|
+
renderedLine: "",
|
|
922
|
+
nextState: nodeArgs.initState,
|
|
923
|
+
status: BehaviorStatus.Failure
|
|
924
|
+
};
|
|
925
|
+
}
|
|
926
|
+
return {
|
|
927
|
+
renderedLine: "",
|
|
928
|
+
nextState: nodeArgs.initState,
|
|
929
|
+
status: BehaviorStatus.Success
|
|
930
|
+
};
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
class DeclareCommand {
|
|
934
|
+
setVariableNode = new SetVariableNode();
|
|
935
|
+
process(nodeArgs) {
|
|
936
|
+
if (!nodeArgs.line.startsWith("<<declare")) {
|
|
937
|
+
return {
|
|
938
|
+
renderedLine: "",
|
|
939
|
+
nextState: nodeArgs.initState,
|
|
940
|
+
status: BehaviorStatus.Failure
|
|
941
|
+
};
|
|
942
|
+
}
|
|
943
|
+
const setValuePair = nodeArgs.line.split("=");
|
|
944
|
+
const key = setValuePair[0].slice("<<declare ".length).trim();
|
|
945
|
+
if (localStorage.getItem(key) !== null) {
|
|
946
|
+
return {
|
|
947
|
+
renderedLine: "",
|
|
948
|
+
nextState: nodeArgs.initState,
|
|
949
|
+
status: BehaviorStatus.Success
|
|
950
|
+
};
|
|
951
|
+
}
|
|
952
|
+
setValuePair.shift();
|
|
953
|
+
const preValue = setValuePair.join("=").split(" as ");
|
|
954
|
+
preValue.pop();
|
|
955
|
+
const value = preValue.join(" as ");
|
|
956
|
+
const result = this.setVariableNode.process({
|
|
957
|
+
initState: nodeArgs.initState,
|
|
958
|
+
line: `<<set ${key} = ${value}>>`,
|
|
959
|
+
// faking the line lol
|
|
960
|
+
lineIndex: nodeArgs.lineIndex
|
|
961
|
+
});
|
|
962
|
+
return {
|
|
963
|
+
nextState: result.nextState,
|
|
964
|
+
renderedLine: "",
|
|
965
|
+
status: BehaviorStatus.Success
|
|
966
|
+
};
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
class JumpCommand {
|
|
970
|
+
setVariableNode = new SetVariableNode();
|
|
971
|
+
process(nodeArgs) {
|
|
972
|
+
if (!nodeArgs.line.startsWith("<<jump")) {
|
|
973
|
+
return {
|
|
974
|
+
renderedLine: "",
|
|
975
|
+
nextState: nodeArgs.initState,
|
|
976
|
+
status: BehaviorStatus.Failure
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
if (nodeArgs.initState.ignoreJumps) {
|
|
980
|
+
return {
|
|
981
|
+
nextState: nodeArgs.initState,
|
|
982
|
+
renderedLine: "",
|
|
983
|
+
status: BehaviorStatus.Success
|
|
984
|
+
};
|
|
985
|
+
}
|
|
986
|
+
const choiceName = nodeArgs.line.slice("<<jump ".length, nodeArgs.line.length - ">>".length).replace(/^\{/, "").replace(/}$/, "");
|
|
987
|
+
const dialogChoice = dialogManager.dialogMessageMap.get(btreeUtils.simplifyToken(choiceName));
|
|
988
|
+
if (dialogChoice !== void 0) {
|
|
989
|
+
dialogManager.setDialogChoice(dialogChoice);
|
|
990
|
+
} else {
|
|
991
|
+
console.error(
|
|
992
|
+
`Unknown jump node at line ${nodeArgs.lineIndex + 1}: ${choiceName} or ${btreeUtils.simplifyToken(choiceName)}`
|
|
993
|
+
);
|
|
994
|
+
}
|
|
995
|
+
return {
|
|
996
|
+
nextState: nodeArgs.initState,
|
|
997
|
+
renderedLine: "",
|
|
998
|
+
status: BehaviorStatus.Success
|
|
999
|
+
};
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
class IgnoreJumpNode {
|
|
1003
|
+
process(nodeArgs) {
|
|
1004
|
+
if (!nodeArgs.line.startsWith("// ignore jumps")) {
|
|
1005
|
+
return {
|
|
1006
|
+
renderedLine: "",
|
|
1007
|
+
nextState: nodeArgs.initState,
|
|
1008
|
+
status: BehaviorStatus.Failure
|
|
1009
|
+
};
|
|
1010
|
+
}
|
|
1011
|
+
nodeArgs.initState.ignoreJumps = true;
|
|
1012
|
+
return {
|
|
1013
|
+
renderedLine: "",
|
|
1014
|
+
nextState: nodeArgs.initState,
|
|
1015
|
+
status: BehaviorStatus.Success
|
|
1016
|
+
};
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
class UnvisitCommand {
|
|
1020
|
+
process(nodeArgs) {
|
|
1021
|
+
if (!nodeArgs.line.startsWith("<<unvisit") || !browser) {
|
|
1022
|
+
return {
|
|
1023
|
+
renderedLine: "",
|
|
1024
|
+
nextState: nodeArgs.initState,
|
|
1025
|
+
status: BehaviorStatus.Failure
|
|
1026
|
+
};
|
|
1027
|
+
}
|
|
1028
|
+
const nodeName = nodeArgs.line.slice("<<unvisit ".length, nodeArgs.line.length - ">>".length).replace(/^\{/, "").replace(/}$/, "");
|
|
1029
|
+
const key = `+${nodeName}`;
|
|
1030
|
+
dialogVariableStore.removeItem(key);
|
|
1031
|
+
return {
|
|
1032
|
+
nextState: nodeArgs.initState,
|
|
1033
|
+
renderedLine: "",
|
|
1034
|
+
status: BehaviorStatus.Success
|
|
1035
|
+
};
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
class DialogProcessor {
|
|
1039
|
+
processingTree = new LineSelectorNode([
|
|
1040
|
+
/*region comment based formats*/
|
|
1041
|
+
new IgnoreJumpNode(),
|
|
1042
|
+
// must be prioritized above line comment node
|
|
1043
|
+
new LineCommentNode(),
|
|
1044
|
+
/*endregion commend based formats*/
|
|
1045
|
+
new EndIfNode(),
|
|
1046
|
+
new ElseIfNode(),
|
|
1047
|
+
new ElseNode(),
|
|
1048
|
+
new IfNode(),
|
|
1049
|
+
new IgnoreGuardNode(),
|
|
1050
|
+
/*region commands*/
|
|
1051
|
+
new SetVariableNode(),
|
|
1052
|
+
new DeclareCommand(),
|
|
1053
|
+
new JumpCommand(),
|
|
1054
|
+
new UnvisitCommand(),
|
|
1055
|
+
/*endregion commands*/
|
|
1056
|
+
new NormalLineProcessorNode()
|
|
1057
|
+
]);
|
|
1058
|
+
/**
|
|
1059
|
+
* process the dialog line by line and return a presentable string
|
|
1060
|
+
* @param dialogDetail
|
|
1061
|
+
*/
|
|
1062
|
+
processDialog = (dialogDetail) => {
|
|
1063
|
+
{
|
|
1064
|
+
return "";
|
|
1065
|
+
}
|
|
1066
|
+
};
|
|
1067
|
+
}
|
|
1068
|
+
const parseYarn = async (fileContent) => {
|
|
1069
|
+
const dialogDetailList = [];
|
|
1070
|
+
fileContent.split("===").map((unparsedNode) => {
|
|
1071
|
+
if (unparsedNode.trim() === "") {
|
|
1072
|
+
return;
|
|
1073
|
+
}
|
|
1074
|
+
const dialogDetails = {
|
|
1075
|
+
// todo: dissect the line below and give comments because it is complex
|
|
1076
|
+
dialogId: unparsedNode.slice(unparsedNode.indexOf("title: ")).split("\n")[0].split(" ").pop()?.trim(),
|
|
1077
|
+
portraitType: PortraitType.AresNeutral,
|
|
1078
|
+
textContent: ""
|
|
1079
|
+
// will be filled later below
|
|
1080
|
+
};
|
|
1081
|
+
let portraitUnset = true;
|
|
1082
|
+
const unparsedBody = unparsedNode.split("---").pop().trim();
|
|
1083
|
+
const bodyList = unparsedBody.split("\n");
|
|
1084
|
+
let contentIndexStart = 0;
|
|
1085
|
+
for (let index = 0; index < bodyList.length; index++) {
|
|
1086
|
+
const possibleTagPair = bodyList[index].split(": ");
|
|
1087
|
+
const possibleTagName = possibleTagPair[0].toLowerCase();
|
|
1088
|
+
if (!["portrait"].includes(possibleTagName)) {
|
|
1089
|
+
break;
|
|
1090
|
+
}
|
|
1091
|
+
contentIndexStart = index + 1;
|
|
1092
|
+
switch (possibleTagName) {
|
|
1093
|
+
case "portrait":
|
|
1094
|
+
portraitUnset = false;
|
|
1095
|
+
dialogDetails.portraitType = PortraitType[possibleTagPair[1].trim()];
|
|
1096
|
+
break;
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
if (portraitUnset) {
|
|
1100
|
+
console.warn(`Portrait missing for node: ${dialogDetails.dialogId}`);
|
|
1101
|
+
dialogDetails.portraitType = PortraitType.AresNeutral;
|
|
1102
|
+
}
|
|
1103
|
+
const unprocessedContent = bodyList.slice(contentIndexStart).join("\n");
|
|
1104
|
+
const contentPair = unprocessedContent.split("<ChoiceBreak>");
|
|
1105
|
+
if (contentPair.length === 2) {
|
|
1106
|
+
let ChoiceParsingState;
|
|
1107
|
+
((ChoiceParsingState2) => {
|
|
1108
|
+
ChoiceParsingState2[ChoiceParsingState2["Free"] = 0] = "Free";
|
|
1109
|
+
ChoiceParsingState2[ChoiceParsingState2["Line"] = 1] = "Line";
|
|
1110
|
+
})(ChoiceParsingState || (ChoiceParsingState = {}));
|
|
1111
|
+
let parsingState = 0;
|
|
1112
|
+
const currentChoiceDetail = { jumpNode: "", name: "" };
|
|
1113
|
+
const choiceList = [];
|
|
1114
|
+
let shouldSkipChoices = false;
|
|
1115
|
+
const checkChoiceForSave = () => {
|
|
1116
|
+
if (currentChoiceDetail.name !== "") {
|
|
1117
|
+
choiceList.push({
|
|
1118
|
+
name: currentChoiceDetail.name,
|
|
1119
|
+
jumpNode: currentChoiceDetail.jumpNode
|
|
1120
|
+
});
|
|
1121
|
+
}
|
|
1122
|
+
};
|
|
1123
|
+
contentPair[1].trim().split("\n").filter((line) => {
|
|
1124
|
+
const trimmedLine = line.trim();
|
|
1125
|
+
if (shouldSkipChoices) {
|
|
1126
|
+
return false;
|
|
1127
|
+
}
|
|
1128
|
+
if (trimmedLine.startsWith("// ignore the rest")) {
|
|
1129
|
+
shouldSkipChoices = true;
|
|
1130
|
+
return false;
|
|
1131
|
+
}
|
|
1132
|
+
return true;
|
|
1133
|
+
}).map((line) => {
|
|
1134
|
+
const trimmedLine = line.trim();
|
|
1135
|
+
switch (parsingState) {
|
|
1136
|
+
case 0:
|
|
1137
|
+
if (trimmedLine.startsWith("->")) {
|
|
1138
|
+
checkChoiceForSave();
|
|
1139
|
+
currentChoiceDetail.name = trimmedLine.split(" ").pop();
|
|
1140
|
+
parsingState = 1;
|
|
1141
|
+
}
|
|
1142
|
+
break;
|
|
1143
|
+
case 1:
|
|
1144
|
+
if (trimmedLine.startsWith("<<jump")) {
|
|
1145
|
+
const jumpNode = trimmedLine.split(" ").pop();
|
|
1146
|
+
currentChoiceDetail.jumpNode = jumpNode.slice(0, jumpNode.length - 2);
|
|
1147
|
+
parsingState = 0;
|
|
1148
|
+
}
|
|
1149
|
+
break;
|
|
1150
|
+
default:
|
|
1151
|
+
console.error(`Unimplemented parsing state: ${parsingState}`);
|
|
1152
|
+
break;
|
|
1153
|
+
}
|
|
1154
|
+
});
|
|
1155
|
+
checkChoiceForSave();
|
|
1156
|
+
dialogDetails.textContent = contentPair[0];
|
|
1157
|
+
choiceList.forEach((choiceDetail) => {
|
|
1158
|
+
const keyword = `<choice ${choiceDetail.name}>`;
|
|
1159
|
+
while (dialogDetails.textContent.includes(keyword)) {
|
|
1160
|
+
dialogDetails.textContent = dialogDetails.textContent.replace(
|
|
1161
|
+
keyword,
|
|
1162
|
+
`<a class="choice-${choiceDetail.jumpNode} dialog-choice" title="Click to continue the dialog">`
|
|
1163
|
+
);
|
|
1164
|
+
}
|
|
1165
|
+
});
|
|
1166
|
+
const externalKeyword = "<a href=";
|
|
1167
|
+
while (dialogDetails.textContent.includes(externalKeyword)) {
|
|
1168
|
+
dialogDetails.textContent = dialogDetails.textContent.replace(
|
|
1169
|
+
externalKeyword,
|
|
1170
|
+
'<a target="_blank" class="external-link" href='
|
|
1171
|
+
);
|
|
1172
|
+
}
|
|
1173
|
+
const choiceEndKeyword = "</choice>";
|
|
1174
|
+
while (dialogDetails.textContent.includes(choiceEndKeyword)) {
|
|
1175
|
+
dialogDetails.textContent = dialogDetails.textContent.replace(choiceEndKeyword, "</a>");
|
|
1176
|
+
}
|
|
1177
|
+
} else {
|
|
1178
|
+
dialogDetails.textContent = unprocessedContent;
|
|
1179
|
+
}
|
|
1180
|
+
dialogDetailList.push(dialogDetails);
|
|
1181
|
+
});
|
|
1182
|
+
return dialogDetailList;
|
|
1183
|
+
};
|
|
1184
|
+
class DialogManager {
|
|
1185
|
+
dialogMessageMap = /* @__PURE__ */ new Map();
|
|
1186
|
+
currentDialogTree = [];
|
|
1187
|
+
fullCurrentMessage = defaultDialogMessage[0].textContent;
|
|
1188
|
+
currentMessageMeta = defaultDialogMessage[0];
|
|
1189
|
+
currentMessage = writable("");
|
|
1190
|
+
currentIndex = 0;
|
|
1191
|
+
previousTimestamp = 0;
|
|
1192
|
+
isDoneTransition = false;
|
|
1193
|
+
currentPortrait = writable();
|
|
1194
|
+
portraitMap = /* @__PURE__ */ new Map();
|
|
1195
|
+
currentState = DialogState.Visible;
|
|
1196
|
+
currentReadableState = writable(this.currentState);
|
|
1197
|
+
hidePercent = tweened(100, {
|
|
1198
|
+
duration: 400,
|
|
1199
|
+
easing: backOut
|
|
1200
|
+
});
|
|
1201
|
+
// 100 = 100%
|
|
1202
|
+
skipNextActiveTime = 0;
|
|
1203
|
+
dialogProcessor = new DialogProcessor();
|
|
1204
|
+
// for queueing actions
|
|
1205
|
+
_setDialogChoiceQueue = [];
|
|
1206
|
+
_setDialogChoiceMutex = false;
|
|
1207
|
+
onSetDialogListeners = [];
|
|
1208
|
+
enableDialogueOverlayCache = false;
|
|
1209
|
+
constructor() {
|
|
1210
|
+
enableDialogueOverlay.subscribe((value) => {
|
|
1211
|
+
this.enableDialogueOverlayCache = value;
|
|
1212
|
+
if (value) {
|
|
1213
|
+
this.hidePercent.set(0).then(() => {
|
|
1214
|
+
this.currentState = DialogState.Visible;
|
|
1215
|
+
this.currentReadableState.set(this.currentState);
|
|
1216
|
+
});
|
|
1217
|
+
} else {
|
|
1218
|
+
this.hidePercent.set(100).then(() => {
|
|
1219
|
+
this.currentState = DialogState.Invisible;
|
|
1220
|
+
this.currentReadableState.set(this.currentState);
|
|
1221
|
+
});
|
|
1222
|
+
this.setDialogTree([{ textContent: "" }]);
|
|
1223
|
+
}
|
|
1224
|
+
});
|
|
1225
|
+
}
|
|
1226
|
+
/**
|
|
1227
|
+
* when users interact with the dialog, they can skip the transition like in a game
|
|
1228
|
+
* note that there is a cool down to this, check out skipNextActiveTime
|
|
1229
|
+
*/
|
|
1230
|
+
skipAnimation = () => {
|
|
1231
|
+
if (this.previousTimestamp > this.skipNextActiveTime && this.currentState == DialogState.Visible && !this.isDoneTransition) {
|
|
1232
|
+
this.currentIndex = this.fullCurrentMessage.length - 1;
|
|
1233
|
+
this.currentMessage.update(() => this.fullCurrentMessage.slice(0, this.currentIndex));
|
|
1234
|
+
}
|
|
1235
|
+
};
|
|
1236
|
+
/**
|
|
1237
|
+
* hides or shows the dialog UI
|
|
1238
|
+
* @param shouldEnable
|
|
1239
|
+
*/
|
|
1240
|
+
enableDialog = (shouldEnable) => {
|
|
1241
|
+
enableDialogueOverlay.update(() => shouldEnable);
|
|
1242
|
+
};
|
|
1243
|
+
/**
|
|
1244
|
+
* sets the possible dialog that might appear on the Dialog UI
|
|
1245
|
+
* note that it overwrites the previous tree and does not append on it due to the possibility
|
|
1246
|
+
* of node name conflicts
|
|
1247
|
+
* @param newDialogTree
|
|
1248
|
+
*/
|
|
1249
|
+
setDialogTree = (newDialogTree) => {
|
|
1250
|
+
this.currentDialogTree = newDialogTree;
|
|
1251
|
+
this.dialogMessageMap.clear();
|
|
1252
|
+
newDialogTree.map((value) => {
|
|
1253
|
+
if (value.dialogId) {
|
|
1254
|
+
this.dialogMessageMap.set(value.dialogId, value);
|
|
1255
|
+
}
|
|
1256
|
+
});
|
|
1257
|
+
if (this.portraitMap.size == 0) {
|
|
1258
|
+
this.portraitMap.set(PortraitType.AresHappy.toString(), AresHappy);
|
|
1259
|
+
this.portraitMap.set(PortraitType.AresBlushing.toString(), AresBlushing);
|
|
1260
|
+
this.portraitMap.set(PortraitType.AresDisappointed.toString(), AresDisappointed);
|
|
1261
|
+
this.portraitMap.set(PortraitType.AresLetsGo.toString(), AresLetsGo);
|
|
1262
|
+
this.portraitMap.set(PortraitType.AresMad.toString(), AresMad);
|
|
1263
|
+
this.portraitMap.set(PortraitType.AresNeutral.toString(), AresNeutral);
|
|
1264
|
+
this.portraitMap.set(PortraitType.AresSlightlyMad.toString(), AresSlightlyMad);
|
|
1265
|
+
this.portraitMap.set(PortraitType.AresSurprised.toString(), AresSurprised);
|
|
1266
|
+
this.portraitMap.set(PortraitType.AresYay.toString(), TestImage);
|
|
1267
|
+
}
|
|
1268
|
+
this.setDialogChoice(newDialogTree[0]);
|
|
1269
|
+
};
|
|
1270
|
+
/**
|
|
1271
|
+
* Remember to call this before SetDialogTree
|
|
1272
|
+
* and unsubscribe during onDestroy
|
|
1273
|
+
* @param callback
|
|
1274
|
+
*/
|
|
1275
|
+
subscribeToSetDialogChoice = (callback) => {
|
|
1276
|
+
this.onSetDialogListeners.push(callback);
|
|
1277
|
+
};
|
|
1278
|
+
/**
|
|
1279
|
+
* Remember to call this during onDestroy
|
|
1280
|
+
* @param callback
|
|
1281
|
+
* todo: double check if this works???
|
|
1282
|
+
*/
|
|
1283
|
+
unsubscribeToSetDialogChoice = (callback) => {
|
|
1284
|
+
const index = this.onSetDialogListeners.indexOf(callback);
|
|
1285
|
+
if (index > -1) {
|
|
1286
|
+
this.onSetDialogListeners.splice(index, 1);
|
|
1287
|
+
}
|
|
1288
|
+
};
|
|
1289
|
+
/**
|
|
1290
|
+
* Sets the next dialog to show depending on which special choice a href link the user
|
|
1291
|
+
* has interacted with
|
|
1292
|
+
* @param newMessage
|
|
1293
|
+
*
|
|
1294
|
+
* you can listen to this!
|
|
1295
|
+
*/
|
|
1296
|
+
setDialogChoice = (newMessage) => {
|
|
1297
|
+
if (!newMessage || !newMessage.textContent) {
|
|
1298
|
+
return;
|
|
1299
|
+
}
|
|
1300
|
+
this._setDialogChoiceQueue.push(newMessage);
|
|
1301
|
+
if (!this._setDialogChoiceMutex) {
|
|
1302
|
+
this._setDialogChoiceMutex = true;
|
|
1303
|
+
this._setDialogChoice();
|
|
1304
|
+
}
|
|
1305
|
+
};
|
|
1306
|
+
_setDialogChoice = () => {
|
|
1307
|
+
const newMessage = this._setDialogChoiceQueue.shift();
|
|
1308
|
+
if (newMessage === void 0) {
|
|
1309
|
+
this._setDialogChoiceMutex = false;
|
|
1310
|
+
this.onSetDialogListeners.forEach((listener) => {
|
|
1311
|
+
listener(this.currentMessageMeta);
|
|
1312
|
+
});
|
|
1313
|
+
return;
|
|
1314
|
+
}
|
|
1315
|
+
this.currentMessageMeta = newMessage;
|
|
1316
|
+
let portraitValue = AresHappy;
|
|
1317
|
+
if (this.currentMessageMeta.portraitType) {
|
|
1318
|
+
portraitValue = this.portraitMap.get(this.currentMessageMeta.portraitType);
|
|
1319
|
+
}
|
|
1320
|
+
if (portraitValue) {
|
|
1321
|
+
this.currentPortrait.update(() => portraitValue);
|
|
1322
|
+
}
|
|
1323
|
+
this.fullCurrentMessage = this.dialogProcessor.processDialog(this.currentMessageMeta);
|
|
1324
|
+
this.currentMessage.update(() => "");
|
|
1325
|
+
this.currentIndex = 0;
|
|
1326
|
+
this.skipNextActiveTime = this.previousTimestamp + 1e3;
|
|
1327
|
+
this.isDoneTransition = false;
|
|
1328
|
+
if (this.currentMessageMeta.dialogId) {
|
|
1329
|
+
const key = `+${this.currentMessageMeta.dialogId}`;
|
|
1330
|
+
const value = Number(dialogVariableStore.getItem(key));
|
|
1331
|
+
if (isNaN(value)) {
|
|
1332
|
+
dialogVariableStore.setItem(key, "1");
|
|
1333
|
+
} else {
|
|
1334
|
+
dialogVariableStore.setItem(key, `${value + 1}`);
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
this._setDialogChoice();
|
|
1338
|
+
};
|
|
1339
|
+
setDialogToDefault = () => {
|
|
1340
|
+
this.setDialogTree(defaultDialogMessage);
|
|
1341
|
+
};
|
|
1342
|
+
/**
|
|
1343
|
+
* updates the information and detail frame by frame
|
|
1344
|
+
* you can think of this like the main game loop
|
|
1345
|
+
*
|
|
1346
|
+
* @param timestamp
|
|
1347
|
+
*
|
|
1348
|
+
* todo: this might be too big we might want to refactor this method for better readability
|
|
1349
|
+
* ISSUE #81 https://github.com/TurnipXenon/pineapple/issues/81
|
|
1350
|
+
*/
|
|
1351
|
+
update = (timestamp) => {
|
|
1352
|
+
if (this.currentState == DialogState.Invisible || this.currentState == DialogState.Busy) {
|
|
1353
|
+
window.requestAnimationFrame(this.update);
|
|
1354
|
+
return;
|
|
1355
|
+
}
|
|
1356
|
+
if (!this.isDoneTransition && this.currentIndex > this.fullCurrentMessage.length) {
|
|
1357
|
+
const elementList = document.getElementsByClassName("dialog-choice");
|
|
1358
|
+
for (const el of elementList) {
|
|
1359
|
+
el.addEventListener("click", (event) => {
|
|
1360
|
+
const choice = el.classList[0].split("-")[1];
|
|
1361
|
+
this.setDialogChoice(this.dialogMessageMap.get(choice));
|
|
1362
|
+
});
|
|
1363
|
+
}
|
|
1364
|
+
this.isDoneTransition = true;
|
|
1365
|
+
}
|
|
1366
|
+
if (this.currentIndex > this.fullCurrentMessage.length || this.previousTimestamp + updateRate > timestamp) {
|
|
1367
|
+
window.requestAnimationFrame(this.update);
|
|
1368
|
+
return;
|
|
1369
|
+
}
|
|
1370
|
+
this.previousTimestamp = timestamp;
|
|
1371
|
+
while (this.fullCurrentMessage[this.currentIndex] == "<" && this.currentIndex + 1 < this.fullCurrentMessage.length) {
|
|
1372
|
+
this.currentIndex = this.fullCurrentMessage.indexOf(">", this.currentIndex) + 1;
|
|
1373
|
+
this.currentIndex = Math.min(this.currentIndex, this.fullCurrentMessage.length - 1);
|
|
1374
|
+
}
|
|
1375
|
+
this.currentMessage.update(() => this.fullCurrentMessage.slice(0, this.currentIndex));
|
|
1376
|
+
++this.currentIndex;
|
|
1377
|
+
window.requestAnimationFrame(this.update);
|
|
1378
|
+
};
|
|
1379
|
+
enableDialogOverlay(enable) {
|
|
1380
|
+
enableDialogueOverlay.set(enable);
|
|
1381
|
+
}
|
|
1382
|
+
toggleDialogOverlay() {
|
|
1383
|
+
enableDialogueOverlay.set(!this.enableDialogueOverlayCache);
|
|
1384
|
+
}
|
|
1385
|
+
async parseAndSetDialogTree(dialogYarn) {
|
|
1386
|
+
return parseYarn(dialogYarn).then((dialogTree) => {
|
|
1387
|
+
console.log(dialogTree);
|
|
1388
|
+
this.setDialogTree(dialogTree);
|
|
1389
|
+
return dialogTree;
|
|
1390
|
+
});
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
1393
|
+
const enableDialogueOverlay = writable(true);
|
|
1394
|
+
const dialogVariableStore = createNewMapStore();
|
|
1395
|
+
const updateRate = 40 / 1e3;
|
|
1396
|
+
const defaultDialogMessage = [
|
|
1397
|
+
{
|
|
1398
|
+
textContent: `<p>I don't really have anything to say. Have you drank water? Or perhaps, you've checked out <a target="_blank" class="external-link" href="http://crouton.net">one of the best webpages</a> out there?`
|
|
1399
|
+
}
|
|
1400
|
+
];
|
|
1401
|
+
const dialogManager = new DialogManager();
|
|
1402
|
+
export {
|
|
1403
|
+
AresHappy as A,
|
|
1404
|
+
PortraitType as P,
|
|
1405
|
+
TestImage as T,
|
|
1406
|
+
dialogManager as d,
|
|
1407
|
+
enableDialogueOverlay as e,
|
|
1408
|
+
is_date as i,
|
|
1409
|
+
loop as l,
|
|
1410
|
+
now as n,
|
|
1411
|
+
tweened as t
|
|
1412
|
+
};
|