Przeglądaj źródła

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

Frontend ui refactor
daniel 6 lat temu
rodzic
commit
81e4fb805c
34 zmienionych plików z 625 dodań i 49 usunięć
  1. 1 0
      .env.example
  2. 1 0
      app/Avatar.php
  3. 88 0
      app/Console/Commands/UserCreate.php
  4. 72 0
      app/Console/Commands/UserDelete.php
  5. 54 0
      app/Console/Commands/UserShow.php
  6. 56 0
      app/Console/Commands/UserSuspend.php
  7. 49 0
      app/Console/Commands/UserTable.php
  8. 56 0
      app/Console/Commands/UserUnsuspend.php
  9. 3 3
      app/Http/Controllers/Admin/AdminSettingsController.php
  10. 2 3
      app/Http/Controllers/AvatarController.php
  11. 33 0
      app/Mail/EmailChange.php
  12. 33 0
      app/Mail/PasswordChange.php
  13. 50 0
      app/Providers/HorizonServiceProvider.php
  14. 4 4
      composer.json
  15. 22 20
      composer.lock
  16. 2 0
      config/horizon.php
  17. 2 0
      public/vendor/horizon/.gitignore
  18. BIN
      public/vendor/horizon/css/app.css
  19. 0 1
      public/vendor/horizon/css/app.css.map
  20. BIN
      public/vendor/horizon/img/favicon.png
  21. 0 8
      public/vendor/horizon/img/horizon.svg
  22. 0 0
      public/vendor/horizon/img/sprite.svg
  23. BIN
      public/vendor/horizon/js/app.js
  24. 0 0
      public/vendor/horizon/js/app.js.map
  25. BIN
      public/vendor/horizon/mix-manifest.json
  26. 1 1
      resources/assets/js/components/PostComponent.vue
  27. 11 3
      resources/assets/js/components/Profile.vue
  28. 10 2
      resources/assets/js/components/Timeline.vue
  29. 40 0
      resources/assets/sass/custom.scss
  30. 2 2
      resources/views/admin/settings/system.blade.php
  31. 1 1
      resources/views/emails/confirm_email.blade.php
  32. 15 0
      resources/views/emails/notification/email_change.blade.php
  33. 15 0
      resources/views/emails/notification/password_change.blade.php
  34. 2 1
      resources/views/status/show.blade.php

+ 1 - 0
.env.example

@@ -56,6 +56,7 @@ MIX_API_SEARCH="${API_SEARCH}"
 
 ACTIVITYPUB_INBOX=false
 ACTIVITYPUB_SHAREDINBOX=false
+HORIZON_DARKMODE=true
 
 # Set these both "true" to enable federation.
 # You might need to also run:

+ 1 - 0
app/Avatar.php

@@ -15,6 +15,7 @@ class Avatar extends Model
      * @var array
      */
     protected $dates = ['deleted_at'];
+    protected $fillable = ['profile_id'];
 
     public function profile()
     {

+ 88 - 0
app/Console/Commands/UserCreate.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\User;
+
+class UserCreate extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'user:create';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Create a new user';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $this->info('Creating a new user...');
+
+        $name = $this->ask('Name');
+
+        $username = $this->ask('Username');
+
+        if(User::whereUsername($username)->exists()) {
+            $this->error('Username already in use, please try again...');
+            exit;
+        }
+
+        $email = $this->ask('Email');
+
+        if(User::whereEmail($email)->exists()) {
+            $this->error('Email already in use, please try again...');
+            exit;
+        }
+
+        $password = $this->secret('Password');
+        $confirm = $this->secret('Confirm Password');
+
+        if($password !== $confirm) {
+            $this->error('Password mismatch, please try again...');
+            exit;
+        }
+        
+        $is_admin = $this->confirm('Make this user an admin?');
+        $confirm_email = $this->confirm('Manually verify email address?');
+
+        if($this->confirm('Are you sure you want to create this user?') && 
+            $username &&
+            $name && 
+            $email && 
+            $password
+        ) {
+            $user = new User;
+            $user->username = $username;
+            $user->name = $name;
+            $user->email = $email;
+            $user->password = bcrypt($password);
+            $user->is_admin = $is_admin;
+            $user->email_verified_at = $confirm_email ? now() : null;
+            $user->save();
+
+            $this->info('Created new user!');
+        }
+    }
+}

+ 72 - 0
app/Console/Commands/UserDelete.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\User;
+use App\Jobs\DeletePipeline\DeleteAccountPipeline;
+
+class UserDelete extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'user:delete {id}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Delete account';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $id = $this->argument('id');
+        $user = User::whereUsername($id)->orWhere('id', $id)->first();
+        if(!$user) {
+            $this->error('Could not find any user with that username or id.');
+            exit;
+        }
+
+        if($user->is_admin == true) {
+            $this->error('Cannot delete an admin account from CLI.');
+            exit;
+        }
+
+        if(!$this->confirm('Are you sure you want to delete this account?')) {
+            exit;
+        }
+
+        $confirmation = $this->ask('Enter the username to confirm deletion');
+
+        if($confirmation !== $user->username) {
+            $this->error('Username does not match, exiting...');
+            exit;
+        }
+
+        $profile = $user->profile;
+        $profile->status = $user->status = 'deleted';
+        $profile->save();
+        $user->save();
+
+        DeleteAccountPipeline::dispatchNow($user);
+    }
+}

+ 54 - 0
app/Console/Commands/UserShow.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\User;
+
+class UserShow extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'user:show {id}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Show user info';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $id = $this->argument('id');
+        $user = User::whereUsername($id)->orWhere('id', $id)->first();
+        if(!$user) {
+            $this->error('Could not find any user with that username or id.');
+            exit;
+        }
+
+        $this->info('User ID: ' . $user->id);
+        $this->info('Username: ' . $user->username);
+        $this->info('Email: ' . $user->email);
+        $this->info('Joined: ' . $user->created_at->diffForHumans());
+        $this->info('Status Count: ' . $user->statuses()->count());
+    }
+}

+ 56 - 0
app/Console/Commands/UserSuspend.php

@@ -0,0 +1,56 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\User;
+
+class UserSuspend extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'user:suspend {id}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Suspend a local user.';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $id = $this->argument('id');
+        $user = User::whereUsername($id)->orWhere('id', $id)->first();
+        if(!$user) {
+            $this->error('Could not find any user with that username or id.');
+            exit;
+        }
+        $this->info('Found user, username: ' . $user->username);
+        if($this->confirm('Are you sure you want to suspend this user?')) {
+            $profile = $user->profile;
+            $user->status = $profile->status = 'suspended';
+            $user->save();
+            $profile->save();
+            $this->info('User account has been suspended.');
+        }
+    }
+}

+ 49 - 0
app/Console/Commands/UserTable.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\User;
+
+class UserTable extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'user:table {limit=10}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Display latest users';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $limit = $this->argument('limit');
+
+        $headers = ['ID', 'Username', 'Name', 'Registered'];
+
+        $users = User::orderByDesc('id')->take($limit)->get(['id', 'username', 'name', 'created_at'])->toArray();
+
+        $this->table($headers, $users);
+    }
+}

+ 56 - 0
app/Console/Commands/UserUnsuspend.php

@@ -0,0 +1,56 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\User;
+
+class UserUnsuspend extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'user:unsuspend {id}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Unsuspend a local user.';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $id = $this->argument('id');
+        $user = User::whereUsername($id)->orWhere('id', $id)->first();
+        if(!$user) {
+            $this->error('Could not find any user with that username or id.');
+            exit;
+        }
+        $this->info('Found user, username: ' . $user->username);
+        if($this->confirm('Are you sure you want to unsuspend this user?')) {
+            $profile = $user->profile;
+            $user->status = $profile->status = null;
+            $user->save();
+            $profile->save();
+            $this->info('User account has been unsuspended.');
+        }
+    }
+}

+ 3 - 3
app/Http/Controllers/Admin/AdminSettingsController.php

