<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no">
<title>{% block title %}Welcome!{% endblock %}</title>
<link rel="apple-touch-icon" sizes="180x180" href="/assets/images/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/images/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/images/favicon/favicon-16x16.png">
<link rel="manifest" href="/assets/images/favicon/site.webmanifest">
<!-- BEGIN GLOBAL MANDATORY STYLES -->
<link href="https://fonts.googleapis.com/css?family=Nunito:400,600,700" rel="stylesheet">
<link href="{{ asset('assets/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('assets/css/plugins.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('assets/plugins/notification/toastr/toastr.min.css') }}" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="{{ asset('assets/plugins/select2/select2.min.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset('assets/plugins/flatpickr/flatpickr.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset('assets/plugins/flatpickr/custom-flatpickr.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset('assets/plugins/fancybox/fancybox.css') }}"/>
<!-- END GLOBAL MANDATORY STYLES -->
<!-- BEGIN PAGE LEVEL PLUGINS/CUSTOM STYLES -->
<link rel="stylesheet" href="{{ asset('assets/css/custom.css') }}">
{% block stylesheets %}{% endblock %}
<link rel="stylesheet" media="print" href="{{ asset('assets/css/print.css') }}" />
<!-- END PAGE LEVEL PLUGINS/CUSTOM STYLES -->
{% if app.user %}
<style>
:root {
--primary: {{ app.user.company.color }}!important;
--primary_15l: {{ app.user.company.color }}33!important;/* 0.15 opacity */
--secondary: {{ app.user.company.color2 }}!important;
}
</style>
{% endif %}
</head>
<body class="alt-menu sidebar-noneoverflow {% block bodyClass %}{% endblock %}">
{% if app.user %}
{{ include('navbar.html.twig') }}
<!-- BEGIN MAIN CONTAINER -->
<div class="main-container sidebar-closed sbar-open" id="container">
<div class="overlay"></div>
<div class="cs-overlay"></div>
<div class="search-overlay"></div>
{{ include('sidebar.html.twig') }}
<!-- BEGIN CONTENT AREA -->
<div id="content" class="main-content">
<div class="layout-px-spacing">
<div class="page-header">
<div class="page-title">
<h3>{% block pageHeader %}{% endblock %}</h3>
</div>
</div>
<!-- CONTENT AREA -->
{% block pageContent %}{% endblock %}
<!-- CONTENT AREA -->
</div>
</div>
<!-- END CONTENT AREA -->
</div>
<!-- END MAIN CONTAINER -->
{{ include('footer.html.twig')}}
{% endif %}
{% block login %}{% endblock %}
<!-- BEGIN GLOBAL MANDATORY SCRIPTS -->
<script src="{{ asset('assets/js/libs/jquery-3.1.1.min.js') }}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js"></script>
<script src="{{ asset('assets/bootstrap/js/popper.min.js') }}"></script>
<script src="{{ asset('assets/bootstrap/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('assets/plugins/perfect-scrollbar/perfect-scrollbar.min.js') }}"></script>
<script src="{{ asset('assets/plugins/notification/toastr/toastr.min.js') }}"></script>
<script src="{{ asset('assets/plugins/select2/select2.min.js') }}"></script>
<script src="{{ asset('assets/plugins/flatpickr/flatpickr.js') }}"></script>
<script src="{{ asset('assets/plugins/flatpickr/fr.js') }}"></script>
<script src="{{ asset('assets/js/jquery.collection.js') }}"></script>
<script src="{{ asset('assets/plugins/fancybox/fancybox.umd.js') }}"></script>
<script src="{{ asset('assets/js/jquery.tagsinput.js') }}"></script>
<script src="{{ asset('assets/js/app.js') }}"></script>
<script>
flatpickr.localize(flatpickr.l10ns.fr);
toastr.options = {
"closeButton": true,
"debug": false,
"newestOnTop": true,
"progressBar": true,
"positionClass": "toast-bottom-left",
"preventDuplicates": false,
"onclick": null,
"showDuration": "300",
"hideDuration": "1000",
"timeOut": "10000",
"extendedTimeOut": "1000",
"showEasing": "swing",
"hideEasing": "linear",
"showMethod": "fadeIn",
"hideMethod": "fadeOut"
}
jQuery(document).ready(function() {
App.init();
if ($.fn.DataTable) {
$('.table-data').DataTable({
"select": "true",
"aaSorting": [],
"oLanguage": {
select: {
rows: {
_: "%d lignes sélectionnées",
1: "1 ligne sélectionnée"
}
},
"oPaginate": { "sPrevious": '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-left"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg>', "sNext": '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>' },
"sInfo": "Page _PAGE_ de _PAGES_",
"sSearch": '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>',
"sSearchPlaceholder": "Recherche...",
"sLengthMenu": "Résultats : _MENU_",
"sInfo": "Affichage de _START_ à _END_ sur _TOTAL_ entrées",
"sInfoEmpty": "Affichage de 0 à 0 sur 0 entrées",
"sInfoFiltered": "(filtrées depuis un total de _MAX_ entrées)",
},
"stripeClasses": [],
});
const selectTable = $('.table-data-select').DataTable({
"columnDefs": [
// These are the column name variables that will be sent to the server
{
"name": "id",'targets': 0,
'checkboxes': {
'selectRow': true,
'selectAll': false
}
}
],
'select': {
'style': 'multi'
},
"oLanguage": {
select: {
rows: {
_: "%d lignes sélectionnées",
1: "1 ligne sélectionnée"
}
},
"oPaginate": { "sPrevious": '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-left"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg>', "sNext": '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>' },
"sInfo": "Page _PAGE_ de _PAGES_",
"sSearch": '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>',
"sSearchPlaceholder": "Recherche...",
"sLengthMenu": "Résultats : _MENU_",
"sInfo": "Affichage de _START_ à _END_ sur _TOTAL_ entrées",
"sInfoEmpty": "Affichage de 0 à 0 sur 0 entrées",
"sInfoFiltered": "(filtrées depuis un total de _MAX_ entrées)",
},
});
// Event listener to the filtering select to redraw on change
$('#content').on('change','.data-filter',function () {
selectTable.draw();
} );
$('.table-data-select thead input[name="select_all"]').on('click', function (e) {
var checked = $('#selectall').prop('checked');
// get all filtered rows
var allRowsCount = selectTable.rows().count()
var filteredRowsCount = selectTable.rows({ search: 'applied' }).count();
var visibleRowsCount = selectTable.rows({ page: 'current' }).count();
//console.log(allRowsCount, filteredRowsCount, visibleRowsCount)
var rows = (allRowsCount == filteredRowsCount) ? { page: 'current' } : { search: 'applied' };
if (this.checked) {
selectTable.rows(rows).select();
} else {
//selectTable.rows(rows).deselect();
selectTable.rows({ selected: true }).deselect();
}
});
selectTable.on('length.dt', function () {
selectTable.rows({ selected: true }).deselect();
$('.table-data-select thead input[name="select_all"]').prop('checked', false);
});
$('body').on('click', 'a#table-data-select-export', function(e){
//alert();
var rows_selected = selectTable.column(0).checkboxes.selected();
//console.log(rows_selected);
if (typeof rows_selected !== 'undefined' && rows_selected.length > 1 && rows_selected.length < 51) {
var url = $(this).attr("href");
// Iterate over all selected checkboxes
$.each(rows_selected, function(index, row){
rowId = row.replace(/[^0-9]/g,'');
if (url.indexOf('?') === -1) {
url = url + '?a[]=' + rowId;
}else {
url = url + '&a[]=' + rowId;
}
});
window.open(url, "_blank");
} else if (rows_selected.length > 50) {
toastr["error"]('Merci de ne pas selectionner plus que 50 documents ... ');
} else {
toastr["warning"]('Merci de selectionner au moins deux éléments ...');
}
return false;
});
}
$('.emails-tags').tagsInput({
'unique': true,
'validationPattern': new RegExp('(.+)@(.+){2,}\.(.+){2,}'),
'delimiter': [' ']
});
flatpickr($('.flatpickr'), {
enableTime: true,
dateFormat: "Y-m-d H:i",
disableMobile: "true",
"locale": {
"firstDayOfWeek": 7 // start week on Sunday
},
minDate: new Date(),
allowInput: true,
onOpen: function(selectedDates, dateStr, instance) {
$(instance.altInput).prop('readonly', true);
},
onClose: function(selectedDates, dateStr, instance) {
$(instance.altInput).prop('readonly', false);
$(instance.altInput).blur();
},
onChange: function(selectedDates, dateStr, instance) {
validateInput(dateStr, $('.flatpickr')[0]);
}
});
// Add an additional event listener to the date input field
$('.flatpickr').on('change', function() {
validateInput(this.value, $(this)[0]);
});
flatpickr($('.flatpickr_date'), {
enableTime: false,
dateFormat: "Y-m-d",
disableMobile: "true",
"locale": {
"firstDayOfWeek": 7 // start week on Sunday
},
defaultDate: new Date(),
allowInput: true,
onOpen: function(selectedDates, dateStr, instance) {
$(instance.altInput).prop('readonly', true);
},
onClose: function(selectedDates, dateStr, instance) {
$(instance.altInput).prop('readonly', false);
$(instance.altInput).blur();
},
onChange: function(selectedDates, dateStr, instance) {
validateInput(dateStr, $('.flatpickr_date')[0]);
}
});
// Add an additional event listener to the date input field
$('.flatpickr_date').on('change', function() {
validateInput(this.value, $(this)[0]);
});
flatpickr($('.flatpickr_date_nodefault'), {
enableTime: false,
dateFormat: "Y-m-d",
disableMobile: "true",
"locale": {
"firstDayOfWeek": 7 // start week on Sunday
},
allowInput: true,
onOpen: function(selectedDates, dateStr, instance) {
$(instance.altInput).prop('readonly', true);
},
onClose: function(selectedDates, dateStr, instance) {
$(instance.altInput).prop('readonly', false);
$(instance.altInput).blur();
},
onChange: function(selectedDates, dateStr, instance) {
validateInput(dateStr, $('.flatpickr_date_nodefault')[0]);
}
});
// Add an additional event listener to the date input field
$('.flatpickr_date_nodefault').on('change', function() {
validateInput(this.value, $(this)[0]);
});
function validateInput(dateValue, input) {
var date = new Date(dateValue);
console.log(date, input);
if (!isNaN(date.getTime())) {
// If the date is valid, clear the error message
input.setCustomValidity('');
} else {
// If the date is not valid, set a custom error message on the field
input.setCustomValidity('Merci de choisir une date valide !');
}
}
flatpickr($('.flatpickr_time'), {
enableTime: true,
noCalendar: true,
dateFormat: "H:i",
//defaultDate: new Date(),
disableMobile: "true",
});
$('.collections').collection({
allow_down: false,
allow_up: false,
add: '<a href="#" class="btn btn-primary mb-2 mr-2 rounded-circle"><svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line></svg></a>',
remove: '<a href="#" class="btn btn-primary mb-2 mr-2 rounded-circle"><svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><circle cx="12" cy="12" r="10"></circle><line x1="8" y1="12" x2="16" y2="12"></line></svg></a>'
});
$('.select2_collections').collection({
after_add: function(collection, element) { initializeSelect2(element.find('.select2')) },
allow_down: false,
allow_up: false,
add: '<a href="#" class="btn btn-primary mb-2 mr-2 rounded-circle"><svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line></svg></a>',
remove: '<a href="#" class="btn btn-primary mb-2 mr-2 rounded-circle"><svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><circle cx="12" cy="12" r="10"></circle><line x1="8" y1="12" x2="16" y2="12"></line></svg></a>'
});
function initializeSelect2(selectElementObj) {
selectElementObj.select2({
});
return true;
}
{% for message in app.flashes('notice') %}
toastr["warning"]("{{ message }}");
{% endfor %}
{% for message in app.flashes('success') %}
toastr["success"]("{{ message }}");
{% endfor %}
{% for message in app.flashes('error') %}
toastr["error"]("{{ message }}");
{% endfor %}
{% for message in app.flashes('critical') %}
toastr.options.closeButton = true;
toastr.options.tapToDismiss = false;
toastr.options.timeOut = 0;
toastr.options.extendedTimeOut = 0;
toastr.options.showDuration = 0;
toastr.options.hideDuration = 0;
toastr.options.escapeHtml = false;
toastr.options.preventDuplicates = true;
toastr["error"]("{{ message|raw }}");
{% endfor %}
{% for message in app.flashes('error_action') %}
//toastr.options = {onclick: function () {document.location.href='{{app.request.get("action")}}'; }}
toastr.options.onclick = function () {document.location.href='{{app.request.get("action")}}'; }
toastr["error"]("{{ message }}<br /><button type="button" class="btn clear">Éditer</button>");
});
{% endfor %}
/*
================================================
| navbar inbox / send photo / input file |
================================================
*/
$.ajax({
type: "GET",
url: "{{ path('message_unread_index') }}",
})
.done(function(data){
if (data.length > 0) {
var elem = "";
for (i = 0; i < data.length; i++) {
elem += "<a href='{{ path('message_index') }}' class='dropdown-item'><div><div class='media notification-new'><div class='usr-profile-img mr-3'><div class='user-profile'><div>"+data[i]["initials"]+"</div>";
elem += "</div></div><div class='media-body'><p class='meta-user-name mr-3'>"+data[i]["sender"]+"</p><p class='message-text'>"+data[i]["subject"]+"</p><p class='meta-time align-self-center mb-0'>"+data[i]["time"]+"</p></div></div></div></a>";
}
$('#message-dropdown').html(elem);
$('li.message-dropdown span.badge').html(data.length)
} else {
$('#message-dropdown').html("<p class='m-3 text-center'>Aucun nouveau message!<br><a class='btn btn-primary mt-3' href='/message'>Boîte de Réception</a></p>");
}
});
$('#send-photos').off('click').on('click', function(event) {
$( "#sendPictureModal form[name='message']" ).submit();
event.preventDefault();
});
$("input[type=file]").each(function (index, inputFile) {
if($(inputFile).data("filename"))
{
var label = $("label[for='" + $(inputFile).attr('id') + "']")[0];
label.innerHTML = $(inputFile).data("filename");
}
});
$(document).on('change', "input[type='file']", function(){
//get the file name
var fileName = $(this).val().replace('C:\\fakepath\\', " ");
//replace the "Choose a file" label
$(this).next('.custom-file-label').html(fileName);
});
/*
================================================
| submit button loader |
================================================
*/
$("button[data-spinning-button]").click(function(e) {
var $this = $(this);
let $form = $this.parents("form");
$this
.addClass("button-loading")
.attr("disabled", "");
//return true;
if ($form.length) {
//form.valid() will be applicable If you are using jQuery validate https://jqueryvalidation.org/
//asp.net mvc used it by default with jQuery Unobtrusive Validation
//you need to check the form before it goes into the if statement
if ($form[0].checkValidity()) {
$form.submit();
} else {
$this
.removeClass("button-loading")
.removeAttr("disabled", "");
}
}
});
$("a[data-spinning-link]").click(function(e) {
var $this = $(this);
$this
.addClass("button-loading")
.attr("disabled", "");
return true;
});
/*
================================================
| Fancybox |
================================================
*/
Fancybox.defaults.l10n = {
CLOSE: "Fermer",
NEXT: "Suivant",
PREV: "Précédent",
MODAL: "Vous pouvez fermer ce contenu modal avec la touche ESC",
ERROR: "Quelque chose s'est mal passé, veuillez réessayer plus tard",
IMAGE_ERROR: "Image non trouvée",
ELEMENT_NOT_FOUND: "Élément HTML introuvable",
AJAX_NOT_FOUND: "Erreur lors du chargement d'AJAX : introuvable",
AJAX_FORBIDDEN: "Erreur lors du chargement d'AJAX : Interdit",
IFRAME_ERROR: "Erreur de chargement de la page",
TOGGLE_ZOOM: "Zoomer et dézoomer",
ROTATE_LEFT: "Faire tourner à gauche",
ROTATE_RIGHT: "Faire tourner à droite",
TOGGLE_FULLSCREEN: "Basculer en plein écran",
};
Fancybox.Plugins.Toolbar.defaults.items.rotateRight = {
type: "button",
class: "fancybox__button--rotateRight",
label: "ROTATE_RIGHT",
html:
'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><polyline points="23 4 23 10 17 10"></polyline><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"></path></svg>',
click: function (event) {
event.preventDefault();
console.log(event.target.className);
var orientation = event.target.classList.contains("fancybox__button--rotateRight") ? "cw" : "acw";
var fancybox = this.fancybox;
rotatingFunction (fancybox, orientation);
},
};
Fancybox.Plugins.Toolbar.defaults.items.rotateLeft = {
type: "button",
class: "fancybox__button--rotateLeft",
label: "ROTATE_LEFT",
html:
'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path></svg>',
click: function (event) {
event.preventDefault();
console.log(event.target.className);
var orientation = event.target.classList.contains("fancybox__button--rotateRight") ? "cw" : "acw";
var fancybox = this.fancybox;
rotatingFunction (fancybox, orientation);
},
};
Fancybox.bind("[data-fancybox]" , {
Toolbar: {
display: [
"counter",
"rotateRight",
"rotateLeft",
"zoom",
"slideshow",
"fullscreen",
"close",
],
fullScreen: {
autoStart: true
}
},
on: {
load: (fancybox, slide) => {
console.log(`#${slide.type} slide is loaded!`);
//console.log(
// `This slide is selected: ${fancybox.getSlide().index === slide.index}`
//);
for (const $el of document.querySelectorAll(".fancybox__button--rotateLeft, .fancybox__button--rotateRight")) {
if (slide.type === "image") {
$el.removeAttribute("disabled");
} else {
$el.setAttribute("disabled", "");
}
}
},
},
});
function rotatingFunction (fancybox, orientation) {
$.ajax({
type: 'POST',
url: "{{ path('images_rotate') }}",
data: { "file": fancybox.getSlide().src, 'orientation': orientation },
beforeSend: function( xhr ) {
var slide = fancybox.getSlide();
fancybox.showLoading(slide);
}
}).done(function( data ) {
//var slide = fancybox.getSlide();
//fancybox.hideLoading(slide);
//console.log(src);
//Image rortated
if (data["message"] == "ok") {
/*var thisImg = slide.$el.querySelector("img");
var src = $(thisImg).attr("src");
degrees = orientation == "cw" ? 90 : -90;
$("img[src='"+src+"']").css({
'transform': 'rotate(' + degrees + 'deg)',
'-ms-transform': 'rotate(' + degrees + 'deg)',
'-moz-transform': 'rotate(' + degrees + 'deg)',
'-webkit-transform': 'rotate(' + degrees + 'deg)',
'-o-transform': 'rotate(' + degrees + 'deg)'
});*/
var slide = fancybox.getSlide();
var actualUrl = slide.src;
var newUrl = slide.src + "?" + new Date().getTime();
var thisImg = slide.$el.querySelector("img");
//creating an xmlHTTP in order to show a loader while of the new rotated img is loaded
var xmlHTTP = new XMLHttpRequest();
xmlHTTP.open('GET', newUrl, true);
//xmlHTTP.withCredentials = true;
xmlHTTP.responseType = 'arraybuffer';
xmlHTTP.setRequestHeader("Cache-Control", "no-cache, no-store, max-age=0");
xmlHTTP.setRequestHeader("Expires", "Tue, 01 Jan 1980 1:00:00 GMT");
xmlHTTP.setRequestHeader("Pragma", "no-cache");
xmlHTTP.onload = function(e) {
var blob = new Blob([this.response]);
thisImg.src = window.URL.createObjectURL(blob);
slide.src = newUrl;
fancybox.hideLoading(slide);
};
xmlHTTP.onloadstart = function() {
//fancybox.showLoading(slide);
//updating the intial triggers
var x =document.querySelectorAll("a.fancybox[href='"+actualUrl+"'], a.fancybox img[src='"+actualUrl+"']")
var i;
for (i = 0; i < x.length; i++) {
if (x[i].hasAttribute("src")) {
x[i].src = newUrl;
} else {
x[i].href = newUrl;
}
}
};
//fancybox.showLoading(slide);
xmlHTTP.send();
} else {
toastr["error"]("Une erreur s'est produite. Veuillez réessayer ultérieurement...");
}
});
}
} );
</script>
<script src="{{ asset('assets/js/custom.js') }}"></script>
<script src="{{ asset('assets/js/image-crop.js') }}"></script>
<!-- END GLOBAL MANDATORY SCRIPTS -->
<!-- BEGIN PAGE LEVEL PLUGINS/CUSTOM SCRIPTS -->
{% block javascripts %}{% endblock %}
<!-- BEGIN PAGE LEVEL PLUGINS/CUSTOM SCRIPTS -->
</body>
</html>