Internal fixes and cleanup
This commit is contained in:
parent
1176bc35fe
commit
94da0e46ac
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
namespace App\Constants;
|
namespace App\Constants;
|
||||||
|
|
||||||
class CacheMethods {
|
abstract class CacheMethods {
|
||||||
const JSON = 'json';
|
const JSON = 'json';
|
||||||
const REDIS = 'redis';
|
const REDIS = 'redis';
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use App\Helpers\ErrorHandler;
|
use App\Helpers\ErrorHandler;
|
||||||
use App\Helpers\Misc;
|
|
||||||
use App\Helpers\Wrappers;
|
use App\Helpers\Wrappers;
|
||||||
use App\Models\FeedTemplate;
|
use App\Models\FeedTemplate;
|
||||||
|
|
||||||
|
@ -11,8 +10,7 @@ class DiscoverController {
|
||||||
$api = Wrappers::api();
|
$api = Wrappers::api();
|
||||||
$feed = $api->discover();
|
$feed = $api->discover();
|
||||||
if ($feed->meta->success) {
|
if ($feed->meta->success) {
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('discover', new FeedTemplate('Discover', $feed));
|
||||||
$latte->render(Misc::getView('discover'), new FeedTemplate('Discover', $feed));
|
|
||||||
} else {
|
} else {
|
||||||
ErrorHandler::showMeta($feed->meta);
|
ErrorHandler::showMeta($feed->meta);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use App\Helpers\ErrorHandler;
|
use App\Helpers\ErrorHandler;
|
||||||
use App\Helpers\Misc;
|
|
||||||
use App\Helpers\Wrappers;
|
use App\Helpers\Wrappers;
|
||||||
use App\Models\VideoTemplate;
|
use App\Models\VideoTemplate;
|
||||||
|
|
||||||
|
@ -13,8 +12,7 @@ class EmbedController {
|
||||||
$video->feed();
|
$video->feed();
|
||||||
if ($video->ok()) {
|
if ($video->ok()) {
|
||||||
$data = $video->getFull();
|
$data = $video->getFull();
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('video', new VideoTemplate($data->feed->items[0], $data->info->detail, true));
|
||||||
$latte->render(Misc::getView('video'), new VideoTemplate($data->feed->items[0], $data->info->detail, true));
|
|
||||||
} else {
|
} else {
|
||||||
ErrorHandler::showMeta($video->error());
|
ErrorHandler::showMeta($video->error());
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,7 @@ class MusicController {
|
||||||
$music->feed($cursor);
|
$music->feed($cursor);
|
||||||
if ($music->ok()) {
|
if ($music->ok()) {
|
||||||
$data = $music->getFull();
|
$data = $music->getFull();
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('music', new FullTemplate('Music', $data));
|
||||||
$latte->render(Misc::getView('music'), new FullTemplate('Music', $data));
|
|
||||||
} else {
|
} else {
|
||||||
ErrorHandler::showMeta($music->error());
|
ErrorHandler::showMeta($music->error());
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,7 @@ use App\Models\SettingsTemplate;
|
||||||
|
|
||||||
class SettingsController {
|
class SettingsController {
|
||||||
static public function index() {
|
static public function index() {
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('settings', new SettingsTemplate());
|
||||||
$latte->render(Misc::getView('settings'), new SettingsTemplate());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function general() {
|
static public function general() {
|
||||||
|
|
|
@ -3,6 +3,7 @@ namespace App\Controllers;
|
||||||
|
|
||||||
use App\Helpers\ErrorHandler;
|
use App\Helpers\ErrorHandler;
|
||||||
use App\Helpers\Misc;
|
use App\Helpers\Misc;
|
||||||
|
use App\Helpers\UrlBuilder;
|
||||||
use App\Helpers\Wrappers;
|
use App\Helpers\Wrappers;
|
||||||
use App\Models\FullTemplate;
|
use App\Models\FullTemplate;
|
||||||
use App\Models\RSSTemplate;
|
use App\Models\RSSTemplate;
|
||||||
|
@ -15,8 +16,7 @@ class TagController {
|
||||||
$hashtag->feed($cursor);
|
$hashtag->feed($cursor);
|
||||||
if ($hashtag->ok()) {
|
if ($hashtag->ok()) {
|
||||||
$data = $hashtag->getFull();
|
$data = $hashtag->getFull();
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('tag', new FullTemplate($data->info->detail->title, $data));
|
||||||
$latte->render(Misc::getView('tag'), new FullTemplate($data->info->detail->title, $data));
|
|
||||||
} else {
|
} else {
|
||||||
ErrorHandler::showMeta($hashtag->error());
|
ErrorHandler::showMeta($hashtag->error());
|
||||||
}
|
}
|
||||||
|
@ -28,8 +28,8 @@ class TagController {
|
||||||
$hashtag->feed();
|
$hashtag->feed();
|
||||||
if ($hashtag->ok()) {
|
if ($hashtag->ok()) {
|
||||||
$data = $hashtag->getFull();
|
$data = $hashtag->getFull();
|
||||||
$latte = Wrappers::latte();
|
Misc::rss($name);
|
||||||
$latte->render(Misc::getView('rss'), new RSSTemplate($name, $data->info->detail->desc, "/tag/{$name}", $data->feed->items));
|
Wrappers::latte('rss', new RSSTemplate($name, $data->info->detail->desc, UrlBuilder::tag($name), $data->feed->items));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,8 +17,7 @@ class TrendingController {
|
||||||
|
|
||||||
$feed = $trending->getFeed();
|
$feed = $trending->getFeed();
|
||||||
if ($feed && $feed->meta->success) {
|
if ($feed && $feed->meta->success) {
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('trending', new FeedTemplate('Trending', $feed));
|
||||||
$latte->render(Misc::getView('trending'), new FeedTemplate('Trending', $feed));
|
|
||||||
} else {
|
} else {
|
||||||
ErrorHandler::showMeta($trending->error());
|
ErrorHandler::showMeta($trending->error());
|
||||||
}
|
}
|
||||||
|
@ -31,8 +30,8 @@ class TrendingController {
|
||||||
|
|
||||||
$feed = $trending->getFeed();
|
$feed = $trending->getFeed();
|
||||||
if ($feed && $feed->meta->success) {
|
if ($feed && $feed->meta->success) {
|
||||||
$latte = Wrappers::latte();
|
Misc::rss('Trending');
|
||||||
$latte->render(Misc::getView('rss'), new RSSTemplate('Trending', 'Trending on TikTok', '/trending', $feed->items));
|
Wrappers::latte('rss', new RSSTemplate('Trending', 'Trending on TikTok', Misc::url('/trending'), $feed->items));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ namespace App\Controllers;
|
||||||
|
|
||||||
use App\Helpers\ErrorHandler;
|
use App\Helpers\ErrorHandler;
|
||||||
use App\Helpers\Misc;
|
use App\Helpers\Misc;
|
||||||
|
use App\Helpers\UrlBuilder;
|
||||||
use App\Helpers\Wrappers;
|
use App\Helpers\Wrappers;
|
||||||
use App\Models\FullTemplate;
|
use App\Models\FullTemplate;
|
||||||
use App\Models\RSSTemplate;
|
use App\Models\RSSTemplate;
|
||||||
|
@ -20,8 +21,7 @@ class UserController {
|
||||||
ErrorHandler::showText(401, "Private account detected! Not supported");
|
ErrorHandler::showText(401, "Private account detected! Not supported");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('user', new FullTemplate($data->info->detail->nickname, $data));
|
||||||
$latte->render(Misc::getView('user'), new FullTemplate($data->info->detail->nickname, $data));
|
|
||||||
} else {
|
} else {
|
||||||
ErrorHandler::showMeta($user->error());
|
ErrorHandler::showMeta($user->error());
|
||||||
}
|
}
|
||||||
|
@ -33,8 +33,7 @@ class UserController {
|
||||||
$video->feed();
|
$video->feed();
|
||||||
if ($video->ok()) {
|
if ($video->ok()) {
|
||||||
$data = $video->getFull();
|
$data = $video->getFull();
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('video', new VideoTemplate($data->feed->items[0], $data->info->detail));
|
||||||
$latte->render(Misc::getView('video'), new VideoTemplate($data->feed->items[0], $data->info->detail));
|
|
||||||
} else {
|
} else {
|
||||||
ErrorHandler::showMeta($video->error());
|
ErrorHandler::showMeta($video->error());
|
||||||
}
|
}
|
||||||
|
@ -46,8 +45,8 @@ class UserController {
|
||||||
$user->feed();
|
$user->feed();
|
||||||
if ($user->ok()) {
|
if ($user->ok()) {
|
||||||
$data = $user->getFull();
|
$data = $user->getFull();
|
||||||
$latte = Wrappers::latte();
|
Misc::rss($username);
|
||||||
$latte->render(Misc::getView('rss'), new RSSTemplate($username, $data->info->detail->signature, '/@' . $username, $data->feed->items));
|
Wrappers::latte('rss', new RSSTemplate($username, $data->info->detail->signature, UrlBuilder::user($username), $data->feed->items));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,13 +7,11 @@ use TikScraper\Models\Meta;
|
||||||
class ErrorHandler {
|
class ErrorHandler {
|
||||||
static public function showMeta(Meta $meta) {
|
static public function showMeta(Meta $meta) {
|
||||||
http_response_code($meta->http_code);
|
http_response_code($meta->http_code);
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('error', new ErrorTemplate($meta->http_code, $meta->tiktok_msg, $meta->tiktok_code));
|
||||||
$latte->render(Misc::getView('error'), new ErrorTemplate($meta->http_code, $meta->tiktok_msg, $meta->tiktok_code));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function showText(int $code, string $msg) {
|
static public function showText(int $code, string $msg) {
|
||||||
http_response_code($code);
|
http_response_code($code);
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('error', new ErrorTemplate($code, $msg));
|
||||||
$latte->render(Misc::getView('error'), new ErrorTemplate($code, $msg));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,4 +24,11 @@ class Misc {
|
||||||
static public function getView(string $template): string {
|
static public function getView(string $template): string {
|
||||||
return __DIR__ . "/../../templates/views/{$template}.latte";
|
return __DIR__ . "/../../templates/views/{$template}.latte";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common method for rss feeds
|
||||||
|
*/
|
||||||
|
static public function rss(string $title) {
|
||||||
|
header('Content-Disposition: attachment; filename="' . $title . '.rss' . '"');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ class UrlBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function download(string $url, string $username, string $id, bool $watermark): string {
|
static public function download(string $url, string $username, string $id, bool $watermark): string {
|
||||||
// {path('/download?url=' . urlencode($playAddr) . '&id=' . $id . '&user=' . $uniqueId) . '&watermark=1'}
|
|
||||||
$down_url = Misc::url('/download?url=' . urlencode($url) . '&id=' . $id . '&user=' . $username);
|
$down_url = Misc::url('/download?url=' . urlencode($url) . '&id=' . $id . '&user=' . $username);
|
||||||
if ($watermark) $down_url .= '&watermark=1';
|
if ($watermark) $down_url .= '&watermark=1';
|
||||||
return $down_url;
|
return $down_url;
|
||||||
|
@ -17,6 +16,10 @@ class UrlBuilder {
|
||||||
return Misc::url('/@' . $username);
|
return Misc::url('/@' . $username);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public function tag(string $tag): string {
|
||||||
|
return Misc::url('/tag/' . $tag);
|
||||||
|
}
|
||||||
|
|
||||||
static public function video_internal(string $username, string $id): string {
|
static public function video_internal(string $username, string $id): string {
|
||||||
return Misc::url('/@' . $username . "/video/" . $id);
|
return Misc::url('/@' . $username . "/video/" . $id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,13 @@ namespace App\Helpers;
|
||||||
use App\Cache\JSONCache;
|
use App\Cache\JSONCache;
|
||||||
use App\Cache\RedisCache;
|
use App\Cache\RedisCache;
|
||||||
use App\Constants\CacheMethods;
|
use App\Constants\CacheMethods;
|
||||||
|
use App\Models\BaseTemplate;
|
||||||
|
|
||||||
class Wrappers {
|
class Wrappers {
|
||||||
/**
|
/**
|
||||||
* Setup of Latte template engine
|
* Setup of Latte template engine
|
||||||
*/
|
*/
|
||||||
static public function latte(): \Latte\Engine {
|
static public function latte(string $template, BaseTemplate $base) {
|
||||||
$latte = new \Latte\Engine;
|
$latte = new \Latte\Engine;
|
||||||
$cache_path = Misc::env('LATTE_CACHE', __DIR__ . '/../../cache/latte');
|
$cache_path = Misc::env('LATTE_CACHE', __DIR__ . '/../../cache/latte');
|
||||||
$latte->setTempDirectory($cache_path);
|
$latte->setTempDirectory($cache_path);
|
||||||
|
@ -19,6 +20,32 @@ class Wrappers {
|
||||||
$latte->addFunction('path', function (string $endpoint = ''): string {
|
$latte->addFunction('path', function (string $endpoint = ''): string {
|
||||||
return Misc::url($endpoint);
|
return Misc::url($endpoint);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Static assets
|
||||||
|
$latte->addFunction('static', function (string $type, string $file, bool $isVendor = false): string {
|
||||||
|
$endpoint = '';
|
||||||
|
switch ($type) {
|
||||||
|
case 'js':
|
||||||
|
$endpoint .= '/scripts';
|
||||||
|
break;
|
||||||
|
case 'css':
|
||||||
|
$endpoint .= '/styles';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new \Exception('Invalid static asset type');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($isVendor) $endpoint .= '/vendor';
|
||||||
|
|
||||||
|
$endpoint .= '/' . $file;
|
||||||
|
|
||||||
|
return Misc::url($endpoint);
|
||||||
|
});
|
||||||
|
|
||||||
|
$latte->addFunction('theme', function(): string {
|
||||||
|
return Cookies::theme();
|
||||||
|
});
|
||||||
|
|
||||||
// Version being used
|
// Version being used
|
||||||
$latte->addFunction('version_frontend', function (): string {
|
$latte->addFunction('version_frontend', function (): string {
|
||||||
return \Composer\InstalledVersions::getVersion('pablouser1/proxitok');
|
return \Composer\InstalledVersions::getVersion('pablouser1/proxitok');
|
||||||
|
@ -26,8 +53,20 @@ class Wrappers {
|
||||||
$latte->addFunction('version_scraper', function (): string {
|
$latte->addFunction('version_scraper', function (): string {
|
||||||
return \Composer\InstalledVersions::getVersion('pablouser1/tikscraper');
|
return \Composer\InstalledVersions::getVersion('pablouser1/tikscraper');
|
||||||
});
|
});
|
||||||
$latte->addFunction('theme', function(): string {
|
|
||||||
return Cookies::theme();
|
// https://stackoverflow.com/a/36365553
|
||||||
|
$latte->addFunction('number', function (float $x) {
|
||||||
|
if($x > 1000) {
|
||||||
|
$x_number_format = number_format($x);
|
||||||
|
$x_array = explode(',', $x_number_format);
|
||||||
|
$x_parts = array('K', 'M', 'B', 'T');
|
||||||
|
$x_count_parts = count($x_array) - 1;
|
||||||
|
$x_display = $x;
|
||||||
|
$x_display = $x_array[0] . ((int) $x_array[1][0] !== 0 ? '.' . $x_array[1][0] : '');
|
||||||
|
$x_display .= $x_parts[$x_count_parts - 1];
|
||||||
|
return $x_display;
|
||||||
|
}
|
||||||
|
return $x;
|
||||||
});
|
});
|
||||||
|
|
||||||
// UrlBuilder
|
// UrlBuilder
|
||||||
|
@ -46,21 +85,8 @@ class Wrappers {
|
||||||
$latte->addFunction('url_download', function (string $url, string $username, string $id, bool $watermark): string {
|
$latte->addFunction('url_download', function (string $url, string $username, string $id, bool $watermark): string {
|
||||||
return UrlBuilder::download($url, $username, $id, $watermark);
|
return UrlBuilder::download($url, $username, $id, $watermark);
|
||||||
});
|
});
|
||||||
// https://stackoverflow.com/a/36365553
|
|
||||||
$latte->addFunction('number', function (float $x) {
|
$latte->render(Misc::getView($template), $base);
|
||||||
if($x > 1000) {
|
|
||||||
$x_number_format = number_format($x);
|
|
||||||
$x_array = explode(',', $x_number_format);
|
|
||||||
$x_parts = array('K', 'M', 'B', 'T');
|
|
||||||
$x_count_parts = count($x_array) - 1;
|
|
||||||
$x_display = $x;
|
|
||||||
$x_display = $x_array[0] . ((int) $x_array[1][0] !== 0 ? '.' . $x_array[1][0] : '');
|
|
||||||
$x_display .= $x_parts[$x_count_parts - 1];
|
|
||||||
return $x_display;
|
|
||||||
}
|
|
||||||
return $x;
|
|
||||||
});
|
|
||||||
return $latte;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -6,7 +6,6 @@ namespace App\Models;
|
||||||
*/
|
*/
|
||||||
class BaseTemplate {
|
class BaseTemplate {
|
||||||
public string $title;
|
public string $title;
|
||||||
public string $version;
|
|
||||||
|
|
||||||
function __construct(string $title) {
|
function __construct(string $title) {
|
||||||
$this->title = $title;
|
$this->title = $title;
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
class RSSTemplate {
|
class RSSTemplate extends BaseTemplate {
|
||||||
public string $title;
|
|
||||||
public string $desc;
|
public string $desc;
|
||||||
public string $link;
|
public string $link;
|
||||||
public array $items;
|
public array $items;
|
||||||
|
|
||||||
function __construct(string $title, string $desc, string $link, array $items) {
|
function __construct(string $title, string $desc, string $link, array $items) {
|
||||||
$this->title = $title;
|
parent::__construct($title);
|
||||||
$this->desc = $desc;
|
$this->desc = $desc;
|
||||||
$this->link = $link;
|
$this->link = $link;
|
||||||
$this->items = $items;
|
$this->items = $items;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "pablouser1/proxitok",
|
"name": "pablouser1/proxitok",
|
||||||
"description": "An alternative frontend for TikTok",
|
"description": "An alternative frontend for TikTok",
|
||||||
"version": "2.4.2.3",
|
"version": "2.4.3.0",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"authors": [
|
"authors": [
|
||||||
|
|
28
composer.lock
generated
28
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "0b40437551f24ae25f01113a85564867",
|
"content-hash": "7dc0bdf9fcecc4c3a73fb2fb1eece6f4",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bramus/router",
|
"name": "bramus/router",
|
||||||
|
@ -117,22 +117,22 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "latte/latte",
|
"name": "latte/latte",
|
||||||
"version": "v2.11.5",
|
"version": "v2.11.6",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nette/latte.git",
|
"url": "https://github.com/nette/latte.git",
|
||||||
"reference": "89e647e51213af8a270fe9903b8735a2f6c83ad1"
|
"reference": "af4dbb23a6044b1cf4904830a9b00246318c93d4"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nette/latte/zipball/89e647e51213af8a270fe9903b8735a2f6c83ad1",
|
"url": "https://api.github.com/repos/nette/latte/zipball/af4dbb23a6044b1cf4904830a9b00246318c93d4",
|
||||||
"reference": "89e647e51213af8a270fe9903b8735a2f6c83ad1",
|
"reference": "af4dbb23a6044b1cf4904830a9b00246318c93d4",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-tokenizer": "*",
|
"ext-tokenizer": "*",
|
||||||
"php": ">=7.1 <8.2"
|
"php": ">=7.1 <8.3"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"nette/application": "<2.4.1"
|
"nette/application": "<2.4.1"
|
||||||
|
@ -195,9 +195,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/nette/latte/issues",
|
"issues": "https://github.com/nette/latte/issues",
|
||||||
"source": "https://github.com/nette/latte/tree/v2.11.5"
|
"source": "https://github.com/nette/latte/tree/v2.11.6"
|
||||||
},
|
},
|
||||||
"time": "2022-06-26T10:12:18+00:00"
|
"time": "2022-11-04T14:53:52+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "m1/env",
|
"name": "m1/env",
|
||||||
|
@ -263,16 +263,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pablouser1/tikscraper",
|
"name": "pablouser1/tikscraper",
|
||||||
"version": "v2.3.2.0",
|
"version": "v2.3.2.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/pablouser1/TikScraperPHP.git",
|
"url": "https://github.com/pablouser1/TikScraperPHP.git",
|
||||||
"reference": "4b3c5952e1f9e126e2e1c80d006e70e759338c45"
|
"reference": "b67340e62cda1fb117b518e4f812e327aec094d6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/pablouser1/TikScraperPHP/zipball/4b3c5952e1f9e126e2e1c80d006e70e759338c45",
|
"url": "https://api.github.com/repos/pablouser1/TikScraperPHP/zipball/b67340e62cda1fb117b518e4f812e327aec094d6",
|
||||||
"reference": "4b3c5952e1f9e126e2e1c80d006e70e759338c45",
|
"reference": "b67340e62cda1fb117b518e4f812e327aec094d6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -305,9 +305,9 @@
|
||||||
"description": "Get data from TikTok API",
|
"description": "Get data from TikTok API",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/pablouser1/TikScraperPHP/issues",
|
"issues": "https://github.com/pablouser1/TikScraperPHP/issues",
|
||||||
"source": "https://github.com/pablouser1/TikScraperPHP/tree/v2.3.2.0"
|
"source": "https://github.com/pablouser1/TikScraperPHP/tree/v2.3.2.1"
|
||||||
},
|
},
|
||||||
"time": "2022-10-24T18:36:21+00:00"
|
"time": "2022-11-04T18:45:45+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "php-webdriver/webdriver",
|
"name": "php-webdriver/webdriver",
|
||||||
|
|
10
routes.php
10
routes.php
|
@ -2,7 +2,6 @@
|
||||||
/** @var \Bramus\Router\Router $router */
|
/** @var \Bramus\Router\Router $router */
|
||||||
|
|
||||||
use App\Helpers\ErrorHandler;
|
use App\Helpers\ErrorHandler;
|
||||||
use App\Helpers\Misc;
|
|
||||||
use App\Helpers\Wrappers;
|
use App\Helpers\Wrappers;
|
||||||
use App\Models\BaseTemplate;
|
use App\Models\BaseTemplate;
|
||||||
|
|
||||||
|
@ -11,18 +10,15 @@ $router->set404(function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
$router->get('/', function () {
|
$router->get('/', function () {
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('home', new BaseTemplate('Home'));
|
||||||
$latte->render(Misc::getView('home'), new BaseTemplate('Home'));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$router->get('/about', function () {
|
$router->get('/about', function () {
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('about', new BaseTemplate('About'));
|
||||||
$latte->render(Misc::getView('about'), new BaseTemplate('About'));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$router->get('/verify', function () {
|
$router->get('/verify', function () {
|
||||||
$latte = Wrappers::latte();
|
Wrappers::latte('verify', new BaseTemplate('verify'));
|
||||||
$latte->render(Misc::getView('verify'), new BaseTemplate('Verify'));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$router->get('/stream', 'ProxyController@stream');
|
$router->get('/stream', 'ProxyController@stream');
|
||||||
|
|
|
@ -16,5 +16,8 @@
|
||||||
@import "./node_modules/css.gg/icons/scss/share.scss";
|
@import "./node_modules/css.gg/icons/scss/share.scss";
|
||||||
@import "./node_modules/css.gg/icons/scss/software-download.scss";
|
@import "./node_modules/css.gg/icons/scss/software-download.scss";
|
||||||
|
|
||||||
|
@import "./node_modules/css.gg/icons/scss/lock.scss";
|
||||||
|
@import "./node_modules/css.gg/icons/scss/lock-unlock.scss";
|
||||||
|
|
||||||
// Video
|
// Video
|
||||||
@import "./node_modules/css.gg/icons/scss/music.scss";
|
@import "./node_modules/css.gg/icons/scss/music.scss";
|
||||||
|
|
2
styles/vendor/cssgg.min.css
vendored
2
styles/vendor/cssgg.min.css
vendored
File diff suppressed because one or more lines are too long
2
styles/vendor/cssgg.min.css.map
vendored
2
styles/vendor/cssgg.min.css.map
vendored
|
@ -1 +1 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../scss/node_modules/css.gg/icons/scss/home.scss","../../scss/node_modules/css.gg/icons/scss/options.scss","../../scss/node_modules/css.gg/icons/scss/info.scss","../../scss/node_modules/css.gg/icons/scss/code-slash.scss","../../scss/node_modules/css.gg/icons/scss/search.scss","../../scss/node_modules/css.gg/icons/scss/feed.scss","../../scss/node_modules/css.gg/icons/scss/eye.scss","../../scss/node_modules/css.gg/icons/scss/heart.scss","../../scss/node_modules/css.gg/icons/scss/comment.scss","../../scss/node_modules/css.gg/icons/scss/share.scss","../../scss/node_modules/css.gg/icons/scss/software-download.scss","../../scss/node_modules/css.gg/icons/scss/music.scss"],"names":[],"mappings":"AAAA,SACE,yLACA,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,aACA,gBACA,4BACA,2BACA,6BACA,4BACA,mBAEA,gBACE,WACA,cACA,sBACA,kBAGF,iBACE,WACA,cACA,sBACA,kBACA,qBACA,sBACA,2BACA,wBACA,SACA,kBACA,WACA,YACA,OAGF,gBACE,UACA,YACA,iBACA,oBACA,4BACA,6BACA,gBACA,SACA,SCjDJ,YACI,sBACA,kBACA,cACA,+BACA,WACA,WACA,qCAEA,mBACE,WACA,cACA,sBACA,kBACA,UACA,WACA,iBACA,mBAGF,oBACE,WACA,cACA,sBACA,kBACA,UACA,WACA,iBACA,mBACA,SACA,UAGF,mBACE,YACA,WCnCN,SACI,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,mBAEA,iCACE,WACA,cACA,sBACA,kBACA,kBACA,UACA,wBACA,SAGF,gBACE,WACA,WAGF,iBACE,WACA,QC5BN,eACI,cACA,kBACA,sBACA,6CACA,UACA,YACA,wBAEA,sBACE,WACA,cACA,sBACA,kBACA,UACA,WACA,yBAGF,uBACE,WACA,cACA,sBACA,kBACA,UACA,WACA,yBACA,sBACA,qBACA,UACA,QAGF,sBACE,uBACA,wBACA,WACA,QCrCN,WACI,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,mBACA,iBACA,gBAEA,kBACE,WACA,cACA,sBACA,kBACA,kBACA,UACA,WACA,wBACA,yBACA,SACA,UCvBN,SACI,cACA,sBACA,wBACA,sBASA,iBACA,gBACA,kBACA,+BACA,UACA,WACA,kBAbA,iCACE,cACA,sBACA,wBACA,sBAWF,iCACE,WACA,kBACA,kBACA,WACA,WACA,QACA,SACA,WAGF,gBACE,UACA,QACA,WCnCN,QACI,kBACA,cACA,+BACA,WACA,YACA,iCACA,gCACA,gBACA,sBAEA,+BACE,WACA,cACA,oBACA,kBACA,sBAGF,eACE,QACA,8CACA,WACA,YAGF,gBACE,UACA,WACA,iBACA,WACA,SC/BN,UACI,iBACA,6BACA,8BACA,WACA,WACA,gBAeA,sBACA,kBACA,gHACA,cAhBA,iBACE,iBACA,6BACA,8BACA,WACA,WACA,gBACA,WACA,cACA,sBACA,kBAQF,kBACE,WACA,cACA,sBACA,kBAGF,iBACE,WACA,wBACA,QAGF,kBACE,WACA,YACA,sBACA,wBACA,UACA,QC7CN,YACI,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,gBACA,0CAEA,mBACE,WACA,cACA,sBACA,kBACA,UAGF,oBACE,WACA,cACA,sBACA,kBACA,UACA,iBACA,+BACA,+BACA,UACA,YACA,WAGF,mBACE,WACA,wBACA,qBACA,SACA,QCtCN,UACI,sBACA,kBACA,cACA,+BACA,UACA,WACA,wBACA,oBACA,kCAEA,iBACE,WACA,cACA,sBACA,kBACA,kBACA,WACA,WACA,wBACA,SAGF,kBACE,WACA,cACA,sBACA,kBACA,kBACA,WACA,WACA,wBACA,SACA,MACA,yBAGF,iBACE,SACA,wBCvCN,sBACI,sBACA,kBACA,cACA,+BACA,WACA,WACA,iBACA,aACA,8BACA,+BACA,eAEA,6BACE,WACA,cACA,sBACA,kBACA,UACA,WACA,sBACA,wBACA,yBACA,SACA,WAGF,8BACE,WACA,cACA,sBACA,kBACA,kBACA,UACA,YACA,wBACA,SACA,WCrCN,UACI,cACA,sBACA,iBAQA,2BACA,4BACA,gBACA,gBACA,kBACA,6CACA,WACA,YAbA,mCACE,cACA,sBACA,iBAYF,mCACE,WACA,kBACA,UACA,WACA,QACA,UACA,uBACA,mBAGF,iBACE","file":"cssgg.min.css"}
|
{"version":3,"sourceRoot":"","sources":["../../scss/node_modules/css.gg/icons/scss/home.scss","../../scss/node_modules/css.gg/icons/scss/options.scss","../../scss/node_modules/css.gg/icons/scss/info.scss","../../scss/node_modules/css.gg/icons/scss/code-slash.scss","../../scss/node_modules/css.gg/icons/scss/search.scss","../../scss/node_modules/css.gg/icons/scss/feed.scss","../../scss/node_modules/css.gg/icons/scss/eye.scss","../../scss/node_modules/css.gg/icons/scss/heart.scss","../../scss/node_modules/css.gg/icons/scss/comment.scss","../../scss/node_modules/css.gg/icons/scss/share.scss","../../scss/node_modules/css.gg/icons/scss/software-download.scss","../../scss/node_modules/css.gg/icons/scss/lock.scss","../../scss/node_modules/css.gg/icons/scss/lock-unlock.scss","../../scss/node_modules/css.gg/icons/scss/music.scss"],"names":[],"mappings":"AAAA,SACE,yLACA,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,aACA,gBACA,4BACA,2BACA,6BACA,4BACA,mBAEA,gBACE,WACA,cACA,sBACA,kBAGF,iBACE,WACA,cACA,sBACA,kBACA,qBACA,sBACA,2BACA,wBACA,SACA,kBACA,WACA,YACA,OAGF,gBACE,UACA,YACA,iBACA,oBACA,4BACA,6BACA,gBACA,SACA,SCjDJ,YACI,sBACA,kBACA,cACA,+BACA,WACA,WACA,qCAEA,mBACE,WACA,cACA,sBACA,kBACA,UACA,WACA,iBACA,mBAGF,oBACE,WACA,cACA,sBACA,kBACA,UACA,WACA,iBACA,mBACA,SACA,UAGF,mBACE,YACA,WCnCN,SACI,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,mBAEA,iCACE,WACA,cACA,sBACA,kBACA,kBACA,UACA,wBACA,SAGF,gBACE,WACA,WAGF,iBACE,WACA,QC5BN,eACI,cACA,kBACA,sBACA,6CACA,UACA,YACA,wBAEA,sBACE,WACA,cACA,sBACA,kBACA,UACA,WACA,yBAGF,uBACE,WACA,cACA,sBACA,kBACA,UACA,WACA,yBACA,sBACA,qBACA,UACA,QAGF,sBACE,uBACA,wBACA,WACA,QCrCN,WACI,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,mBACA,iBACA,gBAEA,kBACE,WACA,cACA,sBACA,kBACA,kBACA,UACA,WACA,wBACA,yBACA,SACA,UCvBN,SACI,cACA,sBACA,wBACA,sBASA,iBACA,gBACA,kBACA,+BACA,UACA,WACA,kBAbA,iCACE,cACA,sBACA,wBACA,sBAWF,iCACE,WACA,kBACA,kBACA,WACA,WACA,QACA,SACA,WAGF,gBACE,UACA,QACA,WCnCN,QACI,kBACA,cACA,+BACA,WACA,YACA,iCACA,gCACA,gBACA,sBAEA,+BACE,WACA,cACA,oBACA,kBACA,sBAGF,eACE,QACA,8CACA,WACA,YAGF,gBACE,UACA,WACA,iBACA,WACA,SC/BN,UACI,iBACA,6BACA,8BACA,WACA,WACA,gBAeA,sBACA,kBACA,gHACA,cAhBA,iBACE,iBACA,6BACA,8BACA,WACA,WACA,gBACA,WACA,cACA,sBACA,kBAQF,kBACE,WACA,cACA,sBACA,kBAGF,iBACE,WACA,wBACA,QAGF,kBACE,WACA,YACA,sBACA,wBACA,UACA,QC7CN,YACI,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,gBACA,0CAEA,mBACE,WACA,cACA,sBACA,kBACA,UAGF,oBACE,WACA,cACA,sBACA,kBACA,UACA,iBACA,+BACA,+BACA,UACA,YACA,WAGF,mBACE,WACA,wBACA,qBACA,SACA,QCtCN,UACI,sBACA,kBACA,cACA,+BACA,UACA,WACA,wBACA,oBACA,kCAEA,iBACE,WACA,cACA,sBACA,kBACA,kBACA,WACA,WACA,wBACA,SAGF,kBACE,WACA,cACA,sBACA,kBACA,kBACA,WACA,WACA,wBACA,SACA,MACA,yBAGF,iBACE,SACA,wBCvCN,sBACI,sBACA,kBACA,cACA,+BACA,WACA,WACA,iBACA,aACA,8BACA,+BACA,eAEA,6BACE,WACA,cACA,sBACA,kBACA,UACA,WACA,sBACA,wBACA,yBACA,SACA,WAGF,8BACE,WACA,cACA,sBACA,kBACA,kBACA,UACA,YACA,wBACA,SACA,WCrCN,SACI,sBACA,kBACA,cACA,+BACA,WACA,YACA,iBACA,4BACA,2BACA,4BACA,iBAEA,gBACE,WACA,cACA,sBACA,kBACA,WACA,YACA,kBACA,+BACA,qBACA,UACA,QCxBN,gBACI,sBACA,kBACA,cACA,+BACA,WACA,WACA,iBACA,8BACA,6BACA,4BACA,iBACA,iBAEA,+CACE,WACA,cACA,sBACA,kBAGF,uBACE,+BACA,qBACA,WACA,YACA,kBACA,UACA,SAGF,wBACE,UACA,WACA,wBACA,UACA,QCpCN,UACI,cACA,sBACA,iBAQA,2BACA,4BACA,gBACA,gBACA,kBACA,6CACA,WACA,YAbA,mCACE,cACA,sBACA,iBAYF,mCACE,WACA,kBACA,UACA,WACA,QACA,UACA,uBACA,mBAGF,iBACE","file":"cssgg.min.css"}
|
|
@ -13,7 +13,7 @@
|
||||||
{if isset($has_rss)}
|
{if isset($has_rss)}
|
||||||
<link rel="alternate" type="application/rss+xml" title="{$title}" href="{$_SERVER['REQUEST_URI'] . '/rss'}" />
|
<link rel="alternate" type="application/rss+xml" title="{$title}" href="{$_SERVER['REQUEST_URI'] . '/rss'}" />
|
||||||
{/if}
|
{/if}
|
||||||
<link rel="stylesheet" href="{path('/styles/vendor/cssgg.min.css')}">
|
<link rel="stylesheet" href="{static('css', 'cssgg.min.css', true)}">
|
||||||
<link rel="stylesheet" href="{path('/styles/vendor/bulma.min.css')}">
|
<link rel="stylesheet" href="{static('css', 'bulma.min.css', true)}">
|
||||||
<title>{$title} - ProxiTok</title>
|
<title>{$title} - ProxiTok</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -26,4 +26,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
<script src="{path('/scripts/navbar.js')}"></script>
|
<script src="{static('js', 'navbar.js')}"></script>
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
{embed '../form.latte', path: '/settings/misc', method: 'POST', submit: true}
|
|
||||||
{block fields}
|
|
||||||
<div class="field">
|
|
||||||
<label class="label">Enable service worker</label>
|
|
||||||
<div class="control">
|
|
||||||
<label class="radio">
|
|
||||||
<input type="radio" name="misc-sw" value="yes" n:attr="checked => $isServiceWorker" />
|
|
||||||
<span>Yes</span>
|
|
||||||
</label>
|
|
||||||
<label class="radio">
|
|
||||||
<input type="radio" name="misc-sw" value="no" n:attr="checked => !$isServiceWorker" />
|
|
||||||
<span>No</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<p class="help">This can be used to install the PWA version of ProxiTok</p>
|
|
||||||
</div>
|
|
||||||
{/block}
|
|
||||||
{/embed}
|
|
|
@ -1,4 +1,4 @@
|
||||||
<link rel="stylesheet" href="{path('/styles/themes/card.css')}">
|
<link rel="stylesheet" href="{static('css', 'themes/card.css')}">
|
||||||
<noscript>JavaScript is required for this section to work!</noscript>
|
<noscript>JavaScript is required for this section to work!</noscript>
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="columns is-multiline is-vcentered">
|
<div class="columns is-multiline is-vcentered">
|
||||||
|
@ -67,4 +67,4 @@
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="{path('/scripts/themes/card.js')}"></script>
|
<script src="{static('js', 'themes/card.js')}"></script>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="dropdown is-hoverable">
|
<div class="dropdown is-hoverable">
|
||||||
<div class="dropdown-trigger">
|
<div class="dropdown-trigger">
|
||||||
<button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
|
<button class="button is-success" aria-haspopup="true" aria-controls="dropdown-menu">
|
||||||
{include '../../icon.latte', icon: 'software-download', text: 'Download'}
|
{include '../../icon.latte', icon: 'software-download', text: 'Download'}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,5 +1,17 @@
|
||||||
{do $endpoint = '/@' . $uniqueId . '/video/' . $id}
|
<div class="dropdown is-hoverable">
|
||||||
<div class="buttons is-centered">
|
<div class="dropdown-trigger">
|
||||||
<a class="button is-success is-small" href="{url_video_internal($uniqueId, $id)}">Instance Link</a>
|
<button class="button is-primary" aria-haspopup="true" aria-controls="dropdown-menu">
|
||||||
<a class="button is-danger is-small" href="{url_video_external($uniqueId, $id)}">Original Link</a>
|
{include '../../icon.latte', icon: 'share', text: 'Share'}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="dropdown-menu" role="menu">
|
||||||
|
<div class="dropdown-content">
|
||||||
|
<a href="{url_video_internal($uniqueId, $id)}" class="dropdown-item has-text-success">
|
||||||
|
{include '../../icon.latte', icon: 'lock', text: 'Instance link'}
|
||||||
|
</a>
|
||||||
|
<a href="{url_video_external($uniqueId, $id)}" class="dropdown-item has-text-warning">
|
||||||
|
{include '../../icon.latte', icon: 'lock-unlock', text: 'Original Link'}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<div class="tags">
|
<div class="tags">
|
||||||
{foreach $challenges as $challenge}
|
{foreach $challenges as $challenge}
|
||||||
<a class="tag is-rounded is-info" href="{path('/tag/' . $challenge->title)}">{$challenge->title}</a>
|
<a class="tag is-rounded" href="{path('/tag/' . $challenge->title)}">#{$challenge->title}</a>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,18 +1,16 @@
|
||||||
{contentType application/rss+xml}
|
{contentType application/rss+xml}
|
||||||
{do header('Content-Disposition: attachment; filename="' . $title . '.rss' . '"')}
|
|
||||||
{var $full_link = path($link)}
|
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
<channel>
|
<channel>
|
||||||
<title>{$title}</title>
|
<title>{$title}</title>
|
||||||
<description><![CDATA[{$desc}]]></description>
|
<description><![CDATA[{$desc}]]></description>
|
||||||
<link>{$full_link}</link>
|
<link>{$link}</link>
|
||||||
<atom:link href="{$full_link . '/rss'}" rel="self" type="application/rss+xml"></atom:link>
|
<atom:link href="{$link . '/rss'}" rel="self" type="application/rss+xml"></atom:link>
|
||||||
{foreach $items as $item}
|
{foreach $items as $item}
|
||||||
<item>
|
<item>
|
||||||
<title>{$item->desc}</title>
|
<title>{$item->desc}</title>
|
||||||
<description><![CDATA[<p>{$item->desc}</p><video controls="controls" preload="auto" src="{path('/stream?url=' . urlencode($item->video->playAddr))}"></video>]]></description>
|
<description><![CDATA[<p>{$item->desc}</p><video controls="controls" preload="auto" src="{url_stream($item->video->playAddr)}"></video>]]></description>
|
||||||
<link>{path('/@' . $item->author->uniqueId . '/video/' . $item->id)}</link>
|
<link>{url_video_internal($item->author->uniqueId, $item->id)}</link>
|
||||||
<pubDate>{date('r', $item->createTime)}</pubDate>
|
<pubDate>{date('r', $item->createTime)}</pubDate>
|
||||||
<guid isPermaLink="false">{$item->id}</guid>
|
<guid isPermaLink="false">{$item->id}</guid>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
{block header}
|
{block header}
|
||||||
{if $data->info->detail->profileThumb !== ''}
|
{if $data->info->detail->profileThumb !== ''}
|
||||||
<figure class="figure is-96x96">
|
<figure class="figure is-96x96">
|
||||||
<img src="{path('/stream?url=' . urlencode($data->info->detail->profileThumb))}" />
|
<img src="{url_stream($data->info->detail->profileThumb)}" />
|
||||||
</figure>
|
</figure>
|
||||||
{/if}
|
{/if}
|
||||||
<p class="title">{$data->info->detail->title}</p>
|
<p class="title">{$data->info->detail->title}</p>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
{block header}
|
{block header}
|
||||||
<figure class="figure is-96x96">
|
<figure class="figure is-96x96">
|
||||||
<img src="{path('/stream?url=' . urlencode($data->info->detail->avatarThumb))}" />
|
<img src="{url_stream($data->info->detail->avatarThumb)}" />
|
||||||
</figure>
|
</figure>
|
||||||
<p class="title">{$data->info->detail->uniqueId}</p>
|
<p class="title">{$data->info->detail->uniqueId}</p>
|
||||||
<p class="subtitle">{include '../components/rss.latte'}</p>
|
<p class="subtitle">{include '../components/rss.latte'}</p>
|
||||||
|
|
Loading…
Reference in a new issue