このアプリについてページ

このコミットが含まれているのは:
守矢諏訪子 2022-02-10 00:33:21 +09:00
コミット 4543a7e5cf
29個のファイルの変更987行の追加11行の削除

ファイルの表示

@ -5,6 +5,7 @@ use Illuminate\Support\Facades\DB;
class Engine {
public $user = 0;
public $version = '0.1';
public $err = '';
public $warn = '';
public $info = '';
@ -108,4 +109,4 @@ class Engine {
return array_merge((array)$grouppermblg[0], (array)$grouppermusr[0]);
}
}
}
}

ファイルの表示

@ -8,22 +8,56 @@ use App\Http\Controllers\Peertube\Common;
class About extends Common {
private $common;
private $res;
public function __construct () {
$this->common = new Common;
}
public function index () {
$res = [
$this->res = [
'page' => 'about',
'style' => 'dummy',
'style' => 'about',
'userinfo' => $this->common->user,
'version' => $this->common->version,
];
// $res['owner'] = $this->getOwner($id);
return view('pages.peertube.notyet', ['res' => $res]);
}
function getOwner ($id) {
return $this->ptapi('/api/v1/accounts/'.$id);
public function instance () {
$this->res['about'] = $this->getAbout();
$this->res['plugins'] = $this->getPlugins();
$this->res['stats'] = $this->getStats();
return view('pages.peertube.about.instance', ['res' => $this->res]);
}
public function lightpeer () {
$this->res['about'] = $this->getAbout();
return view('pages.peertube.about.lightpeer', ['res' => $this->res]);
}
public function follows () {
$this->res['follower'] = $this->getFollower();
$this->res['following'] = $this->getFollowing();
return view('pages.peertube.about.follows', ['res' => $this->res]);
}
function getAbout () {
return $this->ptapi('/api/v1/config/about');
}
function getPlugins () {
return $this->ptapi('/api/v1/plugins/peertube-plugin-custome-page/public-settings');
}
function getStats () {
return $this->ptapi('/api/v1/server/stats');
}
function getFollower () {
return $this->ptapi('/api/v1/server/followers?start=0&count=100&sort=-createdAt&state=accepted');
}
function getFollowing () {
return $this->ptapi('/api/v1/server/following?start=0&count=100&sort=-createdAt&state=accepted');
}
}

ファイルの表示

@ -72,6 +72,35 @@ function ptComeSrc ($v) {
return $res;
}
function ptGetCatId ($i) {
$res = '';
$i = (int)$i;
switch ($i) {
case 1: $res = "音楽"; break;
case 2: $res = "映画"; break;
case 3: $res = "乗り物"; break;
case 4: $res = "芸術"; break;
case 5: $res = "スポーツ"; break;
case 6: $res = "旅行"; break;
case 7: $res = "ゲーム"; break;
case 8: $res = "人物"; break;
case 9: $res = "コメディ"; break;
case 10: $res = "エンターテインメント"; break;
case 11: $res = "ニュースや政治"; break;
case 12: $res = "ハウツー"; break;
case 13: $res = "教育"; break;
case 14: $res = "アクティビズム"; break;
case 15: $res = "科学やテクノロジー"; break;
case 16: $res = "動物"; break;
case 17: $res = "子ども向け"; break;
case 18: $res = "食べ物"; break;
default: break;
}
return $res;
}
function ptFullHandle ($v) {
return $v->name.($v->host != str_replace('https://', '', env('PEER_URI')) ? '@'.$v->host : '');
}

260
public/css/about.css vendored ノーマルファイル
ファイルの表示

@ -0,0 +1,260 @@
.about-instance-title {
display: flex;
justify-content: space-between;
}
.about-instance-title .title {
font-size: 20px;
font-weight: 600;
}
.about-instance-title .contact-admin, .about-instance-title .contact-admin:active, .about-instance-title .contact-admin:focus {
color: #fff;
background-color: var(--mainColor);
}
.about-instance-title .contact-admin {
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;
height: -moz-fit-content;
height: fit-content;
}
.instance-badges {
font-size: 16px;
margin-bottom: 20px;
}
.instance-badges .badge.category {
background-color: var(--mainColor);
}
.instance-badges .badge {
margin-inline-end: 5px;
font-size: 12px;
font-weight: 600;
}
.badge-primary {
color: #fcfcfc;
background-color: #007bff;
}
.badge {
display: inline-block;
padding: .25em .4em;
font-size: 75%;
font-weight: 700;
line-height: 1.1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .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;
}
.badge-secondary {
color: #fcfcfc;
background-color: #6c757d;
}
.short-description {
margin-top: 10px;
}
.block {
margin-bottom: 75px;
font-size: 15px;
}
.offset-content .anchor {
top: -151px;
}
.anchor {
position: relative;
top: -70px;
}
.anchor-link {
position: relative;
}
.anchor-link .middle-title, .anchor-link .section-title {
display: inline-block;
}
.middle-title {
text-transform: uppercase;
color: var(--mainColor);
font-weight: 700;
font-size: 13px;
margin-top: 0;
margin-bottom: 25px;
}
.section-title {
font-weight: 600;
font-size: 16px !important;
margin-bottom: 5px;
display: flex;
align-items: center;
}
table caption {
caption-side: top;
font-size: 15px;
font-weight: 600;
color: var(--mainForegroundColor);
}
table {
font-size: 14px;
color: var(--mainForegroundColor);
border-collapse: collapse;
}
.table {
width: 100%;
margin-bottom: 1rem;
color: #212529;
}
table .label.label, table .sub-label.label {
font-weight: 600;
}
table td {
vertical-align: middle;
}
.table th, .table td {
padding: .75rem;
vertical-align: top;
border-top: 1px solid #dee2e6;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
*, *:before, *:after {
box-sizing: border-box;
}
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
h3 {
font-size: 1.25rem !important;
}
.row {
margin: 0!important;
}
.row {
display: flex;
flex-wrap: wrap;
}
@media (min-width: 1200px) {
.col-xl-3 {
flex: 0 0 25%;
max-width: 25%;
}
}
@media (min-width: 900px) {
.col-lg-4 {
flex: 0 0 33.33333333%;
max-width: 33.33333333%;
}
}
.col-6 {
flex: 0 0 50%;
max-width: 50%;
}
.col-uhd, .col-uhd-auto, .col-uhd-12, .col-uhd-11, .col-uhd-10, .col-uhd-9, .col-uhd-8, .col-uhd-7, .col-uhd-6, .col-uhd-5, .col-uhd-4, .col-uhd-3, .col-uhd-2, .col-uhd-1, .col-qhd, .col-qhd-auto, .col-qhd-12, .col-qhd-11, .col-qhd-10, .col-qhd-9, .col-qhd-8, .col-qhd-7, .col-qhd-6, .col-qhd-5, .col-qhd-4, .col-qhd-3, .col-qhd-2, .col-qhd-1, .col-fhd, .col-fhd-auto, .col-fhd-12, .col-fhd-11, .col-fhd-10, .col-fhd-9, .col-fhd-8, .col-fhd-7, .col-fhd-6, .col-fhd-5, .col-fhd-4, .col-fhd-3, .col-fhd-2, .col-fhd-1, .col-xxl, .col-xxl-auto, .col-xxl-12, .col-xxl-11, .col-xxl-10, .col-xxl-9, .col-xxl-8, .col-xxl-7, .col-xxl-6, .col-xxl-5, .col-xxl-4, .col-xxl-3, .col-xxl-2, .col-xxl-1, .col-xl, .col-xl-auto, .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-lg, .col-lg-auto, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-md, .col-md-auto, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-sm, .col-sm-auto, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col, .col-auto, .col-12, .col-11, .col-10, .col-9, .col-8, .col-7, .col-6, .col-5, .col-4, .col-3, .col-2, .col-1 {
position: relative;
width: 100%;
padding-right: 15px;
padding-left: 15px;
}
.stat {
text-align: center;
margin-bottom: 1em;
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-clip: border-box;
border: 1px solid rgba(0,0,0,.125);
border-radius: .25rem;
}
.stat .card-body {
z-index: 2;
}
.card-body {
flex: 1 1 auto;
min-height: 1px;
padding: 1.25rem;
}
.stat .stat-value {
font-size: 2.25em;
line-height: 1em;
margin: 0;
}
.stat .stat-label {
font-size: 1.15em;
margin: 0;
}
table .label.sub-label, table .sub-label.sub-label {
padding-inline-start: 30px;
font-weight: 400;
}
.subtitle {
font-size: 18px;
font-weight: 600;
margin-bottom: 20px;
}
a {
display: block;
width: -moz-fit-content;
width: fit-content;
margin-top: 3px;
}
.main-row.network {
min-height: calc(100vh - 110px) !important;
}

ファイルの表示

@ -0,0 +1,22 @@
<div class="margin-content offset-content">
<div class="row">
<div class="col-md-12 col-xl-6">
@include('pages.peertube.about.components.about.ippan')
@include('pages.peertube.about.components.about.admin')
@include('pages.peertube.about.components.about.creation')
@include('pages.peertube.about.components.about.mentelife')
@include('pages.peertube.about.components.about.business')
@include('pages.peertube.about.components.about.information')
@include('pages.peertube.about.components.about.moderation')
@include('pages.peertube.about.components.about.cock')
@include('pages.peertube.about.components.about.terms')
@include('pages.peertube.about.components.about.other')
</div>
<div class="col-md-12 col-xl-6">
@include('pages.peertube.about.components.features')
</div>
<div class="col">
@include('pages.peertube.about.components.statistics')
</div>
</div>
</div>

ファイルの表示

@ -0,0 +1,13 @@
<div id="administrators-and-sustainability" class="anchor"></div>
<a class="anchor-link ng-star-inserted" href="/about/instance#administrators-and-sustainability">
<h2 class="middle-title">管理者とインスタンスの持続可能性</h2>
</a>
<div class="block administrator ng-star-inserted">
<div id="administrators" class="anchor"></div>
<a class="anchor-link" href="/about/instance#administrators">
<h3 class="section-title">運営者について</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->administrator); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,9 @@
<div class="block business-model ng-star-inserted">
<div id="business-model" class="anchor"></div>
<a class="anchor-link" href="/about/instance#business-model">
<h3 class="section-title">このインスタンスを維持するための資金をどうやって確保しているか</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->businessModel); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,9 @@
<div class="block code-of-conduct ng-star-inserted">
<div id="code-of-conduct" class="anchor"></div>
<a class="anchor-link" href="/about/instance#code-of-conduct">
<h3 class="section-title">行動規範</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->codeOfConduct); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,9 @@
<div class="block creation-reason ng-star-inserted">
<div id="creation-reason" class="anchor"></div>
<a class="anchor-link" href="/about/instance#creation-reason">
<h3 class="section-title">なぜこのインスタンスを建てたのか</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->creationReason); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,102 @@
<div class="feature-table ng-star-inserted">
<table class="table ng-star-inserted" style="color: #fcfcfc;">
<caption>このインスタンスの特徴</caption>
<tr>
<th scope="row" class="label">PeerTubeバージョン</th>
<td class="value">{{ $conf->serverVersion }}</td>
</tr>
<tr>
<th scope="row" class="label">
<div>デフォルトのNSFW/センシティブな動画へのポリシー</div>
<div class="c-hand more-info">ユーザーは設定変更ができます</div>
</th>
@php
$censorloli = '不明';
if ($conf->instance->defaultNSFWPolicy == 'display') $censorloli = '表示する(ロリは安全)';
else if ($conf->instance->defaultNSFWPolicy == 'blur') $censorloli = '検閲する(自分で選べる)';
else if ($conf->instance->defaultNSFWPolicy == 'do_not_list') $censorloli = 'BANする(インスタンス主は子供)';
@endphp
<td class="value">{{ $censorloli }}</td>
</tr>
<tr>
<th scope="row" class="label">新規ユーザー登録</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->signup->allowed])
</tr>
<tr>
<th colspan="2" class="label">動画のアップロード</th>
</tr>
<tr>
<th scope="row" class="sub-label">複数の解像度へのトランスコーディング</th>
@include('pages.peertube.about.components.isfeature', ['check' => count($conf->transcoding->enabledResolutions) != 0])
</tr>
<tr>
<th scope="row" class="sub-label">動画のアップロード</th>
<td>
<span class="ng-star-inserted">{{ $conf->autoBlacklist->videos->ofUsers->enabled ? '手動で管理者に確認する事が必要です。' : '自動的に投稿されます' }}</span>
</td>
</tr>
<tr>
<th scope="row" class="sub-label">動画容量の制限</th>
<td class="value"> {{ $conf->user->videoQuota / 1024 / 1024 / 1024 }} GiB ({{ $conf->user->videoQuota / 1024 / 1024 / 1024 }} GiB per day)</td>
</tr>
<tr>
<th colspan="2" class="label">ライブ配信</th>
</tr>
<tr>
<th scope="row" class="sub-label">ライブ配信</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->live->enabled])
</tr>
<tr class="ng-star-inserted">
<th scope="row" class="sub-label">複数の解像度でのライブ配信のトランスコーディング</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->live->transcoding->enabled && count($conf->live->transcoding->enabledResolutions) > 1])
</tr>
<tr class="ng-star-inserted">
<th scope="row" class="sub-label">同時ライブ配信の最大</th>
<td>{{ $conf->live->maxUserLives }} ユーザー / {{ $conf->live->maxInstanceLives }} インスタンス </td>
</tr>
<tr>
<th colspan="2" class="label">インポート</th>
</tr>
<tr>
<th scope="row" class="sub-label">HTTP でのインポート (YouTube、Vimeo、ダイレクトURLなど)</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->import->videos->http->enabled])
</tr>
<tr>
<th scope="row" class="sub-label">Torrent でのインポート</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->import->videos->torrent->enabled])
</tr>
<tr>
<th colspan="2" class="label">プレーヤー</th>
</tr>
<tr>
<th scope="row" class="sub-label">P2P機能</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->tracker->enabled])
</tr>
<tr>
<th colspan="2" class="label">検索</th>
</tr>
<tr>
<th scope="row" class="sub-label">他のインスタンスのコンテンツ</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->search->searchIndex->enabled])
</tr>
<tr>
<th colspan="2" class="label">Plugins &amp; Themes</th>
</tr>
<tr>
<th scope="row" class="sub-label">Available themes</th>
<td>
@foreach ($conf->theme->registered as $them)
<span class="theme ng-star-inserted"> {{ $them->name }} </span>
@endforeach
</td>
</tr>
<tr>
<th scope="row" class="sub-label">Plugins enabled</th>
<td>
@foreach ($conf->plugin->registered as $plug)
<span class="plugin ng-star-inserted"> {{ $plug->name }} </span>
@endforeach
</td>
</tr>
</table>
</div>

