Compare commits

...

3 Commits

Author SHA1 Message Date
462d888c03 When the session expired, automatically refresh the page with the intended desitination without the alert
All checks were successful
Create Docker Image / Test Application (x86_64) (push) Successful in 27s
Create Docker Image / Build Docker Image (x86_64) (push) Successful in 1m32s
Create Docker Image / Build Docker Image (arm64) (push) Successful in 4m32s
Create Docker Image / Final Docker Image Manifest (push) Successful in 8s
2025-03-05 21:34:22 +11:00
97d9311dff Switch to using icons when rendering a DN, and move the server icons to the topmenu 2025-03-05 21:34:22 +11:00
3510f19389 Fix search close btn and other css fixes as need after upgrading to ArchitectUI v4
All checks were successful
Create Docker Image / Test Application (x86_64) (push) Successful in 28s
Create Docker Image / Build Docker Image (x86_64) (push) Successful in 1m24s
Create Docker Image / Build Docker Image (arm64) (push) Successful in 4m32s
Create Docker Image / Final Docker Image Manifest (push) Successful in 9s
2025-03-04 15:02:48 +11:00
22 changed files with 252 additions and 265 deletions

View File

@ -3,7 +3,7 @@ run-name: ${{ gitea.actor }} Building Docker Image 🐳
on: [push] on: [push]
env: env:
DOCKER_HOST: tcp://127.0.0.1:2375 DOCKER_HOST: tcp://127.0.0.1:2375
ASSETS: 41d6948 ASSETS: 261aa07
jobs: jobs:
test: test:

45
public/css/custom.css vendored
View File

@ -27,4 +27,49 @@ div#objectClass .input-group-end:not(input.form-control) {
input.form-control.input-group-end { input.form-control.input-group-end {
border-bottom-right-radius: 4px !important; border-bottom-right-radius: 4px !important;
border-top-right-radius: 4px !important; border-top-right-radius: 4px !important;
}
.custom-tooltip-warning {
--bs-tooltip-bg: var(--bs-warning);
--bs-tooltip-color: black;
}
.custom-tooltip-danger {
--bs-tooltip-bg: var(--bs-danger);
}
.tooltip {
font-size: 85%;
}
/*
.custom-tooltip-warning .tooltip-inner {
--bs-tooltip-bg: #ffffff;
--bs-tooltip-color: var(--bs-warning);
--bs-font-size: 85%;
border: 2px solid var(--bs-warning);
border-radius: 6px;
}
.custom-tooltip-warning .tooltip-arrow::before {
--bs-tooltip-bg: var(--bs-warning);
}
.custom-tooltip-danger .tooltip-inner {
--bs-tooltip-bg: #ffffff;
--bs-tooltip-color: var(--bs-danger);
--bs-font-size: 85%;
border: 2px solid var(--bs-danger);
border-radius: 6px;
}
.custom-tooltip-danger .tooltip-arrow::before {
--bs-tooltip-bg: var(--bs-danger);
}
*/
/* hide the site icons when the search is opened */
.search-wrapper.active + .header-menu.nav {
display: none;
} }

52
public/css/fixes.css vendored
View File

