@turnipxenon/pineapple 2.4.22 → 2.4.24
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/.idea/workspace.xml +53 -48
- package/.svelte-kit/__package__/index.d.ts +1 -1
- package/.svelte-kit/__package__/index.js +1 -1
- package/.svelte-kit/__package__/template/Seaweed/GameSection.svelte +207 -0
- package/.svelte-kit/__package__/template/Seaweed/GameSection.svelte.d.ts +17 -0
- package/.svelte-kit/__package__/template/Seaweed/ProjectSection.svelte +289 -0
- package/.svelte-kit/__package__/template/Seaweed/ProjectSection.svelte.d.ts +17 -0
- package/.svelte-kit/__package__/template/Seaweed/SeaweedTemplate.svelte +246 -0
- package/.svelte-kit/__package__/template/{SeaweedTemplate.svelte.d.ts → Seaweed/SeaweedTemplate.svelte.d.ts} +1 -0
- package/.svelte-kit/__package__/template/Seaweed/seaweed.postcss +133 -0
- package/.svelte-kit/__package__/util/util.d.ts +4 -0
- package/.svelte-kit/__package__/util/util.js +7 -0
- package/.svelte-kit/ambient.d.ts +2 -0
- package/.svelte-kit/generated/server/internal.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/template/Seaweed/GameSection.svelte +207 -0
- package/dist/template/Seaweed/GameSection.svelte.d.ts +17 -0
- package/dist/template/Seaweed/ProjectSection.svelte +289 -0
- package/dist/template/Seaweed/ProjectSection.svelte.d.ts +17 -0
- package/dist/template/Seaweed/SeaweedTemplate.svelte +246 -0
- package/dist/template/{SeaweedTemplate.svelte.d.ts → Seaweed/SeaweedTemplate.svelte.d.ts} +1 -0
- package/dist/template/Seaweed/seaweed.postcss +133 -0
- package/dist/util/util.d.ts +4 -0
- package/dist/util/util.js +7 -0
- package/package.json +1 -1
- package/src/lib/index.ts +1 -1
- package/src/lib/template/Seaweed/GameSection.svelte +213 -0
- package/src/lib/template/Seaweed/ProjectSection.svelte +298 -0
- package/src/lib/template/Seaweed/SeaweedTemplate.svelte +275 -0
- package/src/lib/template/Seaweed/seaweed.postcss +133 -0
- package/src/lib/util/util.ts +13 -1
- package/src/routes/(seaweed)/portfolio/+page.svelte +1 -1
- package/src/routes/(seaweed)/portfolio/actual/+page.svelte +4 -4
- package/.svelte-kit/__package__/template/SeaweedTemplate.svelte +0 -910
- package/dist/template/SeaweedTemplate.svelte +0 -910
- package/src/lib/template/SeaweedTemplate.svelte +0 -877
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export let letChaos = true;
|
|
3
|
+
export let name = "Turnip";
|
|
4
|
+
export let email = "turnipxenon@gmail.com";
|
|
5
|
+
export let linkedinSlug = "turnip-xenon";
|
|
6
|
+
|
|
7
|
+
import SocialSection from "$pkg/components/SocialSection.svelte";
|
|
8
|
+
import "./seaweed.postcss";
|
|
9
|
+
import SeaweedBaseLayout from "$pkg/components/layouts/SeaweedBaseLayout.svelte";
|
|
10
|
+
import { Accordion, AccordionItem, SlideToggle } from "@skeletonlabs/skeleton";
|
|
11
|
+
import { page } from "$app/stores";
|
|
12
|
+
import Card from "$pkg/components/Card.svelte";
|
|
13
|
+
import { onMount } from "svelte";
|
|
14
|
+
import ElementVisbilityDetector from "$pkg/components/ElementVisbilityDetector.svelte";
|
|
15
|
+
import GameSection from "$pkg/template/Seaweed/GameSection.svelte";
|
|
16
|
+
import ProjectSection from "$pkg/template/Seaweed/ProjectSection.svelte";
|
|
17
|
+
|
|
18
|
+
let isVisible = true;
|
|
19
|
+
let isAdvanceSettingOn = false;
|
|
20
|
+
|
|
21
|
+
$: isSocialsGone = !isVisible;
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
let qtfontWeight = "normal";
|
|
25
|
+
let additionalFontWeight = "";
|
|
26
|
+
/** qt values and what they mean:
|
|
27
|
+
* undefined: set all qt terms to font-weight: bold
|
|
28
|
+
* clear: unset all terms to font-weight: normal
|
|
29
|
+
* <term>: only set qt-<term> to bold
|
|
30
|
+
* <term1>,<term2>: only set qt-<term1> and qt-<term2> to bold,
|
|
31
|
+
*
|
|
32
|
+
* ONLY CALL INSIDE onMount()
|
|
33
|
+
**/
|
|
34
|
+
const filterSearchParams = (searchParams: URLSearchParams) => {
|
|
35
|
+
const qtValue = searchParams.get("qt")?.trim();
|
|
36
|
+
if (qtValue === undefined) {
|
|
37
|
+
qtfontWeight = "bold";
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
qtfontWeight = "normal";
|
|
41
|
+
const dynamicStyle = qtValue.split(",").map((term) => {
|
|
42
|
+
return `span.qt-${term} { font-weight: bold !important; }`;
|
|
43
|
+
}).join("\n");
|
|
44
|
+
|
|
45
|
+
// https://stackoverflow.com/a/24285947/17836168
|
|
46
|
+
const style = document.createElement("style");
|
|
47
|
+
// noinspection JSDeprecatedSymbols
|
|
48
|
+
style.type = "text/css";
|
|
49
|
+
style.innerText = dynamicStyle;
|
|
50
|
+
document.head.appendChild(style);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/* region chaos scripts */
|
|
54
|
+
const chaoticWordBank = ["niko", "toba", "seal", "aquarium", "ojisan", "baikal"];
|
|
55
|
+
let chaosDone = false;
|
|
56
|
+
const runChaos = (node: Element) => {
|
|
57
|
+
// change all text content to gibberish
|
|
58
|
+
for (let child of Array.from(node.children)) {
|
|
59
|
+
if (child.nodeType === Node.ELEMENT_NODE) {
|
|
60
|
+
runChaos(child);
|
|
61
|
+
for (const childOfChild of child.childNodes) {
|
|
62
|
+
if (childOfChild.nodeType === Node.TEXT_NODE && childOfChild.textContent?.trim()) {
|
|
63
|
+
const max = childOfChild.textContent.length;
|
|
64
|
+
childOfChild.textContent = "";
|
|
65
|
+
while (childOfChild.textContent.length < max) {
|
|
66
|
+
childOfChild.textContent += (chaoticWordBank[Math.floor(Math.random() * chaoticWordBank.length)] + " ");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// change all links to crouton
|
|
72
|
+
if (child.hasAttribute("href")) {
|
|
73
|
+
child.setAttribute("href", "https://crouton.net/");
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// change all images to niko if aria != hidden?
|
|
77
|
+
if (child.hasAttribute("src") && !child.hasAttribute("aria-hidden")) {
|
|
78
|
+
if (child.hasAttribute("alt")) {
|
|
79
|
+
child.setAttribute("src", "https://p.potaufeu.asahi.com/a2b9-p/picture/21583312/5c3310aec77068e24844c663aa62b37c.jpg");
|
|
80
|
+
} else {
|
|
81
|
+
child.setAttribute("src", "https://video.twimg.com/ext_tw_video/1318728494256410624/pu/vid/640x360/TMklz6hiTkQu3xhn.mp4");
|
|
82
|
+
child.setAttribute("muted", "true");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (child.tagName.trim() === "VIDEO") {
|
|
86
|
+
child.setAttribute("src", "https://video.twimg.com/ext_tw_video/1318728494256410624/pu/vid/640x360/TMklz6hiTkQu3xhn.mp4");
|
|
87
|
+
child.setAttribute("muted", "true");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// change all button events
|
|
91
|
+
if (child.tagName.trim() === "BUTTON") {
|
|
92
|
+
// remove anon function: https://stackoverflow.com/a/41343451/17836168
|
|
93
|
+
child.setAttribute("disabled", "true");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
onMount(() => {
|
|
100
|
+
if (!letChaos && $page.url.searchParams) {
|
|
101
|
+
filterSearchParams($page.url.searchParams);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (letChaos) {
|
|
105
|
+
runChaos(document.body);
|
|
106
|
+
chaosDone = true;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
let mainVisibility = "visible";
|
|
111
|
+
$: mainVisibility = letChaos && !chaosDone ? "hidden" : "visible";
|
|
112
|
+
/* endregion chaos scripts */
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<SeaweedBaseLayout bind:shouldDisplayLeadingIcons={isSocialsGone}>
|
|
116
|
+
<!-- todo: limit main size to 1080 px? -->
|
|
117
|
+
<main style={`
|
|
118
|
+
--qt-font-weight: ${qtfontWeight};${additionalFontWeight};
|
|
119
|
+
visibility: ${mainVisibility};
|
|
120
|
+
`}>
|
|
121
|
+
|
|
122
|
+
<div class="experience-and-about-div">
|
|
123
|
+
|
|
124
|
+
<div class="greater-about-div">
|
|
125
|
+
|
|
126
|
+
<Card includeDataNoSnippet={false}>
|
|
127
|
+
<section class="section-card" slot="content">
|
|
128
|
+
|
|
129
|
+
<h1>About</h1>
|
|
130
|
+
|
|
131
|
+
<p>
|
|
132
|
+
Hi! My name is {name}! I work as a software developer. Outside of that, I like making games, and
|
|
133
|
+
trying to do everything in between required to make one. I have some showcased below, our visit
|
|
134
|
+
my itch.io page for more of them.
|
|
135
|
+
</p>
|
|
136
|
+
<!-- todo: link the degree details idk -->
|
|
137
|
+
<p>
|
|
138
|
+
I also graduated with BS Computing Science, Specializing in Software Practice, and a
|
|
139
|
+
certificate in Computer Game Development at University of Alberta.
|
|
140
|
+
</p>
|
|
141
|
+
<p>
|
|
142
|
+
I'm inspired by games like Harvest Moon: Friends of Mineral Town, Rune Factory 4, Theatrhythm,
|
|
143
|
+
Bravely Default: Flying Fairy, Boku no Natsuyasumi 2, and A Short Hike.
|
|
144
|
+
</p>
|
|
145
|
+
|
|
146
|
+
<!-- todo: maybe put cute stuff here -->
|
|
147
|
+
<!-- </ToggleableContent>-->
|
|
148
|
+
</section>
|
|
149
|
+
</Card>
|
|
150
|
+
|
|
151
|
+
<Card>
|
|
152
|
+
<section class="section-card" slot="content">
|
|
153
|
+
<SocialSection email={email} linkedinSlug={linkedinSlug}></SocialSection>
|
|
154
|
+
<ElementVisbilityDetector bind:isVisible={isVisible}>
|
|
155
|
+
</ElementVisbilityDetector>
|
|
156
|
+
</section>
|
|
157
|
+
</Card>
|
|
158
|
+
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<Card>
|
|
162
|
+
<section class="section-card" slot="content">
|
|
163
|
+
<h1>Experience</h1>
|
|
164
|
+
|
|
165
|
+
<h2>Software Engineer</h2>
|
|
166
|
+
<div class="two-column-separated">
|
|
167
|
+
<div>July 2023 – January 2024</div>
|
|
168
|
+
<div style="text-align: end">Twitch, Remote</div>
|
|
169
|
+
</div>
|
|
170
|
+
<ul>
|
|
171
|
+
<li>Contributed to <span class="qt-go">Golang</span> and <span class="qt-ts">Typescript</span> codebases,
|
|
172
|
+
across several teams, to accommodate adjustments for public-facing user safety related features, to better
|
|
173
|
+
comply with EU’s <a target="_blank"
|
|
174
|
+
href="https://commission.europa.eu/strategy-and-policy/priorities-2019-2024/europe-fit-digital-age/digital-services-act/europe-fit-digital-age-new-online-rules-platforms_en">
|
|
175
|
+
Digital Services Act</a>, also including feature flags, alarms, unit tests, end-to-end testing, and
|
|
176
|
+
documentation
|
|
177
|
+
</li>
|
|
178
|
+
<li>Improved observability for upcoming features by setting up new <span class="qt-aws qt-infra">AWS</span>
|
|
179
|
+
resources to integrate internal data platform tools with existing alarms in our team’s microservice,
|
|
180
|
+
utilizing <span class="qt-aws qt-infra">Cloudwatch</span> and <span class="qt-aws qt-infra">Kinesis Data Stream</span>,
|
|
181
|
+
while adhering to best practices for <span class="qt-aws qt-infra">AWS CDK</span> (infrastructure as code)
|
|
182
|
+
</li>
|
|
183
|
+
</ul>
|
|
184
|
+
<br>
|
|
185
|
+
|
|
186
|
+
<h2>Software Engineer Intern</h2>
|
|
187
|
+
<div class="two-column-separated">
|
|
188
|
+
<div>May 2022 – Aug 2022</div>
|
|
189
|
+
<div style="text-align: end">Twitch, San Francisco</div>
|
|
190
|
+
</div>
|
|
191
|
+
<ul>
|
|
192
|
+
<li>
|
|
193
|
+
Built a <span class="qt-infra">load testing service</span> that can be configured to generate different
|
|
194
|
+
message types at different volumes that can be easily extended to target different chat services
|
|
195
|
+
</li>
|
|
196
|
+
<li>
|
|
197
|
+
Used Twitch’s set of custom tools, including Twitch’s custom RPC protocol, to create a backend
|
|
198
|
+
service with business logic written in <span class="qt-go">Go</span> and cloud infrastructure utilizing
|
|
199
|
+
<span
|
|
200
|
+
class="qt-infra qt-aws">ECS on Fargate, Cloudwatch, and DynamoDB</span>
|
|
201
|
+
, defined in <span class="qt-ts">Typescript</span>-flavored CDK
|
|
202
|
+
</li>
|
|
203
|
+
<li>
|
|
204
|
+
Wrote a technical specification document for the service’s MVP and possible future features, and
|
|
205
|
+
additional documentation on how to use the service and how to extend the load testing service to include
|
|
206
|
+
new services to test
|
|
207
|
+
</li>
|
|
208
|
+
</ul>
|
|
209
|
+
<br>
|
|
210
|
+
<!-- todo: turn off flashing when accordion is expanded -->
|
|
211
|
+
<Accordion>
|
|
212
|
+
<AccordionItem>
|
|
213
|
+
<div slot="summary">
|
|
214
|
+
<h2 class="accordion-header">More experience</h2>
|
|
215
|
+
</div>
|
|
216
|
+
<svelte:fragment slot="content">
|
|
217
|
+
<section class="more-section">
|
|
218
|
+
{#if (!letChaos)}
|
|
219
|
+
<h2>Software Engineer Intern</h2>
|
|
220
|
+
<div class="two-column-separated">
|
|
221
|
+
<div>May 2021 – Dec 2021</div>
|
|
222
|
+
<div style="text-align: end">Twitch / Amazon Web Services Canada, Remote</div>
|
|
223
|
+
</div>
|
|
224
|
+
<ul>
|
|
225
|
+
<li>
|
|
226
|
+
Implemented and wrote tests for a feature in Twitch’s backend authentication
|
|
227
|
+
systems and frontend web application that will help suggest security improvements to
|
|
228
|
+
over hundreds of thousands of users daily
|
|
229
|
+
</li>
|
|
230
|
+
<li>
|
|
231
|
+
Learned <span class="qt-go">Go</span>, <span class="qt-ts">Typescript</span>, <span
|
|
232
|
+
class="qt-react">React</span>, and other new technologies on the go to contribute to
|
|
233
|
+
the codebase
|
|
234
|
+
</li>
|
|
235
|
+
</ul>
|
|
236
|
+
{:else}
|
|
237
|
+
niko baikal seal from toba aquarium
|
|
238
|
+
{/if}
|
|
239
|
+
<br>
|
|
240
|
+
</section>
|
|
241
|
+
</svelte:fragment>
|
|
242
|
+
</AccordionItem>
|
|
243
|
+
</Accordion>
|
|
244
|
+
</section>
|
|
245
|
+
</Card>
|
|
246
|
+
|
|
247
|
+
</div>
|
|
248
|
+
|
|
249
|
+
<GameSection email={email}></GameSection>
|
|
250
|
+
|
|
251
|
+
<ProjectSection email={email}></ProjectSection>
|
|
252
|
+
|
|
253
|
+
<div aria-hidden="true" style="height: 25vh" />
|
|
254
|
+
|
|
255
|
+
<Card>
|
|
256
|
+
<div slot="content" class="default-card">
|
|
257
|
+
<h1>Advanced settings</h1>
|
|
258
|
+
<p>This one is for those curious how I customize this page.</p>
|
|
259
|
+
<SlideToggle name="slider-label" bind:checked={isAdvanceSettingOn}>
|
|
260
|
+
Advanced settings: {isAdvanceSettingOn ? "On" : "Off"}
|
|
261
|
+
</SlideToggle>
|
|
262
|
+
{#if (isAdvanceSettingOn)}
|
|
263
|
+
<br>
|
|
264
|
+
{/if}
|
|
265
|
+
</div>
|
|
266
|
+
</Card>
|
|
267
|
+
|
|
268
|
+
</main>
|
|
269
|
+
|
|
270
|
+
<SocialSection slot="extraLeadingIcons"
|
|
271
|
+
isSlot={true}
|
|
272
|
+
email={email}
|
|
273
|
+
linkedinSlug={linkedinSlug}
|
|
274
|
+
isSmallVersion={true}></SocialSection>
|
|
275
|
+
</SeaweedBaseLayout>
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
main {
|
|
2
|
+
width: 100%;
|
|
3
|
+
overflow: visible;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
align-items: center;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
h1 {
|
|
11
|
+
font-size: 2em;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
h2 {
|
|
15
|
+
font-size: 1.5em;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.section-card {
|
|
19
|
+
padding: 3em;
|
|
20
|
+
max-width: 800px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.game-card, .project-card {
|
|
24
|
+
width: 100vw;
|
|
25
|
+
max-width: 36em;
|
|
26
|
+
margin-bottom: 3em;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.game-card > video {
|
|
30
|
+
border-top-left-radius: 1em;
|
|
31
|
+
border-top-right-radius: 1em;
|
|
32
|
+
max-height: 24em;
|
|
33
|
+
width: 100%;
|
|
34
|
+
object-fit: cover;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
#migrante-alberta, .game-card > img, .project-card > img {
|
|
38
|
+
border-top-left-radius: 1em;
|
|
39
|
+
border-top-right-radius: 1em;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#migrante-alberta {
|
|
43
|
+
width: 100%;
|
|
44
|
+
object-fit: cover;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.game-button {
|
|
48
|
+
@apply btn variant-filled-primary;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.game-button > img {
|
|
52
|
+
max-height: 1lh;
|
|
53
|
+
/* todo: consider night mode day mode */
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.two-column-separated {
|
|
57
|
+
display: flex;
|
|
58
|
+
justify-content: space-between;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.more-section {
|
|
62
|
+
padding: 1em;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.greater-about-div {
|
|
66
|
+
display: flex;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
max-width: 36em;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.experience-and-about-div {
|
|
72
|
+
display: flex;
|
|
73
|
+
gap: 2em;
|
|
74
|
+
flex-wrap: wrap;
|
|
75
|
+
justify-content: center;
|
|
76
|
+
align-items: flex-start;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.game-card-body, .project-card-body {
|
|
80
|
+
padding: 1em;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.game-card-body > blockquote {
|
|
84
|
+
margin-bottom: 0.7lh;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.game-card-body > h1, .project-card-body > h2 {
|
|
88
|
+
text-align: center;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.game-link-section {
|
|
92
|
+
display: flex;
|
|
93
|
+
flex-direction: row;
|
|
94
|
+
justify-content: center;
|
|
95
|
+
gap: 1em;
|
|
96
|
+
margin-top: 1em;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.games-section, .projects-section {
|
|
100
|
+
display: flex;
|
|
101
|
+
flex-wrap: wrap;
|
|
102
|
+
gap: 2em;
|
|
103
|
+
justify-content: center;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.projects-section {
|
|
107
|
+
align-items: flex-start;
|
|
108
|
+
/*justify-content: flex-start;*/
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.long-btn-image {
|
|
112
|
+
max-height: 1lh;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.itch-promo {
|
|
116
|
+
padding: 4em;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
#hepcat-video {
|
|
120
|
+
object-position: 0 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.title-card {
|
|
124
|
+
width: clamp(360px, 80vw, 800px);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
[class*='qt-'] {
|
|
128
|
+
font-weight: var(--qt-font-weight);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.accordion-header {
|
|
132
|
+
margin-top: 0.25em;
|
|
133
|
+
}
|
package/src/lib/util/util.ts
CHANGED
|
@@ -19,4 +19,16 @@ export const createGoToFunction = (path: string): (() => void) => {
|
|
|
19
19
|
return (() => {
|
|
20
20
|
location.href = path;
|
|
21
21
|
});
|
|
22
|
-
};
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export interface ExternalLinkWarningArgs {
|
|
25
|
+
href: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const createExternalLinkWarningFunction = (args: ExternalLinkWarningArgs): (() => void) => {
|
|
29
|
+
return (() => {
|
|
30
|
+
// todo: https://github.com/TurnipXenon/pineapple/issues/99
|
|
31
|
+
// add the warning here for future functions
|
|
32
|
+
location.href = args.href;
|
|
33
|
+
});
|
|
34
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import SeaweedTemplate from "$pkg/template/SeaweedTemplate.svelte";
|
|
2
|
+
import SeaweedTemplate from "$pkg/template/Seaweed/SeaweedTemplate.svelte";
|
|
3
3
|
import WebThumbnailImage from "$pkg/assets/placeholder/placeholder_circle.png";
|
|
4
4
|
|
|
5
5
|
export let metaWebsite = "https://www.crouton.com/test/portfolio-base-layout";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import SeaweedTemplate from "$pkg/template/SeaweedTemplate.svelte";
|
|
2
|
+
import SeaweedTemplate from "$pkg/template/Seaweed/SeaweedTemplate.svelte";
|
|
3
3
|
</script>
|
|
4
4
|
|
|
5
|
-
<SeaweedTemplate
|
|
5
|
+
<SeaweedTemplate letChaos={false}
|
|
6
|
+
name="Allan Manuba"
|
|
6
7
|
email="allanmanuba@gmail.com"
|
|
7
|
-
linkedinSlug="allan-manuba"
|
|
8
|
-
metaWebsite="https://www.allanmanuba.com">
|
|
8
|
+
linkedinSlug="allan-manuba">
|
|
9
9
|
|
|
10
10
|
</SeaweedTemplate>
|