UI stuff
parent
1e0693709d
commit
161af3cf9e
|
@ -8,6 +8,7 @@
|
||||||
"php": "^8.2",
|
"php": "^8.2",
|
||||||
"laravel/framework": "^11.9",
|
"laravel/framework": "^11.9",
|
||||||
"laravel/tinker": "^2.9",
|
"laravel/tinker": "^2.9",
|
||||||
|
"podlove/webvtt-parser": "^1.1",
|
||||||
"survos/wikidata": "^5.0"
|
"survos/wikidata": "^5.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "203976b5f6a2ce845933702553914640",
|
"content-hash": "606f4e109407a96a42cc21723f1658f3",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
|
@ -2396,6 +2396,57 @@
|
||||||
],
|
],
|
||||||
"time": "2024-07-20T21:41:07+00:00"
|
"time": "2024-07-20T21:41:07+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "podlove/webvtt-parser",
|
||||||
|
"version": "v1.1.6",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/podlove/webvtt-parser.git",
|
||||||
|
"reference": "04e78495dfee483d9ec646cac00bfd807328b011"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/podlove/webvtt-parser/zipball/04e78495dfee483d9ec646cac00bfd807328b011",
|
||||||
|
"reference": "04e78495dfee483d9ec646cac00bfd807328b011",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "7.*.*"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Podlove\\Webvtt\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Eric Teubert",
|
||||||
|
"email": "eric@ericteubert.de",
|
||||||
|
"homepage": "https://ericteubert.de",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PHP library to parse webvtt",
|
||||||
|
"homepage": "https://github.com/podlove/webvtt-parser",
|
||||||
|
"keywords": [
|
||||||
|
"parser",
|
||||||
|
"podlove",
|
||||||
|
"webvtt"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/podlove/webvtt-parser/issues",
|
||||||
|
"source": "https://github.com/podlove/webvtt-parser/tree/v1.1.6"
|
||||||
|
},
|
||||||
|
"time": "2022-07-25T17:45:59+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/clock",
|
"name": "psr/clock",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
|
Binary file not shown.
|
@ -1,45 +1,52 @@
|
||||||
/* CSS reset by https://piccalil.li/blog/a-more-modern-css-reset/ */
|
|
||||||
*,
|
*,
|
||||||
*::before,
|
*::before,
|
||||||
*::after {
|
*::after {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root{
|
||||||
|
--c1: #F2F2F2;
|
||||||
|
--c2: #D9D9D9;
|
||||||
|
--c3: #737373;
|
||||||
|
--c4: #404040;
|
||||||
|
--c5: #0D0D0D;
|
||||||
|
}
|
||||||
|
|
||||||
/* Prevent font size inflation */
|
/* Prevent font size inflation */
|
||||||
html {
|
html {
|
||||||
-moz-text-size-adjust: none;
|
-moz-text-size-adjust: none;
|
||||||
-webkit-text-size-adjust: none;
|
-webkit-text-size-adjust: none;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
text-size-adjust: none;
|
text-size-adjust: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove default margin in favour of better control in authored CSS */
|
*{
|
||||||
body,
|
margin: 0;
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
p,
|
|
||||||
figure,
|
|
||||||
blockquote,
|
|
||||||
dl,
|
|
||||||
dd {
|
|
||||||
margin-block-end: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
|
|
||||||
ul[role='list'],
|
ul[role='list'],
|
||||||
ol[role='list'] {
|
ol[role='list'] {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set core body defaults */
|
|
||||||
body {
|
body {
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
margin: 0;
|
padding: 1.5em;
|
||||||
|
font-family: sans-serif;
|
||||||
|
background: var(--c4);
|
||||||
|
color: var(--c1);
|
||||||
|
}
|
||||||
|
|
||||||
|
img, picture, video, canvas, svg {
|
||||||
|
display: block;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
input, button, textarea, select {
|
||||||
|
font: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set shorter line heights on headings and interactive elements */
|
|
||||||
h1,
|
h1,
|
||||||
h2,
|
h2,
|
||||||
h3,
|
h3,
|
||||||
|
@ -63,6 +70,7 @@ h2,
|
||||||
h3,
|
h3,
|
||||||
h4 {
|
h4 {
|
||||||
text-wrap: balance;
|
text-wrap: balance;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A elements that don't have a class get default styles */
|
/* A elements that don't have a class get default styles */
|
||||||
|
@ -71,13 +79,6 @@ a:not([class]) {
|
||||||
color: currentColor;
|
color: currentColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make images easier to work with */
|
|
||||||
img,
|
|
||||||
picture {
|
|
||||||
max-width: 100%;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Inherit fonts for inputs and buttons */
|
/* Inherit fonts for inputs and buttons */
|
||||||
input,
|
input,
|
||||||
button,
|
button,
|
||||||
|
@ -100,6 +101,11 @@ textarea:not([rows]) {
|
||||||
dl{
|
dl{
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-areas: "title desc" ;
|
grid-template-areas: "title desc" ;
|
||||||
|
gap: .5em 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt{
|
||||||
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.visually-hidden {
|
.visually-hidden {
|
||||||
|
@ -116,11 +122,11 @@ dl{
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template: "tablist" "panel";
|
grid-template: "tablist" "panel";
|
||||||
grid-template-rows: 2em 1fr;
|
grid-template-rows: 2.5em 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
.controls{
|
.controls{
|
||||||
background: #ccc;
|
background: var(--c5);
|
||||||
}
|
}
|
||||||
|
|
||||||
.control {
|
.control {
|
||||||
|
@ -128,12 +134,16 @@ dl{
|
||||||
}
|
}
|
||||||
|
|
||||||
.control label {
|
.control label {
|
||||||
|
display: inline-grid;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
padding: .5em 1em;
|
padding: .5em 1em;
|
||||||
|
height: 2.5em;
|
||||||
|
color: var(--c1);
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="radio"]:checked + label {
|
input[type="radio"]:checked + label {
|
||||||
background: #000;
|
background: var(--c3);
|
||||||
color: #fff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a:focus,
|
a:focus,
|
||||||
|
@ -149,26 +159,47 @@ input[type="radio"] + label:hover {
|
||||||
}
|
}
|
||||||
|
|
||||||
.panel {
|
.panel {
|
||||||
background: #eee;
|
background: var(--c3);
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
|
height: calc(50vh - 4em);
|
||||||
|
overflow-y: scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#tablist_panel_transcript_panel font{
|
||||||
|
display: block;
|
||||||
|
color: #fff !important
|
||||||
|
}
|
||||||
|
|
||||||
|
#transcript{
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#transcript a{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#transcript li{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#transcript li>div{
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Layout */
|
/* Layout */
|
||||||
main {
|
main {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100vh;
|
height: calc(100vh - 3em);
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-areas: "video tabs" "timeline timeline";
|
grid-template-areas: "video tabs" "timeline timeline";
|
||||||
grid-template-columns: 50% 50%;
|
grid-template-columns: repeat(2, 1fr);
|
||||||
grid-template-rows: 50% 50%;
|
grid-template-rows: 1fr 50%;
|
||||||
gap: 1em;
|
gap: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
main>div {
|
|
||||||
background: purple;
|
|
||||||
}
|
|
||||||
|
|
||||||
#video {
|
#video {
|
||||||
grid-area: video;
|
grid-area: video;
|
||||||
}
|
}
|
||||||
|
@ -180,6 +211,7 @@ main>div {
|
||||||
#timeline {
|
#timeline {
|
||||||
grid-area: timeline;
|
grid-area: timeline;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
background: var(--c3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#timeline-bar{
|
#timeline-bar{
|
||||||
|
@ -212,7 +244,6 @@ main>div {
|
||||||
}
|
}
|
||||||
|
|
||||||
.track {
|
.track {
|
||||||
background: #ccc;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 15em;
|
min-height: 15em;
|
||||||
display: grid;
|
display: grid;
|
||||||
|
@ -220,14 +251,15 @@ main>div {
|
||||||
}
|
}
|
||||||
|
|
||||||
.track + .track {
|
.track + .track {
|
||||||
border-top: 1px solid #fff;
|
border-top: 1px solid var(--c1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.track-ctrl{
|
.track-ctrl{
|
||||||
background: #ccc;
|
padding: 1em;
|
||||||
|
background: var(--c3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.track-viz{
|
.track-viz{
|
||||||
background: #eee;
|
background: var(--c3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -49,7 +49,26 @@
|
||||||
<h2 class="visually-hidden">
|
<h2 class="visually-hidden">
|
||||||
Transkript (Inhalt)
|
Transkript (Inhalt)
|
||||||
</h2>
|
</h2>
|
||||||
<p>TRANSCRIPT</p>
|
<div class="inner">
|
||||||
|
<ol id="transcript">
|
||||||
|
@foreach($subtitles['cues'] as $cue)
|
||||||
|
<li>
|
||||||
|
<div>
|
||||||
|
<a title="Zur Zeitpunkt {{ $cue['start']}} springen." data-start="{{ $cue['start']}}">
|
||||||
|
{{ $cue['start']}}
|
||||||
|
</a>
|
||||||
|
—
|
||||||
|
<span>
|
||||||
|
{{ $cue['end']}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{!! $cue['text'] !!}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
@endforeach
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel" id="tablist_panel_terms_panel" hidden>
|
<div class="panel" id="tablist_panel_terms_panel" hidden>
|
||||||
<h2 class="visually-hidden">
|
<h2 class="visually-hidden">
|
||||||
|
@ -83,13 +102,33 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="tracks">
|
<div id="tracks">
|
||||||
<div class="track">
|
<div class="track">
|
||||||
<div class="track-ctrl"></div>
|
<div class="track-ctrl">
|
||||||
|
<h2>Anzahl Worte</h2>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="track-viz"></div>
|
||||||
|
</div>
|
||||||
|
<div class="track">
|
||||||
|
<div class="track-ctrl">
|
||||||
|
<h2>Sentiment</h2>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="track-viz"></div>
|
||||||
|
</div>
|
||||||
|
<div class="track">
|
||||||
|
<div class="track-ctrl">
|
||||||
|
<h2>Anzahl Worte</h2>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="track-viz"></div>
|
||||||
|
</div>
|
||||||
|
<div class="track">
|
||||||
|
<div class="track-ctrl">
|
||||||
|
<h2>Anzahl Worte</h2>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
<div class="track-viz"></div>
|
<div class="track-viz"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="track"></div>
|
|
||||||
<div class="track"></div>
|
|
||||||
<div class="track"></div>
|
|
||||||
<div class="track"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -4,6 +4,9 @@ use App\Models\Episode as EpisodeModel;
|
||||||
use App\Subtitles as AppSubtitles;
|
use App\Subtitles as AppSubtitles;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use Wikidata\Wikidata;
|
use Wikidata\Wikidata;
|
||||||
|
use Podlove\Webvtt\Parser;
|
||||||
|
use Podlove\Webvtt\ParserException;
|
||||||
|
|
||||||
|
|
||||||
use App\Models\Episode;
|
use App\Models\Episode;
|
||||||
|
|
||||||
|
@ -21,6 +24,10 @@ Route::get('/detail/{id}', function(int $id) {
|
||||||
$subtitles = $ep->subtitles;
|
$subtitles = $ep->subtitles;
|
||||||
$mediacomposition = json_decode($ep->mediacomposition, 1);
|
$mediacomposition = json_decode($ep->mediacomposition, 1);
|
||||||
|
|
||||||
|
$parser = new Podlove\Webvtt\Parser();
|
||||||
|
$subtitles = $parser->parse($subtitles);
|
||||||
|
//dump($subtitles);
|
||||||
|
|
||||||
return view('detail', ['title' => $title, 'subtitles' => $subtitles, 'mediacomposition' => $mediacomposition]);
|
return view('detail', ['title' => $title, 'subtitles' => $subtitles, 'mediacomposition' => $mediacomposition]);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue