ログイン、ログアウト、通知、等

このコミットが含まれているのは:
守矢諏訪子 2021-12-19 02:00:02 +09:00
コミット 9b321eaac3
65個のファイルの変更1604行の追加183行の削除

ファイルの表示

@ -24,6 +24,6 @@ class About extends Common {
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -33,14 +33,14 @@ class Account extends Common {
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
return $this->ptapi('/api/v1/accounts/'.$id);
}
function getChannel ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id.'/video-channels?start=0&count=20&sort=-updatedAt&withStats=false');
return $this->ptapi('/api/v1/accounts/'.$id.'/video-channels?start=0&count=20&sort=-updatedAt&withStats=false');
}
function getVideo ($id) {
return $this->ptapi_get('/api/v1/video-channels/'.$id.'/videos?start=0&count=5&sort=-publishedAt&nsfw=both');
return $this->ptapi('/api/v1/video-channels/'.$id.'/videos?start=0&count=5&sort=-publishedAt&nsfw=both');
}
}

ファイルの表示

@ -14,10 +14,11 @@ class Users extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if ($this->common->user->me->adminFlags != 1) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
if ($this->common->user['me']->adminFlags != 1) {
return redirect('/peertube/videos/local');
}
return redirect('/peertube/login');
}
$res = [
@ -30,6 +31,6 @@ class Users extends Common {
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -31,14 +31,14 @@ class Channel extends Common {
}
function getChannel ($id) {
return $this->ptapi_get('/api/v1/video-channels/'.$id);
return $this->ptapi('/api/v1/video-channels/'.$id);
}
function getVideo ($id, $start, $count) {
return $this->ptapi_get('/api/v1/video-channels/'.$id.'/videos?start='.$start.'&count='.$count.'&sort=-publishedAt&skipCount=false&nsfw=both');
return $this->ptapi('/api/v1/video-channels/'.$id.'/videos?start='.$start.'&count='.$count.'&sort=-publishedAt&skipCount=false&nsfw=both');
}
function getPlaylist ($id, $start, $count) {
return $this->ptapi_get('/api/v1/video-channels/'.$id.'/video-playlists?start='.$start.'&count='.$count);
return $this->ptapi('/api/v1/video-channels/'.$id.'/video-playlists?start='.$start.'&count='.$count);
}
}

ファイルの表示

@ -9,33 +9,64 @@ use App\Http\Controllers\Engine;
class Common extends Engine {
public $user = [];
private $engine;
private $access_token;
private $refresh_token;
public function __construct () {
$this->access_token = isset($_COOKIE['access_token']) ? $_COOKIE['access_token'] : null;
$this->refresh_token = isset($_COOKIE['refresh_token']) ? $_COOKIE['refresh_token'] : null;
$this->user['local'] = $this->getLocal();
$this->user['me'] = $this->getMe();
$this->user['me'] = $this->getMe($this->user['local']);
$this->user['config'] = $this->getConfig();
$this->user['notify'] = $this->getNotify();
$this->engine = new Engine;
}
public function getLocal () {
return null;
return $this->ptapi_get('/api/v1/oauth-clients/local');
return $this->ptapi('/api/v1/oauth-clients/local');
}
public function getMe () {
public function getMe ($param) {
if (!isset($_COOKIE['access_token']) && isset($_COOKIE['refresh_token'])) {
$r = new Request;
$login = new \App\Http\Controllers\Peertube\Login;
$r->client_id = $param->client_id;
$r->client_secret = $param->client_secret;
$r->refresh_token = $this->refresh_token;
$this->login($r);
$this->access_token = $_COOKIE['access_token'];
$this->refresh_token = $_COOKIE['refresh_token'];
}
if (isset($_COOKIE['access_token']) && isset($_COOKIE['refresh_token'])) return $this->ptapi('/api/v1/users/me');
return null;
return $this->ptapi_get('/api/v1/users/me');
}
public function getConfig () {
return $this->ptapi('/api/v1/config/');
}
public function getNotify () {
if (isset($_COOKIE['access_token']) && isset($_COOKIE['refresh_token'])) return $this->ptapi('/api/v1/users/me/notifications?start=0&count=0&unread=true');
return null;
return $this->ptapi_get('/api/v1/users/me/notifications?start=0&count=0&unread=true');
}
public function ptapi_get ($url) {
public function ptapi ($url, $param='', $method='get', $contenttype='json') {
$this->access_token = isset($_COOKIE['access_token']) ? $_COOKIE['access_token'] : null;
$this->refresh_token = isset($_COOKIE['refresh_token']) ? $_COOKIE['refresh_token'] : null;
$header = ['Content-Type: application/'.$contenttype, 'Host: '.str_replace('https://', '', env('PEER_URI'))];
if (!is_null($this->access_token)) {
$header[] = 'Authorization: Bearer '.$this->access_token;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, env('PEER_URI').$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
if ($method == 'post') {
curl_setopt($ch, CURLOPT_POST, 1);
if ($param != '') curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$get = curl_exec($ch);

ファイルの表示

@ -19,16 +19,17 @@ class Home extends Common {
'style' => 'videoslist',
'userinfo' => $this->common->user,
];
$res['new'] = $this->getNewest();
$res['hot'] = $this->getPopularest();
return view('pages.peertube.home', ['res' => $res]);
}
function getNewest () {
return $this->ptapi_get('/api/v1/videos?start=0&count=8&sort=-publishedAt&skipCount=true&isLocal=true&nsfw=both');
return $this->ptapi('/api/v1/videos?start=0&count=8&sort=-publishedAt&skipCount=true&isLocal=true&nsfw=both');
}
function getPopularest () {
return $this->ptapi_get('/api/v1/videos?start=0&count=8&sort=-trending&skipCount=true&isLocal=true&nsfw=both');
return $this->ptapi('/api/v1/videos?start=0&count=8&sort=-trending&skipCount=true&isLocal=true&nsfw=both');
}
}

ファイルの表示

@ -13,21 +13,50 @@ class Login extends Common {
$this->common = new Common;
}
public function index () {
if (isset($this->common->user->me) && !is_null($this->common->user->me)) {
return redirect('/peertube/videos/local');
public function index ($err=null) {
if (isset($this->common->user['me']) && !is_null($this->common->user['me'])) {
return redirect('/peertube/home');
}
$res = [
'page' => 'dummy',
'style' => 'dummy',
'page' => 'login',
'style' => 'login',
'userinfo' => $this->common->user,
'err' => $err
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
return view('pages.peertube.login', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
public function login (Request $r) {
if (isset($this->common->user['me']) && !is_null($this->common->user['me'])) {
return redirect('/peertube/videos/local');
}
$param = [
'client_id' => $this->common->user['local']->client_id,
'client_secret' => $this->common->user['local']->client_secret,
'grant_type' => 'password',
];
if (isset($r->username) && isset($r->password)) {
$param['username'] = $r->username;
$param['password'] = $r->password;
}
else if (isset($r->refresh_token)) {
$param['refresh_token'] = $r->refresh_token;
}
$res = $this->ptapi('/api/v1/users/token', http_build_query($param), 'post', 'x-www-form-urlencoded');
$err = null;
if (isset($res->access_token) && isset($res->refresh_token)) {
setcookie('access_token', $res->access_token, time()+(int)$r->expires_in, '/', $_SERVER['HTTP_HOST'], 0, 1); // 24時間
setcookie('refresh_token', $res->refresh_token, time()+(int)$r->refresh_token_expires_in, '/', $_SERVER['HTTP_HOST'], 0, 1); // 14日間
return redirect('/peertube/videos/local');
}
return $this->index(isset($res->error) ? $res->error : '不正なエラー');
}
}

ファイルの表示

@ -13,21 +13,13 @@ class Logout extends Common {
$this->common = new Common;
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
return redirect('/peertube/login');
}
public function logout () {
$this->ptapi('/api/v1/users/revoke-token', '', 'post');
unset($_COOKIE['access_token']);
unset($_COOKIE['refresh_token']);
setcookie('access_token', '', time() - 3600, '/', $_SERVER['HTTP_HOST'], 0, 1);
setcookie('refresh_token', '', time() - 3600, '/', $_SERVER['HTTP_HOST'], 0, 1);
$res = [
'page' => 'dummy',
'style' => '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);
return redirect('/peertube/home');
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Myaccount extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -28,6 +28,6 @@ class Myaccount extends Common {
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers\Peertube\Myaccount;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Abuses 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');
}
return redirect('/peertube/login');
}
$res = [
'page' => 'dummy',
'style' => '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('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,34 @@
<?php
namespace App\Http\Controllers\Peertube\Myaccount;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Applications 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',
'style' => '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('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,34 @@
<?php
namespace App\Http\Controllers\Peertube\Myaccount\Blocklist;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Accounts 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',
'style' => '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('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,34 @@
<?php
namespace App\Http\Controllers\Peertube\Myaccount\Blocklist;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Servers 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',
'style' => '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('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -0,0 +1,48 @@
<?php
namespace App\Http\Controllers\Peertube\Myaccount;
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;
private $count;
public function __construct () {
$this->common = new Common;
$this->count = 20;
}
public function index ($page=0) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
$res = [
'page' => 'notification',
'style' => 'myaccount',
'paginate' => $page,
'pagetotal' => 500,
'userinfo' => $this->common->user,
];
$res['notification'] = $this->getNotification(($page*$this->count), $this->count);
return view('pages.peertube.my-account.notifications', ['res' => $res]);
}
function getNotification ($start, $count) {
return $this->ptapi('/api/v1/users/me/notifications?start='.$start.'&count='.$count.'&sort=-createdAt');
}
public function read (Request $r) {
$this->ptapi('/api/v1/users/me/notifications/read', json_encode(['ids' => [(int)$r->id]]), 'post');
return redirect('/peertube/my-account/notifications');
}
public function readAll () {
$this->ptapi('/api/v1/users/me/notifications/read-all', '', 'post');
return redirect('/peertube/my-account/notifications');
}
}

ファイルの表示

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Peertube;
namespace App\Http\Controllers\Peertube\Myaccount;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Peertube\Common;
// use Illuminate\Support\Facades\Log;
class Notification extends Common {
class Settings extends Common {
private $common;
public function __construct () {
@ -14,7 +14,7 @@ class Notification extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -28,6 +28,7 @@ class Notification extends Common {
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
//https://video.076.ne.jp/api/v1/users/me/subscriptions?start=0&count=10
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Mylibrary extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -28,6 +28,6 @@ class Mylibrary extends Common {
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Videos extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -29,6 +29,6 @@ class Videos extends Common {
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);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Subscriptions extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -29,6 +29,6 @@ class Subscriptions extends Common {
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);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Videochannels extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -29,6 +29,6 @@ class Videochannels extends Common {
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);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Videoplaylists extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -29,6 +29,6 @@ class Videoplaylists extends Common {
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);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Videos extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -29,6 +29,6 @@ class Videos extends Common {
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);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Signup extends Common {
}
public function index () {
if (isset($this->common->user->me) && !is_null($this->common->user->me)) {
if (isset($this->common->user['me']) && !is_null($this->common->user['me'])) {
return redirect('/peertube/videos/local');
}
@ -28,6 +28,6 @@ class Signup extends Common {
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -28,7 +28,7 @@ class Local extends Common {
}
function getVideo ($start, $count) {
$get = $this->ptapi_get('/api/v1/videos?start='.$start.'&count='.$count.'&sort=-publishedAt&skipCount=true&isLocal=true&nsfw=both');
$get = $this->ptapi('/api/v1/videos?start='.$start.'&count='.$count.'&sort=-publishedAt&skipCount=true&isLocal=true&nsfw=both');
return $this->vidlist($get);
}
}

ファイルの表示

@ -26,6 +26,6 @@ class Overview extends Common {
}
function getVideo ($page) {
return $this->ptapi_get('/api/v1/overviews/videos?page='.$page);
return $this->ptapi('/api/v1/overviews/videos?page='.$page);
}
}

ファイルの表示

@ -28,7 +28,7 @@ class Recentlyadded extends Common {
}
function getVideo ($start, $count) {
$get = $this->ptapi_get('/api/v1/videos/?start='.$start.'&count='.$count.'&sort=-publishedAt&skipCount=true&nsfw=both');
$get = $this->ptapi('/api/v1/videos/?start='.$start.'&count='.$count.'&sort=-publishedAt&skipCount=true&nsfw=both');
return $this->vidlist($get);
}
}

ファイルの表示

@ -14,7 +14,7 @@ class Subscriptions extends Common {
}
public function index () {
if (!isset($this->common->user->me) || is_null($this->common->user->me)) {
if (!isset($this->common->user['me']) || is_null($this->common->user['me'])) {
return redirect('/peertube/login');
}
@ -29,6 +29,6 @@ class Subscriptions extends Common {
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);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -28,6 +28,6 @@ class Trending extends Common {
}
function getVideo ($start, $count) {
return $this->ptapi_get('/api/v1/videos/?start='.$start.'&count='.$count.'&sort=-trending&skipCount=true&nsfw=both');
return $this->ptapi('/api/v1/videos/?start='.$start.'&count='.$count.'&sort=-trending&skipCount=true&nsfw=both');
}
}

ファイルの表示

@ -24,6 +24,6 @@ class Upload extends Common {
}
function getOwner ($id) {
return $this->ptapi_get('/api/v1/accounts/'.$id);
return $this->ptapi('/api/v1/accounts/'.$id);
}
}

ファイルの表示

@ -26,7 +26,7 @@ class Watch extends Common {
}
function getDetail ($id) {
return $this->ptapi_get('/api/v1/videos/'.$id);
return $this->ptapi('/api/v1/videos/'.$id);
}
function getRecommend ($tags) {
@ -34,10 +34,10 @@ class Watch extends Common {
foreach ($tags as $t) {
$tag .= 'tagsOneOf='.urlencode($t).'&';
}
return $this->ptapi_get('/api/v1/search/videos?start=0&count=6&nsfw=both&'.$tag.'sort=-publishedAt&searchTarget=local');
return $this->ptapi('/api/v1/search/videos?start=0&count=6&nsfw=both&'.$tag.'sort=-publishedAt&searchTarget=local');
}
function getComment ($id) {
return $this->ptapi_get('/api/v1/videos/'.$id.'/comment-threads');
return $this->ptapi('/api/v1/videos/'.$id.'/comment-threads');
}
}

ファイルの表示

@ -686,13 +686,6 @@ menu.is-logged-in .block-title {
padding: 10px;
}
my-notification {
margin-inline-end: 15px;
}
my-notification {
margin-inline-start: auto;
}
.logged-in-menu a {
font-size: 14px;
width: 100%;
@ -1092,36 +1085,6 @@ h2 {
.owner-description, .icon.icon-logo {
display: none !important;
}
.peertube-title .instance-name {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.instance-name {
background-image: url(/img/favicon.jpeg) !important;
background-position: top !important;
border-radius: 10px !important;
padding: 2px !important;
color: #fcfcfc !important;
text-indent: 100%;
width: 34px !important;
height: 34px !important;
}
.instance-name {
background-color: #5e3c62 !important;
background-image: url('/img/favicon.jpeg') !important;
background-position: top !important;
border-radius: 10px !important;
padding: 2px !important;
color: #fcfcfc !important;
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
width: 34px !important;
height: 34px !important;
}
#video-wrapper {
background-color: transparent !important;

ファイルの表示

@ -111,15 +111,15 @@ input {
font-weight: 600;
font-size: 15px;
}
img, svg {
vertical-align: middle;
}
img {
border-style: none;
}
*, :after, :before {
box-sizing: border-box;
}
.dropdown-toggle {
white-space: nowrap;
}
@ -641,10 +641,6 @@ my-search-typeahead {
padding-bottom: 20px;
}
*, :after, :before {
box-sizing: border-box;
}
.header {
background-color: #421a46 !important;
height: 50px;
@ -962,8 +958,6 @@ menu.is-logged-in .block-title {
my-notification {
margin-inline-end: 15px;
}
my-notification {
margin-inline-start: auto;
}
@ -1597,4 +1591,36 @@ p {
.comment-actions .dropdown-toggle, .comment-actions .comment-action-reply {
color: var(--greyForegroundColor);
cursor: pointer;
}
.notification-inbox-popover, .notification-inbox-link {
cursor: pointer;
position: relative;
}
.notification-inbox-popover, .notification-inbox-link a {
transition: all .1s ease-in-out;
border-radius: 25px;
cursor: pointer;
}
.notification-inbox-popover {
padding: 10px;
}
.notification-inbox-popover .unread-notifications, .notification-inbox-link .unread-notifications {
position: absolute;
top: 6px;
left: 0;
display: flex;
align-items: center;
justify-content: center;
background-color: var(--mainColor);
color: #fff;
font-size: 10px;
font-weight: 600;
border-radius: 15px;
width: 15px;
height: 15px;
margin-inline-start: 20px;
}

ファイルの表示

@ -14,20 +14,6 @@ menu { background-color: #421a46 !important; }
.owner-description, .icon.icon-logo { display: none !important; }
.view-account short { margin-top: 0px !important; }
.instance-name {
background-color: #5e3c62 !important;
background-image: url('/img/favicon.jpeg') !important;
background-position: top !important;
border-radius: 10px !important;
padding: 2px !important;
color: #fcfcfc !important;
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
width: 34px !important;
height: 34px !important;
}
.owner-block {
background-color: rgba(48, 26, 48, 0.6) !important;
padding: 10px !important;

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

@ -0,0 +1,430 @@
.main-row {
min-height: calc(100vh - 110px);
}
@media screen and (max-width: 1600px) {
.main-col {
--horizontalMarginContent: 15px;
--videosHorizontalMarginContent: 30px;
}
}
.main-col .margin-content {
margin: 0 var(--horizontalMarginContent);
flex-grow: 1;
}
.title-page.active, .title-page:hover, .title-page:active, .title-page:focus, .title-page.title-page-single {
opacity: 1;
outline: 0 hidden!important;
}
.title-page.title-page-single {
font-size: 125%;
margin-top: 30px;
margin-bottom: 25px;
}
.block-title, .title-page {
background: radial-gradient(ellipse at top, #db34d3, transparent), radial-gradient(ellipse at bottom, #232629, transparent);
margin-inline-end: 0px;
margin-inline-start: 0px;
padding: 5px;
border-radius: 4px;
border: 2px solid #fd95ff;
border-right-color: #fed9ff;
border-bottom-color: #fed9ff;
text-align: center;
}
.title-page {
margin-inline-end: 55px;
opacity: .6;
color: var(--mainForegroundColor);
font-size: 16px;
display: inline-block;
font-weight: 600;
border-bottom: 2px solid transparent;
}
.wrapper {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
margin-inline-end: 0;
width: auto;
}
.wrapper .login-form-and-externals {
margin-inline-end: 10px;
margin-inline-start: 10px;
display: flex;
flex-wrap: wrap;
font-size: 15px;
max-width: 450px;
margin-bottom: 40px;
}
.wrapper > div {
flex: 1 1;
}
.wrapper .login-form-and-externals form, .wrapper .login-form-and-externals form input {
width: 100%;
}
.wrapper .login-form-and-externals .signup-link {
display: inline-block;
}
.wrapper .login-form-and-externals form .additionnal-links .forgot-password-button, .wrapper .login-form-and-externals form .additionnal-links .create-an-account {
padding: 4px;
display: inline-block;
color: var(--mainColor);
}
.create-an-account, .forgot-password-button {
color: var(--mainForegroundColor);
cursor: pointer;
transition: opacity cubic-bezier(.39,.575,.565,1);
}
.wrapper .login-form-and-externals form {
margin: 0;
}
.wrapper .instance-information {
margin-inline-end: 10px;
margin-inline-start: 10px;
max-width: 600px;
min-width: 350px;
margin-bottom: 40px;
}
.form-group {
margin-bottom: 1rem;
}
label {
display: block;
font-weight: 700;
font-size: 15px;
display: inline-block;
margin-bottom: 0.5rem;
}
#custom-css input, #custom-css textarea {
background: var(--inputColor) !important;
color: var(--mainForegroundColor) !important;
border: 1px solid var(--mainBackgroundColor);
}
.input-group {
position: relative;
display: flex;
flex-wrap: wrap;
align-items: stretch;
width: 100%;
}
input[type=text], input[type=email] {
padding: 0 15px;
display: inline-block;
height: 30px;
width: 340px;
color: var(--inputForegroundColor);
background-color: var(--inputBackgroundColor);
border: 1px solid #C6C6C6;
border-radius: 3px;
font-size: 15px;
}
#custom-css .peertube-select-container, input[type="text"] {
border: 1px solid var(--mainBackgroundColor) !important;
background: var(--inputColor) !important;
color: var(--mainForegroundColor) !important;
}
.form-control {
font-size: 15px;
color: var(--mainForegroundColor);
background-color: var(--inputBackgroundColor);
outline: none;
display: block;
width: 100%;
height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 0.25rem;
transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
}
input, textarea {
outline: none;
color: var(--inputForegroundColor);
}
button, input {
overflow: visible;
}
input, button, select, optgroup, textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
.instance-name {
line-height: 1.7rem;
}
h2, .h2 {
font-size: 2rem;
}
.instance-short-description {
display: block;
display: -webkit-box;
-webkit-line-clamp: 3;
font-size: 1rem;
line-height: 1rem;
overflow: hidden;
text-overflow: ellipsis;
max-height: 3rem;
margin-top: 20px;
margin-bottom: 20px;
}
.accordion {
overflow-anchor: none;
}
ngb-accordion .card {
border-color: var(--mainBackgroundColor);
}
.accordion>.card {
overflow: hidden;
}
.card {
background-color: var(--mainBackgroundColor);
border-color: #dee2e6;
position: relative;
display: flex;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
background-color: #fff;
background-clip: border-box;
border: 1px solid rgba(0,0,0,.125);
border-radius: 0.25rem;
}
ngb-accordion .card .card-header {
background-color: unset;
padding: 0;
}
.accordion>.card>.card-header {
border-radius: 0;
margin-bottom: -1px;
}
.card-header:first-child {
border-radius: calc(0.25rem- 1px) calc(0.25rem- 1px) 0 0;
}
.card-header {
padding: 0.75rem 1.25rem;
margin-bottom: 0;
background-color: #00000008;
border-bottom: 1px solid rgba(0,0,0,.125);
}
.btn:not(:disabled):not(.disabled) {
cursor: pointer;
}
ngb-accordion .btn {
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;
background-color: #e5e5e5;
color: var(--greyForegroundColor);
border-radius: unset;
width: 100%;
}
button:not(:disabled), [type=button]:not(:disabled), [type=reset]:not(:disabled), [type=submit]:not(:disabled) {
cursor: pointer;
}
.btn-link {
font-weight: 400;
color: #007bff;
text-decoration: none;
}
.btn {
display: inline-block;
font-weight: 400;
color: #212529;
text-align: center;
vertical-align: middle;
-webkit-user-select: none;
user-select: none;
background-color: transparent;
border: 1px solid transparent;
padding: 0.375rem 0.75rem;
font-size: 1rem;
line-height: 1.5;
border-radius: 0.25rem;
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
button, [type=button], [type=reset], [type=submit] {
-webkit-appearance: button;
}
button {
background: unset;
border-radius: 0;
}
button, select {
text-transform: none;
}
.input-group:not(.has-validation)>.form-control:not(:last-child), .input-group:not(.has-validation)>.custom-select:not(:last-child), .input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label, .input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label:after {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group input.form-control {
width: unset!important;
flex-grow: 1;
}
.input-group-sm>.form-control:not(textarea), .input-group-sm>.custom-select {
height: calc(1.5em + 0.5rem + 2px);
}
.input-group>.form-control {
flex: initial;
}
.input-group>.form-control, .input-group>.form-control-plaintext, .input-group>.custom-select, .input-group>.custom-file {
position: relative;
flex: 1 1 auto;
width: 1%;
min-width: 0;
margin-bottom: 0;
}
input {
padding-inline-end: 15px !important;
padding-inline-start: 15px !important;
padding: 0 15px;
display: inline-block;
height: 30px;
width: auto;
color: var(--inputForegroundColor);
background-color: var(--inputBackgroundColor);
border: 1px solid #C6C6C6;
border-radius: 3px;
font-size: 15px;
font-size: 15px!important;
}
.input-group-append {
margin-left: -1px;
}
.input-group-prepend, .input-group-append {
display: flex;
}
.input-group>.input-group-append>.btn, .input-group>.input-group-append>.input-group-text, .input-group>.input-group-prepend:not(:first-child)>.btn, .input-group>.input-group-prepend:not(:first-child)>.input-group-text, .input-group>.input-group-prepend:first-child>.btn:not(:first-child), .input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.input-group-sm>.form-control, .input-group-sm>.custom-select, .input-group-sm>.input-group-prepend>.input-group-text, .input-group-sm>.input-group-append>.input-group-text, .input-group-sm>.input-group-prepend>.btn, .input-group-sm>.input-group-append>.btn {
padding: 0.25rem 0.5rem;
font-size: .875rem;
line-height: 1.5;
border-radius: 0.2rem;
}
.eye-button {
line-height: 1!important;
}
.input-group-prepend .btn, .input-group-append .btn {
position: relative;
z-index: 2;
}
.btn-outline-secondary {
border-color: #ced4da;
color: #6c757d;
border-color: #6c757d;
}
input[type=button], input[type=submit], input[type=reset], input[type=file]::-webkit-file-upload-button, button {
border-radius: 0;
}
ngb-accordion .card .card-header+.collapse.show {
background-color: var(--submenuBackgroundColor);
}
.card-body {
flex: 1 1 auto;
min-height: 1px;
padding: 1.25rem;
}
.block {
font-size: 15px;
margin-bottom: 15px;
}
.alert-danger {
color: #850000;
background-color: #fcc;
border-color: #ffb8b8;
}
.alert {
position: relative;
padding: 0.75rem 1.25rem;
margin-bottom: 1rem;
border: 1px solid transparent;
border-radius: 0.25rem;
}
.alert {
position: relative;
padding: 0.75rem 1.25rem;
margin-bottom: 1rem;
border: 1px solid transparent;
border-radius: 0.25rem;
}

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

@ -0,0 +1,520 @@
.main-row {
min-height: calc(100vh - 110px);
}
.row {
flex-direction: column;
width: 100%;
}
.row {
margin: 0!important;
}
.row {
display: flex;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;
}
.row > my-top-menu-dropdown:nth-child(1) {
flex-grow: 1;
}
.main-col .sub-menu.sub-menu-fixed {
position: fixed;
z-index: 12499;
max-width: var(--mainColWidth);
}
.main-col .sub-menu {
background-color: #502c50 !important;
}
.main-col .sub-menu {
background-color: var(--submenuBackgroundColor);
width: 100%;
display: flex;
align-items: center;
padding: 0 var(--horizontalMarginContent);
height: 81px;
margin-bottom: 30px;
overflow-x: auto;
}
.block-title, .title-page {
background: radial-gradient(ellipse at top, #db34d3, transparent), radial-gradient(ellipse at bottom, #232629, transparent);
margin-inline-end: 0px;
margin-inline-start: 0px;
padding: 5px;
border-radius: 4px;
border: 2px solid #fd95ff;
border-right-color: #fed9ff;
border-bottom-color: #fed9ff;
text-align: center;
}
.title-page-about, .title-page-settings {
white-space: nowrap;
font-size: 115%;
}
.title-page {
margin-inline-end: 55px;
}
.title-page {
opacity: .6;
color: var(--mainForegroundColor);
font-size: 16px;
display: inline-block;
font-weight: 600;
border-bottom: 2px solid transparent;
}
#custom-css .title-page.active, #custom-css .title-page:hover {
color: var(--whiteColor);
}
.title-page.active {
border-bottom-color: #ea81e8 !important;
}
.title-page.active, .title-page:hover, .title-page:active, .title-page:focus, .title-page.title-page-single {
opacity: 1;
outline: 0 hidden!important;
}
.title-page.active {
border-bottom-color: var(--mainColor);
}
.block-title, .title-page {
background: radial-gradient(ellipse at top, #db34d3, transparent), radial-gradient(ellipse at bottom, #232629, transparent);
margin-inline-end: 0px;
margin-inline-start: 0px;
padding: 5px;
border-radius: 4px;
border: 2px solid #fd95ff;
border-right-color: #fed9ff;
border-bottom-color: #fed9ff;
text-align: center;
}
.title-page-about, .title-page-settings {
white-space: nowrap;
font-size: 115%;
}
.title-page {
margin-inline-end: 55px;
}
.title-page {
opacity: .6;
color: var(--mainForegroundColor);
font-size: 16px;
display: inline-block;
font-weight: 600;
border-bottom: 2px solid transparent;
}
.main-col .margin-content.offset-content {
padding-top: 111px;
}
.main-col .margin-content {
margin: 0 var(--horizontalMarginContent);
flex-grow: 1;
}
.pb-5, .py-5 {
padding-bottom: 3rem !important;
}
.row h1 {
font-size: 1.3rem;
border-bottom: 2px solid #E5E5E5;
padding-bottom: 15px;
margin-bottom: 30px;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0,0,0,0);
white-space: nowrap;
border: 0;
}
#custom-css .header-filter {
background-color: var(--menuBackgroundColor);
}
.header-filter {
display: flex;
font-size: 15px;
margin-bottom: 20px;
background-color: #421a46 !important;
}
#custom-css .row .header-filter a, #custom-css .row .header-filter button {
color: var(--whiteColor);
background-color: var(--mainHoverColor);
}
.header-filter a {
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;
background-color: #e5e5e5;
color: var(--greyForegroundColor);
display: inline-flex;
align-items: center;
line-height: normal!important;
}
.header-filter a my-global-icon {
margin-inline-end: 3px;
position: relative;
width: 18px;
top: -1px;
}
#custom-css .header-filter my-global-icon .feather {
color: var(--whiteColor);
}
.header-filter a my-global-icon .feather, .header-filter a my-global-icon .material, .header-filter a my-global-icon .misc {
color: var(--greyForegroundColor);
}
#custom-css .peertube-select-container, input[type="text"] {
border: 1px solid var(--mainBackgroundColor) !important;
background: var(--inputColor) !important;
color: var(--mainForegroundColor) !important;
}
.header-filter .peertube-select-container.peertube-select-button {
background-color: #e5e5e5;
color: var(--greyForegroundColor);
}
.header-filter .peertube-select-container {
padding: 0;
margin: 0;
width: auto;
border-radius: 3px;
color: var(--inputForegroundColor);
background: var(--inputBackgroundColor);
position: relative;
font-size: 15px;
height: min-content;
}
#custom-css .peertube-select-container > select {
background: var(--inputColor) !important;
color: var(--mainForegroundColor) !important;
}
.header-filter .peertube-select-container.peertube-select-button select, .header-filter .peertube-select-container.peertube-select-button option {
font-weight: 600;
color: var(--greyForegroundColor);
border: 0;
}
.header-filter .peertube-select-container select {
padding: 0 35px 0 12px;
position: relative;
border: 1px solid #C6C6C6;
background: transparent none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
cursor: pointer;
height: 30px;
text-overflow: ellipsis;
color: var(--mainForegroundColor);
}
.form-control {
font-size: 15px;
color: var(--mainForegroundColor);
background-color: var(--inputBackgroundColor);
outline: none;
}
.form-control {
display: block;
width: 100%;
height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 0.25rem;
transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
select {
word-wrap: normal;
}
button, select {
text-transform: none;
}
input, button, select, optgroup, textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
#custom-css .peertube-select-container > select > option {
background: var(--inputColor);
color: var(--mainForegroundColor) !important;
}
.header-filter .peertube-select-container select option {
color: #000;
}
.header-filter .peertube-select-container.peertube-select-button select, .header-filter .peertube-select-container.peertube-select-button option {
font-weight: 600;
color: var(--greyForegroundColor);
border: 0;
}
#custom-css .peertube-select-container > select option:hover, #custom-css .peertube-select-container > select > option:checked {
color: var(--whiteColor) !important;
background-color: var(--mainColor) !important;
}
#custom-css .peertube-select-container > select > option {
background: var(--inputColor);
color: var(--mainForegroundColor) !important;
}
.header-filter .peertube-select-container select option {
color: #000;
}
.header-filter .peertube-select-container.peertube-select-button select, .header-filter .peertube-select-container.peertube-select-button option {
font-weight: 600;
color: var(--greyForegroundColor);
border: 0;
}
#custom-css .peertube-select-container:after {
border-top-color: var(--mainForegroundColor) !important;
}
.header-filter .peertube-select-container:after {
top: 50%;
right: calc(0% + 15px);
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border: 5px solid rgba(0,0,0,0);
border-top-color: #000;
margin-top: -2px;
z-index: 100;
}
#custom-css .row .header-filter a, #custom-css .row .header-filter button {
color: var(--whiteColor);
background-color: var(--mainHoverColor);
}
.header-filter button {
padding-inline-end: 17px;
}
.header-filter button {
padding-inline-start: 13px;
}
.header-filter button {
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;
background-color: #e5e5e5;
color: var(--greyForegroundColor);
display: inline-flex;
align-items: center;
line-height: normal!important;
}
.btn:not(:disabled):not(.disabled) {
cursor: pointer;
}
button:not(:disabled), [type=button]:not(:disabled), [type=reset]:not(:disabled), [type=submit]:not(:disabled) {
cursor: pointer;
}
.ml-auto, .mx-auto {
margin-left: auto!important;
}
.btn {
display: inline-block;
font-weight: 400;
color: #212529;
text-align: center;
vertical-align: middle;
-webkit-user-select: none;
user-select: none;
background-color: transparent;
border: 1px solid transparent;
padding: 0.375rem 0.75rem;
font-size: 1rem;
line-height: 1.5;
border-radius: 0.25rem;
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
button {
background: unset;
}
button, [type=button], [type=reset], [type=submit] {
-webkit-appearance: button;
}
button, select {
text-transform: none;
}
button, input {
overflow: visible;
}
input, button, select, optgroup, textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button {
border-radius: 0;
}
input[type=button], input[type=submit], input[type=reset], input[type=file]::-webkit-file-upload-button, button {
border-radius: 0;
}
.header-filter button my-global-icon {
margin-inline-end: 3px;
position: relative;
width: 20px;
top: -1px;
}
#custom-css .header-filter my-global-icon .feather {
color: var(--whiteColor);
}
.header-filter button my-global-icon .feather, .header-filter button my-global-icon .material, .header-filter button my-global-icon .misc {
color: var(--greyForegroundColor);
}
my-user-notifications {
font-size: 15px;
}
#custom-css .notification.unread {
background-color: var(--menuAndHeaderBackgroundColor);
}
#custom-css .notification {
background-color: var(--mainBackgroundColor);
color: var(--mainForegroundColor);
}
.notification.unread {
background-color: #0000000d;
}
.notification {
display: flex;
align-items: center;
font-size: inherit;
padding: 15px 5px 15px 10px;
border-bottom: 1px solid rgba(0,0,0,.1);
word-break: break-word;
}
.notification .avatar {
margin-inline-end: 10px;
width: 30px;
height: 30px;
min-width: 30px;
min-height: 30px;
border-radius: 5px;
}
img {
vertical-align: middle;
border-style: none;
}
.notification .message {
flex-grow: 1;
}
.notification .message a {
font-weight: 600;
}
.notification .from-date {
margin-inline-start: auto;
padding-inline-start: 5px;
font-size: .85em;
color: var(--greyForegroundColor);
min-width: 70px;
text-align: end;
}
#custom-css .notification {
background-color: var(--mainBackgroundColor);
color: var(--mainForegroundColor);
}
.notification {
display: flex;
align-items: center;
font-size: inherit;
padding: 15px 5px 15px 10px;
border-bottom: 1px solid rgba(0,0,0,.1);
word-break: break-word;
}

ファイルの表示

@ -4322,17 +4322,6 @@ input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-
white-space: nowrap
}
.dropdown-toggle:after {
display: inline-block;
margin-left: .255em;
vertical-align: .255em;
content: "";
border-top: .3em solid;
border-right: .3em solid #0000;
border-bottom: 0;
border-left: .3em solid #0000
}
.dropdown-toggle:empty:after {
margin-left: 0
}

ファイルの表示

@ -0,0 +1,76 @@
@extends('theme.'.env('THEME').'.peertube')
@section('content')
<div id="content" tabindex="-1" class="main-col">
<div class="main-row">
<my-login class="ng-star-inserted">
<div class="margin-content">
<div class="title-page title-page-single">ログイン</div>
@if (!is_null($res['err'])) <div _ngcontent-fjg-c238="" class="alert alert-danger ng-star-inserted">{{ $err }}</div> @endif
<div class="wrapper ng-star-inserted">
<div class="login-form-and-externals">
<form action="/peertube/login" method="post" role="form" id="plugin-selector-login-form" class="ng-pristine ng-invalid ng-touched">
@csrf
<div class="form-group">
<div>
<label for="username">ユーザー</label>
<input type="text" name="username" placeholder="ユーザー名かメールアドレス" required="" tabindex="1" myautofocus="" class="form-control ng-pristine ng-invalid ng-touched">
</div>
</div>
<div class="form-group">
<label for="password">パスワード</label>
<input type="password" class="form-control ng-untouched ng-pristine ng-valid" name="password" autocomplete="current-password" placeholder="パスワード" tabindex="2">
</div>
<input type="submit" value="ログイン" class="peertube-button orange-button">
<div class="additionnal-links">
<a title="クリックしてパスワードをリセットします" class="forgot-password-button">パスワードを忘れました</a>
<div class="signup-link ng-star-inserted">
<span>·</span><a class="create-an-account" href="/signup">アカウントを作成する</a>
</div>
</div>
<div role="alert" class="looking-for-account alert alert-info">
<h6 class="alert-heading">あなたのアカウントでログインする事で、コンテンツを公開することができます</h6>
<div class="ng-star-inserted"> This instance allows registration. However, be careful to check the Terms before creating an account. You may also search for another instance to match your exact needs at: <br><a href="https://joinpeertube.org/instances" target="_blank" rel="noopener noreferrer" class="alert-link">https://joinpeertube.org/instances</a>. </div>
</div>
</form>
</div>
<div class="instance-information">
<my-instance-about-accordion>
<h2 class="instance-name">076動画</h2>
<div class="instance-short-description">JSのないPeerTube</div>
<ngb-accordion role="tablist" class="accordion" aria-multiselectable="false">
<div class="card ng-star-inserted">
<div role="tabpanel" id="terms" aria-labelledby="terms-header" class="ng-star-inserted collapse show">
<div class="card-body">
<div _ngcontent-fjg-c88="" class="block ng-star-inserted">
<p>
・デフォルトで各ユーザーは一日2GBまで、総合50GBまでアップ出来ますが、信頼があれば、限界を段々増大するかもしれません。<br>
・差別は禁止です。人種、宗教、国籍、性別、ワクチン状況等込み。冗談はOKです。<br>
・リアポルノは禁止です。2D画像又はCGIはOKです。(例えば、児ポはNGですが、ロリコン・ショタコンはOKです)<br>
・無駄な報告を見逃します。のルール違反じゃなければ、反応しません。著作権(DMCA込み)について報告は迷惑メールとして扱います。著作権権威主義(共産主義)の詐欺ですから。<br>
・政治について会話は禁止じゃないですが、出来れば喧嘩をご遠慮下さい。<br>
・詐欺、スパムBOT等はすぐBANします。<br>
・管理者はテクニカル諏訪子しかいません。ユーザーでの問題があれば、まずはあのユーザーで解いてみて下さい。
</p>
<p>
・By default, each user can increase up to 2GB per day, up to 50GB in total, but if you have confidence, the limit may gradually increase.<br>
・Discrimination is prohibited. Includes race, religion, nationality, gender, vaccine status, etc. The joke is OK.<br>
・Rear porn is prohibited. 2D image or GCI is OK. (For example, child po is NG, but lolicon and shotacon are OK)<br>
・Miss useless reports. Unless it violates the 076 rule, it will not respond. Report on copyright (including DMCA) will be treated as junk mail. Copyright = authoritarian (communist) fraud.<br>
・Conversations about politics are not prohibited, but please refrain from fighting if possible.<br>
・Fraud, spam BOT, etc. will be banned immediately.<br>
・The only administrator is TechnicalSuwako. If you have a problem with a user, please try to solve it with that user first.
</p>
</div>
</div>
</div>
</div>
</ngb-accordion>
</my-instance-about-accordion>
</div>
</div>
</div>
</my-login>
</div>
</div>
@endsection

ファイルの表示

@ -0,0 +1,20 @@
@extends('theme.'.env('THEME').'.peertube')
@section('content')
<div id="content" tabindex="-1" class="main-col">
<div class="main-row">
<my-my-account class="ng-star-inserted">
<div class="row">
@include('theme.'.env('THEME').'.component.peertube.my-account.menu', ['active' => 'notifications'])
<div class="margin-content pb-5 offset-content">
<ng-component class="ng-star-inserted">
<h1 class="sr-only">通知</h1>
@include('theme.'.env('THEME').'.component.peertube.my-account.filter')
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications')
</ng-component>
</div>
</div>
</my-my-account>
</div>
</div>
@endsection

ファイルの表示

@ -2,10 +2,10 @@
<my-list-overflow>
<div class="d-flex align-items-center text-nowrap w-100 list-overflow-parent">
<span id="pe_0" class="ng-star-inserted" style="visibility: inherit;">
<a routerlinkactive="active" class="title-page ng-star-inserted active" href="/peertube/a/{{ $res['owner']->name }}{{ $res['owner']->host != 'video.076.ne.jp' ? '@'.$res['owner']->host : '' }}/video-channels">チャンネル</a>
<a class="title-page ng-star-inserted active" href="/peertube/a/{{ $res['owner']->name }}{{ $res['owner']->host != 'video.076.ne.jp' ? '@'.$res['owner']->host : '' }}/video-channels">チャンネル</a>
</span>
<span id="pe_1" class="ng-star-inserted" style="visibility: inherit;">
<a routerlinkactive="active" class="title-page ng-star-inserted" href="/peertube/a/{{ $res['owner']->name }}{{ $res['owner']->host != 'video.076.ne.jp' ? '@'.$res['owner']->host : '' }}/videos">動画</a>
<a class="title-page ng-star-inserted" href="/peertube/a/{{ $res['owner']->name }}{{ $res['owner']->host != 'video.076.ne.jp' ? '@'.$res['owner']->host : '' }}/videos">動画</a>
</span>
</div>
</my-list-overflow>

ファイルの表示

@ -2,10 +2,10 @@
<my-list-overflow>
<div class="d-flex align-items-center text-nowrap w-100 list-overflow-parent">
<span id="pe_0" class="ng-star-inserted" style="visibility: inherit;">
<a routerlinkactive="active" class="title-page ng-star-inserted{{ $res['cat'] == 'videos' ? ' active' : '' }}" href="/peertube/c/{{ $res['channel']->name }}{{ $res['channel']->host != 'video.076.ne.jp' ? '@'.$res['channel']->host : '' }}/videos">動画</a>
<a class="title-page ng-star-inserted{{ $res['cat'] == 'videos' ? ' active' : '' }}" href="/peertube/c/{{ $res['channel']->name }}{{ $res['channel']->host != 'video.076.ne.jp' ? '@'.$res['channel']->host : '' }}/videos">動画</a>
</span>
<span id="pe_1" class="ng-star-inserted" style="visibility: inherit;">
<a routerlinkactive="active" class="title-page ng-star-inserted{{ $res['cat'] == 'video-playlists' ? ' active' : '' }}" href="/peertube/c/{{ $res['channel']->name }}{{ $res['channel']->host != 'video.076.ne.jp' ? '@'.$res['channel']->host : '' }}/video-playlists">プレイリスト</a>
<a class="title-page ng-star-inserted{{ $res['cat'] == 'video-playlists' ? ' active' : '' }}" href="/peertube/c/{{ $res['channel']->name }}{{ $res['channel']->host != 'video.076.ne.jp' ? '@'.$res['channel']->host : '' }}/video-playlists">プレイリスト</a>
</span>
</div>
</my-list-overflow>

ファイルの表示

@ -53,7 +53,7 @@
</div-->
</div>
</my-search-typeahead>
<a routerlink="/videos/upload" class="publish-button" href="/peertube/videos/upload">
<a 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>

ファイルの表示

@ -11,6 +11,7 @@
else if ($res['page'] == 'recently-added') $name = '最近投稿された動画';
else if ($res['page'] == 'local') $name = 'ローカル動画';
else if ($res['page'] == 'about') $name = 'このアプリについて';
else if ($res['page'] == 'notification') $name = '通知';
}
?>

ファイルの表示

@ -1,6 +1,6 @@
<div class="footer">
<div class="footer-block">
<a routerlink="/about" routerlinkactive="active" class="menu-link" href="/peertube/about">
<a 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,5 @@
<div class="top-menu">
@if (!is_null($res['userinfo']) && (isset($res['userinfo']->me) && !is_null($res['userinfo']->me)))
@if (!is_null($res['userinfo']) && (isset($res['userinfo']['me']) && !is_null($res['userinfo']['me'])))
@include('theme.'.env('THEME').'.component.peertube.menu.top.loggedin')
@include('theme.'.env('THEME').'.component.peertube.menu.top.inmylibrary')
@else

ファイルの表示

@ -2,25 +2,25 @@
<div class="block-title">
In my library
</div>
<a routerlinkactive="active" class="menu-link ng-star-inserted" href="/peertube/my-library/videos">
<a 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="/peertube/my-library/video-playlists">
<a 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="/peertube/videos/subscriptions">
<a 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="/peertube/my-library/history/videos">
<a 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,17 +1,14 @@
<div class="logged-in-block ng-star-inserted">
<div>
<div placement="bottom-left auto" autoclose="outside" class="logged-in-more dropdown">
<a href="/peertube/a/techsuwako">
<a href="/peertube/a/{{ $res['userinfo']['me']->account->name }}{{ $res['userinfo']['me']->account->host != 'video.076.ne.jp' ? '@'.$res['userinfo']['me']->account->host : '' }}">
<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="アカウントのアバター">
<img class="account avatar avatar-34 ng-star-inserted" src="{{ !is_null($res['userinfo']['me']->account->avatar) ? 'https://video.076.ne.jp'.$res['userinfo']['me']->account->avatar->path : '/img/noicon.jpg' }}" 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 class="logged-in-display-name">{{ $res['userinfo']['me']->account->displayName }}</div>
<div class="logged-in-username">{{ '@'.$res['userinfo']['me']->account->name }}{{ $res['userinfo']['me']->account->host != 'video.076.ne.jp' ? '@'.$res['userinfo']['me']->account->host : '' }}</div>
</div>
</div>
</a>
@ -19,28 +16,28 @@
@include('theme.'.env('THEME').'.component.peertube.menu.top.notification')
</div>
<div class="logged-in-menu">
<a routerlink="/my-account" routerlinkactive="active" class="menu-link" href="/peertube/my-account">
<a 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="/peertube/my-library">
<a 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>
@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">
@if (!is_null($res['userinfo']) && (isset($res['userinfo']['me']) && !is_null($res['userinfo']['me']) && $res['userinfo']['me']->adminFlags == 1))
<a 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">
@if (!is_null($res['userinfo']) && (isset($res['userinfo']['me']) && !is_null($res['userinfo']['me'])))
<a 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>

ファイルの表示

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

ファイルの表示

@ -1,6 +1,7 @@
<my-notification>
<div autoclose="outside" placement="bottom" container="{this}" popoverclass="popover-notifications" title="通知を表示" class="notification-inbox-popover">
<a href="/peertube/notification" style="color: var(--menuForegroundColor);">
<a href="/peertube/my-account/notifications" style="color: var(--menuForegroundColor);">
@if ($res['userinfo']['notify']->total > 0) <div class="unread-notifications ng-star-inserted">{{ $res['userinfo']['notify']->total }}</div> @endif
<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>

ファイルの表示

@ -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="/peertube/home">
<a 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="/peertube/videos/overview">
<a 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="/peertube/videos/trending">
<a 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="/peertube/videos/recently-added">
<a 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="/peertube/videos/local">
<a 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>

ファイルの表示

@ -5,6 +5,13 @@
if ($res['page'] == 'watch') $name = $res['detail']->name;
else if ($res['page'] == 'account') $name = $res['owner']->displayName.'さんのチャンネル一覧';
else if ($res['page'] == 'channel') $name = $res['channel']->displayName.'さんのチャンネル';
else if ($res['page'] == 'home') $name = 'トップページ';
else if ($res['page'] == 'overview') $name = 'ディスカバー';
else if ($res['page'] == 'trending') $name = 'トレンド';
else if ($res['page'] == 'recently-added') $name = '最近投稿された動画';
else if ($res['page'] == 'local') $name = 'ローカル動画';
else if ($res['page'] == 'about') $name = 'このアプリについて';
else if ($res['page'] == 'notification') $name = '通知';
}
?>

ファイルの表示

@ -0,0 +1,24 @@
<div class="header-filter">
<a fragment="notifications" href="/peertube/my-account/settings#notifications">
<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>
<div class="peertube-select-container peertube-select-button ml-2 mr-2">
<select class="form-control ng-untouched ng-pristine ng-valid">
<option value="undefined" disabled="">Sort by</option>
<option value="createdAt">Newest first</option>
<option value="read">Unread first</option>
</select>
</div>
<form class="btn ml-auto" action="/peertube/my-account/notifications/readAll" method="post">
@csrf
<button{{ $res['userinfo']['notify']->total == 0 ? ' disabled' : '' }}>
<my-global-icon iconname="tick" aria-hidden="true" class="ng-star-inserted">
<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-check"><polyline points="20 6 9 17 4 12"></polyline></svg>
</my-global-icon>
<span class="ng-star-inserted">全てを既読にする</span>
</button>
</form>
</div>

ファイルの表示

@ -0,0 +1,18 @@
<?php
$menu = [
'settings' => '設定',
'notifications' => '通知',
'applications' => 'アプリケーション',
'blocklist/accounts' => 'ミュートにしたアカウント',
'blocklist/servers' => 'ミュートにしたサーバー',
'abuses' => 'Abuse reports',
];
?>
<my-top-menu-dropdown>
<div class="sub-menu sub-menu-fixed">
@foreach ($menu as $k => $v)
<a class="title-page title-page-settings ng-star-inserted{{ $active == $k ? ' active' : '' }}" href="/peertube/my-account/{{ $k }}">{{ $v }}</a>
@endforeach
</div>
</my-top-menu-dropdown>

ファイルの表示

@ -0,0 +1,38 @@
<my-user-notifications>
<div class="notifications">
@foreach ($res['notification']->data as $n)
<div class="notification{{ !$n->read ? ' unread' : '' }} ng-star-inserted">
@if (isset($n->comment))
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications.comment')
@elseif (isset($n->account))
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications.account')
@elseif (isset($n->actorFollow))
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications.actorfollow')
@elseif (isset($n->video))
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications.video')
@elseif (isset($n->videoAbuse))
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications.account')
@elseif (isset($n->videoBlacklist))
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications.blacklist')
@elseif (isset($n->videoImport))
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications.import')
@elseif (isset($n->plugin))
@include('theme.'.env('THEME').'.component.peertube.my-account.notifications.plugin')
@endif
<form action="/peertube/my-account/notifications/read" method="post">
@csrf
<input type="hidden" name="id" value="{{ $n->id }}" />
<button style="background-color: var(--mainHoverColor); color: var(--whiteColor);" class="btn ml-auto"{{ $n->read ? ' disabled' : '' }}>
<span class="ng-star-inserted">既読</span>
</button>
</form>
<div class="from-date" title="{{ date('Y/m/d', strtotime($n->createdAt)) }}">
{{ date('Y/m/d', strtotime($n->createdAt)) }}
</div>
</div>
@endforeach
</div>
@include('theme.'.env('THEME').'.component.peertube.common.paginate', [
'root' => '/peertube/my-account/notifications'
])
</my-user-notifications>

ファイルの表示

@ -0,0 +1 @@
<div>dummy</div>

ファイルの表示

@ -0,0 +1,6 @@
<my-global-icon iconname="user-add" aria-hidden="true" class="ng-star-inserted">
<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-plus"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="20" y1="8" x2="20" y2="14"></line><line x1="23" y1="11" x2="17" y2="11"></line></svg>
</my-global-icon>
<div class="message ng-star-inserted">
<a href="/peertube/a/{{ $n->account->name }}{{ $n->account->host != 'video.076.ne.jp' ? '@'.$n->account->host : '' }}">{{ $n->account->displayName }}</a>さんがこのインスタンスに登録しました
</div>

ファイルの表示

@ -0,0 +1,22 @@
@if ($n->actorFollow->following->type == 'instance')
<my-global-icon iconname="users" aria-hidden="true" class="ng-star-inserted">
<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-users"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
</my-global-icon>
@elseif ($n->actorFollow->following->type == 'account')
<a href="/peertube/a/{{ $n->actorFollow->follower->name }}{{ $n->actorFollow->follower->host != 'video.076.ne.jp' ? '@'.$n->actorFollow->follower->host : '' }}" class="ng-star-inserted">
<img alt="" aria-labelledby="avatar" class="avatar" src="{{ !is_null($n->actorFollow->follower->avatar) ? 'https://video.076.ne.jp'.$n->actorFollow->follower->avatar->path : '/img/noicon.jpg' }}">
</a>
@endif
<div class="message ng-star-inserted">
@if ($n->actorFollow->following->type == 'instance')
@if ($n->actorFollow->follower->id == 1)
あなたのインスタンスは<a href="/peertube/admin/follows/following-list"> {{ $n->actorFollow->following->host }}</a>を自動でフォローされています
@else
あなたのインスタンスに<a href="/peertube/admin/follows/followers-list">新しいフォロワー</a>が登録されました ({{ $n->actorFollow->follower->host }})
@endif
@elseif ($n->actorFollow->following->type == 'account')
<a href="/peertube/a/{{ $n->actorFollow->follower->name }}{{ $n->actorFollow->follower->host != 'video.076.ne.jp' ? '@'.$n->actorFollow->follower->host : '' }}">{{ $n->actorFollow->follower->displayName }}</a>さんはああたをフォローしています
@elseif ($n->actorFollow->following->type == 'channel')
<a href="/peertube/a/{{ $n->actorFollow->follower->name }}{{ $n->actorFollow->follower->host != 'video.076.ne.jp' ? '@'.$n->actorFollow->follower->host : '' }}">{{ $n->actorFollow->follower->displayName }}</a>さんは「{{ $n->actorFollow->following->displayName }}」というチャンネルをフォローしています
@endif
</div>

ファイルの表示

@ -0,0 +1 @@
<div>dummy</div>

ファイルの表示

@ -0,0 +1,12 @@
<a href="/peertube/a/{{ $n->comment->account->name }}{{ $n->comment->account->host != 'video.076.ne.jp' ? '@'.$n->comment->account->host : '' }}" class="ng-star-inserted">
<img alt="" aria-labelledby="avatar" class="avatar" src="{{ !is_null($n->comment->account->avatar) ? 'https://video.076.ne.jp'.$n->comment->account->avatar->path : '/img/noicon.jpg' }}">
</a>
@if ($n->type == 11)
<div class="message ng-star-inserted">
<a href="/peertube/a/{{ $n->comment->account->name }}{{ $n->comment->account->host != 'video.076.ne.jp' ? '@'.$n->comment->account->host : '' }}">{{ $n->comment->account->displayName }}</a>さんは<a href="/peertube/w/{{ $n->comment->video->shortUUID }}#threadId={{ $n->comment->threadId }}">{{ $n->comment->video->name }}</a>という動画でメンションされました。
</div>
@elseif ($n->type == 2)
<div class="message ng-star-inserted">
<a href="/peertube/a/{{ $n->comment->account->name }}{{ $n->comment->account->host != 'video.076.ne.jp' ? '@'.$n->comment->account->host : '' }}">{{ $n->comment->account->displayName }}</a>さんは<a href="/peertube/w/{{ $n->comment->video->shortUUID }}#threadId={{ $n->comment->threadId }}">{{ $n->comment->video->name }}</a>でコメントを投稿しました
</div>
@endif

ファイルの表示

@ -0,0 +1,6 @@
<my-global-icon iconname="cloud-download" aria-hidden="true" class="ng-star-inserted">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><defs></defs><g fill="none" fill-rule="evenodd" stroke="currentColor" stroke-linecap="round" stroke-width="2"><path stroke-linejoin="round" d="M8 17H5h0a4 4 0 111-7.9v-.6a5.5 5.5 0 0110.8-1.4A5 5 0 0123 12a5 5 0 01-5 5h-2"></path><path d="M12 13v8"></path><path stroke-linejoin="round" d="M15 20l-3 3-3-3"></path></g></svg>
</my-global-icon>
<div class="message ng-star-inserted">
<a href="/peertube/w/hVqERbk4AQgdjEQXiXwsLm">動画のインポートに成功しました</a> https://www.youtube.com/watch?v=7cTSM-NEUqM
</div>

ファイルの表示

@ -0,0 +1,6 @@
<my-global-icon iconname="cog" aria-hidden="true" class="ng-star-inserted">
<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>
<div class="message ng-star-inserted">
<a href="/admin/plugins/list-installed?pluginType={{ $n->plugin->type }}">{{ $n->plugin->name }}</a>というプラグイン・テーマの最新バージョンまで更新できるようになりました: {{ $n->plugin->latestVersion }}
</div>

ファイルの表示

@ -0,0 +1,6 @@
<a class="ng-star-inserted">
<img alt="" aria-labelledby="avatar" class="avatar" src="{{ !is_null($n->video->channel->avatar) ? 'https://video.076.ne.jp'.$n->video->channel->avatar->path : '/img/noicon.jpg' }}">
</a>
<div class="message ng-star-inserted">
{{ $n->video->channel->displayName }}さんは新しい動画を投稿しました: <a href="/peertube/w/{{ $n->video->shortUUID }}">{{ $n->video->name }}</a>
</div>

ファイルの表示

@ -9,6 +9,13 @@
}
else if ($res['page'] == 'account') $name = $res['owner']->displayName.'さんのチャンネル一覧';
else if ($res['page'] == 'channel') $name = $res['channel']->displayName.'さんのチャンネル';
else if ($res['page'] == 'home') $name = 'トップページ';
else if ($res['page'] == 'overview') $name = 'ディスカバー';
else if ($res['page'] == 'trending') $name = 'トレンド';
else if ($res['page'] == 'recently-added') $name = '最近投稿された動画';
else if ($res['page'] == 'local') $name = 'ローカル動画';
else if ($res['page'] == 'about') $name = 'このアプリについて';
else if ($res['page'] == 'notification') $name = '通知';
}
?>

ファイルの表示

@ -1,6 +1,6 @@
<div class="section videos ng-star-inserted">
<h1 class="section-title">
<a routerlink="/search" href="/peertube/search?categoryOneOf={{ $res['video']->categories[0]->category->id }}">{{ $res['video']->categories[0]->category->label }}</a>
<a href="/peertube/search?categoryOneOf={{ $res['video']->categories[0]->category->id }}">{{ $res['video']->categories[0]->category->label }}</a>
</h1>
@foreach ($res['video']->categories[0]->videos as $k => $v)
@include('theme.'.env('THEME').'.component.peertube.common.videominature')

ファイルの表示

@ -1,6 +1,6 @@
<div class="section videos ng-star-inserted">
<h2 class="section-title">
<a routerlink="/search" href="/peertube/search?tagsOneOf=vampiros">{{ '#'.$res['video']->tags[0]->tag }}</a>
<a href="/peertube/search?tagsOneOf=vampiros">{{ '#'.$res['video']->tags[0]->tag }}</a>
</h2>
@foreach ($res['video']->tags[0]->videos as $k => $v)
@include('theme.'.env('THEME').'.component.peertube.common.videominature')

ファイルの表示

@ -8,14 +8,30 @@ Route::group(['prefix' => 'peertube'], function () {
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::get('/logout', 'Peertube\Logout@logout');
Route::group(['prefix' => 'login'], function () {
Route::get('/', 'Peertube\Login@index');
Route::post('/', 'Peertube\Login@login');
});
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::group(['prefix' => 'my-account'], function () {
Route::any('/', 'Peertube\Myaccount\Settings@index');
Route::any('/settings', 'Peertube\Myaccount\Settings@index');
Route::group(['prefix' => 'notifications'], function () {
Route::post('/read', 'Peertube\Myaccount\Notification@read');
Route::post('/readAll', 'Peertube\Myaccount\Notification@readAll');
Route::get('/{page?}', 'Peertube\Myaccount\Notification@index');
});
Route::any('/applications', 'Peertube\Myaccount\Applications@index');
Route::group(['prefix' => 'blocklist'], function () {
Route::any('/', 'Peertube\Myaccount\Blocklist\Accounts@index');
Route::any('/accounts', 'Peertube\Myaccount\Blocklist\Accounts@index');
Route::any('/servers', 'Peertube\Myaccount\Blocklist\Servers@index');
});
});
Route::any('/my-library', 'Peertube\Mylibrary@index');
Route::group(['prefix' => 'admin'], function () {