ファイルの表示

@ -0,0 +1,13 @@
<div id="information" class="anchor"></div>
<a class="anchor-link ng-star-inserted" href="/about/instance#information">
<h2 class="middle-title">インスタンス情報</h2>
</a>
<div class="block description">
<div id="description" class="anchor"></div>
<a class="anchor-link" href="/about/instance#description">
<h3 _ngcontent-xxi-c196="" class="section-title">説明</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->description); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,202 @@
<my-about-instance class="ng-star-inserted">
<div class="row">
<div class="col-md-12 col-xl-6">
<div class="about-instance-title">
<h1 class="title">{{ $res['about']->instance->name }}について</h1>
<a class="contact-admin ng-star-inserted" href="/about/contact">Contact us</a>
</div>
<div class="instance-badges ng-star-inserted">
@foreach ($res['about']->instance->categories as $cat)
<span class="badge badge-primary category ng-star-inserted">{{ ptGetCatId($cat) }}</span>
@endforeach
@foreach ($res['about']->instance->languages as $lan)
<span class="badge badge-secondary language ng-star-inserted">{{ $lan }}</span>
@endforeach
</div>
<div class="short-description">
<div class="block short-description">{{ $res['about']->instance->shortDescription }}</div>
</div>
<div id="administrators-and-sustainability" class="anchor"></div>
<a class="anchor-link ng-star-inserted" href="/about/instance#administrators-and-sustainability">
<h2 class="middle-title">管理者とインスタンスの持続可能性</h2>
</a>
<div class="block administrator ng-star-inserted">
<div id="administrators" class="anchor"></div>
<a class="anchor-link" href="/about/instance#administrators">
<h3 class="section-title">運営者について</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->administrator); ?>
</div>
</div>
<div class="block creation-reason ng-star-inserted">
<div id="creation-reason" class="anchor"></div>
<a class="anchor-link" href="/about/instance#creation-reason">
<h3 class="section-title">なぜこのインスタンスを建てたのか</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->creationReason); ?>
</div>
</div>
<div class="block maintenance-lifetime ng-star-inserted">
<div id="maintenance-lifetime" class="anchor"></div>
<a class="anchor-link" href="/about/instance#maintenance-lifetime">
<h3 class="section-title">このインスタンスを運営者はどれぐらいの期間続ける予定か</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->maintenanceLifetime); ?>
</div>
</div>
<div class="block business-model ng-star-inserted">
<div id="business-model" class="anchor"></div>
<a class="anchor-link" href="/about/instance#business-model">
<h3 class="section-title">このインスタンスを維持するための資金をどうやって確保しているか</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->businessModel); ?>
</div>
</div>
<div id="information" class="anchor"></div>
<a class="anchor-link ng-star-inserted" href="/about/instance#information">
<h2 class="middle-title">インスタンス情報</h2>
</a>
<div class="block description">
<div id="description" class="anchor"></div>
<a class="anchor-link" href="/about/instance#description">
<h3 _ngcontent-xxi-c196="" class="section-title">説明</h3>
</a>
<my-custom-markup-container>
<div class="custom-markup-container">
<div>
<?php echo nl2br($res['about']->instance->description); ?>
</div>
</div>
</my-custom-markup-container>
</div>
<div id="moderation" class="anchor"></div>
<a class="anchor-link ng-star-inserted" href="/about/instance#moderation">
<h2 class="middle-title">モデレーション</h2>
</a>
<div class="block moderation-information ng-star-inserted">
<div id="moderation-information" class="anchor"></div>
<a class="anchor-link" href="/about/instance#moderation-information">
<h3 class="section-title">モデレーションについて</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->moderationInformation); ?>
</div>
</div>
<div class="block code-of-conduct ng-star-inserted">
<div id="code-of-conduct" class="anchor"></div>
<a class="anchor-link" href="/about/instance#code-of-conduct">
<h3 class="section-title">行動規範</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->codeOfConduct); ?>
</div>
</div>
<div class="block terms">
<div id="terms" class="anchor"></div>
<a class="anchor-link" href="/about/instance#terms">
<h3 class="section-title">利用規約</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->terms); ?>
</div>
</div>
@include('pages.peertube.about.components.about.other')
</div>
<div class="col-md-12 col-xl-6">
<h2 class="sr-only">特徴</h2>
</div>
@include('pages.peertube.about.components.about.features')
<div class="col">
<div id="statistics" class="anchor"></div>
<a class="anchor-link" href="/about/instance#statistics">
<h2 class="middle-title">統計</h2>
</a>
<my-instance-statistics>
<section class="ng-star-inserted">
<h3>ローカル</h3>
<div class="row">
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalUsers }}</p>
<p class="stat-label">ユーザー</p>
</div>
</div>
</div>
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalLocalVideos }}</p>
<p class="stat-label">動画</p>
</div>
</div>
</div>
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalLocalVideoViews }}</p>
<p class="stat-label">動画視聴回数</p>
</div>
</div>
</div>
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalLocalVideoComments }}</p>
<p class="stat-label">動画のコメント</p>
</div>
</div>
</div>
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalLocalVideoFilesSize / 1024 / 1024 / 1024 }} GiB</p>
<p class="stat-label">合計アップロードサイズ</p>
</div>
</div>
</div>
</div>
<h3>他インスタンスとの連合</h3>
<div class="row">
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalVideos }}</p>
<p class="stat-label">動画</p>
</div>
</div>
</div>
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalVideoComments }}</p>
<p class="stat-label">動画のコメント</p>
</div>
</div>
</div>
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalInstanceFollowers }}</p>
<p class="stat-label">フォロワー</p>
</div>
</div>
</div>
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $res['stats']->totalInstanceFollowing }}</p>
<p class="stat-label">フォロー</p>
</div>
</div>
</div>
</div>
</section>
</my-instance-statistics>
</div>
</div>
</my-about-instance>

