Skip to content

Commit 6633352

Browse files
Merge pull request #17 from MaddyGuthridge/maddy-bump-to-0.5.0
Bump version to v0.5.0
2 parents 6b576ee + c056f9d commit 6633352

File tree

6 files changed

+117
-62
lines changed

6 files changed

+117
-62
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "minifolio",
3-
"version": "0.4.0",
3+
"version": "0.5.0",
44
"private": true,
55
"license": "GPL-3.0-only",
66
"scripts": {

src/components/EditControls.svelte

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
<script lang="ts">
2-
import { createEventDispatcher } from 'svelte';
2+
import { createEventDispatcher } from "svelte";
33
44
/** Whether edit mode is currently enabled */
55
export let editing: boolean;
6+
/** Whether the user is currently logged in */
7+
export let loggedIn: boolean;
68
79
const dispatch = createEventDispatcher<{
8-
beginEdits: undefined,
9-
finishEdits: boolean,
10+
beginEdits: undefined;
11+
finishEdits: boolean;
1012
}>();
1113
</script>
1214

13-
<div class="edit-buttons">
14-
{#if editing}
15-
<button on:click={() => dispatch('finishEdits', false)}>Cancel</button>
16-
<button on:click={() => dispatch('finishEdits', true)}>Done</button>
17-
{:else}
18-
<button on:click={() => dispatch('beginEdits')}>Edit</button>
19-
{/if}
20-
</div>
15+
{#if loggedIn}
16+
<div class="edit-buttons">
17+
{#if editing}
18+
<button on:click={() => dispatch("finishEdits", false)}>Cancel</button>
19+
<button on:click={() => dispatch("finishEdits", true)}>Done</button>
20+
{:else}
21+
<button on:click={() => dispatch("beginEdits")}>Edit</button>
22+
{/if}
23+
</div>
24+
{/if}
2125

2226
<style>
2327
.edit-buttons {

src/lib/server/data/migrations/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ const migrations: Record<string, MigrationFunction> = {
1414
'~0.1.0': migrateV010,
1515
'~0.2.0': migrateV020,
1616
'~0.3.0': migrateV030,
17+
// No major changes to data format this release
18+
'~0.4.0': updateConfigVersions,
19+
// Pre-empt future releases
20+
'~0.5.0': updateConfigVersions,
1721
};
1822

1923
/** Update config versions (only for minor, non-breaking changes to config.json) */

src/routes/+page.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
<main>
7474
<EditControls
7575
{editing}
76+
loggedIn={data.loggedIn}
7677
on:beginEdits={() => { editing = true; }}
7778
on:finishEdits={e => finishEditing(e.detail)}
7879
/>

src/routes/[group]/+page.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@
112112
<main>
113113
<EditControls
114114
{editing}
115+
loggedIn={data.loggedIn}
115116
on:beginEdits={beginEditing}
116117
on:finishEdits={e => finishEditing(e.detail)}
117118
/>

src/routes/[group]/[item]/+page.svelte

Lines changed: 95 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,32 @@
11
<script lang="ts">
2-
import { Navbar } from '$components';
3-
import { IconCard, RepoCard, PackageCard, CardList, ItemCardGrid } from '$components/card';
4-
import { ItemChipList } from '$components/chip';
5-
import Background from '$components/Background.svelte';
6-
import EditableMarkdown from '$components/markdown';
7-
import api from '$endpoints';
8-
import consts from '$lib/consts';
9-
import { generateKeywords } from '$lib/seo';
10-
import EditControls from '$components/EditControls.svelte';
2+
import { Navbar } from "$components";
3+
import {
4+
IconCard,
5+
RepoCard,
6+
PackageCard,
7+
CardList,
8+
ItemCardGrid,
9+
} from "$components/card";
10+
import { ItemChipList } from "$components/chip";
11+
import Background from "$components/Background.svelte";
12+
import EditableMarkdown from "$components/markdown";
13+
import api from "$endpoints";
14+
import consts from "$lib/consts";
15+
import { generateKeywords } from "$lib/seo";
16+
import EditControls from "$components/EditControls.svelte";
1117
// import AsciinemaPlayer from "$components";
1218
13-
export let data: import('./$types').PageData;
19+
export let data: import("./$types").PageData;
1420
1521
let groupData = data.globals.groups[data.groupId];
1622
let itemData = data.globals.items[data.groupId][data.itemId];
1723
1824
let editing = false;
1925
20-
let readme = '';
26+
let readme = "";
2127
22-
let chipLinks = itemData.info.links.filter(([l]) => l.style === 'chip');
23-
let cardLinks = itemData.info.links.filter(([l]) => l.style === 'card');
28+
let chipLinks = itemData.info.links.filter(([l]) => l.style === "chip");
29+
let cardLinks = itemData.info.links.filter(([l]) => l.style === "card");
2430
2531
function beginEditing() {
2632
editing = true;
@@ -30,9 +36,15 @@
3036
editing = false;
3137
if (save) {
3238
itemData.readme = readme;
33-
await api().group.withId(data.groupId).item.withId(data.itemId).readme.set(readme);
39+
await api()
40+
.group.withId(data.groupId)
41+
.item.withId(data.itemId)
42+
.readme.set(readme);
3443
// Update other info
35-
await api().group.withId(data.groupId).item.withId(data.itemId).info.set(itemData.info);
44+
await api()
45+
.group.withId(data.groupId)
46+
.item.withId(data.itemId)
47+
.info.set(itemData.info);
3648
}
3749
// Reset data
3850
setupData(data.groupId, data.itemId);
@@ -43,12 +55,14 @@
4355
groupData = data.globals.groups[groupId];
4456
itemData = data.globals.items[groupId][itemId];
4557
readme = itemData.readme;
46-
chipLinks = itemData.info.links.filter(([l]) => l.style === 'chip');
47-
cardLinks = itemData.info.links.filter(([l]) => l.style === 'card');
58+
chipLinks = itemData.info.links.filter(([l]) => l.style === "chip");
59+
cardLinks = itemData.info.links.filter(([l]) => l.style === "card");
4860
}
4961
5062
function changeLinkTitle(linkedGroup: string, newTitle: string) {
51-
const linkInfo = itemData.info.links.find(link => link[0].groupId === linkedGroup);
63+
const linkInfo = itemData.info.links.find(
64+
(link) => link[0].groupId === linkedGroup,
65+
);
5266
if (!linkInfo) {
5367
// This shouldn't happen
5468
throw Error(`changeLinkTitle: linkInfo not found for ${linkedGroup}`);
@@ -57,21 +71,31 @@
5771
}
5872
5973
async function toggleLink(linkedGroup: string, linkedItem: string) {
60-
const linkInfo = itemData.info.links.find(link => link[0].groupId === linkedGroup);
74+
const linkInfo = itemData.info.links.find(
75+
(link) => link[0].groupId === linkedGroup,
76+
);
6177
if (!linkInfo) {
6278
// This shouldn't happen
63-
throw Error(`toggleLink: linkInfo not found for ${linkedGroup}/${linkedItem}`);
79+
throw Error(
80+
`toggleLink: linkInfo not found for ${linkedGroup}/${linkedItem}`,
81+
);
6482
}
6583
const newState = !linkInfo[1].includes(linkedItem);
6684
if (newState) {
6785
// Create link
68-
await api().group.withId(data.groupId).item.withId(data.itemId).links.create(linkedGroup, linkedItem);
86+
await api()
87+
.group.withId(data.groupId)
88+
.item.withId(data.itemId)
89+
.links.create(linkedGroup, linkedItem);
6990
// Update state in browser to match
7091
linkInfo[1].push(linkedItem);
7192
} else {
7293
// Unlink
73-
await api().group.withId(data.groupId).item.withId(data.itemId).links.remove(linkedGroup, linkedItem);
74-
linkInfo[1] = linkInfo[1].filter(item => item !== linkedItem);
94+
await api()
95+
.group.withId(data.groupId)
96+
.item.withId(data.itemId)
97+
.links.remove(linkedGroup, linkedItem);
98+
linkInfo[1] = linkInfo[1].filter((item) => item !== linkedItem);
7599
}
76100
// Force update chip and card links
77101
chipLinks = [...chipLinks];
@@ -83,11 +107,17 @@
83107

84108
<!-- TODO: Find a less repetitive way to get SEO working nicely -->
85109
<svelte:head>
86-
<title>{itemData.info.name} - {groupData.info.name} - {data.globals.config.siteShortName}</title>
87-
<meta name="description" content="{itemData.info.pageDescription}">
88-
<meta name="generator" content="{consts.APP_NAME}">
89-
<meta name="keywords" content="{generateKeywords(data.globals, data.groupId, data.itemId)}">
90-
<meta name="theme-color" content="{itemData.info.color}">
110+
<title
111+
>{itemData.info.name} - {groupData.info.name} - {data.globals.config
112+
.siteShortName}</title
113+
>
114+
<meta name="description" content={itemData.info.pageDescription} />
115+
<meta name="generator" content={consts.APP_NAME} />
116+
<meta
117+
name="keywords"
118+
content={generateKeywords(data.globals, data.groupId, data.itemId)}
119+
/>
120+
<meta name="theme-color" content={itemData.info.color} />
91121
</svelte:head>
92122

93123
<Background color={itemData.info.color}></Background>
@@ -102,7 +132,12 @@
102132
/>
103133

104134
<main>
105-
<EditControls {editing} on:beginEdits={beginEditing} on:finishEdits={e => finishEditing(e.detail)}/>
135+
<EditControls
136+
{editing}
137+
loggedIn={data.loggedIn}
138+
on:beginEdits={beginEditing}
139+
on:finishEdits={(e) => finishEditing(e.detail)}
140+
/>
106141
{#if itemData.info.banner}
107142
<img
108143
src="/{data.groupId}/{data.itemId}/{itemData.info.banner}"
@@ -111,30 +146,46 @@
111146
/>
112147
{/if}
113148
<div id="info-container">
114-
<EditableMarkdown
115-
bind:source={readme}
116-
{editing}
117-
/>
149+
<EditableMarkdown bind:source={readme} {editing} />
118150
<!-- Display linked items as chips -->
119151
<div id="chip-links">
120152
{#each chipLinks as [linkOptions, linkedItems]}
121-
{#if !editing}
153+
{#if !editing}
122154
<div class="chip-link-row">
123155
<h2>{linkOptions.title}</h2>
124156
<ItemChipList
125157
globals={data.globals}
126-
items={[linkedItems.map(i => ({ groupId: linkOptions.groupId, itemId: i, selected: false }))]}
158+
items={[
159+
linkedItems.map((i) => ({
160+
groupId: linkOptions.groupId,
161+
itemId: i,
162+
selected: false,
163+
})),
164+
]}
127165
link={true}
128166
/>
129167
</div>
130168
{:else}
131169
<div class="chip-link-row">
132-
<input type="text" bind:value={linkOptions.title} on:input={() => changeLinkTitle(linkOptions.groupId, linkOptions.title)} />
170+
<input
171+
type="text"
172+
bind:value={linkOptions.title}
173+
on:input={() =>
174+
changeLinkTitle(linkOptions.groupId, linkOptions.title)}
175+
/>
133176
<div class="chip-link-items">
134177
<ItemChipList
135178
globals={data.globals}
136-
items={[Object.keys(data.globals.items[linkOptions.groupId]).map(itemId => ({ groupId: linkOptions.groupId, itemId, selected: linkedItems.includes(itemId) }))]}
137-
on:click={e => toggleLink(e.detail.groupId, e.detail.itemId)}
179+
items={[
180+
Object.keys(data.globals.items[linkOptions.groupId]).map(
181+
(itemId) => ({
182+
groupId: linkOptions.groupId,
183+
itemId,
184+
selected: linkedItems.includes(itemId),
185+
}),
186+
),
187+
]}
188+
on:click={(e) => toggleLink(e.detail.groupId, e.detail.itemId)}
138189
/>
139190
</div>
140191
</div>
@@ -152,7 +203,7 @@
152203
link={itemData.info.urls.site}
153204
color={itemData.info.color}
154205
>
155-
<i slot="icon" class="las la-globe"></i>
206+
<i slot="icon" class="las la-globe"></i>
156207
</IconCard>
157208
{/if}
158209
{#if itemData.info.urls.docs}
@@ -165,16 +216,10 @@
165216
</IconCard>
166217
{/if}
167218
{#if itemData.info.urls.repo}
168-
<RepoCard
169-
repo={itemData.info.urls.repo}
170-
color={itemData.info.color}
171-
/>
219+
<RepoCard repo={itemData.info.urls.repo} color={itemData.info.color} />
172220
{/if}
173221
{#if itemData.info.package}
174-
<PackageCard
175-
info={itemData.info.package}
176-
color={itemData.info.color}
177-
/>
222+
<PackageCard info={itemData.info.package} color={itemData.info.color} />
178223
{/if}
179224
</CardList>
180225
</div>
@@ -190,9 +235,9 @@
190235
<!-- Display linked items as cards -->
191236
<div id="card-links">
192237
{#each cardLinks as [linkOptions, linkedItems]}
193-
<h2 contenteditable={editing}>
194-
{linkOptions.title}
195-
</h2>
238+
<h2 contenteditable={editing}>
239+
{linkOptions.title}
240+
</h2>
196241
<ItemCardGrid
197242
globals={data.globals}
198243
groupId={linkOptions.groupId}

0 commit comments

Comments
 (0)