Compare commits
52 Commits
0.3.2
...
renovate/s
| Author | SHA1 | Date | |
|---|---|---|---|
|
cd4d9cf3ea
|
|||
|
85d018c899
|
|||
|
07b892517e
|
|||
| d0366bbd2a | |||
|
205bbd08d1
|
|||
| a71279b223 | |||
|
664e9b087f
|
|||
|
e04314217b
|
|||
|
17060fb068
|
|||
|
a818b7f203
|
|||
|
d4c69f2723
|
|||
|
f92162bca9
|
|||
|
3bc11ce05f
|
|||
| 7eab070c6a | |||
| d5cd5c9a97 | |||
| 68ec2e34e1 | |||
| 6a0a73a890 | |||
| c259220e3a | |||
| 5bfa89f283 | |||
| aa70878324 | |||
| f7bce68f68 | |||
| 074f9492a9 | |||
| b6f57384d0 | |||
| 01ff1bf0df | |||
| 01a5031895 | |||
| 4d287c3d1a | |||
| 5688f0dab6 | |||
| 357ef79e11 | |||
| 397d1070c8 | |||
| 8abd89d0d1 | |||
| a7df098167 | |||
|
2b721c483e
|
|||
|
ada12fd4db
|
|||
| 4814ef4c22 | |||
|
b0d866873b
|
|||
|
06364a06bf
|
|||
| 795b166d7f | |||
|
adb4bb7f75
|
|||
| 958902631f | |||
|
b0347a9d06
|
|||
| 384354fbac | |||
|
ed2e8ef446
|
|||
| fa16814f91 | |||
|
735279bc47
|
|||
| 204bf5b01d | |||
|
cb0e86a66a
|
|||
|
5b375f888e
|
|||
|
7365749113
|
|||
|
2cf66ab6cb
|
|||
|
4377fc56c8
|
|||
|
6584b3c7c7
|
|||
|
a3c379a813
|
59
.drone.yml
59
.drone.yml
@@ -1,59 +0,0 @@
|
||||
---
|
||||
kind: secret
|
||||
name: docker_username
|
||||
get:
|
||||
path: odit-registry-builder
|
||||
name: username
|
||||
|
||||
---
|
||||
kind: secret
|
||||
name: docker_password
|
||||
get:
|
||||
path: odit-registry-builder
|
||||
name: password
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: build:latest
|
||||
|
||||
steps:
|
||||
- name: docker release
|
||||
image: plugins/docker
|
||||
depends_on: [clone]
|
||||
settings:
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
repo: registry.odit.services/kauft.es/linkylinky-dashboard
|
||||
tags:
|
||||
- latest
|
||||
registry: registry.odit.services
|
||||
mtu: 1000
|
||||
when:
|
||||
branch:
|
||||
- main
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: build:tags
|
||||
|
||||
steps:
|
||||
- name: build $DRONE_TAG
|
||||
image: plugins/docker
|
||||
depends_on: [clone]
|
||||
settings:
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
repo: registry.odit.services/kauft.es/linkylinky-dashboard
|
||||
tags:
|
||||
- '${DRONE_TAG}'
|
||||
registry: registry.odit.services
|
||||
mtu: 1000
|
||||
trigger:
|
||||
event:
|
||||
- tag
|
||||
38
.woodpecker/build.yml
Normal file
38
.woodpecker/build.yml
Normal file
@@ -0,0 +1,38 @@
|
||||
steps:
|
||||
- name: build latest
|
||||
image: woodpeckerci/plugin-docker-buildx
|
||||
settings:
|
||||
repo: registry.odit.services/kauft.es/linkylinky-dashboard
|
||||
tags:
|
||||
- latest
|
||||
registry: registry.odit.services
|
||||
platforms: linux/amd64,linux/arm64
|
||||
cache_from: registry.odit.services/kauft.es/linkylinky-dashboard:latest
|
||||
username:
|
||||
from_secret: odit-registry-builder-username
|
||||
password:
|
||||
from_secret: odit-registry-builder-password
|
||||
secrets:
|
||||
- source: odit-npm-cache-url
|
||||
target: NPM_REGISTRY_URL
|
||||
when:
|
||||
branch: main
|
||||
event: push
|
||||
- name: build tag
|
||||
image: woodpeckerci/plugin-docker-buildx
|
||||
settings:
|
||||
repo: registry.odit.services/kauft.es/linkylinky-dashboard
|
||||
tags:
|
||||
- "${CI_COMMIT_TAG}"
|
||||
registry: registry.odit.services
|
||||
platforms: linux/amd64,linux/arm64
|
||||
cache_from: registry.odit.services/kauft.es/linkylinky-dashboard:latest
|
||||
username:
|
||||
from_secret: odit-registry-builder-username
|
||||
password:
|
||||
from_secret: odit-registry-builder-password
|
||||
secrets:
|
||||
- source: odit-npm-cache-url
|
||||
target: NPM_REGISTRY_URL
|
||||
when:
|
||||
event: tag
|
||||
49
CHANGELOG.md
49
CHANGELOG.md
@@ -2,14 +2,63 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||
|
||||
#### [0.4.5](https://git.odit.services/kauft.es/linkylinky-dashboard/compare/0.4.4...0.4.5)
|
||||
|
||||
- Added missing text styling to button [`b0d8668`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/b0d866873b7871118f664d5955212913aabbb414)
|
||||
- Fixed image src for deployment [`06364a0`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/06364a06bfd625e8f255569404892104a3192014)
|
||||
|
||||
#### [0.4.4](https://git.odit.services/kauft.es/linkylinky-dashboard/compare/0.4.3...0.4.4)
|
||||
|
||||
> 21 August 2021
|
||||
|
||||
- 🚀RELEASE 0.4.4 [`795b166`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/795b166d7f733907662047f1f6eb01bf5ce2eab4)
|
||||
- Added logo to sidebar [`adb4bb7`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/adb4bb7f7523e7fd739e93a74837c32eb9b266fa)
|
||||
|
||||
#### [0.4.3](https://git.odit.services/kauft.es/linkylinky-dashboard/compare/0.4.2...0.4.3)
|
||||
|
||||
> 21 August 2021
|
||||
|
||||
- 🚀RELEASE 0.4.3 [`9589026`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/958902631fe282b378048be8728cb9ec10c97cc4)
|
||||
- Added provider to detail vist table [`b0347a9`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/b0347a9d06a21578b4e5263daabf11e5de45ef5c)
|
||||
|
||||
#### [0.4.2](https://git.odit.services/kauft.es/linkylinky-dashboard/compare/0.4.1...0.4.2)
|
||||
|
||||
> 21 August 2021
|
||||
|
||||
- 🚀RELEASE 0.4.2 [`384354f`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/384354fbac3b58a7e4480a0788d9b079827938b7)
|
||||
- Commented search away from sidebar [`ed2e8ef`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/ed2e8ef44650f1c63d38258d7bef84c9e9222364)
|
||||
|
||||
#### [0.4.1](https://git.odit.services/kauft.es/linkylinky-dashboard/compare/0.4.0...0.4.1)
|
||||
|
||||
> 21 August 2021
|
||||
|
||||
- 🚀RELEASE 0.4.1 [`fa16814`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/fa16814f9165c89caaacfa9d6e042aa9aa77aebb)
|
||||
- Applied new sidebar styles to logout button [`735279b`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/735279bc47ef547549e57f6d137c95541e8bdd16)
|
||||
|
||||
#### [0.4.0](https://git.odit.services/kauft.es/linkylinky-dashboard/compare/0.3.2...0.4.0)
|
||||
|
||||
> 21 August 2021
|
||||
|
||||
- Migrated all sidebar items to the new component [`7365749`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/7365749113afc8f51e6b4aff78babcf361992f0a)
|
||||
- Removed unused commented template stuff [`5b375f8`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/5b375f888e729bea0a82938d9af7bc016c6bd74e)
|
||||
- Extracted a bunch of duplicate stylechecks into own component [`4377fc5`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/4377fc56c8f8d0f63a7579d21bcef95c0db45be8)
|
||||
- Refactoring: Rename [`cb0e86a`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/cb0e86a66af04c6f88b989ee8e1490aad689d1db)
|
||||
- Sidebar activestates [`a3c379a`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/a3c379a813be4349879e90ad07d9977a4e334e0d)
|
||||
- 🚀RELEASE 0.4.0 [`204bf5b`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/204bf5b01d61f4ab96aaa891225377fe5f7792cf)
|
||||
- Added hoverstates [`2cf66ab`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/2cf66ab6cbf661330a7767896157c62d958a651e)
|
||||
- Removed console log [`6584b3c`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/6584b3c7c7c0d5496d52522e8130f615145d1b03)
|
||||
|
||||
#### [0.3.2](https://git.odit.services/kauft.es/linkylinky-dashboard/compare/0.3.1...0.3.2)
|
||||
|
||||
> 21 August 2021
|
||||
|
||||
- Added code to createurl component [`59a411b`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/59a411bab5462710109767dfccb90a0f0459b2dd)
|
||||
- More basics for the shorturl creation module [`515370e`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/515370eac7ff5f018cae5ec790ccc8e90c025718)
|
||||
- added display logic for the basic elements [`cc5cb27`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/cc5cb2782f20c4a7ab480132217463a0f4a9a956)
|
||||
- Added basics for error handling on url creation [`c5c8514`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/c5c8514bab9615c90de8b5fb1f9a5925f752b28b)
|
||||
- Basics for the new url creation component [`5329c4e`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/5329c4e1219a1cd3c8f1b5c0bdf02cb22330fd72)
|
||||
- Added adding url functionality to apiclient [`0c629e2`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/0c629e241668e1809d9616e9f7cb6ba804ad4c53)
|
||||
- 🚀RELEASE 0.3.2 [`0927620`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/092762011dbaf5270b482e838cf29059af9d24eb)
|
||||
- Tmp removed the createurl component from index until it works [`ea6bd07`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/ea6bd074a12ed4a43d30b1e9bacbe12bc6f97356)
|
||||
- Now only using odit registry hosted images to speed up the build [`3a82caa`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/3a82caad95eb99dac71e01dc02e3fdafe17ef6da)
|
||||
- Switched to our own brotli nginx build [`19e08bc`](https://git.odit.services/kauft.es/linkylinky-dashboard/commit/19e08bc52cc6a9c73e4b2d42d612d3ea7401f108)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
FROM registry.odit.services/hub/library/node:16-alpine
|
||||
FROM registry.odit.services/hub/library/node:18-alpine
|
||||
WORKDIR /app
|
||||
COPY package.json ./
|
||||
RUN yarn
|
||||
COPY ./ ./
|
||||
RUN yarn build
|
||||
|
||||
FROM registry.odit.services/library/nginx-brotli:3.13
|
||||
FROM registry.odit.services/library/nginx-brotli:3.15
|
||||
COPY --from=0 /app/build /usr/share/nginx/html
|
||||
COPY ./nginx.conf /etc/nginx/nginx.conf
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"extends": "./.svelte-kit/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
|
||||
16
package.json
16
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@odit/linkylinky-dashboard",
|
||||
"version": "0.3.2",
|
||||
"version": "0.4.5",
|
||||
"scripts": {
|
||||
"dev": "svelte-kit dev",
|
||||
"build": "svelte-kit build",
|
||||
@@ -10,25 +10,25 @@
|
||||
"format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sveltejs/kit": "1.0.0-next.147",
|
||||
"@sveltejs/kit": "1.27.3",
|
||||
"autoprefixer": "^10.3.1",
|
||||
"cssnano": "^5.0.6",
|
||||
"eslint": "^7.22.0",
|
||||
"eslint": "^8.0.0",
|
||||
"eslint-config-prettier": "^8.1.0",
|
||||
"eslint-plugin-svelte3": "^3.2.0",
|
||||
"eslint-plugin-svelte3": "^4.0.0",
|
||||
"postcss": "^8.3.5",
|
||||
"postcss-load-config": "^3.1.0",
|
||||
"prettier": "~2.2.1",
|
||||
"prettier": "~2.6.0",
|
||||
"prettier-plugin-svelte": "^2.2.0",
|
||||
"release-it": "^14.11.5",
|
||||
"release-it": "^15.0.0",
|
||||
"svelte": "^3.34.0",
|
||||
"svelte-preprocess": "^4.7.4",
|
||||
"tailwindcss": "^2.2.4"
|
||||
"tailwindcss": "^3.0.0"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@sveltejs/adapter-static": "^1.0.0-next.16",
|
||||
"axios": "^0.21.1",
|
||||
"axios": "^0.27.0",
|
||||
"localforage": "^1.9.0"
|
||||
},
|
||||
"release-it": {
|
||||
|
||||
4293
pnpm-lock.yaml
generated
Normal file
4293
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
16
renovate.json
Normal file
16
renovate.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"dependencyDashboard": true,
|
||||
"baseBranches": [
|
||||
"main"
|
||||
],
|
||||
"addLabels": [
|
||||
"status:review_needed",
|
||||
"enhancement",
|
||||
"priority:medium"
|
||||
],
|
||||
"reviewers": [
|
||||
"niggl",
|
||||
"philipp"
|
||||
]
|
||||
}
|
||||
@@ -2,8 +2,11 @@
|
||||
import UserStore from '$lib/UserStore';
|
||||
import { onDestroy } from 'svelte';
|
||||
import Apiclient from './Apiclient';
|
||||
import { page } from '$app/stores';
|
||||
import SidebarEntry from './SidebarEntry.svelte';
|
||||
|
||||
$: logged_in = false;
|
||||
$: currentPage = $page.url.pathname;
|
||||
|
||||
const unsubscribe = UserStore.subscribe((value) => {
|
||||
logged_in = value.isLoggedIn;
|
||||
@@ -20,9 +23,9 @@
|
||||
<div
|
||||
class="flex flex-col w-64 h-screen px-4 py-8 bg-white border-r dark:bg-gray-800 dark:border-gray-600"
|
||||
>
|
||||
<img class="h-36 w-36" src="/icon_128.png" alt="LinkyLinky Logo (White kauft.es K on red background)">
|
||||
<h2 class="text-3xl font-semibold text-gray-800 dark:text-white">LinkyLinky</h2>
|
||||
|
||||
<div class="relative mt-6">
|
||||
<!-- <div class="relative mt-6">
|
||||
<span class="absolute inset-y-0 left-0 flex items-center pl-3">
|
||||
<svg class="w-5 h-5 text-gray-400" viewBox="0 0 24 24" fill="none">
|
||||
<path
|
||||
@@ -40,14 +43,11 @@
|
||||
class="w-full py-3 pl-10 pr-4 text-gray-700 bg-white border border-gray-300 rounded-md dark:bg-gray-800 dark:text-gray-300 dark:border-gray-600 focus:border-blue-500 dark:focus:border-blue-500 focus:outline-none focus:ring"
|
||||
placeholder="Search"
|
||||
/>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div class="flex flex-col justify-between flex-1 mt-6">
|
||||
<nav>
|
||||
<a
|
||||
class="flex items-center px-4 py-2 text-gray-700 bg-gray-200 rounded-md dark:bg-gray-700 dark:text-gray-200"
|
||||
href="./"
|
||||
>
|
||||
<SidebarEntry title="Dashboard" href="" pageUrl="/" bind:currentPage>
|
||||
<svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M19 11H5M19 11C20.1046 11 21 11.8954 21 13V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V13C3 11.8954 3.89543 11 5 11M19 11V9C19 7.89543 18.1046 7 17 7M5 11V9C5 7.89543 5.89543 7 7 7M7 7V5C7 3.89543 7.89543 3 9 3H15C16.1046 3 17 3.89543 17 5V7M7 7H17"
|
||||
@@ -57,17 +57,12 @@
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span class="mx-4 font-medium">Dashboard</span>
|
||||
</a>
|
||||
</SidebarEntry>
|
||||
|
||||
<hr class="my-6 dark:border-gray-600" />
|
||||
|
||||
{#if logged_in}
|
||||
<a
|
||||
class="flex items-center px-4 py-2 mt-5 text-gray-600 transition-colors duration-200 transform rounded-md dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700 dark:hover:text-gray-200 hover:text-gray-700"
|
||||
href="./links"
|
||||
>
|
||||
<SidebarEntry title="Manage Links" href="/links" pageUrl="/links" bind:currentPage>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
@@ -82,13 +77,8 @@
|
||||
d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span class="mx-4 font-medium">Manage Links</span>
|
||||
</a>
|
||||
<a
|
||||
class="flex items-center px-4 py-2 mt-5 text-gray-600 transition-colors duration-200 transform rounded-md dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700 dark:hover:text-gray-200 hover:text-gray-700"
|
||||
href="./visits"
|
||||
>
|
||||
</SidebarEntry>
|
||||
<SidebarEntry title="All visits" href="/visits" pageUrl="/visits" bind:currentPage>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
@@ -109,35 +99,9 @@
|
||||
d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span class="mx-4 font-medium">All Visits</span>
|
||||
</a>
|
||||
|
||||
<!-- <a
|
||||
class="flex items-center px-4 py-2 mt-5 text-gray-600 transition-colors duration-200 transform rounded-md dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700 dark:hover:text-gray-200 hover:text-gray-700"
|
||||
href="#"
|
||||
>
|
||||
<svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M10.3246 4.31731C10.751 2.5609 13.249 2.5609 13.6754 4.31731C13.9508 5.45193 15.2507 5.99038 16.2478 5.38285C17.7913 4.44239 19.5576 6.2087 18.6172 7.75218C18.0096 8.74925 18.5481 10.0492 19.6827 10.3246C21.4391 10.751 21.4391 13.249 19.6827 13.6754C18.5481 13.9508 18.0096 15.2507 18.6172 16.2478C19.5576 17.7913 17.7913 19.5576 16.2478 18.6172C15.2507 18.0096 13.9508 18.5481 13.6754 19.6827C13.249 21.4391 10.751 21.4391 10.3246 19.6827C10.0492 18.5481 8.74926 18.0096 7.75219 18.6172C6.2087 19.5576 4.44239 17.7913 5.38285 16.2478C5.99038 15.2507 5.45193 13.9508 4.31731 13.6754C2.5609 13.249 2.5609 10.751 4.31731 10.3246C5.45193 10.0492 5.99037 8.74926 5.38285 7.75218C4.44239 6.2087 6.2087 4.44239 7.75219 5.38285C8.74926 5.99037 10.0492 5.45193 10.3246 4.31731Z"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M15 12C15 13.6569 13.6569 15 12 15C10.3431 15 9 13.6569 9 12C9 10.3431 10.3431 9 12 9C13.6569 9 15 10.3431 15 12Z"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span class="mx-4 font-medium">Settings</span>
|
||||
</a> -->
|
||||
</SidebarEntry>
|
||||
<button
|
||||
class="flex items-center px-4 py-2 mt-5 text-gray-600 transition-colors duration-200 transform rounded-md dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700 dark:hover:text-gray-200 hover:text-gray-700"
|
||||
class="flex items-center px-4 py-2 mt-5 transition-colors duration-200 transform rounded-md hover:bg-gray-200 dark:hover:bg-gray-700 dark:hover:text-gray-200 hover:text-gray-700 text-gray-600 dark:text-gray-400"
|
||||
on:click={logout}
|
||||
>
|
||||
<svg
|
||||
@@ -158,10 +122,7 @@
|
||||
<span class="mx-4 font-medium">Logout</span>
|
||||
</button>
|
||||
{:else}
|
||||
<a
|
||||
class="flex items-center px-4 py-2 mt-5 text-gray-600 transition-colors duration-200 transform rounded-md dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700 dark:hover:text-gray-200 hover:text-gray-700"
|
||||
href="./login"
|
||||
>
|
||||
<SidebarEntry title="Login" href="/login" pageUrl="/login" bind:currentPage>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
@@ -176,9 +137,7 @@
|
||||
d="M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h7a3 3 0 013 3v1"
|
||||
/>
|
||||
</svg>
|
||||
|
||||
<span class="mx-4 font-medium">Login</span>
|
||||
</a>
|
||||
</SidebarEntry>
|
||||
{/if}
|
||||
</nav>
|
||||
|
||||
|
||||
21
src/lib/SidebarEntry.svelte
Normal file
21
src/lib/SidebarEntry.svelte
Normal file
@@ -0,0 +1,21 @@
|
||||
<script>
|
||||
export let currentPage;
|
||||
export let title = 'null';
|
||||
export let href = './null';
|
||||
export let pageUrl = '/null';
|
||||
</script>
|
||||
|
||||
<a
|
||||
class="flex items-center px-4 py-2 mt-5 transition-colors duration-200 transform rounded-md hover:bg-gray-200 dark:hover:bg-gray-700 dark:hover:text-gray-200 hover:text-gray-700"
|
||||
class:dark:bg-gray-700={currentPage == pageUrl}
|
||||
class:bg-gray-200={currentPage == pageUrl}
|
||||
class:dark:text-gray-200={currentPage == pageUrl}
|
||||
class:text-gray-700={currentPage == pageUrl}
|
||||
class:dark:text-gray-400={!(currentPage == pageUrl)}
|
||||
class:text-gray-600={!(currentPage == pageUrl)}
|
||||
{href}
|
||||
>
|
||||
<slot />
|
||||
|
||||
<span class="mx-4 font-medium">{title}</span>
|
||||
</a>
|
||||
@@ -1,10 +1,7 @@
|
||||
<script>
|
||||
import { page } from '$app/stores';
|
||||
import Apiclient from '$lib/Apiclient';
|
||||
import UserStore from '$lib/UserStore';
|
||||
import { onDestroy } from 'svelte';
|
||||
|
||||
let shortcode = $page.query.get('shortcode');
|
||||
import { onDestroy, onMount } from 'svelte';
|
||||
|
||||
$: urlDetails = {
|
||||
shortcode: 'Loading...',
|
||||
@@ -14,20 +11,27 @@
|
||||
};
|
||||
$: urlVisists = [];
|
||||
let visitQuery;
|
||||
let shortcode;
|
||||
|
||||
// Yes i know this isn't the best way to implement this, but linkylinky dashboard is just a oneshot sideproject r/n.
|
||||
const unsubscribe = UserStore.subscribe((value) => {
|
||||
if (value.isLoggedIn) {
|
||||
Apiclient.getUrlDetails(shortcode).then((res) => {
|
||||
urlDetails = res;
|
||||
});
|
||||
visitQuery = Apiclient.getUrlVisits(shortcode).then((res) => {
|
||||
urlVisists = res;
|
||||
});
|
||||
}
|
||||
onMount(async () => {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
let shortcode = params.get('shortcode');
|
||||
|
||||
// Yes i know this isn't the best way to implement this, but linkylinky dashboard is just a oneshot sideproject r/n.
|
||||
const unsubscribe = UserStore.subscribe((value) => {
|
||||
if (value.isLoggedIn) {
|
||||
Apiclient.getUrlDetails(shortcode).then((res) => {
|
||||
urlDetails = res;
|
||||
unsubscribe();
|
||||
});
|
||||
visitQuery = Apiclient.getUrlVisits(shortcode).then((res) => {
|
||||
urlVisists = res;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
onDestroy(unsubscribe);
|
||||
});
|
||||
|
||||
onDestroy(unsubscribe);
|
||||
</script>
|
||||
|
||||
<h2 class="text-3xl font-bold text-gray-800 dark:text-gray-100 pb-6">Details: {shortcode}</h2>
|
||||
@@ -50,6 +54,9 @@
|
||||
<th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider">
|
||||
Timestamp
|
||||
</th>
|
||||
<th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider">
|
||||
Provider
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="bg-white dark:bg-gray-700 divide-y divide-gray-200 dark:text-gray-100" x-max="1">
|
||||
@@ -60,6 +67,7 @@
|
||||
>
|
||||
Loading data...
|
||||
</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm"> Loading data... </td>
|
||||
</tr>
|
||||
{:then}
|
||||
{#each urlVisists as visit}
|
||||
@@ -69,6 +77,7 @@
|
||||
>
|
||||
{visit.timestamp}
|
||||
</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm"> {visit.provider} </td>
|
||||
</tr>
|
||||
{/each}
|
||||
{/await}
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
Loading data...
|
||||
</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm">
|
||||
<a href="#">Loading data...</a>
|
||||
<p href="#">Loading data...</p>
|
||||
</td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm"> Loading data... </td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
||||
|
||||
@@ -16,6 +16,12 @@ import Apiclient from '$lib/Apiclient';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function handleKeydown(e) {
|
||||
if (e.keyCode === 13) {
|
||||
login();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="w-full max-w-sm mx-auto overflow-hidden bg-white rounded-lg shadow-md dark:bg-gray-800">
|
||||
@@ -30,21 +36,23 @@ import Apiclient from '$lib/Apiclient';
|
||||
|
||||
<div class="w-full mt-4">
|
||||
<input
|
||||
class="block w-full px-4 py-2 mt-2 text-gray-700 dark:text-gray-400 placeholder-gray-500 bg-white border border-gray-300 rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-blue-500 dark:focus:border-blue-500 focus:outline-none focus:ring"
|
||||
class="block w-full px-4 py-2 mt-2 text-gray-700 dark:text-gray-200 placeholder-gray-500 bg-white border border-gray-300 rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-blue-500 dark:focus:border-blue-500 focus:outline-none focus:ring"
|
||||
type="text"
|
||||
placeholder="Username"
|
||||
aria-label="Username"
|
||||
bind:value={username}
|
||||
on:keydown={handleKeydown}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="w-full mt-4">
|
||||
<input
|
||||
class="block w-full px-4 py-2 mt-2 text-gray-700 dark:text-gray-400 placeholder-gray-500 bg-white border border-gray-300 rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-blue-500 dark:focus:border-blue-500 focus:outline-none focus:ring"
|
||||
class="block w-full px-4 py-2 mt-2 text-gray-700 dark:text-gray-200 placeholder-gray-500 bg-white border border-gray-300 rounded-md dark:bg-gray-800 dark:border-gray-600 dark:placeholder-gray-400 focus:border-blue-500 dark:focus:border-blue-500 focus:outline-none focus:ring"
|
||||
type="password"
|
||||
placeholder="Password"
|
||||
aria-label="Password"
|
||||
bind:value={password}
|
||||
on:keydown={handleKeydown}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -11,11 +11,10 @@
|
||||
if (value.isLoggedIn) {
|
||||
visitQuery = Apiclient.getVisits().then((res) => {
|
||||
visits = res;
|
||||
unsubscribe();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
onDestroy(unsubscribe);
|
||||
</script>
|
||||
|
||||
<h2 class="text-3xl font-bold text-gray-800 dark:text-gray-100 pb-6">View all visits</h2>
|
||||
|
||||
@@ -1,25 +1,29 @@
|
||||
import preprocess from 'svelte-preprocess';
|
||||
import staticAdapter from '@sveltejs/adapter-static';
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
import preprocess from "svelte-preprocess";
|
||||
import adapterStatic from '@sveltejs/adapter-static';
|
||||
|
||||
const config = {
|
||||
kit: {
|
||||
// hydrate the <div id="svelte"> element in src/app.html
|
||||
target: '#svelte',
|
||||
adapter: staticAdapter(),
|
||||
adapter: adapterStatic({
|
||||
// default options are shown
|
||||
pages: 'build',
|
||||
assets: 'build',
|
||||
fallback: null,
|
||||
precompress: false
|
||||
}),
|
||||
prerender: {
|
||||
// This can be false if you're using a fallback (i.e. SPA mode)
|
||||
default: true
|
||||
},
|
||||
files: {
|
||||
assets: 'static'
|
||||
},
|
||||
paths: {
|
||||
base: '/dashboard',
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
preprocess: [
|
||||
preprocess({
|
||||
postcss: true
|
||||
})
|
||||
]
|
||||
],
|
||||
};
|
||||
|
||||
export default config;
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
const config = {
|
||||
mode: 'jit',
|
||||
darkMode: 'media',
|
||||
purge: ['./src/**/*.{html,js,svelte,ts}'],
|
||||
mode: "jit",
|
||||
content: [
|
||||
"./src/**/*.{html,js,svelte,ts}",
|
||||
],
|
||||
theme: {
|
||||
extend: {}
|
||||
extend: {},
|
||||
},
|
||||
plugins: []
|
||||
plugins: [],
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
|
||||
Reference in New Issue
Block a user