mirror of https://github.com/pixelfed/pixelfed.git
Merge pull request #1387 from pixelfed/frontend-ui-refactor
Frontend ui refactor
This commit is contained in:
commit
693ad8fda9
|
@ -38,7 +38,7 @@ class SearchController extends Controller
|
||||||
$tokens = [];
|
$tokens = [];
|
||||||
if(Helpers::validateUrl($tag) != false && config('federation.activitypub.enabled') == true && config('federation.activitypub.remoteFollow') == true) {
|
if(Helpers::validateUrl($tag) != false && config('federation.activitypub.enabled') == true && config('federation.activitypub.remoteFollow') == true) {
|
||||||
$remote = Helpers::fetchFromUrl($tag);
|
$remote = Helpers::fetchFromUrl($tag);
|
||||||
if(isset($remote['type']) && in_array($remote['type'], ['Create', 'Person']) == true) {
|
if(isset($remote['type']) && in_array($remote['type'], ['Note', 'Person']) == true) {
|
||||||
$type = $remote['type'];
|
$type = $remote['type'];
|
||||||
if($type == 'Person') {
|
if($type == 'Person') {
|
||||||
$item = Helpers::profileFirstOrNew($tag);
|
$item = Helpers::profileFirstOrNew($tag);
|
||||||
|
@ -55,7 +55,7 @@ class SearchController extends Controller
|
||||||
'thumb' => $item->avatarUrl()
|
'thumb' => $item->avatarUrl()
|
||||||
]
|
]
|
||||||
]];
|
]];
|
||||||
} else if ($type == 'Create') {
|
} else if ($type == 'Note') {
|
||||||
$item = Helpers::statusFirstOrFetch($tag, false);
|
$item = Helpers::statusFirstOrFetch($tag, false);
|
||||||
$tokens['posts'] = [[
|
$tokens['posts'] = [[
|
||||||
'count' => 0,
|
'count' => 0,
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Settings;
|
||||||
|
|
||||||
|
use App\AccountLog;
|
||||||
|
use App\EmailVerification;
|
||||||
|
use App\Instance;
|
||||||
|
use App\Media;
|
||||||
|
use App\Profile;
|
||||||
|
use App\User;
|
||||||
|
use App\UserFilter;
|
||||||
|
use App\Util\Lexer\PrettyNumber;
|
||||||
|
use Auth, Cache, DB;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
trait RelationshipSettings
|
||||||
|
{
|
||||||
|
|
||||||
|
public function relationshipsHome()
|
||||||
|
{
|
||||||
|
return view('settings.relationships.home');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use Redis;
|
||||||
|
use App\{
|
||||||
|
Profile,
|
||||||
|
Status,
|
||||||
|
UserFilter
|
||||||
|
};
|
||||||
|
|
||||||
|
class PublicTimelineService {
|
||||||
|
|
||||||
|
const CACHE_KEY = 'pf:services:timeline:public';
|
||||||
|
|
||||||
|
public static function get($start = 0, $stop = 10)
|
||||||
|
{
|
||||||
|
if($stop > 100) {
|
||||||
|
$stop = 100;
|
||||||
|
}
|
||||||
|
$tl = [];
|
||||||
|
$keys = Redis::zrevrange(self::CACHE_KEY, $start, $stop);
|
||||||
|
foreach($keys as $key) {
|
||||||
|
array_push($tl, StatusService::get($key));
|
||||||
|
}
|
||||||
|
return $tl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function add($val)
|
||||||
|
{
|
||||||
|
return Redis::zadd(self::CACHE_KEY, 1, $val);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function rem($val)
|
||||||
|
{
|
||||||
|
return Redis::zrem(self::CACHE_KEY, $val);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function del($val)
|
||||||
|
{
|
||||||
|
return self::rem($val);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function count()
|
||||||
|
{
|
||||||
|
return Redis::zcount(self::CACHE_KEY, '-inf', '+inf');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function warmCache($force = false, $limit = 100)
|
||||||
|
{
|
||||||
|
if(self::count() == 0 || $force == true) {
|
||||||
|
$ids = Status::whereNull('uri')
|
||||||
|
->whereNull('in_reply_to_id')
|
||||||
|
->whereNull('reblog_of_id')
|
||||||
|
->whereIn('type', ['photo', 'photo:album'])
|
||||||
|
->whereScope('public')
|
||||||
|
->latest()
|
||||||
|
->limit($limit)
|
||||||
|
->pluck('id');
|
||||||
|
foreach($ids as $id) {
|
||||||
|
self::add($id);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use Redis;
|
||||||
|
use App\Status;
|
||||||
|
use App\Transformer\Api\StatusStatelessTransformer;
|
||||||
|
use League\Fractal;
|
||||||
|
use League\Fractal\Serializer\ArraySerializer;
|
||||||
|
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
|
||||||
|
|
||||||
|
class StatusService {
|
||||||
|
|
||||||
|
const CACHE_KEY = 'pf:services:status:';
|
||||||
|
|
||||||
|
public static function get($id)
|
||||||
|
{
|
||||||
|
return Redis::get(self::CACHE_KEY . $id) ?? self::coldGet($id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function coldGet($id)
|
||||||
|
{
|
||||||
|
$status = Status::findOrFail($id);
|
||||||
|
$fractal = new Fractal\Manager();
|
||||||
|
$fractal->setSerializer(new ArraySerializer());
|
||||||
|
$resource = new Fractal\Resource\Item($status, new StatusStatelessTransformer());
|
||||||
|
$res = $fractal->createData($resource)->toJson();
|
||||||
|
self::set($id, $res);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function set($key, $val)
|
||||||
|
{
|
||||||
|
return Redis::set(self::CACHE_KEY . $key, $val);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function del($key)
|
||||||
|
{
|
||||||
|
return Redis::del(self::CACHE_KEY . $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function rem($key)
|
||||||
|
{
|
||||||
|
return self::del($key);
|
||||||
|
}
|
||||||
|
}
|
|
@ -67,7 +67,7 @@ class StatusTransformer extends Fractal\TransformerAbstract
|
||||||
|
|
||||||
public function includeMediaAttachments(Status $status)
|
public function includeMediaAttachments(Status $status)
|
||||||
{
|
{
|
||||||
return Cache::remember('status:transformer:media:attachments:'.$status->id, now()->addMinutes(3), function() use($status) {
|
return Cache::remember('status:transformer:media:attachments:'.$status->id, now()->addDays(14), function() use($status) {
|
||||||
if(in_array($status->type, ['photo', 'video', 'photo:album', 'loop'])) {
|
if(in_array($status->type, ['photo', 'video', 'photo:album', 'loop'])) {
|
||||||
$media = $status->media()->orderBy('order')->get();
|
$media = $status->media()->orderBy('order')->get();
|
||||||
return $this->collection($media, new MediaTransformer());
|
return $this->collection($media, new MediaTransformer());
|
||||||
|
|
|
@ -17,7 +17,7 @@ return [
|
||||||
'inbox' => env('AP_INBOX', true),
|
'inbox' => env('AP_INBOX', true),
|
||||||
'sharedInbox' => env('AP_SHAREDINBOX', false),
|
'sharedInbox' => env('AP_SHAREDINBOX', false),
|
||||||
|
|
||||||
'remoteFollow' => false,
|
'remoteFollow' => env('AP_REMOTEFOLLOW', false),
|
||||||
|
|
||||||
'delivery' => [
|
'delivery' => [
|
||||||
'timeout' => env('ACTIVITYPUB_DELIVERY_TIMEOUT', 2.0),
|
'timeout' => env('ACTIVITYPUB_DELIVERY_TIMEOUT', 2.0),
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
10
package.json
10
package.json
|
@ -11,26 +11,28 @@
|
||||||
"postinstall": "opencollective-postinstall"
|
"postinstall": "opencollective-postinstall"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"axios": "^0.18",
|
"axios": "^0.18.1",
|
||||||
"bootstrap": ">=4.3.1",
|
"bootstrap": ">=4.3.1",
|
||||||
"cross-env": "^5.2.0",
|
"cross-env": "^5.2.0",
|
||||||
"jquery": "^3.4.1",
|
"jquery": "^3.4.1",
|
||||||
"lodash": "^4.17.11",
|
"lodash": "^4.17.11",
|
||||||
"popper.js": "^1.15.0",
|
"popper.js": "^1.15.0",
|
||||||
|
"purify-css": "^1.2.5",
|
||||||
|
"purifycss-webpack": "^0.7.0",
|
||||||
"resolve-url-loader": "^2.3.2",
|
"resolve-url-loader": "^2.3.2",
|
||||||
"sass": "^1.19.0",
|
"sass": "^1.21.0",
|
||||||
"sass-loader": "^7.1.0",
|
"sass-loader": "^7.1.0",
|
||||||
"vue": "^2.6.10",
|
"vue": "^2.6.10",
|
||||||
"vue-template-compiler": "^2.6.10"
|
"vue-template-compiler": "^2.6.10"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bootstrap-vue": "^2.0.0-rc.19",
|
"bootstrap-vue": "^2.0.0-rc.22",
|
||||||
"emoji-mart-vue": "^2.6.6",
|
"emoji-mart-vue": "^2.6.6",
|
||||||
"filesize": "^3.6.1",
|
"filesize": "^3.6.1",
|
||||||
"howler": "^2.1.2",
|
"howler": "^2.1.2",
|
||||||
"infinite-scroll": "^3.0.6",
|
"infinite-scroll": "^3.0.6",
|
||||||
"laravel-echo": "^1.5.3",
|
"laravel-echo": "^1.5.3",
|
||||||
"laravel-mix": "^4.0.15",
|
"laravel-mix": "^4.0.16",
|
||||||
"node-sass": "^4.12.0",
|
"node-sass": "^4.12.0",
|
||||||
"opencollective": "^1.0.3",
|
"opencollective": "^1.0.3",
|
||||||
"opencollective-postinstall": "^2.0.2",
|
"opencollective-postinstall": "^2.0.2",
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
!function(e){function r(r){for(var n,f,i=r[0],l=r[1],a=r[2],c=0,s=[];c<i.length;c++)f=i[c],o[f]&&s.push(o[f][0]),o[f]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var l=t[i];0!==o[l]&&(n=!1)}n&&(u.splice(r--,1),e=f(f.s=t[0]))}return e}var n={},o={0:0},u=[];function f(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var i=window.webpackJsonp=window.webpackJsonp||[],l=i.push.bind(i);i.push=r,i=i.slice();for(var a=0;a<i.length;a++)r(i[a]);var p=l;t()}([]);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,16 +1,18 @@
|
||||||
{
|
{
|
||||||
"/js/activity.js": "/js/activity.js?id=5aa546eb151078508efa",
|
"/js/manifest.js": "/js/manifest.js?id=01c8731923a46c30aaed",
|
||||||
"/js/app.js": "/js/app.js?id=1f05f00eec0e86f49dd4",
|
"/js/vendor.js": "/js/vendor.js?id=cb03d3c4fd7d4093f5b1",
|
||||||
"/css/app.css": "/css/app.css?id=3a974ff74b6b5905a73c",
|
"/js/activity.js": "/js/activity.js?id=988d3df8e9dc2d16a43c",
|
||||||
"/css/appdark.css": "/css/appdark.css?id=107806a000e2ca675a3c",
|
"/js/app.js": "/js/app.js?id=025bc09bbc4e2d1898e3",
|
||||||
"/css/landing.css": "/css/landing.css?id=d3610108213e88dc080c",
|
"/css/app.css": "/css/app.css?id=6dd2f075f0943c162eae",
|
||||||
"/js/components.js": "/js/components.js?id=ddc135bc319514161701",
|
"/css/appdark.css": "/css/appdark.css?id=04e696349aa09b6cd1c5",
|
||||||
"/js/compose.js": "/js/compose.js?id=905ec24258f595df861b",
|
"/css/landing.css": "/css/landing.css?id=44b9a4ffc24efc1ce8a9",
|
||||||
"/js/developers.js": "/js/developers.js?id=1359f11c7349301903f8",
|
"/js/components.js": "/js/components.js?id=70b4d175e9291d20fd24",
|
||||||
"/js/discover.js": "/js/discover.js?id=2dc2dc703a3a625df1a5",
|
"/js/compose.js": "/js/compose.js?id=0f2ecd714c3a9b07ebaa",
|
||||||
"/js/loops.js": "/js/loops.js?id=0677173fdad43d0687ba",
|
"/js/developers.js": "/js/developers.js?id=4dba6abdc3ae8ec8c222",
|
||||||
"/js/profile.js": "/js/profile.js?id=461dd489765de3334344",
|
"/js/discover.js": "/js/discover.js?id=b9b5d3d054cadf63aed2",
|
||||||
"/js/search.js": "/js/search.js?id=27e8be8bfef6be586d25",
|
"/js/loops.js": "/js/loops.js?id=d5c7e9d0d6a44553dd0d",
|
||||||
"/js/status.js": "/js/status.js?id=a8c41f16489f01bde38e",
|
"/js/profile.js": "/js/profile.js?id=c58d6492959e657f197e",
|
||||||
"/js/timeline.js": "/js/timeline.js?id=3acbb1bc87ed37e9e280"
|
"/js/search.js": "/js/search.js?id=17415228e1fb52528d0c",
|
||||||
|
"/js/status.js": "/js/status.js?id=1e00f5bc1715025a07cb",
|
||||||
|
"/js/timeline.js": "/js/timeline.js?id=c8346c0cf7265df6196e"
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead class="thead-dark">
|
<thead class="bg-light">
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">#</th>
|
<th scope="col" class="border-0 text-dark">#</th>
|
||||||
<th scope="col">Username</th>
|
<th scope="col" class="border-0 text-dark">Username</th>
|
||||||
<th scope="col">Likes</th>
|
<th scope="col" class="border-0 text-dark">Likes</th>
|
||||||
<th scope="col">Storage</th>
|
<th scope="col" class="border-0 text-dark">Storage</th>
|
||||||
<th scope="col">Created</th>
|
<th scope="col" class="border-0 text-dark">Created</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
@yield('content')
|
@yield('content')
|
||||||
</main>
|
</main>
|
||||||
@include('layouts.partial.footer')
|
@include('layouts.partial.footer')
|
||||||
|
<script type="text/javascript" src="{{ mix('js/manifest.js') }}"></script>
|
||||||
|
<script type="text/javascript" src="{{ mix('js/vendor.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ mix('js/app.js') }}"></script>
|
<script type="text/javascript" src="{{ mix('js/app.js') }}"></script>
|
||||||
@stack('scripts')
|
@stack('scripts')
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -47,6 +47,8 @@
|
||||||
@endif
|
@endif
|
||||||
</main>
|
</main>
|
||||||
@include('layouts.partial.footer')
|
@include('layouts.partial.footer')
|
||||||
|
<script type="text/javascript" src="{{ mix('js/manifest.js') }}"></script>
|
||||||
|
<script type="text/javascript" src="{{ mix('js/vendor.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ mix('js/app.js') }}"></script>
|
<script type="text/javascript" src="{{ mix('js/app.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ mix('js/components.js') }}"></script>
|
<script type="text/javascript" src="{{ mix('js/components.js') }}"></script>
|
||||||
@stack('scripts')
|
@stack('scripts')
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
<main id="content">
|
<main id="content">
|
||||||
@yield('content')
|
@yield('content')
|
||||||
</main>
|
</main>
|
||||||
|
<script type="text/javascript" src="{{ mix('js/manifest.js') }}"></script>
|
||||||
|
<script type="text/javascript" src="{{ mix('js/vendor.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ mix('js/app.js') }}"></script>
|
<script type="text/javascript" src="{{ mix('js/app.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ mix('js/components.js') }}"></script>
|
<script type="text/javascript" src="{{ mix('js/components.js') }}"></script>
|
||||||
@stack('scripts')
|
@stack('scripts')
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
let mix = require('laravel-mix');
|
let mix = require('laravel-mix');
|
||||||
|
|
||||||
|
mix.options({
|
||||||
|
purifyCss: true,
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Mix Asset Management
|
| Mix Asset Management
|
||||||
|
@ -11,6 +15,16 @@ let mix = require('laravel-mix');
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
mix.sass('resources/assets/sass/app.scss', 'public/css', {
|
||||||
|
implementation: require('node-sass')
|
||||||
|
})
|
||||||
|
.sass('resources/assets/sass/appdark.scss', 'public/css', {
|
||||||
|
implementation: require('node-sass')
|
||||||
|
})
|
||||||
|
.sass('resources/assets/sass/landing.scss', 'public/css', {
|
||||||
|
implementation: require('node-sass')
|
||||||
|
}).version();
|
||||||
|
|
||||||
mix.js('resources/assets/js/app.js', 'public/js')
|
mix.js('resources/assets/js/app.js', 'public/js')
|
||||||
.js('resources/assets/js/activity.js', 'public/js')
|
.js('resources/assets/js/activity.js', 'public/js')
|
||||||
.js('resources/assets/js/components.js', 'public/js')
|
.js('resources/assets/js/components.js', 'public/js')
|
||||||
|
@ -43,13 +57,13 @@ mix.js('resources/assets/js/app.js', 'public/js')
|
||||||
// Loops Component
|
// Loops Component
|
||||||
.js('resources/assets/js/loops.js', 'public/js')
|
.js('resources/assets/js/loops.js', 'public/js')
|
||||||
|
|
||||||
.sass('resources/assets/sass/app.scss', 'public/css', {
|
.extract([
|
||||||
implementation: require('node-sass')
|
'lodash',
|
||||||
})
|
'popper.js',
|
||||||
.sass('resources/assets/sass/appdark.scss', 'public/css', {
|
'jquery',
|
||||||
implementation: require('node-sass')
|
'axios',
|
||||||
})
|
'bootstrap',
|
||||||
.sass('resources/assets/sass/landing.scss', 'public/css', {
|
'vue',
|
||||||
implementation: require('node-sass')
|
'readmore-js'
|
||||||
})
|
])
|
||||||
.version();
|
.version();
|
||||||
|
|
Loading…
Reference in New Issue