@@ -19,8 +19,8 @@ trait AdminSettingsController
 
     public function settingsBackups(Request $request)
     {
-      $path = storage_path('app/PixelFed');
-      $files = new \DirectoryIterator($path);
+      $path = storage_path('app/'.config('app.name'));
+      $files = is_dir($path) ? new \DirectoryIterator($path) : [];
       return view('admin.settings.backups', compact('files'));
     }
 
@@ -106,7 +106,7 @@ trait AdminSettingsController
     $sys = [
       'pixelfed' => config('pixelfed.version'),
       'php' => phpversion(),
-      'redis' => explode(' ',exec('redis-cli -v'))[1],
+      'laravel' => app()->version(),
     ];
     switch (config('database.default')) {
       case 'pgsql':

+ 2 - 3
app/Http/Controllers/AvatarController.php

@@ -30,11 +30,10 @@ class AvatarController extends Controller
             $dir = $path['root'];
             $name = $path['name'];
             $public = $path['storage'];
-            $currentAvatar = storage_path('app/'.$profile->avatar->media_path);
             $loc = $request->file('avatar')->storeAs($public, $name);
 
-            $avatar = Avatar::whereProfileId($profile->id)->firstOrFail();
-            $opath = $avatar->media_path;
+            $avatar = Avatar::firstOrNew(['profile_id' => $profile->id]);
+            $currentAvatar = $avatar->recentlyCreated ? null : storage_path('app/'.$profile->avatar->media_path);
             $avatar->media_path = "$public/$name";
             $avatar->thumb_path = null;
             $avatar->change_count = ++$avatar->change_count;

+ 33 - 0
app/Mail/EmailChange.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Mail;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Contracts\Queue\ShouldQueue;
+
+class EmailChange extends Mailable
+{
+    use Queueable, SerializesModels;
+
+    /**
+     * Create a new message instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Build the message.
+     *
+     * @return $this
+     */
+    public function build()
+    {
+        return $this->markdown('emails.notification.email_change');
+    }
+}

+ 33 - 0
app/Mail/PasswordChange.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Mail;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Contracts\Queue\ShouldQueue;
+
+class PasswordChange extends Mailable
+{
+    use Queueable, SerializesModels;
+
+    /**
+     * Create a new message instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Build the message.
+     *
+     * @return $this
+     */
+    public function build()
+    {
+        return $this->markdown('emails.notification.password_change');
+    }
+}

+ 50 - 0
app/Providers/HorizonServiceProvider.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace App\Providers;
+
+use Laravel\Horizon\Horizon;
+use Illuminate\Support\Facades\Gate;
+use Laravel\Horizon\HorizonApplicationServiceProvider;
+
+class HorizonServiceProvider extends HorizonApplicationServiceProvider
+{
+    /**
+     * Bootstrap any application services.
+     *
+     * @return void
+     */
+    public function boot()
+    {
+        parent::boot();
+
+        // Horizon::routeSmsNotificationsTo('15556667777');
+        // Horizon::routeMailNotificationsTo('example@example.com');
+        // Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');
+    }
+
+    /**
+     * Register the Horizon gate.
+     *
+     * This gate determines who can access Horizon in non-local environments.
+     *
+     * @return void
+     */
+    protected function gate()
+    {
+        Gate::define('viewHorizon', function ($user) {
+            return $user->is_admin == true;
+        });
+    }
+
+    /**
+     * Register any application services.
+     *
+     * @return void
+     */
+    public function register()
+    {
+        if(config('horizon.darkmode') == true) {
+            Horizon::night();
+        }
+    }
+}

+ 4 - 4
composer.json

@@ -19,7 +19,7 @@
         "greggilbert/recaptcha": "dev-master",
         "intervention/image": "^2.4",
         "laravel/framework": "5.8.*",
-        "laravel/horizon": "^1.2",
+        "laravel/horizon": "^3.0",
         "laravel/passport": "^7.0",
         "laravel/tinker": "^1.0",
         "league/flysystem-aws-s3-v3": "~1.0",
@@ -42,7 +42,7 @@
         "fzaninotto/faker": "^1.4",
         "mockery/mockery": "^1.0",
         "nunomaduro/collision": "^2.0",
-        "phpunit/phpunit": "^7.0"
+        "phpunit/phpunit": "^7.5"
     },
     "autoload": {
         "classmap": [
@@ -69,11 +69,11 @@
             "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
         ],
         "post-create-project-cmd": [
-            "@php artisan key:generate"
+            "@php artisan key:generate --ansi"
         ],
         "post-autoload-dump": [
             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
-            "@php artisan package:discover"
+            "@php artisan package:discover --ansi"
         ]
     },
     "config": {

+ 22 - 20
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "8f9feb6f0dd669b7a0974809de05d8bd",
+    "content-hash": "d7c9f518e63d20424dd17883057f5cb8",
     "packages": [
         {
             "name": "alchemy/binary-driver",
@@ -71,16 +71,16 @@
         },
         {
             "name": "aws/aws-sdk-php",
-            "version": "3.87.19",
+            "version": "3.87.21",
             "source": {
                 "type": "git",
                 "url": "https://github.com/aws/aws-sdk-php.git",
-                "reference": "79366d3335649960f49694eb052cbdac6616f843"
+                "reference": "266641679eea15075ea13c088f9737460351f7ab"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/79366d3335649960f49694eb052cbdac6616f843",
-                "reference": "79366d3335649960f49694eb052cbdac6616f843",
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/266641679eea15075ea13c088f9737460351f7ab",
+                "reference": "266641679eea15075ea13c088f9737460351f7ab",
                 "shasum": ""
             },
             "require": {
@@ -149,7 +149,7 @@
                 "s3",
                 "sdk"
             ],
-            "time": "2019-02-26T19:08:43+00:00"
+            "time": "2019-02-28T20:02:04+00:00"
         },
         {
             "name": "beyondcode/laravel-self-diagnosis",
@@ -1741,40 +1741,42 @@
         },
         {
             "name": "laravel/horizon",
-            "version": "v1.4.3",
+            "version": "v3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/horizon.git",
-                "reference": "b00da78d10158036cab2f45115ecc360f2014ed4"
+                "reference": "11acb6eafee4a0ea3bea87c6277f4342ebd2e1e3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/horizon/zipball/b00da78d10158036cab2f45115ecc360f2014ed4",
-                "reference": "b00da78d10158036cab2f45115ecc360f2014ed4",
+                "url": "https://api.github.com/repos/laravel/horizon/zipball/11acb6eafee4a0ea3bea87c6277f4342ebd2e1e3",
+                "reference": "11acb6eafee4a0ea3bea87c6277f4342ebd2e1e3",
                 "shasum": ""
             },
             "require": {
                 "cakephp/chronos": "^1.0",
+                "ext-json": "*",
                 "ext-pcntl": "*",
                 "ext-posix": "*",
-                "illuminate/contracts": "~5.5",
-                "illuminate/queue": "~5.5",
-                "illuminate/support": "~5.5",
+                "illuminate/contracts": "~5.7.0|~5.8.0",
+                "illuminate/queue": "~5.7.0|~5.8.0",
+                "illuminate/support": "~5.7.0|~5.8.0",
                 "php": ">=7.1.0",
                 "predis/predis": "^1.1",
                 "ramsey/uuid": "^3.5",
-                "symfony/debug": "~3.3|~4.0"
+                "symfony/debug": "^4.2",
+                "symfony/process": "^4.2"
             },
             "require-dev": {
-                "mockery/mockery": "~1.0",
-                "orchestra/database": "~3.5",
-                "orchestra/testbench": "~3.5",
-                "phpunit/phpunit": "~6.0"
+                "mockery/mockery": "^1.0",
+                "orchestra/database": "^3.7",
+                "orchestra/testbench": "^3.7",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "3.0-dev"
                 },
                 "laravel": {
                     "providers": [
@@ -1805,7 +1807,7 @@
                 "laravel",
                 "queue"
             ],
-            "time": "2018-11-01T14:03:51+00:00"
+            "time": "2019-02-27T15:44:24+00:00"
         },
         {
             "name": "laravel/passport",

+ 2 - 0
config/horizon.php

@@ -91,4 +91,6 @@ return [
             ],
         ],
     ],
+
+    'darkmode' => env('HORIZON_DARKMODE', false),
 ];

