Compare commits

...

34 Commits

Author SHA1 Message Date
Brady Wetherington
bf6c48d695 Clean up the fieldset experience for custom fields for users 2023-09-21 14:56:29 +01:00
Brady Wetherington
8428b2a04a Merge branch 'has_custom_fields_trait_rebase' into custom_fields_on_user 2023-09-18 13:45:35 +01:00
Brady Wetherington
71e745d966 Clean up this migration so it runs forwards and backwards OK 2023-09-14 21:14:26 +01:00
Brady Wetherington
a3a786f2af Merge branch 'develop' into has_custom_fields_trait_rebase 2023-09-14 20:27:06 +01:00
Brady Wetherington
0086adab86 Refactor out common code for 'custom fields view' partial 2023-09-05 20:45:43 +01:00
Brady Wetherington
0f91e898fd Remove some code duplication 2023-09-05 19:18:04 +01:00
Brady Wetherington
636da2ab5e Wiring up custom fields for users - still some big UI challenges tho 2023-09-05 16:01:53 +01:00
Brady Wetherington
4f182c0a50 Got a chunk of Custom Fields for Users worked out, still needs cleanup 2023-08-31 19:34:25 +01:00
Brady Wetherington
a384d0173a Merge branch 'snipeit_v7_laravel10' into has_custom_fields_trait_rebase 2023-08-30 18:33:17 +01:00
Brady Wetherington
427f8b1522 Merge branch 'develop' into snipeit_v7_laravel10
Upgraded composer due to lockfile conflicts
2023-08-28 16:04:21 +01:00
Brady Wetherington
8902145288 This is a squashed branch of all of the various commits that make up the new HasCustomFields trait.
This should allow us to add custom fields to just about anything we want to within Snipe-IT.

Below are the commits that have been squashed together:

Initial decoupling of custom field behavior from Assets for re-use

Add new DB columns to Custom Fields and fieldsets for 'type'

WIP: trying to figure out UI for custom fields for things other than Assets, find problematic places

Real progress towards getting to where this stuff might actually work...

Fix the table-name determining code for Custom Fields

Getting it closer to where Assets at least work

Rename the trait to it's new, even better name

Solid progress on the new Trait!

WIP: HasCustomFields, still working some stuff out

Got some basics working; creating custom fields and stuff

HasCustomFields now validates and saves

Starting to yank the other boilerplate code as things start to work (!)

Got the start of defaultValuesForCustomField() working

More progress (squash me!)

Add migrations for default_values_for_custom_fields table

WIP: more towards hasCustomFields trait

Progress cleaning up the PR, fixing FIXME's

New, passing HasCustomFieldsTrait test!

Fix date formatter helper for custom fields

Fixed more FIXME's
2023-08-28 13:07:33 +01:00
Brady Wetherington
8b52bad16f Merge branch 'develop' into snipeit_v7_laravel10 2023-08-15 21:25:16 +01:00
Brady Wetherington
daed0b60bc Merge branch 'develop' into snipeit_v7_laravel10 2023-07-31 19:40:56 +01:00
Brady Wetherington
4654f7aa37 Porting Snipe-IT v7 to Laravel v10 2023-07-31 14:07:12 +01:00
Brady Wetherington
70e87dad1c Merge branch 'develop' into snipeit_v7 2023-07-27 16:21:31 +01:00
Brady Wetherington
ba8d8a6f05 Merge branch 'develop' into snipeit_v7 2023-07-20 17:16:04 +01:00
Brady Wetherington
605d267fe8 Merge branch 'develop' into snipeit_v7 2023-07-19 11:47:51 +01:00
Brady Wetherington
8f2a17585e Merge branch 'develop' into snipeit_v7
Had to do a lot of conflict work here, so this could get ugly :(
2023-07-10 16:53:35 +01:00
Brady Wetherington
51424d01a9 Merge branch 'develop' into snipeit_v7 2023-06-28 14:25:33 +01:00
Brady Wetherington
f5ff9b2208 Merge branch 'develop' into snipeit_v7 - 2023-06-12 2023-06-12 16:56:23 +01:00
Brady Wetherington
a9c7dbd17a Shift PHP version requiremeents for Snipe-IT v7 to be php 8.0-8.2 2023-05-17 17:51:02 -07:00
Brady Wetherington
09fdc946a0 Merge branch 'develop' into snipeit_v7
Had to do some asset rebuilds, and a composer update
2023-05-17 17:37:10 -07:00
snipe
31f1bce16b Merge pull request #12958 from uberbrady/snipeit_v7_merge_develop_05_01_2022
Snipeit v7 merge develop 05 01 2022
2023-05-03 10:40:18 -07:00
Brady Wetherington
2f3ddaec20 Merge branch 'develop' into snipeit_v7 2023-05-01 18:09:12 -07:00
snipe
7cd37e6e95 Merge pull request #12957 from uberbrady/fix_webpack_for_v7
Fix webpack for v7
2023-05-01 18:08:46 -07:00
Brady Wetherington
a938009074 Rebuilt assets with new Node and node_modules and package.json 2023-05-01 18:06:51 -07:00
Brady Wetherington
21d08ff742 Whoops! Forgot to commit this before 2023-05-01 18:05:06 -07:00
snipe
da8b41b12a Merge pull request #12956 from uberbrady/upgrade_node_and_packages_for_v7
Updated Node version, and various packages to more recent
2023-05-01 17:33:20 -07:00
Brady Wetherington
6e031727fa Updated Node version, and various packages to more recent 2023-05-01 17:05:10 -07:00
Brady Wetherington
381890b578 Merge branch 'develop' into laravel_v9 2023-04-27 13:56:04 -07:00
Brady Wetherington
71fa6d765f Update to Latest Livewire files 2023-04-18 11:05:35 -07:00
Brady Wetherington
9793130f6c Merge branch 'develop' into laravel_v9 2023-04-18 11:01:00 -07:00
Brady Wetherington
aadfa9aa9c Back out Laravel Vite stuff - we're so far away from that right now 2023-02-21 19:54:14 -08:00
Brady Wetherington
645bba96cd WIP: First stabs at getting Laravel Vite to work; no luck so far :(
Probably going to back out all the 'vite' stuff anyways :/
2023-02-21 19:35:37 -08:00
104 changed files with 12219 additions and 301672 deletions

2
.nvmrc
View File

@@ -1 +1 @@
v12.22.1 v18.16.0

View File

@@ -0,0 +1,77 @@
<?php
namespace App\Helpers;
use Illuminate\Support\Facades\Gate;
/*********************
* These two helper methods are more designed for being re-used with the new HasCustomFields Trait
*
* The 'transform' method is designed for BlahTransformer things that need to return custom field values.
*
* The 'present' method is designed for when you're trying to generate fieldlists for use in Bootstrap tables
* - typically the 'dataTableLayout' method
*
*********************/
class CustomFieldHelper {
static function transform($fieldset, $item) {
if ($fieldset && ($fieldset->fields->count() > 0)) {
$fields_array = [];
foreach ($fieldset->fields as $field) {
if ($field->isFieldDecryptable($item->{$field->db_column})) {
$decrypted = Helper::gracefulDecrypt($field, $item->{$field->db_column});
$value = (Gate::allows('assets.view.encrypted_custom_fields')) ? $decrypted : strtoupper(trans('admin/custom_fields/general.encrypted'));
if ($field->format == 'DATE'){
if (Gate::allows('assets.view.encrypted_custom_fields')){
$value = Helper::getFormattedDateObject($value, 'date', false);
} else {
$value = strtoupper(trans('admin/custom_fields/general.encrypted'));
}
}
$fields_array[$field->name] = [
'field' => e($field->db_column),
'value' => e($value),
'field_format' => $field->format,
'element' => $field->element,
];
} else {
$value = $item->{$field->db_column};
if (($field->format == 'DATE') && (!is_null($value)) && ($value!='')){
$value = Helper::getFormattedDateObject($value, 'date', false);
}
$fields_array[$field->name] = [
'field' => e($field->db_column),
'value' => e($value),
'field_format' => $field->format,
'element' => $field->element,
];
}
return $fields_array;
}
} else {
return new \stdClass; // HACK to force generation of empty object instead of empty list
}
}
static function present($field) {
return [
'field' => 'custom_fields.'.$field->db_column,
'searchable' => true,
'sortable' => true,
'switchable' => true,
'title' => $field->name,
'formatter'=> 'customFieldsFormatter',
'escape' => true,
'class' => ($field->field_encrypted == '1') ? 'css-padlock' : '',
'visible' => ($field->show_in_listview == '1') ? true : false,
];
}
}

View File

@@ -575,6 +575,17 @@ class Helper
return $customfields; return $customfields;
} }
/**
* Get all of the different types of custom fields there are
* TODO - how to make this more general? Or more useful? or more dynamic?
* idea - key of classname, *value* of trans? (thus having to make this a method, which is fine)
*/
static $itemtypes_having_custom_fields = [
0 => \App\Models\Asset::class,
1 => \App\Models\User::class,
// 2 => \App\Models\Accessory::class
];
/** /**
* Get the list of custom field formats in an array to make a dropdown menu * Get the list of custom field formats in an array to make a dropdown menu
* *

View File

@@ -65,7 +65,7 @@ class AssetModelsController extends Controller
'models.deleted_at', 'models.deleted_at',
'models.updated_at', 'models.updated_at',
]) ])
->with('category', 'depreciation', 'manufacturer', 'fieldset.fields.defaultValues') ->with('category', 'depreciation', 'manufacturer')
->withCount('assets as assets_count'); ->withCount('assets as assets_count');
if ($request->input('status')=='deleted') { if ($request->input('status')=='deleted') {

View File

@@ -110,7 +110,7 @@ class AssetsController extends Controller
$filter = json_decode($request->input('filter'), true); $filter = json_decode($request->input('filter'), true);
} }
$all_custom_fields = CustomField::all(); //used as a 'cache' of custom fields throughout this page load $all_custom_fields = CustomField::where('type', Asset::class); //used as a 'cache' of custom fields throughout this page load
foreach ($all_custom_fields as $field) { foreach ($all_custom_fields as $field) {
$allowed_columns[] = $field->db_column_name(); $allowed_columns[] = $field->db_column_name();
} }
@@ -573,42 +573,8 @@ class AssetsController extends Controller
$asset = $request->handleImages($asset); $asset = $request->handleImages($asset);
// Update custom fields in the database. $asset->customFill($request, Auth::user(), true);
// Validation for these fields is handled through the AssetRequest form request
$model = AssetModel::find($request->get('model_id'));
if (($model) && ($model->fieldset)) {
foreach ($model->fieldset->fields as $field) {
// Set the field value based on what was sent in the request
$field_val = $request->input($field->db_column, null);
// If input value is null, use custom field's default value
if ($field_val == null) {
\Log::debug('Field value for '.$field->db_column.' is null');
$field_val = $field->defaultValue($request->get('model_id'));
\Log::debug('Use the default fieldset value of '.$field->defaultValue($request->get('model_id')));
}
// if the field is set to encrypted, make sure we encrypt the value
if ($field->field_encrypted == '1') {
\Log::debug('This model field is encrypted in this fieldset.');
if (Gate::allows('admin')) {
// If input value is null, use custom field's default value
if (($field_val == null) && ($request->has('model_id') != '')) {
$field_val = \Crypt::encrypt($field->defaultValue($request->get('model_id')));
} else {
$field_val = \Crypt::encrypt($request->input($field->db_column));
}
}
}
$asset->{$field->db_column} = $field_val;
}
}
if ($asset->save()) { if ($asset->save()) {
if ($request->get('assigned_user')) { if ($request->get('assigned_user')) {
@@ -668,21 +634,7 @@ class AssetsController extends Controller
$asset = $request->handleImages($asset); $asset = $request->handleImages($asset);
// Update custom fields $asset->customFill($request,Auth::user());
if (($model = AssetModel::find($asset->model_id)) && (isset($model->fieldset))) {
foreach ($model->fieldset->fields as $field) {
if ($request->has($field->db_column)) {
if ($field->field_encrypted == '1') {
if (Gate::allows('admin')) {
$asset->{$field->db_column} = \Crypt::encrypt($request->input($field->db_column));
}
} else {
$asset->{$field->db_column} = $request->input($field->db_column);
}
}
}
}
if ($asset->save()) { if ($asset->save()) {
if (($request->filled('assigned_user')) && ($target = User::find($request->get('assigned_user')))) { if (($request->filled('assigned_user')) && ($target = User::find($request->get('assigned_user')))) {

View File

@@ -35,7 +35,7 @@ class CustomFieldsetsController extends Controller
public function index() public function index()
{ {
$this->authorize('index', CustomField::class); $this->authorize('index', CustomField::class);
$fieldsets = CustomFieldset::withCount('fields as fields_count', 'models as models_count')->get(); $fieldsets = CustomFieldset::withCount('fields as fields_count')->get();
return (new CustomFieldsetsTransformer)->transformCustomFieldsets($fieldsets, $fieldsets->count()); return (new CustomFieldsetsTransformer)->transformCustomFieldsets($fieldsets, $fieldsets->count());
} }
@@ -125,7 +125,7 @@ class CustomFieldsetsController extends Controller
$this->authorize('delete', CustomField::class); $this->authorize('delete', CustomField::class);
$fieldset = CustomFieldset::findOrFail($id); $fieldset = CustomFieldset::findOrFail($id);
$modelsCount = $fieldset->models->count(); $modelsCount = $fieldset->customizables()->count();
$fieldsCount = $fieldset->fields->count(); $fieldsCount = $fieldset->fields->count();
if (($modelsCount > 0) || ($fieldsCount > 0)) { if (($modelsCount > 0) || ($fieldsCount > 0)) {

View File

@@ -13,6 +13,7 @@ use App\Http\Transformers\SelectlistTransformer;
use App\Http\Transformers\UsersTransformer; use App\Http\Transformers\UsersTransformer;
use App\Models\Asset; use App\Models\Asset;
use App\Models\Company; use App\Models\Company;
use App\Models\CustomField;
use App\Models\License; use App\Models\License;
use App\Models\User; use App\Models\User;
use App\Notifications\CurrentInventory; use App\Notifications\CurrentInventory;
@@ -36,7 +37,7 @@ class UsersController extends Controller
{ {
$this->authorize('view', User::class); $this->authorize('view', User::class);
$users = User::select([ $allowed_columns = [
'users.activated', 'users.activated',
'users.created_by', 'users.created_by',
'users.address', 'users.address',
@@ -73,7 +74,12 @@ class UsersController extends Controller
'users.vip', 'users.vip',
'users.autoassign_licenses', 'users.autoassign_licenses',
])->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy',) ];
foreach(CustomField::where('type', User::class)->get() as $field) {
$allowed_columns[] = $field->db_column_name();
}
$users = User::select()->with('manager', 'groups', 'userloc', 'company', 'department', 'assets', 'licenses', 'accessories', 'consumables', 'createdBy',)
->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count'); ->withCount('assets as assets_count', 'licenses as licenses_count', 'accessories as accessories_count', 'consumables as consumables_count');
@@ -368,6 +374,8 @@ class UsersController extends Controller
app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar'); app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar');
$user->customFill($request,Auth::user());
if ($user->save()) { if ($user->save()) {
if ($request->filled('groups')) { if ($request->filled('groups')) {
$user->groups()->sync($request->input('groups')); $user->groups()->sync($request->input('groups'));
@@ -459,6 +467,8 @@ class UsersController extends Controller
app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar'); app('App\Http\Requests\ImageUploadRequest')->handleImages($user, 600, 'image', 'avatars', 'avatar');
$user->customFill($request,Auth::user());
if ($user->save()) { if ($user->save()) {
// Sync group memberships: // Sync group memberships:

View File

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Helpers\Helper; use App\Helpers\Helper;
use App\Http\Requests\ImageUploadRequest; use App\Http\Requests\ImageUploadRequest;
use App\Models\AssetModel; use App\Models\AssetModel;
use App\Models\DefaultValuesForCustomFields;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input; use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\View;
@@ -160,7 +161,7 @@ class AssetModelsController extends Controller
$model->notes = $request->input('notes'); $model->notes = $request->input('notes');
$model->requestable = $request->input('requestable', '0'); $model->requestable = $request->input('requestable', '0');
$this->removeCustomFieldsDefaultValues($model); DefaultValuesForCustomFields::forPivot($model, Asset::class)->delete();
if ($request->input('fieldset_id') == '') { if ($request->input('fieldset_id') == '') {
$model->fieldset_id = null; $model->fieldset_id = null;
@@ -451,7 +452,7 @@ class AssetModelsController extends Controller
} }
/** /**
* Adds default values to a model (as long as they are truthy) * Adds default values to a model (as long as they are truthy) (does this mean I cannot set a default value of 0?)
* *
* @param AssetModel $model * @param AssetModel $model
* @param array $defaultValues * @param array $defaultValues
@@ -486,22 +487,12 @@ class AssetModelsController extends Controller
} }
foreach ($defaultValues as $customFieldId => $defaultValue) { foreach ($defaultValues as $customFieldId => $defaultValue) {
if(is_array($defaultValue)){ if(is_array($defaultValue)) {
$model->defaultValues()->attach($customFieldId, ['default_value' => implode(', ', $defaultValue)]); $defaultValue = implode(', ', $defaultValue);
}elseif ($defaultValue) {
$model->defaultValues()->attach($customFieldId, ['default_value' => $defaultValue]);
} }
DefaultValuesForCustomFields::updateOrCreate(['custom_field_id' => $customFieldId,'item_pivot_id' => $model->id], ['default_value' => $defaultValue]);
} }
return true; return true;
} }
/**
* Removes all default values
*
* @return void
*/
private function removeCustomFieldsDefaultValues(AssetModel $model)
{
$model->defaultValues()->detach();
}
} }

View File

