before recipes:update

This commit is contained in:
tracer 2022-05-11 14:48:04 +02:00
parent 1b4ca82754
commit c84ec14cb5
46 changed files with 1363 additions and 1235 deletions

View File

@ -14,7 +14,11 @@
"browser": true
},
"rules": {
"semi": "off",
"semi": [
"error",
"never"
],
"vue/no-v-html": "off",
"vue/html-indent": [
"error",
"tab"

BIN
assets/images/tracer_schmolle.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -1,42 +1,47 @@
<template>
<div>
<div class="container-fluid">
<div class="row">
<div class="col">
<nav-bar
:user="user"
@invalidate-user="onInvalidateUser"
/>
</div>
</div>
<b-container
fluid
class="mt-5 main-content"
>
<b-row>
<div class="col-2">
<div class="row mt-5 main-content">
<div class="col-xl-3">
<sidebar/>
</div>
<div class="col-9 box">
<div class="col-xl-9">
<router-view
:quote="quote"
@user-authenticated="onUserAuthenticated"
/>
</div>
<div class="col mt-2"/>
</b-row>
</b-container>
</div>
<div class="row">
<div class="col">
<footer-component/>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios';
import axios from 'axios'
import NavBar from '@/components/TheNavbar';
import Sidebar from '@/components/sidebar';
import FooterComponent from '@/components/footer';
import routerView from 'vue-router'
import NavBar from '@/components/TheNavbar'
import Sidebar from '@/components/TheSidebar'
import FooterComponent from '@/components/TheFooter'
export default {
name: 'App',
components: {
routerView,
Sidebar,
NavBar,
FooterComponent
@ -45,31 +50,32 @@ export default {
return {
user: null,
quote: null
};
}
},
mounted() {
if (window.user) {
this.user = window.user;
console.log(this.user);
this.user = window.user
console.log(this.user)
}
if (window.quote) {
this.quote = window.quote;
this.quote = window.quote
}
},
methods: {
onUserAuthenticated(userUri) {
console.log('authenticated');
console.log('authenticated')
axios
.get(userUri)
.then((response) => {
this.user = response.data;
});
this.$router.push('/');
this.user = response.data
})
this.$router.push('/')
},
onInvalidateUser() {
console.log('invalidated');
this.user = null;
console.log('invalidated')
this.user = null
window.user = null
}
}
};
}
</script>

View File

@ -0,0 +1,49 @@
<template>
<div>
<div v-if="isExternal">
<a :href="to">
<span
:class="`fa fa-lg fa-fw ${fa}`"
aria-hidden="true"
/>
&nbsp;
<slot/>
</a>
&nbsp;
<span
class="fa fa-lg fa-fw fa-external-link"
aria-hidden="true"
/>
</div>
<router-link
v-else
v-bind="$props"
>
<span
:class="`fa fa-lg fa-fw ${fa}`"
aria-hidden="true"
/>
&nbsp;
<slot/>
</router-link>
</div>
</template>
<script>
import { RouterLink } from 'vue-router'
export default {
props: {
...RouterLink.props,
fa: {
type: String,
default: ''
}
},
computed: {
isExternal() {
return typeof this.to === 'string' && this.to.startsWith('http')
}
}
}
</script>

View File

@ -0,0 +1,110 @@
<template>
<div class="container box">
<form @submit.prevent="handleSubmit">
<div
v-if="error"
class="alert alert-danger"
>
{{ error }}
</div>
<div class="form-group mt-2">
<label for="exampleInputEmail1">Username</label>
<input
id="username"
v-model="username"
type="text"
class="form-control"
aria-describedby="emailHelp"
placeholder="Enter email"
>
</div>
<div class="form-group mt-2">
<label for="password">Password</label>
<input
id="password"
v-model="password"
type="password"
class="form-control"
placeholder="Password"
>
</div>
<div class="form-check mt-2">
<input
id="remember-me"
type="checkbox"
class="form-check-input"
>
<label
class="form-check-label"
for="remember-me"
>
Remember Me
</label>
</div>
<button
type="submit"
class="btn btn-primary mt-2 mb-2"
:class="{ disabled: isLoading }"
>
Log in
</button>
</form>
</div>
</template>
<script>
import axios from 'axios'
export default {
name: 'LoginForm',
/*
props: {
user: {
Type: Object
}
},
*/
data() {
return {
username: '',
password: '',
error: '',
isLoading: false
}
},
methods: {
handleSubmit() {
console.log('handle submit')
this.isLoading = true
this.error = ''
axios
.post('/login', {
username: this.username,
password: this.password
})
.then((response) => {
console.log(response.headers)
this.$emit('user-authenticated', response.headers.location)
this.username = ''
this.password = ''
})
.catch((error) => {
console.log(error.response.data)
if (error.response.data.error) {
this.error = error.response.data.error
} else {
this.error = 'Unknown error'
}
})
.finally(() => {
this.isLoading = false
})
}
}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,11 @@
<template>
<div>
404 Not Found
</div>
</template>
<script>
export default {
name: 'NotFound'
}
</script>

View File

@ -0,0 +1,55 @@
<template>
<footer class="dark fixed-bottom">
<div class="container mt-5">
<div class="row justify-content-center">
<div class="col text-center">
<div>
powered by
<router-link
to="/"
class="d-inline-block mx-auto"
>
<img
src="/build/images/Spookie/spookie_64x64.png"
alt="Spookie"
>
</router-link>
</div>
</div>
<div class="col md-4 text-left">
<div id="legal">
<h5 class="bd-text-purple-bright mb-1 mt-3">
Legal
</h5>
<ul class="list-unstyled ml-3">
<li>
<router-link :to="{ name: 'Pages', params: {slug: 'imprint'}}">
Imprint
</router-link>
</li>
<li>
<router-link to="/pages/privacy-policy">
Privacy Policy
</router-link>
</li>
</ul>
</div>
</div>
</div>
</div>
</footer>
</template>
<script>
export default {
name: 'TheFooter'
}
</script>
<style type="scss">
footer {
color: lightgray;
background: #0e0e10;
}
</style>

View File

@ -1,99 +1,151 @@
<template>
<b-navbar
toggleable="lg"
type="dark"
variant="dark"
fixed="top"
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top navbar-top">
<router-link
class="navbar-brand"
:to="{ name: 'Home' }"
>
<b-navbar-brand to="/">
<img
id="site-logo"
src="/build/images/24unix/24_logo_bg_96x96.png"
class="img-fluid"
alt="24unix.net"
>
</b-navbar-brand>
<b-navbar-toggle target="nav-collapse" />
<b-collapse
id="nav-collapse"
is-nav
</router-link>
<button
class="navbar-toggler border-0"
type="button"
data-toggle="collapse"
data-target="#CollapsingNavbar"
>
<!--
<b-nav-form>
<b-form-input size="sm" class="mr-sm-2" placeholder="Search"></b-form-input>
<b-button size="sm" class="my-2 my-sm-0" type="submit">Search</b-button>
</b-nav-form>
-->
<!--
<b-nav-item-dropdown text="Lang" right>
<b-dropdown-item href="#">EN</b-dropdown-item>
<b-dropdown-item href="#">ES</b-dropdown-item>
<b-dropdown-item href="#">RU</b-dropdown-item>
<b-dropdown-item href="#">FA</b-dropdown-item>
</b-nav-item-dropdown>
-->
<b-navbar-nav class="ml-auto mr-5">
<b-button
v-if="!isLoggedIn"
to="/form_login"
</button>
<div
id="CollapsingNavbar"
class="collapse navbar-collapse"
>
Login
</b-button>
<b-dropdown
v-else
id="dropdown"
:text="user.username"
class="m-md-2"
type="dark"
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<div v-if="isLoggedIn">
<button
v-if="isLoggedIn"
data-bs-target="#dropdown-menu"
data-bs-toggle="dropdown"
class="btn btn-primary button-login dropdown-toggle ml-auto mb-2 mr-5"
:to="{ name: 'Home'}"
>
<b-dropdown-item>
<b-link
:to="{ name: 'Profile' }"
{{ user.username }}
</button>
<div
id="dropdown-menu"
class="dropdown-menu dropdown-menu-dark dropdown-menu-end"
aria-labelledby="navbar-dropdown"
>
<router-link
:to="{name: 'Profile'}"
class="dropdown-item"
href="/profile"
>
<span
class="fa fa-lg fa-fw fa-user"
aria-hidden="true"
/>&nbsp;Profile
</b-dropdown-item>
<b-dropdown-item>
/>
Profile
</router-link>
<a
class="dropdown-item"
href="#"
>
<span
class="fa fa-lg fa-fw fa-wrench"
aria-hidden="true"
/>
Settings</a>
<div class="dropdown-divider"/>
<a
class="dropdown-item"
href="/admin"
>
<span
class="fa fa-lg fa-fw fa-cog"
aria-hidden="true"
/>
Administration
</a>
<div class="dropdown-divider"/>
<a
class="dropdown-item"
href="/logout"
>
<span
class="fa fa-lg fa-fw fa-sign-out"
aria-hidden="true"
/>
&nbsp;Logout
</a>
</div>
</div>
<button
v-else
class="btn btn-outline-primary"
>
<router-link :to="{ name: 'LoginForm'}">
<span
class="fa fa-sign-in fa-lg fa-fw"
aria-hidden="true"
/>
Login
</router-link>
</button>
</li>
</ul>
</div>
<!--
<span
class="fa fa-lg fa-fw fa-wrench"
aria-hidden="true"
/>&nbsp;Settings
</b-dropdown-item>
<b-dropdown-divider />
<b-dropdown-divider/>
<b-dropdown-item @click="logout">
<span
class="fa fa-lg fa-fw fa-sign-out"
aria-hidden="true"
/>&nbsp;Logout
</b-dropdown-item>
</b-dropdown>
</b-navbar-nav>
</b-collapse>
</b-navbar>
-->
</nav>
</template>
<script>
import axios from 'axios';
import axios from 'axios'
import 'vue-navigation-bar/dist/vue-navigation-bar.css'
export default {
name: 'TheNavbar',
props: ['user'],
components: {},
props: {
user: {
type: Object,
default: null
}
},
data: () => ({}),
computed: {
isLoggedIn() {
return !!this.user;
return !!this.user
}
},
methods: {
logout() {
console.log('logout');
console.log('logout')
axios
.get('/logout')
.then(this.$emit('invalidate-user'));
.then(this.$emit('invalidate-user'))
}
}
};
}
</script>
<style>

View File

@ -0,0 +1,57 @@
<template>
<div
id="main-menu"
class="container-fluid col sidenav-left box text-start"
>
<ul>
<li
v-for="link in links"
:key="link.url"
>
<AppLink
:to="link.url"
:fa="link.fa"
>
{{ link.name }}
</AppLink>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'TheSidebar',
data: () => ({
links: [
{
name: 'Projects',
url: 'Projects',
fa: 'fa-file-code-o',
},
{
name: 'Gitea',
url: 'https://git.24unix.net',
fa: 'fa-gitea',
},
{
name: 'NextCloud',
url: 'https://cloud.24unix.net',
fa: 'fa-nextcloud',
},
{
name: 'Pastebin',
url: 'https://pastebin.24unix.net',
fa: 'fa-paste',
},
{
name: 'YOURLS',
url: 'https://y.24unix.net',
fa: 'fa-link',
external: true
}
]
})
}
</script>

View File

@ -1,37 +0,0 @@
<template>
<footer class="dark fixed-bottom"> <!-- :class="['bd-footer', 'text-muted']"> -->
<b-container class="mt-5">
<b-row class="justify-content-center">
<b-col class="text-center">
<div>powered by
<b-link to="/" class="d-inline-block mx-auto"><img src="/build/images/Spookie/spookie_64x64.png" alt="Spookie"></b-link>
</div>
</b-col>
<b-col cols="auto" md="4" class="text-left">
<div id="legal">
<h5 class="bd-text-purple-bright mb-1 mt-3">Legal</h5>
<ul class="list-unstyled ml-3">
<li><b-link to="/pages/imprint">Imprint</b-link></li>
<li><b-link to="/pages/privacy-policy">Privacy Policy</b-link></li>
</ul>
</div>
</b-col>
</b-row>
</b-container>
</footer>
</template>
<script>
export default {
name: "Footer"
}
</script>
<style type="scss">
footer {
color: lightgray;
background: #0e0e10;
}
</style>

View File

@ -1,71 +0,0 @@
<template>
<form v-on:submit.prevent="handleSubmit">
<div v-if="error" class="alert alert-danger">
{{ error }}
</div>
<div class="form-group">
<label for="exampleInputEmail1">Username</label>
<input type="text" v-model="username" class="form-control" id="username"
aria-describedby="emailHelp" placeholder="Enter email">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" v-model="password" class="form-control"
id="exampleInputPassword1" placeholder="Password">
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">I like cheese</label>
</div>
<button type="submit" class="btn btn-primary" v-bind:class="{ disabled: isLoading }">Log in</button>
</form>
</template>
<script>
import axios from 'axios';
export default {
name: 'Login',
data() {
return {
username: '',
password: '',
error: '',
isLoading: false
}
},
props: ['user'],
methods: {
handleSubmit() {
console.log("handle submit");
this.isLoading = true
this.error = ''
axios
.post('/login', {
username: this.username,
password: this.password
})
.then(response => {
console.log(response.headers);
this.$emit('user-authenticated', response.headers.location);
this.username = '';
this.password = '';
}).catch(error => {
console.log(error.response.data);
if (error.response.data.error) {
this.error = error.response.data.error
} else {
this.error = 'Unknown error'
}
}).finally(() => {
this.isLoading = false;
})
},
},
}
</script>
<style scoped lang="scss">
</style>

View File

@ -1,11 +0,0 @@
<template>
<div>
404 Not Found
</div>
</template>
<script>
export default {
name: "NotFound"
}
</script>

View File

@ -1,62 +1,77 @@
<template>
<div v-if="!isLoading">
<div id="edit-wrapper">
<div
v-if="!isLoading"
class="box p-3"
>
<tab-wrapper>
<tab-content title="Visual Editor">
<div class="editor mt-2">
<VueEditor v-model="page.content"></VueEditor>
<!-- *** disbaled = true? -->
<VueEditor v-model="page.content"/>
</div>
<b-button @click="saveContent" class="mt-3 mb-2">Save</b-button>
</tab-content>
<tab-content title="Raw Content">
<div>
<textarea
v-model="page.content"
class="p-fluid"
/>
</div>
</tab-content>
</tab-wrapper>
<button
class="btn btn-primary mt-3 mb-2"
@click="saveContent"
>
Save
</button>
</div>
<div v-else>
<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
<span class="sr-only">Loading </span></div>
<i class="fa fa-spinner fa-spin fa-3x fa-fw"/>
<span class="sr-only">Loading </span>
</div>
</template>
<script>
import axios from "axios";
import axios from 'axios'
// Basic Use - Covers most scenarios
import { VueEditor } from "vue2-editor";
import { VueEditor } from 'vue3-editor'
import TabWrapper from '@/components/tabs/TabWrapper'
import TabContent from '@/components/tabs/TabContent'
export default {
name: 'PagesEdit',
components: {
VueEditor
VueEditor,
TabWrapper,
TabContent
},
data: () => ({
page: null,
isLoading: true
}),
beforeMount() {
const { slug } = this.$route.params
console.log(`slug: ${slug}`)
axios
.get(`/api/pages?slug=${slug}`)
.then((response) => {
[this.page] = response.data['hydra:member']
this.isLoading = false
})
},
methods: {
saveContent() {
console.log(this.page)
axios
.put('/api/pages/' + this.page.id, this.page)
.then(response => {
console.log("resp:" + response)
.put(`/api/pages/${this.page.id}`, this.page)
.then((response) => {
console.log(`resp:${response}`)
})
}
},
beforeMount() {
const slug = this.$route.params.slug
console.log("slug: " + slug)
axios
.get('/api/pages?slug=' + slug)
.then(response => {
this.page = response.data['hydra:member'][0]
this.isLoading = false
})
},
}
}
</script>
<style>
.ql-container {
height: 800px !important;
overflow-y: scroll;
}
</style>

View File

@ -1,47 +1,63 @@
<template>
<div>
<div class="box ma7 p-5">
<h2
v-if="page"
v-html="page.name"
/>
<div
v-if="page"
v-html="page.content"
/>
<h2 v-if="page" v-html="page.name"></h2>
<div v-if="page" v-html="page.content"></div>
<b-button :to="editTarget" variant="outline"><i class="fa fa-2x fa-fw fa-edit"></i></b-button>
<router-link
:to="editTarget"
variant="outline"
>
<button>
<i class="fa fa-2x fa-fw fa-edit"/>
</button>
</router-link>
<hr>
</div>
</template>
<script>
import axios from 'axios';
import axios from 'axios'
export default {
name: "Pages",
name: 'PagesDisplay',
props: {
slug: {
type: String,
required: true
}
},
data: () => ({
page: null
}),
watch: {
$route() {
console.log("watch called")
this.getPagesDetails()
computed: {
editTarget() {
if (this.page) {
return `/pages/edit/${this.page.slug}`
}
return ''
}
},
beforeMount() {
this.getPagesDetails()
this.$watch(
() => this.slug,
() => {
this.getPagesDetails()
}
)
},
methods: {
getPagesDetails() {
const slug = this.$route.params.slug
console.log("slug: " + slug)
axios
.get('/api/pages?slug=' + slug)
.then(response => (this.page = response.data['hydra:member'][0]))
}
},
computed: {
editTarget() {
if (this.page) {
return "/pages/edit/" + this.page.slug
}
async getPagesDetails() {
await axios.get(`/api/pages?slug=${this.slug}`)
.then((response) => {
[this.page] = response.data['hydra:member']
})
}
}
}

View File

@ -3,7 +3,7 @@
v-if="isLoading"
class="circle"
>
<i class="fa fa-spinner fa-spin fa-3x fa-fw" />
<i class="fa fa-spinner fa-spin fa-3x fa-fw"/>
<span class="sr-only">Loading </span>
</div>
<div
@ -23,12 +23,14 @@
<h2>{{ project.name }}</h2>
</div>
<div>
Source: <b-link
:to="project.url"
Source:
<a
:href="project.url"
target="_blank"
>
{{ project.url }}
</b-link>&nbsp
</a>
&nbsp;
<i
class="fa fa-external-link"
aria-hidden="true"
@ -36,12 +38,12 @@
</div>
<div class="row mt-5">
<div class="col-sm-12">
<!-- eslint-disable vue/no-v-html -->
<div
class="article-text"
v-html="readmeToHtml"
>
{{ }}
</div>
/>
<!-- eslint-enable -->
</div>
</div>
</div>
@ -52,7 +54,7 @@
<script>
import axios from 'axios'
import { marked } from 'marked';
import { marked } from 'marked'
import Author from '@/components/users/UserCard'
export default {
@ -71,6 +73,7 @@ export default {
if (!this.isLoading) {
return marked(this.readme)
}
return ''
}
},
mounted() {
@ -78,15 +81,14 @@ export default {
console.log(id)
axios
.get(`/api/projects/${id}`)
.then((response) => {
console.log(response)
this.project = response.data
console.log(this.project);
.then((projectResponse) => {
this.project = projectResponse.data
console.log(this.project)
axios
.get(`${this.project.url}/raw/branch/master/README.md`)
.then((response) => {
this.readme = response.data
this.isLoading = false;
this.isLoading = false
console.log(response)
})
.catch((error) => {
@ -101,5 +103,5 @@ export default {
getProjects() {
}
}
};
}
</script>

View File

@ -3,7 +3,7 @@
v-if="isLoading"
class="circle"
>
<i class="fa fa-spinner fa-spin fa-3x fa-fw" />
<i class="fa fa-spinner fa-spin fa-3x fa-fw"/>
<span class="sr-only">Loading </span>
</div>
<div
@ -16,14 +16,14 @@
</h2>
<!-- projects List -->
<div class="col-sm-12">
<b-col
<div
v-for="project in projects"
:key="project.id"
>
<div class="project-container bg-dark my-4">
<div class="row">
<div class="col-sm-3">
<b-link :to="'/projects/' + project.id">
<router-link :to="'/projects/' + project.id">
<img
v-if="project.teaserImage"
class="blog-img"
@ -36,70 +36,78 @@
src="/build/images/24unix/24_logo_bg_96x96.png"
alt="Teaser"
>
</b-link>
</router-link>
<br>
<div>
<b-col
<div
v-for="developer in project.developer"
:key="developer"
class="col"
>
<author :author-iri="developer" />
</b-col>
<user-card :author-iri="developer"/>
</div>
</div>
</div>
<div class="col-sm-8 mt-2">
<b-link :to="'/projects/' + project.id">
<router-link :to="'/projects/' + project.id">
<div class="article-title d-inline-block pl-3 align-middle">
<h2 v-html="project.name" />
<h2 v-html="project.name"/>
</div>
</b-link>
</router-link>
<br>
<div class="blog-teaser mb-2 pb-2 text-xl-start">
<span v-html="project.description" />
<span v-html="project.description"/>
<br>
<br>
started: <span v-html="project.createdAt" />
started: <span v-html="formatDate(project.createdAt)"/>
</div>
</div>
</div>
</div>
</b-col>
</div>
</div>
<!--
<div class="text-xl-start">
<b-link to="/add">
<i class="fa fa-plus-circle" />
</b-link>
<router-link to="/add">
<i class="fa fa-plus-circle"/>
</router-link>
</div>
-->
</div>
</div>
</template>
<script>
import axios from 'axios';
import axios from 'axios'
import Author from '@/components/users/UserCard';
import UserCard from '@/components/users/UserCard'
export default {
name: 'ProjectsList',
components: {
Author
UserCard,
},
data: () => ({
projects: null,
isLoading: true
}),
mounted() {
this.getProjects();
this.getProjects()
},
methods: {
getProjects() {
axios
.get('/api/projects')
.then((response) => (this.projects = response.data['hydra:member']));
this.isLoading = false;
console.log(this.projects);
.then((response) => {
this.projects = response.data['hydra:member']
})
this.isLoading = false
console.log(this.projects)
},
formatDate(date) {
return new Date(date).toLocaleDateString('de-DE')
}
}
};
}
</script>

View File

@ -1,5 +1,5 @@
<template>
<div class="d-flex flex-column justify-content-between mt-2 mb-2">
<div class="d-flex flex-column justify-content-between box mt-2 p-3 mb-2">
<div></div>
<div>
<span v-html="quote"></span>

View File

@ -1,34 +0,0 @@
<template>
<b-container fluid class="col sidenav-left box text-start" id="main-menu">
<ul>
<li>
<i class="fa fa-lg fa-fw fa-file-code-o" aria-hidden="true"></i>&nbsp
<b-link to="/projects">Projects</b-link>
</li>
<li>
<i class="fa fa-lg fa-fw fa-gitea" aria-hidden="true"></i>&nbsp;
<b-link href="https://git.24unix.net" target="_blank">Gitea</b-link>&nbsp<i class="fa fa-external-link" aria-hidden="true"></i>
</li>
<li>
<i class="fa fa-lg fa-fw fa-nextcloud" aria-hidden="true"></i>&nbsp;
<b-link href="//cloud.24unix.net" target="_blank">NextCloud</b-link>&nbsp;<i class="fa fa-external-link" aria-hidden="true"></i>
</li>
<li>
<i class="fa fa-lg fa-fw fa-paste" aria-hidden="true"></i>&nbsp;
<b-link href="//pastebin.24unix.net" target="_blank">Pastebin</b-link>&nbsp;<i class="fa fa-external-link" aria-hidden="true"></i>
</li>
<li>
<i class="fa fa-lg fa-fw fa-link" aria-hidden="true"></i>&nbsp;
<b-link href="//y.24unix.net" target="_blank">YOURLS</b-link>&nbsp;<i class="fa fa-external-link" aria-hidden="true"></i>
</li>
</ul>
</b-container>
</template>
<script>
export default {
name: "Sidebar"
}
</script>

View File

@ -0,0 +1,25 @@
<template lang="html">
<div v-show="title == selectedTitle">
<slot/>
</div>
</template>
<script>
import { inject } from 'vue'
export default {
props: {
title: {
type: String,
required: true
}
},
setup() {
const selectedTitle = inject('selectedTitle')
return {
selectedTitle
}
}
}
</script>

View File

@ -0,0 +1,70 @@
<template lang="html">
<div class="tabs">
<ul class="tabs-header">
<li
v-for="title in tabTitles"
:key="title"
:class="{ selected: title === selectedTitle }"
@click="selectedTitle = title"
>
{{ title }}
</li>
</ul>
<slot/>
</div>
</template>
<script>
import { ref, provide } from 'vue'
export default {
name: 'TabWrapper',
setup(props, { slots }) {
const tabTitles = ref(slots.default()
.map((tab) => tab.props.title))
const selectedTitle = ref(tabTitles.value[0])
provide('selectedTitle', selectedTitle)
return {
selectedTitle,
tabTitles
}
},
data: () => ({
selectedIndex: 0,
tabs: []
}),
created() {
},
}
</script>
<style>
.tabs {
width: auto;
margin: 0 auto;
}
.tabs-header {
margin-bottom: 10px;
list-style: none;
display: flex;
}
.tabs-header li {
width: 140px;
text-align: center;
padding: 10px 20px;
margin-right: 10px;
background-color: #ddd;
border-radius: 5px;
color: black;
cursor: pointer;
transition: 0.4s all ease-out;
}
.tabs-header li.selected {
background-color: #0984e3;
color: white;
}
</style>

View File

@ -15,17 +15,16 @@
<div class="d-flex flex-column align-items-center text-center p-3 py-5">
Profile of {{ user.username }}
<img
class="rounded-circle mt-5"
width="150px"
src="/build/images/tracer_schmolle.png"
class="rounded-circle border-1 mt-5"
src="/build/images/tracer_schmolle150x150.png"
alt="profile image"
>
<span class="font-weight-bold">{{ user.username }}</span>
<!--<span class="font-weight-bold"><a
href="{{ path('app_main', { '_switch_user': app.user.username }) }}">switch user {{
user.username
}}</span>
-->
<!--
<span class="font-weight-bold">
<a href="{{ path('app_main', { '_switch_user': app.user.username }) }}">
switch user {{ user.username }}</span>
-->
<span class="text-white-50">
<i class="fa fa-lg fa-envelope me-1"/>{{ user.email }}
</span>
@ -52,7 +51,7 @@
</template>
<script>
import axios from 'axios';
import axios from 'axios'
export default {
name: 'ProfileView',
@ -63,9 +62,9 @@ export default {
computed: {
getUserEndpoint() {
if (this.$route.params.username) {
return `/api/users?username=${this.$route.params.username}`;
return `/api/users?username=${this.$route.params.username}`
}
return '/api/users?username=tracer';
return '/api/users?username=tracer'
}
},
mounted() {
@ -73,14 +72,14 @@ export default {
.get(this.getUserEndpoint)
.then((response) => {
console.log(response);
[this.user] = response.data['hydra:member'];
[this.user] = response.data['hydra:member']
console.log(this.user);
this.isLoading = false;
console.log(this.user)
this.isLoading = false
})
.catch((error) => {
console.log(error);
});
console.log(error)
})
}
};
}
</script>

View File

@ -1,53 +1,67 @@
<template>
<div v-if="isLoading" class="circle">
<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
<div
v-if="isLoading"
class="circle"
>
<i class="fa fa-spinner fa-spin fa-3x fa-fw"/>
<span class="sr-only">Loading </span>
</div>
<div v-else class="mt-1 mb-1">
<b-link class="align-left blog-details" :to="'/profile/' + author.username">
<img class="article-author-img rounded-circle"
<div
v-else
class="mt-1 mb-1"
>
<router-link
class="align-left blog-details"
:to="'/profile/' + author.username"
>
<img
class="article-author-img rounded-circle"
:src="'build/images/' + author.avatar"
alt="profile"></b-link>
<b-link :to="'/profile/' + author.username">
alt="profile"
>
</router-link>
<router-link :to="'/profile/' + author.username">
{{ author.username }}
</b-link>
</router-link>
</div>
</template>
<script>
import axios from "axios";
import axios from 'axios'
export default {
name: "Author",
name: 'UserCard',
props: {
authorIri: {
type: String,
required: true
}
},
data: () => ({
author: null,
isLoading: true
}),
props: ["authorIri"],
mounted() {
this.getAuthor();
this.getAuthor()
},
methods: {
getAuthor() {
console.log("here" + this.authorIri);
console.log(`here${this.authorIri}`)
axios
.get(this.authorIri)
.then(response => {
console.log("response");
console.log(response);
this.author = response.data;
console.log(this.author);
this.isLoading = false;
.then((response) => {
console.log('response')
console.log(response)
this.author = response.data
console.log(this.author)
this.isLoading = false
})
.catch(error => {
console.log(error);
});
console.log(this.author);
.catch((error) => {
console.log(error)
})
console.log(this.author)
}
}
};
}
</script>

View File

@ -1,63 +1,54 @@
// assets/js/index.js
// End Matomo Code
import '../styles/app.scss';
/*
require('@fortawesome/fontawesome-free/css/all.min.css');
require('@fortawesome/fontawesome-free/js/all.js');
*/
import '../styles/app.scss'
// CKEditor
//require '@'
import '../styles/ckeditor.css';
import '../styles/ckeditor.css'
import 'fork-awesome/scss/fork-awesome.scss'
import Vue from 'vue';
import { BootstrapVue, IconsPlugin, NavbarPlugin } from 'bootstrap-vue';
import VueRouter from 'vue-router';
import { createApp } from 'vue'
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap/dist/js/bootstrap'
import { createPinia, PiniaVuePlugin } from 'pinia';
import router from '@/router';
import App from '@/App';
import PrimeVue from 'primevue/config'
import 'primevue/resources/primevue.min.css'
//import 'primeicons/primeicons.css'
import 'primevue/resources/themes/lara-dark-blue/theme.css'
import { createPinia } from 'pinia'
import Router from '@/router'
import AppLink from '@/components/AppLink'
import App from '@/App'
/* eslint-disable */
globalThis.__VUE_OPTIONS_API__ = true
globalThis.__VUE_PROD_DEVTOOLS__ = true
// Matomo
const _paq = window._paq = window._paq || []
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView'])
_paq.push(['enableLinkTracking']);
(function () {
const u = 'https://analytics.24unix.net/'
_paq.push(['setTrackerUrl', `${u}matomo.php`])
_paq.push(['setSiteId', '1'])
const d = document
const g = d.createElement('script')
const
s = d.getElementsByTagName('script')[0]
g.async = true
g.src = `${u}matomo.js`
s.parentNode.insertBefore(g, s)
}())
// End Matomo Code
/* eslint-enable */
//globalThis.__VUE_OPTIONS_API__ = true;
//globalThis.__VUE_PROD_DEVTOOLS__ = true;
/* eslint-disable */
// Matomo
const _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
const u = 'https://analytics.24unix.net/';
_paq.push(['setTrackerUrl', `${u}matomo.php`]);
_paq.push(['setSiteId', '1']);
const d = document; const g = d.createElement('script'); const
s = d.getElementsByTagName('script')[0];
g.async = true;
g.src = `${u}matomo.js`;
s.parentNode.insertBefore(g, s);
}());
/* eslint-enable */
require('fork-awesome/scss/fork-awesome.scss');
Vue.use(BootstrapVue);
Vue.use(VueRouter);
Vue.use(IconsPlugin);
Vue.use(NavbarPlugin);
Vue.config.productionTip = false;
Vue.use(PiniaVuePlugin);
const pinia = createPinia();
new Vue({
router,
pinia,
render: (h) => h(App)
})
.$mount('#app');
createApp(App)
.component('AppLink', AppLink)
.use(createPinia())
.use(Router)
.use(PrimeVue)
.mount('#app')

View File

@ -1,16 +1,14 @@
import Router from 'vue-router';
import LoginForm from '@/components/login';
import Quotes from '@/components/quotes';
import Pages from '@/components/pages';
import PagesEdit from '@/components/pages/edit';
import ProjectsList from '@/components/projects';
import ProjectsDetails from '@/components/projects/details';
import ProfileView from '@/components/users/ProfileView';
import NotFound from '@/components/not-found';
import { createRouter, createWebHistory } from 'vue-router'
import LoginForm from '@/components/LoginForm'
import Quotes from '@/components/quotes'
import Pages from '@/components/pages'
import PagesEdit from '@/components/pages/edit'
import ProjectsList from '@/components/projects'
import ProjectsDetails from '@/components/projects/ProjectDetails'
import ProfileView from '@/components/users/ProfileView'
import NotFound from '@/components/NotFound'
export default new Router({
mode: 'history',
routes: [
const routes = [
{
path: '/',
name: 'Home',
@ -34,7 +32,8 @@ export default new Router({
{
path: '/pages/:slug',
name: 'Pages',
component: Pages
component: Pages,
props: true
},
{
path: '/pages/edit/:slug',
@ -47,9 +46,21 @@ export default new Router({
component: ProfileView
},
{
path: '*',
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: NotFound
}
]
});
]
const router = createRouter({
history: createWebHistory(),
routes
})
/* eslint-disable */
router.beforeEach((to) => {
if (to.meta.requiredAuth && !window.user) {
return { name: 'LoginForm' }
}
})
export default router

View File

@ -23,9 +23,18 @@ html, body{
}
// the ~ allows you to reference things in node_modules
@import 'bootstrap/dist/css/bootstrap.css';
@import 'bootsdark/dist/bootsdark.min.css';
// customize some Bootstrap variables
$bs-primary: #FF8040;
$primary: #FF8040;
$body-bg: #0E0E10;
$body-color: darken(white, 20);
@ -36,12 +45,14 @@ $dropdown-dark-border-color: $primary;
$jet-black: #0e0e10;
$mango: #FF8040;
.btn-primary {
border-color: $primary;
}
// the ~ allows you to reference things in node_modules
@import 'bootstrap/dist/css/bootstrap.css';
@import 'bootstrap-vue/dist/bootstrap-vue.css';
.btn-outline-primary {
color: $primary;
border-color: $primary;
}
.wrapper {
clear: both;
@ -83,9 +94,12 @@ body {
.sidenav-left {
padding-top: 20px;
padding-left: 0;
padding-right: 0;
background-color: #f1f1f1;
height: 100%;
margin-left: 3em;
width: auto;
margin-left: 3em !important;
}
.sidenav-left ul {

View File

@ -4,7 +4,7 @@
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"php": ">=8.0.2",
"php": ">=8.1.0",
"ext-ctype": "*",
"ext-iconv": "*",
"api-platform/core": "^2.6",

243
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "e9f7ac6030214156c208bb55b1465a3f",
"content-hash": "11a57e5df58c387d08f07e37c89ba5df",
"packages": [
{
"name": "api-platform/core",
@ -574,22 +574,22 @@
},
{
"name": "doctrine/dbal",
"version": "3.3.5",
"version": "3.3.6",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "719663b15983278227669c8595151586a2ff3327"
"reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/719663b15983278227669c8595151586a2ff3327",
"reference": "719663b15983278227669c8595151586a2ff3327",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21",
"reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2",
"doctrine/cache": "^1.11|^2.0",
"doctrine/deprecations": "^0.5.3",
"doctrine/deprecations": "^0.5.3|^1",
"doctrine/event-manager": "^1.0",
"php": "^7.3 || ^8.0",
"psr/cache": "^1|^2|^3",
@ -597,15 +597,15 @@
},
"require-dev": {
"doctrine/coding-standard": "9.0.0",
"jetbrains/phpstorm-stubs": "2021.1",
"phpstan/phpstan": "1.5.3",
"phpstan/phpstan-strict-rules": "^1.1",
"phpunit/phpunit": "9.5.16",
"jetbrains/phpstorm-stubs": "2022.1",
"phpstan/phpstan": "1.6.3",
"phpstan/phpstan-strict-rules": "^1.2",
"phpunit/phpunit": "9.5.20",
"psalm/plugin-phpunit": "0.16.1",
"squizlabs/php_codesniffer": "3.6.2",
"symfony/cache": "^5.2|^6.0",
"symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0",
"vimeo/psalm": "4.22.0"
"vimeo/psalm": "4.23.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@ -665,7 +665,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
"source": "https://github.com/doctrine/dbal/tree/3.3.5"
"source": "https://github.com/doctrine/dbal/tree/3.3.6"
},
"funding": [
{
@ -681,29 +681,29 @@
"type": "tidelift"
}
],
"time": "2022-04-05T09:50:18+00:00"
"time": "2022-05-02T17:21:01+00:00"
},
{
"name": "doctrine/deprecations",
"version": "v0.5.3",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
"reference": "9504165960a1f83cc1480e2be1dd0a0478561314"
"reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314",
"reference": "9504165960a1f83cc1480e2be1dd0a0478561314",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
"reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
"shasum": ""
},
"require": {
"php": "^7.1|^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0|^7.0|^8.0",
"phpunit/phpunit": "^7.0|^8.0|^9.0",
"psr/log": "^1.0"
"doctrine/coding-standard": "^9",
"phpunit/phpunit": "^7.5|^8.5|^9.5",
"psr/log": "^1|^2|^3"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@ -722,9 +722,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/v0.5.3"
"source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
},
"time": "2021-03-21T12:59:47+00:00"
"time": "2022-05-02T15:47:09+00:00"
},
{
"name": "doctrine/doctrine-bundle",
@ -1258,22 +1258,22 @@
},
{
"name": "doctrine/migrations",
"version": "3.5.0",
"version": "3.5.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/migrations.git",
"reference": "5713b45c933122e509d9b31c767b420c3dfed399"
"reference": "c0a01ddead0ccaf0282f3f4fcaa026d11918a481"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/migrations/zipball/5713b45c933122e509d9b31c767b420c3dfed399",
"reference": "5713b45c933122e509d9b31c767b420c3dfed399",
"url": "https://api.github.com/repos/doctrine/migrations/zipball/c0a01ddead0ccaf0282f3f4fcaa026d11918a481",
"reference": "c0a01ddead0ccaf0282f3f4fcaa026d11918a481",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2",
"doctrine/dbal": "^3.3",
"doctrine/deprecations": "^0.5.3",
"doctrine/deprecations": "^0.5.3 || ^1",
"doctrine/event-manager": "^1.0",
"friendsofphp/proxy-manager-lts": "^1.0",
"php": "^7.4 || ^8.0",
@ -1281,10 +1281,13 @@
"symfony/console": "^4.4.16 || ^5.4 || ^6.0",
"symfony/stopwatch": "^4.4 || ^5.4 || ^6.0"
},
"conflict": {
"doctrine/orm": "<2.12"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"doctrine/orm": "^2.6",
"doctrine/persistence": "^2.0",
"doctrine/orm": "^2.12",
"doctrine/persistence": "^2 || ^3",
"doctrine/sql-formatter": "^1.0",
"ergebnis/composer-normalize": "^2.9",
"ext-pdo_sqlite": "*",
@ -1293,7 +1296,7 @@
"phpstan/phpstan-phpunit": "^1.1",
"phpstan/phpstan-strict-rules": "^1.1",
"phpstan/phpstan-symfony": "^1.1",
"phpunit/phpunit": "^9.4",
"phpunit/phpunit": "^9.5",
"symfony/cache": "^4.4 || ^5.4 || ^6.0",
"symfony/process": "^4.4 || ^5.4 || ^6.0",
"symfony/yaml": "^4.4 || ^5.4 || ^6.0"
@ -1344,7 +1347,7 @@
],
"support": {
"issues": "https://github.com/doctrine/migrations/issues",
"source": "https://github.com/doctrine/migrations/tree/3.5.0"
"source": "https://github.com/doctrine/migrations/tree/3.5.1"
},
"funding": [
{
@ -1360,20 +1363,20 @@
"type": "tidelift"
}
],
"time": "2022-04-04T20:24:11+00:00"
"time": "2022-05-09T20:24:38+00:00"
},
{
"name": "doctrine/orm",
"version": "2.12.1",
"version": "2.12.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
"reference": "2e4a8722721b934149ff53b191522a6829b6d73b"
"reference": "8291a7f09b12d14783ed6537b4586583d155869e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/orm/zipball/2e4a8722721b934149ff53b191522a6829b6d73b",
"reference": "2e4a8722721b934149ff53b191522a6829b6d73b",
"url": "https://api.github.com/repos/doctrine/orm/zipball/8291a7f09b12d14783ed6537b4586583d155869e",
"reference": "8291a7f09b12d14783ed6537b4586583d155869e",
"shasum": ""
},
"require": {
@ -1382,7 +1385,7 @@
"doctrine/collections": "^1.5",
"doctrine/common": "^3.0.3",
"doctrine/dbal": "^2.13.1 || ^3.2",
"doctrine/deprecations": "^0.5.3",
"doctrine/deprecations": "^0.5.3 || ^1",
"doctrine/event-manager": "^1.1",
"doctrine/inflector": "^1.4 || ^2.0",
"doctrine/instantiator": "^1.3",
@ -1402,13 +1405,13 @@
"doctrine/annotations": "^1.13",
"doctrine/coding-standard": "^9.0",
"phpbench/phpbench": "^0.16.10 || ^1.0",
"phpstan/phpstan": "~1.4.10 || 1.5.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.4",
"phpstan/phpstan": "~1.4.10 || 1.6.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psr/log": "^1 || ^2 || ^3",
"squizlabs/php_codesniffer": "3.6.2",
"symfony/cache": "^4.4 || ^5.4 || ^6.0",
"symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0",
"vimeo/psalm": "4.22.0"
"vimeo/psalm": "4.23.0"
},
"suggest": {
"symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0",
@ -1457,22 +1460,22 @@
],
"support": {
"issues": "https://github.com/doctrine/orm/issues",
"source": "https://github.com/doctrine/orm/tree/2.12.1"
"source": "https://github.com/doctrine/orm/tree/2.12.2"
},
"time": "2022-04-22T17:46:03+00:00"
"time": "2022-05-02T19:10:07+00:00"
},
{
"name": "doctrine/persistence",
"version": "3.0.0",
"version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
"reference": "e6103cb9e0982a4312e05ad94bb7be3f8e2d5869"
"reference": "25ec98a8cbd1f850e60fdb62c0ef77c162da8704"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/e6103cb9e0982a4312e05ad94bb7be3f8e2d5869",
"reference": "e6103cb9e0982a4312e05ad94bb7be3f8e2d5869",
"url": "https://api.github.com/repos/doctrine/persistence/zipball/25ec98a8cbd1f850e60fdb62c0ef77c162da8704",
"reference": "25ec98a8cbd1f850e60fdb62c0ef77c162da8704",
"shasum": ""
},
"require": {
@ -1544,7 +1547,7 @@
],
"support": {
"issues": "https://github.com/doctrine/persistence/issues",
"source": "https://github.com/doctrine/persistence/tree/3.0.0"
"source": "https://github.com/doctrine/persistence/tree/3.0.2"
},
"funding": [
{
@ -1560,7 +1563,7 @@
"type": "tidelift"
}
],
"time": "2022-04-15T10:39:55+00:00"
"time": "2022-05-06T06:10:05+00:00"
},
{
"name": "doctrine/sql-formatter",
@ -1833,16 +1836,16 @@
},
{
"name": "friendsofphp/proxy-manager-lts",
"version": "v1.0.7",
"version": "v1.0.12",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git",
"reference": "c828ced1f932094ab79e4120a106a666565e4d9c"
"reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/c828ced1f932094ab79e4120a106a666565e4d9c",
"reference": "c828ced1f932094ab79e4120a106a666565e4d9c",
"url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/8419f0158715b30d4b99a5bd37c6a39671994ad7",
"reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7",
"shasum": ""
},
"require": {
@ -1899,7 +1902,7 @@
],
"support": {
"issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues",
"source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.7"
"source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.12"
},
"funding": [
{
@ -1911,7 +1914,7 @@
"type": "tidelift"
}
],
"time": "2022-03-02T09:29:19+00:00"
"time": "2022-05-05T09:31:05+00:00"
},
{
"name": "friendsofsymfony/ckeditor-bundle",
@ -1996,16 +1999,16 @@
},
{
"name": "knplabs/knp-time-bundle",
"version": "v1.18.0",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/KnpLabs/KnpTimeBundle.git",
"reference": "239c964c67087f3e1e9dbcfe6fb1d4af36ff884b"
"reference": "56e4d154bcd14c1b67c0d1defa1e7d00d27430e3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/KnpLabs/KnpTimeBundle/zipball/239c964c67087f3e1e9dbcfe6fb1d4af36ff884b",
"reference": "239c964c67087f3e1e9dbcfe6fb1d4af36ff884b",
"url": "https://api.github.com/repos/KnpLabs/KnpTimeBundle/zipball/56e4d154bcd14c1b67c0d1defa1e7d00d27430e3",
"reference": "56e4d154bcd14c1b67c0d1defa1e7d00d27430e3",
"shasum": ""
},
"require": {
@ -2063,9 +2066,9 @@
],
"support": {
"issues": "https://github.com/KnpLabs/KnpTimeBundle/issues",
"source": "https://github.com/KnpLabs/KnpTimeBundle/tree/v1.18.0"
"source": "https://github.com/KnpLabs/KnpTimeBundle/tree/v1.19.0"
},
"time": "2022-02-07T18:02:40+00:00"
"time": "2022-05-10T00:14:22+00:00"
},
{
"name": "laminas/laminas-code",
@ -2323,16 +2326,16 @@
},
{
"name": "monolog/monolog",
"version": "2.5.0",
"version": "2.6.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "4192345e260f1d51b365536199744b987e160edc"
"reference": "247918972acd74356b0a91dfaa5adcaec069b6c0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/4192345e260f1d51b365536199744b987e160edc",
"reference": "4192345e260f1d51b365536199744b987e160edc",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/247918972acd74356b0a91dfaa5adcaec069b6c0",
"reference": "247918972acd74356b0a91dfaa5adcaec069b6c0",
"shasum": ""
},
"require": {
@ -2345,18 +2348,23 @@
"require-dev": {
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"elasticsearch/elasticsearch": "^7",
"elasticsearch/elasticsearch": "^7 || ^8",
"ext-json": "*",
"graylog2/gelf-php": "^1.4.2",
"guzzlehttp/guzzle": "^7.4",
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
"php-amqplib/php-amqplib": "~2.4 || ^3",
"php-console/php-console": "^3.1.3",
"phpspec/prophecy": "^1.6.1",
"phpspec/prophecy": "^1.15",
"phpstan/phpstan": "^0.12.91",
"phpunit/phpunit": "^8.5",
"phpunit/phpunit": "^8.5.14",
"predis/predis": "^1.1",
"rollbar/rollbar": "^1.3 || ^2 || ^3",
"ruflin/elastica": ">=0.90@dev",
"swiftmailer/swiftmailer": "^5.3|^6.0"
"ruflin/elastica": "^7",
"swiftmailer/swiftmailer": "^5.3|^6.0",
"symfony/mailer": "^5.4 || ^6",
"symfony/mime": "^5.4 || ^6"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
@ -2406,7 +2414,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
"source": "https://github.com/Seldaek/monolog/tree/2.5.0"
"source": "https://github.com/Seldaek/monolog/tree/2.6.0"
},
"funding": [
{
@ -2418,7 +2426,7 @@
"type": "tidelift"
}
],
"time": "2022-04-08T15:43:54+00:00"
"time": "2022-05-10T09:36:00+00:00"
},
{
"name": "nelmio/cors-bundle",
@ -2790,16 +2798,16 @@
},
{
"name": "phpstan/phpdoc-parser",
"version": "1.4.5",
"version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "129a63b3bc7caeb593c224c41f420675e63cfefc"
"reference": "981cc368a216c988e862a75e526b6076987d1b50"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/129a63b3bc7caeb593c224c41f420675e63cfefc",
"reference": "129a63b3bc7caeb593c224c41f420675e63cfefc",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/981cc368a216c988e862a75e526b6076987d1b50",
"reference": "981cc368a216c988e862a75e526b6076987d1b50",
"shasum": ""
},
"require": {
@ -2828,22 +2836,22 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.4.5"
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.5.1"
},
"time": "2022-04-22T11:11:01+00:00"
"time": "2022-05-05T11:32:40+00:00"
},
{
"name": "phpstan/phpstan",
"version": "1.6.2",
"version": "1.6.8",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "becb9603a31d70f5007d505877a7b812598dfe46"
"reference": "d76498c5531232cb8386ceb6004f7e013138d3ba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/becb9603a31d70f5007d505877a7b812598dfe46",
"reference": "becb9603a31d70f5007d505877a7b812598dfe46",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/d76498c5531232cb8386ceb6004f7e013138d3ba",
"reference": "d76498c5531232cb8386ceb6004f7e013138d3ba",
"shasum": ""
},
"require": {
@ -2869,7 +2877,7 @@
"description": "PHPStan - PHP Static Analysis Tool",
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/1.6.2"
"source": "https://github.com/phpstan/phpstan/tree/1.6.8"
},
"funding": [
{
@ -2889,7 +2897,7 @@
"type": "tidelift"
}
],
"time": "2022-04-27T11:05:24+00:00"
"time": "2022-05-10T06:54:21+00:00"
},
{
"name": "psr/cache",
@ -3151,16 +3159,16 @@
},
{
"name": "rector/rector",
"version": "0.12.22",
"version": "0.12.23",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
"reference": "0e76f19491498c136b698dc22b9b30d44a4e832c"
"reference": "690b31768b322db886b35845f8452025eba2cacb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/0e76f19491498c136b698dc22b9b30d44a4e832c",
"reference": "0e76f19491498c136b698dc22b9b30d44a4e832c",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/690b31768b322db886b35845f8452025eba2cacb",
"reference": "690b31768b322db886b35845f8452025eba2cacb",
"shasum": ""
},
"require": {
@ -3199,7 +3207,7 @@
"description": "Instant Upgrade and Automated Refactoring of any PHP code",
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
"source": "https://github.com/rectorphp/rector/tree/0.12.22"
"source": "https://github.com/rectorphp/rector/tree/0.12.23"
},
"funding": [
{
@ -3207,7 +3215,7 @@
"type": "github"
}
],
"time": "2022-04-27T22:44:46+00:00"
"time": "2022-05-01T15:50:16+00:00"
},
{
"name": "sensio/framework-extra-bundle",
@ -4593,16 +4601,16 @@
},
{
"name": "symfony/flex",
"version": "v2.1.7",
"version": "v2.1.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "3eb57ba4b5d3f14cdaafe030936421c22e9f98a2"
"reference": "dcbe58c3fbafeaeb32f619bf94c3912c0c732b65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/3eb57ba4b5d3f14cdaafe030936421c22e9f98a2",
"reference": "3eb57ba4b5d3f14cdaafe030936421c22e9f98a2",
"url": "https://api.github.com/repos/symfony/flex/zipball/dcbe58c3fbafeaeb32f619bf94c3912c0c732b65",
"reference": "dcbe58c3fbafeaeb32f619bf94c3912c0c732b65",
"shasum": ""
},
"require": {
@ -4638,7 +4646,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
"source": "https://github.com/symfony/flex/tree/v2.1.7"
"source": "https://github.com/symfony/flex/tree/v2.1.8"
},
"funding": [
{
@ -4654,7 +4662,7 @@
"type": "tidelift"
}
],
"time": "2022-04-15T08:20:43+00:00"
"time": "2022-05-02T10:23:41+00:00"
},
{
"name": "symfony/form",
@ -5654,20 +5662,20 @@
},
{
"name": "symfony/monolog-bundle",
"version": "v3.7.1",
"version": "v3.8.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bundle.git",
"reference": "fde12fc628162787a4e53877abadc30047fd868b"
"reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/fde12fc628162787a4e53877abadc30047fd868b",
"reference": "fde12fc628162787a4e53877abadc30047fd868b",
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d",
"reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d",
"shasum": ""
},
"require": {
"monolog/monolog": "~1.22 || ~2.0",
"monolog/monolog": "^1.22 || ^2.0 || ^3.0",
"php": ">=7.1.3",
"symfony/config": "~4.4 || ^5.0 || ^6.0",
"symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0",
@ -5715,7 +5723,7 @@
],
"support": {
"issues": "https://github.com/symfony/monolog-bundle/issues",
"source": "https://github.com/symfony/monolog-bundle/tree/v3.7.1"
"source": "https://github.com/symfony/monolog-bundle/tree/v3.8.0"
},
"funding": [
{
@ -5731,7 +5739,7 @@
"type": "tidelift"
}
],
"time": "2021-11-05T10:34:29+00:00"
"time": "2022-05-10T14:24:36+00:00"
},
{
"name": "symfony/notifier",
@ -8514,16 +8522,16 @@
},
{
"name": "symfony/webpack-encore-bundle",
"version": "v1.14.0",
"version": "v1.14.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/webpack-encore-bundle.git",
"reference": "1729c314574f32e49f9660a0cee870f7e603864f"
"reference": "6b18be99bf2a5a402b80a2c00043fe0b365fe836"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/1729c314574f32e49f9660a0cee870f7e603864f",
"reference": "1729c314574f32e49f9660a0cee870f7e603864f",
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/6b18be99bf2a5a402b80a2c00043fe0b365fe836",
"reference": "6b18be99bf2a5a402b80a2c00043fe0b365fe836",
"shasum": ""
},
"require": {
@ -8565,7 +8573,7 @@
"description": "Integration with your Symfony app & Webpack Encore!",
"support": {
"issues": "https://github.com/symfony/webpack-encore-bundle/issues",
"source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.14.0"
"source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.14.1"
},
"funding": [
{
@ -8581,7 +8589,7 @@
"type": "tidelift"
}
],
"time": "2022-02-14T15:06:55+00:00"
"time": "2022-05-03T17:55:32+00:00"
},
{
"name": "symfony/yaml",
@ -9137,16 +9145,16 @@
},
{
"name": "symfony/maker-bundle",
"version": "v1.40.1",
"version": "v1.42.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
"reference": "adc846e4f852e3aa2cd84a433cd05ba23dd19c3f"
"reference": "fc9f6bcc0ef79fc9d0325c545ae0f030bb6c9d11"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/adc846e4f852e3aa2cd84a433cd05ba23dd19c3f",
"reference": "adc846e4f852e3aa2cd84a433cd05ba23dd19c3f",
"url": "https://api.github.com/repos/symfony/maker-bundle/zipball/fc9f6bcc0ef79fc9d0325c545ae0f030bb6c9d11",
"reference": "fc9f6bcc0ef79fc9d0325c545ae0f030bb6c9d11",
"shasum": ""
},
"require": {
@ -9162,10 +9170,13 @@
"symfony/framework-bundle": "^5.4.7|^6.0",
"symfony/http-kernel": "^5.4.7|^6.0"
},
"conflict": {
"doctrine/orm": "<2.10"
},
"require-dev": {
"composer/semver": "^3.0",
"doctrine/doctrine-bundle": "^2.4",
"doctrine/orm": "^2.3",
"doctrine/orm": "^2.10.0",
"symfony/http-client": "^5.4.7|^6.0",
"symfony/phpunit-bridge": "^5.4.7|^6.0",
"symfony/polyfill-php80": "^1.16.0",
@ -9205,7 +9216,7 @@
],
"support": {
"issues": "https://github.com/symfony/maker-bundle/issues",
"source": "https://github.com/symfony/maker-bundle/tree/v1.40.1"
"source": "https://github.com/symfony/maker-bundle/tree/v1.42.0"
},
"funding": [
{
@ -9221,7 +9232,7 @@
"type": "tidelift"
}
],
"time": "2022-04-23T19:42:13+00:00"
"time": "2022-05-09T19:36:10+00:00"
},
{
"name": "symfony/web-profiler-bundle",
@ -9309,7 +9320,7 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": ">=8.0.2",
"php": ">=8.1.0",
"ext-ctype": "*",
"ext-iconv": "*"
},

View File

@ -9,7 +9,9 @@
"regenerator-runtime": "^0.13.2",
"sass": "^1.50.0",
"sass-loader": "^12.0.0",
"vue-loader": "^15",
"ts-loader": "^9.0.0",
"typescript": "^4.6.4",
"vue-loader": "16",
"webpack-manifest-plugin": "^5.0.0",
"webpack-notifier": "^1.6.0"
},
@ -23,10 +25,9 @@
},
"dependencies": {
"@fortawesome/fontawesome-free": "^6.1.1",
"@vue/composition-api": "^1.6.0",
"axios": "^0.27.1",
"bootstrap": "4.6",
"bootstrap-vue": "^2.22.0",
"bootsdark": "^1.0.16",
"bootstrap": "^5.1.3",
"ckeditor": "^4.12.1",
"ckeditor4": "^4.18.0",
"eslint": "^8.14.0",
@ -39,9 +40,10 @@
"marked": "^4.0.15",
"pinia": "^2.0.14",
"popper.js": "^1.16.1",
"vue": "^2.5",
"vue-router": "3",
"vue-template-compiler": "^2.6.14",
"vue2-editor": "^2.10.3"
"primevue": "^3.12.6",
"vue": "3",
"vue-navigation-bar": "^5.0.0",
"vue-router": "4",
"vue3-editor": "^0.1.1"
}
}

View File

@ -3,19 +3,21 @@
declare(strict_types=1);
use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
use Rector\Config\RectorConfig;
use Rector\Core\Configuration\Option;
use Rector\Set\ValueObject\LevelSetList;
use Symfony\Flex\Configurator\ContainerConfigurator;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths(paths: [
__DIR__ . '/src'
]);
return static function (ContainerConfigurator $containerConfigurator): void {
// region Symfony Container
$parameters = $containerConfigurator->parameters();
$parameters->set(
Option::SYMFONY_CONTAINER_XML_PATH_PARAMETER,
__DIR__ . '/var/cache/dev/App_KernelDevDebugContainer.xml'
);
// endregion
// register a single rule
$rectorConfig->rule(rectorClass: InlineConstructorDefaultToPropertyRector::class);
// define sets of rules
// $rectorConfig->sets([
// LevelSetList::UP_TO_PHP_80
// ]);
$containerConfigurator->import(DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES);
$containerConfigurator->import(SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES);
$containerConfigurator->import(SensiolabsSetList::FRAMEWORK_EXTRA_61);
};

View File

@ -46,7 +46,7 @@ class SecurityController extends AbstractController
* @return mixed
*/
#[Route(path: '/logout', name: 'app_logout')]
public function logout(): mixed
public function logout(): never
{
throw new Exception(message: 'Logout should never be reached.');
}

View File

@ -16,10 +16,8 @@ use Symfony\Component\Security\Core\Exception\UserNotFoundException;
class UserController extends AbstractController
{
/**
* @param \App\Repository\UserRepository $userRepository
* @param string $userName
*
* @return \Symfony\Component\HttpFoundation\Response
*/
#[Route(path: '/profile/edit/{username}', name: 'app_profile_edit')]
public function editProfile(UserRepository $userRepository, string $username = ''): Response
@ -48,12 +46,6 @@ class UserController extends AbstractController
}
}
/**
* @param \App\Repository\UserRepository $userRepository
* @param string $username
*
* @return \Symfony\Component\HttpFoundation\Response
*/
#[Route(path: '/profile/{username}', name: 'app_profile')]
public function showProfile(UserRepository $userRepository, string $username = ''): Response
{
@ -71,11 +63,6 @@ class UserController extends AbstractController
]);
}
/**
* @param \App\Repository\UserRepository $userRepository
*
* @return \Symfony\Component\HttpFoundation\Response
*/
#[Route(path: '/list_users/', name: 'app_list_user')]
public function listUsers(UserRepository $userRepository): Response
{

View File

@ -10,27 +10,27 @@ use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ProjectsRepository::class)]
#[ApiResource]
class Projects
class Projects implements \Stringable
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private ?int $id;
private ?int $id = null;
#[ORM\Column(type: 'string', length: 255)]
private ?string $name;
private ?string $name = null;
#[ORM\Column(type: 'string', length: 255)]
private ?string $description;
private ?string $description = null;
#[ORM\Column(type: 'string', length: 255)]
private ?string $url;
private ?string $url = null;
#[ORM\Column(type: 'datetime_immutable')]
private ?\DateTimeImmutable $createdAt;
private ?\DateTimeImmutable $createdAt = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $teaserImage;
private ?string $teaserImage = null;
#[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'projects')]
private $developer;
@ -43,9 +43,9 @@ class Projects
/**
* @return string|null
*/
public function __toString()
public function __toString(): string
{
return $this->name;
return (string) $this->name;
}
public function getId(): ?int