@ -143,11 +143,6 @@ ul.fancytree-container ul {
opacity: 0; opacity: 0;
} }
/* Fix ellipsis icon (top right) on small display with the light background */
.closed-sidebar .app-header.header-text-light .app-header__menu .mobile-toggle-header-nav {
background: #343a40;
}
/* Hide tree when collapsed and show it when open */ /* Hide tree when collapsed and show it when open */
.sidebar-mobile-open:hover #tree, /* small */ .sidebar-mobile-open:hover #tree, /* small */
.fixed-sidebar #tree, /* wide */ .fixed-sidebar #tree, /* wide */
@ -160,12 +155,6 @@ ul.fancytree-container ul {
} }
/** Server icons **/ /** Server icons **/
.closed-sidebar .server-icon {
display: none;
}
.closed-sidebar .app-sidebar:hover .server-icon, .sidebar-mobile-open .server-icon {
display: flex;
}
.font-icon-wrapper { .font-icon-wrapper {
text-align: center; text-align: center;
border: #e9ecef solid 1px; border: #e9ecef solid 1px;
@ -181,47 +170,6 @@ ul.fancytree-container ul {
font-size: 1.2rem; font-size: 1.2rem;
} }
/*
.font-icon-wrapper {
text-align: center;
border: $gray-200 solid 1px;
@include border-radius($border-radius);
margin: 0 0 10px;
padding: 5px;
&.font-icon-lg {
float: left;
padding: 10px;
text-align: center;
margin-right: 15px;
min-width: 64px;
i {
font-size: $h1-font-size;
}
}
&:hover {
background: $gray-100;
color: $primary;
p {
color: $gray-600;
}
}
i {
font-size: ($font-size-base * 1.5);
}
p {
color: $gray-500;
font-size: calc($font-size-sm / 1.2);
margin: 5px 0 0;
}
}
*/
/** Ensure our DN menu is at the top **/ /** Ensure our DN menu is at the top **/
.app-page-title .page-title-wrapper { .app-page-title .page-title-wrapper {
align-items: start; align-items: start;

6
public/js/custom.js vendored
View File

@ -36,11 +36,11 @@ function getNode(item) {
case 404: case 404:
$('.main-content').empty().append(e.responseText); $('.main-content').empty().append(e.responseText);
break; break;
case 409: case 409: // Not in root
location.replace('/#'+item); location.replace('/#'+item);
break; break;
case 419: case 419: // Session Expired
alert('Session has expired, reloading the page and try again...'); location.replace('/#'+item);
location.reload(); location.reload();
break; break;
case 500: case 500:

View File

@ -87,7 +87,7 @@
background-color: var(--#{$prefix}btn-active-bg); background-color: var(--#{$prefix}btn-active-bg);
// Remove CSS gradients if they're enabled // Remove CSS gradients if they're enabled
background-image: if($enable-gradients, none, null); background-image: if($enable-gradients, none, null);
border-color: var(--#{$prefix}btn-active-border-color); // border-color: var(--#{$prefix}btn-active-border-color);
@include box-shadow(var(--#{$prefix}btn-active-shadow)); @include box-shadow(var(--#{$prefix}btn-active-shadow));
&:focus-visible { &:focus-visible {

View File

@ -3,10 +3,17 @@
// If you want the anchor version, it requires `href="#"`. // If you want the anchor version, it requires `href="#"`.
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
.header-text-dark:has(.btn-close) {
--#{$prefix}btn-close-color: #{$btn-close-color-dark};
--#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg-dark) };
}
.header-text-light:has(.btn-close) {
--#{$prefix}btn-close-color: #{$btn-close-color-light};
--#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg-light) };
}
.btn-close { .btn-close {
// scss-docs-start close-css-vars // scss-docs-start close-css-vars
--#{$prefix}btn-close-color: #{$btn-close-color};
--#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };
--#{$prefix}btn-close-opacity: #{$btn-close-opacity}; --#{$prefix}btn-close-opacity: #{$btn-close-opacity};
--#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity}; --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};
--#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow}; --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};

View File

@ -1703,8 +1703,11 @@ $btn-close-width: 1em !default;
$btn-close-height: $btn-close-width !default; $btn-close-height: $btn-close-width !default;
$btn-close-padding-x: .25em !default; $btn-close-padding-x: .25em !default;
$btn-close-padding-y: $btn-close-padding-x !default; $btn-close-padding-y: $btn-close-padding-x !default;
$btn-close-color: $black !default; //$btn-close-color: $black !default;
$btn-close-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>") !default; $btn-close-color-dark: $black !default;
$btn-close-color-light: $gray-100 !default;
$btn-close-bg-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color-dark}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>") !default;
$btn-close-bg-light: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color-light}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>") !default;
$btn-close-focus-shadow: $focus-ring-box-shadow !default; $btn-close-focus-shadow: $focus-ring-box-shadow !default;
$btn-close-opacity: .5 !default; $btn-close-opacity: .5 !default;
$btn-close-hover-opacity: .75 !default; $btn-close-hover-opacity: .75 !default;

View File

@ -26,20 +26,6 @@
align-items: center; align-items: center;
} }
.header-menu {
.nav-link {
color: $gray-600;
i {
color: $gray-500;
}
&:hover {
color: $gray-900;
}
}
}
.app-header-right { .app-header-right {
align-items: center; align-items: center;
display: flex; display: flex;

View File

@ -114,14 +114,6 @@
} }
} }
.app-header__mobile-menu {
.hamburger-inner,
.hamburger-inner::before,
.hamburger-inner::after {
background: $gray-800;
}
}
} }
} }

View File

@ -128,7 +128,7 @@
.hamburger-inner, .hamburger-inner,
.hamburger-inner::before, .hamburger-inner::before,
.hamburger-inner::after { .hamburger-inner::after {
background: $gray-800; background: rgba(0, 0, 0, .8);
} }
} }

