このコミットが含まれているのは:
守矢諏訪子 2021-12-16 01:25:29 +09:00
コミット 6c902b323c
43個のファイルの変更1247行の追加110行の削除

28
app/Http/Controllers/Peertube/About.php ノーマルファイル
ファイルの表示

@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers\Peertube;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class About extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,9 +14,11 @@ class Account extends Common {
}
public function index ($id, $cat='video-channels') {
$res = [];
$res['page'] = 'account';
$res['cat'] = $cat;
$res = [
'page' => 'account',
'cat' => $cat,
'userinfo' => $this->common->user,
];
$res['owner'] = $this->getOwner($id);
if (!empty($res['owner'])) $res['owner']->totalVideo = 0;
$res['channel'] = $this->getChannel($id);

34
app/Http/Controllers/Peertube/Admin/Users.php ノーマルファイル
ファイルの表示

@ -0,0 +1,34 @@
<?php
namespace App\Http\Controllers\Peertube\Admin;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Users extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if ($this->common->user->me->adminFlags != 1) {
return redirect('/peertube/videos/local');
}
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -16,10 +16,12 @@ class Channel extends Common {
}
public function index ($id, $cat='videos', $page=0) {
$res = [];
$res['page'] = 'channel';
$res['cat'] = $cat;
$res['paginate'] = $page;
$res = [
'page' => 'channel',
'cat' => $cat,
'paginate' => $page,
'userinfo' => $this->common->user,
];
$res['channel'] = $this->getChannel($id);
$res['video'] = $this->getVideo($id, ($page*$this->count), $this->count);
return view('pages.peertube.c', ['res' => $res]);

ファイルの表示

@ -7,24 +7,28 @@ use App\Http\Controllers\Engine;
// use Illuminate\Support\Facades\Log;
class Common extends Engine {
public $user = [];
private $engine;
public function __construct () {
// $this->getLocal();
// $this->getMe();
// $this->getNotify();
$this->user['local'] = $this->getLocal();
$this->user['me'] = $this->getMe();
$this->user['notify'] = $this->getNotify();
$this->engine = new Engine;
}
public function getLocal () {
return null;
return $this->ptapi_get('/api/v1/oauth-clients/local');
}
public function getMe () {
return null;
return $this->ptapi_get('/api/v1/users/me');
}
public function getNotify () {
return null;
return $this->ptapi_get('/api/v1/users/me/notifications?start=0&count=0&unread=true');
}
@ -44,4 +48,26 @@ class Common extends Engine {
return $get;
}
public function vidlist ($get) {
$res = [
'today' => [],
'week' => [],
'month' => [],
'lastmonth' => [],
'moreearly' => [],
];
foreach ($get->data as $g) {
$ud = strtotime($g->createdAt);
if ($ud > time() - 86400 && $ud < time() + 86400) $res['today'][] = $g;
else if ($ud > time() - 604800 && $ud < time() + 604800) $res['week'][] = $g;
else if ($ud > time() - 2629800 && $ud < time() + 2629800) $res['month'][] = $g;
else if ($ud > time() - 5259600 && $ud < time() + 5259600) $res['lastmonth'][] = $g;
else $res['moreearly'][] = $g;
}
return $res;
}
}

28
app/Http/Controllers/Peertube/Home.php ノーマルファイル
ファイルの表示

@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers\Peertube;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Home extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

32
app/Http/Controllers/Peertube/Login.php ノーマルファイル
ファイルの表示

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Peertube;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Login extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (isset($this->common->user->me) && !is_null($this->common->user->me)) {
return redirect('/peertube/videos/local');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

32
app/Http/Controllers/Peertube/Logout.php ノーマルファイル
ファイルの表示

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Peertube;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Logout extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

32
app/Http/Controllers/Peertube/Myaccount.php ノーマルファイル
ファイルの表示

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Peertube;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Myaccount extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

32
app/Http/Controllers/Peertube/Mylibrary.php ノーマルファイル
ファイルの表示

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Peertube;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Mylibrary extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\Peertube\Mylibrary\History;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Videos extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
//https://video.076.ne.jp/api/v1/users/me/history/videos?start=0&count=5
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\Peertube\Mylibrary;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Subscriptions extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
//https://video.076.ne.jp/api/v1/users/me/subscriptions?start=0&count=10
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\Peertube\Mylibrary;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Videochannels extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
//https://video.076.ne.jp/api/v1/accounts/techsuwako/video-channels?start=0&count=20&sort=-updatedAt&withStats=true
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\Peertube\Mylibrary;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Videoplaylists extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
//https://video.076.ne.jp/api/v1/users/me/subscriptions/videos?start=0&count=25&sort=-publishedAt&skipCount=true
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\Peertube\Mylibrary;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Videos extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
//https://video.076.ne.jp/api/v1/users/me/videos?start=0&count=10&sort=-publishedAt
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Peertube;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Notification extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

32
app/Http/Controllers/Peertube/Signup.php ノーマルファイル
ファイルの表示

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Peertube;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Signup extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (isset($this->common->user->me) && !is_null($this->common->user->me)) {
return redirect('/peertube/videos/local');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Peertube\Videos;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Local extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
$res = [
'page' => 'videoslist',
'userinfo' => $this->common->user,
];
$res['video'] = $this->getVideo();
return view('pages.peertube.videos.local', ['res' => $res]);
}
function getVideo () {
$get = $this->ptapi_get('/api/v1/videos/?start=0&count=50&sort=-publishedAt&filter=local&skipCount=true&nsfw=both');
return $this->vidlist($get);
}
}

ファイルの表示

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Peertube\Videos;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Overview extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
//https://video.076.ne.jp/api/v1/overviews/videos?page=1
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Peertube\Videos;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Recentlyadded extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
$res = [
'page' => 'videoslist',
'userinfo' => $this->common->user,
];
$res['video'] = $this->getVideo();
return view('pages.peertube.videos.recentlyadded', ['res' => $res]);
}
function getVideo () {
$get = $this->ptapi_get('/api/v1/videos/?start=0&count=25&sort=-publishedAt&skipCount=true&nsfw=both');
return $this->vidlist($get);
}
}

