Merge pull request #1387 from pixelfed/frontend-ui-refactor

Frontend ui refactor
This commit is contained in:
daniel 2019-06-10 20:59:04 -06:00 committed by GitHub
commit 693ad8fda9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 689 additions and 356 deletions

View File

@ -38,7 +38,7 @@ class SearchController extends Controller
$tokens = [];
if(Helpers::validateUrl($tag) != false && config('federation.activitypub.enabled') == true && config('federation.activitypub.remoteFollow') == true) {
$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'];
if($type == 'Person') {
$item = Helpers::profileFirstOrNew($tag);
@ -55,7 +55,7 @@ class SearchController extends Controller
'thumb' => $item->avatarUrl()
]
]];
} else if ($type == 'Create') {
} else if ($type == 'Note') {
$item = Helpers::statusFirstOrFetch($tag, false);
$tokens['posts'] = [[
'count' => 0,

View File

@ -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');
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -67,7 +67,7 @@ class StatusTransformer extends Fractal\TransformerAbstract
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'])) {
$media = $status->media()->orderBy('order')->get();
return $this->collection($media, new MediaTransformer());

View File

@ -17,7 +17,7 @@ return [
'inbox' => env('AP_INBOX', true),
'sharedInbox' => env('AP_SHAREDINBOX', false),
'remoteFollow' => false,
'remoteFollow' => env('AP_REMOTEFOLLOW', false),
'delivery' => [
'timeout' => env('ACTIVITYPUB_DELIVERY_TIMEOUT', 2.0),

768
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -11,26 +11,28 @@
"postinstall": "opencollective-postinstall"
},
"devDependencies": {
"axios": "^0.18",
"axios": "^0.18.1",
"bootstrap": ">=4.3.1",
"cross-env": "^5.2.0",
"jquery": "^3.4.1",
"lodash": "^4.17.11",
"popper.js": "^1.15.0",
"purify-css": "^1.2.5",
"purifycss-webpack": "^0.7.0",
"resolve-url-loader": "^2.3.2",
"sass": "^1.19.0",
"sass": "^1.21.0",
"sass-loader": "^7.1.0",
"vue": "^2.6.10",
"vue-template-compiler": "^2.6.10"
},
"dependencies": {
"bootstrap-vue": "^2.0.0-rc.19",
"bootstrap-vue": "^2.0.0-rc.22",
"emoji-mart-vue": "^2.6.6",
"filesize": "^3.6.1",
"howler": "^2.1.2",
"infinite-scroll": "^3.0.6",
"laravel-echo": "^1.5.3",
"laravel-mix": "^4.0.15",
"laravel-mix": "^4.0.16",
"node-sass": "^4.12.0",
"opencollective": "^1.0.3",
"opencollective-postinstall": "^2.0.2",

8
public/css/app.css vendored

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

2
public/js/app.js vendored

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

2
public/js/loops.js vendored

File diff suppressed because one or more lines are too long

1
public/js/manifest.js vendored Normal file
View File

@ -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

2
public/js/search.js vendored

File diff suppressed because one or more lines are too long

2
public/js/status.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
public/js/vendor.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,16 +1,18 @@
{
"/js/activity.js": "/js/activity.js?id=5aa546eb151078508efa",
"/js/app.js": "/js/app.js?id=1f05f00eec0e86f49dd4",
"/css/app.css": "/css/app.css?id=3a974ff74b6b5905a73c",
"/css/appdark.css": "/css/appdark.css?id=107806a000e2ca675a3c",
"/css/landing.css": "/css/landing.css?id=d3610108213e88dc080c",
"/js/components.js": "/js/components.js?id=ddc135bc319514161701",
"/js/compose.js": "/js/compose.js?id=905ec24258f595df861b",
"/js/developers.js": "/js/developers.js?id=1359f11c7349301903f8",
"/js/discover.js": "/js/discover.js?id=2dc2dc703a3a625df1a5",
"/js/loops.js": "/js/loops.js?id=0677173fdad43d0687ba",
"/js/profile.js": "/js/profile.js?id=461dd489765de3334344",
"/js/search.js": "/js/search.js?id=27e8be8bfef6be586d25",
"/js/status.js": "/js/status.js?id=a8c41f16489f01bde38e",
"/js/timeline.js": "/js/timeline.js?id=3acbb1bc87ed37e9e280"
"/js/manifest.js": "/js/manifest.js?id=01c8731923a46c30aaed",
"/js/vendor.js": "/js/vendor.js?id=cb03d3c4fd7d4093f5b1",
"/js/activity.js": "/js/activity.js?id=988d3df8e9dc2d16a43c",
"/js/app.js": "/js/app.js?id=025bc09bbc4e2d1898e3",
"/css/app.css": "/css/app.css?id=6dd2f075f0943c162eae",
"/css/appdark.css": "/css/appdark.css?id=04e696349aa09b6cd1c5",
"/css/landing.css": "/css/landing.css?id=44b9a4ffc24efc1ce8a9",
"/js/components.js": "/js/components.js?id=70b4d175e9291d20fd24",
"/js/compose.js": "/js/compose.js?id=0f2ecd714c3a9b07ebaa",
"/js/developers.js": "/js/developers.js?id=4dba6abdc3ae8ec8c222",
"/js/discover.js": "/js/discover.js?id=b9b5d3d054cadf63aed2",
"/js/loops.js": "/js/loops.js?id=d5c7e9d0d6a44553dd0d",
"/js/profile.js": "/js/profile.js?id=c58d6492959e657f197e",
"/js/search.js": "/js/search.js?id=17415228e1fb52528d0c",
"/js/status.js": "/js/status.js?id=1e00f5bc1715025a07cb",
"/js/timeline.js": "/js/timeline.js?id=c8346c0cf7265df6196e"
}

View File

@ -8,13 +8,13 @@
<hr>
<table class="table">
<thead class="thead-dark">
<thead class="bg-light">
<tr>
<th scope="col">#</th>
<th scope="col">Username</th>
<th scope="col">Likes</th>
<th scope="col">Storage</th>
<th scope="col">Created</th>
<th scope="col" class="border-0 text-dark">#</th>
<th scope="col" class="border-0 text-dark">Username</th>
<th scope="col" class="border-0 text-dark">Likes</th>
<th scope="col" class="border-0 text-dark">Storage</th>
<th scope="col" class="border-0 text-dark">Created</th>
</tr>
</thead>
<tbody>

View File

@ -34,6 +34,8 @@
@yield('content')
</main>
@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>
@stack('scripts')
</body>

View File

@ -47,6 +47,8 @@
@endif
</main>
@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/components.js') }}"></script>
@stack('scripts')

View File

@ -30,6 +30,8 @@
<main id="content">
@yield('content')
</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/components.js') }}"></script>
@stack('scripts')

32
webpack.mix.js vendored
View File

@ -1,5 +1,9 @@
let mix = require('laravel-mix');
mix.options({
purifyCss: true,
});
/*
|--------------------------------------------------------------------------
| 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')
.js('resources/assets/js/activity.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
.js('resources/assets/js/loops.js', 'public/js')
.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')
})
.extract([
'lodash',
'popper.js',
'jquery',
'axios',
'bootstrap',
'vue',
'readmore-js'
])
.version();