View File

@ -15,16 +15,17 @@ use Symfony\Component\Security\Core\User\UserInterface;
/**
* => ["security" => "is_granted('ROLE_ADMIN') or object.owner == user"]
attributes : ['security' => 'is_granted("ROLE_USER")']
*/
#[ORM\Entity(repositoryClass: UserRepository::class), ORM\HasLifecycleCallbacks]
#[ApiResource(
collectionOperations: ['get', 'post'],
itemOperations : ['get'],
attributes : ['security' => 'is_granted("ROLE_USER")']
)]
#[ApiFilter(filterClass: SearchFilter::class, properties: ['username' => 'exact'])]
class User implements UserInterface, PasswordAuthenticatedUserInterface
class User implements UserInterface, PasswordAuthenticatedUserInterface, \Stringable
{
#[ORM\Id]
#[ORM\GeneratedValue]
@ -55,7 +56,7 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
private $projects;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private $avatar;
private string $avatar;
#[ORM\OneToMany(mappedBy: 'owner', targetEntity: Pages::class)]
private $pages;
@ -75,7 +76,7 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
/**
* @return string|null
*/
public function __toString()
public function __toString(): string
{
return $this->username;
}
@ -244,9 +245,9 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
public function addPage(Pages $page): self
{
if (!$this->pages->contains($page)) {
if (!$this->pages->contains(element: $page)) {
$this->pages[] = $page;
$page->setOwner($this);
$page->setOwner(owner: $this);
}
return $this;
@ -254,10 +255,10 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
public function removePage(Pages $page): self
{
if ($this->pages->removeElement($page)) {
if ($this->pages->removeElement(element: $page)) {
// set the owning side to null (unless already changed)
if ($page->getOwner() === $this) {
$page->setOwner(null);
$page->setOwner(owner: null);
}
}
@ -288,6 +289,9 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
return $this;
}
/**
* @return string
*/
public function getAvatarUri()
{
return 'avatar';

View File

@ -46,7 +46,7 @@ class QuotesRepository extends ServiceEntityRepository
->select('MIN(q.id)', 'MAX(q.id)')
->getQuery()
->getOneOrNullResult();
$randomPossibleId = rand(min: $idLimits[1], max: $idLimits[2]);
$randomPossibleId = random_int(min: $idLimits[1], max: $idLimits[2]);
return $this->createQueryBuilder(alias: 'q')
->where(predicates: 'q.id >= :random_id')

View File

@ -45,7 +45,7 @@ class UserRepository extends ServiceEntityRepository implements PasswordUpgrader
public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void
{
if (!$user instanceof User) {
throw new UnsupportedUserException(message: sprintf('Instances of "%s" are not supported.', get_class(object: $user)));
throw new UnsupportedUserException(message: sprintf('Instances of "%s" are not supported.', $user::class));
}
$user->setPassword(password: $newHashedPassword);

View File

@ -26,14 +26,8 @@ class LoginFormAuthenticator extends AbstractLoginFormAuthenticator
{
use TargetPathTrait;
private UserRepository $userRepository;
private RouterInterface $router;
public function __construct(UserRepository $userRepository, RouterInterface $router)
public function __construct(private readonly UserRepository $userRepository, private readonly RouterInterface $router)
{
$this->userRepository = $userRepository;
$this->router = $router;
}
public function authenticate(Request $request): Passport
@ -61,9 +55,7 @@ class LoginFormAuthenticator extends AbstractLoginFormAuthenticator
}),
// remove me later for PasswordCredentials()
credentials: new CustomCredentials(customCredentialsChecker: function ($credentials, User $user) {
return $credentials === 'test';
}, credentials : $password),
credentials: new CustomCredentials(customCredentialsChecker: fn($credentials, User $user) => $credentials === 'test', credentials : $password),
// new PasswordCredentials($password),
badges: [

View File

@ -1,65 +0,0 @@
<div class="d-flex flex-column flex-shrink-0 p-3 text-white bg-dark" style="width: 280px;">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none">
<svg class="bi me-2" width="40" height="32"><use xlink:href="#bootstrap"/></svg>
<span class="fs-4">Sidebar</span>
</a>
<hr>
<ul class="nav nav-pills flex-column mb-auto">
<li class="nav-item">
<a href="#" class="nav-link active" aria-current="page">
<svg class="bi me-2" width="16" height="16"><use xlink:href="#home"/></svg>
Home
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi me-2" width="16" height="16"><use xlink:href="#speedometer2"/></svg>
Dashboard
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi me-2" width="16" height="16"><use xlink:href="#table"/></svg>
Orders
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi me-2" width="16" height="16"><use xlink:href="#grid"/></svg>
Products
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi me-2" width="16" height="16"><use xlink:href="#people-circle"/></svg>
Customers
</a>
</li>
</ul>
<hr>
<div class="dropdown">
<a href="#" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle" id="dropdownUser1" data-bs-toggle="dropdown" aria-expanded="false">
<img src="https://github.com/mdo.png" alt="" width="32" height="32" class="rounded-circle me-2">
<strong>mdo</strong>
</a>
<ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="dropdownUser1">
<li><a class="dropdown-item" href="#">New project...</a></li>
<li><a class="dropdown-item" href="#">Settings</a></li>
<li><a class="dropdown-item" href="#">Profile</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Sign out</a></li>
</ul>
</div>
</div>
<div class="col-sm-2 sidenav-left box text-start" id="main-menu">
<i class="fa fa-lg fa-fw fa-file-code-o" aria-hidden="true"></i>&nbsp;<a href="{{ path('app_projects') }}">Projects</a><br>
<i class="fa fa-lg fa-fw fa-gitea" aria-hidden="true"></i>&nbsp;<a href="//git.24unix.net" target="_blank">Gitea</a>&nbsp;<i
class="fa fa-external-link" aria-hidden="true"></i><br>
<i class="fa fa-lg fa-fw fa-nextcloud" aria-hidden="true"></i>&nbsp;<a href="//cloud.24unix.net"
target="_blank">NextCloud</a>&nbsp;<i
class="fa fa-external-link" aria-hidden="true"></i>
<!-- <a href="//pastebin.24unix.net">pastebin.24unix.net</a>-->
</div>

View File

@ -1,77 +0,0 @@
<header>
<nav class="navbar navbar-expand-md navbar-dark fixed-top navbar-top {{ is_granted('ROLE_PREVIOUS_ADMIN') ? 'bg-warning' : 'bg-dark' }}">
<a class="navbar-brand" href="{{ path('app_main') }}">
<img src="{{ asset('build/images/24unix/24_logo_bg_64x64.png') }}" alt="24unix.net" id="site-logo">
</a>
<button class="navbar-toggler border-0" type="button" data-toggle="collapse" data-target="#CollapsingNavbar">
&#9776;
</button>
<div class="collapse navbar-collapse" id="CollapsingNavbar">
<ul class="navbar-nav ms-auto">
{% if is_granted('ROLE_PREVIOUS_ADMIN') %}
<li class="align-bottom">
<a class="dropdown-item" href="{{ path('app_main', { '_switch_user': '_exit'}) }}">Exit
Impersonation</a>
</li>
{% endif %}
<!--
<li>
<form class="d-flex">
<input class="form-control me-2 my-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn" type="submit">Search</button>
</form>
</li>
-->
{% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
<li class="nav-item dropdown me-auto">
<button type="button" id="navbar-dropdown" data-bs-target="#dropdown-menu"
data-bs-toggle="dropdown"
class="btn btn-primary dropdown-toggle ml-auto mb-2 button-login">
{{ app.user.username }}
</button>
<div class="dropdown-menu dropdown-menu-dark dropdown-menu-end" id="dropdown-menu"
aria-labelledby="navbar-dropdown">
<a class="dropdown-item"
href="{{ path('app_profile_edit', { 'username': app.user.username }) }}">
<span class="fa fa-lg fa-fw fa-user" aria-hidden="true"></span>
Profile</a>
<a class="dropdown-item" href="#">
<span class="fa fa-lg fa-fw fa-wrench" aria-hidden="true"></span>
Settings</a>
<div class="dropdown-divider"></div>
{% if is_granted('ROLE_ADMIN') %}
<a class="dropdown-item" href="{{ path('app_list_user') }}">
<span class="fa fa-lg fa-fw fa-users" aria-hidden="true"></span>
Users
</a>
<a class="dropdown-item" href="{{ path('admin') }}">
<span class="fa fa-lg fa-fw fa-cog" aria-hidden="true"></span>
Administration
</a>
<div class="dropdown-divider"></div>
{% endif %}
<a class="dropdown-item" href="{{ path('app_logout') }}">
<span class="fa fa-lg fa-fw fa-sign-out" aria-hidden="true"></span>&nbsp;
Logout
</a>
</div>
</li>
{% else %}
<li class="nav-item">
<a class="btn btn-primary button-login" href="{{ path('app_login') }}" role="button"
id="buttonLogin">
<span class="fa fa-sign-in fa-lg fa-fw" aria-hidden="true"></span>Log In
</a>
</li>
{% endif %}
</ul>
</div>
</nav>
</header>

View File

@ -1,70 +0,0 @@
{# templates/projects/imprint.html.twig #}
{% extends 'base.html.twig' %}
{% block title %} Projects {% endblock %}
{% block body %}
<div class="container-fluid box">
<div class="row">
<h2>This is an overview of my current public (and open source) projects.</h2>
<!-- projects List -->
<div class="col-sm-12">
{% for project in projects %}
<div class="project-container bg-dark my-4">
<div class="row">
<div class="col-sm-3">
<a href="{{ path('app_projects', { name: project.name }) }}">
{% if project.teaserImage %}
<img
class="blog-img"
src="/uploads/projects/{{ project.teaserImage }}"
alt="Teaser">
{% else %}
<img
class="blog-img"
src="{{ asset('build/images/24unix/24_logo_bg_96x96.png') }}"
alt="Teaser">
{% endif %}
</a>
<br>
<div>
{% for developer in project.developer %}
<a class="align-left blog-details"
href="{{ path('app_profile', { 'username':developer.username }) }}">
<img class="article-author-img rounded-circle"
src="{{ asset('build/images/tracer_schmolle.png') }}"
alt="profile"></a>
<a href="{{ path('app_profile', { 'username':developer.username }) }}">{{ developer.username }}</a>
{% endfor %}
</div>
</div>
<div class="col-sm-8 mt-2">
<a href="{{ path('app_projects', { name: project.name }) }}">
<div class="article-title d-inline-block pl-3 align-middle">
<h2>{{ project.name }}</h2>
</div>
</a>
<br>
<div class="blog-teaser mb-2 pb-2 text-xl-start">
{{ project.description }}
<br>
<br>
started: {{ project.createdAt | ago }}
</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% if is_granted('ROLE_ADMIN') %}
<div class="text-xl-start">
<a href="{{ path('app_main') }}"><i class="fa fa-plus-circle"></i></a>
</div>
{% endif %}
</div>
</div>
{% endblock %}

View File

@ -1,38 +0,0 @@
{# templates/blog/blog_show.html.twig #}
{% extends 'base.html.twig' %}
{% block title %} Blogpost {% endblock %}
{% block body %}
<div class="row">
<div class="col-sm-12">
{% if is_granted('ROLE_ADMIN') %}
<div class="d-flex justify-content-end">
<a href="{{ path('app_main', { id : project.id }) }}"><i class="fa fa-3x fa-fw fa-edit"></i></a>
<a href="{{ path('app_main', { id : project.id }) }}"><i class="fa fa-3x fa-fw fa-trash"></i></a>
</div>
{% endif %}
<div class="show-article-container p-3 mt-4">
<div class="show-article-title-container d-inline-block pl-3 align-middle">
<h2>{{ project.name }}</h2>
</div>
<div>
Source: <a href="{{ project.url }}" target="_blank">{{ project.url }}</a>&nbsp;<i
class="fa fa-external-link" aria-hidden="true"></i>
</div>
<div class="row">
<div class="col-sm-12">
<div class="article-text">
{{ readme | markdown_to_html }}
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -12,7 +12,7 @@
<div class="d-flex flex-column align-items-center text-center p-3 py-5">
<img class="rounded-circle mt-5"
width="150px"
src=" {{ asset('build/images/tracer_schmolle.png') }}" alt="profile image">
src=" {{ asset('build/images/tracer_schmolle150x150.png') }}" alt="profile image">
<span class="font-weight-bold">{{ user.username }}</span>
<span class="text-white-50"><i class="fa fa-lg fa-envelope me-1"></i>{{ user.email }}</span>
</div>

View File

@ -12,7 +12,7 @@
<div class="d-flex flex-column align-items-center text-center p-3 py-5">
<img class="rounded-circle mt-5"
width="150px"
src=" {{ asset('build/images/tracer_schmolle.png') }}" alt="profile image">
src=" {{ asset('build/images/tracer_schmolle150x150.png') }}" alt="profile image">
<span class="font-weight-bold">{{ user.username }}</span>
<span class="font-weight-bold"><a href="{{ path('app_main', { '_switch_user': app.user.username }) }}">switch user {{ user.username }}</span>

View File

@ -1,9 +1,9 @@
const Encore = require('@symfony/webpack-encore');
const path = require('path');
const ManifestPlugin = require('webpack-manifest-plugin')
const Encore = require('@symfony/webpack-encore')
const path = require('path')
//const ManifestPlugin = require('webpack-manifest-plugin')
if (!Encore.isRuntimeEnvironmentConfigured()) {
Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev')
}
Encore
@ -13,45 +13,30 @@ Encore
from: './assets/images',
to: 'images/[path][name].[ext]'
})
/*
.copyFiles([
{from: './node_modules/ckeditor4/', to: 'ckeditor/[path][name].[ext]', pattern: /\.(js|css)$/, includeSubdirectories: false},
{from: './node_modules/ckeditor4/adapters', to: 'ckeditor/adapters/[path][name].[ext]'},
{from: './node_modules/ckeditor4/lang', to: 'ckeditor/lang/[path][name].[ext]'},
{from: './node_modules/ckeditor4/plugins', to: 'ckeditor/plugins/[path][name].[ext]'},
{from: './node_modules/ckeditor4/skins', to: 'ckeditor/skins/[path][name].[ext]'},
{from: './node_modules/ckeditor4/vendor', to: 'ckeditor/vendor/[path][name].[ext]'}
])
*/
.addEntry('app', './assets/js/index.js')
.splitEntryChunks()
// will require an extra script tag for runtime.js
// but, you probably want this, unless you're building a single-page app
// will require an extra script tag for runtime.js
// but, you probably want this, unless you're building a single-page app
.enableSingleRuntimeChunk()
.cleanupOutputBeforeBuild()
.enableBuildNotifications()
.enableSourceMaps(!Encore.isProduction())
.enableVersioning(Encore.isProduction())
.configureBabel((config) => {
config.plugins.push('@babel/plugin-proposal-class-properties');
config.plugins.push('@babel/plugin-proposal-class-properties')
})
// enables @babel/preset-env polyfills
// enables @babel/preset-env polyfills
.configureBabelPresetEnv((config) => {
config.useBuiltIns = 'usage';
config.corejs = 3;
config.useBuiltIns = 'usage'
config.corejs = 3
})
.addAliases({
'@': path.resolve(__dirname, 'assets', 'js'),
styles: path.resolve(__dirname, 'assets', 'styles'),
styles: path.resolve(__dirname, 'assets', 'styles')
})
.enableSassLoader()
.enableVueLoader()
.enableTypeScriptLoader()
.autoProvidejQuery()
.autoProvidejQuery();
module.exports = Encore.getWebpackConfig();
module.exports = Encore.getWebpackConfig()

433
yarn.lock
View File

@ -259,6 +259,11 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.16.4":
version "7.17.10"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78"
integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==
"@babel/parser@^7.16.7", "@babel/parser@^7.17.9":
version "7.17.9"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef"
@ -959,16 +964,7 @@
error-stack-parser "^2.0.0"
string-width "^4.2.3"
"@nuxt/opencollective@^0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.3.2.tgz#83cb70cdb2bac5fad6f8c93529e7b11187d49c02"
integrity sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A==
dependencies:
chalk "^4.1.0"
consola "^2.15.0"
node-fetch "^2.6.1"
"@popperjs/core@^2.11.5":
"@popperjs/core@^2.11.5", "@popperjs/core@^2.9.0":
version "2.11.5"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
@ -1201,32 +1197,101 @@
dependencies:
"@types/node" "*"
"@vue/component-compiler-utils@^3.1.0":
version "3.3.0"
resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9"
integrity sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==
"@vue/compiler-core@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.33.tgz#e915d59cce85898f5c5cfebe4c09e539278c3d59"
integrity sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw==
dependencies:
consolidate "^0.15.1"
hash-sum "^1.0.2"
lru-cache "^4.1.2"
merge-source-map "^1.1.0"
postcss "^7.0.36"
postcss-selector-parser "^6.0.2"
source-map "~0.6.1"
vue-template-es2015-compiler "^1.9.0"
optionalDependencies:
prettier "^1.18.2 || ^2.0.0"
"@babel/parser" "^7.16.4"
"@vue/shared" "3.2.33"
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/composition-api@^1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.6.0.tgz#41c45672245fff2181f8be1f757c95cb6c9b0316"
integrity sha512-m/FbsCXn0Ov2QCYUEIt4yupWJLCL6nfZg/Xx2L5VlFUqgJb2iOrbLnkYSV0TO2VUxkBLSFtTZMyG8IIHZFdKNA==
"@vue/compiler-dom@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.33.tgz#6db84296f949f18e5d3e7fd5e80f943dbed7d5ec"
integrity sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ==
dependencies:
"@vue/compiler-core" "3.2.33"
"@vue/shared" "3.2.33"
"@vue/devtools-api@^6.1.4":
"@vue/compiler-sfc@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.33.tgz#7ce01dc947a8b76c099811dc6ca58494d4dc773d"
integrity sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.33"
"@vue/compiler-dom" "3.2.33"
"@vue/compiler-ssr" "3.2.33"
"@vue/reactivity-transform" "3.2.33"
"@vue/shared" "3.2.33"
estree-walker "^2.0.2"
magic-string "^0.25.7"
postcss "^8.1.10"
source-map "^0.6.1"
"@vue/compiler-ssr@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.33.tgz#3e820267e4eea48fde9519f006dedca3f5e42e71"
integrity sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==
dependencies:
"@vue/compiler-dom" "3.2.33"
"@vue/shared" "3.2.33"
"@vue/devtools-api@^6.0.0", "@vue/devtools-api@^6.1.4":
version "6.1.4"
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz#b4aec2f4b4599e11ba774a50c67fa378c9824e53"
integrity sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==
"@vue/reactivity-transform@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.33.tgz#286063f44ca56150ae9b52f8346a26e5913fa699"
integrity sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.33"
"@vue/shared" "3.2.33"
estree-walker "^2.0.2"
magic-string "^0.25.7"
"@vue/reactivity@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.33.tgz#c84eedb5225138dbfc2472864c151d3efbb4b673"
integrity sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==
dependencies:
"@vue/shared" "3.2.33"
"@vue/runtime-core@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.33.tgz#2df8907c85c37c3419fbd1bdf1a2df097fa40df2"
integrity sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw==
dependencies:
"@vue/reactivity" "3.2.33"
"@vue/shared" "3.2.33"
"@vue/runtime-dom@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.33.tgz#123b8969247029ea0d9c1983676d4706a962d848"
integrity sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==
dependencies:
"@vue/runtime-core" "3.2.33"
"@vue/shared" "3.2.33"
csstype "^2.6.8"
"@vue/server-renderer@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.33.tgz#4b45d6d2ae10ea4e3d2cf8e676804cf60f331979"
integrity sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==
dependencies:
"@vue/compiler-ssr" "3.2.33"
"@vue/shared" "3.2.33"
"@vue/shared@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.33.tgz#69a8c99ceb37c1b031d5cc4aec2ff1dc77e1161e"
integrity sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==
"@webassemblyjs/ast@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
@ -1635,11 +1700,6 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
bluebird@^3.1.1:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
body-parser@1.19.2:
version "1.19.2"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e"
@ -1671,21 +1731,15 @@ boolbase@^1.0.0:
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
bootstrap-vue@^2.22.0:
version "2.22.0"
resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-2.22.0.tgz#2b3d7926d24af0bd289ddce7ba76b07000aab3e5"
integrity sha512-denjR/ae0K7Jrcqud3TrZWw0p/crtyigeGUNunWQ4t+KFi+7rzJ6j6lx1W5/gpUtSSUgNbWrXcHH4lIWXzXOOQ==
dependencies:
"@nuxt/opencollective" "^0.3.2"
bootstrap "^4.6.1"
popper.js "^1.16.1"
portal-vue "^2.1.7"
vue-functional-data-merge "^3.1.0"
bootsdark@^1.0.16:
version "1.0.16"
resolved "https://registry.yarnpkg.com/bootsdark/-/bootsdark-1.0.16.tgz#36bb8a79f333956fea81098f847c43b1991dc467"
integrity sha512-K6PhQaH8hkWOJF5HxT1HzIH38Fn2CS+E6qSaeLTEg3BhAwb2nI+WWFOwnIZefFPwxp2pQvtvAclqEz/MDe1dpQ==
bootstrap@4.6, bootstrap@^4.6.1:
version "4.6.1"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.1.tgz#bc25380c2c14192374e8dec07cf01b2742d222a2"
integrity sha512-0dj+VgI9Ecom+rvvpNZ4MUZJz8dcX7WCX+eTID9+/8HgOkv3dsRzi8BGeZJCQU6flWQVYxwTQnEZFrmJSEO7og==
bootstrap@^5.1.3:
version "5.1.3"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.3.tgz#ba081b0c130f810fa70900acbc1c6d3c28fa8f34"
integrity sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==
brace-expansion@^1.1.7:
version "1.1.11"
@ -1933,18 +1987,11 @@ connect-history-api-fallback@^1.6.0:
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
consola@^2.15.0, consola@^2.6.0:
consola@^2.6.0:
version "2.15.3"
resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550"
integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==
consolidate@^0.15.1:
version "0.15.1"
resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==
dependencies:
bluebird "^3.1.1"
content-disposition@0.5.4:
version "0.5.4"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
@ -2006,6 +2053,11 @@ core-js@^3.0.0:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94"
integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==
core-js@^3.6.5:
version "3.22.4"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.22.4.tgz#f4b3f108d45736935aa028444a69397e40d8c531"
integrity sha512-1uLykR+iOfYja+6Jn/57743gc9n73EWiOnSJJ4ba3B4fOEYDBv25MagmEZBxTp5cWq4b/KPx/l77zgsp28ju4w==
core-util-is@~1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
@ -2149,6 +2201,11 @@ csso@^4.2.0:
dependencies:
css-tree "^1.1.2"
csstype@^2.6.8:
version "2.6.20"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
d@1, d@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
@ -2157,11 +2214,6 @@ d@1, d@^1.0.1:
es5-ext "^0.10.50"
type "^1.0.1"
de-indent@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
debug@2.6.9, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@ -2358,6 +2410,14 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
enhanced-resolve@^5.0.0:
version "5.9.3"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88"
integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
enhanced-resolve@^5.9.2:
version "5.9.2"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz#0224dcd6a43389ebfb2d55efee517e5466772dd9"
@ -2647,6 +2707,11 @@ estraverse@^5.1.0, estraverse@^5.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@ -3054,15 +3119,10 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
hash-sum@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
he@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
hash-sum@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
hpack.js@^2.1.6:
version "2.1.6"
@ -3565,15 +3625,6 @@ loader-utils@1.2.3:
emojis-list "^2.0.0"
json5 "^1.0.1"
loader-utils@^1.0.2, loader-utils@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
dependencies:
big.js "^5.2.2"
emojis-list "^3.0.0"
json5 "^1.0.1"
loader-utils@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129"
@ -3631,19 +3682,25 @@ lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
lru-cache@^4.1.2:
version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
pseudomap "^1.0.2"
yallist "^2.1.2"
yallist "^4.0.0"
lru-cache@^7.4.0:
version "7.7.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.7.3.tgz#98cd19eef89ce6a4a3c4502c17c833888677c252"
integrity sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==
magic-string@^0.25.7:
version "0.25.9"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
dependencies:
sourcemap-codec "^1.4.8"
make-dir@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@ -3686,13 +3743,6 @@ merge-descriptors@1.0.1:
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
merge-source-map@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
dependencies:
source-map "^0.6.1"
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@ -3703,7 +3753,7 @@ methods@~1.1.2:
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
micromatch@^4.0.2:
micromatch@^4.0.0, micromatch@^4.0.2:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
@ -3794,6 +3844,11 @@ nanoid@^3.3.1:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557"
integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==
nanoid@^3.3.3:
version "3.3.4"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@ -3823,13 +3878,6 @@ next-tick@^1.1.0:
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
node-fetch@^2.6.1:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
dependencies:
whatwg-url "^5.0.0"
node-forge@^1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
@ -4101,11 +4149,6 @@ path-to-regexp@0.1.7:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
picocolors@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
@ -4165,11 +4208,6 @@ popper.js@^1.16.1:
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
portal-vue@^2.1.7:
version "2.1.7"
resolved "https://registry.yarnpkg.com/portal-vue/-/portal-vue-2.1.7.tgz#ea08069b25b640ca08a5b86f67c612f15f4e4ad4"
integrity sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==
portfinder@^1.0.28:
version "1.0.28"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
@ -4425,13 +4463,14 @@ postcss@7.0.36:
source-map "^0.6.1"
supports-color "^6.1.0"
postcss@^7.0.36:
version "7.0.39"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
postcss@^8.1.10:
version "8.4.13"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575"
integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==
dependencies:
picocolors "^0.2.1"
source-map "^0.6.1"
nanoid "^3.3.3"
picocolors "^1.0.0"
source-map-js "^1.0.2"
postcss@^8.2.15, postcss@^8.2.9:
version "8.4.12"
@ -4447,11 +4486,6 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
"prettier@^1.18.2 || ^2.0.0":
version "2.6.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032"
integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==
pretty-error@^3.0.3:
version "3.0.4"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-3.0.4.tgz#94b1d54f76c1ed95b9c604b9de2194838e5b574e"
@ -4460,6 +4494,11 @@ pretty-error@^3.0.3:
lodash "^4.17.20"
renderkid "^2.0.6"
primevue@^3.12.6:
version "3.12.6"
resolved "https://registry.yarnpkg.com/primevue/-/primevue-3.12.6.tgz#3c5567428a9412e840d63c8b6980c5ce61905200"
integrity sha512-gyO1+063+JwMvcuc+F2BrIL1TWL0y3xJgLAhgKUxqMlZLLoRUF4EzOBSKnzKfr+W+33YTsh6veysZ8iQAt13xg==
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@ -4478,11 +4517,6 @@ prr@~1.0.1:
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
punycode@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
@ -4502,7 +4536,7 @@ quill-delta@^3.6.2:
extend "^3.0.2"
fast-diff "1.1.2"
quill@^1.3.6:
quill@^1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8"
integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==
@ -4838,6 +4872,13 @@ semver@^7.3.2, semver@^7.3.5:
dependencies:
lru-cache "^7.4.0"
semver@^7.3.4:
version "7.3.7"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
dependencies:
lru-cache "^6.0.0"
send@0.17.2:
version "0.17.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
@ -5000,6 +5041,11 @@ source-map@^0.7.3, source-map@~0.7.2:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
sourcemap-codec@^1.4.8:
version "1.4.8"
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
spdy-transport@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
@ -5213,6 +5259,13 @@ thunky@^1.0.2:
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
tippy.js@^6.2.4:
version "6.3.7"
resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c"
integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==
dependencies:
"@popperjs/core" "^2.9.0"
tmp@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
@ -5237,10 +5290,15 @@ toidentifier@1.0.1:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
ts-loader@^9.0.0:
version "9.3.0"
resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.0.tgz#980f4dbfb60e517179e15e10ed98e454b132159f"
integrity sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog==
dependencies:
chalk "^4.1.0"
enhanced-resolve "^5.0.0"
micromatch "^4.0.0"
semver "^7.3.4"
tsconfig-paths@^3.14.1:
version "3.14.1"
@ -5287,6 +5345,11 @@ type@^2.5.0:
resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f"
integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==
typescript@^4.6.4:
version "4.6.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9"
integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==
unbox-primitive@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
@ -5385,64 +5448,53 @@ vue-eslint-parser@^8.0.1:
lodash "^4.17.21"
semver "^7.3.5"
vue-functional-data-merge@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz#08a7797583b7f35680587f8a1d51d729aa1dc657"
integrity sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==
vue-hot-reload-api@^2.3.0:
version "2.3.4"
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
vue-loader@^15:
version "15.9.8"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.8.tgz#4b0f602afaf66a996be1e534fb9609dc4ab10e61"
integrity sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==
vue-loader@16:
version "16.8.3"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.8.3.tgz#d43e675def5ba9345d6c7f05914c13d861997087"
integrity sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==
dependencies:
"@vue/component-compiler-utils" "^3.1.0"
hash-sum "^1.0.2"
loader-utils "^1.1.0"
vue-hot-reload-api "^2.3.0"
vue-style-loader "^4.1.0"
chalk "^4.1.0"
hash-sum "^2.0.0"
loader-utils "^2.0.0"
vue-router@3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.3.tgz#041048053e336829d05dafacf6a8fb669a2e7999"
integrity sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg==
vue-style-loader@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35"
integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==
vue-navigation-bar@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/vue-navigation-bar/-/vue-navigation-bar-5.0.0.tgz#002b139de9160b05ce70836c0017c331eece3554"
integrity sha512-inYFHrc3UdctgSV+xF+bddDfTY2ks5XoZWCwyVHu6Q/QAvAVa32fmoHZW2OpkYdVcMdiZbRVeWT7dKCAsoVJUQ==
dependencies:
hash-sum "^1.0.2"
loader-utils "^1.0.2"
tippy.js "^6.2.4"
vue-screen-size "^2.0.0"
vue-template-compiler@^2.6.14:
version "2.6.14"
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763"
integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==
vue-router@4:
version "4.0.15"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.15.tgz#b4a0661efe197f8c724e0f233308f8776e2c3667"
integrity sha512-xa+pIN9ZqORdIW1MkN2+d9Ui2pCM1b/UMgwYUCZOiFYHAvz/slKKBDha8DLrh5aCG/RibtrpyhKjKOZ85tYyWg==
dependencies:
de-indent "^1.0.2"
he "^1.1.0"
"@vue/devtools-api" "^6.0.0"
vue-template-es2015-compiler@^1.9.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
vue-screen-size@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/vue-screen-size/-/vue-screen-size-2.0.0.tgz#b6e044499271f1813b4d80249ad57561dc720ced"
integrity sha512-bTocFSGnty4Z24+Nu/zKea4wkOv2rFFCBoV6967uoFmTtvwFuOmaD71I7hCN5/ohNkw/axNz+Lx/xqvq+K5D7g==
vue2-editor@^2.10.3:
version "2.10.3"
resolved "https://registry.yarnpkg.com/vue2-editor/-/vue2-editor-2.10.3.tgz#ada62d5d623db71613a1b613f3b738056e35e117"
integrity sha512-99rWL93xfGeFRrq8NY5L7U+Cog/Uenx+UOOJragtxtbhBE9Rv5/C3P/YhJhjMECSbQyHFjUriqv1S3mghvU9Kg==
vue3-editor@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/vue3-editor/-/vue3-editor-0.1.1.tgz#4be5f5029599609f31a04dee553de5f54c7ec540"
integrity sha512-rH1U28wi+mHQlJFr4mvMW3D0oILnjV/BY9TslzWc6zM5zwv48I8LQk4sVzggN2KTDIGAdlDsmdReAd+7fhMYmQ==
dependencies:
quill "^1.3.6"
core-js "^3.6.5"
quill "^1.3.7"
vue@^2.5:
version "2.6.14"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235"
integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==
vue@3:
version "3.2.33"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.33.tgz#7867eb16a3293a28c4d190a837bc447878bd64c2"
integrity sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ==
dependencies:
"@vue/compiler-dom" "3.2.33"
"@vue/compiler-sfc" "3.2.33"
"@vue/runtime-dom" "3.2.33"
"@vue/server-renderer" "3.2.33"
"@vue/shared" "3.2.33"
watchpack@^2.3.1:
version "2.3.1"
@ -5459,11 +5511,6 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
webpack-cli@^4.9.1:
version "4.9.2"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d"
@ -5617,14 +5664,6 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
whatwg-url@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
dependencies:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@ -5663,10 +5702,10 @@ ws@^8.4.2:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^1.10.2:
version "1.10.2"