ファイルの表示

@ -0,0 +1,15 @@
<div class="about-instance-title">
<h1 class="title">{{ $res['about']->instance->name }}について</h1>
<a class="contact-admin ng-star-inserted" href="/about/contact">打ち合わせ</a>
</div>
<div class="instance-badges ng-star-inserted">
@foreach ($res['about']->instance->categories as $cat)
<span class="badge badge-primary category ng-star-inserted">{{ ptGetCatId($cat) }}</span>
@endforeach
@foreach ($res['about']->instance->languages as $lan)
<span class="badge badge-secondary language ng-star-inserted">{{ $lan }}</span>
@endforeach
</div>
<div class="short-description">
<div class="block short-description">{{ $res['about']->instance->shortDescription }}</div>
</div>

ファイルの表示

@ -0,0 +1,9 @@
<div class="block maintenance-lifetime ng-star-inserted">
<div id="maintenance-lifetime" class="anchor"></div>
<a class="anchor-link" href="/about/instance#maintenance-lifetime">
<h3 class="section-title">このインスタンスを運営者はどれぐらいの期間続ける予定か</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->maintenanceLifetime); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,13 @@
<div id="moderation" class="anchor"></div>
<a class="anchor-link ng-star-inserted" href="/about/instance#moderation">
<h2 class="middle-title">モデレーション</h2>
</a>
<div class="block moderation-information ng-star-inserted">
<div id="moderation-information" class="anchor"></div>
<a class="anchor-link" href="/about/instance#moderation-information">
<h3 class="section-title">モデレーションについて</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->moderationInformation); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,5 @@
<div id="other-information" class="anchor"></div>
<a class="anchor-link ng-star-inserted" href="/about/instance#other-information">
<h2 class="middle-title">その他の情報</h2>
</a>
@include('pages.peertube.about.components.about.other.hardware')

