Compare commits

..

No commits in common. "master" and "feature-rating" have entirely different histories.

17 changed files with 26 additions and 278 deletions

View File

@ -1,15 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Models\ServicesLink;
use Illuminate\Http\Request;
class ServiceLinksController extends Controller
{
public function index()
{
$links = new ServicesLink();
return $links->all();
}
}

View File

@ -1,11 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ServicesLink extends Model
{
use HasFactory;
}

View File

@ -1,29 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('services_links', function (Blueprint $table) {
$table->id();
$table->string('name', 255);
$table->string('link', 255);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('services_links');
}
};

View File

@ -8,32 +8,3 @@
#F6D242) border-box; #F6D242) border-box;
border-radius: 14px; border-radius: 14px;
} }
.neon-text {
color: #fff!important;
text-shadow:
0 0 3px #fff,
0 0 5px #fff,
0 0 11px #fff,
0 0 16px #bc13fe,
0 0 20px #bc13fe,
0 0 26px #bc13fe,
0 0 30px #bc13fe,
0 0 34px #bc13fe !important;
}
.neon-border {
border: 0.2rem solid #fff !important;
border-radius: 2rem !important;
box-shadow: 0 0 .2rem #fff,
0 0 .2rem #fff,
0 0 2rem #bc13fe,
0 0 0.8rem #bc13fe,
0 0 2.8rem #bc13fe,
inset 0 0 1.3rem #bc13fe !important;
animation: pulsate 1.5s infinite alternate !important;
}
.white-text {
color: white!important;
}

View File

@ -1,18 +0,0 @@
import './js/bootstrap';
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './views/ServiceLinks/ServicesLinks.vue'
import { createVuetify } from 'vuetify'
import 'vuetify/styles'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'
import '@mdi/font/css/materialdesignicons.css'
const pinia = createPinia();
const vuetify = createVuetify({
components,
directives
});
createApp(App).use(vuetify).use(pinia).mount("#app");

View File

@ -1,21 +0,0 @@
import {defineStore} from "pinia";
import axios from "axios";
export const useServicesList = defineStore('services_list', {
state: () => ({
links: Object
}),
getters: {
},
actions: {
async getList(){
await axios
.get('/api/v1/services_list')
.then((response) => {
this.links = response.data;
});
}
},
})

View File

@ -1,10 +1,10 @@
<template> <template>
<v-sheet class="bg-grey-darken-3 mt-5 mb-5 rounded-lg w-75 pl-3"> <v-sheet class="mt-5 mb-5 rounded-lg w-75">
<p class="neon-text text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Расписание стримов</p> <p class="text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Расписание стримов</p>
<v-skeleton-loader v-if="fetching" type="text" class="bg-grey-darken-3"/> <v-skeleton-loader v-if="fetching" type="text" />
<p v-else class="neon-text ma-5 text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5"> {{ parseDate(dates[0].current_date) }} - {{ parseDate(dates[1].current_date) }}</p> <p v-else class="ma-5 text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5"> {{ parseDate(dates[0].current_date) }} - {{ parseDate(dates[1].current_date) }}</p>
<ScheduleTable :is-wide="isWide"/> <ScheduleTable :is-wide="isWide"/>
<p class="neon-text text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Ссылочки</p> <p class="text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Ссылочки</p>
<Links :is-wide="isWide"/> <Links :is-wide="isWide"/>
<AdditionalButtons :is-wide="isWide"/> <AdditionalButtons :is-wide="isWide"/>
</v-sheet> </v-sheet>

View File

@ -52,39 +52,39 @@ export default {
<template> <template>
<div class="w-100 d-flex justify-space-evenly" :class="isWide ? '' : 'flex-column'"> <div class="w-100 d-flex justify-space-evenly" :class="isWide ? '' : 'flex-column'">
<v-btn <v-btn
class="bg-grey-darken-3 neon-border pt-3 pb-3 pl-3 pr-3 mt-7 mb-7 mr-5 ml-5 h-auto" class="box-gradient pt-2 pb-2 ma-5 h-auto"
text="Кинуть копеечку" text="Кинуть копеечку"
href="https://www.donationalerts.com/r/dhaverd" href="https://www.donationalerts.com/r/dhaverd"
target="_blank" target="_blank"
/> />
<v-btn <v-btn
class="bg-grey-darken-3 neon-border pt-3 pb-3 pl-3 pr-3 mt-7 mb-7 mr-5 ml-5 h-auto" class="box-gradient pt-2 pb-2 ma-5 h-auto"
text="Оставить отзыв" text="Оставить отзыв"
@click="onShowModal" @click="onShowModal"
/> />
</div> </div>
<v-dialog v-model="showModal" class="align-center" :class="isWide ? 'w-50' : 'w-100 h-100'"> <v-dialog v-model="showModal" class="align-center" :class="isWide ? 'w-50' : 'w-100 h-100'">
<v-sheet class="mt-5 mb-5 pa-5 h-auto rounded-lg bg-grey-darken-3 neon-border d-flex flex-column"> <v-sheet class="mt-5 mb-5 pa-5 h-auto rounded-lg d-flex flex-column">
<div class="w-100 d-flex justify-end bg-grey-darken-3"> <div class="w-100 d-flex justify-end">
<v-btn class="bg-grey-darken-3" icon="mdi-window-close" elevation="0" @click="onShowModal"/> <v-btn icon="mdi-window-close" elevation="0" @click="onShowModal"/>
</div> </div>
<v-label class="text-xl-h6 white-text ">Оцените канал:</v-label> <v-label class="text-xl-h6">Оцените канал:</v-label>
<v-rating v-model="rating" active-color="purple-darken-1"> <v-rating v-model="rating" active-color="orange-lighten-1">
sss sss
</v-rating> </v-rating>
<v-label class="text-xl-h6 mb-2 white-text ">Оставьте отзыв:</v-label> <v-label class="text-xl-h6 mb-2">Оставьте отзыв:</v-label>
<v-textarea v-model="comment" clearable variant="outlined" label="Что можно улучшить?"/> <v-textarea v-model="comment" clearable variant="outlined" label="Что можно улучшить?"/>
<div class="d-flex justify-center"> <div class="d-flex justify-center">
<v-btn class="bg-grey-darken-3 neon-border pt-3 pb-3 pl-3 pr-3 w-auto h-auto" @click="sendRating">Отправить</v-btn> <v-btn class="box-gradient pt-2 pb-2 w-auto h-auto" @click="sendRating">Отправить</v-btn>
</div> </div>
</v-sheet> </v-sheet>
</v-dialog> </v-dialog>
<v-dialog v-model="afterModal" class="align-center" :class="isWide ? 'w-50' : 'w-100 h-100'"> <v-dialog v-model="afterModal" class="align-center" :class="isWide ? 'w-50' : 'w-100 h-100'">
<v-sheet class="mt-5 mb-5 pa-5 h-auto rounded-lg bg-grey-darken-3 neon-border d-flex flex-column"> <v-sheet class="mt-5 mb-5 pa-5 h-auto rounded-lg d-flex flex-column">
<div class="w-100 d-flex justify-end bg-grey-darken-3"> <div class="w-100 d-flex justify-end">
<v-btn class="bg-grey-darken-3" icon="mdi-window-close" elevation="0" @click="onShowAfterModal"/> <v-btn icon="mdi-window-close" elevation="0" @click="onShowAfterModal"/>
</div> </div>
<v-label class="text-xl-h6 white-text justify-center">{{afterModalText}}</v-label> <v-label class="text-xl-h6">{{afterModalText}}</v-label>
</v-sheet> </v-sheet>
</v-dialog> </v-dialog>
</template> </template>

View File

@ -23,11 +23,11 @@
<template> <template>
<div class="w-100 d-flex justify-center"> <div class="w-100 d-flex justify-center">
<v-list class="bg-grey-darken-3" :class="isWide ? 'w-66' : 'w-100'"> <v-list :class="isWide ? 'w-66' : 'w-100'">
<v-skeleton-loader v-if="fetching" type="list-item" class="bg-grey-darken-3 ml-1 mr-3"/> <v-skeleton-loader v-if="fetching" type="list-item"/>
<v-list-item v-else class="bg-grey-darken-3 neon-border mt-6 mb-7 ml-7 mr-7" elevation="0" v-for="link in links" :href="link.link"> <!-- style="background-color: #E57373; color: #FFFFFF" --> <v-list-item v-else class="ma-5 box-gradient" elevation="6" v-for="link in links" :href="link.link"> <!-- style="background-color: #E57373; color: #FFFFFF" -->
<template v-slot:prepend> <template v-slot:prepend>
<v-avatar class="mt-1 mb-1 ml-5" :image="link.image" rounded="0"></v-avatar> <v-avatar :image="link.image" rounded="0"></v-avatar>
</template> </template>
<v-list-item-title>{{ link.link_name }}</v-list-item-title> <v-list-item-title>{{ link.link_name }}</v-list-item-title>
</v-list-item> </v-list-item>

View File

@ -28,9 +28,9 @@
</script> </script>
<template> <template>
<div class="w-100 d-flex justify-center mt-6 mb-6"> <div class="w-100 d-flex justify-center">
<v-skeleton-loader v-if="fetching" type="table" class="bg-grey-darken-3 mr-3 ml-1"/> <v-skeleton-loader v-if="fetching" type="table"/>
<v-table v-else class="bg-grey-darken-3 neon-border pa-3 ml-1 mr-3 text-xl-h5 text-lg-h5 text-md-h5 text-sm-h5 text-body-2" :class="isWide ? 'w-66' : 'w-100'"> <v-table v-else class="text-xl-h5 text-lg-h5 text-md-h5 text-sm-h5 text-body-2" :class="isWide ? 'w-66' : 'w-100'">
<tbody> <tbody>
<tr v-for="schedule in schedules"> <tr v-for="schedule in schedules">
<td>{{ parseDate(schedule.current_date) }} {{ schedule.weekday_name }} {{ schedule.stream_time }}</td> <td>{{ parseDate(schedule.current_date) }} {{ schedule.weekday_name }} {{ schedule.stream_time }}</td>

View File

@ -1,78 +0,0 @@
<script>
import {ref} from "vue";
import {useServicesList} from "../../stores/services_list.js";
export default {
name: "ServicesLinks",
data: () => ({
links: ref([]),
servicesListStore: useServicesList(),
fetching: true,
windowHeight: document.documentElement.clientHeight,
windowWidth: document.documentElement.clientWidth,
isWide: window.innerWidth >= 654
}),
mounted() {
this.fetching = true;
this.servicesListStore.getList().then(()=>{
this.links = this.servicesListStore.links;
this.fetching = false;
});
this.myEventHandler();
window.addEventListener("resize", this.myEventHandler, { passive: true });
},
methods: {
myEventHandler(e) {
this.windowHeight = document.documentElement.clientHeight;
this.windowWidth = document.documentElement.clientWidth;
this.isWide = this.windowWidth >= 654;
}
},
created() {
window.addEventListener("resize", this.myEventHandler);
},
}
</script>
<template>
<v-app>
<v-sheet class="bg-gradient h-100 w-100 d-flex justify-center">
<v-sheet class="bg-grey-darken-3 mt-5 mb-5 rounded-lg w-75 pl-3 pr-3">
<p class="text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 text-center pt-3">Список сервисов и страниц</p>
<v-skeleton-loader v-if="fetching" class="bg-grey-darken-3" type="card"/>
<div class="pt-5 h-100" v-else>
<v-row class="ma-0" v-for="n in Math.ceil(links.length / 3)" v-if="isWide">
<v-col class="d-flex justify-center align-center" v-for="j in 3">
<v-btn v-if="links[(n - 1) * 3 + j - 1]" class="w-100 h-100 pa-5 text-white mt-5 mb-5 bg-btn" :href="links[(n - 1) * 3 + j - 1].link" target="_blank">
{{ links[(n - 1) * 3 + j - 1].name }}
</v-btn>
</v-col>
</v-row>
<div v-else class="ma-0">
<v-btn class="w-100 h-100 pa-5 text-white mt-5 mb-5 bg-btn" v-for="link in links" :href="link.link" target="_blank">
{{ link.name }}
</v-btn>
</div>
</div>
</v-sheet>
</v-sheet>
</v-app>
</template>
<style scoped>
.bg-gradient {
--s: 50px; /* control the size */
--c: #E08E79 0 25%,#774F38 0 50%,#0000 0;
background:
conic-gradient(from 180deg,var(--c))
0/var(--s) var(--s),
repeating-conic-gradient(from 90deg,var(--c))
0/calc(3*var(--s)) calc(3*var(--s))
}
.bg-btn {
background-color: #E08E79
}
</style>

View File

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Services Links</title>
@vite('resources/service_links.js')
@vite('resources/css/app.css')
</head>
<body class="antialiased">
<div id="app"></div>
</body>
</html>

View File

@ -6,22 +6,6 @@
<title>Резюме</title> <title>Резюме</title>
@vite('resources/app.js') @vite('resources/app.js')
@vite('resources/css/app.css') @vite('resources/css/app.css')
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(97497664, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/97497664" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</head> </head>
<body class="antialiased"> <body class="antialiased">
<div id="app"></div> <div id="app"></div>

View File

@ -6,22 +6,6 @@
<title>Информация о трансляциях</title> <title>Информация о трансляциях</title>
@vite('resources/welcome.js') @vite('resources/welcome.js')
@vite('resources/css/app.css') @vite('resources/css/app.css')
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(97497583, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/97497583" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</head> </head>
<body class="antialiased"> <body class="antialiased">
<div id="app"></div> <div id="app"></div>

View File

@ -20,4 +20,3 @@ Route::get('/schedules', 'App\Http\Controllers\SchedulesController@index')->name
Route::get('/dates', 'App\Http\Controllers\SchedulesController@mmDate')->name('dates'); Route::get('/dates', 'App\Http\Controllers\SchedulesController@mmDate')->name('dates');
Route::get('/phrases', 'App\Http\Controllers\BasyaPhrasesController@index')->name('phrases'); Route::get('/phrases', 'App\Http\Controllers\BasyaPhrasesController@index')->name('phrases');
Route::post('/rating', 'App\Http\Controllers\RatingController@index')->name('rating'); Route::post('/rating', 'App\Http\Controllers\RatingController@index')->name('rating');
Route::get('/services_list', 'App\Http\Controllers\ServiceLinksController@index')->name('services_list');

View File

@ -14,10 +14,6 @@ use Illuminate\Support\Facades\Route;
*/ */
Route::get('/', function () { Route::get('/', function () {
return view('ServiceLinks/links');
});
Route::get('/schedule', function () {
return view('welcome'); return view('welcome');
}); });

View File

@ -12,8 +12,7 @@ export default defineConfig({
'resources/welcome.js', 'resources/welcome.js',
'resources/caesar.js', 'resources/caesar.js',
'resources/basya.js', 'resources/basya.js',
'resources/friday.js', 'resources/friday.js'
'resources/service_links.js'
], ],
refresh: true, refresh: true,
}), }),