Compare commits

...

113 Commits

Author SHA1 Message Date
2ab98a36d5 Add ObjectIssetFix Trait 2024-09-16 23:30:14 +10:00
b8a4e9d660 Remove widgets that should now be components 2024-08-23 15:47:44 +10:00
037abb1749 $classes should be $class, added form.number/time components 2024-08-22 21:42:02 +10:00
be6061fb6e old can be passed 'false' to ignore the redirect value 2024-08-17 13:14:51 +10:00
ba18a2a21c Fix checkbox component when rendering old values, fix form select rendering blank option 2024-08-17 10:36:07 +10:00
83470c3ff5 Enhancements to components, move simplemde over to PageAssets 2024-08-14 22:19:53 +10:00
d5d7f4f4a0 For passkey logins, redirect to the intended url if one was used 2024-08-14 19:27:02 +10:00
d7897d5c66 schedule:list is now apart of laravel 2024-08-11 23:48:02 +10:00
92dd7ac3cb Minor updates to components, and we now use @pa not @js/@css 2024-08-10 22:25:03 +10:00
293d9913c6 Fix LeenooksCarbon casting with null values, move select2 to PageAssets 2024-08-01 17:32:20 +10:00
8acc3a91af Enable NULLs in LeenooksCarbon cast 2024-07-31 22:40:35 +10:00
eaece2b69d Move javascript utilities to their own class PageAssets and creatd blade directive @pa to simplify using them 2024-07-28 19:47:27 +10:00
628fbac8f9 Enhance modal/delete to fire a post ajax to the endpoint on confirmation, and optionally delete row of triggering element 2024-07-26 12:26:31 +10:00
4a4cf3c5bf Added disabled to components, new components, button and modal 2024-07-25 13:52:29 +10:00
f393813311 Add old tag for components, for values that are nested in an array. Enable LeenooksCarbon to accept a string date when setting. 2024-07-24 14:08:04 +10:00
3a12ec005e More compoonents for forms, enable select forms to have a read only appearance 2024-07-24 09:09:49 +10:00
83bdea458f More compoonents for forms 2024-07-23 23:50:02 +10:00
f32c29fa8c More components for forms, updated base component, updated CompsiteKeys based on thiagoprz/eloquent-composite-key 2024-07-23 18:47:36 +10:00
b9a3cd5647 Added ActiveUser middleware 2024-07-23 00:11:06 +10:00
12496101e1 Rename back to leenooks/laravel, start to use components for html widgets, updated login form to include passkey 2024-07-22 23:09:45 +10:00
01e77cb807 Added LeenooksCarbon cast class 2024-07-07 11:50:57 +10:00
b5c8e41e78 CustomBladeService fixing issues introduced in previous commit 2024-07-05 10:19:27 +10:00
a69049c4ff Add our JS to collapse the sidebar 2024-07-05 10:18:39 +10:00
fd3487f9b0 More updates as a result of no longer using Orchestra/Asset 2024-07-04 17:41:31 +10:00
4b541857d7 Update Adminlte/Architect as we no longer use Orchestra/Asset 2024-07-04 10:01:47 +10:00
4e9bdca2f5 Update Carbon to be match inheritence with upstream 2024-07-04 10:01:33 +10:00
e0333e352a Update Metronic as we no longer use Orchestra/Asset 2024-07-04 08:15:34 +10:00
f44d780e19 New direction for Laravel 11 2024-07-03 15:21:22 +10:00
46df11f087 Fix rogue ) being displayed, and other updates from osb 2024-07-03 13:02:59 +10:00
dc8983aa91 Package renamed to leenooks/laravel 2024-07-03 12:50:06 +10:00
Deon George
9db703d88f Added validation, debounce and highcharts funnel/solidguage 2022-10-20 10:30:21 +11:00
Deon George
05d3caddf4 Added toggle form helper 2022-08-20 23:27:00 +10:00
Deon George
e3ebef90d9 Added file form helper 2022-08-19 15:11:09 +10:00
Deon George
d494400e7e Updated form helpers, to ensure right hand corners were rounded. Added success_button helper 2022-08-06 00:19:20 +10:00
Deon George
61f38aefe7 For search, if we get a 401, redirect to the login page 2022-08-03 16:32:38 +10:00
Deon George
8e9ca4c531 Added form input select, and fixes to date 2022-08-02 22:34:20 +10:00
Deon George
2e512cc3ed Added some form and status widgets 2022-08-01 20:29:57 +10:00
Deon George
9ef7e8e626 Update style sheets 2022-08-01 14:58:37 +10:00
Deon George
c9cd560b36 Rename AdminController to SwitchUserController with some optimisations 2022-06-28 21:52:05 +10:00
Deon George
b3471f31a0 Fix singleOrFail() args are optional 2022-02-02 12:05:03 +11:00
Deon George
71712d445f Fix when blade call has no arguments 2021-12-20 14:35:58 +11:00
Deon George
ef210651aa Switch Asset::add() to @themecss for metronic theme 2021-12-20 12:51:19 +11:00
Deon George
cbfd13ffce Minor changes to architect theme 2021-12-05 16:24:56 +11:00
Deon George
d9896fbe93
Asset::add cannot be used with {{}} 2021-12-01 17:07:08 +11:00
Deon George
d376c79fad
Add more libraries 2021-11-24 16:23:01 +11:00
Deon George
ab86ddc386
Fix #e3e43b87 should use Asset::add instead of @asset 2021-11-24 16:22:43 +11:00
Deon George
e3e43b87f4
Change metronic to use @asset instead of @css 2021-11-23 17:30:20 +11:00
Deon George
0507dc83d8
Optimise calling dependant javascript in views 2021-11-23 14:25:51 +11:00
Deon George
dd64cba897
Tweak Brand Logo 2021-11-03 13:03:50 +11:00
Deon George
8093eb8b72
Remove id from <a>, not required 2021-10-18 12:55:17 +11:00
Deon George
af1ea1b5fd
Add addHalf()/subHalf() functions 2021-10-12 14:40:34 +11:00
Deon George
a4650f8710
Add Carbon::quarter_string 2021-08-23 15:22:51 +10:00
Deon George
4b25f97314
Remove classes for logo image 2021-08-04 17:30:24 +10:00
Deon George
2eaf000ce0
Fix password reset 2021-07-09 11:57:24 +10:00
Deon George
1f114667aa
Changed ->, changed address() to ->address 2021-07-02 09:09:31 +10:00
Deon George
f801001571
Fix social icons in metronic 2021-07-02 08:22:28 +10:00
Deon George
45be8553a2
Added SingleOrFail Eloquent helper 2021-07-01 11:58:50 +10:00
Deon George
9798f6aa7d
Change scopeActive to include table 2021-06-29 16:38:19 +10:00
Deon George
d4824ecda5
Dont use asset() for remote URLs, added metronic theme 2021-06-29 10:34:44 +10:00
Deon George
2fe9b5c134
Fixes for Laravel 8 2021-06-28 10:35:43 +10:00
Deon George
85d2a7eeea
Fix auth scripts missed in previous commit 2021-04-23 17:08:22 +10:00
Deon George
9b583e8479
Update links to CSS and JS libraries. Disable shims 2021-04-23 16:03:39 +10:00
Deon George
de2b894b55
Added ScopeActive Trait. Change user model to be under Models 2021-04-21 16:53:51 +10:00
Deon George
47075871dc Updates for Laravel 8 2021-02-05 23:28:09 +11:00
Deon George
0a541c1a36 Initial new theme ArchitectUI 2020-09-02 00:17:33 +10:00
Deon George
7dc9ebf3a6 Some minor improvements for projects that dont set /page_title 2020-08-23 10:31:08 +10:00
Deon George
432606760b
Update for Laravel 7.x 2020-08-04 16:14:35 +10:00
Deon George
958dbc7092
Remove @todo comment that has been implemented 2020-07-10 09:43:40 +10:00
Deon George
12f33b6853
Remove unnecessary console.log() 2020-06-23 12:34:28 +10:00
Deon George
b67df24219
Disable sorting - should be sorted by ajax method 2020-06-11 16:19:40 +10:00
Deon George
7ffcdb139a
Enable font selection override 2020-05-26 11:26:00 +10:00
Deon George
5a9437db37
bootstrap typeahead now part of app.js - updated and optimised enabling categories 2020-05-26 11:12:54 +10:00
Deon George
9389fd9e83
Added widget for success/error messages 2020-05-06 17:13:15 +10:00
Deon George
87819891a1
Updated Fontawesome to v5 2020-05-06 16:30:41 +10:00
Deon George
b3924ea239
Make resize delay configurable and default 1000 2020-03-12 09:13:55 +11:00
Deon George
6bc2787602
Improved sidebar open/close handling 2020-03-11 12:41:36 +11:00
Deon George
96a6830e61 Changed carbon method naming to be consistent with Carbon itself 2020-02-08 17:52:13 +11:00
Deon George
176f680ff7 Enabled password reset forms 2020-01-22 20:48:42 +11:00
Deon George
62f66d7eed Fixes for laravel 6 2020-01-14 21:43:40 +11:00
Deon George
f131db31c6
Added custom.js, login redirects to current page, added form-start/form-end and change breadcrumb width 2020-01-09 18:44:07 +11:00
Deon George
8b83990a66
Changed not logged in user to padlock with 'Login' 2019-12-16 11:29:34 +11:00
Deon George
4472202afb
Display improvements for login note 2019-11-29 11:13:24 +11:00
Deon George
2040266ab2
Disable autocomplete in search 2019-11-26 09:58:45 +11:00
Deon George
1774987dea
Dispatch resize event if sidebar collapsed 2019-11-22 14:22:37 +11:00
Deon George
6c60298e8f
Add a note on the login page 2019-11-21 14:33:33 +11:00
Deon George
41b320a5b9 Fix file_exist check for custom.css 2019-11-17 23:26:12 +11:00
Deon George
1096f0e28d Added custom.css to app.blade 2019-10-30 14:31:32 +08:00
Deon George
b0730b9ed3 Revert name to igaster/laravel-theme 2019-10-30 14:15:20 +08:00
Deon George
163a7f2587 Add github cvs to composer 2019-10-30 12:15:23 +08:00
Deon George
4f2707a374 Switch laravel-them to fix issue with @ directives 2019-10-30 09:49:19 +08:00
Deon George
0ca66c6d1c
Updated orchestra/asset 2019-10-11 15:50:06 +11:00
Deon George
5833122ab5
Removed Acache/User 2019-10-11 14:47:13 +11:00
Deon George
a946ce4418
Added error dialog on login box 2019-09-03 14:38:19 +10:00
Deon George
e5ff189d3e
Added tz and move adminlte css to later 2019-08-20 15:50:15 +10:00
Deon George
1efdfca55f
Remove mix() for now 2019-07-03 17:16:46 +10:00
Deon George
6d876f2c94
No longer using // urls, and fixed sudo rendoring 2019-06-17 11:44:56 +10:00
Deon George
70a7142877
Fix for sidebar collapse/expand and window resizing 2019-05-16 11:15:49 +10:00
Deon George
c406c35ff7
User login updates 2019-04-11 22:30:03 +10:00
Deon George
6d84613158
Added custom css files 2019-03-28 11:16:50 +11:00
Deon George
05dbcaf6c4
Added creativeorange/gravatar to requirements 2019-03-26 17:23:46 +11:00
Deon George
867b42be91
Added acache/user to requirements 2019-03-26 17:18:40 +11:00
Deon George
f44e6f1d09
Added csrf_field() to login form 2019-03-26 14:31:18 +11:00
Deon George
fb88cf2866 Added items to search 2019-03-22 21:52:44 +11:00
Deon George
91aa1d9378 Enabled search results and remember sidebar collapse 2019-02-18 20:44:17 +11:00
Deon George
062b1bce8c Update for laravel 5.7 and adminlte v3-alpha 2019-02-08 23:42:58 +11:00
Deon George
11a321603c Update require for igaster/laravel-theme 2019-02-04 11:04:41 +00:00
Deon George
8aa21663d5
Changed body font size 2018-08-23 16:26:39 +10:00
Deon George
3af5ae6466 Remember sidebar collapse state 2018-08-12 17:01:50 +10:00
Deon George
f8d7432965
Added array_undot() helper 2018-08-11 15:11:34 +10:00
Deon George
98b7b9f6a8
Fix login and password resets forms 2018-08-08 00:14:48 +10:00
Deon George
f1787aaa32
Fixes for printing and page rendering improvements 2018-08-07 22:53:35 +10:00
Deon George
0bd32aab4a
Layout updates, switch user updates 2018-08-01 16:29:14 +10:00
Deon George
444c159ab9 Added CompositeKeys Traits for Models with multiple primary keys 2018-07-31 12:56:29 +10:00
88 changed files with 9829 additions and 773 deletions

View File

@ -1,34 +1,33 @@
{
"name": "leenooks/laravel",
"description": "Leenooks standard templates and tools.",
"keywords": ["laravel", "leenooks"],
"license": "MIT",
"authors": [
{
"name": "Deon George",
"email": "deon@leenooks.net"
}
],
"require": {
"igaster/laravel-theme": "2.0.6",
"orchestra/asset": "^3.6"
},
"require-dev": {
},
"autoload": {
"psr-4": {
"Leenooks\\": "src"
},
"files": [
"src/helpers.php"
]
},
"extra": {
"laravel": {
"providers": [
"Leenooks\\Providers\\LeenooksServiceProvider"
]
}
},
"minimum-stability": "dev"
"name": "leenooks/laravel",
"description": "Leenooks standard templates and tools.",
"keywords": ["laravel","leenooks"],
"license": "MIT",
"authors": [
{
"name": "Deon George",
"email": "deon@dege.au"
}
],
"require": {
},
"require-dev": {
},
"autoload": {
"psr-4": {
"Leenooks\\": "src"
},
"files": [
"src/helpers.php"
]
},
"extra": {
"laravel": {
"providers": [
"Leenooks\\Providers\\LeenooksServiceProvider",
"Leenooks\\Providers\\CustomBladeServiceProvider"
]
}
},
"minimum-stability": "dev"
}

View File

@ -0,0 +1,11 @@
<button type="cancel" id="cancel" {{ $attributes->class(['mt-4','btn','btn-sm','btn-danger']) }}>Cancel</button>
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#cancel').on('click',function(item) {
return history.back();
});
});
</script>
@append

View File

@ -0,0 +1,9 @@
@if(isset($row) && $row)
<div class="row pt-2 pb-2">
<div class="col">
@endif
@error($name)<button {{ $attributes->class(['btn','btn-sm','btn-danger']) }}>{{ $message }}</button>@enderror
@if(isset($row) && $row)
</div>
</div>
@endif

View File

@ -0,0 +1 @@
<button type="reset" id="reset" {{ $attributes->class(['mt-4','btn','btn-sm','btn-secondary']) }}>Reset</button>

View File

@ -0,0 +1 @@
<button type="submit" id="submit" {{ $attributes->class(['mt-4','btn','btn-sm','btn-success']) }} @disabled(isset($disabled))>{{ $slot }}</button>

View File

@ -0,0 +1,9 @@
@if(isset($row) && $row)
<div class="row pt-2 pb-2">
<div class="col">
@endif
@session('success')<button {{ $attributes->class(['btn','btn-sm','btn-success']) }}>{{ $value }}</button>@endsession
@if(isset($row) && $row)
</div>
</div>
@endif

View File

@ -0,0 +1,11 @@
@if ($errors->any())
<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<h5><i class="icon fas fa-ban"></i> Whoops!</h5>
<ul>
@foreach ($errors->all() as $error)
<li>{!! $error !!}</li>
@endforeach
</ul>
</div>
@endif

View File

@ -0,0 +1,23 @@
<div class="form-group">
@if(isset($label))
<label {{ $attributes->only(['class']) }} for="{{ $id ?? $name }}">{{ $label }}</label>
@endisset
<div class="input-group has-validation">
@if(isset($icon) || isset($prepend))
<div class="input-group-prepend">
<span class="input-group-text">@isset($icon)<i class="fas fa-fw {{ $icon }}"></i>@endisset @isset($prepend){!! $prepend !!}@endisset</span>
</div>
@endif
{{ $slot }}
<span class="invalid-feedback">
@error((! empty($old)) ? $old : $name)
{{ $message }}
@elseif(isset($feedback))
{{ $feedback }}
@enderror
</span>
</div>
@isset($helper)
<span class="input-helper">{{ $helper }}</span>
@endif
</div>

View File

@ -0,0 +1,5 @@
<x-leenooks::form.base {{ $attributes }}>
<div class="form-check text-right">
<input type="checkbox" class="form-check-input {{ $class ?? ''}}@error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" value="{{ old($old ?? $name,$value ?? '') }}" @checked(old($old ?? $name)) @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
</div>
</x-leenooks::form.base>

View File

@ -0,0 +1,3 @@
<x-leenooks::form.base {{ $attributes }}>
<input type="date" class="form-control {{ $class ?? ''}}@error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" value="{{ old($old ?? $name,$value ?? '') }}" @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
</x-leenooks::form.base>

View File

@ -0,0 +1,3 @@
<x-leenooks::form.base {{ $attributes }}>
<input type="email" class="form-control {{ $class ?? ''}}@error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" value="{{ old($old ?? $name,$value ?? '') }}" @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
</x-leenooks::form.base>

View File

@ -0,0 +1,17 @@
<x-leenooks::form.base {{ $attributes }}>
<input type="file" class="form-control {{ $class ?? ''}}@error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
</x-leenooks::form.base>
{{ $slot }}
@section('page-scripts')
<script>
$(document).ready(function() {
$('#{{ $id ?? $name }}').on('change',function(){
//get the file name
var fileName = $(this).val();
//replace the "Choose a file" label
$(this).parent().next('.input-helper').html(fileName);
})
});
</script>
@append

View File

@ -0,0 +1,3 @@
<x-leenooks::form.base {{ $attributes }}>
<input type="number" class="form-control {{ $class ?? ''}}@error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" value="{{ old($old ?? $name,$value ?? '') }}" @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
</x-leenooks::form.base>

View File

@ -0,0 +1,3 @@
<x-leenooks::form.base {{ $attributes }}>
<input type="password" class="form-control {{ $class ?? ''}}@error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" value="{{ old($old ?? $name,$value ?? '') }}" @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
</x-leenooks::form.base>

View File

@ -0,0 +1,60 @@
<x-leenooks::form.base {{ $attributes }}>
<input type="hidden" id="{{ $name }}_disabled" name="{{ $name }}" value="" disabled>
<select class="form-control @error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" @required(isset($required)) @disabled(isset($disabled))>
@if(empty($value) || isset($addnew) || isset($choose))
<option value=""></option>
@isset($addnew)
<option value="new">{{ $addnew ?: 'Add New' }}</option>
@endisset
@endif
@isset($options)
@empty($groupby)
@foreach($options as $option)
@continue(! Arr::get($option,'value'))
<option value="{{ Arr::get($option,'id') }}" @selected(Arr::get($option,'id') == old($old ?? $name,$value ?? ''))>{{ Arr::get($option,'value') }}</option>
@endforeach
@else
@foreach($options->groupBy($groupby) as $group)
<optgroup label="{{ $groupby == 'active' ? (Arr::get($group->first(),$groupby) ? 'Active' : 'Not Active') : Arr::get($group->first(),$groupby) }}">
@foreach($group as $option)
@continue(! Arr::get($option,'value'))
<option value="{{ Arr::get($option,'id') }}" @selected(Arr::get($option,'id') == old($old ?? $name,$value ?? ''))>{{ Arr::get($option,'value') }}</option>
@endforeach
</optgroup>
@endforeach
@endempty
@endisset
</select>
</x-leenooks::form.base>
@pa(select2)
@section('page-scripts')
<script type="text/javascript">
// Select doesnt support read only so we'll use disable and a new field
function {{$id ?? $name}}_readonly(on) {
if (on) {
$('#{{ $name }}').prop('disabled',true);
$('#{{ $name }}_disabled').prop('disabled',false).val($('#{{ $name }}').val());
} else {
$('#{{ $name }}').prop('disabled',false);
$('#{{ $name }}_disabled').prop('disabled',true);
}
}
$(document).ready(function() {
$('#{{ $id ?? $name }}').select2({
dropdownAutoWidth: true,
width: 'style',
@isset($addvalues)
tags: true,
placeholder: '',
allowClear: true,
@endisset
});
});
</script>
@append

View File

@ -0,0 +1,3 @@
<x-leenooks::form.base {{ $attributes }}>
<input type="text" class="form-control {{ $class ?? ''}}@error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" placeholder="{{ $placeholder ?? '' }}" value="{{ old($old ?? $name,$value ?? '') }}" @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
</x-leenooks::form.base>

View File

@ -0,0 +1,43 @@
<div class="form-group">
@if(isset($label))
<label {{ $attributes->only(['class']) }} for="{{ $id ?? $name }}">{{ $label }}</label>
@endisset
<div class="input-group has-validation">
@if(isset($icon) || isset($prepend))
<div class="input-group-prepend">
<span class="input-group-text">@isset($icon)<i class="fas fa-fw {{ $icon }}"></i>@endisset @isset($prepend){!! $prepend !!}@endisset</span>
</div>
@endif
<div class="w-100">
<textarea class="form-control {{ $class ?? ''}} @error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" @isset($placeholder)placeholder="{{ $placeholder }}"@endisset @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>{{ old($old ?? $name,$value ?? '') }}</textarea>
<span class="invalid-feedback">
@error($old ?? $name)
{{ $message }}
@elseif(isset($feedback))
{{ $feedback }}
@enderror
</span>
</div>
</div>
@isset($helper)
<span class="input-helper">{{ $helper }}</span>
@endif
</div>
@pa(simplemde)
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
new SimpleMDE({
element: $('#{{ $id ?? $name }}')[0],
forceSync: true
});
@error($old ?? $name)
$('div.CodeMirror-wrap').addClass('form-control is-invalid');
@enderror
});
</script>
@append

View File

@ -0,0 +1,3 @@
<x-leenooks::form.base {{ $attributes }}>
<input type="time" class="form-control {{ $class ?? ''}}@error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" value="{{ old($old ?? $name,$value ?? '') }}" @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
</x-leenooks::form.base>

View File

@ -0,0 +1,17 @@
<div class="form-group">
<div class="input-group has-validation">
<div class="custom-control custom-switch custom-switch-off-danger custom-switch-on-success">
<input type="checkbox" class="custom-control-input @error((! empty($old)) ? $old : $name) is-invalid @enderror" id="{{ $id ?? $name }}" name="{{ $name }}" @checked(old($old ?? $name,$value ?? '')) @readonly(isset($readonly)) @required(isset($required)) @disabled(isset($disabled))>
@if(isset($label))
<label class="custom-control-label" for="{{ $id ?? $name }}">{{ $label }}</label>
@endif
</div>
<span class="invalid-feedback">
@error($name)
{{ $message }}
@elseif(isset($feedback))
{{ $feedback }}
@enderror
</span>
</div>
</div>

View File

@ -0,0 +1,59 @@
<div class="modal fade" id="confirm_delete" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-danger">
<h5 class="modal-title">WARNING: DELETING record</h5>
<button type="button" class="btn-close" data-dismiss="modal" aria-label="Close">X</button>
</div>
<div class="modal-body">
<p>This action is irreversible. Are you sure, your sure, that you want to delete it?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<a type="button" class="btn btn-danger btn-ok" data-hide="{{ $hide }}">Delete</a>
</div>
</div>
</div>
</div>
@section('page-scripts')
<script type="text/javascript">
var confirm_delete = new bootstrap.Modal(document.getElementById('confirm_delete'), {});
$(document).ready(function() {
$('.{{$trigger}}').click(function(e) {
confirm_delete.show();
$('#confirm_delete')
.find('.btn-ok')
.attr('href',$(this).attr('href'))
.attr('data-id',$(this).data('id'));
return false;
});
$('.btn-ok').click(function(item) {
var that = $(this);
// Delete
$.ajax({
url: that.attr('href'),
method: 'POST',
dataType: 'json',
}).done(function(data) {
if (that.data('hide') == 'row')
$('a[data-id="'+that.data('id')+'"].{{$trigger}}').closest('tr').hide();
}).fail(function() {
alert('Hmm, that didnt work?');
});
// Clear the data cache
that.removeData();
confirm_delete.hide();
return false;
})
});
</script>
@append

View File

@ -24,15 +24,16 @@ return [
'conditions' => 'Terms and conditions',
'register' => 'Register',
'login' => 'Login',
'membreship' => 'I already have a membership',
'membership' => 'I already have a membership',
'passwordclickreset' => 'Click here to reset your password:',
'signGithub' => 'Sign in using Github',
'signFacebook' => 'Sign in using Facebook',
'signTwitter' => 'Sign in using Twitter',
'signGoogle+' => 'Sign in using Google+',
'signLinkedin' => 'Sign in using Linkedin',
'signGoogle' => 'Sign in using Google',
'signLinkedin' => 'Sign in using Linkedin',
'signW3id' => 'Sign in using W3id',
'signIBMid' => 'Sign in using IBMid',
'signMeetup' => 'Sign in using Meetup',
'sendpassword' => 'Send Password Reset Link',
'passwordreset' => 'Reset password',
'pagenotfound' => 'Page not found',
@ -51,35 +52,21 @@ return [
'level' => 'Level',
'here' => 'Here',
'recentactivity' => 'Recent Activity',
'descriptionpackage' => 'A Laravel 5 package that switchs default Laravel scaffolding/boilerplate to AdminLTE template',
'createdby' => 'Created by',
'seecode' => 'See code at',
'online' => 'Online',
'home' => 'Home',
'header' => 'HEADER',
'anotherlink' => 'Another Link',
'multilevel' => 'Multilevel',
'linklevel2' => 'Link in level2',
'birthday' => 'Langdon\'s Birthday',
'birthdaydate' => 'Will be 23 on April 24th',
'progress' => 'Tasks Progress',
'customtemplate' => 'Custom Template Design',
'statstab' => 'Stats Tab Content',
'generalset' => 'General Settings',
'reportpanel' => 'Report panel usage',
'checked' => 'checked',
'informationsettings' => 'Some information about this general settings option',
'togglenav' => 'Toggle navigation',
'tabmessages' => 'You have 4 messages',
'supteam' => 'Support Team',
'awesometheme' => 'Why not buy a new awesome theme?',
'allmessages' => 'See All Messages',
'notifications' => 'You have 10 notifications',
'newmembers' => '5 new members joined today',
'viewall' => 'View all',
'tasks' => 'You have 9 tasks',
'alltasks' => 'View all tasks',
'desbuttons' => 'Design some buttons',
'complete' => 'Complete',
'membersince' => 'Member since',
'followers' => 'Followers',
@ -87,26 +74,15 @@ return [
'friends' => 'Friends',
'profile' => 'Profile',
'signout' => 'Sign out',
'landingdescription' => 'Laravel 5 package that switchs default Laravel scaffolding/boilerplate to AdminLTE template with Bootstrap 3.0 and Pratt Landing page',
'landingdescriptionpratt' => 'Acacha AdminLTE Laravel package template Landing page - Using Pratt',
'description' => 'Description',
'showcase' => 'Showcase',
'contact' => 'Contact',
'laravelpackage' => '5 package that switchs default Laravel',
'to' => 'to',
'templatewith' => 'template with',
'and' => 'and',
'gedstarted' => 'Get Started!',
'amazing' => 'Amazing admin template',
'basedadminlte' => 'Based on adminlte bootstrap theme',
'awesomepackaged' => 'Awesome packaged...',
'by' => 'by',
'at' => 'at',
'readytouse' => 'ready to use with Laravel!',
'designed' => 'Designed To Excel',
'community' => 'Community',
'see' => 'See',
'githubproject' => 'Github project',
'post' => 'post',
'issues' => 'issues',
'pullrequests' => 'Pull requests',
@ -114,10 +90,6 @@ return [
'monitoring' => 'Monitoring',
'whatnew' => 'What\'s New?',
'features' => 'Some Features',
'design' => 'First Class Design',
'retina' => 'Retina Ready Theme',
'support' => 'Awesome Support',
'responsive' => 'Responsive Design',
'screenshots' => 'Some Screenshots',
'address' => 'Address',
'dropus' => 'Drop Us A Line',
@ -137,4 +109,6 @@ return [
'entering' => 'Entering...',
'registered' => 'User Registered!',
'switchoff' => 'Switch Back',
'success' => 'Success!',
'resetemaillink' => 'We have e-mailed your password reset link!',
];

View File

@ -1,53 +1,128 @@
@extends('adminlte::layouts.auth')
@section('htmlheader_title')
Log in
Log in
@endsection
@section('content')
<body class="hold-transition login-page">
<div id="app" v-cloak>
<div class="login-box">
<div class="login-logo">
<a href="{{ url('/home') }}">{!! config('app.name_html_long') !!}</a>
</div><!-- /.login-logo -->
@if(isset($login_note) AND $login_note)
<div class="alert alert-info alert-dismissible m-auto">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<h5><i class="icon fas fa-info"></i> NOTE!</h5>
{!! $login_note !!}
</div>
<br>
@endisset
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('adminlte_lang::message.someproblems') }}<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="login-box m-auto">
<div class="login-logo">
<a>{!! config('app.name_html_long') !!}</a>
</div>
<div class="login-box-body">
<p class="login-box-msg"> {{ trans('adminlte_lang::message.siginsession') }} </p>
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('adminlte_lang::message.someproblems') }}<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<login-form name="{{ config('auth.providers.users.field','email') }}"
domain="{{ config('auth.defaults.domain','') }}"></login-form>
@if (Session::has('error'))
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('adminlte_lang::message.someproblems') }}<br><br>
<ul>
<li>{{ Session::get('error') }}</li>
</ul>
</div>
@endif
<a href="{{ url('/password/reset') }}">{{ trans('adminlte_lang::message.forgotpassword') }}</a><br>
<!-- /.login-logo -->
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">{{ trans('adminlte_lang::message.siginsession') }}</p>
@if(count(config('auth.social',[])))
@include('adminlte::auth.partials.social_login')
@endif
</div>
</div>
</div>
<form method="post">
@csrf
@include('adminlte::layouts.partials.scripts_auth')
<div class="row">
<div class="col-12">
<div class="input-group mb-3">
<input type="email" name="email" class="form-control" placeholder="Email">
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-fw fa-envelope"></i></span>
</div>
</div>
</div>
<script>
$(function () {
$('input').iCheck({
checkboxClass: 'icheckbox_square-blue',
radioClass: 'iradio_square-blue',
increaseArea: '20%' // optional
});
});
</script>
</body>
@endsection
<div class="col-12">
<div class="input-group mb-3">
<input type="password" name="password" class="form-control" placeholder="Password">
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-fw fa-key"></i></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-8">
<div class="checkbox icheck">
<label>
<input type="checkbox" name="remember"> Remember Me
</label>
</div>
</div>
<div class="col-4">
<div class="row">
<div class="col-12">
<button type="submit" name="submit" class="btn btn-sm btn-primary float-right">Sign In</button>
</div>
</div>
<div class="row">
<div class="col-12 pt-2">
<button type="button" id="passkey" class="btn btn-sm btn-primary float-right"><i class="bi bi-key"></i> Passkey</button>
</div>
</div>
</div>
</div>
</form>
@if(count(config('auth.social',[])))
@include('adminlte::auth.partials.social_login')
@endif
<p class="mb-1">
<a name="reset" href="{{ url('password/reset') }}">{{ trans('adminlte_lang::message.forgotpassword') }}</a>
</p>
@isset($register)
<p class="mb-0">
<a href="{{ url('register') }}" class="text-center">{{ trans('adminlte_lang::message.register') }}</a>
</p>
@endisset
</div>
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
@endsection
@section('page-scripts')
<!-- Passkeys -->
<script type='text/javascript' src='{{ asset('/passkey/passkey.js') }}'></script>
<script type="text/javascript">
$(document).ready(function() {
$('#passkey').on('click',function() {
passkey_check('{{ csrf_token() }}','{{ redirect()->intended("/passkey/loggedin")->getTargetUrl() }}');
return false;
});
});
</script>
@append

View File

@ -0,0 +1,10 @@
<!-- Bootstrap & Jquery App -->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous"></script>
<script type="text/javascript" src="//cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>
<!-- AdminLTE -->
<script src="//cdn.jsdelivr.net/npm/admin-lte@3.1.0/dist/js/adminlte.min.js"></script>
@if(file_exists('js/custom-auth.js'))
<!-- Any Custom JS -->
<script src="{{ asset('js/custom-auth.js') }}"></script>
@endif

View File

@ -1,6 +1,9 @@
<div class="social-auth-links text-center">
<div class="social-auth-links text-center mb-3">
<p>- OR -</p>
@foreach(config('auth.social') as $o)
<a href="{{ url('/auth/'.$o['id']) }}" class="btn btn-block btn-social btn-{{ $o['class'] }} btn-flat"><i class="fa fa-{{ $o['icon'] }}"></i> {{ trans('adminlte_lang::message.sign'.$o['name']) }}</a>
<a href="{{ url('/auth/'.$o['id']) }}" class="btn btn-block {{ $o['class'] }}">
<i class="{{ $o['icon'] }} fa-fw mr-2"></i> {{ trans('adminlte_lang::message.sign'.$o['name']) }}
</a>
@endforeach
</div><!-- /.social-auth-links -->
</div>
<!-- /.social-auth-links -->

View File

@ -1,59 +1,69 @@
@extends('adminlte::layouts.auth')
@section('htmlheader_title')
Password recovery
Password recovery
@endsection
@section('content')
<div class="login-box m-auto">
<div class="login-logo">
<a>{!! config('app.name_html_long') !!}</a>
</div>
<body class="login-page">
<div id="app">
@if (Session::has('status'))
<div class="text-center mb-3">
<div class="alert alert-success m-auto">
<strong>OK!</strong> {{ Session::get('status') }}
</div>
</div>
@endif
<div class="login-box">
<div class="login-logo">
<a href="{{ url('/home') }}"><b>Admin</b>LTE</a>
</div><!-- /.login-logo -->
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('adminlte_lang::message.someproblems') }}<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<!-- /.login-logo -->
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">You forgot your password? Here you can easily retrieve a new password.</p>
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('adminlte_lang::message.someproblems') }}<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="post" action="{{ url('password/email') }}">
@csrf
<div class="login-box-body">
<p class="login-box-msg">Reset Password</p>
<div class="input-group mb-3">
<input type="email" name="email" class="form-control" placeholder="Email" required>
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-fw fa-envelope"></i></span>
</div>
</div>
<email-reset-password-form></email-reset-password-form>
<div class="row">
<div class="col-12">
<button type="submit" class="btn btn-primary btn-block">{{ trans('adminlte_lang::message.sendpassword') }}</button>
</div>
<!-- /.col -->
</div>
</form>
<a href="{{ url('/login') }}">Log in</a><br>
<p class="mt-3 mb-1">
<a href="{{ url('login') }}">{{ trans('adminlte_lang::message.login') }}</a>
</p>
</div><!-- /.login-box-body -->
</div><!-- /.login-box -->
</div>
@include('adminlte::layouts.partials.scripts_auth')
<script>
$(function () {
$('input').iCheck({
checkboxClass: 'icheckbox_square-blue',
radioClass: 'iradio_square-blue',
increaseArea: '20%' // optional
});
});
</script>
</body>
@endsection
@isset($register)
<p class="mb-0">
<a href="{{ url('register') }}" class="text-center">{{ trans('adminlte_lang::message.register') }}</a>
</p>
@endisset
</div>
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
@endsection

View File

@ -0,0 +1,73 @@
@extends('adminlte::layouts.auth')
@section('htmlheader_title')
Password reset
@endsection
@section('content')
<div class="login-box m-auto">
<div class="login-logo">
<a>{!! config('app.name_html_long') !!}</a>
</div>
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('adminlte_lang::message.someproblems') }}<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<!-- /.login-logo -->
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">You are only one step a way from your new password, set your new password now.</p>
<form method="post" action="{{ url('password/reset') }}">
<input type="hidden" name="token" value="{{ $token }}">
@csrf
<div class="input-group mb-3">
<input type="email" name="email" class="form-control" placeholder="Email" required>
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-fw fa-envelope"></i></span>
</div>
</div>
<div class="input-group mb-3">
<input type="password" name="password" class="form-control" placeholder="Password" required>
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-fw fa-lock"></i></span>
</div>
</div>
<div class="input-group mb-3">
<input type="password" name="password_confirmation" class="form-control" placeholder="Confirm Password" data-match="#password" required>
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-fw fa-clone"></i></span>
</div>
</div>
<div class="row">
<div class="col-12">
<button type="submit" class="btn btn-primary btn-block">{{ trans('adminlte_lang::message.passwordreset') }}</button>
</div>
<!-- /.col -->
</div>
</form>
<p class="mt-3 mb-1">
<a href="{{ url('login') }}">Login</a>
@isset($register)
<a href="{{ url('register') }}" class="text-center">{{ trans('adminlte_lang::message.register') }}</a>
@endisset
</p>
</div>
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
@endsection

View File

@ -1,44 +0,0 @@
@extends('adminlte::layouts.auth')
@section('htmlheader_title')
Register
@endsection
@section('content')
<body class="hold-transition register-page">
<div id="app" v-cloak>
<div class="register-box">
<div class="register-logo">
<a href="{{ url('/home') }}">{!! config('app.name_html_long') !!}</a>
</div>
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('adminlte_lang::message.someproblems') }}<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="register-box-body">
<p class="login-box-msg">Register for access</p>
<register-form></register-form>
<!-- #include('adminlte::auth.partials.social_login') -->
<a href="{{ url('/login') }}" class="text-center">I already have an account</a>
</div><!-- /.form-box -->
</div><!-- /.register-box -->
</div>
@include('adminlte::layouts.partials.scripts_auth')
@include('adminlte::auth.terms')
</body>
@endsection

View File

@ -1,20 +0,0 @@
@extends('adminlte::layouts.errors')
@section('htmlheader_title')
{{ trans('adminlte_lang::message.servererror') }}
@endsection
@section('main-content')
<div class="error-page">
<h2 class="headline text-red">403</h2>
<div class="error-content">
<h3><i class="fa fa-warning text-red"></i> Oops! Bad Authentication</h3>
<p>
Sorry, your authentication failed.
{{ trans('adminlte_lang::message.mainwhile') }} <a href='{{ url('/home') }}'>{{ trans('adminlte_lang::message.returndashboard') }}</a>.
</p>
<br>
</div>
</div><!-- /.error-page -->
@endsection

View File

@ -1,20 +0,0 @@
@extends('adminlte::layouts.errors')
@section('htmlheader_title')
{{ trans('adminlte_lang::message.pagenotfound') }}
@endsection
@section('main-content')
<div class="error-page">
<h2 class="headline text-yellow">404</h2>
<div class="error-content">
<h3><i class="fa fa-warning text-yellow"></i> Oops! {{ trans('adminlte_lang::message.pagenotfound') }}.</h3>
<p>
{{ trans('adminlte_lang::message.notfindpage') }}
{{ trans('adminlte_lang::message.mainwhile') }} <a href='{{ url('/home') }}'>{{ trans('adminlte_lang::message.returndashboard') }}</a>.
</p>
<br/>
</div><!-- /.error-content -->
</div><!-- /.error-page -->
@endsection

View File

@ -1,20 +0,0 @@
@extends('adminlte::layouts.errors')
@section('htmlheader_title')
{{ trans('adminlte_lang::message.servererror') }}
@endsection
@section('main-content')
<div class="error-page">
<h2 class="headline text-red">500</h2>
<div class="error-content">
<h3><i class="fa fa-warning text-red"></i> Oops! {{ trans('adminlte_lang::message.somethingwrong') }}</h3>
<h4><i class="text-red"></i> {{ trans($msg) }}</h4>
<p>
{{ trans('adminlte_lang::message.wewillwork') }}
{{ trans('adminlte_lang::message.mainwhile') }} <a href='{{ url('/home') }}'>{{ trans('adminlte_lang::message.returndashboard') }}</a>.
</p>
</div>
</div><!-- /.error-page -->
@endsection

View File

@ -1,44 +1,43 @@
<!DOCTYPE html>
<html lang="en">
@section('htmlheader')
@include('adminlte::layouts.partials.htmlheader')
@show
<body class="fixed skin-blue sidebar-mini">
<div id="app" v-cloak>
<div class="wrapper">
@include('adminlte::layouts.partials.mainheader')
@include('adminlte::layouts.partials.sidebar')
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
@include('adminlte::layouts.partials.contentheader')
<!-- Main content -->
<section class="content">
<div class="row">
<!-- Your Page Content Here -->
@yield('main-content')
</div>
</section><!-- /.content -->
</div><!-- /.content-wrapper -->
<!-- #include('adminlte::layouts.partials.controlsidebar') -->
@include('adminlte::layouts.partials.footer')
</div><!-- ./wrapper -->
</div> <!-- ./app -->
@section('scripts')
@include('adminlte::layouts.partials.scripts')
{{-- Scripts --}}
{!! Asset::scripts() !!}
@yield('page-scripts')
@section('htmlheader')
@include('adminlte::layouts.partials.htmlheader')
@show
</body>
<body class="hold-transition sidebar-mini @if (Cookie::get('toggleState') === 'closed') {{ 'sidebar-collapse' }} @endif">
<div id="app">
<div class="wrapper">
@include('adminlte::layouts.partials.mainheader')
@include('adminlte::layouts.partials.sidebar')
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- In case we have input fields in the header -->
@yield('page-form-start')
@include('adminlte::layouts.partials.contentheader')
<!-- Main content -->
<section class="content">
<div class="container-fluid">
<!-- Your Page Content Here -->
@yield('main-content')
</div>
</section><!-- /.content -->
@yield('page-form-end')
</div><!-- /.content-wrapper -->
@isset($controlsidebar)
@include('adminlte::layouts.partials.controlsidebar')
@endisset
@include('adminlte::layouts.partials.footer')
</div><!-- ./wrapper -->
</div> <!-- ./app -->
@section('scripts')
@include('adminlte::layouts.partials.scripts')
@show
</body>
</html>

View File

@ -1,8 +1,34 @@
<!DOCTYPE html>
<html>
@section('htmlheader')
@include('adminlte::layouts.partials.htmlheader')
@include('adminlte::layouts.partials.htmlheader')
<!-- iCheck -->
<link rel="stylesheet" href="{{ asset('plugin/iCheck/square/blue.css') }}">
@show
@yield('content')
<body class="hold-transition login-page">
<div id="app">
@yield('content')
</div>
@section('scripts')
@include('adminlte::auth.partials.scripts')
<!-- iCheck -->
<script src="{{ asset('plugin/iCheck/icheck.min.js') }}"></script>
<script>
$(document).ready(function() {
$('input').iCheck({
checkboxClass: 'icheckbox_square-blue',
radioClass : 'iradio_square-blue',
increaseArea : '20%' // optional
})
})
</script>
@yield('page-scripts')
@show
</body>
</html>

View File

@ -1,17 +0,0 @@
<!DOCTYPE html>
<html>
@include('adminlte::layouts.partials.htmlheader')
<body>
<div id="app" v-cloak>
<!-- Main content -->
<section class="content">
<!-- Your Page Content Here -->
@yield('main-content')
</section>
</div>
@section('scripts')
@include('adminlte::layouts.partials.scripts')
@show
</body>
</html>

View File

@ -1,17 +1,26 @@
<!-- Content Header (Page header) -->
<section class="content-header">
<div id="search_results"></div>
<h1>
@yield('contentheader_title', 'Content Title')
<small>@yield('contentheader_description')</small>
</h1>
<ol class="breadcrumb">
<li><a href="{{ url('/home'.(isset($ido) ? '/'.$ido->id : '')) }}"><i class="fa fa-dashboard"></i>Home</a></li>
<div class="content-header d-print-none">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-8">
<h1 class="m-0 text-dark">@yield('contentheader_title', 'Content Title')</h1>
<small>@yield('contentheader_description','Description')</small>
</div><!-- /.col -->
@isset($breadcrumb)
@foreach ($breadcrumb as $item => $url)
<li><a href="{{url($url)}}">{{ $item }}</a></li>
@endforeach
@endisset
</ol> <!-- /.breadcrumb -->
</section> <!-- /.content-header -->
<div class="col-sm-4">
<ol class="breadcrumb float-sm-right small">
<li class="breadcrumb-item"><a href="{{ url('/home'.(isset($ido) ? '/'.$ido->id : '')) }}">Home</a></li>
@isset($breadcrumb)
@foreach ($breadcrumb as $item => $url)
<li class="breadcrumb-item"><a href="{{url($url)}}">{{ $item }}</a></li>
@endforeach
@endisset
@if(View::hasSection('page_title'))
<li class="breadcrumb-item active">@yield('page_title','Page Title')</li>
@endif
</ol>
</div><!-- /.col -->
</div><!-- /.row -->
</div><!-- /.container-fluid -->
</div>
<!-- /.content-header -->

View File

@ -0,0 +1,5 @@
<!-- Control Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<!-- Control sidebar content goes here -->
</aside>
<!-- /.control-sidebar -->

View File

@ -1,8 +1,10 @@
<!-- Main Footer -->
<footer class="main-footer">
<!-- To the right -->
<div class="pull-right hidden-xs">
<a href="#"></a><b>{{ config('app.name') }}</b></a>
</div>
<strong>&copy Leenooks</strong>
</footer>
<!-- To the right -->
<div class="float-right d-sm-none d-md-block">
{{ config('app.name') }}
</div>
<!-- Default to the left -->
<strong>Copyright &copy; 2014-{{ \Carbon\Carbon::now()->year }} <a href="#">&copy Leenooks</a>.</strong> All rights reserved.
</footer>

View File

@ -1,35 +1,58 @@
<head>
<meta charset="UTF-8">
<title>{{ config('app.name') }} - @yield('htmlheader_title', 'Your title here')</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{ config('app.name') }} - @yield('htmlheader_title','Your title here')</title>
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<link href="{{ asset('/css/all.css') }}" rel="stylesheet" type="text/css" />
{{--
<!-- Included in adminlte -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
--}}
<!-- Font Awesome Icons -->
<link rel="stylesheet" href="//use.fontawesome.com/releases/v5.15.4/css/all.css">
{{--
<link rel="stylesheet" href="//use.fontawesome.com/releases/v5.15.4/css/v4-shims.css">
--}}
<!-- Theme style -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/admin-lte@3.2.0/dist/css/adminlte.min.css">
<!-- Google Font: Source Sans Pro -->
<link href="https://fonts.googleapis.com/css2?family={{ str_replace(' ','+',config('app.font') ?: 'IBM Plex Sans') }}:wght@300&display=swap" rel="stylesheet">
@if(file_exists('css/social.css'))
<!-- Social Logins -->
<link rel="stylesheet" href="{{ asset('css/social.css') }}">
@endif
@if(file_exists('css/print.css'))
<!-- Printing Modifications -->
<link rel="stylesheet" href="{{ asset('css/print.css') }}">
@endif
{{--
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
--}}
<script>
//See https://laracasts.com/discuss/channels/vue/use-trans-in-vuejs
window.trans =
@php
// copy all translations from /resources/lang/CURRENT_LOCALE/* to global JS variable
$lang_files = File::files(resource_path() . '/lang/' . App::getLocale());
$trans = [];
foreach ($lang_files as $f) {
$filename = pathinfo($f)['filename'];
$trans[$filename] = trans($filename);
}
$trans['adminlte_lang_message'] = trans('adminlte_lang::message');
echo json_encode($trans);
@endphp
</script>
<!-- Page Styles -->
{!! PageAssets::css() !!}
<!-- STYLESHEETS -->
{!! Asset::styles() !!}
@yield('page-styles')
@if(file_exists('css/fixes.css'))
<!-- CSS Fixes -->
<link rel="stylesheet" href="{{ asset('css/fixes.css') }}">
@endif
@if(file_exists('css/custom.css'))
<!-- Custom CSS -->
<link rel="stylesheet" href="{{ asset('css/custom.css') }}">
@endif
</head>

View File

@ -1,104 +1,161 @@
<!-- Main Header -->
<header class="main-header">
<!-- Navbar -->
<nav class="main-header navbar navbar-expand bg-white navbar-light border-bottom">
<!-- Left navbar links -->
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" data-widget="pushmenu" href="#"><i class="fas fa-bars"></i></a>
</li>
</ul>
<!-- Logo -->
<a href="{{ url('/home') }}" class="logo">
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini">{!! config('app.name_html_short','<b>A</b>N') !!}</span>
<!-- logo for regular state and mobile devices -->
<span class="logo-lg">{!! config('app.name_html_long','<b>App</b>Name') !!}</span>
</a>
<!-- Header Navbar -->
<nav class="navbar navbar-static-top" role="navigation">
<!-- Sidebar toggle button-->
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
<span class="sr-only">{{ trans('adminlte_lang::message.togglenav') }}</span>
</a>
<!-- Navbar Right Menu -->
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Tasks Menu -->
@if (Auth::guest())
<li><a href="{{ url('/register') }}">{{ trans('adminlte_lang::message.register') }}</a></li>
<li><a href="{{ url('/login') }}">{{ trans('adminlte_lang::message.login') }}</a></li>
@else
@if (isset($topmenu))
<!-- Available Data Menu -->
<li class="dropdown tasks-menu" id="import_date">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<span class="hidden-xs">Items</span>
</a>
<ul class="dropdown-menu">
<li class="header">Header</li>
<li>
<ul class="menu small">
&nbsp;
</ul>
</li>
<li class="footer"><a href="#">(Not Active)</a></li>
</ul>
</li>
@endif
<!-- Top Menu Items -->
@include('adminlte::layouts.partials.topmenu')
<li class="dropdown user user-menu @if($user->switched) bg-red @endif" id="user_menu">
<!-- Menu Toggle Button -->
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<!-- The user image in the navbar-->
<img src="{{ Gravatar::get($user->email) }}" class="user-image" alt="User Image"/>
<!-- hidden-xs hides the username on small devices so only the image appears. -->
<span class="hidden-xs">{{ $user->name }}</span>
</a>
<ul class="dropdown-menu">
<!-- The user image in the menu -->
<li class="user-header">
<img src="{{ Gravatar::get($user->email) }}" class="img-circle" alt="User Image" />
<p>
{{ $user->name }}
<small>{{ trans('adminlte_lang::message.login') }}: @if($user->last_access) {{ $user->last_access->format('Y-m-d') }} @else Unknown @endif</small>
</p>
</li>
<!-- Menu Footer-->
<li class="user-footer">
<div class="pull-left">
<a href="{{ url('/settings') }}" class="btn btn-default btn-flat">{{ trans('adminlte_lang::message.profile') }}</a>
</div>
<div class="pull-right">
@if ($user->switched)
<a href="{{ url('/admin/switch/stop') }}" class="btn btn-default btn-flat" id="switch">
{{ trans('adminlte_lang::message.switchoff') }}
</a>
@else
<a href="{{ url('/logout') }}" class="btn btn-default btn-flat" id="logout"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ trans('adminlte_lang::message.signout') }}
</a>
<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
<input type="submit" value="logout" style="display: none;">
</form>
@endif
</div>
</li>
</ul>
</li>
@endif
<!-- Control Sidebar Toggle Button -->
@if (isset($controlbar))
<li>
<a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
</li>
@endif
</ul>
<!-- SEARCH FORM -->
<form class="form-inline ml-3">
<div class="input-group input-group-sm">
<input class="form-control form-control-navbar" name="q" type="search" placeholder="Search" aria-label="Search" autocomplete="off">
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-search"></i></span>
<span class="p-1 d-none" name="searching"><i class="fas fa-spinner fa-spin" style="margin-top: .33em; width: 1em; height: 1em;"></i></span>
</div>
<div id="search_results"></div>
</div>
</nav>
</header>
</form>
<!-- Right navbar links -->
<ul class="navbar-nav ml-auto">
@include('adminlte::layouts.partials.topmenu')
@if(Auth::check())
<!-- Profile Settings -->
<li class="nav-item dropdown">
<a class="nav-link" data-toggle="dropdown" href="#">
<i class="fas fa-cog"></i>
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
<span class="dropdown-item dropdown-header @if($user->switched) bg-danger @endif">
@if($user->switched)
SUDO (<small>{{ $user->name ?: 'User Name' }}</small>)
@else
{{ $user->name ?: 'User Name' }}
@endif
</span>
<div class="dropdown-divider"></div>
<a href="{{ url('settings') }}" class="dropdown-item">
<i class="fas fa-user mr-2"></i> Settings
</a>
<div class="dropdown-divider"></div>
@if ($user->switched)
<a href="{{ url('/admin/switch/stop') }}" class="dropdown-item">
<i class="fas fa-sign-out-alt mr-2"></i> {{ trans('adminlte_lang::message.switchoff') }}
</a>
@else
<a href="{{ url('logout') }}" class="dropdown-item">
<i class="fas fa-sign-out-alt mr-2"></i> Log Out
</a>
@endif
</div>
</li>
@else
<a href="{{ url()->current().'?login=1' }}" class="text-muted pr-2"><i class="fas fa-lock"></i></a>
@endif
<!-- Control Side Bar -->
@isset($controlsidebar)
<li class="nav-item">
<a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#">
<i class="fas fa-th"></i>
</a>
</li>
@endisset
</ul>
</nav>
@section('page-scripts')
<style>
/* Solid border */
div.typeahead.dropdown-menu > .dropdown-header {
color: #000000;
text-align: left;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
$('input[name=q]').typeahead({
autoSelect: false,
scrollHeight: 10,
theme: 'bootstrap4',
delay: 500,
minLength: 2,
items: {{ isset($search_limit) ? $search_limit : 100 }},
fitToElement: false,
selectOnBlur: false,
appendTo: "#search_results",
source: function (query,process) {
search('{{ url("search",['date'=>isset($ido) ? $ido->id : NULL]) }}',query,process);
},
matcher: function () { return true; },
// Disable sorting and just return the items (items should by the ajax method)
sorter: function(items) {
return items;
},
updater: function (item) {
window.parent.location.href = item.value;
},
})
.on('keyup keypress', function(event) {
var key = event.keyCode || event.which;
if (key === 13) {
event.preventDefault();
return false;
}
});
});
var c=0;
var search = _.debounce(function(url,query,process,icon){
$.ajax({
url : url,
type : 'GET',
data : 'term=' + query,
dataType : 'JSON',
async : true,
cache : false,
beforeSend : function() {
if (c++ == 0) {
if (icon)
$('i[name='+icon+']').addClass("fa-spin");
else {
$('span[name=searching]').removeClass("d-none");
}
}
},
success : function(data) {
// if json is null, means no match, won't do again.
if(data==null || (data.length===0)) return;
process(data);
},
complete : function() {
if (--c == 0) {
if (icon)
$('i[name='+icon+']').removeClass("fa-spin");
else {
$('span[name=searching]').addClass("d-none");
}
}
},
statusCode: {
401: function() {
window.parent.location.href = '{{ route('login') }}';
}
}
})
}, 500);
</script>
@append

View File

@ -1,22 +1,112 @@
<!-- REQUIRED JS SCRIPTS -->
<!-- Bootstrap & Jquery App -->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"></script>
<script type="text/javascript" src="//cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
<!-- AdminLTE -->
<script type="text/javascript" src="//cdn.jsdelivr.net/npm/admin-lte@3.2.0/dist/js/adminlte.min.js"></script>
<!-- JQuery and bootstrap are required by Laravel 5.3 in resources/assets/js/bootstrap.js-->
<!-- Laravel App -->
<script src="{{ url(mix('/js/app.js')) }}" type="text/javascript"></script>
<!-- Additional Utilities -->
<script src="{{ asset('plugin/bootstrap3-typeahead/js/bootstrap3-typeahead.min.js') }}"></script>
<!-- Our our CSRF token to each interaction -->
{{-- @todo Test that we are validating this, also axios should be doing this for us? --}}
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
// Our CSRF token to each interaction
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.AdminLTESidebarTweak = {};
$.AdminLTESidebarTweak.Open = true;
$.AdminLTESidebarTweak.ResizeDelay = 1000;
$.AdminLTESidebarTweak.options = {
EnableRemember: true,
//Removes the transition after page reload.
NoTransitionAfterReload: false
};
// Work out our timezone.
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
/**
* Open and close the sidebar
* @param state
* @param addclass
*/
function sidebaropenclose(state,addclass) {
// Dont do anything if the state hasnt changed.
if (state == $.AdminLTESidebarTweak.Open) {
return;
}
$.AdminLTESidebarTweak.Open = state;
if (addclass !== 'undefined')
$('body')
.addClass(state ? 'sidebar-open' : 'sidebar-collapse');
$(this).delay($.AdminLTESidebarTweak.ResizeDelay).queue(function() {
window.dispatchEvent(new Event('resize'));
$(this).dequeue();
});
}
$(function () {
"use strict";
$('body').on('collapsed.lte.pushmenu', function(){
if($.AdminLTESidebarTweak.options.EnableRemember) {
document.cookie = "toggleState=closed;path=/";
$("body").queue(sidebaropenclose(false));
}
});
$('body').on('shown.lte.pushmenu', function(){
if($.AdminLTESidebarTweak.options.EnableRemember){
document.cookie = "toggleState=opened;path=/";
$("body").queue(sidebaropenclose(true));
}
});
if($.AdminLTESidebarTweak.options.EnableRemember){
var re = new RegExp('toggleState' + "=([^;]+)");
var value = re.exec(document.cookie);
var toggleState = (value != null) ? unescape(value[1]) : null;
if(toggleState == 'closed'){
if($.AdminLTESidebarTweak.options.NoTransitionAfterReload){
$("body").addClass('sidebar-collapse hold-transition').delay(100).queue(function(){
$(this).removeClass('hold-transition');
});
}else{
$("body").queue(sidebaropenclose(false,true));
}
}
}
});
</script>
<!-- Optionally, you can add Slimscroll and FastClick plugins.
Both of these plugins are recommended to enhance the
user experience. Slimscroll is required when using the
fixed layout. -->
@js('/site/js/jquery.slimscroll.min.js','jq.slimscroll');
@js('/site/js/fastclick.min.js','jq.fastclick');
<script type="text/javascript">
$(document).ready(function() {
$('body')
.addClass('sidebar-collapse')
.delay(500)
.queue(function () {
window.dispatchEvent(new Event('resize'));
$(this).dequeue();
});
});
</script>
<!-- Page Scripts -->
{!! PageAssets::js() !!}
@yield('page-scripts')
@if(file_exists('js/custom.js'))
<!-- Any Custom JS -->
<script src="{{ asset('js/custom.js') }}"></script>
@endif

View File

@ -1,2 +0,0 @@
<!-- Compiled app javascript -->
<script src="{{ url (mix('/js/app.js')) }}"></script>

View File

@ -1,112 +1,37 @@
<!-- Left side column. contains the logo and sidebar -->
<aside class="main-sidebar">
<!-- Main Sidebar Container -->
<aside class="main-sidebar sidebar-dark-primary elevation-4 d-print-none">
<!-- Brand Logo -->
<a href="{{ url('home') }}" class="brand-link">
<img src="{{ asset('img/logo.png') }}" alt="Logo" style="margin-left: 0; padding: 5px;" class="brand-image">
<span class="brand-text font-weight-light">{!! config('app.name_html_long','<b>App</b>Name') !!}</span>
</a>
<!-- sidebar: style can be found in sidebar.less -->
<section class="sidebar">
<!-- Sidebar -->
<div class="sidebar">
<!-- Sidebar user panel (optional) -->
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
<div class="image">
@if(isset($user) AND $user->exists)
<i class="fa fa-fw fa-2x fa-user text-white"></i>
@else
<a name="login" href="{{ url()->current().'?login=1' }}" class="d-block"><i class="pl-1 fas fa-lock fa-2x"></i></a>
@endif
</div>
<!-- Sidebar user panel (optional) -->
@if (! Auth::guest())
<div class="user-panel">
<div class="pull-left image">
<img src="{{ Gravatar::get($user->email) }}" class="img-circle" alt="User Image" />
</div>
<div class="pull-left info">
<p>{{ Auth::user()->name }}</p>
<!-- Status -->
<a href="#"><i class="fa fa-circle text-success"></i> {{ trans('adminlte_lang::message.online') }}</a>
</div>
</div>
@endif
<div class="info">
<a href="{{ url('login') }}" class="d-block">{{ (isset($user) AND $user->exists) ? ($user->name ?: 'No Name') : 'Login' }}</a>
@isset($user->lastlogin)<a name="login" span="d-block"><small><span style="color: #747474;">Last On:</span> {{ $user->lastlogin->format('Y-m-d H:i') }}</small></a>@endisset
</div>
</div>
<!-- search form (Optional) -->
<form action="#" method="get" class="sidebar-form">
<div class="input-group">
<input type="text" name="q" class="form-control" autocomplete="off" placeholder="{{ trans('adminlte_lang::message.search') }}..."/>
<span class="input-group-btn">
<button type='submit' name='search' id='search-btn' class="btn btn-flat"><i class="fa fa-search"></i></button>
</span>
</div>
</form>
<!-- /.search form -->
<!-- Sidebar Menu -->
@include('adminlte::layouts.partials.sidebarmenu')
<!-- Sidebar Menu -->
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class with font-awesome or any other icon font library -->
@include('adminlte::layouts.partials.sidebarmenu')
</ul>
</nav>
<!-- /.sidebar-menu -->
</section>
<!-- /.sidebar -->
</div>
<!-- /.sidebar -->
</aside>
@section('page-scripts')
@js('/site/js/bootstrap3-typeahead.min.js','bs-typeahead')
<script type="text/javascript">
$(document).ready(function() {
$("input[name=q]").typeahead({
delay: 300,
minLength: 2,
fitToElement: false,
appendTo: "#search_results",
source: function (query,process) {
search('{{ url("search",['date'=>isset($ido) ? $ido->id : NULL]) }}',query,process);
},
matcher: function () { return true; },
updater: function (item) {
window.parent.location.href = '{{ url("/") }}'+users[item];
},
})
.on('keyup keypress', function(event) {
var key = event.keyCode || event.which;
if (key === 13) {
event.preventDefault();
return false;
}
});
});
var c=0;
var search = _.debounce(function(url,query,process,icon){
$.ajax({
url : url,
type : 'GET',
data : 'term=' + query,
dataType : 'JSON',
async : false,
cache : false,
beforeSend : function() {
if (c++ == 0) {
if (icon)
$('i[name='+icon+']').addClass("fa-spin");
else
$('i[name=searching]').removeClass("hidden");
}
},
success : function(data) {
// if json is null, means no match, won't do again.
if(data==null || (data.length===0)) return;
users = {};
userLabels = [];
_.each(data,function(item,ix,list) {
if (_.includes(users,item.label))
item.label = item.label + ' #' + item.value;
userLabels.push(item.label);
users[item.label] = item.value;
});
process(userLabels);
},
complete : function() {
if (--c == 0) {
if (icon)
$('i[name='+icon+']').removeClass("fa-spin");
else
$('i[name=searching]').addClass("hidden");
}
}
})
}, 500);
</script>
@append

View File

@ -1,5 +1,11 @@
<ul class="sidebar-menu" data-widget="tree">
<li class="header">Menu</li>
<!-- Optionally, you can add icons to the links -->
<li @if(Route::current()->getName() == 'home')class="active"@endif><a href="{{ url('home',['date'=>(isset($ido) ? $ido->id : NULL)]) }}"><i class='fa fa-link'></i> <span>{{ trans('adminlte_lang::message.home') }}</span></a></li>
</ul>
<li class="nav-header">MAIN</li>
<li class="nav-item">
<a href="#" class="nav-link @if(Route::current()->getName() == 'home') active @endif">
<i class="nav-icon fas fa-th"></i>
<p>
My Link Title
<span class="right badge badge-danger">New</span>
</p>
</a>
</li>

View File

@ -0,0 +1,7 @@
{{--
@foreach ($topmenu as $url => $title)
<li class="nav-item d-none d-sm-inline-block">
<a href="{{ $url }}" class="nav-link">{{ $title }}</a>
</li>
@endforeach
--}}

View File

@ -0,0 +1,114 @@
@extends('architect::layouts.auth')
@section('htmlheader_title')
Log in
@endsection
@section('content')
<!-- /.login-logo -->
<div class="app-container app-theme-white body-tabs-shadow">
<div class="app-container">
<div class="h-100 bg-animation">
<div class="d-flex h-100 justify-content-center align-items-center">
<div class="mx-auto app-login-box col-md-8">
@if(file_exists('login-note.html'))
<div class="mx-auto card text-white card-body bg-primary w-50">
<h5 class="text-white card-title"><i class="icon fa-2x fas fa-info pr-3"></i><span class="font-size-xlg">NOTE</span></h5>
<span class="w-100 pb-0">
{!! file_get_contents('login-note.html') !!}
</span>
</div>
@endif
<div class="modal-dialog w-100 mx-auto">
<div class="modal-content">
<form class="needs-validation" novalidate method="post">
{{ csrf_field() }}
<div class="modal-body">
<div class="h5 modal-title text-center">
<h4 class="mt-2">
<div class="app-logo mx-auto mb-3"><img class="w-75" src="{{ url('img/logo-h-lg.png') }}"></div>
<small>@lang('Sign in to <strong>:server</strong>',['server'=>'Foo'])</small>
</h4>
</div>
<div class="form-row">
<div class="col-md-12 mt-3">
<label class="mb-1">Email</label>
<input name="email" id="user" placeholder="" type="email" class="form-control" required="">
<div class="invalid-feedback">
@lang('Please enter your email')
</div>
</div>
<div class="col-md-12 mt-2">
<label class="mb-1">@lang('Password')</label>
<input name="password" id="password" placeholder="" type="password" class="form-control" required>
<div class="invalid-feedback">
@lang('Please enter your password')
</div>
</div>
</div>
</div>
<div class="modal-footer">
@if (count($errors) > 0)
<div class="alert alert-danger w-100">
<strong>Whoops!</strong> Something went wrong?<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="float-right">
<button class="btn btn-primary btn-lg">Login</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('page-scripts')
<style>
label {
text-transform: uppercase;
letter-spacing: 0.05em;
font-size: 85%;
font-weight: bold;
}
table.table tr:last-child {
border-bottom: 1px solid #e9ecef;
}
</style>
<script>
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function () {
'use strict';
window.addEventListener('load',function () {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function (form) {
form.addEventListener('submit', function (event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
})();
</script>
@append

View File

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html>
@section('htmlheader')
@include('architect::layouts.partials.htmlheader')
@show
<body>
<div class="app-container app-theme-white body-tabs-shadow fixed-sidebar">
@include('architect::layouts.partials.topmenu')
@includeIf('architect::layouts.partials.controlsidebar')
<div class="app-main">
@include('architect::layouts.partials.sidebarmenu')
<div class="app-main__outer">
<div class="app-main__inner">
<div class="main-content">
@if (trim($__env->yieldContent('page_title')))
@include('architect::layouts.partials.contentheader')
@endif
<!-- Main content -->
<div class="row">
<div class="col-12">
<!-- Your Page Content Here -->
@yield('main-content')
</div>
</div>
</div>
</div>
@include('architect::layouts.partials.contentfooter')
</div>
</div>
</div>
@section('scripts')
@include('architect::layouts.partials.scripts')
@yield('page-scripts')
@show
</body>
</html>

View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
@section('htmlheader')
@include('architect::layouts.partials.htmlheader')
@show
<body class="hold-transition login-page">
<div id="app">
@yield('content')
</div>
@section('scripts')
@include('architect::auth.partials.scripts')
@yield('page-scripts')
@show
</body>
</html>

View File

@ -0,0 +1,29 @@
<div class="app-wrapper-footer">
<div class="app-footer">
<div class="app-footer__inner">
<div class="app-footer-left">
<ul class="nav">
{{--
<li class="nav-item">
<a href="javascript:void(0);" class="nav-link">Footer Link</a>
</li>
--}}
</ul>
</div>
<div class="app-footer-right">
<ul class="nav">
{{--
<li class="nav-item">
<a href="javascript:void(0);" class="nav-link">
<div class="badge badge-success mr-1 ml-0">
<small>NEW</small>
</div>
Footer Link
</a>
</li>
--}}
</ul>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,49 @@
<div class="app-page-title">
<div class="page-title-wrapper">
<div class="page-title-heading">
@if (trim($__env->yieldContent('page_icon')))
<div class="page-title-icon f32">
<i class="@yield('page_icon','')"></i>
</div>
@endif
<div>
@yield('page_title','Page Title')
<div class="page-title-subheading">
@yield('page_subtitle','')
</div>
</div>
</div>
@isset($page_actions)
<div class="page-title-actions">
{{--
<button type="button" data-toggle="tooltip" title="Example Tooltip" data-placement="bottom" class="btn-shadow mr-3 btn btn-dark">
<i class="fa fa-star"></i>
</button>
--}}
<div class="d-inline-block dropdown">
<button type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="btn-shadow dropdown-toggle btn btn-info">
<span class="btn-icon-wrapper pr-2 opacity-7">
<i class="fa fa-business-time fa-w-20"></i>
</span>
Item Menu
</button>
<div tabindex="-1" role="menu" aria-hidden="true" class="dropdown-menu dropdown-menu-right">
<ul class="nav flex-column">
{{--
<li class="nav-item">
<a href="javascript:void(0);" class="nav-link">
<i class="nav-link-icon lnr-inbox"></i>
<span>Inbox</span>
<div class="ml-auto badge badge-pill badge-secondary">86</div>
</a>
</li>
--}}
</ul>
</div>
</div>
</div>
@endif
</div>
</div>

View File

@ -0,0 +1,195 @@
<div class="ui-theme-settings">
<button type="button" id="TooltipDemo" class="btn-open-options btn btn-warning">
<i class="fas fa-cog fa-w-16 fa-spin fa-2x"></i>
</button>
<div class="theme-settings__inner">
<div class="scrollbar-container">
<div class="theme-settings__options-wrapper">
<h3 class="themeoptions-heading">Layout Options</h3>
<div class="p-3">
<ul class="list-group">
<li class="list-group-item">
<div class="widget-content p-0">
<div class="widget-content-wrapper">
<div class="widget-content-left mr-3">
<div class="switch has-switch switch-container-class" data-class="fixed-header">
<div class="switch-animate switch-on">
<input type="checkbox" checked data-toggle="toggle" data-onstyle="success">
</div>
</div>
</div>
<div class="widget-content-left">
<div class="widget-heading">Fixed Header</div>
<div class="widget-subheading">Makes the header top fixed, always visible!</div>
</div>
</div>
</div>
</li>
<li class="list-group-item">
<div class="widget-content p-0">
<div class="widget-content-wrapper">
<div class="widget-content-left mr-3">
<div class="switch has-switch switch-container-class" data-class="fixed-sidebar">
<div class="switch-animate switch-on">
<input type="checkbox" checked data-toggle="toggle" data-onstyle="success">
</div>
</div>
</div>
<div class="widget-content-left">
<div class="widget-heading">Fixed Sidebar</div>
<div class="widget-subheading">Makes the sidebar left fixed, always visible!</div>
</div>
</div>
</div>
</li>
<li class="list-group-item">
<div class="widget-content p-0">
<div class="widget-content-wrapper">
<div class="widget-content-left mr-3">
<div class="switch has-switch switch-container-class" data-class="fixed-footer">
<div class="switch-animate switch-off">
<input type="checkbox" data-toggle="toggle" data-onstyle="success">
</div>
</div>
</div>
<div class="widget-content-left">
<div class="widget-heading">Fixed Footer</div>
<div class="widget-subheading">Makes the app footer bottom fixed, always visible!</div>
</div>
</div>
</div>
</li>
</ul>
</div>
<h3 class="themeoptions-heading">
<div>Header Options</div>
<button type="button" class="btn-pill btn-shadow btn-wide ml-auto btn btn-focus btn-sm switch-header-cs-class" data-class="">
Restore Default
</button>
</h3>
<div class="p-3">
<ul class="list-group">
<li class="list-group-item">
<h5 class="pb-2">Choose Color Scheme</h5>
<div class="theme-settings-swatches">
<div class="swatch-holder bg-primary switch-header-cs-class" data-class="bg-primary header-text-light"></div>
<div class="swatch-holder bg-secondary switch-header-cs-class" data-class="bg-secondary header-text-light"></div>
<div class="swatch-holder bg-success switch-header-cs-class" data-class="bg-success header-text-dark"></div>
<div class="swatch-holder bg-info switch-header-cs-class" data-class="bg-info header-text-dark"></div>
<div class="swatch-holder bg-warning switch-header-cs-class" data-class="bg-warning header-text-dark"></div>
<div class="swatch-holder bg-danger switch-header-cs-class" data-class="bg-danger header-text-light"></div>
<div class="swatch-holder bg-light switch-header-cs-class" data-class="bg-light header-text-dark"></div>
<div class="swatch-holder bg-dark switch-header-cs-class" data-class="bg-dark header-text-light"></div>
<div class="swatch-holder bg-focus switch-header-cs-class" data-class="bg-focus header-text-light"></div>
<div class="swatch-holder bg-alternate switch-header-cs-class" data-class="bg-alternate header-text-light"></div>
<div class="divider"></div>
<div class="swatch-holder bg-vicious-stance switch-header-cs-class" data-class="bg-vicious-stance header-text-light"></div>
<div class="swatch-holder bg-midnight-bloom switch-header-cs-class" data-class="bg-midnight-bloom header-text-light"></div>
<div class="swatch-holder bg-night-sky switch-header-cs-class" data-class="bg-night-sky header-text-light"></div>
<div class="swatch-holder bg-slick-carbon switch-header-cs-class" data-class="bg-slick-carbon header-text-light"></div>
<div class="swatch-holder bg-asteroid switch-header-cs-class" data-class="bg-asteroid header-text-light"></div>
<div class="swatch-holder bg-royal switch-header-cs-class" data-class="bg-royal header-text-light"></div>
<div class="swatch-holder bg-warm-flame switch-header-cs-class" data-class="bg-warm-flame header-text-dark"></div>
<div class="swatch-holder bg-night-fade switch-header-cs-class" data-class="bg-night-fade header-text-dark"></div>
<div class="swatch-holder bg-sunny-morning switch-header-cs-class" data-class="bg-sunny-morning header-text-dark"></div>
<div class="swatch-holder bg-tempting-azure switch-header-cs-class" data-class="bg-tempting-azure header-text-dark"></div>
<div class="swatch-holder bg-amy-crisp switch-header-cs-class" data-class="bg-amy-crisp header-text-dark"></div>
<div class="swatch-holder bg-heavy-rain switch-header-cs-class" data-class="bg-heavy-rain header-text-dark"></div>
<div class="swatch-holder bg-mean-fruit switch-header-cs-class" data-class="bg-mean-fruit header-text-dark"></div>
<div class="swatch-holder bg-malibu-beach switch-header-cs-class" data-class="bg-malibu-beach header-text-light"></div>
<div class="swatch-holder bg-deep-blue switch-header-cs-class" data-class="bg-deep-blue header-text-dark"></div>
<div class="swatch-holder bg-ripe-malin switch-header-cs-class" data-class="bg-ripe-malin header-text-light"></div>
<div class="swatch-holder bg-arielle-smile switch-header-cs-class" data-class="bg-arielle-smile header-text-light"></div>
<div class="swatch-holder bg-plum-plate switch-header-cs-class" data-class="bg-plum-plate header-text-light"></div>
<div class="swatch-holder bg-happy-fisher switch-header-cs-class" data-class="bg-happy-fisher header-text-dark"></div>
<div class="swatch-holder bg-happy-itmeo switch-header-cs-class" data-class="bg-happy-itmeo header-text-light"></div>
<div class="swatch-holder bg-mixed-hopes switch-header-cs-class" data-class="bg-mixed-hopes header-text-light"></div>
<div class="swatch-holder bg-strong-bliss switch-header-cs-class" data-class="bg-strong-bliss header-text-light"></div>
<div class="swatch-holder bg-grow-early switch-header-cs-class" data-class="bg-grow-early header-text-light"></div>
<div class="swatch-holder bg-love-kiss switch-header-cs-class" data-class="bg-love-kiss header-text-light"></div>
<div class="swatch-holder bg-premium-dark switch-header-cs-class" data-class="bg-premium-dark header-text-light"></div>
<div class="swatch-holder bg-happy-green switch-header-cs-class" data-class="bg-happy-green header-text-light"></div>
</div>
</li>
</ul>
</div>
<h3 class="themeoptions-heading">
<div>Sidebar Options</div>
<button type="button" class="btn-pill btn-shadow btn-wide ml-auto btn btn-focus btn-sm switch-sidebar-cs-class" data-class="">
Restore Default
</button>
</h3>
<div class="p-3">
<ul class="list-group">
<li class="list-group-item">
<h5 class="pb-2">Choose Color Scheme
</h5>
<div class="theme-settings-swatches">
<div class="swatch-holder bg-primary switch-sidebar-cs-class" data-class="bg-primary sidebar-text-light"></div>
<div class="swatch-holder bg-secondary switch-sidebar-cs-class" data-class="bg-secondary sidebar-text-light"></div>
<div class="swatch-holder bg-success switch-sidebar-cs-class" data-class="bg-success sidebar-text-dark"></div>
<div class="swatch-holder bg-info switch-sidebar-cs-class" data-class="bg-info sidebar-text-dark"></div>
<div class="swatch-holder bg-warning switch-sidebar-cs-class" data-class="bg-warning sidebar-text-dark"></div>
<div class="swatch-holder bg-danger switch-sidebar-cs-class" data-class="bg-danger sidebar-text-light"></div>
<div class="swatch-holder bg-light switch-sidebar-cs-class" data-class="bg-light sidebar-text-dark"></div>
<div class="swatch-holder bg-dark switch-sidebar-cs-class" data-class="bg-dark sidebar-text-light"></div>
<div class="swatch-holder bg-focus switch-sidebar-cs-class" data-class="bg-focus sidebar-text-light"></div>
<div class="swatch-holder bg-alternate switch-sidebar-cs-class" data-class="bg-alternate sidebar-text-light"></div>
<div class="divider"></div>
<div class="swatch-holder bg-vicious-stance switch-sidebar-cs-class" data-class="bg-vicious-stance sidebar-text-light"></div>
<div class="swatch-holder bg-midnight-bloom switch-sidebar-cs-class" data-class="bg-midnight-bloom sidebar-text-light"></div>
<div class="swatch-holder bg-night-sky switch-sidebar-cs-class" data-class="bg-night-sky sidebar-text-light"></div>
<div class="swatch-holder bg-slick-carbon switch-sidebar-cs-class" data-class="bg-slick-carbon sidebar-text-light"></div>
<div class="swatch-holder bg-asteroid switch-sidebar-cs-class" data-class="bg-asteroid sidebar-text-light"></div>
<div class="swatch-holder bg-royal switch-sidebar-cs-class" data-class="bg-royal sidebar-text-light"></div>
<div class="swatch-holder bg-warm-flame switch-sidebar-cs-class" data-class="bg-warm-flame sidebar-text-dark"></div>
<div class="swatch-holder bg-night-fade switch-sidebar-cs-class" data-class="bg-night-fade sidebar-text-dark"></div>
<div class="swatch-holder bg-sunny-morning switch-sidebar-cs-class" data-class="bg-sunny-morning sidebar-text-dark"></div>
<div class="swatch-holder bg-tempting-azure switch-sidebar-cs-class" data-class="bg-tempting-azure sidebar-text-dark"></div>
<div class="swatch-holder bg-amy-crisp switch-sidebar-cs-class" data-class="bg-amy-crisp sidebar-text-dark"></div>
<div class="swatch-holder bg-heavy-rain switch-sidebar-cs-class" data-class="bg-heavy-rain sidebar-text-dark"></div>
<div class="swatch-holder bg-mean-fruit switch-sidebar-cs-class" data-class="bg-mean-fruit sidebar-text-dark"></div>
<div class="swatch-holder bg-malibu-beach switch-sidebar-cs-class" data-class="bg-malibu-beach sidebar-text-light"></div>
<div class="swatch-holder bg-deep-blue switch-sidebar-cs-class" data-class="bg-deep-blue sidebar-text-dark"></div>
<div class="swatch-holder bg-ripe-malin switch-sidebar-cs-class" data-class="bg-ripe-malin sidebar-text-light"></div>
<div class="swatch-holder bg-arielle-smile switch-sidebar-cs-class" data-class="bg-arielle-smile sidebar-text-light"></div>
<div class="swatch-holder bg-plum-plate switch-sidebar-cs-class" data-class="bg-plum-plate sidebar-text-light"></div>
<div class="swatch-holder bg-happy-fisher switch-sidebar-cs-class" data-class="bg-happy-fisher sidebar-text-dark"></div>
<div class="swatch-holder bg-happy-itmeo switch-sidebar-cs-class" data-class="bg-happy-itmeo sidebar-text-light"></div>
<div class="swatch-holder bg-mixed-hopes switch-sidebar-cs-class" data-class="bg-mixed-hopes sidebar-text-light"></div>
<div class="swatch-holder bg-strong-bliss switch-sidebar-cs-class" data-class="bg-strong-bliss sidebar-text-light"></div>
<div class="swatch-holder bg-grow-early switch-sidebar-cs-class" data-class="bg-grow-early sidebar-text-light"></div>
<div class="swatch-holder bg-love-kiss switch-sidebar-cs-class" data-class="bg-love-kiss sidebar-text-light"></div>
<div class="swatch-holder bg-premium-dark switch-sidebar-cs-class" data-class="bg-premium-dark sidebar-text-light"></div>
<div class="swatch-holder bg-happy-green switch-sidebar-cs-class" data-class="bg-happy-green sidebar-text-light"></div>
</div>
</li>
</ul>
</div>
<h3 class="themeoptions-heading">
<div>Main Content Options</div>
<button type="button" class="btn-pill btn-shadow btn-wide ml-auto active btn btn-focus btn-sm">Restore Default
</button>
</h3>
<div class="p-3">
<ul class="list-group">
<li class="list-group-item">
<h5 class="pb-2">Page Section Tabs
</h5>
<div class="theme-settings-swatches">
<div role="group" class="mt-2 btn-group">
<button type="button" class="btn-wide btn-shadow btn-primary btn btn-secondary switch-theme-class" data-class="body-tabs-line">
Line
</button>
<button type="button" class="btn-wide btn-shadow btn-primary active btn btn-secondary switch-theme-class" data-class="body-tabs-shadow">
Shadow
</button>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,50 @@
<head>
<!--
=========================================================
* ArchitectUI HTML Theme Dashboard - v1.0.0
=========================================================
* Product Page: https://dashboardpack.com
* Copyright 2019 DashboardPack (https://dashboardpack.com)
* Licensed under MIT (https://github.com/DashboardPack/architectui-html-theme-free/blob/master/LICENSE)
=========================================================
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Language" content="en">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>{{ config('app.name') }} - @yield('htmlheader_title','Your title here')</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no" />
<meta name="description" content="phpLDAPadmin - A web interface into LDAP data management">
<meta name="msapplication-tap-highlight" content="no">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
{{--
<!-- Font Awesome Icons -->
<link rel="stylesheet" href="//use.fontawesome.com/releases/v5.13.0/css/all.css">
--}}
<!-- Google Font: Source Sans Pro -->
<link href="https://fonts.googleapis.com/css2?family={{ str_replace(' ','+',config('app.font') ?: 'IBM Plex Sans') }}:wght@300&display=swap" rel="stylesheet">
@if(file_exists('css/print.css'))
<!-- Printing Modifications -->
<link rel="stylesheet" href="{{ asset('/css/print.css') }}">
@endif
<!-- Theme style -->
<link rel="stylesheet" href="{{ asset('/css/architect.min.css') }}">
@if(file_exists('css/fixes.css'))
<!-- CSS Fixes -->
<link rel="stylesheet" href="{{ asset('/css/fixes.css') }}">
@endif
@if(file_exists('css/custom.css'))
<!-- Custom CSS -->
<link rel="stylesheet" href="{{ asset('/css/custom.css') }}">
@endif
</head>

View File

@ -0,0 +1,96 @@
{{--
<script src="{{ asset('/js/app.js') }}" type="text/javascript"></script>
--}}
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<!-- Architect -->
<script src="{{ asset('/js/architect.min.js') }}"></script>
<script type="text/javascript">
// Our CSRF token to each interaction
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ArchitectSidebarTweak = {};
$.ArchitectSidebarTweak.Open = true;
$.ArchitectSidebarTweak.ResizeDelay = 1000;
$.ArchitectSidebarTweak.options = {
EnableRemember: true,
//Removes the transition after page reload.
NoTransitionAfterReload: false
};
// Work out our timezone.
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
/**
* Open and close the sidebar
* @param state
* @param addclass
*/
function sidebaropenclose(state,addclass) {
// Dont do anything if the state hasnt changed.
if (state == $.ArchitectSidebarTweak.Open) {
return;
}
$.ArchitectSidebarTweak.Open = state;
if (addclass !== 'undefined')
if (state)
$(".app-container")
.removeClass('closed-sidebar');
else
$(".app-container")
.addClass('closed-sidebar');
$(this).delay($.ArchitectSidebarTweak.ResizeDelay).queue(function() {
window.dispatchEvent(new Event('resize'));
$(this).dequeue();
});
}
$(function () {
"use strict";
// @todo This event were for AdminLTE.
$("body").on("collapsed.lte.pushmenu", function(){
if($.ArchitectSidebarTweak.options.EnableRemember) {
document.cookie = "toggleState=closed;path=/";
$("body").queue(sidebaropenclose(false));
}
});
$("body").on("shown.lte.pushmenu", function(){
if($.ArchitectSidebarTweak.options.EnableRemember){
document.cookie = "toggleState=opened;path=/";
$("body").queue(sidebaropenclose(true));
}
});
if($.ArchitectSidebarTweak.options.EnableRemember){
var re = new RegExp('toggleState' + "=([^;]+)");
var value = re.exec(document.cookie);
var toggleState = (value != null) ? unescape(value[1]) : null;
if(toggleState == 'closed'){
if($.ArchitectSidebarTweak.options.NoTransitionAfterReload){
$("body").addClass('sidebar-collapse hold-transition').delay(100).queue(function(){
$(this).removeClass('hold-transition');
});
}else{
$("body").queue(sidebaropenclose(false,true));
}
}
}
});
</script>
@if(file_exists('js/custom.js'))
<!-- Any Custom JS -->
<script src="{{ asset('js/custom.js') }}"></script>
@endif

View File

@ -0,0 +1,85 @@
<div class="app-sidebar sidebar-shadow">
<div class="app-header__logo">
<div class="logo-src"></div>
<div class="header__pane ml-auto">
<div>
<button type="button" class="hamburger close-sidebar-btn hamburger--elastic" data-class="closed-sidebar">
<span class="hamburger-box">
<span class="hamburger-inner"></span>
</span>
</button>
</div>
</div>
</div>
<div class="app-header__mobile-menu">
<div>
<button type="button" class="hamburger hamburger--elastic mobile-toggle-nav">
<span class="hamburger-box">
<span class="hamburger-inner"></span>
</span>
</button>
</div>
</div>
<div class="app-header__menu">
<span>
<button type="button" class="btn-icon btn-icon-only btn btn-primary btn-sm mobile-toggle-header-nav">
<span class="btn-icon-wrapper">
<i class="fas fa-ellipsis-v fa-w-6"></i>
</span>
</button>
</span>
</div>
<div class="scrollbar-sidebar scrollbar-container">
<div class="app-sidebar__inner">
<ul class="vertical-nav-menu">
<li class="app-sidebar__heading">Header</li>
<li>
<a href="index.html" class="mm-active">
<i class="metismenu-icon pe-7s-rocket"></i> Example 1
</a>
</li>
{{--
<li class="app-sidebar__heading">UI Components</li>
<li>
<a href="#">
<i class="metismenu-icon pe-7s-diamond"></i> Elements
<i class="metismenu-state-icon pe-7s-angle-down caret-left"></i>
</a>
<ul>
<li>
<a href="elements-buttons-standard.html">
<i class="metismenu-icon"></i> Buttons
</a>
</li>
</ul>
</li>
<li>
<a href="#">
<i class="metismenu-icon pe-7s-car"></i> Components
<i class="metismenu-state-icon pe-7s-angle-down caret-left"></i>
</a>
<ul>
<li>
<a href="components-tabs.html">
<i class="metismenu-icon"></i> Tabs
</a>
</li>
</ul>
</li>
<li>
<a href="tables-regular.html">
<i class="metismenu-icon pe-7s-display2"></i> Tables
</a>
</li>
<li class="app-sidebar__heading">Widgets</li>
<li>
<a href="dashboard-boxes.html">
<i class="metismenu-icon pe-7s-display2"></i> Dashboard Boxes
</a>
</li>
--}}
</ul>
</div>
</div>
</div>

View File

@ -0,0 +1,91 @@
<div class="app-header header-shadow bg-dark header-text-light">
<div class="app-header__logo">
<div class="logo-src"></div>
<div class="header__pane ml-auto">
<div>
<button type="button" class="hamburger close-sidebar-btn hamburger--elastic" data-class="closed-sidebar">
<span class="hamburger-box">
<span class="hamburger-inner"></span>
</span>
</button>
</div>
</div>
</div>
<div class="app-header__mobile-menu">
<div>
<button type="button" class="hamburger hamburger--elastic mobile-toggle-nav">
<span class="hamburger-box">
<span class="hamburger-inner"></span>
</span>
</button>
</div>
</div>
<div class="app-header__menu">
<span>
<button type="button" class="btn-icon btn-icon-only btn btn-primary btn-sm mobile-toggle-header-nav">
<span class="btn-icon-wrapper">
<i class="fas fa-ellipsis-v fa-w-6"></i>
</span>
</button>
</span>
</div>
<div class="app-header__content">
<div class="app-header-left">
<div class="search-wrapper">
<div class="input-holder">
<input type="text" class="search-input" placeholder="Type to search">
<button class="search-icon"><span></span></button>
</div>
<button class="close"></button>
</div>
<ul class="header-menu nav">
{{--
<li class="nav-item">
<a href="javascript:void(0);" class="nav-link">
<i class="nav-link-icon fas fa-database"></i> Link
</a>
</li>
--}}
</ul>
</div>
<div class="app-header-right">
<div class="header-btn-lg pr-0">
<div class="widget-content p-0">
<div class="widget-content-wrapper">
<div class="widget-content-left">
<div class="btn-group">
<a data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="p-0 btn">
<img width="42" class="rounded-circle" src="assets/images/avatars/1.jpg" alt="">
<i class="fas fa-angle-down ml-2 opacity-8"></i>
</a>
<div tabindex="-1" role="menu" aria-hidden="true" class="dropdown-menu dropdown-menu-right">
<button type="button" tabindex="0" class="dropdown-item">User Account</button>
<button type="button" tabindex="0" class="dropdown-item">Settings</button>
<h6 tabindex="-1" class="dropdown-header">Header</h6>
<button type="button" tabindex="0" class="dropdown-item">Actions</button>
<div tabindex="-1" class="dropdown-divider"></div>
<button type="button" tabindex="0" class="dropdown-item">Dividers</button>
</div>
</div>
</div>
<div class="widget-content-left ml-3 header-user-info">
<div class="widget-heading">
{{ $user->name ?? 'John Smith' }}
</div>
<div class="widget-subheading">
{{ $user->title ?? 'Primary Developer' }}
</div>
</div>
<div class="widget-content-right header-user-info ml-3">
<button type="button" class="btn-shadow p-1 btn btn-primary btn-sm show-toastr-example">
<i class="fas text-white fa-calendar pr-1 pl-1"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,650 @@
/* Reset rounded corners for all elements */
div,
input,
select,
textarea,
span,
img,
table,
label,
td,
th,
p,
a,
button,
ul,
code,
pre,
li {
-webkit-border-radius: 0 !important;
-moz-border-radius: 0 !important;
border-radius: 0 !important;
}
a,
a:focus,
a:hover,
a:active {
outline: 0;
}
/*Fix for Firefox*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
}
/* Bootstrap buttons */
.btn-primary {
color: #fff;
background-color: #428bca;
border: none;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active {
color: #fff;
background-color: #3379b5;
border-color: #2a6496;
}
.open .btn-primary.dropdown-toggle {
color: #fff;
background-color: #3379b5;
border-color: #2a6496;
}
.btn-primary:active,
.btn-primary.active {
background-image: none;
background-color: #2d6ca2;
}
.btn-primary:active:hover,
.btn-primary.active:hover {
background-color: #3071a9;
}
.open .btn-primary.dropdown-toggle {
background-image: none;
}
.btn-primary.disabled,
.btn-primary.disabled:hover,
.btn-primary.disabled:focus,
.btn-primary.disabled:active,
.btn-primary.disabled.active,
.btn-primary[disabled],
.btn-primary[disabled]:hover,
.btn-primary[disabled]:focus,
.btn-primary[disabled]:active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-primary:hover,
fieldset[disabled] .btn-primary:focus,
fieldset[disabled] .btn-primary:active,
fieldset[disabled] .btn-primary.active {
background-color: #428bca;
border-color: #357ebd;
}
.btn-primary .badge {
color: #428bca;
background-color: #fff;
}
.btn-success {
color: #fff;
background-color: #45B6AF;
border-color: #3ea49d;
}
.btn-success:hover,
.btn-success:focus,
.btn-success:active,
.btn-success.active {
color: #fff;
background-color: #3b9c96;
border-color: #307f7a;
}
.open .btn-success.dropdown-toggle {
color: #fff;
background-color: #3b9c96;
border-color: #307f7a;
}
.btn-success:active,
.btn-success.active {
background-image: none;
background-color: #348a84;
}
.btn-success:active:hover,
.btn-success.active:hover {
background-color: #37918b;
}
.open .btn-success.dropdown-toggle {
background-image: none;
}
.btn-success.disabled,
.btn-success.disabled:hover,
.btn-success.disabled:focus,
.btn-success.disabled:active,
.btn-success.disabled.active,
.btn-success[disabled],
.btn-success[disabled]:hover,
.btn-success[disabled]:focus,
.btn-success[disabled]:active,
.btn-success[disabled].active,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-success:hover,
fieldset[disabled] .btn-success:focus,
fieldset[disabled] .btn-success:active,
fieldset[disabled] .btn-success.active {
background-color: #45B6AF;
border-color: #3ea49d;
}
.btn-success .badge {
color: #45B6AF;
background-color: #fff;
}
.btn-info {
color: #fff;
background-color: #89C4F4;
border-color: #72b8f2;
}
.btn-info:hover,
.btn-info:focus,
.btn-info:active,
.btn-info.active {
color: #fff;
background-color: #68b4f1;
border-color: #43a1ed;
}
.open .btn-info.dropdown-toggle {
color: #fff;
background-color: #68b4f1;
border-color: #43a1ed;
}
.btn-info:active,
.btn-info.active {
background-image: none;
background-color: #51a8ef;
}
.btn-info:active:hover,
.btn-info.active:hover {
background-color: #5aadf0;
}
.open .btn-info.dropdown-toggle {
background-image: none;
}
.btn-info.disabled,
.btn-info.disabled:hover,
.btn-info.disabled:focus,
.btn-info.disabled:active,
.btn-info.disabled.active,
.btn-info[disabled],
.btn-info[disabled]:hover,
.btn-info[disabled]:focus,
.btn-info[disabled]:active,
.btn-info[disabled].active,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-info:hover,
fieldset[disabled] .btn-info:focus,
fieldset[disabled] .btn-info:active,
fieldset[disabled] .btn-info.active {
background-color: #89C4F4;
border-color: #72b8f2;
}
.btn-info .badge {
color: #89C4F4;
background-color: #fff;
}
.btn-warning {
color: #fff;
background-color: #dfba49;
border-color: #dbb233;
}
.btn-warning:hover,
.btn-warning:focus,
.btn-warning:active,
.btn-warning.active {
color: #fff;
background-color: #daae2b;
border-color: #bb9521;
}
.open .btn-warning.dropdown-toggle {
color: #fff;
background-color: #daae2b;
border-color: #bb9521;
}
.btn-warning:active,
.btn-warning.active {
background-image: none;
background-color: #c89f23;
}
.btn-warning:active:hover,
.btn-warning.active:hover {
background-color: #d0a625;
}
.open .btn-warning.dropdown-toggle {
background-image: none;
}
.btn-warning.disabled,
.btn-warning.disabled:hover,
.btn-warning.disabled:focus,
.btn-warning.disabled:active,
.btn-warning.disabled.active,
.btn-warning[disabled],
.btn-warning[disabled]:hover,
.btn-warning[disabled]:focus,
.btn-warning[disabled]:active,
.btn-warning[disabled].active,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-warning:hover,
fieldset[disabled] .btn-warning:focus,
fieldset[disabled] .btn-warning:active,
fieldset[disabled] .btn-warning.active {
background-color: #dfba49;
border-color: #dbb233;
}
.btn-warning .badge {
color: #dfba49;
background-color: #fff;
}
.btn-danger {
color: #fff;
background-color: #F3565D;
border-color: #f13e46;
}
.btn-danger:hover,
.btn-danger:focus,
.btn-danger:active,
.btn-danger.active {
color: #fff;
background-color: #f1353d;
border-color: #ec111b;
}
.open .btn-danger.dropdown-toggle {
color: #fff;
background-color: #f1353d;
border-color: #ec111b;
}
.btn-danger:active,
.btn-danger.active {
background-image: none;
background-color: #ef1d26;
}
.btn-danger:active:hover,
.btn-danger.active:hover {
background-color: #f0262f;
}
.open .btn-danger.dropdown-toggle {
background-image: none;
}
.btn-danger.disabled,
.btn-danger.disabled:hover,
.btn-danger.disabled:focus,
.btn-danger.disabled:active,
.btn-danger.disabled.active,
.btn-danger[disabled],
.btn-danger[disabled]:hover,
.btn-danger[disabled]:focus,
.btn-danger[disabled]:active,
.btn-danger[disabled].active,
fieldset[disabled] .btn-danger,
fieldset[disabled] .btn-danger:hover,
fieldset[disabled] .btn-danger:focus,
fieldset[disabled] .btn-danger:active,
fieldset[disabled] .btn-danger.active {
background-color: #F3565D;
border-color: #f13e46;
}
.btn-danger .badge {
color: #F3565D;
background-color: #fff;
}
/***
Social Icons
***/
.social-icons {
padding: 0;
margin: 0;
}
.social-icons:before,
.social-icons:after {
content: " ";
display: table;
}
.social-icons:after {
clear: both;
}
.social-icons li {
float: left;
display: inline;
list-style: none;
margin-right: 5px;
margin-bottom: 5px;
text-indent: -9999px;
}
.social-icons li > a {
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
-ms-border-radius: 2px;
-o-border-radius: 2px;
border-radius: 2px;
width: 28px;
height: 28px;
display: block;
background-position: 0 0;
background-repeat: no-repeat;
transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-webkit-transition: all 0.3s ease-in-out;
}
.social-icons li:hover > a {
background-position: 0 -38px;
}
.social-icons li .amazon {
background: url(../../pages/img/social/amazon.png) no-repeat;
}
.social-icons li .behance {
background: url(../../pages/img/social/behance.png) no-repeat;
}
.social-icons li .blogger {
background: url(../../pages/img/social/blogger.png) no-repeat;
}
.social-icons li .deviantart {
background: url(../../pages/img/social/deviantart.png) no-repeat;
}
.social-icons li .dribbble {
background: url(../../pages/img/social/dribbble.png) no-repeat;
}
.social-icons li .dropbox {
background: url(../../pages/img/social/dropbox.png) no-repeat;
}
.social-icons li .evernote {
background: url(../../pages/img/social/evernote.png) no-repeat;
}
.social-icons li .facebook {
background: url(../../pages/img/social/facebook.png) no-repeat;
}
.social-icons li .forrst {
background: url(../../pages/img/social/forrst.png) no-repeat;
}
.social-icons li .github {
background: url(../../pages/img/social/github.png) no-repeat;
}
.social-icons li .googleplus {
background: url(../../pages/img/social/googleplus.png) no-repeat;
}
.social-icons li .jolicloud {
background: url(../../pages/img/social/jolicloud.png) no-repeat;
}
.social-icons li .last-fm {
background: url(../../pages/img/social/last-fm.png) no-repeat;
}
.social-icons li .linkedin {
background: url(../../pages/img/social/linkedin.png) no-repeat;
}
.social-icons li .picasa {
background: url(../../pages/img/social/picasa.png) no-repeat;
}
.social-icons li .pintrest {
background: url(../../pages/img/social/pintrest.png) no-repeat;
}
.social-icons li .rss {
background: url(../../pages/img/social/rss.png) no-repeat;
}
.social-icons li .skype {
background: url(../../pages/img/social/skype.png) no-repeat;
}
.social-icons li .spotify {
background: url(../../pages/img/social/spotify.png) no-repeat;
}
.social-icons li .stumbleupon {
background: url(../../pages/img/social/stumbleupon.png) no-repeat;
}
.social-icons li .tumblr {
background: url(../../pages/img/social/tumblr.png) no-repeat;
}
.social-icons li .twitter {
background: url(../../pages/img/social/twitter.png) no-repeat;
}
.social-icons li .vimeo {
background: url(../../pages/img/social/vimeo.png) no-repeat;
}
.social-icons li .wordpress {
background: url(../../pages/img/social/wordpress.png) no-repeat;
}
.social-icons li .xing {
background: url(../../pages/img/social/xing.png) no-repeat;
}
.social-icons li .yahoo {
background: url(../../pages/img/social/yahoo.png) no-repeat;
}
.social-icons li .youtube {
background: url(../../pages/img/social/youtube.png) no-repeat;
}
.social-icons li .vk {
background: url(../../pages/img/social/vk.png) no-repeat;
}
.social-icons li .instagram {
background: url(../../pages/img/social/instagram.png) no-repeat;
}
.social-icons li .reddit {
background: url(../../pages/img/social/reddit.png) no-repeat;
}
.social-icons li .aboutme {
background: url(../../pages/img/social/aboutme.png) no-repeat;
}
.social-icons li .flickr {
background: url(../../pages/img/social/flickr.png) no-repeat;
}
.social-icons li .foursquare {
background: url(../../pages/img/social/foursquare.png) no-repeat;
}
.social-icons li .gravatar {
background: url(../../pages/img/social/gravatar.png) no-repeat;
}
.social-icons li .klout {
background: url(../../pages/img/social/klout.png) no-repeat;
}
.social-icons li .myspace {
background: url(../../pages/img/social/myspace.png) no-repeat;
}
.social-icons li .quora {
background: url(../../pages/img/social/quora.png) no-repeat;
}
.social-icons.social-icons-color > li > a {
opacity: 0.7;
background-position: 0 -38px !important;
}
.social-icons.social-icons-color > li > a:hover {
opacity: 1;
}
.social-icons.social-icons-circle > li > a {
border-radius: 25px !important;
}
/***
Inline Social Icons
***/
.social-icon {
display: inline-block !important;
width: 28px;
height: 28px;
background-position: 0 0;
background-repeat: no-repeat;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
-ms-border-radius: 2px;
-o-border-radius: 2px;
border-radius: 2px;
transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-webkit-transition: all 0.3s ease-in-out;
}
.social-icon.social-icon-circle {
border-radius: 25px !important;
}
.social-icon.amazon {
background: url(../../pages/img/social/amazon.png) no-repeat;
}
.social-icon.behance {
background: url(../../pages/img/social/behance.png) no-repeat;
}
.social-icon.blogger {
background: url(../../pages/img/social/blogger.png) no-repeat;
}
.social-icon.deviantart {
background: url(../../pages/img/social/deviantart.png) no-repeat;
}
.social-icon.dribbble {
background: url(../../pages/img/social/dribbble.png) no-repeat;
}
.social-icon.dropbox {
background: url(../../pages/img/social/dropbox.png) no-repeat;
}
.social-icon.evernote {
background: url(../../pages/img/social/evernote.png) no-repeat;
}
.social-icon.facebook {
background: url(../../pages/img/social/facebook.png) no-repeat;
}
.social-icon.forrst {
background: url(../../pages/img/social/forrst.png) no-repeat;
}
.social-icon.github {
background: url(../../pages/img/social/github.png) no-repeat;
}
.social-icon.googleplus {
background: url(../../pages/img/social/googleplus.png) no-repeat;
}
.social-icon.jolicloud {
background: url(../../pages/img/social/jolicloud.png) no-repeat;
}
.social-icon.last-fm {
background: url(../../pages/img/social/last-fm.png) no-repeat;
}
.social-icon.linkedin {
background: url(../../pages/img/social/linkedin.png) no-repeat;
}
.social-icon.picasa {
background: url(../../pages/img/social/picasa.png) no-repeat;
}
.social-icon.pintrest {
background: url(../../pages/img/social/pintrest.png) no-repeat;
}
.social-icon.rss {
background: url(../../pages/img/social/rss.png) no-repeat;
}
.social-icon.skype {
background: url(../../pages/img/social/skype.png) no-repeat;
}
.social-icon.spotify {
background: url(../../pages/img/social/spotify.png) no-repeat;
}
.social-icon.stumbleupon {
background: url(../../pages/img/social/stumbleupon.png) no-repeat;
}
.social-icon.tumblr {
background: url(../../pages/img/social/tumblr.png) no-repeat;
}
.social-icon.twitter {
background: url(../../pages/img/social/twitter.png) no-repeat;
}
.social-icon.vimeo {
background: url(../../pages/img/social/vimeo.png) no-repeat;
}
.social-icon.wordpress {
background: url(../../pages/img/social/wordpress.png) no-repeat;
}
.social-icon.xing {
background: url(../../pages/img/social/xing.png) no-repeat;
}
.social-icon.yahoo {
background: url(../../pages/img/social/yahoo.png) no-repeat;
}
.social-icon.youtube {
background: url(../../pages/img/social/youtube.png) no-repeat;
}
.social-icon.vk {
background: url(../../pages/img/social/vk.png) no-repeat;
}
.social-icon.instagram {
background: url(../../pages/img/social/instagram.png) no-repeat;
}
.social-icon.reddit {
background: url(../../pages/img/social/reddit.png) no-repeat;
}
.social-icon.aboutme {
background: url(../../pages/img/social/aboutme.png) no-repeat;
}
.social-icon.flickr {
background: url(../../pages/img/social/flickr.png) no-repeat;
}
.social-icon.foursquare {
background: url(../../pages/img/social/foursquare.png) no-repeat;
}
.social-icon.gravatar {
background: url(../../pages/img/social/gravatar.png) no-repeat;
}
.social-icon.klout {
background: url(../../pages/img/social/klout.png) no-repeat;
}
.social-icon.myspace {
background: url(../../pages/img/social/myspace.png) no-repeat;
}
.social-icon.quora {
background: url(../../pages/img/social/quora.png) no-repeat;
}
.social-icon:hover {
background-position: 0 -38px;
}
.social-icon-color {
opacity: 0.7;
background-position: 0 -38px !important;
}
.social-icon-color:hover {
opacity: 1;
}

View File

@ -0,0 +1,805 @@
/* BEGIN max width 1200px */
@media (max-width: 1200px) {
.content-form-page .control-label {
padding-left: 30px;
padding-bottom: 5px;
}
.content-form-page .col-md-offset-4 {
margin-left: 15px;
}
.content-form-page .pull-right {
float: left !important;
}
.quote-v1 span {
font-size: 20px;
}
}
/* END max width 1200px */
/* BEGIN min width 1025px */
@media (min-width: 1025px) {
.header .header-navigation {
display: block !important;
}
}
/* END min width 1025px */
/* BEGIN min width 1025px max width 1205 */
@media (min-width: 1025px) and (max-width: 1205px) {
body.page-header-fixed {
padding-top: 121px !important; /* height of the header */
}
.header .header-navigation {
display: block !important;
clear: both;
margin-top: -10px;
float: left !important;
}
.reduce-header .header-navigation {
margin-top: -6px;
}
.header .header-navigation > ul > li {
margin-right: 27px;
}
.header .header-navigation > ul > li > a {
padding: 5px 0 18px;
}
.reduce-header .header-navigation > ul > li > a {
padding-bottom: 13px;
}
.header .header-navigation > ul > li.active > a, .header .header-navigation > ul > li > a:hover, .header .header-navigation > ul > li > a:focus, .header .header-navigation > ul > li.open > a, .header .header-navigation > ul > li.open > a:hover, .header .header-navigation > ul > li.open > a:focus {
background: none;
}
.header-navigation > ul > li.dropdown:hover > a:after {
margin-left: 10px;
}
.dropdown-fix-right .dropdown-menu {
left: 0;
right: auto;
}
.header .header-navigation li.menu-search {
top: 1px;
margin-left: -20px;
}
.ecommerce .header .header-navigation li.menu-search {
top: 2px;
}
.header .header-navigation li.menu-search span.sep {
top: 2px;
margin-right: 26px;
}
.header .header-navigation li.menu-search i {
top: -4px;
}
}
/* END min width 1025px max width 1205 */
/* BEGIN max width 1024px */
@media (max-width: 1024px) {
body.page-header-fixed {
padding-top: 107px !important; /* height of the header */
}
.header .mobi-toggler {
display: block;
}
.header .header-navigation {
float: none !important;
display: none;
clear: both;
background: #F9F9F9;
padding: 0 20px;
margin: 0 -20px 25px;
font-size: 16px;
}
.header .header-navigation li {
float: none;
padding: 0;
clear: both;
}
.header .header-navigation li > a,
.header .dropdown.open .dropdown-toggle,
.header .header-navigation li.open > a {
border-bottom: 1px solid #efefef !important;
padding: 8px 10px 9px;
margin: 0 -10px;
position: relative;
color: #666 !important;
background: none !important;
}
.ecommerce .header .header-navigation li > a,
.ecommerce .header .dropdown.open .dropdown-toggle,
.ecommerce .header .header-navigation li.open > a {
padding: 12px 10px 9px;
}
.header .header-navigation li > a:hover,
.header .header-navigation li.active > a,
.header .header-navigation li.open > a:hover {
border-bottom: 1px solid #efefef !important;
background: none !important;
color: #dd4632 !important;
text-decoration: none;
}
.header-navigation > ul > li.dropdown:hover > a:after {
border: none;
}
.header-navigation > ul > li > a > i.fa-angle-down {
display: block;
float: right;
margin: 3px 0 0;
}
/* dropdown menu */
.header-navigation .dropdown-menu,
.header-navigation > ul > li > .dropdown-menu {
position: static;
width: 100%;
margin: 0;
border: none;
box-shadow: none;
background: none;
margin-top: 0;
border-top: none;
z-index: 22;
}
.header-navigation .dropdown-menu li {
border: none !important;
margin-left: 20px;
}
.header-navigation .dropdown-menu li > a {
padding: 10px 10px 9px;
z-index: 999;
position: relative;
}
.header-navigation .dropdown-menu li > a > i {
display: none;
}
.header-navigation .dropdown-menu .dropdown-menu {
display: block;
}
.header-navigation .header-navigation-content {
border: none;
}
.dropdown-megamenu .header-navigation-content {
padding: 5px 0 0;
margin-left: -20px;
}
.dropdown-megamenu .header-navigation-content .row {
margin: 0;
}
.dropdown-megamenu .header-navigation-content .header-navigation-col {
padding: 0;
float: none;
width: 100%;
}
.dropdown-megamenu .header-navigation-content h4 {
font-size: 13px;
padding: 10px 10px 9px;
margin: 0 -10px 0 10px;
}
.header-navigation .dropdown-megamenu .header-navigation-content li > a {
padding: 10px 10px 9px;
}
.header-navigation-content-ext {
background: none;
}
.header-navigation-description {
height: auto !important;
background: none;
box-shadow: none;
padding: 0;
margin: 0 10px;
}
.header-navigation-content-ext .col-md-6,
.header-navigation-content-ext .col-md-3 {
float: none;
width: 100%;
}
.dropdown-megamenu .header-navigation-content-ext .col-md-3 h4 {
border-bottom: 1px solid #EFEFEF;
}
.header-navigation .dropdown-menu .header-navigation-content-ext li > a {
display: block;
}
.header-navigation-content-ext .col-md-3, .header-navigation-content-ext .col-md-6 {
padding: 0;
}
.header-navigation-content-ext .col-md-6 {
margin-left: 10px;
}
.header-navigation-content-ext .col-md-6 h4 {
margin-left: 0;
padding-left: 0;
}
.header .nav-brands {
margin: 15px 10px;
padding: 0;
width: 100%;
background: #fff;
}
.header .nav-brands ul {
border: 1px solid #F0F0F0;
padding: 10px;
}
.header .nav-brands li {
max-width: 50%;
display: inline-block;
border: none;
margin-left: 0
}
.header .nav-brands li a,
.header .nav-brands li a:hover {
border: none !important;
margin: 0 !important;
}
.nav-catalogue .dropdown-menu > li {
margin-left: 0;
}
.nav-catalogue .header-navigation-content {
padding: 20px 0 0;
}
.nav-catalogue .product-item {
margin-bottom: 20px;
}
.header-navigation li.menu-search,
.ecommerce .header-navigation li.menu-search {
top: 0;
padding: 20px 0 10px;
position: relative;
}
.header-navigation li.menu-search span.sep {
display: none;
}
.header-navigation .search-box {
position: relative;
right: auto;
left: 0;
}
.header-navigation .search-box:after {
right: auto;
left: 0;
}
.top-cart-block {
margin-top: 3px;
}
.page-header-fixed .header-navigation {
height: 300px;
overflow: auto;
}
}
/* END max width 1024px */
/* BEGIN max width 992px */
@media (max-width: 992px) {
.shop-index-carousel {
margin-left: 0;
margin-right: 10px;
}
.brands .container {
padding-right: 25px;
}
.sidebar-menu a:focus {
color: #333 !important;
text-decoration: none;
}
.sale-product___removed {
margin-bottom: 40px;
}
.new-arrivals___removed {
margin-left: 15px;
padding-left: 0;
}
.two-items-bottom-items {
margin-bottom: 40px;
}
.carousel img {
width: 100%;
}
/*.steps-block {
padding-bottom: 10px;
}
.steps-block-col {
border: 2px solid #FFF;
margin: 0 20px 20px 15px;
padding: 20px 20px 15px;
min-height: auto;
float: left;
}
.steps-block-col:last-child {
margin-right: 0;
}
.steps-block .steps-block-col div {
margin-left: 0;
margin-right: 0;
}
.steps-block h2 {
font-size: 25px;
}
.steps-block em {
text-transform: inherit;
}
.steps-block-col span,
.steps-block-col .fa {
display: none;
}
.steps-block-col:first-child em {
margin-left: 0;
}*/
.steps-block-col {
border: 2px solid #FFF;
margin: 0 25px 20px 15px;
padding: 20px 20px 15px;
min-height: auto;
float: none;
}
.steps-block-col:last-child {
margin-right: 25px;
margin-bottom: 0;
}
.steps-block .steps-block-col div {
margin-left: 0;
margin-right: 0;
}
.steps-block h2 {
font-size: 43px;
}
.steps-block em {
text-transform: uppercase;
}
.steps-block-col span {
display: none;
}
.steps-block-col .fa {
display: block;
}
.pre-footer-subscribe-box form {
width: 100%;
}
.sidebar-products img {
float: none;
margin-bottom: 5px;
width: 100%;
height: auto;
}
.sidebar-products h3,
.sidebar-products .price {
margin-left: 0;
}
.product-page-options .pull-left {
margin-bottom: 10px;
}
.product-quantity {
margin-bottom: 10px;
}
/*
if you want to hide buttons on mobile view, uncomment this block
.pi-img-wrapper div {
display: none !important;
}*/
.review .rateit {
width: 100%;
margin-bottom: 10px;
}
.list-view-sorting .pull-right {
margin-bottom: 10px;
}
.service-box p, .service-box .service-box-heading em, .service-box .service-box-heading span {
display: block;
text-align: center;
}
.service-box .service-box-heading em {
margin-bottom: 10px;
}
.quote-v1 {
text-align: center;
}
.quote-v1 .text-right {
text-align: center;
}
.recent-work .owl-carousel {
margin-left: -10px;
}
.our-clients .owl-carousel {
margin-left: -2px;
}
.recent-work .owl-carousel,
.our-clients .owl-carousel {
padding-top: 30px;
}
.recent-work .owl-buttons,
.our-clients .owl-buttons {
top: 0;
left: -3px;
}
.our-clients .owl-buttons {
left: -10px;
}
.testimonials-v1 {
padding-top: 40px;
}
.recent-work .recent-work-item .fa {
width: 36px;
height: 36px;
margin-top: -18px;
font-size: 14px;
padding: 12px;
}
.recent-news-inner {
padding: 10px 15px 0;
}
.ecommerce .pre-footer-subscribe-box h2, .corporate .pre-footer-subscribe-box h2 {
padding-top: 0;
}
.pre-footer .pre-footer-subscribe-box {
padding-bottom: 25px;
}
.ecommerce .pre-footer-subscribe-box form {
width: 100%;
}
.ecommerce .content-search h1 {
padding-top: 0;
margin-bottom: 3px;
}
.content-search form {
margin: 0 0 6px;
}
}
/* END max width 992px */
/* BEGIN max width 767px */
@media (max-width: 767px) {
.pre-header .pull-right {
float: left !important;
}
.pre-header .pull-right li:first-child {
padding-left: 0;
}
.ecommerce .pre-footer-subscribe-box form {
float: none;
width: auto;
}
.header .header-navigation {
margin: 0 -10px 0;
padding: 0 10px;
}
.header-navigation-content {
min-width: 100px;
}
.sidebar {
margin-bottom: 40px;
}
.sidebar___removed {
margin-bottom: 40px;
}
.sidebar-menu .fa-angle-right {
display: inline-block;
}
.pre-footer .pull-right,
.footer .pull-right {
float: none !important;
}
.pre-footer .pull-right,
.footer .pull-right {
padding-top: 15px;
}
.footer .list-inline > li {
padding-left: 0;
margin-right: 5px;
}
.form-info {
border-left: none;
padding-left: 0;
padding-top: 30px;
border-top: 1px solid #E4E6E8;
margin-bottom: 0;
}
.sidebar-products .item {
float: left;
width: 48%;
margin-bottom: 20px;
padding: 0 10px 10px;
}
.sidebar-products img {
width: 100%;
height: auto;
}
.list-view-sorting {
/*background: #fff;*/
margin-left: 0;
margin-right: 0;
margin-bottom: 10px;
}
.list-view-sorting .col-md-10 {
padding-right: 0;
}
.product-other-images {
margin-bottom: 40px;
}
.product-page-options .pull-left {
margin-bottom: 0;
}
.product-item .img-responsive {
width: 100%;
}
.pagination {
float: left !important;
padding-top: 10px;
}
.pagination > li {
margin-left: 0;
margin-right: 5px;
}
.pre-footer .margin-bottom-40 {
margin-bottom: 0;
}
.ls-layer3 .ls-price strong {
top: -15px;
}
.glyphicons-demo ul li {
width: 12.5%;
}
.tab-style-1 .tab-content img {
margin: 5px 0 10px;
}
.testimonials-v1 {
padding-top: 20px;
}
.front-steps-wrapper {
margin-left: -10px;
margin-right: -10px;
}
.front-steps-wrapper .front-step-col {
padding-left: 15px;
padding-right: 15px;
}
.front-steps-wrapper .front-step:after {
display: none;
}
.blog-posts h2, .ecommerce .blog-posts h2 {
padding-top: 15px;
}
.ecommerce .footer {
padding: 10px 0 10px;
}
.ecommerce .footer .pull-right {
padding-top: 10px;
}
.ecommerce .pre-footer address {
margin-bottom: 15px !important;
}
.footer img {
margin-bottom: 10px;
}
.ecommerce .pre-footer-subscribe-box h2, .corporate .pre-footer-subscribe-box h2 {
padding-top: 7px;
}
}
/* END max width 767px */
/* BEGIN max width 600px */
@media (max-width: 600px) {
.ls-layer3 .ls-price strong {
top: -5px;
}
}
/* END max width 600px */
/* BEGIN max width 480px */
@media (max-width: 480px) {
.pre-header .list-inline li {
display: block;
border: none;
margin-bottom: 10px;
padding: 0;
}
.pre-header .col-md-6 {
float: left;
}
.pre-header .additional-nav {
float: right;
text-align: right;
}
.nav-catalogue .pi-price {
margin-bottom: 10px;
}
.nav-catalogue .pi-price,
.nav-catalogue .product-item .add2cart {
float: none;
}
.top-cart-block {
clear: both;
float: left;
padding-top: 0;
margin: 0 0 29px;
width: 100%;
}
.top-cart-info {
float: none;
}
.top-cart-block .fa-shopping-cart {
top: 0;
}
.top-cart-content-wrapper {
left: 0;
right: auto;
}
.top-cart-content:after {
left: 15px;
}
.ls-fullwidth .ls-nav-prev, .ls-fullwidth .ls-nav-next {
display: none;
}
.checkout-content {
padding: 0 0 40px;
}
.checkout-page h2 a {
padding: 9px 10px 8px;
}
.table-wrapper-responsive {
overflow-x: scroll;
}
.shopping-cart-page .btn-default {
float: right;
}
.shopping-cart-page .btn-primary {
clear: both;
margin-top: 10px;
}
.checkout-page .btn-default {
clear: both;
margin-top: 10px;
margin-right: 0 !important;
}
.product-item:hover > .pi-img-wrapper>div {
display: none;
}
.steps-block-simple h2 {
font-size: 21px;
}
.steps-block-simple em {
font-size: 14px;
text-transform: inherit;
}
.ecommerce .pre-footer-subscribe-box h2,
.corporate .pre-footer-subscribe-box h2 {
float: none;
}
.list-view-sorting .pull-right {
float: left !important;
margin: 0 30px 10px 0;
}
.header .top-cart-block {
margin-top: 0;
}
.reduce-header .top-cart-block {
margin-top: 0;
margin-bottom: 19px;
}
}
/* END max width 480px */
/* BEGIN max width 450px */
@media (max-width: 450px) {
.ecommerce .steps-block h2 {
font-size: 33px;
}
}
/* END max width 450px */
/* BEGIN max width 405px */
@media (max-width: 405px) {
.top-cart-content {
width: 100%;
}
.top-cart-block img,
.top-cart-block .cart-content-count {
display: none;
}
}
/* END max width 405px */
/* BEGIN max width 390px */
@media (max-width: 390px) {
.steps-block .fa-truck, .steps-block .fa-gift, .steps-block .fa-phone {
border: 2px solid #FFFFFF;
border-radius: 30px !important;
float: left;
font-size: 20px;
width: 40px;
height: 40px;
margin-right: 11px;
padding-top: 12px;
text-align: center;
vertical-align: middle;
}
.ecommerce .steps-block h2 {
font-size: 25px;
padding-top: 2px;
}
.ecommerce .steps-block em {
text-transform: inherit;
}
.mix-block .tab-content .col-md-3 {
padding-right: 15px;
}
}
/* END max width 390px */
/* BEGIN max width 330px */
@media (max-width: 330px) {
.top-cart-content {
width: 280px;
}
}
/* END max width 330px */
/* BEGIN max width 320px */
@media (max-width: 320px) {
.site-logo {
margin-right: 0;
}
.content-form-page .btn-default {
margin-top: 10px;
}
.price-availability-block .availability {
clear: left;
float: left;
}
.product-page-options .pull-left {
margin-bottom: 10px;
}
}
/* END max width 320px */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,382 @@
a {
color: #64aed9;
}
a:hover {
color: #64aed9;
}
.pre-header a:hover {
color: #64aed9;
}
.shop-currencies a.current {
color: #64aed9;
}
.header-navigation ul > li.active > a,
.header-navigation ul > li > a:hover,
.header-navigation ul > li > a:focus,
.header-navigation ul > li.open > a,
.header-navigation ul > li.open > a:hover,
.header-navigation ul > li.open > a:focus {
color: #64aed9;
}
.header-navigation li.menu-search i:hover {
color: #64aed9;
}
.sidebar a:hover {
color: #64aed9;
}
.sidebar .dropdown.open .dropdown-toggle:hover {
color: #64aed9;
}
.sidebar-menu .dropdown-menu li > a:hover, .sidebar-menu .dropdown-menu li > a:focus, .sidebar-menu li.active > a, .sidebar-menu li.active > a:hover {
color: #64aed9;
}
.content-page a:hover,
.sidebar2 a:hover {
color: #64aed9;
}
.content-page .link, .content-page .link:hover, .content-page .link:active {
color: #64aed9;
}
.page-404 .number,
.page-500 .number {
color: #64aed9;
}
.content-form-page a:hover {
color: #64aed9;
}
.quote-v1 a.btn-transparent:hover {
background: #64aed9;
}
.recent-work h2 a:hover {
color: #64aed9;
}
.recent-work .recent-work-item .fa:hover {
color: #64aed9;
}
.our-clients h2 a:hover {
color: #64aed9;
}
.front-team h3 strong {
color: #64aed9;
}
.ecommerce .header-navigation ul > li.active > a,
.ecommerce .header-navigation ul > li > a:hover,
.ecommerce .header-navigation ul > li > a:focus,
.ecommerce .header-navigation ul > li.open > a,
.ecommerce .header-navigation ul > li.open > a:hover,
.ecommerce .header-navigation ul > li.open > a:focus {
color: #64aed9;
}
.product-item h3 a:hover {
color: #64aed9;
}
.checkout-page a:hover {
color: #64aed9;
}
.langs-block-others:after {
border-bottom: 8px solid #64aed9;
}
.header-navigation > ul > li.dropdown:hover > a:after {
border-bottom: 8px solid #64aed9;
}
.header-navigation .dropdown-menu > li > a:hover,
.header-navigation .dropdown-menu > li.active > a,
.header-navigation .header-navigation-content .header-navigation-col li > a:hover,
.header-navigation .header-navigation-content .header-navigation-col li.active > a {
background: #64aed9;
color: #fff;
}
.header-navigation .dropdown-menu .header-navigation-content-ext li > a:hover,
.header-navigation .dropdown-menu .header-navigation-content-ext li.active > a {
background: #fff;
color: #64aed9;
}
.header-navigation .search-box:after {
border-bottom: 8px solid #64aed9;
}
.header-navigation .search-box {
border-top: solid 2px #64aed9;
}
.title-wrapper h1 span {
color: #64aed9;
}
.breadcrumb > .active {
color: #64aed9;
}
.form-info h2 em {
color: #64aed9;
}
.nav-tabs {
border-color: #64aed9;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #64aed9;
}
.content-search h1 em {
color: #64aed9;
}
.recent-work .recent-work-item:hover a.recent-work-description {
background: #64aed9;
}
.testimonials-v1 blockquote:after {
background-color: #64aed9;
}
.testimonials-v1 span.testimonials-name {
color: #64aed9;
}
.search-result-item h4 a {
color: #64aed9;
}
.top-cart-content:after {
border-bottom: 8px solid #64aed9;
}
.goods-data a,
.checkout-page .checkout-description a {
color: #64aed9;
}
.product-page .review a {
color: #64aed9;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #64aed9;
color: #fff;
}
.list-view-sorting a {
background: #fff;
color: #64aed9;
}
::-moz-selection {
color: #fff;
background: #64aed9;
}
::selection {
color: #fff;
background: #64aed9;
}
.steps-block ::-moz-selection {
color: #64aed9;
background: #fff;
}
.steps-block ::selection {
color: #64aed9;
background: #fff;
}
.owl-buttons .owl-prev:hover {
background-color: #64aed9;
}
.owl-buttons .owl-next:hover {
background-color: #64aed9;
}
.steps-block-red {
background: #64aed9;
}
.pre-footer .photo-stream img:hover {
border-color: #64aed9;
}
.pre-footer-light dl.f-twitter dd a {
color: #64aed9;
}
.pre-footer-light address a {
color: #64aed9;
}
.testimonials-v1 .left-btn:hover {
background-color: #64aed9;
}
.testimonials-v1 .right-btn:hover {
background-color: #64aed9;
}
.blog-tags li i,
.blog-info li i {
color: #64aed9;
}
.blog-posts .more,
.blog-sidebar .more {
color: #64aed9;
}
.recent-news h3 a {
color: #64aed9;
}
.blog-photo-stream li img:hover {
border-color: #64aed9;
}
.blog-tags li a:hover {
color: #fff;
background: #64aed9;
}
.blog-tags li a:hover:after {
border-left-color: #64aed9;
}
.sidebar-categories li > a:hover,
.sidebar-categories li.active > a,
.sidebar-categories li.active:hover > a {
color: #64aed9;
}
.blog-item blockquote {
border-color: #64aed9;
}
.blog-item h4.media-heading span a {
color: #64aed9;
}
.front-steps-wrapper .front-step1 {
background: #64aed9;
}
.pricing-active {
border: 3px solid #64aed9;
box-shadow: 7px 7px rgba(100, 174, 217, 0.2);
}
.pricing:hover {
border: 3px solid #64aed9;
}
.pricing:hover h4 {
color: #64aed9;
}
.pricing-head h3 {
background: #64aed9;
}
.pricing-head-active h4 {
color: #64aed9;
}
.pricing-content li i {
color: #64aed9;
}
.top-cart-block .fa-shopping-cart {
background: #64aed9;
}
.product-item .btn:hover {
background: #64aed9;
}
.pi-price {
color: #64aed9;
}
.product-item .add2cart:hover {
color: #fff !important;
background: #64aed9 !important;
border-color: #64aed9;
}
.goods-page-price strong,
.goods-page-total strong,
.checkout-price strong,
.checkout-total strong {
color: #64aed9;
}
.shopping-total strong,
.checkout-total-block strong {
color: #64aed9;
}
.compare-item strong {
color: #64aed9;
}
.sidebar-products .price {
color: #64aed9;
}
.price-availability-block .price strong {
color: #64aed9;
}
.require {
color: #64aed9;
}
.content-form-page .form-control:focus {
border: solid 1px #64aed9;
}
.content-search input:focus {
border: solid 1px #64aed9;
}
.btn-primary {
background: #64aed9;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
background: #64aed9;
}
.header-navigation .dropdown-menu > li:first-child {
border-top: 2px solid #64aed9;
}
.front-steps-wrapper .front-step1:after {
border-left: 15px solid #83BEE0;
}
.del-goods:hover,
.add-goods:hover {
background-color: #83BEE0;
}
.sidebar a:hover > .fa-angle-down {
background-position: -22px 0;
}
.sidebar .collapsed:hover > .fa-angle-down {
background-position: -22px -37px;
}
.top-cart-content {
border-top: solid 2px #83BEE0;
}
.front-skills .progress-bar {
background: #83BEE0;
}
.service-box-v1:hover {
background: #83BEE0;
}
.header .mobi-toggler:hover {
background-color: #83BEE0;
border-color: #83BEE0;
}
@media (max-width: 1024px) {
.header .header-navigation li > a:hover,
.header .header-navigation li.active > a,
.header .header-navigation li.open > a:hover {
color: #83BEE0 !important;
}
}
.faq-tabbable {
border-left: solid 2px #83BEE0;
}
.faq-tabbable li:hover a,
.faq-tabbable li.active a{
background: #83BEE0;
}
.faq-tabbable li.active:after {
border-left: 6px solid #83BEE0;
}
.mix-filter li:hover, .mix-filter li.active {
background: #83BEE0;
color: #fff;
}
.mix-grid .mix .mix-details {
background: #83BEE0;
}
.mix-grid .mix a.mix-link,
.mix-grid .mix a.mix-preview {
background: #1ab8db;
}
.langs-block-others {
border-top: solid 2px #83BEE0;
}
.brands .owl-buttons .owl-prev:hover {
background-position: 18px -325px;
}
.brands .owl-buttons .owl-next:hover {
background-position: -249px -325px;
}
.header-navigation ul > li.active > a/*,
.ecommerce .header-navigation ul > li.active > a*/ {
border-bottom: 2px solid #83BEE0;
}

View File

@ -0,0 +1,382 @@
a {
color: #798b97;
}
a:hover {
color: #798b97;
}
.pre-header a:hover {
color: #798b97;
}
.shop-currencies a.current {
color: #798b97;
}
.header-navigation ul > li.active > a,
.header-navigation ul > li > a:hover,
.header-navigation ul > li > a:focus,
.header-navigation ul > li.open > a,
.header-navigation ul > li.open > a:hover,
.header-navigation ul > li.open > a:focus {
color: #798b97;
}
.header-navigation li.menu-search i:hover {
color: #798b97;
}
.sidebar a:hover {
color: #798b97;
}
.sidebar .dropdown.open .dropdown-toggle:hover {
color: #798b97;
}
.sidebar-menu .dropdown-menu li > a:hover, .sidebar-menu .dropdown-menu li > a:focus, .sidebar-menu li.active > a, .sidebar-menu li.active > a:hover {
color: #798b97;
}
.content-page a:hover,
.sidebar2 a:hover {
color: #798b97;
}
.content-page .link, .content-page .link:hover, .content-page .link:active {
color: #798b97;
}
.page-404 .number,
.page-500 .number {
color: #798b97;
}
.content-form-page a:hover {
color: #798b97;
}
.quote-v1 a.btn-transparent:hover {
background: #798b97;
}
.recent-work h2 a:hover {
color: #798b97;
}
.recent-work .recent-work-item .fa:hover {
color: #798b97;
}
.our-clients h2 a:hover {
color: #798b97;
}
.front-team h3 strong {
color: #798b97;
}
.ecommerce .header-navigation ul > li.active > a,
.ecommerce .header-navigation ul > li > a:hover,
.ecommerce .header-navigation ul > li > a:focus,
.ecommerce .header-navigation ul > li.open > a,
.ecommerce .header-navigation ul > li.open > a:hover,
.ecommerce .header-navigation ul > li.open > a:focus {
color: #798b97;
}
.product-item h3 a:hover {
color: #798b97;
}
.checkout-page a:hover {
color: #798b97;
}
.langs-block-others:after {
border-bottom: 8px solid #798b97;
}
.header-navigation > ul > li.dropdown:hover > a:after {
border-bottom: 8px solid #798b97;
}
.header-navigation .dropdown-menu > li > a:hover,
.header-navigation .dropdown-menu > li.active > a,
.header-navigation .header-navigation-content .header-navigation-col li > a:hover,
.header-navigation .header-navigation-content .header-navigation-col li.active > a {
background: #798b97;
color: #fff;
}
.header-navigation .dropdown-menu .header-navigation-content-ext li > a:hover,
.header-navigation .dropdown-menu .header-navigation-content-ext li.active > a {
background: #fff;
color: #798b97;
}
.header-navigation .search-box:after {
border-bottom: 8px solid #798b97;
}
.header-navigation .search-box {
border-top: solid 2px #798b97;
}
.title-wrapper h1 span {
color: #798b97;
}
.breadcrumb > .active {
color: #798b97;
}
.form-info h2 em {
color: #798b97;
}
.nav-tabs {
border-color: #798b97;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #798b97;
}
.content-search h1 em {
color: #798b97;
}
.recent-work .recent-work-item:hover a.recent-work-description {
background: #798b97;
}
.testimonials-v1 blockquote:after {
background-color: #798b97;
}
.testimonials-v1 span.testimonials-name {
color: #798b97;
}
.search-result-item h4 a {
color: #798b97;
}
.top-cart-content:after {
border-bottom: 8px solid #798b97;
}
.goods-data a,
.checkout-page .checkout-description a {
color: #798b97;
}
.product-page .review a {
color: #798b97;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #798b97;
color: #fff;
}
.list-view-sorting a {
background: #fff;
color: #798b97;
}
::-moz-selection {
color: #fff;
background: #798b97;
}
::selection {
color: #fff;
background: #798b97;
}
.steps-block ::-moz-selection {
color: #798b97;
background: #fff;
}
.steps-block ::selection {
color: #798b97;
background: #fff;
}
.owl-buttons .owl-prev:hover {
background-color: #798b97;
}
.owl-buttons .owl-next:hover {
background-color: #798b97;
}
.steps-block-red {
background: #798b97;
}
.pre-footer .photo-stream img:hover {
border-color: #798b97;
}
.pre-footer-light dl.f-twitter dd a {
color: #798b97;
}
.pre-footer-light address a {
color: #798b97;
}
.testimonials-v1 .left-btn:hover {
background-color: #798b97;
}
.testimonials-v1 .right-btn:hover {
background-color: #798b97;
}
.blog-tags li i,
.blog-info li i {
color: #798b97;
}
.blog-posts .more,
.blog-sidebar .more {
color: #798b97;
}
.recent-news h3 a {
color: #798b97;
}
.blog-photo-stream li img:hover {
border-color: #798b97;
}
.blog-tags li a:hover {
color: #fff;
background: #798b97;
}
.blog-tags li a:hover:after {
border-left-color: #798b97;
}
.sidebar-categories li > a:hover,
.sidebar-categories li.active > a,
.sidebar-categories li.active:hover > a {
color: #798b97;
}
.blog-item blockquote {
border-color: #798b97;
}
.blog-item h4.media-heading span a {
color: #798b97;
}
.front-steps-wrapper .front-step1 {
background: #798b97;
}
.pricing-active {
border: 3px solid #798b97;
box-shadow: 7px 7px rgba(121, 139, 151, 0.2);
}
.pricing:hover {
border: 3px solid #798b97;
}
.pricing:hover h4 {
color: #798b97;
}
.pricing-head h3 {
background: #798b97;
}
.pricing-head-active h4 {
color: #798b97;
}
.pricing-content li i {
color: #798b97;
}
.top-cart-block .fa-shopping-cart {
background: #798b97;
}
.product-item .btn:hover {
background: #798b97;
}
.pi-price {
color: #798b97;
}
.product-item .add2cart:hover {
color: #fff !important;
background: #798b97 !important;
border-color: #798b97;
}
.goods-page-price strong,
.goods-page-total strong,
.checkout-price strong,
.checkout-total strong {
color: #798b97;
}
.shopping-total strong,
.checkout-total-block strong {
color: #798b97;
}
.compare-item strong {
color: #798b97;
}
.sidebar-products .price {
color: #798b97;
}
.price-availability-block .price strong {
color: #798b97;
}
.require {
color: #798b97;
}
.content-form-page .form-control:focus {
border: solid 1px #798b97;
}
.content-search input:focus {
border: solid 1px #798b97;
}
.btn-primary {
background: #798b97;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
background: #798b97;
}
.header-navigation .dropdown-menu > li:first-child {
border-top: 2px solid #798b97;
}
.front-steps-wrapper .front-step1:after {
border-left: 15px solid #93A2AB;
}
.del-goods:hover,
.add-goods:hover {
background-color: #93A2AB;
}
.sidebar a:hover > .fa-angle-down {
background-position: -66px 0;
}
.sidebar .collapsed:hover > .fa-angle-down {
background-position: -66px -37px;
}
.top-cart-content {
border-top: solid 2px #93A2AB;
}
.front-skills .progress-bar {
background: #93A2AB;
}
.service-box-v1:hover {
background: #93A2AB;
}
.header .mobi-toggler:hover {
background-color: #93A2AB;
border-color: #93A2AB;
}
@media (max-width: 1024px) {
.header .header-navigation li > a:hover,
.header .header-navigation li.active > a,
.header .header-navigation li.open > a:hover {
color: #93A2AB !important;
}
}
.faq-tabbable {
border-left: solid 2px #93A2AB;
}
.faq-tabbable li:hover a,
.faq-tabbable li.active a{
background: #93A2AB;
}
.faq-tabbable li.active:after {
border-left: 6px solid #93A2AB;
}
.mix-filter li:hover, .mix-filter li.active {
background: #93A2AB;
color: #fff;
}
.mix-grid .mix .mix-details {
background: #93A2AB;
}
.mix-grid .mix a.mix-link,
.mix-grid .mix a.mix-preview {
background: #959798;
}
.langs-block-others {
border-top: solid 2px #93A2AB;
}
.brands .owl-buttons .owl-prev:hover {
background-position: 18px -753px;
}
.brands .owl-buttons .owl-next:hover {
background-position: -249px -753px;
}
.header-navigation ul > li.active > a/*,
.ecommerce .header-navigation ul > li.active > a*/ {
border-bottom: 2px solid #93A2AB;
}

View File

@ -0,0 +1,382 @@
a {
color: #67bd3c;
}
a:hover {
color: #67bd3c;
}
.pre-header a:hover {
color: #67bd3c;
}
.shop-currencies a.current {
color: #67bd3c;
}
.header-navigation ul > li.active > a,
.header-navigation ul > li > a:hover,
.header-navigation ul > li > a:focus,
.header-navigation ul > li.open > a,
.header-navigation ul > li.open > a:hover,
.header-navigation ul > li.open > a:focus {
color: #67bd3c;
}
.header-navigation li.menu-search i:hover {
color: #67bd3c;
}
.sidebar a:hover {
color: #67bd3c;
}
.sidebar .dropdown.open .dropdown-toggle:hover {
color: #67bd3c;
}
.sidebar-menu .dropdown-menu li > a:hover, .sidebar-menu .dropdown-menu li > a:focus, .sidebar-menu li.active > a, .sidebar-menu li.active > a:hover {
color: #67bd3c;
}
.content-page a:hover,
.sidebar2 a:hover {
color: #67bd3c;
}
.content-page .link, .content-page .link:hover, .content-page .link:active {
color: #67bd3c;
}
.page-404 .number,
.page-500 .number {
color: #67bd3c;
}
.content-form-page a:hover {
color: #67bd3c;
}
.quote-v1 a.btn-transparent:hover {
background: #67bd3c;
}
.recent-work h2 a:hover {
color: #67bd3c;
}
.recent-work .recent-work-item .fa:hover {
color: #67bd3c;
}
.our-clients h2 a:hover {
color: #67bd3c;
}
.front-team h3 strong {
color: #67bd3c;
}
.ecommerce .header-navigation ul > li.active > a,
.ecommerce .header-navigation ul > li > a:hover,
.ecommerce .header-navigation ul > li > a:focus,
.ecommerce .header-navigation ul > li.open > a,
.ecommerce .header-navigation ul > li.open > a:hover,
.ecommerce .header-navigation ul > li.open > a:focus {
color: #67bd3c;
}
.product-item h3 a:hover {
color: #67bd3c;
}
.checkout-page a:hover {
color: #67bd3c;
}
.langs-block-others:after {
border-bottom: 8px solid #67bd3c;
}
.header-navigation > ul > li.dropdown:hover > a:after {
border-bottom: 8px solid #67bd3c;
}
.header-navigation .dropdown-menu > li > a:hover,
.header-navigation .dropdown-menu > li.active > a,
.header-navigation .header-navigation-content .header-navigation-col li > a:hover,
.header-navigation .header-navigation-content .header-navigation-col li.active > a {
background: #67bd3c;
color: #fff;
}
.header-navigation .dropdown-menu .header-navigation-content-ext li > a:hover,
.header-navigation .dropdown-menu .header-navigation-content-ext li.active > a {
background: #fff;
color: #67bd3c;
}
.header-navigation .search-box:after {
border-bottom: 8px solid #67bd3c;
}
.header-navigation .search-box {
border-top: solid 2px #67bd3c;
}
.title-wrapper h1 span {
color: #67bd3c;
}
.breadcrumb > .active {
color: #67bd3c;
}
.form-info h2 em {
color: #67bd3c;
}
.nav-tabs {
border-color: #67bd3c;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #67bd3c;
}
.content-search h1 em {
color: #67bd3c;
}
.recent-work .recent-work-item:hover a.recent-work-description {
background: #67bd3c;
}
.testimonials-v1 blockquote:after {
background-color: #67bd3c;
}
.testimonials-v1 span.testimonials-name {
color: #67bd3c;
}
.search-result-item h4 a {
color: #67bd3c;
}
.top-cart-content:after {
border-bottom: 8px solid #67bd3c;
}
.goods-data a,
.checkout-page .checkout-description a {
color: #67bd3c;
}
.product-page .review a {
color: #67bd3c;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #67bd3c;
color: #fff;
}
.list-view-sorting a {
background: #fff;
color: #67bd3c;
}
::-moz-selection {
color: #fff;
background: #67bd3c;
}
::selection {
color: #fff;
background: #67bd3c;
}
.steps-block ::-moz-selection {
color: #67bd3c;
background: #fff;
}
.steps-block ::selection {
color: #67bd3c;
background: #fff;
}
.owl-buttons .owl-prev:hover {
background-color: #67bd3c;
}
.owl-buttons .owl-next:hover {
background-color: #67bd3c;
}
.steps-block-red {
background: #67bd3c;
}
.pre-footer .photo-stream img:hover {
border-color: #67bd3c;
}
.pre-footer-light dl.f-twitter dd a {
color: #67bd3c;
}
.pre-footer-light address a {
color: #67bd3c;
}
.testimonials-v1 .left-btn:hover {
background-color: #67bd3c;
}
.testimonials-v1 .right-btn:hover {
background-color: #67bd3c;
}
.blog-tags li i,
.blog-info li i {
color: #67bd3c;
}
.blog-posts .more,
.blog-sidebar .more {
color: #67bd3c;
}
.recent-news h3 a {
color: #67bd3c;
}
.blog-photo-stream li img:hover {
border-color: #67bd3c;
}
.blog-tags li a:hover {
color: #fff;
background: #67bd3c;
}
.blog-tags li a:hover:after {
border-left-color: #67bd3c;
}
.sidebar-categories li > a:hover,
.sidebar-categories li.active > a,
.sidebar-categories li.active:hover > a {
color: #67bd3c;
}
.blog-item blockquote {
border-color: #67bd3c;
}
.blog-item h4.media-heading span a {
color: #67bd3c;
}
.front-steps-wrapper .front-step1 {
background: #67bd3c;
}
.pricing-active {
border: 3px solid #67bd3c;
box-shadow: 7px 7px rgba(103, 189, 60, 0.2);
}
.pricing:hover {
border: 3px solid #67bd3c;
}
.pricing:hover h4 {
color: #67bd3c;
}
.pricing-head h3 {
background: #67bd3c;
}
.pricing-head-active h4 {
color: #67bd3c;
}
.pricing-content li i {
color: #67bd3c;
}
.top-cart-block .fa-shopping-cart {
background: #67bd3c;
}
.product-item .btn:hover {
background: #67bd3c;
}
.pi-price {
color: #67bd3c;
}
.product-item .add2cart:hover {
color: #fff !important;
background: #67bd3c !important;
border-color: #67bd3c;
}
.goods-page-price strong,
.goods-page-total strong,
.checkout-price strong,
.checkout-total strong {
color: #67bd3c;
}
.shopping-total strong,
.checkout-total-block strong {
color: #67bd3c;
}
.compare-item strong {
color: #67bd3c;
}
.sidebar-products .price {
color: #67bd3c;
}
.price-availability-block .price strong {
color: #67bd3c;
}
.require {
color: #67bd3c;
}
.content-form-page .form-control:focus {
border: solid 1px #67bd3c;
}
.content-search input:focus {
border: solid 1px #67bd3c;
}
.btn-primary {
background: #67bd3c;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
background: #67bd3c;
}
.header-navigation .dropdown-menu > li:first-child {
border-top: 2px solid #67bd3c;
}
.front-steps-wrapper .front-step1:after {
border-left: 15px solid #85CA63;
}
.del-goods:hover,
.add-goods:hover {
background-color: #85CA63;
}
.sidebar a:hover > .fa-angle-down {
background-position: -33px 0;
}
.sidebar .collapsed:hover > .fa-angle-down {
background-position: -33px -37px;
}
.top-cart-content {
border-top: solid 2px #85CA63;
}
.front-skills .progress-bar {
background: #85CA63;
}
.service-box-v1:hover {
background: #85CA63;
}
.header .mobi-toggler:hover {
background-color: #85CA63;
border-color: #85CA63;
}
@media (max-width: 1024px) {
.header .header-navigation li > a:hover,
.header .header-navigation li.active > a,
.header .header-navigation li.open > a:hover {
color: #85CA63 !important;
}
}
.faq-tabbable {
border-left: solid 2px #85CA63;
}
.faq-tabbable li:hover a,
.faq-tabbable li.active a{
background: #85CA63;
}
.faq-tabbable li.active:after {
border-left: 6px solid #85CA63;
}
.mix-filter li:hover, .mix-filter li.active {
background: #85CA63;
color: #fff;
}
.mix-grid .mix .mix-details {
background: #85CA63;
}
.mix-grid .mix a.mix-link,
.mix-grid .mix a.mix-preview {
background: #7edb1a;
}
.langs-block-others {
border-top: solid 2px #85CA63;
}
.brands .owl-buttons .owl-prev:hover {
background-position: 18px -432px;
}
.brands .owl-buttons .owl-next:hover {
background-position: -249px -432px;
}
.header-navigation ul > li.active > a/*,
.ecommerce .header-navigation ul > li.active > a*/ {
border-bottom: 2px solid #85CA63;
}

View File

@ -0,0 +1,382 @@
a {
color: #e18604;
}
a:hover {
color: #e18604;
}
.pre-header a:hover {
color: #e18604;
}
.shop-currencies a.current {
color: #e18604;
}
.header-navigation ul > li.active > a,
.header-navigation ul > li > a:hover,
.header-navigation ul > li > a:focus,
.header-navigation ul > li.open > a,
.header-navigation ul > li.open > a:hover,
.header-navigation ul > li.open > a:focus {
color: #e18604;
}
.header-navigation li.menu-search i:hover {
color: #e18604;
}
.sidebar a:hover {
color: #e18604;
}
.sidebar .dropdown.open .dropdown-toggle:hover {
color: #e18604;
}
.sidebar-menu .dropdown-menu li > a:hover, .sidebar-menu .dropdown-menu li > a:focus, .sidebar-menu li.active > a, .sidebar-menu li.active > a:hover {
color: #e18604;
}
.content-page a:hover,
.sidebar2 a:hover {
color: #e18604;
}
.content-page .link, .content-page .link:hover, .content-page .link:active {
color: #e18604;
}
.page-404 .number,
.page-500 .number {
color: #e18604;
}
.content-form-page a:hover {
color: #e18604;
}
.quote-v1 a.btn-transparent:hover {
background: #e18604;
}
.recent-work h2 a:hover {
color: #e18604;
}
.recent-work .recent-work-item .fa:hover {
color: #e18604;
}
.our-clients h2 a:hover {
color: #e18604;
}
.front-team h3 strong {
color: #e18604;
}
.ecommerce .header-navigation ul > li.active > a,
.ecommerce .header-navigation ul > li > a:hover,
.ecommerce .header-navigation ul > li > a:focus,
.ecommerce .header-navigation ul > li.open > a,
.ecommerce .header-navigation ul > li.open > a:hover,
.ecommerce .header-navigation ul > li.open > a:focus {
color: #e18604;
}
.product-item h3 a:hover {
color: #e18604;
}
.checkout-page a:hover {
color: #e18604;
}
.langs-block-others:after {
border-bottom: 8px solid #e18604;
}
.header-navigation > ul > li.dropdown:hover > a:after {
border-bottom: 8px solid #e18604;
}
.header-navigation .dropdown-menu > li > a:hover,
.header-navigation .dropdown-menu > li.active > a,
.header-navigation .header-navigation-content .header-navigation-col li > a:hover,
.header-navigation .header-navigation-content .header-navigation-col li.active > a {
background: #e18604;
color: #fff;
}
.header-navigation .dropdown-menu .header-navigation-content-ext li > a:hover,
.header-navigation .dropdown-menu .header-navigation-content-ext li.active > a {
background: #fff;
color: #e18604;
}
.header-navigation .search-box:after {
border-bottom: 8px solid #e18604;
}
.header-navigation .search-box {
border-top: solid 2px #e18604;
}
.title-wrapper h1 span {
color: #e18604;
}
.breadcrumb > .active {
color: #e18604;
}
.form-info h2 em {
color: #e18604;
}
.nav-tabs {
border-color: #e18604;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #e18604;
}
.content-search h1 em {
color: #e18604;
}
.recent-work .recent-work-item:hover a.recent-work-description {
background: #e18604;
}
.testimonials-v1 blockquote:after {
background-color: #e18604;
}
.testimonials-v1 span.testimonials-name {
color: #e18604;
}
.search-result-item h4 a {
color: #e18604;
}
.top-cart-content:after {
border-bottom: 8px solid #e18604;
}
.goods-data a,
.checkout-page .checkout-description a {
color: #e18604;
}
.product-page .review a {
color: #e18604;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #e18604;
color: #fff;
}
.list-view-sorting a {
background: #fff;
color: #e18604;
}
::-moz-selection {
color: #fff;
background: #e18604;
}
::selection {
color: #fff;
background: #e18604;
}
.steps-block ::-moz-selection {
color: #e18604;
background: #fff;
}
.steps-block ::selection {
color: #e18604;
background: #fff;
}
.owl-buttons .owl-prev:hover {
background-color: #e18604;
}
.owl-buttons .owl-next:hover {
background-color: #e18604;
}
.steps-block-red {
background: #e18604;
}
.pre-footer .photo-stream img:hover {
border-color: #e18604;
}
.pre-footer-light dl.f-twitter dd a {
color: #e18604;
}
.pre-footer-light address a {
color: #e18604;
}
.testimonials-v1 .left-btn:hover {
background-color: #e18604;
}
.testimonials-v1 .right-btn:hover {
background-color: #e18604;
}
.blog-tags li i,
.blog-info li i {
color: #e18604;
}
.blog-posts .more,
.blog-sidebar .more {
color: #e18604;
}
.recent-news h3 a {
color: #e18604;
}
.blog-photo-stream li img:hover {
border-color: #e18604;
}
.blog-tags li a:hover {
color: #fff;
background: #e18604;
}
.blog-tags li a:hover:after {
border-left-color: #e18604;
}
.sidebar-categories li > a:hover,
.sidebar-categories li.active > a,
.sidebar-categories li.active:hover > a {
color: #e18604;
}
.blog-item blockquote {
border-color: #e18604;
}
.blog-item h4.media-heading span a {
color: #e18604;
}
.front-steps-wrapper .front-step1 {
background: #e18604;
}
.pricing-active {
border: 3px solid #e18604;
box-shadow: 7px 7px rgba(225, 134, 4, 0.2);
}
.pricing:hover {
border: 3px solid #e18604;
}
.pricing:hover h4 {
color: #e18604;
}
.pricing-head h3 {
background: #e18604;
}
.pricing-head-active h4 {
color: #e18604;
}
.pricing-content li i {
color: #e18604;
}
.top-cart-block .fa-shopping-cart {
background: #e18604;
}
.product-item .btn:hover {
background: #e18604;
}
.pi-price {
color: #e18604;
}
.product-item .add2cart:hover {
color: #fff !important;
background: #e18604 !important;
border-color: #e18604;
}
.goods-page-price strong,
.goods-page-total strong,
.checkout-price strong,
.checkout-total strong {
color: #e18604;
}
.shopping-total strong,
.checkout-total-block strong {
color: #e18604;
}
.compare-item strong {
color: #e18604;
}
.sidebar-products .price {
color: #e18604;
}
.price-availability-block .price strong {
color: #e18604;
}
.require {
color: #e18604;
}
.content-form-page .form-control:focus {
border: solid 1px #e18604;
}
.content-search input:focus {
border: solid 1px #e18604;
}
.btn-primary {
background: #e18604;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
background: #e18604;
}
.header-navigation .dropdown-menu > li:first-child {
border-top: 2px solid #e18604;
}
.front-steps-wrapper .front-step1:after {
border-left: 15px solid #E79E36;
}
.del-goods:hover,
.add-goods:hover {
background-color: #E79E36;
}
.sidebar a:hover > .fa-angle-down {
background-position: -44px 0;
}
.sidebar .collapsed:hover > .fa-angle-down {
background-position: -44px -37px;
}
.top-cart-content {
border-top: solid 2px #E79E36;
}
.front-skills .progress-bar {
background: #E79E36;
}
.service-box-v1:hover {
background: #E79E36;
}
.header .mobi-toggler:hover {
background-color: #E79E36;
border-color: #E79E36;
}
@media (max-width: 1024px) {
.header .header-navigation li > a:hover,
.header .header-navigation li.active > a,
.header .header-navigation li.open > a:hover {
color: #E79E36 !important;
}
}
.faq-tabbable {
border-left: solid 2px #E79E36;
}
.faq-tabbable li:hover a,
.faq-tabbable li.active a{
background: #E79E36;
}
.faq-tabbable li.active:after {
border-left: 6px solid #E79E36;
}
.mix-filter li:hover, .mix-filter li.active {
background: #E79E36;
color: #fff;
}
.mix-grid .mix .mix-details {
background: #E79E36;
}
.mix-grid .mix a.mix-link,
.mix-grid .mix a.mix-preview {
background: #db681a;
}
.langs-block-others {
border-top: solid 2px #E79E36;
}
.brands .owl-buttons .owl-prev:hover {
background-position: 18px -539px;
}
.brands .owl-buttons .owl-next:hover {
background-position: -249px -539px;
}
.header-navigation ul > li.active > a/*,
.ecommerce .header-navigation ul > li.active > a*/ {
border-bottom: 2px solid #E79E36;
}

View File

@ -0,0 +1,377 @@
a {
color: #E02222;
}
a:hover {
color: #E02222;
}
.pre-header a:hover {
color: #E02222;
}
.shop-currencies a.current {
color: #E02222;
}
.header-navigation ul > li.active > a,
.header-navigation ul > li > a:hover,
.header-navigation ul > li > a:focus,
.header-navigation ul > li.open > a,
.header-navigation ul > li.open > a:hover,
.header-navigation ul > li.open > a:focus {
color: #e02222;
}
.header-navigation li.menu-search i:hover {
color: #e02222;
}
.sidebar a:hover {
color: #E02222;
}
.sidebar .dropdown.open .dropdown-toggle:hover {
color: #E02222;
}
.sidebar-menu .dropdown-menu li > a:hover, .sidebar-menu .dropdown-menu li > a:focus, .sidebar-menu li.active > a, .sidebar-menu li.active > a:hover {
color: #E02222;
}
.content-page a:hover,
.sidebar2 a:hover {
color: #E02222;
}
.content-page .link, .content-page .link:hover, .content-page .link:active {
color: #E02222;
}
.page-404 .number,
.page-500 .number {
color: #E02222;
}
.content-form-page a:hover {
color: #E02222;
}
.quote-v1 a.btn-transparent:hover {
background: #E02222;
}
.recent-work h2 a:hover {
color: #E02222;
}
.recent-work .recent-work-item .fa:hover {
color: #E02222;
}
.our-clients h2 a:hover {
color: #E02222;
}
.front-team h3 strong {
color: #E02222;
}
.ecommerce .header-navigation ul > li.active > a,
.ecommerce .header-navigation ul > li > a:hover,
.ecommerce .header-navigation ul > li > a:focus,
.ecommerce .header-navigation ul > li.open > a,
.ecommerce .header-navigation ul > li.open > a:hover,
.ecommerce .header-navigation ul > li.open > a:focus {
color: #e02222;
}
.product-item h3 a:hover {
color: #E02222;
}
.checkout-page a:hover {
color: #E02222;
}
.langs-block-others:after {
border-bottom: 8px solid #e6400c;
}
.header-navigation > ul > li.dropdown:hover > a:after {
border-bottom: 8px solid #e6400c;
}
.header-navigation .dropdown-menu > li > a:hover,
.header-navigation .dropdown-menu > li.active > a,
.header-navigation .header-navigation-content .header-navigation-col li > a:hover,
.header-navigation .header-navigation-content .header-navigation-col li.active > a {
background: #e6400c;
color: #fff;
}
.header-navigation .dropdown-menu .header-navigation-content-ext li > a:hover,
.header-navigation .dropdown-menu .header-navigation-content-ext li.active > a {
background: #fff;
color: #e6400c;
}
.header-navigation .search-box:after {
border-bottom: 8px solid #e6400c;
}
.header-navigation .search-box {
border-top: solid 2px #ea4c1d;
}
.title-wrapper h1 span {
color: #e6400c;
}
.breadcrumb > .active {
color: #e6400c;
}
.form-info h2 em {
color: #e6400c;
}
.nav-tabs {
border-color: #e6400c;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #e6400c;
}
.content-search h1 em {
color: #e6400c;
}
.recent-work .recent-work-item:hover a.recent-work-description {
background: #E6400C;
}
.testimonials-v1 blockquote:after {
background-color: #E6400C;
}
.testimonials-v1 span.testimonials-name {
color: #E6400C;
}
.search-result-item h4 a {
color: #E6400C;
}
.top-cart-content:after {
border-bottom: 8px solid #e6400c;
}
.goods-data a,
.checkout-page .checkout-description a {
color: #e6400c;
}
.product-page .review a {
color: #e6400c;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #E6400C;
color: #fff;
}
.list-view-sorting a {
background: #fff;
color: #E6400C;
}
::-moz-selection {
color: #fff;
background: #e45000;
}
::selection {
color: #fff;
background: #e45000;
}
.steps-block ::-moz-selection {
color: #e45000;
background: #fff;
}
.steps-block ::selection {
color: #e45000;
background: #fff;
}
.owl-buttons .owl-prev:hover {
background-color: #e84d1c;
}
.owl-buttons .owl-next:hover {
background-color: #e84d1c;
}
.steps-block-red {
background: #e84d1c;
}
.pre-footer .photo-stream img:hover {
border-color: #E84D1C;
}
.pre-footer-light dl.f-twitter dd a {
color: #e84d1c;
}
.pre-footer-light address a {
color: #e84d1c;
}
.testimonials-v1 .left-btn:hover {
background-color: #e84d1c;
}
.testimonials-v1 .right-btn:hover {
background-color: #e84d1c;
}
.blog-tags li i,
.blog-info li i {
color: #E84D1C;
}
.blog-posts .more,
.blog-sidebar .more {
color: #E84D1C;
}
.recent-news h3 a {
color: #E84D1C;
}
.blog-photo-stream li img:hover {
border-color: #E84D1C;
}
.blog-tags li a:hover {
color: #fff;
background: #E84D1C;
}
.blog-tags li a:hover:after {
border-left-color: #E84D1C;
}
.sidebar-categories li > a:hover,
.sidebar-categories li.active > a,
.sidebar-categories li.active:hover > a {
color: #E84D1C;
}
.blog-item blockquote {
border-color: #E84D1C;
}
.blog-item h4.media-heading span a {
color: #E84D1C;
}
.front-steps-wrapper .front-step1 {
background: #E84D1C;
}
.pricing-active {
border: 3px solid #E84D1C;
box-shadow: 7px 7px rgba(232, 77, 22, 0.2);
}
.pricing:hover {
border: 3px solid #E84D1C;
}
.pricing:hover h4 {
color: #E84D1C;
}
.pricing-head h3 {
background: #E84D1C;
}
.pricing-head-active h4 {
color: #E84D1C;
}
.pricing-content li i {
color: #E84D1C;
}
.top-cart-block .fa-shopping-cart {
background: #e84d1c;
}
.product-item .btn:hover {
background: #e84d1c;
}
.pi-price {
color: #e84d1c;
}
.product-item .add2cart:hover {
color: #fff !important;
background: #E84D1C !important;
border-color: #E84D1C;
}
.goods-page-price strong,
.goods-page-total strong,
.checkout-price strong,
.checkout-total strong {
color: #e84d1c;
}
.shopping-total strong,
.checkout-total-block strong {
color: #e84d1c;
}
.compare-item strong {
color: #E84D1C;
}
.sidebar-products .price {
color: #E84D1C;
}
.price-availability-block .price strong {
color: #e84d1c;
}
.require {
color: #e94d1c;
}
.content-form-page .form-control:focus {
border: solid 1px #e94d1c;
}
.content-search input:focus {
border: solid 1px #e94d1c;
}
.btn-primary {
background: #e94d1c;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
background: #cc3304;
}
.header-navigation .dropdown-menu > li:first-child {
border-top: 2px solid #EA4C1D;
}
.front-steps-wrapper .front-step1:after {
border-left: 15px solid #EC7049;
}
.del-goods:hover,
.add-goods:hover {
background-color: #E94D1C;
}
.sidebar a:hover > .fa-angle-down {
background-position: -11px 0;
}
.sidebar .collapsed:hover > .fa-angle-down {
background-position: -11px -37px;
}
.top-cart-content {
border-top: solid 2px #ea4c1d;
}
.front-skills .progress-bar {
background: #EF4D2E;
}
.service-box-v1:hover {
background: #d73d04;
}
.header .mobi-toggler:hover {
background-color: #e34f00;
border-color: #e34f00;
}
@media (max-width: 1024px) {
.header .header-navigation li > a:hover,
.header .header-navigation li.active > a,
.header .header-navigation li.open > a:hover {
color: #dd4632 !important;
}
}
.faq-tabbable {
border-left: solid 2px #e44f00;
}
.faq-tabbable li:hover a,
.faq-tabbable li.active a{
background: #e44f00;
}
.faq-tabbable li.active:after {
border-left: 6px solid #e44f00;
}
.mix-filter li:hover, .mix-filter li.active {
background: #e44f00;
color: #fff;
}
.mix-grid .mix .mix-details {
background: #e44f00;
}
.mix-grid .mix a.mix-link,
.mix-grid .mix a.mix-preview {
background: #DB3A1B;
}
.langs-block-others {
border-top: solid 2px #ea4c1d;
}
.brands .owl-buttons .owl-prev:hover {
background-position: 18px -217px;
}
.brands .owl-buttons .owl-next:hover {
background-position: -249px -217px;
}
.header-navigation ul > li.active > a/*,
.ecommerce .header-navigation ul > li.active > a*/ {
border-bottom: 2px solid #e64f00;
}

View File

@ -0,0 +1,383 @@
a {
color: #44b1c1;
}
a:hover {
color: #44b1c1;
}
.pre-header a:hover {
color: #44b1c1;
}
.shop-currencies a.current {
color: #44b1c1;
}
.header-navigation ul > li.active > a,
.header-navigation ul > li > a:hover,
.header-navigation ul > li > a:focus,
.header-navigation ul > li.open > a,
.header-navigation ul > li.open > a:hover,
.header-navigation ul > li.open > a:focus {
color: #44b1c1;
}
.header-navigation li.menu-search i:hover {
color: #44b1c1;
}
.sidebar a:hover {
color: #44b1c1;
}
.sidebar .dropdown.open .dropdown-toggle:hover {
color: #44b1c1;
}
.sidebar-menu .dropdown-menu li > a:hover, .sidebar-menu .dropdown-menu li > a:focus, .sidebar-menu li.active > a, .sidebar-menu li.active > a:hover {
color: #44b1c1;
}
.content-page a:hover,
.sidebar2 a:hover {
color: #44b1c1;
}
.content-page .link, .content-page .link:hover, .content-page .link:active {
color: #44b1c1;
}
.page-404 .number,
.page-500 .number {
color: #44b1c1;
}
.content-form-page a:hover {
color: #44b1c1;
}
.quote-v1 a.btn-transparent:hover {
background: #44b1c1;
}
.recent-work h2 a:hover {
color: #44b1c1;
}
.recent-work .recent-work-item .fa:hover {
color: #44b1c1;
}
.our-clients h2 a:hover {
color: #44b1c1;
}
.front-team h3 strong {
color: #44b1c1;
}
.ecommerce .header-navigation ul > li.active > a,
.ecommerce .header-navigation ul > li > a:hover,
.ecommerce .header-navigation ul > li > a:focus,
.ecommerce .header-navigation ul > li.open > a,
.ecommerce .header-navigation ul > li.open > a:hover,
.ecommerce .header-navigation ul > li.open > a:focus {
color: #44b1c1;
}
.product-item h3 a:hover {
color: #44b1c1;
}
.checkout-page a:hover {
color: #44b1c1;
}
.langs-block-others:after {
border-bottom: 8px solid #44b1c1;
}
.header-navigation > ul > li.dropdown:hover > a:after {
border-bottom: 8px solid #44b1c1;
}
.header-navigation .dropdown-menu > li > a:hover,
.header-navigation .dropdown-menu > li.active > a,
.header-navigation .header-navigation-content .header-navigation-col li > a:hover,
.header-navigation .header-navigation-content .header-navigation-col li.active > a {
background: #44b1c1;
color: #fff;
}
.header-navigation .dropdown-menu .header-navigation-content-ext li > a:hover,
.header-navigation .dropdown-menu .header-navigation-content-ext li.active > a {
background: #fff;
color: #44b1c1;
}
.header-navigation .search-box:after {
border-bottom: 8px solid #44b1c1;
}
.header-navigation .search-box {
border-top: solid 2px #44b1c1;
}
.title-wrapper h1 span {
color: #44b1c1;
}
.breadcrumb > .active {
color: #44b1c1;
}
.form-info h2 em {
color: #44b1c1;
}
.nav-tabs {
border-color: #44b1c1;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #44b1c1;
}
.content-search h1 em {
color: #44b1c1;
}
.recent-work .recent-work-item:hover a.recent-work-description {
background: #44b1c1;
}
.testimonials-v1 blockquote:after {
background-color: #44b1c1;
}
.testimonials-v1 span.testimonials-name {
color: #44b1c1;
}
.search-result-item h4 a {
color: #44b1c1;
}
.top-cart-content:after {
border-bottom: 8px solid #44b1c1;
}
.goods-data a,
.checkout-page .checkout-description a {
color: #44b1c1;
}
.product-page .review a {
color: #44b1c1;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
background: #44b1c1;
color: #fff;
}
.list-view-sorting a {
background: #fff;
color: #44b1c1;
}
::-moz-selection {
color: #fff;
background: #44b1c1;
}
::selection {
color: #fff;
background: #44b1c1;
}
.steps-block ::-moz-selection {
color: #44b1c1;
background: #fff;
}
.steps-block ::selection {
color: #44b1c1;
background: #fff;
}
.owl-buttons .owl-prev:hover {
background-color: #44b1c1;
}
.owl-buttons .owl-next:hover {
background-color: #44b1c1;
}
.steps-block-red {
background: #44b1c1;
}
.pre-footer .photo-stream img:hover {
border-color: #44b1c1;
}
.pre-footer-light dl.f-twitter dd a {
color: #44b1c1;
}
.pre-footer-light address a {
color: #44b1c1;
}
.testimonials-v1 .left-btn:hover {
background-color: #44b1c1;
}
.testimonials-v1 .right-btn:hover {
background-color: #44b1c1;
}
.blog-tags li i,
.blog-info li i {
color: #44b1c1;
}
.blog-posts .more,
.blog-sidebar .more {
color: #44b1c1;
}
.recent-news h3 a {
color: #44b1c1;
}
.blog-photo-stream li img:hover {
border-color: #44b1c1;
}
.blog-tags li a:hover {
color: #fff;
background: #44b1c1;
}
.blog-tags li a:hover:after {
border-left-color: #44b1c1;
}
.sidebar-categories li > a:hover,
.sidebar-categories li.active > a,
.sidebar-categories li.active:hover > a {
color: #44b1c1;
}
.blog-item blockquote {
border-color: #44b1c1;
}
.blog-item h4.media-heading span a {
color: #44b1c1;
}
.front-steps-wrapper .front-step1 {
background: #44b1c1;
}
.pricing-active {
border: 3px solid #44b1c1;
box-shadow: 7px 7px rgba(68, 177, 193, 0.2);
}
.pricing:hover {
border: 3px solid #44b1c1;
}
.pricing:hover h4 {
color: #44b1c1;
}
.pricing-head h3 {
background: #44b1c1;
}
.pricing-head-active h4 {
color: #44b1c1;
}
.pricing-content li i {
color: #44b1c1;
}
.top-cart-block .fa-shopping-cart {
background: #44b1c1;
}
.product-item .btn:hover {
background: #44b1c1;
}
.pi-price {
color: #44b1c1;
}
.product-item .add2cart:hover {
color: #fff !important;
background: #44b1c1 !important;
border-color: #44b1c1;
}
.goods-page-price strong,
.goods-page-total strong,
.checkout-price strong,
.checkout-total strong {
color: #44b1c1;
}
.shopping-total strong,
.checkout-total-block strong {
color: #44b1c1;
}
.compare-item strong {
color: #44b1c1;
}
.sidebar-products .price {
color: #44b1c1;
}
.price-availability-block .price strong {
color: #44b1c1;
}
.require {
color: #44b1c1;
}
.content-form-page .form-control:focus {
border: solid 1px #44b1c1;
}
.content-search input:focus {
border: solid 1px #44b1c1;
}
.btn-primary {
background: #44b1c1;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
background: #44b1c1;
}
.header-navigation .dropdown-menu > li:first-child {
border-top: 2px solid #44b1c1;
}
.front-steps-wrapper .front-step1:after {
border-left: 15px solid #69C0CD;
}
.del-goods:hover,
.add-goods:hover {
background-color: #69C0CD;
}
.sidebar a:hover > .fa-angle-down {
background-position: -55px 0;
}
.sidebar .collapsed:hover > .fa-angle-down {
background-position: -55px -37px;
}
.top-cart-content {
border-top: solid 2px #69C0CD;
}
.front-skills .progress-bar {
background: #69C0CD;
}
.service-box-v1:hover {
background: #69C0CD;
}
.header .mobi-toggler:hover {
background-color: #69C0CD;
border-color: #69C0CD;
}
@media (max-width: 1024px) {
.header .header-navigation li > a:hover,
.header .header-navigation li.active > a,
.header .header-navigation li.open > a:hover {
color: #69C0CD !important;
}
}
.faq-tabbable {
border-left: solid 2px #69C0CD;
}
.faq-tabbable li:hover a,
.faq-tabbable li.active a{
background: #69C0CD;
}
.faq-tabbable li.active:after {
border-left: 6px solid #69C0CD;
}
.mix-filter li:hover, .mix-filter li.active {
background: #69C0CD;
color: #fff;
}
.mix-grid .mix .mix-details {
background: #69C0CD;
}
.mix-grid .mix a.mix-link,
.mix-grid .mix a.mix-preview {
background: #1adbd2;
}
.langs-block-others {
border-top: solid 2px #69C0CD;
}
.brands .owl-buttons .owl-prev:hover {
background-position: 18px -646px;
}
.brands .owl-buttons .owl-next:hover {
background-position: -249px -646px;
}
.header-navigation ul > li.active > a/*,
.ecommerce .header-navigation ul > li.active > a*/ {
border-bottom: 2px solid #69C0CD;
}

View File

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="en"
@section('htmlheader')
@include('metronic::layouts.partials.htmlheader')
@show
<body class="corporate">
<div id="app">
<div class="wrapper">
@include('metronic::layouts.partials.mainheader')
@include('metronic::layouts.partials.sidebar')
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
@include('metronic::layouts.partials.contentheader')
<!-- Main content -->
<section class="content">
<!-- Your Page Content Here -->
<div class="main">
<div class="container">
@yield('breadcrumb')
</div>
@yield('main-content')
</div>
</section><!-- /.content -->
</div><!-- /.content-wrapper -->
@include('metronic::layouts.partials.controlsidebar')
@include('metronic::layouts.partials.footer')
</div><!-- ./wrapper -->
</div> <!-- ./app -->
@section('scripts')
@include('metronic::layouts.partials.scripts')
@yield('page-scripts')
@show
</body>
</html>

View File

@ -0,0 +1,99 @@
{{-- This page needs $site_social --}}
<!-- BEGIN PRE-FOOTER -->
<div class="pre-footer">
<div class="container">
<div class="row">
<!-- BEGIN BOTTOM ABOUT BLOCK -->
<div class="col-md-4 col-sm-6 pre-footer-col">
@isset($site->site_aboutus))
<h2>About us</h2>
<p>{!! $site->site_aboutus !!}</p>
<!--
<div class="photo-stream">
<h2>Photos Stream</h2>
<ul class="list-unstyled">
<li><a href="javascript:;"><img alt="" src="{{!! Theme::url('/') !!}}"></a></li>
</ul>
</div>
-->
@endisset
</div>
<!-- END BOTTOM ABOUT BLOCK -->
<!-- BEGIN BOTTOM CONTACTS -->
<div class="col-md-offset-5 col-md-3 col-sm-6 pre-footer-col">
<h2 style="text-align: right;">Our Contact Details</h2>
<address class="margin-bottom-40" style="float: right;">
<table>
<tr><th style="vertical-align:top; padding-right: 5px;">Address</th><td>{!! join('<br>',$site->address) !!}</td></tr>
@isset($site->site_fax)
<tr><th>Fax</th><td>{{ $site->site_fax }}</tr>
@endif
<tr><th>Email</th><td> <a href="mailto:{{ $site->site_email }}">{{ $site->site_email }}</a></tr>
</table>
</address>
<!--
<div class="pre-footer-subscribe-box pre-footer-subscribe-box-vertical">
<h2>Newsletter</h2>
<p>Subscribe to our newsletter and stay up to date with the latest news and deals!</p>
<form action="#">
<div class="input-group">
<input type="text" placeholder="youremail@mail.com" class="form-control">
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">Subscribe</button>
</span>
</div>
</form>
</div>
-->
</div>
<!-- END BOTTOM CONTACTS -->
<!-- BEGIN TWITTER BLOCK -->
<!--
<div class="col-md-4 col-sm-6 pre-footer-col">
<h2 class="margin-bottom-0">Latest Tweets</h2>
<a class="twitter-timeline" href="https://twitter.com/twitterapi" data-tweet-limit="2" data-theme="dark" data-link-color="#57C8EB" data-widget-id="" data-chrome="noheader nofooter noscrollbar noborders transparent">Loading tweets...</a>
</div>
-->
<!-- END TWITTER BLOCK -->
<!-- BEGIN ADDRESS MAP -->
{{-- @todo --}}
<!-- END ADDRESS MAP -->
</div>
</div>
</div>
<!-- END PRE-FOOTER -->
<!-- BEGIN FOOTER -->
<div class="footer">
<div class="container">
<div class="row">
<!-- BEGIN COPYRIGHT -->
<div class="col-md-4 col-sm-4 padding-top-10">
{{ \Carbon\Carbon::now()->year }} © Leenooks. ALL Rights Reserved. <!-- <a href="javascript:;">Privacy Policy</a> | <a href="javascript:;">Terms of Service</a> -->
</div>
<!-- END COPYRIGHT -->
<!-- BEGIN SOCIAL -->
<div class="col-md-4 col-sm-4">
<ul class="social-footer list-unstyled list-inline pull-right">
@foreach ($site->social as $social)
<li><a href="{{ $social['url'] }}"><i class="fab fa-{{ $social['name'] }}"></i></a></li>
@endforeach
</ul>
</div>
<!-- END SOCIAL -->
<!-- BEGIN POWERED -->
<div class="col-md-4 col-sm-4 text-right">
<p class="powered">Powered by: <a href="http://www.leenooks.net/">leenooks</a></p>
</div>
<!-- END POWERED -->
</div>
</div>
</div>
<!-- END FOOTER -->

View File

@ -0,0 +1,38 @@
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>{{ config('app.name') }} - @yield('htmlheader_title','Your title here')</title>
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Font Awesome Icons -->
<link rel="stylesheet" href="//use.fontawesome.com/releases/v5.15.3/css/all.css">
{{--
<link rel="stylesheet" href="//use.fontawesome.com/releases/v5.15.3/css/v4-shims.css">
--}}
<!-- Theme style -->
<link rel="stylesheet" href="{{ asset('theme/frontend/metronic/css/components.css') }}">
<link rel="stylesheet" href="{{ asset('theme/frontend/metronic/css/style.css') }}">
<link rel="stylesheet" href="{{ asset('theme/frontend/metronic/css/style-responsive.css') }}">
<link rel="stylesheet" href="{{ asset('theme/frontend/metronic/css/themes/blue.css') }}">
<!-- Google Font: Source Sans Pro -->
<link href="//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700|PT+Sans+Narrow|Source+Sans+Pro:200,300,400,600,700,900&amp;subset=all" rel="stylesheet" type="text/css">
<meta property="og:site_name" content="{{ config('app.name') }}" />
<meta property="og:title" content="{{ $site->site_name }}" />
<meta property="og:description" content="{{ $site->site_description }}" />
<meta property="og:type" content="website" />
<meta property="og:image" content="{{ $site->site_logo }}" />
<meta property="og:url" content="{{ url('/') }}" />
<link rel="shortcut icon" href="{{ object_get($site,'favicon','favicon.ico') }}" />
<!-- Custom CSS -->
<link rel="stylesheet" href="{{ asset('theme/frontend/metronic/css/custom.css') }}">
@yield('page-styles')
</head>

View File

@ -0,0 +1,81 @@
<!-- BEGIN TOP BAR -->
<div class="pre-header">
<div class="container">
<div class="row">
<!-- BEGIN TOP BAR LEFT PART -->
<div class="col-md-6 col-sm-6 additional-shop-info">
<ul class="list-unstyled list-inline">
<li><i class="fas fa-phone mr-4"></i><span>{!! $site->site_phone !!}</span></li>
<li><i class="fas fa-envelope mr-4"></i><span>{!! $site->site_email !!}</span></li>
</ul>
</div>
<!-- END TOP BAR LEFT PART -->
<!-- BEGIN TOP BAR MENU -->
<div class="col-md-6 col-sm-6 additional-nav">
<ul class="list-unstyled list-inline pull-right">
<li><a href="{{ url('home') }}">Log In</a></li>
@isset($register)
<li><a href="{{ url('register') }}">Registration</a></li>
@endisset
</ul>
</div>
<!-- END TOP BAR MENU -->
</div>
</div>
</div>
<!-- END TOP BAR -->
<!-- BEGIN HEADER -->
<div class="header">
<div class="container">
<a class="site-logo" href="{{ url('/') }}"><img src="{{ $site->site_logo }}" alt="{{ $site->site_description }}" height="32"></a>
<a href="javascript:void(0);" class="mobi-toggler"><i class="fa fa-bars"></i></a>
<!-- BEGIN NAVIGATION -->
<div class="header-navigation pull-right font-transform-inherit">
<ul>
{{-- @todo Replace this with a function that can traverse children with multiple depths --}}
@foreach ($site->top_menu as $item => $menu)
<li class="dropdown {{ Request::is($menu['url']) ? 'active' : '' }}">
@if (! \Illuminate\Support\Arr::get($menu,'children'))
<a {{ Request::is($menu['url']) ? 'class=active' : '' }} href="{{ url($menu['url']) }}">{{ $menu['name'] }}</a>
@else
<a class="dropdown-toggle" data-toggle="dropdown" data-target="#" href="javascript:;">{{ $item }}</a>
<ul class="dropdown-menu">
<li {{ (Request::is($menu['url']) ? 'class=active' : '') }}><a href="{{ url($menu['url']) }}">{{ $menu['name'] }}</a></li>
@foreach($menu['children'] as $name => $menuitem)
<li {{ (Request::is($menuitem['url']) ? 'class=active' : '') }}><a href="{{ url($menuitem['url']) }}">{{ $menuitem['name'] }}</a></li>
@endforeach
</ul>
@endif
</li>
@endforeach
<!-- BEGIN TOP SEARCH -->
@isset($search_enabled)
<li class="menu-search">
<span class="sep"></span>
<i class="fa fa-search search-btn"></i>
<div class="search-box">
<form action="#">
<div class="input-group">
<input type="text" placeholder="Search" class="form-control">
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">Search</button>
</span>
</div>
</form>
</div>
</li>
@endisset
<!-- END TOP SEARCH -->
</ul>
</div>
<!-- END NAVIGATION -->
</div>
</div>
<!-- Header END -->

View File

@ -0,0 +1,22 @@
<!-- REQUIRED JS SCRIPTS -->
<!-- Bootstrap & Jquery App -->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"></script>
<script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
@if(file_exists('plugin/back-to-top/back-to-top.js'))
<script src="{{ asset('plugin/back-to-top/back-to-top.js') }}"></script>
@endif
<script type="text/javascript">
// Our CSRF token to each interaction
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
</script>
@if(file_exists('js/custom.js'))
<!-- Any Custom JS -->
<script type="text/javascript" src="{{ asset('js/custom.js') }}"></script>
@endif

View File

@ -13,17 +13,40 @@ class Carbon extends CarbonBase
{
const MONTHS_PER_HALF = 6;
public function __get($name)
public function __get(string $name): mixed
{
switch (true) {
case $name === 'half':
switch ($name) {
case 'half':
return (int) ceil($this->month / static::MONTHS_PER_HALF);
case 'quarter_string':
return sprintf('%dQ%d',$this->year,$this->quarter);
default:
return parent::__get($name);
}
}
public function addHalf(): self
{
return $this->addHalves(1);
}
public function addHalves(int $unit): self
{
return $this->addQuarters(2*$unit);
}
public function subHalf(): self
{
return $this->subHalves(1);
}
public function subHalves(int $unit): self
{
return $this->subQuarters(2*$unit);
}
/**
* Modify to the first occurrence of a given day of the week
* in the current quarter. If no dayOfWeek is provided, modify to the
@ -34,8 +57,8 @@ class Carbon extends CarbonBase
*
* @return static
*/
public function firstOfHalf($dayOfWeek = null)
{
public function startOfHalf(int $dayOfWeek=NULL)
{
return $this->setDate($this->year, $this->half * static::MONTHS_PER_HALF - 5, 1)->firstOfMonth($dayOfWeek);
}
@ -49,8 +72,8 @@ class Carbon extends CarbonBase
*
* @return static
*/
public function lastOfHalf($dayOfWeek = null)
{
public function endOfHalf(int $dayOfWeek=NULL)
{
return $this->setDate($this->year, $this->half * static::MONTHS_PER_HALF, 1)->lastOfMonth($dayOfWeek);
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace Leenooks\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
use Leenooks\Carbon;
class LeenooksCarbon implements CastsAttributes
{
/**
* Cast the given value.
*
* @param array<string, mixed> $attributes
*/
public function get(Model $model, string $key, mixed $value, array $attributes): ?Carbon
{
return $value ? Carbon::create($value) : NULL;
}
/**
* Prepare the given value for storage.
*
* @param array<string, mixed> $attributes
*/
public function set(Model $model, string $key, mixed $value, array $attributes): string|null
{
return ($value instanceof Carbon ? $value : $this->get($model,$key,$value,$attributes))?->format('Y-m-d H:i:s');
}
}

View File

@ -1,66 +0,0 @@
<?php
namespace Leenooks\Commands;
use Illuminate\Console\Command;
use Illuminate\Console\Scheduling\Schedule;
class ScheduleList extends Command
{
protected $signature = 'schedule:list';
protected $description = 'List when scheduled commands are executed.';
/**
* @var Schedule
*/
protected $schedule;
/**
* ScheduleList constructor.
*
* @param Schedule $schedule
*/
public function __construct(Schedule $schedule)
{
parent::__construct();
$this->schedule = $schedule;
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$events = array_map(function ($event) {
return [
'cron' => $event->expression,
'command' => static::fixupCommand($event->command),
];
}, $this->schedule->events());
$this->table(
['Cron', 'Command'],
$events
);
}
/**
* If it's an artisan command, strip off the PHP
*
* @param $command
* @return string
*/
protected static function fixupCommand($command)
{
$parts = explode(' ', $command);
if (count($parts) > 2 && $parts[1] === "'artisan'") {
array_shift($parts);
}
return implode(' ', $parts);
}
}

View File

@ -1,57 +0,0 @@
<?php
namespace Leenooks\Controllers;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use Redirect;
use Session;
use App\User;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function switch_authorised()
{
return Auth::user()->isAdmin ? TRUE : FALSE;
}
public function switch_session()
{
return ! Session::get('orig_user');
}
/**
* @todo Change the background color (or something) so we know we are switched
*/
public function user_switch_start($id)
{
if ($this->switch_session() AND $this->switch_authorised())
{
$uo = User::find($id);
if (! $uo)
abort(404,'User not found');
Session::put('orig_user',Auth::id());
Auth::login($uo);
}
return Redirect::to('/home');
}
public function user_switch_stop()
{
if ($id = Session::pull('orig_user')) {
$uo = User::find($id);
Auth::login($uo);
}
return Redirect::to('/home');
}
}

View File

@ -0,0 +1,61 @@
<?php
namespace Leenooks\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Redirect;
use Session;
use App\Models\User;
class SwitchUserController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
/**
* Determine if the user is authorised to switch to another user
*
* @param User $user
* @return bool
*/
public function switch_authorised(User $user): bool
{
return (method_exists(Auth::user(),'isAdmin') && Auth::user()->isAdmin($user)) ? TRUE : FALSE;
}
/**
* Switch to a different user
*
* @param User $user
* @return mixed
*/
public function switch_start(User $user)
{
if ($user->switched)
abort(403,'User already switched');
if ($this->switch_authorised($user)) {
Session::put('orig_user',Auth::user());
Auth::login($user);
}
return Redirect::to('/home');
}
/**
* Return back from the switch users
*
* @return mixed
*/
public function switch_stop()
{
if ($user = Session::pull('orig_user'))
Auth::login($user);
return Redirect::to('/home');
}
}

29
src/GuestUser.php Normal file
View File

@ -0,0 +1,29 @@
<?php
namespace Leenooks;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class GuestUser extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}

View File

@ -0,0 +1,26 @@
<?php
namespace Leenooks\Http\Middleware;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ActiveUser
{
/**
* Handle an incoming request.
*
* @param Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request,\Closure $next)
{
if ((! Auth::user()?->exists) || (! Auth::user()->active)) {
Auth::logout();
abort(403,'Your account is not active');
}
return $next($request);
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace Leenooks\Http\Middleware;
use Closure;
/**
* Class GuestUser
* @package Leenooks\Laravel\Http\Middleware
*/
class GuestUser
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
view()->share('loggedin',auth()->check());
view()->share('user', auth()->user() ?: new \Leenooks\GuestUser);
return $next($request);
}
}

213
src/PageAssets.php Normal file
View File

@ -0,0 +1,213 @@
<?php
namespace Leenooks;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
/**
* Useful tools (js/css) used when rendering pages
*/
class PageAssets
{
// Types that we can handle
private const array types = [
'css',
'js',
];
public const array assets = [
'datatables' => [
'base' => [
'css' => [
'//cdn.datatables.net/2.1.2/css/dataTables.bootstrap4.css',
//'//cdn.datatables.net/2.1.2/css/dataTables.dataTables.min.css',
],
'js' => [
'//cdn.datatables.net/2.1.2/js/dataTables.min.js',
'//cdn.datatables.net/2.1.2/js/dataTables.bootstrap4.min.js',
],
],
'buttons' => [
'css' => [
'//cdn.datatables.net/buttons/3.1.0/css/buttons.bootstrap4.min.css',
//'//cdn.datatables.net/buttons/3.1.0/css/buttons.dataTables.min.css',
],
'js' => [
'//cdn.datatables.net/buttons/3.1.0/js/dataTables.buttons.min.js',
//'//cdn.datatables.net/buttons/3.1.0/js/buttons.dataTables.min.js',
'//cdn.datatables.net/buttons/3.1.0/js/buttons.bootstrap4.min.js',
'//cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js',
],
],
'conditionalpaging' => [
'js' => [
'//cdn.datatables.net/plug-ins/2.0.5/features/conditionalPaging/dataTables.conditionalPaging.min.js',
],
],
'fixedheader' => [
'css' => [
'//cdn.datatables.net/fixedheader/4.0.1/css/fixedHeader.bootstrap4.min.css',
//'//cdn.datatables.net/fixedheader/4.0.1/css/fixedHeader.dataTables.min.css',
],
'js' => [
'//cdn.datatables.net/fixedheader/4.0.1/js/dataTables.fixedHeader.min.js',
//'//cdn.datatables.net/fixedheader/4.0.1/js/fixedHeader.dataTables.min.js',
'//cdn.datatables.net/fixedheader/4.0.1/js/fixedHeader.bootstrap4.min.js',
]
],
'responsive' => [
'css' => [
'//cdn.datatables.net/responsive/3.0.2/css/responsive.bootstrap4.min.css',
//'//cdn.datatables.net/responsive/3.0.2/css/responsive.dataTables.min.css',
],
'js' => [
'//cdn.datatables.net/responsive/3.0.2/js/dataTables.responsive.min.js',
//'//cdn.datatables.net/responsive/3.0.2/js/responsive.bootstrap.min.js',
'//cdn.datatables.net/responsive/3.0.2/js/responsive.bootstrap4.min.js',
]
],
'rowgroup' => [
'css' => [
'//cdn.datatables.net/rowgroup/1.5.0/css/rowGroup.bootstrap4.min.css',
//'//cdn.datatables.net/rowgroup/1.5.0/css/rowGroup.dataTables.min.css',
],
'js' => [
'//cdn.datatables.net/rowgroup/1.5.0/js/dataTables.rowGroup.min.js',
//'//cdn.datatables.net/rowgroup/1.5.0/js/rowGroup.dataTables.min.js',
'//cdn.datatables.net/rowgroup/1.5.0/js/rowGroup.bootstrap4.min.js',
],
],
'searchpanes' => [
'css' => [
'//cdn.datatables.net/searchpanes/2.3.1/css/searchPanes.bootstrap4.min.css',
//'//cdn.datatables.net/searchpanes/2.3.1/css/searchPanes.dataTables.min.css',
],
'js' => [
'//cdn.datatables.net/searchpanes/2.3.1/js/dataTables.searchPanes.min.js',
//'//cdn.datatables.net/searchpanes/2.3.1/js/searchPanes.dataTables.min.js',
'//cdn.datatables.net/searchpanes/2.3.1/js/searchPanes.bootstrap4.min.js',
],
],
'searchpanes-left' => [
'css' => [
'/plugin/dataTables/leftSearchPanes.css',
],
],
'select' => [
'css' => [
'//cdn.datatables.net/select/2.0.3/css/select.bootstrap4.min.css',
//'//cdn.datatables.net/select/2.0.3/css/select.dataTables.min.css',
],
'js' => [
'//cdn.datatables.net/select/2.0.3/js/dataTables.select.min.js',
//'//cdn.datatables.net/select/2.0.3/js/select.dataTables.min.js',
'//cdn.datatables.net/select/2.0.3/js/select.bootstrap4.min.js',
]
],
],
'select2' => [
'base' => [
'css' => [
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css',
],
'js' => [
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js',
],
],
'autofocus' => [
'js' => [
'/plugin/select2/fix-autofocus.js',
],
]
],
'simplemde' => [
'base' => [
'css' => [
'//cdn.jsdelivr.net/simplemde/latest/simplemde.min.css',
],
'js' => [
'//cdn.jsdelivr.net/simplemde/latest/simplemde.min.js',
],
],
],
];
// Items to manage
public static Collection $items;
// Add an item to the list
public static function add(string $type,Collection|array|string $asset): void
{
if (! in_array($type,self::types))
throw new \Exception('Invalid type: '.$type);
if (! isset(self::$items))
self::init();
if (is_string($asset))
self::$items
->get($type)
->push($asset)
->unique();
else
self::$items->put($type,
self::$items
->get($type)
->merge($asset->values())
->unique());
}
// Add a predefined asset
public static function asset(string $id): void
{
if (! isset(self::$items))
self::init();
if (str_contains($id,',')) {
[$item,$arguments] = explode(',',$id,2);
$arguments = collect(explode('|',$arguments));
} else {
$item = $id;
$arguments = collect();
}
$arguments = $arguments->prepend('base');
$asset = collect(Arr::get(self::assets,$item))->only($arguments);
foreach (self::types as $type)
if ($x=$asset->pluck($type)->filter()->flatten())
self::add($type,$x);
}
// Render the CSS items
public static function css(): string
{
return isset(self::$items)
? self::$items
->get('css')
->map(fn($item)=>sprintf('<link rel="stylesheet" href="%s">',$item))
->join('')
: '';
}
public static function init(): void
{
self::$items = collect([
'js' => collect(),
'css' => collect(),
]);
}
// Render the JS items
public static function js(): string
{
return isset(self::$items)
? self::$items
->get('js')
->map(fn($item)=>sprintf('<script type="text/javascript" src="%s"></script>',$item))
->join('')
: '';
}
}

View File

@ -0,0 +1,188 @@
<?php
namespace Leenooks\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\ServiceProvider;
class CustomBladeServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
Blade::directive('css',function(string $expression) {
return $this->resolve('css',$expression);
});
Blade::directive('js',function($expression) {
return $this->resolve('js',$expression);
});
}
private function resolve(string $content,string $expression): string
{
if (str_contains($expression,',')) {
[$type,$arguments] = explode(',',$expression,2);
$arguments = explode('|',$arguments);
} else {
$type = $expression;
$arguments = [];
}
$return = collect();
$css = collect();
$js = collect();
switch ($type) {
case 'datatables':
case 'select2':
case 'simplemde':
Log::alert(sprintf('Blade @css/@js for %s deprecicated, use @pa',$type));
break;
case 'datepick':
switch ($content) {
case 'css':
$css->put($type,'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.min.css');
break;
case 'js':
$js->put($type,'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js');
}
break;
case 'debounce':
switch ($content) {
case 'js':
$js->put($type,'js/debounce.js');
}
break;
case 'highcharts':
switch ($content) {
case 'js':
// Base
$js->put($type,'https://code.highcharts.com/highcharts.js');
foreach ($arguments as $option) {
$key = $type.':'.$option;
switch ($option) {
case '3d':
$js->put($key,'https://code.highcharts.com/highcharts-3d.js');
$js->put($key.'mouseover','/plugin/highcharts/3dmouseover.js');
break;
case 'data':
$js->put($key,'https://code.highcharts.com/modules/data.js');
break;
case 'defaults':
$js->put($key,'/plugin/highcharts/defaults.js');
break;
case 'drilldown':
$js->put($key,'https://code.highcharts.com/modules/drilldown.js');
break;
case 'export':
$js->put($key,'https://code.highcharts.com/modules/exporting.js');
$js->put($key.'data','https://code.highcharts.com/modules/export-data.js');
break;
case 'funnel':
$js->put($key,'https://code.highcharts.com/modules/funnel.js');
break;
case 'heatmap':
$js->put($key,'https://code.highcharts.com/modules/heatmap.js');
break;
case 'solidguage':
$js->put($key,'https://code.highcharts.com/highcharts-more.js');
$js->put($key.'accessiblity','https://code.highcharts.com/modules/accessibility.js');
$js->put($key.'solid-guage','https://code.highcharts.com/modules/solid-gauge.js');
break;
case 'theme-dark':
$js->put($key,'https://code.highcharts.com/themes/dark-unica.js');
break;
default:
throw new \Exception(sprintf('Unknown [%s] option: [%s:%s]',$type,$content,$option));
}
}
}
break;
case 'highcharts-stock':
switch ($content) {
case 'js':
// Base
$js->put($type,'https://code.highcharts.com/stock/highstock.js');
foreach ($arguments as $option) {
$key = $type.':'.$option;
switch ($option) {
case 'data':
$js->put($key,'https://code.highcharts.com/stock/modules/data.js');
break;
case 'export':
$js->put($key,'https://code.highcharts.com/stock/modules/exporting.js');
break;
default:
throw new \Exception(sprintf('Unknown [%s] option: [%s:%s]',$type,$content,$option));
}
}
}
break;
case 'summernote':
switch ($content) {
case 'css':
// Base
$css->put($type,'https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.18/summernote-bs4.css');
break;
case 'js':
// Base
$js->put($type,'https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.18/summernote-bs4.js');
}
break;
case 'validation':
switch ($content) {
case 'js':
// Base
$js->put('validate','https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js');
$js->put('validate.additional','https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/additional-methods.min.js');
}
break;
default:
throw new \Exception(sprintf('Unknown Expression: [%s]',$expression));
}
if ($js->count())
$return = $return->merge($js->map(fn($item)=>sprintf('<script type="text/javascript" src="%s"></script>',$item)));
if ($css->count())
$return = $return->merge($css->map(fn($item)=>sprintf('<link rel="stylesheet" href="%s">',$item)));
return $return->join('');
}
}

View File

@ -2,8 +2,14 @@
namespace Leenooks\Providers;
use Illuminate\Foundation\AliasLoader;
use Illuminate\Support\Facades\Blade;
use Illuminate\Routing\Router;
use Illuminate\Support\Collection;
use Illuminate\Support\ServiceProvider;
use Leenooks\Http\Middleware\GuestUser;
use Leenooks\PageAssets;
use Leenooks\Traits\SingleOrFail;
/**
* Class GuestUserServiceProvider.
@ -12,60 +18,77 @@ use Illuminate\Support\ServiceProvider;
*/
class LeenooksServiceProvider extends ServiceProvider
{
private $_path = '';
use SingleOrFail;
/**
* Bootstrap the application services.
*
* @param Router $router
*/
public function boot(Router $router)
{
$this->loadViewsFrom($this->_path.'/resources/themes/adminlte/views/', 'adminlte');
$this->loadTranslationsFrom($this->_path.'/resources/themes/adminlte/lang/', 'adminlte_lang');
private string $_path = '';
// Enable a recusive() collection function so that we can just arrives in config/*.php
\Illuminate\Support\Collection::macro('recursive', function () {
return $this->map(function ($value) {
if (is_array($value) || is_object($value)) {
return collect($value)->recursive();
}
/**
* Bootstrap the application services.
*
* @param Router $router
*/
public function boot(Router $router)
{
self::bootSingleOrfail();
return $value;
// Custom Aliases
$loader = AliasLoader::getInstance();
$loader->alias('PageAssets',PageAssets::class);
$router->pushMiddlewareToGroup('web',GuestUser::class);
$this->loadViewsFrom($this->_path.'/resources/themes/adminlte/views/', 'adminlte');
$this->loadTranslationsFrom($this->_path.'/resources/themes/adminlte/lang/', 'adminlte_lang');
$this->loadViewsFrom($this->_path.'/resources/themes/architect/views/', 'architect');
$this->loadViewsFrom($this->_path.'/resources/themes/metronic/views/', 'metronic');
//Blade::componentNamespace('Leenooks\\Components','leenooks');
Blade::anonymousComponentPath($this->_path.'/resources/components', 'leenooks');
// Add our page assets
Blade::directive('pa',function($expression) {
return sprintf('<?php PageAssets::asset(\'%s\') ?>',$expression);
});
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
if (! $this->_path) {
$this->_path = realpath(__DIR__.'/../../');
}
}
// Enable a Collect::recursive() function
Collection::macro('recursive', function () {
return $this->map(function ($value) {
if (is_array($value) || is_object($value)) {
return collect($value)->recursive();
}
/**
* Views copy path.
*
* @return array
*/
public function views()
{
return [
$this->_path.'/resources/views/auth' =>
resource_path('views/vendor/adminlte/auth'),
$this->_path.'/resources/views/errors' =>
resource_path('views/vendor/adminlte/errors'),
$this->_path.'/resources/views/layouts' =>
resource_path('views/vendor/adminlte/layouts'),
$this->_path.'/resources/views/home.blade.php' =>
resource_path('views/vendor/adminlte/home.blade.php'),
$this->_path.'/resources/views/welcome.blade.php' =>
resource_path('views/welcome.blade.php'),
];
}
}
return $value;
});
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
if (! $this->_path) {
$this->_path = realpath(__DIR__.'/../../');
}
}
/**
* Views copy path.
*
* @return array
*/
public function views()
{
return [
$this->_path.'/resources/views/auth' => resource_path('views/vendor/adminlte/auth'),
$this->_path.'/resources/views/errors' => resource_path('views/vendor/adminlte/errors'),
$this->_path.'/resources/views/layouts' => resource_path('views/vendor/adminlte/layouts'),
$this->_path.'/resources/views/home.blade.php' => resource_path('views/vendor/adminlte/home.blade.php'),
$this->_path.'/resources/views/welcome.blade.php' => resource_path('views/welcome.blade.php'),
];
}
}

View File

@ -0,0 +1,114 @@
<?php
namespace Leenooks\Traits;
use Illuminate\Database\Eloquent\Builder;
/**
* Trait CompositeKeys
* Enable Models to have multiple primary keys
*
* Need to add to the Model...
* public $incrementing = false;
* protected $primaryKey = [<ARRAY_OF_KEYS>];
*
* @package Leenooks\Traits
*/
trait CompositeKeys {
/**
* Set the keys for a save update query.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
protected function setKeysForSaveQuery($query)
{
$keys = $this->getKeyName();
return !is_array($keys)
? parent::setKeysForSaveQuery($query)
: $query->where(function($q) use($keys) {
foreach ($keys as $key){
$q->where($key,$this->getAttribute($key));
}
});
}
/**
* Get the casts array.
*
* @return array
*/
public function getCasts()
{
if ($this->getIncrementing())
return array_merge([$this->getKeyName() => $this->getKeyType()],$this->casts);
return $this->casts;
}
/**
* @return false
*/
public function getIncrementing()
{
return FALSE;
}
/**
* Get the value of the model's primary key.
*
* @return mixed
*/
public function getKey()
{
$fields = $this->getKeyName();
$keys = [];
array_map(function($key) use(&$keys) {
$keys[] = $this->getAttribute($key);
}, $fields);
return $keys;
}
/**
* Finds model by primary keys
*
* @param array $ids
* @return mixed
*/
public static function find(array $ids)
{
$modelClass = get_called_class();
$model = new $modelClass();
$keys = $model->primaryKey;
return $model->where(function($query) use($ids,$keys) {
foreach ($keys as $idx => $key) {
if (isset($ids[$idx]))
$query->where($key, $ids[$idx]);
else
$query->whereNull($key);
}
})->first();
}
/**
* Find model by primary key or throws ModelNotFoundException
*
* @param array $ids
* @return mixed
*/
public static function findOrFail(array $ids)
{
$modelClass = get_called_class();
$model = new $modelClass();
$record = $model->find($ids);
if (! $record)
throw new ModelNotFoundException;
return $record;
}
}

View File

@ -0,0 +1,15 @@
<?php
/**
* Fix for when there is a call to pluck() for values resolved via __get()
*/
namespace Leenooks\Traits;
trait ObjectIssetFix
{
// Fix for a call to pluck('something') (which is resolved via __get()), but it returns false.
public function __isset($key)
{
return (bool)$this->{$key};
}
}

View File

@ -0,0 +1,17 @@
<?php
/**
* Add a ScopeActive to an Eloquent Model
*/
namespace Leenooks\Traits;
trait ScopeActive
{
/**
* Only query active records
*/
public function scopeActive($query)
{
return $query->where($this->getTable().'.active',TRUE);
}
}

View File

@ -0,0 +1,45 @@
<?php
/**
* Extend Eloquent so that it includes singleOrFail calls to test that a query returns only 1 record
*/
namespace Leenooks\Traits;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\ModelNotFoundException;
trait SingleOrFail
{
public static function bootSingleOrfail(): void
{
// When a query should return 1 object, or FAIL if it doesnt
Builder::macro('singleOrFail',function () {
$result = $this->get();
if (($x=$result->count()) == 1)
return $result->first();
throw new ModelNotFoundException(sprintf('Query brings back %d record(s) called for singleOrFail()',$x));
});
// When a query should return 1 object, or NULL if it doesnt
Builder::macro('single',function () {
$result = $this->get();
if ($result->count() == 1)
return $result->first();
return NULL;
});
// When a query should return 1 object, or setup to create a new object
Builder::macro('singleOrNew',function (array $args=[]) {
$result = $this->where($args)->get();
if ($result->count() == 1)
return $result->first();
return $this->newModelInstance($args);
});
}
}

View File

@ -7,15 +7,28 @@ namespace Leenooks\Traits;
use Session;
use App\Models\User;
trait UserSwitch
{
public function GetIsAdminAttribute()
{
return isset($this->admin) ? $this->admin : FALSE;
}
/**
* Return if this is a switched user
*
* @return mixed
*/
public function getSwitchedAttribute()
{
return Session::get('orig_user');
}
/**
* If the user record has an admin attribute, we'll return that
*
* @param User|null $user
* @return false|mixed
*/
public function isAdmin(User $user=NULL)
{
return isset($this->admin) ? $this->admin : FALSE;
}
}

View File

@ -12,4 +12,18 @@ if (! function_exists('is_json')) {
return (json_last_error() == JSON_ERROR_NONE);
}
}
// Inverse of array_dot()
if (! function_exists('array_undot')) {
function array_undot($dotNotationArray)
{
$array = [];
foreach ($dotNotationArray as $key => $value) {
\Illuminate\Support\Arr::set($array, $key, $value);
}
return $array;
}
}