ファイルの表示

@ -0,0 +1,9 @@
<div class="block hardware-information ng-star-inserted">
<div id="hardware-information" class="anchor"></div>
<a class="anchor-link" href="/about/instance#hardware-information">
<h3 class="section-title">ハードウェアについて</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->hardwareInformation); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,9 @@
<div class="block terms">
<div id="terms" class="anchor"></div>
<a class="anchor-link" href="/about/instance#terms">
<h3 class="section-title">利用規約</h3>
</a>
<div>
<?php echo nl2br($res['about']->instance->terms); ?>
</div>
</div>

ファイルの表示

@ -0,0 +1,110 @@
<h2 class="sr-only">特徴</h2>
<my-instance-features-table>
<div class="feature-table ng-star-inserted">
<table class="table ng-star-inserted" style="color: #fcfcfc;">
<caption>このインスタンスの特徴</caption>
<tr>
<th scope="row" class="label">PeerTubeバージョン</th>
<td class="value">{{ $conf->serverVersion }}</td>
</tr>
<tr>
<th scope="row" class="label">LightPeerバージョン</th>
<td class="value">{{ $res['version'] }}</td>
</tr>
<tr>
<th scope="row" class="label">
<div>デフォルトのNSFW/センシティブな動画へのポリシー</div>
<div class="c-hand more-info">ユーザーは設定変更ができます</div>
</th>
<td class="value">
@if ($conf->instance->defaultNSFWPolicy == 'display') 表示する(ロリは安全)
@elseif ($conf->instance->defaultNSFWPolicy == 'blur') 検閲する(自分で選べる)
@elseif ($conf->instance->defaultNSFWPolicy == 'do_not_list') BANする(インスタンス主は子供)
@else 不明
@endif
</td>
</tr>
<tr>
<th scope="row" class="label">新規ユーザー登録</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->signup->allowed])
</tr>
<tr>
<th colspan="2" class="label">動画のアップロード</th>
</tr>
<tr>
<th scope="row" class="sub-label">複数の解像度へのトランスコーディング</th>
@include('pages.peertube.about.components.isfeature', ['check' => count($conf->transcoding->enabledResolutions) != 0])
</tr>
<tr>
<th scope="row" class="sub-label">動画のアップロード</th>
<td>
<span class="ng-star-inserted">{{ $conf->autoBlacklist->videos->ofUsers->enabled ? '手動で管理者に確認する事が必要です。' : '自動的に投稿されます' }}</span>
</td>
</tr>
<tr>
<th scope="row" class="sub-label">動画容量の制限</th>
<td class="value"> {{ $conf->user->videoQuota / 1024 / 1024 / 1024 }} GiB ({{ $conf->user->videoQuota / 1024 / 1024 / 1024 }} GiB per day)</td>
</tr>
<tr>
<th colspan="2" class="label">ライブ配信</th>
</tr>
<tr>
<th scope="row" class="sub-label">ライブ配信</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->live->enabled])
</tr>
<tr class="ng-star-inserted">
<th scope="row" class="sub-label">複数の解像度でのライブ配信のトランスコーディング</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->live->transcoding->enabled && count($conf->live->transcoding->enabledResolutions) > 1])
</tr>
<tr class="ng-star-inserted">
<th scope="row" class="sub-label">同時ライブ配信の最大</th>
<td>{{ $conf->live->maxUserLives }} ユーザー / {{ $conf->live->maxInstanceLives }} インスタンス </td>
</tr>
<tr>
<th colspan="2" class="label">インポート</th>
</tr>
<tr>
<th scope="row" class="sub-label">HTTP でのインポート (YouTube、Vimeo、ダイレクトURLなど)</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->import->videos->http->enabled])
</tr>
<tr>
<th scope="row" class="sub-label">Torrent でのインポート</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->import->videos->torrent->enabled])
</tr>
<tr>
<th colspan="2" class="label">プレーヤー</th>
</tr>
<tr>
<th scope="row" class="sub-label">P2P機能</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->tracker->enabled])
</tr>
<tr>
<th colspan="2" class="label">検索</th>
</tr>
<tr>
<th scope="row" class="sub-label">他のインスタンスのコンテンツ</th>
@include('pages.peertube.about.components.isfeature', ['check' => $conf->search->searchIndex->enabled])
</tr>
<tr>
<th colspan="2" class="label">Plugins &amp; Themes</th>
</tr>
<tr>
<th scope="row" class="sub-label">Available themes</th>
<td>
@foreach ($conf->theme->registered as $them)
<span class="theme ng-star-inserted"> {{ $them->name }} </span>
@endforeach
</td>
</tr>
<tr>
<th scope="row" class="sub-label">Plugins enabled</th>
<td>
@foreach ($conf->plugin->registered as $plug)
<span class="plugin ng-star-inserted"> {{ $plug->name }} </span>
@endforeach
</td>
</tr>
</table>
</div>
</my-instance-features-table>

ファイルの表示

@ -0,0 +1 @@
<td class="value" style="color: #{{ $check ? '39cc0b' : 'ff0000' }}">{{ $check ? '可' : '不可' }}</td>

ファイルの表示

@ -0,0 +1,6 @@
<div class="margin-content offset-content">
PeerTube {{ $res['userinfo']['config']->serverVersion }}<a href="https://github.com/Chocobozzz/PeerTube" target="_blank">Chocobozzz</a>さんのプロジェクトです。<br />
PeerTubeは一番好みな動画SNSですが、強制JSに反対しますので、LightPeer {{ $res['version'] }}を作りました。<br /><br />
現在、LightPeerは動画というインスタンス向けフロントエンドですが、全てのインスタンスに対応予定です。
</div>

ファイルの表示

@ -0,0 +1,7 @@
<div class="sub-menu sub-menu-fixed">
<div class="links">
<a class="title-page title-page-about{{ $active == 'instance' ? ' active' : '' }}" href="/about/instance">インスタンス</a>
<a class="title-page title-page-about{{ $active == 'lightpeer' ? ' active' : '' }}" href="/about/lightpeer">LightPeer</a>
<a class="title-page title-page-about{{ $active == 'follows' ? ' active' : '' }}" href="/about/follows">ネットワーク</a>
</div>
</div>

ファイルの表示

@ -0,0 +1,17 @@
<div class="margin-content offset-content">
<div class="row">
<h1 class="sr-only">フォロー</h1>
<div class="col-xl-6 col-md-12">
<h2 class="subtitle">フォロワーのインスタンス({{ $res['follower']->total }})</h2>
@foreach ($res['follower']->data as $x)
<a target="_blank" rel="noopener noreferrer" href="https://{{ $x->follower->host }}" class="ng-star-inserted"> {{ $x->follower->host }} </a>
@endforeach
</div>
<div class="col-xl-6 col-md-12">
<h2 class="subtitle">フォローしてるインスタンス({{ $res['following']->total }})</h2>
@foreach ($res['following']->data as $y)
<a target="_blank" rel="noopener noreferrer" href="https://{{ $y->following->host }}" class="ng-star-inserted"> {{ $y->following->host }} </a>
@endforeach
</div>
</div>
</div>

ファイルの表示

@ -0,0 +1,8 @@
<div class="col-6 col-lg-4 col-xl-3">
<div class="card stat">
<div class="card-body">
<p class="stat-value">{{ $value }}</p>
<p class="stat-label">{{ $label }}</p>
</div>
</div>
</div>

ファイルの表示

@ -0,0 +1,21 @@
<div id="statistics" class="anchor"></div>
<a class="anchor-link" href="/about/instance#statistics">
<h2 class="middle-title">統計</h2>
</a>
<section class="ng-star-inserted">
<h3>ローカル</h3>
<div class="row">
@include('pages.peertube.about.components.statcard', ['value' => $res['stats']->totalUsers, 'label' => 'ユーザー'])
@include('pages.peertube.about.components.statcard', ['value' => $res['stats']->totalLocalVideos, 'label' => '動画'])
@include('pages.peertube.about.components.statcard', ['value' => $res['stats']->totalLocalVideoViews, 'label' => '動画視聴回数'])
@include('pages.peertube.about.components.statcard', ['value' => $res['stats']->totalLocalVideoComments, 'label' => '動画のコメント'])
@include('pages.peertube.about.components.statcard', ['value' => round($res['stats']->totalLocalVideoFilesSize / 1024 / 1024 / 1024, 1).' GiB', 'label' => '合計アップロードサイズ'])
</div>
<h3>他インスタンスとの連合</h3>
<div class="row">
@include('pages.peertube.about.components.statcard', ['value' => $res['stats']->totalVideos, 'label' => '動画'])
@include('pages.peertube.about.components.statcard', ['value' => $res['stats']->totalVideoComments, 'label' => '動画のコメント'])
@include('pages.peertube.about.components.statcard', ['value' => $res['stats']->totalInstanceFollowers, 'label' => 'フォロワー'])
@include('pages.peertube.about.components.statcard', ['value' => $res['stats']->totalInstanceFollowing, 'label' => 'フォロー'])
</div>
</section>