@@ -164,29 +164,7 @@ class AssetsController extends Controller
$asset = $request->handleImages($asset); $asset = $request->handleImages($asset);
} }
// Update custom fields in the database. $asset->customFill($request, Auth::user()); // Update custom fields in the database.
// Validation for these fields is handled through the AssetRequest form request
$model = AssetModel::find($request->get('model_id'));
if (($model) && ($model->fieldset)) {
foreach ($model->fieldset->fields as $field) {
if ($field->field_encrypted == '1') {
if (Gate::allows('admin')) {
if (is_array($request->input($field->db_column))) {
$asset->{$field->db_column} = \Crypt::encrypt(implode(', ', $request->input($field->db_column)));
} else {
$asset->{$field->db_column} = \Crypt::encrypt($request->input($field->db_column));
}
}
} else {
if (is_array($request->input($field->db_column))) {
$asset->{$field->db_column} = implode(', ', $request->input($field->db_column));
} else {
$asset->{$field->db_column} = $request->input($field->db_column);
}
}
}
}
// Validate the asset before saving // Validate the asset before saving
if ($asset->isValid() && $asset->save()) { if ($asset->isValid() && $asset->save()) {

View File

@@ -6,10 +6,12 @@ use App\Helpers\Helper;
use App\Http\Requests\CustomFieldRequest; use App\Http\Requests\CustomFieldRequest;
use App\Models\CustomField; use App\Models\CustomField;
use App\Models\CustomFieldset; use App\Models\CustomFieldset;
use App\Models\User;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Redirect; use Redirect;
/** /**
* This controller handles all actions related to Custom Asset Fields for * This controller handles all actions related to Custom Asset Fields for
* the Snipe-IT Asset Management application. * the Snipe-IT Asset Management application.
@@ -21,6 +23,7 @@ use Redirect;
*/ */
class CustomFieldsController extends Controller class CustomFieldsController extends Controller
{ {
/** /**
* Returns a view with a listing of custom fields. * Returns a view with a listing of custom fields.
* *
@@ -29,12 +32,16 @@ class CustomFieldsController extends Controller
* @return \Illuminate\Support\Facades\View * @return \Illuminate\Support\Facades\View
* @throws \Illuminate\Auth\Access\AuthorizationException * @throws \Illuminate\Auth\Access\AuthorizationException
*/ */
public function index() public function index(Request $request)
{ {
$this->authorize('view', CustomField::class); $this->authorize('view', CustomField::class);
if ( $request->input('tab') == 1 ) {
// Users section, make sure to auto-create the first fieldset if so
CustomFieldset::firstOrCreate(['type' => Helper::$itemtypes_having_custom_fields[1]], ['name' => 'default']);
}
$fieldsets = CustomFieldset::with('fields', 'models')->get(); $fieldsets = CustomFieldset::with('fields')->where("type", Helper::$itemtypes_having_custom_fields[$request->get('tab',0)])->get(); //cannot eager-load 'customizable' because it's not a relation
$fields = CustomField::with('fieldset')->get(); $fields = CustomField::with('fieldset')->where("type", Helper::$itemtypes_having_custom_fields[$request->get('tab',0)])->get();
return view('custom_fields.index')->with('custom_fieldsets', $fieldsets)->with('custom_fields', $fields); return view('custom_fields.index')->with('custom_fieldsets', $fieldsets)->with('custom_fields', $fields);
} }
@@ -67,7 +74,7 @@ class CustomFieldsController extends Controller
public function create(Request $request) public function create(Request $request)
{ {
$this->authorize('create', CustomField::class); $this->authorize('create', CustomField::class);
$fieldsets = CustomFieldset::get(); $fieldsets = CustomFieldset::where('type', Helper::$itemtypes_having_custom_fields[$request->get('tab')])->get();
return view('custom_fields.fields.edit', [ return view('custom_fields.fields.edit', [
'predefinedFormats' => Helper::predefined_formats(), 'predefinedFormats' => Helper::predefined_formats(),
@@ -110,8 +117,10 @@ class CustomFieldsController extends Controller
"display_in_user_view" => $display_in_user_view, "display_in_user_view" => $display_in_user_view,
"auto_add_to_fieldsets" => $request->get("auto_add_to_fieldsets", 0), "auto_add_to_fieldsets" => $request->get("auto_add_to_fieldsets", 0),
"show_in_listview" => $request->get("show_in_listview", 0), "show_in_listview" => $request->get("show_in_listview", 0),
"user_id" => Auth::id() "user_id" => Auth::id(),
]); ]);
// not mass-assignable; must be manual
$field->type = Helper::$itemtypes_having_custom_fields[$request->get('tab')];
if ($request->filled('custom_format')) { if ($request->filled('custom_format')) {
@@ -124,14 +133,17 @@ class CustomFieldsController extends Controller
// Sync fields with fieldsets // Sync fields with fieldsets
$fieldset_array = $request->input('associate_fieldsets'); $fieldset_array = $request->input('associate_fieldsets');
if ($request->has('associate_fieldsets') && (is_array($fieldset_array))) { if ($request->get('tab') == 1 ) {
$fieldset_array = [CustomFieldset::firstOrCreate(['type' => User::class],['name' => 'default'])->id => true];
}
if (($request->has('associate_fieldsets') || $request->get('tab') == 1) && (is_array($fieldset_array))) {
$field->fieldset()->sync(array_keys($fieldset_array)); $field->fieldset()->sync(array_keys($fieldset_array));
} else { } else {
$field->fieldset()->sync([]); $field->fieldset()->sync([]);
} }
return redirect()->route('fields.index')->with('success', trans('admin/custom_fields/message.field.create.success')); return redirect()->route('fields.index',['tab' => $request->get('tab',0)])->with('success', trans('admin/custom_fields/message.field.create.success'));
} }
return redirect()->back()->with('selected_fieldsets', $request->input('associate_fieldsets'))->withInput() return redirect()->back()->with('selected_fieldsets', $request->input('associate_fieldsets'))->withInput()
@@ -184,12 +196,17 @@ class CustomFieldsController extends Controller
if ($field = CustomField::find($field_id)) { if ($field = CustomField::find($field_id)) {
$this->authorize('delete', $field); $this->authorize('delete', $field);
if ($field->type == User::class) {
$field->fieldset()->detach(); // remove from 'default' group (and others, if they exist in the future!)
}
if (($field->fieldset) && ($field->fieldset->count() > 0)) { if (($field->fieldset) && ($field->fieldset->count() > 0)) {
return redirect()->back()->withErrors(['message' => 'Field is in-use']); return redirect()->back()->withErrors(['message' => 'Field is in-use']);
} }
$type = $field->type;
$field->delete(); $field->delete();
return redirect()->route("fields.index") return redirect()->route('fields.index',['tab' => array_search($type, Helper::$itemtypes_having_custom_fields)])
->with("success", trans('admin/custom_fields/message.field.delete.success'));
->with('success', trans('admin/custom_fields/message.field.delete.success'));
} }
return redirect()->back()->withErrors(['message' => 'Field does not exist']); return redirect()->back()->withErrors(['message' => 'Field does not exist']);
@@ -289,7 +306,7 @@ class CustomFieldsController extends Controller
$field->fieldset()->sync([]); $field->fieldset()->sync([]);
} }
return redirect()->route('fields.index')->with('success', trans('admin/custom_fields/message.field.update.success')); return redirect()->route('fields.index',['tab' => $request->get('tab',0)])->with('success', trans('admin/custom_fields/message.field.update.success'));
} }
return redirect()->back()->withInput()->with('error', trans('admin/custom_fields/message.field.update.error')); return redirect()->back()->withInput()->with('error', trans('admin/custom_fields/message.field.update.error'));

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Models\AssetModel; use App\Models\AssetModel;
use App\Models\CustomField; use App\Models\CustomField;
use App\Models\CustomFieldset; use App\Models\CustomFieldset;
@@ -38,7 +39,7 @@ class CustomFieldsetsController extends Controller
* @throws \Illuminate\Auth\Access\AuthorizationException * @throws \Illuminate\Auth\Access\AuthorizationException
* @since [v1.8] * @since [v1.8]
*/ */
public function show($id) public function show( $id)
{ {
$cfset = CustomFieldset::with('fields') $cfset = CustomFieldset::with('fields')
->where('id', '=', $id)->orderBy('id', 'ASC')->first(); ->where('id', '=', $id)->orderBy('id', 'ASC')->first();
@@ -46,7 +47,7 @@ class CustomFieldsetsController extends Controller
$this->authorize('view', $cfset); $this->authorize('view', $cfset);
if ($cfset) { if ($cfset) {
$custom_fields_list = ['' => 'Add New Field to Fieldset'] + CustomField::pluck('name', 'id')->toArray(); $custom_fields_list = ['' => 'Add New Field to Fieldset'] + CustomField::where('type', $cfset->type)->pluck('name', 'id')->toArray();
$maxid = 0; $maxid = 0;
foreach ($cfset->fields as $field) { foreach ($cfset->fields as $field) {
@@ -96,6 +97,8 @@ class CustomFieldsetsController extends Controller
$fieldset = new CustomFieldset([ $fieldset = new CustomFieldset([
'name' => $request->get('name'), 'name' => $request->get('name'),
'user_id' => Auth::user()->id, 'user_id' => Auth::user()->id,
'type' => Helper::$itemtypes_having_custom_fields[$request->get('tab')]
// 'sub' =>
]); ]);
$validator = Validator::make($request->all(), $fieldset->rules); $validator = Validator::make($request->all(), $fieldset->rules);

View File

@@ -133,6 +133,9 @@ class UsersController extends Controller
// we have to invoke the // we have to invoke the
app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar');
\Log::info("About to call customFill, in the 'store' controller!!!");
$user->customFill($request, Auth::user());
if ($user->save()) { if ($user->save()) {
if ($request->filled('groups')) { if ($request->filled('groups')) {
$user->groups()->sync($request->input('groups')); $user->groups()->sync($request->input('groups'));
@@ -300,6 +303,8 @@ class UsersController extends Controller
// Handle uploaded avatar // Handle uploaded avatar
app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar'); app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar');
\Log::debug("calling custom fill from the UPDATE method!");
$user->customFill($request, Auth::user());
//\Log::debug(print_r($user, true)); //\Log::debug(print_r($user, true));
// Was the user updated? // Was the user updated?

View File

@@ -18,13 +18,12 @@ class Kernel extends HttpKernel
\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Session\Middleware\StartSession::class, \Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Fideloper\Proxy\TrustProxies::class,
\App\Http\Middleware\CheckForSetup::class, \App\Http\Middleware\CheckForSetup::class,
\App\Http\Middleware\CheckForDebug::class, \App\Http\Middleware\CheckForDebug::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\SecurityHeaders::class, \App\Http\Middleware\SecurityHeaders::class,
\App\Http\Middleware\PreventBackHistory::class, \App\Http\Middleware\PreventBackHistory::class,
\Fruitcake\Cors\HandleCors::class, \Illuminate\Http\Middleware\HandleCors::class,
]; ];

View File

@@ -2,6 +2,8 @@
namespace App\Http\Livewire; namespace App\Http\Livewire;
use App\Models\Asset;
use App\Models\DefaultValuesForCustomFields;
use Livewire\Component; use Livewire\Component;
use App\Models\CustomFieldset; use App\Models\CustomFieldset;
@@ -30,7 +32,7 @@ class CustomFieldSetDefaultValuesForModel extends Component
$this->fields = CustomFieldset::find($this->fieldset_id)->fields; $this->fields = CustomFieldset::find($this->fieldset_id)->fields;
} }
$this->add_default_values = ($this->model->defaultValues->count() > 0); $this->add_default_values = (DefaultValuesForCustomFields::forPivot($this->model, Asset::class)->count() > 0);
} }
public function updatedFieldsetId() public function updatedFieldsetId()

View File

@@ -100,7 +100,7 @@ class Importer extends Component
if ($type == "asset") { if ($type == "asset") {
// add Custom Fields after a horizontal line // add Custom Fields after a horizontal line
$results['-'] = "———" . trans('admin/custom_fields/general.custom_fields') . "———’"; $results['-'] = "———" . trans('admin/custom_fields/general.custom_fields') . "———’";
foreach (CustomField::orderBy('name')->get() as $field) { foreach (CustomField::where('type', \App\Models\Asset::class)->orderBy('name')->get() as $field) { // TODO - generalize?
$results[$field->db_column_name()] = $field->name; $results[$field->db_column_name()] = $field->name;
} }
} }

View File

@@ -2,7 +2,7 @@
namespace App\Http\Middleware; namespace App\Http\Middleware;
use Fideloper\Proxy\TrustProxies as Middleware; use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class TrustProxies extends Middleware class TrustProxies extends Middleware
@@ -10,7 +10,7 @@ class TrustProxies extends Middleware
/** /**
* The trusted proxies for this application. * The trusted proxies for this application.
* *
* @var array|string|null * @var array<int, string>|string|null
*/ */
protected $proxies; protected $proxies;
@@ -19,5 +19,10 @@ class TrustProxies extends Middleware
* *
* @var int * @var int
*/ */
protected $headers = Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_AWS_ELB; protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
} }

View File

@@ -34,12 +34,14 @@ class CustomFieldRequest extends FormRequest
case 'POST': case 'POST':
{ {
$rules['name'] = 'required|unique:custom_fields'; $rules['name'] = 'required|unique:custom_fields';
$rules['tab'] = 'required';
break; break;
} }
// Save all fields // Save all fields
case 'PUT': case 'PUT':
$rules['name'] = 'required'; $rules['name'] = 'required';
$rules['tab'] = 'required';
break; break;
// Save only what's passed // Save only what's passed

View File

@@ -2,6 +2,7 @@
namespace App\Http\Transformers; namespace App\Http\Transformers;
use App\Helpers\CustomFieldHelper;
use App\Helpers\Helper; use App\Helpers\Helper;
use App\Models\Asset; use App\Models\Asset;
use App\Models\Setting; use App\Models\Setting;
@@ -96,49 +97,7 @@ class AssetsTransformer
]; ];
if (($asset->model) && ($asset->model->fieldset) && ($asset->model->fieldset->fields->count() > 0)) { $array['custom_fields'] = CustomFieldHelper::transform($asset->model->fieldset,$asset);
$fields_array = [];
foreach ($asset->model->fieldset->fields as $field) {
if ($field->isFieldDecryptable($asset->{$field->db_column})) {
$decrypted = Helper::gracefulDecrypt($field, $asset->{$field->db_column});
$value = (Gate::allows('assets.view.encrypted_custom_fields')) ? $decrypted : strtoupper(trans('admin/custom_fields/general.encrypted'));
if ($field->format == 'DATE'){
if (Gate::allows('assets.view.encrypted_custom_fields')){
$value = Helper::getFormattedDateObject($value, 'date', false);
} else {
$value = strtoupper(trans('admin/custom_fields/general.encrypted'));
}
}
$fields_array[$field->name] = [
'field' => e($field->db_column),
'value' => e($value),
'field_format' => $field->format,
'element' => $field->element,
];
} else {
$value = $asset->{$field->db_column};
if (($field->format == 'DATE') && (!is_null($value)) && ($value!='')){
$value = Helper::getFormattedDateObject($value, 'date', false);
}
$fields_array[$field->name] = [
'field' => e($field->db_column),
'value' => e($value),
'field_format' => $field->format,
'element' => $field->element,
];
}
$array['custom_fields'] = $fields_array;
}
} else {
$array['custom_fields'] = new \stdClass; // HACK to force generation of empty object instead of empty list
}
$permissions_array['available_actions'] = [ $permissions_array['available_actions'] = [
'checkout' => ($asset->deleted_at=='' && Gate::allows('checkout', Asset::class)) ? true : false, 'checkout' => ($asset->deleted_at=='' && Gate::allows('checkout', Asset::class)) ? true : false,

View File

@@ -3,6 +3,8 @@
namespace App\Http\Transformers; namespace App\Http\Transformers;
use App\Helpers\Helper; use App\Helpers\Helper;
use App\Models\Asset;
use App\Models\AssetModel;
use App\Models\CustomFieldset; use App\Models\CustomFieldset;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
@@ -21,8 +23,13 @@ class CustomFieldsetsTransformer
public function transformCustomFieldset(CustomFieldset $fieldset) public function transformCustomFieldset(CustomFieldset $fieldset)
{ {
$fields = $fieldset->fields; $fields = $fieldset->fields;
$models = $fieldset->models; $models = [];
$modelsArray = []; $modelsArray = [];
if ($fieldset->type == Asset::class) {
\Log::debug("Item pivot id is: ".$fieldset->item_pivot_id);
$models = AssetModel::where('fieldset_id', $fieldset->id)->get();
\Log::debug("And the models object count is: ".$models->count());
}
foreach ($models as $model) { foreach ($models as $model) {
$modelsArray[] = [ $modelsArray[] = [
@@ -30,15 +37,21 @@ class CustomFieldsetsTransformer
'name' => e($model->name), 'name' => e($model->name),
]; ];
} }
\Log::debug("Models array is: ".print_r($modelsArray,true));
$array = [ $array = [
'id' => (int) $fieldset->id, 'id' => (int) $fieldset->id,
'name' => e($fieldset->name), 'name' => e($fieldset->name),
'fields' => (new CustomFieldsTransformer)->transformCustomFields($fields, $fieldset->fields_count), 'fields' => (new CustomFieldsTransformer)->transformCustomFields($fields, $fieldset->fields_count),
'models' => (new DatatablesTransformer)->transformDatatables($modelsArray, $fieldset->models_count), 'customizables' => (new DatatablesTransformer)->transformDatatables($fieldset->customizables(),count($fieldset->customizables())),
'created_at' => Helper::getFormattedDateObject($fieldset->created_at, 'datetime'), 'created_at' => Helper::getFormattedDateObject($fieldset->created_at, 'datetime'),
'updated_at' => Helper::getFormattedDateObject($fieldset->updated_at, 'datetime'), 'updated_at' => Helper::getFormattedDateObject($fieldset->updated_at, 'datetime'),
'type' => $fieldset->type,
]; ];
if ($fieldset->type == Asset::class) {
// TODO - removeme - legacy column just for Assets?
$array['models'] = (new DatatablesTransformer)->transformDatatables($modelsArray, count($modelsArray));
}
return $array; return $array;
} }

View File

@@ -2,7 +2,10 @@
namespace App\Http\Transformers; namespace App\Http\Transformers;
use App\Helpers\CustomFieldHelper;
use App\Helpers\Helper; use App\Helpers\Helper;
use App\Models\CustomField;
use App\Models\CustomFieldset;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Gate;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
@@ -77,6 +80,8 @@ class UsersTransformer
'deleted_at' => ($user->deleted_at) ? Helper::getFormattedDateObject($user->deleted_at, 'datetime') : null, 'deleted_at' => ($user->deleted_at) ? Helper::getFormattedDateObject($user->deleted_at, 'datetime') : null,
]; ];
$array['custom_fields'] = CustomFieldHelper::transform(CustomFieldset::where('type',User::class)->first(), $user);
$permissions_array['available_actions'] = [ $permissions_array['available_actions'] = [
'update' => (Gate::allows('update', User::class) && ($user->deleted_at == '')), 'update' => (Gate::allows('update', User::class) && ($user->deleted_at == '')),
'delete' => (Gate::allows('delete', User::class) && ($user->assets_count == 0) && ($user->licenses_count == 0) && ($user->accessories_count == 0)), 'delete' => (Gate::allows('delete', User::class) && ($user->assets_count == 0) && ($user->licenses_count == 0) && ($user->accessories_count == 0)),

View File

@@ -23,19 +23,20 @@ class AssetImporter extends ItemImporter
// ItemImporter handles the general fetching. // ItemImporter handles the general fetching.
parent::handle($row); parent::handle($row);
// FIXME : YUP!!!!! This shit needs to go (?) Yeah?
if ($this->customFields) { if ($this->customFields) {
foreach ($this->customFields as $customField) { foreach ($this->customFields as $customField) {
$customFieldValue = $this->array_smart_custom_field_fetch($row, $customField); $customFieldValue = $this->array_smart_custom_field_fetch($row, $customField); // TODO/FIXME - this might require a new 'mode' on customFill()?
if ($customFieldValue) { if ($customFieldValue) {
if ($customField->field_encrypted == 1) { if ($customField->field_encrypted == 1) { // FIXME - repeated code.
$this->item['custom_fields'][$customField->db_column_name()] = \Crypt::encrypt($customFieldValue); $this->item['custom_fields'][$customField->db_column_name()] = \Crypt::encrypt($customFieldValue);
$this->log('Custom Field '.$customField->name.': '.\Crypt::encrypt($customFieldValue)); $this->log('Custom Field '.$customField->name.': '.\Crypt::encrypt($customFieldValue));
} else { } else {
$this->item['custom_fields'][$customField->db_column_name()] = $customFieldValue; $this->item['custom_fields'][$customField->db_column_name()] = $customFieldValue;
$this->log('Custom Field '.$customField->name.': '.$customFieldValue); $this->log('Custom Field '.$customField->name.': '.$customFieldValue);
} }
} else { } else { // FIXME - think this through? Do we want to blank this? Is that how other stuff works?
// Clear out previous data. // Clear out previous data.
$this->item['custom_fields'][$customField->db_column_name()] = null; $this->item['custom_fields'][$customField->db_column_name()] = null;
} }

View File

@@ -120,7 +120,7 @@ abstract class Importer
* @author Daniel Meltzer * @author Daniel Meltzer
* @since 5.0 * @since 5.0
*/ */
protected function populateCustomFields($headerRow) protected function populateCustomFields($headerRow) // FIXME - what in the actual fuck is this.
{ {
// Stolen From https://adamwathan.me/2016/07/14/customizing-keys-when-mapping-collections/ // Stolen From https://adamwathan.me/2016/07/14/customizing-keys-when-mapping-collections/
// This 'inverts' the fields such that we have a collection of fields indexed by name. // This 'inverts' the fields such that we have a collection of fields indexed by name.

View File

@@ -9,6 +9,8 @@ use App\Helpers\Helper;
use App\Http\Traits\UniqueSerialTrait; use App\Http\Traits\UniqueSerialTrait;
use App\Http\Traits\UniqueUndeletedTrait; use App\Http\Traits\UniqueUndeletedTrait;
use App\Models\Traits\Acceptable; use App\Models\Traits\Acceptable;
use App\Models\Traits\Customizable;
use App\Models\Traits\HasCustomFields;
use App\Models\Traits\Searchable; use App\Models\Traits\Searchable;
use App\Presenters\Presentable; use App\Presenters\Presentable;
use AssetPresenter; use AssetPresenter;
@@ -18,6 +20,7 @@ use DB;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Watson\Validating\ValidatingTrait; use Watson\Validating\ValidatingTrait;
@@ -38,8 +41,19 @@ class Asset extends Depreciable
public const ASSET = 'asset'; public const ASSET = 'asset';
public const USER = 'user'; public const USER = 'user';
use Acceptable; use Acceptable, HasCustomFields;
public function getFieldsetKey(): object|int|null {
return $this->model;
}
public static function getFieldsetUsers(int $fieldset_id): array {
$models = [];
foreach(AssetModel::where("fieldset_id",$fieldset_id)->get() as $model) {
$models[route('models.show', $model->id)] = $model->name.(($model->model_number) ? ' ('.$model->model_number.')' : '');
}
return $models;
}
/** /**
* Run after the checkout acceptance was declined by the user * Run after the checkout acceptance was declined by the user
* *
@@ -188,40 +202,6 @@ class Asset extends Depreciable
$this->attributes['expected_checkin'] = $value; $this->attributes['expected_checkin'] = $value;
} }
/**
* This handles the custom field validation for assets
*
* @var array
*/
public function save(array $params = [])
{
if ($this->model_id != '') {
$model = AssetModel::find($this->model_id);
if (($model) && ($model->fieldset)) {
foreach ($model->fieldset->fields as $field){
if($field->format == 'BOOLEAN'){
$this->{$field->db_column} = filter_var($this->{$field->db_column}, FILTER_VALIDATE_BOOLEAN);
}
}
$this->rules += $model->fieldset->validation_rules();
foreach ($this->model->fieldset->fields as $field){
if($field->format == 'BOOLEAN'){
$this->{$field->db_column} = filter_var($this->{$field->db_column}, FILTER_VALIDATE_BOOLEAN);
}
}
}
}
return parent::save($params);
}
public function getDisplayNameAttribute() public function getDisplayNameAttribute()
{ {
return $this->present()->name(); return $this->present()->name();
@@ -1523,7 +1503,7 @@ class Asset extends Depreciable
* *
* In short, this set of statements tells the query builder to ONLY query against an * In short, this set of statements tells the query builder to ONLY query against an
* actual field that's being passed if it doesn't meet known relational fields. This * actual field that's being passed if it doesn't meet known relational fields. This
* allows us to query custom fields directly in the assetsv table * allows us to query custom fields directly in the assets table
* (regardless of their name) and *skip* any fields that we already know can only be * (regardless of their name) and *skip* any fields that we already know can only be
* searched through relational searches that we do earlier in this method. * searched through relational searches that we do earlier in this method.
* *

View File

@@ -150,6 +150,7 @@ class AssetModel extends SnipeModel
*/ */
public function fieldset() public function fieldset()
{ {
// this is actually OK - we don't *need* to do this, but it's okay to make references from Model to fieldset
return $this->belongsTo(\App\Models\CustomFieldset::class, 'fieldset_id'); return $this->belongsTo(\App\Models\CustomFieldset::class, 'fieldset_id');
} }
@@ -158,18 +159,6 @@ class AssetModel extends SnipeModel
return $this->fieldset()->first()->fields(); return $this->fieldset()->first()->fields();
} }
/**
* Establishes the model -> custom field default values relationship
*
* @author hannah tinkler
* @since [v4.3]
* @return \Illuminate\Database\Eloquent\Relations\Relation
*/
public function defaultValues()
{
return $this->belongsToMany(\App\Models\CustomField::class, 'models_custom_fields')->withPivot('default_value');
}
/** /**
* Gets the full url for the image * Gets the full url for the image
* *

View File

@@ -16,7 +16,7 @@ class CustomField extends Model
UniqueUndeletedTrait; UniqueUndeletedTrait;
/** /**
* Custom field predfined formats * Custom field predefined formats
* *
* @var array * @var array
*/ */
@@ -53,6 +53,7 @@ class CustomField extends Model
'field_encrypted' => 'nullable|boolean', 'field_encrypted' => 'nullable|boolean',
'auto_add_to_fieldsets' => 'boolean', 'auto_add_to_fieldsets' => 'boolean',
'show_in_listview' => 'boolean', 'show_in_listview' => 'boolean',
'type' => 'required'
]; ];
/** /**
@@ -75,30 +76,19 @@ class CustomField extends Model
]; ];
/**
* This is confusing, since it's actually the custom fields table that
* we're usually modifying, but since we alter the assets table, we have to
* say that here, otherwise the new fields get added onto the custom fields
* table instead of the assets table.
*
* @author [Brady Wetherington] [<uberbrady@gmail.com>]
* @since [v3.0]
*/
public static $table_name = 'assets';
/** /**
* Convert the custom field's name property to a db-safe string. * Convert the custom field's name property to a db-safe string.
* *
* We could probably have used str_slug() here but not sure what it would * We could probably have used str_slug() here but not sure what it would
* do with previously existing values. - @snipe * do with previously existing values. - @snipe
* *
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.4]
* @return string * @return string
* @since [v3.4]
* @author [A. Gianotto] [<snipe@snipe.net>]
*/ */
public static function name_to_db_name($name) public static function name_to_db_name($name)
{ {
return '_snipeit_'.preg_replace('/[^a-zA-Z0-9]/', '_', strtolower($name)); return '_snipeit_' . preg_replace('/[^a-zA-Z0-9]/', '_', strtolower($name));
} }
/** /**
@@ -109,23 +99,22 @@ class CustomField extends Model
* if they have changed, so we handle that here so that we don't have to remember * if they have changed, so we handle that here so that we don't have to remember
* to do it in the controllers. * to do it in the controllers.
* *
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.4]
* @return bool * @return bool
* @since [v3.4]
* @author [A. Gianotto] [<snipe@snipe.net>]
*/ */
public static function boot() public static function boot()
{ {
parent::boot(); parent::boot();
self::created(function ($custom_field) { self::created(function ($custom_field) {
// Column already exists on the assets table - nothing to do here. // Column already exists on the assets table - nothing to do here.
// This *shouldn't* happen in the wild. // This *shouldn't* happen in the wild.
if (Schema::hasColumn(self::$table_name, $custom_field->db_column)) { if (Schema::hasColumn($custom_field->getTableName(), $custom_field->db_column)) {
return false; return false;
} }
// Update the column name in the assets table // Update the column name in the assets table
Schema::table(self::$table_name, function ($table) use ($custom_field) { Schema::table($custom_field->getTableName(), function ($table) use ($custom_field) {
$table->text($custom_field->convertUnicodeDbSlug())->nullable(); $table->text($custom_field->convertUnicodeDbSlug())->nullable();
}); });
@@ -138,7 +127,7 @@ class CustomField extends Model
// Column already exists on the assets table - nothing to do here. // Column already exists on the assets table - nothing to do here.
if ($custom_field->isDirty('name')) { if ($custom_field->isDirty('name')) {
if (Schema::hasColumn(self::$table_name, $custom_field->convertUnicodeDbSlug())) { if (Schema::hasColumn($custom_field->getTableName(), $custom_field->convertUnicodeDbSlug())) {
return true; return true;
} }
@@ -148,7 +137,7 @@ class CustomField extends Model
$platform->registerDoctrineTypeMapping('enum', 'string'); $platform->registerDoctrineTypeMapping('enum', 'string');
// Rename the field if the name has changed // Rename the field if the name has changed
Schema::table(self::$table_name, function ($table) use ($custom_field) { Schema::table($custom_field->getTableName(), function ($table) use ($custom_field) {
$table->renameColumn($custom_field->convertUnicodeDbSlug($custom_field->getOriginal('name')), $custom_field->convertUnicodeDbSlug()); $table->renameColumn($custom_field->convertUnicodeDbSlug($custom_field->getOriginal('name')), $custom_field->convertUnicodeDbSlug());
}); });
@@ -164,12 +153,19 @@ class CustomField extends Model
// Drop the assets column if we've deleted it from custom fields // Drop the assets column if we've deleted it from custom fields
self::deleting(function ($custom_field) { self::deleting(function ($custom_field) {
return Schema::table(self::$table_name, function ($table) use ($custom_field) { return Schema::table($custom_field->getTableName(), function ($table) use ($custom_field) {
$table->dropColumn($custom_field->db_column); $table->dropColumn($custom_field->db_column);
}); });
}); });
} }
public function getTableName()
{
$type = $this->type;
$instance = new $type();
return $instance->getTable();
}
/** /**
* Establishes the customfield -> fieldset relationship * Establishes the customfield -> fieldset relationship
* *
@@ -200,31 +196,23 @@ class CustomField extends Model
} }
/** /**
* Establishes the customfield -> default values relationship * Returns the default value for a given 'item' using the defaultValues
*
* @author Hannah Tinkler
* @since [v3.0]
* @return \Illuminate\Database\Eloquent\Relations\Relation
*/
public function defaultValues()
{
return $this->belongsToMany(\App\Models\AssetModel::class, 'models_custom_fields')->withPivot('default_value');
}
/**
* Returns the default value for a given model using the defaultValues
* relationship * relationship
* *
* @param int $modelId * @param int $modelId
* @return string * @return string
*/ */
public function defaultValue($modelId) public function defaultValue($pivot_id)
{ {
return $this->defaultValues->filter(function ($item) use ($modelId) { /*
return $item->pivot->asset_model_id == $modelId; below, you might think you need to add:
})->map(function ($item) {
return $item->pivot->default_value; where('type', $this->type),
})->first();
but the type can be inferred from by the custom_field itself (which also has a type)
can't use forPivot() here because we don't have an object yet. (TODO?)
*/
DefaultValuesForCustomFields::where('item_pivot_id', $pivot_id)->where('custom_field_id',$this->id)->first()?->default_value; //TODO - php8-only operator!
} }
/** /**

View File

@@ -20,6 +20,7 @@ class CustomFieldset extends Model
*/ */
public $rules = [ public $rules = [
'name' => 'required|unique:custom_fieldsets', 'name' => 'required|unique:custom_fieldsets',
''
]; ];
/** /**
@@ -48,11 +49,13 @@ class CustomFieldset extends Model
* *
* @author [Brady Wetherington] [<uberbrady@gmail.com>] * @author [Brady Wetherington] [<uberbrady@gmail.com>]
* @since [v3.0] * @since [v3.0]
* @return \Illuminate\Database\Eloquent\Relations\Relation * @return \Illuminate\Database\Eloquent\Collection
*/ */
public function models() public function customizables() // TODO - I don't like this name, but I can't think of anything better
{ {
return $this->hasMany(\App\Models\AssetModel::class, 'fieldset_id'); $customizable_class_name = $this->type; //TODO - copypasta from Customizable trait?
\Log::debug("Customizable Class name is: ".$customizable_class_name);
return $customizable_class_name::getFieldsetUsers($this->id);
} }
/** /**
@@ -77,6 +80,7 @@ class CustomFieldset extends Model
*/ */
public function validation_rules() public function validation_rules()
{ {
\Log::debug("CALLING validation_rules FOR customfiledsets!");
$rules = []; $rules = [];
foreach ($this->fields as $field) { foreach ($this->fields as $field) {
$rule = []; $rule = [];
@@ -90,7 +94,12 @@ class CustomFieldset extends Model
$rule[] = 'unique_undeleted'; $rule[] = 'unique_undeleted';
} }
array_push($rule, $field->attributes['format']); \Log::debug("Field Format for".$field->name." is: ".$field->format);
if($field->format == 'DATE') { //we do a weird mutator thing, it's confusing - but, yes, it's all-caps
$rule[] = 'date_format:Y-m-d';
} else {
array_push($rule, $field->attributes['format']);
}
$rules[$field->db_column_name()] = $rule; $rules[$field->db_column_name()] = $rule;
} }

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Watson\Validating\ValidatingTrait;
class DefaultValuesForCustomFields extends Model
{
use HasFactory, ValidatingTrait;
protected $rules = [
'type' => 'required'
];
public $timestamps = false;
public function field() {
return $this->belongsTo('custom_fields');
}
// There is, effectively, another 'relation' here, but it's weirdly polymorphic
// and impossible to represent in Laravel.
// we have a 'type', and we have an 'item_pivot_id' -
// For example, in Assets the 'type' would be App\Models\Asset, and the 'item_pivot_id' would be a model_id
// I can't come up with any way to represent this in Laravel/Eloquent
// TODO: might be getting overly-fancy here; maybe just want to do an ID? Instead of an Eloquent Model?
public function scopeForPivot(Builder $query, Model $item, string $class) {
return $query->where('item_pivot_id', $item->id)->where('type', $class);
}
}

View File

@@ -0,0 +1,137 @@
<?php
namespace App\Models\Traits;
use App\Models\CustomField;
use App\Models\CustomFieldset;
use Illuminate\Support\Collection;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Event;
use App\Models\DefaultValuesForCustomFields;
/*********************************
* Trait HasCustomFields
* @package App\Models\Traits
*
* How to use: declare a PHP function getFieldset that will return your fieldset (not the ID, the actual set)
*
*/
trait HasCustomFields
{
protected static function bootHasCustomFields()
{
// https://tech.chrishardie.com/2022/define-fire-listen-custom-laravel-model-events-trait/
static::registerModelEvent('validating', function ($model, $event) {
\Log::debug("Uh, something happened? Something good, maybe?");
\Log::debug("model: $model, event: $event");
self::augmentValidationRulesForCustomFields($model);
});
}
/***************
* @return CustomFieldset|null
*
* This function by default will use the "getFieldsetKey()" method to
* return the customFieldset (or null) for this particular item. If
* necessary, you can override this method if your getFieldsetKey()
* cannot respond to `->fieldset` or `->id`.
*/
public function getFieldset(): ?CustomFieldset {
$pivot = $this->getFieldsetKey();
if(is_int($pivot)) { //why does this look just like the other thing? (below, look for is_int()
return CustomFieldset::find($pivot);
}
return $pivot->fieldset;
}
/**********************
* @return Object|int|null
* (if this is in PHP 8.0, can we just put that as the signature?)
*
* This is the main method you have to override. It should either return an
* Object who you can call `->fieldset` on and get a fieldset object, and also
* be able to call `->id` on to get a unique key to be able to show custom fields.
* For example, for Assets, the element that is returned is the 'model' for the Asset.
* For something like Users, which will probably have only one universal set of custom fields,
* it should just return the Fieldset ID for it. Or, if there are no custom fields, it should
* return null
*/
abstract public function getFieldsetKey(): Object|int|null; // php v8 minimum, GOOD. TODO
/***********************
* @param int $fieldset_id
* @return Collection
*
* This is the main method you need to override to return a list of things that are *using* this fieldset
* The format is an array with keys: a URL, and values. So, for assets, it might return
* {
* "models/14" => "MacBook Pro 13 (model no: 12345)"
* }
*/
abstract public static function getFieldsetUsers(int $fieldset_id): array;
public static function augmentValidationRulesForCustomFields($model) {
\Log::debug("Augmenting validation rules for custom fields!!!!!!");
$fieldset = $model->getFieldset();
if ($fieldset) {
foreach ($fieldset->fields as $field){
if($field->format == 'BOOLEAN'){ // TODO - this 'feels' like entanglement of concerns?
$model->{$field->db_column} = filter_var($model->{$model->db_column}, FILTER_VALIDATE_BOOLEAN);
}
}
if(!$model->rules) {
$model->rules = [];
}
$model->rules += $model->getFieldset()->validation_rules();
\Log::debug("FINAL RULES ARE: ".print_r($model->rules,true));
}
}
public function getDefaultValue(CustomField $field)
{
$pivot = $this->getFieldsetKey(); // TODO - feels copypasta-ish?
$key_id = null;
if( is_int($pivot) ) { // TODO: *WHY* does this code repeat?!
$key_id = $pivot; // now we're done
} elseif( is_object($pivot) ) {
$key_id = $pivot?->id;
}
if(is_null($key_id)) {
return;
}
// TODO - begninng to think my custom scope really should be just an integer :/
return DefaultValuesForCustomFields::where('type',self::class)
->where('custom_field_id',$field->id)
->where('item_pivot_id',$key_id)->first()?->default_value;
}
public function customFill(Request $request, User $user, bool $shouldSetDefaults = false) {
if ($this->getFieldset()) {
foreach ($this->getFieldset()->fields as $field) {
if (is_array($request->input($field->db_column))) {
$field_value = implode(', ', $request->input($field->db_column));
} else {
$field_value = $request->input($field->db_column);
}
if ($shouldSetDefaults && (is_null($field_value) || $field_value === '')) {
$field_value = $this->getDefaultValue($field);
}
if ($field->field_encrypted == '1') {
if ($user->can('admin')) {
$this->{$field->db_column} = \Crypt::encrypt($field_value);
}
} else {
$this->{$field->db_column} = $request->input($field->db_column);
}
}
}
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Models; namespace App\Models;
use App\Http\Traits\UniqueUndeletedTrait; use App\Http\Traits\UniqueUndeletedTrait;
use App\Models\Traits\HasCustomFields;
use App\Models\Traits\Searchable; use App\Models\Traits\Searchable;
use App\Presenters\Presentable; use App\Presenters\Presentable;
use DB; use DB;
@@ -31,6 +32,7 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
use Notifiable; use Notifiable;
use Presentable; use Presentable;
use Searchable; use Searchable;
use HasCustomFields;
protected $hidden = ['password', 'remember_token', 'permissions', 'reset_password_code', 'persist_code']; protected $hidden = ['password', 'remember_token', 'permissions', 'reset_password_code', 'persist_code'];
protected $table = 'users'; protected $table = 'users';
@@ -134,6 +136,20 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'manager' => ['first_name', 'last_name', 'username'], 'manager' => ['first_name', 'last_name', 'username'],
]; ];
public function getFieldsetKey(): object|int|null
{
// TODO/FIXME - that's hardcoded text, but what language should you use?! I don't know.
// also TODO - is this going to beat on the DB too hard?
return CustomFieldset::where('type', User::class)->first()?->id;
}
public static function getFieldsetUsers(int $fieldset_id): array
{
return [
'no_idea_what_id_to_put' => 'No idea what string to put?' // FIXME obvs.
];
}
/** /**
* Internally check the user permission for the given section * Internally check the user permission for the given section
* *

View File

@@ -2,7 +2,10 @@
namespace App\Presenters; namespace App\Presenters;
use App\Helpers\CustomFieldHelper;
use App\Models\Asset;
use App\Models\CustomField; use App\Models\CustomField;
use App\Models\CustomFieldset;
use DateTime; use DateTime;
/** /**
@@ -282,25 +285,21 @@ class AssetPresenter extends Presenter
// models. We only pass the fieldsets that pertain to each asset (via their model) so that we // models. We only pass the fieldsets that pertain to each asset (via their model) so that we
// don't junk up the REST API with tons of custom fields that don't apply // don't junk up the REST API with tons of custom fields that don't apply
$fields = CustomField::whereHas('fieldset', function ($query) { //only get fieldsets that have fields
$query->whereHas('models'); $fieldsets = CustomFieldset::where("type", Asset::class)->whereHas('fields')->get();
})->get(); $ids = [];
foreach($fieldsets as $fieldset) {
if (count($fieldset->customizables()) > 0) { //only get fieldsets that are 'in use'
$ids[] = $fieldset->id;
}
}
$fields = CustomField::whereIn('id',$ids)->get(); // FIXME: d'oh! this is wrong. We just got fieldsets, above. Now we're getting fields?
// Note: We do not need to e() escape the field names here, as they are already escaped when // Note: We do not need to e() escape the field names here, as they are already escaped when
// they are presented in the blade view. If we escape them here, custom fields with quotes in their // they are presented in the blade view. If we escape them here, custom fields with quotes in their
// name can break the listings page. - snipe // name can break the listings page. - snipe
foreach ($fields as $field) { foreach ($fields as $field) {
$layout[] = [ $layout[] = CustomFieldHelper::present($field);
'field' => 'custom_fields.'.$field->db_column,
'searchable' => true,
'sortable' => true,
'switchable' => true,
'title' => $field->name,
'formatter'=> 'customFieldsFormatter',
'escape' => true,
'class' => ($field->field_encrypted == '1') ? 'css-padlock' : '',
'visible' => ($field->show_in_listview == '1') ? true : false,
];
} }
$layout[] = [ $layout[] = [

View File

@@ -2,8 +2,14 @@
namespace App\Presenters; namespace App\Presenters;
use App\Helpers\CustomFieldHelper;
use App\Helpers\Helper; use App\Helpers\Helper;
use App\Models\Asset;
use App\Models\CustomField;
use App\Models\CustomFieldset;
use App\Models\Setting; use App\Models\Setting;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
@@ -359,6 +365,30 @@ class UserPresenter extends Presenter
], ],
]; ];
// TODO - FIXME - this is all copy-pasta'ed from the AssetPresenter! <start>
//only get fieldsets that have fields
$fieldsets = CustomFieldset::where("type", User::class)->whereHas('fields')->get();
$ids = [];
foreach($fieldsets as $fieldset) {
if (count($fieldset->customizables()) > 0) { //only get fieldsets that are 'in use'
\Log::debug("Found a fieldset! It's: ".$fieldset->id);
$ids[] = $fieldset->id;
} else {
\Log::debug("Didn't find fieldset: ".$fieldset->id);
}
}
$fields = CustomField::whereHas('fieldset', function (Builder $query) use($ids) {
$query->whereIn('custom_fieldsets.id', $ids);
})->get();
// Note: We do not need to e() escape the field names here, as they are already escaped when
// they are presented in the blade view. If we escape them here, custom fields with quotes in their
// name can break the listings page. - snipe
foreach ($fields as $field) {
\Log::debug("iterating through fields!");
$layout[] = CustomFieldHelper::present($field);
}
return json_encode($layout); return json_encode($layout);
} }

View File

@@ -87,7 +87,7 @@ class AuthServiceProvider extends ServiceProvider
]); ]);
$this->registerPolicies(); $this->registerPolicies();
Passport::routes(); //Passport::routes(); //this is no longer required in newer passport versions
Passport::tokensExpireIn(Carbon::now()->addYears(config('passport.expiration_years'))); Passport::tokensExpireIn(Carbon::now()->addYears(config('passport.expiration_years')));
Passport::refreshTokensExpireIn(Carbon::now()->addYears(config('passport.expiration_years'))); Passport::refreshTokensExpireIn(Carbon::now()->addYears(config('passport.expiration_years')));
Passport::personalAccessTokensExpireIn(Carbon::now()->addYears(config('passport.expiration_years'))); Passport::personalAccessTokensExpireIn(Carbon::now()->addYears(config('passport.expiration_years')));

View File

@@ -10,14 +10,8 @@
], ],
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"type": "project", "type": "project",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/grokability/laravel-scim-server"
}
],
"require": { "require": {
"php": ">=7.4.3 <8.2", "php": "8.0 - 8.2",
"ext-curl": "*", "ext-curl": "*",
"ext-fileinfo": "*", "ext-fileinfo": "*",
"ext-json": "*", "ext-json": "*",
@@ -29,56 +23,49 @@
"barryvdh/laravel-debugbar": "^3.6", "barryvdh/laravel-debugbar": "^3.6",
"barryvdh/laravel-dompdf": "^2.0", "barryvdh/laravel-dompdf": "^2.0",
"doctrine/cache": "^1.10", "doctrine/cache": "^1.10",
"doctrine/common": "^2.12",
"doctrine/dbal": "^3.1", "doctrine/dbal": "^3.1",
"doctrine/inflector": "^1.3",
"doctrine/instantiator": "^1.3", "doctrine/instantiator": "^1.3",
"eduardokum/laravel-mail-auto-embed": "^1.0", "eduardokum/laravel-mail-auto-embed": "^2.0",
"enshrined/svg-sanitize": "^0.15.0", "enshrined/svg-sanitize": "^0.15.0",
"erusev/parsedown": "^1.7", "erusev/parsedown": "^1.7",
"facade/ignition": "^2.10", "spatie/laravel-ignition": "^2.0",
"fideloper/proxy": "^4.3",
"fruitcake/laravel-cors": "^2.2",
"guzzlehttp/guzzle": "^7.0.1", "guzzlehttp/guzzle": "^7.0.1",
"intervention/image": "^2.5", "intervention/image": "^2.5",
"javiereguiluz/easyslugger": "^1.0", "javiereguiluz/easyslugger": "^1.0",
"laravel/framework": "^8.46", "laravel/framework": "^10.0",
"laravel/helpers": "^1.4", "laravel/helpers": "^1.4",
"laravel/passport": "^10.1", "laravel/passport": "^11.0",
"laravel/slack-notification-channel": "^2.3", "laravel/slack-notification-channel": "^2.3",
"laravel/socialite": "^5.6", "laravel/socialite": "^5.6",
"laravel/tinker": "^2.6", "laravel/tinker": "^2.6",
"laravel/ui": "^3.3", "laravel/ui": "^4.0",
"laravelcollective/html": "^6.2", "laravelcollective/html": "^6.2",
"lcobucci/clock": "^1.2.0|^2.0.0", "lcobucci/clock": "^1.2.0|^2.0.0",
"lcobucci/jwt": "^3.4.5|^4.0.4", "lcobucci/jwt": "^3.4.5|^4.0.4",
"league/csv": "^9.7", "league/csv": "^9.7",
"league/flysystem-aws-s3-v3": "^1.0", "league/flysystem-aws-s3-v3": "^3.0",
"league/flysystem-cached-adapter": "^1.1",
"livewire/livewire": "^2.4", "livewire/livewire": "^2.4",
"mediconesystems/livewire-datatables": "^0.5.0",
"neitanod/forceutf8": "^2.0", "neitanod/forceutf8": "^2.0",
"nesbot/carbon": "^2.32", "nesbot/carbon": "^2.32",
"nunomaduro/collision": "^5.4", "nunomaduro/collision": "^6.1",
"onelogin/php-saml": "^3.4", "onelogin/php-saml": "^3.4",
"paragonie/constant_time_encoding": "^2.3", "paragonie/constant_time_encoding": "^2.3",
"paragonie/sodium_compat": "^1.19", "paragonie/sodium_compat": "^1.19",
"phpdocumentor/reflection-docblock": "^5.1", "phpdocumentor/reflection-docblock": "^5.1",
"phpspec/prophecy": "^1.10", "phpspec/prophecy": "^1.10",
"pragmarx/google2fa-laravel": "^1.3", "pragmarx/google2fa-laravel": "^1.3",
"rollbar/rollbar-laravel": "^7.0", "rollbar/rollbar-laravel": "^8.0",
"spatie/laravel-backup": "^6.16", "spatie/laravel-backup": "^8.0",
"symfony/polyfill-mbstring": "^1.22",
"tecnickcom/tc-lib-barcode": "^1.15", "tecnickcom/tc-lib-barcode": "^1.15",
"tecnickcom/tcpdf": "^6.5", "tecnickcom/tcpdf": "^6.5",
"unicodeveloper/laravel-password": "^1.0", "unicodeveloper/laravel-password": "^1.0",
"watson/validating": "^6.1" "watson/validating": "^8.1"
}, },
"require-dev": { "require-dev": {
"brianium/paratest": "^6.6", "brianium/paratest": "^v6.4.4",
"fakerphp/faker": "^1.16", "fakerphp/faker": "^1.16",
"mockery/mockery": "^1.4", "mockery/mockery": "^1.4",
"nunomaduro/larastan": "^1.0", "nunomaduro/larastan": "^2.0",
"nunomaduro/phpinsights": "^2.7", "nunomaduro/phpinsights": "^2.7",
"phpunit/php-token-stream": "^3.1", "phpunit/php-token-stream": "^3.1",
"phpunit/phpunit": "^9.0", "phpunit/phpunit": "^9.0",

6966
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -289,7 +289,6 @@ return [
Intervention\Image\ImageServiceProvider::class, Intervention\Image\ImageServiceProvider::class,
Collective\Html\HtmlServiceProvider::class, Collective\Html\HtmlServiceProvider::class,
Spatie\Backup\BackupServiceProvider::class, Spatie\Backup\BackupServiceProvider::class,
Fideloper\Proxy\TrustedProxyServiceProvider::class,
PragmaRX\Google2FALaravel\ServiceProvider::class, PragmaRX\Google2FALaravel\ServiceProvider::class,
Laravel\Passport\PassportServiceProvider::class, Laravel\Passport\PassportServiceProvider::class,
Laravel\Tinker\TinkerServiceProvider::class, Laravel\Tinker\TinkerServiceProvider::class,

View File

@@ -1,5 +1,7 @@
<?php <?php
use Illuminate\Http\Request;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| DO NOT EDIT THIS FILE DIRECTLY. | DO NOT EDIT THIS FILE DIRECTLY.
@@ -57,6 +59,12 @@ return [
* *
* @link https://symfony.com/doc/current/deployment/proxies.html * @link https://symfony.com/doc/current/deployment/proxies.html
*/ */
'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL, 'headers' => Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB,
]; ];

View File

@@ -338,4 +338,15 @@ class AssetFactory extends Factory
{ {
return $this->state(['requestable' => false]); return $this->state(['requestable' => false]);
} }
public function withComplicatedCustomFields()
{
return $this->state(function () {
return [
'model_id' => function () {
return AssetModel::where('name','complicated')->first() ?? AssetModel::factory()->complicated();
}
];
});
}
} }

View File

@@ -3,6 +3,7 @@
namespace Database\Factories; namespace Database\Factories;
use App\Models\AssetModel; use App\Models\AssetModel;
use App\Models\CustomField;
use App\Models\CustomFieldset; use App\Models\CustomFieldset;
use App\Models\Depreciation; use App\Models\Depreciation;
use App\Models\Manufacturer; use App\Models\Manufacturer;
@@ -429,4 +430,13 @@ class AssetModelFactory extends Factory
]; ];
}); });
} }
public function complicated()
{
return $this->state(function () {
return [
'name' => 'Complicated fieldset'
];
})->for(CustomFieldSet::factory()->complicated(),'fieldset');
}
} }

View File

@@ -26,6 +26,7 @@ class CustomFieldFactory extends Factory
'format' => '', 'format' => '',
'element' => 'text', 'element' => 'text',
'auto_add_to_fieldsets' => '0', 'auto_add_to_fieldsets' => '0',
'type' => 'App\\Models\\Asset'
]; ];
} }
@@ -74,9 +75,28 @@ class CustomFieldFactory extends Factory
{ {
return $this->state(function () { return $this->state(function () {
return [ return [
'name' => 'MAC Address', 'name' => 'MAC Address EXPLICIT',
'format' => 'regex:/^([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$/', 'format' => 'regex:/^([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$/',
]; ];
}); });
} }
public function plainText()
{
return $this->state(function () {
return [
'name' => 'plain_text',
];
});
}
public function date()
{
return $this->state(function () {
return [
'name' => 'date',
'format' => 'date'
];
});
}
} }

View File

@@ -2,6 +2,7 @@
namespace Database\Factories; namespace Database\Factories;
use App\Models\CustomField;
use App\Models\CustomFieldset; use App\Models\CustomFieldset;
use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Database\Eloquent\Factories\Factory;
@@ -43,4 +44,16 @@ class CustomFieldsetFactory extends Factory
]; ];
}); });
} }
public function complicated()
{
//$mac = CustomField::factory()->macAddress()->create();
return $this->state(function () {
return [
'name' => 'complicated'
];
}) ->hasAttached(CustomField::factory()->macAddress(),['required' => false, 'order' => 0],'fields')
->hasAttached(CustomField::factory()->plainText(),['required' => true,'order' => 1],'fields')
->hasAttached(CustomField::factory()->date(),['required' => false, 'order' => 2],'fields');
}
} }

View File

@@ -23,8 +23,8 @@ function updateLegacyColumnName($customfield)
$name_to_db_name = CustomField::name_to_db_name($customfield->name); $name_to_db_name = CustomField::name_to_db_name($customfield->name);
//\Log::debug('Trying to rename '.$name_to_db_name." to ".$customfield->convertUnicodeDbSlug()."...\n"); //\Log::debug('Trying to rename '.$name_to_db_name." to ".$customfield->convertUnicodeDbSlug()."...\n");
if (Schema::hasColumn(CustomField::$table_name, $name_to_db_name)) { if (Schema::hasColumn('assets', $name_to_db_name)) {
return Schema::table(CustomField::$table_name, return Schema::table('assets',
function ($table) use ($name_to_db_name, $customfield) { function ($table) use ($name_to_db_name, $customfield) {
$table->renameColumn($name_to_db_name, $customfield->convertUnicodeDbSlug()); $table->renameColumn($name_to_db_name, $customfield->convertUnicodeDbSlug());
} }
@@ -81,8 +81,8 @@ class FixUtf8CustomFieldColumnNames extends Migration
// "_snipeit_imei_1" becomes "_snipeit_imei" // "_snipeit_imei_1" becomes "_snipeit_imei"
$legacyColumnName = (string) Str::of($currentColumnName)->replaceMatches('/_(\d)+$/', ''); $legacyColumnName = (string) Str::of($currentColumnName)->replaceMatches('/_(\d)+$/', '');
if (Schema::hasColumn(CustomField::$table_name, $currentColumnName)) { if (Schema::hasColumn('assets', $currentColumnName)) {
Schema::table(CustomField::$table_name, function (Blueprint $table) use ($currentColumnName, $legacyColumnName) { Schema::table('assets', function (Blueprint $table) use ($currentColumnName, $legacyColumnName) {
$table->renameColumn( $table->renameColumn(
$currentColumnName, $currentColumnName,
$legacyColumnName $legacyColumnName

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use App\Models\CustomField;
use App\Models\Asset;
class AddTypeToCustomFields extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('custom_fields', function (Blueprint $table) {
//
$table->text('type')->default('App\\Models\\Asset'); // TODO this default is needed for a not-nullable column, I guess? I don't like this because it will silently 'fix' errors we should properly 'fix'
});
CustomField::query()->update(['type' => Asset::class]); // TODO - is this still necessary with that 'default'?
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('custom_fields', function (Blueprint $table) {
//
$table->dropColumn('type');
});
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use App\Models\CustomFieldset;
use App\Models\Asset;
class AddTypeToCustomFieldsets extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('custom_fieldsets', function (Blueprint $table) {
//
$table->text('type')->default('App\\Models\\Asset');
});
CustomFieldset::query()->update(['type' => Asset::class]);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('custom_fieldsets', function (Blueprint $table) {
//
$table->dropColumn('type');
});
}
}

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class GeneralizeDefaultValuesForCustomFields extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::rename('models_custom_fields', 'default_values_for_custom_fields');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::rename('default_values_for_custom_fields', 'models_custom_fields');
}
}

View File

@@ -0,0 +1,43 @@
<?php
use App\Models\Asset;
use App\Models\DefaultValuesForCustomFields;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddTypeColumnToDefaultValuesForCustomFields extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('default_values_for_custom_fields', function (Blueprint $table) {
$table->string('type')->nullable();
$table->renameColumn('asset_model_id','item_pivot_id'); //this one works. okay. that's someting.
//$table->text('type')->nullable(false)->change();
});
DefaultValuesForCustomFields::query()->update(['type' => Asset::class]);
Schema::table('default_values_for_custom_fields', function (Blueprint $table) {
//$table->renameColumn('asset_model_id','item_pivot_id'); //this one works. okay. that's someting.
$table->string('type')->nullable(false)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('default_values_for_custom_fields', function (Blueprint $table) {
$table->dropColumn('type');
$table->renameColumn('item_pivot_id','asset_model_id');
});
}
}

24999
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -40,15 +40,15 @@
"css-loader": "^4.0.0", "css-loader": "^4.0.0",
"ekko-lightbox": "^5.1.1", "ekko-lightbox": "^5.1.1",
"imagemin": "^8.0.1", "imagemin": "^8.0.1",
"jquery-form-validator": "^2.3.79",
"jquery-slimscroll": "^1.3.8", "jquery-slimscroll": "^1.3.8",
"jquery-ui": "^1.13.2", "jquery-ui": "^1.13.2",
"jquery-ui-bundle": "^1.12.1", "jquery-ui-bundle": "^1.12.1",
"jquery.iframe-transport": "^1.0.0", "jquery.iframe-transport": "^1.0.0",
"jspdf-autotable": "^3.5.30", "jspdf-autotable": "^3.5.30",
"less": "^4.2.0", "less": "^4.2.0",
"less-loader": "^5.0", "less-loader": "^6.0",
"list.js": "^1.5.0", "list.js": "^1.5.0",
"morris.js": "github:morrisjs/morris.js",
"papaparse": "^4.3.3", "papaparse": "^4.3.3",
"select2": "4.0.13", "select2": "4.0.13",
"sheetjs": "^2.0.0", "sheetjs": "^2.0.0",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

25123
public/css/dist/all.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,135 +1 @@
#signature-pad{padding-top:250px;margin:auto}.m-signature-pad{position:relative;font-size:10px;width:100%;height:300px;border:1px solid #e8e8e8;background-color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.27),0 0 40px rgba(0,0,0,.08) inset;border-radius:4px}.m-signature-pad:after,.m-signature-pad:before{position:absolute;z-index:-1;content:"";width:40%;height:10px;left:20px;bottom:10px;background:0 0;-webkit-transform:skew(-3deg) rotate(-3deg);-moz-transform:skew(-3deg) rotate(-3deg);-ms-transform:skew(-3deg) rotate(-3deg);-o-transform:skew(-3deg) rotate(-3deg);transform:skew(-3deg) rotate(-3deg);box-shadow:0 8px 12px rgba(0,0,0,.4)}.m-signature-pad:after{left:auto;right:20px;-webkit-transform:skew(3deg) rotate(3deg);-moz-transform:skew(3deg) rotate(3deg);-ms-transform:skew(3deg) rotate(3deg);-o-transform:skew(3deg) rotate(3deg);transform:skew(3deg) rotate(3deg)}.m-signature-pad--body{position:absolute;top:20px;bottom:60px;border:1px solid #f4f4f4;background-color:#fff}.m-signature-pad--body canvas{position:absolute;left:0;top:0;width:100%;height:100%;border-radius:4px;box-shadow:0 0 5px rgba(0,0,0,.02) inset}.m-signature-pad--footer{position:absolute;left:20px;right:20px;bottom:20px;height:40px}.m-signature-pad--footer .description{color:#c3c3c3;text-align:center;font-size:1.2em;margin-top:1.8em}.m-signature-pad--footer .button{position:absolute;bottom:0}.m-signature-pad--footer .button.clear{left:0}.m-signature-pad--footer .button.save{right:0}@media screen and (max-width:1024px){.m-signature-pad{top:0;left:0;right:0;bottom:0;width:auto;height:auto;min-width:250px;min-height:140px;margin:5%}}@media screen and (min-device-width:768px) and (max-device-width:1024px){.m-signature-pad{margin:10%}}@media screen and (max-height:320px){.m-signature-pad--body{left:0;right:0;top:0;bottom:32px}.m-signature-pad--footer{left:20px;right:20px;bottom:4px;height:28px}.m-signature-pad--footer .description{font-size:1em;margin-top:1em}}
#signature-pad {
padding-top: 250px;
margin: auto;
}
.m-signature-pad {
position: relative;
font-size: 10px;
width: 100%;
height: 300px;
border: 1px solid #e8e8e8;
background-color: #fff;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.08) inset;
border-radius: 4px;
}
.m-signature-pad:before, .m-signature-pad:after {
position: absolute;
z-index: -1;
content: "";
width: 40%;
height: 10px;
left: 20px;
bottom: 10px;
background: transparent;
-webkit-transform: skew(-3deg) rotate(-3deg);
-moz-transform: skew(-3deg) rotate(-3deg);
-ms-transform: skew(-3deg) rotate(-3deg);
-o-transform: skew(-3deg) rotate(-3deg);
transform: skew(-3deg) rotate(-3deg);
box-shadow: 0 8px 12px rgba(0, 0, 0, 0.4);
}
.m-signature-pad:after {
left: auto;
right: 20px;
-webkit-transform: skew(3deg) rotate(3deg);
-moz-transform: skew(3deg) rotate(3deg);
-ms-transform: skew(3deg) rotate(3deg);
-o-transform: skew(3deg) rotate(3deg);
transform: skew(3deg) rotate(3deg);
}
.m-signature-pad--body {
position: absolute;
top: 20px;
bottom: 60px;
border: 1px solid #f4f4f4;
background-color: white;
}
.m-signature-pad--body
canvas {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
border-radius: 4px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.02) inset;
}
.m-signature-pad--footer {
position: absolute;
left: 20px;
right: 20px;
bottom: 20px;
height: 40px;
}
.m-signature-pad--footer
.description {
color: #C3C3C3;
text-align: center;
font-size: 1.2em;
margin-top: 1.8em;
}
.m-signature-pad--footer
.button {
position: absolute;
bottom: 0;
}
.m-signature-pad--footer
.button.clear {
left: 0;
}
.m-signature-pad--footer
.button.save {
right: 0;
}
@media screen and (max-width: 1024px) {
.m-signature-pad {
top: 0;
left: 0;
right: 0;
bottom: 0;
width: auto;
height: auto;
min-width: 250px;
min-height: 140px;
margin: 5%;
}
}
@media screen and (min-device-width: 768px) and (max-device-width: 1024px) {
.m-signature-pad {
margin: 10%;
}
}
@media screen and (max-height: 320px) {
.m-signature-pad--body {
left: 0;
right: 0;
top: 0;
bottom: 32px;
}
.m-signature-pad--footer {
left: 20px;
right: 20px;
bottom: 4px;
height: 28px;
}
.m-signature-pad--footer
.description {
font-size: 1em;
margin-top: 1em;
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,219 +1 @@
/* .skin-black .main-header .navbar{background-color:#111}.skin-black .main-header .navbar .nav>li>a{color:#fff}.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav>.active>a,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-black .main-header .navbar .sidebar-toggle{color:#fff}.skin-black .main-header .navbar .sidebar-toggle:hover{background-color:#040404}@media (max-width:767px){.skin-black .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-black .main-header .navbar .dropdown-menu li a{color:#333}.skin-black .main-header .navbar .dropdown-menu li a:hover{background:#040404}}.skin-black .main-header li.user-header{background-color:#111}.skin-black .content-header{background:transparent}.skin-black .left-side,.skin-black .main-sidebar,.skin-black .wrapper{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#111;color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-black .sidebar-form .btn,.skin-black .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-black .sidebar-form input[type=text]:focus,.skin-black .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-black.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn,.btn:hover{color:#000}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#505156;border-color:#fff;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#111;border-color:#1f1f21;color:#fff}.btn.btn-white:hover,.btn.btn-white:link,.btn.btn-white:visited,.btn:hover.btn-white:hover,.btn:hover.btn-white:link,.btn:hover.btn-white:visited{color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#000}:root{--button-default:#000;--button-primary:#000;--button-hover:#000;--header:#111;--text-main:#bbb;--text-sub:#9b9b9b;--link:#black;--visited-link:#111;--hover-link:#999;--nav-link:#fff;--light-link:#fff}.btn-danger.btn-sm.disabled,a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.far fa-life-ring{color:var(--link)}.sidebar-toggle-mobile{color:#fff!important}.skin-black .main-header .navbar .nav>li>a{text-decoration:none}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#111}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Black
* ----------
*/
.skin-black .main-header .navbar {
background-color: #111;
}
.skin-black .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-black .main-header .navbar .nav > li > a:hover,
.skin-black .main-header .navbar .nav > li > a:active,
.skin-black .main-header .navbar .nav > li > a:focus,
.skin-black .main-header .navbar .nav .open > a,
.skin-black .main-header .navbar .nav .open > a:hover,
.skin-black .main-header .navbar .nav .open > a:focus,
.skin-black .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-black .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-black .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-black .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-black .main-header .navbar .sidebar-toggle:hover {
background-color: #040404;
}
@media (max-width: 767px) {
.skin-black .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-black .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-black .main-header .navbar .dropdown-menu li a:hover {
background: #040404;
}
}
.skin-black .main-header li.user-header {
background-color: #111;
}
.skin-black .content-header {
background: transparent;
}
.skin-black .wrapper,
.skin-black .main-sidebar,
.skin-black .left-side {
background-color: #222d32;
}
.skin-black .user-panel > .info,
.skin-black .user-panel > .info > a {
color: #fff;
}
.skin-black .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-black .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-black .sidebar-menu > li:hover > a,
.skin-black .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #111;
}
.skin-black .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-black .sidebar a {
color: #b8c7ce;
}
.skin-black .sidebar a:hover {
text-decoration: none;
}
.skin-black .treeview-menu > li > a {
color: #8aa4af;
}
.skin-black .treeview-menu > li.active > a,
.skin-black .treeview-menu > li > a:hover {
color: #fff;
}
.skin-black .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-black .sidebar-form input[type="text"],
.skin-black .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-black .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-black .sidebar-form input[type="text"]:focus,
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-black .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-black.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn,
.btn:hover {
color: #000;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #505156;
border-color: #FFF;
color: #FFF;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #111;
border-color: #1f1f21;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
color: #fff;
}
.btn.btn-white:visited,
.btn:hover.btn-white:visited {
color: #fff;
}
a {
color: var(--link);
}
a:hover {
color: var(--hover-link);
}
a:visited {
color: var(--visited-link);
}
.text-primary {
color: #000000;
}
:root {
--button-default: #000000;
--button-primary: #000000;
--button-hover: #000000;
--header: #111;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #black;
/* Use same as Header picker, lighten by 70% */
--visited-link: #111;
/* Use same as Header picker, lighten by 70% */
--hover-link: #999999;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
.btn-danger.btn-sm.disabled {
color: #FFF;
}
.far fa-life-ring {
color: var(--link);
}
.sidebar-toggle-mobile {
color: #FFF !important;
}
.skin-black .main-header .navbar .nav > li > a,
.skin-black .main-header .navbar .nav > li > a {
text-decoration: none;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #111;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

View File

@@ -1,219 +1 @@
/* .skin-black .main-header .navbar{background-color:#111}.skin-black .main-header .navbar .nav>li>a{color:#fff}.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav>.active>a,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-black .main-header .navbar .sidebar-toggle{color:#fff}.skin-black .main-header .navbar .sidebar-toggle:hover{background-color:#040404}@media (max-width:767px){.skin-black .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-black .main-header .navbar .dropdown-menu li a{color:#333}.skin-black .main-header .navbar .dropdown-menu li a:hover{background:#040404}}.skin-black .main-header li.user-header{background-color:#111}.skin-black .content-header{background:0 0}.skin-black .left-side,.skin-black .main-sidebar,.skin-black .wrapper{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#111;color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-black .sidebar-form .btn,.skin-black .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-black .sidebar-form input[type=text]:focus,.skin-black .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-black.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn,.btn:hover{color:#000}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#505156;border-color:#fff;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#111;border-color:#1f1f21;color:#fff}.btn.btn-white:hover,.btn.btn-white:link,.btn.btn-white:visited,.btn:hover.btn-white:hover,.btn:hover.btn-white:link,.btn:hover.btn-white:visited{color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#000}:root{--button-default:#000;--button-primary:#000;--button-hover:#000;--header:#111;--text-main:#bbb;--text-sub:#9b9b9b;--link:#black;--visited-link:#111;--hover-link:#999;--nav-link:#fff;--light-link:#fff}.btn-danger.btn-sm.disabled,a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.far fa-life-ring{color:var(--link)}.sidebar-toggle-mobile{color:#fff!important}.skin-black .main-header .navbar .nav>li>a{text-decoration:none}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#111}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Black
* ----------
*/
.skin-black .main-header .navbar {
background-color: #111;
}
.skin-black .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-black .main-header .navbar .nav > li > a:hover,
.skin-black .main-header .navbar .nav > li > a:active,
.skin-black .main-header .navbar .nav > li > a:focus,
.skin-black .main-header .navbar .nav .open > a,
.skin-black .main-header .navbar .nav .open > a:hover,
.skin-black .main-header .navbar .nav .open > a:focus,
.skin-black .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-black .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-black .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-black .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-black .main-header .navbar .sidebar-toggle:hover {
background-color: #040404;
}
@media (max-width: 767px) {
.skin-black .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-black .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-black .main-header .navbar .dropdown-menu li a:hover {
background: #040404;
}
}
.skin-black .main-header li.user-header {
background-color: #111;
}
.skin-black .content-header {
background: transparent;
}
.skin-black .wrapper,
.skin-black .main-sidebar,
.skin-black .left-side {
background-color: #222d32;
}
.skin-black .user-panel > .info,
.skin-black .user-panel > .info > a {
color: #fff;
}
.skin-black .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-black .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-black .sidebar-menu > li:hover > a,
.skin-black .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #111;
}
.skin-black .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-black .sidebar a {
color: #b8c7ce;
}
.skin-black .sidebar a:hover {
text-decoration: none;
}
.skin-black .treeview-menu > li > a {
color: #8aa4af;
}
.skin-black .treeview-menu > li.active > a,
.skin-black .treeview-menu > li > a:hover {
color: #fff;
}
.skin-black .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-black .sidebar-form input[type="text"],
.skin-black .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-black .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-black .sidebar-form input[type="text"]:focus,
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-black .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-black.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn,
.btn:hover {
color: #000;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #505156;
border-color: #FFF;
color: #FFF;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #111;
border-color: #1f1f21;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
color: #fff;
}
.btn.btn-white:visited,
.btn:hover.btn-white:visited {
color: #fff;
}
a {
color: var(--link);
}
a:hover {
color: var(--hover-link);
}
a:visited {
color: var(--visited-link);
}
.text-primary {
color: #000000;
}
:root {
--button-default: #000000;
--button-primary: #000000;
--button-hover: #000000;
--header: #111;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #black;
/* Use same as Header picker, lighten by 70% */
--visited-link: #111;
/* Use same as Header picker, lighten by 70% */
--hover-link: #999999;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
.btn-danger.btn-sm.disabled {
color: #FFF;
}
.far fa-life-ring {
color: var(--link);
}
.sidebar-toggle-mobile {
color: #FFF !important;
}
.skin-black .main-header .navbar .nav > li > a,
.skin-black .main-header .navbar .nav > li > a {
text-decoration: none;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #111;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,239 +1 @@
/* .skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav>.active>a,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#333}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .left-side,.skin-blue .main-sidebar,.skin-blue .wrapper{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#3c8dbc;color:#fff}.skin-blue .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-blue .sidebar-form .btn,.skin-blue .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-blue .sidebar-form input[type=text]:focus,.skin-blue .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-blue.layout-top-nav .main-header>.logo .logo-variant{background-color:unset}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary,btn-sm .btn-primary:link,btn-sm.btn-primary{background-color:#307095;border-color:#23536f;color:#fff!important}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover,btn-sma.btn-primary:hover{background-color:#23536f;border-color:#23536f;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link,btn-sm.btn-white:link{background-color:#307095;color:#fff}.btn.btn-white:hover,.btn.btn-white:visited,.btn:hover.btn-white:hover,.btn:hover.btn-white:visited,btn-sm.btn-white:hover,btn-sm.btn-white:visited{background-color:#173648;color:#fff}.btn-danger,.btn-danger:link,.btn-danger:visited,.btn-warning,.btn-warning:link,.btn-warning:visited,a.btn-danger:hover,a.btn-warning:hover{color:#fff}.btn-default:link,.btn-default:visited,a.btn-default:hover{color:#505156}:root{--button-default:#505156;--button-primary:#1d455b;--button-hover:#173648;--header:#3c8dbc;--text-main:#bbb;--text-sub:#9b9b9b;--link:#296282;--visited-link:#5fa4cc;--hover-link:#86bad8;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a:hover{color:var(--hover-link)}.text-primary{color:#23536f}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc}.search-highlight,.search-highlight:hover{background-color:#e9d15b}a.settings_button:hover,a.settings_button:link,a.settings_button:visited{color:#3c8dbc}
* Skin: Blue
* ----------
*/
.skin-blue .main-header .navbar {
background-color: #3c8dbc;
}
.skin-blue .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-blue .main-header .navbar .nav > li > a:hover,
.skin-blue .main-header .navbar .nav > li > a:active,
.skin-blue .main-header .navbar .nav > li > a:focus,
.skin-blue .main-header .navbar .nav .open > a,
.skin-blue .main-header .navbar .nav .open > a:hover,
.skin-blue .main-header .navbar .nav .open > a:focus,
.skin-blue .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-blue .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-blue .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-blue .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-blue .main-header .navbar .sidebar-toggle:hover {
background-color: #367fa9;
}
@media (max-width: 767px) {
.skin-blue .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-blue .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-blue .main-header .navbar .dropdown-menu li a:hover {
background: #367fa9;
}
}
.skin-blue .main-header li.user-header {
background-color: #3c8dbc;
}
.skin-blue .content-header {
background: transparent;
}
.skin-blue .wrapper,
.skin-blue .main-sidebar,
.skin-blue .left-side {
background-color: #222d32;
}
.skin-blue .user-panel > .info,
.skin-blue .user-panel > .info > a {
color: #fff;
}
.skin-blue .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-blue .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-blue .sidebar-menu > li:hover > a,
.skin-blue .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #3c8dbc;
}
.skin-blue .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-blue .sidebar a {
color: #b8c7ce;
}
.skin-blue .sidebar a:hover {
text-decoration: none;
}
.skin-blue .treeview-menu > li > a {
color: #8aa4af;
}
.skin-blue .treeview-menu > li.active > a,
.skin-blue .treeview-menu > li > a:hover {
color: #fff;
}
.skin-blue .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-blue .sidebar-form input[type="text"],
.skin-blue .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-blue .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-blue .sidebar-form input[type="text"]:focus,
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-blue .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-blue.layout-top-nav .main-header > .logo .logo-variant {
background-color: unset;
}
.btn.btn-primary,
btn-sm.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
btn-sm .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #307095;
border-color: #23536f;
color: #fff !important;
}
.btna.btn-primary:hover,
btn-sma.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #23536f;
border-color: #23536f;
color: #fff;
}
.btn.btn-white:link,
btn-sm.btn-white:link,
.btn:hover.btn-white:link {
background-color: #307095;
color: #fff;
}
.btn.btn-white:hover,
btn-sm.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #173648;
color: #fff;
}
.btn.btn-white:visited,
btn-sm.btn-white:visited,
.btn:hover.btn-white:visited {
background-color: #173648;
color: #fff;
}
.btn-warning,
.btn-warning:link,
a.btn-warning:hover,
.btn-warning:link,
.btn-warning:visited,
.btn-danger,
.btn-danger:link,
a.btn-danger:hover,
.btn-danger:link,
.btn-danger:visited {
color: #fff;
}
.btn-default:link,
a.btn-default:hover,
.btn-default:visited {
color: #505156;
}
:root {
--button-default: #505156;
--button-primary: #1d455b;
--button-hover: #173648;
--header: #3c8dbc;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #296282;
/* Use same as Header picker, lighten by 70% */
--visited-link: #5fa4cc;
/* Use same as Header picker, lighten by 70% */
--hover-link: #86bad8;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
a:link {
color: var(--link);
}
a:visited {
color: var(--visited-link);
}
a:hover {
color: var(--hover-link);
}
.text-primary {
color: #23536f;
}
.far fa-life-ring {
color: var(--link);
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #3c8dbc;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}
a.settings_button:link,
a.settings_button:visited,
a.settings_button:hover {
color: #3c8dbc;
}

View File

@@ -1,239 +1 @@
/* .skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav>.active>a,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#333}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:0 0}.skin-blue .left-side,.skin-blue .main-sidebar,.skin-blue .wrapper{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#3c8dbc;color:#fff}.skin-blue .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-blue .sidebar-form .btn,.skin-blue .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-blue .sidebar-form input[type=text]:focus,.skin-blue .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-blue.layout-top-nav .main-header>.logo .logo-variant{background-color:unset}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary,btn-sm .btn-primary:link,btn-sm.btn-primary{background-color:#307095;border-color:#23536f;color:#fff!important}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover,btn-sma.btn-primary:hover{background-color:#23536f;border-color:#23536f;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link,btn-sm.btn-white:link{background-color:#307095;color:#fff}.btn.btn-white:hover,.btn.btn-white:visited,.btn:hover.btn-white:hover,.btn:hover.btn-white:visited,btn-sm.btn-white:hover,btn-sm.btn-white:visited{background-color:#173648;color:#fff}.btn-danger,.btn-danger:link,.btn-danger:visited,.btn-warning,.btn-warning:link,.btn-warning:visited,a.btn-danger:hover,a.btn-warning:hover{color:#fff}.btn-default:link,.btn-default:visited,a.btn-default:hover{color:#505156}:root{--button-default:#505156;--button-primary:#1d455b;--button-hover:#173648;--header:#3c8dbc;--text-main:#bbb;--text-sub:#9b9b9b;--link:#296282;--visited-link:#5fa4cc;--hover-link:#86bad8;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a:hover{color:var(--hover-link)}.text-primary{color:#23536f}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc}.search-highlight,.search-highlight:hover{background-color:#e9d15b}a.settings_button:hover,a.settings_button:link,a.settings_button:visited{color:#3c8dbc}
* Skin: Blue
* ----------
*/
.skin-blue .main-header .navbar {
background-color: #3c8dbc;
}
.skin-blue .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-blue .main-header .navbar .nav > li > a:hover,
.skin-blue .main-header .navbar .nav > li > a:active,
.skin-blue .main-header .navbar .nav > li > a:focus,
.skin-blue .main-header .navbar .nav .open > a,
.skin-blue .main-header .navbar .nav .open > a:hover,
.skin-blue .main-header .navbar .nav .open > a:focus,
.skin-blue .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-blue .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-blue .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-blue .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-blue .main-header .navbar .sidebar-toggle:hover {
background-color: #367fa9;
}
@media (max-width: 767px) {
.skin-blue .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-blue .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-blue .main-header .navbar .dropdown-menu li a:hover {
background: #367fa9;
}
}
.skin-blue .main-header li.user-header {
background-color: #3c8dbc;
}
.skin-blue .content-header {
background: transparent;
}
.skin-blue .wrapper,
.skin-blue .main-sidebar,
.skin-blue .left-side {
background-color: #222d32;
}
.skin-blue .user-panel > .info,
.skin-blue .user-panel > .info > a {
color: #fff;
}
.skin-blue .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-blue .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-blue .sidebar-menu > li:hover > a,
.skin-blue .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #3c8dbc;
}
.skin-blue .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-blue .sidebar a {
color: #b8c7ce;
}
.skin-blue .sidebar a:hover {
text-decoration: none;
}
.skin-blue .treeview-menu > li > a {
color: #8aa4af;
}
.skin-blue .treeview-menu > li.active > a,
.skin-blue .treeview-menu > li > a:hover {
color: #fff;
}
.skin-blue .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-blue .sidebar-form input[type="text"],
.skin-blue .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-blue .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-blue .sidebar-form input[type="text"]:focus,
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-blue .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-blue.layout-top-nav .main-header > .logo .logo-variant {
background-color: unset;
}
.btn.btn-primary,
btn-sm.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
btn-sm .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #307095;
border-color: #23536f;
color: #fff !important;
}
.btna.btn-primary:hover,
btn-sma.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #23536f;
border-color: #23536f;
color: #fff;
}
.btn.btn-white:link,
btn-sm.btn-white:link,
.btn:hover.btn-white:link {
background-color: #307095;
color: #fff;
}
.btn.btn-white:hover,
btn-sm.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #173648;
color: #fff;
}
.btn.btn-white:visited,
btn-sm.btn-white:visited,
.btn:hover.btn-white:visited {
background-color: #173648;
color: #fff;
}
.btn-warning,
.btn-warning:link,
a.btn-warning:hover,
.btn-warning:link,
.btn-warning:visited,
.btn-danger,
.btn-danger:link,
a.btn-danger:hover,
.btn-danger:link,
.btn-danger:visited {
color: #fff;
}
.btn-default:link,
a.btn-default:hover,
.btn-default:visited {
color: #505156;
}
:root {
--button-default: #505156;
--button-primary: #1d455b;
--button-hover: #173648;
--header: #3c8dbc;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #296282;
/* Use same as Header picker, lighten by 70% */
--visited-link: #5fa4cc;
/* Use same as Header picker, lighten by 70% */
--hover-link: #86bad8;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
a:link {
color: var(--link);
}
a:visited {
color: var(--visited-link);
}
a:hover {
color: var(--hover-link);
}
.text-primary {
color: #23536f;
}
.far fa-life-ring {
color: var(--link);
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #3c8dbc;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}
a.settings_button:link,
a.settings_button:visited,
a.settings_button:hover {
color: #3c8dbc;
}

View File

@@ -1,227 +1 @@
/* .skin-contrast .main-header .navbar{background-color:#001f3f}.skin-contrast .main-header .navbar .nav>li>a{color:#fff}.skin-contrast .main-header .navbar .nav .open>a,.skin-contrast .main-header .navbar .nav .open>a:focus,.skin-contrast .main-header .navbar .nav .open>a:hover,.skin-contrast .main-header .navbar .nav>.active>a,.skin-contrast .main-header .navbar .nav>li>a:active,.skin-contrast .main-header .navbar .nav>li>a:focus,.skin-contrast .main-header .navbar .nav>li>a:hover,.skin-contrast .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-contrast .main-header .navbar .sidebar-toggle{color:#fff}.skin-contrast .main-header .navbar .sidebar-toggle:hover{background-color:#001226}@media (max-width:767px){.skin-contrast .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-contrast .main-header .navbar .dropdown-menu li a{color:#fff}.skin-contrast .main-header .navbar .dropdown-menu li a:hover{background:#001226}}.skin-contrast .main-header li.user-header{background-color:#001f3f}.skin-contrast .content-header{background:transparent}.skin-contrast .left-side,.skin-contrast .main-sidebar,.skin-contrast .wrapper{background-color:#222d32}.skin-contrast .user-panel>.info,.skin-contrast .user-panel>.info>a{color:#fff}.skin-contrast .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-contrast .sidebar-menu>li>a{border-left:3px solid transparent}.skin-contrast .sidebar-menu>li.active>a,.skin-contrast .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#001f3f;color:#fff}.skin-contrast .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-contrast .sidebar a{color:#b8c7ce}.skin-contrast .sidebar a:hover{text-decoration:none}.skin-contrast .treeview-menu>li>a{color:#8aa4af}.skin-contrast .treeview-menu>li.active>a,.skin-contrast .treeview-menu>li>a:hover{color:#fff}.skin-contrast .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-contrast .sidebar-form .btn,.skin-contrast .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-contrast .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-contrast .sidebar-form input[type=text]:focus,.skin-contrast .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-contrast .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-contrast .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-contrast.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#00060c;border-color:#000;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#000;border-color:#000;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#00060c;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#000;color:#fff}a.btn.btn-link.text-left{border:1px solid #000;color:#001f3f}a,a.btn.btn-link.text-left:hover,a:hover{color:#001f3f}a:hover{text-decoration:underline}a:visited{color:#001f3f}a.btn:hover{color:#fff;text-decoration:underline}.text-primary{color:#000}.skin-contrast .treeview-menu>li>a{color:#fff}.bg-teal{background-color:#1b6a6a!important}.bg-orange{background-color:#995400!important}.bg-purple{background-color:#3a3767!important}.bg-maroon{background-color:#7d1038!important}.pagination>li>a{color:#00060c!important}.pagination>.active>a{background-color:#001f3f;color:#fff!important}btn-success{background-color:#000d07}input::-webkit-input-placeholder{color:#b5bbc8!important}input::-moz-placeholder{color:#b5bbc8!important}input::-ms-input-placeholder{color:#b5bbc8!important}.select2-default,.select2-selection__placeholder{color:#37383c!important}.callout.callout-info{background-color:#23536f!important}.fixed-table-container tbody .selected td{background-color:#fff8af}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Contrast
* ----------
*/
.skin-contrast .main-header .navbar {
background-color: #001F3F;
}
.skin-contrast .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-contrast .main-header .navbar .nav > li > a:hover,
.skin-contrast .main-header .navbar .nav > li > a:active,
.skin-contrast .main-header .navbar .nav > li > a:focus,
.skin-contrast .main-header .navbar .nav .open > a,
.skin-contrast .main-header .navbar .nav .open > a:hover,
.skin-contrast .main-header .navbar .nav .open > a:focus,
.skin-contrast .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-contrast .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-contrast .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-contrast .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-contrast .main-header .navbar .sidebar-toggle:hover {
background-color: #001226;
}
@media (max-width: 767px) {
.skin-contrast .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-contrast .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-contrast .main-header .navbar .dropdown-menu li a:hover {
background: #001226;
}
}
.skin-contrast .main-header li.user-header {
background-color: #001F3F;
}
.skin-contrast .content-header {
background: transparent;
}
.skin-contrast .wrapper,
.skin-contrast .main-sidebar,
.skin-contrast .left-side {
background-color: #222d32;
}
.skin-contrast .user-panel > .info,
.skin-contrast .user-panel > .info > a {
color: #fff;
}
.skin-contrast .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-contrast .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-contrast .sidebar-menu > li:hover > a,
.skin-contrast .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #001F3F;
}
.skin-contrast .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-contrast .sidebar a {
color: #b8c7ce;
}
.skin-contrast .sidebar a:hover {
text-decoration: none;
}
.skin-contrast .treeview-menu > li > a {
color: #8aa4af;
}
.skin-contrast .treeview-menu > li.active > a,
.skin-contrast .treeview-menu > li > a:hover {
color: #fff;
}
.skin-contrast .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-contrast .sidebar-form input[type="text"],
.skin-contrast .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-contrast .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-contrast .sidebar-form input[type="text"]:focus,
.skin-contrast .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-contrast .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-contrast .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-contrast.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #00060c;
border-color: #000000;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #000000;
border-color: #000000;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #00060c;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #000000;
color: #fff;
}
a.btn.btn-link.text-left {
color: #001F3F;
border: 1px solid #000;
}
a.btn.btn-link.text-left:hover {
color: #001F3F;
}
a {
color: #001F3F;
}
a:hover {
color: #001F3F;
text-decoration: underline;
}
a:visited {
color: #001F3F;
}
a.btn:hover {
color: #fff;
text-decoration: underline;
}
.text-primary {
color: #000000;
}
.skin-contrast .treeview-menu > li > a {
color: #FFF;
}
.bg-teal {
background-color: #1b6a6a !important;
}
.bg-orange {
background-color: #995400 !important;
}
.bg-purple {
background-color: #3a3767 !important;
}
.bg-maroon {
background-color: #7d1038 !important;
}
.pagination > li > a {
color: #00060c !important;
}
.pagination > .active > a {
background-color: #001F3F;
color: #FFF !important;
}
btn-success {
background-color: #000d07;
}
input::-webkit-input-placeholder {
/* Chrome/Opera/Safari */
color: #b5bbc8 !important;
}
input::-moz-placeholder {
/* Firefox 19+ */
color: #b5bbc8 !important;
}
input::-ms-input-placeholder {
/* IE 10+ */
color: #b5bbc8 !important;
}
.select2-default,
.select2-selection__placeholder {
color: #37383c !important;
}
.callout.callout-info {
background-color: #23536f !important;
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

View File

@@ -1,227 +1 @@
/* .skin-contrast .main-header .navbar{background-color:#001f3f}.skin-contrast .main-header .navbar .nav>li>a{color:#fff}.skin-contrast .main-header .navbar .nav .open>a,.skin-contrast .main-header .navbar .nav .open>a:focus,.skin-contrast .main-header .navbar .nav .open>a:hover,.skin-contrast .main-header .navbar .nav>.active>a,.skin-contrast .main-header .navbar .nav>li>a:active,.skin-contrast .main-header .navbar .nav>li>a:focus,.skin-contrast .main-header .navbar .nav>li>a:hover,.skin-contrast .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-contrast .main-header .navbar .sidebar-toggle{color:#fff}.skin-contrast .main-header .navbar .sidebar-toggle:hover{background-color:#001226}@media (max-width:767px){.skin-contrast .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-contrast .main-header .navbar .dropdown-menu li a{color:#fff}.skin-contrast .main-header .navbar .dropdown-menu li a:hover{background:#001226}}.skin-contrast .main-header li.user-header{background-color:#001f3f}.skin-contrast .content-header{background:0 0}.skin-contrast .left-side,.skin-contrast .main-sidebar,.skin-contrast .wrapper{background-color:#222d32}.skin-contrast .user-panel>.info,.skin-contrast .user-panel>.info>a{color:#fff}.skin-contrast .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-contrast .sidebar-menu>li>a{border-left:3px solid transparent}.skin-contrast .sidebar-menu>li.active>a,.skin-contrast .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#001f3f;color:#fff}.skin-contrast .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-contrast .sidebar a{color:#b8c7ce}.skin-contrast .sidebar a:hover{text-decoration:none}.skin-contrast .treeview-menu>li>a{color:#8aa4af}.skin-contrast .treeview-menu>li.active>a,.skin-contrast .treeview-menu>li>a:hover{color:#fff}.skin-contrast .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-contrast .sidebar-form .btn,.skin-contrast .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-contrast .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-contrast .sidebar-form input[type=text]:focus,.skin-contrast .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-contrast .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-contrast .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-contrast.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#00060c;border-color:#000;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#000;border-color:#000;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#00060c;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#000;color:#fff}a.btn.btn-link.text-left{border:1px solid #000;color:#001f3f}a,a.btn.btn-link.text-left:hover,a:hover{color:#001f3f}a:hover{text-decoration:underline}a:visited{color:#001f3f}a.btn:hover{color:#fff;text-decoration:underline}.text-primary{color:#000}.skin-contrast .treeview-menu>li>a{color:#fff}.bg-teal{background-color:#1b6a6a!important}.bg-orange{background-color:#995400!important}.bg-purple{background-color:#3a3767!important}.bg-maroon{background-color:#7d1038!important}.pagination>li>a{color:#00060c!important}.pagination>.active>a{background-color:#001f3f;color:#fff!important}btn-success{background-color:#000d07}input::-webkit-input-placeholder{color:#b5bbc8!important}input::-moz-placeholder{color:#b5bbc8!important}input::-ms-input-placeholder{color:#b5bbc8!important}.select2-default,.select2-selection__placeholder{color:#37383c!important}.callout.callout-info{background-color:#23536f!important}.fixed-table-container tbody .selected td{background-color:#fff8af}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Contrast
* ----------
*/
.skin-contrast .main-header .navbar {
background-color: #001F3F;
}
.skin-contrast .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-contrast .main-header .navbar .nav > li > a:hover,
.skin-contrast .main-header .navbar .nav > li > a:active,
.skin-contrast .main-header .navbar .nav > li > a:focus,
.skin-contrast .main-header .navbar .nav .open > a,
.skin-contrast .main-header .navbar .nav .open > a:hover,
.skin-contrast .main-header .navbar .nav .open > a:focus,
.skin-contrast .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-contrast .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-contrast .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-contrast .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-contrast .main-header .navbar .sidebar-toggle:hover {
background-color: #001226;
}
@media (max-width: 767px) {
.skin-contrast .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-contrast .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-contrast .main-header .navbar .dropdown-menu li a:hover {
background: #001226;
}
}
.skin-contrast .main-header li.user-header {
background-color: #001F3F;
}
.skin-contrast .content-header {
background: transparent;
}
.skin-contrast .wrapper,
.skin-contrast .main-sidebar,
.skin-contrast .left-side {
background-color: #222d32;
}
.skin-contrast .user-panel > .info,
.skin-contrast .user-panel > .info > a {
color: #fff;
}
.skin-contrast .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-contrast .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-contrast .sidebar-menu > li:hover > a,
.skin-contrast .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #001F3F;
}
.skin-contrast .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-contrast .sidebar a {
color: #b8c7ce;
}
.skin-contrast .sidebar a:hover {
text-decoration: none;
}
.skin-contrast .treeview-menu > li > a {
color: #8aa4af;
}
.skin-contrast .treeview-menu > li.active > a,
.skin-contrast .treeview-menu > li > a:hover {
color: #fff;
}
.skin-contrast .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-contrast .sidebar-form input[type="text"],
.skin-contrast .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-contrast .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-contrast .sidebar-form input[type="text"]:focus,
.skin-contrast .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-contrast .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-contrast .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-contrast.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #00060c;
border-color: #000000;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #000000;
border-color: #000000;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #00060c;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #000000;
color: #fff;
}
a.btn.btn-link.text-left {
color: #001F3F;
border: 1px solid #000;
}
a.btn.btn-link.text-left:hover {
color: #001F3F;
}
a {
color: #001F3F;
}
a:hover {
color: #001F3F;
text-decoration: underline;
}
a:visited {
color: #001F3F;
}
a.btn:hover {
color: #fff;
text-decoration: underline;
}
.text-primary {
color: #000000;
}
.skin-contrast .treeview-menu > li > a {
color: #FFF;
}
.bg-teal {
background-color: #1b6a6a !important;
}
.bg-orange {
background-color: #995400 !important;
}
.bg-purple {
background-color: #3a3767 !important;
}
.bg-maroon {
background-color: #7d1038 !important;
}
.pagination > li > a {
color: #00060c !important;
}
.pagination > .active > a {
background-color: #001F3F;
color: #FFF !important;
}
btn-success {
background-color: #000d07;
}
input::-webkit-input-placeholder {
/* Chrome/Opera/Safari */
color: #b5bbc8 !important;
}
input::-moz-placeholder {
/* Firefox 19+ */
color: #b5bbc8 !important;
}
input::-ms-input-placeholder {
/* IE 10+ */
color: #b5bbc8 !important;
}
.select2-default,
.select2-selection__placeholder {
color: #37383c !important;
}
.callout.callout-info {
background-color: #23536f !important;
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,211 +1 @@
/* :root{--background:#222;--back-main:#333;--back-sub:#3d4144;--back-sub-alt:rgba(0,0,0,.36);--button-default:#005a31;--button-primary:#002715;--button-hover:#000d07;--header:#00a65a;--text-main:#bbb;--text-sub:#9b9b9b;--link:#00a65a;--visited-link:#00f383;--hover-link:#0dff90}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav>.active>a,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#333}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .left-side,.skin-green .main-sidebar,.skin-green .wrapper{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#00a65a;color:#fff}.skin-green .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-green .sidebar-form .btn,.skin-green .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-green .sidebar-form input[type=text]:focus,.skin-green .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-green.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#00733e;border-color:#004023;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#004023;border-color:#004023;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#00733e;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#000d07;color:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a{color:#00a65a}a:hover{color:#004023}a:visited{color:#00a65a}.text-primary{color:#004023}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#00a65a}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Green
* ----------
*/
:root {
--background: #222;
--back-main: #333;
--back-sub: #3d4144;
--back-sub-alt: rgba(0, 0, 0, 0.36);
--button-default: #005a31;
--button-primary: #002715;
--button-hover: #000d07;
--header: #00a65a;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #00a65a;
/* Use same as Header picker, lighten by 70% */
--visited-link: #00f383;
/* Use same as Header picker, lighten by 70% */
--hover-link: #0dff90;
}
.skin-green .main-header .navbar {
background-color: #00a65a;
}
.skin-green .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-green .main-header .navbar .nav > li > a:hover,
.skin-green .main-header .navbar .nav > li > a:active,
.skin-green .main-header .navbar .nav > li > a:focus,
.skin-green .main-header .navbar .nav .open > a,
.skin-green .main-header .navbar .nav .open > a:hover,
.skin-green .main-header .navbar .nav .open > a:focus,
.skin-green .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-green .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-green .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-green .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-green .main-header .navbar .sidebar-toggle:hover {
background-color: #008d4c;
}
@media (max-width: 767px) {
.skin-green .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-green .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-green .main-header .navbar .dropdown-menu li a:hover {
background: #008d4c;
}
}
.skin-green .main-header li.user-header {
background-color: #00a65a;
}
.skin-green .content-header {
background: transparent;
}
.skin-green .wrapper,
.skin-green .main-sidebar,
.skin-green .left-side {
background-color: #222d32;
}
.skin-green .user-panel > .info,
.skin-green .user-panel > .info > a {
color: #fff;
}
.skin-green .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-green .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-green .sidebar-menu > li:hover > a,
.skin-green .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #00a65a;
}
.skin-green .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-green .sidebar a {
color: #b8c7ce;
}
.skin-green .sidebar a:hover {
text-decoration: none;
}
.skin-green .treeview-menu > li > a {
color: #8aa4af;
}
.skin-green .treeview-menu > li.active > a,
.skin-green .treeview-menu > li > a:hover {
color: #fff;
}
.skin-green .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-green .sidebar-form input[type="text"],
.skin-green .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-green .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-green .sidebar-form input[type="text"]:focus,
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-green .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-green.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #00733e;
border-color: #004023;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #004023;
border-color: #004023;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #00733e;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #000d07;
color: #fff;
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
a:link {
color: var(--link);
}
a:visited {
color: var(--visited-link);
}
a {
color: #00a65a;
}
a:hover {
color: #004023;
}
a:visited {
color: #00a65a;
}
.text-primary {
color: #004023;
}
.far fa-life-ring {
color: var(--link);
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #00a65a;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

View File

@@ -1,211 +1 @@
/* :root{--background:#222;--back-main:#333;--back-sub:#3d4144;--back-sub-alt:rgba(0,0,0,.36);--button-default:#005a31;--button-primary:#002715;--button-hover:#000d07;--header:#00a65a;--text-main:#bbb;--text-sub:#9b9b9b;--link:#00a65a;--visited-link:#00f383;--hover-link:#0dff90}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav>.active>a,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#333}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:0 0}.skin-green .left-side,.skin-green .main-sidebar,.skin-green .wrapper{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#00a65a;color:#fff}.skin-green .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-green .sidebar-form .btn,.skin-green .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-green .sidebar-form input[type=text]:focus,.skin-green .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-green.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#00733e;border-color:#004023;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#004023;border-color:#004023;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#00733e;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#000d07;color:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a{color:#00a65a}a:hover{color:#004023}a:visited{color:#00a65a}.text-primary{color:#004023}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#00a65a}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Green
* ----------
*/
:root {
--background: #222;
--back-main: #333;
--back-sub: #3d4144;
--back-sub-alt: rgba(0, 0, 0, 0.36);
--button-default: #005a31;
--button-primary: #002715;
--button-hover: #000d07;
--header: #00a65a;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #00a65a;
/* Use same as Header picker, lighten by 70% */
--visited-link: #00f383;
/* Use same as Header picker, lighten by 70% */
--hover-link: #0dff90;
}
.skin-green .main-header .navbar {
background-color: #00a65a;
}
.skin-green .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-green .main-header .navbar .nav > li > a:hover,
.skin-green .main-header .navbar .nav > li > a:active,
.skin-green .main-header .navbar .nav > li > a:focus,
.skin-green .main-header .navbar .nav .open > a,
.skin-green .main-header .navbar .nav .open > a:hover,
.skin-green .main-header .navbar .nav .open > a:focus,
.skin-green .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-green .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-green .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-green .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-green .main-header .navbar .sidebar-toggle:hover {
background-color: #008d4c;
}
@media (max-width: 767px) {
.skin-green .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-green .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-green .main-header .navbar .dropdown-menu li a:hover {
background: #008d4c;
}
}
.skin-green .main-header li.user-header {
background-color: #00a65a;
}
.skin-green .content-header {
background: transparent;
}
.skin-green .wrapper,
.skin-green .main-sidebar,
.skin-green .left-side {
background-color: #222d32;
}
.skin-green .user-panel > .info,
.skin-green .user-panel > .info > a {
color: #fff;
}
.skin-green .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-green .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-green .sidebar-menu > li:hover > a,
.skin-green .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #00a65a;
}
.skin-green .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-green .sidebar a {
color: #b8c7ce;
}
.skin-green .sidebar a:hover {
text-decoration: none;
}
.skin-green .treeview-menu > li > a {
color: #8aa4af;
}
.skin-green .treeview-menu > li.active > a,
.skin-green .treeview-menu > li > a:hover {
color: #fff;
}
.skin-green .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-green .sidebar-form input[type="text"],
.skin-green .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-green .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-green .sidebar-form input[type="text"]:focus,
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-green .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-green.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #00733e;
border-color: #004023;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #004023;
border-color: #004023;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #00733e;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #000d07;
color: #fff;
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
a:link {
color: var(--link);
}
a:visited {
color: var(--visited-link);
}
a {
color: #00a65a;
}
a:hover {
color: #004023;
}
a:visited {
color: #00a65a;
}
.text-primary {
color: #004023;
}
.far fa-life-ring {
color: var(--link);
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #00a65a;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,206 +1 @@
/* .skin-orange .main-header .navbar{background-color:#ff8c00}.skin-orange .main-header .navbar .nav>li>a{color:#fff}.skin-orange .main-header .navbar .nav .open>a,.skin-orange .main-header .navbar .nav .open>a:focus,.skin-orange .main-header .navbar .nav .open>a:hover,.skin-orange .main-header .navbar .nav>.active>a,.skin-orange .main-header .navbar .nav>li>a:active,.skin-orange .main-header .navbar .nav>li>a:focus,.skin-orange .main-header .navbar .nav>li>a:hover,.skin-orange .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-orange .main-header .navbar .sidebar-toggle{color:#fff}.skin-orange .main-header .navbar .sidebar-toggle:hover{background-color:#e67e00}@media (max-width:767px){.skin-orange .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-orange .main-header .navbar .dropdown-menu li a{color:#333}.skin-orange .main-header .navbar .dropdown-menu li a:hover{background:#e67e00}}.skin-orange .main-header li.user-header{background-color:#ff8c00}.skin-orange .content-header{background:transparent}.skin-orange .left-side,.skin-orange .main-sidebar,.skin-orange .wrapper{background-color:#222d32}.skin-orange .user-panel>.info,.skin-orange .user-panel>.info>a{color:#fff}.skin-orange .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-orange .sidebar-menu>li>a{border-left:3px solid transparent}.skin-orange .sidebar-menu>li.active>a,.skin-orange .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#ff8c00;color:#fff}.skin-orange .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-orange .sidebar a{color:#b8c7ce}.skin-orange .sidebar a:hover{text-decoration:none}.skin-orange .treeview-menu>li>a{color:#8aa4af}.skin-orange .treeview-menu>li.active>a,.skin-orange .treeview-menu>li>a:hover{color:#fff}.skin-orange .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-orange .sidebar-form .btn,.skin-orange .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-orange .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-orange .sidebar-form input[type=text]:focus,.skin-orange .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-orange .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-orange .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-orange.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#cc7000;border-color:#995400;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#995400;border-color:#995400;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#cc7000;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#663800;color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#995400}:root{--button-default:#b36200;--button-primary:#804600;--button-hover:#663800;--header:#ff8c00;--text-main:#bbb;--text-sub:#9b9b9b;--link:#ff8c00;--visited-link:#ffa333;--hover-link:#ffaf4d;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ff8c00}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Orange
* ----------
*/
.skin-orange .main-header .navbar {
background-color: #FF8C00;
}
.skin-orange .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-orange .main-header .navbar .nav > li > a:hover,
.skin-orange .main-header .navbar .nav > li > a:active,
.skin-orange .main-header .navbar .nav > li > a:focus,
.skin-orange .main-header .navbar .nav .open > a,
.skin-orange .main-header .navbar .nav .open > a:hover,
.skin-orange .main-header .navbar .nav .open > a:focus,
.skin-orange .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-orange .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-orange .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-orange .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-orange .main-header .navbar .sidebar-toggle:hover {
background-color: #e67e00;
}
@media (max-width: 767px) {
.skin-orange .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-orange .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-orange .main-header .navbar .dropdown-menu li a:hover {
background: #e67e00;
}
}
.skin-orange .main-header li.user-header {
background-color: #FF8C00;
}
.skin-orange .content-header {
background: transparent;
}
.skin-orange .wrapper,
.skin-orange .main-sidebar,
.skin-orange .left-side {
background-color: #222d32;
}
.skin-orange .user-panel > .info,
.skin-orange .user-panel > .info > a {
color: #fff;
}
.skin-orange .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-orange .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-orange .sidebar-menu > li:hover > a,
.skin-orange .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #FF8C00;
}
.skin-orange .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-orange .sidebar a {
color: #b8c7ce;
}
.skin-orange .sidebar a:hover {
text-decoration: none;
}
.skin-orange .treeview-menu > li > a {
color: #8aa4af;
}
.skin-orange .treeview-menu > li.active > a,
.skin-orange .treeview-menu > li > a:hover {
color: #fff;
}
.skin-orange .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-orange .sidebar-form input[type="text"],
.skin-orange .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-orange .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-orange .sidebar-form input[type="text"]:focus,
.skin-orange .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-orange .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-orange .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-orange.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #cc7000;
border-color: #995400;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #995400;
border-color: #995400;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #cc7000;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #663800;
color: #fff;
}
a {
color: var(--link);
}
a:hover {
color: var(--hover-link);
}
a:visited {
color: var(--visited-link);
}
.text-primary {
color: #995400;
}
:root {
--button-default: #b36200;
--button-primary: #804600;
--button-hover: #663800;
--header: #FF8C00;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #FF8C00;
/* Use same as Header picker, lighten by 70% */
--visited-link: #ffa333;
/* Use same as Header picker, lighten by 70% */
--hover-link: #ffaf4d;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
.far fa-life-ring {
color: var(--link);
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #FF8C00;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

View File

@@ -1,206 +1 @@
/* .skin-orange .main-header .navbar{background-color:#ff8c00}.skin-orange .main-header .navbar .nav>li>a{color:#fff}.skin-orange .main-header .navbar .nav .open>a,.skin-orange .main-header .navbar .nav .open>a:focus,.skin-orange .main-header .navbar .nav .open>a:hover,.skin-orange .main-header .navbar .nav>.active>a,.skin-orange .main-header .navbar .nav>li>a:active,.skin-orange .main-header .navbar .nav>li>a:focus,.skin-orange .main-header .navbar .nav>li>a:hover,.skin-orange .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-orange .main-header .navbar .sidebar-toggle{color:#fff}.skin-orange .main-header .navbar .sidebar-toggle:hover{background-color:#e67e00}@media (max-width:767px){.skin-orange .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-orange .main-header .navbar .dropdown-menu li a{color:#333}.skin-orange .main-header .navbar .dropdown-menu li a:hover{background:#e67e00}}.skin-orange .main-header li.user-header{background-color:#ff8c00}.skin-orange .content-header{background:0 0}.skin-orange .left-side,.skin-orange .main-sidebar,.skin-orange .wrapper{background-color:#222d32}.skin-orange .user-panel>.info,.skin-orange .user-panel>.info>a{color:#fff}.skin-orange .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-orange .sidebar-menu>li>a{border-left:3px solid transparent}.skin-orange .sidebar-menu>li.active>a,.skin-orange .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#ff8c00;color:#fff}.skin-orange .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-orange .sidebar a{color:#b8c7ce}.skin-orange .sidebar a:hover{text-decoration:none}.skin-orange .treeview-menu>li>a{color:#8aa4af}.skin-orange .treeview-menu>li.active>a,.skin-orange .treeview-menu>li>a:hover{color:#fff}.skin-orange .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-orange .sidebar-form .btn,.skin-orange .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-orange .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-orange .sidebar-form input[type=text]:focus,.skin-orange .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-orange .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-orange .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-orange.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#cc7000;border-color:#995400;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#995400;border-color:#995400;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#cc7000;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#663800;color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#995400}:root{--button-default:#b36200;--button-primary:#804600;--button-hover:#663800;--header:#ff8c00;--text-main:#bbb;--text-sub:#9b9b9b;--link:#ff8c00;--visited-link:#ffa333;--hover-link:#ffaf4d;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ff8c00}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Orange
* ----------
*/
.skin-orange .main-header .navbar {
background-color: #FF8C00;
}
.skin-orange .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-orange .main-header .navbar .nav > li > a:hover,
.skin-orange .main-header .navbar .nav > li > a:active,
.skin-orange .main-header .navbar .nav > li > a:focus,
.skin-orange .main-header .navbar .nav .open > a,
.skin-orange .main-header .navbar .nav .open > a:hover,
.skin-orange .main-header .navbar .nav .open > a:focus,
.skin-orange .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-orange .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-orange .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-orange .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-orange .main-header .navbar .sidebar-toggle:hover {
background-color: #e67e00;
}
@media (max-width: 767px) {
.skin-orange .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-orange .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-orange .main-header .navbar .dropdown-menu li a:hover {
background: #e67e00;
}
}
.skin-orange .main-header li.user-header {
background-color: #FF8C00;
}
.skin-orange .content-header {
background: transparent;
}
.skin-orange .wrapper,
.skin-orange .main-sidebar,
.skin-orange .left-side {
background-color: #222d32;
}
.skin-orange .user-panel > .info,
.skin-orange .user-panel > .info > a {
color: #fff;
}
.skin-orange .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-orange .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-orange .sidebar-menu > li:hover > a,
.skin-orange .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #FF8C00;
}
.skin-orange .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-orange .sidebar a {
color: #b8c7ce;
}
.skin-orange .sidebar a:hover {
text-decoration: none;
}
.skin-orange .treeview-menu > li > a {
color: #8aa4af;
}
.skin-orange .treeview-menu > li.active > a,
.skin-orange .treeview-menu > li > a:hover {
color: #fff;
}
.skin-orange .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-orange .sidebar-form input[type="text"],
.skin-orange .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-orange .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-orange .sidebar-form input[type="text"]:focus,
.skin-orange .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-orange .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-orange .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-orange.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #cc7000;
border-color: #995400;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #995400;
border-color: #995400;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #cc7000;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #663800;
color: #fff;
}
a {
color: var(--link);
}
a:hover {
color: var(--hover-link);
}
a:visited {
color: var(--visited-link);
}
.text-primary {
color: #995400;
}
:root {
--button-default: #b36200;
--button-primary: #804600;
--button-hover: #663800;
--header: #FF8C00;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #FF8C00;
/* Use same as Header picker, lighten by 70% */
--visited-link: #ffa333;
/* Use same as Header picker, lighten by 70% */
--hover-link: #ffaf4d;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
.far fa-life-ring {
color: var(--link);
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #FF8C00;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,206 +1 @@
/* .skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav>.active>a,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#333}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .left-side,.skin-purple .main-sidebar,.skin-purple .wrapper{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#605ca8;color:#fff}.skin-purple .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .treeview-menu>li>a{color:#8aa4af}.skin-purple .treeview-menu>li.active>a,.skin-purple .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-purple .sidebar-form .btn,.skin-purple .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-purple .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-purple .sidebar-form input[type=text]:focus,.skin-purple .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-purple.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#4c4988;border-color:#3a3767;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#3a3767;border-color:#3a3767;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#4c4988;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#272546;color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#3a3767}:root{--button-default:#434078;--button-primary:#302e56;--button-hover:#272546;--header:#605ca8;--text-main:#bbb;--text-sub:#9b9b9b;--link:#605ca8;--visited-link:#918ec3;--hover-link:#c1c0dd;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#605ca8}.far fa-life-ring{color:var(--link)}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Purple
* ----------
*/
.skin-purple .main-header .navbar {
background-color: #605ca8;
}
.skin-purple .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-purple .main-header .navbar .nav > li > a:hover,
.skin-purple .main-header .navbar .nav > li > a:active,
.skin-purple .main-header .navbar .nav > li > a:focus,
.skin-purple .main-header .navbar .nav .open > a,
.skin-purple .main-header .navbar .nav .open > a:hover,
.skin-purple .main-header .navbar .nav .open > a:focus,
.skin-purple .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-purple .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-purple .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-purple .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-purple .main-header .navbar .sidebar-toggle:hover {
background-color: #555299;
}
@media (max-width: 767px) {
.skin-purple .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-purple .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-purple .main-header .navbar .dropdown-menu li a:hover {
background: #555299;
}
}
.skin-purple .main-header li.user-header {
background-color: #605ca8;
}
.skin-purple .content-header {
background: transparent;
}
.skin-purple .wrapper,
.skin-purple .main-sidebar,
.skin-purple .left-side {
background-color: #222d32;
}
.skin-purple .user-panel > .info,
.skin-purple .user-panel > .info > a {
color: #fff;
}
.skin-purple .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-purple .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-purple .sidebar-menu > li:hover > a,
.skin-purple .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #605ca8;
}
.skin-purple .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-purple .sidebar a {
color: #b8c7ce;
}
.skin-purple .sidebar a:hover {
text-decoration: none;
}
.skin-purple .treeview-menu > li > a {
color: #8aa4af;
}
.skin-purple .treeview-menu > li.active > a,
.skin-purple .treeview-menu > li > a:hover {
color: #fff;
}
.skin-purple .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-purple .sidebar-form input[type="text"],
.skin-purple .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-purple .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-purple .sidebar-form input[type="text"]:focus,
.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-purple .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-purple.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #4c4988;
border-color: #3a3767;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #3a3767;
border-color: #3a3767;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #4c4988;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #272546;
color: #fff;
}
a {
color: var(--link);
}
a:hover {
color: var(--hover-link);
}
a:visited {
color: var(--visited-link);
}
.text-primary {
color: #3a3767;
}
:root {
--button-default: #434078;
--button-primary: #302e56;
--button-hover: #272546;
--header: #605ca8;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #605ca8;
/* Use same as Header picker, lighten by 70% */
--visited-link: #918ec3;
/* Use same as Header picker, lighten by 70% */
--hover-link: #c1c0dd;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #605ca8;
}
.far fa-life-ring {
color: var(--link);
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

View File

@@ -1,206 +1 @@
/* .skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav>.active>a,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#333}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:0 0}.skin-purple .left-side,.skin-purple .main-sidebar,.skin-purple .wrapper{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#605ca8;color:#fff}.skin-purple .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .treeview-menu>li>a{color:#8aa4af}.skin-purple .treeview-menu>li.active>a,.skin-purple .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-purple .sidebar-form .btn,.skin-purple .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-purple .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-purple .sidebar-form input[type=text]:focus,.skin-purple .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-purple.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#4c4988;border-color:#3a3767;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#3a3767;border-color:#3a3767;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#4c4988;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#272546;color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#3a3767}:root{--button-default:#434078;--button-primary:#302e56;--button-hover:#272546;--header:#605ca8;--text-main:#bbb;--text-sub:#9b9b9b;--link:#605ca8;--visited-link:#918ec3;--hover-link:#c1c0dd;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#605ca8}.far fa-life-ring{color:var(--link)}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
* Skin: Purple
* ----------
*/
.skin-purple .main-header .navbar {
background-color: #605ca8;
}
.skin-purple .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-purple .main-header .navbar .nav > li > a:hover,
.skin-purple .main-header .navbar .nav > li > a:active,
.skin-purple .main-header .navbar .nav > li > a:focus,
.skin-purple .main-header .navbar .nav .open > a,
.skin-purple .main-header .navbar .nav .open > a:hover,
.skin-purple .main-header .navbar .nav .open > a:focus,
.skin-purple .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-purple .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-purple .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-purple .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-purple .main-header .navbar .sidebar-toggle:hover {
background-color: #555299;
}
@media (max-width: 767px) {
.skin-purple .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-purple .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-purple .main-header .navbar .dropdown-menu li a:hover {
background: #555299;
}
}
.skin-purple .main-header li.user-header {
background-color: #605ca8;
}
.skin-purple .content-header {
background: transparent;
}
.skin-purple .wrapper,
.skin-purple .main-sidebar,
.skin-purple .left-side {
background-color: #222d32;
}
.skin-purple .user-panel > .info,
.skin-purple .user-panel > .info > a {
color: #fff;
}
.skin-purple .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-purple .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-purple .sidebar-menu > li:hover > a,
.skin-purple .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #605ca8;
}
.skin-purple .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-purple .sidebar a {
color: #b8c7ce;
}
.skin-purple .sidebar a:hover {
text-decoration: none;
}
.skin-purple .treeview-menu > li > a {
color: #8aa4af;
}
.skin-purple .treeview-menu > li.active > a,
.skin-purple .treeview-menu > li > a:hover {
color: #fff;
}
.skin-purple .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-purple .sidebar-form input[type="text"],
.skin-purple .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-purple .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-purple .sidebar-form input[type="text"]:focus,
.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-purple .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-purple.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #4c4988;
border-color: #3a3767;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #3a3767;
border-color: #3a3767;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #4c4988;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #272546;
color: #fff;
}
a {
color: var(--link);
}
a:hover {
color: var(--hover-link);
}
a:visited {
color: var(--visited-link);
}
.text-primary {
color: #3a3767;
}
:root {
--button-default: #434078;
--button-primary: #302e56;
--button-hover: #272546;
--header: #605ca8;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #605ca8;
/* Use same as Header picker, lighten by 70% */
--visited-link: #918ec3;
/* Use same as Header picker, lighten by 70% */
--hover-link: #c1c0dd;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #605ca8;
}
.far fa-life-ring {
color: var(--link);
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,213 +1 @@
/* .skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav>.active>a,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#333}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .left-side,.skin-red .main-sidebar,.skin-red .wrapper{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#dd4b39;color:#fff}.skin-red .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .treeview-menu>li>a{color:#8aa4af}.skin-red .treeview-menu>li.active>a,.skin-red .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-red .sidebar-form .btn,.skin-red .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-red .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-red .sidebar-form input[type=text]:focus,.skin-red .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-red.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#c23321;border-color:#96271a;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#96271a;border-color:#96271a;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#c23321;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#6b1c12;color:#fff}a{color:#dd4b39}a:hover{color:#96271a}a:visited{color:#dd4b39}.text-primary{color:#96271a}:root{--button-default:#ac2d1e;--button-primary:#802216;--button-hover:#6b1c12;--header:#dd4b39;--text-main:#bbb;--text-alt:#222;--text-sub:#9b9b9b;--link:#dd4b39;--visited-link:#e8867a;--hover-link:#f3c2bc;--nav-link:#fff;--light-link:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dd4b39}.search-highlight,.search-highlight:hover{background-color:#e9d15b}.far fa-life-ring{color:var(--link)}
* Skin: Red
* ----------
*/
.skin-red .main-header .navbar {
background-color: #dd4b39;
}
.skin-red .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-red .main-header .navbar .nav > li > a:hover,
.skin-red .main-header .navbar .nav > li > a:active,
.skin-red .main-header .navbar .nav > li > a:focus,
.skin-red .main-header .navbar .nav .open > a,
.skin-red .main-header .navbar .nav .open > a:hover,
.skin-red .main-header .navbar .nav .open > a:focus,
.skin-red .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-red .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-red .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-red .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-red .main-header .navbar .sidebar-toggle:hover {
background-color: #d73925;
}
@media (max-width: 767px) {
.skin-red .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-red .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-red .main-header .navbar .dropdown-menu li a:hover {
background: #d73925;
}
}
.skin-red .main-header li.user-header {
background-color: #dd4b39;
}
.skin-red .content-header {
background: transparent;
}
.skin-red .wrapper,
.skin-red .main-sidebar,
.skin-red .left-side {
background-color: #222d32;
}
.skin-red .user-panel > .info,
.skin-red .user-panel > .info > a {
color: #fff;
}
.skin-red .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-red .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-red .sidebar-menu > li:hover > a,
.skin-red .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #dd4b39;
}
.skin-red .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-red .sidebar a {
color: #b8c7ce;
}
.skin-red .sidebar a:hover {
text-decoration: none;
}
.skin-red .treeview-menu > li > a {
color: #8aa4af;
}
.skin-red .treeview-menu > li.active > a,
.skin-red .treeview-menu > li > a:hover {
color: #fff;
}
.skin-red .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-red .sidebar-form input[type="text"],
.skin-red .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-red .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-red .sidebar-form input[type="text"]:focus,
.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-red .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-red.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #c23321;
border-color: #96271a;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #96271a;
border-color: #96271a;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #c23321;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #6b1c12;
color: #fff;
}
a {
color: #dd4b39;
}
a:hover {
color: #96271a;
}
a:visited {
color: #dd4b39;
}
.text-primary {
color: #96271a;
}
:root {
--button-default: #ac2d1e;
--button-primary: #802216;
--button-hover: #6b1c12;
--header: #dd4b39;
/* Use same as Header picker */
--text-main: #BBB;
--text-alt: #222;
--text-sub: #9b9b9b;
--link: #dd4b39;
/* Use same as Header picker, lighten by 70% */
--visited-link: #e8867a;
/* Use same as Header picker, lighten by 70% */
--hover-link: #f3c2bc;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a:link {
color: var(--link);
}
a:visited {
color: var(--visited-link);
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #dd4b39;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}
.far fa-life-ring {
color: var(--link);
}

View File

@@ -1,213 +1 @@
/* .skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav>.active>a,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#333}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:0 0}.skin-red .left-side,.skin-red .main-sidebar,.skin-red .wrapper{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#dd4b39;color:#fff}.skin-red .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .treeview-menu>li>a{color:#8aa4af}.skin-red .treeview-menu>li.active>a,.skin-red .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-red .sidebar-form .btn,.skin-red .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-red .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-red .sidebar-form input[type=text]:focus,.skin-red .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-red.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#c23321;border-color:#96271a;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#96271a;border-color:#96271a;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#c23321;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#6b1c12;color:#fff}a{color:#dd4b39}a:hover{color:#96271a}a:visited{color:#dd4b39}.text-primary{color:#96271a}:root{--button-default:#ac2d1e;--button-primary:#802216;--button-hover:#6b1c12;--header:#dd4b39;--text-main:#bbb;--text-alt:#222;--text-sub:#9b9b9b;--link:#dd4b39;--visited-link:#e8867a;--hover-link:#f3c2bc;--nav-link:#fff;--light-link:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dd4b39}.search-highlight,.search-highlight:hover{background-color:#e9d15b}.far fa-life-ring{color:var(--link)}
* Skin: Red
* ----------
*/
.skin-red .main-header .navbar {
background-color: #dd4b39;
}
.skin-red .main-header .navbar .nav > li > a {
color: #fff;
}
.skin-red .main-header .navbar .nav > li > a:hover,
.skin-red .main-header .navbar .nav > li > a:active,
.skin-red .main-header .navbar .nav > li > a:focus,
.skin-red .main-header .navbar .nav .open > a,
.skin-red .main-header .navbar .nav .open > a:hover,
.skin-red .main-header .navbar .nav .open > a:focus,
.skin-red .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-red .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-red .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-red .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-red .main-header .navbar .sidebar-toggle:hover {
background-color: #d73925;
}
@media (max-width: 767px) {
.skin-red .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-red .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-red .main-header .navbar .dropdown-menu li a:hover {
background: #d73925;
}
}
.skin-red .main-header li.user-header {
background-color: #dd4b39;
}
.skin-red .content-header {
background: transparent;
}
.skin-red .wrapper,
.skin-red .main-sidebar,
.skin-red .left-side {
background-color: #222d32;
}
.skin-red .user-panel > .info,
.skin-red .user-panel > .info > a {
color: #fff;
}
.skin-red .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-red .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-red .sidebar-menu > li:hover > a,
.skin-red .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #dd4b39;
}
.skin-red .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-red .sidebar a {
color: #b8c7ce;
}
.skin-red .sidebar a:hover {
text-decoration: none;
}
.skin-red .treeview-menu > li > a {
color: #8aa4af;
}
.skin-red .treeview-menu > li.active > a,
.skin-red .treeview-menu > li > a:hover {
color: #fff;
}
.skin-red .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-red .sidebar-form input[type="text"],
.skin-red .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-red .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-red .sidebar-form input[type="text"]:focus,
.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-red .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-red.layout-top-nav .main-header > .logo .logo-variant {
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #c23321;
border-color: #96271a;
color: #fff;
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #96271a;
border-color: #96271a;
color: #fff;
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #c23321;
color: #fff;
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #6b1c12;
color: #fff;
}
a {
color: #dd4b39;
}
a:hover {
color: #96271a;
}
a:visited {
color: #dd4b39;
}
.text-primary {
color: #96271a;
}
:root {
--button-default: #ac2d1e;
--button-primary: #802216;
--button-hover: #6b1c12;
--header: #dd4b39;
/* Use same as Header picker */
--text-main: #BBB;
--text-alt: #222;
--text-sub: #9b9b9b;
--link: #dd4b39;
/* Use same as Header picker, lighten by 70% */
--visited-link: #e8867a;
/* Use same as Header picker, lighten by 70% */
--hover-link: #f3c2bc;
/* Use same as Header picker, lighten by 70% */
--nav-link: #FFF;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
a:link {
color: var(--link);
}
a:visited {
color: var(--visited-link);
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #dd4b39;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}
.far fa-life-ring {
color: var(--link);
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,220 +1 @@
/* .skin-yellow .main-header .navbar{background-color:#fbcc34}.skin-yellow .main-header .navbar .nav>li>a{color:hsla(0,0%,100%,.8)}.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav>.active>a,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav>li>a:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:hsla(0,0%,100%,.8)}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#000}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#fbc61b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#333}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#fbc61b}}.skin-yellow .main-header li.user-header{background-color:#fbcc34}.skin-yellow .content-header{background:transparent}.skin-yellow .left-side,.skin-yellow .main-sidebar,.skin-yellow .wrapper{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#fbcc34;color:#fff}.skin-yellow .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .treeview-menu>li>a{color:#8aa4af}.skin-yellow .treeview-menu>li.active>a,.skin-yellow .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-yellow .sidebar-form .btn,.skin-yellow .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-yellow .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-yellow .sidebar-form input[type=text]:focus,.skin-yellow .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-yellow.layout-top-nav .main-header>.logo .logo-variant{background-color:none;color:#413f42}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#f7be05;border-color:#c59704;color:var(--nav-link)}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#c59704;border-color:#c59704;color:var(--nav-link)}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#f7be05;color:var(--nav-link)}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#937103;color:var(--nav-link)}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#c59704}:root{--button-default:#deab04;--button-primary:#ac8403;--button-hover:#937103;--header:#fbcc34;--text-main:#bbb;--text-sub:#9b9b9b;--link:#5b585c;--visited-link:#747176;--hover-link:#b4b1b5;--nav-link:#222;--light-link:#fff}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#fbcc34}.search-highlight,.search-highlight:hover{background-color:#e9d15b}.navbar-nav>li>a:link,.navbar-nav>li>a:visited,.thead,:hover{color:var(--nav-link)}.skin-yellow .main-header .navbar .nav>li>a{color:#413f42}.far fa-life-ring{color:var(--link)}
* Skin: Yellow
* ----------
*/
.skin-yellow .main-header .navbar {
background-color: #FBCC34;
}
.skin-yellow .main-header .navbar .nav > li > a {
color: rgba(255, 255, 255, 0.8);
}
.skin-yellow .main-header .navbar .nav > li > a:hover,
.skin-yellow .main-header .navbar .nav > li > a:active,
.skin-yellow .main-header .navbar .nav > li > a:focus,
.skin-yellow .main-header .navbar .nav .open > a,
.skin-yellow .main-header .navbar .nav .open > a:hover,
.skin-yellow .main-header .navbar .nav .open > a:focus,
.skin-yellow .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-yellow .main-header .navbar .sidebar-toggle {
color: rgba(255, 255, 255, 0.8);
}
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-yellow .main-header .navbar .sidebar-toggle {
color: #000;
}
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
background-color: #fbc61b;
}
@media (max-width: 767px) {
.skin-yellow .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-yellow .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-yellow .main-header .navbar .dropdown-menu li a:hover {
background: #fbc61b;
}
}
.skin-yellow .main-header li.user-header {
background-color: #FBCC34;
}
.skin-yellow .content-header {
background: transparent;
}
.skin-yellow .wrapper,
.skin-yellow .main-sidebar,
.skin-yellow .left-side {
background-color: #222d32;
}
.skin-yellow .user-panel > .info,
.skin-yellow .user-panel > .info > a {
color: #fff;
}
.skin-yellow .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-yellow .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-yellow .sidebar-menu > li:hover > a,
.skin-yellow .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #FBCC34;
}
.skin-yellow .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-yellow .sidebar a {
color: #b8c7ce;
}
.skin-yellow .sidebar a:hover {
text-decoration: none;
}
.skin-yellow .treeview-menu > li > a {
color: #8aa4af;
}
.skin-yellow .treeview-menu > li.active > a,
.skin-yellow .treeview-menu > li > a:hover {
color: #fff;
}
.skin-yellow .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-yellow .sidebar-form input[type="text"],
.skin-yellow .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-yellow .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-yellow .sidebar-form input[type="text"]:focus,
.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-yellow .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-yellow.layout-top-nav .main-header > .logo .logo-variant {
color: #413F42;
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #f7be05;
border-color: #c59704;
color: var(--nav-link);
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #c59704;
border-color: #c59704;
color: var(--nav-link);
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #f7be05;
color: var(--nav-link);
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #937103;
color: var(--nav-link);
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
a {
color: var(--link);
}
a:hover {
color: var(--hover-link);
}
a:visited {
color: var(--visited-link);
}
.text-primary {
color: #c59704;
}
:root {
--button-default: #deab04;
--button-primary: #ac8403;
--button-hover: #937103;
--header: #FBCC34;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #5b585c;
/* Use same as Header picker, lighten by 70% */
--visited-link: #747176;
/* Use same as Header picker, lighten by 70% */
--hover-link: #b4b1b5;
/* Use same as Header picker, lighten by 70% */
--nav-link: #222;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #FBCC34;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}
.thead,
.navbar-nav > li > a:link {
color: var(--nav-link);
}
.navbar-nav > li > a:visited {
color: var(--nav-link);
}
:hover {
color: var(--nav-link);
}
.skin-yellow .main-header .navbar .nav > li > a {
color: #413F42;
}
.far fa-life-ring {
color: var(--link);
}

View File

@@ -1,220 +1 @@
/* .skin-yellow .main-header .navbar{background-color:#fbcc34}.skin-yellow .main-header .navbar .nav>li>a{color:hsla(0,0%,100%,.8)}.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav>.active>a,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav>li>a:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:hsla(0,0%,100%,.8)}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#000}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#fbc61b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#333}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#fbc61b}}.skin-yellow .main-header li.user-header{background-color:#fbcc34}.skin-yellow .content-header{background:0 0}.skin-yellow .left-side,.skin-yellow .main-sidebar,.skin-yellow .wrapper{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#fbcc34;color:#fff}.skin-yellow .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .treeview-menu>li>a{color:#8aa4af}.skin-yellow .treeview-menu>li.active>a,.skin-yellow .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-yellow .sidebar-form .btn,.skin-yellow .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-yellow .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-yellow .sidebar-form input[type=text]:focus,.skin-yellow .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-yellow.layout-top-nav .main-header>.logo .logo-variant{background-color:none;color:#413f42}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#f7be05;border-color:#c59704;color:var(--nav-link)}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#c59704;border-color:#c59704;color:var(--nav-link)}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#f7be05;color:var(--nav-link)}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#937103;color:var(--nav-link)}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#c59704}:root{--button-default:#deab04;--button-primary:#ac8403;--button-hover:#937103;--header:#fbcc34;--text-main:#bbb;--text-sub:#9b9b9b;--link:#5b585c;--visited-link:#747176;--hover-link:#b4b1b5;--nav-link:#222;--light-link:#fff}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#fbcc34}.search-highlight,.search-highlight:hover{background-color:#e9d15b}.navbar-nav>li>a:link,.navbar-nav>li>a:visited,.thead,:hover{color:var(--nav-link)}.skin-yellow .main-header .navbar .nav>li>a{color:#413f42}.far fa-life-ring{color:var(--link)}
* Skin: Yellow
* ----------
*/
.skin-yellow .main-header .navbar {
background-color: #FBCC34;
}
.skin-yellow .main-header .navbar .nav > li > a {
color: rgba(255, 255, 255, 0.8);
}
.skin-yellow .main-header .navbar .nav > li > a:hover,
.skin-yellow .main-header .navbar .nav > li > a:active,
.skin-yellow .main-header .navbar .nav > li > a:focus,
.skin-yellow .main-header .navbar .nav .open > a,
.skin-yellow .main-header .navbar .nav .open > a:hover,
.skin-yellow .main-header .navbar .nav .open > a:focus,
.skin-yellow .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-yellow .main-header .navbar .sidebar-toggle {
color: rgba(255, 255, 255, 0.8);
}
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-yellow .main-header .navbar .sidebar-toggle {
color: #000;
}
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
background-color: #fbc61b;
}
@media (max-width: 767px) {
.skin-yellow .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-yellow .main-header .navbar .dropdown-menu li a {
color: #333;
}
.skin-yellow .main-header .navbar .dropdown-menu li a:hover {
background: #fbc61b;
}
}
.skin-yellow .main-header li.user-header {
background-color: #FBCC34;
}
.skin-yellow .content-header {
background: transparent;
}
.skin-yellow .wrapper,
.skin-yellow .main-sidebar,
.skin-yellow .left-side {
background-color: #222d32;
}
.skin-yellow .user-panel > .info,
.skin-yellow .user-panel > .info > a {
color: #fff;
}
.skin-yellow .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-yellow .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-yellow .sidebar-menu > li:hover > a,
.skin-yellow .sidebar-menu > li.active > a {
color: #fff;
background: #1e282c;
border-left-color: #FBCC34;
}
.skin-yellow .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-yellow .sidebar a {
color: #b8c7ce;
}
.skin-yellow .sidebar a:hover {
text-decoration: none;
}
.skin-yellow .treeview-menu > li > a {
color: #8aa4af;
}
.skin-yellow .treeview-menu > li.active > a,
.skin-yellow .treeview-menu > li > a:hover {
color: #fff;
}
.skin-yellow .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-yellow .sidebar-form input[type="text"],
.skin-yellow .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
transition: all 0.3s ease-in-out;
}
.skin-yellow .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-yellow .sidebar-form input[type="text"]:focus,
.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-yellow .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-yellow.layout-top-nav .main-header > .logo .logo-variant {
color: #413F42;
background-color: none;
}
.btn.btn-primary,
.btn:hover.btn-primary,
.btn .btn-primary:link,
.btn:hover .btn-primary:link {
background-color: #f7be05;
border-color: #c59704;
color: var(--nav-link);
}
.btna.btn-primary:hover,
.btn:hovera.btn-primary:hover {
background-color: #c59704;
border-color: #c59704;
color: var(--nav-link);
}
.btn.btn-white:link,
.btn:hover.btn-white:link {
background-color: #f7be05;
color: var(--nav-link);
}
.btn.btn-white:hover,
.btn:hover.btn-white:hover {
background-color: #937103;
color: var(--nav-link);
}
a.btn-info:link,
a.btn-warning:link,
a.btn-danger:link {
color: #FFF;
}
a.btn-info:visited,
a.btn-warning:visited,
a.btn-danger:visited {
color: #FFF;
}
a {
color: var(--link);
}
a:hover {
color: var(--hover-link);
}
a:visited {
color: var(--visited-link);
}
.text-primary {
color: #c59704;
}
:root {
--button-default: #deab04;
--button-primary: #ac8403;
--button-hover: #937103;
--header: #FBCC34;
/* Use same as Header picker */
--text-main: #BBB;
--text-sub: #9b9b9b;
--link: #5b585c;
/* Use same as Header picker, lighten by 70% */
--visited-link: #747176;
/* Use same as Header picker, lighten by 70% */
--hover-link: #b4b1b5;
/* Use same as Header picker, lighten by 70% */
--nav-link: #222;
/* Use same as Header picker */
--light-link: #fff;
/* Use same as Header picker */
}
.fixed-table-container tbody .selected td {
background-color: #fff8af;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #FBCC34;
}
.search-highlight,
.search-highlight:hover {
background-color: #e9d15b;
}
.thead,
.navbar-nav > li > a:link {
color: var(--nav-link);
}
.navbar-nav > li > a:visited {
color: var(--nav-link);
}
:hover {
color: var(--nav-link);
}
.skin-yellow .main-header .navbar .nav > li > a {
color: #413F42;
}
.far fa-life-ring {
color: var(--link);
}

File diff suppressed because one or more lines are too long

View File

@@ -44,6 +44,12 @@
* http://jquery.org/license * http://jquery.org/license
*/ */
/*!
* vue-resource v1.5.3
* https://github.com/pagekit/vue-resource
* Released under the MIT License.
*/
/** /**
* @license * @license
* Lodash <https://lodash.com/> * Lodash <https://lodash.com/>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

105720
public/js/dist/all.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,24 +1,24 @@
{ {
"/js/build/app.js": "/js/build/app.js?id=82ddaa718cced6fb0be6e8db6f16a0c0", "/js/build/app.js": "/js/build/app.js?id=43fc984e5d0f901e04cef2474972e97f",
"/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=f677207c6cf9678eb539abecb408c374", "/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=392cc93cfc0be0349bab9697669dd091",
"/css/build/overrides.css": "/css/build/overrides.css?id=5166569ede5a36802eadeea982686ca6", "/css/build/overrides.css": "/css/build/overrides.css?id=eb013ebb79d92e25ce24b0c0b53185e4",
"/css/build/app.css": "/css/build/app.css?id=b612c48e78fece2e1e8042ae24cc5f1e", "/css/build/app.css": "/css/build/app.css?id=ac51a0600b419996e705675b6fcf1a8b",
"/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=dc383f8560a8d4adb51d44fb4043e03b", "/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=a67bd93bed52e6a29967fe472de66d6c",
"/css/dist/skins/skin-orange.css": "/css/dist/skins/skin-orange.css?id=6f0563e726c2fe4fab4026daaa5bfdf2", "/css/dist/skins/skin-orange.css": "/css/dist/skins/skin-orange.css?id=268041e902b019730c23ee3875838005",
"/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=e6e53eef152bba01a4c666a4d8b01117", "/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=d409d9b1a3b69247df8b98941ba06e33",
"/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=07273f6ca3c698a39e8fc2075af4fa07", "/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=4a9e8c5e7b09506fa3e3a3f42849e07f",
"/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=c1f33574ecb9d3e69d9b8fe5bd68e101", "/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=21fef066e0bb1b02fd83fcb6694fad5f",
"/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=7b315b9612b8fde8f9c5b0ddb6bba690", "/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=fc7adb943668ac69fe4b646625a7571f",
"/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=7d92dea45d94be7e1d4e427c728d335d", "/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=9f944e8021781af1ce45d27765d1c0c2",
"/css/dist/skins/skin-purple.css": "/css/dist/skins/skin-purple.css?id=6fe68325d5356197672c27bc77cedcb4", "/css/dist/skins/skin-purple.css": "/css/dist/skins/skin-purple.css?id=cf6c8c340420724b02d6e787ef9bded5",
"/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=8ca888bbc050d9680cbb65021382acba", "/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=7f0eb9e355b36b41c61c3af3b4d41143",
"/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=bdfc704731682c67645a2248b0b8d2d7", "/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=f4d95ad9d0944587549e35b6929b4b04",
"/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=76482123f6c70e866d6b971ba91de7bb", "/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=1f33ca3d860461c1127ec465ab3ebb6b",
"/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=e36e83c2aa3c3afdbb8ebe2c0309e91d", "/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=44f9320d0739f419c9246f7f39395b02",
"/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=0a82a6ae6bb4e58fe62d162c4fb50397", "/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=b48f4d8af0e1ca5621c161e93951109f",
"/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=da6c7997d9de2f8329142399f0ce50da", "/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=f0fbbb0ac729ea092578fb05ca615460",
"/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=44bf834f2110504a793dadec132a5898", "/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=b9a74ec0cd68f83e7480d5ae39919beb",
"/css/dist/all.css": "/css/dist/all.css?id=c687b2e18c367a2600b13a237a23816a", "/css/dist/all.css": "/css/dist/all.css?id=829410b57e28448fef5c57beda0861e3",
"/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced1cf5f13147f7", "/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced1cf5f13147f7",
"/css/dist/signature-pad.min.css": "/css/dist/signature-pad.min.css?id=6a89d3cd901305e66ced1cf5f13147f7", "/css/dist/signature-pad.min.css": "/css/dist/signature-pad.min.css?id=6a89d3cd901305e66ced1cf5f13147f7",
"/css/webfonts/fa-brands-400.ttf": "/css/webfonts/fa-brands-400.ttf?id=a656b2d865fe379d8851757e8e4001ef", "/css/webfonts/fa-brands-400.ttf": "/css/webfonts/fa-brands-400.ttf?id=a656b2d865fe379d8851757e8e4001ef",
@@ -30,23 +30,23 @@
"/css/webfonts/fa-v4compatibility.ttf": "/css/webfonts/fa-v4compatibility.ttf?id=70ad875b2378eb850254f01dec991ade", "/css/webfonts/fa-v4compatibility.ttf": "/css/webfonts/fa-v4compatibility.ttf?id=70ad875b2378eb850254f01dec991ade",
"/css/webfonts/fa-v4compatibility.woff2": "/css/webfonts/fa-v4compatibility.woff2?id=d36941873b661076f146b0221f13497d", "/css/webfonts/fa-v4compatibility.woff2": "/css/webfonts/fa-v4compatibility.woff2?id=d36941873b661076f146b0221f13497d",
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=281bcfe26549412d128f695234961081", "/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=281bcfe26549412d128f695234961081",
"/js/build/vendor.js": "/js/build/vendor.js?id=3592e07ae9a6d1805a4ea3bd3c034aef", "/js/build/vendor.js": "/js/build/vendor.js?id=8ac1d250496313e93744790e5138305d",
"/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=df78f0c4cc93c29c02a41144590f6350", "/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=df78f0c4cc93c29c02a41144590f6350",
"/js/dist/all.js": "/js/dist/all.js?id=ba07d399f23b294f7c4983030b757423", "/js/dist/all.js": "/js/dist/all.js?id=b487452bd6bef7fa6201586415d383f2",
"/js/dist/all-defer.js": "/js/dist/all-defer.js?id=07e52318da2cdf3171c4d88113f25fb6", "/js/dist/all-defer.js": "/js/dist/all-defer.js?id=07e52318da2cdf3171c4d88113f25fb6",
"/css/dist/skins/skin-green.min.css": "/css/dist/skins/skin-green.min.css?id=0a82a6ae6bb4e58fe62d162c4fb50397", "/css/dist/skins/skin-green.min.css": "/css/dist/skins/skin-green.min.css?id=b48f4d8af0e1ca5621c161e93951109f",
"/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=e36e83c2aa3c3afdbb8ebe2c0309e91d", "/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=44f9320d0739f419c9246f7f39395b02",
"/css/dist/skins/skin-black.min.css": "/css/dist/skins/skin-black.min.css?id=76482123f6c70e866d6b971ba91de7bb", "/css/dist/skins/skin-black.min.css": "/css/dist/skins/skin-black.min.css?id=1f33ca3d860461c1127ec465ab3ebb6b",
"/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=bdfc704731682c67645a2248b0b8d2d7", "/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=f4d95ad9d0944587549e35b6929b4b04",
"/css/dist/skins/skin-blue.min.css": "/css/dist/skins/skin-blue.min.css?id=f677207c6cf9678eb539abecb408c374", "/css/dist/skins/skin-blue.min.css": "/css/dist/skins/skin-blue.min.css?id=392cc93cfc0be0349bab9697669dd091",
"/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=07273f6ca3c698a39e8fc2075af4fa07", "/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=4a9e8c5e7b09506fa3e3a3f42849e07f",
"/css/dist/skins/skin-yellow.min.css": "/css/dist/skins/skin-yellow.min.css?id=7b315b9612b8fde8f9c5b0ddb6bba690", "/css/dist/skins/skin-yellow.min.css": "/css/dist/skins/skin-yellow.min.css?id=fc7adb943668ac69fe4b646625a7571f",
"/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=c1f33574ecb9d3e69d9b8fe5bd68e101", "/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=21fef066e0bb1b02fd83fcb6694fad5f",
"/css/dist/skins/skin-red.min.css": "/css/dist/skins/skin-red.min.css?id=44bf834f2110504a793dadec132a5898", "/css/dist/skins/skin-red.min.css": "/css/dist/skins/skin-red.min.css?id=b9a74ec0cd68f83e7480d5ae39919beb",
"/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=8ca888bbc050d9680cbb65021382acba", "/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=7f0eb9e355b36b41c61c3af3b4d41143",
"/css/dist/skins/skin-purple.min.css": "/css/dist/skins/skin-purple.min.css?id=6fe68325d5356197672c27bc77cedcb4", "/css/dist/skins/skin-purple.min.css": "/css/dist/skins/skin-purple.min.css?id=cf6c8c340420724b02d6e787ef9bded5",
"/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=7d92dea45d94be7e1d4e427c728d335d", "/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=9f944e8021781af1ce45d27765d1c0c2",
"/css/dist/skins/skin-orange.min.css": "/css/dist/skins/skin-orange.min.css?id=6f0563e726c2fe4fab4026daaa5bfdf2", "/css/dist/skins/skin-orange.min.css": "/css/dist/skins/skin-orange.min.css?id=268041e902b019730c23ee3875838005",
"/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=e6e53eef152bba01a4c666a4d8b01117", "/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=d409d9b1a3b69247df8b98941ba06e33",
"/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=da6c7997d9de2f8329142399f0ce50da" "/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=f0fbbb0ac729ea092578fb05ca615460"
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"/livewire.js":"/livewire.js?id=c69d0f2801c01fcf8166"} {"/livewire.js":"/livewire.js?id=90730a3b0e7144480175"}

View File

@@ -30,6 +30,8 @@
@endif @endif
@csrf @csrf
<input type="hidden" name="tab" value="{{ Request::query('tab') }}" />
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="box box-default"> <div class="box box-default">
@@ -118,16 +120,16 @@
</div> </div>
</div> </div>
<!-- Auto-Add to Future Fieldsets --> <!-- Auto-Add to Future Fieldsets -->
<div class="form-group {{ $errors->has('auto_add_to_fieldsets') ? ' has-error' : '' }}" id="auto_add_to_fieldsets"> <div class="form-group {{ $errors->has('auto_add_to_fieldsets') ? ' has-error' : '' }}" id="auto_add_to_fieldsets">
@if (Request::query('tab') != 1)
<div class="col-md-9 col-md-offset-3"> <div class="col-md-9 col-md-offset-3">
<label class="form-control"> <label class="form-control">
<input type="checkbox" name="auto_add_to_fieldsets" aria-label="auto_add_to_fieldsets" value="1"{{ (old('auto_add_to_fieldsets') || $field->auto_add_to_fieldsets) ? ' checked="checked"' : '' }}> <input type="checkbox" name="auto_add_to_fieldsets" aria-label="auto_add_to_fieldsets" value="1"{{ (old('auto_add_to_fieldsets') || $field->auto_add_to_fieldsets) ? ' checked="checked"' : '' }}>
{{ trans('admin/custom_fields/general.auto_add_to_fieldsets') }} {{ trans('admin/custom_fields/general.auto_add_to_fieldsets') }}
</label> </label>
</div> </div>
@endif
<div class="col-md-9 col-md-offset-3"> <div class="col-md-9 col-md-offset-3">
<label class="form-control"> <label class="form-control">
@@ -180,7 +182,7 @@
</div> </div>
@if ($fieldsets->count() > 0) @if ($fieldsets->count() > 0 && Request::query('tab') != 1)
<!-- begin fieldset columns --> <!-- begin fieldset columns -->
<div class="col-md-4"> <div class="col-md-4">

View File

@@ -12,6 +12,7 @@
@section('inputFields') @section('inputFields')
@include ('partials.forms.edit.name', ['translated_name' => trans('general.name')]) @include ('partials.forms.edit.name', ['translated_name' => trans('general.name')])
<input type="hidden" name="tab" value="{{ Request::query('tab') }}" />
@stop @stop

View File

@@ -13,6 +13,26 @@
@section('content') @section('content')
@can('view', \App\Models\CustomFieldset::class) @can('view', \App\Models\CustomFieldset::class)
<div class="row">
<div calss="col-md-12">
<div class="box box-default">
<div class="box-body">
<div class="nav-tabs-custom">
<ul class="nav nav-tabs">
{{-- TODO - generalize this so it's less 'hardcoded' --}}
<li {!! !Request::query('tab') ? 'class="active"': '' !!}><a href="{{ route("fields.index",["tab" => 0]) }}">Asset Custom Fields</a></li>
<li {!! Request::query('tab') == 1 ? 'class="active"': '' !!}><a href="{{ route("fields.index",["tab" => 1]) }}">Users</a></li>
{{-- <li {!! Request::query('tab') == 2 ? 'class="active"': '' !!}><a href="{{ route("fields.index",["tab" => 2]) }}">Accessories</a></li>--}}
</ul>
</div>
</div>
</div>
</div>
</div>
{{-- Do not show fieldsets for Users' customf ields --}}
@if(Request::query('tab') != 1)
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="box box-default"> <div class="box box-default">
@@ -21,7 +41,7 @@
<h2 class="box-title">{{ trans('admin/custom_fields/general.fieldsets') }}</h2> <h2 class="box-title">{{ trans('admin/custom_fields/general.fieldsets') }}</h2>
<div class="box-tools pull-right"> <div class="box-tools pull-right">
@can('create', \App\Models\CustomFieldset::class) @can('create', \App\Models\CustomFieldset::class)
<a href="{{ route('fieldsets.create') }}" class="btn btn-sm btn-primary" data-tooltip="true" title="{{ trans('admin/custom_fields/general.create_fieldset_title') }}">{{ trans('admin/custom_fields/general.create_fieldset') }}</a> <a href="{{ route('fieldsets.create',['tab' => Request::query('tab',0)]) }}" class="btn btn-sm btn-primary" data-tooltip="true" title="{{ trans('admin/custom_fields/general.create_fieldset_title') }}">{{ trans('admin/custom_fields/general.create_fieldset') }}</a>
@endcan @endcan
</div> </div>
</div><!-- /.box-header --> </div><!-- /.box-header -->
@@ -47,7 +67,7 @@
<tr> <tr>
<th>{{ trans('general.name') }}</th> <th>{{ trans('general.name') }}</th>
<th>{{ trans('admin/custom_fields/general.qty_fields') }}</th> <th>{{ trans('admin/custom_fields/general.qty_fields') }}</th>
<th>{{ trans('admin/custom_fields/general.used_by_models') }}</th> <th>{{ trans('admin/custom_fields/general.used_by_models') }}{{-- FIXME --}}</th>
<th>{{ trans('table.actions') }}</th> <th>{{ trans('table.actions') }}</th>
</tr> </tr>
</thead> </thead>
@@ -63,9 +83,9 @@
{{ $fieldset->fields->count() }} {{ $fieldset->fields->count() }}
</td> </td>
<td> <td>
@foreach($fieldset->models as $model) @foreach($fieldset->customizables() as $url => $name)
<a href="{{ route('models.show', $model->id) }}" class="label label-default">{{ $model->name }}{{ ($model->model_number) ? ' ('.$model->model_number.')' : '' }}</a> <a href="{{ $url }}" class="label label-default">{{ $name }}</a>
{{-- get_class($customizable) }}: {{ $customizable->name<br /> --}}
@endforeach @endforeach
</td> </td>
<td> <td>
@@ -81,7 +101,7 @@
@can('delete', $fieldset) @can('delete', $fieldset)
{{ Form::open(['route' => array('fieldsets.destroy', $fieldset->id), 'method' => 'delete','style' => 'display:inline-block']) }} {{ Form::open(['route' => array('fieldsets.destroy', $fieldset->id), 'method' => 'delete','style' => 'display:inline-block']) }}
@if($fieldset->models->count() > 0) @if(count($fieldset->customizables()) > 0 /* TODO - hate 'customizables' */)
<button type="submit" class="btn btn-danger btn-sm disabled" disabled><i class="fas fa-trash"></i></button> <button type="submit" class="btn btn-danger btn-sm disabled" disabled><i class="fas fa-trash"></i></button>
@else @else
<button type="submit" class="btn btn-danger btn-sm"><i class="fas fa-trash"></i></button> <button type="submit" class="btn btn-danger btn-sm"><i class="fas fa-trash"></i></button>
@@ -102,6 +122,7 @@
</div> <!-- .row--> </div> <!-- .row-->
@endif
@endcan @endcan
@can('view', \App\Models\CustomField::class) @can('view', \App\Models\CustomField::class)
<div class="row"> <div class="row">
@@ -111,7 +132,7 @@
<h2 class="box-title">{{ trans('admin/custom_fields/general.custom_fields') }}</h2> <h2 class="box-title">{{ trans('admin/custom_fields/general.custom_fields') }}</h2>
<div class="box-tools pull-right"> <div class="box-tools pull-right">
@can('create', \App\Models\CustomField::class) @can('create', \App\Models\CustomField::class)
<a href="{{ route('fields.create') }}" class="btn btn-sm btn-primary" data-tooltip="true" title="{{ trans('admin/custom_fields/general.create_field_title') }}">{{ trans('admin/custom_fields/general.create_field') }}</a> <a href="{{ route('fields.create', ['tab' => Request::query('tab',0)]) }}" class="btn btn-sm btn-primary" data-tooltip="true" title="{{ trans('admin/custom_fields/general.create_field_title') }}">{{ trans('admin/custom_fields/general.create_field') }}</a>
@endcan @endcan
</div> </div>
@@ -184,7 +205,7 @@
<nobr> <nobr>
{{ Form::open(array('route' => array('fields.destroy', $field->id), 'method' => 'delete', 'style' => 'display:inline-block')) }} {{ Form::open(array('route' => array('fields.destroy', $field->id), 'method' => 'delete', 'style' => 'display:inline-block')) }}
@can('update', $field) @can('update', $field)
<a href="{{ route('fields.edit', $field->id) }}" class="btn btn-warning btn-sm"> <a href="{{ route('fields.edit', $field->id) }}?tab={{ array_search($field->type, Helper::$itemtypes_having_custom_fields) }}" class="btn btn-warning btn-sm">
<i class="fas fa-pencil-alt" aria-hidden="true"></i> <i class="fas fa-pencil-alt" aria-hidden="true"></i>
<span class="sr-only">{{ trans('button.edit') }}</span> <span class="sr-only">{{ trans('button.edit') }}</span>
</a> </a>
@@ -192,7 +213,7 @@
@can('delete', $field) @can('delete', $field)
@if($field->fieldset->count()>0) @if($field->fieldset->count()>0 && Request::query('tab') != 1 )
<button type="submit" class="btn btn-danger btn-sm disabled" disabled> <button type="submit" class="btn btn-danger btn-sm disabled" disabled>
<i class="fas fa-trash" aria-hidden="true"></i> <i class="fas fa-trash" aria-hidden="true"></i>
<span class="sr-only">{{ trans('button.delete') }}</span></button> <span class="sr-only">{{ trans('button.delete') }}</span></button>

View File

@@ -75,20 +75,17 @@
<div id='custom_fields_content'> <div id='custom_fields_content'>
<!-- Custom Fields --> <!-- Custom Fields -->
@if ($item->model && $item->model->fieldset)
<?php $model = $item->model; ?>
@endif
@if (Request::old('model_id')) @if (Request::old('model_id'))
@php @php
$model = \App\Models\AssetModel::find(old('model_id')); $item->model = \App\Models\AssetModel::find(old('model_id'));
@endphp @endphp
@elseif (isset($selected_model)) @elseif (isset($selected_model))
@php @php
$model = $selected_model; $item->model_id = $selected_model;
@endphp @endphp
@endif @endif
@if (isset($model) && $model) @if ($item->getFieldset())
@include("models/custom_fields_form",["model" => $model]) @include("models/custom_fields_form",["item" => $item])
@endif @endif
</div> </div>

View File

@@ -396,52 +396,7 @@
</div> </div>
</div> </div>
@if (($asset->model) && ($asset->model->fieldset)) @include('partials.custom-fields-view', ['item' => $asset,'width' => 2])
@foreach($asset->model->fieldset->fields as $field)
<div class="row">
<div class="col-md-2">
<strong>
{{ $field->name }}
</strong>
</div>
<div class="col-md-6{{ (($field->format=='URL') && ($asset->{$field->db_column_name()}!='')) ? ' ellipsis': '' }}">
@if ($field->field_encrypted=='1')
<i class="fas fa-lock" data-tooltip="true" data-placement="top" title="{{ trans('admin/custom_fields/general.value_encrypted') }}"></i>
@endif
@if ($field->isFieldDecryptable($asset->{$field->db_column_name()} ))
@can('assets.view.encrypted_custom_fields')
@if (($field->format=='URL') && ($asset->{$field->db_column_name()}!=''))
<a href="{{ Helper::gracefulDecrypt($field, $asset->{$field->db_column_name()}) }}" target="_new">{{ Helper::gracefulDecrypt($field, $asset->{$field->db_column_name()}) }}</a>
@elseif (($field->format=='DATE') && ($asset->{$field->db_column_name()}!=''))
{{ \App\Helpers\Helper::gracefulDecrypt($field, \App\Helpers\Helper::getFormattedDateObject($asset->{$field->db_column_name()}, 'date', false)) }}
@else
{{ Helper::gracefulDecrypt($field, $asset->{$field->db_column_name()}) }}
@endif
@else
{{ strtoupper(trans('admin/custom_fields/general.encrypted')) }}
@endcan
@else
@if (($field->format=='BOOLEAN') && ($asset->{$field->db_column_name()}!=''))
{!! ($asset->{$field->db_column_name()} == 1) ? "<span class='fas fa-check-circle' style='color:green' />" : "<span class='fas fa-times-circle' style='color:red' />" !!}
@elseif (($field->format=='URL') && ($asset->{$field->db_column_name()}!=''))
<a href="{{ $asset->{$field->db_column_name()} }}" target="_new">{{ $asset->{$field->db_column_name()} }}</a>
@elseif (($field->format=='DATE') && ($asset->{$field->db_column_name()}!=''))
{{ \App\Helpers\Helper::getFormattedDateObject($asset->{$field->db_column_name()}, 'date', false) }}
@else
{!! nl2br(e($asset->{$field->db_column_name()})) !!}
@endif
@endif
@if ($asset->{$field->db_column_name()}=='')
&nbsp;
@endif
</div>
</div>
@endforeach
@endif
@if ($asset->purchase_date) @if ($asset->purchase_date)

View File

@@ -1,5 +1,28 @@
@if (($model) && ($model->fieldset)) {{--
@foreach($model->fieldset->fields AS $field)
Okay, now how am I going to work *this* out. I think it's less bad than I think.
I think we can pass the $asset or the $user to this partial.
This partial can be aware of the HasCustomFields trait, and call getFieldset() to get the appropriate fieldset; that's good.
But we also need the 'discriminator' so that we can use defaultValuesForCustomFields, right?
Well, that should be easy enough, right? Just call getFieldsetKey(), right? Or maybe we don't even have to do that -
We can call $item->getDefaultValue($field), right?
So the old way - already on this page - is:
$item->defaultValue($field))
And we just do a simple 'replace' to make it be:
$item->defaultValue($field)
--}}
@if ($item->getFieldset())
@foreach($item->getFieldset()->fields AS $field)
<div class="form-group{{ $errors->has($field->db_column_name()) ? ' has-error' : '' }}"> <div class="form-group{{ $errors->has($field->db_column_name()) ? ' has-error' : '' }}">
<label for="{{ $field->db_column_name() }}" class="col-md-3 control-label">{{ $field->name }} </label> <label for="{{ $field->db_column_name() }}" class="col-md-3 control-label">{{ $field->name }} </label>
<div class="col-md-7 col-sm-12{{ ($field->pivot->required=='1') ? ' required' : '' }}"> <div class="col-md-7 col-sm-12{{ ($field->pivot->required=='1') ? ' required' : '' }}">
@@ -12,14 +35,14 @@
Request::old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, htmlspecialchars($item->{$field->db_column_name()}, ENT_QUOTES)) : $field->defaultValue($model->id))), ['class'=>'format select2 form-control']) }} Request::old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, htmlspecialchars($item->{$field->db_column_name()}, ENT_QUOTES)) : $field->defaultValue($model->id))), ['class'=>'format select2 form-control']) }}
@elseif ($field->element=='textarea') @elseif ($field->element=='textarea')
<textarea class="col-md-6 form-control" id="{{ $field->db_column_name() }}" name="{{ $field->db_column_name() }}">{{ Request::old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) : $field->defaultValue($model->id))) }}</textarea> <textarea class="col-md-6 form-control" id="{{ $field->db_column_name() }}" name="{{ $field->db_column_name() }}">{{ Request::old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) : $item->defaultValue($field))) }}</textarea>
@elseif ($field->element=='checkbox') @elseif ($field->element=='checkbox')
<!-- Checkboxes --> <!-- Checkboxes -->
@foreach ($field->formatFieldValuesAsArray() as $key => $value) @foreach ($field->formatFieldValuesAsArray() as $key => $value)
<div> <div>
<label class="form-control"> <label class="form-control">
<input type="checkbox" value="{{ $value }}" name="{{ $field->db_column_name() }}[]" {{ isset($item) ? (in_array($value, array_map('trim', explode(',', $item->{$field->db_column_name()}))) ? ' checked="checked"' : '') : (Request::old($field->db_column_name()) != '' ? ' checked="checked"' : (in_array($key, array_map('trim', explode(',', $field->defaultValue($model->id)))) ? ' checked="checked"' : '')) }}> <input type="checkbox" value="{{ $value }}" name="{{ $field->db_column_name() }}[]" {{ isset($item) ? (in_array($value, array_map('trim', explode(',', $item->{$field->db_column_name()}))) ? ' checked="checked"' : '') : (Request::old($field->db_column_name()) != '' ? ' checked="checked"' : (in_array($key, array_map('trim', explode(',', $item->defaultValue($field)))) ? ' checked="checked"' : '')) }}>
{{ $value }} {{ $value }}
</label> </label>
</div> </div>
@@ -30,7 +53,7 @@
<div> <div>
<label class="form-control"> <label class="form-control">
<input type="radio" value="{{ $value }}" name="{{ $field->db_column_name() }}" {{ isset($item) ? ($item->{$field->db_column_name()} == $value ? ' checked="checked"' : '') : (Request::old($field->db_column_name()) != '' ? ' checked="checked"' : (in_array($value, explode(', ', $field->defaultValue($model->id))) ? ' checked="checked"' : '')) }}> <input type="radio" value="{{ $value }}" name="{{ $field->db_column_name() }}" {{ isset($item) ? ($item->{$field->db_column_name()} == $value ? ' checked="checked"' : '') : (Request::old($field->db_column_name()) != '' ? ' checked="checked"' : (in_array($value, explode(', ', $item->defaultValue($field))) ? ' checked="checked"' : '')) }}>
{{ $value }} {{ $value }}
</label> </label>
</div> </div>
@@ -46,7 +69,7 @@
<div class="input-group col-md-5" style="padding-left: 0px;"> <div class="input-group col-md-5" style="padding-left: 0px;">
<div class="input-group date" data-provide="datepicker" data-date-format="yyyy-mm-dd" data-autoclose="true" data-date-clear-btn="true"> <div class="input-group date" data-provide="datepicker" data-date-format="yyyy-mm-dd" data-autoclose="true" data-date-clear-btn="true">
<input type="text" class="form-control" placeholder="{{ trans('general.select_date') }}" name="{{ $field->db_column_name() }}" id="{{ $field->db_column_name() }}" readonly value="{{ old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) : $field->defaultValue($model->id))) }}" style="background-color:inherit"> <input type="text" class="form-control" placeholder="{{ trans('general.select_date') }}" name="{{ $field->db_column_name() }}" id="{{ $field->db_column_name() }}" readonly value="{{ old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) : $item->defaultValue($field))) }}" style="background-color:inherit">
<span class="input-group-addon"><i class="fas fa-calendar" aria-hidden="true"></i></span> <span class="input-group-addon"><i class="fas fa-calendar" aria-hidden="true"></i></span>
</div> </div>
</div> </div>
@@ -54,7 +77,7 @@
@else @else
@if (($field->field_encrypted=='0') || (Gate::allows('assets.view.encrypted_custom_fields'))) @if (($field->field_encrypted=='0') || (Gate::allows('assets.view.encrypted_custom_fields')))
<input type="text" value="{{ Request::old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) : $field->defaultValue($model->id))) }}" id="{{ $field->db_column_name() }}" class="form-control" name="{{ $field->db_column_name() }}" placeholder="Enter {{ strtolower($field->format) }} text"> <input type="text" value="{{ Request::old($field->db_column_name(),(isset($item) ? Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) : $item->defaultValue($field))) }}" id="{{ $field->db_column_name() }}" class="form-control" name="{{ $field->db_column_name() }}" placeholder="Enter {{ strtolower($field->format) }} text">
@else @else
<input type="text" value="{{ strtoupper(trans('admin/custom_fields/general.encrypted')) }}" class="form-control disabled" disabled> <input type="text" value="{{ strtoupper(trans('admin/custom_fields/general.encrypted')) }}" class="form-control disabled" disabled>
@endif @endif

View File

@@ -0,0 +1,47 @@
{{-- FIXME - this doesn't work for Assets (crap!) --}}
@if ($item->getFieldset())
@foreach($item->getFieldset()->fields as $field)
<div class="row">
<div class="col-md-{{ $width }}">
<strong>
{{ $field->name }}
</strong>
</div>
<div class="col-md-{{ 12 - $width }}{{ (($field->format=='URL') && ($item->{$field->db_column_name()}!='')) ? ' ellipsis': '' }}">
@if ($field->field_encrypted=='1')
<i class="fas fa-lock" data-tooltip="true" data-placement="top" title="{{ trans('admin/custom_fields/general.value_encrypted') }}"></i>
@endif
@if ($field->isFieldDecryptable($item->{$field->db_column_name()} ))
@can('assets.view.encrypted_custom_fields')
@if (($field->format=='URL') && ($item->{$field->db_column_name()}!=''))
<a href="{{ Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) }}" target="_new">{{ Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) }}</a>
@elseif (($field->format=='DATE') && ($item->{$field->db_column_name()}!=''))
{{ \App\Helpers\Helper::gracefulDecrypt($field, \App\Helpers\Helper::getFormattedDateObject($item->{$field->db_column_name()}, 'date', false)) }}
@else
{{ Helper::gracefulDecrypt($field, $item->{$field->db_column_name()}) }}
@endif
@else
{{ strtoupper(trans('admin/custom_fields/general.encrypted')) }}
@endcan
@else
@if (($field->format=='BOOLEAN') && ($item->{$field->db_column_name()}!=''))
{!! ($item->{$field->db_column_name()} == 1) ? "<span class='fas fa-check-circle' style='color:green' />" : "<span class='fas fa-times-circle' style='color:red' />" !!}
@elseif (($field->format=='URL') && ($item->{$field->db_column_name()}!=''))
<a href="{{ $item->{$field->db_column_name()} }}" target="_new">{{ $item->{$field->db_column_name()} }}</a>
@elseif (($field->format=='DATE') && ($item->{$field->db_column_name()}!=''))
{{ \App\Helpers\Helper::getFormattedDateObject($item->{$field->db_column_name()}, 'date', false) }}
@else
{!! nl2br(e($item->{$field->db_column_name()})) !!}
@endif
@endif
@if ($item->{$field->db_column_name()}=='')
&nbsp;
@endif
</div>
</div>
@endforeach
@endif

Some files were not shown because too many files have changed in this diff Show More