diff --git a/app/Http/Controllers/Admin/AdminInstanceController.php b/app/Http/Controllers/Admin/AdminInstanceController.php index b24592c31..6a17fdb2a 100644 --- a/app/Http/Controllers/Admin/AdminInstanceController.php +++ b/app/Http/Controllers/Admin/AdminInstanceController.php @@ -8,66 +8,13 @@ use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Validation\Rule; use App\Services\InstanceService; +use App\Http\Resources\AdminInstance; trait AdminInstanceController { - public function instances(Request $request) { - $this->validate($request, [ - - 'filter' => [ - 'nullable', - 'string', - 'min:1', - 'max:20', - Rule::in([ - 'cw', - 'unlisted', - 'banned', - // 'popular', - 'new', - 'all' - ]) - ], - ]); - if($request->has('q') && $request->filled('q')) { - $instances = Instance::where('domain', 'like', '%' . $request->input('q') . '%')->simplePaginate(10); - } else if($request->has('filter') && $request->filled('filter')) { - switch ($request->filter) { - case 'cw': - $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->whereAutoCw(true)->orderByDesc('id')->simplePaginate(10); - break; - case 'unlisted': - $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->whereUnlisted(true)->orderByDesc('id')->simplePaginate(10); - break; - case 'banned': - $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->whereBanned(true)->orderByDesc('id')->simplePaginate(10); - break; - case 'new': - $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->latest()->simplePaginate(10); - break; - // case 'popular': - // $popular = Profile::selectRaw('*, count(domain) as count') - // ->whereNotNull('domain') - // ->groupBy('domain') - // ->orderByDesc('count') - // ->take(10) - // ->get() - // ->pluck('domain') - // ->toArray(); - // $instances = Instance::whereIn('domain', $popular)->simplePaginate(10); - // break; - - default: - $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->orderByDesc('id')->simplePaginate(10); - break; - } - } else { - $instances = Instance::select('id', 'domain', 'unlisted', 'auto_cw', 'banned')->orderByDesc('id')->simplePaginate(10); - } - - return view('admin.instances.home', compact('instances')); + return view('admin.instances.home'); } public function instanceScan(Request $request) @@ -133,4 +80,146 @@ trait AdminInstanceController return response()->json([]); } + + public function getInstancesStatsApi(Request $request) + { + return InstanceService::stats(); + } + + public function getInstancesQueryApi(Request $request) + { + $this->validate($request, [ + 'q' => 'required' + ]); + + $q = $request->input('q'); + + return AdminInstance::collection( + Instance::where('domain', 'like', '%' . $q . '%') + ->orderByDesc('user_count') + ->cursorPaginate(20) + ->withQueryString() + ); + } + + public function getInstancesApi(Request $request) + { + $this->validate($request, [ + 'filter' => [ + 'nullable', + 'string', + 'min:1', + 'max:20', + Rule::in([ + 'cw', + 'unlisted', + 'banned', + 'popular_users', + 'popular_statuses', + 'new', + 'all' + ]) + ], + ]); + $filter = $request->input('filter'); + $query = $request->input('q'); + + return AdminInstance::collection(Instance::when($query, function($q, $qq) use($query) { + return $q->where('domain', 'like', '%' . $query . '%'); + }) + ->when($filter, function($q, $f) use($filter) { + if($filter == 'cw') { return $q->whereAutoCw(true)->orderByDesc('id'); } + if($filter == 'unlisted') { return $q->whereUnlisted(true)->orderByDesc('id'); } + if($filter == 'banned') { return $q->whereBanned(true)->orderByDesc('id'); } + if($filter == 'new') { return $q->orderByDesc('id'); } + if($filter == 'popular_users') { return $q->orderByDesc('user_count'); } + if($filter == 'popular_statuses') { return $q->orderByDesc('status_count'); } + return $q->orderByDesc('id'); + }, function($q) { + return $q->orderByDesc('id'); + }) + ->cursorPaginate(10) + ->withQueryString()); + } + + public function postInstanceUpdateApi(Request $request) + { + $this->validate($request, [ + 'id' => 'required', + 'banned' => 'boolean', + 'auto_cw' => 'boolean', + 'unlisted' => 'boolean', + 'notes' => 'nullable|string|max:500', + ]); + + $id = $request->input('id'); + $instance = Instance::findOrFail($id); + $instance->update($request->only([ + 'banned', + 'auto_cw', + 'unlisted', + 'notes' + ])); + + InstanceService::refresh(); + + return new AdminInstance($instance); + } + + public function postInstanceCreateNewApi(Request $request) + { + $this->validate($request, [ + 'domain' => 'required|string', + 'banned' => 'boolean', + 'auto_cw' => 'boolean', + 'unlisted' => 'boolean', + 'notes' => 'nullable|string|max:500' + ]); + + $domain = $request->input('domain'); + + abort_if(!strpos($domain, '.'), 400, 'Invalid domain'); + abort_if(!filter_var($domain, FILTER_VALIDATE_DOMAIN), 400, 'Invalid domain'); + + $instance = new Instance; + $instance->domain = $request->input('domain'); + $instance->banned = $request->input('banned'); + $instance->auto_cw = $request->input('auto_cw'); + $instance->unlisted = $request->input('unlisted'); + $instance->manually_added = true; + $instance->notes = $request->input('notes'); + $instance->save(); + + InstanceService::refresh(); + + return new AdminInstance($instance); + } + + public function postInstanceRefreshStatsApi(Request $request) + { + $this->validate($request, [ + 'id' => 'required' + ]); + + $instance = Instance::findOrFail($request->input('id')); + $instance->user_count = Profile::whereDomain($instance->domain)->count(); + $instance->status_count = Profile::whereDomain($instance->domain)->leftJoin('statuses', 'profiles.id', '=', 'statuses.profile_id')->count(); + $instance->save(); + + return new AdminInstance($instance); + } + + public function postInstanceDeleteApi(Request $request) + { + $this->validate($request, [ + 'id' => 'required' + ]); + + $instance = Instance::findOrFail($request->input('id')); + $instance->delete(); + + InstanceService::refresh(); + + return 200; + } } diff --git a/app/Http/Controllers/Api/BaseApiController.php b/app/Http/Controllers/Api/BaseApiController.php index 9dd84aa0b..83828a9f3 100644 --- a/app/Http/Controllers/Api/BaseApiController.php +++ b/app/Http/Controllers/Api/BaseApiController.php @@ -96,89 +96,6 @@ class BaseApiController extends Controller return response()->json($res); } - public function accounts(Request $request, $id) - { - abort_if(!$request->user(), 403); - $profile = Profile::findOrFail($id); - $resource = new Fractal\Resource\Item($profile, new AccountTransformer()); - $res = $this->fractal->createData($resource)->toArray(); - - return response()->json($res); - } - - public function accountFollowers(Request $request, $id) - { - abort_if(!$request->user(), 403); - $profile = Profile::findOrFail($id); - $followers = $profile->followers; - $resource = new Fractal\Resource\Collection($followers, new AccountTransformer()); - $res = $this->fractal->createData($resource)->toArray(); - - return response()->json($res); - } - - public function accountFollowing(Request $request, $id) - { - abort_if(!$request->user(), 403); - $profile = Profile::findOrFail($id); - $following = $profile->following; - $resource = new Fractal\Resource\Collection($following, new AccountTransformer()); - $res = $this->fractal->createData($resource)->toArray(); - - return response()->json($res); - } - - public function accountStatuses(Request $request, $id) - { - abort_if(!$request->user(), 403); - $this->validate($request, [ - 'only_media' => 'nullable', - 'pinned' => 'nullable', - 'exclude_replies' => 'nullable', - 'max_id' => 'nullable|integer|min:1', - 'since_id' => 'nullable|integer|min:1', - 'min_id' => 'nullable|integer|min:1', - 'limit' => 'nullable|integer|min:1|max:24' - ]); - $limit = $request->limit ?? 20; - $max_id = $request->max_id ?? false; - $min_id = $request->min_id ?? false; - $since_id = $request->since_id ?? false; - $only_media = $request->only_media ?? false; - $user = Auth::user(); - $account = Profile::whereNull('status')->findOrFail($id); - $statuses = $account->statuses()->getQuery(); - if($only_media == true) { - $statuses = $statuses - ->whereIn('scope', ['public','unlisted']) - ->whereHas('media') - ->whereNull('in_reply_to_id') - ->whereNull('reblog_of_id'); - } - if($id == $account->id && !$max_id && !$min_id && !$since_id) { - $statuses = $statuses->orderBy('id', 'desc') - ->paginate($limit); - } else if($since_id) { - $statuses = $statuses->where('id', '>', $since_id) - ->orderBy('id', 'DESC') - ->paginate($limit); - } else if($min_id) { - $statuses = $statuses->where('id', '>', $min_id) - ->orderBy('id', 'ASC') - ->paginate($limit); - } else if($max_id) { - $statuses = $statuses->where('id', '<', $max_id) - ->orderBy('id', 'DESC') - ->paginate($limit); - } else { - $statuses = $statuses->whereScope('public')->orderBy('id', 'desc')->paginate($limit); - } - $resource = new Fractal\Resource\Collection($statuses, new StatusTransformer()); - $res = $this->fractal->createData($resource)->toArray(); - - return response()->json($res); - } - public function avatarUpdate(Request $request) { abort_if(!$request->user(), 403); @@ -215,21 +132,6 @@ class BaseApiController extends Controller ]); } - public function showTempMedia(Request $request, $profileId, $mediaId, $timestamp) - { - abort(400, 'Endpoint deprecated'); - } - - public function uploadMedia(Request $request) - { - abort(400, 'Endpoint deprecated'); - } - - public function deleteMedia(Request $request) - { - abort(400, 'Endpoint deprecated'); - } - public function verifyCredentials(Request $request) { $user = $request->user(); @@ -242,21 +144,6 @@ class BaseApiController extends Controller return response()->json($res); } - public function drafts(Request $request) - { - $user = $request->user(); - abort_if(!$request->user(), 403); - - $medias = Media::whereUserId($user->id) - ->whereNull('status_id') - ->latest() - ->take(13) - ->get(); - $resource = new Fractal\Resource\Collection($medias, new MediaDraftTransformer()); - $res = $this->fractal->createData($resource)->toArray(); - return response()->json($res, 200, [], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); - } - public function accountLikes(Request $request) { abort_if(!$request->user(), 403); diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 0e8313f1e..1cfc820a3 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -14,16 +14,9 @@ use Auth, Cache; use Illuminate\Support\Facades\Redis; use App\Util\Site\Config; use Illuminate\Http\Request; -use App\Services\SuggestionService; class ApiController extends BaseApiController { - // todo: deprecate and remove - public function hydrateLikes(Request $request) - { - return response()->json([]); - } - public function siteConfiguration(Request $request) { return response()->json(Config::get()); @@ -31,79 +24,6 @@ class ApiController extends BaseApiController public function userRecommendations(Request $request) { - abort_if(!Auth::check(), 403); - abort_if(!config('exp.rec'), 400); - - $id = Auth::user()->profile->id; - - $following = Cache::remember('profile:following:'.$id, now()->addHours(12), function() use ($id) { - return Follower::whereProfileId($id)->pluck('following_id')->toArray(); - }); - array_push($following, $id); - $ids = SuggestionService::get(); - $filters = UserFilter::whereUserId($id) - ->whereFilterableType('App\Profile') - ->whereIn('filter_type', ['mute', 'block']) - ->pluck('filterable_id')->toArray(); - $following = array_merge($following, $filters); - - $key = config('cache.prefix').':api:local:exp:rec:'.$id; - $ttl = (int) Redis::ttl($key); - - if($request->filled('refresh') == true && (290 > $ttl) == true) { - Cache::forget('api:local:exp:rec:'.$id); - } - - $res = Cache::remember('api:local:exp:rec:'.$id, now()->addMinutes(5), function() use($id, $following, $ids) { - return Profile::select( - 'id', - 'username' - ) - ->whereNotIn('id', $following) - ->whereIn('id', $ids) - ->whereIsPrivate(0) - ->whereNull('status') - ->whereNull('domain') - ->inRandomOrder() - ->take(3) - ->get() - ->map(function($item, $key) { - return [ - 'id' => $item->id, - 'avatar' => $item->avatarUrl(), - 'username' => $item->username, - 'message' => 'Recommended for You' - ]; - }); - }); - - return response()->json($res->all()); + return response()->json([]); } - - public function composeLocationSearch(Request $request) - { - abort_if(!Auth::check(), 403); - $this->validate($request, [ - 'q' => 'required|string|max:100' - ]); - $q = filter_var($request->input('q'), FILTER_SANITIZE_STRING); - $hash = hash('sha256', $q); - $key = 'search:location:id:' . $hash; - $places = Cache::remember($key, now()->addMinutes(15), function() use($q) { - $q = '%' . $q . '%'; - return Place::where('name', 'like', $q) - ->take(80) - ->get() - ->map(function($r) { - return [ - 'id' => $r->id, - 'name' => $r->name, - 'country' => $r->country, - 'url' => $r->url() - ]; - }); - }); - return $places; - } - } diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 3f6795d5b..d092d349b 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -207,7 +207,7 @@ class ProfileController extends Controller abort_if(!$profile || $profile['locked'] || !$profile['local'], 404); - $data = Cache::remember('pf:atom:user-feed:by-id:' . $profile['id'], 86400, function() use($pid, $profile) { + $data = Cache::remember('pf:atom:user-feed:by-id:' . $profile['id'], 43200, function() use($pid, $profile) { $items = DB::table('statuses') ->whereProfileId($pid) ->whereVisibility('public') diff --git a/app/Http/Resources/AdminInstance.php b/app/Http/Resources/AdminInstance.php index 4a52e3481..d534f4681 100644 --- a/app/Http/Resources/AdminInstance.php +++ b/app/Http/Resources/AdminInstance.php @@ -24,6 +24,9 @@ class AdminInstance extends JsonResource 'user_count' => $this->user_count, 'status_count' => $this->status_count, 'last_crawled_at' => $this->last_crawled_at, + 'notes' => $this->notes, + 'base_domain' => $this->base_domain, + 'ban_subdomains' => $this->ban_subdomains, 'actors_last_synced_at' => $this->actors_last_synced_at, 'created_at' => $this->created_at, ]; diff --git a/app/Instance.php b/app/Instance.php index 5541d86c9..6a7b8e6f2 100644 --- a/app/Instance.php +++ b/app/Instance.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model; class Instance extends Model { - protected $fillable = ['domain']; + protected $fillable = ['domain', 'banned', 'auto_cw', 'unlisted', 'notes']; public function profiles() { diff --git a/app/Jobs/InboxPipeline/DeleteWorker.php b/app/Jobs/InboxPipeline/DeleteWorker.php index 05d0138e3..03a20bdd5 100644 --- a/app/Jobs/InboxPipeline/DeleteWorker.php +++ b/app/Jobs/InboxPipeline/DeleteWorker.php @@ -126,6 +126,11 @@ class DeleteWorker implements ShouldQueue return false; } $signatureData = HttpSignature::parseSignatureHeader($signature); + + if(!isset($signatureData['keyId'], $signatureData['signature'], $signatureData['headers']) || isset($signatureData['error'])) { + return false; + } + $keyId = Helpers::validateUrl($signatureData['keyId']); $id = Helpers::validateUrl($bodyDecoded['id']); $keyDomain = parse_url($keyId, PHP_URL_HOST); @@ -186,6 +191,11 @@ class DeleteWorker implements ShouldQueue return; } $signatureData = HttpSignature::parseSignatureHeader($signature); + + if(!isset($signatureData['keyId'], $signatureData['signature'], $signatureData['headers']) || isset($signatureData['error'])) { + return; + } + $keyId = Helpers::validateUrl($signatureData['keyId']); $actor = Profile::whereKeyId($keyId)->whereNotNull('remote_url')->first(); if(!$actor) { diff --git a/app/Jobs/InboxPipeline/InboxValidator.php b/app/Jobs/InboxPipeline/InboxValidator.php index 8b4d018a4..4017d3acd 100644 --- a/app/Jobs/InboxPipeline/InboxValidator.php +++ b/app/Jobs/InboxPipeline/InboxValidator.php @@ -5,9 +5,9 @@ namespace App\Jobs\InboxPipeline; use Cache; use App\Profile; use App\Util\ActivityPub\{ - Helpers, - HttpSignature, - Inbox + Helpers, + HttpSignature, + Inbox }; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -21,189 +21,199 @@ use Illuminate\Support\Lottery; class InboxValidator implements ShouldQueue { - use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - protected $username; - protected $headers; - protected $payload; + protected $username; + protected $headers; + protected $payload; - public $timeout = 300; - public $tries = 1; - public $maxExceptions = 1; + public $timeout = 300; + public $tries = 1; + public $maxExceptions = 1; - /** - * Create a new job instance. - * - * @return void - */ - public function __construct($username, $headers, $payload) - { - $this->username = $username; - $this->headers = $headers; - $this->payload = $payload; - } + /** + * Create a new job instance. + * + * @return void + */ + public function __construct($username, $headers, $payload) + { + $this->username = $username; + $this->headers = $headers; + $this->payload = $payload; + } - /** - * Execute the job. - * - * @return void - */ - public function handle() - { - $username = $this->username; - $headers = $this->headers; + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $username = $this->username; + $headers = $this->headers; - if(empty($headers) || empty($this->payload) || !isset($headers['signature']) || !isset($headers['date'])) { - return; - } + if(empty($headers) || empty($this->payload) || !isset($headers['signature']) || !isset($headers['date'])) { + return; + } - $payload = json_decode($this->payload, true, 8); + $payload = json_decode($this->payload, true, 8); - if(isset($payload['id'])) { - $lockKey = 'pf:ap:user-inbox:activity:' . hash('sha256', $payload['id']); - if(Cache::get($lockKey) !== null) { - // Job processed already - return 1; - } - Cache::put($lockKey, 1, 3600); - } + if(isset($payload['id'])) { + $lockKey = 'pf:ap:user-inbox:activity:' . hash('sha256', $payload['id']); + if(Cache::get($lockKey) !== null) { + // Job processed already + return 1; + } + Cache::put($lockKey, 1, 3600); + } - $profile = Profile::whereNull('domain')->whereUsername($username)->first(); + $profile = Profile::whereNull('domain')->whereUsername($username)->first(); - if(empty($profile) || empty($headers) || empty($payload)) { - return; - } + if(empty($profile) || empty($headers) || empty($payload)) { + return; + } - if($profile->status != null) { - return; - } + if($profile->status != null) { + return; + } - if($this->verifySignature($headers, $profile, $payload) == true) { - if(isset($payload['type']) && in_array($payload['type'], ['Follow', 'Accept']) ) { - ActivityHandler::dispatch($headers, $profile, $payload)->onQueue('follow'); - } else { - $onQueue = Lottery::odds(1, 12)->winner(fn () => 'high')->loser(fn () => 'inbox')->choose(); - ActivityHandler::dispatch($headers, $profile, $payload)->onQueue($onQueue); - } - return; - } else { - return; - } + if($this->verifySignature($headers, $profile, $payload) == true) { + if(isset($payload['type']) && in_array($payload['type'], ['Follow', 'Accept']) ) { + ActivityHandler::dispatch($headers, $profile, $payload)->onQueue('follow'); + } else { + $onQueue = Lottery::odds(1, 12)->winner(fn () => 'high')->loser(fn () => 'inbox')->choose(); + ActivityHandler::dispatch($headers, $profile, $payload)->onQueue($onQueue); + } + return; + } else { + return; + } - } + } - protected function verifySignature($headers, $profile, $payload) - { - $body = $this->payload; - $bodyDecoded = $payload; - $signature = is_array($headers['signature']) ? $headers['signature'][0] : $headers['signature']; - $date = is_array($headers['date']) ? $headers['date'][0] : $headers['date']; - if(!$signature) { - return false; - } - if(!$date) { - return false; - } - if(!now()->parse($date)->gt(now()->subDays(1)) || - !now()->parse($date)->lt(now()->addDays(1)) - ) { - return false; - } - if(!isset($bodyDecoded['id'])) { - return false; - } - $signatureData = HttpSignature::parseSignatureHeader($signature); - $keyId = Helpers::validateUrl($signatureData['keyId']); - $id = Helpers::validateUrl($bodyDecoded['id']); - $keyDomain = parse_url($keyId, PHP_URL_HOST); - $idDomain = parse_url($id, PHP_URL_HOST); - if(isset($bodyDecoded['object']) - && is_array($bodyDecoded['object']) - && isset($bodyDecoded['object']['attributedTo']) - ) { - $attr = Helpers::pluckval($bodyDecoded['object']['attributedTo']); - if(is_array($attr)) { - if(isset($attr['id'])) { - $attr = $attr['id']; - } else { - $attr = ""; - } - } - if(parse_url($attr, PHP_URL_HOST) !== $keyDomain) { - return false; - } - } - if(!$keyDomain || !$idDomain || $keyDomain !== $idDomain) { - return false; - } - $actor = Profile::whereKeyId($keyId)->first(); - if(!$actor) { - $actorUrl = Helpers::pluckval($bodyDecoded['actor']); - $actor = Helpers::profileFirstOrNew($actorUrl); - } - if(!$actor) { - return false; - } - $pkey = openssl_pkey_get_public($actor->public_key); - if(!$pkey) { - return false; - } - $inboxPath = "/users/{$profile->username}/inbox"; - list($verified, $headers) = HttpSignature::verify($pkey, $signatureData, $headers, $inboxPath, $body); - if($verified == 1) { - return true; - } else { - return false; - } - } + protected function verifySignature($headers, $profile, $payload) + { + $body = $this->payload; + $bodyDecoded = $payload; + $signature = is_array($headers['signature']) ? $headers['signature'][0] : $headers['signature']; + $date = is_array($headers['date']) ? $headers['date'][0] : $headers['date']; + if(!$signature) { + return false; + } + if(!$date) { + return false; + } + if(!now()->parse($date)->gt(now()->subDays(1)) || + !now()->parse($date)->lt(now()->addDays(1)) + ) { + return false; + } + if(!isset($bodyDecoded['id'])) { + return false; + } + $signatureData = HttpSignature::parseSignatureHeader($signature); - protected function blindKeyRotation($headers, $profile, $payload) - { - $signature = is_array($headers['signature']) ? $headers['signature'][0] : $headers['signature']; - $date = is_array($headers['date']) ? $headers['date'][0] : $headers['date']; - if(!$signature) { - return; - } - if(!$date) { - return; - } - if(!now()->parse($date)->gt(now()->subDays(1)) || - !now()->parse($date)->lt(now()->addDays(1)) - ) { - return; - } - $signatureData = HttpSignature::parseSignatureHeader($signature); - $keyId = Helpers::validateUrl($signatureData['keyId']); - $actor = Profile::whereKeyId($keyId)->whereNotNull('remote_url')->first(); - if(!$actor) { - return; - } - if(Helpers::validateUrl($actor->remote_url) == false) { - return; - } + if(!isset($signatureData['keyId'], $signatureData['signature'], $signatureData['headers']) || isset($signatureData['error'])) { + return false; + } - try { - $res = Http::timeout(20)->withHeaders([ - 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', - ])->get($actor->remote_url); - } catch (ConnectionException $e) { - return false; - } + $keyId = Helpers::validateUrl($signatureData['keyId']); + $id = Helpers::validateUrl($bodyDecoded['id']); + $keyDomain = parse_url($keyId, PHP_URL_HOST); + $idDomain = parse_url($id, PHP_URL_HOST); + if(isset($bodyDecoded['object']) + && is_array($bodyDecoded['object']) + && isset($bodyDecoded['object']['attributedTo']) + ) { + $attr = Helpers::pluckval($bodyDecoded['object']['attributedTo']); + if(is_array($attr)) { + if(isset($attr['id'])) { + $attr = $attr['id']; + } else { + $attr = ""; + } + } + if(parse_url($attr, PHP_URL_HOST) !== $keyDomain) { + return false; + } + } + if(!$keyDomain || !$idDomain || $keyDomain !== $idDomain) { + return false; + } + $actor = Profile::whereKeyId($keyId)->first(); + if(!$actor) { + $actorUrl = Helpers::pluckval($bodyDecoded['actor']); + $actor = Helpers::profileFirstOrNew($actorUrl); + } + if(!$actor) { + return false; + } + $pkey = openssl_pkey_get_public($actor->public_key); + if(!$pkey) { + return false; + } + $inboxPath = "/users/{$profile->username}/inbox"; + list($verified, $headers) = HttpSignature::verify($pkey, $signatureData, $headers, $inboxPath, $body); + if($verified == 1) { + return true; + } else { + return false; + } + } - if(!$res->ok()) { - return false; - } + protected function blindKeyRotation($headers, $profile, $payload) + { + $signature = is_array($headers['signature']) ? $headers['signature'][0] : $headers['signature']; + $date = is_array($headers['date']) ? $headers['date'][0] : $headers['date']; + if(!$signature) { + return; + } + if(!$date) { + return; + } + if(!now()->parse($date)->gt(now()->subDays(1)) || + !now()->parse($date)->lt(now()->addDays(1)) + ) { + return; + } + $signatureData = HttpSignature::parseSignatureHeader($signature); - $res = json_decode($res->body(), true, 8); - if(!$res || empty($res) || !isset($res['publicKey']) || !isset($res['publicKey']['id'])) { - return; - } - if($res['publicKey']['id'] !== $actor->key_id) { - return; - } - $actor->public_key = $res['publicKey']['publicKeyPem']; - $actor->save(); - return $this->verifySignature($headers, $profile, $payload); - } + if(!isset($signatureData['keyId'], $signatureData['signature'], $signatureData['headers']) || isset($signatureData['error'])) { + return; + } + + $keyId = Helpers::validateUrl($signatureData['keyId']); + $actor = Profile::whereKeyId($keyId)->whereNotNull('remote_url')->first(); + if(!$actor) { + return; + } + if(Helpers::validateUrl($actor->remote_url) == false) { + return; + } + + try { + $res = Http::timeout(20)->withHeaders([ + 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', + ])->get($actor->remote_url); + } catch (ConnectionException $e) { + return false; + } + + if(!$res->ok()) { + return false; + } + + $res = json_decode($res->body(), true, 8); + if(!$res || empty($res) || !isset($res['publicKey']) || !isset($res['publicKey']['id'])) { + return; + } + if($res['publicKey']['id'] !== $actor->key_id) { + return; + } + $actor->public_key = $res['publicKey']['publicKeyPem']; + $actor->save(); + return $this->verifySignature($headers, $profile, $payload); + } } diff --git a/app/Jobs/InboxPipeline/InboxWorker.php b/app/Jobs/InboxPipeline/InboxWorker.php index 305430085..c8508c0fc 100644 --- a/app/Jobs/InboxPipeline/InboxWorker.php +++ b/app/Jobs/InboxPipeline/InboxWorker.php @@ -5,9 +5,9 @@ namespace App\Jobs\InboxPipeline; use Cache; use App\Profile; use App\Util\ActivityPub\{ - Helpers, - HttpSignature, - Inbox + Helpers, + HttpSignature, + Inbox }; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -20,171 +20,180 @@ use Illuminate\Http\Client\ConnectionException; class InboxWorker implements ShouldQueue { - use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - protected $headers; - protected $payload; + protected $headers; + protected $payload; - public $timeout = 300; - public $tries = 1; - public $maxExceptions = 1; + public $timeout = 300; + public $tries = 1; + public $maxExceptions = 1; - /** - * Create a new job instance. - * - * @return void - */ - public function __construct($headers, $payload) - { - $this->headers = $headers; - $this->payload = $payload; - } + /** + * Create a new job instance. + * + * @return void + */ + public function __construct($headers, $payload) + { + $this->headers = $headers; + $this->payload = $payload; + } - /** - * Execute the job. - * - * @return void - */ - public function handle() - { - $profile = null; - $headers = $this->headers; + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $profile = null; + $headers = $this->headers; - if(empty($headers) || empty($this->payload) || !isset($headers['signature']) || !isset($headers['date'])) { - return; - } + if(empty($headers) || empty($this->payload) || !isset($headers['signature']) || !isset($headers['date'])) { + return; + } - $payload = json_decode($this->payload, true, 8); + $payload = json_decode($this->payload, true, 8); - if(isset($payload['id'])) { - $lockKey = 'pf:ap:user-inbox:activity:' . hash('sha256', $payload['id']); - if(Cache::get($lockKey) !== null) { - // Job processed already - return 1; - } - Cache::put($lockKey, 1, 3600); - } + if(isset($payload['id'])) { + $lockKey = 'pf:ap:user-inbox:activity:' . hash('sha256', $payload['id']); + if(Cache::get($lockKey) !== null) { + // Job processed already + return 1; + } + Cache::put($lockKey, 1, 3600); + } - if($this->verifySignature($headers, $payload) == true) { - ActivityHandler::dispatch($headers, $profile, $payload)->onQueue('shared'); - return; - } else { - return; - } - } + if($this->verifySignature($headers, $payload) == true) { + ActivityHandler::dispatch($headers, $profile, $payload)->onQueue('shared'); + return; + } else { + return; + } + } - protected function verifySignature($headers, $payload) - { - $body = $this->payload; - $bodyDecoded = $payload; - $signature = is_array($headers['signature']) ? $headers['signature'][0] : $headers['signature']; - $date = is_array($headers['date']) ? $headers['date'][0] : $headers['date']; - if(!$signature) { - return false; - } - if(!$date) { - return false; - } - if(!now()->parse($date)->gt(now()->subDays(1)) || - !now()->parse($date)->lt(now()->addDays(1)) - ) { - return false; - } - if(!isset($bodyDecoded['id'])) { - return false; - } - $signatureData = HttpSignature::parseSignatureHeader($signature); - $keyId = Helpers::validateUrl($signatureData['keyId']); - $id = Helpers::validateUrl($bodyDecoded['id']); - $keyDomain = parse_url($keyId, PHP_URL_HOST); - $idDomain = parse_url($id, PHP_URL_HOST); - if(isset($bodyDecoded['object']) - && is_array($bodyDecoded['object']) - && isset($bodyDecoded['object']['attributedTo']) - ) { - $attr = Helpers::pluckval($bodyDecoded['object']['attributedTo']); - if(is_array($attr)) { - if(isset($attr['id'])) { - $attr = $attr['id']; - } else { - $attr = ""; - } - } - if(parse_url($attr, PHP_URL_HOST) !== $keyDomain) { - return false; - } - } - if(!$keyDomain || !$idDomain || $keyDomain !== $idDomain) { - return false; - } - $actor = Profile::whereKeyId($keyId)->first(); - if(!$actor) { - $actorUrl = Helpers::pluckval($bodyDecoded['actor']); - $actor = Helpers::profileFirstOrNew($actorUrl); - } - if(!$actor) { - return false; - } - $pkey = openssl_pkey_get_public($actor->public_key); - if(!$pkey) { - return false; - } - $inboxPath = "/f/inbox"; - list($verified, $headers) = HttpSignature::verify($pkey, $signatureData, $headers, $inboxPath, $body); - if($verified == 1) { - return true; - } else { - return false; - } - } + protected function verifySignature($headers, $payload) + { + $body = $this->payload; + $bodyDecoded = $payload; + $signature = is_array($headers['signature']) ? $headers['signature'][0] : $headers['signature']; + $date = is_array($headers['date']) ? $headers['date'][0] : $headers['date']; + if(!$signature) { + return false; + } + if(!$date) { + return false; + } + if(!now()->parse($date)->gt(now()->subDays(1)) || + !now()->parse($date)->lt(now()->addDays(1)) + ) { + return false; + } + if(!isset($bodyDecoded['id'])) { + return false; + } + $signatureData = HttpSignature::parseSignatureHeader($signature); - protected function blindKeyRotation($headers, $payload) - { - $signature = is_array($headers['signature']) ? $headers['signature'][0] : $headers['signature']; - $date = is_array($headers['date']) ? $headers['date'][0] : $headers['date']; - if(!$signature) { - return; - } - if(!$date) { - return; - } - if(!now()->parse($date)->gt(now()->subDays(1)) || - !now()->parse($date)->lt(now()->addDays(1)) - ) { - return; - } - $signatureData = HttpSignature::parseSignatureHeader($signature); - $keyId = Helpers::validateUrl($signatureData['keyId']); - $actor = Profile::whereKeyId($keyId)->whereNotNull('remote_url')->first(); - if(!$actor) { - return; - } - if(Helpers::validateUrl($actor->remote_url) == false) { - return; - } + if(!isset($signatureData['keyId'], $signatureData['signature'], $signatureData['headers']) || isset($signatureData['error'])) { + return false; + } - try { - $res = Http::timeout(20)->withHeaders([ - 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', - ])->get($actor->remote_url); - } catch (ConnectionException $e) { - return false; - } + $keyId = Helpers::validateUrl($signatureData['keyId']); + $id = Helpers::validateUrl($bodyDecoded['id']); + $keyDomain = parse_url($keyId, PHP_URL_HOST); + $idDomain = parse_url($id, PHP_URL_HOST); + if(isset($bodyDecoded['object']) + && is_array($bodyDecoded['object']) + && isset($bodyDecoded['object']['attributedTo']) + ) { + $attr = Helpers::pluckval($bodyDecoded['object']['attributedTo']); + if(is_array($attr)) { + if(isset($attr['id'])) { + $attr = $attr['id']; + } else { + $attr = ""; + } + } + if(parse_url($attr, PHP_URL_HOST) !== $keyDomain) { + return false; + } + } + if(!$keyDomain || !$idDomain || $keyDomain !== $idDomain) { + return false; + } + $actor = Profile::whereKeyId($keyId)->first(); + if(!$actor) { + $actorUrl = Helpers::pluckval($bodyDecoded['actor']); + $actor = Helpers::profileFirstOrNew($actorUrl); + } + if(!$actor) { + return false; + } + $pkey = openssl_pkey_get_public($actor->public_key); + if(!$pkey) { + return false; + } + $inboxPath = "/f/inbox"; + list($verified, $headers) = HttpSignature::verify($pkey, $signatureData, $headers, $inboxPath, $body); + if($verified == 1) { + return true; + } else { + return false; + } + } - if(!$res->ok()) { - return false; - } + protected function blindKeyRotation($headers, $payload) + { + $signature = is_array($headers['signature']) ? $headers['signature'][0] : $headers['signature']; + $date = is_array($headers['date']) ? $headers['date'][0] : $headers['date']; + if(!$signature) { + return; + } + if(!$date) { + return; + } + if(!now()->parse($date)->gt(now()->subDays(1)) || + !now()->parse($date)->lt(now()->addDays(1)) + ) { + return; + } + $signatureData = HttpSignature::parseSignatureHeader($signature); + if(!isset($signatureData['keyId'], $signatureData['signature'], $signatureData['headers']) || isset($signatureData['error'])) { + return; + } - $res = json_decode($res->body(), true, 8); - if(!$res || empty($res) || !isset($res['publicKey']) || !isset($res['publicKey']['id'])) { - return; - } - if($res['publicKey']['id'] !== $actor->key_id) { - return; - } - $actor->public_key = $res['publicKey']['publicKeyPem']; - $actor->save(); - return $this->verifySignature($headers, $payload); - } + $keyId = Helpers::validateUrl($signatureData['keyId']); + $actor = Profile::whereKeyId($keyId)->whereNotNull('remote_url')->first(); + if(!$actor) { + return; + } + if(Helpers::validateUrl($actor->remote_url) == false) { + return; + } + + try { + $res = Http::timeout(20)->withHeaders([ + 'Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + 'User-Agent' => 'PixelfedBot v0.1 - https://pixelfed.org', + ])->get($actor->remote_url); + } catch (ConnectionException $e) { + return false; + } + + if(!$res->ok()) { + return false; + } + + $res = json_decode($res->body(), true, 8); + if(!$res || empty($res) || !isset($res['publicKey']) || !isset($res['publicKey']['id'])) { + return; + } + if($res['publicKey']['id'] !== $actor->key_id) { + return; + } + $actor->public_key = $res['publicKey']['publicKeyPem']; + $actor->save(); + return $this->verifySignature($headers, $payload); + } } diff --git a/app/Jobs/StatusPipeline/StatusDelete.php b/app/Jobs/StatusPipeline/StatusDelete.php index d7f237e20..0a0721648 100644 --- a/app/Jobs/StatusPipeline/StatusDelete.php +++ b/app/Jobs/StatusPipeline/StatusDelete.php @@ -2,7 +2,7 @@ namespace App\Jobs\StatusPipeline; -use DB, Storage; +use DB, Cache, Storage; use App\{ AccountInterstitial, Bookmark, @@ -81,6 +81,8 @@ class StatusDelete implements ShouldQueue } } + Cache::forget('pf:atom:user-feed:by-id:' . $status->profile_id); + if(config_cache('federation.activitypub.enabled') == true) { return $this->fanoutDelete($status); } else { diff --git a/app/Jobs/StatusPipeline/StatusEntityLexer.php b/app/Jobs/StatusPipeline/StatusEntityLexer.php index 591a06604..1ee57c559 100644 --- a/app/Jobs/StatusPipeline/StatusEntityLexer.php +++ b/app/Jobs/StatusPipeline/StatusEntityLexer.php @@ -12,6 +12,7 @@ use App\Services\PublicTimelineService; use App\Util\Lexer\Autolink; use App\Util\Lexer\Extractor; use App\Util\Sentiment\Bouncer; +use Cache; use DB; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -166,6 +167,8 @@ class StatusEntityLexer implements ShouldQueue if(config_cache('pixelfed.bouncer.enabled')) { Bouncer::get($status); } + + Cache::forget('pf:atom:user-feed:by-id:' . $status->profile_id); $hideNsfw = config('instance.hide_nsfw_on_public_feeds'); if( $status->uri == null && $status->scope == 'public' && diff --git a/app/Services/InstanceService.php b/app/Services/InstanceService.php index b53e8ac00..f044f1b27 100644 --- a/app/Services/InstanceService.php +++ b/app/Services/InstanceService.php @@ -11,6 +11,7 @@ class InstanceService const CACHE_KEY_BANNED_DOMAINS = 'instances:banned:domains'; const CACHE_KEY_UNLISTED_DOMAINS = 'instances:unlisted:domains'; const CACHE_KEY_NSFW_DOMAINS = 'instances:auto_cw:domains'; + const CACHE_KEY_STATS = 'pf:services:instances:stats'; public static function getByDomain($domain) { @@ -52,11 +53,24 @@ class InstanceService }); } + public static function stats() + { + return Cache::remember(self::CACHE_KEY_STATS, 86400, function() { + return [ + 'total_count' => Instance::count(), + 'new_count' => Instance::where('created_at', '>', now()->subDays(14))->count(), + 'banned_count' => Instance::whereBanned(true)->count(), + 'nsfw_count' => Instance::whereAutoCw(true)->count() + ]; + }); + } + public static function refresh() { Cache::forget(self::CACHE_KEY_BANNED_DOMAINS); Cache::forget(self::CACHE_KEY_UNLISTED_DOMAINS); Cache::forget(self::CACHE_KEY_NSFW_DOMAINS); + Cache::forget(self::CACHE_KEY_STATS); self::getBannedDomains(); self::getUnlistedDomains(); diff --git a/database/migrations/2023_03_19_050342_add_notes_to_instances_table.php b/database/migrations/2023_03_19_050342_add_notes_to_instances_table.php new file mode 100644 index 000000000..b259c2e5f --- /dev/null +++ b/database/migrations/2023_03_19_050342_add_notes_to_instances_table.php @@ -0,0 +1,48 @@ +text('notes')->nullable(); + $table->boolean('manually_added')->default(false); + $table->string('base_domain')->nullable(); + $table->boolean('ban_subdomains')->nullable()->index(); + $table->string('ip_address')->nullable(); + $table->boolean('list_limitation')->default(false)->index(); + $table->index('banned'); + $table->index('auto_cw'); + $table->index('unlisted'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('instances', function (Blueprint $table) { + $table->dropColumn('notes'); + $table->dropColumn('manually_added'); + $table->dropColumn('base_domain'); + $table->dropColumn('ban_subdomains'); + $table->dropColumn('ip_address'); + $table->dropColumn('list_limitation'); + $table->dropIndex('instances_banned_index'); + $table->dropIndex('instances_auto_cw_index'); + $table->dropIndex('instances_unlisted_index'); + }); + } +}; diff --git a/public/js/admin.js b/public/js/admin.js index 2940baed0..f2cd2496c 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -1,2 +1,2 @@ /*! For license information please see admin.js.LICENSE.txt */ -(self.webpackChunkpixelfed=self.webpackChunkpixelfed||[]).push([[467],{42751:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>i});var s=a(19755);const i={data:function(){return{loaded:!1,initialData:{},tabIndex:1,tabs:[{id:1,title:"Overview",icon:"far fa-home"},{id:3,title:"Server Details",icon:"far fa-info-circle"},{id:4,title:"Admin Contact",icon:"far fa-user-crown"},{id:5,title:"Favourite Posts",icon:"far fa-heart"},{id:6,title:"Privacy Pledge",icon:"far fa-eye-slash"},{id:7,title:"Community Guidelines",icon:"far fa-smile-beam"},{id:8,title:"Feature Requirements",icon:"far fa-bolt"},{id:9,title:"User Testimonials",icon:"far fa-comment-smile"}],form:{summary:"",location:0,contact_account:0,contact_email:"",privacy_pledge:void 0,banner_image:void 0,locale:0},requirements:{activitypub_enabled:void 0,open_registration:void 0,oauth_enabled:void 0},feature_config:[],requirements_validator:[],popularPostsLoaded:!1,popularPosts:[],selectedPopularPosts:[],selectedPosts:[],favouritePostByIdInput:"",favouritePostByIdFetching:!1,communityGuidelines:[],isUploadingBanner:!1,state:{is_eligible:!1,submission_exists:!1,awaiting_approval:!1,is_active:!1,submission_timestamp:void 0},isSubmitting:!1,testimonial:{username:void 0,body:void 0},testimonials:[],isEditingTestimonial:!1,editingTestimonial:void 0}},mounted:function(){this.fetchInitialData()},methods:{toggleTab:function(t){this.tabIndex=t},fetchInitialData:function(){var t=this;axios.get("/i/admin/api/directory/initial-data").then((function(e){t.initialData=e.data,e.data.activitypub_enabled&&(t.requirements.activitypub_enabled=e.data.activitypub_enabled),e.data.open_registration&&(t.requirements.open_registration=e.data.open_registration),e.data.oauth_enabled&&(t.requirements.oauth_enabled=e.data.oauth_enabled),e.data.summary&&(t.form.summary=e.data.summary),e.data.location&&(t.form.location=e.data.location),e.data.favourite_posts&&(t.selectedPosts=e.data.favourite_posts),e.data.admin&&(t.form.contact_account=e.data.admin),e.data.contact_email&&(t.form.contact_email=e.data.contact_email),e.data.community_guidelines&&(t.communityGuidelines=e.data.community_guidelines),e.data.privacy_pledge&&(t.form.privacy_pledge=e.data.privacy_pledge),e.data.feature_config&&(t.feature_config=e.data.feature_config),e.data.requirements_validator&&(t.requirements_validator=e.data.requirements_validator),e.data.banner_image&&(t.form.banner_image=e.data.banner_image),e.data.primary_locale&&(t.form.primary_locale=e.data.primary_locale),e.data.is_eligible&&(t.state.is_eligible=e.data.is_eligible),e.data.testimonials&&(t.testimonials=e.data.testimonials),e.data.submission_state&&(t.state.is_active=e.data.submission_state.active_submission,t.state.submission_exists=e.data.submission_state.pending_submission,t.state.awaiting_approval=e.data.submission_state.pending_submission)})).then((function(){t.loaded=!0}))},initPopularPosts:function(){var t=this;this.popularPostsLoaded||axios.get("/i/admin/api/directory/popular-posts").then((function(e){t.popularPosts=e.data.filter((function(e){return!t.selectedPosts.map((function(t){return t.id})).includes(e.id)}))})).then((function(){t.popularPostsLoaded=!0}))},formatCount:function(t){return window.App.util.format.count(t)},formatDateTime:function(t){var e=new Date(t);return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(e)},formatDate:function(t){var e=new Date(t);return new Intl.DateTimeFormat("en-US",{month:"short",year:"numeric"}).format(e)},formatTimestamp:function(t){return window.App.util.format.timeAgo(t)},togglePopularPost:function(t,e){if(this.selectedPosts.length)if(this.selectedPosts.map((function(t){return t.id})).includes(t))this.selectedPosts=this.selectedPosts.filter((function(e){return e.id!=t}));else{if(this.selectedPosts.length>=12)return swal("Oops!","You can only select 12 popular posts","error"),void(event.currentTarget.checked=!1);this.selectedPosts.push(e)}else this.selectedPosts.push(e)},toggleSelectedPost:function(t){this.selectedPosts=this.selectedPosts.filter((function(e){return e.id!==t.id}))},handlePostByIdSearch:function(){var t=this;event.currentTarget.blur(),this.selectedPosts.length>=12?swal("Oops","You can only select 12 posts","error"):(this.favouritePostByIdFetching=!0,axios.post("/i/admin/api/directory/add-by-id",{q:this.favouritePostByIdInput}).then((function(e){t.selectedPosts.map((function(t){return t.id})).includes(e.data.id)?swal("Oops!","You already selected this post!","error"):(t.selectedPosts.push(e.data),t.favouritePostByIdInput="",t.popularPosts=t.popularPosts.filter((function(t){return t.id!=e.data.id})))})).then((function(){t.favouritePostByIdFetching=!1,s("#favposts-1-tab").tab("show")})).catch((function(e){swal("Invalid Post","The post id you added is not valid","error"),t.favouritePostByIdFetching=!1})))},save:function(){axios.post("/i/admin/api/directory/save",{location:this.form.location,summary:this.form.summary,admin_uid:this.form.contact_account,contact_email:this.form.contact_email,favourite_posts:this.selectedPosts.map((function(t){return t.id})),privacy_pledge:this.form.privacy_pledge}).then((function(t){swal("Success!","Successfully saved directory settings","success")})).catch((function(t){swal("Oops!",t.response.data.message,"error")}))},uploadBannerImage:function(){var t=this;if(this.isUploadingBanner=!0,window.confirm("Are you sure you want to update your server banner image?")){var e=new FormData;e.append("banner_image",this.$refs.bannerImageRef.files[0]),axios.post("/i/admin/api/directory/save",e,{headers:{"Content-Type":"multipart/form-data"}}).then((function(e){t.form.banner_image=e.data.banner_image,t.isUploadingBanner=!1})).catch((function(e){swal("Error",e.response.data.message,"error"),t.isUploadingBanner=!1}))}else this.isUploadingBanner=!1},deleteBannerImage:function(){var t=this;window.confirm("Are you sure you want to delete your server banner image?")&&axios.delete("/i/admin/api/directory/banner-image").then((function(e){t.form.banner_image=e.data})).catch((function(t){console.log(t)}))},handleSubmit:function(){var t=this;window.confirm("Are you sure you want to submit your server?")&&(this.isSubmitting=!0,axios.post("/i/admin/api/directory/submit").then((function(e){setTimeout((function(){t.isSubmitting=!1,t.state.is_active=!0,console.log(e.data)}),3e3)})).catch((function(t){swal("Error",t.response.data.message,"error")})))},deleteTestimonial:function(t){var e=this;window.confirm("Are you sure you want to delete the testimonial by "+t.profile.username+"?")&&axios.post("/i/admin/api/directory/testimonial/delete",{profile_id:t.profile.id}).then((function(a){e.testimonials=e.testimonials.filter((function(e){return e.profile.id!=t.profile.id}))}))},editTestimonial:function(t){this.isEditingTestimonial=!0,this.editingTestimonial=t},saveTestimonial:function(){var t,e=this;null===(t=event.currentTarget)||void 0===t||t.blur(),axios.post("/i/admin/api/directory/testimonial/save",{username:this.testimonial.username,body:this.testimonial.body}).then((function(t){e.testimonials.push(t.data),e.testimonial={username:void 0,body:void 0}})).catch((function(t){var e=t.response.data.hasOwnProperty("error")?t.response.data.error:t.response.data.message;swal("Oops!",e,"error")}))},cancelEditTestimonial:function(){var t;null===(t=event.currentTarget)||void 0===t||t.blur(),this.isEditingTestimonial=!1,this.editingTestimonial={}},saveEditTestimonial:function(){var t,e=this;null===(t=event.currentTarget)||void 0===t||t.blur(),axios.post("/i/admin/api/directory/testimonial/update",{profile_id:this.editingTestimonial.profile.id,body:this.editingTestimonial.body}).then((function(t){e.isEditingTestimonial=!1,e.editingTestimonial={}}))}},watch:{selectedPosts:function(t){var e=t.map((function(t){return t.id}));this.popularPosts=this.popularPosts.filter((function(t){return!e.includes(t.id)}))}}}},46994:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>i});var s=a(29655);a(67964);const i={components:{Autocomplete:s.default},data:function(){return{loaded:!1,tabIndex:0,stats:{total_unique:0,total_posts:0,added_14_days:0,total_banned:0,total_nsfw:0},hashtags:[],pagination:[],sortCol:void 0,sortDir:void 0,trendingTags:[],bannedTags:[],showEditModal:!1,editingHashtag:void 0,editSaved:!1,editSavedTimeout:void 0,searchLoading:!1}},mounted:function(){var t=this;this.fetchStats(),this.fetchHashtags(),this.$root.$on("bv::modal::hidden",(function(e,a){t.editSaved=!1,clearTimeout(t.editSavedTimeout),t.editingHashtag=void 0}))},watch:{editingHashtag:{deep:!0,immediate:!0,handler:function(t,e){null!=t&&null!=e&&this.storeHashtagEdit(t)}}},methods:{fetchStats:function(){var t=this;axios.get("/i/admin/api/hashtags/stats").then((function(e){t.stats=e.data}))},fetchHashtags:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/i/admin/api/hashtags/query";axios.get(e).then((function(e){t.hashtags=e.data.data,t.pagination={next:e.data.links.next,prev:e.data.links.prev},t.loaded=!0}))},prettyCount:function(t){return t?t.toLocaleString("en-CA",{compactDisplay:"short",notation:"compact"}):t},timeAgo:function(t){return t?App.util.format.timeAgo(t):t},boolIcon:function(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"text-muted";return t?''):'')},paginate:function(t){event.currentTarget.blur();var e="next"==t?this.pagination.next:this.pagination.prev;this.fetchHashtags(e)},toggleCol:function(t){this.sortCol=t,this.sortDir?this.sortDir="asc"==this.sortDir?"desc":"asc":this.sortDir="desc";var e="/i/admin/api/hashtags/query?sort="+t+"&dir="+this.sortDir;this.fetchHashtags(e)},buildColumn:function(t,e){var a='';return e==this.sortCol&&(a="desc"==this.sortDir?'':''),"".concat(t," ").concat(a)},toggleTab:function(t){var e=this;if(this.loaded=!1,this.tabIndex=t,0===t)this.fetchHashtags();else if(1===t)axios.get("/api/v1.1/discover/posts/hashtags").then((function(t){e.trendingTags=t.data,e.loaded=!0}));else if(2===t){this.fetchHashtags("/i/admin/api/hashtags/query?action=banned")}else if(3===t){this.fetchHashtags("/i/admin/api/hashtags/query?action=nsfw")}},openEditHashtagModal:function(t){var e=this;this.editSaved=!1,clearTimeout(this.editSavedTimeout),this.$nextTick((function(){axios.get("/i/admin/api/hashtags/get",{params:{id:t.id}}).then((function(t){e.editingHashtag=t.data.data,e.showEditModal=!0}))}))},storeHashtagEdit:function(t,e){var a=this;this.editSaved=!1,t.is_banned&&(t.can_trend||t.can_search)&&swal("Banned Hashtag Limits","Banned hashtags cannot trend or be searchable, to allow those you need to unban the hashtag","error"),axios.post("/i/admin/api/hashtags/update",t).then((function(e){a.editSaved=!0,1!==a.tabIndex&&(a.hashtags=a.hashtags.map((function(a){return a.id==t.id&&(a=e.data.data),a}))),a.editSavedTimeout=setTimeout((function(){a.editSaved=!1}),5e3)})).catch((function(t){swal("Oops!","An error occured, please try again.","error"),console.log(t)}))},composeSearch:function(t){return t.length<1?[]:axios.get("/i/admin/api/hashtags/query",{params:{q:t,sort:"cached_count",dir:"desc"}}).then((function(t){return t.data.data}))},getTagResultValue:function(t){return t.name},onSearchResultClick:function(t){this.openEditHashtagModal(t)},clearTrendingCache:function(){event.currentTarget.blur(),window.confirm("Are you sure you want to clear the trending hashtags cache?")&&axios.post("/i/admin/api/hashtags/clear-trending-cache").then((function(t){swal("Cache Cleared!","Successfully cleared the trending hashtag cache!","success")}))}}}},42014:(t,e,a)=>{"use strict";a.r(e),a.d(e,{render:()=>s,staticRenderFns:()=>i});var s=function(){var t=this,e=t._self._c;return t.loaded?e("div",[e("div",{staticClass:"header bg-primary pb-2 mt-n4"},[e("div",{staticClass:"container-fluid"},[e("div",{staticClass:"header-body"},[e("div",{staticClass:"row align-items-center py-4"},[t._m(0),t._v(" "),e("div",{staticClass:"col-lg-6 col-5"},[e("p",{staticClass:"text-right"},[e("button",{staticClass:"btn btn-outline-white btn-lg px-5 py-2",on:{click:t.save}},[t._v("Save changes")])])])])])])]),t._v(" "),e("div",{staticClass:"container"},[e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-3"},[e("div",{staticClass:"nav-wrapper"},[e("div",{staticClass:"nav flex-column nav-pills",attrs:{id:"tabs-icons-text",role:"tablist","aria-orientation":"vertical"}},t._l(t.tabs,(function(a){return e("div",{staticClass:"nav-item"},[e("a",{staticClass:"nav-link mb-sm-3",class:{active:t.tabIndex===a.id},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.toggleTab(a.id)}}},[e("i",{class:a.icon}),t._v(" "),e("span",{staticClass:"ml-2"},[t._v(t._s(a.title))])])])})),0)])]),t._v(" "),e("div",{staticClass:"col-12 col-md-9"},[e("div",{staticClass:"card shadow mt-3"},[e("div",{staticClass:"card-body"},[e("div",{staticClass:"tab-content"},[1===t.tabIndex?e("div",{staticClass:"tab-pane fade show active"},[t.isSubmitting||t.state.awaiting_approval||t.state.is_active?t.isSubmitting||!t.state.awaiting_approval||t.state.is_active?!t.isSubmitting&&t.state.awaiting_approval&&t.state.is_active?e("div",[t._m(3)]):t.isSubmitting||t.state.awaiting_approval||!t.state.is_active?t.isSubmitting?e("div",[e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("b-spinner",{attrs:{variant:"primary"}}),t._v(" "),e("p",{staticClass:"lead my-0 text-primary"},[t._v("Sending submission...")])],1)]):e("div",[t._m(6)]):e("div",[e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("h2",{staticClass:"font-weight-bold"},[t._v("Active Listing")]),t._v(" "),t._m(4),t._v(" "),t._m(5),t._v(" "),e("button",{staticClass:"btn btn-primary btn-sm mt-3 font-weight-bold px-5 text-uppercase",on:{click:t.handleSubmit}},[t._v("\n Update my listing on pixelfed.org\n ")])])]):e("div",[t._m(2)]):e("div",{staticClass:"d-flex align-items-center justify-content-center"},[e("div",{staticClass:"text-center mb-4"},[t._m(1),t._v(" "),e("p",{staticClass:"display-3 mb-1"},[t._v("Awaiting Submission")]),t._v(" "),t.state.is_eligible||t.state.submission_exists?t.state.is_eligible&&!t.state.submission_exists?e("div",{staticClass:"mb-4"},[e("p",{staticClass:"lead mt-0 text-muted"},[t._v("Your directory listing is ready for submission!")]),t._v(" "),e("button",{staticClass:"btn btn-primary btn-lg font-weight-bold px-5 text-uppercase",on:{click:t.handleSubmit}},[t._v("\n Submit my Server to pixelfed.org\n ")])]):t._e():e("p",{staticClass:"lead mt-0 text-muted"},[t._v("Your directory listing isn't completed yet")])])]),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card text-left"},[e("div",{staticClass:"list-group list-group-flush"},[e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.requirements.open_registration?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.requirements.open_registration?"Open":"Closed")+" account registration\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.requirements.oauth_enabled?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.requirements.oauth_enabled?"Enabled":"Disabled")+" mobile apis/oauth\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.requirements.activitypub_enabled?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.requirements.activitypub_enabled?"Enabled":"Disabled")+" activitypub federation\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.form.summary&&t.form.summary.length&&t.form.location&&t.form.location.length?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.form.summary&&t.form.summary.length&&t.form.location&&t.form.location.length?"Configured":"Missing")+" server details\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.requirements_validator&&0==t.requirements_validator.length?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.requirements_validator&&0==t.requirements_validator.length?"Valid":"Invalid")+" feature requirements\n ")])])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card text-left"},[e("div",{staticClass:"list-group list-group-flush"},[e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.form.contact_account?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.form.contact_account?"Configured":"Missing")+" admin account\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.form.contact_email?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.form.contact_email?"Configured":"Missing")+" contact email\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.selectedPosts&&t.selectedPosts.length?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.selectedPosts&&t.selectedPosts.length?"Configured":"Missing")+" favourite posts\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.form.privacy_pledge?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.form.privacy_pledge?"Configured":"Missing")+" privacy pledge\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.communityGuidelines&&t.communityGuidelines.length?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.communityGuidelines&&t.communityGuidelines.length?"Configured":"Missing")+" community guidelines\n ")])])])])])])]):2===t.tabIndex?e("div",{staticClass:"tab-pane fade show active"},[e("p",{staticClass:"description"},[t._v("Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.")])]):3===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Server Details")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Edit your server details to better describe it")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card shadow-none border card-body"},[e("div",{staticClass:"form-group mb-0"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Summary")]),t._v(" "),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.form.summary,expression:"form.summary"}],staticClass:"form-control form-control-muted",attrs:{id:"form-summary",rows:"3",placeholder:"A descriptive summary of your instance up to 140 characters long. HTML is not allowed."},domProps:{value:t.form.summary},on:{input:function(e){e.target.composing||t.$set(t.form,"summary",e.target.value)}}}),t._v(" "),e("p",{staticClass:"help-text small text-muted text-right"},[t._v("\n "+t._s(t.form.summary&&t.form.summary.length?t.form.summary.length:0)+"/140\n ")])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card shadow-none border card-body"},[e("div",{staticClass:"form-group mb-0"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Location")]),t._v(" "),e("select",{directives:[{name:"model",rawName:"v-model",value:t.form.location,expression:"form.location"}],staticClass:"form-control form-control-muted",on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.$set(t.form,"location",e.target.multiple?a:a[0])}}},[e("option",{attrs:{selected:"",disabled:"",value:"0"}},[t._v("Select the country your server is in")]),t._v(" "),t._l(t.initialData.countries,(function(a){return e("option",{domProps:{value:a}},[t._v(t._s(a))])}))],2),t._v(" "),e("p",{staticClass:"form-text small text-muted"},[t._v("Select the country your server is hosted in, even if you are in a different country")])])])])]),t._v(" "),e("div",{staticClass:"list-group mb-4"},[e("div",{staticClass:"list-group-item"},[e("label",{staticClass:"font-weight-bold mb-0"},[t._v("Server Banner")]),t._v(" "),e("p",{staticClass:"small"},[t._v("Add an optional banner image to your directory listing")]),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card mb-0 shadow-none border"},[t.form.banner_image?e("div",[e("a",{attrs:{href:t.form.banner_image,target:"_blank"}},[e("img",{staticClass:"card-img-top",attrs:{src:t.form.banner_image}})])]):e("div",{staticClass:"card-body bg-primary text-white"},[t._m(7),t._v(" "),e("p",{staticClass:"text-center mb-0"},[t._v("No banner image")])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[t.isUploadingBanner?e("div",{staticClass:"text-center"},[e("b-spinner",{attrs:{variant:"primary"}})],1):e("div",{staticClass:"custom-file"},[e("input",{ref:"bannerImageRef",staticClass:"custom-file-input",attrs:{type:"file",id:"banner_image"},on:{change:t.uploadBannerImage}}),t._v(" "),e("label",{staticClass:"custom-file-label",attrs:{for:"banner_image"}},[t._v("Choose file")]),t._v(" "),e("p",{staticClass:"form-text text-muted small mb-0"},[t._v("Must be 1920 by 1080 pixels")]),t._v(" "),t._m(8),t._v(" "),t.form.banner_image&&!t.form.banner_image.endsWith("default.jpg")?e("div",[e("button",{staticClass:"btn btn-danger font-weight-bold btn-block mt-5",on:{click:t.deleteBannerImage}},[t._v("Delete banner image")])]):t._e()])])])])]),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card shadow-none border card-body"},[e("div",{staticClass:"form-group mb-0"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Primary Language")]),t._v(" "),e("select",{directives:[{name:"model",rawName:"v-model",value:t.form.primary_locale,expression:"form.primary_locale"}],staticClass:"form-control form-control-muted",attrs:{disabled:""},on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.$set(t.form,"primary_locale",e.target.multiple?a:a[0])}}},t._l(t.initialData.available_languages,(function(a){return e("option",{domProps:{value:a.code}},[t._v(t._s(a.name))])})),0),t._v(" "),t._m(9)])])])])]):4===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Admin Contact")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Set a designated admin account and public email address")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[t.initialData.admins.length?e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Designated Admin")]),t._v(" "),e("select",{directives:[{name:"model",rawName:"v-model",value:t.form.contact_account,expression:"form.contact_account"}],staticClass:"form-control form-control-muted",on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.$set(t.form,"contact_account",e.target.multiple?a:a[0])}}},[e("option",{attrs:{disabled:"",value:"0"}},[t._v("Select a designated admin")]),t._v(" "),t._l(t.initialData.admins,(function(a,s){return e("option",{key:"pfc-"+a+s,domProps:{value:a.pid}},[t._v(t._s(a.username))])}))],2)]):e("div",{staticClass:"px-3 pb-2 pt-0 border border-danger rounded"},[e("p",{staticClass:"lead font-weight-bold text-danger"},[t._v("No admin(s) found")]),t._v(" "),t._m(10)])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Public Email")]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.form.contact_email,expression:"form.contact_email"}],staticClass:"form-control form-control-muted",attrs:{placeholder:"info@example.org"},domProps:{value:t.form.contact_email},on:{input:function(e){e.target.composing||t.$set(t.form,"contact_email",e.target.value)}}}),t._v(" "),e("p",{staticClass:"help-text small text-muted"},[t._v("\n Must be a valid email address\n ")])])])])]):5===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Favourite Posts")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Show off a few favourite posts from your server")]),t._v(" "),e("hr",{staticClass:"mt-0 mb-1"}),t._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:t.selectedPosts&&12!==t.selectedPosts.length,expression:"selectedPosts && selectedPosts.length !== 12"}],staticClass:"nav-wrapper"},[e("ul",{staticClass:"nav nav-pills nav-fill flex-column flex-md-row",attrs:{role:"tablist"}},[e("li",{staticClass:"nav-item"},[e("a",{staticClass:"nav-link mb-sm-3 mb-md-0 active",attrs:{id:"favposts-1-tab","data-toggle":"tab",href:"#favposts-1",role:"tab","aria-controls":"favposts-1","aria-selected":"true"}},[t._v(t._s(this.selectedPosts.length?this.selectedPosts.length:"")+" Selected Posts")])]),t._v(" "),t.selectedPosts&&t.selectedPosts.length<12?e("li",{staticClass:"nav-item"},[e("a",{staticClass:"nav-link mb-sm-3 mb-md-0",attrs:{id:"favposts-2-tab","data-toggle":"tab",href:"#favposts-2",role:"tab","aria-controls":"favposts-2","aria-selected":"false"}},[t._v("Add by post id")])]):t._e(),t._v(" "),t.selectedPosts&&t.selectedPosts.length<12?e("li",{staticClass:"nav-item"},[e("a",{staticClass:"nav-link mb-sm-3 mb-md-0",attrs:{id:"favposts-3-tab","data-toggle":"tab",href:"#favposts-3",role:"tab","aria-controls":"favposts-3","aria-selected":"false"},on:{click:t.initPopularPosts}},[t._v("Add by popularity")])]):t._e()])]),t._v(" "),e("div",{staticClass:"tab-content mt-3"},[e("div",{staticClass:"tab-pane fade list-fade-bottom show active",attrs:{id:"favposts-1",role:"tabpanel","aria-labelledby":"favposts-1-tab"}},[t.selectedPosts&&t.selectedPosts.length?e("div",{staticStyle:{"max-height":"520px","overflow-y":"auto"}},[t._l(t.selectedPosts,(function(a){return e("div",{key:"sp-"+a.id,staticClass:"list-group-item border-primary form-control-muted"},[e("div",{staticClass:"media align-items-center"},[e("div",{staticClass:"custom-control custom-checkbox mr-2"},[e("input",{staticClass:"custom-control-input",attrs:{type:"checkbox",checked:"",id:"checkbox-sp-".concat(a.id)},on:{change:function(e){return t.toggleSelectedPost(a)}}}),t._v(" "),e("label",{staticClass:"custom-control-label",attrs:{for:"checkbox-sp-".concat(a.id)}})]),t._v(" "),e("img",{staticClass:"border rounded-sm mr-3",staticStyle:{"object-fit":"cover"},attrs:{src:a.media_attachments[0].url,width:"100",height:"100",loading:"lazy"}}),t._v(" "),e("div",{staticClass:"media-body"},[e("p",{staticClass:"lead mt-0 mb-0 font-weight-bold"},[t._v("@"+t._s(a.account.username))]),t._v(" "),e("p",{staticClass:"text-muted mb-0",staticStyle:{"font-size":"14px"}},[e("span",[e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatCount(a.favourites_count)))]),t._v(" Likes")]),t._v(" "),e("span",{staticClass:"mx-2"},[t._v("·")]),t._v(" "),e("span",[e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatCount(a.account.followers_count)))]),t._v(" Followers")]),t._v(" "),e("span",{staticClass:"mx-2"},[t._v("·")]),t._v(" "),e("span",[t._v("Created "),e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatDateTime(a.created_at)))])])])]),t._v(" "),e("a",{staticClass:"btn btn-outline-primary btn-sm rounded-pill",attrs:{href:a.url,target:"_blank"}},[t._v("View")])])])})),t._v(" "),e("div",{staticClass:"mt-5 mb-5 pt-3"})],2):e("div",[t._m(11)])]),t._v(" "),e("div",{staticClass:"tab-pane fade",attrs:{id:"favposts-2",role:"tabpanel","aria-labelledby":"favposts-2-tab"}},[e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold"},[t._v("Find and add by post id")]),t._v(" "),e("div",{staticClass:"input-group mb-3"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.favouritePostByIdInput,expression:"favouritePostByIdInput"}],staticClass:"form-control form-control-muted border",attrs:{type:"number",placeholder:"Post id",min:"1",max:"99999999999999999999",disabled:t.favouritePostByIdFetching},domProps:{value:t.favouritePostByIdInput},on:{input:function(e){e.target.composing||(t.favouritePostByIdInput=e.target.value)}}}),t._v(" "),e("div",{staticClass:"input-group-append"},[t.favouritePostByIdFetching?e("button",{staticClass:"btn btn-outline-primary",attrs:{disabled:""}},[t._m(12)]):e("button",{staticClass:"btn btn-outline-primary",attrs:{type:"button"},on:{click:t.handlePostByIdSearch}},[t._v("\n Search\n ")])])])])]),t._v(" "),t._m(13)])]),t._v(" "),e("div",{staticClass:"tab-pane fade list-fade-bottom mb-0",attrs:{id:"favposts-3",role:"tabpanel","aria-labelledby":"favposts-3-tab"}},[t.popularPostsLoaded?e("div",{staticClass:"list-group",staticStyle:{"max-height":"520px","overflow-y":"auto"}},[t._l(t.popularPosts,(function(a){return e("div",{key:"pp-"+a.id,staticClass:"list-group-item",class:[t.selectedPosts.includes(a)?"border-primary form-control-muted":""]},[e("div",{staticClass:"media align-items-center"},[e("div",{staticClass:"custom-control custom-checkbox mr-2"},[e("input",{staticClass:"custom-control-input",attrs:{type:"checkbox",id:"checkbox-pp-".concat(a.id)},domProps:{checked:t.selectedPosts.includes(a)},on:{change:function(e){return t.togglePopularPost(a.id,a)}}}),t._v(" "),e("label",{staticClass:"custom-control-label",attrs:{for:"checkbox-pp-".concat(a.id)}})]),t._v(" "),e("img",{staticClass:"border rounded-sm mr-3",staticStyle:{"object-fit":"cover"},attrs:{src:a.media_attachments[0].url,width:"100",height:"100",loading:"lazy"}}),t._v(" "),e("div",{staticClass:"media-body"},[e("p",{staticClass:"lead mt-0 mb-0 font-weight-bold"},[t._v("@"+t._s(a.account.username))]),t._v(" "),e("p",{staticClass:"text-muted mb-0",staticStyle:{"font-size":"14px"}},[e("span",[e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatCount(a.favourites_count)))]),t._v(" Likes")]),t._v(" "),e("span",{staticClass:"mx-2"},[t._v("·")]),t._v(" "),e("span",[e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatCount(a.account.followers_count)))]),t._v(" Followers")]),t._v(" "),e("span",{staticClass:"mx-2"},[t._v("·")]),t._v(" "),e("span",[t._v("Created "),e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatDateTime(a.created_at)))])])])]),t._v(" "),e("a",{staticClass:"btn btn-outline-primary btn-sm rounded-pill",attrs:{href:a.url,target:"_blank"}},[t._v("View")])])])})),t._v(" "),e("div",{staticClass:"mt-5 mb-3"})],2):e("div",{staticClass:"text-center py-5"},[t._m(14)])])])]):6===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Privacy Pledge")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Pledge to keep you and your data private and securely stored")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("p",[t._v("To qualify for the Privacy Pledge, you must abide by the following rules:")]),t._v(" "),t._m(15),t._v(" "),e("p",{staticClass:"small text-muted mb-0"},[t._v("You may use 3rd party services like captchas on specific pages, so long as they are clearly defined in your privacy policy")]),t._v(" "),e("hr"),t._v(" "),e("p"),e("div",{staticClass:"custom-control custom-checkbox mr-2"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.form.privacy_pledge,expression:"form.privacy_pledge"}],staticClass:"custom-control-input",attrs:{type:"checkbox",id:"privacy-pledge"},domProps:{checked:Array.isArray(t.form.privacy_pledge)?t._i(t.form.privacy_pledge,null)>-1:t.form.privacy_pledge},on:{change:function(e){var a=t.form.privacy_pledge,s=e.target,i=!!s.checked;if(Array.isArray(a)){var n=t._i(a,null);s.checked?n<0&&t.$set(t.form,"privacy_pledge",a.concat([null])):n>-1&&t.$set(t.form,"privacy_pledge",a.slice(0,n).concat(a.slice(n+1)))}else t.$set(t.form,"privacy_pledge",i)}}}),t._v(" "),e("label",{staticClass:"custom-control-label font-weight-bold",attrs:{for:"privacy-pledge"}},[t._v("I agree to the uphold the Privacy Pledge")])]),t._v(" "),e("p")]):7===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Community Guidelines")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("A few ground rules to keep your community healthy and safe.")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),t.communityGuidelines&&t.communityGuidelines.length?e("ol",{staticClass:"font-weight-bold"},t._l(t.communityGuidelines,(function(a){return e("li",{staticClass:"text-primary"},[e("span",{staticClass:"lead ml-1 text-dark"},[t._v(t._s(a))])])})),0):e("div",{staticClass:"card bg-primary text-white"},[t._m(16)]),t._v(" "),e("hr"),t._v(" "),t._m(17)]):8===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Feature Requirements")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("The minimum requirements for Directory inclusion.")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"list-group"},[e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("media_types")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Media Types")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Allowed MIME types. image/jpeg and image/png by default")]),t._v(" "),t.requirements_validator.hasOwnProperty("media_types")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.media_types[0]))]):t._e()])]),t._v(" "),t.feature_config.optimize_image?e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("image_quality")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Image Quality")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Image optimization is enabled, the image quality must be a value between 1-100.")]),t._v(" "),t.requirements_validator.hasOwnProperty("image_quality")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.image_quality[0]))]):t._e()])]):t._e(),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_photo_size")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Photo Size")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Max photo upload size in kb. Must be between 15-100 MB.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_photo_size")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_photo_size[0]))]):t._e()])]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_caption_length")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Caption Length")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("The max caption length limit. Must be between 500-10000.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_caption_length")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_caption_length[0]))]):t._e()])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"list-group"},[e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_altext_length")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Alt-text length")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("The alt-text length limit. Must be between 1000-5000.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_altext_length")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_altext_length[0]))]):t._e()])]),t._v(" "),t.feature_config.enforce_account_limit?e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_account_size")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Account Size")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("The account storage limit. Must be 1GB at minimum.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_account_size")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_account_size[0]))]):t._e()])]):t._e(),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_album_length")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Album Length")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Max photos per album post. Must be between 4-20.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_album_length")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_album_length[0]))]):t._e()])]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("account_deletion")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Account Deletion")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Allow users to delete their own account.")]),t._v(" "),t.requirements_validator.hasOwnProperty("account_deletion")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.account_deletion[0]))]):t._e()])])])])])]):9===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("User Testimonials")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Add testimonials from your users.")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6 list-fade-bottom"},[e("div",{staticClass:"list-group pb-5",staticStyle:{"max-height":"520px","overflow-y":"auto"}},t._l(t.testimonials,(function(a,s){return e("div",{staticClass:"list-group-item",class:[s==t.testimonials.length-1?"mb-5":""]},[e("div",{staticClass:"d-flex justify-content-between align-items-center"},[e("div",{staticClass:"media"},[e("img",{staticClass:"mr-3 rounded-circle",attrs:{src:a.profile.avatar,width:"40",h:"40"}}),t._v(" "),e("div",{staticClass:"media-body"},[e("p",{staticClass:"font-weight-bold mb-0"},[t._v("\n "+t._s(a.profile.username)+"\n ")]),t._v(" "),e("p",{staticClass:"small text-muted mt-n1 mb-0"},[t._v("\n Member Since "+t._s(t.formatDate(a.profile.created_at))+"\n ")])])]),t._v(" "),e("div",[e("p",{staticClass:"mb-0 small"},[e("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.editTestimonial(a)}}},[t._v("\n Edit\n ")])]),t._v(" "),e("p",{staticClass:"mb-0 small"},[e("a",{staticClass:"text-danger",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.deleteTestimonial(a)}}},[t._v("\n Delete\n ")])])])]),t._v(" "),e("hr",{staticClass:"my-1"}),t._v(" "),e("p",{staticClass:"small font-weight-bold text-muted mb-0 text-center"},[t._v("Testimonial")]),t._v(" "),e("div",{staticClass:"border rounded px-3"},[e("p",{staticClass:"my-2 small",staticStyle:{"white-space":"pre-wrap"},domProps:{innerHTML:t._s(a.body)}})])])})),0)]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[t.isEditingTestimonial?e("div",{staticClass:"card"},[e("div",{staticClass:"card-header font-weight-bold"},[t._v("\n Edit Testimonial\n ")]),t._v(" "),e("div",{staticClass:"card-body"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Username")]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.editingTestimonial.profile.username,expression:"editingTestimonial.profile.username"}],staticClass:"form-control form-control-muted",attrs:{placeholder:"test",disabled:""},domProps:{value:t.editingTestimonial.profile.username},on:{input:function(e){e.target.composing||t.$set(t.editingTestimonial.profile,"username",e.target.value)}}})]),t._v(" "),e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Testimonial")]),t._v(" "),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.editingTestimonial.body,expression:"editingTestimonial.body"}],staticClass:"form-control form-control-muted",attrs:{rows:"5"},domProps:{value:t.editingTestimonial.body},on:{input:function(e){e.target.composing||t.$set(t.editingTestimonial,"body",e.target.value)}}}),t._v(" "),e("div",{staticClass:"d-flex justify-content-between"},[e("p",{staticClass:"help-text small text-muted mb-0"},[t._v("\n Text only, up to 500 characters\n ")]),t._v(" "),e("p",{staticClass:"help-text small text-muted mb-0"},[t._v("\n "+t._s(t.editingTestimonial.body?t.editingTestimonial.body.length:0)+"/500\n ")])])])]),t._v(" "),e("div",{staticClass:"card-footer"},[e("button",{staticClass:"btn btn-primary btn-block",attrs:{type:"button"},on:{click:t.saveEditTestimonial}},[t._v("\n Save\n ")]),t._v(" "),e("button",{staticClass:"btn btn-secondary btn-block",attrs:{type:"button"},on:{click:t.cancelEditTestimonial}},[t._v("\n Cancel\n ")])])]):e("div",{staticClass:"card"},[t.testimonials.length<10?[e("div",{staticClass:"card-header font-weight-bold"},[t._v("\n Add New Testimonial\n ")]),t._v(" "),e("div",{staticClass:"card-body"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Username")]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.testimonial.username,expression:"testimonial.username"}],staticClass:"form-control form-control-muted",attrs:{placeholder:"test"},domProps:{value:t.testimonial.username},on:{input:function(e){e.target.composing||t.$set(t.testimonial,"username",e.target.value)}}}),t._v(" "),e("p",{staticClass:"help-text small text-muted"},[t._v("\n Must be a valid user account\n ")])]),t._v(" "),e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Testimonial")]),t._v(" "),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.testimonial.body,expression:"testimonial.body"}],staticClass:"form-control form-control-muted",attrs:{rows:"5"},domProps:{value:t.testimonial.body},on:{input:function(e){e.target.composing||t.$set(t.testimonial,"body",e.target.value)}}}),t._v(" "),e("div",{staticClass:"d-flex justify-content-between"},[e("p",{staticClass:"help-text small text-muted mb-0"},[t._v("\n Text only, up to 500 characters\n ")]),t._v(" "),e("p",{staticClass:"help-text small text-muted mb-0"},[t._v("\n "+t._s(t.testimonial.body?t.testimonial.body.length:0)+"/500\n ")])])])]),t._v(" "),e("div",{staticClass:"card-footer"},[e("button",{staticClass:"btn btn-primary btn-block",attrs:{type:"button"},on:{click:t.saveTestimonial}},[t._v("Save Testimonial")])])]:[t._m(18)]],2)])])]):t._e()])])])])])])]):e("div",[t._m(19)])},i=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"col-lg-6 col-7"},[e("p",{staticClass:"display-1 text-white d-inline-block mb-0"},[t._v("Directory")]),t._v(" "),e("p",{staticClass:"h3 text-white font-weight-light"},[t._v("Manage your server listing on pixelfed.org")])])},function(){var t=this._self._c;return t("p",[t("i",{staticClass:"far fa-exclamation-triangle fa-5x text-lighter"})])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("p",{staticClass:"display-3 mb-1"},[t._v("Awaiting Approval")]),t._v(" "),e("p",{staticClass:"text-primary mb-1"},[t._v("Awaiting submission approval from pixelfed.org, please check back later!")]),t._v(" "),e("p",{staticClass:"small text-muted mb-0"},[t._v("If you are still waiting for approval after 24 hours please contact the Pixelfed team.")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("p",{staticClass:"display-3 mb-1"},[t._v("Awaiting Update Approval")]),t._v(" "),e("p",{staticClass:"text-primary mb-1"},[t._v("Awaiting updated submission approval from pixelfed.org, please check back later!")]),t._v(" "),e("p",{staticClass:"small text-muted mb-0"},[t._v("If you are still waiting for approval after 24 hours please contact the Pixelfed team.")])])},function(){var t=this._self._c;return t("p",{staticClass:"my-3"},[t("i",{staticClass:"far fa-check-circle fa-4x text-success"})])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"mt-2 mb-0"},[t._v("Your server directory listing on "),e("a",{staticClass:"font-weight-bold",attrs:{href:"#"}},[t._v("pixelfed.org")]),t._v(" is active")])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("p",{staticClass:"display-3 mb-1"},[t._v("Oops! An unexpected error occured")]),t._v(" "),e("p",{staticClass:"text-primary mb-1"},[t._v("Ask the Pixelfed team for assistance.")])])},function(){var t=this._self._c;return t("p",{staticClass:"text-center mb-2"},[t("i",{staticClass:"far fa-exclamation-circle fa-2x"})])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"form-text text-muted small mb-0"},[t._v("Must be a "),e("kbd",[t._v("JPEG")]),t._v(" or "),e("kbd",[t._v("PNG")]),t._v(" image no larger than 5MB.")])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"form-text text-muted small mb-0"},[t._v("The primary language of your server, to edit this value you need to set the "),e("kbd",[t._v("APP_LOCALE")]),t._v(" .env value")])},function(){var t=this,e=t._self._c;return e("ul",{staticClass:"text-danger"},[e("li",[t._v("Admins must be active")]),t._v(" "),e("li",[t._v("Admins must have 2FA setup and enabled")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card card-body bg-lighter text-center py-5"},[e("p",{staticClass:"text-light mb-1"},[e("i",{staticClass:"far fa-info-circle fa-3x"})]),t._v(" "),e("p",{staticClass:"h2 mb-0"},[t._v("0 posts selected")]),t._v(" "),e("p",{staticClass:"small mb-0"},[t._v("You can select up to 12 favourite posts by id or popularity")])])},function(){var t=this._self._c;return t("div",{staticClass:"spinner-border spinner-border-sm",attrs:{role:"status"}},[t("span",{staticClass:"sr-only"},[this._v("Loading...")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card card-body bg-primary"},[e("div",{staticClass:"d-flex align-items-center text-white"},[e("i",{staticClass:"far fa-info-circle mr-2"}),t._v(" "),e("p",{staticClass:"small mb-0 font-weight-bold"},[t._v("A post id is the numerical id found in post urls")])])])])},function(){var t=this._self._c;return t("div",{staticClass:"spinner-border text-primary",attrs:{role:"status"}},[t("span",{staticClass:"sr-only"},[this._v("Loading...")])])},function(){var t=this,e=t._self._c;return e("ul",{staticClass:"font-weight-bold"},[e("li",[t._v("No analytics or 3rd party trackers*")]),t._v(" "),e("li",[t._v("User data is not sold to any 3rd parties")]),t._v(" "),e("li",[t._v("Data is stored securely in accordance with industry standards")]),t._v(" "),e("li",[t._v("Admin accounts are protected with 2FA")]),t._v(" "),e("li",[t._v("Follow strict support procedures to keep your accounts safe")]),t._v(" "),e("li",[t._v("Give at least 6 months warning in the event we shut down")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card-body text-center py-5"},[e("p",{staticClass:"mb-n3"},[e("i",{staticClass:"far fa-exclamation-circle fa-3x"})]),t._v(" "),e("p",{staticClass:"lead mb-0"},[t._v("No Community Guidelines have been set")])])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"mb-0"},[t._v("You can manage Community Guidelines on the "),e("a",{attrs:{href:"/i/admin/settings"}},[t._v("Settings page")])])},function(){var t=this._self._c;return t("div",{staticClass:"card-body text-center"},[t("p",{staticClass:"lead"},[this._v("You can't add any more testimonials")])])},function(){var t=this._self._c;return t("div",{staticClass:"container my-5 py-5 text-center"},[t("div",{staticClass:"spinner-border text-primary",attrs:{role:"status"}},[t("span",{staticClass:"sr-only"},[this._v("Loading...")])])])}]},71636:(t,e,a)=>{"use strict";a.r(e),a.d(e,{render:()=>s,staticRenderFns:()=>i});var s=function(){var t=this,e=t._self._c;return e("div",[e("div",{staticClass:"header bg-primary pb-3 mt-n4"},[e("div",{staticClass:"container-fluid"},[e("div",{staticClass:"header-body"},[t._m(0),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("Unique Hashtags")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.total_unique)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("Total Hashtags")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.total_posts)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("New (past 14 days)")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.added_14_days)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("Banned Hashtags")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.total_banned)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("NSFW Hashtags")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.total_nsfw)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("Clear Trending Cache")]),t._v(" "),e("button",{staticClass:"btn btn-outline-white btn-block btn-sm py-0 mt-1",on:{click:t.clearTrendingCache}},[t._v("Clear Cache")])])])])])])]),t._v(" "),t.loaded?e("div",{staticClass:"m-n2 m-lg-4"},[e("div",{staticClass:"container-fluid mt-4"},[e("div",{staticClass:"row mb-3 justify-content-between"},[e("div",{staticClass:"col-12 col-md-8"},[e("ul",{staticClass:"nav nav-pills"},[e("li",{staticClass:"nav-item"},[e("button",{class:["nav-link",{active:0==t.tabIndex}],on:{click:function(e){return t.toggleTab(0)}}},[t._v("All")])]),t._v(" "),e("li",{staticClass:"nav-item"},[e("button",{class:["nav-link",{active:1==t.tabIndex}],on:{click:function(e){return t.toggleTab(1)}}},[t._v("Trending")])]),t._v(" "),e("li",{staticClass:"nav-item"},[e("button",{class:["nav-link",{active:2==t.tabIndex}],on:{click:function(e){return t.toggleTab(2)}}},[t._v("Banned")])]),t._v(" "),e("li",{staticClass:"nav-item"},[e("button",{class:["nav-link",{active:3==t.tabIndex}],on:{click:function(e){return t.toggleTab(3)}}},[t._v("NSFW")])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-4"},[e("autocomplete",{ref:"autocomplete",attrs:{search:t.composeSearch,disabled:t.searchLoading,placeholder:"Search hashtags","aria-label":"Search hashtags","get-result-value":t.getTagResultValue},on:{submit:t.onSearchResultClick},scopedSlots:t._u([{key:"result",fn:function(a){var s=a.result,i=a.props;return[e("li",t._b({staticClass:"autocomplete-result d-flex justify-content-between align-items-center"},"li",i,!1),[e("div",{staticClass:"font-weight-bold",class:{"text-danger":s.is_banned}},[t._v("\n #"+t._s(s.name)+"\n ")]),t._v(" "),e("div",{staticClass:"small text-muted"},[t._v("\n "+t._s(t.prettyCount(s.cached_count))+" posts\n ")])])]}}])})],1)]),t._v(" "),[0,2,3].includes(this.tabIndex)?e("div",{staticClass:"table-responsive"},[e("table",{staticClass:"table table-dark"},[e("thead",{staticClass:"thead-dark"},[e("tr",[e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("ID","id"))},on:{click:function(e){return t.toggleCol("id")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Hashtag","name"))},on:{click:function(e){return t.toggleCol("name")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Count","cached_count"))},on:{click:function(e){return t.toggleCol("cached_count")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Can Search","can_search"))},on:{click:function(e){return t.toggleCol("can_search")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Can Trend","can_trend"))},on:{click:function(e){return t.toggleCol("can_trend")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("NSFW","is_nsfw"))},on:{click:function(e){return t.toggleCol("is_nsfw")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Banned","is_banned"))},on:{click:function(e){return t.toggleCol("is_banned")}}}),t._v(" "),e("th",{attrs:{scope:"col"}},[t._v("Created")])])]),t._v(" "),e("tbody",t._l(t.hashtags,(function(a,s){var i;return e("tr",[e("td",{staticClass:"font-weight-bold text-monospace text-muted"},[e("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.openEditHashtagModal(a,s)}}},[t._v("\n "+t._s(a.id)+"\n ")])]),t._v(" "),e("td",{staticClass:"font-weight-bold"},[t._v(t._s(a.name))]),t._v(" "),e("td",{staticClass:"font-weight-bold"},[e("a",{attrs:{href:"/i/web/hashtag/".concat(a.slug)}},[t._v("\n "+t._s(null!==(i=a.cached_count)&&void 0!==i?i:0)+"\n ")])]),t._v(" "),e("td",{staticClass:"font-weight-bold",domProps:{innerHTML:t._s(t.boolIcon(a.can_search,"text-success","text-danger"))}}),t._v(" "),e("td",{staticClass:"font-weight-bold",domProps:{innerHTML:t._s(t.boolIcon(a.can_trend,"text-success","text-danger"))}}),t._v(" "),e("td",{staticClass:"font-weight-bold",domProps:{innerHTML:t._s(t.boolIcon(a.is_nsfw,"text-danger"))}}),t._v(" "),e("td",{staticClass:"font-weight-bold",domProps:{innerHTML:t._s(t.boolIcon(a.is_banned,"text-danger"))}}),t._v(" "),e("td",{staticClass:"font-weight-bold"},[t._v(t._s(t.timeAgo(a.created_at)))])])})),0)])]):t._e(),t._v(" "),[0,2,3].includes(this.tabIndex)?e("div",{staticClass:"d-flex align-items-center justify-content-center"},[e("button",{staticClass:"btn btn-primary rounded-pill",attrs:{disabled:!t.pagination.prev},on:{click:function(e){return t.paginate("prev")}}},[t._v("\n Prev\n ")]),t._v(" "),e("button",{staticClass:"btn btn-primary rounded-pill",attrs:{disabled:!t.pagination.next},on:{click:function(e){return t.paginate("next")}}},[t._v("\n Next\n ")])]):t._e(),t._v(" "),1==this.tabIndex?e("div",{staticClass:"table-responsive"},[e("table",{staticClass:"table table-dark"},[t._m(1),t._v(" "),e("tbody",t._l(t.trendingTags,(function(a,s){var i;return e("tr",[e("td",{staticClass:"font-weight-bold text-monospace text-muted"},[e("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.openEditHashtagModal(a,s)}}},[t._v("\n "+t._s(a.id)+"\n ")])]),t._v(" "),e("td",{staticClass:"font-weight-bold"},[t._v(t._s(a.hashtag))]),t._v(" "),e("td",{staticClass:"font-weight-bold"},[e("a",{attrs:{href:"/i/web/hashtag/".concat(a.hashtag)}},[t._v("\n "+t._s(null!==(i=a.total)&&void 0!==i?i:0)+"\n ")])])])})),0)])]):t._e()])]):e("div",{staticClass:"my-5 text-center"},[e("b-spinner")],1),t._v(" "),e("b-modal",{attrs:{title:"Edit Hashtag","ok-only":!0,lazy:!0,static:!0},model:{value:t.showEditModal,callback:function(e){t.showEditModal=e},expression:"showEditModal"}},[t.editingHashtag&&t.editingHashtag.name?e("div",{staticClass:"list-group"},[e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Name")]),t._v(" "),e("div",{staticClass:"font-weight-bold"},[t._v(t._s(t.editingHashtag.name))])]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Total Uses")]),t._v(" "),e("div",{staticClass:"font-weight-bold"},[t._v(t._s(t.editingHashtag.cached_count.toLocaleString("en-CA",{compactDisplay:"short"})))])]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Can Trend")]),t._v(" "),e("div",{staticClass:"mr-n2 mb-1"},[e("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:t.editingHashtag.can_trend,callback:function(e){t.$set(t.editingHashtag,"can_trend",e)},expression:"editingHashtag.can_trend"}})],1)]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Can Search")]),t._v(" "),e("div",{staticClass:"mr-n2 mb-1"},[e("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:t.editingHashtag.can_search,callback:function(e){t.$set(t.editingHashtag,"can_search",e)},expression:"editingHashtag.can_search"}})],1)]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Banned")]),t._v(" "),e("div",{staticClass:"mr-n2 mb-1"},[e("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:t.editingHashtag.is_banned,callback:function(e){t.$set(t.editingHashtag,"is_banned",e)},expression:"editingHashtag.is_banned"}})],1)]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("NSFW")]),t._v(" "),e("div",{staticClass:"mr-n2 mb-1"},[e("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:t.editingHashtag.is_nsfw,callback:function(e){t.$set(t.editingHashtag,"is_nsfw",e)},expression:"editingHashtag.is_nsfw"}})],1)])]):t._e(),t._v(" "),e("transition",{attrs:{name:"fade"}},[t.editingHashtag&&t.editingHashtag.name&&t.editSaved?e("div",[e("p",{staticClass:"text-primary small font-weight-bold text-center mt-1 mb-0"},[t._v("Hashtag changes successfully saved!")])]):t._e()])],1)],1)},i=[function(){var t=this._self._c;return t("div",{staticClass:"row align-items-center py-4"},[t("div",{staticClass:"col-lg-6 col-7"},[t("p",{staticClass:"display-1 text-white d-inline-block mb-0"},[this._v("Hashtags")])])])},function(){var t=this,e=t._self._c;return e("thead",{staticClass:"thead-dark"},[e("tr",[e("th",{attrs:{scope:"col"}},[t._v("ID")]),t._v(" "),e("th",{attrs:{scope:"col"}},[t._v("Hashtag")]),t._v(" "),e("th",{attrs:{scope:"col"}},[t._v("Trending Count")])])])}]},64721:(t,e,a)=>{a(19755);a(99751),window._=a(96486),window.Popper=a(28981).default,window.pixelfed=window.pixelfed||{},window.$=a(19755),a(43734),window.axios=a(9669),window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a(90717),window.filesize=a(42317),window.Cookies=a(36808),a(20154),a(80981),window.Chart=a(17757),a(11984),Chart.defaults.global.defaultFontFamily="-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif",Array.from(document.querySelectorAll(".pagination .page-link")).filter((function(t){return"« Previous"===t.textContent||"Next »"===t.textContent})).forEach((function(t){return t.textContent="Next »"===t.textContent?"›":"‹"})),Vue.component("admin-directory",a(78877).default),Vue.component("hashtag-component",a(90882).default)},11984:(t,e,a)=>{"use strict";var s=a(19755);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}!function(){function t(){s(".sidenav-toggler").addClass("active"),s(".sidenav-toggler").data("action","sidenav-unpin"),s("body").removeClass("g-sidenav-hidden").addClass("g-sidenav-show g-sidenav-pinned"),s("body").append('
1&&(o+=''+i+""),o+=''+a+n+s+""}}}(t,a),a.update()}return window.Chart&&r(Chart,(t={defaults:{global:{responsive:!0,maintainAspectRatio:!1,defaultColor:"dark"==a?o.gray[700]:o.gray[600],defaultFontColor:"dark"==a?o.gray[700]:o.gray[600],defaultFontFamily:n.base,defaultFontSize:13,layout:{padding:0},legend:{display:!1,position:"bottom",labels:{usePointStyle:!0,padding:16}},elements:{point:{radius:0,backgroundColor:o.theme.primary},line:{tension:.4,borderWidth:4,borderColor:o.theme.primary,backgroundColor:o.transparent,borderCapStyle:"rounded"},rectangle:{backgroundColor:o.theme.warning},arc:{backgroundColor:o.theme.primary,borderColor:"dark"==a?o.gray[800]:o.white,borderWidth:4}},tooltips:{enabled:!0,mode:"index",intersect:!1}},doughnut:{cutoutPercentage:83,legendCallback:function(t){var e=t.data,a="";return e.labels.forEach((function(t,s){var i=e.datasets[0].backgroundColor[s];a+='',a+='',a+=t,a+=""})),a}}}},Chart.scaleService.updateScaleDefaults("linear",{gridLines:{borderDash:[2],borderDashOffset:[2],color:"dark"==a?o.gray[900]:o.gray[300],drawBorder:!1,drawTicks:!1,drawOnChartArea:!0,zeroLineWidth:0,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{beginAtZero:!0,padding:10,callback:function(t){if(!(t%10))return t}}}),Chart.scaleService.updateScaleDefaults("category",{gridLines:{drawBorder:!1,drawOnChartArea:!1,drawTicks:!1},ticks:{padding:20},maxBarThickness:10}),t)),e.on({change:function(){var t=s(this);t.is("[data-add]")&&d(t)},click:function(){var t=s(this);t.is("[data-update]")&&u(t)}}),{colors:o,fonts:n,mode:a}}(),_=((r=s(o=".btn-icon-clipboard")).length&&((n=r).tooltip().on("mouseleave",(function(){n.tooltip("hide")})),new ClipboardJS(o).on("success",(function(t){s(t.trigger).attr("title","Copied!").tooltip("_fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("_fixTitle"),t.clearSelection()}))),l=s(".navbar-nav, .navbar-nav .nav"),c=s(".navbar .collapse"),d=s(".navbar .dropdown"),c.on({"show.bs.collapse":function(){!function(t){t.closest(l).find(c).not(t).collapse("hide")}(s(this))}}),d.on({"hide.bs.dropdown":function(){!function(t){var e=t.find(".dropdown-menu");e.addClass("close"),setTimeout((function(){e.removeClass("close")}),200)}(s(this))}}),function(){s(".navbar-nav");var t=s(".navbar .navbar-custom-collapse");t.length&&(t.on({"hide.bs.collapse":function(){!function(t){t.addClass("collapsing-out")}(t)}}),t.on({"hidden.bs.collapse":function(){!function(t){t.removeClass("collapsing-out")}(t)}}));var e=0;s(".sidenav-toggler").click((function(){if(1==e)s("body").removeClass("nav-open"),e=0,s(".bodyClick").remove();else{s('
').appendTo("body").click((function(){s("body").removeClass("nav-open"),e=0,s(".bodyClick").remove()})),s("body").addClass("nav-open"),e=1}}))}(),u=s('[data-toggle="popover"]'),m="",u.length&&u.each((function(){!function(t){t.data("color")&&(m="popover-"+t.data("color"));var e={trigger:"focus",template:''};t.popover(e)}(s(this))})),function(){var t=s(".scroll-me, [data-scroll-to], .toc-entry a");function e(t){var e=t.attr("href"),a=t.data("scroll-to-offset")?t.data("scroll-to-offset"):0,i={scrollTop:s(e).offset().top-a};s("html, body").stop(!0,!0).animate(i,600),event.preventDefault()}t.length&&t.on("click",(function(t){e(s(this))}))}(),(v=s('[data-toggle="tooltip"]')).length&&v.tooltip(),(f=s(".form-control")).length&&function(t){t.on("focus blur",(function(t){s(this).parents(".form-group").toggleClass("focused","focus"===t.type)})).trigger("blur")}(f),(p=s("#chart-bars")).length&&function(t){var e=new Chart(t,{type:"bar",data:{labels:["Jul","Aug","Sep","Oct","Nov","Dec"],datasets:[{label:"Sales",data:[25,20,30,22,17,29]}]}});t.data("chart",e)}(p),function(){var t=s("#c1-dark");t.length&&function(t){var e=new Chart(t,{type:"line",options:{scales:{yAxes:[{gridLines:{lineWidth:1,color:g.colors.gray[900],zeroLineColor:g.colors.gray[900]},ticks:{callback:function(t){if(!(t%10))return t}}}]},tooltips:{callbacks:{label:function(t,e){var a=e.datasets[t.datasetIndex].label||"",s=t.yLabel,i="";return e.datasets.length>1&&(i+=a),i+(s+" posts")}}}},data:{labels:["7","6","5","4","3","2","1"],datasets:[{label:"",data:s(".posts-this-week").data("update").data.datasets[0].data}]}});t.data("chart",e)}(t)}(),(h=s(".datepicker")).length&&h.each((function(){!function(t){t.datepicker({disableTouchKeyboard:!0,autoclose:!1})}(s(this))})),function(){if(s(".input-slider-container")[0]&&s(".input-slider-container").each((function(){var t=s(this).find(".input-slider"),e=t.attr("id"),a=t.data("range-value-min"),i=t.data("range-value-max"),n=s(this).find(".range-slider-value"),o=n.attr("id"),r=n.data("range-value-low"),l=document.getElementById(e),c=document.getElementById(o);_.create(l,{start:[parseInt(r)],connect:[!0,!1],range:{min:[parseInt(a)],max:[parseInt(i)]}}),l.noUiSlider.on("update",(function(t,e){c.textContent=t[e]}))})),s("#input-slider-range")[0]){var t=document.getElementById("input-slider-range"),e=document.getElementById("input-slider-range-value-low"),a=document.getElementById("input-slider-range-value-high"),i=[e,a];_.create(t,{start:[parseInt(e.getAttribute("data-range-value-low")),parseInt(a.getAttribute("data-range-value-high"))],connect:!0,range:{min:parseInt(t.getAttribute("data-range-value-min")),max:parseInt(t.getAttribute("data-range-value-max"))}}),t.noUiSlider.on("update",(function(t,e){i[e].textContent=t[e]}))}}());(b=s(".scrollbar-inner")).length&&b.scrollbar().scrollLock()},99751:function(){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}!function(){var e="object"===("undefined"==typeof window?"undefined":t(window))?window:"object"===("undefined"==typeof self?"undefined":t(self))?self:this,a=e.BlobBuilder||e.WebKitBlobBuilder||e.MSBlobBuilder||e.MozBlobBuilder;e.URL=e.URL||e.webkitURL||function(t,e){return(e=document.createElement("a")).href=t,e};var s=e.Blob,i=URL.createObjectURL,n=URL.revokeObjectURL,o=e.Symbol&&e.Symbol.toStringTag,r=!1,c=!1,d=!!e.ArrayBuffer,u=a&&a.prototype.append&&a.prototype.getBlob;try{r=2===new Blob(["ä"]).size,c=2===new Blob([new Uint8Array([1,2])]).size}catch(t){}function m(t){return t.map((function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var a=new Uint8Array(t.byteLength);a.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=a.buffer}return e}return t}))}function v(t,e){e=e||{};var s=new a;return m(t).forEach((function(t){s.append(t)})),e.type?s.getBlob(e.type):s.getBlob()}function f(t,e){return new s(m(t),e||{})}e.Blob&&(v.prototype=Blob.prototype,f.prototype=Blob.prototype);var p="function"==typeof TextEncoder?TextEncoder.prototype.encode.bind(new TextEncoder):function(t){for(var a=0,s=t.length,i=e.Uint8Array||Array,n=0,o=Math.max(32,s+(s>>1)+7),r=new i(o>>3<<3);a=55296&&l<=56319){if(a=55296&&l<=56319)continue}if(n+4>r.length){o+=8,o=(o*=1+a/t.length*2)>>3<<3;var d=new Uint8Array(o);d.set(r),r=d}if(0!=(4294967168&l)){if(0==(4294965248&l))r[n++]=l>>6&31|192;else if(0==(4294901760&l))r[n++]=l>>12&15|224,r[n++]=l>>6&63|128;else{if(0!=(4292870144&l))continue;r[n++]=l>>18&7|240,r[n++]=l>>12&63|128,r[n++]=l>>6&63|128}r[n++]=63&l|128}else r[n++]=l}return r.slice(0,n)},h="function"==typeof TextDecoder?TextDecoder.prototype.decode.bind(new TextDecoder):function(t){for(var e=t.length,a=[],s=0;s239?4:l>223?3:l>191?2:1;if(s+d<=e)switch(d){case 1:l<128&&(c=l);break;case 2:128==(192&(i=t[s+1]))&&(r=(31&l)<<6|63&i)>127&&(c=r);break;case 3:i=t[s+1],n=t[s+2],128==(192&i)&&128==(192&n)&&(r=(15&l)<<12|(63&i)<<6|63&n)>2047&&(r<55296||r>57343)&&(c=r);break;case 4:i=t[s+1],n=t[s+2],o=t[s+3],128==(192&i)&&128==(192&n)&&128==(192&o)&&(r=(15&l)<<18|(63&i)<<12|(63&n)<<6|63&o)>65535&&r<1114112&&(c=r)}null===c?(c=65533,d=1):c>65535&&(c-=65536,a.push(c>>>10&1023|55296),c=56320|1023&c),a.push(c),s+=d}var u=a.length,m="";for(s=0;s>2,d=(3&i)<<4|o>>4,u=(15&o)<<2|l>>6,m=63&l;r||(m=64,n||(u=64)),a.push(e[c],e[d],e[u],e[m])}return a.join("")}var s=Object.create||function(t){function e(){}return e.prototype=t,new e};if(d)var o=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],r=ArrayBuffer.isView||function(t){return t&&o.indexOf(Object.prototype.toString.call(t))>-1};function c(a,s){s=null==s?{}:s;for(var i=0,n=(a=a||[]).length;i=e.size&&a.close()}))}})}}catch(t){try{new ReadableStream({}),g=function(t){var e=0;t=this;return new ReadableStream({pull:function(a){return t.slice(e,e+524288).arrayBuffer().then((function(s){e+=s.byteLength;var i=new Uint8Array(s);a.enqueue(i),e==t.size&&a.close()}))}})}}catch(t){try{new Response("").body.getReader().read(),g=function(){return new Response(this).body}}catch(t){g=function(){throw new Error("Include https://github.com/MattiasBuelens/web-streams-polyfill")}}}}_.arrayBuffer||(_.arrayBuffer=function(){var t=new FileReader;return t.readAsArrayBuffer(this),y(t)}),_.text||(_.text=function(){var t=new FileReader;return t.readAsText(this),y(t)}),_.stream||(_.stream=g)}(),function(t){"use strict";var e,a=t.Uint8Array,s=t.HTMLCanvasElement,i=s&&s.prototype,n=/\s*;\s*base64\s*(?:;|$)/i,o="toDataURL",r=function(t){for(var s,i,n=t.length,o=new a(n/4*3|0),r=0,l=0,c=[0,0],d=0,u=0;n--;)i=t.charCodeAt(r++),255!==(s=e[i-43])&&undefined!==s&&(c[1]=c[0],c[0]=i,u=u<<6|s,4===++d&&(o[l++]=u>>>16,61!==c[1]&&(o[l++]=u>>>8),61!==c[0]&&(o[l++]=u),d=0));return o};a&&(e=new a([62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,0,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51])),!s||i.toBlob&&i.toBlobHD||(i.toBlob||(i.toBlob=function(t,e){if(e||(e="image/png"),this.mozGetAsFile)t(this.mozGetAsFile("canvas",e));else if(this.msToBlob&&/^\s*image\/png\s*(?:$|;)/i.test(e))t(this.msToBlob());else{var s,i=Array.prototype.slice.call(arguments,1),l=this[o].apply(this,i),c=l.indexOf(","),d=l.substring(c+1),u=n.test(l.substring(0,c));Blob.fake?((s=new Blob).encoding=u?"base64":"URI",s.data=d,s.size=d.length):a&&(s=u?new Blob([r(d)],{type:e}):new Blob([decodeURIComponent(d)],{type:e})),t(s)}}),!i.toBlobHD&&i.toDataURLHD?i.toBlobHD=function(){o="toDataURLHD";var t=this.toBlob();return o="toDataURL",t}:i.toBlobHD=i.toBlob)}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content||this)},46700:(t,e,a)=>{var s={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(t){var e=n(t);return a(e)}function n(t){if(!a.o(s,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return s[t]}i.keys=function(){return Object.keys(s)},i.resolve=n,t.exports=i,i.id=46700},78877:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>o});var s=a(12869),i=a(89959),n={};for(const t in i)"default"!==t&&(n[t]=()=>i[t]);a.d(e,n);const o=(0,a(51900).default)(i.default,s.render,s.staticRenderFns,!1,null,null,null).exports},90882:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>o});var s=a(84961),i=a(82691),n={};for(const t in i)"default"!==t&&(n[t]=()=>i[t]);a.d(e,n);const o=(0,a(51900).default)(i.default,s.render,s.staticRenderFns,!1,null,null,null).exports},89959:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>n});var s=a(42751),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i);const n=s.default},82691:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>n});var s=a(46994),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i);const n=s.default},12869:(t,e,a)=>{"use strict";a.r(e);var s=a(42014),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i)},84961:(t,e,a)=>{"use strict";a.r(e);var s=a(71636),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i)}},t=>{t.O(0,[8898],(()=>{return e=64721,t(t.s=e);var e}));t.O()}]); \ No newline at end of file +(self.webpackChunkpixelfed=self.webpackChunkpixelfed||[]).push([[467],{42751:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>i});var s=a(19755);const i={data:function(){return{loaded:!1,initialData:{},tabIndex:1,tabs:[{id:1,title:"Overview",icon:"far fa-home"},{id:3,title:"Server Details",icon:"far fa-info-circle"},{id:4,title:"Admin Contact",icon:"far fa-user-crown"},{id:5,title:"Favourite Posts",icon:"far fa-heart"},{id:6,title:"Privacy Pledge",icon:"far fa-eye-slash"},{id:7,title:"Community Guidelines",icon:"far fa-smile-beam"},{id:8,title:"Feature Requirements",icon:"far fa-bolt"},{id:9,title:"User Testimonials",icon:"far fa-comment-smile"}],form:{summary:"",location:0,contact_account:0,contact_email:"",privacy_pledge:void 0,banner_image:void 0,locale:0},requirements:{activitypub_enabled:void 0,open_registration:void 0,oauth_enabled:void 0},feature_config:[],requirements_validator:[],popularPostsLoaded:!1,popularPosts:[],selectedPopularPosts:[],selectedPosts:[],favouritePostByIdInput:"",favouritePostByIdFetching:!1,communityGuidelines:[],isUploadingBanner:!1,state:{is_eligible:!1,submission_exists:!1,awaiting_approval:!1,is_active:!1,submission_timestamp:void 0},isSubmitting:!1,testimonial:{username:void 0,body:void 0},testimonials:[],isEditingTestimonial:!1,editingTestimonial:void 0}},mounted:function(){this.fetchInitialData()},methods:{toggleTab:function(t){this.tabIndex=t},fetchInitialData:function(){var t=this;axios.get("/i/admin/api/directory/initial-data").then((function(e){t.initialData=e.data,e.data.activitypub_enabled&&(t.requirements.activitypub_enabled=e.data.activitypub_enabled),e.data.open_registration&&(t.requirements.open_registration=e.data.open_registration),e.data.oauth_enabled&&(t.requirements.oauth_enabled=e.data.oauth_enabled),e.data.summary&&(t.form.summary=e.data.summary),e.data.location&&(t.form.location=e.data.location),e.data.favourite_posts&&(t.selectedPosts=e.data.favourite_posts),e.data.admin&&(t.form.contact_account=e.data.admin),e.data.contact_email&&(t.form.contact_email=e.data.contact_email),e.data.community_guidelines&&(t.communityGuidelines=e.data.community_guidelines),e.data.privacy_pledge&&(t.form.privacy_pledge=e.data.privacy_pledge),e.data.feature_config&&(t.feature_config=e.data.feature_config),e.data.requirements_validator&&(t.requirements_validator=e.data.requirements_validator),e.data.banner_image&&(t.form.banner_image=e.data.banner_image),e.data.primary_locale&&(t.form.primary_locale=e.data.primary_locale),e.data.is_eligible&&(t.state.is_eligible=e.data.is_eligible),e.data.testimonials&&(t.testimonials=e.data.testimonials),e.data.submission_state&&(t.state.is_active=e.data.submission_state.active_submission,t.state.submission_exists=e.data.submission_state.pending_submission,t.state.awaiting_approval=e.data.submission_state.pending_submission)})).then((function(){t.loaded=!0}))},initPopularPosts:function(){var t=this;this.popularPostsLoaded||axios.get("/i/admin/api/directory/popular-posts").then((function(e){t.popularPosts=e.data.filter((function(e){return!t.selectedPosts.map((function(t){return t.id})).includes(e.id)}))})).then((function(){t.popularPostsLoaded=!0}))},formatCount:function(t){return window.App.util.format.count(t)},formatDateTime:function(t){var e=new Date(t);return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(e)},formatDate:function(t){var e=new Date(t);return new Intl.DateTimeFormat("en-US",{month:"short",year:"numeric"}).format(e)},formatTimestamp:function(t){return window.App.util.format.timeAgo(t)},togglePopularPost:function(t,e){if(this.selectedPosts.length)if(this.selectedPosts.map((function(t){return t.id})).includes(t))this.selectedPosts=this.selectedPosts.filter((function(e){return e.id!=t}));else{if(this.selectedPosts.length>=12)return swal("Oops!","You can only select 12 popular posts","error"),void(event.currentTarget.checked=!1);this.selectedPosts.push(e)}else this.selectedPosts.push(e)},toggleSelectedPost:function(t){this.selectedPosts=this.selectedPosts.filter((function(e){return e.id!==t.id}))},handlePostByIdSearch:function(){var t=this;event.currentTarget.blur(),this.selectedPosts.length>=12?swal("Oops","You can only select 12 posts","error"):(this.favouritePostByIdFetching=!0,axios.post("/i/admin/api/directory/add-by-id",{q:this.favouritePostByIdInput}).then((function(e){t.selectedPosts.map((function(t){return t.id})).includes(e.data.id)?swal("Oops!","You already selected this post!","error"):(t.selectedPosts.push(e.data),t.favouritePostByIdInput="",t.popularPosts=t.popularPosts.filter((function(t){return t.id!=e.data.id})))})).then((function(){t.favouritePostByIdFetching=!1,s("#favposts-1-tab").tab("show")})).catch((function(e){swal("Invalid Post","The post id you added is not valid","error"),t.favouritePostByIdFetching=!1})))},save:function(){axios.post("/i/admin/api/directory/save",{location:this.form.location,summary:this.form.summary,admin_uid:this.form.contact_account,contact_email:this.form.contact_email,favourite_posts:this.selectedPosts.map((function(t){return t.id})),privacy_pledge:this.form.privacy_pledge}).then((function(t){swal("Success!","Successfully saved directory settings","success")})).catch((function(t){swal("Oops!",t.response.data.message,"error")}))},uploadBannerImage:function(){var t=this;if(this.isUploadingBanner=!0,window.confirm("Are you sure you want to update your server banner image?")){var e=new FormData;e.append("banner_image",this.$refs.bannerImageRef.files[0]),axios.post("/i/admin/api/directory/save",e,{headers:{"Content-Type":"multipart/form-data"}}).then((function(e){t.form.banner_image=e.data.banner_image,t.isUploadingBanner=!1})).catch((function(e){swal("Error",e.response.data.message,"error"),t.isUploadingBanner=!1}))}else this.isUploadingBanner=!1},deleteBannerImage:function(){var t=this;window.confirm("Are you sure you want to delete your server banner image?")&&axios.delete("/i/admin/api/directory/banner-image").then((function(e){t.form.banner_image=e.data})).catch((function(t){console.log(t)}))},handleSubmit:function(){var t=this;window.confirm("Are you sure you want to submit your server?")&&(this.isSubmitting=!0,axios.post("/i/admin/api/directory/submit").then((function(e){setTimeout((function(){t.isSubmitting=!1,t.state.is_active=!0,console.log(e.data)}),3e3)})).catch((function(t){swal("Error",t.response.data.message,"error")})))},deleteTestimonial:function(t){var e=this;window.confirm("Are you sure you want to delete the testimonial by "+t.profile.username+"?")&&axios.post("/i/admin/api/directory/testimonial/delete",{profile_id:t.profile.id}).then((function(a){e.testimonials=e.testimonials.filter((function(e){return e.profile.id!=t.profile.id}))}))},editTestimonial:function(t){this.isEditingTestimonial=!0,this.editingTestimonial=t},saveTestimonial:function(){var t,e=this;null===(t=event.currentTarget)||void 0===t||t.blur(),axios.post("/i/admin/api/directory/testimonial/save",{username:this.testimonial.username,body:this.testimonial.body}).then((function(t){e.testimonials.push(t.data),e.testimonial={username:void 0,body:void 0}})).catch((function(t){var e=t.response.data.hasOwnProperty("error")?t.response.data.error:t.response.data.message;swal("Oops!",e,"error")}))},cancelEditTestimonial:function(){var t;null===(t=event.currentTarget)||void 0===t||t.blur(),this.isEditingTestimonial=!1,this.editingTestimonial={}},saveEditTestimonial:function(){var t,e=this;null===(t=event.currentTarget)||void 0===t||t.blur(),axios.post("/i/admin/api/directory/testimonial/update",{profile_id:this.editingTestimonial.profile.id,body:this.editingTestimonial.body}).then((function(t){e.isEditingTestimonial=!1,e.editingTestimonial={}}))}},watch:{selectedPosts:function(t){var e=t.map((function(t){return t.id}));this.popularPosts=this.popularPosts.filter((function(t){return!e.includes(t.id)}))}}}},46994:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>i});var s=a(29655);a(67964);const i={components:{Autocomplete:s.default},data:function(){return{loaded:!1,tabIndex:0,stats:{total_unique:0,total_posts:0,added_14_days:0,total_banned:0,total_nsfw:0},hashtags:[],pagination:[],sortCol:void 0,sortDir:void 0,trendingTags:[],bannedTags:[],showEditModal:!1,editingHashtag:void 0,editSaved:!1,editSavedTimeout:void 0,searchLoading:!1}},mounted:function(){var t=this;this.fetchStats(),this.fetchHashtags(),this.$root.$on("bv::modal::hidden",(function(e,a){t.editSaved=!1,clearTimeout(t.editSavedTimeout),t.editingHashtag=void 0}))},watch:{editingHashtag:{deep:!0,immediate:!0,handler:function(t,e){null!=t&&null!=e&&this.storeHashtagEdit(t)}}},methods:{fetchStats:function(){var t=this;axios.get("/i/admin/api/hashtags/stats").then((function(e){t.stats=e.data}))},fetchHashtags:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/i/admin/api/hashtags/query";axios.get(e).then((function(e){t.hashtags=e.data.data,t.pagination={next:e.data.links.next,prev:e.data.links.prev},t.loaded=!0}))},prettyCount:function(t){return t?t.toLocaleString("en-CA",{compactDisplay:"short",notation:"compact"}):t},timeAgo:function(t){return t?App.util.format.timeAgo(t):t},boolIcon:function(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"text-muted";return t?''):'')},paginate:function(t){event.currentTarget.blur();var e="next"==t?this.pagination.next:this.pagination.prev;this.fetchHashtags(e)},toggleCol:function(t){this.sortCol=t,this.sortDir?this.sortDir="asc"==this.sortDir?"desc":"asc":this.sortDir="desc";var e="/i/admin/api/hashtags/query?sort="+t+"&dir="+this.sortDir;this.fetchHashtags(e)},buildColumn:function(t,e){var a='';return e==this.sortCol&&(a="desc"==this.sortDir?'':''),"".concat(t," ").concat(a)},toggleTab:function(t){var e=this;if(this.loaded=!1,this.tabIndex=t,0===t)this.fetchHashtags();else if(1===t)axios.get("/api/v1.1/discover/posts/hashtags").then((function(t){e.trendingTags=t.data,e.loaded=!0}));else if(2===t){this.fetchHashtags("/i/admin/api/hashtags/query?action=banned")}else if(3===t){this.fetchHashtags("/i/admin/api/hashtags/query?action=nsfw")}},openEditHashtagModal:function(t){var e=this;this.editSaved=!1,clearTimeout(this.editSavedTimeout),this.$nextTick((function(){axios.get("/i/admin/api/hashtags/get",{params:{id:t.id}}).then((function(t){e.editingHashtag=t.data.data,e.showEditModal=!0}))}))},storeHashtagEdit:function(t,e){var a=this;this.editSaved=!1,t.is_banned&&(t.can_trend||t.can_search)&&swal("Banned Hashtag Limits","Banned hashtags cannot trend or be searchable, to allow those you need to unban the hashtag","error"),axios.post("/i/admin/api/hashtags/update",t).then((function(e){a.editSaved=!0,1!==a.tabIndex&&(a.hashtags=a.hashtags.map((function(a){return a.id==t.id&&(a=e.data.data),a}))),a.editSavedTimeout=setTimeout((function(){a.editSaved=!1}),5e3)})).catch((function(t){swal("Oops!","An error occured, please try again.","error"),console.log(t)}))},composeSearch:function(t){return t.length<1?[]:axios.get("/i/admin/api/hashtags/query",{params:{q:t,sort:"cached_count",dir:"desc"}}).then((function(t){return t.data.data}))},getTagResultValue:function(t){return t.name},onSearchResultClick:function(t){this.openEditHashtagModal(t)},clearTrendingCache:function(){event.currentTarget.blur(),window.confirm("Are you sure you want to clear the trending hashtags cache?")&&axios.post("/i/admin/api/hashtags/clear-trending-cache").then((function(t){swal("Cache Cleared!","Successfully cleared the trending hashtag cache!","success")}))}}}},31187:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>l});var s=a(29655);a(67964);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function n(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,s)}return a}function o(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"/i/admin/api/instances/get";axios.get(e).then((function(e){t.instances=e.data.data,t.pagination=o(o({},e.data.links),e.data.meta)})).then((function(){t.$nextTick((function(){t.loaded=!0}))}))},toggleTab:function(t){this.loaded=!1,this.tabIndex=t,this.searchQuery=void 0;var e="/i/admin/api/instances/get?filter="+this.filterMap[t];history.pushState(null,"","/i/admin/instances?filter="+this.filterMap[t]),this.fetchInstances(e)},prettyCount:function(t){return t?t.toLocaleString("en-CA",{compactDisplay:"short",notation:"compact"}):0},formatCount:function(t){return t?t.toLocaleString("en-CA"):0},timeAgo:function(t){return t?App.util.format.timeAgo(t):t},boolIcon:function(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"text-muted";return t?''):'')},toggleCol:function(t){},buildColumn:function(t,e){var a='';return e==this.sortCol&&(a="desc"==this.sortDir?'':''),"".concat(t," ").concat(a)},paginate:function(t){event.currentTarget.blur();var e="next"==t?this.pagination.next:this.pagination.prev,a="next"==t?this.pagination.next_cursor:this.pagination.prev_cursor,s="/i/admin/instances?";this.tabIndex&&!this.searchQuery&&(s=s+"filter="+this.filterMap[this.tabIndex]+"&"),a&&(s=s+"cursor="+a),this.searchQuery&&(s=s+"&q="+this.searchQuery),history.pushState(null,"",s),this.fetchInstances(e)},composeSearch:function(t){var e=this;return t.length<1?[]:(this.searchQuery=t,history.pushState(null,"","/i/admin/instances?q="+t),axios.get("/i/admin/api/instances/query",{params:{q:t}}).then((function(t){return t&&t.data?(e.tabIndex=-1,e.instances=t.data.data,e.pagination=o(o({},t.data.links),t.data.meta)):e.fetchInstances(),t.data.data})))},getTagResultValue:function(t){return t.name},onSearchResultClick:function(t){this.openInstanceModal(t.id)},openInstanceModal:function(t){var e=this,a=this.instances.filter((function(e){return e.id===t}))[0];this.refreshedModalStats=!1,this.editingInstanceChanges=!1,this.instanceModalNotes=!1,this.canEditInstance=!1,this.instanceModal=a,this.$nextTick((function(){e.editingInstance=a,e.showInstanceModal=!0,e.canEditInstance=!0}))},showModalNotes:function(){this.instanceModalNotes=!0},saveInstanceModalChanges:function(){var t=this;axios.post("/i/admin/api/instances/update",this.editingInstance).then((function(e){t.showInstanceModal=!1,t.$bvToast.toast("Successfully updated ".concat(e.data.data.domain),{title:"Instance Updated",autoHideDelay:5e3,appendToast:!0,variant:"success"})}))},saveNewInstance:function(){var t=this;axios.post("/i/admin/api/instances/create",this.addNewInstance).then((function(e){t.showInstanceModal=!1,t.instances.unshift(e.data.data)})).catch((function(e){swal("Oops!","An error occured, please try again later.","error"),t.addNewInstance={domain:"",banned:!1,auto_cw:!1,unlisted:!1,notes:void 0}}))},refreshModalStats:function(){var t=this;axios.post("/i/admin/api/instances/refresh-stats",{id:this.instanceModal.id}).then((function(e){t.refreshedModalStats=!0,t.instanceModal=e.data.data,t.editingInstance=e.data.data,t.instances=t.instances.map((function(t){return t.id===e.data.data.id?e.data.data:t}))}))},deleteInstanceModal:function(){var t=this;window.confirm("Are you sure you want to delete this instance? This will not delete posts or profiles from this instance.")&&axios.post("/i/admin/api/instances/delete",{id:this.instanceModal.id}).then((function(e){t.showInstanceModal=!1,t.instances=t.instances.filter((function(e){return e.id!=t.instanceModal.id}))}))}}}},42014:(t,e,a)=>{"use strict";a.r(e),a.d(e,{render:()=>s,staticRenderFns:()=>i});var s=function(){var t=this,e=t._self._c;return t.loaded?e("div",[e("div",{staticClass:"header bg-primary pb-2 mt-n4"},[e("div",{staticClass:"container-fluid"},[e("div",{staticClass:"header-body"},[e("div",{staticClass:"row align-items-center py-4"},[t._m(0),t._v(" "),e("div",{staticClass:"col-lg-6 col-5"},[e("p",{staticClass:"text-right"},[e("button",{staticClass:"btn btn-outline-white btn-lg px-5 py-2",on:{click:t.save}},[t._v("Save changes")])])])])])])]),t._v(" "),e("div",{staticClass:"container"},[e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-3"},[e("div",{staticClass:"nav-wrapper"},[e("div",{staticClass:"nav flex-column nav-pills",attrs:{id:"tabs-icons-text",role:"tablist","aria-orientation":"vertical"}},t._l(t.tabs,(function(a){return e("div",{staticClass:"nav-item"},[e("a",{staticClass:"nav-link mb-sm-3",class:{active:t.tabIndex===a.id},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.toggleTab(a.id)}}},[e("i",{class:a.icon}),t._v(" "),e("span",{staticClass:"ml-2"},[t._v(t._s(a.title))])])])})),0)])]),t._v(" "),e("div",{staticClass:"col-12 col-md-9"},[e("div",{staticClass:"card shadow mt-3"},[e("div",{staticClass:"card-body"},[e("div",{staticClass:"tab-content"},[1===t.tabIndex?e("div",{staticClass:"tab-pane fade show active"},[t.isSubmitting||t.state.awaiting_approval||t.state.is_active?t.isSubmitting||!t.state.awaiting_approval||t.state.is_active?!t.isSubmitting&&t.state.awaiting_approval&&t.state.is_active?e("div",[t._m(3)]):t.isSubmitting||t.state.awaiting_approval||!t.state.is_active?t.isSubmitting?e("div",[e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("b-spinner",{attrs:{variant:"primary"}}),t._v(" "),e("p",{staticClass:"lead my-0 text-primary"},[t._v("Sending submission...")])],1)]):e("div",[t._m(6)]):e("div",[e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("h2",{staticClass:"font-weight-bold"},[t._v("Active Listing")]),t._v(" "),t._m(4),t._v(" "),t._m(5),t._v(" "),e("button",{staticClass:"btn btn-primary btn-sm mt-3 font-weight-bold px-5 text-uppercase",on:{click:t.handleSubmit}},[t._v("\n Update my listing on pixelfed.org\n ")])])]):e("div",[t._m(2)]):e("div",{staticClass:"d-flex align-items-center justify-content-center"},[e("div",{staticClass:"text-center mb-4"},[t._m(1),t._v(" "),e("p",{staticClass:"display-3 mb-1"},[t._v("Awaiting Submission")]),t._v(" "),t.state.is_eligible||t.state.submission_exists?t.state.is_eligible&&!t.state.submission_exists?e("div",{staticClass:"mb-4"},[e("p",{staticClass:"lead mt-0 text-muted"},[t._v("Your directory listing is ready for submission!")]),t._v(" "),e("button",{staticClass:"btn btn-primary btn-lg font-weight-bold px-5 text-uppercase",on:{click:t.handleSubmit}},[t._v("\n Submit my Server to pixelfed.org\n ")])]):t._e():e("p",{staticClass:"lead mt-0 text-muted"},[t._v("Your directory listing isn't completed yet")])])]),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card text-left"},[e("div",{staticClass:"list-group list-group-flush"},[e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.requirements.open_registration?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.requirements.open_registration?"Open":"Closed")+" account registration\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.requirements.oauth_enabled?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.requirements.oauth_enabled?"Enabled":"Disabled")+" mobile apis/oauth\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.requirements.activitypub_enabled?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.requirements.activitypub_enabled?"Enabled":"Disabled")+" activitypub federation\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.form.summary&&t.form.summary.length&&t.form.location&&t.form.location.length?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.form.summary&&t.form.summary.length&&t.form.location&&t.form.location.length?"Configured":"Missing")+" server details\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.requirements_validator&&0==t.requirements_validator.length?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.requirements_validator&&0==t.requirements_validator.length?"Valid":"Invalid")+" feature requirements\n ")])])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card text-left"},[e("div",{staticClass:"list-group list-group-flush"},[e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.form.contact_account?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.form.contact_account?"Configured":"Missing")+" admin account\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.form.contact_email?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.form.contact_email?"Configured":"Missing")+" contact email\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.selectedPosts&&t.selectedPosts.length?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.selectedPosts&&t.selectedPosts.length?"Configured":"Missing")+" favourite posts\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.form.privacy_pledge?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.form.privacy_pledge?"Configured":"Missing")+" privacy pledge\n ")])]),t._v(" "),e("div",{staticClass:"list-group-item"},[e("i",{staticClass:"far",class:[t.communityGuidelines&&t.communityGuidelines.length?"fa-check-circle text-success":"fa-exclamation-circle text-danger"]}),t._v(" "),e("span",{staticClass:"ml-2 font-weight-bold"},[t._v("\n "+t._s(t.communityGuidelines&&t.communityGuidelines.length?"Configured":"Missing")+" community guidelines\n ")])])])])])])]):2===t.tabIndex?e("div",{staticClass:"tab-pane fade show active"},[e("p",{staticClass:"description"},[t._v("Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.")])]):3===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Server Details")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Edit your server details to better describe it")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card shadow-none border card-body"},[e("div",{staticClass:"form-group mb-0"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Summary")]),t._v(" "),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.form.summary,expression:"form.summary"}],staticClass:"form-control form-control-muted",attrs:{id:"form-summary",rows:"3",placeholder:"A descriptive summary of your instance up to 140 characters long. HTML is not allowed."},domProps:{value:t.form.summary},on:{input:function(e){e.target.composing||t.$set(t.form,"summary",e.target.value)}}}),t._v(" "),e("p",{staticClass:"help-text small text-muted text-right"},[t._v("\n "+t._s(t.form.summary&&t.form.summary.length?t.form.summary.length:0)+"/140\n ")])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card shadow-none border card-body"},[e("div",{staticClass:"form-group mb-0"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Location")]),t._v(" "),e("select",{directives:[{name:"model",rawName:"v-model",value:t.form.location,expression:"form.location"}],staticClass:"form-control form-control-muted",on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.$set(t.form,"location",e.target.multiple?a:a[0])}}},[e("option",{attrs:{selected:"",disabled:"",value:"0"}},[t._v("Select the country your server is in")]),t._v(" "),t._l(t.initialData.countries,(function(a){return e("option",{domProps:{value:a}},[t._v(t._s(a))])}))],2),t._v(" "),e("p",{staticClass:"form-text small text-muted"},[t._v("Select the country your server is hosted in, even if you are in a different country")])])])])]),t._v(" "),e("div",{staticClass:"list-group mb-4"},[e("div",{staticClass:"list-group-item"},[e("label",{staticClass:"font-weight-bold mb-0"},[t._v("Server Banner")]),t._v(" "),e("p",{staticClass:"small"},[t._v("Add an optional banner image to your directory listing")]),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card mb-0 shadow-none border"},[t.form.banner_image?e("div",[e("a",{attrs:{href:t.form.banner_image,target:"_blank"}},[e("img",{staticClass:"card-img-top",attrs:{src:t.form.banner_image}})])]):e("div",{staticClass:"card-body bg-primary text-white"},[t._m(7),t._v(" "),e("p",{staticClass:"text-center mb-0"},[t._v("No banner image")])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[t.isUploadingBanner?e("div",{staticClass:"text-center"},[e("b-spinner",{attrs:{variant:"primary"}})],1):e("div",{staticClass:"custom-file"},[e("input",{ref:"bannerImageRef",staticClass:"custom-file-input",attrs:{type:"file",id:"banner_image"},on:{change:t.uploadBannerImage}}),t._v(" "),e("label",{staticClass:"custom-file-label",attrs:{for:"banner_image"}},[t._v("Choose file")]),t._v(" "),e("p",{staticClass:"form-text text-muted small mb-0"},[t._v("Must be 1920 by 1080 pixels")]),t._v(" "),t._m(8),t._v(" "),t.form.banner_image&&!t.form.banner_image.endsWith("default.jpg")?e("div",[e("button",{staticClass:"btn btn-danger font-weight-bold btn-block mt-5",on:{click:t.deleteBannerImage}},[t._v("Delete banner image")])]):t._e()])])])])]),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card shadow-none border card-body"},[e("div",{staticClass:"form-group mb-0"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Primary Language")]),t._v(" "),e("select",{directives:[{name:"model",rawName:"v-model",value:t.form.primary_locale,expression:"form.primary_locale"}],staticClass:"form-control form-control-muted",attrs:{disabled:""},on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.$set(t.form,"primary_locale",e.target.multiple?a:a[0])}}},t._l(t.initialData.available_languages,(function(a){return e("option",{domProps:{value:a.code}},[t._v(t._s(a.name))])})),0),t._v(" "),t._m(9)])])])])]):4===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Admin Contact")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Set a designated admin account and public email address")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[t.initialData.admins.length?e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Designated Admin")]),t._v(" "),e("select",{directives:[{name:"model",rawName:"v-model",value:t.form.contact_account,expression:"form.contact_account"}],staticClass:"form-control form-control-muted",on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.$set(t.form,"contact_account",e.target.multiple?a:a[0])}}},[e("option",{attrs:{disabled:"",value:"0"}},[t._v("Select a designated admin")]),t._v(" "),t._l(t.initialData.admins,(function(a,s){return e("option",{key:"pfc-"+a+s,domProps:{value:a.pid}},[t._v(t._s(a.username))])}))],2)]):e("div",{staticClass:"px-3 pb-2 pt-0 border border-danger rounded"},[e("p",{staticClass:"lead font-weight-bold text-danger"},[t._v("No admin(s) found")]),t._v(" "),t._m(10)])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Public Email")]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.form.contact_email,expression:"form.contact_email"}],staticClass:"form-control form-control-muted",attrs:{placeholder:"info@example.org"},domProps:{value:t.form.contact_email},on:{input:function(e){e.target.composing||t.$set(t.form,"contact_email",e.target.value)}}}),t._v(" "),e("p",{staticClass:"help-text small text-muted"},[t._v("\n Must be a valid email address\n ")])])])])]):5===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Favourite Posts")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Show off a few favourite posts from your server")]),t._v(" "),e("hr",{staticClass:"mt-0 mb-1"}),t._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:t.selectedPosts&&12!==t.selectedPosts.length,expression:"selectedPosts && selectedPosts.length !== 12"}],staticClass:"nav-wrapper"},[e("ul",{staticClass:"nav nav-pills nav-fill flex-column flex-md-row",attrs:{role:"tablist"}},[e("li",{staticClass:"nav-item"},[e("a",{staticClass:"nav-link mb-sm-3 mb-md-0 active",attrs:{id:"favposts-1-tab","data-toggle":"tab",href:"#favposts-1",role:"tab","aria-controls":"favposts-1","aria-selected":"true"}},[t._v(t._s(this.selectedPosts.length?this.selectedPosts.length:"")+" Selected Posts")])]),t._v(" "),t.selectedPosts&&t.selectedPosts.length<12?e("li",{staticClass:"nav-item"},[e("a",{staticClass:"nav-link mb-sm-3 mb-md-0",attrs:{id:"favposts-2-tab","data-toggle":"tab",href:"#favposts-2",role:"tab","aria-controls":"favposts-2","aria-selected":"false"}},[t._v("Add by post id")])]):t._e(),t._v(" "),t.selectedPosts&&t.selectedPosts.length<12?e("li",{staticClass:"nav-item"},[e("a",{staticClass:"nav-link mb-sm-3 mb-md-0",attrs:{id:"favposts-3-tab","data-toggle":"tab",href:"#favposts-3",role:"tab","aria-controls":"favposts-3","aria-selected":"false"},on:{click:t.initPopularPosts}},[t._v("Add by popularity")])]):t._e()])]),t._v(" "),e("div",{staticClass:"tab-content mt-3"},[e("div",{staticClass:"tab-pane fade list-fade-bottom show active",attrs:{id:"favposts-1",role:"tabpanel","aria-labelledby":"favposts-1-tab"}},[t.selectedPosts&&t.selectedPosts.length?e("div",{staticStyle:{"max-height":"520px","overflow-y":"auto"}},[t._l(t.selectedPosts,(function(a){return e("div",{key:"sp-"+a.id,staticClass:"list-group-item border-primary form-control-muted"},[e("div",{staticClass:"media align-items-center"},[e("div",{staticClass:"custom-control custom-checkbox mr-2"},[e("input",{staticClass:"custom-control-input",attrs:{type:"checkbox",checked:"",id:"checkbox-sp-".concat(a.id)},on:{change:function(e){return t.toggleSelectedPost(a)}}}),t._v(" "),e("label",{staticClass:"custom-control-label",attrs:{for:"checkbox-sp-".concat(a.id)}})]),t._v(" "),e("img",{staticClass:"border rounded-sm mr-3",staticStyle:{"object-fit":"cover"},attrs:{src:a.media_attachments[0].url,width:"100",height:"100",loading:"lazy"}}),t._v(" "),e("div",{staticClass:"media-body"},[e("p",{staticClass:"lead mt-0 mb-0 font-weight-bold"},[t._v("@"+t._s(a.account.username))]),t._v(" "),e("p",{staticClass:"text-muted mb-0",staticStyle:{"font-size":"14px"}},[e("span",[e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatCount(a.favourites_count)))]),t._v(" Likes")]),t._v(" "),e("span",{staticClass:"mx-2"},[t._v("·")]),t._v(" "),e("span",[e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatCount(a.account.followers_count)))]),t._v(" Followers")]),t._v(" "),e("span",{staticClass:"mx-2"},[t._v("·")]),t._v(" "),e("span",[t._v("Created "),e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatDateTime(a.created_at)))])])])]),t._v(" "),e("a",{staticClass:"btn btn-outline-primary btn-sm rounded-pill",attrs:{href:a.url,target:"_blank"}},[t._v("View")])])])})),t._v(" "),e("div",{staticClass:"mt-5 mb-5 pt-3"})],2):e("div",[t._m(11)])]),t._v(" "),e("div",{staticClass:"tab-pane fade",attrs:{id:"favposts-2",role:"tabpanel","aria-labelledby":"favposts-2-tab"}},[e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold"},[t._v("Find and add by post id")]),t._v(" "),e("div",{staticClass:"input-group mb-3"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.favouritePostByIdInput,expression:"favouritePostByIdInput"}],staticClass:"form-control form-control-muted border",attrs:{type:"number",placeholder:"Post id",min:"1",max:"99999999999999999999",disabled:t.favouritePostByIdFetching},domProps:{value:t.favouritePostByIdInput},on:{input:function(e){e.target.composing||(t.favouritePostByIdInput=e.target.value)}}}),t._v(" "),e("div",{staticClass:"input-group-append"},[t.favouritePostByIdFetching?e("button",{staticClass:"btn btn-outline-primary",attrs:{disabled:""}},[t._m(12)]):e("button",{staticClass:"btn btn-outline-primary",attrs:{type:"button"},on:{click:t.handlePostByIdSearch}},[t._v("\n Search\n ")])])])])]),t._v(" "),t._m(13)])]),t._v(" "),e("div",{staticClass:"tab-pane fade list-fade-bottom mb-0",attrs:{id:"favposts-3",role:"tabpanel","aria-labelledby":"favposts-3-tab"}},[t.popularPostsLoaded?e("div",{staticClass:"list-group",staticStyle:{"max-height":"520px","overflow-y":"auto"}},[t._l(t.popularPosts,(function(a){return e("div",{key:"pp-"+a.id,staticClass:"list-group-item",class:[t.selectedPosts.includes(a)?"border-primary form-control-muted":""]},[e("div",{staticClass:"media align-items-center"},[e("div",{staticClass:"custom-control custom-checkbox mr-2"},[e("input",{staticClass:"custom-control-input",attrs:{type:"checkbox",id:"checkbox-pp-".concat(a.id)},domProps:{checked:t.selectedPosts.includes(a)},on:{change:function(e){return t.togglePopularPost(a.id,a)}}}),t._v(" "),e("label",{staticClass:"custom-control-label",attrs:{for:"checkbox-pp-".concat(a.id)}})]),t._v(" "),e("img",{staticClass:"border rounded-sm mr-3",staticStyle:{"object-fit":"cover"},attrs:{src:a.media_attachments[0].url,width:"100",height:"100",loading:"lazy"}}),t._v(" "),e("div",{staticClass:"media-body"},[e("p",{staticClass:"lead mt-0 mb-0 font-weight-bold"},[t._v("@"+t._s(a.account.username))]),t._v(" "),e("p",{staticClass:"text-muted mb-0",staticStyle:{"font-size":"14px"}},[e("span",[e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatCount(a.favourites_count)))]),t._v(" Likes")]),t._v(" "),e("span",{staticClass:"mx-2"},[t._v("·")]),t._v(" "),e("span",[e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatCount(a.account.followers_count)))]),t._v(" Followers")]),t._v(" "),e("span",{staticClass:"mx-2"},[t._v("·")]),t._v(" "),e("span",[t._v("Created "),e("span",{staticClass:"font-weight-bold"},[t._v(t._s(t.formatDateTime(a.created_at)))])])])]),t._v(" "),e("a",{staticClass:"btn btn-outline-primary btn-sm rounded-pill",attrs:{href:a.url,target:"_blank"}},[t._v("View")])])])})),t._v(" "),e("div",{staticClass:"mt-5 mb-3"})],2):e("div",{staticClass:"text-center py-5"},[t._m(14)])])])]):6===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Privacy Pledge")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Pledge to keep you and your data private and securely stored")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("p",[t._v("To qualify for the Privacy Pledge, you must abide by the following rules:")]),t._v(" "),t._m(15),t._v(" "),e("p",{staticClass:"small text-muted mb-0"},[t._v("You may use 3rd party services like captchas on specific pages, so long as they are clearly defined in your privacy policy")]),t._v(" "),e("hr"),t._v(" "),e("p"),e("div",{staticClass:"custom-control custom-checkbox mr-2"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.form.privacy_pledge,expression:"form.privacy_pledge"}],staticClass:"custom-control-input",attrs:{type:"checkbox",id:"privacy-pledge"},domProps:{checked:Array.isArray(t.form.privacy_pledge)?t._i(t.form.privacy_pledge,null)>-1:t.form.privacy_pledge},on:{change:function(e){var a=t.form.privacy_pledge,s=e.target,i=!!s.checked;if(Array.isArray(a)){var n=t._i(a,null);s.checked?n<0&&t.$set(t.form,"privacy_pledge",a.concat([null])):n>-1&&t.$set(t.form,"privacy_pledge",a.slice(0,n).concat(a.slice(n+1)))}else t.$set(t.form,"privacy_pledge",i)}}}),t._v(" "),e("label",{staticClass:"custom-control-label font-weight-bold",attrs:{for:"privacy-pledge"}},[t._v("I agree to the uphold the Privacy Pledge")])]),t._v(" "),e("p")]):7===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Community Guidelines")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("A few ground rules to keep your community healthy and safe.")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),t.communityGuidelines&&t.communityGuidelines.length?e("ol",{staticClass:"font-weight-bold"},t._l(t.communityGuidelines,(function(a){return e("li",{staticClass:"text-primary"},[e("span",{staticClass:"lead ml-1 text-dark"},[t._v(t._s(a))])])})),0):e("div",{staticClass:"card bg-primary text-white"},[t._m(16)]),t._v(" "),e("hr"),t._v(" "),t._m(17)]):8===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("Feature Requirements")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("The minimum requirements for Directory inclusion.")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"list-group"},[e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("media_types")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Media Types")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Allowed MIME types. image/jpeg and image/png by default")]),t._v(" "),t.requirements_validator.hasOwnProperty("media_types")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.media_types[0]))]):t._e()])]),t._v(" "),t.feature_config.optimize_image?e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("image_quality")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Image Quality")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Image optimization is enabled, the image quality must be a value between 1-100.")]),t._v(" "),t.requirements_validator.hasOwnProperty("image_quality")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.image_quality[0]))]):t._e()])]):t._e(),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_photo_size")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Photo Size")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Max photo upload size in kb. Must be between 15-100 MB.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_photo_size")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_photo_size[0]))]):t._e()])]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_caption_length")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Caption Length")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("The max caption length limit. Must be between 500-10000.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_caption_length")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_caption_length[0]))]):t._e()])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"list-group"},[e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_altext_length")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Alt-text length")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("The alt-text length limit. Must be between 1000-5000.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_altext_length")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_altext_length[0]))]):t._e()])]),t._v(" "),t.feature_config.enforce_account_limit?e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_account_size")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Account Size")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("The account storage limit. Must be 1GB at minimum.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_account_size")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_account_size[0]))]):t._e()])]):t._e(),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("max_album_length")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Max Album Length")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Max photos per album post. Must be between 4-20.")]),t._v(" "),t.requirements_validator.hasOwnProperty("max_album_length")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.max_album_length[0]))]):t._e()])]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center"},[e("div",[e("i",{staticClass:"far fa-2x mr-4",class:[t.requirements_validator.hasOwnProperty("account_deletion")?"fa-exclamation-circle text-danger":"fa-check-circle text-success"]})]),t._v(" "),e("div",[e("p",{staticClass:"font-weight-bold text-dark my-0"},[t._v("Account Deletion")]),t._v(" "),e("p",{staticClass:"mb-0 small text-muted"},[t._v("Allow users to delete their own account.")]),t._v(" "),t.requirements_validator.hasOwnProperty("account_deletion")?e("p",{staticClass:"mb-0 text-danger font-weight-bold"},[t._v(t._s(t.requirements_validator.account_deletion[0]))]):t._e()])])])])])]):9===t.tabIndex?e("div",{staticClass:"tab-pane fade show active",attrs:{role:"tabpanel"}},[e("h2",{staticClass:"display-4 mb-0"},[t._v("User Testimonials")]),t._v(" "),e("p",{staticClass:"small text-muted"},[t._v("Add testimonials from your users.")]),t._v(" "),e("hr",{staticClass:"mt-0"}),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-12 col-md-6 list-fade-bottom"},[e("div",{staticClass:"list-group pb-5",staticStyle:{"max-height":"520px","overflow-y":"auto"}},t._l(t.testimonials,(function(a,s){return e("div",{staticClass:"list-group-item",class:[s==t.testimonials.length-1?"mb-5":""]},[e("div",{staticClass:"d-flex justify-content-between align-items-center"},[e("div",{staticClass:"media"},[e("img",{staticClass:"mr-3 rounded-circle",attrs:{src:a.profile.avatar,width:"40",h:"40"}}),t._v(" "),e("div",{staticClass:"media-body"},[e("p",{staticClass:"font-weight-bold mb-0"},[t._v("\n "+t._s(a.profile.username)+"\n ")]),t._v(" "),e("p",{staticClass:"small text-muted mt-n1 mb-0"},[t._v("\n Member Since "+t._s(t.formatDate(a.profile.created_at))+"\n ")])])]),t._v(" "),e("div",[e("p",{staticClass:"mb-0 small"},[e("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.editTestimonial(a)}}},[t._v("\n Edit\n ")])]),t._v(" "),e("p",{staticClass:"mb-0 small"},[e("a",{staticClass:"text-danger",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.deleteTestimonial(a)}}},[t._v("\n Delete\n ")])])])]),t._v(" "),e("hr",{staticClass:"my-1"}),t._v(" "),e("p",{staticClass:"small font-weight-bold text-muted mb-0 text-center"},[t._v("Testimonial")]),t._v(" "),e("div",{staticClass:"border rounded px-3"},[e("p",{staticClass:"my-2 small",staticStyle:{"white-space":"pre-wrap"},domProps:{innerHTML:t._s(a.body)}})])])})),0)]),t._v(" "),e("div",{staticClass:"col-12 col-md-6"},[t.isEditingTestimonial?e("div",{staticClass:"card"},[e("div",{staticClass:"card-header font-weight-bold"},[t._v("\n Edit Testimonial\n ")]),t._v(" "),e("div",{staticClass:"card-body"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Username")]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.editingTestimonial.profile.username,expression:"editingTestimonial.profile.username"}],staticClass:"form-control form-control-muted",attrs:{placeholder:"test",disabled:""},domProps:{value:t.editingTestimonial.profile.username},on:{input:function(e){e.target.composing||t.$set(t.editingTestimonial.profile,"username",e.target.value)}}})]),t._v(" "),e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Testimonial")]),t._v(" "),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.editingTestimonial.body,expression:"editingTestimonial.body"}],staticClass:"form-control form-control-muted",attrs:{rows:"5"},domProps:{value:t.editingTestimonial.body},on:{input:function(e){e.target.composing||t.$set(t.editingTestimonial,"body",e.target.value)}}}),t._v(" "),e("div",{staticClass:"d-flex justify-content-between"},[e("p",{staticClass:"help-text small text-muted mb-0"},[t._v("\n Text only, up to 500 characters\n ")]),t._v(" "),e("p",{staticClass:"help-text small text-muted mb-0"},[t._v("\n "+t._s(t.editingTestimonial.body?t.editingTestimonial.body.length:0)+"/500\n ")])])])]),t._v(" "),e("div",{staticClass:"card-footer"},[e("button",{staticClass:"btn btn-primary btn-block",attrs:{type:"button"},on:{click:t.saveEditTestimonial}},[t._v("\n Save\n ")]),t._v(" "),e("button",{staticClass:"btn btn-secondary btn-block",attrs:{type:"button"},on:{click:t.cancelEditTestimonial}},[t._v("\n Cancel\n ")])])]):e("div",{staticClass:"card"},[t.testimonials.length<10?[e("div",{staticClass:"card-header font-weight-bold"},[t._v("\n Add New Testimonial\n ")]),t._v(" "),e("div",{staticClass:"card-body"},[e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Username")]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.testimonial.username,expression:"testimonial.username"}],staticClass:"form-control form-control-muted",attrs:{placeholder:"test"},domProps:{value:t.testimonial.username},on:{input:function(e){e.target.composing||t.$set(t.testimonial,"username",e.target.value)}}}),t._v(" "),e("p",{staticClass:"help-text small text-muted"},[t._v("\n Must be a valid user account\n ")])]),t._v(" "),e("div",{staticClass:"form-group"},[e("label",{staticClass:"font-weight-bold",attrs:{for:"form-summary"}},[t._v("Testimonial")]),t._v(" "),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.testimonial.body,expression:"testimonial.body"}],staticClass:"form-control form-control-muted",attrs:{rows:"5"},domProps:{value:t.testimonial.body},on:{input:function(e){e.target.composing||t.$set(t.testimonial,"body",e.target.value)}}}),t._v(" "),e("div",{staticClass:"d-flex justify-content-between"},[e("p",{staticClass:"help-text small text-muted mb-0"},[t._v("\n Text only, up to 500 characters\n ")]),t._v(" "),e("p",{staticClass:"help-text small text-muted mb-0"},[t._v("\n "+t._s(t.testimonial.body?t.testimonial.body.length:0)+"/500\n ")])])])]),t._v(" "),e("div",{staticClass:"card-footer"},[e("button",{staticClass:"btn btn-primary btn-block",attrs:{type:"button"},on:{click:t.saveTestimonial}},[t._v("Save Testimonial")])])]:[t._m(18)]],2)])])]):t._e()])])])])])])]):e("div",[t._m(19)])},i=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"col-lg-6 col-7"},[e("p",{staticClass:"display-1 text-white d-inline-block mb-0"},[t._v("Directory")]),t._v(" "),e("p",{staticClass:"h3 text-white font-weight-light"},[t._v("Manage your server listing on pixelfed.org")])])},function(){var t=this._self._c;return t("p",[t("i",{staticClass:"far fa-exclamation-triangle fa-5x text-lighter"})])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("p",{staticClass:"display-3 mb-1"},[t._v("Awaiting Approval")]),t._v(" "),e("p",{staticClass:"text-primary mb-1"},[t._v("Awaiting submission approval from pixelfed.org, please check back later!")]),t._v(" "),e("p",{staticClass:"small text-muted mb-0"},[t._v("If you are still waiting for approval after 24 hours please contact the Pixelfed team.")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("p",{staticClass:"display-3 mb-1"},[t._v("Awaiting Update Approval")]),t._v(" "),e("p",{staticClass:"text-primary mb-1"},[t._v("Awaiting updated submission approval from pixelfed.org, please check back later!")]),t._v(" "),e("p",{staticClass:"small text-muted mb-0"},[t._v("If you are still waiting for approval after 24 hours please contact the Pixelfed team.")])])},function(){var t=this._self._c;return t("p",{staticClass:"my-3"},[t("i",{staticClass:"far fa-check-circle fa-4x text-success"})])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"mt-2 mb-0"},[t._v("Your server directory listing on "),e("a",{staticClass:"font-weight-bold",attrs:{href:"#"}},[t._v("pixelfed.org")]),t._v(" is active")])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card card-body shadow-none border d-flex align-items-center justify-content-center py-5"},[e("p",{staticClass:"display-3 mb-1"},[t._v("Oops! An unexpected error occured")]),t._v(" "),e("p",{staticClass:"text-primary mb-1"},[t._v("Ask the Pixelfed team for assistance.")])])},function(){var t=this._self._c;return t("p",{staticClass:"text-center mb-2"},[t("i",{staticClass:"far fa-exclamation-circle fa-2x"})])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"form-text text-muted small mb-0"},[t._v("Must be a "),e("kbd",[t._v("JPEG")]),t._v(" or "),e("kbd",[t._v("PNG")]),t._v(" image no larger than 5MB.")])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"form-text text-muted small mb-0"},[t._v("The primary language of your server, to edit this value you need to set the "),e("kbd",[t._v("APP_LOCALE")]),t._v(" .env value")])},function(){var t=this,e=t._self._c;return e("ul",{staticClass:"text-danger"},[e("li",[t._v("Admins must be active")]),t._v(" "),e("li",[t._v("Admins must have 2FA setup and enabled")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card card-body bg-lighter text-center py-5"},[e("p",{staticClass:"text-light mb-1"},[e("i",{staticClass:"far fa-info-circle fa-3x"})]),t._v(" "),e("p",{staticClass:"h2 mb-0"},[t._v("0 posts selected")]),t._v(" "),e("p",{staticClass:"small mb-0"},[t._v("You can select up to 12 favourite posts by id or popularity")])])},function(){var t=this._self._c;return t("div",{staticClass:"spinner-border spinner-border-sm",attrs:{role:"status"}},[t("span",{staticClass:"sr-only"},[this._v("Loading...")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"col-12 col-md-6"},[e("div",{staticClass:"card card-body bg-primary"},[e("div",{staticClass:"d-flex align-items-center text-white"},[e("i",{staticClass:"far fa-info-circle mr-2"}),t._v(" "),e("p",{staticClass:"small mb-0 font-weight-bold"},[t._v("A post id is the numerical id found in post urls")])])])])},function(){var t=this._self._c;return t("div",{staticClass:"spinner-border text-primary",attrs:{role:"status"}},[t("span",{staticClass:"sr-only"},[this._v("Loading...")])])},function(){var t=this,e=t._self._c;return e("ul",{staticClass:"font-weight-bold"},[e("li",[t._v("No analytics or 3rd party trackers*")]),t._v(" "),e("li",[t._v("User data is not sold to any 3rd parties")]),t._v(" "),e("li",[t._v("Data is stored securely in accordance with industry standards")]),t._v(" "),e("li",[t._v("Admin accounts are protected with 2FA")]),t._v(" "),e("li",[t._v("Follow strict support procedures to keep your accounts safe")]),t._v(" "),e("li",[t._v("Give at least 6 months warning in the event we shut down")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"card-body text-center py-5"},[e("p",{staticClass:"mb-n3"},[e("i",{staticClass:"far fa-exclamation-circle fa-3x"})]),t._v(" "),e("p",{staticClass:"lead mb-0"},[t._v("No Community Guidelines have been set")])])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"mb-0"},[t._v("You can manage Community Guidelines on the "),e("a",{attrs:{href:"/i/admin/settings"}},[t._v("Settings page")])])},function(){var t=this._self._c;return t("div",{staticClass:"card-body text-center"},[t("p",{staticClass:"lead"},[this._v("You can't add any more testimonials")])])},function(){var t=this._self._c;return t("div",{staticClass:"container my-5 py-5 text-center"},[t("div",{staticClass:"spinner-border text-primary",attrs:{role:"status"}},[t("span",{staticClass:"sr-only"},[this._v("Loading...")])])])}]},71636:(t,e,a)=>{"use strict";a.r(e),a.d(e,{render:()=>s,staticRenderFns:()=>i});var s=function(){var t=this,e=t._self._c;return e("div",[e("div",{staticClass:"header bg-primary pb-3 mt-n4"},[e("div",{staticClass:"container-fluid"},[e("div",{staticClass:"header-body"},[t._m(0),t._v(" "),e("div",{staticClass:"row"},[e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("Unique Hashtags")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.total_unique)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("Total Hashtags")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.total_posts)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("New (past 14 days)")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.added_14_days)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("Banned Hashtags")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.total_banned)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("NSFW Hashtags")]),t._v(" "),e("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[t._v(t._s(t.prettyCount(t.stats.total_nsfw)))])])]),t._v(" "),e("div",{staticClass:"col-xl-2 col-md-6"},[e("div",{staticClass:"mb-3"},[e("h5",{staticClass:"text-light text-uppercase mb-0"},[t._v("Clear Trending Cache")]),t._v(" "),e("button",{staticClass:"btn btn-outline-white btn-block btn-sm py-0 mt-1",on:{click:t.clearTrendingCache}},[t._v("Clear Cache")])])])])])])]),t._v(" "),t.loaded?e("div",{staticClass:"m-n2 m-lg-4"},[e("div",{staticClass:"container-fluid mt-4"},[e("div",{staticClass:"row mb-3 justify-content-between"},[e("div",{staticClass:"col-12 col-md-8"},[e("ul",{staticClass:"nav nav-pills"},[e("li",{staticClass:"nav-item"},[e("button",{class:["nav-link",{active:0==t.tabIndex}],on:{click:function(e){return t.toggleTab(0)}}},[t._v("All")])]),t._v(" "),e("li",{staticClass:"nav-item"},[e("button",{class:["nav-link",{active:1==t.tabIndex}],on:{click:function(e){return t.toggleTab(1)}}},[t._v("Trending")])]),t._v(" "),e("li",{staticClass:"nav-item"},[e("button",{class:["nav-link",{active:2==t.tabIndex}],on:{click:function(e){return t.toggleTab(2)}}},[t._v("Banned")])]),t._v(" "),e("li",{staticClass:"nav-item"},[e("button",{class:["nav-link",{active:3==t.tabIndex}],on:{click:function(e){return t.toggleTab(3)}}},[t._v("NSFW")])])])]),t._v(" "),e("div",{staticClass:"col-12 col-md-4"},[e("autocomplete",{ref:"autocomplete",attrs:{search:t.composeSearch,disabled:t.searchLoading,placeholder:"Search hashtags","aria-label":"Search hashtags","get-result-value":t.getTagResultValue},on:{submit:t.onSearchResultClick},scopedSlots:t._u([{key:"result",fn:function(a){var s=a.result,i=a.props;return[e("li",t._b({staticClass:"autocomplete-result d-flex justify-content-between align-items-center"},"li",i,!1),[e("div",{staticClass:"font-weight-bold",class:{"text-danger":s.is_banned}},[t._v("\n #"+t._s(s.name)+"\n ")]),t._v(" "),e("div",{staticClass:"small text-muted"},[t._v("\n "+t._s(t.prettyCount(s.cached_count))+" posts\n ")])])]}}])})],1)]),t._v(" "),[0,2,3].includes(this.tabIndex)?e("div",{staticClass:"table-responsive"},[e("table",{staticClass:"table table-dark"},[e("thead",{staticClass:"thead-dark"},[e("tr",[e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("ID","id"))},on:{click:function(e){return t.toggleCol("id")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Hashtag","name"))},on:{click:function(e){return t.toggleCol("name")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Count","cached_count"))},on:{click:function(e){return t.toggleCol("cached_count")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Can Search","can_search"))},on:{click:function(e){return t.toggleCol("can_search")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Can Trend","can_trend"))},on:{click:function(e){return t.toggleCol("can_trend")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("NSFW","is_nsfw"))},on:{click:function(e){return t.toggleCol("is_nsfw")}}}),t._v(" "),e("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:t._s(t.buildColumn("Banned","is_banned"))},on:{click:function(e){return t.toggleCol("is_banned")}}}),t._v(" "),e("th",{attrs:{scope:"col"}},[t._v("Created")])])]),t._v(" "),e("tbody",t._l(t.hashtags,(function(a,s){var i;return e("tr",[e("td",{staticClass:"font-weight-bold text-monospace text-muted"},[e("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.openEditHashtagModal(a,s)}}},[t._v("\n "+t._s(a.id)+"\n ")])]),t._v(" "),e("td",{staticClass:"font-weight-bold"},[t._v(t._s(a.name))]),t._v(" "),e("td",{staticClass:"font-weight-bold"},[e("a",{attrs:{href:"/i/web/hashtag/".concat(a.slug)}},[t._v("\n "+t._s(null!==(i=a.cached_count)&&void 0!==i?i:0)+"\n ")])]),t._v(" "),e("td",{staticClass:"font-weight-bold",domProps:{innerHTML:t._s(t.boolIcon(a.can_search,"text-success","text-danger"))}}),t._v(" "),e("td",{staticClass:"font-weight-bold",domProps:{innerHTML:t._s(t.boolIcon(a.can_trend,"text-success","text-danger"))}}),t._v(" "),e("td",{staticClass:"font-weight-bold",domProps:{innerHTML:t._s(t.boolIcon(a.is_nsfw,"text-danger"))}}),t._v(" "),e("td",{staticClass:"font-weight-bold",domProps:{innerHTML:t._s(t.boolIcon(a.is_banned,"text-danger"))}}),t._v(" "),e("td",{staticClass:"font-weight-bold"},[t._v(t._s(t.timeAgo(a.created_at)))])])})),0)])]):t._e(),t._v(" "),[0,2,3].includes(this.tabIndex)?e("div",{staticClass:"d-flex align-items-center justify-content-center"},[e("button",{staticClass:"btn btn-primary rounded-pill",attrs:{disabled:!t.pagination.prev},on:{click:function(e){return t.paginate("prev")}}},[t._v("\n Prev\n ")]),t._v(" "),e("button",{staticClass:"btn btn-primary rounded-pill",attrs:{disabled:!t.pagination.next},on:{click:function(e){return t.paginate("next")}}},[t._v("\n Next\n ")])]):t._e(),t._v(" "),1==this.tabIndex?e("div",{staticClass:"table-responsive"},[e("table",{staticClass:"table table-dark"},[t._m(1),t._v(" "),e("tbody",t._l(t.trendingTags,(function(a,s){var i;return e("tr",[e("td",{staticClass:"font-weight-bold text-monospace text-muted"},[e("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.openEditHashtagModal(a,s)}}},[t._v("\n "+t._s(a.id)+"\n ")])]),t._v(" "),e("td",{staticClass:"font-weight-bold"},[t._v(t._s(a.hashtag))]),t._v(" "),e("td",{staticClass:"font-weight-bold"},[e("a",{attrs:{href:"/i/web/hashtag/".concat(a.hashtag)}},[t._v("\n "+t._s(null!==(i=a.total)&&void 0!==i?i:0)+"\n ")])])])})),0)])]):t._e()])]):e("div",{staticClass:"my-5 text-center"},[e("b-spinner")],1),t._v(" "),e("b-modal",{attrs:{title:"Edit Hashtag","ok-only":!0,lazy:!0,static:!0},model:{value:t.showEditModal,callback:function(e){t.showEditModal=e},expression:"showEditModal"}},[t.editingHashtag&&t.editingHashtag.name?e("div",{staticClass:"list-group"},[e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Name")]),t._v(" "),e("div",{staticClass:"font-weight-bold"},[t._v(t._s(t.editingHashtag.name))])]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Total Uses")]),t._v(" "),e("div",{staticClass:"font-weight-bold"},[t._v(t._s(t.editingHashtag.cached_count.toLocaleString("en-CA",{compactDisplay:"short"})))])]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Can Trend")]),t._v(" "),e("div",{staticClass:"mr-n2 mb-1"},[e("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:t.editingHashtag.can_trend,callback:function(e){t.$set(t.editingHashtag,"can_trend",e)},expression:"editingHashtag.can_trend"}})],1)]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Can Search")]),t._v(" "),e("div",{staticClass:"mr-n2 mb-1"},[e("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:t.editingHashtag.can_search,callback:function(e){t.$set(t.editingHashtag,"can_search",e)},expression:"editingHashtag.can_search"}})],1)]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("Banned")]),t._v(" "),e("div",{staticClass:"mr-n2 mb-1"},[e("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:t.editingHashtag.is_banned,callback:function(e){t.$set(t.editingHashtag,"is_banned",e)},expression:"editingHashtag.is_banned"}})],1)]),t._v(" "),e("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[e("div",{staticClass:"text-muted small"},[t._v("NSFW")]),t._v(" "),e("div",{staticClass:"mr-n2 mb-1"},[e("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:t.editingHashtag.is_nsfw,callback:function(e){t.$set(t.editingHashtag,"is_nsfw",e)},expression:"editingHashtag.is_nsfw"}})],1)])]):t._e(),t._v(" "),e("transition",{attrs:{name:"fade"}},[t.editingHashtag&&t.editingHashtag.name&&t.editSaved?e("div",[e("p",{staticClass:"text-primary small font-weight-bold text-center mt-1 mb-0"},[t._v("Hashtag changes successfully saved!")])]):t._e()])],1)],1)},i=[function(){var t=this._self._c;return t("div",{staticClass:"row align-items-center py-4"},[t("div",{staticClass:"col-lg-6 col-7"},[t("p",{staticClass:"display-1 text-white d-inline-block mb-0"},[this._v("Hashtags")])])])},function(){var t=this,e=t._self._c;return e("thead",{staticClass:"thead-dark"},[e("tr",[e("th",{attrs:{scope:"col"}},[t._v("ID")]),t._v(" "),e("th",{attrs:{scope:"col"}},[t._v("Hashtag")]),t._v(" "),e("th",{attrs:{scope:"col"}},[t._v("Trending Count")])])])}]},1490:(t,e,a)=>{"use strict";a.r(e),a.d(e,{render:()=>s,staticRenderFns:()=>i});var s=function(){var t,e,a,s=this,i=s._self._c;return i("div",[i("div",{staticClass:"header bg-primary pb-3 mt-n4"},[i("div",{staticClass:"container-fluid"},[i("div",{staticClass:"header-body"},[s._m(0),s._v(" "),i("div",{staticClass:"row"},[i("div",{staticClass:"col-xl-2 col-md-6"},[i("div",{staticClass:"mb-3"},[i("h5",{staticClass:"text-light text-uppercase mb-0"},[s._v("Total Instances")]),s._v(" "),i("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[s._v(s._s(s.prettyCount(s.stats.total_count)))])])]),s._v(" "),i("div",{staticClass:"col-xl-2 col-md-6"},[i("div",{staticClass:"mb-3"},[i("h5",{staticClass:"text-light text-uppercase mb-0"},[s._v("New (past 14 days)")]),s._v(" "),i("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[s._v(s._s(s.prettyCount(s.stats.new_count)))])])]),s._v(" "),i("div",{staticClass:"col-xl-2 col-md-6"},[i("div",{staticClass:"mb-3"},[i("h5",{staticClass:"text-light text-uppercase mb-0"},[s._v("Banned Instances")]),s._v(" "),i("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[s._v(s._s(s.prettyCount(s.stats.banned_count)))])])]),s._v(" "),i("div",{staticClass:"col-xl-2 col-md-6"},[i("div",{staticClass:"mb-3"},[i("h5",{staticClass:"text-light text-uppercase mb-0"},[s._v("NSFW Instances")]),s._v(" "),i("span",{staticClass:"text-white h2 font-weight-bold mb-0 human-size"},[s._v(s._s(s.prettyCount(s.stats.nsfw_count)))])])]),s._v(" "),i("div",{staticClass:"col-xl-2 col-md-6"},[i("div",{staticClass:"mb-3"},[i("button",{staticClass:"btn btn-outline-white btn-block btn-sm mt-1",on:{click:function(t){t.preventDefault(),s.showAddModal=!0}}},[s._v("Create New Instance")])])])])])])]),s._v(" "),s.loaded?i("div",{staticClass:"m-n2 m-lg-4"},[i("div",{staticClass:"container-fluid mt-4"},[i("div",{staticClass:"row mb-3 justify-content-between"},[i("div",{staticClass:"col-12 col-md-8"},[i("ul",{staticClass:"nav nav-pills"},[i("li",{staticClass:"nav-item"},[i("button",{class:["nav-link",{active:0==s.tabIndex}],on:{click:function(t){return s.toggleTab(0)}}},[s._v("All")])]),s._v(" "),i("li",{staticClass:"nav-item"},[i("button",{class:["nav-link",{active:1==s.tabIndex}],on:{click:function(t){return s.toggleTab(1)}}},[s._v("New")])]),s._v(" "),i("li",{staticClass:"nav-item"},[i("button",{class:["nav-link",{active:2==s.tabIndex}],on:{click:function(t){return s.toggleTab(2)}}},[s._v("Banned")])]),s._v(" "),i("li",{staticClass:"nav-item"},[i("button",{class:["nav-link",{active:3==s.tabIndex}],on:{click:function(t){return s.toggleTab(3)}}},[s._v("NSFW")])]),s._v(" "),i("li",{staticClass:"nav-item"},[i("button",{class:["nav-link",{active:4==s.tabIndex}],on:{click:function(t){return s.toggleTab(4)}}},[s._v("Unlisted")])]),s._v(" "),i("li",{staticClass:"nav-item"},[i("button",{class:["nav-link",{active:5==s.tabIndex}],on:{click:function(t){return s.toggleTab(5)}}},[s._v("Most Users")])]),s._v(" "),i("li",{staticClass:"nav-item"},[i("button",{class:["nav-link",{active:6==s.tabIndex}],on:{click:function(t){return s.toggleTab(6)}}},[s._v("Most Statuses")])])])]),s._v(" "),i("div",{staticClass:"col-12 col-md-4"},[i("autocomplete",{ref:"autocomplete",attrs:{search:s.composeSearch,disabled:s.searchLoading,defaultValue:s.searchQuery,placeholder:"Search instances by domain","aria-label":"Search instances by domain","get-result-value":s.getTagResultValue},on:{submit:s.onSearchResultClick},scopedSlots:s._u([{key:"result",fn:function(t){var e=t.result,a=t.props;return[i("li",s._b({staticClass:"autocomplete-result d-flex justify-content-between align-items-center"},"li",a,!1),[i("div",{staticClass:"font-weight-bold",class:{"text-danger":e.banned}},[s._v("\n\t\t\t\t\t\t\t\t\t"+s._s(e.domain)+"\n\t\t\t\t\t\t\t\t")]),s._v(" "),i("div",{staticClass:"small text-muted"},[s._v("\n\t\t\t\t\t\t\t\t\t"+s._s(s.prettyCount(e.user_count))+" users\n\t\t\t\t\t\t\t\t")])])]}}])})],1)]),s._v(" "),i("div",{staticClass:"table-responsive"},[i("table",{staticClass:"table table-dark"},[i("thead",{staticClass:"thead-dark"},[i("tr",[i("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:s._s(s.buildColumn("ID","id"))},on:{click:function(t){return s.toggleCol("id")}}}),s._v(" "),i("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:s._s(s.buildColumn("Domain","name"))},on:{click:function(t){return s.toggleCol("name")}}}),s._v(" "),i("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:s._s(s.buildColumn("Software","software"))},on:{click:function(t){return s.toggleCol("software")}}}),s._v(" "),i("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:s._s(s.buildColumn("User Count","user_count"))},on:{click:function(t){return s.toggleCol("user_count")}}}),s._v(" "),i("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:s._s(s.buildColumn("Status Count","status_count"))},on:{click:function(t){return s.toggleCol("status_count")}}}),s._v(" "),i("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:s._s(s.buildColumn("Banned","banned"))},on:{click:function(t){return s.toggleCol("banned")}}}),s._v(" "),i("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:s._s(s.buildColumn("NSFW","auto_cw"))},on:{click:function(t){return s.toggleCol("auto_cw")}}}),s._v(" "),i("th",{staticClass:"cursor-pointer",attrs:{scope:"col"},domProps:{innerHTML:s._s(s.buildColumn("Unlisted","unlisted"))},on:{click:function(t){return s.toggleCol("unlisted")}}}),s._v(" "),i("th",{attrs:{scope:"col"}},[s._v("Created")])])]),s._v(" "),i("tbody",s._l(s.instances,(function(t,e){return i("tr",[i("td",{staticClass:"font-weight-bold text-monospace text-muted"},[i("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),s.openInstanceModal(t.id)}}},[s._v("\n\t\t\t\t\t\t\t\t\t"+s._s(t.id)+"\n\t\t\t\t\t\t\t\t")])]),s._v(" "),i("td",{staticClass:"font-weight-bold"},[s._v(s._s(t.domain))]),s._v(" "),i("td",{staticClass:"font-weight-bold"},[s._v(s._s(t.software))]),s._v(" "),i("td",{staticClass:"font-weight-bold"},[s._v(s._s(s.prettyCount(t.user_count)))]),s._v(" "),i("td",{staticClass:"font-weight-bold"},[s._v(s._s(s.prettyCount(t.status_count)))]),s._v(" "),i("td",{staticClass:"font-weight-bold",domProps:{innerHTML:s._s(s.boolIcon(t.banned,"text-danger"))}}),s._v(" "),i("td",{staticClass:"font-weight-bold",domProps:{innerHTML:s._s(s.boolIcon(t.auto_cw,"text-danger"))}}),s._v(" "),i("td",{staticClass:"font-weight-bold",domProps:{innerHTML:s._s(s.boolIcon(t.unlisted,"text-danger"))}}),s._v(" "),i("td",{staticClass:"font-weight-bold"},[s._v(s._s(s.timeAgo(t.created_at)))])])})),0)])]),s._v(" "),i("div",{staticClass:"d-flex align-items-center justify-content-center"},[i("button",{staticClass:"btn btn-primary rounded-pill",attrs:{disabled:!s.pagination.prev},on:{click:function(t){return s.paginate("prev")}}},[s._v("\n\t\t\t\t\tPrev\n\t\t\t\t")]),s._v(" "),i("button",{staticClass:"btn btn-primary rounded-pill",attrs:{disabled:!s.pagination.next},on:{click:function(t){return s.paginate("next")}}},[s._v("\n\t\t\t\t\tNext\n\t\t\t\t")])])])]):i("div",{staticClass:"my-5 text-center"},[i("b-spinner")],1),s._v(" "),i("b-modal",{attrs:{title:"View Instance","header-class":"d-flex align-items-center justify-content-center mb-0 pb-0","ok-title":"Save","ok-disabled":!s.editingInstanceChanges},on:{ok:s.saveInstanceModalChanges},scopedSlots:s._u([{key:"modal-footer",fn:function(){return[i("div",{staticClass:"w-100 d-flex justify-content-between align-items-center"},[i("div",[i("b-button",{attrs:{variant:"outline-danger",size:"sm"},on:{click:s.deleteInstanceModal}},[s._v("\n\t\t\t\t\tDelete\n\t\t\t\t")]),s._v(" "),s.refreshedModalStats?s._e():i("b-button",{attrs:{variant:"outline-primary",size:"sm"},on:{click:s.refreshModalStats}},[s._v("\n\t\t\t\t\tRefresh Stats\n\t\t\t\t")])],1),s._v(" "),i("div",[i("b-button",{attrs:{variant:"secondary"},on:{click:function(t){s.showInstanceModal=!1}}},[s._v("\n\t\t\t\tClose\n\t\t\t ")]),s._v(" "),i("b-button",{attrs:{variant:"primary"},on:{click:s.saveInstanceModalChanges}},[s._v("\n\t\t\t\tSave\n\t\t\t ")])],1)])]},proxy:!0}]),model:{value:s.showInstanceModal,callback:function(t){s.showInstanceModal=t},expression:"showInstanceModal"}},[s.editingInstance&&s.canEditInstance?i("div",{staticClass:"list-group"},[i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Domain")]),s._v(" "),i("div",{staticClass:"font-weight-bold"},[s._v(s._s(s.editingInstance.domain))])]),s._v(" "),i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[s.editingInstance.software?i("div",[i("div",{staticClass:"text-muted small"},[s._v("Software")]),s._v(" "),i("div",{staticClass:"font-weight-bold"},[s._v(s._s(null!==(t=s.editingInstance.software)&&void 0!==t?t:"Unknown"))])]):s._e(),s._v(" "),i("div",[i("div",{staticClass:"text-muted small"},[s._v("Total Users")]),s._v(" "),i("div",{staticClass:"font-weight-bold"},[s._v(s._s(s.formatCount(null!==(e=s.editingInstance.user_count)&&void 0!==e?e:0)))])]),s._v(" "),i("div",[i("div",{staticClass:"text-muted small"},[s._v("Total Statuses")]),s._v(" "),i("div",{staticClass:"font-weight-bold"},[s._v(s._s(s.formatCount(null!==(a=s.editingInstance.status_count)&&void 0!==a?a:0)))])])]),s._v(" "),i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Banned")]),s._v(" "),i("div",{staticClass:"mr-n2 mb-1"},[i("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:s.editingInstance.banned,callback:function(t){s.$set(s.editingInstance,"banned",t)},expression:"editingInstance.banned"}})],1)]),s._v(" "),i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Apply CW to Media")]),s._v(" "),i("div",{staticClass:"mr-n2 mb-1"},[i("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:s.editingInstance.auto_cw,callback:function(t){s.$set(s.editingInstance,"auto_cw",t)},expression:"editingInstance.auto_cw"}})],1)]),s._v(" "),i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Unlisted")]),s._v(" "),i("div",{staticClass:"mr-n2 mb-1"},[i("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:s.editingInstance.unlisted,callback:function(t){s.$set(s.editingInstance,"unlisted",t)},expression:"editingInstance.unlisted"}})],1)]),s._v(" "),i("div",{staticClass:"list-group-item d-flex justify-content-between",class:[s.instanceModalNotes?"flex-column gap-2":"align-items-center"]},[i("div",{staticClass:"text-muted small"},[s._v("Notes")]),s._v(" "),i("transition",{attrs:{name:"fade"}},[s.instanceModalNotes?i("div",{staticClass:"w-100"},[i("b-form-textarea",{attrs:{rows:"3","max-rows":"5",maxlength:"500"},model:{value:s.editingInstance.notes,callback:function(t){s.$set(s.editingInstance,"notes",t)},expression:"editingInstance.notes"}}),s._v(" "),i("p",{staticClass:"small text-muted"},[s._v(s._s(s.editingInstance.notes?s.editingInstance.notes.length:0)+"/500")])],1):i("div",{staticClass:"mb-1"},[i("a",{staticClass:"font-weight-bold small",attrs:{href:"#"},on:{click:function(t){return t.preventDefault(),s.showModalNotes()}}},[s._v(s._s(s.editingInstance.notes?"View":"Add"))])])])],1)]):s._e()]),s._v(" "),i("b-modal",{attrs:{title:"Add Instance","ok-title":"Save","ok-disabled":s.addNewInstance.domain.length<2},on:{ok:s.saveNewInstance},model:{value:s.showAddModal,callback:function(t){s.showAddModal=t},expression:"showAddModal"}},[i("div",{staticClass:"list-group"},[i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Domain")]),s._v(" "),i("div",[i("b-form-input",{attrs:{placeholder:"Add domain here"},model:{value:s.addNewInstance.domain,callback:function(t){s.$set(s.addNewInstance,"domain",t)},expression:"addNewInstance.domain"}}),s._v(" "),i("p",{staticClass:"small text-light mb-0"},[s._v("Enter a valid domain without https://")])],1)]),s._v(" "),i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Banned")]),s._v(" "),i("div",{staticClass:"mr-n2 mb-1"},[i("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:s.addNewInstance.banned,callback:function(t){s.$set(s.addNewInstance,"banned",t)},expression:"addNewInstance.banned"}})],1)]),s._v(" "),i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Apply CW to Media")]),s._v(" "),i("div",{staticClass:"mr-n2 mb-1"},[i("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:s.addNewInstance.auto_cw,callback:function(t){s.$set(s.addNewInstance,"auto_cw",t)},expression:"addNewInstance.auto_cw"}})],1)]),s._v(" "),i("div",{staticClass:"list-group-item d-flex align-items-center justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Unlisted")]),s._v(" "),i("div",{staticClass:"mr-n2 mb-1"},[i("b-form-checkbox",{attrs:{switch:"",size:"lg"},model:{value:s.addNewInstance.unlisted,callback:function(t){s.$set(s.addNewInstance,"unlisted",t)},expression:"addNewInstance.unlisted"}})],1)]),s._v(" "),i("div",{staticClass:"list-group-item d-flex flex-column gap-2 justify-content-between"},[i("div",{staticClass:"text-muted small"},[s._v("Notes")]),s._v(" "),i("div",{staticClass:"w-100"},[i("b-form-textarea",{attrs:{rows:"3","max-rows":"5",maxlength:"500",placeholder:"Add optional notes here"},model:{value:s.addNewInstance.notes,callback:function(t){s.$set(s.addNewInstance,"notes",t)},expression:"addNewInstance.notes"}}),s._v(" "),i("p",{staticClass:"small text-muted"},[s._v(s._s(s.addNewInstance.notes?s.addNewInstance.notes.length:0)+"/500")])],1)])])])],1)},i=[function(){var t=this._self._c;return t("div",{staticClass:"row align-items-center py-4"},[t("div",{staticClass:"col-lg-6 col-7"},[t("p",{staticClass:"display-1 text-white d-inline-block mb-0"},[this._v("Instances")])])])}]},64721:(t,e,a)=>{a(19755);a(99751),window._=a(96486),window.Popper=a(28981).default,window.pixelfed=window.pixelfed||{},window.$=a(19755),a(43734),window.axios=a(9669),window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a(90717),window.filesize=a(42317),window.Cookies=a(36808),a(20154),a(80981),window.Chart=a(17757),a(11984),Chart.defaults.global.defaultFontFamily="-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif",Array.from(document.querySelectorAll(".pagination .page-link")).filter((function(t){return"« Previous"===t.textContent||"Next »"===t.textContent})).forEach((function(t){return t.textContent="Next »"===t.textContent?"›":"‹"})),Vue.component("admin-directory",a(78877).default),Vue.component("instances-component",a(10670).default),Vue.component("hashtag-component",a(90882).default)},11984:(t,e,a)=>{"use strict";var s=a(19755);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}!function(){function t(){s(".sidenav-toggler").addClass("active"),s(".sidenav-toggler").data("action","sidenav-unpin"),s("body").removeClass("g-sidenav-hidden").addClass("g-sidenav-show g-sidenav-pinned"),s("body").append('
1&&(o+=''+i+""),o+=''+a+n+s+""}}}(t,a),a.update()}return window.Chart&&r(Chart,(t={defaults:{global:{responsive:!0,maintainAspectRatio:!1,defaultColor:"dark"==a?o.gray[700]:o.gray[600],defaultFontColor:"dark"==a?o.gray[700]:o.gray[600],defaultFontFamily:n.base,defaultFontSize:13,layout:{padding:0},legend:{display:!1,position:"bottom",labels:{usePointStyle:!0,padding:16}},elements:{point:{radius:0,backgroundColor:o.theme.primary},line:{tension:.4,borderWidth:4,borderColor:o.theme.primary,backgroundColor:o.transparent,borderCapStyle:"rounded"},rectangle:{backgroundColor:o.theme.warning},arc:{backgroundColor:o.theme.primary,borderColor:"dark"==a?o.gray[800]:o.white,borderWidth:4}},tooltips:{enabled:!0,mode:"index",intersect:!1}},doughnut:{cutoutPercentage:83,legendCallback:function(t){var e=t.data,a="";return e.labels.forEach((function(t,s){var i=e.datasets[0].backgroundColor[s];a+='',a+='',a+=t,a+=""})),a}}}},Chart.scaleService.updateScaleDefaults("linear",{gridLines:{borderDash:[2],borderDashOffset:[2],color:"dark"==a?o.gray[900]:o.gray[300],drawBorder:!1,drawTicks:!1,drawOnChartArea:!0,zeroLineWidth:0,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{beginAtZero:!0,padding:10,callback:function(t){if(!(t%10))return t}}}),Chart.scaleService.updateScaleDefaults("category",{gridLines:{drawBorder:!1,drawOnChartArea:!1,drawTicks:!1},ticks:{padding:20},maxBarThickness:10}),t)),e.on({change:function(){var t=s(this);t.is("[data-add]")&&d(t)},click:function(){var t=s(this);t.is("[data-update]")&&u(t)}}),{colors:o,fonts:n,mode:a}}(),_=((r=s(o=".btn-icon-clipboard")).length&&((n=r).tooltip().on("mouseleave",(function(){n.tooltip("hide")})),new ClipboardJS(o).on("success",(function(t){s(t.trigger).attr("title","Copied!").tooltip("_fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("_fixTitle"),t.clearSelection()}))),l=s(".navbar-nav, .navbar-nav .nav"),c=s(".navbar .collapse"),d=s(".navbar .dropdown"),c.on({"show.bs.collapse":function(){!function(t){t.closest(l).find(c).not(t).collapse("hide")}(s(this))}}),d.on({"hide.bs.dropdown":function(){!function(t){var e=t.find(".dropdown-menu");e.addClass("close"),setTimeout((function(){e.removeClass("close")}),200)}(s(this))}}),function(){s(".navbar-nav");var t=s(".navbar .navbar-custom-collapse");t.length&&(t.on({"hide.bs.collapse":function(){!function(t){t.addClass("collapsing-out")}(t)}}),t.on({"hidden.bs.collapse":function(){!function(t){t.removeClass("collapsing-out")}(t)}}));var e=0;s(".sidenav-toggler").click((function(){if(1==e)s("body").removeClass("nav-open"),e=0,s(".bodyClick").remove();else{s('
').appendTo("body").click((function(){s("body").removeClass("nav-open"),e=0,s(".bodyClick").remove()})),s("body").addClass("nav-open"),e=1}}))}(),u=s('[data-toggle="popover"]'),m="",u.length&&u.each((function(){!function(t){t.data("color")&&(m="popover-"+t.data("color"));var e={trigger:"focus",template:''};t.popover(e)}(s(this))})),function(){var t=s(".scroll-me, [data-scroll-to], .toc-entry a");function e(t){var e=t.attr("href"),a=t.data("scroll-to-offset")?t.data("scroll-to-offset"):0,i={scrollTop:s(e).offset().top-a};s("html, body").stop(!0,!0).animate(i,600),event.preventDefault()}t.length&&t.on("click",(function(t){e(s(this))}))}(),(v=s('[data-toggle="tooltip"]')).length&&v.tooltip(),(f=s(".form-control")).length&&function(t){t.on("focus blur",(function(t){s(this).parents(".form-group").toggleClass("focused","focus"===t.type)})).trigger("blur")}(f),(p=s("#chart-bars")).length&&function(t){var e=new Chart(t,{type:"bar",data:{labels:["Jul","Aug","Sep","Oct","Nov","Dec"],datasets:[{label:"Sales",data:[25,20,30,22,17,29]}]}});t.data("chart",e)}(p),function(){var t=s("#c1-dark");t.length&&function(t){var e=new Chart(t,{type:"line",options:{scales:{yAxes:[{gridLines:{lineWidth:1,color:g.colors.gray[900],zeroLineColor:g.colors.gray[900]},ticks:{callback:function(t){if(!(t%10))return t}}}]},tooltips:{callbacks:{label:function(t,e){var a=e.datasets[t.datasetIndex].label||"",s=t.yLabel,i="";return e.datasets.length>1&&(i+=a),i+(s+" posts")}}}},data:{labels:["7","6","5","4","3","2","1"],datasets:[{label:"",data:s(".posts-this-week").data("update").data.datasets[0].data}]}});t.data("chart",e)}(t)}(),(h=s(".datepicker")).length&&h.each((function(){!function(t){t.datepicker({disableTouchKeyboard:!0,autoclose:!1})}(s(this))})),function(){if(s(".input-slider-container")[0]&&s(".input-slider-container").each((function(){var t=s(this).find(".input-slider"),e=t.attr("id"),a=t.data("range-value-min"),i=t.data("range-value-max"),n=s(this).find(".range-slider-value"),o=n.attr("id"),r=n.data("range-value-low"),l=document.getElementById(e),c=document.getElementById(o);_.create(l,{start:[parseInt(r)],connect:[!0,!1],range:{min:[parseInt(a)],max:[parseInt(i)]}}),l.noUiSlider.on("update",(function(t,e){c.textContent=t[e]}))})),s("#input-slider-range")[0]){var t=document.getElementById("input-slider-range"),e=document.getElementById("input-slider-range-value-low"),a=document.getElementById("input-slider-range-value-high"),i=[e,a];_.create(t,{start:[parseInt(e.getAttribute("data-range-value-low")),parseInt(a.getAttribute("data-range-value-high"))],connect:!0,range:{min:parseInt(t.getAttribute("data-range-value-min")),max:parseInt(t.getAttribute("data-range-value-max"))}}),t.noUiSlider.on("update",(function(t,e){i[e].textContent=t[e]}))}}());(b=s(".scrollbar-inner")).length&&b.scrollbar().scrollLock()},99751:function(){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}!function(){var e="object"===("undefined"==typeof window?"undefined":t(window))?window:"object"===("undefined"==typeof self?"undefined":t(self))?self:this,a=e.BlobBuilder||e.WebKitBlobBuilder||e.MSBlobBuilder||e.MozBlobBuilder;e.URL=e.URL||e.webkitURL||function(t,e){return(e=document.createElement("a")).href=t,e};var s=e.Blob,i=URL.createObjectURL,n=URL.revokeObjectURL,o=e.Symbol&&e.Symbol.toStringTag,r=!1,c=!1,d=!!e.ArrayBuffer,u=a&&a.prototype.append&&a.prototype.getBlob;try{r=2===new Blob(["ä"]).size,c=2===new Blob([new Uint8Array([1,2])]).size}catch(t){}function m(t){return t.map((function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var a=new Uint8Array(t.byteLength);a.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=a.buffer}return e}return t}))}function v(t,e){e=e||{};var s=new a;return m(t).forEach((function(t){s.append(t)})),e.type?s.getBlob(e.type):s.getBlob()}function f(t,e){return new s(m(t),e||{})}e.Blob&&(v.prototype=Blob.prototype,f.prototype=Blob.prototype);var p="function"==typeof TextEncoder?TextEncoder.prototype.encode.bind(new TextEncoder):function(t){for(var a=0,s=t.length,i=e.Uint8Array||Array,n=0,o=Math.max(32,s+(s>>1)+7),r=new i(o>>3<<3);a=55296&&l<=56319){if(a=55296&&l<=56319)continue}if(n+4>r.length){o+=8,o=(o*=1+a/t.length*2)>>3<<3;var d=new Uint8Array(o);d.set(r),r=d}if(0!=(4294967168&l)){if(0==(4294965248&l))r[n++]=l>>6&31|192;else if(0==(4294901760&l))r[n++]=l>>12&15|224,r[n++]=l>>6&63|128;else{if(0!=(4292870144&l))continue;r[n++]=l>>18&7|240,r[n++]=l>>12&63|128,r[n++]=l>>6&63|128}r[n++]=63&l|128}else r[n++]=l}return r.slice(0,n)},h="function"==typeof TextDecoder?TextDecoder.prototype.decode.bind(new TextDecoder):function(t){for(var e=t.length,a=[],s=0;s239?4:l>223?3:l>191?2:1;if(s+d<=e)switch(d){case 1:l<128&&(c=l);break;case 2:128==(192&(i=t[s+1]))&&(r=(31&l)<<6|63&i)>127&&(c=r);break;case 3:i=t[s+1],n=t[s+2],128==(192&i)&&128==(192&n)&&(r=(15&l)<<12|(63&i)<<6|63&n)>2047&&(r<55296||r>57343)&&(c=r);break;case 4:i=t[s+1],n=t[s+2],o=t[s+3],128==(192&i)&&128==(192&n)&&128==(192&o)&&(r=(15&l)<<18|(63&i)<<12|(63&n)<<6|63&o)>65535&&r<1114112&&(c=r)}null===c?(c=65533,d=1):c>65535&&(c-=65536,a.push(c>>>10&1023|55296),c=56320|1023&c),a.push(c),s+=d}var u=a.length,m="";for(s=0;s>2,d=(3&i)<<4|o>>4,u=(15&o)<<2|l>>6,m=63&l;r||(m=64,n||(u=64)),a.push(e[c],e[d],e[u],e[m])}return a.join("")}var s=Object.create||function(t){function e(){}return e.prototype=t,new e};if(d)var o=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],r=ArrayBuffer.isView||function(t){return t&&o.indexOf(Object.prototype.toString.call(t))>-1};function c(a,s){s=null==s?{}:s;for(var i=0,n=(a=a||[]).length;i=e.size&&a.close()}))}})}}catch(t){try{new ReadableStream({}),g=function(t){var e=0;t=this;return new ReadableStream({pull:function(a){return t.slice(e,e+524288).arrayBuffer().then((function(s){e+=s.byteLength;var i=new Uint8Array(s);a.enqueue(i),e==t.size&&a.close()}))}})}}catch(t){try{new Response("").body.getReader().read(),g=function(){return new Response(this).body}}catch(t){g=function(){throw new Error("Include https://github.com/MattiasBuelens/web-streams-polyfill")}}}}_.arrayBuffer||(_.arrayBuffer=function(){var t=new FileReader;return t.readAsArrayBuffer(this),y(t)}),_.text||(_.text=function(){var t=new FileReader;return t.readAsText(this),y(t)}),_.stream||(_.stream=g)}(),function(t){"use strict";var e,a=t.Uint8Array,s=t.HTMLCanvasElement,i=s&&s.prototype,n=/\s*;\s*base64\s*(?:;|$)/i,o="toDataURL",r=function(t){for(var s,i,n=t.length,o=new a(n/4*3|0),r=0,l=0,c=[0,0],d=0,u=0;n--;)i=t.charCodeAt(r++),255!==(s=e[i-43])&&undefined!==s&&(c[1]=c[0],c[0]=i,u=u<<6|s,4===++d&&(o[l++]=u>>>16,61!==c[1]&&(o[l++]=u>>>8),61!==c[0]&&(o[l++]=u),d=0));return o};a&&(e=new a([62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,0,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51])),!s||i.toBlob&&i.toBlobHD||(i.toBlob||(i.toBlob=function(t,e){if(e||(e="image/png"),this.mozGetAsFile)t(this.mozGetAsFile("canvas",e));else if(this.msToBlob&&/^\s*image\/png\s*(?:$|;)/i.test(e))t(this.msToBlob());else{var s,i=Array.prototype.slice.call(arguments,1),l=this[o].apply(this,i),c=l.indexOf(","),d=l.substring(c+1),u=n.test(l.substring(0,c));Blob.fake?((s=new Blob).encoding=u?"base64":"URI",s.data=d,s.size=d.length):a&&(s=u?new Blob([r(d)],{type:e}):new Blob([decodeURIComponent(d)],{type:e})),t(s)}}),!i.toBlobHD&&i.toDataURLHD?i.toBlobHD=function(){o="toDataURLHD";var t=this.toBlob();return o="toDataURL",t}:i.toBlobHD=i.toBlob)}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content||this)},63411:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>n});var s=a(1519),i=a.n(s)()((function(t){return t[1]}));i.push([t.id,".gap-2[data-v-87590746]{gap:1rem}",""]);const n=i},46700:(t,e,a)=>{var s={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(t){var e=n(t);return a(e)}function n(t){if(!a.o(s,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return s[t]}i.keys=function(){return Object.keys(s)},i.resolve=n,t.exports=i,i.id=46700},78841:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>r});var s=a(93379),i=a.n(s),n=a(63411),o={insert:"head",singleton:!1};i()(n.default,o);const r=n.default.locals||{}},78877:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>o});var s=a(12869),i=a(89959),n={};for(const t in i)"default"!==t&&(n[t]=()=>i[t]);a.d(e,n);const o=(0,a(51900).default)(i.default,s.render,s.staticRenderFns,!1,null,null,null).exports},90882:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>o});var s=a(84961),i=a(82691),n={};for(const t in i)"default"!==t&&(n[t]=()=>i[t]);a.d(e,n);const o=(0,a(51900).default)(i.default,s.render,s.staticRenderFns,!1,null,null,null).exports},10670:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>o});var s=a(53625),i=a(26598),n={};for(const t in i)"default"!==t&&(n[t]=()=>i[t]);a.d(e,n);a(73165);const o=(0,a(51900).default)(i.default,s.render,s.staticRenderFns,!1,null,"87590746",null).exports},89959:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>n});var s=a(42751),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i);const n=s.default},82691:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>n});var s=a(46994),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i);const n=s.default},26598:(t,e,a)=>{"use strict";a.r(e),a.d(e,{default:()=>n});var s=a(31187),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i);const n=s.default},12869:(t,e,a)=>{"use strict";a.r(e);var s=a(42014),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i)},84961:(t,e,a)=>{"use strict";a.r(e);var s=a(71636),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i)},53625:(t,e,a)=>{"use strict";a.r(e);var s=a(1490),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i)},73165:(t,e,a)=>{"use strict";a.r(e);var s=a(78841),i={};for(const t in s)"default"!==t&&(i[t]=()=>s[t]);a.d(e,i)}},t=>{t.O(0,[8898],(()=>{return e=64721,t(t.s=e);var e}));t.O()}]); \ No newline at end of file diff --git a/public/mix-manifest.json b/public/mix-manifest.json index ff5a5e187..bc1ce547d 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -16,7 +16,7 @@ "/js/profile-directory.js": "/js/profile-directory.js?id=24a2b981bffa2038f41284eed81eec71", "/js/story-compose.js": "/js/story-compose.js?id=cbb169145db25c0e92845710233771ac", "/js/direct.js": "/js/direct.js?id=5816111700ad8f8a89c932485f3a1e47", - "/js/admin.js": "/js/admin.js?id=d7c4f0d03e057087bb3e49567b65ec74", + "/js/admin.js": "/js/admin.js?id=3abc28357565ed6c694ba2cc25820044", "/js/live-player.js": "/js/live-player.js?id=c987b3cd69e432f1b3d52da2901ed305", "/js/spa.js": "/js/spa.js?id=d4900cb1ac07c0f5677b1584cda72666", "/js/stories.js": "/js/stories.js?id=4db94699502e85543192865879bece7d", diff --git a/resources/assets/components/admin/AdminInstances.vue b/resources/assets/components/admin/AdminInstances.vue new file mode 100644 index 000000000..67bfe9fe6 --- /dev/null +++ b/resources/assets/components/admin/AdminInstances.vue @@ -0,0 +1,628 @@ + + + + + diff --git a/resources/assets/js/admin.js b/resources/assets/js/admin.js index 3e6787403..e38f3e98c 100644 --- a/resources/assets/js/admin.js +++ b/resources/assets/js/admin.js @@ -26,6 +26,11 @@ Vue.component( require('./../components/admin/AdminDirectory.vue').default ); +Vue.component( + 'instances-component', + require('./../components/admin/AdminInstances.vue').default +); + Vue.component( 'hashtag-component', require('./../components/admin/AdminHashtags.vue').default diff --git a/resources/views/admin/instances/home.blade.php b/resources/views/admin/instances/home.blade.php index c8b123da3..373f28fc9 100644 --- a/resources/views/admin/instances/home.blade.php +++ b/resources/views/admin/instances/home.blade.php @@ -1,219 +1,12 @@ @extends('admin.partial.template-full') @section('section') -
-

Instances

-
- All - {{-- Popular --}} - New - CW - Banned - Unlisted -
-
-
-
- -
-
- -
- -
-
- @if($instances->count() == 0 && !request()->has('filter') && !request()->has('q')) -
-

Warning

-

No instances were found.

-
-

Do you want to scan and populate instances from Profiles and Statuses?

-

-

- @csrf - -
-

- @else -
    - @foreach($instances as $instance) -
  • -
    -
    -

    - {{$instance->domain}} -

    -

    - @if($instance->unlisted) - - @endif - @if($instance->auto_cw) - - @endif - @if($instance->banned) - - @endif - Overview - -

    -
    -
    -
  • - @endforeach -
-
- {{$instances->links()}} -
- @endif - - @if(request()->filled('q') && $instances->count() == 0) -

No results found

-

Go back

- @endif - @if(request()->filled('filter') && $instances->count() == 0) -

No results found

-

Go back

- @endif -
+ @endsection @push('scripts') - @endpush diff --git a/resources/views/atom/user.blade.php b/resources/views/atom/user.blade.php index b6f7cb4e8..0b7595ddf 100644 --- a/resources/views/atom/user.blade.php +++ b/resources/views/atom/user.blade.php @@ -24,12 +24,14 @@ iteration}}" src="{{ $item['media_attachments'][0]['url'] }}" alt="{{ $item['media_attachments'][0]['description'] }}"> -

{{ $item['content'] }}

+ {{ $item['media_attachments'][0]['description'] }} +

{!! $item['content'] !!}

]]>
+ @if($item['content'] && strlen($item['content'])) {{ $item['content'] }} + @endif @endforeach diff --git a/resources/views/site/help/licenses.blade.php b/resources/views/site/help/licenses.blade.php new file mode 100644 index 000000000..4ae4cf310 --- /dev/null +++ b/resources/views/site/help/licenses.blade.php @@ -0,0 +1,17 @@ +@extends('site.help.partial.template', ['breadcrumb'=>'Licenses']) + +@section('section') +
+

Licenses

+
+
+ +

+ A Creative Commons license is one of several public copyright licenses that enable the free distribution of an otherwise copyrighted "work". +

+

+ A CC license is used when an author wants to give other people the right to share, use, and build upon a work that the author has created. +

+ +

For more information, please visit creativecommons.org

+@endsection diff --git a/routes/web.php b/routes/web.php index 8d028b745..f83a75788 100644 --- a/routes/web.php +++ b/routes/web.php @@ -113,6 +113,13 @@ Route::domain(config('pixelfed.domain.admin'))->prefix('i/admin')->group(functio Route::get('hashtags/get', 'AdminController@hashtagsGet'); Route::post('hashtags/update', 'AdminController@hashtagsUpdate'); Route::post('hashtags/clear-trending-cache', 'AdminController@hashtagsClearTrendingCache'); + Route::get('instances/get', 'AdminController@getInstancesApi'); + Route::get('instances/stats', 'AdminController@getInstancesStatsApi'); + Route::get('instances/query', 'AdminController@getInstancesQueryApi'); + Route::post('instances/update', 'AdminController@postInstanceUpdateApi'); + Route::post('instances/create', 'AdminController@postInstanceCreateNewApi'); + Route::post('instances/delete', 'AdminController@postInstanceDeleteApi'); + Route::post('instances/refresh-stats', 'AdminController@postInstanceRefreshStatsApi'); }); }); @@ -211,9 +218,6 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('accounts/{id}', 'PublicApiController@account'); Route::post('avatar/update', 'ApiController@avatarUpdate'); Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis'); - Route::get('likes', 'ApiController@hydrateLikes'); - Route::post('media', 'ApiController@uploadMedia'); - Route::delete('media', 'ApiController@deleteMedia'); Route::get('notifications', 'ApiController@notifications'); Route::get('timelines/public', 'PublicApiController@publicTimelineApi'); Route::get('timelines/home', 'PublicApiController@homeTimelineApi'); @@ -277,7 +281,6 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::post('collection/{id}/publish', 'CollectionController@publish'); Route::get('profile/collections/{id}', 'CollectionController@getUserCollections'); - Route::get('compose/location/search', 'ApiController@composeLocationSearch'); Route::post('compose/tag/untagme', 'MediaTagController@untagProfile'); }); @@ -340,8 +343,6 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('auth/checkpoint', 'AccountController@twoFactorCheckpoint'); Route::post('auth/checkpoint', 'AccountController@twoFactorVerify'); - Route::get('media/preview/{profileId}/{mediaId}/{timestamp}', 'ApiController@showTempMedia')->name('temp-media'); - Route::get('results', 'SearchController@results'); Route::post('visibility', 'StatusController@toggleVisibility'); @@ -421,8 +422,8 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::delete('avatar', 'AvatarController@deleteAvatar'); Route::get('password', 'SettingsController@password')->name('settings.password')->middleware('dangerzone'); Route::post('password', 'SettingsController@passwordUpdate')->middleware('dangerzone'); - Route::get('email', 'SettingsController@email')->name('settings.email'); - Route::post('email', 'SettingsController@emailUpdate'); + Route::get('email', 'SettingsController@email')->name('settings.email')->middleware('dangerzone'); + Route::post('email', 'SettingsController@emailUpdate')->middleware('dangerzone'); Route::get('notifications', 'SettingsController@notifications')->name('settings.notifications'); Route::get('privacy', 'SettingsController@privacy')->name('settings.privacy'); Route::post('privacy', 'SettingsController@privacyStore'); @@ -549,6 +550,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::view('data-policy', 'site.help.data-policy')->name('help.data-policy'); Route::view('labs-deprecation', 'site.help.labs-deprecation')->name('help.labs-deprecation'); Route::view('tagging-people', 'site.help.tagging-people')->name('help.tagging-people'); + Route::view('licenses', 'site.help.licenses')->name('help.licenses'); }); Route::get('newsroom/{year}/{month}/{slug}', 'NewsroomController@show'); Route::get('newsroom/archive', 'NewsroomController@archive');