vsmov 1.0.0

This commit is contained in:
Clemencia John
2026-04-15 21:11:19 -07:00
parent 311c74228c
commit 68260d170a
147 changed files with 12113 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
@if ($crud->hasAccess('bulkDelete') && $crud->get('list.bulkActions'))
<a href="javascript:void(0)" onclick="bulkDeleteEntries(this)" class="btn btn-sm btn-secondary bulk-button"><i class="la la-trash"></i> {{ trans('backpack::crud.delete') }}</a>
@endif
@push('after_scripts')
<script>
if (typeof bulkDeleteEntries != 'function') {
function bulkDeleteEntries(button) {
if (typeof crud.checkedItems === 'undefined' || crud.checkedItems.length == 0)
{
new Noty({
type: "warning",
text: "<strong>{!! trans('backpack::crud.bulk_no_entries_selected_title') !!}</strong><br>{!! trans('backpack::crud.bulk_no_entries_selected_message') !!}"
}).show();
return;
}
var message = ("{!! trans('backpack::crud.bulk_delete_are_you_sure') !!}").replace(":number", crud.checkedItems.length);
var button = $(this);
// show confirm message
swal({
title: "{!! trans('backpack::base.warning') !!}",
text: message,
icon: "warning",
buttons: {
cancel: {
text: "{!! trans('backpack::crud.cancel') !!}",
value: null,
visible: true,
className: "bg-secondary",
closeModal: true,
},
delete: {
text: "{!! trans('backpack::crud.delete') !!}",
value: true,
visible: true,
className: "bg-danger",
}
},
}).then((value) => {
if (value) {
var ajax_calls = [];
var delete_route = "{{ url($crud->route) }}/bulk-delete";
// submit an AJAX delete call
$.ajax({
url: delete_route,
type: 'POST',
data: { entries: crud.checkedItems },
success: function(result) {
if (Array.isArray(result)) {
// Show a success notification bubble
new Noty({
type: "success",
text: "<strong>{!! trans('backpack::crud.bulk_delete_sucess_title') !!}</strong><br>"+crud.checkedItems.length+"{!! trans('backpack::crud.bulk_delete_sucess_message') !!}"
}).show();
} else {
// if the result is an array, it means
// we have notification bubbles to show
if (result instanceof Object) {
// trigger one or more bubble notifications
Object.entries(result).forEach(function(entry, index) {
var type = entry[0];
entry[1].forEach(function(message, i) {
new Noty({
type: type,
text: message
}).show();
});
});
} else {
// Show a warning notification bubble
new Noty({
type: "warning",
text: "<strong>{!! trans('backpack::crud.bulk_delete_error_title') !!}</strong><br>{!! trans('backpack::crud.bulk_delete_error_message') !!}"
}).show();
}
}
// Move to previous page in case of deleting all the items in table
if(crud.table.rows().count() === crud.checkedItems.length) {
crud.table.page("previous");
}
crud.checkedItems = [];
crud.table.draw(false);
},
error: function(result) {
// Show an alert with the result
new Noty({
type: "warning",
text: "<strong>{!! trans('backpack::crud.bulk_delete_error_title') !!}</strong><br>{!! trans('backpack::crud.bulk_delete_error_message') !!}"
}).show();
}
});
}
});
}
}
</script>
@endpush

View File

