Showing preview only (5,434K chars total). Download the full file or copy to clipboard to get everything.
Repository: Lukabrazi111/voting-app
Branch: master
Commit: 5f67485e2d8e
Files: 236
Total size: 5.1 MB
Directory structure:
gitextract_o66uexm6/
├── .editorconfig
├── .gitattributes
├── .gitignore
├── .styleci.yml
├── README.md
├── app/
│ ├── Console/
│ │ └── Kernel.php
│ ├── Exceptions/
│ │ ├── DuplicateVoteException.php
│ │ ├── Handler.php
│ │ └── VoteNotFoundException.php
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Auth/
│ │ │ │ ├── AuthenticatedSessionController.php
│ │ │ │ ├── ConfirmablePasswordController.php
│ │ │ │ ├── EmailVerificationNotificationController.php
│ │ │ │ ├── EmailVerificationPromptController.php
│ │ │ │ ├── NewPasswordController.php
│ │ │ │ ├── PasswordResetLinkController.php
│ │ │ │ ├── RegisteredUserController.php
│ │ │ │ └── VerifyEmailController.php
│ │ │ ├── CategoryController.php
│ │ │ ├── CommentController.php
│ │ │ ├── Controller.php
│ │ │ ├── IdeaController.php
│ │ │ ├── StatusController.php
│ │ │ └── VoteController.php
│ │ ├── Kernel.php
│ │ ├── Livewire/
│ │ │ ├── AddComment.php
│ │ │ ├── CommentNotifications.php
│ │ │ ├── CreateIdea.php
│ │ │ ├── DeleteComment.php
│ │ │ ├── DeleteIdea.php
│ │ │ ├── EditComment.php
│ │ │ ├── EditIdea.php
│ │ │ ├── IdeaComment.php
│ │ │ ├── IdeaComments.php
│ │ │ ├── IdeaIndex.php
│ │ │ ├── IdeaShow.php
│ │ │ ├── IdeasIndex.php
│ │ │ ├── MarkCommentAsNotSpam.php
│ │ │ ├── MarkCommentAsSpam.php
│ │ │ ├── MarkIdeaAsNotSpam.php
│ │ │ ├── MarkIdeaAsSpam.php
│ │ │ ├── SetStatus.php
│ │ │ └── StatusFilters.php
│ │ ├── Middleware/
│ │ │ ├── Authenticate.php
│ │ │ ├── EncryptCookies.php
│ │ │ ├── PreventRequestsDuringMaintenance.php
│ │ │ ├── RedirectIfAuthenticated.php
│ │ │ ├── TrimStrings.php
│ │ │ ├── TrustHosts.php
│ │ │ ├── TrustProxies.php
│ │ │ └── VerifyCsrfToken.php
│ │ └── Requests/
│ │ ├── Auth/
│ │ │ └── LoginRequest.php
│ │ ├── StoreCategoryRequest.php
│ │ ├── StoreCommentRequest.php
│ │ ├── StoreIdeaRequest.php
│ │ ├── StoreStatusRequest.php
│ │ ├── StoreVoteRequest.php
│ │ ├── UpdateCategoryRequest.php
│ │ ├── UpdateCommentRequest.php
│ │ ├── UpdateIdeaRequest.php
│ │ ├── UpdateStatusRequest.php
│ │ └── UpdateVoteRequest.php
│ ├── Jobs/
│ │ └── NotifyAllVoters.php
│ ├── Mail/
│ │ └── IdeaStatusUpdatedMailable.php
│ ├── Models/
│ │ ├── Category.php
│ │ ├── Comment.php
│ │ ├── Idea.php
│ │ ├── Status.php
│ │ ├── User.php
│ │ └── Vote.php
│ ├── Notifications/
│ │ └── CommentAdded.php
│ ├── Policies/
│ │ ├── CategoryPolicy.php
│ │ ├── CommentPolicy.php
│ │ ├── IdeaPolicy.php
│ │ ├── StatusPolicy.php
│ │ └── VotePolicy.php
│ ├── Providers/
│ │ ├── AppServiceProvider.php
│ │ ├── AuthServiceProvider.php
│ │ ├── BroadcastServiceProvider.php
│ │ ├── EventServiceProvider.php
│ │ ├── HorizonServiceProvider.php
│ │ └── RouteServiceProvider.php
│ └── View/
│ └── Components/
│ ├── AppLayout.php
│ └── GuestLayout.php
├── artisan
├── bootstrap/
│ ├── app.php
│ └── cache/
│ └── .gitignore
├── composer.json
├── config/
│ ├── app.php
│ ├── auth.php
│ ├── broadcasting.php
│ ├── cache.php
│ ├── cors.php
│ ├── database.php
│ ├── filesystems.php
│ ├── hashing.php
│ ├── horizon.php
│ ├── logging.php
│ ├── mail.php
│ ├── queue.php
│ ├── sanctum.php
│ ├── services.php
│ ├── session.php
│ └── view.php
├── database/
│ ├── .gitignore
│ ├── factories/
│ │ ├── CategoryFactory.php
│ │ ├── CommentFactory.php
│ │ ├── IdeaFactory.php
│ │ ├── StatusFactory.php
│ │ ├── UserFactory.php
│ │ └── VoteFactory.php
│ ├── migrations/
│ │ ├── 2014_10_12_000000_create_users_table.php
│ │ ├── 2014_10_12_100000_create_password_resets_table.php
│ │ ├── 2019_08_19_000000_create_failed_jobs_table.php
│ │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│ │ ├── 2021_11_19_154310_create_statuses_table.php
│ │ ├── 2021_11_20_154310_create_categories_table.php
│ │ ├── 2021_11_21_154310_create_ideas_table.php
│ │ ├── 2021_11_24_195521_create_votes_table.php
│ │ ├── 2021_12_19_130759_create_comments_table.php
│ │ └── 2021_12_28_133951_create_notifications_table.php
│ └── seeders/
│ ├── CategorySeeder.php
│ ├── CommentSeeder.php
│ ├── DatabaseSeeder.php
│ ├── IdeaSeeder.php
│ ├── StatusSeeder.php
│ └── VoteSeeder.php
├── package.json
├── phpunit.xml
├── public/
│ ├── .htaccess
│ ├── css/
│ │ └── app.css
│ ├── index.php
│ ├── js/
│ │ └── app.js
│ ├── mix-manifest.json
│ ├── robots.txt
│ ├── vendor/
│ │ └── horizon/
│ │ ├── app-dark.css
│ │ ├── app.css
│ │ ├── app.js
│ │ └── mix-manifest.json
│ └── web.config
├── resources/
│ ├── css/
│ │ └── app.css
│ ├── js/
│ │ ├── app.js
│ │ └── bootstrap.js
│ ├── lang/
│ │ └── en/
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
│ └── views/
│ ├── auth/
│ │ ├── confirm-password.blade.php
│ │ ├── forgot-password.blade.php
│ │ ├── login.blade.php
│ │ ├── register.blade.php
│ │ ├── reset-password.blade.php
│ │ └── verify-email.blade.php
│ ├── components/
│ │ ├── application-logo.blade.php
│ │ ├── auth-card.blade.php
│ │ ├── auth-session-status.blade.php
│ │ ├── auth-validation-errors.blade.php
│ │ ├── button.blade.php
│ │ ├── dropdown-link.blade.php
│ │ ├── dropdown.blade.php
│ │ ├── input.blade.php
│ │ ├── label.blade.php
│ │ ├── nav-link.blade.php
│ │ ├── notification-success.blade.php
│ │ └── responsive-nav-link.blade.php
│ ├── dashboard.blade.php
│ ├── emails/
│ │ ├── comment-added.blade.php
│ │ ├── idea-status/
│ │ │ └── updated.blade.php
│ │ └── idea-status-updated.blade.php
│ ├── idea/
│ │ ├── index.blade.php
│ │ └── show.blade.php
│ ├── layouts/
│ │ ├── app.blade.php
│ │ ├── guest.blade.php
│ │ └── navigation.blade.php
│ ├── livewire/
│ │ ├── add-comment.blade.php
│ │ ├── comment-notifications.blade.php
│ │ ├── create-idea.blade.php
│ │ ├── delete-comment.blade.php
│ │ ├── delete-idea.blade.php
│ │ ├── edit-comment.blade.php
│ │ ├── edit-idea.blade.php
│ │ ├── idea-comment.blade.php
│ │ ├── idea-comments.blade.php
│ │ ├── idea-index.blade.php
│ │ ├── idea-show.blade.php
│ │ ├── ideas-index.blade.php
│ │ ├── mark-comment-as-not-spam.blade.php
│ │ ├── mark-comment-as-spam.blade.php
│ │ ├── mark-idea-as-not-spam.blade.php
│ │ ├── mark-idea-as-spam.blade.php
│ │ ├── set-status.blade.php
│ │ └── status-filters.blade.php
│ └── welcome.blade.php
├── routes/
│ ├── api.php
│ ├── auth.php
│ ├── channels.php
│ ├── console.php
│ └── web.php
├── server.php
├── storage/
│ ├── app/
│ │ └── .gitignore
│ ├── debugbar/
│ │ └── .gitignore
│ ├── framework/
│ │ ├── .gitignore
│ │ ├── cache/
│ │ │ └── .gitignore
│ │ ├── sessions/
│ │ │ └── .gitignore
│ │ ├── testing/
│ │ │ └── .gitignore
│ │ └── views/
│ │ └── .gitignore
│ └── logs/
│ └── .gitignore
├── tailwind.config.js
├── tests/
│ ├── CreatesApplication.php
│ ├── Feature/
│ │ ├── Auth/
│ │ │ ├── AuthenticationTest.php
│ │ │ ├── EmailVerificationTest.php
│ │ │ ├── PasswordConfirmationTest.php
│ │ │ ├── PasswordResetTest.php
│ │ │ └── RegistrationTest.php
│ │ ├── CategoryFiltersTest.php
│ │ ├── Comments/
│ │ │ ├── AddCommentTest.php
│ │ │ ├── DeleteCommentTest.php
│ │ │ ├── EditCommentTest.php
│ │ │ └── ShowCommentsTest.php
│ │ ├── CreateIdeaTest.php
│ │ ├── DeleteIdeaTest.php
│ │ ├── EditIdeaTest.php
│ │ ├── OtherFiltersTest.php
│ │ ├── SearchFilterTest.php
│ │ ├── ShowIdeasTest.php
│ │ ├── SpamManagementTest.php
│ │ ├── StatusFiltersTest.php
│ │ ├── VoteIndexPageTest.php
│ │ └── VoteShowPageTest.php
│ ├── TestCase.php
│ ├── Tests/
│ │ └── Feature/
│ │ └── AdminSetStatusTest.php
│ └── Unit/
│ ├── GravatarTest.php
│ ├── IdeaTest.php
│ ├── Jobs/
│ │ └── NotifyAllVotersTest.php
│ ├── StatusTest.php
│ └── UserTest.php
└── webpack.mix.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_size = 2
[docker-compose.yml]
indent_size = 4
================================================
FILE: .gitattributes
================================================
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore
================================================
FILE: .gitignore
================================================
/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
.env
.env.backup
.phpunit.result.cache
docker-compose.override.yml
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
/.idea
/.vscode
================================================
FILE: .styleci.yml
================================================
php:
preset: laravel
version: 8
disabled:
- no_unused_imports
finder:
not-name:
- index.php
- server.php
js:
finder:
not-name:
- webpack.mix.js
css: true
================================================
FILE: README.md
================================================
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400"></a></p>
<p align="center">
<a href="https://travis-ci.org/laravel/framework"><img src="https://travis-ci.org/laravel/framework.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
</p>
## About Laravel
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
- [Simple, fast routing engine](https://laravel.com/docs/routing).
- [Powerful dependency injection container](https://laravel.com/docs/container).
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
- [Robust background job processing](https://laravel.com/docs/queues).
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
Laravel is accessible, powerful, and provides tools required for large, robust applications.
## Learning Laravel
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 1500 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
## Laravel Sponsors
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell).
### Premium Partners
- **[Vehikl](https://vehikl.com/)**
- **[Tighten Co.](https://tighten.co)**
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
- **[64 Robots](https://64robots.com)**
- **[Cubet Techno Labs](https://cubettech.com)**
- **[Cyber-Duck](https://cyber-duck.co.uk)**
- **[Many](https://www.many.co.uk)**
- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)**
- **[DevSquad](https://devsquad.com)**
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
- **[OP.GG](https://op.gg)**
- **[CMS Max](https://www.cmsmax.com/)**
- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)**
- **[Lendio](https://lendio.com)**
- **[Romega Software](https://romegasoftware.com)**
## Contributing
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
## Code of Conduct
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
## Security Vulnerabilities
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
## License
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
================================================
FILE: app/Console/Kernel.php
================================================
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
//
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
================================================
FILE: app/Exceptions/DuplicateVoteException.php
================================================
<?php
namespace App\Exceptions;
use Exception;
class DuplicateVoteException extends Exception
{
//
}
================================================
FILE: app/Exceptions/Handler.php
================================================
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var string[]
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var string[]
*/
protected $dontFlash = [
'current_password',
'password',
'password_confirmation',
];
/**
* Register the exception handling callbacks for the application.
*
* @return void
*/
public function register()
{
$this->reportable(function (Throwable $e) {
//
});
}
}
================================================
FILE: app/Exceptions/VoteNotFoundException.php
================================================
<?php
namespace App\Exceptions;
use Exception;
class VoteNotFoundException extends Exception
{
//
}
================================================
FILE: app/Http/Controllers/Auth/AuthenticatedSessionController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthenticatedSessionController extends Controller
{
/**
* Display the login view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.login');
}
/**
* Handle an incoming authentication request.
*
* @param \App\Http\Requests\Auth\LoginRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(LoginRequest $request)
{
$request->authenticate();
$request->session()->regenerate();
return redirect()->intended(RouteServiceProvider::HOME);
}
/**
* Destroy an authenticated session.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Request $request)
{
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}
================================================
FILE: app/Http/Controllers/Auth/ConfirmablePasswordController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
class ConfirmablePasswordController extends Controller
{
/**
* Show the confirm password view.
*
* @return \Illuminate\View\View
*/
public function show()
{
return view('auth.confirm-password');
}
/**
* Confirm the user's password.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function store(Request $request)
{
if (! Auth::guard('web')->validate([
'email' => $request->user()->email,
'password' => $request->password,
])) {
throw ValidationException::withMessages([
'password' => __('auth.password'),
]);
}
$request->session()->put('auth.password_confirmed_at', time());
return redirect()->intended(RouteServiceProvider::HOME);
}
}
================================================
FILE: app/Http/Controllers/Auth/EmailVerificationNotificationController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
class EmailVerificationNotificationController extends Controller
{
/**
* Send a new email verification notification.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
{
if ($request->user()->hasVerifiedEmail()) {
return redirect()->intended(RouteServiceProvider::HOME);
}
$request->user()->sendEmailVerificationNotification();
return back()->with('status', 'verification-link-sent');
}
}
================================================
FILE: app/Http/Controllers/Auth/EmailVerificationPromptController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
class EmailVerificationPromptController extends Controller
{
/**
* Display the email verification prompt.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function __invoke(Request $request)
{
return $request->user()->hasVerifiedEmail()
? redirect()->intended(RouteServiceProvider::HOME)
: view('auth.verify-email');
}
}
================================================
FILE: app/Http/Controllers/Auth/NewPasswordController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules;
class NewPasswordController extends Controller
{
/**
* Display the password reset view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\View
*/
public function create(Request $request)
{
return view('auth.reset-password', ['request' => $request]);
}
/**
* Handle an incoming new password request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'token' => ['required'],
'email' => ['required', 'email'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
// Here we will attempt to reset the user's password. If it is successful we
// will update the password on an actual user model and persist it to the
// database. Otherwise we will parse the error and return the response.
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user) use ($request) {
$user->forceFill([
'password' => Hash::make($request->password),
'remember_token' => Str::random(60),
])->save();
event(new PasswordReset($user));
}
);
// If the password was successfully reset, we will redirect the user back to
// the application's home authenticated view. If there is an error we can
// redirect them back to where they came from with their error message.
return $status == Password::PASSWORD_RESET
? redirect()->route('login')->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
}
================================================
FILE: app/Http/Controllers/Auth/PasswordResetLinkController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
class PasswordResetLinkController extends Controller
{
/**
* Display the password reset link request view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.forgot-password');
}
/**
* Handle an incoming password reset link request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'email' => ['required', 'email'],
]);
// We will send the password reset link to this user. Once we have attempted
// to send the link, we will examine the response then see the message we
// need to show to the user. Finally, we'll send out a proper response.
$status = Password::sendResetLink(
$request->only('email')
);
return $status == Password::RESET_LINK_SENT
? back()->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
}
================================================
FILE: app/Http/Controllers/Auth/RegisteredUserController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules;
class RegisteredUserController extends Controller
{
/**
* Display the registration view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.register');
}
/**
* Handle an incoming registration request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
event(new Registered($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
}
================================================
FILE: app/Http/Controllers/Auth/VerifyEmailController.php
================================================
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Verified;
use Illuminate\Foundation\Auth\EmailVerificationRequest;
class VerifyEmailController extends Controller
{
/**
* Mark the authenticated user's email address as verified.
*
* @param \Illuminate\Foundation\Auth\EmailVerificationRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function __invoke(EmailVerificationRequest $request)
{
if ($request->user()->hasVerifiedEmail()) {
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
}
if ($request->user()->markEmailAsVerified()) {
event(new Verified($request->user()));
}
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
}
}
================================================
FILE: app/Http/Controllers/CategoryController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreCategoryRequest;
use App\Http\Requests\UpdateCategoryRequest;
use App\Models\Category;
class CategoryController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\StoreCategoryRequest $request
* @return \Illuminate\Http\Response
*/
public function store(StoreCategoryRequest $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Category $category
* @return \Illuminate\Http\Response
*/
public function show(Category $category)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Category $category
* @return \Illuminate\Http\Response
*/
public function edit(Category $category)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\UpdateCategoryRequest $request
* @param \App\Models\Category $category
* @return \Illuminate\Http\Response
*/
public function update(UpdateCategoryRequest $request, Category $category)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Category $category
* @return \Illuminate\Http\Response
*/
public function destroy(Category $category)
{
//
}
}
================================================
FILE: app/Http/Controllers/CommentController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreCommentRequest;
use App\Http\Requests\UpdateCommentRequest;
use App\Models\Comment;
class CommentController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\StoreCommentRequest $request
* @return \Illuminate\Http\Response
*/
public function store(StoreCommentRequest $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Comment $comment
* @return \Illuminate\Http\Response
*/
public function show(Comment $comment)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Comment $comment
* @return \Illuminate\Http\Response
*/
public function edit(Comment $comment)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\UpdateCommentRequest $request
* @param \App\Models\Comment $comment
* @return \Illuminate\Http\Response
*/
public function update(UpdateCommentRequest $request, Comment $comment)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Comment $comment
* @return \Illuminate\Http\Response
*/
public function destroy(Comment $comment)
{
//
}
}
================================================
FILE: app/Http/Controllers/Controller.php
================================================
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
================================================
FILE: app/Http/Controllers/IdeaController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreIdeaRequest;
use App\Http\Requests\UpdateIdeaRequest;
use App\Models\Idea;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Response;
class IdeaController extends Controller
{
/**
* Display a listing of the resource.
*
*/
public function index()
{
return view('idea.index');
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param StoreIdeaRequest $request
* @return Response
*/
public function store(StoreIdeaRequest $request)
{
//
}
/**
* Display the specified resource.
*
* @param Idea $idea
* @return Application|Factory|View|Response
*/
public function show(Idea $idea)
{
return view('idea.show', [
'idea' => $idea,
'votesCount' => $idea->votes()->count(),
'backUrl' => url()->previous() !== url()->full()
? url()->previous()
: route('idea.index'),
]);
}
/**
* Show the form for editing the specified resource.
*
* @param Idea $idea
* @return Response
*/
public function edit(Idea $idea)
{
//
}
/**
* Update the specified resource in storage.
*
* @param UpdateIdeaRequest $request
* @param Idea $idea
* @return Response
*/
public function update(UpdateIdeaRequest $request, Idea $idea)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param Idea $idea
* @return Response
*/
public function destroy(Idea $idea)
{
//
}
}
================================================
FILE: app/Http/Controllers/StatusController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreStatusRequest;
use App\Http\Requests\UpdateStatusRequest;
use App\Models\Status;
class StatusController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\StoreStatusRequest $request
* @return \Illuminate\Http\Response
*/
public function store(StoreStatusRequest $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Status $status
* @return \Illuminate\Http\Response
*/
public function show(Status $status)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Status $status
* @return \Illuminate\Http\Response
*/
public function edit(Status $status)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\UpdateStatusRequest $request
* @param \App\Models\Status $status
* @return \Illuminate\Http\Response
*/
public function update(UpdateStatusRequest $request, Status $status)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Status $status
* @return \Illuminate\Http\Response
*/
public function destroy(Status $status)
{
//
}
}
================================================
FILE: app/Http/Controllers/VoteController.php
================================================
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreVoteRequest;
use App\Http\Requests\UpdateVoteRequest;
use App\Models\Vote;
class VoteController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\StoreVoteRequest $request
* @return \Illuminate\Http\Response
*/
public function store(StoreVoteRequest $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Vote $vote
* @return \Illuminate\Http\Response
*/
public function show(Vote $vote)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Vote $vote
* @return \Illuminate\Http\Response
*/
public function edit(Vote $vote)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\UpdateVoteRequest $request
* @param \App\Models\Vote $vote
* @return \Illuminate\Http\Response
*/
public function update(UpdateVoteRequest $request, Vote $vote)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Vote $vote
* @return \Illuminate\Http\Response
*/
public function destroy(Vote $vote)
{
//
}
}
================================================
FILE: app/Http/Kernel.php
================================================
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
}
================================================
FILE: app/Http/Livewire/AddComment.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use App\Models\Idea;
use App\Notifications\CommentAdded;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class AddComment extends Component
{
public $idea;
public $comment;
protected $rules = [
'comment' => 'required|min:4'
];
public function mount(Idea $idea)
{
$this->idea = $idea;
}
public function addComment()
{
if (auth()->guest()) {
abort(Response::HTTP_FORBIDDEN);
}
$this->validate();
$newComment = Comment::create([
'user_id' => auth()->id(),
'idea_id' => $this->idea->id,
'status_id' => 1,
'body' => $this->comment,
]);
$this->reset('comment');
$this->idea->user->notify(new CommentAdded($newComment));
$this->emit('commentWasAdded', 'Comment was posted!');
}
public function render()
{
return view('livewire.add-comment');
}
}
================================================
FILE: app/Http/Livewire/CommentNotifications.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use Illuminate\Notifications\DatabaseNotification;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class CommentNotifications extends Component
{
const NOTIFICATION_THRESHOLD = 20;
public $notifications;
public $notificationCount;
public $isLoading;
protected $listeners = ['getNotifications'];
public function mount()
{
$this->notifications = collect([]);
$this->isLoading = true;
$this->getNotificationCount();
}
public function getNotificationCount()
{
$this->notificationCount = auth()->user()->unreadNotifications()->count();
if ($this->notificationCount > self::NOTIFICATION_THRESHOLD) {
$this->notificationCount = self::NOTIFICATION_THRESHOLD . '+';
}
}
public function markAsRead($notificationId)
{
if (auth()->guest()) {
abort(Response::HTTP_FORBIDDEN);
}
$notification = DatabaseNotification::findOrFail($notificationId);
$notification->markAsRead();
$comment = Comment::find($notification->data['comment_id']);
session()->flash('scrollToComment', $comment->id);
return redirect()->route('idea.show', [
'idea' => $notification->data['idea_slug'],
]);
}
public function markAllAsRead()
{
if (auth()->guest()) {
abort(Response::HTTP_FORBIDDEN);
}
auth()->user()->unreadNotifications()->markAsRead();
$this->getNotifications();
}
public function getNotifications()
{
sleep(2);
$this->notifications = auth()->user()->unreadNotifications->latest()->take(self::NOTIFICATION_THRESHOLD)->get();
$this->isLoading = false;
}
public function render()
{
return view('livewire.comment-notifications');
}
}
================================================
FILE: app/Http/Livewire/CreateIdea.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Category;
use App\Models\Idea;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class CreateIdea extends Component
{
public $title;
public $category = 1;
public $description;
protected $rules = [
'title' => 'required|min:4',
'category' => 'required|integer|exists:categories,id',
'description' => 'required|min:4',
];
public function createIdea()
{
if (auth()->check()) {
$this->validate();
Idea::create([
'user_id' => auth()->id(),
'category_id' => $this->category,
'status_id' => 1,
'title' => $this->title,
'description' => $this->description,
]);
session()->flash('success_message', 'Idea was added successfully!');
$this->reset();
return redirect()->route('idea.index');
}
abort(Response::HTTP_FORBIDDEN);
}
public function render()
{
return view('livewire.create-idea', [
'categories' => Category::all(),
]);
}
}
================================================
FILE: app/Http/Livewire/DeleteComment.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class DeleteComment extends Component
{
public ?Comment $comment;
protected $listeners = ['setDeleteComment'];
public function setDeleteComment($commentId)
{
$this->comment = Comment::findOrFail($commentId);
$this->emit('deleteCommentWasSet');
}
public function deleteComment()
{
if (auth()->guest() || auth()->user()->cannot('delete', $this->comment)) {
abort(Response::HTTP_FORBIDDEN);
}
Comment::destroy($this->comment->id);
$this->comment = null;
$this->emit('commentWasDeleted', 'Comment was deleted!');
}
public function render()
{
return view('livewire.delete-comment');
}
}
================================================
FILE: app/Http/Livewire/DeleteIdea.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use App\Models\Idea;
use App\Models\Vote;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class DeleteIdea extends Component
{
public $idea;
public function mount(Idea $idea)
{
$this->idea = $idea;
}
public function deleteIdea()
{
if (auth()->guest() || auth()->user()->cannot('delete', $this->idea)) {
abort(Response::HTTP_FORBIDDEN);
}
Vote::where('idea_id', $this->idea->id)->delete();
Comment::where('idea_id', $this->idea->id)->delete();
Idea::destroy($this->idea->id);
session()->flash('success_message', 'Idea was deleted successfully!');
return redirect(route('idea.index'));
}
public function render()
{
return view('livewire.delete-idea');
}
}
================================================
FILE: app/Http/Livewire/EditComment.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class EditComment extends Component
{
public Comment $comment;
public $body;
protected $rules = [
'body' => 'required|min:4',
];
protected $listeners = ['setEditComment'];
public function setEditComment($commentId)
{
$this->comment = Comment::findOrFail($commentId);
$this->body = $this->comment->body;
$this->emit('editCommentWasSet');
}
public function updateComment()
{
if (auth()->guest() || auth()->user()->cannot('update', $this->comment)) {
abort(Response::HTTP_FORBIDDEN);
}
$this->validate();
$this->comment->body = $this->body;
$this->comment->save();
$this->emit('commentWasUpdated', 'Comment was updated!');
}
public function render()
{
return view('livewire.edit-comment');
}
}
================================================
FILE: app/Http/Livewire/EditIdea.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Category;
use App\Models\Idea;
use App\Models\Status;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class EditIdea extends Component
{
public $idea;
public $title;
public $category;
public $description;
protected $rules = [
'title' => 'required|min:4',
'category' => 'required|integer|exists:categories,id',
'description' => 'required|min:4',
];
public function mount(Idea $idea)
{
$this->idea = $idea;
$this->title = $idea->title;
$this->category = $idea->category_id;
$this->description = $idea->description;
}
public function updateIdea()
{
if (auth()->guest() || auth()->user()->cannot('update', $this->idea)) {
abort(Response::HTTP_FORBIDDEN);
}
$this->validate();
$this->idea->update([
'title' => $this->title,
'category_id' => $this->category,
'description' => $this->description,
]);
$this->emit('ideaWasUpdated', 'Idea was updated successfully!');
}
public function render()
{
return view('livewire.edit-idea', [
'categories' => Category::all(),
]);
}
}
================================================
FILE: app/Http/Livewire/IdeaComment.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use Livewire\Component;
class IdeaComment extends Component
{
public $comment;
public $ideaUserId;
protected $listeners = [
'commentWasUpdated',
'commentWasMarkedAsSpam',
'commentWasMarkedAsNotSpam',
];
public function commentWasUpdated()
{
$this->comment->refresh();
}
public function commentWasMarkedAsSpam()
{
$this->comment->refresh();
}
public function commentWasMarkedAsNotSpam()
{
$this->comment->refresh();
}
public function mount(Comment $comment, $ideaUserId)
{
$this->comment = $comment;
$this->ideaUserId = $ideaUserId;
}
public function render()
{
return view('livewire.idea-comment');
}
}
================================================
FILE: app/Http/Livewire/IdeaComments.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use App\Models\Idea;
use Livewire\Component;
use Livewire\WithPagination;
class IdeaComments extends Component
{
use WithPagination;
public $idea;
protected $listeners = ['commentWasAdded', 'commentWasDeleted', 'statusWasUpdated'];
public function commentWasAdded()
{
$this->idea->refresh();
$this->gotoPage($this->idea->comments()->paginate()->lastPage());
}
public function statusWasUpdated()
{
$this->idea->refresh();
$this->gotoPage($this->idea->comments()->paginate()->lastPage());
}
public function commentWasDeleted()
{
$this->idea->refresh();
$this->gotoPage(1);
}
public function mount(Idea $idea)
{
$this->idea = $idea;
}
public function render()
{
return view('livewire.idea-comments', [
'comments' => Comment::with('user')->where('idea_id', $this->idea->id)->paginate()->withQueryString(),
]);
}
}
================================================
FILE: app/Http/Livewire/IdeaIndex.php
================================================
<?php
namespace App\Http\Livewire;
use App\Exceptions\DuplicateVoteException;
use App\Exceptions\VoteNotFoundException;
use App\Models\Idea;
use Livewire\Component;
class IdeaIndex extends Component
{
public $idea;
public $votesCount;
public $hasVoted;
public function mount(Idea $idea, $votesCount)
{
$this->idea = $idea;
$this->votesCount = $votesCount;
$this->hasVoted = $idea->voted_by_user;
}
public function vote()
{
if (!auth()->check()) {
return redirect(route('login'));
}
if ($this->hasVoted) {
try {
$this->idea->removeVote(auth()->user());
} catch (VoteNotFoundException $e) {
// do nothing
}
$this->votesCount--;
$this->hasVoted = false;
} else {
try {
$this->idea->vote(auth()->user());
} catch (DuplicateVoteException $e) {
// do nothing
}
$this->votesCount++;
$this->hasVoted = true;
}
}
public function render()
{
return view('livewire.idea-index');
}
}
================================================
FILE: app/Http/Livewire/IdeaShow.php
================================================
<?php
namespace App\Http\Livewire;
use App\Exceptions\DuplicateVoteException;
use App\Exceptions\VoteNotFoundException;
use App\Models\Idea;
use Livewire\Component;
class IdeaShow extends Component
{
public $idea;
public $votesCount;
public $hasVoted;
protected $listeners = [
'statusWasUpdated',
'ideaWasUpdated',
'ideaWasMarkedAsSpam',
'ideaWasMarkedAsNotSpam',
'commentWasAdded',
'commentWasDeleted',
];
public function mount(Idea $idea, $votesCount)
{
$this->idea = $idea;
$this->votesCount = $votesCount;
$this->hasVoted = $idea->isVotedByUser(auth()->user());
}
public function vote()
{
if (!auth()->check()) {
return redirect(route('login'));
}
if ($this->hasVoted) {
try {
$this->idea->removeVote(auth()->user());
} catch (VoteNotFoundException $e) {
// do nothing
}
$this->votesCount--;
$this->hasVoted = false;
} else {
try {
$this->idea->vote(auth()->user());
} catch (DuplicateVoteException $e) {
// do nothing
}
$this->votesCount++;
$this->hasVoted = true;
}
}
public function statusWasUpdated()
{
$this->idea->refresh();
}
public function ideaWasUpdated()
{
$this->idea->refresh();
}
public function ideaWasMarkedAsSpam()
{
$this->idea->refresh();
}
public function ideaWasMarkedAsNotSpam()
{
$this->idea->refresh();
}
public function commentWasAdded()
{
$this->idea->refresh();
}
public function commentWasDeleted()
{
$this->idea->refresh();
}
public function render()
{
return view('livewire.idea-show');
}
}
================================================
FILE: app/Http/Livewire/IdeasIndex.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Category;
use App\Models\Idea;
use App\Models\Status;
use App\Models\Vote;
use Livewire\Component;
use Livewire\WithPagination;
class IdeasIndex extends Component
{
use WithPagination;
public $status = 'All';
public $category;
public $filter;
public $search;
protected $queryString = [
'status',
'category',
'filter',
'search',
];
protected $listeners = ['queryStringUpdatedStatus', 'UpdatedFilter'];
public function mount()
{
$this->status = request()->status ?? 'All';
}
public function updatedFilter()
{
$this->resetPage();
if ($this->filter === 'My Ideas') {
if (!auth()->check()) {
return redirect()->route('login');
}
}
}
public function updatingSearch()
{
$this->resetPage();
}
public function queryStringUpdatedStatus($newStatus)
{
$this->resetPage();
$this->status = $newStatus;
}
public function render()
{
$statuses = Status::all()->pluck('id', 'name');
$categories = Category::all();
return view('livewire.ideas-index', [
'ideas' => Idea::with('user', 'category', 'status')
->when($this->status && $this->status !== 'All', function ($query) use ($statuses) {
return $query->where('status_id', $statuses->get($this->status));
})->when($this->category && $this->category !== 'All Categories', function ($query) use ($categories) {
return $query->where('category_id', $categories->pluck('id', 'name')->get($this->category));
})->when($this->filter && $this->filter === 'Top Voted', function ($query) {
return $query->orderByDesc('votes_count');
})->when($this->filter && $this->filter === 'My Ideas', function ($query) {
return $query->where('user_id', auth()->id());
})->when($this->filter && $this->filter === 'Spam Ideas', function ($query) {
return $query->where('spam_reports', '>', 0)->orderByDesc('spam_reports');
})->when($this->filter && $this->filter === 'Spam Comments', function ($query) {
return $query->whereHas('comments', function ($query) {
$query->where('spam_reports', '>', 0);
});
})->when(strlen($this->search) >= 3, function ($query) {
return $query->where('title', 'like', '%' . $this->search . '%');
})
->addSelect(['voted_by_user' => Vote::select('id')
->where('user_id', auth()->id())
->whereColumn('idea_id', 'ideas.id')
])
->withCount('votes')
->withCount('comments')
->orderBy('id', 'desc')
->simplePaginate()
->withQueryString(),
'categories' => $categories,
]);
}
}
================================================
FILE: app/Http/Livewire/MarkCommentAsNotSpam.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class MarkCommentAsNotSpam extends Component
{
public Comment $comment;
protected $listeners = ['setMarkAsNotSpamComment'];
public function setMarkAsNotSpamComment($commentId)
{
$this->comment = Comment::findOrFail($commentId);
$this->emit('markAsNotSpamCommentWasSet');
}
public function markAsNotSpam()
{
if (auth()->guest()) {
abort(Response::HTTP_FORBIDDEN);
}
$this->comment->spam_reports = 0;
$this->comment->save();
$this->emit('commentWasMarkedAsNotSpam', 'Comment spam counter was reset!');
}
public function render()
{
return view('livewire.mark-comment-as-not-spam');
}
}
================================================
FILE: app/Http/Livewire/MarkCommentAsSpam.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Comment;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class MarkCommentAsSpam extends Component
{
public Comment $comment;
protected $listeners = ['setMarkAsSpamComment'];
public function setMarkAsSpamComment($commentId)
{
$this->comment = Comment::findOrFail($commentId);
$this->emit('markAsSpamCommentWasSet');
}
public function markAsSpam()
{
if (auth()->guest()) {
abort(Response::HTTP_FORBIDDEN);
}
$this->comment->spam_reports++;
$this->comment->save();
$this->emit('commentWasMarkedAsSpam', 'Comment was marked as spam!');
}
public function render()
{
return view('livewire.mark-comment-as-spam');
}
}
================================================
FILE: app/Http/Livewire/MarkIdeaAsNotSpam.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Idea;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class MarkIdeaAsNotSpam extends Component
{
public $idea;
public function mount(Idea $idea)
{
$this->idea = $idea;
}
public function markAsNotSpam()
{
if (auth()->guest() || ! auth()->user()->isAdmin()) {
abort(Response::HTTP_FORBIDDEN);
}
$this->idea->spam_reports = 0;
$this->idea->save();
$this->emit('ideaWasMarkedAsNotSpam', 'Spam counter was reset!');
}
public function render()
{
return view('livewire.mark-idea-as-not-spam');
}
}
================================================
FILE: app/Http/Livewire/MarkIdeaAsSpam.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Idea;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class MarkIdeaAsSpam extends Component
{
public $idea;
public function mount(Idea $idea)
{
$this->idea = $idea;
}
public function markAsSpam()
{
if (auth()->guest()) {
abort(Response::HTTP_FORBIDDEN);
}
$this->idea->spam_reports++;
$this->idea->save();
$this->emit('ideaWasMarkedAsSpam', 'Idea was marked as spam!');
}
public function render()
{
return view('livewire.mark-idea-as-spam');
}
}
================================================
FILE: app/Http/Livewire/SetStatus.php
================================================
<?php
namespace App\Http\Livewire;
use App\Jobs\NotifyAllVoters;
use App\Mail\IdeaStatusUpdatedMailable;
use App\Models\Comment;
use App\Models\Idea;
use Illuminate\Support\Facades\Mail;
use Livewire\Component;
use Symfony\Component\HttpFoundation\Response;
class SetStatus extends Component
{
public $idea;
public $status;
public $comment;
public $notifyAllVoters;
public function mount(Idea $idea)
{
$this->idea = $idea;
$this->status = $idea->status_id;
}
public function setStatus()
{
if (!auth()->check() || !auth()->user()->isAdmin()) {
abort(Response::HTTP_FORBIDDEN);
}
$this->idea->status_id = $this->status;
$this->idea->save();
if ($this->notifyAllVoters) {
NotifyAllVoters::dispatch($this->idea);
}
Comment::create([
'user_id' => auth()->id(),
'idea_id' => $this->idea->id,
'status_id' => 1,
'body' => $this->comment ? $this->comment : 'No comment was added!',
'is_status_update' => true,
]);
$this->reset('comment');
$this->emit('statusWasUpdated');
}
public function render()
{
return view('livewire.set-status');
}
}
================================================
FILE: app/Http/Livewire/StatusFilters.php
================================================
<?php
namespace App\Http\Livewire;
use App\Models\Status;
use Illuminate\Support\Facades\Route;
use Livewire\Component;
class StatusFilters extends Component
{
public $status;
public $statusCount;
public function mount()
{
$this->statusCount = Status::getCount();
$this->status = request()->status ?? 'All';
if (Route::currentRouteName() === 'idea.show') {
$this->status = null;
}
}
public function setStatus($newStatus)
{
$this->status = $newStatus;
$this->emit('queryStringUpdatedStatus', $this->status);
if ($this->getPreviousRouteName() === 'idea.show') {
return redirect()->route('idea.index', [
'status' => $this->status,
]);
}
}
// private method
private function getPreviousRouteName()
{
return app('router')->getRoutes()->match(app('request')->create(url()->previous()))->getName();
}
public function render()
{
return view('livewire.status-filters');
}
}
================================================
FILE: app/Http/Middleware/Authenticate.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
}
}
}
================================================
FILE: app/Http/Middleware/EncryptCookies.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
];
}
================================================
FILE: app/Http/Middleware/PreventRequestsDuringMaintenance.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
class PreventRequestsDuringMaintenance extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
//
];
}
================================================
FILE: app/Http/Middleware/RedirectIfAuthenticated.php
================================================
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null ...$guards
* @return mixed
*/
public function handle(Request $request, Closure $next, ...$guards)
{
$guards = empty($guards) ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
}
return $next($request);
}
}
================================================
FILE: app/Http/Middleware/TrimStrings.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array
*/
protected $except = [
'current_password',
'password',
'password_confirmation',
];
}
================================================
FILE: app/Http/Middleware/TrustHosts.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustHosts as Middleware;
class TrustHosts extends Middleware
{
/**
* Get the host patterns that should be trusted.
*
* @return array
*/
public function hosts()
{
return [
$this->allSubdomainsOfApplicationUrl(),
];
}
}
================================================
FILE: app/Http/Middleware/TrustProxies.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array|string|null
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
}
================================================
FILE: app/Http/Middleware/VerifyCsrfToken.php
================================================
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}
================================================
FILE: app/Http/Requests/Auth/LoginRequest.php
================================================
<?php
namespace App\Http\Requests\Auth;
use Illuminate\Auth\Events\Lockout;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
class LoginRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => ['required', 'string', 'email'],
'password' => ['required', 'string'],
];
}
/**
* Attempt to authenticate the request's credentials.
*
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
public function authenticate()
{
$this->ensureIsNotRateLimited();
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'email' => __('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}
/**
* Ensure the login request is not rate limited.
*
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
public function ensureIsNotRateLimited()
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
return;
}
event(new Lockout($this));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
/**
* Get the rate limiting throttle key for the request.
*
* @return string
*/
public function throttleKey()
{
return Str::lower($this->input('email')).'|'.$this->ip();
}
}
================================================
FILE: app/Http/Requests/StoreCategoryRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreCategoryRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/StoreCommentRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreCommentRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/StoreIdeaRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreIdeaRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/StoreStatusRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreStatusRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/StoreVoteRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreVoteRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/UpdateCategoryRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateCategoryRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/UpdateCommentRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateCommentRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/UpdateIdeaRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateIdeaRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/UpdateStatusRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateStatusRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Http/Requests/UpdateVoteRequest.php
================================================
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateVoteRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
================================================
FILE: app/Jobs/NotifyAllVoters.php
================================================
<?php
namespace App\Jobs;
use App\Mail\IdeaStatusUpdatedMailable;
use App\Models\Idea;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
class NotifyAllVoters implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $idea;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Idea $idea)
{
$this->idea = $idea;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$this->idea->votes()
->select('name', 'email')
->chunk(100, function ($voters) {
foreach ($voters as $user) {
Mail::to($user)
->queue(new IdeaStatusUpdatedMailable($this->idea));
}
});
}
}
================================================
FILE: app/Mail/IdeaStatusUpdatedMailable.php
================================================
<?php
namespace App\Mail;
use App\Models\Idea;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class IdeaStatusUpdatedMailable extends Mailable
{
use Queueable, SerializesModels;
public $idea;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(Idea $idea)
{
$this->idea = $idea;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('An idea you voted for has a new status')
->markdown('emails.idea-status-updated');
}
}
================================================
FILE: app/Models/Category.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use HasFactory;
public function ideas()
{
return $this->hasMany(Idea::class);
}
}
================================================
FILE: app/Models/Comment.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
use HasFactory;
protected $guarded = [];
protected $perPage = 10;
public function user()
{
return $this->belongsTo(User::class);
}
public function idea()
{
return $this->belongsTo(Idea::class);
}
public function status()
{
return $this->belongsTo(Status::class);
}
}
================================================
FILE: app/Models/Idea.php
================================================
<?php
namespace App\Models;
use App\Exceptions\DuplicateVoteException;
use App\Exceptions\VoteNotFoundException;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Idea extends Model
{
use HasFactory, Sluggable;
protected $guarded = [];
protected $perPage = 20;
public function comments()
{
return $this->hasMany(Comment::class);
}
/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
public function sluggable(): array
{
return [
'slug' => [
'source' => 'title'
]
];
}
public function user()
{
return $this->belongsTo(User::class);
}
public function category()
{
return $this->belongsTo(Category::class);
}
public function status()
{
return $this->belongsTo(Status::class);
}
public function votes()
{
return $this->belongsToMany(User::class, 'votes');
}
public function isVotedByUser(?User $user)
{
if (!$user) {
return false;
}
return Vote::where('user_id', $user->id)->where('idea_id', $this->id)->exists();
}
public function vote(User $user)
{
if($this->isVotedByUser($user)) {
throw new DuplicateVoteException;
}
Vote::create([
'idea_id' => $this->id,
'user_id' => $user->id,
]);
}
public function removeVote(User $user)
{
$voteToDelete = Vote::where('idea_id', $this->id)
->where('user_id', $user->id)
->first();
if ($voteToDelete) {
$voteToDelete->delete();
} else {
throw new VoteNotFoundException();
}
}
}
================================================
FILE: app/Models/Status.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Status extends Model
{
use HasFactory;
public function ideas()
{
return $this->hasMany(Idea::class);
}
public static function getCount()
{
return Idea::query()
->selectRaw("count(*) as all_statuses")
->selectRaw("count(case when status_id = 1 then 1 end) as open")
->selectRaw("count(case when status_id = 2 then 1 end) as considering")
->selectRaw("count(case when status_id = 3 then 1 end) as in_progress")
->selectRaw("count(case when status_id = 4 then 1 end) as implemented")
->selectRaw("count(case when status_id = 5 then 1 end) as closed")
->first()
->toArray();
}
}
================================================
FILE: app/Models/User.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function ideas()
{
return $this->hasMany(Idea::class);
}
public function votes()
{
return $this->belongsToMany(Idea::class, 'votes');
}
public function comments()
{
return $this->hasMany(Comment::class);
}
public function getAvatar()
{
$firstCharacter = $this->email[0];
if (is_numeric($firstCharacter)) {
$integerToUse = ord(strtolower($firstCharacter)) - 21;
} else {
$integerToUse = ord(strtolower($firstCharacter)) - 96;
}
return 'https://www.gravatar.com/avatar/' . md5($this->email) .
'?s=200' . '&d=https://s3.amazonaws.com/laracasts/images/forum/avatars/default-avatar-' . $integerToUse . '.png';
}
public function isAdmin()
{
return in_array($this->email, [
'jeffrey@laracasts.com',
'andre_madaran@hotmail.com',
'andrian@laracasts.com',
'lukakhangoshvili@gmail.com',
'lukabrazi@redberry.ge',
]);
}
}
================================================
FILE: app/Models/Vote.php
================================================
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Vote extends Model
{
use HasFactory;
protected $guarded = [];
}
================================================
FILE: app/Notifications/CommentAdded.php
================================================
<?php
namespace App\Notifications;
use App\Models\Comment;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class CommentAdded extends Notification
{
use Queueable;
public $comment;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(Comment $comment)
{
$this->comment = $comment;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Laracasts Voting: A comment was posted on your idea')
->markdown('emails.comment-added', [
'comment' => $this->comment,
]);
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'comment_id' => $this->comment->id,
'comment_body' => $this->comment->body,
'user_avatar' => $this->comment->user->getAvatar(),
'user_name' => $this->comment->user->name,
'idea_id' => $this->comment->idea->id,
'idea_slug' => $this->comment->idea->slug,
'idea_title' => $this->comment->idea->title,
];
}
}
================================================
FILE: app/Policies/CategoryPolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\Category;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class CategoryPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
{
//
}
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\Category $category
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, Category $category)
{
//
}
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
//
}
/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\Category $category
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, Category $category)
{
//
}
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Category $category
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, Category $category)
{
//
}
/**
* Determine whether the user can restore the model.
*
* @param \App\Models\User $user
* @param \App\Models\Category $category
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(User $user, Category $category)
{
//
}
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Category $category
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(User $user, Category $category)
{
//
}
}
================================================
FILE: app/Policies/CommentPolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\Comment;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class CommentPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
{
//
}
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\Comment $comment
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, Comment $comment)
{
//
}
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
//
}
/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\Comment $comment
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, Comment $comment)
{
return $user->id === (int) $comment->user_id;
}
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Comment $comment
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, Comment $comment)
{
return $user->id === (int) $comment->user_id || $user->isAdmin();
}
/**
* Determine whether the user can restore the model.
*
* @param \App\Models\User $user
* @param \App\Models\Comment $comment
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(User $user, Comment $comment)
{
//
}
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Comment $comment
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(User $user, Comment $comment)
{
//
}
}
================================================
FILE: app/Policies/IdeaPolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\Idea;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class IdeaPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
{
//
}
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\Idea $idea
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, Idea $idea)
{
//
}
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
//
}
/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\Idea $idea
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, Idea $idea)
{
return $user->id === (int) $idea->user_id
&& now()->subHour() <= $idea->created_at;
}
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Idea $idea
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, Idea $idea)
{
return $user->id === (int) $idea->user_id || $user->isAdmin();
}
/**
* Determine whether the user can restore the model.
*
* @param \App\Models\User $user
* @param \App\Models\Idea $idea
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(User $user, Idea $idea)
{
//
}
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Idea $idea
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(User $user, Idea $idea)
{
//
}
}
================================================
FILE: app/Policies/StatusPolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\Status;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class StatusPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
{
//
}
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\Status $status
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, Status $status)
{
//
}
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
//
}
/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\Status $status
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, Status $status)
{
//
}
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Status $status
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, Status $status)
{
//
}
/**
* Determine whether the user can restore the model.
*
* @param \App\Models\User $user
* @param \App\Models\Status $status
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(User $user, Status $status)
{
//
}
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Status $status
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(User $user, Status $status)
{
//
}
}
================================================
FILE: app/Policies/VotePolicy.php
================================================
<?php
namespace App\Policies;
use App\Models\User;
use App\Models\Vote;
use Illuminate\Auth\Access\HandlesAuthorization;
class VotePolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
{
//
}
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\Vote $vote
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, Vote $vote)
{
//
}
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
//
}
/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\Vote $vote
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, Vote $vote)
{
//
}
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Vote $vote
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, Vote $vote)
{
//
}
/**
* Determine whether the user can restore the model.
*
* @param \App\Models\User $user
* @param \App\Models\Vote $vote
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(User $user, Vote $vote)
{
//
}
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\Vote $vote
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(User $user, Vote $vote)
{
//
}
}
================================================
FILE: app/Providers/AppServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::if('admin', function () {
return auth()->check() && auth()->user()->isAdmin();
});
}
}
================================================
FILE: app/Providers/AuthServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//
}
}
================================================
FILE: app/Providers/BroadcastServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes();
require base_path('routes/channels.php');
}
}
================================================
FILE: app/Providers/EventServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
//
}
}
================================================
FILE: app/Providers/HorizonServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Laravel\Horizon\Horizon;
use Laravel\Horizon\HorizonApplicationServiceProvider;
class HorizonServiceProvider extends HorizonApplicationServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
parent::boot();
// Horizon::routeSmsNotificationsTo('15556667777');
// Horizon::routeMailNotificationsTo('example@example.com');
// Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');
Horizon::night();
}
/**
* Register the Horizon gate.
*
* This gate determines who can access Horizon in non-local environments.
*
* @return void
*/
protected function gate()
{
Gate::define('viewHorizon', function ($user) {
return in_array($user->email, [
'jeffrey@laracasts.com',
'andre_madaran@hotmail.com',
'andrian@laracasts.com',
'lukakhangoshvili@gmail.com'
]);
});
}
}
================================================
FILE: app/Providers/RouteServiceProvider.php
================================================
<?php
namespace App\Providers;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
/**
* The path to the "home" route for your application.
*
* This is used by Laravel authentication to redirect users after login.
*
* @var string
*/
public const HOME = '/';
/**
* The controller namespace for the application.
*
* When present, controller route declarations will automatically be prefixed with this namespace.
*
* @var string|null
*/
// protected $namespace = 'App\\Http\\Controllers';
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}
/**
* Configure the rate limiters for the application.
*
* @return void
*/
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
});
}
}
================================================
FILE: app/View/Components/AppLayout.php
================================================
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class AppLayout extends Component
{
/**
* Get the view / contents that represents the component.
*
* @return \Illuminate\View\View
*/
public function render()
{
return view('layouts.app');
}
}
================================================
FILE: app/View/Components/GuestLayout.php
================================================
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class GuestLayout extends Component
{
/**
* Get the view / contents that represents the component.
*
* @return \Illuminate\View\View
*/
public function render()
{
return view('layouts.guest');
}
}
================================================
FILE: artisan
================================================
#!/usr/bin/env php
<?php
define('LARAVEL_START', microtime(true));
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any of our classes manually. It's great to relax.
|
*/
require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
/*
|--------------------------------------------------------------------------
| Run The Artisan Application
|--------------------------------------------------------------------------
|
| When we run the console application, the current CLI command will be
| executed in this console and the response sent back to a terminal
| or another output device for the developers. Here goes nothing!
|
*/
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$status = $kernel->handle(
$input = new Symfony\Component\Console\Input\ArgvInput,
new Symfony\Component\Console\Output\ConsoleOutput
);
/*
|--------------------------------------------------------------------------
| Shutdown The Application
|--------------------------------------------------------------------------
|
| Once Artisan has finished running, we will fire off the shutdown events
| so that any final work may be done by the application before we shut
| down the process. This is the last thing to happen to the request.
|
*/
$kernel->terminate($input, $status);
exit($status);
================================================
FILE: bootstrap/app.php
================================================
<?php
/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/
$app = new Illuminate\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/
$app->singleton(
Illuminate\Contracts\Http\Kernel::class,
App\Http\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
App\Console\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);
/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/
return $app;
================================================
FILE: bootstrap/cache/.gitignore
================================================
*
!.gitignore
================================================
FILE: composer.json
================================================
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
"php": "^7.3|^8.0",
"cviebrock/eloquent-sluggable": "^8.0",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.65",
"laravel/horizon": "^5.7",
"laravel/sanctum": "^2.11",
"laravel/tinker": "^2.5",
"livewire/livewire": "^2.7"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.6",
"brianium/paratest": "^6.3",
"facade/ignition": "^2.5",
"fakerphp/faker": "^1.9.1",
"laravel/breeze": "^1.4",
"laravel/sail": "^1.0.1",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^5.10",
"phpunit/phpunit": "^9.5.10"
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true
},
"minimum-stability": "dev",
"prefer-stable": true
}
================================================
FILE: config/app.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Application Name
|--------------------------------------------------------------------------
|
| This value is the name of your application. This value is used when the
| framework needs to place the application's name in a notification or
| any other location as required by the application or its packages.
|
*/
'name' => env('APP_NAME', 'Laravel'),
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services the application utilizes. Set this in your ".env" file.
|
*/
'env' => env('APP_ENV', 'production'),
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => (bool) env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => env('APP_URL', 'http://localhost'),
'asset_url' => env('ASSET_URL', null),
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'UTC',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
'faker_locale' => 'en_US',
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Package Service Providers...
*/
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\HorizonServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'Date' => Illuminate\Support\Facades\Date::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Http' => Illuminate\Support\Facades\Http::class,
'Js' => Illuminate\Support\Js::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'Notification' => Illuminate\Support\Facades\Notification::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
// 'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'Str' => Illuminate\Support\Str::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
],
];
================================================
FILE: config/auth.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "session"
|
*/
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| You may specify multiple password reset configurations if you have more
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire time is the number of minutes that the reset token should be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
/*
|--------------------------------------------------------------------------
| Password Confirmation Timeout
|--------------------------------------------------------------------------
|
| Here you may define the amount of seconds before a password confirmation
| times out and the user is prompted to re-enter their password via the
| confirmation screen. By default, the timeout lasts for three hours.
|
*/
'password_timeout' => 10800,
];
================================================
FILE: config/broadcasting.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "pusher", "ably", "redis", "log", "null"
|
*/
'default' => env('BROADCAST_DRIVER', 'null'),
/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over websockets. Samples of
| each available type of connection are provided inside this array.
|
*/
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true,
],
],
'ably' => [
'driver' => 'ably',
'key' => env('ABLY_KEY'),
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];
================================================
FILE: config/cache.php
================================================
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Cache Store
|--------------------------------------------------------------------------
|
| This option controls the default cache connection that gets used while
| using this caching library. This connection is used when another is
| not explicitly specified when executing a given caching function.
|
*/
'default' => env('CACHE_DRIVER', 'file'),
/*
|--------------------------------------------------------------------------
| Cache Stores
|--------------------------------------------------------------------------
|
| Here you may define all of the cache "stores" for your application as
| well as their drivers. You may even define multiple stores for the
| same cache driver to group types of items stored in your caches.
|
| Supported drivers: "apc", "array", "database", "file",
| "memcached", "redis", "dynamodb", "octane", "null"
|
*/
'stores' => [
'apc' => [
'driver' => 'apc',
],
'array' => [
'driver' => 'array',
'serialize' => false,
],
'database' => [
'driver' => 'database',
'table' => 'cache',
'connection' => null,
'lock_connection' => null,
],
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'memcached' => [
'driver' => 'memcached',
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
'sasl' => [
env('MEMCACHED_USERNAME'),
env('MEMCACHED_PASSWORD'),
],
'options' => [
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
'lock_connection' => 'default',
],
'dynamodb' => [
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
'endpoint' => env('DYNAMODB_ENDPOINT'),
],
'octane' => [
'driver' => 'octane',
],
],
/*
|--------------------------------------------------------------------------
| Cache Key Prefix
|--------------------------------------------------------------------------
|
| When utilizing a RAM based store such as APC or Memcached, there might
| be other applications utilizing the same cache. So, we'll specify a
| value to get prefixed to all our keys so we can avoid collisions.
|
*/
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),
];
================================================
FILE: config/cors.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Cross-Origin Resource Sharing (CORS) Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your settings for cross-origin resource sharing
| or "CORS". This determines what cross-origin operations may execute
| in web browsers. You are free to adjust these settings as needed.
|
| To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
|
*/
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];
================================================
FILE: config/database.php
================================================
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/
'default' => env('DB_CONNECTION', 'mysql'),
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
],
],
/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/
'migrations' => 'migrations',
/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
];
================================================
FILE: config/filesystems.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
| by the framework. The "local" disk, as well as a variety of cloud
| based disks are available to your application. Just store away!
|
*/
'default' => env('FILESYSTEM_DRIVER', 'local'),
/*
|--------------------------------------------------------------------------
| Filesystem Disks
|--------------------------------------------------------------------------
|
| Here you may configure as many filesystem "disks" as you wish, and you
| may even configure multiple disks of the same driver. Defaults have
| been setup for each driver as an example of the required options.
|
| Supported Drivers: "local", "ftp", "sftp", "s3"
|
*/
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
],
],
/*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/
'links' => [
public_path('storage') => storage_path('app/public'),
],
];
================================================
FILE: config/hashing.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Hash Driver
|--------------------------------------------------------------------------
|
| This option controls the default hash driver that will be used to hash
| passwords for your application. By default, the bcrypt algorithm is
| used; however, you remain free to modify this option if you wish.
|
| Supported: "bcrypt", "argon", "argon2id"
|
*/
'driver' => 'bcrypt',
/*
|--------------------------------------------------------------------------
| Bcrypt Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Bcrypt algorithm. This will allow you
| to control the amount of time it takes to hash the given password.
|
*/
'bcrypt' => [
'rounds' => env('BCRYPT_ROUNDS', 10),
],
/*
|--------------------------------------------------------------------------
| Argon Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Argon algorithm. These will allow you
| to control the amount of time it takes to hash the given password.
|
*/
'argon' => [
'memory' => 1024,
'threads' => 2,
'time' => 2,
],
];
================================================
FILE: config/horizon.php
================================================
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Horizon Domain
|--------------------------------------------------------------------------
|
| This is the subdomain where Horizon will be accessible from. If this
| setting is null, Horizon will reside under the same domain as the
| application. Otherwise, this value will serve as the subdomain.
|
*/
'domain' => env('HORIZON_DOMAIN', null),
/*
|--------------------------------------------------------------------------
| Horizon Path
|--------------------------------------------------------------------------
|
| This is the URI path where Horizon will be accessible from. Feel free
| to change this path to anything you like. Note that the URI will not
| affect the paths of its internal API that aren't exposed to users.
|
*/
'path' => env('HORIZON_PATH', 'horizon'),
/*
|--------------------------------------------------------------------------
| Horizon Redis Connection
|--------------------------------------------------------------------------
|
| This is the name of the Redis connection where Horizon will store the
| meta information required for it to function. It includes the list
| of supervisors, failed jobs, job metrics, and other information.
|
*/
'use' => 'default',
/*
|--------------------------------------------------------------------------
| Horizon Redis Prefix
|--------------------------------------------------------------------------
|
| This prefix will be used when storing all Horizon data in Redis. You
| may modify the prefix when you are running multiple installations
| of Horizon on the same server so that they don't have problems.
|
*/
'prefix' => env(
'HORIZON_PREFIX',
Str::slug(env('APP_NAME', 'laravel'), '_').'_horizon:'
),
/*
|--------------------------------------------------------------------------
| Horizon Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will get attached onto each Horizon route, giving you
| the chance to add your own middleware to this list or change any of
| the existing middleware. Or, you can simply stick with this list.
|
*/
'middleware' => ['web'],
/*
|--------------------------------------------------------------------------
| Queue Wait Time Thresholds
|--------------------------------------------------------------------------
|
| This option allows you to configure when the LongWaitDetected event
| will be fired. Every connection / queue combination may have its
| own, unique threshold (in seconds) before this event is fired.
|
*/
'waits' => [
'redis:default' => 60,
],
/*
|--------------------------------------------------------------------------
| Job Trimming Times
|--------------------------------------------------------------------------
|
| Here you can configure for how long (in minutes) you desire Horizon to
| persist the recent and failed jobs. Typically, recent jobs are kept
| for one hour while all failed jobs are stored for an entire week.
|
*/
'trim' => [
'recent' => 60,
'pending' => 60,
'completed' => 60,
'recent_failed' => 10080,
'failed' => 10080,
'monitored' => 10080,
],
/*
|--------------------------------------------------------------------------
| Metrics
|--------------------------------------------------------------------------
|
| Here you can configure how many snapshots should be kept to display in
| the metrics graph. This will get used in combination with Horizon's
| `horizon:snapshot` schedule to define how long to retain metrics.
|
*/
'metrics' => [
'trim_snapshots' => [
'job' => 24,
'queue' => 24,
],
],
/*
|--------------------------------------------------------------------------
| Fast Termination
|--------------------------------------------------------------------------
|
| When this option is enabled, Horizon's "terminate" command will not
| wait on all of the workers to terminate unless the --wait option
| is provided. Fast termination can shorten deployment delay by
| allowing a new instance of Horizon to start while the last
| instance will continue to terminate each of its workers.
|
*/
'fast_termination' => false,
/*
|--------------------------------------------------------------------------
| Memory Limit (MB)
|--------------------------------------------------------------------------
|
| This value describes the maximum amount of memory the Horizon master
| supervisor may consume before it is terminated and restarted. For
| configuring these limits on your workers, see the next section.
|
*/
'memory_limit' => 64,
/*
|--------------------------------------------------------------------------
| Queue Worker Configuration
|--------------------------------------------------------------------------
|
| Here you may define the queue worker settings used by your application
| in all environments. These supervisors and settings handle all your
| queued jobs and will be provisioned by Horizon during deployment.
|
*/
'defaults' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'auto',
'maxProcesses' => 1,
'memory' => 128,
'tries' => 1,
'nice' => 0,
],
],
'environments' => [
'production' => [
'supervisor-1' => [
'maxProcesses' => 10,
'balanceMaxShift' => 1,
'balanceCooldown' => 3,
],
],
'local' => [
'supervisor-1' => [
'maxProcesses' => 3,
],
],
],
];
================================================
FILE: config/logging.php
================================================
<?php
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
return [
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Deprecations Log Channel
|--------------------------------------------------------------------------
|
| This option controls the log channel that should be used to log warnings
| regarding deprecated PHP and library features. This allows you to get
| your application ready for upcoming major versions of dependencies.
|
*/
'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog",
| "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => env('LOG_LEVEL', 'critical'),
],
'papertrail' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => SyslogUdpHandler::class,
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
],
],
'stderr' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => StreamHandler::class,
'formatter' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => env('LOG_LEVEL', 'debug'),
],
'errorlog' => [
'driver' => 'errorlog',
'level' => env('LOG_LEVEL', 'debug'),
],
'null' => [
'driver' => 'monolog',
'handler' => NullHandler::class,
],
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
],
];
================================================
FILE: config/mail.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Mailer
|--------------------------------------------------------------------------
|
| This option controls the default mailer that is used to send any email
| messages sent by your application. Alternative mailers may be setup
| and used as needed; however, this mailer will be used by default.
|
*/
'default' => env('MAIL_MAILER', 'smtp'),
/*
|--------------------------------------------------------------------------
| Mailer Configurations
|--------------------------------------------------------------------------
|
| Here you may configure all of the mailers used by your application plus
| their respective settings. Several examples have been configured for
| you and you are free to add your own as your application requires.
|
| Laravel supports a variety of mail "transport" drivers to be used while
| sending an e-mail. You will specify which one you are using for your
| mailers below. You are free to add additional mailers as required.
|
| Supported: "smtp", "sendmail", "mailgun", "ses",
| "postmark", "log", "array", "failover"
|
*/
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
],
'ses' => [
'transport' => 'ses',
],
'mailgun' => [
'transport' => 'mailgun',
],
'postmark' => [
'transport' => 'postmark',
],
'sendmail' => [
'transport' => 'sendmail',
'path' => '/usr/sbin/sendmail -bs',
],
'log' => [
'transport' => 'log',
'channel' => env('MAIL_LOG_CHANNEL'),
],
'array' => [
'transport' => 'array',
],
'failover' => [
'transport' => 'failover',
'mailers' => [
'smtp',
'log',
],
],
],
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
/*
|--------------------------------------------------------------------------
| Markdown Mail Settings
|--------------------------------------------------------------------------
|
| If you are using Markdown based email rendering, you may configure your
| theme and component paths here, allowing you to customize the design
| of the emails. Or, you may simply stick with the Laravel defaults!
|
*/
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
];
================================================
FILE: config/queue.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Queue Connection Name
|--------------------------------------------------------------------------
|
| Laravel's queue API supports an assortment of back-ends via a single
| API, giving you convenient access to each back-end using the same
| syntax for every one. Here you may define a default connection.
|
*/
'default' => env('QUEUE_CONNECTION', 'sync'),
/*
|--------------------------------------------------------------------------
| Queue Connections
|--------------------------------------------------------------------------
|
| Here you may configure the connection information for each server that
| is used by your application. A default configuration has been added
| for each back-end shipped with Laravel. You are free to add more.
|
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
|
*/
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
'after_commit' => false,
],
'beanstalkd' => [
'driver' => 'beanstalkd',
'host' => 'localhost',
'queue' => 'default',
'retry_after' => 90,
'block_for' => 0,
'after_commit' => false,
],
'sqs' => [
'driver' => 'sqs',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'default'),
'suffix' => env('SQS_SUFFIX'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'after_commit' => false,
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
'after_commit' => false,
],
],
/*
|--------------------------------------------------------------------------
| Failed Queue Jobs
|--------------------------------------------------------------------------
|
| These options configure the behavior of failed queue job logging so you
| can control which database and table are used to store the jobs that
| have failed. You may change them to any database / table you wish.
|
*/
'failed' => [
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
];
================================================
FILE: config/sanctum.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Stateful Domains
|--------------------------------------------------------------------------
|
| Requests from the following domains / hosts will receive stateful API
| authentication cookies. Typically, these should include your local
| and production domains which access your API via a frontend SPA.
|
*/
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
))),
/*
|--------------------------------------------------------------------------
| Sanctum Guards
|--------------------------------------------------------------------------
|
| This array contains the authentication guards that will be checked when
| Sanctum is trying to authenticate a request. If none of these guards
| are able to authenticate the request, Sanctum will use the bearer
| token that's present on an incoming request for authentication.
|
*/
'guard' => ['web'],
/*
|--------------------------------------------------------------------------
| Expiration Minutes
|--------------------------------------------------------------------------
|
| This value controls the number of minutes until an issued token will be
| considered expired. If this value is null, personal access tokens do
| not expire. This won't tweak the lifetime of first-party sessions.
|
*/
'expiration' => null,
/*
|--------------------------------------------------------------------------
| Sanctum Middleware
|--------------------------------------------------------------------------
|
| When authenticating your first-party SPA with Sanctum you may need to
| customize some of the middleware Sanctum uses while processing the
| request. You may change the middleware listed below as required.
|
*/
'middleware' => [
'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
],
];
================================================
FILE: config/services.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Mailgun, Postmark, AWS and more. This file provides the de facto
| location for this type of information, allowing packages to have
| a conventional file to locate the various service credentials.
|
*/
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
],
'postmark' => [
'token' => env('POSTMARK_TOKEN'),
],
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
];
================================================
FILE: config/session.php
================================================
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Session Driver
|--------------------------------------------------------------------------
|
| This option controls the default session "driver" that will be used on
| requests. By default, we will use the lightweight native driver but
| you may specify any of the other wonderful drivers provided here.
|
| Supported: "file", "cookie", "database", "apc",
| "memcached", "redis", "dynamodb", "array"
|
*/
'driver' => env('SESSION_DRIVER', 'file'),
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
/*
|--------------------------------------------------------------------------
| Session Encryption
|--------------------------------------------------------------------------
|
| This option allows you to easily specify that all of your session data
| should be encrypted before it is stored. All encryption will be run
| automatically by Laravel and you can use the Session like normal.
|
*/
'encrypt' => false,
/*
|--------------------------------------------------------------------------
| Session File Location
|--------------------------------------------------------------------------
|
| When using the native session driver, we need a location where session
| files may be stored. A default has been set for you but a different
| location may be specified. This is only needed for file sessions.
|
*/
'files' => storage_path('framework/sessions'),
/*
|--------------------------------------------------------------------------
| Session Database Connection
|--------------------------------------------------------------------------
|
| When using the "database" or "redis" session drivers, you may specify a
| connection that should be used to manage these sessions. This should
| correspond to a connection in your database configuration options.
|
*/
'connection' => env('SESSION_CONNECTION', null),
/*
|--------------------------------------------------------------------------
| Session Database Table
|--------------------------------------------------------------------------
|
| When using the "database" session driver, you may specify the table we
| should use to manage the sessions. Of course, a sensible default is
| provided for you; however, you are free to change this as needed.
|
*/
'table' => 'sessions',
/*
|--------------------------------------------------------------------------
| Session Cache Store
|--------------------------------------------------------------------------
|
| While using one of the framework's cache driven session backends you may
| list a cache store that should be used for these sessions. This value
| must match with one of the application's configured cache "stores".
|
| Affects: "apc", "dynamodb", "memcached", "redis"
|
*/
'store' => env('SESSION_STORE', null),
/*
|--------------------------------------------------------------------------
| Session Sweeping Lottery
|--------------------------------------------------------------------------
|
| Some session drivers must manually sweep their storage location to get
| rid of old sessions from storage. Here are the chances that it will
| happen on a given request. By default, the odds are 2 out of 100.
|
*/
'lottery' => [2, 100],
/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver.
|
*/
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
/*
|--------------------------------------------------------------------------
| Session Cookie Path
|--------------------------------------------------------------------------
|
| The session cookie path determines the path for which the cookie will
| be regarded as available. Typically, this will be the root path of
| your application but you are free to change this when necessary.
|
*/
'path' => '/',
/*
|--------------------------------------------------------------------------
| Session Cookie Domain
|--------------------------------------------------------------------------
|
| Here you may change the domain of the cookie used to identify a session
| in your application. This will determine which domains the cookie is
| available to in your application. A sensible default has been set.
|
*/
'domain' => env('SESSION_DOMAIN', null),
/*
|--------------------------------------------------------------------------
| HTTPS Only Cookies
|--------------------------------------------------------------------------
|
| By setting this option to true, session cookies will only be sent back
| to the server if the browser has a HTTPS connection. This will keep
| the cookie from being sent to you when it can't be done securely.
|
*/
'secure' => env('SESSION_SECURE_COOKIE'),
/*
|--------------------------------------------------------------------------
| HTTP Access Only
|--------------------------------------------------------------------------
|
| Setting this value to true will prevent JavaScript from accessing the
| value of the cookie and the cookie will only be accessible through
| the HTTP protocol. You are free to modify this option if needed.
|
*/
'http_only' => true,
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| will set this value to "lax" since this is a secure default value.
|
| Supported: "lax", "strict", "none", null
|
*/
'same_site' => 'lax',
];
================================================
FILE: config/view.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| View Storage Paths
|--------------------------------------------------------------------------
|
| Most templating systems load templates from disk. Here you may specify
| an array of paths that should be checked for your views. Of course
| the usual Laravel view path has already been registered for you.
|
*/
'paths' => [
resource_path('views'),
],
/*
|--------------------------------------------------------------------------
| Compiled View Path
|--------------------------------------------------------------------------
|
| This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value.
|
*/
'compiled' => env(
'VIEW_COMPILED_PATH',
realpath(storage_path('framework/views'))
),
];
================================================
FILE: database/.gitignore
================================================
*.sqlite*
================================================
FILE: database/factories/CategoryFactory.php
================================================
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class CategoryFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->words(2, true),
];
}
}
================================================
FILE: database/factories/CommentFactory.php
================================================
<?php
namespace Database\Factories;
use App\Models\Idea;
use App\Models\Status;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
class CommentFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'user_id' => User::factory(),
'idea_id' => Idea::factory(),
'status_id' => Status::factory(),
'body' => $this->faker->paragraph(5),
];
}
public function existing()
{
return $this->state(function (array $attributes) {
return [
'user_id' => $this->faker->numberBetween(1, 20),
'status_id' => 1,
];
});
}
}
================================================
FILE: database/factories/IdeaFactory.php
================================================
<?php
namespace Database\Factories;
use App\Models\Category;
use App\Models\Status;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
class IdeaFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'user_id' => User::factory(),
'category_id' => Category::factory(),
'status_id' => Status::factory(),
'title' => ucwords($this->faker->words(4, true)),
'description' => $this->faker->paragraph(5),
];
}
public function existing() {
return $this->state(function(array $attributes) {
return [
'user_id' => $this->faker->numberBetween(1, 20),
'category_id' => $this->faker->numberBetween(1, 4),
'status_id' => $this->faker->numberBetween(1, 5),
];
});
}
}
================================================
FILE: database/factories/StatusFactory.php
================================================
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class StatusFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->words(2, true),
];
}
}
================================================
FILE: database/factories/UserFactory.php
================================================
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class UserFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->firstName,
'email' => $this->faker->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
/**
* Indicate that the model's email address should be unverified.
*
* @return \Illuminate\Database\Eloquent\Factories\Factory
*/
public function unverified()
{
return $this->state(function (array $attributes) {
return [
'email_verified_at' => null,
];
});
}
}
================================================
FILE: database/factories/VoteFactory.php
================================================
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class VoteFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'idea_id' => $this->faker->numberBetween(1, 100),
'user_id' => $this->faker->numberBetween(1, 20),
];
}
}
================================================
FILE: database/migrations/2014_10_12_000000_create_users_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
================================================
FILE: database/migrations/2014_10_12_100000_create_password_resets_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}
================================================
FILE: database/migrations/2019_08_19_000000_create_failed_jobs_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFailedJobsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('failed_jobs', function (Blueprint $table) {
$table->id();
$table->string('uuid')->unique();
$table->text('connection');
$table->text('queue');
$table->longText('payload');
$table->longText('exception');
$table->timestamp('failed_at')->useCurrent();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('failed_jobs');
}
}
================================================
FILE: database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePersonalAccessTokensTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('personal_access_tokens', function (Blueprint $table) {
$table->id();
$table->morphs('tokenable');
$table->string('name');
$table->string('token', 64)->unique();
$table->text('abilities')->nullable();
$table->timestamp('last_used_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('personal_access_tokens');
}
}
================================================
FILE: database/migrations/2021_11_19_154310_create_statuses_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateStatusesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('statuses', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('statuses');
}
}
================================================
FILE: database/migrations/2021_11_20_154310_create_categories_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCategoriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('categories');
}
}
================================================
FILE: database/migrations/2021_11_21_154310_create_ideas_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateIdeasTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('ideas', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
$table->foreignId('category_id')->constrained();
$table->foreignId('status_id')->constrained();
$table->string('title');
$table->string('slug')->nullable();
$table->text('description');
$table->integer('spam_reports')->default(0);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('ideas');
}
}
================================================
FILE: database/migrations/2021_11_24_195521_create_votes_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateVotesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('votes', function (Blueprint $table) {
$table->id();
$table->unique(['idea_id', 'user_id']);
$table->foreignId('idea_id')->constrained();
$table->foreignId('user_id')->constrained();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('votes');
}
}
================================================
FILE: database/migrations/2021_12_19_130759_create_comments_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCommentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
$table->foreignId('idea_id')->constrained();
$table->foreignId('status_id')->constrained();
$table->text('body');
$table->integer('spam_reports')->default(0);
$table->boolean('is_status_update')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('comments');
}
}
================================================
FILE: database/migrations/2021_12_28_133951_create_notifications_table.php
================================================
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateNotificationsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('notifications', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('type');
$table->morphs('notifiable');
$table->text('data');
$table->timestamp('read_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('notifications');
}
}
================================================
FILE: database/seeders/CategorySeeder.php
================================================
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class CategorySeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
================================================
FILE: database/seeders/CommentSeeder.php
================================================
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class CommentSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
================================================
FILE: database/seeders/DatabaseSeeder.php
================================================
<?php
namespace Database\Seeders;
use App\Models\Category;
use App\Models\Comment;
use App\Models\Idea;
use App\Models\Status;
use App\Models\User;
use App\Models\Vote;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
User::factory()->create([
'name' => 'luka',
'email' => 'lukabrazi@redberry.ge',
'password' => Hash::make('lukakiller123'),
]);
User::factory(19)->create();
Category::factory()->create(['name' => 'Category 1']);
Category::factory()->create(['name' => 'Category 2']);
Category::factory()->create(['name' => 'Category 3']);
Category::factory()->create(['name' => 'Category 4']);
Status::factory()->create(['name' => 'Open']);
Status::factory()->create(['name' => 'Considering']);
Status::factory()->create(['name' => 'In Progress']);
Status::factory()->create(['name' => 'Implemented']);
Status::factory()->create(['name' => 'Closed']);
Idea::factory(100)->existing()->create();
// Generate unique votes. Ensure idea_id and user_id are unique for each row
foreach (range(1, 20) as $user_id) {
foreach (range(1, 100) as $idea_id) {
if ($idea_id % 2 === 0) {
Vote::factory()->create([
'user_id' => $user_id,
'idea_id' => $idea_id,
]);
}
}
}
// Generate comments for ideas
foreach (Idea::all() as $idea) {
Comment::factory(5)->existing()->create(['idea_id' => $idea->id]);
}
}
}
================================================
FILE: database/seeders/IdeaSeeder.php
================================================
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class IdeaSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
================================================
FILE: database/seeders/StatusSeeder.php
================================================
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class StatusSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
================================================
FILE: database/seeders/VoteSeeder.php
================================================
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class VoteSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
================================================
FILE: package.json
================================================
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"devDependencies": {
"@tailwindcss/forms": "^0.2.1",
"alpinejs": "^3.4.2",
"autoprefixer": "^10.1.0",
"axios": "^0.21",
"laravel-mix": "^6.0.6",
"lodash": "^4.17.19",
"postcss": "^8.2.1",
"postcss-import": "^12.0.1",
"tailwindcss": "^2.0.2"
},
"dependencies": {
"@tailwindcss/line-clamp": "^0.2.2"
}
}
================================================
FILE: phpunit.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./app</directory>
</include>
</coverage>
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>
================================================
FILE: public/.htaccess
================================================
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
================================================
FILE: public/css/app.css
================================================
/*! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com */
/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
/*
Document
========
*/
/**
Use a better box model (opinionated).
*/
*,
::before,
::after {
box-sizing: border-box;
}
/**
Use a more readable tab size (opinionated).
*/
html {
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
}
/**
1. Correct the line height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/*
Sections
========
*/
/**
Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
*/
body {
font-family:
system-ui,
-apple-system, /* Firefox supports this but not yet `system-ui` */
'Segoe UI',
Roboto,
Helvetica,
Arial,
sans-serif,
'Apple Color Emoji',
'Segoe UI Emoji';
}
/*
Grouping content
================
*/
/**
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
*/
hr {
height: 0; /* 1 */
color: inherit; /* 2 */
}
/*
Text-level semantics
====================
*/
/**
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
/**
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
2. Correct the odd 'em' font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family:
ui-monospace,
SFMono-Regular,
Consolas,
'Liberation Mono',
Menlo,
monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
Prevent 'sub' and 'sup' elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
Tabular data
============
*/
/**
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
*/
table {
text-indent: 0; /* 1 */
border-color: inherit; /* 2 */
}
/*
Forms
=====
*/
/**
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
Remove the inheritance of text transform in Edge and Firefox.
1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
}
/**
Remove the inner border and padding in Firefox.
*/
::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
Restore the focus styles unset by the previous rule.
*/
:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
Remove the additional ':invalid' styles in Firefox.
See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737
*/
:-moz-ui-invalid {
box-shadow: none;
}
/**
Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.
*/
legend {
padding: 0;
}
/**
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/**
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/**
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to 'inherit' in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/*
Interactive
===========
*/
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
/**
* Manually forked from SUIT CSS Base: https://github.com/suitcss/base
* A thin layer on top of normalize.css that provides a starting point more
* suitable for web applications.
*/
/**
* Removes the default spacing and border for appropriate elements.
*/
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
margin: 0;
}
button {
background-color: transparent;
background-image: none;
}
fieldset {
margin: 0;
padding: 0;
}
ol,
ul {
list-style: none;
margin: 0;
padding: 0;
}
/**
* Tailwind custom reset styles
*/
/**
* 1. Use the user's configured `sans` font-family (with Tailwind's default
* sans-serif font stack as a fallback) as a sane default.
* 2. Use Tailwind's default "normal" line-height so the user isn't forced
* to override it to ensure consistency even when using the default theme.
*/
html {
font-family: Open Sans, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 1 */
line-height: 1.5; /* 2 */
}
/**
* Inherit font-family and line-height from `html` so users can set them as
* a class directly on the `html` element.
*/
body {
font-family: inherit;
line-height: inherit;
}
/**
* 1. Prevent padding and border from affecting element width.
*
* We used to set this in the html element and inherit from
* the parent element for everything else. This caused issues
* in shadow-dom-enhanced elements like <details> where the content
* is wrapped by a div with box-sizing set to `content-box`.
*
* https://github.com/mozdevs/cssremedy/issues/4
*
*
* 2. Allow adding a border to an element by just adding a border-width.
*
* By default, the way the browser specifies that an element should have no
* border is by setting it's border-style to `none` in the user-agent
* stylesheet.
*
* In order to easily add borders to elements by just setting the `border-width`
* property, we change the default border-style for all elements to `solid`, and
* use border-width to hide them instead. This way our `border` utilities only
* need to set the `border-width` property instead of the entire `border`
* shorthand, making our border utilities much more straightforward to compose.
*
* https://github.com/tailwindcss/tailwindcss/pull/116
*/
*,
::before,
::after {
box-sizing: border-box; /* 1 */
border-width: 0; /* 2 */
border-style: solid; /* 2 */
border-color: currentColor; /* 2 */
}
/*
* Ensure horizontal rules are visible by default
*/
hr {
border-top-width: 1px;
}
/**
* Undo the `border-style: none` reset that Normalize applies to images so that
* our `border-{width}` utilities have the expected effect.
*
* The Normalize reset is unnecessary for us since we default the border-width
* to 0 on all elements.
*
* https://github.com/tailwindcss/tailwindcss/issues/362
*/
img {
border-style: solid;
}
textarea {
resize: vertical;
}
input::-moz-placeholder, textarea::-moz-placeholder {
opacity: 1;
color: #a3a3a3;
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
opacity: 1;
color: #a3a3a3;
}
input::placeholder,
textarea::placeholder {
opacity: 1;
color: #a3a3a3;
}
button,
[role="button"] {
cursor: pointer;
}
/**
* Override legacy focus reset from Normalize with modern Firefox focus styles.
*
* This is actually an improvement over the new defaults in Firefox in our testing,
* as it triggers the better focus styles even for links, which still use a dotted
* outline in Firefox by default.
*/
:-moz-focusring {
outline: auto;
}
table {
border-collapse: collapse;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit;
}
/**
* Reset links to optimize for opt-in styling instead of
* opt-out.
*/
a {
color: inherit;
text-decoration: inherit;
}
/**
* Reset form element properties that are easy to forget to
* style explicitly so you don't inadvertently introduce
* styles that deviate from your design system. These styles
* supplement a partial reset that is already applied by
* normalize.css.
*/
button,
input,
optgroup,
select,
textarea {
padding: 0;
line-height: inherit;
color: inherit;
}
/**
* Use the configured 'mono' font family for elements that
* are expected to be rendered with a monospace font, falling
* back to the system monospace stack if there is no configured
* 'mono' font family.
*/
pre,
code,
kbd,
samp {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
/**
* 1. Make replaced elements `display: block` by default as that's
* the behavior you want almost all of the time. Inspired by
* CSS Remedy, with `svg` added as well.
*
* https://github.com/mozdevs/cssremedy/issues/14
*
* 2. Add `vertical-align: middle` to align replaced elements more
* sensibly by default when overriding `display` by adding a
* utility like `inline`.
*
* This can trigger a poorly considered linting error in some
* tools but is included by design.
*
* https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block; /* 1 */
vertical-align: middle; /* 2 */
}
/**
* Constrain images and videos to the parent width and preserve
* their intrinsic aspect ratio.
*
* https://github.com/mozdevs/cssremedy/issues/14
*/
img,
video {
max-width: 100%;
height: auto;
}
/**
* Ensure the default browser behavior of the `hidden` attribute.
*/
[hidden] {
display: none;
}
*, ::before, ::after {
--tw-border-opacity: 1;
border-color: rgba(229, 229, 229, var(--tw-border-opacity));
}
[type='text'],
[type='email'],
[type='url'],
[type='password'],
[type='number'],
[type='date'],
[type='datetime-local'],
[type='month'],
[type='search'],
[type='tel'],
[type='time'],
[type='week'],
[multiple],
textarea,
select
{
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-color: #fff;
border-color: #737373;
border-width: 1px;
border-radius: 0px;
padding-top: 0.5rem;
padding-right: 0.75rem;
padding-bottom: 0.5rem;
padding-left: 0.75rem;
font-size: 1rem;
line-height: 1.5rem;
}
[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {
outline: 2px solid transparent;
outline-offset: 2px;
--tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: #2563eb;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
border-color: #2563eb;
}
input::-moz-placeholder, textarea::-moz-placeholder {
color: #737373;
opacity: 1;
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
color: #737373;
opacity: 1;
}
input::placeholder, textarea::placeholder {
color: #737373;
opacity: 1;
}
::-webkit-datetime-edit-fields-wrapper {
padding: 0;
}
::-webkit-date-and-time-value {
min-height: 1.5em;
}
select {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23737373' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
background-position: right 0.5rem center;
background-repeat: no-repeat;
background-size: 1.5em 1.5em;
padding-right: 2.5rem;
-webkit-print-color-adjust: exact;
color-adjust: exact;
}
[multiple] {
background-image: initial;
background-position: initial;
background-repeat: unset;
background-size: initial;
padding-right: 0.75rem;
-webkit-print-color-adjust: unset;
color-adjust: unset;
}
[type='checkbox'],
[type='radio']
{
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
padding: 0;
-webkit-print-color-adjust: exact;
color-adjust: exact;
display: inline-block;
vertical-align: middle;
background-origin: border-box;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
flex-shrink: 0;
height: 1rem;
width: 1rem;
color: #2563eb;
background-color: #fff;
border-color: #737373;
border-width: 1px;
}
[type='checkbox'] {
border-radius: 0px;
}
[type='radio'] {
border-radius: 100%;
}
[type='checkbox']:focus,
[type='radio']:focus
{
outline: 2px solid transparent;
outline-offset: 2px;
--tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
--tw-ring-offset-width: 2px;
--tw-ring-offset-color: #fff;
--tw-ring-color: #2563eb;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
[type='checkbox']:checked,
[type='radio']:checked
{
border-color: transparent;
background-color: currentColor;
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
}
[type='checkbox']:checked {
background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
}
[type='radio']:checked {
background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
}
[type='checkbox']:checked:hover,
[type='checkbox']:checked:focus,
[type='radio']:checked:hover,
[type='radio']:checked:focus
{
border-color: transparent;
background-color: currentColor;
}
[type='checkbox']:indeterminate {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");
border-color: transparent;
background-color: currentColor;
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
}
[type='checkbox']:indeterminate:hover,
[type='checkbox']:indeterminate:focus
{
border-color: transparent;
background-color: currentColor;
}
[type='file'] {
background: unset;
border-color: inherit;
border-width: 0;
border-radius: 0;
padding: 0;
font-size: unset;
line-height: inherit;
}
[type='file']:focus {
outline: 1px auto -webkit-focus-ring-color;
}
.container {
width: 100%;
}
@media (min-width: 640px) {
.container {
max-width: 640px;
}
}
@media (min-width: 768px) {
.container {
max-width: 768px;
}
}
@media (min-width: 1024px) {
.container {
max-width: 1024px;
}
}
@media (min-width: 1280px) {
.container {
max-width: 1280px;
}
}
@media (min-width: 1536px) {
.container {
max-width: 1536px;
}
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
.not-sr-only {
position: static;
width: auto;
height: auto;
padding: 0;
margin: 0;
overflow: visible;
clip: auto;
white-space: normal;
}
.focus-within\:sr-only:focus-within {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
.focus-within\:not-sr-only:focus-within {
position: static;
width: auto;
height: auto;
padding: 0;
margin: 0;
overflow: visible;
clip: auto;
white-space: normal;
}
.focus\:sr-only:focus {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
.focus\:not-sr-only:focus {
position: static;
width: auto;
height: auto;
padding: 0;
margin: 0;
overflow: visible;
clip: auto;
white-space: normal;
}
.pointer-events-none {
pointer-events: none;
}
.pointer-events-auto {
pointer-events: auto;
}
.visible {
visibility: visible;
}
.invisible {
visibility: hidden;
}
.static {
position: static;
}
.fixed {
position: fixed;
}
.absolute {
position: absolute;
gitextract_o66uexm6/ ├── .editorconfig ├── .gitattributes ├── .gitignore ├── .styleci.yml ├── README.md ├── app/ │ ├── Console/ │ │ └── Kernel.php │ ├── Exceptions/ │ │ ├── DuplicateVoteException.php │ │ ├── Handler.php │ │ └── VoteNotFoundException.php │ ├── Http/ │ │ ├── Controllers/ │ │ │ ├── Auth/ │ │ │ │ ├── AuthenticatedSessionController.php │ │ │ │ ├── ConfirmablePasswordController.php │ │ │ │ ├── EmailVerificationNotificationController.php │ │ │ │ ├── EmailVerificationPromptController.php │ │ │ │ ├── NewPasswordController.php │ │ │ │ ├── PasswordResetLinkController.php │ │ │ │ ├── RegisteredUserController.php │ │ │ │ └── VerifyEmailController.php │ │ │ ├── CategoryController.php │ │ │ ├── CommentController.php │ │ │ ├── Controller.php │ │ │ ├── IdeaController.php │ │ │ ├── StatusController.php │ │ │ └── VoteController.php │ │ ├── Kernel.php │ │ ├── Livewire/ │ │ │ ├── AddComment.php │ │ │ ├── CommentNotifications.php │ │ │ ├── CreateIdea.php │ │ │ ├── DeleteComment.php │ │ │ ├── DeleteIdea.php │ │ │ ├── EditComment.php │ │ │ ├── EditIdea.php │ │ │ ├── IdeaComment.php │ │ │ ├── IdeaComments.php │ │ │ ├── IdeaIndex.php │ │ │ ├── IdeaShow.php │ │ │ ├── IdeasIndex.php │ │ │ ├── MarkCommentAsNotSpam.php │ │ │ ├── MarkCommentAsSpam.php │ │ │ ├── MarkIdeaAsNotSpam.php │ │ │ ├── MarkIdeaAsSpam.php │ │ │ ├── SetStatus.php │ │ │ └── StatusFilters.php │ │ ├── Middleware/ │ │ │ ├── Authenticate.php │ │ │ ├── EncryptCookies.php │ │ │ ├── PreventRequestsDuringMaintenance.php │ │ │ ├── RedirectIfAuthenticated.php │ │ │ ├── TrimStrings.php │ │ │ ├── TrustHosts.php │ │ │ ├── TrustProxies.php │ │ │ └── VerifyCsrfToken.php │ │ └── Requests/ │ │ ├── Auth/ │ │ │ └── LoginRequest.php │ │ ├── StoreCategoryRequest.php │ │ ├── StoreCommentRequest.php │ │ ├── StoreIdeaRequest.php │ │ ├── StoreStatusRequest.php │ │ ├── StoreVoteRequest.php │ │ ├── UpdateCategoryRequest.php │ │ ├── UpdateCommentRequest.php │ │ ├── UpdateIdeaRequest.php │ │ ├── UpdateStatusRequest.php │ │ └── UpdateVoteRequest.php │ ├── Jobs/ │ │ └── NotifyAllVoters.php │ ├── Mail/ │ │ └── IdeaStatusUpdatedMailable.php │ ├── Models/ │ │ ├── Category.php │ │ ├── Comment.php │ │ ├── Idea.php │ │ ├── Status.php │ │ ├── User.php │ │ └── Vote.php │ ├── Notifications/ │ │ └── CommentAdded.php │ ├── Policies/ │ │ ├── CategoryPolicy.php │ │ ├── CommentPolicy.php │ │ ├── IdeaPolicy.php │ │ ├── StatusPolicy.php │ │ └── VotePolicy.php │ ├── Providers/ │ │ ├── AppServiceProvider.php │ │ ├── AuthServiceProvider.php │ │ ├── BroadcastServiceProvider.php │ │ ├── EventServiceProvider.php │ │ ├── HorizonServiceProvider.php │ │ └── RouteServiceProvider.php │ └── View/ │ └── Components/ │ ├── AppLayout.php │ └── GuestLayout.php ├── artisan ├── bootstrap/ │ ├── app.php │ └── cache/ │ └── .gitignore ├── composer.json ├── config/ │ ├── app.php │ ├── auth.php │ ├── broadcasting.php │ ├── cache.php │ ├── cors.php │ ├── database.php │ ├── filesystems.php │ ├── hashing.php │ ├── horizon.php │ ├── logging.php │ ├── mail.php │ ├── queue.php │ ├── sanctum.php │ ├── services.php │ ├── session.php │ └── view.php ├── database/ │ ├── .gitignore │ ├── factories/ │ │ ├── CategoryFactory.php │ │ ├── CommentFactory.php │ │ ├── IdeaFactory.php │ │ ├── StatusFactory.php │ │ ├── UserFactory.php │ │ └── VoteFactory.php │ ├── migrations/ │ │ ├── 2014_10_12_000000_create_users_table.php │ │ ├── 2014_10_12_100000_create_password_resets_table.php │ │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php │ │ ├── 2021_11_19_154310_create_statuses_table.php │ │ ├── 2021_11_20_154310_create_categories_table.php │ │ ├── 2021_11_21_154310_create_ideas_table.php │ │ ├── 2021_11_24_195521_create_votes_table.php │ │ ├── 2021_12_19_130759_create_comments_table.php │ │ └── 2021_12_28_133951_create_notifications_table.php │ └── seeders/ │ ├── CategorySeeder.php │ ├── CommentSeeder.php │ ├── DatabaseSeeder.php │ ├── IdeaSeeder.php │ ├── StatusSeeder.php │ └── VoteSeeder.php ├── package.json ├── phpunit.xml ├── public/ │ ├── .htaccess │ ├── css/ │ │ └── app.css │ ├── index.php │ ├── js/ │ │ └── app.js │ ├── mix-manifest.json │ ├── robots.txt │ ├── vendor/ │ │ └── horizon/ │ │ ├── app-dark.css │ │ ├── app.css │ │ ├── app.js │ │ └── mix-manifest.json │ └── web.config ├── resources/ │ ├── css/ │ │ └── app.css │ ├── js/ │ │ ├── app.js │ │ └── bootstrap.js │ ├── lang/ │ │ └── en/ │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php │ └── views/ │ ├── auth/ │ │ ├── confirm-password.blade.php │ │ ├── forgot-password.blade.php │ │ ├── login.blade.php │ │ ├── register.blade.php │ │ ├── reset-password.blade.php │ │ └── verify-email.blade.php │ ├── components/ │ │ ├── application-logo.blade.php │ │ ├── auth-card.blade.php │ │ ├── auth-session-status.blade.php │ │ ├── auth-validation-errors.blade.php │ │ ├── button.blade.php │ │ ├── dropdown-link.blade.php │ │ ├── dropdown.blade.php │ │ ├── input.blade.php │ │ ├── label.blade.php │ │ ├── nav-link.blade.php │ │ ├── notification-success.blade.php │ │ └── responsive-nav-link.blade.php │ ├── dashboard.blade.php │ ├── emails/ │ │ ├── comment-added.blade.php │ │ ├── idea-status/ │ │ │ └── updated.blade.php │ │ └── idea-status-updated.blade.php │ ├── idea/ │ │ ├── index.blade.php │ │ └── show.blade.php │ ├── layouts/ │ │ ├── app.blade.php │ │ ├── guest.blade.php │ │ └── navigation.blade.php │ ├── livewire/ │ │ ├── add-comment.blade.php │ │ ├── comment-notifications.blade.php │ │ ├── create-idea.blade.php │ │ ├── delete-comment.blade.php │ │ ├── delete-idea.blade.php │ │ ├── edit-comment.blade.php │ │ ├── edit-idea.blade.php │ │ ├── idea-comment.blade.php │ │ ├── idea-comments.blade.php │ │ ├── idea-index.blade.php │ │ ├── idea-show.blade.php │ │ ├── ideas-index.blade.php │ │ ├── mark-comment-as-not-spam.blade.php │ │ ├── mark-comment-as-spam.blade.php │ │ ├── mark-idea-as-not-spam.blade.php │ │ ├── mark-idea-as-spam.blade.php │ │ ├── set-status.blade.php │ │ └── status-filters.blade.php │ └── welcome.blade.php ├── routes/ │ ├── api.php │ ├── auth.php │ ├── channels.php │ ├── console.php │ └── web.php ├── server.php ├── storage/ │ ├── app/ │ │ └── .gitignore │ ├── debugbar/ │ │ └── .gitignore │ ├── framework/ │ │ ├── .gitignore │ │ ├── cache/ │ │ │ └── .gitignore │ │ ├── sessions/ │ │ │ └── .gitignore │ │ ├── testing/ │ │ │ └── .gitignore │ │ └── views/ │ │ └── .gitignore │ └── logs/ │ └── .gitignore ├── tailwind.config.js ├── tests/ │ ├── CreatesApplication.php │ ├── Feature/ │ │ ├── Auth/ │ │ │ ├── AuthenticationTest.php │ │ │ ├── EmailVerificationTest.php │ │ │ ├── PasswordConfirmationTest.php │ │ │ ├── PasswordResetTest.php │ │ │ └── RegistrationTest.php │ │ ├── CategoryFiltersTest.php │ │ ├── Comments/ │ │ │ ├── AddCommentTest.php │ │ │ ├── DeleteCommentTest.php │ │ │ ├── EditCommentTest.php │ │ │ └── ShowCommentsTest.php │ │ ├── CreateIdeaTest.php │ │ ├── DeleteIdeaTest.php │ │ ├── EditIdeaTest.php │ │ ├── OtherFiltersTest.php │ │ ├── SearchFilterTest.php │ │ ├── ShowIdeasTest.php │ │ ├── SpamManagementTest.php │ │ ├── StatusFiltersTest.php │ │ ├── VoteIndexPageTest.php │ │ └── VoteShowPageTest.php │ ├── TestCase.php │ ├── Tests/ │ │ └── Feature/ │ │ └── AdminSetStatusTest.php │ └── Unit/ │ ├── GravatarTest.php │ ├── IdeaTest.php │ ├── Jobs/ │ │ └── NotifyAllVotersTest.php │ ├── StatusTest.php │ └── UserTest.php └── webpack.mix.js
Showing preview only (214K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2437 symbols across 130 files)
FILE: app/Console/Kernel.php
class Kernel (line 8) | class Kernel extends ConsoleKernel
method schedule (line 25) | protected function schedule(Schedule $schedule)
method commands (line 35) | protected function commands()
FILE: app/Exceptions/DuplicateVoteException.php
class DuplicateVoteException (line 7) | class DuplicateVoteException extends Exception
FILE: app/Exceptions/Handler.php
class Handler (line 8) | class Handler extends ExceptionHandler
method register (line 35) | public function register()
FILE: app/Exceptions/VoteNotFoundException.php
class VoteNotFoundException (line 7) | class VoteNotFoundException extends Exception
FILE: app/Http/Controllers/Auth/AuthenticatedSessionController.php
class AuthenticatedSessionController (line 11) | class AuthenticatedSessionController extends Controller
method create (line 18) | public function create()
method store (line 29) | public function store(LoginRequest $request)
method destroy (line 44) | public function destroy(Request $request)
FILE: app/Http/Controllers/Auth/ConfirmablePasswordController.php
class ConfirmablePasswordController (line 11) | class ConfirmablePasswordController extends Controller
method show (line 18) | public function show()
method store (line 29) | public function store(Request $request)
FILE: app/Http/Controllers/Auth/EmailVerificationNotificationController.php
class EmailVerificationNotificationController (line 9) | class EmailVerificationNotificationController extends Controller
method store (line 17) | public function store(Request $request)
FILE: app/Http/Controllers/Auth/EmailVerificationPromptController.php
class EmailVerificationPromptController (line 9) | class EmailVerificationPromptController extends Controller
method __invoke (line 17) | public function __invoke(Request $request)
FILE: app/Http/Controllers/Auth/NewPasswordController.php
class NewPasswordController (line 13) | class NewPasswordController extends Controller
method create (line 21) | public function create(Request $request)
method store (line 34) | public function store(Request $request)
FILE: app/Http/Controllers/Auth/PasswordResetLinkController.php
class PasswordResetLinkController (line 9) | class PasswordResetLinkController extends Controller
method create (line 16) | public function create()
method store (line 29) | public function store(Request $request)
FILE: app/Http/Controllers/Auth/RegisteredUserController.php
class RegisteredUserController (line 14) | class RegisteredUserController extends Controller
method create (line 21) | public function create()
method store (line 34) | public function store(Request $request)
FILE: app/Http/Controllers/Auth/VerifyEmailController.php
class VerifyEmailController (line 10) | class VerifyEmailController extends Controller
method __invoke (line 18) | public function __invoke(EmailVerificationRequest $request)
FILE: app/Http/Controllers/CategoryController.php
class CategoryController (line 9) | class CategoryController extends Controller
method index (line 16) | public function index()
method create (line 26) | public function create()
method store (line 37) | public function store(StoreCategoryRequest $request)
method show (line 48) | public function show(Category $category)
method edit (line 59) | public function edit(Category $category)
method update (line 71) | public function update(UpdateCategoryRequest $request, Category $categ...
method destroy (line 82) | public function destroy(Category $category)
FILE: app/Http/Controllers/CommentController.php
class CommentController (line 9) | class CommentController extends Controller
method index (line 16) | public function index()
method create (line 26) | public function create()
method store (line 37) | public function store(StoreCommentRequest $request)
method show (line 48) | public function show(Comment $comment)
method edit (line 59) | public function edit(Comment $comment)
method update (line 71) | public function update(UpdateCommentRequest $request, Comment $comment)
method destroy (line 82) | public function destroy(Comment $comment)
FILE: app/Http/Controllers/Controller.php
class Controller (line 10) | class Controller extends BaseController
FILE: app/Http/Controllers/IdeaController.php
class IdeaController (line 13) | class IdeaController extends Controller
method index (line 19) | public function index()
method create (line 29) | public function create()
method store (line 40) | public function store(StoreIdeaRequest $request)
method show (line 51) | public function show(Idea $idea)
method edit (line 68) | public function edit(Idea $idea)
method update (line 80) | public function update(UpdateIdeaRequest $request, Idea $idea)
method destroy (line 91) | public function destroy(Idea $idea)
FILE: app/Http/Controllers/StatusController.php
class StatusController (line 9) | class StatusController extends Controller
method index (line 16) | public function index()
method create (line 26) | public function create()
method store (line 37) | public function store(StoreStatusRequest $request)
method show (line 48) | public function show(Status $status)
method edit (line 59) | public function edit(Status $status)
method update (line 71) | public function update(UpdateStatusRequest $request, Status $status)
method destroy (line 82) | public function destroy(Status $status)
FILE: app/Http/Controllers/VoteController.php
class VoteController (line 9) | class VoteController extends Controller
method index (line 16) | public function index()
method create (line 26) | public function create()
method store (line 37) | public function store(StoreVoteRequest $request)
method show (line 48) | public function show(Vote $vote)
method edit (line 59) | public function edit(Vote $vote)
method update (line 71) | public function update(UpdateVoteRequest $request, Vote $vote)
method destroy (line 82) | public function destroy(Vote $vote)
FILE: app/Http/Kernel.php
class Kernel (line 7) | class Kernel extends HttpKernel
FILE: app/Http/Livewire/AddComment.php
class AddComment (line 11) | class AddComment extends Component
method mount (line 20) | public function mount(Idea $idea)
method addComment (line 25) | public function addComment()
method render (line 47) | public function render()
FILE: app/Http/Livewire/CommentNotifications.php
class CommentNotifications (line 10) | class CommentNotifications extends Component
method mount (line 19) | public function mount()
method getNotificationCount (line 26) | public function getNotificationCount()
method markAsRead (line 35) | public function markAsRead($notificationId)
method markAllAsRead (line 53) | public function markAllAsRead()
method getNotifications (line 63) | public function getNotifications()
method render (line 70) | public function render()
FILE: app/Http/Livewire/CreateIdea.php
class CreateIdea (line 10) | class CreateIdea extends Component
method createIdea (line 22) | public function createIdea()
method render (line 45) | public function render()
FILE: app/Http/Livewire/DeleteComment.php
class DeleteComment (line 9) | class DeleteComment extends Component
method setDeleteComment (line 15) | public function setDeleteComment($commentId)
method deleteComment (line 22) | public function deleteComment()
method render (line 34) | public function render()
FILE: app/Http/Livewire/DeleteIdea.php
class DeleteIdea (line 11) | class DeleteIdea extends Component
method mount (line 15) | public function mount(Idea $idea)
method deleteIdea (line 20) | public function deleteIdea()
method render (line 37) | public function render()
FILE: app/Http/Livewire/EditComment.php
class EditComment (line 9) | class EditComment extends Component
method setEditComment (line 20) | public function setEditComment($commentId)
method updateComment (line 28) | public function updateComment()
method render (line 42) | public function render()
FILE: app/Http/Livewire/EditIdea.php
class EditIdea (line 11) | class EditIdea extends Component
method mount (line 24) | public function mount(Idea $idea)
method updateIdea (line 32) | public function updateIdea()
method render (line 49) | public function render()
FILE: app/Http/Livewire/IdeaComment.php
class IdeaComment (line 8) | class IdeaComment extends Component
method commentWasUpdated (line 19) | public function commentWasUpdated()
method commentWasMarkedAsSpam (line 24) | public function commentWasMarkedAsSpam()
method commentWasMarkedAsNotSpam (line 29) | public function commentWasMarkedAsNotSpam()
method mount (line 34) | public function mount(Comment $comment, $ideaUserId)
method render (line 40) | public function render()
FILE: app/Http/Livewire/IdeaComments.php
class IdeaComments (line 10) | class IdeaComments extends Component
method commentWasAdded (line 18) | public function commentWasAdded()
method statusWasUpdated (line 24) | public function statusWasUpdated()
method commentWasDeleted (line 30) | public function commentWasDeleted()
method mount (line 36) | public function mount(Idea $idea)
method render (line 41) | public function render()
FILE: app/Http/Livewire/IdeaIndex.php
class IdeaIndex (line 10) | class IdeaIndex extends Component
method mount (line 16) | public function mount(Idea $idea, $votesCount)
method vote (line 23) | public function vote()
method render (line 48) | public function render()
FILE: app/Http/Livewire/IdeaShow.php
class IdeaShow (line 10) | class IdeaShow extends Component
method mount (line 25) | public function mount(Idea $idea, $votesCount)
method vote (line 32) | public function vote()
method statusWasUpdated (line 57) | public function statusWasUpdated()
method ideaWasUpdated (line 62) | public function ideaWasUpdated()
method ideaWasMarkedAsSpam (line 67) | public function ideaWasMarkedAsSpam()
method ideaWasMarkedAsNotSpam (line 72) | public function ideaWasMarkedAsNotSpam()
method commentWasAdded (line 77) | public function commentWasAdded()
method commentWasDeleted (line 82) | public function commentWasDeleted()
method render (line 87) | public function render()
FILE: app/Http/Livewire/IdeasIndex.php
class IdeasIndex (line 12) | class IdeasIndex extends Component
method mount (line 30) | public function mount()
method updatedFilter (line 35) | public function updatedFilter()
method updatingSearch (line 46) | public function updatingSearch()
method queryStringUpdatedStatus (line 51) | public function queryStringUpdatedStatus($newStatus)
method render (line 57) | public function render()
FILE: app/Http/Livewire/MarkCommentAsNotSpam.php
class MarkCommentAsNotSpam (line 9) | class MarkCommentAsNotSpam extends Component
method setMarkAsNotSpamComment (line 15) | public function setMarkAsNotSpamComment($commentId)
method markAsNotSpam (line 22) | public function markAsNotSpam()
method render (line 34) | public function render()
FILE: app/Http/Livewire/MarkCommentAsSpam.php
class MarkCommentAsSpam (line 9) | class MarkCommentAsSpam extends Component
method setMarkAsSpamComment (line 15) | public function setMarkAsSpamComment($commentId)
method markAsSpam (line 22) | public function markAsSpam()
method render (line 34) | public function render()
FILE: app/Http/Livewire/MarkIdeaAsNotSpam.php
class MarkIdeaAsNotSpam (line 9) | class MarkIdeaAsNotSpam extends Component
method mount (line 13) | public function mount(Idea $idea)
method markAsNotSpam (line 18) | public function markAsNotSpam()
method render (line 30) | public function render()
FILE: app/Http/Livewire/MarkIdeaAsSpam.php
class MarkIdeaAsSpam (line 9) | class MarkIdeaAsSpam extends Component
method mount (line 13) | public function mount(Idea $idea)
method markAsSpam (line 18) | public function markAsSpam()
method render (line 30) | public function render()
FILE: app/Http/Livewire/SetStatus.php
class SetStatus (line 13) | class SetStatus extends Component
method mount (line 20) | public function mount(Idea $idea)
method setStatus (line 26) | public function setStatus()
method render (line 52) | public function render()
FILE: app/Http/Livewire/StatusFilters.php
class StatusFilters (line 9) | class StatusFilters extends Component
method mount (line 14) | public function mount()
method setStatus (line 24) | public function setStatus($newStatus)
method getPreviousRouteName (line 37) | private function getPreviousRouteName()
method render (line 42) | public function render()
FILE: app/Http/Middleware/Authenticate.php
class Authenticate (line 7) | class Authenticate extends Middleware
method redirectTo (line 15) | protected function redirectTo($request)
FILE: app/Http/Middleware/EncryptCookies.php
class EncryptCookies (line 7) | class EncryptCookies extends Middleware
FILE: app/Http/Middleware/PreventRequestsDuringMaintenance.php
class PreventRequestsDuringMaintenance (line 7) | class PreventRequestsDuringMaintenance extends Middleware
FILE: app/Http/Middleware/RedirectIfAuthenticated.php
class RedirectIfAuthenticated (line 10) | class RedirectIfAuthenticated
method handle (line 20) | public function handle(Request $request, Closure $next, ...$guards)
FILE: app/Http/Middleware/TrimStrings.php
class TrimStrings (line 7) | class TrimStrings extends Middleware
FILE: app/Http/Middleware/TrustHosts.php
class TrustHosts (line 7) | class TrustHosts extends Middleware
method hosts (line 14) | public function hosts()
FILE: app/Http/Middleware/TrustProxies.php
class TrustProxies (line 8) | class TrustProxies extends Middleware
FILE: app/Http/Middleware/VerifyCsrfToken.php
class VerifyCsrfToken (line 7) | class VerifyCsrfToken extends Middleware
FILE: app/Http/Requests/Auth/LoginRequest.php
class LoginRequest (line 12) | class LoginRequest extends FormRequest
method authorize (line 19) | public function authorize()
method rules (line 29) | public function rules()
method authenticate (line 44) | public function authenticate()
method ensureIsNotRateLimited (line 66) | public function ensureIsNotRateLimited()
method throttleKey (line 89) | public function throttleKey()
FILE: app/Http/Requests/StoreCategoryRequest.php
class StoreCategoryRequest (line 7) | class StoreCategoryRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/StoreCommentRequest.php
class StoreCommentRequest (line 7) | class StoreCommentRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/StoreIdeaRequest.php
class StoreIdeaRequest (line 7) | class StoreIdeaRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/StoreStatusRequest.php
class StoreStatusRequest (line 7) | class StoreStatusRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/StoreVoteRequest.php
class StoreVoteRequest (line 7) | class StoreVoteRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/UpdateCategoryRequest.php
class UpdateCategoryRequest (line 7) | class UpdateCategoryRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/UpdateCommentRequest.php
class UpdateCommentRequest (line 7) | class UpdateCommentRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/UpdateIdeaRequest.php
class UpdateIdeaRequest (line 7) | class UpdateIdeaRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/UpdateStatusRequest.php
class UpdateStatusRequest (line 7) | class UpdateStatusRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Http/Requests/UpdateVoteRequest.php
class UpdateVoteRequest (line 7) | class UpdateVoteRequest extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: app/Jobs/NotifyAllVoters.php
class NotifyAllVoters (line 15) | class NotifyAllVoters implements ShouldQueue
method __construct (line 25) | public function __construct(Idea $idea)
method handle (line 35) | public function handle()
FILE: app/Mail/IdeaStatusUpdatedMailable.php
class IdeaStatusUpdatedMailable (line 10) | class IdeaStatusUpdatedMailable extends Mailable
method __construct (line 21) | public function __construct(Idea $idea)
method build (line 31) | public function build()
FILE: app/Models/Category.php
class Category (line 8) | class Category extends Model
method ideas (line 12) | public function ideas()
FILE: app/Models/Comment.php
class Comment (line 8) | class Comment extends Model
method user (line 16) | public function user()
method idea (line 21) | public function idea()
method status (line 26) | public function status()
FILE: app/Models/Idea.php
class Idea (line 11) | class Idea extends Model
method comments (line 18) | public function comments()
method sluggable (line 28) | public function sluggable(): array
method user (line 37) | public function user()
method category (line 42) | public function category()
method status (line 47) | public function status()
method votes (line 52) | public function votes()
method isVotedByUser (line 57) | public function isVotedByUser(?User $user)
method vote (line 66) | public function vote(User $user)
method removeVote (line 78) | public function removeVote(User $user)
FILE: app/Models/Status.php
class Status (line 8) | class Status extends Model
method ideas (line 12) | public function ideas()
method getCount (line 17) | public static function getCount()
FILE: app/Models/User.php
class User (line 10) | class User extends Authenticatable
method ideas (line 44) | public function ideas()
method votes (line 49) | public function votes()
method comments (line 54) | public function comments()
method getAvatar (line 59) | public function getAvatar()
method isAdmin (line 74) | public function isAdmin()
FILE: app/Models/Vote.php
class Vote (line 8) | class Vote extends Model
FILE: app/Notifications/CommentAdded.php
class CommentAdded (line 11) | class CommentAdded extends Notification
method __construct (line 22) | public function __construct(Comment $comment)
method via (line 33) | public function via($notifiable)
method toMail (line 44) | public function toMail($notifiable)
method toArray (line 59) | public function toArray($notifiable)
FILE: app/Policies/CategoryPolicy.php
class CategoryPolicy (line 9) | class CategoryPolicy
method viewAny (line 19) | public function viewAny(User $user)
method view (line 31) | public function view(User $user, Category $category)
method create (line 42) | public function create(User $user)
method update (line 54) | public function update(User $user, Category $category)
method delete (line 66) | public function delete(User $user, Category $category)
method restore (line 78) | public function restore(User $user, Category $category)
method forceDelete (line 90) | public function forceDelete(User $user, Category $category)
FILE: app/Policies/CommentPolicy.php
class CommentPolicy (line 9) | class CommentPolicy
method viewAny (line 19) | public function viewAny(User $user)
method view (line 31) | public function view(User $user, Comment $comment)
method create (line 42) | public function create(User $user)
method update (line 54) | public function update(User $user, Comment $comment)
method delete (line 66) | public function delete(User $user, Comment $comment)
method restore (line 78) | public function restore(User $user, Comment $comment)
method forceDelete (line 90) | public function forceDelete(User $user, Comment $comment)
FILE: app/Policies/IdeaPolicy.php
class IdeaPolicy (line 9) | class IdeaPolicy
method viewAny (line 19) | public function viewAny(User $user)
method view (line 31) | public function view(User $user, Idea $idea)
method create (line 42) | public function create(User $user)
method update (line 54) | public function update(User $user, Idea $idea)
method delete (line 67) | public function delete(User $user, Idea $idea)
method restore (line 79) | public function restore(User $user, Idea $idea)
method forceDelete (line 91) | public function forceDelete(User $user, Idea $idea)
FILE: app/Policies/StatusPolicy.php
class StatusPolicy (line 9) | class StatusPolicy
method viewAny (line 19) | public function viewAny(User $user)
method view (line 31) | public function view(User $user, Status $status)
method create (line 42) | public function create(User $user)
method update (line 54) | public function update(User $user, Status $status)
method delete (line 66) | public function delete(User $user, Status $status)
method restore (line 78) | public function restore(User $user, Status $status)
method forceDelete (line 90) | public function forceDelete(User $user, Status $status)
FILE: app/Policies/VotePolicy.php
class VotePolicy (line 9) | class VotePolicy
method viewAny (line 19) | public function viewAny(User $user)
method view (line 31) | public function view(User $user, Vote $vote)
method create (line 42) | public function create(User $user)
method update (line 54) | public function update(User $user, Vote $vote)
method delete (line 66) | public function delete(User $user, Vote $vote)
method restore (line 78) | public function restore(User $user, Vote $vote)
method forceDelete (line 90) | public function forceDelete(User $user, Vote $vote)
FILE: app/Providers/AppServiceProvider.php
class AppServiceProvider (line 8) | class AppServiceProvider extends ServiceProvider
method register (line 15) | public function register()
method boot (line 25) | public function boot()
FILE: app/Providers/AuthServiceProvider.php
class AuthServiceProvider (line 8) | class AuthServiceProvider extends ServiceProvider
method boot (line 24) | public function boot()
FILE: app/Providers/BroadcastServiceProvider.php
class BroadcastServiceProvider (line 8) | class BroadcastServiceProvider extends ServiceProvider
method boot (line 15) | public function boot()
FILE: app/Providers/EventServiceProvider.php
class EventServiceProvider (line 10) | class EventServiceProvider extends ServiceProvider
method boot (line 28) | public function boot()
FILE: app/Providers/HorizonServiceProvider.php
class HorizonServiceProvider (line 9) | class HorizonServiceProvider extends HorizonApplicationServiceProvider
method boot (line 16) | public function boot()
method gate (line 34) | protected function gate()
FILE: app/Providers/RouteServiceProvider.php
class RouteServiceProvider (line 11) | class RouteServiceProvider extends ServiceProvider
method boot (line 36) | public function boot()
method configureRateLimiting (line 57) | protected function configureRateLimiting()
FILE: app/View/Components/AppLayout.php
class AppLayout (line 7) | class AppLayout extends Component
method render (line 14) | public function render()
FILE: app/View/Components/GuestLayout.php
class GuestLayout (line 7) | class GuestLayout extends Component
method render (line 14) | public function render()
FILE: database/factories/CategoryFactory.php
class CategoryFactory (line 7) | class CategoryFactory extends Factory
method definition (line 14) | public function definition()
FILE: database/factories/CommentFactory.php
class CommentFactory (line 10) | class CommentFactory extends Factory
method definition (line 17) | public function definition()
method existing (line 27) | public function existing()
FILE: database/factories/IdeaFactory.php
class IdeaFactory (line 10) | class IdeaFactory extends Factory
method definition (line 17) | public function definition()
method existing (line 28) | public function existing() {
FILE: database/factories/StatusFactory.php
class StatusFactory (line 7) | class StatusFactory extends Factory
method definition (line 14) | public function definition()
FILE: database/factories/UserFactory.php
class UserFactory (line 8) | class UserFactory extends Factory
method definition (line 15) | public function definition()
method unverified (line 31) | public function unverified()
FILE: database/factories/VoteFactory.php
class VoteFactory (line 7) | class VoteFactory extends Factory
method definition (line 14) | public function definition()
FILE: database/migrations/2014_10_12_000000_create_users_table.php
class CreateUsersTable (line 7) | class CreateUsersTable extends Migration
method up (line 14) | public function up()
method down (line 32) | public function down()
FILE: database/migrations/2014_10_12_100000_create_password_resets_table.php
class CreatePasswordResetsTable (line 7) | class CreatePasswordResetsTable extends Migration
method up (line 14) | public function up()
method down (line 28) | public function down()
FILE: database/migrations/2019_08_19_000000_create_failed_jobs_table.php
class CreateFailedJobsTable (line 7) | class CreateFailedJobsTable extends Migration
method up (line 14) | public function up()
method down (line 32) | public function down()
FILE: database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
class CreatePersonalAccessTokensTable (line 7) | class CreatePersonalAccessTokensTable extends Migration
method up (line 14) | public function up()
method down (line 32) | public function down()
FILE: database/migrations/2021_11_19_154310_create_statuses_table.php
class CreateStatusesTable (line 7) | class CreateStatusesTable extends Migration
method up (line 14) | public function up()
method down (line 28) | public function down()
FILE: database/migrations/2021_11_20_154310_create_categories_table.php
class CreateCategoriesTable (line 7) | class CreateCategoriesTable extends Migration
method up (line 14) | public function up()
method down (line 28) | public function down()
FILE: database/migrations/2021_11_21_154310_create_ideas_table.php
class CreateIdeasTable (line 7) | class CreateIdeasTable extends Migration
method up (line 14) | public function up()
method down (line 34) | public function down()
FILE: database/migrations/2021_11_24_195521_create_votes_table.php
class CreateVotesTable (line 7) | class CreateVotesTable extends Migration
method up (line 14) | public function up()
method down (line 30) | public function down()
FILE: database/migrations/2021_12_19_130759_create_comments_table.php
class CreateCommentsTable (line 7) | class CreateCommentsTable extends Migration
method up (line 14) | public function up()
method down (line 33) | public function down()
FILE: database/migrations/2021_12_28_133951_create_notifications_table.php
class CreateNotificationsTable (line 7) | class CreateNotificationsTable extends Migration
method up (line 14) | public function up()
method down (line 31) | public function down()
FILE: database/seeders/CategorySeeder.php
class CategorySeeder (line 7) | class CategorySeeder extends Seeder
method run (line 14) | public function run()
FILE: database/seeders/CommentSeeder.php
class CommentSeeder (line 7) | class CommentSeeder extends Seeder
method run (line 14) | public function run()
FILE: database/seeders/DatabaseSeeder.php
class DatabaseSeeder (line 14) | class DatabaseSeeder extends Seeder
method run (line 21) | public function run()
FILE: database/seeders/IdeaSeeder.php
class IdeaSeeder (line 7) | class IdeaSeeder extends Seeder
method run (line 14) | public function run()
FILE: database/seeders/StatusSeeder.php
class StatusSeeder (line 7) | class StatusSeeder extends Seeder
method run (line 14) | public function run()
FILE: database/seeders/VoteSeeder.php
class VoteSeeder (line 7) | class VoteSeeder extends Seeder
method run (line 14) | public function run()
FILE: public/js/app.js
function makeMap (line 45) | function makeMap(str, expectsLowerCase) {
function generateCodeFrame (line 77) | function generateCodeFrame(source, start2 = 0, end = source.length) {
function isSSRSafeAttrName (line 112) | function isSSRSafeAttrName(name) {
function normalizeStyle (line 130) | function normalizeStyle(value) {
function parseStringStyle (line 149) | function parseStringStyle(cssText) {
function stringifyStyle (line 159) | function stringifyStyle(styles) {
function normalizeClass (line 173) | function normalizeClass(value) {
function escapeHtml (line 200) | function escapeHtml(string) {
function escapeHtmlComment (line 239) | function escapeHtmlComment(src) {
function looseCompareArrays (line 242) | function looseCompareArrays(a, b) {
function looseEqual (line 251) | function looseEqual(a, b) {
function looseIndexOf (line 285) | function looseIndexOf(arr, val) {
function isEffect (line 462) | function isEffect(fn) {
function effect3 (line 465) | function effect3(fn, options = shared.EMPTY_OBJ) {
function stop2 (line 475) | function stop2(effect4) {
function createReactiveEffect (line 485) | function createReactiveEffect(fn, options) {
function cleanup (line 513) | function cleanup(effect4) {
function pauseTracking (line 524) | function pauseTracking() {
function enableTracking (line 528) | function enableTracking() {
function resetTracking (line 532) | function resetTracking() {
function track (line 536) | function track(target, type, key) {
function trigger (line 561) | function trigger(target, type, key, newValue, oldValue, oldTarget) {
function createGetter (line 665) | function createGetter(isReadonly2 = false, shallow = false) {
function createSetter (line 700) | function createSetter(shallow = false) {
function deleteProperty (line 723) | function deleteProperty(target, key) {
function has (line 732) | function has(target, key) {
function ownKeys (line 739) | function ownKeys(target) {
method set (line 752) | set(target, key) {
method deleteProperty (line 758) | deleteProperty(target, key) {
function get$1 (line 776) | function get$1(target, key, isReadonly2 = false, isShallow = false) {
function has$1 (line 794) | function has$1(key, isReadonly2 = false) {
function size (line 804) | function size(target, isReadonly2 = false) {
function add (line 809) | function add(value) {
function set$1 (line 820) | function set$1(key, value) {
function deleteEntry (line 840) | function deleteEntry(key) {
function clear (line 857) | function clear() {
function createForEach (line 867) | function createForEach(isReadonly2, isShallow) {
function createIterableMethod (line 879) | function createIterableMethod(method, isReadonly2, isShallow) {
function createReadonlyMethod (line 903) | function createReadonlyMethod(type) {
method get (line 913) | get(key) {
method size (line 916) | get size() {
method get (line 927) | get(key) {
method size (line 930) | get size() {
method get (line 941) | get(key) {
method size (line 944) | get size() {
method has (line 947) | has(key) {
method get (line 957) | get(key) {
method size (line 960) | get size() {
method has (line 963) | has(key) {
function createInstrumentationGetter (line 979) | function createInstrumentationGetter(isReadonly2, shallow) {
function checkIdentityKeys (line 1004) | function checkIdentityKeys(target, has2, key) {
function targetTypeMap (line 1015) | function targetTypeMap(rawType) {
function getTargetType (line 1029) | function getTargetType(value) {
function reactive3 (line 1032) | function reactive3(target) {
function shallowReactive (line 1038) | function shallowReactive(target) {
function readonly (line 1041) | function readonly(target) {
function shallowReadonly (line 1044) | function shallowReadonly(target) {
function createReactiveObject (line 1047) | function createReactiveObject(target, isReadonly2, baseHandlers, collect...
function isReactive2 (line 1069) | function isReactive2(value) {
function isReadonly (line 1075) | function isReadonly(value) {
function isProxy (line 1078) | function isProxy(value) {
function toRaw2 (line 1081) | function toRaw2(observed) {
function markRaw (line 1084) | function markRaw(value) {
function isRef (line 1089) | function isRef(r) {
function ref (line 1092) | function ref(value) {
function shallowRef (line 1095) | function shallowRef(value) {
method constructor (line 1099) | constructor(_rawValue, _shallow = false) {
method value (line 1105) | get value() {
method value (line 1109) | set value(newVal) {
function createRef (line 1117) | function createRef(rawValue, shallow = false) {
function triggerRef (line 1123) | function triggerRef(ref2) {
function unref (line 1126) | function unref(ref2) {
function proxyRefs (line 1141) | function proxyRefs(objectWithRefs) {
method constructor (line 1145) | constructor(factory) {
method value (line 1151) | get value() {
method value (line 1154) | set value(newVal) {
function customRef (line 1158) | function customRef(factory) {
function toRefs (line 1161) | function toRefs(object) {
method constructor (line 1172) | constructor(_object, _key) {
method value (line 1177) | get value() {
method value (line 1180) | set value(newVal) {
function toRef (line 1184) | function toRef(object, key) {
method constructor (line 1188) | constructor(getter, _setter, isReadonly2) {
method value (line 1203) | get value() {
method value (line 1212) | set value(newValue) {
function computed (line 1216) | function computed(getterOrOptions) {
function scheduler (line 1271) | function scheduler(callback) {
function queueJob (line 1274) | function queueJob(job) {
function queueFlush (line 1279) | function queueFlush() {
function flushJobs (line 1285) | function flushJobs() {
function disableEffectScheduling (line 1301) | function disableEffectScheduling(callback) {
function setReactivityEngine (line 1306) | function setReactivityEngine(engine) {
function overrideEffect (line 1318) | function overrideEffect(override) {
function elementBoundEffect (line 1321) | function elementBoundEffect(el) {
function onElAdded (line 1349) | function onElAdded(callback) {
function onElRemoved (line 1352) | function onElRemoved(callback) {
function onAttributesAdded (line 1355) | function onAttributesAdded(callback) {
function onAttributeRemoved (line 1358) | function onAttributeRemoved(el, name, callback) {
function cleanupAttributes (line 1365) | function cleanupAttributes(el, names) {
function startObservingMutations (line 1377) | function startObservingMutations() {
function stopObservingMutations (line 1381) | function stopObservingMutations() {
function flushObserver (line 1388) | function flushObserver() {
function processRecordQueue (line 1398) | function processRecordQueue() {
function mutateDom (line 1402) | function mutateDom(callback) {
function deferMutations (line 1412) | function deferMutations() {
function flushAndStopDeferringMutations (line 1415) | function flushAndStopDeferringMutations() {
function onMutate (line 1420) | function onMutate(mutations) {
function addScopeToNode (line 1483) | function addScopeToNode(node, data2, referenceNode) {
function refreshScope (line 1489) | function refreshScope(element, scope) {
function closestDataStack (line 1495) | function closestDataStack(node) {
function mergeProxies (line 1506) | function mergeProxies(objects) {
function initInterceptors (line 1556) | function initInterceptors(data2) {
function interceptor (line 1574) | function interceptor(callback, mutateObj = () => {
function get (line 1598) | function get(obj, path) {
function set (line 1601) | function set(obj, path, value) {
function magic (line 1620) | function magic(name, callback) {
function injectMagics (line 1623) | function injectMagics(obj, el) {
function tryCatch (line 1636) | function tryCatch(el, expression, callback, ...args) {
function handleError (line 1643) | function handleError(error2, el, expression = void 0) {
function evaluate (line 1654) | function evaluate(el, expression, extras = {}) {
function evaluateLater (line 1659) | function evaluateLater(...args) {
function setEvaluator (line 1663) | function setEvaluator(newEvaluator) {
function normalEvaluator (line 1666) | function normalEvaluator(el, expression) {
function generateEvaluatorFromFunction (line 1676) | function generateEvaluatorFromFunction(dataStack, func) {
function generateFunctionFromString (line 1684) | function generateFunctionFromString(expression, el) {
function generateEvaluatorFromString (line 1703) | function generateEvaluatorFromString(dataStack, expression, el) {
function runIfTypeOfFunction (line 1722) | function runIfTypeOfFunction(receiver, value, scope, params, el) {
function prefix (line 1737) | function prefix(subject = "") {
function setPrefix (line 1740) | function setPrefix(newPrefix) {
function directive (line 1744) | function directive(name, callback) {
function directives (line 1747) | function directives(el, attributes, originalAttributeOverride) {
function attributesOnly (line 1754) | function attributesOnly(attributes) {
function deferHandlingDirectives (line 1760) | function deferHandlingDirectives(callback) {
function getDirectiveHandler (line 1777) | function getDirectiveHandler(el, directive2) {
function toTransformedAttributes (line 1810) | function toTransformedAttributes(callback = () => {
function mapAttributes (line 1822) | function mapAttributes(callback) {
function outNonAlpineAttributes (line 1825) | function outNonAlpineAttributes({name}) {
function toParsedDirectives (line 1829) | function toParsedDirectives(transformedAttributeMap, originalAttributeOv...
function byPriority (line 1859) | function byPriority(a, b) {
function dispatch (line 1866) | function dispatch(el, name, detail = {}) {
function nextTick (line 1878) | function nextTick(callback) {
function releaseNextTicks (line 1886) | function releaseNextTicks() {
function holdNextTicks (line 1891) | function holdNextTicks() {
function walk (line 1896) | function walk(el, callback) {
function warn (line 1913) | function warn(message, ...args) {
function start (line 1918) | function start() {
function rootSelectors (line 1937) | function rootSelectors() {
function allSelectors (line 1940) | function allSelectors() {
function addRootSelector (line 1943) | function addRootSelector(selectorCallback) {
function addInitSelector (line 1946) | function addInitSelector(selectorCallback) {
function closestRoot (line 1949) | function closestRoot(el, includeInitSelectors = false) {
function isRoot (line 1959) | function isRoot(el) {
function initTree (line 1962) | function initTree(el, walker = walk) {
function destroyTree (line 1970) | function destroyTree(root) {
function setClasses (line 1975) | function setClasses(el, value) {
function setClassesFromString (line 1985) | function setClassesFromString(el, classString) {
function setClassesFromObject (line 1997) | function setClassesFromObject(el, classObject) {
function setStyles (line 2022) | function setStyles(el, value) {
function setStylesFromObject (line 2028) | function setStylesFromObject(el, value) {
function setStylesFromString (line 2043) | function setStylesFromString(el, value) {
function kebabCase (line 2050) | function kebabCase(subject) {
function once (line 2055) | function once(callback, fallback = () => {
function registerTransitionsFromClassString (line 2078) | function registerTransitionsFromClassString(el, classString, stage) {
function registerTransitionsFromHelper (line 2102) | function registerTransitionsFromHelper(el, modifiers, stage) {
function registerTransitionObject (line 2159) | function registerTransitionObject(el, setFunction, defaultValue = {}) {
function closestHide (line 2226) | function closestHide(el) {
function transition (line 2232) | function transition(el, setFunction, {during, start: start2, end} = {}, ...
function performTransition (line 2262) | function performTransition(el, stages) {
function modifierValue (line 2321) | function modifierValue(modifiers, key, fallback) {
function debounce (line 2345) | function debounce(func, wait) {
function throttle (line 2359) | function throttle(func, limit) {
function plugin (line 2372) | function plugin(callback) {
function store (line 2379) | function store(name, value) {
function getStores (line 2393) | function getStores() {
function skipDuringClone (line 2399) | function skipDuringClone(callback, fallback = () => {
function clone (line 2403) | function clone(oldEl, newEl) {
function cloneTree (line 2411) | function cloneTree(el) {
function dontRegisterReactiveSideEffects (line 2423) | function dontRegisterReactiveSideEffects(callback) {
function data (line 2437) | function data(name, callback) {
function injectDataProviders (line 2440) | function injectDataProviders(obj, context) {
method reactive (line 2456) | get reactive() {
method release (line 2459) | get release() {
method effect (line 2462) | get effect() {
method raw (line 2465) | get raw() {
function getArrayOfRefObject (line 2547) | function getArrayOfRefObject(el) {
function bind (line 2576) | function bind(el, name, value, modifiers = []) {
function bindInputValue (line 2596) | function bindInputValue(el, value) {
function bindClasses (line 2624) | function bindClasses(el, value) {
function bindStyles (line 2629) | function bindStyles(el, value) {
function bindAttribute (line 2634) | function bindAttribute(el, name, value) {
function setIfChanged (line 2643) | function setIfChanged(el, attrName, value) {
function updateSelect (line 2648) | function updateSelect(el, value) {
function camelCase (line 2656) | function camelCase(subject) {
function checkedAttrLooseCompare (line 2659) | function checkedAttrLooseCompare(valueA, valueB) {
function isBooleanAttr (line 2662) | function isBooleanAttr(attrName) {
function attributeShouldntBePreservedIfFalsy (line 2692) | function attributeShouldntBePreservedIfFalsy(name) {
function on (line 2697) | function on(el, event, modifiers, callback) {
function dotSyntax (line 2769) | function dotSyntax(subject) {
function camelCase2 (line 2772) | function camelCase2(subject) {
function isNumeric (line 2775) | function isNumeric(subject) {
function kebabCase2 (line 2778) | function kebabCase2(subject) {
function isKeyEvent (line 2781) | function isKeyEvent(event) {
function isListeningForASpecificKeyThatHasntBeenPressed (line 2784) | function isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers) {
function keyToModifiers (line 2812) | function keyToModifiers(key) {
method get (line 2854) | get() {
method set (line 2859) | set(value) {
function generateAssignmentFunction (line 2879) | function generateAssignmentFunction(el, modifiers, expression) {
function safeParseNumber (line 2911) | function safeParseNumber(rawValue) {
function checkedAttrLooseCompare2 (line 2915) | function checkedAttrLooseCompare2(valueA, valueB) {
function isNumeric2 (line 2918) | function isNumeric2(subject) {
function applyBindingsObject (line 2970) | function applyBindingsObject(el, expression, original, effect3) {
function storeKeyForXFor (line 2998) | function storeKeyForXFor(el, expression) {
function loop (line 3074) | function loop(el, iteratorNames, evaluateItems, evaluateKey) {
function parseForExpression (line 3169) | function parseForExpression(expression) {
function getIterationScopeVariables (line 3191) | function getIterationScopeVariables(iteratorNames, item, index, items) {
function isNumeric3 (line 3212) | function isNumeric3(subject) {
function handler2 (line 3217) | function handler2() {
function onloadend (line 3336) | function onloadend() {
function createInstance (line 3514) | function createInstance(defaultConfig) {
function Cancel (line 3575) | function Cancel(message) {
function CancelToken (line 3607) | function CancelToken(executor) {
function Axios (line 3696) | function Axios(instanceConfig) {
function InterceptorManager (line 3844) | function InterceptorManager() {
function throwIfCancellationRequested (line 3975) | function throwIfCancellationRequested(config) {
function getMergedValue (line 4139) | function getMergedValue(target, source) {
function mergeDeepProperties (line 4150) | function mergeDeepProperties(prop) {
function setContentTypeIfUnset (line 4289) | function setContentTypeIfUnset(headers, value) {
function getDefaultAdapter (line 4295) | function getDefaultAdapter() {
function stringifySafely (line 4307) | function stringifySafely(rawValue, parser, encoder) {
function encode (line 4450) | function encode(val) {
function resolveURL (line 4683) | function resolveURL(url) {
function isOlderVersion (line 4889) | function isOlderVersion(version, thanVersion) {
function formatMessage (line 4912) | function formatMessage(opt, desc) {
function assertOptions (line 4944) | function assertOptions(options, schema, allowUnknown) {
function isArray (line 4997) | function isArray(val) {
function isUndefined (line 5007) | function isUndefined(val) {
function isBuffer (line 5017) | function isBuffer(val) {
function isArrayBuffer (line 5028) | function isArrayBuffer(val) {
function isFormData (line 5038) | function isFormData(val) {
function isArrayBufferView (line 5048) | function isArrayBufferView(val) {
function isString (line 5064) | function isString(val) {
function isNumber (line 5074) | function isNumber(val) {
function isObject (line 5084) | function isObject(val) {
function isPlainObject (line 5094) | function isPlainObject(val) {
function isDate (line 5109) | function isDate(val) {
function isFile (line 5119) | function isFile(val) {
function isBlob (line 5129) | function isBlob(val) {
function isFunction (line 5139) | function isFunction(val) {
function isStream (line 5149) | function isStream(val) {
function isURLSearchParams (line 5159) | function isURLSearchParams(val) {
function trim (line 5169) | function trim(str) {
function isStandardBrowserEnv (line 5188) | function isStandardBrowserEnv() {
function forEach (line 5212) | function forEach(obj, fn) {
function merge (line 5256) | function merge(/* obj1, obj2, obj3, ... */) {
function extend (line 5284) | function extend(a, b, thisArg) {
function stripBOM (line 5301) | function stripBOM(content) {
function apply (line 5875) | function apply(func, thisArg, args) {
function arrayAggregator (line 5895) | function arrayAggregator(array, setter, iteratee, accumulator) {
function arrayEach (line 5915) | function arrayEach(array, iteratee) {
function arrayEachRight (line 5936) | function arrayEachRight(array, iteratee) {
function arrayEvery (line 5957) | function arrayEvery(array, predicate) {
function arrayFilter (line 5978) | function arrayFilter(array, predicate) {
function arrayIncludes (line 6002) | function arrayIncludes(array, value) {
function arrayIncludesWith (line 6016) | function arrayIncludesWith(array, value, comparator) {
function arrayMap (line 6037) | function arrayMap(array, iteratee) {
function arrayPush (line 6056) | function arrayPush(array, values) {
function arrayReduce (line 6079) | function arrayReduce(array, iteratee, accumulator, initAccum) {
function arrayReduceRight (line 6104) | function arrayReduceRight(array, iteratee, accumulator, initAccum) {
function arraySome (line 6125) | function arraySome(array, predicate) {
function asciiToArray (line 6153) | function asciiToArray(string) {
function asciiWords (line 6164) | function asciiWords(string) {
function baseFindKey (line 6179) | function baseFindKey(collection, predicate, eachFunc) {
function baseFindIndex (line 6201) | function baseFindIndex(array, predicate, fromIndex, fromRight) {
function baseIndexOf (line 6222) | function baseIndexOf(array, value, fromIndex) {
function baseIndexOfWith (line 6238) | function baseIndexOfWith(array, value, fromIndex, comparator) {
function baseIsNaN (line 6257) | function baseIsNaN(value) {
function baseMean (line 6270) | function baseMean(array, iteratee) {
function baseProperty (line 6282) | function baseProperty(key) {
function basePropertyOf (line 6295) | function basePropertyOf(object) {
function baseReduce (line 6314) | function baseReduce(collection, iteratee, accumulator, initAccum, eachFu...
function baseSortBy (line 6333) | function baseSortBy(array, comparer) {
function baseSum (line 6352) | function baseSum(array, iteratee) {
function baseTimes (line 6375) | function baseTimes(n, iteratee) {
function baseToPairs (line 6394) | function baseToPairs(object, props) {
function baseTrim (line 6407) | function baseTrim(string) {
function baseUnary (line 6420) | function baseUnary(func) {
function baseValues (line 6436) | function baseValues(object, props) {
function cacheHas (line 6450) | function cacheHas(cache, key) {
function charsStartIndex (line 6463) | function charsStartIndex(strSymbols, chrSymbols) {
function charsEndIndex (line 6480) | function charsEndIndex(strSymbols, chrSymbols) {
function countHolders (line 6495) | function countHolders(array, placeholder) {
function escapeStringChar (line 6533) | function escapeStringChar(chr) {
function getValue (line 6545) | function getValue(object, key) {
function hasUnicode (line 6556) | function hasUnicode(string) {
function hasUnicodeWord (line 6567) | function hasUnicodeWord(string) {
function iteratorToArray (line 6578) | function iteratorToArray(iterator) {
function mapToArray (line 6595) | function mapToArray(map) {
function overArg (line 6613) | function overArg(func, transform) {
function replaceHolders (line 6628) | function replaceHolders(array, placeholder) {
function setToArray (line 6651) | function setToArray(set) {
function setToPairs (line 6668) | function setToPairs(set) {
function strictIndexOf (line 6688) | function strictIndexOf(array, value, fromIndex) {
function strictLastIndexOf (line 6710) | function strictLastIndexOf(array, value, fromIndex) {
function stringSize (line 6727) | function stringSize(string) {
function stringToArray (line 6740) | function stringToArray(string) {
function trimmedEndIndex (line 6754) | function trimmedEndIndex(string) {
function unicodeSize (line 6777) | function unicodeSize(string) {
function unicodeToArray (line 6792) | function unicodeToArray(string) {
function unicodeWords (line 6803) | function unicodeWords(string) {
function lodash (line 7080) | function lodash(value) {
function object (line 7101) | function object() {}
function baseLodash (line 7121) | function baseLodash() {
function LodashWrapper (line 7132) | function LodashWrapper(value, chainAll) {
function LazyWrapper (line 7217) | function LazyWrapper(value) {
function lazyClone (line 7235) | function lazyClone() {
function lazyReverse (line 7254) | function lazyReverse() {
function lazyValue (line 7274) | function lazyValue() {
function Hash (line 7336) | function Hash(entries) {
function hashClear (line 7354) | function hashClear() {
function hashDelete (line 7369) | function hashDelete(key) {
function hashGet (line 7384) | function hashGet(key) {
function hashHas (line 7402) | function hashHas(key) {
function hashSet (line 7417) | function hashSet(key, value) {
function ListCache (line 7440) | function ListCache(entries) {
function listCacheClear (line 7458) | function listCacheClear() {
function listCacheDelete (line 7472) | function listCacheDelete(key) {
function listCacheGet (line 7498) | function listCacheGet(key) {
function listCacheHas (line 7514) | function listCacheHas(key) {
function listCacheSet (line 7528) | function listCacheSet(key, value) {
function MapCache (line 7557) | function MapCache(entries) {
function mapCacheClear (line 7575) | function mapCacheClear() {
function mapCacheDelete (line 7593) | function mapCacheDelete(key) {
function mapCacheGet (line 7608) | function mapCacheGet(key) {
function mapCacheHas (line 7621) | function mapCacheHas(key) {
function mapCacheSet (line 7635) | function mapCacheSet(key, value) {
function SetCache (line 7661) | function SetCache(values) {
function setCacheAdd (line 7681) | function setCacheAdd(value) {
function setCacheHas (line 7695) | function setCacheHas(value) {
function Stack (line 7712) | function Stack(entries) {
function stackClear (line 7724) | function stackClear() {
function stackDelete (line 7738) | function stackDelete(key) {
function stackGet (line 7755) | function stackGet(key) {
function stackHas (line 7768) | function stackHas(key) {
function stackSet (line 7782) | function stackSet(key, value) {
function arrayLikeKeys (line 7815) | function arrayLikeKeys(value, inherited) {
function arraySample (line 7849) | function arraySample(array) {
function arraySampleSize (line 7862) | function arraySampleSize(array, n) {
function arrayShuffle (line 7873) | function arrayShuffle(array) {
function assignMergeValue (line 7886) | function assignMergeValue(object, key, value) {
function assignValue (line 7903) | function assignValue(object, key, value) {
function assocIndexOf (line 7919) | function assocIndexOf(array, key) {
function baseAggregator (line 7940) | function baseAggregator(collection, setter, iteratee, accumulator) {
function baseAssign (line 7956) | function baseAssign(object, source) {
function baseAssignIn (line 7969) | function baseAssignIn(object, source) {
function baseAssignValue (line 7982) | function baseAssignValue(object, key, value) {
function baseAt (line 8003) | function baseAt(object, paths) {
function baseClamp (line 8024) | function baseClamp(number, lower, upper) {
function baseClone (line 8052) | function baseClone(value, bitmask, customizer, key, object, stack) {
function baseConforms (line 8135) | function baseConforms(source) {
function baseConformsTo (line 8150) | function baseConformsTo(object, source, props) {
function baseDelay (line 8178) | function baseDelay(func, wait, args) {
function baseDifference (line 8196) | function baseDifference(array, values, iteratee, comparator) {
function baseEvery (line 8270) | function baseEvery(collection, predicate) {
function baseExtremum (line 8289) | function baseExtremum(array, iteratee, comparator) {
function baseFill (line 8318) | function baseFill(array, value, start, end) {
function baseFilter (line 8344) | function baseFilter(collection, predicate) {
function baseFlatten (line 8365) | function baseFlatten(array, depth, predicate, isStrict, result) {
function baseForOwn (line 8421) | function baseForOwn(object, iteratee) {
function baseForOwnRight (line 8433) | function baseForOwnRight(object, iteratee) {
function baseFunctions (line 8446) | function baseFunctions(object, props) {
function baseGet (line 8460) | function baseGet(object, path) {
function baseGetAllKeys (line 8483) | function baseGetAllKeys(object, keysFunc, symbolsFunc) {
function baseGetTag (line 8495) | function baseGetTag(value) {
function baseGt (line 8513) | function baseGt(value, other) {
function baseHas (line 8525) | function baseHas(object, key) {
function baseHasIn (line 8537) | function baseHasIn(object, key) {
function baseInRange (line 8550) | function baseInRange(number, start, end) {
function baseIntersection (line 8564) | function baseIntersection(arrays, iteratee, comparator) {
function baseInverter (line 8628) | function baseInverter(object, setter, iteratee, accumulator) {
function baseInvoke (line 8645) | function baseInvoke(object, path, args) {
function baseIsArguments (line 8659) | function baseIsArguments(value) {
function baseIsArrayBuffer (line 8670) | function baseIsArrayBuffer(value) {
function baseIsDate (line 8681) | function baseIsDate(value) {
function baseIsEqual (line 8699) | function baseIsEqual(value, other, bitmask, customizer, stack) {
function baseIsEqualDeep (line 8723) | function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, ...
function baseIsMap (line 8775) | function baseIsMap(value) {
function baseIsMatch (line 8789) | function baseIsMatch(object, source, matchData, customizer) {
function baseIsNative (line 8841) | function baseIsNative(value) {
function baseIsRegExp (line 8856) | function baseIsRegExp(value) {
function baseIsSet (line 8867) | function baseIsSet(value) {
function baseIsTypedArray (line 8878) | function baseIsTypedArray(value) {
function baseIteratee (line 8890) | function baseIteratee(value) {
function baseKeys (line 8914) | function baseKeys(object) {
function baseKeysIn (line 8934) | function baseKeysIn(object) {
function baseLt (line 8958) | function baseLt(value, other) {
function baseMap (line 8970) | function baseMap(collection, iteratee) {
function baseMatches (line 8987) | function baseMatches(source) {
function baseMatchesProperty (line 9005) | function baseMatchesProperty(path, srcValue) {
function baseMerge (line 9028) | function baseMerge(object, source, srcIndex, customizer, stack) {
function baseMergeDeep (line 9065) | function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customi...
function baseNth (line 9135) | function baseNth(array, n) {
function baseOrderBy (line 9153) | function baseOrderBy(collection, iteratees, orders) {
function basePick (line 9191) | function basePick(object, paths) {
function basePickBy (line 9206) | function basePickBy(object, paths, predicate) {
function basePropertyDeep (line 9229) | function basePropertyDeep(path) {
function basePullAll (line 9246) | function basePullAll(array, values, iteratee, comparator) {
function basePullAt (line 9282) | function basePullAt(array, indexes) {
function baseRandom (line 9309) | function baseRandom(lower, upper) {
function baseRange (line 9324) | function baseRange(start, end, step, fromRight) {
function baseRepeat (line 9344) | function baseRepeat(string, n) {
function baseRest (line 9372) | function baseRest(func, start) {
function baseSample (line 9383) | function baseSample(collection) {
function baseSampleSize (line 9395) | function baseSampleSize(collection, n) {
function baseSet (line 9410) | function baseSet(object, path, value, customizer) {
function baseShuffle (line 9481) | function baseShuffle(collection) {
function baseSlice (line 9494) | function baseSlice(array, start, end) {
function baseSome (line 9524) | function baseSome(collection, predicate) {
function baseSortedIndex (line 9546) | function baseSortedIndex(array, value, retHighest) {
function baseSortedIndexBy (line 9580) | function baseSortedIndexBy(array, value, iteratee, retHighest) {
function baseSortedUniq (line 9632) | function baseSortedUniq(array, iteratee) {
function baseToNumber (line 9658) | function baseToNumber(value) {
function baseToString (line 9676) | function baseToString(value) {
function baseUniq (line 9701) | function baseUniq(array, iteratee, comparator) {
function baseUnset (line 9761) | function baseUnset(object, path) {
function baseUpdate (line 9777) | function baseUpdate(object, path, updater, customizer) {
function baseWhile (line 9792) | function baseWhile(array, predicate, isDrop, fromRight) {
function baseWrapperValue (line 9814) | function baseWrapperValue(value, actions) {
function baseXor (line 9834) | function baseXor(arrays, iteratee, comparator) {
function baseZipObject (line 9864) | function baseZipObject(props, values, assignFunc) {
function castArrayLikeObject (line 9884) | function castArrayLikeObject(value) {
function castFunction (line 9895) | function castFunction(value) {
function castPath (line 9907) | function castPath(value, object) {
function castSlice (line 9934) | function castSlice(array, start, end) {
function cloneBuffer (line 9958) | function cloneBuffer(buffer, isDeep) {
function cloneArrayBuffer (line 9976) | function cloneArrayBuffer(arrayBuffer) {
function cloneDataView (line 9990) | function cloneDataView(dataView, isDeep) {
function cloneRegExp (line 10002) | function cloneRegExp(regexp) {
function cloneSymbol (line 10015) | function cloneSymbol(symbol) {
function cloneTypedArray (line 10027) | function cloneTypedArray(typedArray, isDeep) {
function compareAscending (line 10040) | function compareAscending(value, other) {
function compareMultiple (line 10084) | function compareMultiple(object, other, orders) {
function composeArgs (line 10122) | function composeArgs(args, partials, holders, isCurried) {
function composeArgsRight (line 10157) | function composeArgsRight(args, partials, holders, isCurried) {
function copyArray (line 10191) | function copyArray(source, array) {
function copyObject (line 10212) | function copyObject(source, props, object, customizer) {
function copySymbols (line 10246) | function copySymbols(source, object) {
function copySymbolsIn (line 10258) | function copySymbolsIn(source, object) {
function createAggregator (line 10270) | function createAggregator(setter, initializer) {
function createAssigner (line 10286) | function createAssigner(assigner) {
function createBaseEach (line 10320) | function createBaseEach(eachFunc, fromRight) {
function createBaseFor (line 10348) | function createBaseFor(fromRight) {
function createBind (line 10375) | function createBind(func, bitmask, thisArg) {
function createCaseFirst (line 10393) | function createCaseFirst(methodName) {
function createCompounder (line 10420) | function createCompounder(callback) {
function createCtor (line 10434) | function createCtor(Ctor) {
function createCurry (line 10468) | function createCurry(func, bitmask, arity) {
function createFind (line 10503) | function createFind(findIndexFunc) {
function createFlow (line 10523) | function createFlow(fromRight) {
function createHybrid (line 10596) | function createHybrid(func, bitmask, thisArg, partials, holders, partial...
function createInverter (line 10658) | function createInverter(setter, toIteratee) {
function createMathOperation (line 10672) | function createMathOperation(operator, defaultValue) {
function createOver (line 10705) | function createOver(arrayFunc) {
function createPadding (line 10726) | function createPadding(length, chars) {
function createPartial (line 10751) | function createPartial(func, bitmask, thisArg, partials) {
function createRange (line 10781) | function createRange(fromRight) {
function createRelationalOperation (line 10806) | function createRelationalOperation(operator) {
function createRecurry (line 10833) | function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, pa...
function createRound (line 10866) | function createRound(methodName) {
function createToPairs (line 10902) | function createToPairs(keysFunc) {
function createWrap (line 10940) | function createWrap(func, bitmask, thisArg, partials, holders, argPos, a...
function customDefaultsAssignIn (line 11007) | function customDefaultsAssignIn(objValue, srcValue, key, object) {
function customDefaultsMerge (line 11029) | function customDefaultsMerge(objValue, srcValue, key, object, source, st...
function customOmitClone (line 11048) | function customOmitClone(value) {
function equalArrays (line 11065) | function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
function equalByTag (line 11144) | function equalByTag(object, other, tag, bitmask, customizer, equalFunc, ...
function equalObjects (line 11222) | function equalObjects(object, other, bitmask, customizer, equalFunc, sta...
function flatRest (line 11294) | function flatRest(func) {
function getAllKeys (line 11305) | function getAllKeys(object) {
function getAllKeysIn (line 11317) | function getAllKeysIn(object) {
function getFuncName (line 11339) | function getFuncName(func) {
function getHolder (line 11361) | function getHolder(func) {
function getIteratee (line 11377) | function getIteratee() {
function getMapData (line 11391) | function getMapData(map, key) {
function getMatchData (line 11405) | function getMatchData(object) {
function getNative (line 11426) | function getNative(object, key) {
function getRawTag (line 11438) | function getRawTag(value) {
function getView (line 11534) | function getView(start, end, transforms) {
function getWrapDetails (line 11559) | function getWrapDetails(source) {
function hasPath (line 11573) | function hasPath(object, path, hasFunc) {
function initCloneArray (line 11602) | function initCloneArray(array) {
function initCloneObject (line 11621) | function initCloneObject(object) {
function initCloneByTag (line 11639) | function initCloneByTag(object, tag, isDeep) {
function insertWrapDetails (line 11683) | function insertWrapDetails(source, details) {
function isFlattenable (line 11701) | function isFlattenable(value) {
function isIndex (line 11714) | function isIndex(value, length) {
function isIterateeCall (line 11734) | function isIterateeCall(value, index, object) {
function isKey (line 11756) | function isKey(value, object) {
function isKeyable (line 11776) | function isKeyable(value) {
function isLaziable (line 11791) | function isLaziable(func) {
function isMasked (line 11812) | function isMasked(func) {
function isPrototype (line 11832) | function isPrototype(value) {
function isStrictComparable (line 11847) | function isStrictComparable(value) {
function matchesStrictComparable (line 11860) | function matchesStrictComparable(key, srcValue) {
function memoizeCapped (line 11878) | function memoizeCapped(func) {
function mergeData (line 11906) | function mergeData(data, source) {
function nativeKeysIn (line 11970) | function nativeKeysIn(object) {
function objectToString (line 11987) | function objectToString(value) {
function overRest (line 12000) | function overRest(func, start, transform) {
function parent (line 12029) | function parent(object, path) {
function reorder (line 12043) | function reorder(array, indexes) {
function safeGet (line 12063) | function safeGet(object, key) {
function setWrapToString (line 12123) | function setWrapToString(wrapper, reference, bitmask) {
function shortOut (line 12137) | function shortOut(func) {
function shuffleSelf (line 12165) | function shuffleSelf(array, size) {
function toKey (line 12207) | function toKey(value) {
function toSource (line 12222) | function toSource(func) {
function updateWrapDetails (line 12242) | function updateWrapDetails(details, bitmask) {
function wrapperClone (line 12259) | function wrapperClone(wrapper) {
function chunk (line 12293) | function chunk(array, size, guard) {
function compact (line 12328) | function compact(array) {
function concat (line 12365) | function concat() {
function drop (line 12501) | function drop(array, n, guard) {
function dropRight (line 12535) | function dropRight(array, n, guard) {
function dropRightWhile (line 12580) | function dropRightWhile(array, predicate) {
function dropWhile (line 12621) | function dropWhile(array, predicate) {
function fill (line 12656) | function fill(array, value, start, end) {
function findIndex (line 12703) | function findIndex(array, predicate, fromIndex) {
function findLastIndex (line 12750) | function findLastIndex(array, predicate, fromIndex) {
function flatten (line 12779) | function flatten(array) {
function flattenDeep (line 12798) | function flattenDeep(array) {
function flattenDepth (line 12823) | function flattenDepth(array, depth) {
function fromPairs (line 12847) | function fromPairs(pairs) {
function head (line 12877) | function head(array) {
function indexOf (line 12904) | function indexOf(array, value, fromIndex) {
function initial (line 12930) | function initial(array) {
function join (line 13045) | function join(array, separator) {
function last (line 13063) | function last(array) {
function lastIndexOf (line 13089) | function lastIndexOf(array, value, fromIndex) {
function nth (line 13125) | function nth(array, n) {
function pullAll (line 13174) | function pullAll(array, values) {
function pullAllBy (line 13203) | function pullAllBy(array, values, iteratee) {
function pullAllWith (line 13232) | function pullAllWith(array, values, comparator) {
function remove (line 13301) | function remove(array, predicate) {
function reverse (line 13345) | function reverse(array) {
function slice (line 13365) | function slice(array, start, end) {
function sortedIndex (line 13398) | function sortedIndex(array, value) {
function sortedIndexBy (line 13427) | function sortedIndexBy(array, value, iteratee) {
function sortedIndexOf (line 13447) | function sortedIndexOf(array, value) {
function sortedLastIndex (line 13476) | function sortedLastIndex(array, value) {
function sortedLastIndexBy (line 13505) | function sortedLastIndexBy(array, value, iteratee) {
function sortedLastIndexOf (line 13525) | function sortedLastIndexOf(array, value) {
function sortedUniq (line 13551) | function sortedUniq(array) {
function sortedUniqBy (line 13573) | function sortedUniqBy(array, iteratee) {
function tail (line 13593) | function tail(array) {
function take (line 13623) | function take(array, n, guard) {
function takeRight (line 13656) | function takeRight(array, n, guard) {
function takeRightWhile (line 13701) | function takeRightWhile(array, predicate) {
function takeWhile (line 13742) | function takeWhile(array, predicate) {
function uniq (line 13844) | function uniq(array) {
function uniqBy (line 13871) | function uniqBy(array, iteratee) {
function uniqWith (line 13895) | function uniqWith(array, comparator) {
function unzip (line 13919) | function unzip(array) {
function unzipWith (line 13956) | function unzipWith(array, iteratee) {
function zipObject (line 14109) | function zipObject(props, values) {
function zipObjectDeep (line 14128) | function zipObjectDeep(props, values) {
function chain (line 14191) | function chain(value) {
function tap (line 14220) | function tap(value, interceptor) {
function thru (line 14248) | function thru(value, interceptor) {
function wrapperChain (line 14319) | function wrapperChain() {
function wrapperCommit (line 14349) | function wrapperCommit() {
function wrapperNext (line 14375) | function wrapperNext() {
function wrapperToIterator (line 14403) | function wrapperToIterator() {
function wrapperPlant (line 14431) | function wrapperPlant(value) {
function wrapperReverse (line 14471) | function wrapperReverse() {
function wrapperValue (line 14503) | function wrapperValue() {
function every (line 14580) | function every(collection, predicate, guard) {
function filter (line 14629) | function filter(collection, predicate) {
function flatMap (line 14714) | function flatMap(collection, iteratee) {
function flatMapDeep (line 14738) | function flatMapDeep(collection, iteratee) {
function flatMapDepth (line 14763) | function flatMapDepth(collection, iteratee, depth) {
function forEach (line 14798) | function forEach(collection, iteratee) {
function forEachRight (line 14823) | function forEachRight(collection, iteratee) {
function includes (line 14889) | function includes(collection, value, fromIndex, guard) {
function map (line 15010) | function map(collection, iteratee) {
function orderBy (line 15044) | function orderBy(collection, iteratees, orders, guard) {
function reduce (line 15135) | function reduce(collection, iteratee, accumulator) {
function reduceRight (line 15164) | function reduceRight(collection, iteratee, accumulator) {
function reject (line 15205) | function reject(collection, predicate) {
function sample (line 15224) | function sample(collection) {
function sampleSize (line 15249) | function sampleSize(collection, n, guard) {
function shuffle (line 15274) | function shuffle(collection) {
function size (line 15300) | function size(collection) {
function some (line 15350) | function some(collection, predicate, guard) {
function after (line 15448) | function after(n, func) {
function ary (line 15477) | function ary(func, n, guard) {
function before (line 15500) | function before(n, func) {
function curry (line 15656) | function curry(func, arity, guard) {
function curryRight (line 15701) | function curryRight(func, arity, guard) {
function debounce (line 15762) | function debounce(func, wait, options) {
function flip (line 15950) | function flip(func) {
function memoize (line 15998) | function memoize(func, resolver) {
function negate (line 16041) | function negate(predicate) {
function once (line 16075) | function once(func) {
function rest (line 16253) | function rest(func, start) {
function spread (line 16295) | function spread(func, start) {
function throttle (line 16355) | function throttle(func, wait, options) {
function unary (line 16388) | function unary(func) {
function wrap (line 16414) | function wrap(value, wrapper) {
function castArray (line 16453) | function castArray() {
function clone (line 16487) | function clone(value) {
function cloneWith (line 16522) | function cloneWith(value, customizer) {
function cloneDeep (line 16545) | function cloneDeep(value) {
function cloneDeepWith (line 16577) | function cloneDeepWith(value, customizer) {
function conformsTo (line 16606) | function conformsTo(object, source) {
function eq (line 16642) | function eq(value, other) {
function isArrayLike (line 16790) | function isArrayLike(value) {
function isArrayLikeObject (line 16819) | function isArrayLikeObject(value) {
function isBoolean (line 16840) | function isBoolean(value) {
function isElement (line 16900) | function isElement(value) {
function isEmpty (line 16937) | function isEmpty(value) {
function isEqual (line 16989) | function isEqual(value, other) {
function isEqualWith (line 17025) | function isEqualWith(value, other, customizer) {
function isError (line 17049) | function isError(value) {
function isFinite (line 17084) | function isFinite(value) {
function isFunction (line 17105) | function isFunction(value) {
function isInteger (line 17141) | function isInteger(value) {
function isLength (line 17171) | function isLength(value) {
function isObject (line 17201) | function isObject(value) {
function isObjectLike (line 17230) | function isObjectLike(value) {
function isMatch (line 17281) | function isMatch(object, source) {
function isMatchWith (line 17317) | function isMatchWith(object, source, customizer) {
function isNaN (line 17350) | function isNaN(value) {
function isNative (line 17383) | function isNative(value) {
function isNull (line 17407) | function isNull(value) {
function isNil (line 17431) | function isNil(value) {
function isNumber (line 17461) | function isNumber(value) {
function isPlainObject (line 17494) | function isPlainObject(value) {
function isSafeInteger (line 17553) | function isSafeInteger(value) {
function isString (line 17593) | function isString(value) {
function isSymbol (line 17615) | function isSymbol(value) {
function isUndefined (line 17656) | function isUndefined(value) {
function isWeakMap (line 17677) | function isWeakMap(value) {
function isWeakSet (line 17698) | function isWeakSet(value) {
function toArray (line 17777) | function toArray(value) {
function toFinite (line 17816) | function toFinite(value) {
function toInteger (line 17854) | function toInteger(value) {
function toLength (line 17888) | function toLength(value) {
function toNumber (line 17915) | function toNumber(value) {
function toPlainObject (line 17960) | function toPlainObject(value) {
function toSafeInteger (line 17988) | function toSafeInteger(value) {
function toString (line 18015) | function toString(value) {
function create (line 18218) | function create(prototype, properties) {
function findKey (line 18334) | function findKey(object, predicate) {
function findLastKey (line 18373) | function findLastKey(object, predicate) {
function forIn (line 18405) | function forIn(object, iteratee) {
function forInRight (line 18437) | function forInRight(object, iteratee) {
function forOwn (line 18471) | function forOwn(object, iteratee) {
function forOwnRight (line 18501) | function forOwnRight(object, iteratee) {
function functions (line 18528) | function functions(object) {
function functionsIn (line 18555) | function functionsIn(object) {
function get (line 18584) | function get(object, path, defaultValue) {
function has (line 18616) | function has(object, path) {
function hasIn (line 18646) | function hasIn(object, path) {
function keys (line 18764) | function keys(object) {
function keysIn (line 18791) | function keysIn(object) {
function mapKeys (line 18816) | function mapKeys(object, iteratee) {
function mapValues (line 18854) | function mapValues(object, iteratee) {
function omitBy (line 18996) | function omitBy(object, predicate) {
function pickBy (line 19039) | function pickBy(object, predicate) {
function result (line 19081) | function result(object, path, defaultValue) {
function set (line 19131) | function set(object, path, value) {
function setWith (line 19159) | function setWith(object, path, value, customizer) {
function transform (line 19246) | function transform(object, iteratee, accumulator) {
function unset (line 19296) | function unset(object, path) {
function update (line 19327) | function update(object, path, updater) {
function updateWith (line 19355) | function updateWith(object, path, updater, customizer) {
function values (line 19386) | function values(object) {
function valuesIn (line 19414) | function valuesIn(object) {
function clamp (line 19439) | function clamp(number, lower, upper) {
function inRange (line 19493) | function inRange(number, start, end) {
function random (line 19536) | function random(lower, upper, floating) {
function capitalize (line 19617) | function capitalize(string) {
function deburr (line 19639) | function deburr(string) {
function endsWith (line 19667) | function endsWith(string, target, position) {
function escape (line 19709) | function escape(string) {
function escapeRegExp (line 19731) | function escapeRegExp(string) {
function pad (line 19829) | function pad(string, length, chars) {
function padEnd (line 19868) | function padEnd(string, length, chars) {
function padStart (line 19901) | function padStart(string, length, chars) {
function parseInt (line 19935) | function parseInt(string, radix, guard) {
function repeat (line 19966) | function repeat(string, n, guard) {
function replace (line 19994) | function replace() {
function split (line 20045) | function split(string, separator, limit) {
function startsWith (line 20114) | function startsWith(string, target, position) {
function template (line 20228) | function template(string, options, guard) {
function toLower (line 20366) | function toLower(value) {
function toUpper (line 20391) | function toUpper(value) {
function trim (line 20417) | function trim(string, chars, guard) {
function trimEnd (line 20452) | function trimEnd(string, chars, guard) {
function trimStart (line 20485) | function trimStart(string, chars, guard) {
function truncate (line 20536) | function truncate(string, options) {
function unescape (line 20611) | function unescape(string) {
function words (line 20680) | function words(string, pattern, guard) {
function cond (line 20785) | function cond(pairs) {
function conforms (line 20831) | function conforms(source) {
function constant (line 20854) | function constant(value) {
function defaultTo (line 20880) | function defaultTo(value, defaultValue) {
function identity (line 20947) | function identity(value) {
function iteratee (line 20993) | function iteratee(func) {
function matches (line 21032) | function matches(source) {
function matchesProperty (line 21069) | function matchesProperty(path, srcValue) {
function mixin (line 21168) | function mixin(object, source, options) {
function noConflict (line 21217) | function noConflict() {
function noop (line 21236) | function noop() {
function nthArg (line 21260) | function nthArg(n) {
function property (line 21372) | function property(path) {
function propertyOf (line 21397) | function propertyOf(object) {
function stubArray (line 21502) | function stubArray() {
function stubFalse (line 21519) | function stubFalse() {
function stubObject (line 21541) | function stubObject() {
function stubString (line 21558) | function stubString() {
function stubTrue (line 21575) | function stubTrue() {
function times (line 21598) | function times(n, iteratee) {
function toPath (line 21633) | function toPath(value) {
function uniqueId (line 21657) | function uniqueId(prefix) {
function max (line 21766) | function max(array) {
function maxBy (line 21795) | function maxBy(array, iteratee) {
function mean (line 21815) | function mean(array) {
function meanBy (line 21842) | function meanBy(array, iteratee) {
function min (line 21864) | function min(array) {
function minBy (line 21893) | function minBy(array, iteratee) {
function sum (line 21974) | function sum(array) {
function sumBy (line 22003) | function sumBy(array, iteratee) {
function defaultSetTimout (line 22626) | function defaultSetTimout() {
function defaultClearTimeout (line 22629) | function defaultClearTimeout () {
function runTimeout (line 22652) | function runTimeout(fun) {
function runClearTimeout (line 22677) | function runClearTimeout(marker) {
function cleanUpNextTick (line 22709) | function cleanUpNextTick() {
function drainQueue (line 22724) | function drainQueue() {
function Item (line 22762) | function Item(fun, array) {
function noop (line 22776) | function noop() {}
function __webpack_require__ (line 22820) | function __webpack_require__(moduleId) {
FILE: public/vendor/horizon/app.js
function v (line 2) | function v(){if(h){var r="getAllResponseHeaders"in h?s(h.getAllResponseH...
function c (line 2) | function c(t){var e=new o(t),n=i(o.prototype.request,e);return r.extend(...
function e (line 2) | function e(t){this.message=t}
function i (line 2) | function i(t){if("function"!=typeof t)throw new TypeError("executor must...
function u (line 2) | function u(t){this.defaults=t,this.interceptors={request:new o,response:...
function i (line 2) | function i(){this.handlers=[]}
function c (line 2) | function c(t){t.cancelToken&&t.cancelToken.throwIfRequested()}
function s (line 2) | function s(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,...
function l (line 2) | function l(i){r.isUndefined(e[i])?r.isUndefined(t[i])||(n[i]=s(void 0,t[...
function s (line 2) | function s(t,e){!i.isUndefined(t)&&i.isUndefined(t["Content-Type"])&&(t[...
function i (line 2) | function i(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(...
function i (line 2) | function i(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.se...
function c (line 2) | function c(t,e){for(var n=e?e.split("."):a,r=t.split("."),i=0;i<3;i++){i...
function o (line 2) | function o(t){return"[object Array]"===i.call(t)}
function a (line 2) | function a(t){return void 0===t}
function c (line 2) | function c(t){return null!==t&&"object"==typeof t}
function s (line 2) | function s(t){if("[object Object]"!==i.call(t))return!1;var e=Object.get...
function l (line 2) | function l(t){return"[object Function]"===i.call(t)}
function u (line 2) | function u(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),o(t))for(var n...
function n (line 2) | function n(n,r){s(e[r])&&s(n)?e[r]=t(e[r],n):s(n)?e[r]=t({},n):o(n)?e[r]...
function i (line 2) | function i(t){return null==t}
function o (line 2) | function o(t){return null!=t}
function a (line 2) | function a(t){return!0===t}
function c (line 2) | function c(t){return"string"==typeof t||"number"==typeof t||"symbol"==ty...
function s (line 2) | function s(t){return null!==t&&"object"==typeof t}
function u (line 2) | function u(t){return"[object Object]"===l.call(t)}
function f (line 2) | function f(t){return"[object RegExp]"===l.call(t)}
function d (line 2) | function d(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e...
function p (line 2) | function p(t){return o(t)&&"function"==typeof t.then&&"function"==typeof...
function h (line 2) | function h(t){return null==t?"":Array.isArray(t)||u(t)&&t.toString===l?J...
function M (line 2) | function M(t){var e=parseFloat(t);return isNaN(e)?t:e}
function b (line 2) | function b(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i<r.len...
function g (line 2) | function g(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(...
function A (line 2) | function A(t,e){return y.call(t,e)}
function _ (line 2) | function _(t){var e=Object.create(null);return function(n){return e[n]||...
function n (line 2) | function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t...
function T (line 2) | function T(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n...
function C (line 2) | function C(t,e){for(var n in e)t[n]=e[n];return t}
function q (line 2) | function q(t){for(var e={},n=0;n<t.length;n++)t[n]&&C(e,t[n]);return e}
function S (line 2) | function S(t,e,n){}
function W (line 2) | function W(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&...
function B (line 2) | function B(t,e){for(var n=0;n<t.length;n++)if(W(t[n],e))return n;return-1}
function D (line 2) | function D(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments...
function F (line 2) | function F(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}
function H (line 2) | function H(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,wr...
function lt (line 2) | function lt(t){return"function"==typeof t&&/native code/.test(t.toString...
function t (line 2) | function t(){this.set=Object.create(null)}
function bt (line 2) | function bt(t){Mt.push(t),ht.target=t}
function mt (line 2) | function mt(){Mt.pop(),ht.target=Mt[Mt.length-1]}
function At (line 2) | function At(t){return new vt(void 0,void 0,void 0,String(t))}
function _t (line 2) | function _t(t){var e=new vt(t.tag,t.data,t.children&&t.children.slice(),...
function Lt (line 2) | function Lt(t){wt=t}
function Tt (line 2) | function Tt(t,e){var n;if(s(t)&&!(t instanceof vt))return A(t,"__ob__")&...
function Ct (line 2) | function Ct(t,e,n,r,i){var o=new ht,a=Object.getOwnPropertyDescriptor(t,...
function qt (line 2) | function qt(t,e,n){if(Array.isArray(t)&&d(e))return t.length=Math.max(t....
function St (line 2) | function St(t,e){if(Array.isArray(t)&&d(e))t.splice(e,1);else{var n=t.__...
function kt (line 2) | function kt(t){for(var e=void 0,n=0,r=t.length;n<r;n++)(e=t[n])&&e.__ob_...
function Wt (line 2) | function Wt(t,e){if(!e)return t;for(var n,r,i,o=ft?Reflect.ownKeys(e):Ob...
function Bt (line 2) | function Bt(t,e,n){return n?function(){var r="function"==typeof e?e.call...
function Dt (line 2) | function Dt(t,e){var n=e?t?t.concat(e):Array.isArray(e)?e:[e]:t;return n...
function Xt (line 2) | function Xt(t,e,n,r){var i=Object.create(t||null);return e?C(i,e):i}
function Rt (line 2) | function Rt(t,e,n){if("function"==typeof e&&(e=e.options),function(t,e){...
function jt (line 2) | function jt(t,e,n,r){if("string"==typeof n){var i=t[e];if(A(i,n))return ...
function It (line 2) | function It(t,e,n,r){var i=e[t],o=!A(n,t),a=n[t],c=$t(Boolean,i.type);if...
function Ft (line 2) | function Ft(t){var e=t&&t.toString().match(/^\s*function (\w+)/);return ...
function Ht (line 2) | function Ht(t,e){return Ft(t)===Ft(e)}
function $t (line 2) | function $t(t,e){if(!Array.isArray(e))return Ht(e,t)?0:-1;for(var n=0,r=...
function Ut (line 2) | function Ut(t,e,n){bt();try{if(e)for(var r=e;r=r.$parent;){var i=r.$opti...
function Vt (line 2) | function Vt(t,e,n,r,i){var o;try{(o=n?t.apply(e,n):t.call(e))&&!o._isVue...
function Yt (line 2) | function Yt(t,e,n){if(j.errorHandler)try{return j.errorHandler.call(null...
function Gt (line 2) | function Gt(t,e,n){if(!G&&!J||"undefined"==typeof console)throw t}
function te (line 2) | function te(){Zt=!1;var t=Qt.slice(0);Qt.length=0;for(var e=0;e<t.length...
function oe (line 2) | function oe(t,e){var n;if(Qt.push((function(){if(t)try{t.call(e)}catch(t...
function ce (line 2) | function ce(t){se(t,ae),ae.clear()}
function se (line 2) | function se(t,e){var n,r,i=Array.isArray(t);if(!(!i&&!s(t)||Object.isFro...
function ue (line 2) | function ue(t,e){function n(){var t=arguments,r=n.fns;if(!Array.isArray(...
function fe (line 2) | function fe(t,e,n,r,o,c){var s,l,u,f;for(s in t)l=t[s],u=e[s],f=le(s),i(...
function de (line 2) | function de(t,e,n){var r;t instanceof vt&&(t=t.data.hook||(t.data.hook={...
function pe (line 2) | function pe(t,e,n,r,i){if(o(e)){if(A(e,n))return t[n]=e[n],i||delete e[n...
function he (line 2) | function he(t){return c(t)?[At(t)]:Array.isArray(t)?be(t):void 0}
function Me (line 2) | function Me(t){return o(t)&&o(t.text)&&!1===t.isComment}
function be (line 2) | function be(t,e){var n,r,s,l,u=[];for(n=0;n<t.length;n++)i(r=t[n])||"boo...
function me (line 2) | function me(t,e){if(t){for(var n=Object.create(null),r=ft?Reflect.ownKey...
function ve (line 2) | function ve(t,e){if(!t||!t.length)return{};for(var n={},r=0,i=t.length;r...
function ge (line 2) | function ge(t){return t.isComment&&!t.asyncFactory||" "===t.text}
function ye (line 2) | function ye(t,e,n){var i,o=Object.keys(e).length>0,a=t?!!t.$stable:!o,c=...
function Ae (line 2) | function Ae(t,e,n){var r=function(){var t=arguments.length?n.apply(null,...
function _e (line 2) | function _e(t,e){return function(){return t[e]}}
function ze (line 2) | function ze(t,e){var n,r,i,a,c;if(Array.isArray(t)||"string"==typeof t)f...
function Oe (line 2) | function Oe(t,e,n,r){var i,o=this.$scopedSlots[t];o?(n=n||{},r&&(n=C(C({...
function xe (line 2) | function xe(t){return jt(this.$options,"filters",t)||E}
function we (line 2) | function we(t,e){return Array.isArray(t)?-1===t.indexOf(e):t!==e}
function Le (line 2) | function Le(t,e,n,r,i){var o=j.keyCodes[e]||n;return i&&r&&!j.keyCodes[e...
function Ne (line 2) | function Ne(t,e,n,r,i){if(n)if(s(n)){var o;Array.isArray(n)&&(n=q(n));va...
function Te (line 2) | function Te(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];...
function Ce (line 2) | function Ce(t,e,n){return qe(t,"__once__"+e+(n?"_"+n:""),!0),t}
function qe (line 2) | function qe(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&...
function Se (line 2) | function Se(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}
function ke (line 2) | function ke(t,e){if(e)if(u(e)){var n=t.on=t.on?C({},t.on):{};for(var r i...
function Ee (line 2) | function Ee(t,e,n,r){e=e||{$stable:!n};for(var i=0;i<t.length;i++){var o...
function We (line 2) | function We(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"==typeo...
function Be (line 2) | function Be(t,e){return"string"==typeof t?e+t:t}
function De (line 2) | function De(t){t._o=Ce,t._n=M,t._s=h,t._l=ze,t._t=Oe,t._q=W,t._i=B,t._m=...
function Xe (line 2) | function Xe(t,e,n,i,o){var c,s=this,l=o.options;A(i,"_uid")?(c=Object.cr...
function Pe (line 2) | function Pe(t,e,n,r,i){var o=_t(t);return o.fnContext=n,o.fnOptions=r,e....
function Re (line 2) | function Re(t,e){for(var n in e)t[O(n)]=e[n]}
function Fe (line 2) | function Fe(t,e,n,c,l){if(!i(t)){var u=n.$options._base;if(s(t)&&(t=u.ex...
function He (line 2) | function He(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}
function $e (line 2) | function $e(t,e,n,r,i,l){return(Array.isArray(n)||c(n))&&(i=r,r=n,n=void...
function Ue (line 2) | function Ue(t,e,n){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,n=!0),o(...
function Ge (line 2) | function Ge(t,e){return(t.__esModule||ft&&"Module"===t[Symbol.toStringTa...
function Je (line 2) | function Je(t){return t.isComment&&t.asyncFactory}
function Ke (line 2) | function Ke(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e...
function Qe (line 2) | function Qe(t,e){Ve.$on(t,e)}
function Ze (line 2) | function Ze(t,e){Ve.$off(t,e)}
function tn (line 2) | function tn(t,e){var n=Ve;return function r(){var i=e.apply(null,argumen...
function en (line 2) | function en(t,e,n){Ve=t,fe(e,n||{},Qe,Ze,tn,t),Ve=void 0}
function rn (line 2) | function rn(t){var e=nn;return nn=t,function(){nn=e}}
function on (line 2) | function on(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}
function an (line 2) | function an(t,e){if(e){if(t._directInactive=!1,on(t))return}else if(t._d...
function cn (line 2) | function cn(t,e){if(!(e&&(t._directInactive=!0,on(t))||t._inactive)){t._...
function sn (line 2) | function sn(t,e){bt();var n=t.$options[e],r=e+" hook";if(n)for(var i=0,o...
function vn (line 2) | function vn(){var t,e;for(Mn=bn(),pn=!0,ln.sort((function(t,e){return t....
function _n (line 2) | function _n(t,e,n){An.get=function(){return this[e][n]},An.set=function(...
function zn (line 2) | function zn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){va...
function xn (line 2) | function xn(t,e,n){var r=!ct();"function"==typeof n?(An.get=r?wn(e):Ln(n...
function wn (line 2) | function wn(t){return function(){var e=this._computedWatchers&&this._com...
function Ln (line 2) | function Ln(t){return function(){return t.call(this,this)}}
function Nn (line 2) | function Nn(t,e,n,r){return u(n)&&(r=n,n=n.handler),"string"==typeof n&&...
function Cn (line 2) | function Cn(t){var e=t.options;if(t.super){var n=Cn(t.super);if(n!==t.su...
function qn (line 2) | function qn(t){this._init(t)}
function Sn (line 2) | function Sn(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r...
function kn (line 2) | function kn(t){return t&&(t.Ctor.options.name||t.tag)}
function En (line 2) | function En(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeo...
function Wn (line 2) | function Wn(t,e){var n=t.cache,r=t.keys,i=t._vnode;for(var o in n){var a...
function Bn (line 2) | function Bn(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstanc...
function r (line 2) | function r(){n.$off(t,r),e.apply(n,arguments)}
function Gn (line 2) | function Gn(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)(r=r.com...
function Jn (line 2) | function Jn(t,e){return{staticClass:Kn(t.staticClass,e.staticClass),clas...
function Kn (line 2) | function Kn(t,e){return t?e?t+" "+e:t:e||""}
function Qn (line 2) | function Qn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,i=...
function rr (line 2) | function rr(t){return er(t)?"svg":"math"===t?"math":void 0}
function ar (line 2) | function ar(t){if("string"==typeof t){var e=document.querySelector(t);re...
function lr (line 2) | function lr(t,e){var n=t.data.ref;if(o(n)){var r=t.context,i=t.component...
function dr (line 2) | function dr(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.i...
function pr (line 2) | function pr(t,e,n){var r,i,a={};for(r=e;r<=n;++r)o(i=t[r].key)&&(a[i]=r)...
function Mr (line 2) | function Mr(t,e){(t.data.directives||e.data.directives)&&function(t,e){v...
function mr (line 2) | function mr(t,e){var n,r,i=Object.create(null);if(!t)return i;for(n=0;n<...
function vr (line 2) | function vr(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{})...
function gr (line 2) | function gr(t,e,n,r,i){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,i)}c...
function Ar (line 2) | function Ar(t,e){var n=e.componentOptions;if(!(o(n)&&!1===n.Ctor.options...
function _r (line 2) | function _r(t,e,n){t.tagName.indexOf("-")>-1?zr(t,e,n):Hn(e)?Yn(n)?t.rem...
function zr (line 2) | function zr(t,e,n){if(Yn(n))t.removeAttribute(e);else{if(Z&&!tt&&"TEXTAR...
function xr (line 2) | function xr(t,e){var n=e.elm,r=e.data,a=t.data;if(!(i(r.staticClass)&&i(...
function Er (line 2) | function Er(t){var e,n,r,i,o,a=!1,c=!1,s=!1,l=!1,u=0,f=0,d=0,p=0;for(r=0...
function Wr (line 2) | function Wr(t,e){var n=e.indexOf("(");if(n<0)return'_f("'+e+'")('+t+")";...
function Br (line 2) | function Br(t,e){}
function Dr (line 2) | function Dr(t,e){return t?t.map((function(t){return t[e]})).filter((func...
function Xr (line 2) | function Xr(t,e,n,r,i){(t.props||(t.props=[])).push(Vr({name:e,value:n,d...
function Pr (line 2) | function Pr(t,e,n,r,i){(i?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(...
function Rr (line 2) | function Rr(t,e,n,r){t.attrsMap[e]=n,t.attrsList.push(Vr({name:e,value:n...
function jr (line 2) | function jr(t,e,n,r,i,o,a,c){(t.directives||(t.directives=[])).push(Vr({...
function Ir (line 2) | function Ir(t,e,n){return n?"_p("+e+',"'+t+'")':t+e}
function Fr (line 2) | function Fr(t,e,n,i,o,a,c,s){var l;(i=i||r).right?s?e="("+e+")==='click'...
function Hr (line 2) | function Hr(t,e,n){var r=$r(t,":"+e)||$r(t,"v-bind:"+e);if(null!=r)retur...
function $r (line 2) | function $r(t,e,n){var r;if(null!=(r=t.attrsMap[e]))for(var i=t.attrsLis...
function Ur (line 2) | function Ur(t,e){for(var n=t.attrsList,r=0,i=n.length;r<i;r++){var o=n[r...
function Vr (line 2) | function Vr(t,e){return e&&(null!=e.start&&(t.start=e.start),null!=e.end...
function Yr (line 2) | function Yr(t,e,n){var r=n||{},i=r.number,o="$$v",a=o;r.trim&&(a="(typeo...
function Gr (line 2) | function Gr(t,e){var n=function(t){if(t=t.trim(),wr=t.length,t.indexOf("...
function Jr (line 2) | function Jr(){return Lr.charCodeAt(++Tr)}
function Kr (line 2) | function Kr(){return Tr>=wr}
function Qr (line 2) | function Qr(t){return 34===t||39===t}
function Zr (line 2) | function Zr(t){var e=1;for(Cr=Tr;!Kr();)if(Qr(t=Jr()))ti(t);else if(91==...
function ti (line 2) | function ti(t){for(var e=t;!Kr()&&(t=Jr())!==e;);}
function ri (line 2) | function ri(t,e,n){var r=ei;return function i(){var o=e.apply(null,argum...
function oi (line 2) | function oi(t,e,n,r){if(ii){var i=Mn,o=e;e=o._wrapper=function(t){if(t.t...
function ai (line 2) | function ai(t,e,n,r){(r||ei).removeEventListener(t,e._wrapper||e,n)}
function ci (line 2) | function ci(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=...
function ui (line 2) | function ui(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,a=...
function fi (line 2) | function fi(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e...
function hi (line 2) | function hi(t){var e=Mi(t.style);return t.staticStyle?C(t.staticStyle,e):e}
function Mi (line 2) | function Mi(t){return Array.isArray(t)?q(t):"string"==typeof t?pi(t):t}
function _i (line 2) | function _i(t,e){var n=e.data,r=t.data;if(!(i(n.staticStyle)&&i(n.style)...
function xi (line 2) | function xi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
function wi (line 2) | function wi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
function Li (line 2) | function Li(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&C...
function Di (line 2) | function Di(t){Bi((function(){Bi(t)}))}
function Xi (line 2) | function Xi(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n...
function Pi (line 2) | function Pi(t,e){t._transitionClasses&&g(t._transitionClasses,e),wi(t,e)}
function Ri (line 2) | function Ri(t,e,n){var r=Ii(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!...
function Ii (line 2) | function Ii(t,e){var n,r=window.getComputedStyle(t),i=(r[Si+"Delay"]||""...
function Fi (line 2) | function Fi(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.a...
function Hi (line 2) | function Hi(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}
function $i (line 2) | function $i(t,e){var n=t.elm;o(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._...
function Ui (line 2) | function Ui(t,e){var n=t.elm;o(n._enterCb)&&(n._enterCb.cancelled=!0,n._...
function Vi (line 2) | function Vi(t){return"number"==typeof t&&!isNaN(t)}
function Yi (line 2) | function Yi(t){if(i(t))return!1;var e=t.fns;return o(e)?Yi(Array.isArray...
function Gi (line 2) | function Gi(t,e){!0!==e.data.show&&$i(e)}
function u (line 2) | function u(t){var e=l.parentNode(t);o(e)&&l.removeChild(e,t)}
function f (line 2) | function f(t,e,n,i,c,s,u){if(o(t.elm)&&o(s)&&(t=s[u]=_t(t)),t.isRootInse...
function d (line 2) | function d(t,e){o(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingI...
function p (line 2) | function p(t,e,n){o(t)&&(o(n)?l.parentNode(n)===t&&l.insertBefore(t,e,n)...
function h (line 2) | function h(t,e,n){if(Array.isArray(e)){0;for(var r=0;r<e.length;++r)f(e[...
function M (line 2) | function M(t){for(;t.componentInstance;)t=t.componentInstance._vnode;ret...
function m (line 2) | function m(t,n){for(var i=0;i<r.create.length;++i)r.create[i](ur,t);o(e=...
function v (line 2) | function v(t){var e;if(o(e=t.fnScopeId))l.setStyleScope(t.elm,e);else fo...
function g (line 2) | function g(t,e,n,r,i,o){for(;r<=i;++r)f(n[r],o,t,e,!1,n,r)}
function y (line 2) | function y(t){var e,n,i=t.data;if(o(i))for(o(e=i.hook)&&o(e=e.destroy)&&...
function A (line 2) | function A(t,e,n){for(;e<=n;++e){var r=t[e];o(r)&&(o(r.tag)?(_(r),y(r)):...
function _ (line 2) | function _(t,e){if(o(e)||o(t.data)){var n,i=r.remove.length+1;for(o(e)?e...
function z (line 2) | function z(t,e,n,r){for(var i=n;i<r;i++){var a=e[i];if(o(a)&&dr(t,a))ret...
function O (line 2) | function O(t,e,n,c,s,u){if(t!==e){o(e.elm)&&o(c)&&(e=c[s]=_t(e));var d=e...
function x (line 2) | function x(t,e,n){if(a(n)&&o(t.parent))t.parent.data.pendingInsert=e;els...
function L (line 2) | function L(t,e,n,r){var i,c=e.tag,s=e.data,l=e.children;if(r=r||s&&s.pre...
function Qi (line 2) | function Qi(t,e,n){Zi(t,e,n),(Z||et)&&setTimeout((function(){Zi(t,e,n)})...
function Zi (line 2) | function Zi(t,e,n){var r=e.value,i=t.multiple;if(!i||Array.isArray(r)){f...
function to (line 2) | function to(t,e){return e.every((function(e){return!W(e,t)}))}
function eo (line 2) | function eo(t){return"_value"in t?t._value:t.value}
function no (line 2) | function no(t){t.target.composing=!0}
function ro (line 2) | function ro(t){t.target.composing&&(t.target.composing=!1,io(t.target,"i...
function io (line 2) | function io(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,...
function oo (line 2) | function oo(t){return!t.componentInstance||t.data&&t.data.transition?t:o...
function lo (line 2) | function lo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abst...
function uo (line 2) | function uo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];...
function fo (line 2) | function fo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{...
function vo (line 2) | function vo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._ent...
function go (line 2) | function go(t){t.data.newPos=t.elm.getBoundingClientRect()}
function yo (line 2) | function yo(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-...
function Go (line 2) | function Go(t,e){var n=e?Uo:$o;return t.replace(n,(function(t){return Ho...
function va (line 2) | function va(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:xa(e),rawAtt...
function ga (line 2) | function ga(t,e){Jo=e.warn||Br,ea=e.isPreTag||k,na=e.mustUseProp||k,ra=e...
function ya (line 2) | function ya(t,e){var n;!function(t){var e=Hr(t,"key");if(e){t.key=e}}(t)...
function Aa (line 2) | function Aa(t){var e;if(e=$r(t,"v-for")){var n=function(t){var e=t.match...
function _a (line 2) | function _a(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push...
function za (line 2) | function za(t){var e=t.name.replace(pa,"");return e||"#"!==t.name[0]&&(e...
function Oa (line 2) | function Oa(t){var e=t.match(da);if(e){var n={};return e.forEach((functi...
function xa (line 2) | function xa(t){for(var e={},n=0,r=t.length;n<r;n++)e[t[n].name]=t[n].val...
function Na (line 2) | function Na(t){return va(t.tag,t.attrsList.slice(),t.parent)}
function Wa (line 2) | function Wa(t,e){t&&(Ca=Ea(e.staticKeys||""),qa=e.isReservedTag||k,Ba(t)...
function Ba (line 2) | function Ba(t){if(t.static=function(t){if(2===t.type)return!1;if(3===t.t...
function Da (line 2) | function Da(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e)...
function $a (line 2) | function $a(t,e){var n=e?"nativeOn:":"on:",r="",i="";for(var o in t){var...
function Ua (line 2) | function Ua(t){if(!t)return"function(){}";if(Array.isArray(t))return"["+...
function Va (line 2) | function Va(t){var e=parseInt(t,10);if(e)return"$event.keyCode!=="+e;var...
function Ja (line 2) | function Ja(t,e){var n=new Ga(e);return{render:"with(this){return "+(t?K...
function Ka (line 2) | function Ka(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&...
function Qa (line 2) | function Qa(t,e){t.staticProcessed=!0;var n=e.pre;return t.pre&&(e.pre=t...
function Za (line 2) | function Za(t,e){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return tc(t,...
function tc (line 2) | function tc(t,e,n,r){return t.ifProcessed=!0,ec(t.ifConditions.slice(),e...
function ec (line 2) | function ec(t,e,n,r){if(!t.length)return r||"_e()";var i=t.shift();retur...
function nc (line 2) | function nc(t,e,n,r){var i=t.for,o=t.alias,a=t.iterator1?","+t.iterator1...
function rc (line 2) | function rc(t,e){var n="{",r=function(t,e){var n=t.directives;if(!n)retu...
function ic (line 2) | function ic(t){return 1===t.type&&("slot"===t.tag||t.children.some(ic))}
function oc (line 2) | function oc(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&...
function ac (line 2) | function ac(t,e,n,r,i){var o=t.children;if(o.length){var a=o[0];if(1===o...
function cc (line 2) | function cc(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}
function sc (line 2) | function sc(t,e){return 1===t.type?Ka(t,e):3===t.type&&t.isComment?funct...
function lc (line 2) | function lc(t){for(var e="",n="",r=0;r<t.length;r++){var i=t[r],o=uc(i.v...
function uc (line 2) | function uc(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"...
function fc (line 2) | function fc(t,e){try{return new Function(t)}catch(n){return e.push({err:...
function dc (line 2) | function dc(t){var e=Object.create(null);return function(n,r,i){(r=C({},...
function e (line 2) | function e(e,n){var r=Object.create(t),i=[],o=[];if(n)for(var a in n.mod...
function vc (line 2) | function vc(t){return(hc=hc||document.createElement("div")).innerHTML=t?...
function e (line 2) | function e(){return t.apply(this,arguments)}
function Cc (line 2) | function Cc(t,e){for(var n in e)t[n]=e[n];return t}
function Wc (line 2) | function Wc(t){try{return decodeURIComponent(t)}catch(t){0}return t}
function Dc (line 2) | function Dc(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.sp...
function Xc (line 2) | function Xc(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(voi...
function Rc (line 2) | function Rc(t,e,n,r){var i=r&&r.options.stringifyQuery,o=e.query||{};try...
function jc (line 2) | function jc(t){if(Array.isArray(t))return t.map(jc);if(t&&"object"==type...
function Fc (line 2) | function Fc(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}
function Hc (line 2) | function Hc(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var i=t.hash;...
function $c (line 2) | function $c(t,e,n){return e===Ic?t===e:!!e&&(t.path&&e.path?t.path.repla...
function Uc (line 2) | function Uc(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return ...
function Vc (line 2) | function Vc(t){for(var e=0;e<t.matched.length;e++){var n=t.matched[e];fo...
function Gc (line 2) | function Gc(t,e,n,r){var i=e.props=function(t,e){switch(typeof e){case"u...
function Jc (line 2) | function Jc(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"...
function Kc (line 2) | function Kc(t){return t.replace(/\/\//g,"/")}
function os (line 2) | function os(t,e){for(var n,r=[],i=0,o=0,a="",c=e&&e.delimiter||"/";null!...
function as (line 2) | function as(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return...
function cs (line 2) | function cs(t){return encodeURI(t).replace(/[?#]/g,(function(t){return"%...
function ss (line 2) | function ss(t,e){for(var n=new Array(t.length),r=0;r<t.length;r++)"objec...
function ls (line 2) | function ls(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}
function us (line 2) | function us(t){return t.replace(/([=!:$\/()])/g,"\\$1")}
function fs (line 2) | function fs(t,e){return t.keys=e,t}
function ds (line 2) | function ds(t){return t&&t.sensitive?"":"i"}
function ps (line 2) | function ps(t,e,n){Qc(e)||(n=e||n,e=[]);for(var r=(n=n||{}).strict,i=!1!...
function hs (line 2) | function hs(t,e,n){return Qc(e)||(n=e||n,e=[]),n=n||{},t instanceof RegE...
function bs (line 2) | function bs(t,e,n){e=e||{};try{var r=Ms[t]||(Ms[t]=Zc.compile(t));return...
function ms (line 2) | function ms(t,e,n,r){var i="string"==typeof t?{path:t}:t;if(i._normalize...
function As (line 2) | function As(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaul...
function _s (line 2) | function _s(t){if(t)for(var e,n=0;n<t.length;n++){if("a"===(e=t[n]).tag)...
function Os (line 2) | function Os(t,e,n,r,i){var o=e||[],a=n||Object.create(null),c=r||Object....
function xs (line 2) | function xs(t,e,n,r,i,o){var a=r.path,c=r.name;var s=r.pathToRegexpOptio...
function ws (line 2) | function ws(t,e){return Zc(t,[],e)}
function Ls (line 2) | function Ls(t,e){var n=Os(t),r=n.pathList,i=n.pathMap,o=n.nameMap;functi...
function Ns (line 2) | function Ns(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(va...
function Cs (line 2) | function Cs(){return Ts.now().toFixed(3)}
function Ss (line 2) | function Ss(){return qs}
function ks (line 2) | function ks(t){return qs=t}
function Ws (line 2) | function Ws(){"scrollRestoration"in window.history&&(window.history.scro...
function Bs (line 2) | function Bs(t,e,n,r){if(t.app){var i=t.options.scrollBehavior;i&&t.app.$...
function Ds (line 2) | function Ds(){var t=Ss();t&&(Es[t]={x:window.pageXOffset,y:window.pageYO...
function Xs (line 2) | function Xs(t){Ds(),t.state&&t.state.key&&ks(t.state.key)}
function Ps (line 2) | function Ps(t){return js(t.x)||js(t.y)}
function Rs (line 2) | function Rs(t){return{x:js(t.x)?t.x:window.pageXOffset,y:js(t.y)?t.y:win...
function js (line 2) | function js(t){return"number"==typeof t}
function Fs (line 2) | function Fs(t,e){var n,r="object"==typeof t;if(r&&"string"==typeof t.sel...
function Us (line 2) | function Us(t,e){Ds();var n=window.history;try{if(e){var r=Cc({},n.state...
function Vs (line 2) | function Vs(t){Us(t,!0)}
function Ys (line 2) | function Ys(t,e,n){var r=function(i){i>=t.length?n():t[i]?e(t[i],(functi...
function Js (line 2) | function Js(t,e){return Qs(t,e,Gs.redirected,'Redirected when going from...
function Ks (line 2) | function Ks(t,e){return Qs(t,e,Gs.cancelled,'Navigation cancelled from "...
function Qs (line 2) | function Qs(t,e,n,r){var i=new Error(r);return i._isRouter=!0,i.from=t,i...
function tl (line 2) | function tl(t){return Object.prototype.toString.call(t).indexOf("Error")...
function el (line 2) | function el(t,e){return tl(t)&&t._isRouter&&(null==e||t.type===e)}
function nl (line 2) | function nl(t){return function(e,n,r){var i=!1,o=0,a=null;rl(t,(function...
function rl (line 2) | function rl(t,e){return il(t.map((function(t){return Object.keys(t.compo...
function il (line 2) | function il(t){return Array.prototype.concat.apply([],t)}
function al (line 2) | function al(t){var e=!1;return function(){for(var n=[],r=arguments.lengt...
function sl (line 2) | function sl(t,e,n,r){var i=rl(t,(function(t,r,i,o){var a=function(t,e){"...
function ll (line 2) | function ll(t,e){if(e)return function(){return t.apply(e,arguments)}}
function e (line 2) | function e(e,n){t.call(this,e,n),this._startLocation=fl(this.base)}
function fl (line 2) | function fl(t){var e=window.location.pathname;return t&&0===e.toLowerCas...
function e (line 2) | function e(e,n,r){t.call(this,e,n),r&&function(t){var e=fl(t);if(!/^\/#/...
function pl (line 2) | function pl(){var t=hl();return"/"===t.charAt(0)||(ml("/"+t),!1)}
function hl (line 2) | function hl(){var t=window.location.href,e=t.indexOf("#");return e<0?"":...
function Ml (line 2) | function Ml(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e...
function bl (line 2) | function bl(t){$s?Us(Ml(t)):window.location.hash=t}
function ml (line 2) | function ml(t){$s?Vs(Ml(t)):window.location.replace(Ml(t))}
function e (line 2) | function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}
function Al (line 2) | function Al(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t....
function r (line 2) | function r(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}
function a (line 2) | function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.en...
function c (line 2) | function c(t,e,n){return e&&a(t.prototype,e),n&&a(t,n),t}
function s (line 2) | function s(){return s=Object.assign||function(t){for(var e=1;e<arguments...
function l (line 2) | function l(t,e){t.prototype=Object.create(e.prototype),t.prototype.const...
function p (line 2) | function p(t){return null==t?""+t:{}.toString.call(t).match(/\s([a-z]+)/...
function h (line 2) | function h(){return{bindType:u,delegateType:u,handle:function(t){if(i.de...
function M (line 2) | function M(t){var e=this,n=!1;return i.default(this).one(m.TRANSITION_EN...
function b (line 2) | function b(){i.default.fn.emulateTransitionEnd=M,i.default.event.special...
function t (line 2) | function t(t){this._element=t}
function t (line 2) | function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}
function t (line 2) | function t(t,e){this._items=null,this._interval=null,this._activeElement...
function t (line 2) | function t(t,e){this._isTransitioning=!1,this._element=t,this._config=th...
function t (line 2) | function t(t,e){this._element=t,this._popper=null,this._config=this._get...
function t (line 2) | function t(t,e){this._config=this._getConfig(e),this._element=t,this._di...
function jn (line 2) | function jn(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))ret...
function In (line 2) | function In(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)r...
function t (line 2) | function t(t,e){if(void 0===o.default)throw new TypeError("Bootstrap's t...
function e (line 2) | function e(){return t.apply(this,arguments)||this}
function t (line 2) | function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===...
function t (line 2) | function t(t){this._element=t}
function t (line 2) | function t(t,e){this._element=t,this._config=this._getConfig(e),this._ti...
function e (line 2) | function e(t,e){return t(e={exports:{}},e.exports),e.exports}
function n (line 2) | function n(t){return t&&t.default||t}
function s (line 2) | function s(t,e){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)+Math....
function o (line 2) | function o(){for(var t={},e=Object.keys(i),n=e.length,r=0;r<n;r++)t[e[r]...
function a (line 2) | function a(t){var e=o(),n=[t];for(e[t].distance=0;n.length;)for(var r=n....
function c (line 2) | function c(t,e){return function(n){return e(t(n))}}
function s (line 2) | function s(t,e){for(var n=[e[t].parent,t],r=i[e[t].parent][t],o=e[t].par...
function f (line 2) | function f(t){var e=function(e){return null==e?e:(arguments.length>1&&(e...
function d (line 2) | function d(t){var e=function(e){if(null==e)return e;arguments.length>1&&...
function b (line 2) | function b(t){if(t){var e=/^#([a-fA-F0-9]{3,4})$/i,n=/^#([a-fA-F0-9]{6}(...
function m (line 2) | function m(t){if(t){var e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d...
function v (line 2) | function v(t){if(t){var e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\....
function g (line 2) | function g(t){var e=b(t);return e&&e.slice(0,3)}
function y (line 2) | function y(t){var e=m(t);return e&&e.slice(0,3)}
function A (line 2) | function A(t){var e=b(t);return e||(e=m(t))||(e=v(t))?e[3]:void 0}
function _ (line 2) | function _(t,e){return e=void 0!==e&&3===t.length?e:t[3],"#"+S(t[0])+S(t...
function z (line 2) | function z(t,e){return e<1||t[3]&&t[3]<1?O(t,e):"rgb("+t[0]+", "+t[1]+",...
function O (line 2) | function O(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]...
function x (line 2) | function x(t,e){return e<1||t[3]&&t[3]<1?w(t,e):"rgb("+Math.round(t[0]/2...
function w (line 2) | function w(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(...
function L (line 2) | function L(t,e){return e<1||t[3]&&t[3]<1?N(t,e):"hsl("+t[0]+", "+t[1]+"%...
function N (line 2) | function N(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]...
function T (line 2) | function T(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+...
function C (line 2) | function C(t){return k[t.slice(0,3)]}
function q (line 2) | function q(t,e,n){return Math.min(Math.max(e,t),n)}
function S (line 2) | function S(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}
function D (line 2) | function D(t){return-1===["__proto__","prototype","constructor"].indexOf...
function tt (line 2) | function tt(t){return!t||R.isNullOrUndef(t.size)||R.isNullOrUndef(t.fami...
function pt (line 2) | function pt(t,e,n,r){var i,o,a,c,s,l,u,f,d,p=Object.keys(n);for(i=0,o=p....
function At (line 2) | function At(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineP...
function _t (line 2) | function _t(t,e){var n=t._chartjs;if(n){var r=n.listeners,i=r.indexOf(e)...
function wt (line 2) | function wt(t,e){var n=e.startAngle,r=e.endAngle,i=e.pixelMargin,o=i/e.o...
function Lt (line 2) | function Lt(t,e,n,r){var i,o=n.endAngle;for(r&&(n.endAngle=n.startAngle+...
function Nt (line 2) | function Nt(t,e,n){var r="inner"===e.borderAlign;r?(t.lineWidth=2*e.bord...
function Wt (line 2) | function Wt(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hi...
function Bt (line 2) | function Bt(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hi...
function Pt (line 2) | function Pt(t){return t&&void 0!==t.width}
function Rt (line 2) | function Rt(t){var e,n,r,i,o;return Pt(t)?(o=t.width/2,e=t.x-o,n=t.x+o,r...
function jt (line 2) | function jt(t,e,n){return t===e?n:t===n?e:t}
function It (line 2) | function It(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>...
function Ft (line 2) | function Ft(t,e,n){var r,i,o,a,c=t.borderWidth,s=It(t);return ct.isObjec...
function Ht (line 2) | function Ht(t){var e=Rt(t),n=e.right-e.left,r=e.bottom-e.top,i=Ft(t,n/2,...
function $t (line 2) | function $t(t,e,n){var r=null===e,i=null===n,o=!(!t||r&&i)&&Rt(t);return...
function te (line 2) | function te(t,e){var n,r,i,o,a=t._length;for(i=1,o=e.length;i<o;++i)a=Ma...
function ee (line 2) | function ee(t,e,n){var r,i,o=n.barThickness,a=e.stackCount,c=e.pixels[t]...
function ne (line 2) | function ne(t,e,n){var r,i=e.pixels,o=i[t],a=t>0?i[t-1]:null,c=t<i.lengt...
function be (line 2) | function be(t,e){var n=t&&t.options.ticks||{},r=n.reverse,i=void 0===n.m...
function me (line 2) | function me(t,e,n){var r=n/2,i=be(t,r),o=be(e,r);return{top:o.end,right:...
function ve (line 2) | function ve(t){var e,n,r,i;return ct.isObject(t)?(e=t.top,n=t.right,r=t....
function u (line 2) | function u(t,e,n){return Math.max(Math.min(t,n),e)}
function s (line 2) | function s(t,e,n){return Math.max(Math.min(t,n),e)}
function we (line 2) | function we(t,e){return t.native?{x:t.x,y:t.y}:ct.getRelativePosition(t,e)}
function Le (line 2) | function Le(t,e){var n,r,i,o,a,c,s=t._getSortedVisibleDatasetMetas();for...
function Ne (line 2) | function Ne(t,e){var n=[];return Le(t,(function(t){t.inRange(e.x,e.y)&&n...
function Te (line 2) | function Te(t,e,n,r){var i=Number.POSITIVE_INFINITY,o=[];return Le(t,(fu...
function Ce (line 2) | function Ce(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return fu...
function qe (line 2) | function qe(t,e,n){var r=we(e,t);n.axis=n.axis||"x";var i=Ce(n.axis),o=n...
function Ee (line 2) | function Ee(t,e){return ct.where(t,(function(t){return t.pos===e}))}
function We (line 2) | function We(t,e){return t.sort((function(t,n){var r=e?n:t,i=e?t:n;return...
function Be (line 2) | function Be(t){var e,n,r,i=[];for(e=0,n=(t||[]).length;e<n;++e)r=t[e],i....
function De (line 2) | function De(t,e){var n,r,i;for(n=0,r=t.length;n<r;++n)(i=t[n]).width=i.h...
function Xe (line 2) | function Xe(t){var e=Be(t),n=We(Ee(e,"left"),!0),r=We(Ee(e,"right")),i=W...
function Pe (line 2) | function Pe(t,e,n,r){return Math.max(t[n],e[n])+Math.max(t[r],e[r])}
function Re (line 2) | function Re(t,e,n){var r,i,o=n.box,a=t.maxPadding;if(n.size&&(t[n.pos]-=...
function je (line 2) | function je(t){var e=t.maxPadding;function n(n){var r=Math.max(e[n]-t[n]...
function Ie (line 2) | function Ie(t,e){var n=e.maxPadding;function r(t){var r={left:0,top:0,ri...
function Fe (line 2) | function Fe(t,e,n){var r,i,o,a,c,s,l=[];for(r=0,i=t.length;r<i;++r)(a=(o...
function He (line 2) | function He(t,e,n){var r,i,o,a,c=n.padding,s=e.x,l=e.y;for(r=0,i=t.lengt...
function nn (line 2) | function nn(t,e){var n=ct.getStyle(t,e),r=n&&n.match(/^(\d+)(\.\d+)?px$/...
function rn (line 2) | function rn(t,e){var n=t.style,r=t.getAttribute("height"),i=t.getAttribu...
function cn (line 2) | function cn(t,e,n){t.addEventListener(e,n,an)}
function sn (line 2) | function sn(t,e,n){t.removeEventListener(e,n,an)}
function ln (line 2) | function ln(t,e,n,r,i){return{type:t,chart:e,native:i||null,x:void 0!==n...
function un (line 2) | function un(t,e){var n=en[t.type]||t.type,r=ct.getRelativePosition(t,e);...
function fn (line 2) | function fn(t,e){var n=!1,r=[];return function(){r=Array.prototype.slice...
function dn (line 2) | function dn(t){var e=document.createElement("div");return e.className=t|...
function pn (line 2) | function pn(t){var e=1e6,n=dn(Ke),r=dn(Ke+"-expand"),i=dn(Ke+"-shrink");...
function hn (line 2) | function hn(t,e){var n=t[Ge]||(t[Ge]={}),r=n.renderProxy=function(t){t.a...
function Mn (line 2) | function Mn(t){var e=t[Ge]||{},n=e.renderProxy;n&&(ct.each(tn,(function(...
function bn (line 2) | function bn(t,e,n){var r=t[Ge]||(t[Ge]={}),i=r.resizer=pn(fn((function()...
function mn (line 2) | function mn(t){var e=t[Ge]||{},n=e.resizer;delete e.resizer,Mn(t),n&&n.p...
function vn (line 2) | function vn(t,e){var n=t[Ge]||(t[Ge]={});if(!n.containsStyles){n.contain...
function Ln (line 2) | function Ln(t,e){return e&&(ct.isArray(e)?Array.prototype.push.apply(t,e...
function Nn (line 2) | function Nn(t){return("string"==typeof t||t instanceof String)&&t.indexO...
function Tn (line 2) | function Tn(t){var e=t._xScale,n=t._yScale||t._scale,r=t._index,i=t._dat...
function Cn (line 2) | function Cn(t){var e=Q.global;return{xPadding:t.xPadding,yPadding:t.yPad...
function qn (line 2) | function qn(t,e){var n=t._chart.ctx,r=2*e.yPadding,i=0,o=e.body,a=o.redu...
function Sn (line 2) | function Sn(t,e){var n,r,i,o,a,c=t._model,s=t._chart,l=t._chart.chartAre...
function kn (line 2) | function kn(t,e,n,r){var i=t.x,o=t.y,a=t.caretSize,c=t.caretPadding,s=t....
function En (line 2) | function En(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.widt...
function Wn (line 2) | function Wn(t){return Ln([],Nn(t))}
function Rn (line 2) | function Rn(){return ct.merge(Object.create(null),[].slice.call(argument...
function jn (line 2) | function jn(){return ct.merge(Object.create(null),[].slice.call(argument...
function In (line 2) | function In(t){var e=(t=t||Object.create(null)).data=t.data||{};return e...
function Fn (line 2) | function Fn(t){var e=t.options;ct.each(t.scales,(function(e){$e.removeBo...
function Hn (line 2) | function Hn(t,e,n){var r,i=function(t){return t.id===r};do{r=e+n++}while...
function $n (line 2) | function $n(t){return"top"===t||"bottom"===t}
function Un (line 2) | function Un(t,e){return function(n,r){return n[t]===r[t]?n[e]-r[e]:n[t]-...
function t (line 2) | function t(t,e,n){var r;return"string"==typeof t?(r=parseInt(t,10),-1!==...
function e (line 2) | function e(t){return null!=t&&"none"!==t}
function n (line 2) | function n(n,r,i){var o=document.defaultView,a=ct._getParentNode(n),c=o....
function Jn (line 2) | function Jn(){throw new Error("This method is not implemented: either no...
function Kn (line 2) | function Kn(t){this.options=t||{}}
function ir (line 2) | function ir(t,e){for(var n=[],r=t.length/e,i=0,o=t.length;i<o;i+=r)n.pus...
function or (line 2) | function or(t,e,n){var r,i=t.getTicks().length,o=Math.min(e,i-1),a=t.get...
function ar (line 2) | function ar(t,e){ct.each(t,(function(t){var n,r=t.gc,i=r.length/2;if(i>e...
function cr (line 2) | function cr(t,e,n,r){var i,o,a,c,s,l,u,f,d,p,h,M,b,m=n.length,v=[],g=[],...
function sr (line 2) | function sr(t){return t.drawTicks?t.tickMarkLength:0}
function lr (line 2) | function lr(t){var e,n;return t.display?(e=ct.options._parseFont(t),n=ct...
function ur (line 2) | function ur(t,e){return ct.extend(ct.options._parseFont({fontFamily:nr(e...
function fr (line 2) | function fr(t){var e=ur(t,t.minor);return{minor:e,major:t.major.enabled?...
function dr (line 2) | function dr(t){var e,n,r,i=[];for(n=0,r=t.length;n<r;++n)void 0!==(e=t[n...
function pr (line 2) | function pr(t){var e,n,r=t.length;if(r<2)return!1;for(n=t[0],e=1;e<r;++e...
function hr (line 2) | function hr(t,e,n,r){var i,o,a,c,s=pr(t),l=(e.length-1)/r;if(!s)return M...
function Mr (line 2) | function Mr(t){var e,n,r=[];for(e=0,n=t.length;e<n;e++)t[e].major&&r.pus...
function br (line 2) | function br(t,e,n){var r,i,o=0,a=e[0];for(n=Math.ceil(n),r=0;r<t.length;...
function mr (line 2) | function mr(t,e,n,r){var i,o,a,c,s=nr(n,0),l=Math.min(nr(r,t.length),t.l...
function wr (line 2) | function wr(t,e){var n,r,i,o,a=[],c=1e-14,s=t.stepSize,l=s||1,u=t.maxTic...
function qr (line 2) | function qr(t,e,n){var r=[n.type,void 0===e&&void 0===n.stack?n.index:""...
function Sr (line 2) | function Sr(t,e,n,r){var i,o,a=t.options,c=qr(e,a.stacked,n),s=c.pos,l=c...
function kr (line 2) | function kr(t,e,n){var r,i,o=n.length;for(r=0;r<o;++r)i=t._parseValue(n[...
function Xr (line 2) | function Xr(t,e){var n,r,i=[],o=Br(t.min,Math.pow(10,Math.floor(Dr(e.min...
function Rr (line 2) | function Rr(t,e){return ct.isFinite(t)&&t>=0?t:e}
function f (line 2) | function f(t){return u?t.xAxisID===a.id:t.yAxisID===a.id}
function Vr (line 2) | function Vr(t){var e=t.ticks;return e.display&&t.display?Fr(e.fontSize,Q...
function Yr (line 2) | function Yr(t,e,n){return ct.isArray(n)?{w:ct.longestText(t,t.font,n),h:...
function Gr (line 2) | function Gr(t,e,n,r,i){return t===r||t===i?{start:e-n/2,end:e+n/2}:t<r||...
function Jr (line 2) | function Jr(t){var e,n,r,i=ct.options._parseFont(t.options.pointLabels),...
function Kr (line 2) | function Kr(t){return 0===t||180===t?"center":t<180?"left":"right"}
function Qr (line 2) | function Qr(t,e,n,r){var i,o,a=n.y+r/2;if(ct.isArray(e))for(i=0,o=e.leng...
function Zr (line 2) | function Zr(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}
function ti (line 2) | function ti(t){var e=t.ctx,n=t.options,r=n.pointLabels,i=Vr(n),o=t.getDi...
function ei (line 2) | function ei(t,e,n,r){var i,o=t.ctx,a=e.circular,c=t.chart.data.labels.le...
function ni (line 2) | function ni(t){return ct.isNumber(t)?t:0}
function di (line 2) | function di(t,e){return t-e}
function pi (line 2) | function pi(t){var e,n,r,i={},o=[];for(e=0,n=t.length;e<n;++e)i[r=t[e]]|...
function hi (line 2) | function hi(t){return ct.valueOrDefault(t.time.min,t.ticks.min)}
function Mi (line 2) | function Mi(t){return ct.valueOrDefault(t.time.max,t.ticks.max)}
function bi (line 2) | function bi(t,e,n,r){if("linear"===r||!t.length)return[{time:e,pos:0},{t...
function mi (line 2) | function mi(t,e,n){for(var r,i,o,a=0,c=t.length-1;a>=0&&a<=c;){if(i=t[(r...
function vi (line 2) | function vi(t,e,n,r){var i=mi(t,e,n),o=i.lo?i.hi?i.lo:t[t.length-2]:t[0]...
function gi (line 2) | function gi(t,e){var n=t._adapter,r=t.options.time,i=r.parser,o=i||r.for...
function yi (line 2) | function yi(t,e){if(ct.isNullOrUndef(e))return null;var n=t.options.time...
function Ai (line 2) | function Ai(t,e,n,r){var i,o,a,c=fi.length;for(i=fi.indexOf(t);i<c-1;++i...
function _i (line 2) | function _i(t,e,n,r,i){var o,a;for(o=fi.length-1;o>=fi.indexOf(n);o--)if...
function zi (line 2) | function zi(t){for(var e=fi.indexOf(t)+1,n=fi.length;e<n;++e)if(ui[fi[e]...
function Oi (line 2) | function Oi(t,e,n,r){var i,o=t._adapter,a=t.options,c=a.time,s=c.unit||A...
function xi (line 2) | function xi(t,e,n,r,i){var o,a,c=0,s=0;return i.offset&&e.length&&(o=vi(...
function wi (line 2) | function wi(t,e,n,r){var i,o,a=t._adapter,c=+a.startOf(e[0].value,r),s=e...
function Li (line 2) | function Li(t,e,n){var r,i,o=[],a={},c=e.length;for(r=0;r<c;++r)a[i=e[r]...
function Ei (line 2) | function Ei(t,e,n){var r,i=t._model||{},o=i.fill;if(void 0===o&&(o=!!i.b...
function Wi (line 2) | function Wi(t){var e,n=t.el._model||{},r=t.el._scale||{},i=t.fill,o=null...
function Bi (line 2) | function Bi(t){var e,n,r,i,o,a=t.el._scale,c=a.options,s=a.chart.data.la...
function Di (line 2) | function Di(t){return(t.el._scale||{}).getPointPositionForValue?Bi(t):Wi...
function Xi (line 2) | function Xi(t,e,n){var r,i=t[e].fill,o=[e];if(!n)return i;for(;!1!==i&&-...
function Pi (line 2) | function Pi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||...
function Ri (line 2) | function Ri(t){return t&&!t.skip}
function ji (line 2) | function ji(t,e,n,r,i){var o,a,c,s;if(r&&i){for(t.moveTo(e[0].x,e[0].y),...
function Ii (line 2) | function Ii(t,e,n,r,i,o){var a,c,s,l,u,f,d,p,h=e.length,M=r.spanGaps,b=[...
function Vi (line 2) | function Vi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}
function Gi (line 2) | function Gi(t,e){var n=new Yi({ctx:t.ctx,options:e,chart:t});$e.configur...
function Zi (line 2) | function Zi(t,e){var n=new Qi({ctx:t.ctx,options:e,chart:t});$e.configur...
function A (line 2) | function A(t,e,n){var r,i,o=(n=n||g).createElement("script");if(o.text=t...
function _ (line 2) | function _(t){return null==t?t+"":"object"==typeof t||"function"==typeof...
function x (line 2) | function x(t){var e=!!t&&"length"in t&&t.length,n=_(t);return!m(t)&&!v(t...
function ct (line 2) | function ct(t,e,r,i){var o,c,l,u,f,h,m,v=e&&e.ownerDocument,A=e?e.nodeTy...
function st (line 2) | function st(){var t=[];return function e(n,i){return t.push(n+" ")>r.cac...
function lt (line 2) | function lt(t){return t[y]=!0,t}
function ut (line 2) | function ut(t){var e=p.createElement("fieldset");try{return!!t(e)}catch(...
function ft (line 2) | function ft(t,e){for(var n=t.split("|"),i=n.length;i--;)r.attrHandle[n[i...
function dt (line 2) | function dt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourc...
function pt (line 2) | function pt(t){return function(e){return"input"===e.nodeName.toLowerCase...
function ht (line 2) | function ht(t){return function(e){var n=e.nodeName.toLowerCase();return(...
function Mt (line 2) | function Mt(t){return function(e){return"form"in e?e.parentNode&&!1===e....
function bt (line 2) | function bt(t){return lt((function(e){return e=+e,lt((function(n,r){for(...
function mt (line 2) | function mt(t){return t&&void 0!==t.getElementsByTagName&&t}
function vt (line 2) | function vt(){}
function gt (line 2) | function gt(t){for(var e=0,n=t.length,r="";e<n;e++)r+=t[e].value;return r}
function yt (line 2) | function yt(t,e,n){var r=e.dir,i=e.next,o=i||r,a=n&&"parentNode"===o,c=z...
function At (line 2) | function At(t){return t.length>1?function(e,n,r){for(var i=t.length;i--;...
function _t (line 2) | function _t(t,e,n,r,i){for(var o,a=[],c=0,s=t.length,l=null!=e;c<s;c++)(...
function zt (line 2) | function zt(t,e,n,r,i,o){return r&&!r[y]&&(r=zt(r)),i&&!i[y]&&(i=zt(i,o)...
function Ot (line 2) | function Ot(t){for(var e,n,i,o=t.length,a=r.relative[t[0].type],c=a||r.r...
function C (line 2) | function C(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerC...
function S (line 2) | function S(t,e,n){return m(e)?O.grep(t,(function(t,r){return!!e.call(t,r...
function D (line 2) | function D(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}
function P (line 2) | function P(t){return t}
function R (line 2) | function R(t){throw t}
function j (line 2) | function j(t,e,n,r){var i;try{t&&m(i=t.promise)?i.call(t).done(e).fail(n...
function a (line 2) | function a(t,e,n,i){return function(){var c=this,s=arguments,l=function(...
function H (line 2) | function H(){g.removeEventListener("DOMContentLoaded",H),r.removeEventLi...
function Y (line 2) | function Y(t,e){return e.toUpperCase()}
function G (line 2) | function G(t){return t.replace(U,"ms-").replace(V,Y)}
function K (line 2) | function K(){this.expando=O.expando+K.uid++}
function nt (line 2) | function nt(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r="data-"+e.re...
function ut (line 2) | function ut(t,e,n,r){var i,o,a=20,c=r?function(){return r.cur()}:functio...
function dt (line 2) | function dt(t){var e,n=t.ownerDocument,r=t.nodeName,i=ft[r];return i||(e...
function pt (line 2) | function pt(t,e){for(var n,r,i=[],o=0,a=t.length;o<a;o++)(r=t[o]).style&...
function yt (line 2) | function yt(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getEle...
function At (line 2) | function At(t,e){for(var n=0,r=t.length;n<r;n++)Q.set(t[n],"globalEval",...
function zt (line 2) | function zt(t,e,n,r,i){for(var o,a,c,s,l,u,f=e.createDocumentFragment(),...
function xt (line 2) | function xt(){return!0}
function wt (line 2) | function wt(){return!1}
function Lt (line 2) | function Lt(t,e){return t===function(){try{return g.activeElement}catch(...
function Nt (line 2) | function Nt(t,e,n,r,i,o){var a,c;if("object"==typeof e){for(c in"string"...
function Tt (line 2) | function Tt(t,e,n){n?(Q.set(t,e,!1),O.event.add(t,e,{namespace:!1,handle...
function kt (line 2) | function kt(t,e){return C(t,"table")&&C(11!==e.nodeType?e:e.firstChild,"...
function Et (line 2) | function Et(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}
function Wt (line 2) | function Wt(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.sli...
function Bt (line 2) | function Bt(t,e){var n,r,i,o,a,c;if(1===e.nodeType){if(Q.hasData(t)&&(c=...
function Dt (line 2) | function Dt(t,e){var n=e.nodeName.toLowerCase();"input"===n&&bt.test(t.t...
function Xt (line 2) | function Xt(t,e,n,r){e=s(e);var i,o,a,c,l,u,f=0,d=t.length,p=d-1,h=e[0],...
function Pt (line 2) | function Pt(t,e,n){for(var r,i=e?O.filter(e,t):t,o=0;null!=(r=i[o]);o++)...
function Ht (line 2) | function Ht(t,e,n){var r,i,o,a,c=t.style;return(n=n||jt(t))&&(""!==(a=n....
function $t (line 2) | function $t(t,e){return{get:function(){if(!t())return(this.get=e).apply(...
function t (line 2) | function t(){if(u){l.style.cssText="position:absolute;left:-11111px;widt...
function e (line 2) | function e(t){return Math.round(parseFloat(t))}
function Gt (line 2) | function Gt(t){var e=O.cssProps[t]||Yt[t];return e||(t in Vt?t:Yt[t]=fun...
function te (line 2) | function te(t,e,n){var r=it.exec(e);return r?Math.max(0,r[2]-(n||0))+(r[...
function ee (line 2) | function ee(t,e,n,r,i,o){var a="width"===e?1:0,c=0,s=0;if(n===(r?"border...
function ne (line 2) | function ne(t,e,n){var r=jt(t),i=(!b.boxSizingReliable()||n)&&"border-bo...
function re (line 2) | function re(t,e,n,r,i){return new re.prototype.init(t,e,n,r,i)}
function se (line 2) | function se(){oe&&(!1===g.hidden&&r.requestAnimationFrame?r.requestAnima...
function le (line 2) | function le(){return r.setTimeout((function(){ie=void 0})),ie=Date.now()}
function ue (line 2) | function ue(t,e){var n,r=0,i={height:t};for(e=e?1:0;r<4;r+=2-e)i["margin...
function fe (line 2) | function fe(t,e,n){for(var r,i=(de.tweeners[e]||[]).concat(de.tweeners["...
function de (line 2) | function de(t,e,n){var r,i,o=0,a=de.prefilters.length,c=O.Deferred().alw...
function me (line 2) | function me(t){return(t.match(X)||[]).join(" ")}
function ve (line 2) | function ve(t){return t.getAttribute&&t.getAttribute("class")||""}
function ge (line 2) | function ge(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(X)|...
function Ce (line 2) | function Ce(t,e,n,r){var i;if(Array.isArray(e))O.each(e,(function(e,i){n...
function je (line 2) | function je(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var ...
function Ie (line 2) | function Ie(t,e,n,r){var i={},o=t===Xe;function a(c){var s;return i[c]=!...
function Fe (line 2) | function Fe(t,e){var n,r,i=O.ajaxSettings.flatOptions||{};for(n in e)voi...
function x (line 2) | function x(t,e,a,s){var f,d,g,y,A,_=e;l||(l=!0,c&&r.clearTimeout(c),n=vo...
function xe (line 2) | function xe(t,e,n){switch(n.length){case 0:return t.call(e);case 1:retur...
function we (line 2) | function we(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i...
function Le (line 2) | function Le(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,...
function Ne (line 2) | function Ne(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););re...
function Te (line 2) | function Te(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t...
function Ce (line 2) | function Ce(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var ...
function qe (line 2) | function qe(t,e){return!!(null==t?0:t.length)&&je(t,e,0)>-1}
function Se (line 2) | function Se(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r])...
function ke (line 2) | function ke(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n...
function Ee (line 2) | function Ee(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];r...
function We (line 2) | function We(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);...
function Be (line 2) | function Be(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)...
function De (line 2) | function De(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t)...
function Pe (line 2) | function Pe(t,e,n){var r;return n(t,(function(t,n,i){if(e(t,n,i))return ...
function Re (line 2) | function Re(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t...
function je (line 2) | function je(t,e,n){return e==e?function(t,e,n){var r=n-1,i=t.length;for(...
function Ie (line 2) | function Ie(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return...
function Fe (line 2) | function Fe(t){return t!=t}
function He (line 2) | function He(t,e){var n=null==t?0:t.length;return n?Ye(t,e)/n:M}
function $e (line 2) | function $e(t){return function(e){return null==e?i:e[t]}}
function Ue (line 2) | function Ue(t){return function(e){return null==t?i:t[e]}}
function Ve (line 2) | function Ve(t,e,n,r,i){return i(t,(function(t,i,o){n=r?(r=!1,t):e(n,t,i,...
function Ye (line 2) | function Ye(t,e){for(var n,r=-1,o=t.length;++r<o;){var a=e(t[r]);a!==i&&...
function Ge (line 2) | function Ge(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}
function Je (line 2) | function Je(t){return t?t.slice(0,Mn(t)+1).replace(at,""):t}
function Ke (line 2) | function Ke(t){return function(e){return t(e)}}
function Qe (line 2) | function Qe(t,e){return ke(e,(function(e){return t[e]}))}
function Ze (line 2) | function Ze(t,e){return t.has(e)}
function tn (line 2) | function tn(t,e){for(var n=-1,r=t.length;++n<r&&je(e,t[n],0)>-1;);return n}
function en (line 2) | function en(t,e){for(var n=t.length;n--&&je(e,t[n],0)>-1;);return n}
function nn (line 2) | function nn(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}
function an (line 2) | function an(t){return"\\"+se[t]}
function cn (line 2) | function cn(t){return ne.test(t)}
function sn (line 2) | function sn(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){...
function ln (line 2) | function ln(t,e){return function(n){return t(e(n))}}
function un (line 2) | function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!=...
function fn (line 2) | function fn(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[...
function dn (line 2) | function dn(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[...
function pn (line 2) | function pn(t){return cn(t)?function(t){var e=te.lastIndex=0;for(;te.tes...
function hn (line 2) | function hn(t){return cn(t)?function(t){return t.match(te)||[]}(t):funct...
function Mn (line 2) | function Mn(t){for(var e=t.length;e--&&ct.test(t.charAt(e)););return e}
function In (line 2) | function In(t){if(ic(t)&&!Va(t)&&!(t instanceof Un)){if(t instanceof $n)...
function t (line 2) | function t(){}
function Hn (line 2) | function Hn(){}
function $n (line 2) | function $n(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!...
function Un (line 2) | function Un(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,thi...
function Vn (line 2) | function Vn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){va...
function Yn (line 2) | function Yn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){va...
function Gn (line 2) | function Gn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){va...
function Jn (line 2) | function Jn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Gn;++...
function Kn (line 2) | function Kn(t){var e=this.__data__=new Yn(t);this.size=e.size}
function Qn (line 2) | function Qn(t,e){var n=Va(t),r=!n&&Ua(t),i=!n&&!r&&Ka(t),o=!n&&!r&&!i&&d...
function Zn (line 2) | function Zn(t){var e=t.length;return e?t[Jr(0,e-1)]:i}
function tr (line 2) | function tr(t,e){return Xo(qi(t),lr(e,0,t.length))}
function er (line 2) | function er(t){return Xo(qi(t))}
function nr (line 2) | function nr(t,e,n){(n!==i&&!Fa(t[e],n)||n===i&&!(e in t))&&cr(t,e,n)}
function rr (line 2) | function rr(t,e,n){var r=t[e];Bt.call(t,e)&&Fa(r,n)&&(n!==i||e in t)||cr...
function ir (line 2) | function ir(t,e){for(var n=t.length;n--;)if(Fa(t[n][0],e))return n;retur...
function or (line 2) | function or(t,e,n,r){return hr(t,(function(t,i,o){e(r,t,n(t),o)})),r}
function ar (line 2) | function ar(t,e){return t&&Si(e,Ec(e),t)}
function cr (line 2) | function cr(t,e,n){"__proto__"==e&&se?se(t,e,{configurable:!0,enumerable...
function sr (line 2) | function sr(t,e){for(var n=-1,o=e.length,a=r(o),c=null==t;++n<o;)a[n]=c?...
function lr (line 2) | function lr(t,e,n){return t==t&&(n!==i&&(t=t<=n?t:n),e!==i&&(t=t>=e?t:e)...
function ur (line 2) | function ur(t,e,n,r,o,a){var c,s=1&e,l=2&e,u=4&e;if(n&&(c=o?n(t,r,o,a):n...
function fr (line 2) | function fr(t,e,n){var r=n.length;if(null==t)return!r;for(t=Lt(t);r--;){...
function dr (line 2) | function dr(t,e,n){if("function"!=typeof t)throw new Ct(o);return Eo((fu...
function pr (line 2) | function pr(t,e,n,r){var i=-1,o=qe,a=!0,c=t.length,s=[],l=e.length;if(!c...
function br (line 2) | function br(t,e){var n=!0;return hr(t,(function(t,r,i){return n=!!e(t,r,...
function mr (line 2) | function mr(t,e,n){for(var r=-1,o=t.length;++r<o;){var a=t[r],c=e(a);if(...
function vr (line 2) | function vr(t,e){var n=[];return hr(t,(function(t,r,i){e(t,r,i)&&n.push(...
function gr (line 2) | function gr(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=yo),i||(i=[]);++o<a...
function _r (line 2) | function _r(t,e){return t&&yr(t,e,Ec)}
function zr (line 2) | function zr(t,e){return t&&Ar(t,e,Ec)}
function Or (line 2) | function Or(t,e){return Ce(e,(function(e){return tc(t[e])}))}
function xr (line 2) | function xr(t,e){for(var n=0,r=(e=Ai(e,t)).length;null!=t&&n<r;)t=t[Ro(e...
function wr (line 2) | function wr(t,e,n){var r=e(t);return Va(t)?r:Ee(r,n(t))}
function Lr (line 2) | function Lr(t){return null==t?t===i?"[object Undefined]":"[object Null]"...
function Nr (line 2) | function Nr(t,e){return t>e}
function Tr (line 2) | function Tr(t,e){return null!=t&&Bt.call(t,e)}
function Cr (line 2) | function Cr(t,e){return null!=t&&e in Lt(t)}
function qr (line 2) | function qr(t,e,n){for(var o=n?Se:qe,a=t[0].length,c=t.length,s=c,l=r(c)...
function Sr (line 2) | function Sr(t,e,n){var r=null==(t=Co(t,e=Ai(e,t)))?t:t[Ro(Zo(e))];return...
function kr (line 2) | function kr(t){return ic(t)&&Lr(t)==v}
function Er (line 2) | function Er(t,e,n,r,o){return t===e||(null==t||null==e||!ic(t)&&!ic(e)?t...
function Wr (line 2) | function Wr(t,e,n,r){var o=n.length,a=o,c=!r;if(null==t)return!a;for(t=L...
function Br (line 2) | function Br(t){return!(!rc(t)||(e=t,Xt&&Xt in e))&&(tc(t)?It:vt).test(jo...
function Dr (line 2) | function Dr(t){return"function"==typeof t?t:null==t?as:"object"==typeof ...
function Xr (line 2) | function Xr(t){if(!wo(t))return gn(t);var e=[];for(var n in Lt(t))Bt.cal...
function Pr (line 2) | function Pr(t){if(!rc(t))return function(t){var e=[];if(null!=t)for(var ...
function Rr (line 2) | function Rr(t,e){return t<e}
function jr (line 2) | function jr(t,e){var n=-1,i=Ga(t)?r(t.length):[];return hr(t,(function(t...
function Ir (line 2) | function Ir(t){var e=po(t);return 1==e.length&&e[0][2]?No(e[0][0],e[0][1...
function Fr (line 2) | function Fr(t,e){return zo(t)&&Lo(e)?No(Ro(t),e):function(n){var r=Tc(n,...
function Hr (line 2) | function Hr(t,e,n,r,o){t!==e&&yr(e,(function(a,c){if(o||(o=new Kn),rc(a)...
function $r (line 2) | function $r(t,e){var n=t.length;if(n)return Ao(e+=e<0?n:0,n)?t[e]:i}
function Ur (line 2) | function Ur(t,e,n){e=e.length?ke(e,(function(t){return Va(t)?function(e)...
function Vr (line 2) | function Vr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],c=xr(...
function Yr (line 2) | function Yr(t,e,n,r){var i=r?Ie:je,o=-1,a=e.length,c=t;for(t===e&&(e=qi(...
function Gr (line 2) | function Gr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||...
function Jr (line 2) | function Jr(t,e){return t+me(On()*(e-t+1))}
function Kr (line 2) | function Kr(t,e){var n="";if(!t||e<1||e>h)return n;do{e%2&&(n+=t),(e=me(...
function Qr (line 2) | function Qr(t,e){return Wo(To(t,e,as),t+"")}
function Zr (line 2) | function Zr(t){return Zn(Fc(t))}
function ti (line 2) | function ti(t,e){var n=Fc(t);return Xo(n,lr(e,0,n.length))}
function ei (line 2) | function ei(t,e,n,r){if(!rc(t))return t;for(var o=-1,a=(e=Ai(e,t)).lengt...
function ii (line 2) | function ii(t){return Xo(Fc(t))}
function oi (line 2) | function oi(t,e,n){var i=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0...
function ai (line 2) | function ai(t,e){var n;return hr(t,(function(t,r,i){return!(n=e(t,r,i))}...
function ci (line 2) | function ci(t,e,n){var r=0,i=null==t?r:t.length;if("number"==typeof e&&e...
function si (line 2) | function si(t,e,n,r){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(...
function li (line 2) | function li(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],c=e...
function ui (line 2) | function ui(t){return"number"==typeof t?t:fc(t)?M:+t}
function fi (line 2) | function fi(t){if("string"==typeof t)return t;if(Va(t))return ke(t,fi)+"...
function di (line 2) | function di(t,e,n){var r=-1,i=qe,o=t.length,a=!0,c=[],s=c;if(n)a=!1,i=Se...
function pi (line 2) | function pi(t,e){return null==(t=Co(t,e=Ai(e,t)))||delete t[Ro(Zo(e))]}
function hi (line 2) | function hi(t,e,n,r){return ei(t,e,n(xr(t,e)),r)}
function Mi (line 2) | function Mi(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o...
function bi (line 2) | function bi(t,e){var n=t;return n instanceof Un&&(n=n.value()),We(e,(fun...
function mi (line 2) | function mi(t,e,n){var i=t.length;if(i<2)return i?di(t[0]):[];for(var o=...
function vi (line 2) | function vi(t,e,n){for(var r=-1,o=t.length,a=e.length,c={};++r<o;){var s...
function gi (line 2) | function gi(t){return Ja(t)?t:[]}
function yi (line 2) | function yi(t){return"function"==typeof t?t:as}
function Ai (line 2) | function Ai(t,e){return Va(t)?t:zo(t,e)?[t]:Po(Ac(t))}
function zi (line 2) | function zi(t,e,n){var r=t.length;return n=n===i?r:n,!e&&n>=r?t:oi(t,e,n)}
function xi (line 2) | function xi(t,e){if(e)return t.slice();var n=t.length,r=Ut?Ut(n):new t.c...
function wi (line 2) | function wi(t){var e=new t.constructor(t.byteLength);return new $t(e).se...
function Li (line 2) | function Li(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(...
function Ni (line 2) | function Ni(t,e){if(t!==e){var n=t!==i,r=null===t,o=t==t,a=fc(t),c=e!==i...
function Ti (line 2) | function Ti(t,e,n,i){for(var o=-1,a=t.length,c=n.length,s=-1,l=e.length,...
function Ci (line 2) | function Ci(t,e,n,i){for(var o=-1,a=t.length,c=-1,s=n.length,l=-1,u=e.le...
function qi (line 2) | function qi(t,e){var n=-1,i=t.length;for(e||(e=r(i));++n<i;)e[n]=t[n];re...
function Si (line 2) | function Si(t,e,n,r){var o=!n;n||(n={});for(var a=-1,c=e.length;++a<c;){...
function ki (line 2) | function ki(t,e){return function(n,r){var i=Va(n)?we:or,o=e?e():{};retur...
function Ei (line 2) | function Ei(t){return Qr((function(e,n){var r=-1,o=n.length,a=o>1?n[o-1]...
function Wi (line 2) | function Wi(t,e){return function(n,r){if(null==n)return n;if(!Ga(n))retu...
function Bi (line 2) | function Bi(t){return function(e,n,r){for(var i=-1,o=Lt(e),a=r(e),c=a.le...
function Di (line 2) | function Di(t){return function(e){var n=cn(e=Ac(e))?hn(e):i,r=n?n[0]:e.c...
function Xi (line 2) | function Xi(t){return function(e){return We(ts(Uc(e).replace(Qt,"")),t,"...
function Pi (line 2) | function Pi(t){return function(){var e=arguments;switch(e.length){case 0...
function Ri (line 2) | function Ri(t){return function(e,n,r){var o=Lt(e);if(!Ga(e)){var a=uo(n,...
function ji (line 2) | function ji(t){return io((function(e){var n=e.length,r=n,a=$n.prototype....
function Ii (line 2) | function Ii(t,e,n,o,a,c,s,l,u,d){var p=e&f,h=1&e,M=2&e,b=24&e,m=512&e,v=...
function Fi (line 2) | function Fi(t,e){return function(n,r){return function(t,e,n,r){return _r...
function Hi (line 2) | function Hi(t,e){return function(n,r){var o;if(n===i&&r===i)return e;if(...
function $i (line 2) | function $i(t){return io((function(e){return e=ke(e,Ke(uo())),Qr((functi...
function Ui (line 2) | function Ui(t,e){var n=(e=e===i?" ":fi(e)).length;if(n<2)return n?Kr(e,t...
function Vi (line 2) | function Vi(t){return function(e,n,o){return o&&"number"!=typeof o&&_o(e...
function Yi (line 2) | function Yi(t){return function(e,n){return"string"==typeof e&&"string"==...
function Gi (line 2) | function Gi(t,e,n,r,o,a,c,s,f,d){var p=8&e;e|=p?l:u,4&(e&=~(p?u:l))||(e&...
function Ji (line 2) | function Ji(t){var e=wt[t];return function(t,n){if(t=gc(t),(n=null==n?0:...
function Qi (line 2) | function Qi(t){return function(e){var n=mo(e);return n==x?sn(e):n==C?dn(...
function Zi (line 2) | function Zi(t,e,n,a,p,h,M,b){var m=2&e;if(!m&&"function"!=typeof t)throw...
function to (line 2) | function to(t,e,n,r){return t===i||Fa(t,kt[n])&&!Bt.call(r,n)?e:t}
function eo (line 2) | function eo(t,e,n,r,o,a){return rc(t)&&rc(e)&&(a.set(e,t),Hr(t,e,i,eo,a)...
function no (line 2) | function no(t){return cc(t)?i:t}
function ro (line 2) | function ro(t,e,n,r,o,a){var c=1&n,s=t.length,l=e.length;if(s!=l&&!(c&&l...
function io (line 2) | function io(t){return Wo(To(t,i,Yo),t+"")}
function oo (line 2) | function oo(t){return wr(t,Ec,Mo)}
function ao (line 2) | function ao(t){return wr(t,Wc,bo)}
function so (line 2) | function so(t){for(var e=t.name+"",n=kn[e],r=Bt.call(kn,e)?n.length:0;r-...
function lo (line 2) | function lo(t){return(Bt.call(In,"placeholder")?In:t).placeholder}
function uo (line 2) | function uo(){var t=In.iteratee||cs;return t=t===cs?Dr:t,arguments.lengt...
function fo (line 2) | function fo(t,e){var n,r,i=t.__data__;return("string"==(r=typeof(n=e))||...
function po (line 2) | function po(t){for(var e=Ec(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[...
function ho (line 2) | function ho(t,e){var n=function(t,e){return null==t?i:t[e]}(t,e);return ...
function vo (line 2) | function vo(t,e,n){for(var r=-1,i=(e=Ai(e,t)).length,o=!1;++r<i;){var a=...
function go (line 2) | function go(t){return"function"!=typeof t.constructor||wo(t)?{}:Fn(Vt(t))}
function yo (line 2) | function yo(t){return Va(t)||Ua(t)||!!(Kt&&t&&t[Kt])}
function Ao (line 2) | function Ao(t,e){var n=typeof t;return!!(e=null==e?h:e)&&("number"==n||"...
function _o (line 2) | function _o(t,e,n){if(!rc(n))return!1;var r=typeof e;return!!("number"==...
function zo (line 2) | function zo(t,e){if(Va(t))return!1;var n=typeof t;return!("number"!=n&&"...
function Oo (line 2) | function Oo(t){var e=so(t),n=In[e];if("function"!=typeof n||!(e in Un.pr...
function wo (line 2) | function wo(t){var e=t&&t.constructor;return t===("function"==typeof e&&...
function Lo (line 2) | function Lo(t){return t==t&&!rc(t)}
function No (line 2) | function No(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==i||t...
function To (line 2) | function To(t,e,n){return e=yn(e===i?t.length-1:e,0),function(){for(var ...
function Co (line 2) | function Co(t,e){return e.length<2?t:xr(t,oi(e,0,-1))}
function qo (line 2) | function qo(t,e){for(var n=t.length,r=An(e.length,n),o=qi(t);r--;){var a...
function So (line 2) | function So(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__pro...
function Bo (line 2) | function Bo(t,e,n){var r=e+"";return Wo(t,function(t,e){var n=e.length;i...
function Do (line 2) | function Do(t){var e=0,n=0;return function(){var r=_n(),o=16-(r-n);if(n=...
function Xo (line 2) | function Xo(t,e){var n=-1,r=t.length,o=r-1;for(e=e===i?r:e;++n<e;){var a...
function Ro (line 2) | function Ro(t){if("string"==typeof t||fc(t))return t;var e=t+"";return"0...
function jo (line 2) | function jo(t){if(null!=t){try{return Wt.call(t)}catch(t){}try{return t+...
function Io (line 2) | function Io(t){if(t instanceof Un)return t.clone();var e=new $n(t.__wrap...
function Uo (line 2) | function Uo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n...
function Vo (line 2) | function Vo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=r-1;ret...
function Yo (line 2) | function Yo(t){return(null==t?0:t.length)?gr(t,1):[]}
function Go (line 2) | function Go(t){return t&&t.length?t[0]:i}
function Zo (line 2) | function Zo(t){var e=null==t?0:t.length;return e?t[e-1]:i}
function ea (line 2) | function ea(t,e){return t&&t.length&&e&&e.length?Yr(t,e):t}
function ra (line 2) | function ra(t){return null==t?t:xn.call(t)}
function ca (line 2) | function ca(t){if(!t||!t.length)return[];var e=0;return t=Ce(t,(function...
function sa (line 2) | function sa(t,e){if(!t||!t.length)return[];var n=ca(t);return null==e?n:...
function Ma (line 2) | function Ma(t){var e=In(t);return e.__chain__=!0,e}
function ba (line 2) | function ba(t,e){return e(t)}
function Aa (line 2) | function Aa(t,e){return(Va(t)?Le:hr)(t,uo(e,3))}
function _a (line 2) | function _a(t,e){return(Va(t)?Ne:Mr)(t,uo(e,3))}
function wa (line 2) | function wa(t,e){return(Va(t)?ke:jr)(t,uo(e,3))}
function Ca (line 2) | function Ca(t,e,n){return e=n?i:e,e=t&&null==e?t.length:e,Zi(t,f,i,i,i,i...
function qa (line 2) | function qa(t,e){var n;if("function"!=typeof e)throw new Ct(o);return t=...
function Ea (line 2) | function Ea(t,e,n){var r,a,c,s,l,u,f=0,d=!1,p=!1,h=!0;if("function"!=typ...
function Da (line 2) | function Da(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)...
function Xa (line 2) | function Xa(t){if("function"!=typeof t)throw new Ct(o);return function()...
function Fa (line 2) | function Fa(t,e){return t===e||t!=t&&e!=e}
function Ga (line 2) | function Ga(t){return null!=t&&nc(t.length)&&!tc(t)}
function Ja (line 2) | function Ja(t){return ic(t)&&Ga(t)}
function Za (line 2) | function Za(t){if(!ic(t))return!1;var e=Lr(t);return e==_||"[object DOME...
function tc (line 2) | function tc(t){if(!rc(t))return!1;var e=Lr(t);return e==z||e==O||"[objec...
function ec (line 2) | function ec(t){return"number"==typeof t&&t==mc(t)}
function nc (line 2) | function nc(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=h}
function rc (line 2) | function rc(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}
function ic (line 2) | function ic(t){return null!=t&&"object"==typeof t}
function ac (line 2) | function ac(t){return"number"==typeof t||ic(t)&&Lr(t)==w}
function cc (line 2) | function cc(t){if(!ic(t)||Lr(t)!=L)return!1;var e=Vt(t);if(null===e)retu...
function uc (line 2) | function uc(t){return"string"==typeof t||!Va(t)&&ic(t)&&Lr(t)==q}
function fc (line 2) | function fc(t){return"symbol"==typeof t||ic(t)&&Lr(t)==S}
function Mc (line 2) | function Mc(t){if(!t)return[];if(Ga(t))return uc(t)?hn(t):qi(t);if(te&&t...
function bc (line 2) | function bc(t){return t?(t=gc(t))===p||t===-1/0?17976931348623157e292*(t...
function mc (line 2) | function mc(t){var e=bc(t),n=e%1;return e==e?n?e-n:e:0}
function vc (line 2) | function vc(t){return t?lr(mc(t),0,b):0}
function gc (line 2) | function gc(t){if("number"==typeof t)return t;if(fc(t))return M;if(rc(t)...
function yc (line 2) | function yc(t){return Si(t,Wc(t))}
function Ac (line 2) | function Ac(t){return null==t?"":fi(t)}
function Tc (line 2) | function Tc(t,e,n){var r=null==t?i:xr(t,e);return r===i?n:r}
function Cc (line 2) | function Cc(t,e){return null!=t&&vo(t,e,Cr)}
function Ec (line 2) | function Ec(t){return Ga(t)?Qn(t):Xr(t)}
function Wc (line 2) | function Wc(t){return Ga(t)?Qn(t,!0):Pr(t)}
function Rc (line 2) | function Rc(t,e){if(null==t)return{};var n=ke(ao(t),(function(t){return[...
function Fc (line 2) | function Fc(t){return null==t?[]:Qe(t,Ec(t))}
function $c (line 2) | function $c(t){return Zc(Ac(t).toLowerCase())}
function Uc (line 2) | function Uc(t){return(t=Ac(t))&&t.replace(At,rn).replace(Zt,"")}
function ts (line 2) | function ts(t,e,n){return t=Ac(t),(e=n?i:e)===i?function(t){return re.te...
function rs (line 2) | function rs(t){return function(){return t}}
function as (line 2) | function as(t){return t}
function cs (line 2) | function cs(t){return Dr("function"==typeof t?t:ur(t,1))}
function us (line 2) | function us(t,e,n){var r=Ec(e),i=Or(e,r);null!=n||rc(e)&&(i.length||!r.l...
function fs (line 2) | function fs(){}
function Ms (line 2) | function Ms(t){return zo(t)?$e(Ro(t)):function(t){return function(e){ret...
function vs (line 2) | function vs(){return[]}
function gs (line 2) | function gs(){return!1}
function u (line 2) | function u(t){return t>96?t-87:t>64?t-29:t-48}
function f (line 2) | function f(t){var e=0,n=t.split("."),r=n[0],i=n[1]||"",o=1,a=0,c=1;for(4...
function d (line 2) | function d(t){for(var e=0;e<t.length;e++)t[e]=f(t[e])}
function p (line 2) | function p(t,e){var n,r=[];for(n=0;n<e.length;n++)r[n]=t[e[n]];return r}
function h (line 2) | function h(t){var e=t.split("|"),n=e[2].split(" "),r=e[3].split(""),i=e[...
function M (line 2) | function M(t){t&&this._set(h(t))}
function b (line 2) | function b(t,e){this.name=t,this.zones=e}
function m (line 2) | function m(t){var e=t.toTimeString(),n=e.match(/\([a-z ]+\)/i);"GMT"===(...
function v (line 2) | function v(t){this.zone=t,this.offsetScore=0,this.abbrScore=0}
function g (line 2) | function g(t,e){for(var n,r;r=6e4*((e.at-t.at)/12e4|0);)(n=new m(new Dat...
function y (line 2) | function y(t,e){return t.offsetScore!==e.offsetScore?t.offsetScore-e.off...
function A (line 2) | function A(t,e){var n,r;for(d(e),n=0;n<e.length;n++)r=e[n],a[r]=a[r]||{}...
function _ (line 2) | function _(t){var e,n,r,i=t.length,c={},s=[];for(e=0;e<i;e++)for(n in r=...
function z (line 2) | function z(){try{var t=Intl.DateTimeFormat().resolvedOptions().timeZone;...
function O (line 2) | function O(t){return(t||"").toLowerCase().replace(/\//g,"_")}
function x (line 2) | function x(t){var e,r,i,a;for("string"==typeof t&&(t=[t]),e=0;e<t.length...
function w (line 2) | function w(t,e){t=O(t);var i,a=n[t];return a instanceof M?a:"string"==ty...
function L (line 2) | function L(t){var e,n,i,a;for("string"==typeof t&&(t=[t]),e=0;e<t.length...
function N (line 2) | function N(t){var e="X"===t._f||"x"===t._f;return!(!t._a||void 0!==t._tz...
function T (line 2) | function T(t){"undefined"!=typeof console&&console.error}
function C (line 2) | function C(e){var n=Array.prototype.slice.call(arguments,0,-1),r=argumen...
function k (line 2) | function k(t){return function(){return this._z?this._z.abbr(this):t.call...
function E (line 2) | function E(t){return function(){return this._z=null,t.apply(this,argumen...
function r (line 2) | function r(){return e.apply(null,arguments)}
function i (line 2) | function i(t){e=t}
function o (line 2) | function o(t){return t instanceof Array||"[object Array]"===Object.proto...
function a (line 2) | function a(t){return null!=t&&"[object Object]"===Object.prototype.toStr...
function c (line 2) | function c(t,e){return Object.prototype.hasOwnProperty.call(t,e)}
function s (line 2) | function s(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnProp...
function l (line 2) | function l(t){return void 0===t}
function u (line 2) | function u(t){return"number"==typeof t||"[object Number]"===Object.proto...
function f (line 2) | function f(t){return t instanceof Date||"[object Date]"===Object.prototy...
function d (line 2) | function d(t,e){var n,r=[];for(n=0;n<t.length;++n)r.push(e(t[n],n));retu...
function p (line 2) | function p(t,e){for(var n in e)c(e,n)&&(t[n]=e[n]);return c(e,"toString"...
function h (line 2) | function h(t,e,n,r){return Vn(t,e,n,r,!0).utc()}
function M (line 2) | function M(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,...
function b (line 2) | function b(t){return null==t._pf&&(t._pf=M()),t._pf}
function m (line 2) | function m(t){if(null==t._isValid){var e=b(t),r=n.call(e.parsedDateParts...
function v (line 2) | function v(t){var e=h(NaN);return null!=t?p(b(e),t):b(e).userInvalidated...
function A (line 2) | function A(t,e){var n,r,i;if(l(e._isAMomentObject)||(t._isAMomentObject=...
function _ (line 2) | function _(t){A(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),...
function z (line 2) | function z(t){return t instanceof _||null!=t&&null!=t._isAMomentObject}
function O (line 2) | function O(t){!1===r.suppressDeprecationWarnings&&"undefined"!=typeof co...
function x (line 2) | function x(t,e){var n=!0;return p((function(){if(null!=r.deprecationHand...
function N (line 2) | function N(t,e){null!=r.deprecationHandler&&r.deprecationHandler(t,e),L[...
function T (line 2) | function T(t){return"undefined"!=typeof Function&&t instanceof Function|...
function C (line 2) | function C(t){var e,n;for(n in t)c(t,n)&&(T(e=t[n])?this[n]=e:this["_"+n...
function q (line 2) | function q(t,e){var n,r=p({},t);for(n in e)c(e,n)&&(a(t[n])&&a(e[n])?(r[...
function S (line 2) | function S(t){null!=t&&this.set(t)}
function E (line 2) | function E(t,e,n){var r=this._calendar[t]||this._calendar.sameElse;retur...
function W (line 2) | function W(t,e,n){var r=""+Math.abs(t),i=e-r.length;return(t>=0?n?"+":""...
function R (line 2) | function R(t,e,n,r){var i=r;"string"==typeof r&&(i=function(){return thi...
function j (line 2) | function j(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.repl...
function I (line 2) | function I(t){var e,n,r=t.match(B);for(e=0,n=r.length;e<n;e++)P[r[e]]?r[...
function F (line 2) | function F(t,e){return t.isValid()?(e=H(e,t.localeData()),X[e]=X[e]||I(e...
function H (line 2) | function H(t,e){var n=5;function r(t){return e.longDateFormat(t)||t}for(...
function U (line 2) | function U(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toU...
function Y (line 2) | function Y(){return this._invalidDate}
function K (line 2) | function K(t){return this._ordinal.replace("%d",t)}
function Z (line 2) | function Z(t,e,n,r){var i=this._relativeTime[n];return T(i)?i(t,e,n,r):i...
function tt (line 2) | function tt(t,e){var n=this._relativeTime[t>0?"future":"past"];return T(...
function nt (line 2) | function nt(t,e){var n=t.toLowerCase();et[n]=et[n+"s"]=et[e]=t}
function rt (line 2) | function rt(t){return"string"==typeof t?et[t]||et[t.toLowerCase()]:void 0}
function it (line 2) | function it(t){var e,n,r={};for(n in t)c(t,n)&&(e=rt(n))&&(r[e]=t[n]);re...
function at (line 2) | function at(t,e){ot[t]=e}
function ct (line 2) | function ct(t){var e,n=[];for(e in t)c(t,e)&&n.push({unit:e,priority:ot[...
function st (line 2) | function st(t){return t%4==0&&t%100!=0||t%400==0}
function lt (line 2) | function lt(t){return t<0?Math.ceil(t)||0:Math.floor(t)}
function ut (line 2) | function ut(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=lt(e)),n}
function ft (line 2) | function ft(t,e){return function(n){return null!=n?(pt(this,t,n),r.updat...
function dt (line 2) | function dt(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():...
function pt (line 2) | function pt(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&st(t.year())...
function ht (line 2) | function ht(t){return T(this[t=rt(t)])?this[t]():this}
function Mt (line 2) | function Mt(t,e){if("object"==typeof t){var n,r=ct(t=it(t));for(n=0;n<r....
function Et (line 2) | function Et(t,e,n){bt[t]=T(e)?e:function(t,r){return t&&n?n:e}}
function Wt (line 2) | function Wt(t,e){return c(bt,t)?bt[t](e._strict,e._locale):new RegExp(Bt...
function Bt (line 2) | function Bt(t){return Dt(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^...
function Dt (line 2) | function Dt(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}
function Pt (line 2) | function Pt(t,e){var n,r=e;for("string"==typeof t&&(t=[t]),u(e)&&(r=func...
function Rt (line 2) | function Rt(t,e){Pt(t,(function(t,n,r,i){r._w=r._w||{},e(t,r._w,r,i)}))}
function jt (line 2) | function jt(t,e,n){null!=e&&c(Xt,t)&&Xt[t](e,n._a,n,t)}
function Qt (line 2) | function Qt(t,e){return(t%e+e)%e}
function Zt (line 2) | function Zt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=Qt(e,12);return ...
function oe (line 2) | function oe(t,e){return t?o(this._months)?this._months[t.month()]:this._...
function ae (line 2) | function ae(t,e){return t?o(this._monthsShort)?this._monthsShort[t.month...
function ce (line 2) | function ce(t,e,n){var r,i,o,a=t.toLocaleLowerCase();if(!this._monthsPar...
function se (line 2) | function se(t,e,n){var r,i,o;if(this._monthsParseExact)return ce.call(th...
function le (line 2) | function le(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if...
function ue (line 2) | function ue(t){return null!=t?(le(this,t),r.updateOffset(this,!0),this):...
function fe (line 2) | function fe(){return Zt(this.year(),this.month())}
function de (line 2) | function de(t){return this._monthsParseExact?(c(this,"_monthsRegex")||he...
function pe (line 2) | function pe(t){return this._monthsParseExact?(c(this,"_monthsRegex")||he...
function he (line 2) | function he(){function t(t,e){return e.length-t.length}var e,n,r=[],i=[]...
function Me (line 2) | function Me(t){return st(t)?366:365}
function me (line 2) | function me(){return st(this.year())}
function ve (line 2) | function ve(t,e,n,r,i,o,a){var c;return t<100&&t>=0?(c=new Date(t+400,e,...
function ge (line 2) | function ge(t){var e,n;return t<100&&t>=0?((n=Array.prototype.slice.call...
function ye (line 2) | function ye(t,e,n){var r=7+e-n;return-(7+ge(t,0,r).getUTCDay()-e)%7+r-1}
function Ae (line 2) | function Ae(t,e,n,r,i){var o,a,c=1+7*(e-1)+(7+n-r)%7+ye(t,r,i);return c<...
function _e (line 2) | function _e(t,e,n){var r,i,o=ye(t.year(),e,n),a=Math.floor((t.dayOfYear(...
function ze (line 2) | function ze(t,e,n){var r=ye(t,e,n),i=ye(t+1,e,n);return(Me(t)-r+i)/7}
function Oe (line 2) | function Oe(t){return _e(t,this._week.dow,this._week.doy).week}
function we (line 2) | function we(){return this._week.dow}
function Le (line 2) | function Le(){return this._week.doy}
function Ne (line 2) | function Ne(t){var e=this.localeData().week(this);return null==t?e:this....
function Te (line 2) | function Te(t){var e=_e(this,1,4).week;return null==t?e:this.add(7*(t-e)...
function Ce (line 2) | function Ce(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=...
function qe (line 2) | function qe(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(...
function Se (line 2) | function Se(t,e){return t.slice(e,7).concat(t.slice(0,e))}
function Pe (line 2) | function Pe(t,e){var n=o(this._weekdays)?this._weekdays:this._weekdays[t...
function Re (line 2) | function Re(t){return!0===t?Se(this._weekdaysShort,this._week.dow):t?thi...
function je (line 2) | function je(t){return!0===t?Se(this._weekdaysMin,this._week.dow):t?this....
function Ie (line 2) | function Ie(t,e,n){var r,i,o,a=t.toLocaleLowerCase();if(!this._weekdaysP...
function Fe (line 2) | function Fe(t,e,n){var r,i,o;if(this._weekdaysParseExact)return Ie.call(...
function He (line 2) | function He(t){if(!this.isValid())return null!=t?this:NaN;var e=this._is...
function $e (line 2) | function $e(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.da...
function Ue (line 2) | function Ue(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){va...
function Ve (line 2) | function Ve(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")...
function Ye (line 2) | function Ye(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")...
function Ge (line 2) | function Ge(t){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")...
function Je (line 2) | function Je(){function t(t,e){return e.length-t.length}var e,n,r,i,o,a=[...
function Ke (line 2) | function Ke(){return this.hours()%12||12}
function Qe (line 2) | function Qe(){return this.hours()||24}
function Ze (line 2) | function Ze(t,e){R(t,0,0,(function(){return this.localeData().meridiem(t...
function tn (line 2) | function tn(t,e){return e._meridiemParse}
function en (line 2) | function en(t){return"p"===(t+"").toLowerCase().charAt(0)}
function on (line 2) | function on(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}
function un (line 2) | function un(t,e){var n,r=Math.min(t.length,e.length);for(n=0;n<r;n+=1)if...
function fn (line 2) | function fn(t){return t?t.toLowerCase().replace("_","-"):t}
function dn (line 2) | function dn(t){for(var e,n,r,i,o=0;o<t.length;){for(e=(i=fn(t[o]).split(...
function pn (line 2) | function pn(e){var n=null;if(void 0===sn[e]&&t&&t.exports)try{n=an._abbr...
function hn (line 2) | function hn(t,e){var n;return t&&((n=l(e)?mn(t):Mn(t,e))?an=n:"undefined...
function Mn (line 2) | function Mn(t,e){if(null!==e){var n,r=cn;if(e.abbr=t,null!=sn[t])N("defi...
function bn (line 2) | function bn(t,e){if(null!=e){var n,r,i=cn;null!=sn[t]&&null!=sn[t].paren...
function mn (line 2) | function mn(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abb...
function vn (line 2) | function vn(){return w(sn)}
function gn (line 2) | function gn(t){var e,n=t._a;return n&&-2===b(t).overflow&&(e=n[Ht]<0||n[...
function Nn (line 2) | function Nn(t){var e,n,r,i,o,a,c=t._i,s=yn.exec(c)||An.exec(c);if(s){for...
function Tn (line 2) | function Tn(t,e,n,r,i,o){var a=[Cn(t),ee.indexOf(e),parseInt(n,10),parse...
function Cn (line 2) | function Cn(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}
function qn (line 2) | function qn(t){return t.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+...
function Sn (line 2) | function Sn(t,e,n){return!t||Ee.indexOf(t)===new Date(e[0],e[1],e[2]).ge...
function kn (line 2) | function kn(t,e,n){if(t)return Ln[t];if(e)return 0;var r=parseInt(n,10),...
function En (line 2) | function En(t){var e,n=wn.exec(qn(t._i));if(n){if(e=Tn(n[4],n[3],n[2],n[...
function Wn (line 2) | function Wn(t){var e=xn.exec(t._i);null===e?(Nn(t),!1===t._isValid&&(del...
function Bn (line 2) | function Bn(t,e,n){return null!=t?t:null!=e?e:n}
function Dn (line 2) | function Dn(t){var e=new Date(r.now());return t._useUTC?[e.getUTCFullYea...
function Xn (line 2) | function Xn(t){var e,n,r,i,o,a=[];if(!t._d){for(r=Dn(t),t._w&&null==t._a...
function Pn (line 2) | function Pn(t){var e,n,r,i,o,a,c,s,l;null!=(e=t._w).GG||null!=e.W||null!...
function Rn (line 2) | function Rn(t){if(t._f!==r.ISO_8601)if(t._f!==r.RFC_2822){t._a=[],b(t).e...
function jn (line 2) | function jn(t,e,n){var r;return null==n?e:null!=t.meridiemHour?t.meridie...
function In (line 2) | function In(t){var e,n,r,i,o,a,c=!1;if(0===t._f.length)return b(t).inval...
function Fn (line 2) | function Fn(t){if(!t._d){var e=it(t._i),n=void 0===e.day?e.date:e.day;t....
function Hn (line 2) | function Hn(t){var e=new _(gn($n(t)));return e._nextDay&&(e.add(1,"d"),e...
function $n (line 2) | function $n(t){var e=t._i,n=t._f;return t._locale=t._locale||mn(t._l),nu...
function Un (line 2) | function Un(t){var e=t._i;l(e)?t._d=new Date(r.now()):f(e)?t._d=new Date...
function Vn (line 2) | function Vn(t,e,n,r,i){var c={};return!0!==e&&!1!==e||(r=e,e=void 0),!0!...
function Yn (line 2) | function Yn(t,e,n,r){return Vn(t,e,n,r,!1)}
function Kn (line 2) | function Kn(t,e){var n,r;if(1===e.length&&o(e[0])&&(e=e[0]),!e.length)re...
function Qn (line 2) | function Qn(){return Kn("isBefore",[].slice.call(arguments,0))}
function Zn (line 2) | function Zn(){return Kn("isAfter",[].slice.call(arguments,0))}
function nr (line 2) | function nr(t){var e,n,r=!1;for(e in t)if(c(t,e)&&(-1===It.call(er,e)||n...
function rr (line 2) | function rr(){return this._isValid}
function ir (line 2) | function ir(){return Lr(NaN)}
function or (line 2) | function or(t){var e=it(t),n=e.year||0,r=e.quarter||0,i=e.month||0,o=e.w...
function ar (line 2) | function ar(t){return t instanceof or}
function cr (line 2) | function cr(t){return t<0?-1*Math.round(-1*t):Math.round(t)}
function sr (line 2) | function sr(t,e,n){var r,i=Math.min(t.length,e.length),o=Math.abs(t.leng...
function lr (line 2) | function lr(t,e){R(t,0,0,(function(){var t=this.utcOffset(),n="+";return...
function fr (line 2) | function fr(t,e){var n,r,i=(e||"").match(t);return null===i?null:0===(r=...
function dr (line 2) | function dr(t,e){var n,i;return e._isUTC?(n=e.clone(),i=(z(t)||f(t)?t.va...
function pr (line 2) | function pr(t){return-Math.round(t._d.getTimezoneOffset())}
function hr (line 2) | function hr(t,e,n){var i,o=this._offset||0;if(!this.isValid())return nul...
function Mr (line 2) | function Mr(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffs...
function br (line 2) | function br(t){return this.utcOffset(0,t)}
function mr (line 2) | function mr(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t...
function vr (line 2) | function vr(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if...
function gr (line 2) | function gr(t){return!!this.isValid()&&(t=t?Yn(t).utcOffset():0,(this.ut...
function yr (line 2) | function yr(){return this.utcOffset()>this.clone().month(0).utcOffset()|...
function Ar (line 2) | function Ar(){if(!l(this._isDSTShifted))return this._isDSTShifted;var t,...
function _r (line 2) | function _r(){return!!this.isValid()&&!this._isUTC}
function zr (line 2) | function zr(){return!!this.isValid()&&this._isUTC}
function Or (line 2) | function Or(){return!!this.isValid()&&this._isUTC&&0===this._offset}
function Lr (line 2) | function Lr(t,e){var n,r,i,o=t,a=null;return ar(t)?o={ms:t._milliseconds...
function Nr (line 2) | function Nr(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)...
function Tr (line 2) | function Tr(t,e){var n={};return n.months=e.month()-t.month()+12*(e.year...
function Cr (line 2) | function Cr(t,e){var n;return t.isValid()&&e.isValid()?(e=dr(e,t),t.isBe...
function qr (line 2) | function qr(t,e){return function(n,r){var i;return null===r||isNaN(+r)||...
function Sr (line 2) | function Sr(t,e,n,i){var o=e._milliseconds,a=cr(e._days),c=cr(e._months)...
function Wr (line 2) | function Wr(t){return"string"==typeof t||t instanceof String}
function Br (line 2) | function Br(t){return z(t)||f(t)||Wr(t)||u(t)||Xr(t)||Dr(t)||null==t}
function Dr (line 2) | function Dr(t){var e,n,r=a(t)&&!s(t),i=!1,o=["years","year","y","months"...
function Xr (line 2) | function Xr(t){var e=o(t),n=!1;return e&&(n=0===t.filter((function(e){re...
function Pr (line 2) | function Pr(t){var e,n,r=a(t)&&!s(t),i=!1,o=["sameDay","nextDay","lastDa...
function Rr (line 2) | function Rr(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"...
function jr (line 2) | function jr(t,e){1===arguments.length&&(arguments[0]?Br(arguments[0])?(t...
function Ir (line 2) | function Ir(){return new _(this)}
function Fr (line 2) | function Fr(t,e){var n=z(t)?t:Yn(t);return!(!this.isValid()||!n.isValid(...
function Hr (line 2) | function Hr(t,e){var n=z(t)?t:Yn(t);return!(!this.isValid()||!n.isValid(...
function $r (line 2) | function $r(t,e,n,r){var i=z(t)?t:Yn(t),o=z(e)?e:Yn(e);return!!(this.isV...
function Ur (line 2) | function Ur(t,e){var n,r=z(t)?t:Yn(t);return!(!this.isValid()||!r.isVali...
function Vr (line 2) | function Vr(t,e){return this.isSame(t,e)||this.isAfter(t,e)}
function Yr (line 2) | function Yr(t,e){return this.isSame(t,e)||this.isBefore(t,e)}
function Gr (line 2) | function Gr(t,e,n){var r,i,o;if(!this.isValid())return NaN;if(!(r=dr(t,t...
function Jr (line 2) | function Jr(t,e){if(t.date()<e.date())return-Jr(e,t);var n=12*(e.year()-...
function Kr (line 2) | function Kr(){return this.clone().locale("en").format("ddd MMM DD YYYY H...
function Qr (line 2) | function Qr(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clon...
function Zr (line 2) | function Zr(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */...
function ti (line 2) | function ti(t){t||(t=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);va...
function ei (line 2) | function ei(t,e){return this.isValid()&&(z(t)&&t.isValid()||Yn(t).isVali...
function ni (line 2) | function ni(t){return this.from(Yn(),t)}
function ri (line 2) | function ri(t,e){return this.isValid()&&(z(t)&&t.isValid()||Yn(t).isVali...
function ii (line 2) | function ii(t){return this.to(Yn(),t)}
function oi (line 2) | function oi(t){var e;return void 0===t?this._locale._abbr:(null!=(e=mn(t...
function ci (line 2) | function ci(){return this._locale}
function di (line 2) | function di(t,e){return(t%e+e)%e}
function pi (line 2) | function pi(t,e,n){return t<100&&t>=0?new Date(t+400,e,n)-fi:new Date(t,...
function hi (line 2) | function hi(t,e,n){return t<100&&t>=0?Date.UTC(t+400,e,n)-fi:Date.UTC(t,...
function Mi (line 2) | function Mi(t){var e,n;if(void 0===(t=rt(t))||"millisecond"===t||!this.i...
function bi (line 2) | function bi(t){var e,n;if(void 0===(t=rt(t))||"millisecond"===t||!this.i...
function mi (line 2) | function mi(){return this._d.valueOf()-6e4*(this._offset||0)}
function vi (line 2) | function vi(){return Math.floor(this.valueOf()/1e3)}
function gi (line 2) | function gi(){return new Date(this.valueOf())}
function yi (line 2) | function yi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.m...
function Ai (line 2) | function Ai(){var t=this;return{years:t.year(),months:t.month(),date:t.d...
function _i (line 2) | function _i(){return this.isValid()?this.toISOString():null}
function zi (line 2) | function zi(){return m(this)}
function Oi (line 2) | function Oi(){return p({},b(this))}
function xi (line 2) | function xi(){return b(this).overflow}
function wi (line 2) | function wi(){return{input:this._i,format:this._f,locale:this._locale,is...
function Li (line 2) | function Li(t,e){var n,i,o,a=this._eras||mn("en")._eras;for(n=0,i=a.leng...
function Ni (line 2) | function Ni(t,e,n){var r,i,o,a,c,s=this.eras();for(t=t.toUpperCase(),r=0...
function Ti (line 2) | function Ti(t,e){var n=t.since<=t.until?1:-1;return void 0===e?r(t.since...
function Ci (line 2) | function Ci(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<...
function qi (line 2) | function qi(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<...
function Si (line 2) | function Si(){var t,e,n,r=this.localeData().eras();for(t=0,e=r.length;t<...
function ki (line 2) | function ki(){var t,e,n,i,o=this.localeData().eras();for(t=0,e=o.length;...
function Ei (line 2) | function Ei(t){return c(this,"_erasNameRegex")||ji.call(this),t?this._er...
function Wi (line 2) | function Wi(t){return c(this,"_erasAbbrRegex")||ji.call(this),t?this._er...
function Bi (line 2) | function Bi(t){return c(this,"_erasNarrowRegex")||ji.call(this),t?this._...
function Di (line 2) | function Di(t,e){return e.erasAbbrRegex(t)}
function Xi (line 2) | function Xi(t,e){return e.erasNameRegex(t)}
function Pi (line 2) | function Pi(t,e){return e.erasNarrowRegex(t)}
function Ri (line 2) | function Ri(t,e){return e._eraYearOrdinalRegex||Nt}
function ji (line 2) | function ji(){var t,e,n=[],r=[],i=[],o=[],a=this.eras();for(t=0,e=a.leng...
function Ii (line 2) | function Ii(t,e){R(0,[t,t.length],0,e)}
function Fi (line 2) | function Fi(t){return Gi.call(this,t,this.week(),this.weekday(),this.loc...
function Hi (line 2) | function Hi(t){return Gi.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}
function $i (line 2) | function $i(){return ze(this.year(),1,4)}
function Ui (line 2) | function Ui(){return ze(this.isoWeekYear(),1,4)}
function Vi (line 2) | function Vi(){var t=this.localeData()._week;return ze(this.year(),t.dow,...
function Yi (line 2) | function Yi(){var t=this.localeData()._week;return ze(this.weekYear(),t....
function Gi (line 2) | function Gi(t,e,n,r,i){var o;return null==t?_e(this,r,i).year:(e>(o=ze(t...
function Ji (line 2) | function Ji(t,e,n,r,i){var o=Ae(t,e,n,r,i),a=ge(o.year,0,o.dayOfYear);re...
function Ki (line 2) | function Ki(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3...
function Zi (line 2) | function Zi(t){var e=Math.round((this.clone().startOf("day")-this.clone(...
function io (line 2) | function io(t,e){e[Gt]=ut(1e3*("0."+t))}
function oo (line 2) | function oo(){return this._isUTC?"UTC":""}
function ao (line 2) | function ao(){return this._isUTC?"Coordinated Universal Time":""}
function so (line 2) | function so(t){return Yn(1e3*t)}
function lo (line 2) | function lo(){return Yn.apply(null,arguments).parseZone()}
function uo (line 2) | function uo(t){return t}
function po (line 2) | function po(t,e,n,r){var i=mn(),o=h().set(r,e);return i[n](o,t)}
function ho (line 2) | function ho(t,e,n){if(u(t)&&(e=t,t=void 0),t=t||"",null!=e)return po(t,e...
function Mo (line 2) | function Mo(t,e,n,r){"boolean"==typeof t?(u(e)&&(n=e,e=void 0),e=e||""):...
function bo (line 2) | function bo(t,e){return ho(t,e,"months")}
function mo (line 2) | function mo(t,e){return ho(t,e,"monthsShort")}
function vo (line 2) | function vo(t,e,n){return Mo(t,e,n,"weekdays")}
function go (line 2) | function go(t,e,n){return Mo(t,e,n,"weekdaysShort")}
function yo (line 2) | function yo(t,e,n){return Mo(t,e,n,"weekdaysMin")}
function _o (line 2) | function _o(){var t=this._data;return this._milliseconds=Ao(this._millis...
function zo (line 2) | function zo(t,e,n,r){var i=Lr(e,n);return t._milliseconds+=r*i._millisec...
function Oo (line 2) | function Oo(t,e){return zo(this,t,e,1)}
function xo (line 2) | function xo(t,e){return zo(this,t,e,-1)}
function wo (line 2) | function wo(t){return t<0?Math.floor(t):Math.ceil(t)}
function Lo (line 2) | function Lo(){var t,e,n,r,i,o=this._milliseconds,a=this._days,c=this._mo...
function No (line 2) | function No(t){return 4800*t/146097}
function To (line 2) | function To(t){return 146097*t/4800}
function Co (line 2) | function Co(t){if(!this.isValid())return NaN;var e,n,r=this._millisecond...
function qo (line 2) | function qo(){return this.isValid()?this._milliseconds+864e5*this._days+...
function So (line 2) | function So(t){return function(){return this.as(t)}}
function Io (line 2) | function Io(){return Lr(this)}
function Fo (line 2) | function Fo(t){return t=rt(t),this.isValid()?this[t+"s"]():NaN}
function Ho (line 2) | function Ho(t){return function(){return this.isValid()?this._data[t]:NaN}}
function Qo (line 2) | function Qo(){return lt(this.days()/7)}
function ea (line 2) | function ea(t,e,n,r,i){return i.relativeTime(e||1,!!n,t,r)}
function na (line 2) | function na(t,e,n,r){var i=Lr(t).abs(),o=Zo(i.as("s")),a=Zo(i.as("m")),c...
function ra (line 2) | function ra(t){return void 0===t?Zo:"function"==typeof t&&(Zo=t,!0)}
function ia (line 2) | function ia(t,e){return void 0!==ta[t]&&(void 0===e?ta[t]:(ta[t]=e,"s"==...
function oa (line 2) | function oa(t,e){if(!this.isValid())return this.localeData().invalidDate...
function ca (line 2) | function ca(t){return(t>0)-(t<0)||+t}
function sa (line 2) | function sa(){if(!this.isValid())return this.localeData().invalidDate();...
function a (line 2) | function a(t){return t&&"[object Function]"==={}.toString.call(t)}
function c (line 2) | function c(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.default...
function s (line 2) | function s(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}
function l (line 2) | function l(t){if(!t)return document.body;switch(t.nodeName){case"HTML":c...
function u (line 2) | function u(t){return t&&t.referenceNode?t.referenceNode:t}
function p (line 2) | function p(t){return 11===t?f:10===t?d:f||d}
function h (line 2) | function h(t){if(!t)return document.documentElement;for(var e=p(10)?docu...
function M (line 2) | function M(t){return null!==t.parentNode?M(t.parentNode):t}
function b (line 2) | function b(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.docum...
function m (line 2) | function m(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[...
function v (line 2) | function v(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&argumen...
function g (line 2) | function g(t,e){var n="x"===e?"Left":"Top",r="Left"===n?"Right":"Bottom"...
function y (line 2) | function y(t,e,n,r){return Math.max(e["offset"+t],e["scroll"+t],n["clien...
function A (line 2) | function A(t){var e=t.body,n=t.documentElement,r=p(10)&&getComputedStyle...
function t (line 2) | function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.en...
function w (line 2) | function w(t){return x({},t,{right:t.left+t.width,bottom:t.top+t.height})}
function L (line 2) | function L(t){var e={};try{if(p(10)){e=t.getBoundingClientRect();var n=m...
function N (line 2) | function N(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&argumen...
function T (line 2) | function T(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments...
function C (line 2) | function C(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fi...
function q (line 2) | function q(t){if(!t||!t.parentElement||p())return document.documentEleme...
function S (line 2) | function S(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]&&arg...
function k (line 2) | function k(t){return t.width*t.height}
function E (line 2) | function E(t,e,n,r,i){var o=arguments.length>5&&void 0!==arguments[5]?ar...
function W (line 2) | function W(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?argume...
function B (line 2) | function B(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=pa...
function D (line 2) | function D(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"...
function X (line 2) | function X(t,e,n){n=n.split("-")[0];var r=B(t),i={width:r.width,height:r...
function P (line 2) | function P(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}
function R (line 2) | function R(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array...
function j (line 2) | function j(){if(!this.state.isDestroyed){var t={instance:this,styles:{},...
function I (line 2) | function I(t,e){return t.some((function(t){var n=t.name;return t.enabled...
function F (line 2) | function F(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpp...
function H (line 2) | function H(){return this.state.isDestroyed=!0,I(this.modifiers,"applySty...
function $ (line 2) | function $(t){var e=t.ownerDocument;return e?e.defaultView:window}
function U (line 2) | function U(t,e,n,r){var i="BODY"===t.nodeName,o=i?t.ownerDocument.defaul...
function V (line 2) | function V(t,e,n,r){n.updateBound=r,$(t).addEventListener("resize",n.upd...
function Y (line 2) | function Y(){this.state.eventsEnabled||(this.state=V(this.reference,this...
function G (line 2) | function G(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(thi...
function J (line 2) | function J(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}
function K (line 2) | function K(t,e){Object.keys(e).forEach((function(n){var r="";-1!==["widt...
function Z (line 2) | function Z(t,e,n){var r=P(t,(function(t){return t.name===e})),i=!!r&&t.s...
function nt (line 2) | function nt(t){var e=arguments.length>1&&void 0!==arguments[1]&&argument...
function at (line 2) | function at(t,e,n,r){var i=[0,0],o=-1!==["right","left"].indexOf(r),a=t....
function t (line 2) | function t(e,n){var r=this,i=arguments.length>2&&void 0!==arguments[2]?a...
function i (line 2) | function i(){throw new Error("setTimeout has not been defined")}
function o (line 2) | function o(){throw new Error("clearTimeout has not been defined")}
function a (line 2) | function a(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&s...
function f (line 2) | function f(){l&&c&&(l=!1,c.length?s=c.concat(s):u=-1,s.length&&d())}
function d (line 2) | function d(){if(!l){var t=a(f);l=!0;for(var e=s.length;e;){for(c=s,s=[];...
function p (line 2) | function p(t,e){this.fun=t,this.array=e}
function h (line 2) | function h(){}
function c (line 2) | function c(t){for(var e=-1,n=0;n<a.length;n++)if(a[n].identifier===t){e=...
function s (line 2) | function s(t,e){for(var n={},r=[],i=0;i<t.length;i++){var o=t[i],s=e.bas...
function l (line 2) | function l(t){var e=document.createElement("style"),r=t.attributes||{};i...
function d (line 2) | function d(t,e,n,r){var i=n?"":r.media?"@media ".concat(r.media," {").co...
function p (line 2) | function p(t,e,n){var r=n.css,i=n.media,o=n.sourceMap;if(i?t.setAttribut...
function b (line 2) | function b(t,e){var n,r,i;if(e.singleton){var o=M++;n=h||(h=l(e)),r=d.bi...
function n (line 2) | function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{...
function u (line 2) | function u(t){return Object.prototype.toString.call(t).slice(8,-1).toLow...
function f (line 2) | function f(t,e,n,r,i,o,a,c){var s=typeof(t=t||{}).default;"object"!==s&&...
function r (line 2) | function r(t,e){for(var n=[],r={},i=0;i<e.length;i++){var o=e[i],a=o[0],...
function p (line 2) | function p(t,e,n,i){l=n,f=i||{};var a=r(t,e);return h(a),function(e){for...
function h (line 2) | function h(t){for(var e=0;e<t.length;e++){var n=t[e],r=o[n.id];if(r){r.r...
function M (line 2) | function M(){var t=document.createElement("style");return t.type="text/c...
function b (line 2) | function b(t){var e,n,r=document.querySelector('style[data-vue-ssr-id~="...
function g (line 2) | function g(t,e,n,r){var i=n?"":r.css;if(t.styleSheet)t.styleSheet.cssTex...
function y (line 2) | function y(t,e){var n=e.css,r=e.media,i=e.sourceMap;if(r&&t.setAttribute...
function r (line 2) | function r(t,e,n,r,i,o,a,c){var s,l="function"==typeof t?t.options:t;if(...
function r (line 2) | function r(t){var i=n[t];if(void 0!==i)return i.exports;var o=n[t]={id:t...
FILE: tests/CreatesApplication.php
type CreatesApplication (line 7) | trait CreatesApplication
method createApplication (line 14) | public function createApplication()
FILE: tests/Feature/Auth/AuthenticationTest.php
class AuthenticationTest (line 10) | class AuthenticationTest extends TestCase
method test_login_screen_can_be_rendered (line 14) | public function test_login_screen_can_be_rendered()
method test_users_can_authenticate_using_the_login_screen (line 21) | public function test_users_can_authenticate_using_the_login_screen()
method test_users_can_not_authenticate_with_invalid_password (line 34) | public function test_users_can_not_authenticate_with_invalid_password()
FILE: tests/Feature/Auth/EmailVerificationTest.php
class EmailVerificationTest (line 13) | class EmailVerificationTest extends TestCase
method test_email_verification_screen_can_be_rendered (line 17) | public function test_email_verification_screen_can_be_rendered()
method test_email_can_be_verified (line 28) | public function test_email_can_be_verified()
method test_email_is_not_verified_with_invalid_hash (line 49) | public function test_email_is_not_verified_with_invalid_hash()
FILE: tests/Feature/Auth/PasswordConfirmationTest.php
class PasswordConfirmationTest (line 9) | class PasswordConfirmationTest extends TestCase
method test_confirm_password_screen_can_be_rendered (line 13) | public function test_confirm_password_screen_can_be_rendered()
method test_password_can_be_confirmed (line 22) | public function test_password_can_be_confirmed()
method test_password_is_not_confirmed_with_invalid_password (line 34) | public function test_password_is_not_confirmed_with_invalid_password()
FILE: tests/Feature/Auth/PasswordResetTest.php
class PasswordResetTest (line 11) | class PasswordResetTest extends TestCase
method test_reset_password_link_screen_can_be_rendered (line 15) | public function test_reset_password_link_screen_can_be_rendered()
method test_reset_password_link_can_be_requested (line 22) | public function test_reset_password_link_can_be_requested()
method test_reset_password_screen_can_be_rendered (line 33) | public function test_reset_password_screen_can_be_rendered()
method test_password_can_be_reset_with_valid_token (line 50) | public function test_password_can_be_reset_with_valid_token()
FILE: tests/Feature/Auth/RegistrationTest.php
class RegistrationTest (line 9) | class RegistrationTest extends TestCase
method test_registration_screen_can_be_rendered (line 13) | public function test_registration_screen_can_be_rendered()
method test_new_users_can_register (line 20) | public function test_new_users_can_register()
FILE: tests/Feature/CategoryFiltersTest.php
class CategoryFiltersTest (line 14) | class CategoryFiltersTest extends TestCase
method selecting_a_category_filters_correct (line 19) | public function selecting_a_category_filters_correct()
method the_category_query_string_category_filters_correct (line 45) | public function the_category_query_string_category_filters_correct()
method selecting_a_status_and_a_category_filters_correct (line 87) | public function selecting_a_status_and_a_category_filters_correct()
method the_category_query_string_filters_correctly_with_status_and_category (line 140) | public function the_category_query_string_filters_correctly_with_statu...
method selecting_all_categories_filters_correctly (line 192) | public function selecting_all_categories_filters_correctly()
FILE: tests/Feature/Comments/AddCommentTest.php
class AddCommentTest (line 13) | class AddCommentTest extends TestCase
method add_comment_livewire_component_renders (line 18) | public function add_comment_livewire_component_renders()
method add_comment_form_renders_when_user_is_logged_in (line 28) | public function add_comment_form_renders_when_user_is_logged_in()
method add_comment_form_does_not_render_when_user_is_logged_out (line 40) | public function add_comment_form_does_not_render_when_user_is_logged_o...
method add_comment_form_validation_works (line 50) | public function add_comment_form_validation_works()
FILE: tests/Feature/Comments/DeleteCommentTest.php
class DeleteCommentTest (line 17) | class DeleteCommentTest extends TestCase
method shows_delete_comment_livewire_component_when_user_has_authorization (line 22) | public function shows_delete_comment_livewire_component_when_user_has_...
method does_not_shows_delete_comment_livewire_component_when_user_does_not_have_authorization (line 33) | public function does_not_shows_delete_comment_livewire_component_when_...
method delete_comment_is_set_correctly_when_user_clicks_it_from_menu (line 44) | public function delete_comment_is_set_correctly_when_user_clicks_it_fr...
method deleting_a_comment_works_when_user_has_authorization (line 63) | public function deleting_a_comment_works_when_user_has_authorization()
method delete_a_comment_does_not_work_when_user_does_not_have_authorization (line 85) | public function delete_a_comment_does_not_work_when_user_does_not_have...
method deleting_a_comment_shows_on_menu_when_user_has_authorization (line 104) | public function deleting_a_comment_shows_on_menu_when_user_has_authori...
FILE: tests/Feature/Comments/EditCommentTest.php
class EditCommentTest (line 17) | class EditCommentTest extends TestCase
method shows_edit_comment_livewire_component_when_user_has_authorization (line 22) | public function shows_edit_comment_livewire_component_when_user_has_au...
method does_not_shows_
Condensed preview — 236 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,674K chars).
[
{
"path": ".editorconfig",
"chars": 258,
"preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntrim_"
},
{
"path": ".gitattributes",
"chars": 111,
"preview": "* text=auto\n*.css linguist-vendored\n*.scss linguist-vendored\n*.js linguist-vendored\nCHANGELOG.md export-ignore\n"
},
{
"path": ".gitignore",
"chars": 207,
"preview": "/node_modules\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n.env\n.env.backup\n.phpunit.result.cache\ndocker-compose.o"
},
{
"path": ".styleci.yml",
"chars": 194,
"preview": "php:\n preset: laravel\n version: 8\n disabled:\n - no_unused_imports\n finder:\n not-name:\n - index.php\n "
},
{
"path": "README.md",
"chars": 4051,
"preview": "<p align=\"center\"><a href=\"https://laravel.com\" target=\"_blank\"><img src=\"https://raw.githubusercontent.com/laravel/art/"
},
{
"path": "app/Console/Kernel.php",
"chars": 827,
"preview": "<?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as C"
},
{
"path": "app/Exceptions/DuplicateVoteException.php",
"chars": 108,
"preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\n\nclass DuplicateVoteException extends Exception\n{\n //\n}\n"
},
{
"path": "app/Exceptions/Handler.php",
"chars": 787,
"preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\nuse Throwable;\n\nclas"
},
{
"path": "app/Exceptions/VoteNotFoundException.php",
"chars": 107,
"preview": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\n\nclass VoteNotFoundException extends Exception\n{\n //\n}\n"
},
{
"path": "app/Http/Controllers/Auth/AuthenticatedSessionController.php",
"chars": 1231,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Auth\\LoginReques"
},
{
"path": "app/Http/Controllers/Auth/ConfirmablePasswordController.php",
"chars": 1089,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
},
{
"path": "app/Http/Controllers/Auth/EmailVerificationNotificationController.php",
"chars": 711,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
},
{
"path": "app/Http/Controllers/Auth/EmailVerificationPromptController.php",
"chars": 586,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
},
{
"path": "app/Http/Controllers/Auth/NewPasswordController.php",
"chars": 2300,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Auth\\Events\\PasswordRes"
},
{
"path": "app/Http/Controllers/Auth/PasswordResetLinkController.php",
"chars": 1377,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse Illum"
},
{
"path": "app/Http/Controllers/Auth/RegisteredUserController.php",
"chars": 1406,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse App\\Providers"
},
{
"path": "app/Http/Controllers/Auth/VerifyEmailController.php",
"chars": 900,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Providers\\RouteServiceProvider"
},
{
"path": "app/Http/Controllers/CategoryController.php",
"chars": 1806,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\StoreCategoryRequest;\nuse App\\Http\\Requests\\UpdateCategory"
},
{
"path": "app/Http/Controllers/CommentController.php",
"chars": 1782,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\StoreCommentRequest;\nuse App\\Http\\Requests\\UpdateCommentRe"
},
{
"path": "app/Http/Controllers/Controller.php",
"chars": 361,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundat"
},
{
"path": "app/Http/Controllers/IdeaController.php",
"chars": 1926,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\StoreIdeaRequest;\nuse App\\Http\\Requests\\UpdateIdeaRequest;"
},
{
"path": "app/Http/Controllers/StatusController.php",
"chars": 1758,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\StoreStatusRequest;\nuse App\\Http\\Requests\\UpdateStatusRequ"
},
{
"path": "app/Http/Controllers/VoteController.php",
"chars": 1710,
"preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\StoreVoteRequest;\nuse App\\Http\\Requests\\UpdateVoteRequest;"
},
{
"path": "app/Http/Kernel.php",
"chars": 2484,
"preview": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n "
},
{
"path": "app/Http/Livewire/AddComment.php",
"chars": 1033,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse App\\Models\\Idea;\nuse App\\Notifications\\CommentAdded;\nus"
},
{
"path": "app/Http/Livewire/CommentNotifications.php",
"chars": 1917,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse Illuminate\\Notifications\\DatabaseNotification;\nuse Live"
},
{
"path": "app/Http/Livewire/CreateIdea.php",
"chars": 1174,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Category;\nuse App\\Models\\Idea;\nuse Livewire\\Component;\nuse Symfony\\C"
},
{
"path": "app/Http/Livewire/DeleteComment.php",
"chars": 842,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse Livewire\\Component;\nuse Symfony\\Component\\HttpFoundatio"
},
{
"path": "app/Http/Livewire/DeleteIdea.php",
"chars": 872,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse App\\Models\\Idea;\nuse App\\Models\\Vote;\nuse Livewire\\Comp"
},
{
"path": "app/Http/Livewire/EditComment.php",
"chars": 989,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse Livewire\\Component;\nuse Symfony\\Component\\HttpFoundatio"
},
{
"path": "app/Http/Livewire/EditIdea.php",
"chars": 1288,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Category;\nuse App\\Models\\Idea;\nuse App\\Models\\Status;\nuse Livewire\\C"
},
{
"path": "app/Http/Livewire/IdeaComment.php",
"chars": 819,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse Livewire\\Component;\n\nclass IdeaComment extends Componen"
},
{
"path": "app/Http/Livewire/IdeaComments.php",
"chars": 1035,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse App\\Models\\Idea;\nuse Livewire\\Component;\nuse Livewire\\W"
},
{
"path": "app/Http/Livewire/IdeaIndex.php",
"chars": 1194,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Exceptions\\DuplicateVoteException;\nuse App\\Exceptions\\VoteNotFoundException"
},
{
"path": "app/Http/Livewire/IdeaShow.php",
"chars": 1931,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Exceptions\\DuplicateVoteException;\nuse App\\Exceptions\\VoteNotFoundException"
},
{
"path": "app/Http/Livewire/IdeasIndex.php",
"chars": 3109,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Category;\nuse App\\Models\\Idea;\nuse App\\Models\\Status;\nuse App\\Models"
},
{
"path": "app/Http/Livewire/MarkCommentAsNotSpam.php",
"chars": 843,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse Livewire\\Component;\nuse Symfony\\Component\\HttpFoundatio"
},
{
"path": "app/Http/Livewire/MarkCommentAsSpam.php",
"chars": 815,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Comment;\nuse Livewire\\Component;\nuse Symfony\\Component\\HttpFoundatio"
},
{
"path": "app/Http/Livewire/MarkIdeaAsNotSpam.php",
"chars": 681,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Idea;\nuse Livewire\\Component;\nuse Symfony\\Component\\HttpFoundation\\R"
},
{
"path": "app/Http/Livewire/MarkIdeaAsSpam.php",
"chars": 636,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Idea;\nuse Livewire\\Component;\nuse Symfony\\Component\\HttpFoundation\\R"
},
{
"path": "app/Http/Livewire/SetStatus.php",
"chars": 1283,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Jobs\\NotifyAllVoters;\nuse App\\Mail\\IdeaStatusUpdatedMailable;\nuse App\\Model"
},
{
"path": "app/Http/Livewire/StatusFilters.php",
"chars": 1066,
"preview": "<?php\n\nnamespace App\\Http\\Livewire;\n\nuse App\\Models\\Status;\nuse Illuminate\\Support\\Facades\\Route;\nuse Livewire\\Component"
},
{
"path": "app/Http/Middleware/Authenticate.php",
"chars": 469,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Auth\\Middleware\\Authenticate as Middleware;\n\nclass Authenticate ex"
},
{
"path": "app/Http/Middleware/EncryptCookies.php",
"chars": 294,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCook"
},
{
"path": "app/Http/Middleware/PreventRequestsDuringMaintenance.php",
"chars": 353,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance as Mid"
},
{
"path": "app/Http/Middleware/RedirectIfAuthenticated.php",
"chars": 734,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Providers\\RouteServiceProvider;\nuse Closure;\nuse Illuminate\\Http\\Request;"
},
{
"path": "app/Http/Middleware/TrimStrings.php",
"chars": 368,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as Middleware;\n\nclass TrimS"
},
{
"path": "app/Http/Middleware/TrustHosts.php",
"chars": 354,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Middleware\\TrustHosts as Middleware;\n\nclass TrustHosts extend"
},
{
"path": "app/Http/Middleware/TrustProxies.php",
"chars": 636,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Middleware\\TrustProxies as Middleware;\nuse Illuminate\\Http\\Re"
},
{
"path": "app/Http/Middleware/VerifyCsrfToken.php",
"chars": 307,
"preview": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass V"
},
{
"path": "app/Http/Requests/Auth/LoginRequest.php",
"chars": 2209,
"preview": "<?php\n\nnamespace App\\Http\\Requests\\Auth;\n\nuse Illuminate\\Auth\\Events\\Lockout;\nuse Illuminate\\Foundation\\Http\\FormRequest"
},
{
"path": "app/Http/Requests/StoreCategoryRequest.php",
"chars": 494,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCategoryRequest extends For"
},
{
"path": "app/Http/Requests/StoreCommentRequest.php",
"chars": 493,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreCommentRequest extends Form"
},
{
"path": "app/Http/Requests/StoreIdeaRequest.php",
"chars": 490,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreIdeaRequest extends FormReq"
},
{
"path": "app/Http/Requests/StoreStatusRequest.php",
"chars": 492,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreStatusRequest extends FormR"
},
{
"path": "app/Http/Requests/StoreVoteRequest.php",
"chars": 490,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreVoteRequest extends FormReq"
},
{
"path": "app/Http/Requests/UpdateCategoryRequest.php",
"chars": 495,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateCategoryRequest extends Fo"
},
{
"path": "app/Http/Requests/UpdateCommentRequest.php",
"chars": 494,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateCommentRequest extends For"
},
{
"path": "app/Http/Requests/UpdateIdeaRequest.php",
"chars": 491,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateIdeaRequest extends FormRe"
},
{
"path": "app/Http/Requests/UpdateStatusRequest.php",
"chars": 493,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateStatusRequest extends Form"
},
{
"path": "app/Http/Requests/UpdateVoteRequest.php",
"chars": 491,
"preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateVoteRequest extends FormRe"
},
{
"path": "app/Jobs/NotifyAllVoters.php",
"chars": 1087,
"preview": "<?php\n\nnamespace App\\Jobs;\n\nuse App\\Mail\\IdeaStatusUpdatedMailable;\nuse App\\Models\\Idea;\nuse Illuminate\\Bus\\Queueable;\nu"
},
{
"path": "app/Mail/IdeaStatusUpdatedMailable.php",
"chars": 662,
"preview": "<?php\n\nnamespace App\\Mail;\n\nuse App\\Models\\Idea;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Mail\\Mailable;\nuse Illumin"
},
{
"path": "app/Models/Category.php",
"chars": 264,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
},
{
"path": "app/Models/Comment.php",
"chars": 501,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
},
{
"path": "app/Models/Idea.php",
"chars": 1880,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse App\\Exceptions\\DuplicateVoteException;\nuse App\\Exceptions\\VoteNotFoundException;\nuse C"
},
{
"path": "app/Models/Status.php",
"chars": 849,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
},
{
"path": "app/Models/User.php",
"chars": 1885,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User"
},
{
"path": "app/Models/Vote.php",
"chars": 205,
"preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
},
{
"path": "app/Notifications/CommentAdded.php",
"chars": 1711,
"preview": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Comment;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queu"
},
{
"path": "app/Policies/CategoryPolicy.php",
"chars": 2168,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Category;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthoriz"
},
{
"path": "app/Policies/CommentPolicy.php",
"chars": 2252,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Comment;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthoriza"
},
{
"path": "app/Policies/IdeaPolicy.php",
"chars": 2233,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Idea;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorizatio"
},
{
"path": "app/Policies/StatusPolicy.php",
"chars": 2124,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Status;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorizat"
},
{
"path": "app/Policies/VotePolicy.php",
"chars": 2080,
"preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\User;\nuse App\\Models\\Vote;\nuse Illuminate\\Auth\\Access\\HandlesAuthorizatio"
},
{
"path": "app/Providers/AppServiceProvider.php",
"chars": 548,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Blade;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass Ap"
},
{
"path": "app/Providers/AuthServiceProvider.php",
"chars": 585,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\nuse"
},
{
"path": "app/Providers/BroadcastServiceProvider.php",
"chars": 380,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\ServiceProvider;\n\nclas"
},
{
"path": "app/Providers/EventServiceProvider.php",
"chars": 685,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illuminate\\Auth\\Listeners\\SendEmailVerificat"
},
{
"path": "app/Providers/HorizonServiceProvider.php",
"chars": 1120,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Gate;\nuse Laravel\\Horizon\\Horizon;\nuse Laravel\\Horizon\\H"
},
{
"path": "app/Providers/RouteServiceProvider.php",
"chars": 1676,
"preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Cache\\RateLimiting\\Limit;\nuse Illuminate\\Foundation\\Support\\Providers\\Ro"
},
{
"path": "app/View/Components/AppLayout.php",
"chars": 308,
"preview": "<?php\n\nnamespace App\\View\\Components;\n\nuse Illuminate\\View\\Component;\n\nclass AppLayout extends Component\n{\n /**\n "
},
{
"path": "app/View/Components/GuestLayout.php",
"chars": 312,
"preview": "<?php\n\nnamespace App\\View\\Components;\n\nuse Illuminate\\View\\Component;\n\nclass GuestLayout extends Component\n{\n /**\n "
},
{
"path": "artisan",
"chars": 1686,
"preview": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|-----------------------------------------------"
},
{
"path": "bootstrap/app.php",
"chars": 1620,
"preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------"
},
{
"path": "bootstrap/cache/.gitignore",
"chars": 14,
"preview": "*\n!.gitignore\n"
},
{
"path": "composer.json",
"chars": 1973,
"preview": "{\n \"name\": \"laravel/laravel\",\n \"type\": \"project\",\n \"description\": \"The Laravel Framework.\",\n \"keywords\": [\"f"
},
{
"path": "config/app.php",
"chars": 9471,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Applicatio"
},
{
"path": "config/auth.php",
"chars": 3666,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Authentica"
},
{
"path": "config/broadcasting.php",
"chars": 1711,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Br"
},
{
"path": "config/cache.php",
"chars": 3274,
"preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n /*\n |--------------------------------------------------------------"
},
{
"path": "config/cors.php",
"chars": 846,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Cross-Orig"
},
{
"path": "config/database.php",
"chars": 5054,
"preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n /*\n |--------------------------------------------------------------"
},
{
"path": "config/filesystems.php",
"chars": 2282,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Fi"
},
{
"path": "config/hashing.php",
"chars": 1571,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Ha"
},
{
"path": "config/horizon.php",
"chars": 6259,
"preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n /*\n |--------------------------------------------------------------"
},
{
"path": "config/logging.php",
"chars": 3565,
"preview": "<?php\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn"
},
{
"path": "config/mail.php",
"chars": 3548,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Ma"
},
{
"path": "config/queue.php",
"chars": 2906,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Default Qu"
},
{
"path": "config/sanctum.php",
"chars": 2289,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Stateful D"
},
{
"path": "config/services.php",
"chars": 950,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Third Part"
},
{
"path": "config/session.php",
"chars": 7041,
"preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n /*\n |--------------------------------------------------------------"
},
{
"path": "config/view.php",
"chars": 1053,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | View Stora"
},
{
"path": "database/.gitignore",
"chars": 10,
"preview": "*.sqlite*\n"
},
{
"path": "database/factories/CategoryFactory.php",
"chars": 343,
"preview": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass CategoryFactory extends"
},
{
"path": "database/factories/CommentFactory.php",
"chars": 785,
"preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Idea;\nuse App\\Models\\Status;\nuse App\\Models\\User;\nuse Illuminate\\Da"
},
{
"path": "database/factories/IdeaFactory.php",
"chars": 958,
"preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Category;\nuse App\\Models\\Status;\nuse App\\Models\\User;\nuse Illuminat"
},
{
"path": "database/factories/StatusFactory.php",
"chars": 341,
"preview": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass StatusFactory extends F"
},
{
"path": "database/factories/UserFactory.php",
"chars": 968,
"preview": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Str;\n\nc"
},
{
"path": "database/factories/VoteFactory.php",
"chars": 410,
"preview": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\nclass VoteFactory extends Fac"
},
{
"path": "database/migrations/2014_10_12_000000_create_users_table.php",
"chars": 798,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
"chars": 683,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2019_08_19_000000_create_failed_jobs_table.php",
"chars": 820,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php",
"chars": 861,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2021_11_19_154310_create_statuses_table.php",
"chars": 619,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2021_11_20_154310_create_categories_table.php",
"chars": 625,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2021_11_21_154310_create_ideas_table.php",
"chars": 934,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2021_11_24_195521_create_votes_table.php",
"chars": 740,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2021_12_19_130759_create_comments_table.php",
"chars": 912,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/migrations/2021_12_28_133951_create_notifications_table.php",
"chars": 781,
"preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
},
{
"path": "database/seeders/CategorySeeder.php",
"chars": 232,
"preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass CategorySeeder extends Seeder\n{\n /**\n "
},
{
"path": "database/seeders/CommentSeeder.php",
"chars": 231,
"preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass CommentSeeder extends Seeder\n{\n /**\n *"
},
{
"path": "database/seeders/DatabaseSeeder.php",
"chars": 1823,
"preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Category;\nuse App\\Models\\Comment;\nuse App\\Models\\Idea;\nuse App\\Models"
},
{
"path": "database/seeders/IdeaSeeder.php",
"chars": 228,
"preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass IdeaSeeder extends Seeder\n{\n /**\n * Ru"
},
{
"path": "database/seeders/StatusSeeder.php",
"chars": 230,
"preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass StatusSeeder extends Seeder\n{\n /**\n * "
},
{
"path": "database/seeders/VoteSeeder.php",
"chars": 228,
"preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass VoteSeeder extends Seeder\n{\n /**\n * Ru"
},
{
"path": "package.json",
"chars": 720,
"preview": "{\n \"private\": true,\n \"scripts\": {\n \"dev\": \"npm run development\",\n \"development\": \"mix\",\n \"wat"
},
{
"path": "phpunit.xml",
"chars": 1184,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNam"
},
{
"path": "public/.htaccess",
"chars": 603,
"preview": "<IfModule mod_rewrite.c>\n <IfModule mod_negotiation.c>\n Options -MultiViews -Indexes\n </IfModule>\n\n Rewr"
},
{
"path": "public/css/app.css",
"chars": 3025144,
"preview": "/*! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com */\n\n/*! modern-normalize v1.1.0 | MIT License | https://"
},
{
"path": "public/index.php",
"chars": 1730,
"preview": "<?php\n\nuse Illuminate\\Contracts\\Http\\Kernel;\nuse Illuminate\\Http\\Request;\n\ndefine('LARAVEL_START', microtime(true));\n\n/*"
},
{
"path": "public/js/app.js",
"chars": 726446,
"preview": "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/alpinejs/dist/module"
},
{
"path": "public/mix-manifest.json",
"chars": 71,
"preview": "{\n \"/js/app.js\": \"/js/app.js\",\n \"/css/app.css\": \"/css/app.css\"\n}\n"
},
{
"path": "public/robots.txt",
"chars": 24,
"preview": "User-agent: *\nDisallow:\n"
},
{
"path": "public/vendor/horizon/app-dark.css",
"chars": 149235,
"preview": "@charset \"UTF-8\";.vjs-tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace!important}.vjs-tree.is-r"
},
{
"path": "public/vendor/horizon/app.css",
"chars": 149237,
"preview": "@charset \"UTF-8\";.vjs-tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace!important}.vjs-tree.is-r"
},
{
"path": "public/vendor/horizon/app.js",
"chars": 926813,
"preview": "/*! For license information please see app.js.LICENSE.txt */\n(()=>{var t,e={9669:(t,e,n)=>{t.exports=n(1609)},5448:(t,e,"
},
{
"path": "public/vendor/horizon/mix-manifest.json",
"chars": 235,
"preview": "{\n \"/app.js\": \"/app.js?id=3a49030d57020aaaee5a\",\n \"/app-dark.css\": \"/app-dark.css?id=ff172044c4efc9f08f12\",\n \"/"
},
{
"path": "public/web.config",
"chars": 1183,
"preview": "<!--\n Rewrites requires Microsoft URL Rewrite Module for IIS\n Download: https://www.iis.net/downloads/microsoft/ur"
},
{
"path": "resources/css/app.css",
"chars": 1803,
"preview": "@import 'tailwindcss/base';\n@import 'tailwindcss/components';\n@import 'tailwindcss/utilities';\n\n[x-cloak] {\n display:"
},
{
"path": "resources/js/app.js",
"chars": 98,
"preview": "require('./bootstrap');\n\nimport Alpine from 'alpinejs';\n\nwindow.Alpine = Alpine;\n\nAlpine.start();\n"
},
{
"path": "resources/js/bootstrap.js",
"chars": 869,
"preview": "window._ = require('lodash');\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to o"
},
{
"path": "resources/lang/en/auth.php",
"chars": 674,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Authentica"
},
{
"path": "resources/lang/en/pagination.php",
"chars": 534,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Pagination"
},
{
"path": "resources/lang/en/passwords.php",
"chars": 744,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Password R"
},
{
"path": "resources/lang/en/validation.php",
"chars": 8327,
"preview": "<?php\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Validation"
},
{
"path": "resources/views/auth/confirm-password.blade.php",
"chars": 1169,
"preview": "<x-guest-layout>\n <x-auth-card>\n <x-slot name=\"logo\">\n <a href=\"/\">\n <x-application-"
},
{
"path": "resources/views/auth/forgot-password.blade.php",
"chars": 1265,
"preview": "<x-guest-layout>\n <x-auth-card>\n <x-slot name=\"logo\">\n <a href=\"/\">\n <x-application-"
},
{
"path": "resources/views/auth/login.blade.php",
"chars": 2171,
"preview": "<x-guest-layout>\n <x-auth-card>\n <x-slot name=\"logo\">\n <a href=\"/\">\n <x-application-"
},
{
"path": "resources/views/auth/register.blade.php",
"chars": 2099,
"preview": "<x-guest-layout>\n <x-auth-card>\n <x-slot name=\"logo\">\n <a href=\"/\">\n <x-application-"
},
{
"path": "resources/views/auth/reset-password.blade.php",
"chars": 1692,
"preview": "<x-guest-layout>\n <x-auth-card>\n <x-slot name=\"logo\">\n <a href=\"/\">\n <x-application-"
},
{
"path": "resources/views/auth/verify-email.blade.php",
"chars": 1452,
"preview": "<x-guest-layout>\n <x-auth-card>\n <x-slot name=\"logo\">\n <a href=\"/\">\n <x-application-"
},
{
"path": "resources/views/components/application-logo.blade.php",
"chars": 3045,
"preview": "<svg viewBox=\"0 0 316 316\" xmlns=\"http://www.w3.org/2000/svg\" {{ $attributes }}>\n <path d=\"M305.8 81.125C305.77 80.99"
},
{
"path": "resources/views/components/auth-card.blade.php",
"chars": 278,
"preview": "<div class=\"min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100\">\n <div>\n {{ $l"
},
{
"path": "resources/views/components/auth-session-status.blade.php",
"chars": 160,
"preview": "@props(['status'])\n\n@if ($status)\n <div {{ $attributes->merge(['class' => 'font-medium text-sm text-green-600']) }}>\n"
},
{
"path": "resources/views/components/auth-validation-errors.blade.php",
"chars": 397,
"preview": "@props(['errors'])\n\n@if ($errors->any())\n <div {{ $attributes }}>\n <div class=\"font-medium text-red-600\">\n "
},
{
"path": "resources/views/components/button.blade.php",
"chars": 398,
"preview": "<button {{ $attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 border bor"
},
{
"path": "resources/views/components/dropdown-link.blade.php",
"chars": 199,
"preview": "<a {{ $attributes->merge(['class' => 'block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-no"
},
{
"path": "resources/views/components/dropdown.blade.php",
"chars": 1370,
"preview": "@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white'])\n\n@php\nswitch ($align) {\n case 'lef"
},
{
"path": "resources/views/components/input.blade.php",
"chars": 232,
"preview": "@props(['disabled' => false])\n\n<input {{ $disabled ? 'disabled' : '' }} {!! $attributes->merge(['class' => 'rounded-md s"
},
{
"path": "resources/views/components/label.blade.php",
"chars": 143,
"preview": "@props(['value'])\n\n<label {{ $attributes->merge(['class' => 'block font-medium text-sm text-gray-700']) }}>\n {{ $valu"
},
{
"path": "resources/views/components/nav-link.blade.php",
"chars": 605,
"preview": "@props(['active'])\n\n@php\n$classes = ($active ?? false)\n ? 'inline-flex items-center px-1 pt-1 border-b-2 bord"
},
{
"path": "resources/views/components/notification-success.blade.php",
"chars": 2863,
"preview": "@props([\n 'redirect' => false,\n 'messageToDisplay' => '',\n])\n\n<div\n x-cloak\n x-data=\"{\n isOpen : fals"
},
{
"path": "resources/views/components/responsive-nav-link.blade.php",
"chars": 652,
"preview": "@props(['active'])\n\n@php\n$classes = ($active ?? false)\n ? 'block pl-3 pr-4 py-2 border-l-4 border-indigo-400 "
},
{
"path": "resources/views/dashboard.blade.php",
"chars": 521,
"preview": "<x-app-layout>\n <x-slot name=\"header\">\n <h2 class=\"font-semibold text-xl text-gray-800 leading-tight\">\n "
},
{
"path": "resources/views/emails/comment-added.blade.php",
"chars": 372,
"preview": "@component('mail::message')\n # A Comment was posted on your idea\n\n {{ $comment->user->name }} commented on your id"
},
{
"path": "resources/views/emails/idea-status/updated.blade.php",
"chars": 191,
"preview": "@component('mail::message')\n# Introduction\n\nThe body of your message.\n\n@component('mail::button', ['url' => ''])\nButton "
},
{
"path": "resources/views/emails/idea-status-updated.blade.php",
"chars": 283,
"preview": "@component('mail::message')\n# Idea Status Updated\n\nThe idea: {{ $idea->title }}\n\nhas been updated to a status of:\n\n{{ $i"
},
{
"path": "resources/views/idea/index.blade.php",
"chars": 60,
"preview": "<x-app-layout>\n <livewire:ideas-index />\n</x-app-layout>\n"
},
{
"path": "resources/views/idea/show.blade.php",
"chars": 1265,
"preview": "<x-app-layout>\n <div>\n <a href=\"{{ $backUrl }}\" class=\"flex items-center font-semibold hover:underline\">\n "
},
{
"path": "resources/views/layouts/app.blade.php",
"chars": 4742,
"preview": "<!DOCTYPE html>\n<html lang=\"{{ str_replace('_', '-', app()->getLocale()) }}\">\n<head>\n <meta charset=\"utf-8\">\n <met"
},
{
"path": "resources/views/layouts/guest.blade.php",
"chars": 780,
"preview": "<!DOCTYPE html>\n<html lang=\"{{ str_replace('_', '-', app()->getLocale()) }}\">\n <head>\n <meta charset=\"utf-8\">\n"
},
{
"path": "resources/views/layouts/navigation.blade.php",
"chars": 4694,
"preview": "<nav x-data=\"{ open: false }\" class=\"bg-white border-b border-gray-100\">\n <!-- Primary Navigation Menu -->\n <div c"
},
{
"path": "resources/views/livewire/add-comment.blade.php",
"chars": 5152,
"preview": "<div\n x-data=\"{ isOpen:false }\"\n x-init=\"\n window.livewire.on('commentWasAdded', () => {\n isOpen"
},
{
"path": "resources/views/livewire/comment-notifications.blade.php",
"chars": 3993,
"preview": "<div wire:poll=\"getNotificationCount\" x-data=\"{ isOpen: false }\" class=\"relative\">\n <button @click=\n \"isOp"
},
{
"path": "resources/views/livewire/create-idea.blade.php",
"chars": 2454,
"preview": "<form wire:submit.prevent=\"createIdea\" action=\"#\" method=\"POST\" class=\"text-sm space-y-4 px-4 py-6\">\n <div>\n <"
},
{
"path": "resources/views/livewire/delete-comment.blade.php",
"chars": 3859,
"preview": "<div\n x-cloak\n x-data=\"{ isOpen : false }\"\n x-show=\"isOpen\"\n @keydown.esc.window=\"isOpen = false\"\n x-init"
},
{
"path": "resources/views/livewire/delete-idea.blade.php",
"chars": 3806,
"preview": "<div\n x-cloak\n x-data=\"{ isOpen : false }\"\n x-show=\"isOpen\"\n @keydown.esc.window=\"isOpen = false\"\n @custo"
},
{
"path": "resources/views/livewire/edit-comment.blade.php",
"chars": 3987,
"preview": "<div\n x-cloak\n x-data=\"{ isOpen : false }\"\n x-show=\"isOpen\"\n @keydown.esc.window=\"isOpen = false\"\n{{-- @c"
},
{
"path": "resources/views/livewire/edit-idea.blade.php",
"chars": 5110,
"preview": "<div\n x-cloak\n x-data=\"{ isOpen : false }\"\n x-show=\"isOpen\"\n @keydown.esc.window=\"isOpen = false\"\n @custo"
},
{
"path": "resources/views/livewire/idea-comment.blade.php",
"chars": 6345,
"preview": "<div\n id=\"comment-{{ $comment->id }}\"\n class=\"@if($comment->is_status_update) is-status-update {{ 'status'.Str::ke"
},
{
"path": "resources/views/livewire/idea-comments.blade.php",
"chars": 813,
"preview": "<div>\n @if($comments->isNotEmpty())\n <div class=\"comments-container relative space-y-6 pt-4 md:ml-22 my-8 mt-1"
},
{
"path": "resources/views/livewire/idea-index.blade.php",
"chars": 4797,
"preview": "<div\n x-data\n @click=\"\n if($event.target.tagName.toLowerCase() !== 'button' && $event.target.ta"
},
{
"path": "resources/views/livewire/idea-show.blade.php",
"chars": 9331,
"preview": "<div class=\"idea-and-buttons container\">\n <div class=\"idea-container bg-white rounded-xl flex mt-4\">\n <div cla"
},
{
"path": "resources/views/livewire/ideas-index.blade.php",
"chars": 2519,
"preview": "<div>\n <div class=\"filters flex flex-col md:flex-row space-y-3 md:space-y-0 md:space-x-6\">\n <div class=\"w-full"
},
{
"path": "resources/views/livewire/mark-comment-as-not-spam.blade.php",
"chars": 3905,
"preview": "<div\n x-cloak\n x-data=\"{ isOpen : false }\"\n x-show=\"isOpen\"\n @keydown.esc.window=\"isOpen = false\"\n x-init"
},
{
"path": "resources/views/livewire/mark-comment-as-spam.blade.php",
"chars": 3835,
"preview": "<div\n x-cloak\n x-data=\"{ isOpen : false }\"\n x-show=\"isOpen\"\n @keydown.esc.window=\"isOpen = false\"\n x-init"
},
{
"path": "resources/views/livewire/mark-idea-as-not-spam.blade.php",
"chars": 3866,
"preview": "<div\n x-cloak\n x-data=\"{ isOpen : false }\"\n x-show=\"isOpen\"\n @keydown.esc.window=\"isOpen = false\"\n @custo"
},
{
"path": "resources/views/livewire/mark-idea-as-spam.blade.php",
"chars": 3801,
"preview": "<div\n x-cloak\n x-data=\"{ isOpen : false }\"\n x-show=\"isOpen\"\n @keydown.esc.window=\"isOpen = false\"\n @custo"
},
{
"path": "resources/views/livewire/set-status.blade.php",
"chars": 5250,
"preview": "<div\n class=\"relative\"\n x-data=\"{isOpen: false}\"\n x-init=\"\n window.livewire.on('statusWasUpdated', () =>"
},
{
"path": "resources/views/livewire/status-filters.blade.php",
"chars": 1946,
"preview": "<nav class=\"hidden md:flex flex items-center text-gray-400 justify-between text-xs\">\n <ul class=\"flex uppercase font-"
},
{
"path": "resources/views/welcome.blade.php",
"chars": 18396,
"preview": "<!DOCTYPE html>\n<html lang=\"{{ str_replace('_', '-', app()->getLocale()) }}\">\n <head>\n <meta charset=\"utf-8\">\n"
},
{
"path": "routes/api.php",
"chars": 591,
"preview": "<?php\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\n\n/*\n|--------------------"
},
{
"path": "routes/auth.php",
"chars": 2675,
"preview": "<?php\n\nuse App\\Http\\Controllers\\Auth\\AuthenticatedSessionController;\nuse App\\Http\\Controllers\\Auth\\ConfirmablePasswordCo"
},
{
"path": "routes/channels.php",
"chars": 558,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Broadcast;\n\n/*\n|------------------------------------------------------------------"
},
{
"path": "routes/console.php",
"chars": 592,
"preview": "<?php\n\nuse Illuminate\\Foundation\\Inspiring;\nuse Illuminate\\Support\\Facades\\Artisan;\n\n/*\n|-------------------------------"
},
{
"path": "routes/web.php",
"chars": 660,
"preview": "<?php\n\nuse App\\Http\\Controllers\\IdeaController;\nuse Illuminate\\Support\\Facades\\Route;\n\n/*\n|-----------------------------"
},
{
"path": "server.php",
"chars": 563,
"preview": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package Laravel\n * @author Taylor Otwell <taylor@lara"
},
{
"path": "storage/app/.gitignore",
"chars": 23,
"preview": "*\n!public/\n!.gitignore\n"
},
{
"path": "storage/debugbar/.gitignore",
"chars": 14,
"preview": "*\n!.gitignore\n"
}
]
// ... and 36 more files (download for full content)
About this extraction
This page contains the full source code of the Lukabrazi111/voting-app GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 236 files (5.1 MB), approximately 1.4M tokens, and a symbol index with 2437 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.