feat: work on code highlighting
This commit is contained in:
parent
c342dadf21
commit
f18cdf501a
8 changed files with 120 additions and 23 deletions
60
src/components/Code.svelte
Normal file
60
src/components/Code.svelte
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
<script lang="ts">
|
||||||
|
let copied = false;
|
||||||
|
|
||||||
|
function copyToClipboard(event: MouseEvent) {
|
||||||
|
// @ts-ignore
|
||||||
|
const target = event.target?.innerText.split('\n')[0];
|
||||||
|
navigator.clipboard.writeText(target);
|
||||||
|
let sel = document.getSelection();
|
||||||
|
sel?.removeAllRanges();
|
||||||
|
if (!copied) {
|
||||||
|
copied = true;
|
||||||
|
|
||||||
|
setTimeout(() => (copied = false), 3000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<code on:dblclick={copyToClipboard}>
|
||||||
|
<slot />
|
||||||
|
<div class:copied class="copyWrapper">
|
||||||
|
{#if copied}
|
||||||
|
Copied
|
||||||
|
{:else}
|
||||||
|
Double click to copy
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</code>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.copied {
|
||||||
|
background-color: yellowgreen !important;
|
||||||
|
}
|
||||||
|
.copyWrapper {
|
||||||
|
background-color: var(--special-color);
|
||||||
|
margin-bottom: 0.2rem;
|
||||||
|
padding: 0.2rem;
|
||||||
|
border-radius: 3px;
|
||||||
|
position: absolute;
|
||||||
|
visibility: hidden;
|
||||||
|
z-index: 1;
|
||||||
|
bottom: 100%;
|
||||||
|
left: 0;
|
||||||
|
margin-left: 0px;
|
||||||
|
}
|
||||||
|
code:hover .copyWrapper {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
code {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
background-color: var(--light-color);
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0 0 5px var(--shadow-color);
|
||||||
|
padding: 2px;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
}
|
||||||
|
:global([data-nu-scheme-is='dark'] body code) {
|
||||||
|
color: var(--bg-color);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
7
src/components/ListItem.svelte
Normal file
7
src/components/ListItem.svelte
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
<li><slot /></li>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
li {
|
||||||
|
margin: 0.7rem 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<script context="module">
|
<script context="module">
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import components from './components';
|
import components from './components';
|
||||||
const { a, table } = components;
|
const { a, table, code, li } = components;
|
||||||
export { a, table };
|
export { a, table, code, li };
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,13 @@
|
||||||
import Link from '../components/Link.svelte';
|
import Link from '../components/Link.svelte';
|
||||||
import Table from '../components/Table.svelte';
|
import Table from '../components/Table.svelte';
|
||||||
|
import Code from '../components/Code.svelte';
|
||||||
|
import ListItem from '../components/ListItem.svelte';
|
||||||
|
|
||||||
const components = {
|
const components = {
|
||||||
a: Link,
|
a: Link,
|
||||||
table: Table,
|
table: Table,
|
||||||
|
code: Code,
|
||||||
|
li: ListItem,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default components;
|
export default components;
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,7 @@
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
transition: background-color 0.3s ease-in;
|
transition: background-color 0.3s ease-in;
|
||||||
font-family: 'Ubuntu Mono', monospace;
|
font-family: 'Ubuntu Mono', monospace;
|
||||||
|
line-height: 1.3;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { BlogPostMeta } from '../../types';
|
import type { BlogPostMeta } from '../../types';
|
||||||
import Link from '../../components/Link.svelte';
|
import Link from '../../components/Link.svelte';
|
||||||
|
import ListItem from '../../components/ListItem.svelte';
|
||||||
|
|
||||||
export let posts: BlogPostMeta[];
|
export let posts: BlogPostMeta[];
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -32,8 +33,8 @@
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{#each posts as post}
|
{#each posts as post}
|
||||||
<li>
|
<ListItem>
|
||||||
<Link href={post.href}>{post.date} - {post.title}</Link>
|
<Link href={post.href}>{post.date} - {post.title}</Link>
|
||||||
</li>
|
</ListItem>
|
||||||
{/each}
|
{/each}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ title: 'Software recommendations for a privacy conscious digital life'
|
||||||
description: ''
|
description: ''
|
||||||
keywords:
|
keywords:
|
||||||
- privacy
|
- privacy
|
||||||
hidden: true
|
hidden: false
|
||||||
---
|
---
|
||||||
|
|
||||||
<script context="module" lang="ts">
|
<script context="module" lang="ts">
|
||||||
|
|
@ -23,16 +23,42 @@ hidden: true
|
||||||
|
|
||||||
Moving away from BigTech is not an easy task. However, in these days, there are plenty polished
|
Moving away from BigTech is not an easy task. However, in these days, there are plenty polished
|
||||||
alternatives out there. Over the years I tried out many different services and software. I will
|
alternatives out there. Over the years I tried out many different services and software. I will
|
||||||
formulate some of my opinions here.
|
present what worked best for me here.
|
||||||
|
|
||||||
A very encompassing resource I recommend is [PrivacyGuides](https://www.privacyguides.org/).
|
A very encompassing resource I am recommending is [PrivacyGuides](https://www.privacyguides.org/).
|
||||||
|
However, their recommendations are at times rather purist. Everyone should use whatever works best for them.
|
||||||
|
Privacy is not a black-and-white game.
|
||||||
|
|
||||||
| Name | Description | Cost | Selfhostable |
|
## Utilities
|
||||||
| -------------------------------------- | ---------------- | ----------------- | ------------ |
|
|
||||||
| [Bitwarden](https://bitwarden.com/) | Password manager | free | yes |
|
|
||||||
| [SimpleLogin](https://simplelogin.io/) | Email aliases | free for students | yes |
|
|
||||||
| [Mailbox.org](https://mailbox.org/en/) | Email hosting | 1 € / m | no |
|
|
||||||
|
|
||||||
<table>
|
| Name | Description | Cost | Selfhostable |
|
||||||
|
| --------------------------------------------------------- | -------------------------------------------- | ----------------- | ------------ |
|
||||||
|
| [Bitwarden](https://bitwarden.com/) | Password manager | free | yes |
|
||||||
|
| [SimpleLogin](https://simplelogin.io/) | Email aliases | free for students | yes |
|
||||||
|
| [Mailbox.org](https://mailbox.org/en/) | Email hosting | 1 € / m | no |
|
||||||
|
| [Element](https://element.io/) | Instant messenging | free | yes |
|
||||||
|
| [OpenStreetMap](https://www.openstreetmap.org/) | Global map | free | no |
|
||||||
|
| [Baïkal](https://sabre.io/baikal/) | Lightweight calendar synchronisation | free | yes |
|
||||||
|
| [Filebrowser](https://github.com/filebrowser/filebrowser) | Lightweight file organisation in the browser | free | yes |
|
||||||
|
| [xBrowserSync](https://www.xbrowsersync.org/) | Bookmark sync | free | yes |
|
||||||
|
|
||||||
</table>
|
## PC Software
|
||||||
|
|
||||||
|
| Name | Description | Cost | Selfhostable |
|
||||||
|
| ------------------------------------------------------------------------------ | --------------------------- | ---- | ------------ |
|
||||||
|
| [Ungoogled Chromium](https://github.com/ungoogled-software/ungoogled-chromium) | Browser | free | NaN |
|
||||||
|
| [KDE Software Suite](https://kde.org/) | Desktop environment | free | NaN |
|
||||||
|
| [i3wm](https://i3wm.org/) | Desktop environment | free | NaN |
|
||||||
|
| [VSCodium](https://vscodium.com/) | No telemetry VSCode | free | NaN |
|
||||||
|
| [Xournal++](https://xournalpp.github.io/) | PDF annotation and creation | free | NaN |
|
||||||
|
|
||||||
|
## Android Apps
|
||||||
|
|
||||||
|
| Name | Description | Cost | Selfhostable |
|
||||||
|
| -------------------------------------------------------------------------------- | -------------------------- | ---- | ------------ |
|
||||||
|
| [Infinity](https://f-droid.org/packages/ml.docilealligator.infinityforreddit/) | Reddit client | free | NaN |
|
||||||
|
| [Aegis](https://f-droid.org/en/packages/com.beemdevelopment.aegis) | 2FA Manager | free | NaN |
|
||||||
|
| [FindMyDevice](https://f-droid.org/en/packages/de.nulide.findmydevice/) | Remote phone control | free | yes |
|
||||||
|
| [AdAway](https://f-droid.org/en/packages/org.adaway/) | Adblocking with hosts file | free | NaN |
|
||||||
|
| [OsmAnd+](https://f-droid.org/en/packages/net.osmand.plus/) | Global map | free | no |
|
||||||
|
| [StreetComplete](https://f-droid.org/en/packages/de.westnordost.streetcomplete/) | Improve OpenStreetMap | free | NaN |
|
||||||
|
|
|
||||||
|
|
@ -15,23 +15,24 @@
|
||||||
import Icon from 'mdi-svelte';
|
import Icon from 'mdi-svelte';
|
||||||
import Element from '../components/element.svelte';
|
import Element from '../components/element.svelte';
|
||||||
import Link from '../components/Link.svelte';
|
import Link from '../components/Link.svelte';
|
||||||
|
import ListItem from '../components/ListItem.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<h1>Contact Information</h1>
|
<h1>Contact Information</h1>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<ListItem>
|
||||||
<Icon path={mdiEmailEditOutline} />
|
<Icon path={mdiEmailEditOutline} />
|
||||||
E-Mail: <Link disableIcon href="mailto:me@daichendt.one">me@daichendt.one</Link>
|
E-Mail: <Link disableIcon href="mailto:me@daichendt.one">me@daichendt.one</Link>
|
||||||
</li>
|
</ListItem>
|
||||||
<li>
|
<ListItem>
|
||||||
<Icon path={mdiGithub} />
|
<Icon path={mdiGithub} />
|
||||||
Github: <Link disableIcon href="https://github.com/AlexDaichendt">AlexDaichendt</Link>
|
Github: <Link disableIcon href="https://github.com/AlexDaichendt">AlexDaichendt</Link>
|
||||||
</li>
|
</ListItem>
|
||||||
<li>
|
<ListItem>
|
||||||
<span style="font-size:1rem"><Element /></span>
|
<span style="font-size:1rem"><Element /></span>
|
||||||
Element: @alexdaichendt:matrix.org
|
Element: @alexdaichendt:matrix.org
|
||||||
</li>
|
</ListItem>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
I usually reply within a couple minutes - if it is important.
|
I usually reply within a couple minutes - if it is important.
|
||||||
|
|
@ -40,7 +41,4 @@ I usually reply within a couple minutes - if it is important.
|
||||||
ul {
|
ul {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
li {
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue