Showing preview only (1,630K chars total). Download the full file or copy to clipboard to get everything.
Repository: Mekaeil/LaravelUserManagement
Branch: master
Commit: 9ae2558523a1
Files: 195
Total size: 1.5 MB
Directory structure:
gitextract_oflpl47l/
├── .gitignore
├── .phpunit.result.cache
├── .travis.yml
├── LICENSE
├── README.md
├── composer.json
├── phpunit.xml.dist
├── src/
│ ├── Config/
│ │ ├── laravel_user_management.php
│ │ └── permission.php
│ ├── Console/
│ │ └── .gitkeep
│ ├── Contracts/
│ │ └── UserManagementContracts.php
│ ├── Database/
│ │ ├── Migrations/
│ │ │ ├── .gitkeep
│ │ │ ├── 2019_01_01_111111_create_users_table.php
│ │ │ ├── 2019_01_01_222222_create_departments_table.php
│ │ │ ├── 2019_01_01_333333_create_user_department_users_table.php
│ │ │ ├── 2019_01_01_444444_create_permission_tables.php
│ │ │ ├── 2019_02_02_555555_create_soft-delete_users_table.php
│ │ │ └── 2019_10_17_110654_create_password_reset_table.php
│ │ └── Seeders/
│ │ ├── .gitkeep
│ │ ├── Department/
│ │ │ ├── DepartmentTableSeeder.php
│ │ │ └── MasterDepartmentTableSeeder.php
│ │ ├── Permission/
│ │ │ ├── MasterPermissionTableSeeder.php
│ │ │ └── PermissionTableSeeder.php
│ │ ├── Role/
│ │ │ ├── MasterRoleTableSeeder.php
│ │ │ └── RoleTableSeeder.php
│ │ └── UserManagementDatabaseSeeder.php
│ ├── Entities/
│ │ ├── .gitkeep
│ │ ├── Department.php
│ │ ├── Permission.php
│ │ ├── Role.php
│ │ ├── User.php
│ │ └── export/
│ │ ├── Department.php
│ │ ├── Permission.php
│ │ ├── Role.php
│ │ └── User.php
│ ├── Facade/
│ │ └── UserManagement.php
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── .gitkeep
│ │ │ ├── Admin/
│ │ │ │ ├── DepartmentsController.php
│ │ │ │ ├── PermissionsController.php
│ │ │ │ ├── RolesController.php
│ │ │ │ ├── UsersController.php
│ │ │ │ └── export/
│ │ │ │ ├── DepartmentsController.php
│ │ │ │ ├── PermissionsController.php
│ │ │ │ ├── RolesController.php
│ │ │ │ └── UsersController.php
│ │ │ └── Auth/
│ │ │ ├── AuthController.php
│ │ │ └── export/
│ │ │ └── AuthController.php
│ │ └── Requests/
│ │ ├── .gitkeep
│ │ ├── Admin/
│ │ │ ├── StoreDepartment.php
│ │ │ ├── StorePermission.php
│ │ │ ├── StoreRole.php
│ │ │ ├── StoreUser.php
│ │ │ ├── UpdateDepartment.php
│ │ │ ├── UpdatePermission.php
│ │ │ ├── UpdateRole.php
│ │ │ └── UpdateUser.php
│ │ └── Auth/
│ │ ├── UserLogin.php
│ │ └── UserRegistration.php
│ ├── LaravelUserManagementProvider.php
│ ├── Public/
│ │ └── mekaeils-package/
│ │ ├── css/
│ │ │ └── style.css
│ │ ├── js/
│ │ │ ├── dashboard.js
│ │ │ ├── misc.js
│ │ │ └── off-canvas.js
│ │ └── vendors/
│ │ ├── css/
│ │ │ └── vendor.bundle.base.css
│ │ ├── iconfonts/
│ │ │ └── mdi/
│ │ │ ├── README.md
│ │ │ ├── bower.json
│ │ │ ├── css/
│ │ │ │ └── materialdesignicons.css
│ │ │ ├── license.md
│ │ │ ├── package.json
│ │ │ ├── preview.html
│ │ │ └── scss/
│ │ │ ├── _animated.scss
│ │ │ ├── _core.scss
│ │ │ ├── _extras.scss
│ │ │ ├── _functions.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _path.scss
│ │ │ ├── _variables.scss
│ │ │ └── materialdesignicons.scss
│ │ └── js/
│ │ ├── vendor.bundle.addons.js
│ │ └── vendor.bundle.base.js
│ ├── Repository/
│ │ ├── Contracts/
│ │ │ ├── BaseRepositoryInterface.php
│ │ │ ├── DepartmentRepositoryInterface.php
│ │ │ ├── PermissionRepositoryInterface.php
│ │ │ ├── RoleRepositoryInterface.php
│ │ │ └── UserRepositoryInterface.php
│ │ └── Eloquents/
│ │ ├── BaseEloquentRepository.php
│ │ ├── DepartmentRepository.php
│ │ ├── PermissionRepository.php
│ │ ├── RoleRepository.php
│ │ └── UserRepository.php
│ ├── Resource/
│ │ ├── js/
│ │ │ └── mekaeils-package/
│ │ │ ├── assets/
│ │ │ │ ├── demo.css
│ │ │ │ └── scss/
│ │ │ │ ├── material-kit/
│ │ │ │ │ ├── _alerts.scss
│ │ │ │ │ ├── _autocomplete.scss
│ │ │ │ │ ├── _badges.scss
│ │ │ │ │ ├── _buttons.scss
│ │ │ │ │ ├── _cards.scss
│ │ │ │ │ ├── _carousel.scss
│ │ │ │ │ ├── _checkboxes.scss
│ │ │ │ │ ├── _colors.scss
│ │ │ │ │ ├── _datepicker.scss
│ │ │ │ │ ├── _dialogs.scss
│ │ │ │ │ ├── _dropdown.scss
│ │ │ │ │ ├── _example-pages.scss
│ │ │ │ │ ├── _footers.scss
│ │ │ │ │ ├── _headers.scss
│ │ │ │ │ ├── _images.scss
│ │ │ │ │ ├── _info-areas.scss
│ │ │ │ │ ├── _inputs.scss
│ │ │ │ │ ├── _layout.scss
│ │ │ │ │ ├── _misc.scss
│ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ ├── _navbars.scss
│ │ │ │ │ ├── _pagination.scss
│ │ │ │ │ ├── _pills.scss
│ │ │ │ │ ├── _popups.scss
│ │ │ │ │ ├── _progress.scss
│ │ │ │ │ ├── _radios.scss
│ │ │ │ │ ├── _responsive.scss
│ │ │ │ │ ├── _shadows.scss
│ │ │ │ │ ├── _tables.scss
│ │ │ │ │ ├── _tabs.scss
│ │ │ │ │ ├── _togglebutton.scss
│ │ │ │ │ ├── _typography.scss
│ │ │ │ │ ├── _variables.scss
│ │ │ │ │ ├── mixins/
│ │ │ │ │ │ ├── _transparency.scss
│ │ │ │ │ │ └── _vendor-prefixes.scss
│ │ │ │ │ └── plugins/
│ │ │ │ │ ├── _perfect-scrollbar.scss
│ │ │ │ │ └── _plugin-nouislider.scss
│ │ │ │ └── material-kit.scss
│ │ │ ├── layout/
│ │ │ │ ├── MainFooter.vue
│ │ │ │ ├── MainNavbar.vue
│ │ │ │ └── MobileMenu.vue
│ │ │ ├── main.js
│ │ │ ├── plugins/
│ │ │ │ ├── globalComponents.js
│ │ │ │ ├── globalDirectives.js
│ │ │ │ ├── globalMixins.js
│ │ │ │ └── material-kit.js
│ │ │ ├── router.js
│ │ │ └── views/
│ │ │ ├── App.vue
│ │ │ ├── Index.vue
│ │ │ ├── Landing.vue
│ │ │ ├── Login.vue
│ │ │ ├── Profile.vue
│ │ │ ├── Register.vue
│ │ │ └── components/
│ │ │ ├── BasicElementsSection.vue
│ │ │ ├── JavascriptComponentsSection.vue
│ │ │ ├── LaravelUserManagement.vue
│ │ │ ├── NavPillsSection.vue
│ │ │ ├── NavigationSection.vue
│ │ │ ├── NotificationsSection.vue
│ │ │ ├── SmallNavigationSection.vue
│ │ │ ├── TabsSection.vue
│ │ │ ├── TypographyImagesSection.vue
│ │ │ └── Widgets/
│ │ │ ├── Badge.vue
│ │ │ ├── Dropdown.vue
│ │ │ ├── Modal.vue
│ │ │ ├── Pagination.vue
│ │ │ ├── Parallax.vue
│ │ │ ├── Tabs.vue
│ │ │ ├── cards/
│ │ │ │ ├── LoginCard.vue
│ │ │ │ └── NavTabsCard.vue
│ │ │ └── index.js
│ │ ├── lang/
│ │ │ └── en/
│ │ │ └── trans.php
│ │ └── views/
│ │ ├── mekaeils-package/
│ │ │ ├── layouts/
│ │ │ │ ├── alert.blade.php
│ │ │ │ ├── breadcrumb.blade.php
│ │ │ │ ├── footer.blade.php
│ │ │ │ ├── header.blade.php
│ │ │ │ ├── side-nav.blade.php
│ │ │ │ └── top-nav.blade.php
│ │ │ ├── master.blade.php
│ │ │ └── vue/
│ │ │ └── master.blade.php
│ │ └── user-management/
│ │ ├── auth/
│ │ │ ├── layouts/
│ │ │ │ ├── footer.blade.php
│ │ │ │ └── header.blade.php
│ │ │ ├── login.blade.php
│ │ │ ├── master.blade.php
│ │ │ └── register.blade.php
│ │ ├── department/
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── master.blade.php
│ │ ├── permission/
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── role/
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── side-nav.blade.php
│ │ └── user/
│ │ ├── create.blade.php
│ │ ├── edit.blade.php
│ │ └── index.blade.php
│ ├── Routes/
│ │ └── user_management.php
│ ├── Tests/
│ │ └── .gitkeep
│ └── UserManagement.php
└── tests/
├── SampleTest.php
└── bootstrap.php
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
vendor/
node_modules/
npm-debug.log
# Laravel 4 specific
bootstrap/compiled.php
app/storage/
# Laravel 5 & Lumen specific
public/storage
public/hot
storage/*.key
.env.*.php
.env.php
.env
Homestead.yaml
Homestead.json
# Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer
.rocketeer/
composer.lock
.DS_Store
.idea
================================================
FILE: .phpunit.result.cache
================================================
C:37:"PHPUnit\Runner\DefaultTestResultCache":116:{a:2:{s:7:"defects";a:0:{}s:5:"times";a:1:{s:56:"Mekaeil\LaravelUserManagement\Test\sampleTest::testHello";d:0.007;}}}
================================================
FILE: .travis.yml
================================================
language: php
sudo: false
matrix:
include:
- php: 7.2
env: LARAVEL_VERSION=5.5.*
- php: 7.3
env: LARAVEL_VERSION=5.5.*
- php: 7.2
env: LARAVEL_VERSION=5.6.*
- php: 7.3
env: LARAVEL_VERSION=5.6.*
- php: 7.2
env: LARAVEL_VERSION=5.7.*
- php: 7.3
env: LARAVEL_VERSION=5.7.*
- php: 7.2
env: LARAVEL_VERSION=5.8.*
- php: 7.3
env: LARAVEL_VERSION=5.8.*
- php: 7.2
env: LARAVEL_VERSION=6.*
- php: 7.3
env: LARAVEL_VERSION=6.*
before_install:
- if [[ $TRAVIS_PHP_VERSION =~ ^hhvm ]]; then echo 'hhvm.jit = false' >> /etc/hhvm/php.ini ; fi
- composer self-update --stable -n
- composer require "laravel/framework:${LARAVEL_VERSION}" --no-update -n
install:
- travis_retry composer install --no-suggest --prefer-dist -n -o
script:
- vendor/bin/phpunit --coverage-clover build/logs/clover.xml;
after_script:
- wget https://scrutinizer-ci.com/ocular.phar;
- php ocular.phar code-coverage:upload --format=php-clover build/logs/clover.xml;
- bash <(curl -s https://codecov.io/bash)
© 2019 GitHub, Inc.
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019 Mekaeil
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Use the new version
I've upgraded and revamped this package for better performance and efficiency. Check out the improvements here ([LaraPanel Framework](https://github.com/weprodev/LaraPanel-Framework)).
Plus, I'm gearing up to introduce even more features. Join me in enhancing it further – follow and contribute here: [LaraPanel Package](https://github.com/weprodev/LaraPanel)"
<br>
-------------------------------------
## About Laravel User Management
Manage all of the users, we use ["spatie/laravel-permission"](https://github.com/spatie/laravel-permission) package for manage all of the users.
When you installing this package the "spatie/laravel-permission" package and dependencies will be install automatically.
In "LaravelUserManagement" package we create all of the DB Tables, Entities, Seeders, View for manage users, roles, permissions and departments.
# Installation
1. Install the package via composer:
```
composer require mekaeil/laravel-user-management
```
2. Add the service providers in your config/app.php file:
```
'providers' => [
// ...
\Mekaeil\LaravelUserManagement\LaravelUserManagementProvider::class,
];
```
3. Run this command for publish vendor:
```
php artisan vendor:publish --provider="Mekaeil\LaravelUserManagement\LaravelUserManagementProvider"
```
4. After publishing vendors, add this code to "run" method in <b>database/DatabaseSeeder.php</b>
```
public function run()
{
/*
|--------------------------------------------------------------------------
| SEEDERS FOR LARAVEL USER MANAGEMENT
|--------------------------------------------------------------------------
|
*/
$this->call(RoleTableSeeder::class);
$this->call(PermissionTableSeeder::class);
$this->call(DepartmentTableSeeder::class);
}
```
5. Now it's important to change config if you want(laravel_user_management): (you can skip it)
```
/*
|--------------------------------------------------------------------------
| LARAVEL USER MANAGEMENT CONFIG
|--------------------------------------------------------------------------
|
|
*/
// laravel_user_management.users_table
'users_table' => 'users',
// laravel_user_management.user_department_table
'user_department_table' => 'user_departments',
/**
* THIS TABLE IS NAME OF THE MANY TO MANY RELATIONAL TABLE
* BETWEEN USERS TABLE & USER DEPARTMENTS TABLE
* **/
// laravel_user_management.user_department_user_table
'user_department_user_table' => 'user_departments_users',
// laravel_user_management.password_resets_table
'password_resets_table' => 'user_password_resets',
// laravel_user_management.user_model
'user_model' => App\Entities\User::class,
// laravel_user_management.row_list_per_page
'row_list_per_page' => 15,
// laravel_user_management.admin_url
'admin_url' => env('APP_URL').'/admin',
// laravel_user_management.logo_url
'logo_url'=> env('APP_URL'). "/mekaeils-package/images/logo-user-management.jpg",
'auth' => [
// laravel_user_management.auth.enable
'enable' => true,
// laravel_user_management.auth.login_url
'login_url' => 'user/login',
// laravel_user_management.auth.register_url
'register_url' => 'user/register',
// laravel_user_management.auth.logout_url
'logout_url' => 'user/logout',
// laravel_user_management.auth.username
'username' => 'email', // email OR mobile
/**
* DEFAULT ROLE FOR USERS WANT TO REGISTER ON WEBSITE
* YOU SHOULD DEFINE THIS ROLE IN SEEDER OR CREATE IT IN ADMIN PANEL
* **/
// laravel_user_management.auth.user_default_role
'user_default_role' => 'User',
/**
* DEFAULT STATUS FOR USERS WANT TO REGISTER ON WEBSITE
* IF IT'S SET ON 'PENDING' USER CAN NOT LOGIN IN WEBSITE
* AND NEED TO ACCEPT BY ADMINISTRATOR
* **/
// laravel_user_management.auth.default_user_status
'default_user_status' =>'accepted', /// 'pending','accepted','blocked'
// laravel_user_management.auth.dashboard_route_name_user_redirection
'dashboard_route_name_user_redirection' => 'home' /// ** ROUTE NAME **
],
```
6. And if set permissions table if you want to customize it: (you can skip it)
```
'models' => [
/*
* When using the "HasPermissions" trait from this package, we need to know which
* Eloquent model should be used to retrieve your permissions. Of course, it
* is often just the "Permission" model but you may use whatever you like.
*
* The model you want to use as a Permission model needs to implement the
* `Spatie\Permission\Contracts\Permission` contract.
*/
// 'permission' => Spatie\Permission\Models\Permission::class,
'permission' => Spatie\Permission\Models\Permission::class,
/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your roles. Of course, it
* is often just the "Role" model but you may use whatever you like.
*
* The model you want to use as a Role model needs to implement the
* `Spatie\Permission\Contracts\Role` contract.
*/
// 'role' => Spatie\Permission\Models\Role::class,
'role' => Spatie\Permission\Models\Role::class,
],
'table_names' => [
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'roles' => 'roles',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your permissions. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'permissions' => 'permissions',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your models permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_permissions' => 'model_has_permissions',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models roles. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_roles' => 'model_has_roles',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'role_has_permissions' => 'role_has_permissions',
],
'column_names' => [
/*
* Change this if you want to name the related model primary key other than
* `model_id`.
*
* For example, this would be nice if your primary keys are all UUIDs. In
* that case, name this `model_uuid`.
*/
'model_morph_key' => 'model_id',
],
/*
* When set to true, the required permission/role names are added to the exception
* message. This could be considered an information leak in some contexts, so
* the default setting is false here for optimum safety.
*/
'display_permission_in_exception' => false,
'cache' => [
/*
* By default all permissions are cached for 24 hours to speed up performance.
* When permissions or roles are updated the cache is flushed automatically.
*/
'expiration_time' => \DateInterval::createFromDateString('24 hours'),
/*
* The cache key used to store all permissions.
*/
'key' => 'spatie.permission.cache',
/*
* When checking for a permission against a model by passing a Permission
* instance to the check, this key determines what attribute on the
* Permissions model is used to cache against.
*
* Ideally, this should match your preferred way of checking permissions, eg:
* `$user->can('view-posts')` would be 'name'.
*/
'model_key' => 'name',
/*
* You may optionally indicate a specific cache driver to use for permission and
* role caching using any of the `store` drivers listed in the cache.php config
* file. Using 'default' here means to use the `default` set in cache.php.
*/
'store' => 'default',
],
```
7. update your config/auth.php file:
```
use App\Entities\User;
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", "token"
|
*/
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
/*
|--------------------------------------------------------------------------
| 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' => 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' => config('laravel_user_management.password_resets_table'),
'expire' => 60,
],
],
];
```
8. After all of the steps run these commands ordinary.
```
5.1 php artisan migrate
5.2 php artisan db:seed
```
9. If you want to use Vue.js, change "laravel_user_management" config file:
```
/**
* IN THIS PACKAGE WE USE THE VUE.JS FOR PAGES IF YOU
* WANT TO USE IT, ENABLE IT AND FOLLOW INSTALLATION STEPS IN README FILE.
* **/
'vue_theme' => true,
```
Then run this command again:
```
php artisan vendor:publish --provider="Mekaeil\LaravelUserManagement\LaravelUserManagementProvider"
```
Now follow <b> USE VUE.JS FOR YOUR PROJECT </b> section in bottom of this page.
## Important
After vendor:publish files you should change user migration file, because we set
mobile and email to nullable, one of them you want to set to username should not nullable in Database.
```
$table->string('email')->nullable()->unique();
$table->string('mobile')->nullable()->unique();
```
## Routes
After install package you can set this routes on your admin panel:
1. Users Management:
```
[method type: GET, url: domain.com/admin/user-management/user ]
admin.user_management.user.index
[method type: GET, url: domain.com/admin/user-management/user/create ]
admin.user_management.user.create
[method type: POST, url: domain.com/admin/user-management/user/store ]
admin.user_management.user.store
[method type: GET, url: domain.com/admin/user-management/user/edit/{ID} ]
admin.user_management.user.edit
[method type: PUT, url: domain.com/admin/user-management/user/update/{ID} ]
admin.user_management.user.update
[method type: DELETE, url: domain.com/admin/user-management/user/delete/{ID} ]
admin.user_management.user.delete
[method type: PUT, url: domain.com/admin/user-management/user/restore/{ID} ]
admin.user_management.user.restore
```
2. Roles Management:
```
[method type: GET, url: domain.com/admin/user-management/role ]
admin.user_management.role.index
[method type: GET, url: domain.com/admin/user-management/role/create ]
admin.user_management.role.create
[method type: POST, url: domain.com/admin/user-management/role/store ]
admin.user_management.role.store
[method type: GET, url: domain.com/admin/user-management/role/edit/{ID} ]
admin.user_management.role.edit
[method type: PUT, url: domain.com/admin/user-management/role/update/{ID} ]
admin.user_management.role.update
[method type: DELETE, url: domain.com/admin/user-management/role/delete/{ID} ]
admin.user_management.role.delete
```
3. Permissions Management:
```
[method type: GET, url: domain.com/admin/user-management/permission ]
admin.user_management.permission.index
[method type: GET, url: domain.com/admin/user-management/permission/create ]
admin.user_management.permission.create
[method type: POST, url: domain.com/admin/user-management/permission/store ]
admin.user_management.permission.store
[method type: GET, url: domain.com/admin/user-management/permission/edit/{ID} ]
admin.user_management.permission.edit
[method type: PUT, url: domain.com/admin/user-management/permission/update/{ID} ]
admin.user_management.permission.update
[method type:DELETE, url:domain.com/admin/user-management/permission/delete/{ID} ]
admin.user_management.permission.delete
```
4. Departments Management:
```
[method type: GET, url: domain.com/admin/user-management/department ]
admin.user_management.department.index
[method type: GET, url: domain.com/admin/user-management/department/create ]
admin.user_management.department.create
[method type: POST, url: domain.com/admin/user-management/department/store ]
admin.user_management.department.store
[method type: GET, url: domain.com/admin/user-management/department/edit/{ID} ]
admin.user_management.department.edit
[method type: PUT, url: domain.com/admin/user-management/department/update/{ID} ]
admin.user_management.department.update
[method type:DELETE, url:domain.com/admin/user-management/department/delete/{ID} ]
admin.user_management.department.delete
```
5. Authentication
```
****
* IMPORTANT: THESE URL CAN BE CHANGE IN CONFIG FILE.
* THESE URLS ARE DEFAULT.
****
[method type: GET, url: domain.com/user/login ]
auth.user.login
[method type: POST, url: domain.com/user/login ]
auth.user.login
[method type: GET, url: domain.com/user/register ]
auth.user.register
[method type: POST, url: domain.com/user/register ]
auth.user.register
[method type: GET, url: domain.com/user/logout ]
auth.user.logout
```
## Demo
1. login and registration

2. admin panel and create user

<br>

# USE VUE.JS FOR YOUR PROJECT
If you want to use Vue.js for your project you can use the following installation instead of the bootstrap theme.
After installing package follow this steps:
```
1. npm install vue
2. Add this section to your package.json file:
"dependencies": {
"v-tooltip": "^2.0.2",
"vue-carousel": "^0.18.0",
"vue-clickaway": "^2.2.2",
"vue-lazyload": "^1.3.3",
"vue-material": "^1.0.0-beta-11",
"vue-router": "^3.1.3"
}
```
Add this command in webpack file:
```
mix.js('resources/js/mekaeils-package/main.js', 'public/mekaeils-package');
```
Edit your config file:
```
/**
* IN THIS PACKAGE WE USE THE VUE.JS FOR PAGES IF YOU
* WANT TO USE IT, ENABLE IT AND FOLLOW INSTALLATION STEPS IN README FILE.
* **/
'vue_theme' => true, // true, false | default: false
```
## VUE JS DEMO
1. App Vue

2. Login

3. Register

4. Material Kit Theme

# UPDATES
0. UPDATE PACKAGE FOR NEW VERSION OF THE LARAVEL => LARAVEL 6
1. VUE.JS FOR AUTH AND OTHER PAGES. (just vuejs theme without functinality like Auth,...)
# IN PROGRESS
1. Adding functionality Auth in Vuejs theme.
2. Edit structure method for API response.
## TEST
With this command you can running the test.
```
./vendor/bin/phpunit
```
## License
1. The LaravelUserManagement is open-source software licensed under the [MIT license](https://opensource.org/licenses/MIT).
2. Admin Template(PurpleAdmin-Free-Admin-Template) By [Bootstrap Dash](https://github.com/BootstrapDash/PurpleAdmin-Free-Admin-Template)
3. Vue Material Kit By [Creative Tim](https://www.creative-tim.com/product/vue-material-kit)
================================================
FILE: composer.json
================================================
{
"name": "mekaeil/laravel-user-management",
"description": "With this package we can manage all of the users in our project.",
"type": "package",
"homepage": "https://mekaeil.me",
"keywords": [
"Project",
"laravel",
"User Management",
"Spatie",
"laravel permission"
],
"require": {
"php": "^7.2.5|^8",
"laravel/framework": "^5.5|^6.0|^7.0|^8.0|^9.0|^10.0",
"spatie/laravel-permission": "^2.37|^3.0|^4.0|^5.0|^6.0"
},
"require-dev": {
"phpunit/phpunit": "^7.5|^8.0|^9.0|^10.0|^11.0",
"mockery/mockery": "^1.0"
},
"suggest": {
"LaraPanel Framework": "Use the new version and refactored version here: https://github.com/weprodev/LaraPanel-Framework",
"LaraPanel package": "Use the new version and refactored version here: https://github.com/weprodev/LaraPanel"
},
"license": "MIT",
"authors": [
{
"name": "mekaeil",
"email": "maikel1370@gmail.com"
}
],
"autoload": {
"psr-4": {
"Mekaeil\\LaravelUserManagement\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Mekaeil\\LaravelUserManagement\\Test\\": "tests"
}
},
"scripts": {
"test": "phpunit"
},
"extra": {
"laravel": {
"providers": [
"Mekaeil\\LaravelUserManagement\\LaravelUserManagementProvider"
]
}
}
}
================================================
FILE: phpunit.xml.dist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"
backupGlobals="false"
backupStaticAttributes="false"
colors="true"
verbose="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
>
<testsuites>
<testsuite name="LaravelUserManagement Test Suite">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">./src</directory>
<exclude>
<directory suffix=".blade.php">./src/</directory>
</exclude>
</whitelist>
</filter>
<php>
<env name="CACHE_DRIVER" value="array"/>
<!--
<env name="REDIS_HOST" value="127.0.0.1" />
<env name="REDIS_PORT" value="6379" />
-->
</php>
</phpunit>
================================================
FILE: src/Config/laravel_user_management.php
================================================
<?php
return [
/*
|--------------------------------------------------------------------------
| LARAVEL USER MANAGEMENT CONFIG
|--------------------------------------------------------------------------
|
|
*/
// laravel_user_management.users_table
'users_table' => 'users',
// laravel_user_management.user_department_table
'user_department_table' => 'user_departments',
/**
* THIS TABLE IS NAME OF THE MANY TO MANY RELATIONAL TABLE
* BETWEEN USERS TABLE & USER DEPARTMENTS TABLE
* **/
// laravel_user_management.user_department_user_table
'user_department_user_table' => 'user_departments_users',
// laravel_user_management.password_resets_table
'password_resets_table' => 'user_password_resets',
// laravel_user_management.user_model
'user_model' => App\Entities\User::class,
// laravel_user_management.row_list_per_page
'row_list_per_page' => 15,
// laravel_user_management.admin_url
'admin_url' => env('APP_URL').'/admin',
// laravel_user_management.logo_url
'logo_url' => env('APP_URL'). "/mekaeils-package/images/logo-user-management.jpg",
'auth' => [
// laravel_user_management.auth.enable
'enable' => true,
// laravel_user_management.auth.login_url
'login_url' => 'user/login',
// laravel_user_management.auth.register_url
'register_url' => 'user/register',
// laravel_user_management.auth.logout_url
'logout_url' => 'user/logout',
// laravel_user_management.auth.username
'username' => 'email', // email OR mobile
/**
* DEFAULT ROLE FOR USERS WANT TO REGISTER ON WEBSITE
* YOU SHOULD DEFINE THIS ROLE IN SEEDER OR CREATE IT IN ADMIN PANEL
* **/
// laravel_user_management.auth.user_default_role
'user_default_role' => 'User',
/**
* DEFAULT STATUS FOR USERS WANT TO REGISTER ON WEBSITE
* IF IT'S SET ON 'PENDING' USER CAN NOT LOGIN IN WEBSITE
* AND NEED TO ACCEPT BY ADMINISTRATOR
* **/
// laravel_user_management.auth.default_user_status
'default_user_status' =>'accepted', /// 'pending','accepted','blocked'
// laravel_user_management.auth.dashboard_route_name_user_redirection
'dashboard_route_name_user_redirection' => 'home' /// ** ROUTE NAME **
],
/**
* IN THIS PACKAGE WE USE THE VUE.JS FOR PAGES IF YOU
* WANT TO USE IT, ENABLE IT AND FOLLOW INSTALLATION STEPS IN README FILE.
* **/
// laravel_user_management.vue_theme
'vue_theme' => false, // true, false | default: false
];
================================================
FILE: src/Config/permission.php
================================================
<?php
/*
|--------------------------------------------------------------------------
| SPATIE PACKAGE'S CONFIG
|--------------------------------------------------------------------------
| IN THIS CONFIG WE OVERWRITE MODELS IN CUSTOM MODELS WHICH EXTENDS
| SPATIE'S MODELS. YOU CAN CREATE YOUR OWN MODELS AND EXTENDS OUR
| MODELS FOR ADD NEW FEATURE AND DEVELOP YUR MODELS.
|
*/
return [
'models' => [
/*
* When using the "HasPermissions" trait from this package, we need to know which
* Eloquent model should be used to retrieve your permissions. Of course, it
* is often just the "Permission" model but you may use whatever you like.
*
* The model you want to use as a Permission model needs to implement the
* `Spatie\Permission\Contracts\Permission` contract.
*/
// 'permission' => Spatie\Permission\Models\Permission::class,
'permission' => Spatie\Permission\Models\Permission::class,
/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your roles. Of course, it
* is often just the "Role" model but you may use whatever you like.
*
* The model you want to use as a Role model needs to implement the
* `Spatie\Permission\Contracts\Role` contract.
*/
// 'role' => Spatie\Permission\Models\Role::class,
'role' => Spatie\Permission\Models\Role::class,
],
'table_names' => [
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'roles' => 'roles',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your permissions. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'permissions' => 'permissions',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your models permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_permissions' => 'model_has_permissions',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models roles. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_roles' => 'model_has_roles',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'role_has_permissions' => 'role_has_permissions',
],
'column_names' => [
/*
* Change this if you want to name the related model primary key other than
* `model_id`.
*
* For example, this would be nice if your primary keys are all UUIDs. In
* that case, name this `model_uuid`.
*/
'model_morph_key' => 'model_id',
],
/*
* When set to true, the required permission/role names are added to the exception
* message. This could be considered an information leak in some contexts, so
* the default setting is false here for optimum safety.
*/
'display_permission_in_exception' => false,
'cache' => [
/*
* By default all permissions are cached for 24 hours to speed up performance.
* When permissions or roles are updated the cache is flushed automatically.
*/
'expiration_time' => \DateInterval::createFromDateString('24 hours'),
/*
* The cache key used to store all permissions.
*/
'key' => 'spatie.permission.cache',
/*
* When checking for a permission against a model by passing a Permission
* instance to the check, this key determines what attribute on the
* Permissions model is used to cache against.
*
* Ideally, this should match your preferred way of checking permissions, eg:
* `$user->can('view-posts')` would be 'name'.
*/
'model_key' => 'name',
/*
* You may optionally indicate a specific cache driver to use for permission and
* role caching using any of the `store` drivers listed in the cache.php config
* file. Using 'default' here means to use the `default` set in cache.php.
*/
'store' => 'default',
],
];
================================================
FILE: src/Console/.gitkeep
================================================
================================================
FILE: src/Contracts/UserManagementContracts.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Contracts;
interface UserManagementContracts
{
}
================================================
FILE: src/Database/Migrations/.gitkeep
================================================
================================================
FILE: src/Database/Migrations/2019_01_01_111111_create_users_table.php
================================================
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$table = config("laravel_user_management.users_table");
Schema::create($table, function (Blueprint $table) {
$table->increments('id');
$table->string('first_name');
$table->string('last_name');
$table->string('email')->nullable()->unique();
$table->string('mobile')->nullable()->unique();
$table->string('password');
$table->enum('status',['pending','accepted','blocked'])->default('pending');
$table->boolean('email_verified')->default(false);
$table->boolean('mobile_verified')->default(false);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$table = config("laravel_user_management.users_table");
Schema::dropIfExists('users');
}
private function createTable(array $data)
{
foreach($data as $item)
{
}
}
}
================================================
FILE: src/Database/Migrations/2019_01_01_222222_create_departments_table.php
================================================
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateDepartmentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$table = config("laravel_user_management.user_department_table");
Schema::create($table, function (Blueprint $table)
{
$table->increments('id');
$table->string('title')->unique();
$table->unsignedInteger('parent_id')->nullable();
$table->timestamps();
$table->foreign('parent_id')
->references('id')
->on($table)
->onUpdate('CASCADE')
->onDelete('CASCADE');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$table = config("laravel_user_management.user_department_table");
Schema::dropIfExists($table);
}
}
================================================
FILE: src/Database/Migrations/2019_01_01_333333_create_user_department_users_table.php
================================================
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUserDepartmentUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$departments_table = config("laravel_user_management.user_department_table");
$users_table = config("laravel_user_management.users_table");
$table = config("laravel_user_management.user_department_user_table");
Schema::create($table, function (Blueprint $table) use($departments_table,$users_table)
{
$table->unsignedInteger('user_id');
$table->unsignedInteger('department_id');
$table->foreign('department_id')
->references('id')
->on($departments_table)
->onUpdate('CASCADE')
->onDelete('CASCADE');
$table->foreign('user_id')
->references('id')
->on($users_table)
->onUpdate('CASCADE')
->onDelete('CASCADE');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$table = config("laravel_user_management.user_department_user_table");
Schema::dropIfExists($table);
}
}
================================================
FILE: src/Database/Migrations/2019_01_01_444444_create_permission_tables.php
================================================
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePermissionTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$tableNames = config('permission.table_names');
$columnNames = config('permission.column_names');
Schema::create($tableNames['permissions'], function (Blueprint $table) {
$table->increments('id');
$table->string('name')->index();
$table->string('title')->nullable();
$table->string('guard_name');
$table->string('module')->nullable();
$table->text('description')->nullable();
$table->timestamps();
$table->unique(['name','guard_name']);
});
Schema::create($tableNames['roles'], function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('title')->nullable();
$table->string('guard_name');
$table->text('description')->nullable();
$table->timestamps();
$table->unique(['name','guard_name']);
});
Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames) {
$table->unsignedInteger('permission_id');
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type', ]);
$table->foreign('permission_id')
->references('id')
->on($tableNames['permissions'])
->onDelete('cascade');
$table->primary(['permission_id', $columnNames['model_morph_key'], 'model_type'],
'model_has_permissions_permission_model_type_primary');
});
Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames) {
$table->unsignedInteger('role_id');
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type', ]);
$table->foreign('role_id')
->references('id')
->on($tableNames['roles'])
->onDelete('cascade');
$table->primary(['role_id', $columnNames['model_morph_key'], 'model_type'],
'model_has_roles_role_model_type_primary');
});
Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
$table->unsignedInteger('permission_id');
$table->unsignedInteger('role_id');
$table->foreign('permission_id')
->references('id')
->on($tableNames['permissions'])
->onDelete('cascade');
$table->foreign('role_id')
->references('id')
->on($tableNames['roles'])
->onDelete('cascade');
$table->primary(['permission_id', 'role_id']);
app('cache')
->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
->forget(config('permission.cache.key'));
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$tableNames = config('permission.table_names');
Schema::drop($tableNames['role_has_permissions']);
Schema::drop($tableNames['model_has_roles']);
Schema::drop($tableNames['model_has_permissions']);
Schema::drop($tableNames['roles']);
Schema::drop($tableNames['permissions']);
}
}
================================================
FILE: src/Database/Migrations/2019_02_02_555555_create_soft-delete_users_table.php
================================================
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSoftDeleteUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$table = config("laravel_user_management.users_table");
Schema::table($table, function (Blueprint $table) {
$table->softDeletes();
$table->dropColumn('status');
});
Schema::table($table, function (Blueprint $table) {
$table->enum('status',['pending','accepted','blocked','deleted'])->default('pending');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$table = config("laravel_user_management.users_table");
Schema::table($table, function (Blueprint $table) {
$table->dropColumn('deleted_at');
$table->dropColumn('status');
});
Schema::table($table, function (Blueprint $table) {
$table->enum('status',['pending','accepted','blocked'])->default('pending');
});
}
}
================================================
FILE: src/Database/Migrations/2019_10_17_110654_create_password_reset_table.php
================================================
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$table = config("laravel_user_management.password_resets_table");
Schema::create($table, function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$table = config("laravel_user_management.password_resets_table");
Schema::dropIfExists($table);
}
}
================================================
FILE: src/Database/Seeders/.gitkeep
================================================
================================================
FILE: src/Database/Seeders/Department/DepartmentTableSeeder.php
================================================
<?php
use Mekaeil\LaravelUserManagement\Seeders\Department\MasterDepartmentTableSeeder;
class DepartmentTableSeeder extends MasterDepartmentTableSeeder
{
protected $departments = [
[
'title' => "Clients",
'parent' => '',
],
];
}
================================================
FILE: src/Database/Seeders/Department/MasterDepartmentTableSeeder.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Seeders\Department;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use Mekaeil\LaravelUserManagement\Repository\Contracts\DepartmentRepositoryInterface;
class MasterDepartmentTableSeeder extends Seeder
{
protected $departments = [];
protected $departmentRepository;
public function __construct(DepartmentRepositoryInterface $repository)
{
$this->departmentRepository = $repository;
}
protected function getDepartments()
{
return $this->departments;
}
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->command->info('=============================================================');
$this->command->info(' USER MODULE: INSERT DEPARTMENTS DATA');
$this->command->info('=============================================================');
$this->command->info("\n");
foreach ($this->getDepartments() as $item)
{
$parent = null;
if($item['parent'] != null)
{
$parent = $this->departmentRepository->findBy([
'title' => $item['title'],
])->id;
}
$findDepartment = $this->departmentRepository->findBy([
'title' => $item['title'],
'parent_id' => $parent
]);
if ($findDepartment)
{
$this->command->info('THIS DEPARTMENT << ' . $item['title'] . '] >> EXISTED! UPDATING DATA ...');
$this->departmentRepository->update($findDepartment->id,[
'title' => $item['title'],
'parent_id' => $parent,
]);
continue;
}
$this->command->info('CREATING THIS DEPARTMENT <<' . $item['title'] . '] >> ...');
$this->departmentRepository->store([
'title' => $item['title'],
'parent_id' => $parent,
]);
}
$this->command->info("\n");
$this->command->info('=============================================================');
$this->command->info(' INSERTING DEPARTMENTS DATA FINALIZED!');
$this->command->info('=============================================================');
$this->command->info("\n");
}
}
================================================
FILE: src/Database/Seeders/Permission/MasterPermissionTableSeeder.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Seeders\Permission;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use Mekaeil\LaravelUserManagement\Repository\Contracts\PermissionRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Contracts\RoleRepositoryInterface;
class MasterPermissionTableSeeder extends Seeder
{
protected $permissions = [];
protected $guardName = "web";
protected $permissionRepository;
protected $roleRepository;
public function __construct(
PermissionRepositoryInterface $repository,
RoleRepositoryInterface $role
)
{
$this->permissionRepository = $repository;
$this->roleRepository = $role;
}
protected function getPermissions(){
return $this->permissions;
}
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->command->info('==========================================================================');
$this->command->info('USER MANAGEMENT PACKAGE: INSERT PERMISSIONS DATA');
$this->command->info('YOU CAN ADD NEW PERMISSION IN "database/seeds/PermissionTableSeeder.php"');
$this->command->info('==========================================================================');
$this->command->info("\n");
$rolePermissions = array();
foreach ($this->getPermissions() as $permission)
{
/// WHEN WE NEED A PERMISSION FOR DIFFERENT GUARD NAMES
//////////////////////////////////////////////////////////
if (is_array($permission['guard_name'])) {
foreach ($permission['guard_name'] as $guard) {
$rolePermissions = $this->setPermissions($permission,$guard);
$this->command->info(' THIS PERMISSION <<' . array_keys($rolePermissions)[0] . ' >> ASSIGNED TO THESE ROLES <<<< '. implode(' - ', $rolePermissions[array_keys($rolePermissions)[0]]) . ' >>> GUARD NAME = ' . $guard);
$permObject = $this->permissionRepository->findBy([
'name' => array_keys($rolePermissions)[0],
'guard_name' => $guard
]);
$permObject->syncRoles( $this->getRolesID($rolePermissions[array_keys($rolePermissions)[0]],$guard) );
}
continue;
}
$rolePermissions = $this->setPermissions($permission,$permission['guard_name']);
$this->guardName = $permission['guard_name'];
/*
|--------------------------------------------------------------------------
| UPDATE ROLE'S PERMISSIONS
|--------------------------------------------------------------------------
|
*/
if (!empty($rolePermissions))
{
$this->command->info("\n");
$this->command->info(' ********************************************* ');
$this->command->info(' UPDATING ROLE\'S PERMISSIONS ');
$this->command->info(' ********************************************* ');
$this->command->info("\n");
foreach ($rolePermissions as $perm => $roles)
{
$this->command->info(' THIS PERMISSION <<' . $perm . ' >> ASSIGNED TO THESE ROLES <<<< '. implode(' - ', $roles) . ' >>> GUARD NAME = ' . $this->guardName);
$permObject = $this->permissionRepository->findBy(['name' => $perm]);
$permObject->syncRoles( $this->getRolesID($roles,$this->guardName) );
}
$this->command->info("\n");
$this->command->info(' ********************************************* ');
$this->command->info(' FINALIZED UPDATING ROLE\'S PERMISSIONS ');
$this->command->info(' ********************************************* ');
}
}
$this->command->info("\n");
$this->command->info('=============================================================');
$this->command->info(' INSERTING PERMISSIONS FINALIZED!');
$this->command->info('=============================================================');
$this->command->info("\n");
}
private function setPermissions(array $permission , $guard = null)
{
$getGuard = $guard ?? $permission['guard_name'];
$getPermission = $this->permissionRepository->findBy([
'name' => $permission['name'],
'guard_name'=> $getGuard
]);
if (! is_null($getPermission))
{
$this->command->info('THIS PERMISSION << ' . $permission['name'] . ' >> EXISTED! UPDATING DATA ...');
$this->permissionRepository->update($getPermission->id,[
'name' => $permission['name'],
'guard_name' => $guard ?? $permission['guard_name'],
'title' => isset($permission['title']) ? $permission['title'] : null ,
'module' => isset($permission['module']) ? $permission['module'] : null ,
'description' => isset($permission['description']) ? $permission['description'] : null ,
]);
$rolePermissions[$permission['name']] = array_values($permission['roles']) ?? null ;
return $rolePermissions;
}
$this->command->info('CREATING THIS PERMISSION <<' . $permission['name'] . ' >> ...');
$this->permissionRepository->store([
'name' => $permission['name'],
'guard_name' => $getGuard,
'title' => isset($permission['title']) ? $permission['title'] : null ,
'module' => isset($permission['module']) ? $permission['module'] : null ,
'description' => isset($permission['description']) ? $permission['description'] : null ,
]);
$rolePermissions[$permission['name']] = array_values($permission['roles']) ?? null ;
return $rolePermissions;
}
private function getRolesID(array $roles, $guard)
{
$roleIDs = array();
foreach ($roles as $role)
{
$findRole = $this->roleRepository->findBy([
'name' => $role,
'guard_name' => $guard
]);
$roleIDs[] = $findRole ? $findRole->id : null;
}
return array_values($roleIDs);
}
}
================================================
FILE: src/Database/Seeders/Permission/PermissionTableSeeder.php
================================================
<?php
use Mekaeil\LaravelUserManagement\Seeders\Permission\MasterPermissionTableSeeder;
class PermissionTableSeeder extends MasterPermissionTableSeeder
{
protected $permissions = [
[
'name' => 'admin.manager',
'title' => 'Admin Panel',
'guard_name' => 'web',
'description' => 'This permission is for access to admin panel.',
'module' => 'User',
'roles' => [
'Admin',
],
],
];
}
================================================
FILE: src/Database/Seeders/Role/MasterRoleTableSeeder.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Seeders\Permission;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use Mekaeil\LaravelUserManagement\Repository\Contracts\RoleRepositoryInterface;
class MasterRoleTableSeeder extends Seeder
{
protected $roles = [];
protected $roleRepository;
public function __construct(RoleRepositoryInterface $repository)
{
$this->roleRepository = $repository;
}
protected function getRoles()
{
return $this->roles;
}
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->command->info('=============================================================');
$this->command->info(' USER MODULE: INSERT ROLES DATA');
$this->command->info('=============================================================');
$this->command->info("\n");
foreach ($this->getRoles() as $role)
{
$findRole = $this->roleRepository->findBy([
'name' => $role['name'],
'guard_name' => $role['guard_name']
]);
if ($findRole)
{
$this->command->info('THIS ROLE << ' . $role['name'] .'['. $role['guard_name'] . '] >> EXISTED! UPDATING DATA ...');
$this->roleRepository->update($findRole->id,[
'name' => $role['name'],
'title' => $role['title'],
'guard_name' => $role['guard_name'],
'description' => isset($role['description']) ? $role['description'] : null,
]);
continue;
}
$this->command->info('CREATING THIS ROLE <<' . $role['name'] .'['. $role['guard_name'] . '] >> ...');
$this->roleRepository->store([
'name' => $role['name'],
'title' => $role['title'],
'guard_name' => $role['guard_name'],
'description' => isset($role['description']) ? $role['description'] : null,
]);
}
$this->command->info("\n");
$this->command->info('=============================================================');
$this->command->info(' INSERTING ROLES FINALIZED!');
$this->command->info('=============================================================');
$this->command->info("\n");
}
}
================================================
FILE: src/Database/Seeders/Role/RoleTableSeeder.php
================================================
<?php
use Mekaeil\LaravelUserManagement\Seeders\Permission\MasterRoleTableSeeder;
class RoleTableSeeder extends MasterRoleTableSeeder
{
protected $roles = [
[
'name' => "Admin",
'title' => "Administrator",
'guard_name' => "web",
'description' => "This role will assign to Administrator",
],
[
'name' => "User",
'title' => "User",
'guard_name' => "web",
'description' => "This role will assign to user.",
],
];
}
================================================
FILE: src/Database/Seeders/UserManagementDatabaseSeeder.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class UserManagementDatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
}
}
================================================
FILE: src/Entities/.gitkeep
================================================
================================================
FILE: src/Entities/Department.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Entities;
use Illuminate\Database\Eloquent\Model;
class Department extends Model
{
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->setTable(config("laravel_user_management.user_department_table"));
}
protected $fillable = [
'title',
'parent_id',
];
public function user()
{
return $this->hasMany(User::class);
}
public function parent()
{
return $this->hasOne(Department::class, 'parent_id', 'id');
}
public function children()
{
return $this->belongsTo(Department::class,'parent_id','id');
}
public function users()
{
$table = config("laravel_user_management.user_department_user_table");
return $this->belongsToMany(
User::class,
$table,
'department_id',
'user_id'
);
}
}
================================================
FILE: src/Entities/Permission.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Entities;
use Spatie\Permission\Models\Permission as SpatiePermission;
class Permission extends SpatiePermission
{
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
}
}
================================================
FILE: src/Entities/Role.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Entities;
use Spatie\Permission\Models\Role as SpatieRole;
class Role extends SpatieRole
{
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
}
}
================================================
FILE: src/Entities/User.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Entities;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Authenticatable
{
use Notifiable, HasRoles, SoftDeletes;
protected $guard_name = 'web';
protected $fillable = [
'first_name',
'last_name',
'email',
'mobile',
'password',
'status', // 'pending','accepted','blocked' | DEFAULT: pending
'email_verified',
'mobile_verified',
];
/**
* @param $password
*/
public function setPasswordAttribute($password)
{
$this->attributes['password'] = bcrypt($password);
}
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->setTable(config("laravel_user_management.users_table"));
}
public function departments()
{
$table = config("laravel_user_management.user_department_user_table");
return $this->belongsToMany(
Department::class,
$table,
'user_id',
'department_id'
);
}
}
================================================
FILE: src/Entities/export/Department.php
================================================
<?php
namespace App\Entities;
use Mekaeil\LaravelUserManagement\Entities\Department as UserManagementDepartment;
class Department extends UserManagementDepartment
{
protected $fillable = [
'title',
'slug',
'parent_id',
];
}
================================================
FILE: src/Entities/export/Permission.php
================================================
<?php
namespace App\Entities;
use Mekaeil\LaravelUserManagement\Entities\Permission as UserManagementPermission;
class Permission extends UserManagementPermission
{
}
================================================
FILE: src/Entities/export/Role.php
================================================
<?php
namespace App\Entities;
use Mekaeil\LaravelUserManagement\Entities\Role as UserManagementRole;
class Role extends UserManagementRole
{
}
================================================
FILE: src/Entities/export/User.php
================================================
<?php
namespace App\Entities;
use Mekaeil\LaravelUserManagement\Entities\User as UserManagement;
class User extends UserManagement
{
// protected $fillable = [
// 'first_name',
// 'last_name',
// 'email',
// 'mobile',
// 'password',
// 'status', // 'pending','accepted','blocked' | DEFAULT: pending
// 'email_verified',
// 'mobile_verified',
// ];
////// !!! IMPORTANT !!!
////// WE ENCRYPT PASSWORD IN MODEL YOU CAN OVERWRITE IT AND REMOVE IT
// public function setPasswordAttribute($password)
// {
// $this->attributes['password'] = bcrypt($password);
// }
}
================================================
FILE: src/Facade/UserManagement.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Facade;
use Illuminate\Support\Facades\Facade;
use Illuminate\Support\Facades\Log;
class UserManagement extends Facade
{
/**
* @return string
*/
public static function getFacadeAccessor()
{
return 'UserManagement';
}
}
================================================
FILE: src/Http/Controllers/.gitkeep
================================================
================================================
FILE: src/Http/Controllers/Admin/DepartmentsController.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Controllers\Admin;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Mekaeil\LaravelUserManagement\Repository\Contracts\DepartmentRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Contracts\UserRepositoryInterface;
use Mekaeil\LaravelUserManagement\Http\Requests\Admin\StoreDepartment;
use Mekaeil\LaravelUserManagement\Http\Requests\Admin\UpdateDepartment;
class DepartmentsController extends Controller
{
protected $departmentRepository;
protected $userRepository;
public function __construct(
DepartmentRepositoryInterface $department,
UserRepositoryInterface $user)
{
$this->departmentRepository = $department;
$this->userRepository = $user;
}
public function index()
{
$departments = $this->departmentRepository->all();
return view('user-management.department.index', compact('departments'));
}
public function create()
{
$departments = $this->departmentRepository->all();
return view('user-management.department.create', compact('departments'));
}
public function edit(int $ID)
{
if($department = $this->departmentRepository->find($ID))
{
$departments = $this->departmentRepository->all();
return view('user-management.department.edit', compact('department', 'departments'));
}
return redirect()->route('admin.user_management.department.index')->with('message',[
'type' => 'danger',
'text' => 'Department does not exist!'
]);
}
public function store(StoreDepartment $request)
{
$parent = null;
if($request->parent_id && $findDepartment = $this->departmentRepository->find($request->parent_id))
{
$parent = $findDepartment->id;
}
$this->departmentRepository->store([
'title' => $request->title,
'parent_id' => $parent,
]);
return redirect()->route('admin.user_management.department.index')->with('message',[
'type' => 'success',
'text' => "This department << $request->title >> created successfully."
]);
}
public function update(int $ID, UpdateDepartment $request)
{
if($department = $this->departmentRepository->find($ID))
{
$parent = null;
if($request->parent_id && $findDepartment = $this->departmentRepository->find($request->parent_id))
{
$parent = $findDepartment->id;
}
$this->departmentRepository->update($ID,[
'title' => $request->title,
'parent_id' => $parent,
]);
return redirect()->route('admin.user_management.department.index')->with('message',[
'type' => 'success',
'text' => "This department << $request->title >> updated successfully."
]);
}
return redirect()->route('admin.user_management.department.index')->with('message',[
'type' => 'danger',
'text' => 'Department does not exist!'
]);
}
public function delete(int $ID)
{
if($department = $this->departmentRepository->find($ID))
{
$this->departmentRepository->delete($ID);
return redirect()->route('admin.user_management.department.index')->with('message',[
'type' => 'warning',
'text' => 'Department deleted successfully!'
]);
}
return redirect()->route('admin.user_management.department.index')->with('message',[
'type' => 'danger',
'text' => 'Department does not exist!'
]);
}
}
================================================
FILE: src/Http/Controllers/Admin/PermissionsController.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Controllers\Admin;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Mekaeil\LaravelUserManagement\Repository\Contracts\PermissionRepositoryInterface;
use Mekaeil\LaravelUserManagement\Http\Requests\Admin\StorePermission;
use Mekaeil\LaravelUserManagement\Http\Requests\Admin\UpdatePermission;
class PermissionsController extends Controller
{
protected $permissionRepository;
public function __construct(PermissionRepositoryInterface $permission)
{
$this->permissionRepository = $permission;
}
public function index(Request $request)
{
$permissions = $this->permissionRepository->paginate(config('laravel_user_management.row_list_per_page'));
return view('user-management.permission.index', compact('permissions'));
}
public function create()
{
return view('user-management.permission.create');
}
public function edit(int $ID)
{
if($permission = $this->permissionRepository->find($ID))
{
return view('user-management.permission.edit', compact('permission'));
}
return redirect()->route('admin.user_management.permission.index')->with('message',[
'type' => 'danger',
'text' => "This permission << $request->name >> does not exist!",
]);
}
public function store(StorePermission $request)
{
$this->permissionRepository->store([
'name' => $request->name,
'title' => $request->title,
'module' => $request->module,
'guard_name' => $request->guard_name,
'description' => $request->description,
]);
return redirect()->route('admin.user_management.permission.index')->with('message',[
'type' => 'success',
'text' => "This permission << $request->name >> created successfully!",
]);
}
public function update(int $ID, UpdatePermission $request)
{
if($permission = $this->permissionRepository->find($ID))
{
$this->permissionRepository->update($ID,[
'name' => $request->name,
'title' => $request->title,
'module' => $request->module,
'guard_name' => $request->guard_name,
'description' => $request->description,
]);
return redirect()->route('admin.user_management.permission.index')->with('message',[
'type' => 'success',
'text' => "This permission << $request->name >> updated successfully!",
]);
}
return redirect()->route('admin.user_management.permission.index')->with('message',[
'type' => 'danger',
'text' => "This permission << $request->name >> does not exist!",
]);
}
public function delete(int $ID)
{
if($permission = $this->permissionRepository->find($ID))
{
$name = $permission->name;
$this->permissionRepository->delete($ID);
return redirect()->route('admin.user_management.permission.index')->with('message',[
'type' => 'warning',
'text' => "This permission << $name >> deleted successfully!",
]);
}
return redirect()->route('admin.user_management.permission.index')->with('message',[
'type' => 'danger',
'text' => "permission does not exist!",
]);
}
}
================================================
FILE: src/Http/Controllers/Admin/RolesController.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Controllers\Admin;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Mekaeil\LaravelUserManagement\Repository\Contracts\PermissionRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Contracts\RoleRepositoryInterface;
use Mekaeil\LaravelUserManagement\Http\Requests\Admin\StoreRole;
use Mekaeil\LaravelUserManagement\Http\Requests\Admin\UpdateRole;
class RolesController extends Controller
{
protected $permissionRepository;
protected $roleRepository;
public function __construct(
PermissionRepositoryInterface $permission,
RoleRepositoryInterface $role)
{
$this->permissionRepository = $permission;
$this->roleRepository = $role;
}
public function index()
{
$roles = $this->roleRepository->all();
return view('user-management.role.index', compact('roles'));
}
public function create()
{
$permissions = $this->permissionRepository->all();
return view('user-management.role.create', compact('permissions'));
}
public function edit(int $ID)
{
if($role = $this->roleRepository->find($ID))
{
$permissions = $this->permissionRepository->all();
$roleHasPermissions = array_column(json_decode($role->permissions, true), 'id');
return view('user-management.role.edit', compact('role', 'permissions', 'roleHasPermissions'));
}
return redirect()->route('admin.user_management.role.index')->with('message',[
'type' => 'danger',
'text' => 'This role does not exist!'
]);
}
public function store(StoreRole $request)
{
$role = $this->roleRepository->store([
'name' => $request->name,
'title' => $request->title,
'guard_name' => $request->guard_name,
'description' => $request->description,
]);
if(! empty($request->permissions))
{
$this->permissionRepository->setPermissionToRole($role->id, $request->permissions);
}
return redirect()->route('admin.user_management.role.index')->with('message',[
'type' => 'success',
'text' => "his role << $request->name >> created successfully.",
]);
}
public function update(int $ID, UpdateRole $request)
{
if($role = $this->roleRepository->find($ID))
{
$this->roleRepository->update($ID,[
'name' => $request->name,
'title' => $request->title,
'guard_name' => $request->guard_name,
'description' => $request->description,
]);
$permissions = $request->permissions ?? [];
$this->permissionRepository->SyncPermToRole($role->id, $permissions);
return redirect()->route('admin.user_management.role.index')->with('message',[
'type' => 'success',
'text' => "This role << $request->name >> updated successfully.",
]);
}
return redirect()->route('admin.user_management.role.index')->with('message',[
'type' => 'danger',
'text' => 'This role does not exist!'
]);
}
public function delete(int $ID)
{
if($this->roleRepository->find($ID))
{
$this->roleRepository->delete($ID);
return redirect()->route('admin.user_management.role.index')->with('message',[
'type' => 'warning',
'text' => 'Role deleted successfully!'
]);
}
return redirect()->route('admin.user_management.role.index')->with('message',[
'type' => 'danger',
'text' => 'This role does not exist!'
]);
}
}
================================================
FILE: src/Http/Controllers/Admin/UsersController.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Controllers\Admin;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Mekaeil\LaravelUserManagement\Repository\Contracts\PermissionRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Contracts\RoleRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Contracts\UserRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Eloquents\DepartmentRepository;
use Mekaeil\LaravelUserManagement\Http\Requests\Admin\StoreUser;
use Mekaeil\LaravelUserManagement\Http\Requests\Admin\UpdateUser;
use App\Entities\User;
class UsersController extends Controller
{
protected $userRepository;
protected $permissionRepository;
protected $roleRepository;
protected $departmentRepository;
public function __construct(
UserRepositoryInterface $user,
PermissionRepositoryInterface $permission,
RoleRepositoryInterface $role,
DepartmentRepository $department)
{
$this->permissionRepository = $permission;
$this->roleRepository = $role;
$this->userRepository = $user;
$this->departmentRepository = $department;
}
public function index()
{
// $users = $this->userRepository->all();
$users = $this->userRepository->allWithTrashed();
return view('user-management.user.index', compact('users'));
}
public function create()
{
$roles = $this->roleRepository->all();
$departments = $this->departmentRepository->all();
return view('user-management.user.create', compact('roles', 'departments'));
}
public function edit($ID)
{
if($user = $this->userRepository->find($ID))
{
$roles = $this->roleRepository->all();
$departments = $this->departmentRepository->all();
$userHasRoles = $user->roles ? array_column(json_decode($user->roles, true), 'id') : [];
$userHasDepartments = $user->departments ? array_column(json_decode($user->departments, true), 'id') : [];
return view('user-management.user.edit', compact('roles', 'departments', 'user', 'userHasRoles', 'userHasDepartments'));
}
return redirect()->back()->with('message',[
'type' => 'danger',
'text' => 'This user does not exist!',
]);
}
public function store(StoreUser $request)
{
$user = $this->userRepository->store([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'email' => $request->email,
'mobile' => $request->mobile,
'status' => $request->status ?? 'pending',
'password' => $request->password
]);
$roles = $request->roles ?? [];
$departments = $request->departments ?? [];
$this->roleRepository->setRoleToMember($user, $roles);
$this->departmentRepository->attachDepartment($user, $departments);
return redirect()->route('admin.user_management.user.index')->with('message',[
'type' => 'success',
'text' => 'َUser updated successfully!'
]);
}
public function update(int $ID, UpdateUser $request)
{
if($user = $this->userRepository->find($ID))
{
$this->userRepository->update($ID, [
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'email' => $request->email,
'status' => $request->status,
'mobile' => $request->mobile,
]);
$roles = $request->roles ?? [];
$departments = $request->departments ?? [];
if(count($departments) == 1 && $departments[0] == null)
{
$departments = [];
}
//// IF WE WANT TO CHANGE PASSWORD
////////////////////////////////////////////////////////////
if($request->password)
{
$this->userRepository->update($ID, [
'password' => bcrypt($request->password)
]);
}
////////////////////////////////////////////////////////////
$this->roleRepository->syncRoleToUser($user, $roles);
$this->departmentRepository->syncDepartments($user, $departments);
return redirect()->route('admin.user_management.user.index')->with('message',[
'type' => 'success',
'text' => 'َUser updated successfully!'
]);
}
return redirect()->back()->with('message',[
'type' => 'danger',
'text' => 'This user does not exist!',
]);
}
public function delete($ID)
{
if($user = $this->userRepository->find($ID))
{
//// soft delete
$this->userRepository->update($ID, [
'status' => 'deleted'
]);
$user->delete();
return redirect()->route('admin.user_management.user.index')->with('message',[
'type' => 'warning',
'text' => 'User Deleted successfully!'
]);
}
return redirect()->back()->with('message',[
'type' => 'danger',
'text' => 'This user does not exist!',
]);
}
public function restoreBackUser(int $ID)
{
if($this->userRepository->restoreUser($ID))
{
$user = $this->userRepository->update($ID, [
'status' => 'accepted',
]);
return redirect()->route('admin.user_management.user.index')->with('message',[
'type' => 'success',
'text' => 'User restored successfully!'
]);
}
return redirect()->back()->with('message',[
'type' => 'danger',
'text' => 'This user does not exist!',
]);
}
}
================================================
FILE: src/Http/Controllers/Admin/export/DepartmentsController.php
================================================
<?php
namespace App\Http\Controllers\UserManagement;
use Illuminate\Http\Request;
use Mekaeil\LaravelUserManagement\Http\Controllers\Admin\DepartmentsController as DepartmentUserManager;
class DepartmentsController extends DepartmentUserManager
{
/*
|--------------------------------------------------------------------------
| DEPARTMENT CONTROLLER FOR OVERWRITE IF YOU WANT
|--------------------------------------------------------------------------
| All of the functions we have commented below, if you want to overwrite
| any of them you can uncomment it and write your code. It's important
| to know the repositories in below are available for work with it.
*/
// public function index()
// {
// return view('user-management.department.index');
// }
// public function create(){
// return view('user-management.department.create');
// }
// public function store(){
// }
// public function update(){
// }
// public function delete()
// {
// }
}
================================================
FILE: src/Http/Controllers/Admin/export/PermissionsController.php
================================================
<?php
namespace App\Http\Controllers\UserManagement;
use Illuminate\Http\Request;
use Mekaeil\LaravelUserManagement\Http\Controllers\Admin\PermissionsController as PermissionUserManager;
class PermissionsController extends PermissionUserManager
{
/*
|--------------------------------------------------------------------------
| PERMISSIONS CONTROLLER FOR OVERWRITE IF YOU WANT
|--------------------------------------------------------------------------
| All of the functions we have commented below, if you want to overwrite
| any of them you can uncomment it and write your code. It's important
| to know the repositories in below are available for work with it.
*/
// public function index(){
// return view('user-management.permission.index');
// }
// public function create(){
// return view('user-management.permission.create');
// }
// public function store(){
// }
// public function update(){
// }
// public function delete()
// {
// }
}
================================================
FILE: src/Http/Controllers/Admin/export/RolesController.php
================================================
<?php
namespace App\Http\Controllers\UserManagement;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Mekaeil\LaravelUserManagement\Http\Controllers\Admin\RolesController as RoleUserManager;
class RolesController extends RoleUserManager
{
/*
|--------------------------------------------------------------------------
| ROLES CONTROLLER FOR OVERWRITE IF YOU WANT
|--------------------------------------------------------------------------
| All of the functions we have commented below, if you want to overwrite
| any of them you can uncomment it and write your code. It's important
| to know the repositories in below are available for work with it.
*/
// public function index(){
// return view('user-management.role.index');
// }
// public function create(){
// return view('user-management.role.create');
// }
// public function store(){
// }
// public function update(){
// }
// public function delete()
// {
// }
}
================================================
FILE: src/Http/Controllers/Admin/export/UsersController.php
================================================
<?php
namespace App\Http\Controllers\UserManagement;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Mekaeil\LaravelUserManagement\Http\Controllers\Admin\UsersController as UserManager;
class UsersController extends UserManager
{
/*
|--------------------------------------------------------------------------
| USERS CONTROLLER FOR OVERWRITE IF YOU WANT
|--------------------------------------------------------------------------
| All of the functions we have commented below, if you want to overwrite
| any of them you can uncomment it and write your code. It's important
| to know the repositories in below are available for work with it.
*/
// public function index(){
// return view('user-management.user.index');
// }
// public function create(){
// return view('user-management.user.create');
// }
// public function store(){
// }
// public function update(){
// }
// public function delete()
// {
// }
}
================================================
FILE: src/Http/Controllers/Auth/AuthController.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Controllers\Auth;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Mekaeil\LaravelUserManagement\Repository\Contracts\UserRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Contracts\RoleRepositoryInterface;
use Mekaeil\LaravelUserManagement\Http\Requests\Auth\UserLogin;
use Mekaeil\LaravelUserManagement\Http\Requests\Auth\UserRegistration;
use Auth;
class AuthController extends Controller
{
protected $roleRepository;
protected $userRepository;
public function __construct(
UserRepositoryInterface $user,
RoleRepositoryInterface $role)
{
$this->userRepository = $user;
$this->roleRepository = $role;
}
public function loginForm()
{
return view('user-management.auth.login');
}
public function registerForm()
{
return view('user-management.auth.register');
}
public function login(UserLogin $request)
{
$username = config('laravel_user_management.auth.username');
$credentials = [$username => $request->{$username}, 'password' => $request->password, 'status' => 'accepted'];
if (\Auth::attempt($credentials))
{
$user = \Auth::user();
return redirect()->intended('/');
}
$user = $this->userRepository->findBy(["$username" => $request->{$username}]);
if($user && $user->status != 'accepted')
{
return redirect()->back()->with('message',[
'type' => 'danger',
'text' => trans('trans.your_account_does_not_activated')
]);
}
return redirect()->back()->with('message',[
'type' => 'danger',
'text' => trans('trans.username_or_password_wrong')
]);
}
public function register(UserRegistration $request)
{
$userDefaultRole = $this->roleRepository->findBy([
'name' => config('laravel_user_management.auth.user_default_role')
]);
if (!$userDefaultRole)
{
return redirect()->back()->with('message',[
'type' => 'danger',
'text' => trans('trans.default_role_does_not_exist'),
]);
}
//// FOR ACTIVE ACCOUNT BASE PROJECT CONFIG ONE OF THE FIELDS [MOBILE, EMAIL] SHOULD BE REQUIRED
$user = $this->userRepository->store([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'email' => $request->email,
'password' => $request->password,
'mobile' => $request->mobile,
'status' => config('laravel_user_management.auth.default_user_status'),
]);
/// ASSIGN DEFAULT ROLE TO USER
$this->roleRepository->setRoleToMember($user, $userDefaultRole);
\Auth::login($user);
return redirect()->route(config('laravel_user_management.auth.dashboard_route_name_user_redirection'))
->with('message',[
'type' => 'success',
'text' => trans('trans.account_created_successfully')
]);
}
public function logout(Request $request)
{
Auth::logout();
return redirect('/');
}
}
================================================
FILE: src/Http/Controllers/Auth/export/AuthController.php
================================================
<?php
namespace App\Http\Controllers\UserManagement\Auth;
use Illuminate\Http\Request;
use Mekaeil\LaravelUserManagement\Http\Controllers\Auth\AuthController as AuthUserManager;
class AuthController extends AuthUserManager
{
/*
|--------------------------------------------------------------------------
| AUTH CONTROLLER FOR OVERWRITE IF YOU WANT
|--------------------------------------------------------------------------
| All of the functions we have commented below, if you want to overwrite
| any of them you can uncomment it and write your code. It's important
| to know the repositories in below are available for work with it.
*/
// public function loginForm()
// {
/// WRITE YOUR CODE ....
// }
// public function registerForm()
// {
/// WRITE YOUR CODE ....
// }
// public function login()
// {
/// WRITE YOUR CODE ....
// }
// public function register()
// {
/// WRITE YOUR CODE ....
// }
// public function logout()
// {
/// WRITE YOUR CODE ....
// }
}
================================================
FILE: src/Http/Requests/.gitkeep
================================================
================================================
FILE: src/Http/Requests/Admin/StoreDepartment.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
class StoreDepartment 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()
{
$table = config("laravel_user_management.user_department_table");
return [
'title' => "required|unique:$table,title",
'parent_id' => "nullable|numeric|exists:$table,id"
];
}
}
================================================
FILE: src/Http/Requests/Admin/StorePermission.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
class StorePermission 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()
{
$tableNames = config('permission.table_names');
return [
'name' => 'required|unique:'. $tableNames['permissions'],
'title' => 'required|string',
'module' => 'nullable',
'guard_name' => 'nullable',
'description' => 'nullable',
];
}
}
================================================
FILE: src/Http/Requests/Admin/StoreRole.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
class StoreRole 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()
{
$tableNames = config('permission.table_names');
return [
'name' => "required|unique:".$tableNames['roles'].",name",
'title' => 'required|string',
'guard_name' => 'nullable',
'description' => 'nullable',
'permissions' => 'nullable|array',
'permissions.*' => 'nullable|exists:'. $tableNames['permissions']. ',name',
];
}
}
================================================
FILE: src/Http/Requests/Admin/StoreUser.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
class StoreUser 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()
{
$userTable = config("laravel_user_management.users_table");
$departmentTable = config("laravel_user_management.user_department_table");
$tableNames = config('permission.table_names');
return [
'first_name' => 'required|string',
'last_name' => 'required|string',
'email' => "nullable|email|unique:$userTable,email",
'mobile' => "required|unique:$userTable,mobile",
'password' => 'required|min:6',
'roles' => 'nullable|array',
'roles.*' => 'nullable|exists:'. $tableNames['roles']. ',name',
'departments' => 'nullable|array',
'departments.*' => "nullable|exists:$departmentTable,id",
];
}
}
================================================
FILE: src/Http/Requests/Admin/UpdateDepartment.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
class UpdateDepartment 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()
{
$table = config("laravel_user_management.user_department_table");
return [
'title' => "required|unique:$table,title,". $this->ID,
'parent_id' => "nullable|numeric|exists:$table,id"
];
}
}
================================================
FILE: src/Http/Requests/Admin/UpdatePermission.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
class UpdatePermission 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()
{
$tableNames = config('permission.table_names');
return [
'name' => 'required|unique:'. $tableNames['permissions'] .',name,' . $this->ID,
'title' => 'required|string',
'module' => 'nullable',
'guard_name' => 'nullable',
'description' => 'nullable',
];
}
}
================================================
FILE: src/Http/Requests/Admin/UpdateRole.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
class UpdateRole 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()
{
$tableNames = config('permission.table_names');
return [
'name' => "required|unique:".$tableNames['roles'].",name," . $this->ID,
'title' => 'required|string',
'guard_name' => 'nullable',
'description' => 'nullable',
'permissions' => 'nullable|array',
'permissions.*' => 'nullable|exists:'. $tableNames['permissions']. ',name',
];
}
}
================================================
FILE: src/Http/Requests/Admin/UpdateUser.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
class UpdateUser 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()
{
$userTable = config("laravel_user_management.users_table");
$departmentTable = config("laravel_user_management.user_department_table");
$tableNames = config('permission.table_names');
return [
'first_name' => 'required|string',
'last_name' => 'required|string',
'email' => "nullable|email|unique:$userTable,email," . $this->ID,
'mobile' => "required|unique:$userTable,mobile," . $this->ID,
'password' => 'nullable|min:6',
'roles' => 'nullable|array',
'roles.*' => 'nullable|exists:'. $tableNames['roles']. ',name',
'departments' => 'nullable|array',
'departments.*' => "nullable|exists:$departmentTable,id",
];
}
}
================================================
FILE: src/Http/Requests/Auth/UserLogin.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Auth;
use Illuminate\Foundation\Http\FormRequest;
class UserLogin 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()
{
$username = config('laravel_user_management.auth.username');
return [
"$username" => "required" . ($username == 'mobile' ? '|numeric' : '|email'),
'password' => 'required',
];
}
}
================================================
FILE: src/Http/Requests/Auth/UserRegistration.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement\Http\Requests\Auth;
use Illuminate\Foundation\Http\FormRequest;
class UserRegistration 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()
{
$username = config('laravel_user_management.auth.username');
$userTable = config("laravel_user_management.users_table");
return [
'first_name' => 'required|string',
'last_name' => 'required|string',
"$username" => "required" . ($username == 'mobile' ? "|unique:$userTable,mobile" : "|email|unique:$userTable,email"),
'password' => 'required|confirmed|min:6',
];
}
}
================================================
FILE: src/LaravelUserManagementProvider.php
================================================
<?php
namespace Mekaeil\LaravelUserManagement;
use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Debug\ExceptionHandler;
use Mekaeil\LaravelUserManagement\Facade\UserManagement;
// USER
use Mekaeil\LaravelUserManagement\Repository\Contracts\UserRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Eloquents\UserRepository;
// DEPARTMENT
use Mekaeil\LaravelUserManagement\Repository\Contracts\DepartmentRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Eloquents\DepartmentRepository;
// PERMISSION
use Mekaeil\LaravelUserManagement\Repository\Contracts\PermissionRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Eloquents\PermissionRepository;
// ROLE
use Mekaeil\LaravelUserManagement\Repository\Contracts\RoleRepositoryInterface;
use Mekaeil\LaravelUserManagement\Repository\Eloquents\RoleRepository;
class LaravelUserManagementProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
/// CHECK IF ROUTE EXISTS IN BASE PROJECT USE IT
if(file_exists(base_path('routes/user_management.php')))
{
$this->loadRoutesFrom(base_path('routes/user_management.php'));
}
/// SET VIEW'S ROUTE
$this->loadViewsFrom(base_path('views'), 'LaravelUserManagement');
/// SET MIGRATION'S ROUTE
$this->loadMigrationsFrom(base_path('database/migrations'));
/// PUBLISH SECTION
////////////////////////////////////////////////////////////////////////////////////////////////////
/// ROUTE
$this->publishes([
// ROUTE
__DIR__ . '/Routes/user_management.php' => app_path('/../routes/user_management.php'),
// CONFIGS
__DIR__ . '/Config/laravel_user_management.php' => config_path('laravel_user_management.php'),
__DIR__ . '/Config/permission.php' => config_path('permission.php'),
// MIGRATIONS
__DIR__ . '/Database/Migrations/' => database_path('migrations/'),
// ENTITIES
__DIR__ . '/Entities/export/' => app_path('Entities/'),
// CONTROLLERS
__DIR__ . '/Http/Controllers/Admin/export/' => app_path('Http/Controllers/UserManagement'),
__DIR__ . '/Http/Controllers/Auth/export/' => app_path('Http/Controllers/UserManagement/Auth'),
// SEEDS
__DIR__ . '/Database/Seeders/Permission/PermissionTableSeeder.php' => database_path('seeds/PermissionTableSeeder.php'),
__DIR__ . '/Database/Seeders/Role/RoleTableSeeder.php' => database_path('seeds/RoleTableSeeder.php'),
__DIR__ . '/Database/Seeders/Department/DepartmentTableSeeder.php' => database_path('seeds/DepartmentTableSeeder.php'),
// VIEWS
__DIR__ . '/Resource/views/' => resource_path('views'),
__DIR__ . '/Public/' => public_path('/'),
// LANG
__DIR__ . '/Resource/lang/en/' => resource_path('lang/en'),
]);
if(config('laravel_user_management.vue_theme'))
{
$this->publishes([
// VUE.JS
__DIR__ . '/Resource/js/mekaeils-package/' => resource_path('js/mekaeils-package'),
]);
}
}
/**
* Register services.
*
* @return void
*/
public function register()
{
/// BIND FOR FACADE PATTERN
$this->app->bind('UserManagement', function(){
return new UserManagement();
});
/// BIND ABSTRACT TO CONCRETE (IOC CONTAINER WILL HANDLE IT)
$this->app->bind(UserRepositoryInterface::class, UserRepository::class);
$this->app->bind(DepartmentRepositoryInterface::class, DepartmentRepository::class);
$this->app->bind(PermissionRepositoryInterface::class, PermissionRepository::class);
$this->app->bind(RoleRepositoryInterface::class, RoleRepository::class);
}
}
================================================
FILE: src/Public/mekaeils-package/css/style.css
================================================
/*------------------------------------------------------------------
[Master Stylesheet]
Project: Purple Admin
Version: 2.0.0
-------------------------------------------------------------------*/
/*-------------------------------------------------------------------
===== Table of Contents =====
* Bootstrap functions
* Template variables
* SCSS Compass Functions
* Boostrap Main SCSS
* Template mixins
+ Animation Mixins
+ Background Mixins
+ Badge Mixins
+ Button Mixins
+ Miscellaneous Mixins
+ BlockQuote Mixins
+ Cards Mixins
+ Color Functions Mixins
+ Tooltips
+ popovers
* Core Styles
+ Reset Styles
+ Fonts
+ Functions
+ Backgrounds
+ Sidebar
+ Navbar
+ Typography
+ Miscellaneous
+ Footer
+ Layouts
+ Utilities
+ Demo styles
* Components
+ Badges
+ Boostrap Progress
+ Buttons
+ Cards
+ Checkboxes and Radios
+ Dropdowns
+ Forms
+ Icons
+ Lists
+ Preview
+ Tables
* Landing screens
+ Auth
-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
/* === Import Bootstrap functions and variables === */
/*-------------------------------------------------------------------*/
/* === Import template variables === */
/*-------------------------------------------------------------------*/
/* === SCSS Compass Functions === */
@-moz-keyframes flash {
0% {
opacity: 1;
}
25% {
opacity: 0;
}
50% {
opacity: 1;
}
75% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-webkit-keyframes flash {
0% {
opacity: 1;
}
25% {
opacity: 0;
}
50% {
opacity: 1;
}
75% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-o-keyframes flash {
0% {
opacity: 1;
}
25% {
opacity: 0;
}
50% {
opacity: 1;
}
75% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-ms-keyframes flash {
0% {
opacity: 1;
}
25% {
opacity: 0;
}
50% {
opacity: 1;
}
75% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes flash {
0% {
opacity: 1;
}
25% {
opacity: 0;
}
50% {
opacity: 1;
}
75% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-moz-keyframes bounce {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
40% {
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
50% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
60% {
-webkit-transform: translateY(-15px);
-moz-transform: translateY(-15px);
-ms-transform: translateY(-15px);
-o-transform: translateY(-15px);
transform: translateY(-15px);
}
80% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-webkit-keyframes bounce {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
40% {
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
50% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
60% {
-webkit-transform: translateY(-15px);
-moz-transform: translateY(-15px);
-ms-transform: translateY(-15px);
-o-transform: translateY(-15px);
transform: translateY(-15px);
}
80% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-o-keyframes bounce {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
40% {
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
50% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
60% {
-webkit-transform: translateY(-15px);
-moz-transform: translateY(-15px);
-ms-transform: translateY(-15px);
-o-transform: translateY(-15px);
transform: translateY(-15px);
}
80% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-ms-keyframes bounce {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
40% {
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
50% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
60% {
-webkit-transform: translateY(-15px);
-moz-transform: translateY(-15px);
-ms-transform: translateY(-15px);
-o-transform: translateY(-15px);
transform: translateY(-15px);
}
80% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@keyframes bounce {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
40% {
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
50% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
60% {
-webkit-transform: translateY(-15px);
-moz-transform: translateY(-15px);
-ms-transform: translateY(-15px);
-o-transform: translateY(-15px);
transform: translateY(-15px);
}
80% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-moz-keyframes shake {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
10% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
20% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
30% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
40% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
50% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
60% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
70% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
80% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
90% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
100% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}
@-webkit-keyframes shake {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
10% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
20% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
30% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
40% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
50% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
60% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
70% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
80% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
90% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
100% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}
@-o-keyframes shake {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
10% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
20% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
30% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
40% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
50% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
60% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
70% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
80% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
90% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
100% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}
@-ms-keyframes shake {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
10% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
20% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
30% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
40% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
50% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
60% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
70% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
80% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
90% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
100% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}
@keyframes shake {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
10% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
20% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
30% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
40% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
50% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
60% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
70% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
80% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
90% {
-webkit-transform: translateX(-10px);
-moz-transform: translateX(-10px);
-ms-transform: translateX(-10px);
-o-transform: translateX(-10px);
transform: translateX(-10px);
}
100% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}
@-moz-keyframes tada {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
10% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
20% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
30% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
40% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
50% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
60% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
70% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
80% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
90% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
100% {
-webkit-transform: scale(1) rotate(0);
-moz-transform: scale(1) rotate(0);
-ms-transform: scale(1) rotate(0);
-o-transform: scale(1) rotate(0);
transform: scale(1) rotate(0);
}
}
@-webkit-keyframes tada {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
10% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
20% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
30% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
40% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
50% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
60% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
70% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
80% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
90% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
100% {
-webkit-transform: scale(1) rotate(0);
-moz-transform: scale(1) rotate(0);
-ms-transform: scale(1) rotate(0);
-o-transform: scale(1) rotate(0);
transform: scale(1) rotate(0);
}
}
@-o-keyframes tada {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
10% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
20% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
30% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
40% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
50% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
60% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
70% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
80% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
90% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
100% {
-webkit-transform: scale(1) rotate(0);
-moz-transform: scale(1) rotate(0);
-ms-transform: scale(1) rotate(0);
-o-transform: scale(1) rotate(0);
transform: scale(1) rotate(0);
}
}
@-ms-keyframes tada {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
10% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
20% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
30% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
40% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
50% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
60% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
70% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
80% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
90% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
100% {
-webkit-transform: scale(1) rotate(0);
-moz-transform: scale(1) rotate(0);
-ms-transform: scale(1) rotate(0);
-o-transform: scale(1) rotate(0);
transform: scale(1) rotate(0);
}
}
@keyframes tada {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
10% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
20% {
-webkit-transform: scale(0.9) rotate(-3deg);
-moz-transform: scale(0.9) rotate(-3deg);
-ms-transform: scale(0.9) rotate(-3deg);
-o-transform: scale(0.9) rotate(-3deg);
transform: scale(0.9) rotate(-3deg);
}
30% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
40% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
50% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
60% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
70% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
80% {
-webkit-transform: scale(1.1) rotate(-3deg);
-moz-transform: scale(1.1) rotate(-3deg);
-ms-transform: scale(1.1) rotate(-3deg);
-o-transform: scale(1.1) rotate(-3deg);
transform: scale(1.1) rotate(-3deg);
}
90% {
-webkit-transform: scale(1.1) rotate(3deg);
-moz-transform: scale(1.1) rotate(3deg);
-ms-transform: scale(1.1) rotate(3deg);
-o-transform: scale(1.1) rotate(3deg);
transform: scale(1.1) rotate(3deg);
}
100% {
-webkit-transform: scale(1) rotate(0);
-moz-transform: scale(1) rotate(0);
-ms-transform: scale(1) rotate(0);
-o-transform: scale(1) rotate(0);
transform: scale(1) rotate(0);
}
}
@-moz-keyframes swing {
20%, 40%, 60%, 80%, 100% {
-webkit-transform-origin: top center 50%;
-moz-transform-origin: top center 50%;
-ms-transform-origin: top center 50%;
-o-transform-origin: top center 50%;
transform-origin: top center 50%;
}
20% {
-webkit-transform: rotate(15deg);
-moz-transform: rotate(15deg);
-ms-transform: rotate(15deg);
-o-transform: rotate(15deg);
transform: rotate(15deg);
}
40% {
-webkit-transform: rotate(-10deg);
-moz-transform: rotate(-10deg);
-ms-transform: rotate(-10deg);
-o-transform: rotate(-10deg);
transform: rotate(-10deg);
}
60% {
-webkit-transform: rotate(5deg);
-moz-transform: rotate(5deg);
-ms-transform: rotate(5deg);
-o-transform: rotate(5deg);
transform: rotate(5deg);
}
80% {
-webkit-transform: rotate(-5deg);
-moz-transform: rotate(-5deg);
-ms-transform: rotate(-5deg);
-o-transform: rotate(-5deg);
transform: rotate(-5deg);
}
100% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
}
@-webkit-keyframes swing {
20%, 40%, 60%, 80%, 100% {
-webkit-transform-origin: top center 50%;
-moz-transform-origin: top center 50%;
-ms-transform-origin: top center 50%;
-o-transform-origin: top center 50%;
transform-origin: top center 50%;
}
20% {
-webkit-transform: rotate(15deg);
-moz-transform: rotate(15deg);
-ms-transform: rotate(15deg);
-o-transform: rotate(15deg);
transform: rotate(15deg);
}
40% {
-webkit-transform: rotate(-10deg);
-moz-transform: rotate(-10deg);
-ms-transform: rotate(-10deg);
-o-transform: rotate(-10deg);
transform: rotate(-10deg);
}
60% {
-webkit-transform: rotate(5deg);
-moz-transform: rotate(5deg);
-ms-transform: rotate(5deg);
-o-transform: rotate(5deg);
transform: rotate(5deg);
}
80% {
-webkit-transform: rotate(-5deg);
-moz-transform: rotate(-5deg);
-ms-transform: rotate(-5deg);
-o-transform: rotate(-5deg);
transform: rotate(-5deg);
}
100% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
}
@-o-keyframes swing {
20%, 40%, 60%, 80%, 100% {
-webkit-transform-origin: top center 50%;
-moz-transform-origin: top center 50%;
-ms-transform-origin: top center 50%;
-o-transform-origin: top center 50%;
transform-origin: top center 50%;
}
20% {
-webkit-transform: rotate(15deg);
-moz-transform: rotate(15deg);
-ms-transform: rotate(15deg);
-o-transform: rotate(15deg);
transform: rotate(15deg);
}
40% {
-webkit-transform: rotate(-10deg);
-moz-transform: rotate(-10deg);
-ms-transform: rotate(-10deg);
-o-transform: rotate(-10deg);
transform: rotate(-10deg);
}
60% {
-webkit-transform: rotate(5deg);
-moz-transform: rotate(5deg);
-ms-transform: rotate(5deg);
-o-transform: rotate(5deg);
transform: rotate(5deg);
}
80% {
-webkit-transform: rotate(-5deg);
-moz-transform: rotate(-5deg);
-ms-transform: rotate(-5deg);
-o-transform: rotate(-5deg);
transform: rotate(-5deg);
}
100% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
}
@-ms-keyframes swing {
20%, 40%, 60%, 80%, 100% {
-webkit-transform-origin: top center 50%;
-moz-transform-origin: top center 50%;
-ms-transform-origin: top center 50%;
-o-transform-origin: top center 50%;
transform-origin: top center 50%;
}
20% {
-webkit-transform: rotate(15deg);
-moz-transform: rotate(15deg);
-ms-transform: rotate(15deg);
-o-transform: rotate(15deg);
transform: rotate(15deg);
}
40% {
-webkit-transform: rotate(-10deg);
-moz-transform: rotate(-10deg);
-ms-transform: rotate(-10deg);
-o-transform: rotate(-10deg);
transform: rotate(-10deg);
}
60% {
-webkit-transform: rotate(5deg);
-moz-transform: rotate(5deg);
-ms-transform: rotate(5deg);
-o-transform: rotate(5deg);
transform: rotate(5deg);
}
80% {
-webkit-transform: rotate(-5deg);
-moz-transform: rotate(-5deg);
-ms-transform: rotate(-5deg);
-o-transform: rotate(-5deg);
transform: rotate(-5deg);
}
100% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
}
@keyframes swing {
20%, 40%, 60%, 80%, 100% {
-webkit-transform-origin: top center 50%;
-moz-transform-origin: top center 50%;
-ms-transform-origin: top center 50%;
-o-transform-origin: top center 50%;
transform-origin: top center 50%;
}
20% {
-webkit-transform: rotate(15deg);
-moz-transform: rotate(15deg);
-ms-transform: rotate(15deg);
-o-transform: rotate(15deg);
transform: rotate(15deg);
}
40% {
-webkit-transform: rotate(-10deg);
-moz-transform: rotate(-10deg);
-ms-transform: rotate(-10deg);
-o-transform: rotate(-10deg);
transform: rotate(-10deg);
}
60% {
-webkit-transform: rotate(5deg);
-moz-transform: rotate(5deg);
-ms-transform: rotate(5deg);
-o-transform: rotate(5deg);
transform: rotate(5deg);
}
80% {
-webkit-transform: rotate(-5deg);
-moz-transform: rotate(-5deg);
-ms-transform: rotate(-5deg);
-o-transform: rotate(-5deg);
transform: rotate(-5deg);
}
100% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
}
@-moz-keyframes wobble {
0% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
15% {
-webkit-transform: translateX(-25%) rotate(-5deg);
-moz-transform: translateX(-25%) rotate(-5deg);
-ms-transform: translateX(-25%) rotate(-5deg);
-o-transform: translateX(-25%) rotate(-5deg);
transform: translateX(-25%) rotate(-5deg);
}
30% {
-webkit-transform: translateX(20%) rotate(3deg);
-moz-transform: translateX(20%) rotate(3deg);
-ms-transform: translateX(20%) rotate(3deg);
-o-transform: translateX(20%) rotate(3deg);
transform: translateX(20%) rotate(3deg);
}
45% {
-webkit-transform: translateX(-15%) rotate(-3deg);
-moz-transform: translateX(-15%) rotate(-3deg);
-ms-transform: translateX(-15%) rotate(-3deg);
-o-transform: translateX(-15%) rotate(-3deg);
transform: translateX(-15%) rotate(-3deg);
}
60% {
-webkit-transform: translateX(10%) rotate(2deg);
-moz-transform: translateX(10%) rotate(2deg);
-ms-transform: translateX(10%) rotate(2deg);
-o-transform: translateX(10%) rotate(2deg);
transform: translateX(10%) rotate(2deg);
}
75% {
-webkit-transform: translateX(-5%) rotate(-1deg);
-moz-transform: translateX(-5%) rotate(-1deg);
-ms-transform: translateX(-5%) rotate(-1deg);
-o-transform: translateX(-5%) rotate(-1deg);
transform: translateX(-5%) rotate(-1deg);
}
100% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
}
@-webkit-keyframes wobble {
0% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
15% {
-webkit-transform: translateX(-25%) rotate(-5deg);
-moz-transform: translateX(-25%) rotate(-5deg);
-ms-transform: translateX(-25%) rotate(-5deg);
-o-transform: translateX(-25%) rotate(-5deg);
transform: translateX(-25%) rotate(-5deg);
}
30% {
-webkit-transform: translateX(20%) rotate(3deg);
-moz-transform: translateX(20%) rotate(3deg);
-ms-transform: translateX(20%) rotate(3deg);
-o-transform: translateX(20%) rotate(3deg);
transform: translateX(20%) rotate(3deg);
}
45% {
-webkit-transform: translateX(-15%) rotate(-3deg);
-moz-transform: translateX(-15%) rotate(-3deg);
-ms-transform: translateX(-15%) rotate(-3deg);
-o-transform: translateX(-15%) rotate(-3deg);
transform: translateX(-15%) rotate(-3deg);
}
60% {
-webkit-transform: translateX(10%) rotate(2deg);
-moz-transform: translateX(10%) rotate(2deg);
-ms-transform: translateX(10%) rotate(2deg);
-o-transform: translateX(10%) rotate(2deg);
transform: translateX(10%) rotate(2deg);
}
75% {
-webkit-transform: translateX(-5%) rotate(-1deg);
-moz-transform: translateX(-5%) rotate(-1deg);
-ms-transform: translateX(-5%) rotate(-1deg);
-o-transform: translateX(-5%) rotate(-1deg);
transform: translateX(-5%) rotate(-1deg);
}
100% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
}
@-o-keyframes wobble {
0% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
15% {
-webkit-transform: translateX(-25%) rotate(-5deg);
-moz-transform: translateX(-25%) rotate(-5deg);
-ms-transform: translateX(-25%) rotate(-5deg);
-o-transform: translateX(-25%) rotate(-5deg);
transform: translateX(-25%) rotate(-5deg);
}
30% {
-webkit-transform: translateX(20%) rotate(3deg);
-moz-transform: translateX(20%) rotate(3deg);
-ms-transform: translateX(20%) rotate(3deg);
-o-transform: translateX(20%) rotate(3deg);
transform: translateX(20%) rotate(3deg);
}
45% {
-webkit-transform: translateX(-15%) rotate(-3deg);
-moz-transform: translateX(-15%) rotate(-3deg);
-ms-transform: translateX(-15%) rotate(-3deg);
-o-transform: translateX(-15%) rotate(-3deg);
transform: translateX(-15%) rotate(-3deg);
}
60% {
-webkit-transform: translateX(10%) rotate(2deg);
-moz-transform: translateX(10%) rotate(2deg);
-ms-transform: translateX(10%) rotate(2deg);
-o-transform: translateX(10%) rotate(2deg);
transform: translateX(10%) rotate(2deg);
}
75% {
-webkit-transform: translateX(-5%) rotate(-1deg);
-moz-transform: translateX(-5%) rotate(-1deg);
-ms-transform: translateX(-5%) rotate(-1deg);
-o-transform: translateX(-5%) rotate(-1deg);
transform: translateX(-5%) rotate(-1deg);
}
100% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
}
@-ms-keyframes wobble {
0% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
15% {
-webkit-transform: translateX(-25%) rotate(-5deg);
-moz-transform: translateX(-25%) rotate(-5deg);
-ms-transform: translateX(-25%) rotate(-5deg);
-o-transform: translateX(-25%) rotate(-5deg);
transform: translateX(-25%) rotate(-5deg);
}
30% {
-webkit-transform: translateX(20%) rotate(3deg);
-moz-transform: translateX(20%) rotate(3deg);
-ms-transform: translateX(20%) rotate(3deg);
-o-transform: translateX(20%) rotate(3deg);
transform: translateX(20%) rotate(3deg);
}
45% {
-webkit-transform: translateX(-15%) rotate(-3deg);
-moz-transform: translateX(-15%) rotate(-3deg);
-ms-transform: translateX(-15%) rotate(-3deg);
-o-transform: translateX(-15%) rotate(-3deg);
transform: translateX(-15%) rotate(-3deg);
}
60% {
-webkit-transform: translateX(10%) rotate(2deg);
-moz-transform: translateX(10%) rotate(2deg);
-ms-transform: translateX(10%) rotate(2deg);
-o-transform: translateX(10%) rotate(2deg);
transform: translateX(10%) rotate(2deg);
}
75% {
-webkit-transform: translateX(-5%) rotate(-1deg);
-moz-transform: translateX(-5%) rotate(-1deg);
-ms-transform: translateX(-5%) rotate(-1deg);
-o-transform: translateX(-5%) rotate(-1deg);
transform: translateX(-5%) rotate(-1deg);
}
100% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
}
@keyframes wobble {
0% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
15% {
-webkit-transform: translateX(-25%) rotate(-5deg);
-moz-transform: translateX(-25%) rotate(-5deg);
-ms-transform: translateX(-25%) rotate(-5deg);
-o-transform: translateX(-25%) rotate(-5deg);
transform: translateX(-25%) rotate(-5deg);
}
30% {
-webkit-transform: translateX(20%) rotate(3deg);
-moz-transform: translateX(20%) rotate(3deg);
-ms-transform: translateX(20%) rotate(3deg);
-o-transform: translateX(20%) rotate(3deg);
transform: translateX(20%) rotate(3deg);
}
45% {
-webkit-transform: translateX(-15%) rotate(-3deg);
-moz-transform: translateX(-15%) rotate(-3deg);
-ms-transform: translateX(-15%) rotate(-3deg);
-o-transform: translateX(-15%) rotate(-3deg);
transform: translateX(-15%) rotate(-3deg);
}
60% {
-webkit-transform: translateX(10%) rotate(2deg);
-moz-transform: translateX(10%) rotate(2deg);
-ms-transform: translateX(10%) rotate(2deg);
-o-transform: translateX(10%) rotate(2deg);
transform: translateX(10%) rotate(2deg);
}
75% {
-webkit-transform: translateX(-5%) rotate(-1deg);
-moz-transform: translateX(-5%) rotate(-1deg);
-ms-transform: translateX(-5%) rotate(-1deg);
-o-transform: translateX(-5%) rotate(-1deg);
transform: translateX(-5%) rotate(-1deg);
}
100% {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
}
@-moz-keyframes pulse {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
50% {
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@-webkit-keyframes pulse {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
50% {
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@-o-keyframes pulse {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
50% {
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@-ms-keyframes pulse {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
50% {
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@keyframes pulse {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
50% {
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@-moz-keyframes wiggle {
0% {
-webkit-transform: skewX(9deg);
-moz-transform: skewX(9deg);
-ms-transform: skewX(9deg);
-o-transform: skewX(9deg);
transform: skewX(9deg);
}
10% {
-webkit-transform: skewX(-8deg);
-moz-transform: skewX(-8deg);
-ms-transform: skewX(-8deg);
-o-transform: skewX(-8deg);
transform: skewX(-8deg);
}
20% {
-webkit-transform: skewX(7deg);
-moz-transform: skewX(7deg);
-ms-transform: skewX(7deg);
-o-transform: skewX(7deg);
transform: skewX(7deg);
}
30% {
-webkit-transform: skewX(-6deg);
-moz-transform: skewX(-6deg);
-ms-transform: skewX(-6deg);
-o-transform: skewX(-6deg);
transform: skewX(-6deg);
}
40% {
-webkit-transform: skewX(5deg);
-moz-transform: skewX(5deg);
-ms-transform: skewX(5deg);
-o-transform: skewX(5deg);
transform: skewX(5deg);
}
50% {
-webkit-transform: skewX(-4deg);
-moz-transform: skewX(-4deg);
-ms-transform: skewX(-4deg);
-o-transform: skewX(-4deg);
transform: skewX(-4deg);
}
60% {
-webkit-transform: skewX(3deg);
-moz-transform: skewX(3deg);
-ms-transform: skewX(3deg);
-o-transform: skewX(3deg);
transform: skewX(3deg);
}
70% {
-webkit-transform: skewX(-2deg);
-moz-transform: skewX(-2deg);
-ms-transform: skewX(-2deg);
-o-transform: skewX(-2deg);
transform: skewX(-2deg);
}
80% {
-webkit-transform: skewX(1deg);
-moz-transform: skewX(1deg);
-ms-transform: skewX(1deg);
-o-transform: skewX(1deg);
transform: skewX(1deg);
}
90% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
100% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
}
@-webkit-keyframes wiggle {
0% {
-webkit-transform: skewX(9deg);
-moz-transform: skewX(9deg);
-ms-transform: skewX(9deg);
-o-transform: skewX(9deg);
transform: skewX(9deg);
}
10% {
-webkit-transform: skewX(-8deg);
-moz-transform: skewX(-8deg);
-ms-transform: skewX(-8deg);
-o-transform: skewX(-8deg);
transform: skewX(-8deg);
}
20% {
-webkit-transform: skewX(7deg);
-moz-transform: skewX(7deg);
-ms-transform: skewX(7deg);
-o-transform: skewX(7deg);
transform: skewX(7deg);
}
30% {
-webkit-transform: skewX(-6deg);
-moz-transform: skewX(-6deg);
-ms-transform: skewX(-6deg);
-o-transform: skewX(-6deg);
transform: skewX(-6deg);
}
40% {
-webkit-transform: skewX(5deg);
-moz-transform: skewX(5deg);
-ms-transform: skewX(5deg);
-o-transform: skewX(5deg);
transform: skewX(5deg);
}
50% {
-webkit-transform: skewX(-4deg);
-moz-transform: skewX(-4deg);
-ms-transform: skewX(-4deg);
-o-transform: skewX(-4deg);
transform: skewX(-4deg);
}
60% {
-webkit-transform: skewX(3deg);
-moz-transform: skewX(3deg);
-ms-transform: skewX(3deg);
-o-transform: skewX(3deg);
transform: skewX(3deg);
}
70% {
-webkit-transform: skewX(-2deg);
-moz-transform: skewX(-2deg);
-ms-transform: skewX(-2deg);
-o-transform: skewX(-2deg);
transform: skewX(-2deg);
}
80% {
-webkit-transform: skewX(1deg);
-moz-transform: skewX(1deg);
-ms-transform: skewX(1deg);
-o-transform: skewX(1deg);
transform: skewX(1deg);
}
90% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
100% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
}
@-o-keyframes wiggle {
0% {
-webkit-transform: skewX(9deg);
-moz-transform: skewX(9deg);
-ms-transform: skewX(9deg);
-o-transform: skewX(9deg);
transform: skewX(9deg);
}
10% {
-webkit-transform: skewX(-8deg);
-moz-transform: skewX(-8deg);
-ms-transform: skewX(-8deg);
-o-transform: skewX(-8deg);
transform: skewX(-8deg);
}
20% {
-webkit-transform: skewX(7deg);
-moz-transform: skewX(7deg);
-ms-transform: skewX(7deg);
-o-transform: skewX(7deg);
transform: skewX(7deg);
}
30% {
-webkit-transform: skewX(-6deg);
-moz-transform: skewX(-6deg);
-ms-transform: skewX(-6deg);
-o-transform: skewX(-6deg);
transform: skewX(-6deg);
}
40% {
-webkit-transform: skewX(5deg);
-moz-transform: skewX(5deg);
-ms-transform: skewX(5deg);
-o-transform: skewX(5deg);
transform: skewX(5deg);
}
50% {
-webkit-transform: skewX(-4deg);
-moz-transform: skewX(-4deg);
-ms-transform: skewX(-4deg);
-o-transform: skewX(-4deg);
transform: skewX(-4deg);
}
60% {
-webkit-transform: skewX(3deg);
-moz-transform: skewX(3deg);
-ms-transform: skewX(3deg);
-o-transform: skewX(3deg);
transform: skewX(3deg);
}
70% {
-webkit-transform: skewX(-2deg);
-moz-transform: skewX(-2deg);
-ms-transform: skewX(-2deg);
-o-transform: skewX(-2deg);
transform: skewX(-2deg);
}
80% {
-webkit-transform: skewX(1deg);
-moz-transform: skewX(1deg);
-ms-transform: skewX(1deg);
-o-transform: skewX(1deg);
transform: skewX(1deg);
}
90% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
100% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
}
@-ms-keyframes wiggle {
0% {
-webkit-transform: skewX(9deg);
-moz-transform: skewX(9deg);
-ms-transform: skewX(9deg);
-o-transform: skewX(9deg);
transform: skewX(9deg);
}
10% {
-webkit-transform: skewX(-8deg);
-moz-transform: skewX(-8deg);
-ms-transform: skewX(-8deg);
-o-transform: skewX(-8deg);
transform: skewX(-8deg);
}
20% {
-webkit-transform: skewX(7deg);
-moz-transform: skewX(7deg);
-ms-transform: skewX(7deg);
-o-transform: skewX(7deg);
transform: skewX(7deg);
}
30% {
-webkit-transform: skewX(-6deg);
-moz-transform: skewX(-6deg);
-ms-transform: skewX(-6deg);
-o-transform: skewX(-6deg);
transform: skewX(-6deg);
}
40% {
-webkit-transform: skewX(5deg);
-moz-transform: skewX(5deg);
-ms-transform: skewX(5deg);
-o-transform: skewX(5deg);
transform: skewX(5deg);
}
50% {
-webkit-transform: skewX(-4deg);
-moz-transform: skewX(-4deg);
-ms-transform: skewX(-4deg);
-o-transform: skewX(-4deg);
transform: skewX(-4deg);
}
60% {
-webkit-transform: skewX(3deg);
-moz-transform: skewX(3deg);
-ms-transform: skewX(3deg);
-o-transform: skewX(3deg);
transform: skewX(3deg);
}
70% {
-webkit-transform: skewX(-2deg);
-moz-transform: skewX(-2deg);
-ms-transform: skewX(-2deg);
-o-transform: skewX(-2deg);
transform: skewX(-2deg);
}
80% {
-webkit-transform: skewX(1deg);
-moz-transform: skewX(1deg);
-ms-transform: skewX(1deg);
-o-transform: skewX(1deg);
transform: skewX(1deg);
}
90% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
100% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
}
@keyframes wiggle {
0% {
-webkit-transform: skewX(9deg);
-moz-transform: skewX(9deg);
-ms-transform: skewX(9deg);
-o-transform: skewX(9deg);
transform: skewX(9deg);
}
10% {
-webkit-transform: skewX(-8deg);
-moz-transform: skewX(-8deg);
-ms-transform: skewX(-8deg);
-o-transform: skewX(-8deg);
transform: skewX(-8deg);
}
20% {
-webkit-transform: skewX(7deg);
-moz-transform: skewX(7deg);
-ms-transform: skewX(7deg);
-o-transform: skewX(7deg);
transform: skewX(7deg);
}
30% {
-webkit-transform: skewX(-6deg);
-moz-transform: skewX(-6deg);
-ms-transform: skewX(-6deg);
-o-transform: skewX(-6deg);
transform: skewX(-6deg);
}
40% {
-webkit-transform: skewX(5deg);
-moz-transform: skewX(5deg);
-ms-transform: skewX(5deg);
-o-transform: skewX(5deg);
transform: skewX(5deg);
}
50% {
-webkit-transform: skewX(-4deg);
-moz-transform: skewX(-4deg);
-ms-transform: skewX(-4deg);
-o-transform: skewX(-4deg);
transform: skewX(-4deg);
}
60% {
-webkit-transform: skewX(3deg);
-moz-transform: skewX(3deg);
-ms-transform: skewX(3deg);
-o-transform: skewX(3deg);
transform: skewX(3deg);
}
70% {
-webkit-transform: skewX(-2deg);
-moz-transform: skewX(-2deg);
-ms-transform: skewX(-2deg);
-o-transform: skewX(-2deg);
transform: skewX(-2deg);
}
80% {
-webkit-transform: skewX(1deg);
-moz-transform: skewX(1deg);
-ms-transform: skewX(1deg);
-o-transform: skewX(1deg);
transform: skewX(1deg);
}
90% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
100% {
-webkit-transform: skewX(0deg);
-moz-transform: skewX(0deg);
-ms-transform: skewX(0deg);
-o-transform: skewX(0deg);
transform: skewX(0deg);
}
}
@-moz-keyframes bounceOut {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
25% {
-webkit-transform: scale(0.95, 0.95);
-moz-transform: scale(0.95, 0.95);
-ms-transform: scale(0.95, 0.95);
-o-transform: scale(0.95, 0.95);
transform: scale(0.95, 0.95);
}
50% {
opacity: 1;
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
}
@-webkit-keyframes bounceOut {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
25% {
-webkit-transform: scale(0.95, 0.95);
-moz-transform: scale(0.95, 0.95);
-ms-transform: scale(0.95, 0.95);
-o-transform: scale(0.95, 0.95);
transform: scale(0.95, 0.95);
}
50% {
opacity: 1;
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
}
@-o-keyframes bounceOut {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
25% {
-webkit-transform: scale(0.95, 0.95);
-moz-transform: scale(0.95, 0.95);
-ms-transform: scale(0.95, 0.95);
-o-transform: scale(0.95, 0.95);
transform: scale(0.95, 0.95);
}
50% {
opacity: 1;
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
}
@-ms-keyframes bounceOut {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
25% {
-webkit-transform: scale(0.95, 0.95);
-moz-transform: scale(0.95, 0.95);
-ms-transform: scale(0.95, 0.95);
-o-transform: scale(0.95, 0.95);
transform: scale(0.95, 0.95);
}
50% {
opacity: 1;
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
}
@keyframes bounceOut {
0% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
25% {
-webkit-transform: scale(0.95, 0.95);
-moz-transform: scale(0.95, 0.95);
-ms-transform: scale(0.95, 0.95);
-o-transform: scale(0.95, 0.95);
transform: scale(0.95, 0.95);
}
50% {
opacity: 1;
-webkit-transform: scale(1.1, 1.1);
-moz-transform: scale(1.1, 1.1);
-ms-transform: scale(1.1, 1.1);
-o-transform: scale(1.1, 1.1);
transform: scale(1.1, 1.1);
}
100% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
}
@-moz-keyframes bounceOutUp {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(20px);
-moz-transform: translateY(20px);
-ms-transform: translateY(20px);
-o-transform: translateY(20px);
transform: translateY(20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
}
@-webkit-keyframes bounceOutUp {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(20px);
-moz-transform: translateY(20px);
-ms-transform: translateY(20px);
-o-transform: translateY(20px);
transform: translateY(20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
}
@-o-keyframes bounceOutUp {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(20px);
-moz-transform: translateY(20px);
-ms-transform: translateY(20px);
-o-transform: translateY(20px);
transform: translateY(20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
}
@-ms-keyframes bounceOutUp {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(20px);
-moz-transform: translateY(20px);
-ms-transform: translateY(20px);
-o-transform: translateY(20px);
transform: translateY(20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
}
@keyframes bounceOutUp {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(20px);
-moz-transform: translateY(20px);
-ms-transform: translateY(20px);
-o-transform: translateY(20px);
transform: translateY(20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
}
@-moz-keyframes bounceOutDown {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(-20px);
-moz-transform: translateY(-20px);
-ms-transform: translateY(-20px);
-o-transform: translateY(-20px);
transform: translateY(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
}
@-webkit-keyframes bounceOutDown {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(-20px);
-moz-transform: translateY(-20px);
-ms-transform: translateY(-20px);
-o-transform: translateY(-20px);
transform: translateY(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
}
@-o-keyframes bounceOutDown {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(-20px);
-moz-transform: translateY(-20px);
-ms-transform: translateY(-20px);
-o-transform: translateY(-20px);
transform: translateY(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
}
@-ms-keyframes bounceOutDown {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(-20px);
-moz-transform: translateY(-20px);
-ms-transform: translateY(-20px);
-o-transform: translateY(-20px);
transform: translateY(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
}
@keyframes bounceOutDown {
0% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
20% {
opacity: 1;
-webkit-transform: translateY(-20px);
-moz-transform: translateY(-20px);
-ms-transform: translateY(-20px);
-o-transform: translateY(-20px);
transform: translateY(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
}
@-moz-keyframes bounceOutLeft {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(20px);
-moz-transform: translateX(20px);
-ms-transform: translateX(20px);
-o-transform: translateX(20px);
transform: translateX(20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(-2000px);
-moz-transform: translateX(-2000px);
-ms-transform: translateX(-2000px);
-o-transform: translateX(-2000px);
transform: translateX(-2000px);
}
}
@-webkit-keyframes bounceOutLeft {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(20px);
-moz-transform: translateX(20px);
-ms-transform: translateX(20px);
-o-transform: translateX(20px);
transform: translateX(20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(-2000px);
-moz-transform: translateX(-2000px);
-ms-transform: translateX(-2000px);
-o-transform: translateX(-2000px);
transform: translateX(-2000px);
}
}
@-o-keyframes bounceOutLeft {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(20px);
-moz-transform: translateX(20px);
-ms-transform: translateX(20px);
-o-transform: translateX(20px);
transform: translateX(20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(-2000px);
-moz-transform: translateX(-2000px);
-ms-transform: translateX(-2000px);
-o-transform: translateX(-2000px);
transform: translateX(-2000px);
}
}
@-ms-keyframes bounceOutLeft {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(20px);
-moz-transform: translateX(20px);
-ms-transform: translateX(20px);
-o-transform: translateX(20px);
transform: translateX(20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(-2000px);
-moz-transform: translateX(-2000px);
-ms-transform: translateX(-2000px);
-o-transform: translateX(-2000px);
transform: translateX(-2000px);
}
}
@keyframes bounceOutLeft {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(20px);
-moz-transform: translateX(20px);
-ms-transform: translateX(20px);
-o-transform: translateX(20px);
transform: translateX(20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(-2000px);
-moz-transform: translateX(-2000px);
-ms-transform: translateX(-2000px);
-o-transform: translateX(-2000px);
transform: translateX(-2000px);
}
}
@-moz-keyframes bounceOutRight {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(-20px);
-moz-transform: translateX(-20px);
-ms-transform: translateX(-20px);
-o-transform: translateX(-20px);
transform: translateX(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(2000px);
-moz-transform: translateX(2000px);
-ms-transform: translateX(2000px);
-o-transform: translateX(2000px);
transform: translateX(2000px);
}
}
@-webkit-keyframes bounceOutRight {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(-20px);
-moz-transform: translateX(-20px);
-ms-transform: translateX(-20px);
-o-transform: translateX(-20px);
transform: translateX(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(2000px);
-moz-transform: translateX(2000px);
-ms-transform: translateX(2000px);
-o-transform: translateX(2000px);
transform: translateX(2000px);
}
}
@-o-keyframes bounceOutRight {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(-20px);
-moz-transform: translateX(-20px);
-ms-transform: translateX(-20px);
-o-transform: translateX(-20px);
transform: translateX(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(2000px);
-moz-transform: translateX(2000px);
-ms-transform: translateX(2000px);
-o-transform: translateX(2000px);
transform: translateX(2000px);
}
}
@-ms-keyframes bounceOutRight {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(-20px);
-moz-transform: translateX(-20px);
-ms-transform: translateX(-20px);
-o-transform: translateX(-20px);
transform: translateX(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(2000px);
-moz-transform: translateX(2000px);
-ms-transform: translateX(2000px);
-o-transform: translateX(2000px);
transform: translateX(2000px);
}
}
@keyframes bounceOutRight {
0% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
20% {
opacity: 1;
-webkit-transform: translateX(-20px);
-moz-transform: translateX(-20px);
-ms-transform: translateX(-20px);
-o-transform: translateX(-20px);
transform: translateX(-20px);
}
100% {
opacity: 0;
-webkit-transform: translateX(2000px);
-moz-transform: translateX(2000px);
-ms-transform: translateX(2000px);
-o-transform: translateX(2000px);
transform: translateX(2000px);
}
}
@-moz-keyframes bounceIn {
0% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
50% {
opacity: 1;
-webkit-transform: scale(1.05, 1.05);
-moz-transform: scale(1.05, 1.05);
-ms-transform: scale(1.05, 1.05);
-o-transform: scale(1.05, 1.05);
transform: scale(1.05, 1.05);
}
70% {
-webkit-transform: scale(0.9, 0.9);
-moz-transform: scale(0.9, 0.9);
-ms-transform: scale(0.9, 0.9);
-o-transform: scale(0.9, 0.9);
transform: scale(0.9, 0.9);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@-webkit-keyframes bounceIn {
0% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
50% {
opacity: 1;
-webkit-transform: scale(1.05, 1.05);
-moz-transform: scale(1.05, 1.05);
-ms-transform: scale(1.05, 1.05);
-o-transform: scale(1.05, 1.05);
transform: scale(1.05, 1.05);
}
70% {
-webkit-transform: scale(0.9, 0.9);
-moz-transform: scale(0.9, 0.9);
-ms-transform: scale(0.9, 0.9);
-o-transform: scale(0.9, 0.9);
transform: scale(0.9, 0.9);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@-o-keyframes bounceIn {
0% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
50% {
opacity: 1;
-webkit-transform: scale(1.05, 1.05);
-moz-transform: scale(1.05, 1.05);
-ms-transform: scale(1.05, 1.05);
-o-transform: scale(1.05, 1.05);
transform: scale(1.05, 1.05);
}
70% {
-webkit-transform: scale(0.9, 0.9);
-moz-transform: scale(0.9, 0.9);
-ms-transform: scale(0.9, 0.9);
-o-transform: scale(0.9, 0.9);
transform: scale(0.9, 0.9);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@-ms-keyframes bounceIn {
0% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
50% {
opacity: 1;
-webkit-transform: scale(1.05, 1.05);
-moz-transform: scale(1.05, 1.05);
-ms-transform: scale(1.05, 1.05);
-o-transform: scale(1.05, 1.05);
transform: scale(1.05, 1.05);
}
70% {
-webkit-transform: scale(0.9, 0.9);
-moz-transform: scale(0.9, 0.9);
-ms-transform: scale(0.9, 0.9);
-o-transform: scale(0.9, 0.9);
transform: scale(0.9, 0.9);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@keyframes bounceIn {
0% {
opacity: 0;
-webkit-transform: scale(0.3, 0.3);
-moz-transform: scale(0.3, 0.3);
-ms-transform: scale(0.3, 0.3);
-o-transform: scale(0.3, 0.3);
transform: scale(0.3, 0.3);
}
50% {
opacity: 1;
-webkit-transform: scale(1.05, 1.05);
-moz-transform: scale(1.05, 1.05);
-ms-transform: scale(1.05, 1.05);
-o-transform: scale(1.05, 1.05);
transform: scale(1.05, 1.05);
}
70% {
-webkit-transform: scale(0.9, 0.9);
-moz-transform: scale(0.9, 0.9);
-ms-transform: scale(0.9, 0.9);
-o-transform: scale(0.9, 0.9);
transform: scale(0.9, 0.9);
}
100% {
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
}
@-moz-keyframes bounceInDown {
0% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(30px);
-moz-transform: translateY(30px);
-ms-transform: translateY(30px);
-o-transform: translateY(30px);
transform: translateY(30px);
}
80% {
-webkit-transform: translateY(-10px);
-moz-transform: translateY(-10px);
-ms-transform: translateY(-10px);
-o-transform: translateY(-10px);
transform: translateY(-10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-webkit-keyframes bounceInDown {
0% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(30px);
-moz-transform: translateY(30px);
-ms-transform: translateY(30px);
-o-transform: translateY(30px);
transform: translateY(30px);
}
80% {
-webkit-transform: translateY(-10px);
-moz-transform: translateY(-10px);
-ms-transform: translateY(-10px);
-o-transform: translateY(-10px);
transform: translateY(-10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-o-keyframes bounceInDown {
0% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(30px);
-moz-transform: translateY(30px);
-ms-transform: translateY(30px);
-o-transform: translateY(30px);
transform: translateY(30px);
}
80% {
-webkit-transform: translateY(-10px);
-moz-transform: translateY(-10px);
-ms-transform: translateY(-10px);
-o-transform: translateY(-10px);
transform: translateY(-10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-ms-keyframes bounceInDown {
0% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(30px);
-moz-transform: translateY(30px);
-ms-transform: translateY(30px);
-o-transform: translateY(30px);
transform: translateY(30px);
}
80% {
-webkit-transform: translateY(-10px);
-moz-transform: translateY(-10px);
-ms-transform: translateY(-10px);
-o-transform: translateY(-10px);
transform: translateY(-10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@keyframes bounceInDown {
0% {
opacity: 0;
-webkit-transform: translateY(-2000px);
-moz-transform: translateY(-2000px);
-ms-transform: translateY(-2000px);
-o-transform: translateY(-2000px);
transform: translateY(-2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(30px);
-moz-transform: translateY(30px);
-ms-transform: translateY(30px);
-o-transform: translateY(30px);
transform: translateY(30px);
}
80% {
-webkit-transform: translateY(-10px);
-moz-transform: translateY(-10px);
-ms-transform: translateY(-10px);
-o-transform: translateY(-10px);
transform: translateY(-10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-moz-keyframes bounceInUp {
0% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
80% {
-webkit-transform: translateY(10px);
-moz-transform: translateY(10px);
-ms-transform: translateY(10px);
-o-transform: translateY(10px);
transform: translateY(10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-webkit-keyframes bounceInUp {
0% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
80% {
-webkit-transform: translateY(10px);
-moz-transform: translateY(10px);
-ms-transform: translateY(10px);
-o-transform: translateY(10px);
transform: translateY(10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-o-keyframes bounceInUp {
0% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
80% {
-webkit-transform: translateY(10px);
-moz-transform: translateY(10px);
-ms-transform: translateY(10px);
-o-transform: translateY(10px);
transform: translateY(10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-ms-keyframes bounceInUp {
0% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
80% {
-webkit-transform: translateY(10px);
-moz-transform: translateY(10px);
-ms-transform: translateY(10px);
-o-transform: translateY(10px);
transform: translateY(10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@keyframes bounceInUp {
0% {
opacity: 0;
-webkit-transform: translateY(2000px);
-moz-transform: translateY(2000px);
-ms-transform: translateY(2000px);
-o-transform: translateY(2000px);
transform: translateY(2000px);
}
60% {
opacity: 1;
-webkit-transform: translateY(-30px);
-moz-transform: translateY(-30px);
-ms-transform: translateY(-30px);
-o-transform: translateY(-30px);
transform: translateY(-30px);
}
80% {
-webkit-transform: translateY(10px);
-moz-transform: translateY(10px);
-ms-transform: translateY(10px);
-o-transform: translateY(10px);
transform: translateY(10px);
}
100% {
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
}
}
@-moz-keyframes bounceInRight {
0% {
opacity: 0;
-webkit-transform: translateX(2000px);
-moz-transform: translateX(2000px);
-ms-transform: translateX(2000px);
-o-transform: translateX(2000px);
transform: translateX(2000px);
}
60% {
opacity: 1;
-webkit-transform: translateX(-30px);
-moz-transform: translateX(-30px);
-ms-transform: translateX(-30px);
-o-transform: translateX(-30px);
transform: translateX(-30px);
}
80% {
-webkit-transform: translateX(10px);
-moz-transform: translateX(10px);
-ms-transform: translateX(10px);
-o-transform: translateX(10px);
transform: translateX(10px);
}
100% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}
@-webkit-keyframes bounceInRight {
0% {
opacity: 0;
-webkit-transform: translateX(2000px);
-moz-transform: translateX(2000px);
-ms-transform: translateX(2000px);
-o-transform: translateX(2000px);
transform: translateX(2000px);
}
60% {
opacity: 1;
-webkit-transform: translateX(-30px);
-moz-transform: translateX(-30px);
-ms-transform: translateX(-30px);
-o-transform: translat
gitextract_oflpl47l/
├── .gitignore
├── .phpunit.result.cache
├── .travis.yml
├── LICENSE
├── README.md
├── composer.json
├── phpunit.xml.dist
├── src/
│ ├── Config/
│ │ ├── laravel_user_management.php
│ │ └── permission.php
│ ├── Console/
│ │ └── .gitkeep
│ ├── Contracts/
│ │ └── UserManagementContracts.php
│ ├── Database/
│ │ ├── Migrations/
│ │ │ ├── .gitkeep
│ │ │ ├── 2019_01_01_111111_create_users_table.php
│ │ │ ├── 2019_01_01_222222_create_departments_table.php
│ │ │ ├── 2019_01_01_333333_create_user_department_users_table.php
│ │ │ ├── 2019_01_01_444444_create_permission_tables.php
│ │ │ ├── 2019_02_02_555555_create_soft-delete_users_table.php
│ │ │ └── 2019_10_17_110654_create_password_reset_table.php
│ │ └── Seeders/
│ │ ├── .gitkeep
│ │ ├── Department/
│ │ │ ├── DepartmentTableSeeder.php
│ │ │ └── MasterDepartmentTableSeeder.php
│ │ ├── Permission/
│ │ │ ├── MasterPermissionTableSeeder.php
│ │ │ └── PermissionTableSeeder.php
│ │ ├── Role/
│ │ │ ├── MasterRoleTableSeeder.php
│ │ │ └── RoleTableSeeder.php
│ │ └── UserManagementDatabaseSeeder.php
│ ├── Entities/
│ │ ├── .gitkeep
│ │ ├── Department.php
│ │ ├── Permission.php
│ │ ├── Role.php
│ │ ├── User.php
│ │ └── export/
│ │ ├── Department.php
│ │ ├── Permission.php
│ │ ├── Role.php
│ │ └── User.php
│ ├── Facade/
│ │ └── UserManagement.php
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── .gitkeep
│ │ │ ├── Admin/
│ │ │ │ ├── DepartmentsController.php
│ │ │ │ ├── PermissionsController.php
│ │ │ │ ├── RolesController.php
│ │ │ │ ├── UsersController.php
│ │ │ │ └── export/
│ │ │ │ ├── DepartmentsController.php
│ │ │ │ ├── PermissionsController.php
│ │ │ │ ├── RolesController.php
│ │ │ │ └── UsersController.php
│ │ │ └── Auth/
│ │ │ ├── AuthController.php
│ │ │ └── export/
│ │ │ └── AuthController.php
│ │ └── Requests/
│ │ ├── .gitkeep
│ │ ├── Admin/
│ │ │ ├── StoreDepartment.php
│ │ │ ├── StorePermission.php
│ │ │ ├── StoreRole.php
│ │ │ ├── StoreUser.php
│ │ │ ├── UpdateDepartment.php
│ │ │ ├── UpdatePermission.php
│ │ │ ├── UpdateRole.php
│ │ │ └── UpdateUser.php
│ │ └── Auth/
│ │ ├── UserLogin.php
│ │ └── UserRegistration.php
│ ├── LaravelUserManagementProvider.php
│ ├── Public/
│ │ └── mekaeils-package/
│ │ ├── css/
│ │ │ └── style.css
│ │ ├── js/
│ │ │ ├── dashboard.js
│ │ │ ├── misc.js
│ │ │ └── off-canvas.js
│ │ └── vendors/
│ │ ├── css/
│ │ │ └── vendor.bundle.base.css
│ │ ├── iconfonts/
│ │ │ └── mdi/
│ │ │ ├── README.md
│ │ │ ├── bower.json
│ │ │ ├── css/
│ │ │ │ └── materialdesignicons.css
│ │ │ ├── license.md
│ │ │ ├── package.json
│ │ │ ├── preview.html
│ │ │ └── scss/
│ │ │ ├── _animated.scss
│ │ │ ├── _core.scss
│ │ │ ├── _extras.scss
│ │ │ ├── _functions.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _path.scss
│ │ │ ├── _variables.scss
│ │ │ └── materialdesignicons.scss
│ │ └── js/
│ │ ├── vendor.bundle.addons.js
│ │ └── vendor.bundle.base.js
│ ├── Repository/
│ │ ├── Contracts/
│ │ │ ├── BaseRepositoryInterface.php
│ │ │ ├── DepartmentRepositoryInterface.php
│ │ │ ├── PermissionRepositoryInterface.php
│ │ │ ├── RoleRepositoryInterface.php
│ │ │ └── UserRepositoryInterface.php
│ │ └── Eloquents/
│ │ ├── BaseEloquentRepository.php
│ │ ├── DepartmentRepository.php
│ │ ├── PermissionRepository.php
│ │ ├── RoleRepository.php
│ │ └── UserRepository.php
│ ├── Resource/
│ │ ├── js/
│ │ │ └── mekaeils-package/
│ │ │ ├── assets/
│ │ │ │ ├── demo.css
│ │ │ │ └── scss/
│ │ │ │ ├── material-kit/
│ │ │ │ │ ├── _alerts.scss
│ │ │ │ │ ├── _autocomplete.scss
│ │ │ │ │ ├── _badges.scss
│ │ │ │ │ ├── _buttons.scss
│ │ │ │ │ ├── _cards.scss
│ │ │ │ │ ├── _carousel.scss
│ │ │ │ │ ├── _checkboxes.scss
│ │ │ │ │ ├── _colors.scss
│ │ │ │ │ ├── _datepicker.scss
│ │ │ │ │ ├── _dialogs.scss
│ │ │ │ │ ├── _dropdown.scss
│ │ │ │ │ ├── _example-pages.scss
│ │ │ │ │ ├── _footers.scss
│ │ │ │ │ ├── _headers.scss
│ │ │ │ │ ├── _images.scss
│ │ │ │ │ ├── _info-areas.scss
│ │ │ │ │ ├── _inputs.scss
│ │ │ │ │ ├── _layout.scss
│ │ │ │ │ ├── _misc.scss
│ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ ├── _navbars.scss
│ │ │ │ │ ├── _pagination.scss
│ │ │ │ │ ├── _pills.scss
│ │ │ │ │ ├── _popups.scss
│ │ │ │ │ ├── _progress.scss
│ │ │ │ │ ├── _radios.scss
│ │ │ │ │ ├── _responsive.scss
│ │ │ │ │ ├── _shadows.scss
│ │ │ │ │ ├── _tables.scss
│ │ │ │ │ ├── _tabs.scss
│ │ │ │ │ ├── _togglebutton.scss
│ │ │ │ │ ├── _typography.scss
│ │ │ │ │ ├── _variables.scss
│ │ │ │ │ ├── mixins/
│ │ │ │ │ │ ├── _transparency.scss
│ │ │ │ │ │ └── _vendor-prefixes.scss
│ │ │ │ │ └── plugins/
│ │ │ │ │ ├── _perfect-scrollbar.scss
│ │ │ │ │ └── _plugin-nouislider.scss
│ │ │ │ └── material-kit.scss
│ │ │ ├── layout/
│ │ │ │ ├── MainFooter.vue
│ │ │ │ ├── MainNavbar.vue
│ │ │ │ └── MobileMenu.vue
│ │ │ ├── main.js
│ │ │ ├── plugins/
│ │ │ │ ├── globalComponents.js
│ │ │ │ ├── globalDirectives.js
│ │ │ │ ├── globalMixins.js
│ │ │ │ └── material-kit.js
│ │ │ ├── router.js
│ │ │ └── views/
│ │ │ ├── App.vue
│ │ │ ├── Index.vue
│ │ │ ├── Landing.vue
│ │ │ ├── Login.vue
│ │ │ ├── Profile.vue
│ │ │ ├── Register.vue
│ │ │ └── components/
│ │ │ ├── BasicElementsSection.vue
│ │ │ ├── JavascriptComponentsSection.vue
│ │ │ ├── LaravelUserManagement.vue
│ │ │ ├── NavPillsSection.vue
│ │ │ ├── NavigationSection.vue
│ │ │ ├── NotificationsSection.vue
│ │ │ ├── SmallNavigationSection.vue
│ │ │ ├── TabsSection.vue
│ │ │ ├── TypographyImagesSection.vue
│ │ │ └── Widgets/
│ │ │ ├── Badge.vue
│ │ │ ├── Dropdown.vue
│ │ │ ├── Modal.vue
│ │ │ ├── Pagination.vue
│ │ │ ├── Parallax.vue
│ │ │ ├── Tabs.vue
│ │ │ ├── cards/
│ │ │ │ ├── LoginCard.vue
│ │ │ │ └── NavTabsCard.vue
│ │ │ └── index.js
│ │ ├── lang/
│ │ │ └── en/
│ │ │ └── trans.php
│ │ └── views/
│ │ ├── mekaeils-package/
│ │ │ ├── layouts/
│ │ │ │ ├── alert.blade.php
│ │ │ │ ├── breadcrumb.blade.php
│ │ │ │ ├── footer.blade.php
│ │ │ │ ├── header.blade.php
│ │ │ │ ├── side-nav.blade.php
│ │ │ │ └── top-nav.blade.php
│ │ │ ├── master.blade.php
│ │ │ └── vue/
│ │ │ └── master.blade.php
│ │ └── user-management/
│ │ ├── auth/
│ │ │ ├── layouts/
│ │ │ │ ├── footer.blade.php
│ │ │ │ └── header.blade.php
│ │ │ ├── login.blade.php
│ │ │ ├── master.blade.php
│ │ │ └── register.blade.php
│ │ ├── department/
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── master.blade.php
│ │ ├── permission/
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── role/
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── side-nav.blade.php
│ │ └── user/
│ │ ├── create.blade.php
│ │ ├── edit.blade.php
│ │ └── index.blade.php
│ ├── Routes/
│ │ └── user_management.php
│ ├── Tests/
│ │ └── .gitkeep
│ └── UserManagement.php
└── tests/
├── SampleTest.php
└── bootstrap.php
SYMBOL INDEX (469 symbols across 64 files)
FILE: src/Contracts/UserManagementContracts.php
type UserManagementContracts (line 5) | interface UserManagementContracts
FILE: src/Database/Migrations/2019_01_01_111111_create_users_table.php
class CreateUsersTable (line 7) | class CreateUsersTable extends Migration
method up (line 14) | public function up()
method down (line 38) | public function down()
method createTable (line 44) | private function createTable(array $data)
FILE: src/Database/Migrations/2019_01_01_222222_create_departments_table.php
class CreateDepartmentsTable (line 7) | class CreateDepartmentsTable extends Migration
method up (line 14) | public function up()
method down (line 39) | public function down()
FILE: src/Database/Migrations/2019_01_01_333333_create_user_department_users_table.php
class CreateUserDepartmentUsersTable (line 7) | class CreateUserDepartmentUsersTable extends Migration
method up (line 14) | public function up()
method down (line 44) | public function down()
FILE: src/Database/Migrations/2019_01_01_444444_create_permission_tables.php
class CreatePermissionTables (line 7) | class CreatePermissionTables extends Migration
method up (line 14) | public function up()
method down (line 103) | public function down()
FILE: src/Database/Migrations/2019_02_02_555555_create_soft-delete_users_table.php
class CreateSoftDeleteUsersTable (line 7) | class CreateSoftDeleteUsersTable extends Migration
method up (line 14) | public function up()
method down (line 33) | public function down()
FILE: src/Database/Migrations/2019_10_17_110654_create_password_reset_table.php
class CreatePasswordResetTable (line 7) | class CreatePasswordResetTable extends Migration
method up (line 14) | public function up()
method down (line 30) | public function down()
FILE: src/Database/Seeders/Department/DepartmentTableSeeder.php
class DepartmentTableSeeder (line 5) | class DepartmentTableSeeder extends MasterDepartmentTableSeeder
FILE: src/Database/Seeders/Department/MasterDepartmentTableSeeder.php
class MasterDepartmentTableSeeder (line 9) | class MasterDepartmentTableSeeder extends Seeder
method __construct (line 14) | public function __construct(DepartmentRepositoryInterface $repository)
method getDepartments (line 19) | protected function getDepartments()
method run (line 29) | public function run()
FILE: src/Database/Seeders/Permission/MasterPermissionTableSeeder.php
class MasterPermissionTableSeeder (line 10) | class MasterPermissionTableSeeder extends Seeder
method __construct (line 17) | public function __construct(
method getPermissions (line 26) | protected function getPermissions(){
method run (line 34) | public function run()
method setPermissions (line 108) | private function setPermissions(array $permission , $guard = null)
method getRolesID (line 149) | private function getRolesID(array $roles, $guard)
FILE: src/Database/Seeders/Permission/PermissionTableSeeder.php
class PermissionTableSeeder (line 5) | class PermissionTableSeeder extends MasterPermissionTableSeeder
FILE: src/Database/Seeders/Role/MasterRoleTableSeeder.php
class MasterRoleTableSeeder (line 9) | class MasterRoleTableSeeder extends Seeder
method __construct (line 14) | public function __construct(RoleRepositoryInterface $repository)
method getRoles (line 19) | protected function getRoles()
method run (line 29) | public function run()
FILE: src/Database/Seeders/Role/RoleTableSeeder.php
class RoleTableSeeder (line 4) | class RoleTableSeeder extends MasterRoleTableSeeder
FILE: src/Database/Seeders/UserManagementDatabaseSeeder.php
class UserManagementDatabaseSeeder (line 8) | class UserManagementDatabaseSeeder extends Seeder
method run (line 15) | public function run()
FILE: src/Entities/Department.php
class Department (line 7) | class Department extends Model
method __construct (line 9) | public function __construct(array $attributes = [])
method user (line 21) | public function user()
method parent (line 26) | public function parent()
method children (line 31) | public function children()
method users (line 36) | public function users()
FILE: src/Entities/Permission.php
class Permission (line 7) | class Permission extends SpatiePermission
method __construct (line 9) | public function __construct(array $attributes = [])
FILE: src/Entities/Role.php
class Role (line 7) | class Role extends SpatieRole
method __construct (line 9) | public function __construct(array $attributes = [])
FILE: src/Entities/User.php
class User (line 11) | class User extends Authenticatable
method setPasswordAttribute (line 31) | public function setPasswordAttribute($password)
method __construct (line 36) | public function __construct(array $attributes = [])
method departments (line 43) | public function departments()
FILE: src/Entities/export/Department.php
class Department (line 6) | class Department extends UserManagementDepartment
FILE: src/Entities/export/Permission.php
class Permission (line 6) | class Permission extends UserManagementPermission
FILE: src/Entities/export/Role.php
class Role (line 6) | class Role extends UserManagementRole
FILE: src/Entities/export/User.php
class User (line 6) | class User extends UserManagement
FILE: src/Facade/UserManagement.php
class UserManagement (line 8) | class UserManagement extends Facade
method getFacadeAccessor (line 13) | public static function getFacadeAccessor()
FILE: src/Http/Controllers/Admin/DepartmentsController.php
class DepartmentsController (line 12) | class DepartmentsController extends Controller
method __construct (line 18) | public function __construct(
method index (line 26) | public function index()
method create (line 33) | public function create()
method edit (line 40) | public function edit(int $ID)
method store (line 55) | public function store(StoreDepartment $request)
method update (line 74) | public function update(int $ID, UpdateDepartment $request)
method delete (line 101) | public function delete(int $ID)
FILE: src/Http/Controllers/Admin/PermissionsController.php
class PermissionsController (line 11) | class PermissionsController extends Controller
method __construct (line 15) | public function __construct(PermissionRepositoryInterface $permission)
method index (line 20) | public function index(Request $request)
method create (line 27) | public function create()
method edit (line 32) | public function edit(int $ID)
method store (line 47) | public function store(StorePermission $request)
method update (line 64) | public function update(int $ID, UpdatePermission $request)
method delete (line 89) | public function delete(int $ID)
FILE: src/Http/Controllers/Admin/RolesController.php
class RolesController (line 12) | class RolesController extends Controller
method __construct (line 17) | public function __construct(
method index (line 25) | public function index()
method create (line 31) | public function create()
method edit (line 38) | public function edit(int $ID)
method store (line 55) | public function store(StoreRole $request)
method update (line 76) | public function update(int $ID, UpdateRole $request)
method delete (line 103) | public function delete(int $ID)
FILE: src/Http/Controllers/Admin/UsersController.php
class UsersController (line 15) | class UsersController extends Controller
method __construct (line 22) | public function __construct(
method index (line 34) | public function index()
method create (line 42) | public function create()
method edit (line 50) | public function edit($ID)
method store (line 69) | public function store(StoreUser $request)
method update (line 92) | public function update(int $ID, UpdateUser $request)
method delete (line 138) | public function delete($ID)
method restoreBackUser (line 160) | public function restoreBackUser(int $ID)
FILE: src/Http/Controllers/Admin/export/DepartmentsController.php
class DepartmentsController (line 8) | class DepartmentsController extends DepartmentUserManager
FILE: src/Http/Controllers/Admin/export/PermissionsController.php
class PermissionsController (line 8) | class PermissionsController extends PermissionUserManager
FILE: src/Http/Controllers/Admin/export/RolesController.php
class RolesController (line 9) | class RolesController extends RoleUserManager
FILE: src/Http/Controllers/Admin/export/UsersController.php
class UsersController (line 9) | class UsersController extends UserManager
FILE: src/Http/Controllers/Auth/AuthController.php
class AuthController (line 13) | class AuthController extends Controller
method __construct (line 19) | public function __construct(
method loginForm (line 27) | public function loginForm()
method registerForm (line 32) | public function registerForm()
method login (line 37) | public function login(UserLogin $request)
method register (line 65) | public function register(UserRegistration $request)
method logout (line 102) | public function logout(Request $request)
FILE: src/Http/Controllers/Auth/export/AuthController.php
class AuthController (line 8) | class AuthController extends AuthUserManager
FILE: src/Http/Requests/Admin/StoreDepartment.php
class StoreDepartment (line 7) | class StoreDepartment extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Admin/StorePermission.php
class StorePermission (line 7) | class StorePermission extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Admin/StoreRole.php
class StoreRole (line 7) | class StoreRole extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Admin/StoreUser.php
class StoreUser (line 7) | class StoreUser extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Admin/UpdateDepartment.php
class UpdateDepartment (line 7) | class UpdateDepartment extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Admin/UpdatePermission.php
class UpdatePermission (line 7) | class UpdatePermission extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Admin/UpdateRole.php
class UpdateRole (line 7) | class UpdateRole extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Admin/UpdateUser.php
class UpdateUser (line 7) | class UpdateUser extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Auth/UserLogin.php
class UserLogin (line 7) | class UserLogin extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/Http/Requests/Auth/UserRegistration.php
class UserRegistration (line 7) | class UserRegistration extends FormRequest
method authorize (line 14) | public function authorize()
method rules (line 24) | public function rules()
FILE: src/LaravelUserManagementProvider.php
class LaravelUserManagementProvider (line 21) | class LaravelUserManagementProvider extends ServiceProvider
method boot (line 28) | public function boot()
method register (line 89) | public function register()
FILE: src/Public/mekaeils-package/js/misc.js
function applyStyles (line 46) | function applyStyles() {
FILE: src/Public/mekaeils-package/vendors/js/vendor.bundle.addons.js
function a (line 10) | function a(r,l){if(!n[r]){if(!e[r]){var s="function"==typeof require&&re...
function i (line 10) | function i(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3})$/i);...
function a (line 10) | function a(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*(...
function o (line 10) | function o(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+...
function r (line 10) | function r(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]...
function l (line 10) | function l(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(...
function s (line 10) | function s(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]...
function u (line 10) | function u(t,e,n){return Math.min(Math.max(e,t),n)}
function d (line 10) | function d(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}
function i (line 10) | function i(t){var e,n,i,a=t[0]/255,o=t[1]/255,r=t[2]/255,l=Math.min(a,o,...
function a (line 10) | function a(t){var e,n,i,a=t[0],o=t[1],r=t[2],l=Math.min(a,o,r),s=Math.ma...
function o (line 10) | function o(t){var e=t[0],n=t[1],a=t[2];return[i(t)[0],100*(1/255*Math.mi...
function l (line 10) | function l(t){var e,n,i,a,o=t[0]/255,r=t[1]/255,l=t[2]/255;return a=Math...
function s (line 10) | function s(t){return C[JSON.stringify(t)]}
function u (line 10) | function u(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=...
function d (line 10) | function d(t){var e,n,i,a=u(t),o=a[0],r=a[1],l=a[2];return o/=95.047,r/=...
function c (line 10) | function c(t){var e,n,i,a,o,r=t[0]/360,l=t[1]/100,s=t[2]/100;if(0==l)ret...
function h (line 10) | function h(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,o=e-...
function f (line 10) | function f(t){var e,n,i,a,o=t[0]/360,l=t[1]/100,s=t[2]/100,u=l+s;switch(...
function p (line 10) | function p(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100,l=t[3]/100;retu...
function v (line 10) | function v(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100;return e=3.2406...
function m (line 10) | function m(t){var e,n,i,a=t[0],o=t[1],r=t[2];return a/=95.047,o/=100,r/=...
function x (line 10) | function x(t){var e,n,i,a,o=t[0],r=t[1],l=t[2];return o<=8?a=(n=100*o/90...
function y (line 10) | function y(t){var e,n,i,a=t[0],o=t[1],r=t[2];return e=Math.atan2(r,o),(n...
function k (line 10) | function k(t){return v(x(t))}
function w (line 10) | function w(t){var e,n,i,a=t[0],o=t[1];return i=t[2]/360*2*Math.PI,e=o*Ma...
function M (line 10) | function M(t){return S[t]}
function e (line 10) | function e(t,e){return o.valueOrDefault(t.showLine,e.showLines)}
function t (line 10) | function t(t,e,n){return Math.max(Math.min(t,n),e)}
function e (line 10) | function e(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datase...
function n (line 10) | function n(t){var e=t.options;e.scale?t.scale.options=e.scale:e.scales&&...
function l (line 10) | function l(t){return"top"===t||"bottom"===t}
function e (line 10) | function e(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.definePr...
function n (line 10) | function n(t,e){var n=t._chartjs;if(n){var i=n.listeners,o=i.indexOf(e);...
function i (line 10) | function i(t,e,n,i){var o,r,l,s,u,d,c,h,f,g=Object.keys(n);for(o=0,r=g.l...
function e (line 10) | function e(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==...
function n (line 10) | function n(t){return void 0!==t&&null!==t&&"none"!==t}
function r (line 10) | function r(t,i,a){var o=document.defaultView,r=t.parentNode,l=o.getCompu...
function i (line 10) | function i(t,e){return t.native?{x:t.x,y:t.y}:u.getRelativePosition(t,e)}
function a (line 10) | function a(t,e){var n,i,a,o,r;for(i=0,o=t.data.datasets.length;i<o;++i)i...
function o (line 10) | function o(t,e){var n=[];return a(t,function(t){t.inRange(e.x,e.y)&&n.pu...
function r (line 10) | function r(t,e,n,i){var o=Number.POSITIVE_INFINITY,r=[];return a(t,funct...
function l (line 10) | function l(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return fun...
function s (line 10) | function s(t,e,n){var a=i(e,t);n.axis=n.axis||"x";var s=l(n.axis),u=n.in...
function e (line 10) | function e(t,e){return i.where(t,function(t){return t.position===e})}
function n (line 10) | function n(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort...
function r (line 10) | function r(t){var e=i.findNextWhere(_,function(e){return e.box===t});if(...
function l (line 10) | function l(t){t.isHorizontal()?(t.left=t.fullWidth?d:T,t.right=t.fullWid...
function i (line 10) | function i(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(t[e].label)...
function a (line 10) | function a(t,e,n){var i=t.getPixelForTick(e);return n&&(i-=0===e?(t.getP...
function e (line 10) | function e(t,e,n){return l.isArray(e)?l.longestText(t,n,e):t.measureText...
function n (line 10) | function n(t){var e=l.valueOrDefault,n=o.global,i=e(t.fontSize,n.default...
function s (line 10) | function s(t){return l.options.toLineHeight(l.valueOrDefault(t.lineHeigh...
function e (line 10) | function e(t,e){var n=o.color(t);return n.alpha(e*n.alpha()).rgbaString()}
function n (line 10) | function n(t,e){return e&&(o.isArray(e)?Array.prototype.push.apply(t,e):...
function r (line 10) | function r(t){var e=t._xScale,n=t._yScale||t._scale,i=t._index,a=t._data...
function l (line 10) | function l(t){var e=i.global,n=o.valueOrDefault;return{xPadding:t.xPaddi...
function s (line 10) | function s(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,l=r.reduc...
function u (line 10) | function u(t,e){var n=t._model,i=t._chart,a=t._chart.chartArea,o="center...
function d (line 10) | function d(t,e,n){var i=t.x,a=t.y,o=t.caretSize,r=t.caretPadding,l=t.cor...
function i (line 10) | function i(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.r...
function i (line 10) | function i(t){return void 0!==t._view.width}
function a (line 10) | function a(t){var e,n,a,o,r=t._view;if(i(t)){var l=r.width/2;e=r.x-l,n=r...
function t (line 10) | function t(t){return m[(b+t)%4]}
function i (line 10) | function i(t,e){var n=v.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);...
function a (line 10) | function a(t,e){var n=t.style,a=t.getAttribute("height"),o=t.getAttribut...
function o (line 10) | function o(t,e,n){t.addEventListener(e,n,M)}
function r (line 10) | function r(t,e,n){t.removeEventListener(e,n,M)}
function l (line 10) | function l(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?...
function s (line 10) | function s(t,e){var n=w[t.type]||t.type,i=v.getRelativePosition(t,e);ret...
function u (line 10) | function u(t,e){var n=!1,i=[];return function(){i=Array.prototype.slice....
function d (line 10) | function d(t){var e=document.createElement("div"),n=b+"size-monitor",i="...
function c (line 10) | function c(t,e){var n=t[m]||(t[m]={}),i=n.renderProxy=function(t){t.anim...
function h (line 10) | function h(t){var e=t[m]||{},n=e.renderProxy;n&&(v.each(k,function(e){r(...
function f (line 10) | function f(t,e,n){var i=t[m]||(t[m]={}),a=i.resizer=d(u(function(){if(i....
function g (line 10) | function g(t){var e=t[m]||{},n=e.resizer;delete e.resizer,h(t),n&&n.pare...
function p (line 10) | function p(t,e){var n=t._style||document.createElement("style");t._style...
function t (line 10) | function t(t,e,n){var i,a=t._model||{},o=a.fill;if(void 0===o&&(o=!!a.ba...
function e (line 10) | function e(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,o=null;...
function n (line 10) | function n(t,e,n){var i,a=t[e].fill,o=[e];if(!n)return a;for(;!1!==a&&-1...
function r (line 10) | function r(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(...
function l (line 10) | function l(t){return t&&!t.skip}
function s (line 10) | function s(t,e,n,i,a){var r;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i...
function u (line 10) | function u(t,e,n,i,a,o){var r,u,d,c,h,f,g,p=e.length,v=i.spanGaps,m=[],b...
function e (line 10) | function e(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}
function n (line 10) | function n(e,n){var i=new t.Legend({ctx:e.ctx,options:n,chart:e});r.conf...
function e (line 10) | function e(e,i){var a=new t.Title({ctx:e.ctx,options:i,chart:e});n.confi...
function t (line 10) | function t(t){return r?t.xAxisID===e.id:t.yAxisID===e.id}
function t (line 10) | function t(t){return s?t.xAxisID===e.id:t.yAxisID===e.id}
function e (line 10) | function e(t){var e=t.options;return e.angleLines.display||e.pointLabels...
function n (line 10) | function n(t){var e=t.options.pointLabels,n=a.valueOrDefault(e.fontSize,...
function r (line 10) | function r(t,e,n){return a.isArray(n)?{w:a.longestText(t,t.font,n),h:n.l...
function l (line 10) | function l(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t...
function s (line 10) | function s(t){var i,o,s,u=n(t),d=Math.min(t.height/2,t.width/2),c={r:t.w...
function u (line 10) | function u(t){var e=Math.min(t.height/2,t.width/2);t.drawingArea=Math.ro...
function d (line 10) | function d(t){return 0===t||180===t?"center":t<180?"left":"right"}
function c (line 10) | function c(t,e,n,i){if(a.isArray(e))for(var o=n.y,r=1.5*i,l=0;l<e.length...
function h (line 10) | function h(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}
function f (line 10) | function f(t){var i=t.ctx,o=a.valueOrDefault,r=t.options,l=r.angleLines,...
function g (line 10) | function g(t,n,i,o){var r=t.ctx;if(r.strokeStyle=a.valueAtIndexOrDefault...
function p (line 10) | function p(t){return a.isNumber(t)?t:0}
function i (line 10) | function i(t,e){return t-e}
function a (line 10) | function a(t){var e,n,i,a={},o=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||...
function o (line 10) | function o(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{ti...
function r (line 10) | function r(t,e,n){for(var i,a,o,r=0,l=t.length-1;r>=0&&r<=l;){if(i=r+l>>...
function l (line 10) | function l(t,e,n,i){var a=r(t,e,n),o=a.lo?a.hi?a.lo:t[t.length-2]:t[0],l...
function s (line 10) | function s(t,e){var n=e.parser,i=e.parser||e.format;return"function"==ty...
function u (line 10) | function u(t,e){if(x.isNullOrUndef(t))return null;var n=e.options.time,i...
function d (line 10) | function d(t,e,n,i){var a,o,r,l=e-t,s=w[n],u=s.size,d=s.steps;if(!d)retu...
function c (line 10) | function c(t,e,n,i){var a,o,r,l=M.length;for(a=M.indexOf(t);a<l-1;++a)if...
function h (line 10) | function h(t,e,n,i){var a,o,r=m.duration(m(i).diff(m(n)));for(a=M.length...
function f (line 10) | function f(t){for(var e=M.indexOf(t)+1,n=M.length;e<n;++e)if(w[M[e]].com...
function g (line 10) | function g(t,e,n,i){var a,o=i.time,r=o.unit||c(o.minUnit,t,e,n),l=f(r),s...
function p (line 10) | function p(t,e,n,i,a){var o,r,s=0,u=0;return a.offset&&e.length&&(a.time...
function v (line 10) | function v(t,e){var n,i,a,o,r=[];for(n=0,i=t.length;n<i;++n)a=t[n],o=!!e...
FILE: src/Public/mekaeils-package/vendors/js/vendor.bundle.base.js
function p (line 2) | function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.a...
function w (line 2) | function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"funct...
function ga (line 2) | function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeTy...
function ha (line 2) | function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLengt...
function ia (line 2) | function ia(a){return a[u]=!0,a}
function ja (line 2) | function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(...
function ka (line 2) | function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[...
function la (line 2) | function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourc...
function ma (line 2) | function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"...
function na (line 2) | function na(a){return function(b){var c=b.nodeName.toLowerCase();return(...
function oa (line 2) | function oa(a){return function(b){return"form"in b?b.parentNode&&b.disab...
function pa (line 2) | function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,...
function qa (line 2) | function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}
function ra (line 2) | function ra(){}
function sa (line 2) | function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}
function ta (line 2) | function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x...
function ua (line 2) | function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e-...
function va (line 2) | function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}
function wa (line 2) | function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(...
function xa (line 2) | function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)...
function ya (line 2) | function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.r...
function za (line 2) | function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var...
function B (line 2) | function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerC...
function E (line 2) | function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!...
function K (line 2) | function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}
function M (line 2) | function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!...
function N (line 2) | function N(a){return a}
function O (line 2) | function O(a){throw a}
function P (line 2) | function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).don...
function g (line 2) | function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(...
function S (line 2) | function S(){d.removeEventListener("DOMContentLoaded",S),
function V (line 3) | function V(){this.expando=r.expando+V.uid++}
function $ (line 3) | function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?...
function _ (line 3) | function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.rep...
function fa (line 3) | function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:funct...
function ha (line 3) | function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(...
function ia (line 3) | function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&...
function na (line 3) | function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagNa...
function oa (line 3) | function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",...
function qa (line 3) | function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),...
function va (line 3) | function va(){return!0}
function wa (line 3) | function wa(){return!1}
function xa (line 3) | function xa(){try{return d.activeElement}catch(a){}}
function ya (line 3) | function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof...
function Ea (line 3) | function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"...
function Fa (line 3) | function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}
function Ga (line 3) | function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttrib...
function Ha (line 3) | function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&...
function Ia (line 3) | function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.t...
function Ja (line 3) | function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-...
function Ka (line 3) | function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)...
function b (line 3) | function b(){if(i){i.style.cssText="box-sizing:border-box;position:relat...
function Oa (line 3) | function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPr...
function Pa (line 3) | function Pa(a,b){return{get:function(){return a()?void delete this.get:(...
function Wa (line 3) | function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c...
function Xa (line 3) | function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}
function Ya (line 3) | function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[...
function Za (line 3) | function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"wid...
function $a (line 3) | function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"b...
function _a (line 3) | function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}
function eb (line 3) | function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnima...
function fb (line 3) | function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}
function gb (line 3) | function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e...
function hb (line 3) | function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["...
function ib (line 3) | function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=thi...
function jb (line 3) | function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a...
function kb (line 3) | function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().alw...
function pb (line 4) | function pb(a){var b=a.match(L)||[];return b.join(" ")}
function qb (line 4) | function qb(a){return a.getAttribute&&a.getAttribute("class")||""}
function Ab (line 4) | function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c|...
function Mb (line 4) | function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var ...
function Nb (line 4) | function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!...
function Ob (line 4) | function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)voi...
function Pb (line 4) | function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[...
function Qb (line 4) | function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])fo...
function A (line 4) | function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=vo...
function e (line 9) | function e(e){return e&&'[object Function]'==={}.toString.call(e)}
function t (line 9) | function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null...
function o (line 9) | function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}
function n (line 9) | function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':c...
function r (line 9) | function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!=...
function p (line 9) | function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstE...
function s (line 9) | function s(e){return null===e.parentNode?e:s(e.parentNode)}
function d (line 9) | function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.docu...
function a (line 9) | function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[...
function l (line 9) | function l(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&argumen...
function f (line 9) | function f(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';...
function m (line 9) | function m(e,t,o,i){return J(t['offset'+e],t['scroll'+e],o['client'+e],o...
function h (line 9) | function h(){var e=document.body,t=document.documentElement,o=ie()&&getC...
function c (line 9) | function c(e){return se({},e,{right:e.left+e.width,bottom:e.top+e.height})}
function g (line 9) | function g(e){var o={};if(ie())try{o=e.getBoundingClientRect();var i=a(e...
function u (line 9) | function u(e,o){var i=ie(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=...
function b (line 9) | function b(e){var t=e.ownerDocument.documentElement,o=u(e,t),i=J(t.clien...
function w (line 9) | function w(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'==...
function y (line 9) | function y(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(...
function E (line 9) | function E(e){var t=e.width,o=e.height;return t*o}
function v (line 9) | function v(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?ar...
function O (line 9) | function O(e,t,o){var i=d(t,o);return u(o,i)}
function L (line 9) | function L(e){var t=getComputedStyle(e),o=parseFloat(t.marginTop)+parseF...
function x (line 9) | function x(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'...
function S (line 9) | function S(e,t,o){o=o.split('-')[0];var i=L(e),n={width:i.width,height:i...
function T (line 9) | function T(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}
function D (line 9) | function D(e,t,o){if(Array.prototype.findIndex)return e.findIndex(functi...
function C (line 9) | function C(t,o,i){var n=void 0===i?t:t.slice(0,D(t,'name',i));return n.f...
function N (line 9) | function N(){if(!this.state.isDestroyed){var e={instance:this,styles:{},...
function k (line 9) | function k(e,t){return e.some(function(e){var o=e.name,i=e.enabled;retur...
function W (line 9) | function W(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpp...
function P (line 9) | function P(){return this.state.isDestroyed=!0,k(this.modifiers,'applySty...
function B (line 9) | function B(e){var t=e.ownerDocument;return t?t.defaultView:window}
function H (line 9) | function H(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaul...
function A (line 9) | function A(e,t,o,i){o.updateBound=i,B(e).addEventListener('resize',o.upd...
function I (line 9) | function I(){this.state.eventsEnabled||(this.state=A(this.reference,this...
function M (line 9) | function M(e,t){return B(e).removeEventListener('resize',t.updateBound),...
function R (line 9) | function R(){this.state.eventsEnabled&&(cancelAnimationFrame(this.schedu...
function U (line 9) | function U(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}
function Y (line 9) | function Y(e,t){Object.keys(t).forEach(function(o){var i='';-1!==['width...
function j (line 9) | function j(e,t){Object.keys(t).forEach(function(o){var i=t[o];!1===i?e.r...
function F (line 9) | function F(e,t,o){var i=T(e,function(e){var o=e.name;return o===t}),n=!!...
function K (line 9) | function K(e){return'end'===e?'start':'start'===e?'end':e}
function q (line 9) | function q(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments...
function V (line 9) | function V(e,t,o,i){var n=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+n[1],p...
function z (line 9) | function z(e,t,o,i){var n=[0,0],r=-1!==['right','left'].indexOf(i),p=e.s...
function G (line 9) | function G(e,t){var o,i=t.offset,n=e.placement,r=e.offsets,p=r.popper,s=...
function e (line 9) | function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enume...
function t (line 9) | function t(o,i){var n=this,r=2<arguments.length&&void 0!==arguments[2]?a...
function i (line 17) | function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.en...
function o (line 17) | function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}
function h (line 17) | function h(r){for(var t=1;t<arguments.length;t++){var s=null!=arguments[...
function t (line 17) | function t(t){var e=this,n=!1;return i(this).one(l.TRANSITION_END,functi...
function i (line 17) | function i(t){this._element=t}
function n (line 17) | function n(t){this._element=t}
function s (line 17) | function s(t,e){this._items=null,this._interval=null,this._activeElement...
function a (line 17) | function a(t,e){this._isTransitioning=!1,this._element=t,this._config=th...
function l (line 17) | function l(t,e){this._element=t,this._popper=null,this._config=this._get...
function r (line 17) | function r(t,e){this._config=this._getConfig(e),this._element=t,this._di...
function i (line 17) | function i(t,e){if("undefined"==typeof c)throw new TypeError("Bootstrap ...
function i (line 17) | function i(){return t.apply(this,arguments)||this}
function n (line 17) | function n(t,e){var n=this;this._element=t,this._scrollElement="BODY"===...
function i (line 17) | function i(t){this._element=t}
function t (line 24) | function t(t){return getComputedStyle(t)}
function e (line 24) | function e(t,e){for(var i in e){var r=e[i];"number"==typeof r&&(r+="px")...
function i (line 24) | function i(t){var e=document.createElement("div");return e.className=t,e}
function r (line 24) | function r(t,e){if(!v)throw new Error("No element matching method suppor...
function l (line 24) | function l(t){t.remove?t.remove():t.parentNode&&t.parentNode.removeChild...
function n (line 24) | function n(t,e){return Array.prototype.filter.call(t.children,function(t...
function o (line 24) | function o(t,e){var i=t.element.classList,r=m.state.scrolling(e);i.conta...
function s (line 24) | function s(t,e){Y[e]=setTimeout(function(){return t.isAlive&&t.element.c...
function a (line 24) | function a(t,e){o(t,e),s(t,e)}
function c (line 24) | function c(t){if("function"==typeof window.CustomEvent)return new Custom...
function h (line 24) | function h(t,e,i,r,l){var n=i[0],o=i[1],s=i[2],h=i[3],u=i[4],d=i[5];void...
function u (line 24) | function u(t){return parseInt(t,10)||0}
function d (line 24) | function d(t){return r(t,"input,[contenteditable]")||r(t,"select,[conten...
function f (line 24) | function f(e){var i=t(e);return u(i.width)+u(i.paddingLeft)+u(i.paddingR...
function p (line 24) | function p(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.se...
function b (line 24) | function b(t,i){var r={width:i.railXWidth};i.isRtl?r.left=i.negativeScro...
function g (line 24) | function g(t,e){function i(e){p[d]=b+v*(e[a]-g),o(t,f),T(t),e.stopPropag...
function e (line 24) | function e(e,r){var l=i.scrollTop;if(0===e){if(!t.scrollbarYActive)retur...
function i (line 24) | function i(t,i){var r=0===o.scrollTop,l=o.scrollTop+o.offsetHeight===o.s...
function r (line 24) | function r(t){var e=t.deltaX,i=-1*t.deltaY;return void 0!==e&&void 0!==i...
function l (line 24) | function l(e,i,r){if(!L.isWebKit&&o.querySelector("select:focus"))return...
function n (line 24) | function n(t){var n=r(t),s=n[0],a=n[1];if(!l(t.target,s,a)){var c=!1;e.s...
function i (line 24) | function i(t,i){var r=h.scrollTop,l=h.scrollLeft,n=Math.abs(t),o=Math.ab...
function r (line 24) | function r(t,i){h.scrollTop-=i,h.scrollLeft-=t,T(e)}
function l (line 24) | function l(t){return t.targetTouches?t.targetTouches[0]:t}
function n (line 24) | function n(t){return!(t.pointerType&&"pen"===t.pointerType&&0===t.button...
function o (line 24) | function o(t){if(n(t)){var e=l(t);u.pageX=e.pageX,u.pageY=e.pageY,d=(new...
function s (line 24) | function s(e,i,r){if(!h.contains(e))return!1;for(var l=e;l&&l!==h;){if(l...
function a (line 24) | function a(t){if(n(t)){var e=l(t),o={pageX:e.pageX,pageY:e.pageY},a=o.pa...
function c (line 24) | function c(){e.settings.swipeEasing&&(clearInterval(p),p=setInterval(fun...
FILE: src/Repository/Contracts/BaseRepositoryInterface.php
type BaseRepositoryInterface (line 5) | interface BaseRepositoryInterface
method all (line 7) | public function all(array $columns = [], array $relations = [], array ...
method find (line 9) | public function find(int $ID, array $columns = null);
method store (line 11) | public function store(array $item);
method update (line 13) | public function update(int $ID, array $item);
method delete (line 15) | public function delete(int $ID);
method findBy (line 17) | public function findBy(array $criteria, array $columns = [], bool $sin...
method updateBy (line 19) | public function updateBy(array $criteria, array $data);
method paginate (line 21) | public function paginate($perPage = null, $columns = ['*'], $pageName ...
FILE: src/Repository/Contracts/DepartmentRepositoryInterface.php
type DepartmentRepositoryInterface (line 5) | interface DepartmentRepositoryInterface extends BaseRepositoryInterface
FILE: src/Repository/Contracts/PermissionRepositoryInterface.php
type PermissionRepositoryInterface (line 5) | interface PermissionRepositoryInterface extends BaseRepositoryInterface
FILE: src/Repository/Contracts/RoleRepositoryInterface.php
type RoleRepositoryInterface (line 5) | interface RoleRepositoryInterface extends BaseRepositoryInterface
FILE: src/Repository/Contracts/UserRepositoryInterface.php
type UserRepositoryInterface (line 5) | interface UserRepositoryInterface extends BaseRepositoryInterface
method allWithTrashed (line 7) | public function allWithTrashed();
method restoreUser (line 9) | public function restoreUser(int $ID);
FILE: src/Repository/Eloquents/BaseEloquentRepository.php
class BaseEloquentRepository (line 7) | class BaseEloquentRepository implements BaseRepositoryInterface
method all (line 11) | public function all(array $columns = [], array $relations = [], array ...
method find (line 33) | public function find(int $ID, array $columns = null)
method store (line 38) | public function store(array $item)
method update (line 43) | public function update(int $ID, array $data)
method delete (line 55) | public function delete(int $ID)
method findBy (line 65) | public function findBy(array $criteria, array $columns = [], bool $sin...
method updateBy (line 79) | public function updateBy(array $criteria, array $data)
method paginate (line 91) | public function paginate($perPage = null, $columns = ['*'], $pageName ...
FILE: src/Repository/Eloquents/DepartmentRepository.php
class DepartmentRepository (line 9) | class DepartmentRepository extends BaseEloquentRepository implements Dep...
method syncDepartments (line 13) | public function syncDepartments($owner, array $departments=[])
method attachDepartment (line 18) | public function attachDepartment($owner, array $departments=[])
FILE: src/Repository/Eloquents/PermissionRepository.php
class PermissionRepository (line 9) | class PermissionRepository extends BaseEloquentRepository implements Per...
method setPermissionToRole (line 14) | public function setPermissionToRole(int $roleID, $permission, $give = ...
method SyncPermToRole (line 27) | public function SyncPermToRole(int $roleID, array $permissions)
method getPermissionsModule (line 35) | public function getPermissionsModule()
FILE: src/Repository/Eloquents/RoleRepository.php
class RoleRepository (line 9) | class RoleRepository extends BaseEloquentRepository implements RoleRepos...
method syncRoleToUser (line 13) | public function syncRoleToUser($owner, array $roles = [])
method setRoleToMember (line 18) | public function setRoleToMember($owner, $role, $assign = true)
method getAllRolePermissions (line 28) | public function getAllRolePermissions(Role $role, $method = 'get')
FILE: src/Repository/Eloquents/UserRepository.php
class UserRepository (line 9) | class UserRepository extends BaseEloquentRepository implements UserRepos...
method getUserBaseRole (line 13) | public function getUserBaseRole($roleRequest)
method allWithTrashed (line 29) | public function allWithTrashed()
method restoreUser (line 38) | public function restoreUser(int $ID)
FILE: src/Resource/js/mekaeils-package/main.js
method data (line 28) | data() {
FILE: src/Resource/js/mekaeils-package/plugins/globalComponents.js
method install (line 9) | install(Vue) {
FILE: src/Resource/js/mekaeils-package/plugins/globalDirectives.js
method install (line 8) | install(Vue) {
FILE: src/Resource/js/mekaeils-package/plugins/globalMixins.js
method install (line 6) | install(Vue) {
FILE: src/Resource/js/mekaeils-package/plugins/material-kit.js
method install (line 12) | install(Vue) {
FILE: src/UserManagement.php
class UserManagement (line 8) | class UserManagement
FILE: tests/SampleTest.php
class sampleTest (line 7) | class sampleTest extends TestCase
method testHello (line 10) | public function testHello()
Condensed preview — 195 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,693K chars).
[
{
"path": ".gitignore",
"chars": 353,
"preview": "vendor/\nnode_modules/\nnpm-debug.log\n\n# Laravel 4 specific\nbootstrap/compiled.php\napp/storage/\n\n# Laravel 5 & Lumen speci"
},
{
"path": ".phpunit.result.cache",
"chars": 167,
"preview": "C:37:\"PHPUnit\\Runner\\DefaultTestResultCache\":116:{a:2:{s:7:\"defects\";a:0:{}s:5:\"times\";a:1:{s:56:\"Mekaeil\\LaravelUserMan"
},
{
"path": ".travis.yml",
"chars": 1122,
"preview": "language: php\n\nsudo: false\n\nmatrix:\n include:\n - php: 7.2\n env: LARAVEL_VERSION=5.5.*\n - php: 7.3\n env"
},
{
"path": "LICENSE",
"chars": 1064,
"preview": "MIT License\n\nCopyright (c) 2019 Mekaeil\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof"
},
{
"path": "README.md",
"chars": 19476,
"preview": "\n# Use the new version \nI've upgraded and revamped this package for better performance and efficiency. Check out the imp"
},
{
"path": "composer.json",
"chars": 1326,
"preview": "{\n \"name\": \"mekaeil/laravel-user-management\",\n \"description\": \"With this package we can manage all of the users in our"
},
{
"path": "phpunit.xml.dist",
"chars": 1002,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit bootstrap=\"vendor/autoload.php\"\n backupGlobals=\"false\"\n "
},
{
"path": "src/Config/laravel_user_management.php",
"chars": 3080,
"preview": "<?php\n\nreturn [\n\n /* \n |--------------------------------------------------------------------------\n | LARAVEL "
},
{
"path": "src/Config/permission.php",
"chars": 5309,
"preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| SPATIE PACKAGE'S CONFIG \n|----"
},
{
"path": "src/Console/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "src/Contracts/UserManagementContracts.php",
"chars": 97,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Contracts;\n\ninterface UserManagementContracts\n{\n\n}"
},
{
"path": "src/Database/Migrations/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "src/Database/Migrations/2019_01_01_111111_create_users_table.php",
"chars": 1334,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "src/Database/Migrations/2019_01_01_222222_create_departments_table.php",
"chars": 1053,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "src/Database/Migrations/2019_01_01_333333_create_user_department_users_table.php",
"chars": 1395,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "src/Database/Migrations/2019_01_01_444444_create_permission_tables.php",
"chars": 3927,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "src/Database/Migrations/2019_02_02_555555_create_soft-delete_users_table.php",
"chars": 1200,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "src/Database/Migrations/2019_10_17_110654_create_password_reset_table.php",
"chars": 811,
"preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
},
{
"path": "src/Database/Seeders/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "src/Database/Seeders/Department/DepartmentTableSeeder.php",
"chars": 305,
"preview": "<?php\n\nuse Mekaeil\\LaravelUserManagement\\Seeders\\Department\\MasterDepartmentTableSeeder;\n\nclass DepartmentTableSeeder ex"
},
{
"path": "src/Database/Seeders/Department/MasterDepartmentTableSeeder.php",
"chars": 2510,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Seeders\\Department;\n\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Datab"
},
{
"path": "src/Database/Seeders/Permission/MasterPermissionTableSeeder.php",
"chars": 6749,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Seeders\\Permission;\n\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Datab"
},
{
"path": "src/Database/Seeders/Permission/PermissionTableSeeder.php",
"chars": 547,
"preview": "<?php\n\nuse Mekaeil\\LaravelUserManagement\\Seeders\\Permission\\MasterPermissionTableSeeder;\n\nclass PermissionTableSeeder ex"
},
{
"path": "src/Database/Seeders/Role/MasterRoleTableSeeder.php",
"chars": 2542,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Seeders\\Permission;\n\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Datab"
},
{
"path": "src/Database/Seeders/Role/RoleTableSeeder.php",
"chars": 608,
"preview": "<?php\n\nuse Mekaeil\\LaravelUserManagement\\Seeders\\Permission\\MasterRoleTableSeeder;\nclass RoleTableSeeder extends MasterR"
},
{
"path": "src/Database/Seeders/UserManagementDatabaseSeeder.php",
"chars": 348,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Databas"
},
{
"path": "src/Entities/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "src/Entities/Department.php",
"chars": 975,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Entities;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Department exte"
},
{
"path": "src/Entities/Permission.php",
"chars": 282,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Entities;\n\nuse Spatie\\Permission\\Models\\Permission as SpatiePermission;\n\n"
},
{
"path": "src/Entities/Role.php",
"chars": 258,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Entities;\n\nuse Spatie\\Permission\\Models\\Role as SpatieRole;\n\nclass Role e"
},
{
"path": "src/Entities/User.php",
"chars": 1306,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Entities;\n\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Founda"
},
{
"path": "src/Entities/export/Department.php",
"chars": 259,
"preview": "<?php\n\nnamespace App\\Entities;\nuse Mekaeil\\LaravelUserManagement\\Entities\\Department as UserManagementDepartment;\n\nclass"
},
{
"path": "src/Entities/export/Permission.php",
"chars": 174,
"preview": "<?php\n\nnamespace App\\Entities;\nuse Mekaeil\\LaravelUserManagement\\Entities\\Permission as UserManagementPermission;\n\nclass"
},
{
"path": "src/Entities/export/Role.php",
"chars": 145,
"preview": "<?php\n\nnamespace App\\Entities;\nuse Mekaeil\\LaravelUserManagement\\Entities\\Role as UserManagementRole;\n\nclass Role extend"
},
{
"path": "src/Entities/export/User.php",
"chars": 692,
"preview": "<?php\n\nnamespace App\\Entities;\nuse Mekaeil\\LaravelUserManagement\\Entities\\User as UserManagement;\n\nclass User extends Us"
},
{
"path": "src/Facade/UserManagement.php",
"chars": 302,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Facade;\n\nuse Illuminate\\Support\\Facades\\Facade;\nuse Illuminate\\Support\\Fa"
},
{
"path": "src/Http/Controllers/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "src/Http/Controllers/Admin/DepartmentsController.php",
"chars": 3859,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Controllers\\Admin;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Rout"
},
{
"path": "src/Http/Controllers/Admin/PermissionsController.php",
"chars": 3669,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Controllers\\Admin;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Rout"
},
{
"path": "src/Http/Controllers/Admin/RolesController.php",
"chars": 3947,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Controllers\\Admin;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Rout"
},
{
"path": "src/Http/Controllers/Admin/UsersController.php",
"chars": 6225,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Controllers\\Admin;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Rout"
},
{
"path": "src/Http/Controllers/Admin/export/DepartmentsController.php",
"chars": 1092,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\UserManagement;\n\nuse Illuminate\\Http\\Request;\nuse Mekaeil\\LaravelUserManagement\\Ht"
},
{
"path": "src/Http/Controllers/Admin/export/PermissionsController.php",
"chars": 1075,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\UserManagement;\n\nuse Illuminate\\Http\\Request;\nuse Mekaeil\\LaravelUserManagement\\Ht"
},
{
"path": "src/Http/Controllers/Admin/export/RolesController.php",
"chars": 1068,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\UserManagement;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Routing\\Controller;\nu"
},
{
"path": "src/Http/Controllers/Admin/export/UsersController.php",
"chars": 1060,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\UserManagement;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Routing\\Controller;\nu"
},
{
"path": "src/Http/Controllers/Auth/AuthController.php",
"chars": 3362,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Controllers\\Auth;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Routi"
},
{
"path": "src/Http/Controllers/Auth/export/AuthController.php",
"chars": 1132,
"preview": "<?php\n\nnamespace App\\Http\\Controllers\\UserManagement\\Auth;\n\nuse Illuminate\\Http\\Request;\nuse Mekaeil\\LaravelUserManageme"
},
{
"path": "src/Http/Requests/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "src/Http/Requests/Admin/StoreDepartment.php",
"chars": 701,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass "
},
{
"path": "src/Http/Requests/Admin/StorePermission.php",
"chars": 828,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass "
},
{
"path": "src/Http/Requests/Admin/StoreRole.php",
"chars": 917,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass "
},
{
"path": "src/Http/Requests/Admin/StoreUser.php",
"chars": 1259,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass "
},
{
"path": "src/Http/Requests/Admin/UpdateDepartment.php",
"chars": 714,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass "
},
{
"path": "src/Http/Requests/Admin/UpdatePermission.php",
"chars": 843,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass "
},
{
"path": "src/Http/Requests/Admin/UpdateRole.php",
"chars": 931,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass "
},
{
"path": "src/Http/Requests/Admin/UpdateUser.php",
"chars": 1286,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Admin;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass "
},
{
"path": "src/Http/Requests/Auth/UserLogin.php",
"chars": 704,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Auth;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass U"
},
{
"path": "src/Http/Requests/Auth/UserRegistration.php",
"chars": 939,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Http\\Requests\\Auth;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass U"
},
{
"path": "src/LaravelUserManagementProvider.php",
"chars": 4210,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Contracts\\Debug\\"
},
{
"path": "src/Public/mekaeils-package/css/style.css",
"chars": 489689,
"preview": "/*------------------------------------------------------------------\n [Master Stylesheet]\n\n Project:\tPurple Admin\n Ver"
},
{
"path": "src/Public/mekaeils-package/js/dashboard.js",
"chars": 14711,
"preview": "(function($) {\n 'use strict';\n $(function() {\n Chart.defaults.global.legend.labels.usePointStyle = true;\n \n i"
},
{
"path": "src/Public/mekaeils-package/js/misc.js",
"chars": 3376,
"preview": "(function($) {\n 'use strict';\n $(function() {\n var body = $('body');\n var contentWrapper = $('.content-wrapper')"
},
{
"path": "src/Public/mekaeils-package/js/off-canvas.js",
"chars": 185,
"preview": "(function($) {\n 'use strict';\n $(function() {\n $('[data-toggle=\"offcanvas\"]').on(\"click\", function() {\n $('.si"
},
{
"path": "src/Public/mekaeils-package/vendors/css/vendor.bundle.base.css",
"chars": 2444,
"preview": "/*\n * Container style\n */\n.ps {\n overflow: hidden !important;\n overflow-anchor: none;\n -ms-overflow-style: none;\n to"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/README.md",
"chars": 212,
"preview": "# MaterialDesign-Webfont\r\nNPM/Bower Dist for Material Design Webfont. This includes the Stock and Community icons in a s"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/bower.json",
"chars": 542,
"preview": "{\r\n \"name\": \"mdi\",\r\n \"version\": \"2.1.19\",\r\n \"main\": [\r\n \"scss/materialdesignicons.scss\"\r\n ],\r\n \"ho"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/css/materialdesignicons.css",
"chars": 112658,
"preview": "/* MaterialDesignIcons.com */\n@font-face {\n font-family: \"Material Design Icons\";\n src: url(\"../fonts/materialdesignic"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/license.md",
"chars": 4663,
"preview": "Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/),\r\nwith Reserved Font Name Material Design Icons.\r\n\r"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/package.json",
"chars": 1635,
"preview": "{\n \"_args\": [\n [\n \"mdi@2.1.19\",\n \"/Users/linsa/project/purple_free\"\n ]\n ],\n \"_from\": \"mdi@2.1.19\",\n "
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/preview.html",
"chars": 89214,
"preview": "<!doctype html>\r\n<html>\r\n<head>\r\n <meta charset=\"utf-8\" />\r\n <title>Material Design Icons</title>\r\n <style>\r\n "
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/scss/_animated.scss",
"chars": 688,
"preview": "// From Font Awesome\r\n.#{$mdi-css-prefix}-spin:before {\r\n -webkit-animation: #{$mdi-css-prefix}-spin 2s infinite line"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/scss/_core.scss",
"chars": 455,
"preview": ".#{$mdi-css-prefix}:before,\r\n.#{$mdi-css-prefix}-set {\r\n display: inline-block;\r\n font: normal normal normal #{$mdi-fo"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/scss/_extras.scss",
"chars": 1761,
"preview": "$sizes: 18 24 36 48;\r\n@each $size in $sizes {\r\n .#{$mdi-css-prefix}-#{$size}px {\r\n &.#{$mdi-css-prefix}-set,\r\n"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/scss/_functions.scss",
"chars": 512,
"preview": "@function char($character-code) {\r\n @if function-exists(\"selector-append\") {\r\n @return unquote(\"\\\"\\\\#{$charact"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/scss/_icons.scss",
"chars": 207,
"preview": "@each $key, $value in $mdi-icons {\r\n .#{$mdi-css-prefix}-#{$key}:before {\r\n content: char($value);\r\n }\r\n}\r\n"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/scss/_path.scss",
"chars": 713,
"preview": "@font-face {\r\n font-family: '#{$mdi-font-name}';\r\n src: url('#{$mdi-font-path}/#{$mdi-filename}-webfont.eot?v=#{$mdi-v"
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/scss/_variables.scss",
"chars": 58098,
"preview": "$mdi-filename: \"materialdesignicons\";\r\n$mdi-font-name: \"Material Design Icons\";\r\n$mdi-font-family: \""
},
{
"path": "src/Public/mekaeils-package/vendors/iconfonts/mdi/scss/materialdesignicons.scss",
"chars": 165,
"preview": "/* MaterialDesignIcons.com */\r\n@import \"variables\";\r\n@import \"functions\";\r\n@import \"path\";\r\n@import \"core\";\r\n@import \"ic"
},
{
"path": "src/Public/mekaeils-package/vendors/js/vendor.bundle.addons.js",
"chars": 157843,
"preview": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.7.1\n *\n * Copyright 2017 Nick Downie\n * Released under the MIT lice"
},
{
"path": "src/Public/mekaeils-package/vendors/js/vendor.bundle.base.js",
"chars": 174615,
"preview": "/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(a,b){\"use strict\";\"object"
},
{
"path": "src/Repository/Contracts/BaseRepositoryInterface.php",
"chars": 636,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Contracts;\n\ninterface BaseRepositoryInterface \n{\n public fu"
},
{
"path": "src/Repository/Contracts/DepartmentRepositoryInterface.php",
"chars": 146,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Contracts;\n\ninterface DepartmentRepositoryInterface extends Ba"
},
{
"path": "src/Repository/Contracts/PermissionRepositoryInterface.php",
"chars": 146,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Contracts;\n\ninterface PermissionRepositoryInterface extends Ba"
},
{
"path": "src/Repository/Contracts/RoleRepositoryInterface.php",
"chars": 140,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Contracts;\n\ninterface RoleRepositoryInterface extends BaseRepo"
},
{
"path": "src/Repository/Contracts/UserRepositoryInterface.php",
"chars": 224,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Contracts;\n\ninterface UserRepositoryInterface extends BaseRepo"
},
{
"path": "src/Repository/Eloquents/BaseEloquentRepository.php",
"chars": 2180,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Eloquents;\n\nuse Mekaeil\\LaravelUserManagement\\Repository\\Contr"
},
{
"path": "src/Repository/Eloquents/DepartmentRepository.php",
"chars": 696,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Eloquents;\n\nuse App\\Entities\\Department;\nuse Mekaeil\\LaravelUs"
},
{
"path": "src/Repository/Eloquents/PermissionRepository.php",
"chars": 1212,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Eloquents;\n\nuse App\\Entities\\Permission;\nuse App\\Entities\\Role"
},
{
"path": "src/Repository/Eloquents/RoleRepository.php",
"chars": 954,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Eloquents;\n\nuse App\\Entities\\Role;\nuse Mekaeil\\LaravelUserMana"
},
{
"path": "src/Repository/Eloquents/UserRepository.php",
"chars": 1150,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Repository\\Eloquents;\n\nuse App\\Entities\\User;\nuse Mekaeil\\LaravelUserMana"
},
{
"path": "src/Resource/js/mekaeils-package/assets/demo.css",
"chars": 2885,
"preview": ".tim-row{\n margin-bottom: 20px;\n}\n\n.title{\n margin-top: 30px;\n margin-bottom: 25px;\n min-height: 32px;\n}\n\n#t"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_alerts.scss",
"chars": 1999,
"preview": "// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.\n\n.alert {\n border: 0;\n"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_autocomplete.scss",
"chars": 716,
"preview": ".md-menu-content:not(.md-select-menu) .md-menu-content-container .md-list {\n .md-list-item {\n margin: 0 .3125rem;\n\n "
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_badges.scss",
"chars": 1111,
"preview": ".badge {\n display: inline-block;\n border-radius: $border-radius-label;\n padding: 5px 12px;\n text-transform: uppercas"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_buttons.scss",
"chars": 5057,
"preview": ".md-button{\n border: none;\n border-radius: $border-radius-base;\n position: relative;\n margin: .3125rem 1px;\n"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_cards.scss",
"chars": 10739,
"preview": ".md-card{\n display: inline-block;\n position: relative;\n width: 100%;\n margin: 30px 0;\n overflow: unset;\n\n"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_carousel.scss",
"chars": 1283,
"preview": ".VueCarousel-pagination {\n position: absolute;\n bottom: 5px;\n margin-bottom: 15px;\n}\n\n.VueCarousel-wrapper {\n border"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_checkboxes.scss",
"chars": 1007,
"preview": ".md-checkbox{\n .md-checkbox-container{\n border: 1px solid rgba(0, 0, 0, .54);\n border-radius: 3px;\n\n .md-rippl"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_colors.scss",
"chars": 9492,
"preview": "@import \"~vue-material/dist/theme/engine\"; // Import the theme engine\n\n@include md-register-theme(\"selection-black\", (\n "
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_datepicker.scss",
"chars": 1882,
"preview": ".md-datepicker-body-header{\n .md-icon-button{\n background-color: transparent !important;\n box-shadow: none !impor"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_dialogs.scss",
"chars": 1728,
"preview": ".modal-mask {\n position: fixed;\n z-index: 9998;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_dropdown.scss",
"chars": 3038,
"preview": ".dropdown-menu{\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_example-pages.scss",
"chars": 3198,
"preview": ".index-page{\n .section-components h6.description{\n margin-top: 5px;\n margin-bottom: 30px;\n }\n\n .p"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_footers.scss",
"chars": 1052,
"preview": "footer{\n padding: $padding-base 0;\n\n nav,\n .copyright{\n display: inline-block;\n }\n\n ul{\n padding:"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_headers.scss",
"chars": 1465,
"preview": ".page-header{\n height: 100vh;\n background-position: center center;\n background-size: cover;\n margin: 0;\n "
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_images.scss",
"chars": 270,
"preview": ".img-thumbnail{\n border-radius: 16px;\n}\n.img-raised{\n @include shadow-big-image();\n}\n\n.rounded{\n border-radius:"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_info-areas.scss",
"chars": 1034,
"preview": ".info{\n max-width: 360px;\n margin: 0 auto;\n padding: 70px 0 30px;\n\n .icon{\n color: $gray-color;\n\n "
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_inputs.scss",
"chars": 5073,
"preview": "// -----\n// Inputs\n.md-field{\n\n .md-input,\n .md-textarea{\n height: 36px;\n padding: 7px 0;\n font-size: 14px !i"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_layout.scss",
"chars": 64,
"preview": ".md-layout-item{\n padding-right: 15px;\n padding-left: 15px;\n}\n"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_misc.scss",
"chars": 2462,
"preview": "body {\n background-color: #EEEEEE;\n letter-spacing: unset;\n font-size: 1rem;\n color: $black-color;\n line-height: 1."
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_mixins.scss",
"chars": 9476,
"preview": "//Utilities\n\n@import \"mixins/transparency\";\n@import \"mixins/vendor-prefixes\";\n\n// Placeholder text\n@mixin material-place"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_navbars.scss",
"chars": 7559,
"preview": ".md-toolbar {\n min-height: 56px;\n padding: 10px 15px;\n justify-content: center;\n border-radius: 3px;\n margin-bottom"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_pagination.scss",
"chars": 2932,
"preview": ".page-link{\n position: relative;\n display: block;\n padding: .5rem .75rem;\n margin-left: 0;\n line-height: 1.25;\n co"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_pills.scss",
"chars": 2494,
"preview": ".nav-pills{\n\n .section-dark &,\n .section-image &{\n > li > a{\n color: $gray-color;\n }\n "
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_popups.scss",
"chars": 3378,
"preview": ".md-tooltip,\n.popover{\n padding: 10px 15px;\n min-width: 140px;\n max-width: 200px;\n height: auto;\n text-align: cente"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_progress.scss",
"chars": 441,
"preview": ".md-progress-bar{\n height: 4px;\n margin-bottom: 20px;\n\n &.md-rose{\n @include md-progress-bar($brand-rose);\n }\n &"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_radios.scss",
"chars": 1149,
"preview": ".md-radio{\n\n .md-radio-label{\n padding-left: 10px;\n color: #aaa;\n font-size: .875rem;\n font-weight: 400;\n "
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_responsive.scss",
"chars": 9456,
"preview": "@media (min-width: 992px){\n .md-toolbar-toggle{\n display: none;\n }\n\n .footer:not(.footer-big){\n nav"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_shadows.scss",
"chars": 5091,
"preview": "// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.\n\n@mixin shadow-z-1(){\n b"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_tables.scss",
"chars": 1350,
"preview": ".md-table-cell-container{\n padding: 0;\n .md-table-cell:last-child &{\n padding-right: 0;\n text-align: right;\n "
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_tabs.scss",
"chars": 1488,
"preview": ".md-tabs-navigation{\n @include shadow-big();\n margin: -50px -15px 0 -15px;\n border-radius: $border-radius-base;\n pad"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_togglebutton.scss",
"chars": 906,
"preview": ".md-switch .md-switch-thumb .md-ripple,\n.md-switch .md-switch-thumb:before {\n overflow: hidden;\n}\n\n.md-switch {\n displ"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_typography.scss",
"chars": 1526,
"preview": "body, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4 {\n font-family: $font-family-sans-serif;\n font-weight: 300;\n}\n\nh1,h2,"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/_variables.scss",
"chars": 40474,
"preview": "// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.\n\n@import '_colors';\n\n// T"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/mixins/_transparency.scss",
"chars": 370,
"preview": "// Opacity\n\n@mixin opacity($opacity) {\n opacity: $opacity;\n // IE8 filter\n $opacity-ie: ($opacity * 100);\n filter: #"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/mixins/_vendor-prefixes.scss",
"chars": 5930,
"preview": "// User select\n// For selecting text on the page\n\n@mixin user-select($select) {\n -webkit-user-select: $select;\n -mo"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/plugins/_perfect-scrollbar.scss",
"chars": 5807,
"preview": "/* perfect-scrollbar v0.6.13 */\n.ps-container {\n -ms-touch-action: auto;\n touch-action: auto;\n overflow: hidden !impo"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit/plugins/_plugin-nouislider.scss",
"chars": 6566,
"preview": "/*! nouislider - 11.1.0 - 2018-04-02 11:18:13 */\n/* Functional styling;\n * These styles are required for noUiSlider to f"
},
{
"path": "src/Resource/js/mekaeils-package/assets/scss/material-kit.scss",
"chars": 1797,
"preview": "/*!\n\n =========================================================\n * Vue Material Kit - v1.2.0\n =========================="
},
{
"path": "src/Resource/js/mekaeils-package/layout/MainFooter.vue",
"chars": 1165,
"preview": "<template>\n <footer\n class=\"footer\"\n :class=\"{ [`footer-${type}`]: type }\"\n :data-background-color=\"background"
},
{
"path": "src/Resource/js/mekaeils-package/layout/MainNavbar.vue",
"chars": 8804,
"preview": "<template>\n <md-toolbar\n id=\"toolbar\"\n md-elevation=\"0\"\n class=\"md-transparent md-absolute\"\n :class=\"extraN"
},
{
"path": "src/Resource/js/mekaeils-package/layout/MobileMenu.vue",
"chars": 322,
"preview": "<template>\n <md-list\n class=\"nav-mobile-menu nav-mobile-section-start\"\n v-if=\"navMobileSectionStart === 'true'\"\n "
},
{
"path": "src/Resource/js/mekaeils-package/main.js",
"chars": 963,
"preview": "// =========================================================\n// * Vue Material Kit - v1.2.0\n// ========================="
},
{
"path": "src/Resource/js/mekaeils-package/plugins/globalComponents.js",
"chars": 466,
"preview": "import { DropDown } from \"../views/components/Widgets\";\nimport { Parallax } from \"../views/components/Widgets\";\nimport {"
},
{
"path": "src/Resource/js/mekaeils-package/plugins/globalDirectives.js",
"chars": 300,
"preview": "import { directive as vClickOutside } from \"vue-clickaway\";\n\n/**\n * You can register global components here and use them"
},
{
"path": "src/Resource/js/mekaeils-package/plugins/globalMixins.js",
"chars": 467,
"preview": "/**\n * You can register global mixins here\n */\n\nconst GlobalMixins = {\n install(Vue) {\n Vue.mixin({\n mounted() "
},
{
"path": "src/Resource/js/mekaeils-package/plugins/material-kit.js",
"chars": 727,
"preview": "import VueMaterial from \"vue-material\";\nimport \"vue-material/dist/vue-material.min.css\";\nimport \"../assets/scss/material"
},
{
"path": "src/Resource/js/mekaeils-package/router.js",
"chars": 1966,
"preview": "import Vue from \"vue\";\nimport Router from \"vue-router\";\nimport MaterialKit from \"./views/Index.vue\";\nimport Index from \""
},
{
"path": "src/Resource/js/mekaeils-package/views/App.vue",
"chars": 454,
"preview": "<template>\n <div id=\"material-kit\">\n\n <div class=\"wrapper\" style=\"margin:5em auto;\">\n <div class=\"main mai"
},
{
"path": "src/Resource/js/mekaeils-package/views/Index.vue",
"chars": 14085,
"preview": "<template>\n <div id=\"material-kit\">\n <div :class=\"{ 'nav-open': NavbarStore.showNavbar }\">\n\n <div class=\"wrappe"
},
{
"path": "src/Resource/js/mekaeils-package/views/Landing.vue",
"chars": 12639,
"preview": "<template>\n <div class=\"wrapper\">\n <parallax class=\"section page-header header-filter\" :style=\"headerStyle\">\n <"
},
{
"path": "src/Resource/js/mekaeils-package/views/Login.vue",
"chars": 2640,
"preview": "<template>\n <div class=\"wrapper\">\n <div class=\"section page-header header-filter\" :style=\"headerStyle\">\n <div c"
},
{
"path": "src/Resource/js/mekaeils-package/views/Profile.vue",
"chars": 6179,
"preview": "<template>\n <div class=\"wrapper\">\n <parallax\n class=\"section page-header header-filter\"\n :style=\"headerSty"
},
{
"path": "src/Resource/js/mekaeils-package/views/Register.vue",
"chars": 2799,
"preview": "<template>\n <div class=\"wrapper\">\n <div class=\"section page-header header-filter\" :style=\"headerStyle\">\n <div c"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/BasicElementsSection.vue",
"chars": 9022,
"preview": "<template>\n <div class=\"wrapper\">\n <div id=\"buttons\">\n <div class=\"title\">\n <h3>\n Buttons <br /"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/JavascriptComponentsSection.vue",
"chars": 7760,
"preview": "<template>\n <div class=\"wrapper\">\n <div id=\"javascriptComponents\">\n <div class=\"title\">\n <h2>Javascript "
},
{
"path": "src/Resource/js/mekaeils-package/views/components/LaravelUserManagement.vue",
"chars": 2843,
"preview": "<template>\n \n <div class=\"container\">\n <div class=\"title text-center\">\n <h1>\n <b"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/NavPillsSection.vue",
"chars": 3113,
"preview": "<template>\n <div class=\"wrapper\">\n <div id=\"navigation-pills\">\n <div class=\"title\">\n <h3>Navigation Pill"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/NavigationSection.vue",
"chars": 11276,
"preview": "<template>\n <div class=\"wrapper\">\n <div id=\"navigation\">\n <div class=\"navigation-example\" :style=\"bgImage\">\n "
},
{
"path": "src/Resource/js/mekaeils-package/views/components/NotificationsSection.vue",
"chars": 2610,
"preview": "<template>\n <div class=\"wrapper\">\n <div id=\"notifications\">\n <div class=\"alert alert-info\">\n <div class="
},
{
"path": "src/Resource/js/mekaeils-package/views/components/SmallNavigationSection.vue",
"chars": 7596,
"preview": "<template>\n <div class=\"wrapper\">\n <div id=\"menu\">\n <div class=\"md-layout\">\n <div class=\"md-layout-item "
},
{
"path": "src/Resource/js/mekaeils-package/views/components/TabsSection.vue",
"chars": 5101,
"preview": "<template>\n <div class=\"wrapper\">\n <div id=\"nav-tabs\">\n <h3>Navigation Tabs</h3>\n <div class=\"md-layout\">\n"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/TypographyImagesSection.vue",
"chars": 7369,
"preview": "<template>\n <div class=\"wrapper\">\n <div id=\"typography\">\n <div class=\"title\">\n <h2>Typography</h2>\n "
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/Badge.vue",
"chars": 600,
"preview": "<template>\n <component :is=\"tag\" class=\"badge\" :class=\"`badge-${type}`\">\n <slot></slot>\n </component>\n</template>\n<"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/Dropdown.vue",
"chars": 986,
"preview": "<template>\n <div\n :class=\"[\n { open: isOpen },\n { dropdown: direction === 'down' },\n { dropup: direct"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/Modal.vue",
"chars": 1110,
"preview": "<template>\n <transition name=\"modal\">\n <div class=\"modal-mask\">\n <div class=\"modal-wrapper\">\n <div class"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/Pagination.vue",
"chars": 3465,
"preview": "<template>\n <ul class=\"pagination\" :class=\"paginationClass\">\n <li\n class=\"page-item prev-page\"\n :class=\"{ "
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/Parallax.vue",
"chars": 1102,
"preview": "<template>\n <div :style=\"styles\">\n <slot></slot>\n </div>\n</template>\n\n<script>\nfunction debounce(func, wait, immedi"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/Tabs.vue",
"chars": 1894,
"preview": "<template>\n <md-card\n class=\"md-card-tabs\"\n :class=\"[\n { 'flex-column': flexColumn },\n { 'nav-pills-ico"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/cards/LoginCard.vue",
"chars": 964,
"preview": "<template>\n <md-card class=\"md-card-login\" :class=\"{ 'md-card-hidden': cardHidden }\">\n <md-card-header :class=\"getCl"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/cards/NavTabsCard.vue",
"chars": 350,
"preview": "<template>\n <md-card\n class=\"md-card-nav-tabs\"\n :class=\"{ 'no-label': noLabel, 'md-card-plain': tabsPlain }\"\n >\n"
},
{
"path": "src/Resource/js/mekaeils-package/views/components/Widgets/index.js",
"chars": 420,
"preview": "import DropDown from \"./Dropdown.vue\";\nimport Parallax from \"./Parallax.vue\";\nimport Pagination from \"./Pagination.vue\";"
},
{
"path": "src/Resource/lang/en/trans.php",
"chars": 1342,
"preview": "<?php\n\nreturn [\n\n 'Forgot_password' => 'Forgot password?',\n 'do_you_have_account' => 'Don\\'t have an acco"
},
{
"path": "src/Resource/views/mekaeils-package/layouts/alert.blade.php",
"chars": 411,
"preview": "\n@if($errors->any())\n <div class=\"col-12\">\n <ul class=\"alert alert-danger\">\n @foreach ($errors->all"
},
{
"path": "src/Resource/views/mekaeils-package/layouts/breadcrumb.blade.php",
"chars": 1053,
"preview": "<div class=\"page-header\">\n <h3 class=\"page-title\">\n {{ isset($pageTitle) ? $pageTitle : '' }}\n </h3>\n <n"
},
{
"path": "src/Resource/views/mekaeils-package/layouts/footer.blade.php",
"chars": 544,
"preview": " <!-- plugins:js -->\n <script src=\"{{ asset('mekaeils-package/vendors/js/vendor.bundle.base.js') }}\"></script>\n "
},
{
"path": "src/Resource/views/mekaeils-package/layouts/header.blade.php",
"chars": 648,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <!-- Required meta tags -->\n <meta charset=\"utf-8\">\n <meta name=\"view"
},
{
"path": "src/Resource/views/mekaeils-package/layouts/side-nav.blade.php",
"chars": 2486,
"preview": " \n<nav class=\"sidebar sidebar-offcanvas\" id=\"sidebar\">\n <ul class=\"nav\">\n \n <li class=\"nav-item\">\n <a c"
},
{
"path": "src/Resource/views/mekaeils-package/layouts/top-nav.blade.php",
"chars": 6433,
"preview": "<nav class=\"navbar default-layout-navbar col-lg-12 col-12 p-0 fixed-top d-flex flex-row\">\n <div class=\"text-center na"
},
{
"path": "src/Resource/views/mekaeils-package/master.blade.php",
"chars": 1465,
"preview": "@include('mekaeils-package.layouts.header')\n\n<div class=\"container-scroller\">\n <!-- partial:partials/_navbar.html -->"
},
{
"path": "src/Resource/views/mekaeils-package/vue/master.blade.php",
"chars": 863,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"utf-8\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=e"
},
{
"path": "src/Resource/views/user-management/auth/layouts/footer.blade.php",
"chars": 207,
"preview": "\n\n </div>\n </div>\n </div>\n </div>\n <!-- content-wrapper ends -->\n </d"
},
{
"path": "src/Resource/views/user-management/auth/layouts/header.blade.php",
"chars": 1216,
"preview": "<!DOCTYPE html>\n<html lang=\"{{ App::getLocale() }}\">\n\n<head>\n <!-- Required meta tags -->\n <meta charset=\"utf-8\">"
},
{
"path": "src/Resource/views/user-management/auth/login.blade.php",
"chars": 1591,
"preview": "@extends('user-management.auth.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('content')\n\n <h4>{{ _"
},
{
"path": "src/Resource/views/user-management/auth/master.blade.php",
"chars": 123,
"preview": "@include('user-management/auth/layouts/header')\n\n @yield('content')\n\n@include('user-management/auth/layouts/footer')"
},
{
"path": "src/Resource/views/user-management/auth/register.blade.php",
"chars": 2014,
"preview": "@extends('user-management.auth.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('content')\n\n <h4>{{ _"
},
{
"path": "src/Resource/views/user-management/department/create.blade.php",
"chars": 2333,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/department/edit.blade.php",
"chars": 2458,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/department/index.blade.php",
"chars": 3226,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/master.blade.php",
"chars": 1466,
"preview": "@include('mekaeils-package.layouts.header')\n\n<div class=\"container-scroller\">\n <!-- partial:partials/_navbar.html -->"
},
{
"path": "src/Resource/views/user-management/permission/create.blade.php",
"chars": 3060,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/permission/edit.blade.php",
"chars": 3131,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/permission/index.blade.php",
"chars": 3860,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/role/create.blade.php",
"chars": 4026,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/role/edit.blade.php",
"chars": 4147,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/role/index.blade.php",
"chars": 3660,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/side-nav.blade.php",
"chars": 1396,
"preview": " \n<nav class=\"sidebar sidebar-offcanvas\" id=\"sidebar\">\n <ul class=\"nav\">\n \n <li class=\"nav-item\">\n <a c"
},
{
"path": "src/Resource/views/user-management/user/create.blade.php",
"chars": 5657,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/user/edit.blade.php",
"chars": 5609,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Resource/views/user-management/user/index.blade.php",
"chars": 5698,
"preview": "@extends('user-management.master')\n\n@section('header')\n @parent\n\n@endsection\n\n@section('breadcrumb')\n @include('me"
},
{
"path": "src/Routes/user_management.php",
"chars": 6958,
"preview": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| LARAVEL USER MANAGEMENT ROUTE\n|-"
},
{
"path": "src/Tests/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "src/UserManagement.php",
"chars": 146,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse PHPUnit\\Framework\\Exception;\n\nc"
},
{
"path": "tests/SampleTest.php",
"chars": 203,
"preview": "<?php\n\nnamespace Mekaeil\\LaravelUserManagement\\Test;\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass sampleTest extends TestCase"
},
{
"path": "tests/bootstrap.php",
"chars": 7,
"preview": "<?php\n"
}
]
About this extraction
This page contains the full source code of the Mekaeil/LaravelUserManagement GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 195 files (1.5 MB), approximately 473.6k tokens, and a symbol index with 469 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.