ファイルの表示

@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\Peertube\Videos;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Subscriptions extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
//https://video.076.ne.jp/api/v1/users/me/subscriptions/videos?start=0&count=25&sort=-publishedAt&skipCount=true
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Peertube\Videos;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Trending extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
//https://video.076.ne.jp/api/v1/videos/?start=0&count=25&sort=-trending&skipCount=true&nsfw=both
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers\Peertube\Videos;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Upload extends Common {
private $common;
public function __construct () {
$this->common = new Common;
}
public function index () {
$res = [
'page' => 'dummy',
'userinfo' => $this->common->user,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,8 +14,10 @@ class Watch extends Common {
}
public function index ($id) {
$res = [];
$res['page'] = 'watch';
$res = [
'page' => 'watch',
'userinfo' => $this->common->user,
];
$res['detail'] = $this->getDetail($id);
$res['comment'] = $this->getComment($id);
$res['recommend'] = $this->getRecommend($res['detail']->tags);

ファイルの表示

@ -246,11 +246,69 @@ my-recommended-videos {
height: max-content;
align-items: center;
}
.videos {
display: flex;
grid-column: 1/3;
grid-row: 2;
margin-top: 30px;
position: relative;
overflow: hidden;
}
.videos my-video-miniature {
margin-inline-end: 15px;
min-width: 201px;
max-width: 201px;
}
.video-miniature:not(.display-as-row) {
display: flex;
flex-direction: column;
padding-bottom: 15px;
width: 100%;
}
.video-miniature:not(.display-as-row) my-video-thumbnail {
position: relative;
height: 0;
width: 100%;
padding-top: 56.25%;
}
.video-miniature:not(.display-as-row) my-video-thumbnail .video-thumbnail {
position: absolute;
width: 100%;
height: 100%;
top: 0;
}
.other-videos:not(.display-as-row) my-video-miniature {
min-width: 201px;
max-width: 201px;
}
@media screen and (min-width: 500px) {
.margin-content .videos, .margin-content .playlists {
--miniatureMinWidth: 255px;
--miniatureMaxWidth: 280px;
display: grid;
grid-column-gap: 30px;
column-gap: 30px;
grid-template-columns: repeat(auto-fill,minmax(var(--miniatureMinWidth),1fr));
}
}
@media screen and (min-width: 500px) {
.margin-content .videos .video-wrapper, .margin-content .videos .playlist-wrapper, .margin-content .playlists .video-wrapper, .margin-content .playlists .playlist-wrapper {
margin: 0 auto;
width: 100%;
}
}
@media screen and (min-width: 500px) {
.margin-content .videos .video-wrapper my-video-miniature, .margin-content .videos .video-wrapper my-video-playlist-miniature, .margin-content .videos .playlist-wrapper my-video-miniature, .margin-content .videos .playlist-wrapper my-video-playlist-miniature, .margin-content .playlists .video-wrapper my-video-miniature, .margin-content .playlists .video-wrapper my-video-playlist-miniature, .margin-content .playlists .playlist-wrapper my-video-miniature, .margin-content .playlists .playlist-wrapper my-video-playlist-miniature {
display: block;
min-width: var(--miniatureMinWidth);
max-width: var(--miniatureMaxWidth);
}
}
my-video-miniature {
display: block;
}
@ -338,6 +396,141 @@ my-video-miniature {
width: calc(100% - 40px);
}
.video-miniature:not(.display-as-row) {
display: flex;
flex-direction: column;
padding-bottom: 15px;
width: 100%;
}
.video-miniature:not(.display-as-row) my-video-thumbnail {
position: relative;
height: 0;
width: 100%;
padding-top: 56.25%;
}
.video-miniature:not(.display-as-row) my-video-thumbnail .video-thumbnail {
position: absolute;
width: 100%;
height: 100%;
top: 0;
}
.video-miniature:not(.display-as-row) .video-bottom {
display: flex;
width: 100%;
min-width: 1px;
}
.video-miniature-information {
width: calc(100% - 40px);
}
.video-miniature:not(.display-as-row) .video-miniature-name {
margin-top: 10px;
margin-bottom: 5px;
}
.video-miniature-name {
display: block;
display: -webkit-box;
-webkit-line-clamp: 2;
font-size: 1.1em;
line-height: 1.1em;
overflow: hidden;
text-overflow: ellipsis;
max-height: 2.2em;
word-break: break-word;
word-wrap: break-word;
overflow-wrap: break-word;
transition: color .2s;
font-weight: 600;
color: var(--mainForegroundColor);
}
.video-miniature:not(.display-as-row) .video-miniature-created-at-views {
display: block;
}
.video-miniature-created-at-views {
font-size: 13px;
}
.video-info-privacy, .video-info-blocked .blocked-label, .video-info-nsfw {
font-weight: 600;
}
.video-thumbnail {
display: flex;
flex-direction: column;
position: relative;
border-radius: 3px;
width: 100%;
height: 100%;
overflow: hidden;
background-color: #ececec;
transition: filter .2s ease;
}
.video-thumbnail img {
width: inherit;
height: inherit;
}
.video-thumbnail-label-overlay.warning {
background-color: orange;
}
.video-thumbnail-label-overlay.danger {
background-color: red;
}
.video-thumbnail-label-overlay {
position: absolute;
padding: 0 5px;
left: 5px;
top: 5px;
font-weight: 700;
}
.video-thumbnail-watch-later-overlay, .video-thumbnail-label-overlay, .video-thumbnail-duration-overlay, .video-thumbnail-live-overlay {
display: inline-block;
background-color: #000000b3;
color: #fff;
border-radius: 3px;
font-size: 12px;
font-weight: 600;
line-height: 1.1;
z-index: 10;
}
.video-thumbnail .play-overlay, .video-thumbnail .play-overlay .icon {
transition: all .2s ease;
}
.video-thumbnail .play-overlay {
position: absolute;
right: 0;
bottom: 0;
width: inherit;
height: inherit;
opacity: 0;
background-color: #0000004d;
}
.video-thumbnail .play-overlay .icon {
width: 0;
height: 0;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%) scale(.5);
border-top: 13px solid transparent;
border-bottom: 13px solid transparent;
border-left: 18px solid rgba(255,255,255,.95);
}
.video-actions {
height: 40px;
display: flex;
@ -691,11 +884,50 @@ menu.is-logged-in .block-title {
width: 240px;
}
.login-buttons-block {
margin: 30px 25px 35px;
}
.login-buttons-block > a:not(:last-child) {
margin-bottom: 10px;
}
.login-buttons-block > a {
display: block;
width: 100%;
}
.orange-button, .orange-button:active, .orange-button:focus {
color: #fff;
background-color: var(--mainColor);
}
.peertube-button-link {
padding-inline-end: 17px;
padding-inline-start: 13px;
padding-top: 0;
padding-bottom: 0;
border: 0;
font-weight: 600;
font-size: 15px;
height: 30px;
line-height: 30px;
border-radius: 3px !important;
text-align: center;
cursor: pointer;
display: inline-block;
}
.logged-in-block {
margin-bottom: 20px;
background-color: #ffffff26;
}
.create-account-button {
color: #fff;
background-color: #ffffff40;
}
.logged-in-block > div:first-child {
height: 80px;
display: flex;

83
public/css/peertube/videoslist.css vendored ノーマルファイル
ファイルの表示

@ -0,0 +1,83 @@
.margin-content {
margin-inline-end: var(--gridVideosMiniatureMargins)!important;
}
.margin-content {
margin-inline-start: var(--gridVideosMiniatureMargins)!important;
}
.margin-content {
--gridVideosMiniatureMargins: var(--videosHorizontalMarginContent);
}
.main-col .margin-content {
margin: 0 var(--horizontalMarginContent);
flex-grow: 1;
}
.videos-header {
display: grid;
grid-template-columns: auto 1fr auto;
margin-bottom: 30px;
}
.videos-header .title {
font-size: 18px;
color: var(--mainForegroundColor);
display: inline-block;
font-weight: 600;
margin-top: 30px;
margin-bottom: 0;
}
.videos-header .title, .videos-header .title-subscription {
grid-column: 1;
}
.videos-header .title-subscription {
grid-row: 2;
font-size: 14px;
color: var(--greyForegroundColor);
}
.videos-header .title, .videos-header .title-subscription {
grid-column: 1;
}
.videos-header my-feed {
margin-inline-start: 5px;
}
.videos-header my-feed {
display: inline-block;
width: 16px;
color: var(--mainColor);
position: relative;
top: -2px;
}
.feed {
width: 100%;
}
my-global-icon {
cursor: pointer;
width: 100%;
}
[role=button] {
cursor: pointer;
}
.date-title:not(:first-child) {
margin-top: .5rem;
padding-top: 20px;
border-top: 1px solid rgba(0,0,0,.1);
}
.date-title {
font-size: 16px;
font-weight: 600;
margin-bottom: 20px;
grid-column: 1/-1;
}

ファイルの表示

@ -0,0 +1,7 @@
@extends('theme.'.env('THEME').'.peertube')
@section('content')
<div id="content" tabindex="-1" class="main-col">
開発中
</div>
@endsection

ファイルの表示

@ -0,0 +1,5 @@
@extends('theme.'.env('THEME').'.peertube')
@section('content')
@include('theme.'.env('THEME').'.component.peertube.videos.local')
@endsection

ファイルの表示

@ -0,0 +1,5 @@
@extends('theme.'.env('THEME').'.peertube')
@section('content')
@include('theme.'.env('THEME').'.component.peertube.videos.recentlyadded')
@endsection

ファイルの表示

@ -16,63 +16,7 @@
</div>
<div class="videos">
@foreach ($res['video']->data as $v)
<div class="video-wrapper ng-star-inserted">
<my-video-miniature>
<div class="video-miniature">
<my-video-thumbnail>
<a class="video-thumbnail ng-star-inserted" href="/peertube/w/{{ $v->shortUUID }}">
<img alt="" aria-label="{{ $v->name }}" src="https://video.076.ne.jp{{ $v->thumbnailPath }}" class="ng-star-inserted">
<div class="video-thumbnail-actions-overlay ng-star-inserted">
<div placement="left" container="body" class="video-thumbnail-watch-later-overlay ng-star-inserted">
<my-global-icon iconname="clock" role="button" aria-label="「後で見る」に追加する">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-clock"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
</my-global-icon>
</div>
</div>
<div class="video-thumbnail-label-overlay warning ng-star-inserted"></div>
<div class="video-thumbnail-label-overlay danger ng-star-inserted"></div>
@php
$seconds = $v->duration;
$hours = floor($seconds / 3600);
$seconds -= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds -= $minutes * 60;
@endphp
<div class="video-thumbnail-duration-overlay ng-star-inserted">{{ $hours != 0 ? $hours.':' : '' }}{{ $minutes != 0 ? $minutes.':' : '0:' }}{{ $seconds }}</div>
<div class="play-overlay ng-star-inserted">
<div class="icon"></div>
</div>
<div class="progress-bar ng-star-inserted">
<div style="width: 100%;"></div>
</div>
</a>
</my-video-thumbnail>
<div class="video-bottom">
<div class="video-miniature-information">
<div class="d-flex video-miniature-meta">
<div class="w-100 d-flex flex-column">
<my-link tabindex="-1" class="video-miniature-name" style="max-height: 3em;">
<a tabindex="-1" title="{{ $v->name }}" href="/peertube/w/{{ $v->shortUUID }}" class="ng-star-inserted"> {{ $v->name }} </a>
</my-link>
<span class="video-miniature-created-at-views">
<my-date-toggle class="ng-star-inserted">
<span class="date-toggle" title="{{ date('Y/m/d', strtotime($v->createdAt)) }}"> {{ date('Y年m月d日 H:i:s T', strtotime($v->createdAt)) }} </span>
</my-date-toggle>
<span class="views" title="">
<my-video-views-counter class="ng-star-inserted">
<span title=""> {{ $v->views }} 回視聴 </span>
</my-video-views-counter>
</span>
</span>
<div class="video-info-privacy"></div>
</div>
</div>
</div>
<div class="video-actions"></div>
</div>
</div>
</my-video-miniature>
</div>
@include('theme.'.env('THEME').'.component.peertube.parts.common.videominature')
@endforeach
</div>
</div>

ファイルの表示

@ -0,0 +1,60 @@
<div class="video-wrapper ng-star-inserted">
<my-video-miniature>
<div class="video-miniature">
<my-video-thumbnail>
<a class="video-thumbnail ng-star-inserted" href="/peertube/w/{{ $v->shortUUID }}">
<img alt="" aria-label="{{ $v->name }}" src="https://video.076.ne.jp{{ $v->thumbnailPath }}" class="ng-star-inserted">
<div class="video-thumbnail-actions-overlay ng-star-inserted">
<div placement="left" container="body" class="video-thumbnail-watch-later-overlay ng-star-inserted">
<my-global-icon iconname="clock" role="button" aria-label="「後で見る」に追加する">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-clock"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
</my-global-icon>
</div>
</div>
<div class="video-thumbnail-label-overlay warning ng-star-inserted"></div>
<div class="video-thumbnail-label-overlay danger ng-star-inserted"></div>
@php
$seconds = $v->duration;
$hours = floor($seconds / 3600);
$seconds -= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds -= $minutes * 60;
@endphp
<div class="video-thumbnail-duration-overlay ng-star-inserted">{{ $hours != 0 ? $hours.':' : '' }}{{ $minutes != 0 ? $minutes.':' : '0:' }}{{ $seconds }}</div>
<div class="play-overlay ng-star-inserted">
<div class="icon"></div>
</div>
<div class="progress-bar ng-star-inserted">
<div style="width: 100%;"></div>
</div>
</a>
</my-video-thumbnail>
<div class="video-bottom">
<div class="video-miniature-information">
<div class="d-flex video-miniature-meta">
<div class="w-100 d-flex flex-column">
<my-link tabindex="-1" class="video-miniature-name" style="max-height: 3em;">
<a tabindex="-1" title="{{ $v->name }}" href="/peertube/w/{{ $v->shortUUID }}" class="ng-star-inserted"> {{ $v->name }} </a>
</my-link>
<span class="video-miniature-created-at-views">
<my-date-toggle class="ng-star-inserted">
<span class="date-toggle" title="{{ date('Y/m/d', strtotime($v->createdAt)) }}"> {{ date('Y年m月d日 H:i:s T', strtotime($v->createdAt)) }} </span>
</my-date-toggle>
<span class="views" title="">
<my-video-views-counter class="ng-star-inserted">
<span title=""> {{ $v->views }} 回視聴 </span>
</my-video-views-counter>
</span>
</span>
@if ($res['page'] != 'channel')
<a tabindex="-1" class="video-miniature-channel ng-star-inserted" href="/peertube/c/{{ $v->channel->name }}{{ $v->channel->host != 'video.076.ne.jp' ? '@'.$v->channel->host : '' }}"> {{ $v->channel->name }}{{ $v->channel->host != 'video.076.ne.jp' ? '@'.$v->channel->host : '' }} </a>
@endif
<div class="video-info-privacy"></div>
</div>
</div>
</div>
<div class="video-actions"></div>
</div>
</div>
</my-video-miniature>
</div>

ファイルの表示

@ -0,0 +1,43 @@
<div _ngcontent-jba-c163="" class="videos">
@if (!empty($res['video']['today']))
<h2 _ngcontent-jba-c163="" class="date-title ng-star-inserted"> 今日 </h2>
@foreach ($res['video']['today'] as $v)
@include('theme.'.env('THEME').'.component.peertube.parts.common.videominature')
@endforeach
@endif
@if (!empty($res['video']['yesterday']))
<h2 _ngcontent-jba-c163="" class="date-title ng-star-inserted"> 今日 </h2>
@foreach ($res['video']['today'] as $v)
@include('theme.'.env('THEME').'.component.peertube.parts.common.videominature')
@endforeach
@endif
@if (!empty($res['video']['week']))
<h2 _ngcontent-jba-c163="" class="date-title ng-star-inserted"> 今週 </h2>
@foreach ($res['video']['week'] as $v)
@include('theme.'.env('THEME').'.component.peertube.parts.common.videominature')
@endforeach
@endif
@if (!empty($res['video']['month']))
<h2 _ngcontent-jba-c163="" class="date-title ng-star-inserted"> 今月 </h2>
@foreach ($res['video']['month'] as $v)
@include('theme.'.env('THEME').'.component.peertube.parts.common.videominature')
@endforeach
@endif
@if (!empty($res['video']['lastmonth']))
<h2 _ngcontent-jba-c163="" class="date-title ng-star-inserted"> 先月 </h2>
@foreach ($res['video']['lastmonth'] as $v)
@include('theme.'.env('THEME').'.component.peertube.parts.common.videominature')
@endforeach
@endif
@if (!empty($res['video']['moreearly']))
<h2 _ngcontent-jba-c163="" class="date-title ng-star-inserted"> もっと前 </h2>
@foreach ($res['video']['moreearly'] as $v)
@include('theme.'.env('THEME').'.component.peertube.parts.common.videominature')
@endforeach
@endif
</div>

ファイルの表示

@ -53,7 +53,7 @@
</div-->
</div>
</my-search-typeahead>
<a routerlink="/videos/upload" class="publish-button" href="/videos/upload">
<a routerlink="/videos/upload" class="publish-button" href="/peertube/videos/upload">
<my-global-icon iconname="upload" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-upload-cloud"><polyline points="16 16 12 12 8 16"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3"></path><polyline points="16 16 12 12 8 16"></polyline></svg>
</my-global-icon>

ファイルの表示

@ -1,6 +1,6 @@
<div class="footer">
<div class="footer-block">
<a routerlink="/about" routerlinkactive="active" class="menu-link" href="/about">
<a routerlink="/about" routerlinkactive="active" class="menu-link" href="/peertube/about">
<my-global-icon iconname="help" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-help-circle"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
</my-global-icon>

ファイルの表示

@ -1,5 +1,9 @@
<div class="top-menu">
@include('theme.'.env('THEME').'.component.peertube.parts.menu.top.loggedin')
@include('theme.'.env('THEME').'.component.peertube.parts.menu.top.inmylibrary')
@if (!is_null($res['userinfo']) && (isset($res['userinfo']->me) && !is_null($res['userinfo']->me)))
@include('theme.'.env('THEME').'.component.peertube.parts.menu.top.loggedin')
@include('theme.'.env('THEME').'.component.peertube.parts.menu.top.inmylibrary')
@else
@include('theme.'.env('THEME').'.component.peertube.parts.menu.top.loginmenu')
@endif
@include('theme.'.env('THEME').'.component.peertube.parts.menu.top.oninstance')
</div>

ファイルの表示

@ -2,25 +2,25 @@
<div class="block-title">
In my library
</div>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/my-library/videos">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/my-library/videos">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="material" width="24px" height="24px"><path d="M0 0h24v24H0z" fill="none"></path><path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-8 12.5v-9l6 4.5-6 4.5z"></path></svg>
</my-global-icon>
動画
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/my-library/video-playlists">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/my-library/video-playlists">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-list"><line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line></svg>
</my-global-icon>
再生リスト
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/videos/subscriptions">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/videos/subscriptions">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="material" width="24px" height="24px"><path d="M20 8H4V6h16v2zm-2-6H6v2h12V2zm4 10v8c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2v-8c0-1.1.9-2 2-2h16c1.1 0 2 .9 2 2zm-6 4l-6-3.27v6.53L16 16z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg>
</my-global-icon>
登録チャンネル
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/my-library/history/videos">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/my-library/history/videos">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="material" width="24px" height="24px"><path d="M0 0h24v24H0z" fill="none"></path><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"></path></svg>
</my-global-icon>

ファイルの表示

@ -1,45 +1,51 @@
<div class="logged-in-block ng-star-inserted">
<div>
<div placement="bottom-left auto" autoclose="outside" class="logged-in-more dropdown">
<div class="dropdown-toggle" aria-expanded="false">
<my-actor-avatar size="34">
<img class="account avatar avatar-34 ng-star-inserted" src="https://video.076.ne.jp/lazy-static/avatars/aa9883c7-d4d0-48c3-8e3a-72a9f2d96784.png" alt="アカウントのアバター">
</my-actor-avatar>
<div class="logged-in-info">
<div class="logged-in-display-name">テクニカル諏訪子</div>
<div class="logged-in-username">@techsuwako</div>
<a href="/peertube/a/techsuwako">
<div class="dropdown-toggle" aria-expanded="false">
<my-actor-avatar size="34">
<img class="account avatar avatar-34 ng-star-inserted" src="https://video.076.ne.jp/lazy-static/avatars/aa9883c7-d4d0-48c3-8e3a-72a9f2d96784.png" alt="アカウントのアバター">
</my-actor-avatar>
<div class="logged-in-info">
<div class="logged-in-display-name">テクニカル諏訪子</div>
<div class="logged-in-username">@techsuwako</div>
</div>
<div class="dropdown-toggle-indicator">
<span class="glyphicon glyphicon-chevron-down"></span>
</div>
</div>
<div class="dropdown-toggle-indicator">
<span class="glyphicon glyphicon-chevron-down"></span>
</div>
</div>
</a>
</div>
@include('theme.'.env('THEME').'.component.peertube.parts.menu.top.notification')
</div>
<div class="logged-in-menu">
<a routerlink="/my-account" routerlinkactive="active" class="menu-link" href="/my-account">
<a routerlink="/my-account" routerlinkactive="active" class="menu-link" href="/peertube/my-account">
<my-global-icon iconname="user" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-user"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>
</my-global-icon>
自分のアカウント
</a>
<a routerlink="/my-library" routerlinkactive="active" class="menu-link" href="/my-library">
<a routerlink="/my-library" routerlinkactive="active" class="menu-link" href="/peertube/my-library">
<my-global-icon iconname="channel" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tv"><rect x="2" y="7" width="20" height="15" rx="2" ry="2"></rect><polyline points="17 2 12 7 7 2"></polyline></svg>
</my-global-icon>
自分のライブラリ
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/admin/users">
<my-global-icon iconname="cog" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-settings"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
</my-global-icon>
管理
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/admin/users">
<my-global-icon iconname="cog" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-log-out"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path><polyline points="16 17 21 12 16 7"></polyline><line x1="21" y1="12" x2="9" y2="12"></line></svg>
</my-global-icon>
ログアウト
</a>
@if (!is_null($res['userinfo']) && (isset($res['userinfo']->me) && !is_null($res['userinfo']->me) && $res['userinfo']->me->adminFlags == 1))
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/admin/users">
<my-global-icon iconname="cog" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-settings"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
</my-global-icon>
管理
</a>
@endif
@if (!is_null($res['userinfo']) && (isset($res['userinfo']->me) && !is_null($res['userinfo']->me)))
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/logout">
<my-global-icon iconname="cog" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-log-out"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path><polyline points="16 17 21 12 16 7"></polyline><line x1="21" y1="12" x2="9" y2="12"></line></svg>
</my-global-icon>
ログアウト
</a>
@endif
</div>
</div>

ファイルの表示

@ -0,0 +1,4 @@
<div _ngcontent-hnj-c134="" class="login-buttons-block ng-star-inserted">
<a _ngcontent-hnj-c134="" routerlink="/login" class="peertube-button-link orange-button" href="/peertube/login">ログイン</a>
<a _ngcontent-hnj-c134="" routerlink="/signup" class="peertube-button-link create-account-button ng-star-inserted" href="/peertube/signup">登録</a>
</div>

ファイルの表示

@ -1,7 +1,9 @@
<my-notification>
<div autoclose="outside" placement="bottom" container="{this}" popoverclass="popover-notifications" title="通知を表示" class="notification-inbox-popover">
<my-global-icon iconname="bell">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bell"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path><path d="M13.73 21a2 2 0 0 1-3.46 0"></path></svg>
</my-global-icon>
<a href="/peertube/notification" style="color: var(--menuForegroundColor);">
<my-global-icon iconname="bell">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bell"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path><path d="M13.73 21a2 2 0 0 1-3.46 0"></path></svg>
</my-global-icon>
</a>
</div>
</my-notification>

ファイルの表示

@ -1,30 +1,30 @@
<div class="on-instance menu-block ng-star-inserted">
<div class="block-title">ON 076動画</div>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/home">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/home">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-home"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
</my-global-icon>
ホーム
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/videos/overview">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/videos/overview">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-globe"><circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg>
</my-global-icon>
ディスカバー
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/videos/trending">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/videos/trending">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trending-up"><polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline><polyline points="17 6 23 6 23 12"></polyline></svg>
</my-global-icon>
トレンド
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/videos/recently-added">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/videos/recently-added">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus-circle"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line></svg>
</my-global-icon>
最近投稿された動画
</a>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/videos/local">
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/videos/local">
<my-global-icon aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8.4666667 8.4666667" x="0px" y="0px" class="misc"><path fill="currentColor" d="m 4.2330754,3.0330699e-4 c -1.9062912,0 -3.45664101,1.55086299301 -3.45663572,3.45715399301 0,1.041342 0.84545222,2.220339 1.65622812,3.201355 0.8107786,0.981014 1.6190225,1.736328 1.6190225,1.736328 a 0.26460984,0.26460984 0 0 0 0.3612197,0 c 0,0 0.8082439,-0.755314 1.6190224,-1.736328 0.810776,-0.981016 1.6582946,-2.160013 1.6582946,-3.201355 0,-1.906291 -1.5508605,-3.45715399301 -3.4571516,-3.45715399301 z m 0,0.52968500301 c 1.6203083,0 2.9279876,1.30716399 2.9279849,2.92746899 0,0.721961 -0.7497154,1.914917 -1.5353056,2.865459 -0.6952271,0.8412 -1.2416102,1.3482 -1.3926793,1.491898 C 4.0825513,7.6716453 3.5360226,7.1646033 2.840396,6.3229163 2.0548058,5.3723743 1.3035373,4.1794183 1.3035373,3.4574573 1.3035347,1.8371523 2.6127671,0.52998831 4.2330754,0.52998831 Z m 0.00878,0.91518899 a 0.26460979,0.26460979 0 0 0 -0.026355,5.16e-4 0.26460979,0.26460979 0 0 0 -0.1405599,0.05116 L 2.444037,2.6998813 a 0.26474432,0.26474432 0 1 0 0.3147086,0.425813 l 0.056327,-0.04134 v 1.224733 a 0.26460979,0.26460979 0 0 0 0.2640673,0.265615 h 2.30632 a 0.26460979,0.26460979 0 0 0 0.2656152,-0.265615 v -1.223698 l 0.054777,0.04031 A 0.2647471,0.2647471 0 1 0 6.0205633,2.6998813 L 5.5513406,2.3536473 a 0.26460979,0.26460979 0 0 0 -0.00775,-0.0057 L 4.3896558,1.4968523 a 0.26460979,0.26460979 0 0 0 -0.1477963,-0.05168 z m -0.00878,0.594278 0.8888333,0.655775 v 0.217556 1.132747 H 4.4971428 v -0.437697 a 0.26460984,0.26460984 0 0 0 -0.2676843,-0.267684 0.26460984,0.26460984 0 0 0 -0.262001,0.267684 v 0.437697 H 3.344758 v -1.132747 -0.219107 z"></path></svg>
</my-global-icon>

ファイルの表示

@ -0,0 +1,27 @@
<div _ngcontent-jba-c138="" id="content" tabindex="-1" class="main-col">
<div _ngcontent-jba-c138="" class="main-row">
<ng-component class="ng-star-inserted">
<ng-component class="ng-star-inserted">
<my-videos-list _nghost-jba-c163="">
<div _ngcontent-jba-c163="" class="margin-content">
<div _ngcontent-jba-c163="" class="videos-header">
<h1 _ngcontent-jba-c163="" placement="bottom" container="body" class="title ng-star-inserted"> ローカル動画 </h1>
<div _ngcontent-jba-c163="" class="title-subscription ng-star-inserted">
Subscribe to RSS feed "ローカル動画"
<my-feed _ngcontent-jba-c163="" _nghost-jba-c77="">
<div _ngcontent-jba-c77="" class="feed">
<my-global-icon _ngcontent-jba-c77="" role="button" aria-label="Open syndication dropdown" placement="bottom left auto" iconname="syndication" class="icon-syndication ng-star-inserted" _nghost-jba-c71="">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rss"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg>
</my-global-icon>
</div>
</my-feed>
</div>
<div _ngcontent-jba-c163="" class="action-block"></div>
</div>
@include('theme.'.env('THEME').'.component.peertube.parts.common.videosbydate')
</div>
</div>
</div>
</div>
</div>
</div>

ファイルの表示

@ -0,0 +1,27 @@
<div _ngcontent-jba-c138="" id="content" tabindex="-1" class="main-col">
<div _ngcontent-jba-c138="" class="main-row">
<ng-component class="ng-star-inserted">
<ng-component class="ng-star-inserted">
<my-videos-list _nghost-jba-c163="">
<div _ngcontent-jba-c163="" class="margin-content">
<div _ngcontent-jba-c163="" class="videos-header">
<h1 _ngcontent-jba-c163="" placement="bottom" container="body" class="title ng-star-inserted"> 最近投稿された動画 </h1>
<div _ngcontent-jba-c163="" class="title-subscription ng-star-inserted">
Subscribe to RSS feed "最近投稿された動画"
<my-feed _ngcontent-jba-c163="" _nghost-jba-c77="">
<div _ngcontent-jba-c77="" class="feed">
<my-global-icon _ngcontent-jba-c77="" role="button" aria-label="Open syndication dropdown" placement="bottom left auto" iconname="syndication" class="icon-syndication ng-star-inserted" _nghost-jba-c71="">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rss"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg>
</my-global-icon>
</div>
</my-feed>
</div>
<div _ngcontent-jba-c163="" class="action-block"></div>
</div>
@include('theme.'.env('THEME').'.component.peertube.parts.common.videosbydate')
</div>
</div>
</div>
</div>
</div>
</div>

ファイルの表示

@ -4,4 +4,36 @@ Route::group(['prefix' => 'peertube'], function () {
Route::any('/a/{id}/{cat?}', 'Peertube\Account@index');
Route::any('/c/{id}/{cat?}/{page?}', 'Peertube\Channel@index');
Route::any('/w/{id}', 'Peertube\Watch@index');
Route::any('/users', 'Peertube\Logout@index');
Route::any('/login', 'Peertube\Login@index');
Route::any('/signup', 'Peertube\Signup@index');
Route::any('/notification', 'Peertube\Notification@index');
Route::any('/about', 'Peertube\About@index');
Route::any('/my-account', 'Peertube\Myaccount@index');
Route::any('/my-library', 'Peertube\Mylibrary@index');
Route::group(['prefix' => 'admin'], function () {
Route::any('/users', 'Peertube\Admin\Users@index');
});
Route::group(['prefix' => 'my-library'], function () {
Route::any('/videos', 'Peertube\Mylibrary\Videos@index');
Route::any('/video-playlists', 'Peertube\Mylibrary\Videoplaylists@index');
Route::group(['prefix' => 'history'], function () {
Route::any('/videos', 'Peertube\Mylibrary\History\Videos@index');
});
});
Route::group(['prefix' => 'videos'], function () {
Route::any('/subscriptions', 'Peertube\Videos\Subscriptions@index');
Route::any('/overview', 'Peertube\Videos\Overview@index');
Route::any('/trending', 'Peertube\Videos\Trending@index');
Route::any('/recently-added', 'Peertube\Videos\Recentlyadded@index');
Route::any('/local', 'Peertube\Videos\Local@index');
Route::any('/upload', 'Peertube\Videos\Upload@index');
});
});