ファイルの表示

@ -0,0 +1,10 @@
@extends('layout')
@section('content')
<div id="content" tabindex="-1" class="main-col">
<div class="main-row network">
@include('pages.peertube.about.components.menu', ['active' => 'follows'])
@include('pages.peertube.about.components.network')
</div>
</div>
@endsection

ファイルの表示

@ -0,0 +1,16 @@
@extends('layout')
@php
$conf = $res['userinfo']['config'];
@endphp
@section('content')
<div id="content" tabindex="-1" class="main-col">
<div class="main-row">
<div class="row">
@include('pages.peertube.about.components.menu', ['active' => 'instance'])
@include('pages.peertube.about.components.about')
</div>
</div>
</div>
@endsection

ファイルの表示

@ -0,0 +1,12 @@
@extends('layout')
@section('content')
<div id="content" tabindex="-1" class="main-col">
<div class="main-row">
<div class="root">
@include('pages.peertube.about.components.menu', ['active' => 'lightpeer'])
@include('pages.peertube.about.components.lightpeer')
</div>
</div>
</div>
@endsection

ファイルの表示

@ -16,7 +16,12 @@ Route::group(['prefix' => 'login'], function () {
});
Route::any('/signup', 'Peertube\Signup@index');
Route::any('/about', 'Peertube\About@index');
Route::group(['prefix' => 'about'], function () {
Route::any('/', 'Peertube\About@instance');
Route::any('/instance', 'Peertube\About@instance');
Route::any('/lightpeer', 'Peertube\About@lightpeer');
Route::any('/follows', 'Peertube\About@follows');
});
Route::group(['prefix' => 'my-account'], function () {
Route::any('/', 'Peertube\Myaccount\Settings@index');