View File

@ -173,6 +173,7 @@
& > .btn { & > .btn {
background: rgba(255, 255, 255, .1); background: rgba(255, 255, 255, .1);
border-color: rgba(255, 255, 255, .1); border-color: rgba(255, 255, 255, .1);
color: rgba(0, 0, 0, .9);
} }
} }
@ -448,4 +449,4 @@
} }
} }
} }
} }

View File

@ -13,20 +13,20 @@
<div class="mx-auto app-login-box col-md-8"> <div class="mx-auto app-login-box col-md-8">
<x-file-note file="login-note.html"/> <x-file-note file="login-note.html"/>
<div class="modal-dialog w-100 mx-auto"> <div class="modal-dialog modal-lg">
<div class="modal-content"> <div class="modal-content">
<form class="needs-validation" novalidate method="post"> <form class="form-control needs-validation p-0" novalidate method="post">
{{ csrf_field() }} @csrf
<div class="modal-body"> <div class="modal-body p-3">
<div class="h5 modal-title text-center"> <div class="h5 modal-title text-center">
<h4 class="mt-2"> <h4 class="mt-2">
<div class="app-logo mx-auto mb-3"><img class="w-75" src="{{ url('images/logo-h-lg.png') }}"></div> <div class="app-logo mx-auto mb-3"><img class="w-75" src="{{ url('images/logo-h-lg.png') }}"></div>
<small>@lang('Sign in to <strong>:server</strong>',['server'=>config('ldap.connections.default.name')])</small> <small>@lang('Sign in to') <strong>{{ config('server')->name }}</strong></small>
</h4> </h4>
</div> </div>
<div class="form-row"> <div class="row">
<div class="col-md-12 mt-3"> <div class="col-md-12 mt-3">
<label class="mb-1">{{ login_attr_description() }}</label> <label class="mb-1">{{ login_attr_description() }}</label>
<input name="{{ login_attr_name() }}" id="user" placeholder="" type="@if(in_array(login_attr_name(),['mail','email'])) email @else text @endif" class="form-control" required=""> <input name="{{ login_attr_name() }}" id="user" placeholder="" type="@if(in_array(login_attr_name(),['mail','email'])) email @else text @endif" class="form-control" required="">
@ -34,7 +34,9 @@
@lang('Please enter your '.strtolower(login_attr_description())) @lang('Please enter your '.strtolower(login_attr_description()))
</div> </div>
</div> </div>
</div>
<div class="row">
<div class="col-md-12 mt-2"> <div class="col-md-12 mt-2">
<label class="mb-1">@lang('Password')</label> <label class="mb-1">@lang('Password')</label>
<input name="password" id="password" placeholder="" type="password" class="form-control" required> <input name="password" id="password" placeholder="" type="password" class="form-control" required>
@ -43,21 +45,28 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="modal-footer">
@if (count($errors) > 0) @if (count($errors) > 0)
<div class="alert alert-danger w-100"> <div class="row">
<strong>Whoops!</strong> Something went wrong?<br><br> <div class="col">
<ul> <div class="alert alert-danger m-3">
@foreach ($errors->all() as $error) <strong>Whoops!</strong> Something went wrong?<br><br>
<li>{{ $error }}</li> <ul>
@endforeach @foreach ($errors->all() as $error)
</ul> <li>{{ $error }}</li>
@endforeach
</ul>
</div>
</div>
</div> </div>
@endif @endif
<div class="float-end"> </div>
<button class="btn btn-lg btn-primary">Login</button>
<div class="modal-footer p-2 border-top">
<div class="row">
<div class="col float-end">
<button class="btn btn-lg btn-primary">Login</button>
</div>
</div> </div>
</div> </div>
</form> </form>

