vsmov 1.0.0
This commit is contained in:
104
resources/views/core/crud/buttons/bulk_delete.blade.php
Normal file
104
resources/views/core/crud/buttons/bulk_delete.blade.php
Normal 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
|
||||
140
resources/views/core/crud/filters/select2.blade.php
Normal file
140
resources/views/core/crud/filters/select2.blade.php
Normal 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 --}}
|
||||
{{-- ########################################## --}}
|
||||
72
resources/views/core/crud/filters/simple.blade.php
Normal file
72
resources/views/core/crud/filters/simple.blade.php
Normal 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 --}}
|
||||
{{-- ########################################## --}}
|
||||
Reference in New Issue
Block a user