@@ -0,0 +1,140 @@
{{-- Select2 Backpack CRUD filter --}}
<li filter-name="{{ $filter->name }}"
filter-type="{{ $filter->type }}"
filter-key="{{ $filter->key }}"
class="nav-item dropdown {{ Request::get($filter->name)?'active':'' }}">
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ $filter->label }} <span class="caret"></span></a>
<div class="dropdown-menu p-0">
<div class="form-group backpack-filter mb-0">
<select
id="filter_{{ $filter->key }}"
name="filter_{{ $filter->key }}"
class="form-control input-sm select2"
placeholder="{{ $filter->placeholder }}"
data-filter-key="{{ $filter->key }}"
data-filter-type="select2"
data-filter-name="{{ $filter->name }}"
data-language="{{ str_replace('_', '-', app()->getLocale()) }}"
>
<option value="">-</option>
@if (is_array($filter->values) && count($filter->values))
@foreach($filter->values as $key => $value)
<option value="{{ $key }}"
@if($filter->isActive() && $filter->currentValue == $key)
selected
@endif
>
{{ $value }}
</option>
@endforeach
@endif
</select>
</div>
</div>
</li>
{{-- ########################################### --}}
{{-- Extra CSS and JS for this particular filter --}}
{{-- FILTERS EXTRA CSS --}}
{{-- push things in the after_styles section --}}
@push('crud_list_styles')
{{-- include select2 css --}}
<link href="{{ asset('packages/select2/dist/css/select2.min.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('packages/select2-bootstrap-theme/dist/select2-bootstrap.min.css') }}" rel="stylesheet" type="text/css" />
<style>
.form-inline .select2-container {
display: inline-block;
}
.select2-drop-active {
border:none;
}
.select2-container .select2-choices .select2-search-field input, .select2-container .select2-choice, .select2-container .select2-choices {
border: none;
}
.select2-container-active .select2-choice {
border: none;
box-shadow: none;
}
.select2-container--bootstrap .select2-dropdown {
margin-top: -2px;
margin-left: -1px;
}
.select2-container--bootstrap {
position: relative!important;
top: 0px!important;
}
</style>
@endpush
{{-- FILTERS EXTRA JS --}}
{{-- push things in the after_scripts section --}}
@push('crud_list_scripts')
{{-- include select2 js --}}
<script src="{{ asset('packages/select2/dist/js/select2.full.min.js') }}"></script>
@if (app()->getLocale() !== 'en')
<script src="{{ asset('packages/select2/dist/js/i18n/' . str_replace('_', '-', app()->getLocale()) . '.js') }}"></script>
@endif
<script>
jQuery(document).ready(function($) {
// trigger select2 for each untriggered select2 box
$('select[data-filter-type=select2]').not('[data-filter-enabled]').each(function () {
var filterName = $(this).attr('data-filter-name');
var filterKey = $(this).attr('data-filter-key');
var element = $(this);
$(this).attr('data-filter-enabled', 'true');
var obj = $(this).select2({
allowClear: true,
closeOnSelect: false,
theme: "bootstrap",
dropdownParent: $(this).parent('.form-group'),
placeholder: $(this).attr('placeholder'),
}).on('change', function(c) {
var value = $(this).val();
var parameter = $(this).attr('data-filter-name');
if(!value) {
return;
}
var new_url = updateDatatablesOnFilterChange(filterName, value, true);
// mark this filter as active in the navbar-filters
if (URI(new_url).hasQuery(filterName, true)) {
$("li[filter-key="+filterKey+"]").addClass('active');
}
}).on('select2:unselecting', function (e) {
updateDatatablesOnFilterChange(filterName, null, true);
$('#filter_'+filterKey).val(null)
$("li[filter-key="+filterKey+"]").removeClass("active");
$("li[filter-key="+filterKey+"]").find('.dropdown-menu').removeClass("show");
e.stopPropagation();
return false;
});
// when the dropdown is opened, autofocus on the select2
$("li[filter-key="+filterKey+"]").on('shown.bs.dropdown', function () {
$('select[data-filter-key='+filterKey+']').select2('open');
});
// clear filter event (used here and by the Remove all filters button)
$("li[filter-key="+filterKey+"]").on('filter:clear', function(e) {
$("li[filter-key="+filterKey+"]").removeClass('active');
$('#filter_'+filterKey).val(null).trigger('change');
});
});
});
</script>
@endpush
{{-- End of Extra CSS and JS --}}
{{-- ########################################## --}}

View File

@@ -0,0 +1,72 @@
{{-- Simple Backpack CRUD filter --}}
<li filter-name="{{ $filter->name }}"
filter-type="{{ $filter->type }}"
filter-key="{{ $filter->key }}"
class="nav-item {{ Request::get($filter->name)?'active':'' }}">
<a class="nav-link" href=""
parameter="{{ $filter->name }}"
>{{ $filter->label }}</a>
</li>
{{-- ########################################### --}}
{{-- Extra CSS and JS for this particular filter --}}
{{-- FILTERS EXTRA CSS --}}
{{-- push things in the after_styles section --}}
{{-- @push('crud_list_styles')
no css
@endpush --}}
{{-- FILTERS EXTRA JS --}}
{{-- push things in the after_scripts section --}}
@push('crud_list_scripts')
<script>
jQuery(document).ready(function($) {
$("li[filter-key={{ $filter->key }}] a").click(function(e) {
e.preventDefault();
var parameter = $(this).attr('parameter');
// behaviour for ajax table
var ajax_table = $("#crudTable").DataTable();
var current_url = ajax_table.ajax.url();
if (URI(current_url).hasQuery(parameter)) {
var new_url = URI(current_url).removeQuery(parameter, true);
} else {
var new_url = URI(current_url).addQuery(parameter, true);
}
new_url = normalizeAmpersand(new_url.toString());
// replace the datatables ajax url with new_url and reload it
ajax_table.ajax.url(new_url).load();
// add filter to URL
crud.updateUrl(new_url);
// mark this filter as active in the navbar-filters
if (URI(new_url).hasQuery('{{ $filter->name }}', true)) {
$("li[filter-key={{ $filter->key }}]").removeClass('active').addClass('active');
$('#remove_filters_button').removeClass('invisible');
}
else
{
$("li[filter-key={{ $filter->key }}]").trigger("filter:clear");
}
});
// clear filter event (used here and by the Remove all filters button)
$("li[filter-key={{ $filter->key }}]").on('filter:clear', function(e) {
$("li[filter-key={{ $filter->key }}]").removeClass('active');
});
});
</script>
@endpush
{{-- End of Extra CSS and JS --}}
{{-- ########################################## --}}