View File

@ -6,24 +6,6 @@
<li class="nav-item"> <li class="nav-item">
<strong>{{ config('app.version') }}</strong> <strong>{{ config('app.version') }}</strong>
</li> </li>
@if(($x=Config::get('update_available')) && $x->action !== 'current')
<li class="nav-item ms-2">
@switch($x->action)
@case('unable')
<abbr title="Upstream Version Unavailable"><i class="fas fa-exclamation text-alternate"></i></abbr>
@break
@case('upgrade')
<abbr title="Update Available: {{ $x->version }}"><i class="fas fa-wrench text-danger"></i></abbr>
@break
@case('mismatch')
<abbr title="Version Issue - Upstream {{ $x->version }}"><i class="fas fa-exclamation text-danger"></i></abbr>
@break
@case('unknown')
<abbr title="Version Issue - Upstream {{ $x->version }}"><i class="fas fa-bolt text-alternate"></i></abbr>
@break
@endswitch
</li>
@endif
{{-- {{--
<li class="nav-item"> <li class="nav-item">
<a href="javascript:void(0);" class="nav-link">Footer Link</a> <a href="javascript:void(0);" class="nav-link">Footer Link</a>

View File

@ -6,61 +6,60 @@
<i class="@yield('page_icon','')"></i> <i class="@yield('page_icon','')"></i>
</div> </div>
@endif @endif
<div>
@yield('page_title','Page Title') @yield('page_title','Page Title')
<div class="page-title-subheading"> <div class="page-title-subheading">
@yield('page_subtitle','') @yield('page_subtitle','')
</div>
</div> </div>
</div> </div>
@if (isset($page_actions) || old()) <div class="page-title-actions">
<div class="page-title-actions"> <div class="row">
<div class="page-title-actions"> <div class="col">
<div class="d-inline-block dropdown"> <div class="action-buttons float-end">
<button type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="dropdown-toggle btn btn-primary"> <ul class="nav">
<span class="btn-icon-wrapper pe-2 opacity-7"> @if(isset($page_actions) && $page_actions->contains('export'))
<i class="fa fa-business-time fa-w-20"></i> <li>
</span> <span data-bs-toggle="modal" data-bs-target="#entry_export-modal">
@lang('Entry Options') <button class="btn btn-outline-dark p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Export')"><i class="fas fa-fw fa-download fs-5"></i></button>
</button> </span>
</li>
<div tabindex="-1" role="menu" aria-hidden="true" class="dropdown-menu dropdown-menu-right"> @endif
<ul class="nav flex-column"> @if(isset($page_actions) && $page_actions->contains('copy'))
@if ((isset($page_actions) && $page_actions->contains('edit')) || old()) <li>
<li class="nav-item"> <button class="btn btn-outline-dark p-1 m-1" id="entry-copy-move" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Copy/Move')"><i class="fas fa-fw fa-copy fs-5"></i></button>
<span class="nav-link pt-0 pb-1"> </li>
<button id="entry-edit" class="p-2 m-0 border-0 btn btn-transition btn-outline-dark w-100 text-start"> @endif
<i class="fas fa-fw fa-edit me-2"></i> @lang('Edit') @if((isset($page_actions) && $page_actions->contains('edit')) || old())
</button> <li>
</span> <button class="btn btn-outline-dark p-1 m-1" id="entry-edit" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Edit Entry')"><i class="fas fa-fw fa-edit fs-5"></i></button>
</li> </li>
@endif @endif
@if(isset($page_actions) && $page_actions->contains('delete'))
@if (isset($page_actions) && $page_actions->contains('export')) <li>
<li class="nav-item"> <button class="btn btn-outline-danger p-1 m-1" id="entry-delete" data-bs-custom-class="custom-tooltip-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Delete Entry')"><i class="fas fa-fw fa-trash-can fs-5"></i></button>
<a class="nav-link pt-0 pb-1"> </li>
<button type="button" class="p-2 m-0 border-0 btn btn-transition btn-outline-dark w-100 text-start" data-bs-toggle="modal" data-bs-target="#entry_export-modal"> @endif
<i class="fas fa-fw fa-file-export me-2"></i> @lang('Export') </ul>
</button>
</a>
</li>
@endif
@if (isset($page_actions) && $page_actions->contains('copy'))
<li class="nav-item">
<a class="nav-link pt-0 pb-1">
<button class="p-2 m-0 border-0 btn btn-transition btn-outline-dark w-100 text-start">
<i class="fas fa-fw fa-truck-moving me-2"></i> @lang('Copy or Move')
</button>
</a>
</li>
@endif
</ul>
</div>
</div> </div>
</div> </div>
</div> </div>
@endif </div>
</div> </div>
</div> </div>
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
console.log($('button[id=entry-edit]'));
$('button[id=entry-edit]').on('click',function(item) {
item.preventDefault();
if ($(this).hasClass('btn-dark'))
return;
editmode();
});
});
</script>
@append

View File

@ -33,23 +33,6 @@
<div class="app-sidebar__inner"> <div class="app-sidebar__inner">
<ul class="vertical-nav-menu"> <ul class="vertical-nav-menu">
<li class="app-sidebar__heading">{{ config('server')->name }}</li> <li class="app-sidebar__heading">{{ config('server')->name }}</li>
<li>
<div class="font-icon-wrapper float-start me-1 server-icon">
<a class="p-0 m-0" href="{{ url('info') }}" onclick="return false;" style="display: contents;"><i class="fas fa-fw fa-info"></i></a>
</div>
<div class="font-icon-wrapper float-start ms-1 me-1 server-icon">
<a class="p-0 m-0" href="{{ url('schema') }}" onclick="return false;" style="display: contents;"><i class="fas fa-fw fa-fingerprint"></i></a>
</div>
<div class="font-icon-wrapper float-start ms-1 me-1 server-icon">
<a class="p-0 m-0" href="{{ url('import') }}" onclick="return false;" style="display: contents;"><i class="fas fa-fw fa-upload"></i></a>
</div>
@env(['local'])
<div class="font-icon-wrapper float-end ms-1 server-icon">
<a class="p-0 m-0" href="{{ url('debug') }}" onclick="return false;" style="display: contents;"><i class="fas fa-fw fa-toolbox"></i></a>
</div>
@endenv
<div class="clearfix"></div>
</li>
<li> <li>
<i id="treeicon" class="metismenu-icon fa-fw fas fa-sitemap"></i> <i id="treeicon" class="metismenu-icon fa-fw fas fa-sitemap"></i>
<span class="f16" id="tree"></span> <span class="f16" id="tree"></span>
@ -57,39 +40,4 @@
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
$('.server-icon > a').on('click',function(item) {
var content;
$.ajax({
url: $(this).attr('href'),
method: 'GET',
dataType: 'html',
statusCode: {
404: function() {
$('.main-content').empty().append(content);
}
},
beforeSend: function() {
content = $('.main-content').contents();
$('.main-content').empty().append('<div class="fa-3x"><i class="fas fa-spinner fa-pulse"></i></div>');
}
}).done(function(html) {
$('.main-content').empty().append(html);
}).fail(function() {
alert('Well that didnt work?');
});
item.stopPropagation();
return false;
});
});
</script>
@append