+ 2 - 0
public/vendor/horizon/.gitignore

@@ -0,0 +1,2 @@
+*
+!.gitignore

BIN
public/vendor/horizon/css/app.css


+ 0 - 1
public/vendor/horizon/css/app.css.map

@@ -1 +0,0 @@
-{"version":3,"file":"/css/app.css","sources":[],"mappings":";;;;;A","sourceRoot":""}

BIN
public/vendor/horizon/img/favicon.png


Plik diff jest za duży
+ 0 - 8
public/vendor/horizon/img/horizon.svg


Plik diff jest za duży
+ 0 - 0
public/vendor/horizon/img/sprite.svg


BIN
public/vendor/horizon/js/app.js


Plik diff jest za duży
+ 0 - 0
public/vendor/horizon/js/app.js.map


BIN
public/vendor/horizon/mix-manifest.json


+ 1 - 1
resources/assets/js/components/PostComponent.vue

@@ -172,7 +172,7 @@
       <div class="list-group-item border-0" v-for="(user, index) in likes" :key="'modal_likes_'+index">
         <div class="media">
           <a :href="user.url">
-            <img class="mr-3 rounded-circle box-shadow" :src="user.avatar" :alt="user.username + ’s avatar'" width="30px">
+            <img class="mr-3 rounded-circle box-shadow" :src="user.avatar" :alt="user.username + '’s avatar'" width="30px">
           </a>
           <div class="media-body">
             <p class="mb-0" style="font-size: 14px">

+ 11 - 3
resources/assets/js/components/Profile.vue

@@ -671,6 +671,9 @@ export default {
 			.then(res => {
 				this.following = res.data;
 				this.followingCursor++;
+        if(res.data.length < 10) {
+					this.followingMore = false;
+				}
 			});
 			this.$refs.followingModal.show();
 		},
@@ -688,7 +691,10 @@ export default {
 			.then(res => {
 				this.followers = res.data;
 				this.followerCursor++;
-			})
+        if(res.data.length < 10) {
+					this.followerMore = false;
+				}
+			})	
 			this.$refs.followerModal.show();
 		},
 
@@ -702,7 +708,8 @@ export default {
 				if(res.data.length > 0) {
 					this.following.push(...res.data);
 					this.followingCursor++;
-				} else {
+				}
+        if(res.data.length < 10) {
 					this.followingMore = false;
 				}
 			});
@@ -719,7 +726,8 @@ export default {
 				if(res.data.length > 0) {
 					this.followers.push(...res.data);
 					this.followerCursor++;
-				} else {
+				}
+        if(res.data.length < 10) {
 					this.followerMore = false;
 				}
 			});

+ 10 - 2
resources/assets/js/components/Timeline.vue

@@ -892,6 +892,9 @@
 					this.following = res.data;
 					this.followingCursor++;
 				});
+        if(res.data.length < 10) {
+					this.followingMore = false;
+				}
 				this.$refs.followingModal.show();
 			},
 
@@ -909,6 +912,9 @@
 					this.followers = res.data;
 					this.followerCursor++;
 				})
+        if(res.data.length < 10) {
+					this.followerMore = false;
+				}
 				this.$refs.followerModal.show();
 			},
 
@@ -922,7 +928,8 @@
 					if(res.data.length > 0) {
 						this.following.push(...res.data);
 						this.followingCursor++;
-					} else {
+					}
+          if(res.data.length < 10) {
 						this.followingMore = false;
 					}
 				});
@@ -939,7 +946,8 @@
 					if(res.data.length > 0) {
 						this.followers.push(...res.data);
 						this.followerCursor++;
-					} else {
+					}
+          if(res.data.length < 10) {
 						this.followerMore = false;
 					}
 				});

+ 40 - 0
resources/assets/sass/custom.scss

@@ -211,6 +211,46 @@ body, button, input, textarea {
   animation: loading-bar 3s linear infinite;
 }
 
+.liked {
+    position: relative;
+    z-index: 1;
+}
+
+.liked::after {
+    content: "\F0a3";
+    color: transparent;
+    animation: liking 1.5s;
+    position: absolute;
+    z-index: -1;
+    left: 50%;
+    top: 0;
+}
+
+@keyframes liking {
+ 0% {
+  -webkit-transform:rotate(0deg);
+  transform:rotate(0deg);
+  font-size:0;
+  top: .25rem;
+  color: #ebf70e;
+ }
+ 75% {
+  -webkit-transform:rotate(1turn);
+  transform:rotate(1turn);
+  top: -0.55rem;
+  font-size: 2.8rem;
+  opacity:1;
+  left: -0.55rem;
+ }
+ 100% {
+  transform:rotate(1turn);
+  top: 2.5rem;
+  left: 0em;
+  font-size:0;
+  left: 0.9rem
+ }
+}
+
 .max-hide-overflow {
   max-height: 500px;
   overflow-y: hidden;

+ 2 - 2
resources/views/admin/settings/system.blade.php

@@ -37,9 +37,9 @@
   	<div class="col-12 col-md-3">
   		<div class="card mb-3 border-left-blue">
   			<div class="card-body text-center">
-  				<p class="font-weight-ultralight h2 mb-0 text-truncate">{{$sys['redis']}}</p>
+  				<p class="font-weight-ultralight h2 mb-0 text-truncate">{{$sys['laravel']}}</p>
   			</div>
-  			<div class="card-footer font-weight-bold py-0 text-center bg-white">Redis</div>
+  			<div class="card-footer font-weight-bold py-0 text-center bg-white">Laravel</div>
   		</div>
   	</div>
   </div>

+ 1 - 1
resources/views/emails/confirm_email.blade.php

@@ -8,5 +8,5 @@ Confirm Email
 @endcomponent
 
 Thanks,<br>
-{{ config('app.name') }}
+{{ config('pixelfed.domain.app') }}
 @endcomponent

+ 15 - 0
resources/views/emails/notification/email_change.blade.php

@@ -0,0 +1,15 @@
+@component('mail::message')
+# Account Email Changed
+
+
+@component('mail::panel')
+<p>The email associated to your account has been changed.</p>
+@endcomponent
+
+<small>If you did not make this change and believe your Pixelfed account has been compromised, please contact the instance admin.</small>
+
+<br>
+
+Thanks,<br>
+{{ config('pixelfed.domain.app') }}
+@endcomponent

+ 15 - 0
resources/views/emails/notification/password_change.blade.php

@@ -0,0 +1,15 @@
+@component('mail::message')
+# Account Password Changed
+
+
+@component('mail::panel')
+<p>The password for your account has been changed.</p>
+@endcomponent
+
+<small>If you did not make this change and believe your Pixelfed account has been compromised, please change your password immediately or contact the instance admin if you're locked out of your account.</small>
+
+<br>
+
+Thanks,<br>
+{{ config('pixelfed.domain.app') }}
+@endcomponent

+ 2 - 1
resources/views/status/show.blade.php

@@ -1,4 +1,4 @@
-@extends('layouts.app',['title' => $user->username . " posted a photo: " . $status->likes_count . " likes, " . $status->comments_count . " comments" ])
+@extends('layouts.app',['title' => "A post by " . $user->username])
 
 @section('content')
 <noscript>
@@ -18,6 +18,7 @@
   <meta property="og:description" content="{{ $status->caption }}">
   <meta property="og:image" content="{{$status->mediaUrl()}}">
   <link href='{{$status->url()}}' rel='alternate' type='application/activity+json'>
+  <meta name="twitter:card" content="summary_large_image">
 @endpush
 
 @push('scripts')

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików