Improved handling for Kerberous attributes - closes #154
This commit is contained in:
106
resources/views/components/attribute/krbticketflags.blade.php
Normal file
106
resources/views/components/attribute/krbticketflags.blade.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<!-- $o=KrbTicketFlags::class -->
|
||||
<x-attribute.layout :edit="$edit ?? FALSE" :new="$new ?? FALSE" :o="$o">
|
||||
@foreach(($o->values->count() ? $o->values : ($new ? [0] : NULL)) as $value)
|
||||
@if($edit)
|
||||
<div id="32"></div>
|
||||
<div id="16"></div>
|
||||
|
||||
<div class="input-group has-validation mb-3">
|
||||
<input type="hidden" @class(['form-control','is-invalid'=>($e=$errors->get($o->name_lc.'.'.$loop->index)),'mb-1','border-focus'=>$o->values->contains($value)]) name="{{ $o->name_lc }}[]" value="{{ $value }}" @readonly(true)>
|
||||
|
||||
<div class="invalid-feedback pb-2">
|
||||
@if($e)
|
||||
{{ join('|',$e) }}
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
{{ $value }}
|
||||
@endif
|
||||
@endforeach
|
||||
</x-attribute.layout>
|
||||
|
||||
@section($o->name_lc.'-scripts')
|
||||
<script type="text/javascript">
|
||||
var value = {{ $value ?? 0 }};
|
||||
var label = {!! $helper !!};
|
||||
|
||||
function tooltip(bit) {
|
||||
if (bit === undefined)
|
||||
return;
|
||||
|
||||
return label[bit] ? label[bit] : 'Bit '+bit;
|
||||
}
|
||||
|
||||
function binary(s=31,e=0) {
|
||||
var result = '';
|
||||
|
||||
for (let x=s;x>=e;x--) {
|
||||
var bit = (value&Math.pow(2,x));
|
||||
|
||||
result += '<i id="b'+x+'" style="margin-left:-1px;" class="fs-4 bi bi-'+(bit ? '1' : '0')+'-square'+(bit ? '-fill' : '')+'" data-bs-toggle="tooltip" data-bs-placement="bottom" title="'+tooltip(x)+'"></i>';
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function krbticketflags() {
|
||||
$('div#32').append(binary(31,16));
|
||||
$('div#16').append(binary(15,0));
|
||||
|
||||
$('attribute#krbTicketFlags').find('i')
|
||||
.on('click',function() {
|
||||
var item = $(this);
|
||||
var key = Number(item.attr('id').substring(1));
|
||||
|
||||
if (item.data('old') === undefined)
|
||||
item.data('old',null);
|
||||
|
||||
item.toggleClass('text-success');
|
||||
|
||||
// has the item changed?
|
||||
if (item.data('old') === null) {
|
||||
// It was set to 1
|
||||
if (item.hasClass('bi-1-square-fill')) {
|
||||
item.data('old',1);
|
||||
item.removeClass('bi-1-square-fill').addClass('bi-0-square-fill');
|
||||
|
||||
value -= Math.pow(2,key);
|
||||
|
||||
// It was set to 0
|
||||
} else if (item.hasClass('bi-0-square')) {
|
||||
item.data('old',0);
|
||||
item.removeClass('bi-0-square').addClass('bi-1-square-fill');
|
||||
|
||||
value += Math.pow(2,key);
|
||||
}
|
||||
|
||||
} else {
|
||||
if (item.data('old') === 0) {
|
||||
item.removeClass('bi-1-square-fill').addClass('bi-0-square');
|
||||
value -= Math.pow(2,key);
|
||||
|
||||
} else {
|
||||
item.removeClass('bi-0-square-fill').addClass('bi-1-square-fill');
|
||||
value += Math.pow(2,key);
|
||||
}
|
||||
|
||||
item.data('old',null);
|
||||
}
|
||||
|
||||
$('attribute#krbTicketFlags').find('input').val(value);
|
||||
});
|
||||
}
|
||||
|
||||
// When returning to a Entry after an update, jquery hasnt loaded yet, so make sure we defer this to after the page has run
|
||||
if (window.$ === undefined) {
|
||||
document.addEventListener('DOMContentLoaded',() => krbticketflags());
|
||||
|
||||
} else {
|
||||
krbticketflags();
|
||||
|
||||
$('attribute#krbTicketFlags').find('i')
|
||||
.tooltip();
|
||||
}
|
||||
</script>
|
||||
@endsection
|
Reference in New Issue
Block a user