View File

@ -39,21 +39,67 @@
<button class="btn-close"></button> <button class="btn-close"></button>
</div> </div>
<ul class="header-menu nav"> <ul class="header-menu nav server-icon">
{{-- <li>
<li class="nav-item"> <button id="link-info" class="btn btn-light p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Server Info')" data-link="{{ url('info') }}">
<a href="javascript:void(0);" class="nav-link"> <i class="fas fa-fw fa-info fs-5"></i>
<i class="nav-link-icon fas fa-database"></i> Link </button>
</a> </li>
<li>
<button id="link-schema" class="btn btn-light p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Schema Viewer')" data-link="{{ url('schema') }}">
<i class="fas fa-fw fa-fingerprint fs-5"></i>
</button>
</li>
<li>
<button id="link-import" class="btn btn-light p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Import')" data-link="{{ url('import') }}">
<i class="fas fa-fw fa-upload fs-5"></i>
</button>
</li>
<li>
<button id="link-debug" class="btn btn-light p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="@lang('Debug')" data-link="{{ url('debug') }}">
<i class="fas fa-fw fa-toolbox fs-5"></i>
</button>
</li> </li>
--}}
</ul> </ul>
</div> </div>
<div class="app-header-right"> <div class="app-header-right">
@if(! request()->isSecure()) <ul class="header-menu nav">
<span class="badge bg-danger">WARNING - SESSION NOT SECURE</span> @if(! request()->isSecure())
@endif <li>
<button class="btn btn-danger p-1 m-1" data-bs-custom-class="custom-tooltip-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="WARNING - SESSION NOT SECURE">
<i class="fas fa-fw fa-unlock-keyhole fs-5"></i>
</button>
</li>
@endif
@if(($x=Config::get('update_available')) && $x->action !== 'current')
<li>
@switch($x->action)
@case('unable')
<button class="btn btn-light opacity-2 p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Upstream Version Unavailable">
<i class="fas fa-fw fa-bolt fs-5"></i>
</button>
@break
@case('upgrade')
<button class="btn btn-warning p-1 m-1" data-bs-custom-class="custom-tooltip-warning" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-html="true" title="Update Available:<br>{{ $x->version }}">
<i class="fas fa-fw fa-wrench fs-5"></i>
</button>
@break
@case('mismatch')
<button class="btn btn-light opacity-2 p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-html="true" title="Version Issue - Upstream<br>{{ $x->version }}">
<i class="fas fa-fw fa-exclamation fs-5"></i>
</button>
@break
@case('unknown')
<button class="btn btn-light opacity-2 p-1 m-1" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-html="true" title="Version Issue - Unknown<br>{{ $x->version }}">
<i class="fas fa-fw fa-question fs-5"></i>
</button>
@break
@endswitch
</li>
@endif
</ul>
<div class="header-btn-lg pe-0"> <div class="header-btn-lg pe-0">
<div class="widget-content p-0"> <div class="widget-content p-0">
@ -112,3 +158,38 @@
</div> </div>
</div> </div>
</div> </div>
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
$('button[id^="link-"]').on('click',function(item) {
var content;
$.ajax({
url: $(this).data('link'),
method: 'GET',
dataType: 'html',
statusCode: {
404: function() {
$('.main-content').empty().append(content);
}
},
beforeSend: function() {
content = $('.main-content').contents();
$('.main-content').empty().append('<div class="fa-3x"><i class="fas fa-spinner fa-pulse"></i></div>');
}
}).done(function(html) {
$('.main-content').empty().append(html);
}).fail(function() {
alert('Well that didnt work?');
});
item.stopPropagation();
return false;
});
});
</script>
@append

View File

@ -22,7 +22,7 @@
<div class="row"> <div class="row">
<div class="offset-1 col-4 p-2"> <div class="offset-1 col-4 p-2">
<span class="p-0 m-0"> <span class="p-0 m-0">
<button type="button" class="btn btn-transition btn-sm btn-outline-dark mt-3" data-bs-toggle="modal" data-bs-target="#userpassword_check-modal"><i class="fas fa-user-check"></i> @lang('Check Password')</button> <button type="button" class="btn btn-sm btn-outline-dark mt-3" data-bs-toggle="modal" data-bs-target="#userpassword_check-modal"><i class="fas fa-user-check"></i> @lang('Check Password')</button>
</span> </span>
</div> </div>
</div> </div>

View File

@ -3,7 +3,7 @@
<td class="{{ ($x=$o->getObject('jpegphoto')) ? 'border' : '' }}" rowspan="2"> <td class="{{ ($x=$o->getObject('jpegphoto')) ? 'border' : '' }}" rowspan="2">
{!! $x ? $x->render(FALSE,TRUE) : sprintf('<div class="page-title-icon f32"><i class="%s"></i></div>',$o->icon() ?? "fas fa-info") !!} {!! $x ? $x->render(FALSE,TRUE) : sprintf('<div class="page-title-icon f32"><i class="%s"></i></div>',$o->icon() ?? "fas fa-info") !!}
</td> </td>
<td class="text-end align-text-top p-0 {{ $x ? 'ps-5' : 'pt-2' }}"><strong>{{ $o->getDn() }}</strong></td> <td class="text-end align-text-top p-0 pt-2 pe-3 {{ $x ? 'ps-5' : '' }}"><strong>{{ $o->getDn() }}</strong></td>
</tr> </tr>
<tr> <tr>
<td class="line-height-1" style="font-size: 55%;vertical-align: bottom;" colspan="2"> <td class="line-height-1" style="font-size: 55%;vertical-align: bottom;" colspan="2">

View File

@ -25,7 +25,7 @@
@switch($step) @switch($step)
@case(1) @case(1)
<div class="row"> <div class="row">
<div class="col-12 col-sm-6"> <div class="col-12 col-md-6">
<x-form.select <x-form.select
id="objectclass" id="objectclass"
name="objectclass[]" name="objectclass[]"
@ -54,7 +54,7 @@
</form> </form>
<div class="row d-none pt-3"> <div class="row d-none pt-3">
<div class="col-12 {{ $step > 1 ? 'offset-sm-2' : '' }} col-sm-4 col-lg-2"> <div class="col-12 {{ $step > 1 ? 'offset-sm-2' : '' }} col-lg-10">
<x-form.reset form="dn-create"/> <x-form.reset form="dn-create"/>
<x-form.submit action="Next" form="dn-create"/> <x-form.submit action="Next" form="dn-create"/>
</div> </div>

View File

@ -149,7 +149,9 @@
function editmode() { function editmode() {
$('#dn-edit input[name="dn"]').val(dn); $('#dn-edit input[name="dn"]').val(dn);
$('button[id=entry-edit]').addClass('active').removeClass('btn-outline-dark').addClass('btn-outline-light'); $('button[id=entry-edit]')
.removeClass('btn-outline-dark')
.addClass('btn-dark');
// Find all input items and turn off readonly // Find all input items and turn off readonly
$('input.form-control').each(function() { $('input.form-control').each(function() {
@ -201,15 +203,6 @@
$('#newattr-select').remove(); $('#newattr-select').remove();
}); });
$('button[id=entry-edit]').on('click',function(item) {
item.preventDefault();
if ($(this).hasClass('active'))
return;
editmode();
});
$('#entry_export-download').on('click',function(item) { $('#entry_export-download').on('click',function(item) {
item.preventDefault(); item.preventDefault();

View File

@ -48,23 +48,11 @@
var subpage = window.location.hash; var subpage = window.location.hash;
$(document).ready(function() { $(document).ready(function() {
// Enable navigating to a page via a URL fragment, and that fragment is defined with a server-icon
if (subpage) { if (subpage) {
// Enable navigating to a page via a URL fragment, and that fragment is defined with a server-icon // Clear the hash
var valid = Object.values($('.server-icon > a').map(function() { history.replaceState(null,null,' ');
return $(this).attr('id'); getNode(subpage.substring(1));
})).indexOf(subpage.substring(1));
if (valid !== -1) {
// @todo this condition can probably be removed
console.log('teleporting...:'+subpage.substring(1));
// The click() event wont have been registered yet, so we need to delay us clicking it
setTimeout(function() { $(subpage).click(); },250);
} else if (valid === -1) {
// Clear the hash
history.replaceState(null,null,' ');
getNode(subpage.substring(1));
}
} }
}); });
</script> </script>

View File

@ -12,4 +12,9 @@
@yield('page-modals') @yield('page-modals')
@yield('page-scripts') @yield('page-scripts')
@yield('page-styles') @yield('page-styles')
<!-- Initialise any ajax tool tip attributes -->
<script type="text/javascript">
$('[data-bs-toggle="tooltip"]').tooltip();
</script>