2016-05-17 18:22:18 +02:00
|
|
|
@section header{
|
|
|
|
|
<style>
|
|
|
|
|
.box__dragndrop,
|
|
|
|
|
.box__uploading,
|
|
|
|
|
.box__success,
|
|
|
|
|
.box__error {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
.box.has-advanced-upload {
|
|
|
|
|
background-color: white;
|
|
|
|
|
outline: 2px dashed black;
|
|
|
|
|
outline-offset: -10px;
|
|
|
|
|
}
|
|
|
|
|
.box.has-advanced-upload .box__dragndrop {
|
|
|
|
|
display: inline;
|
|
|
|
|
}
|
|
|
|
|
.box.is-dragover {
|
|
|
|
|
background-color: grey;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
2026-06-14 15:47:28 +01:00
|
|
|
<link rel="stylesheet" href="~/css/main/dropzone.min.css" asp-append-version="true"/>
|
|
|
|
|
<link rel="stylesheet" href="~/css/main/dropzone-basic.min.css" asp-append-version="true"/>
|
refac: separate front assets into esbuild bundles
Sort ~50 Mo de libs tierces hors du repo et regroupe le code
front en 6 bundles thématiques + 2 assets statiques.
Bundles produits par esbuild :
- core.bundle.min.js : jQuery + jQuery UI + Bootstrap 4 + validation
+ tout le code applicatif 'core'
(site, signout, signin, input-lib, md-helpers,
audiovideoinput, parallax, google.geocode,
google-geoloc). Chargé par _Layout.cshtml.
- chat.bundle.min.js : core subset (sans Bootstrap) + chat.js + comment.js
(SignalR client chargé séparément, voir plus bas)
- dropzone.bundle.min.js : jQuery + dropzone + yavsc-remote-fs
- datetime.bundle.min.js : jQuery + jQuery UI + eonasdan datetimepicker
+ jquery-timepicker
- timepicker.bundle.min.js : jQuery + jQuery UI + jquery-timepicker
- quill.bundle.min.js : Quill rich text editor
Assets statiques (non bundlés, copiés depuis node_modules) :
- signalr.min.js : client SignalR 2.x (legacy server)
- moment-with-locales.min.js : moment + 137 locales (require dynamique
non résolvable statiquement par esbuild)
CSS vendor copiées comme assets statiques vers wwwroot/css/ :
bootstrap.min.css, jquery-ui.min.css, dropzone.min.css,
dropzone-basic.min.css, bootstrap-datetimepicker.min.css,
jquery.timepicker.css
Exception gitignore : jonthornton-Datepair/jquery.datepair.min.js
n'est pas sur npm, conservé comme asset statique sous
wwwroot/lib/jonthornton-Datepair/ (téléchargé depuis upstream).
Vues Razor mises à jour (15 fichiers) pour pointer vers les bundles
et les CSS vendor. Suppression de la majorité de wwwroot/lib/ (1300+
fichiers). Suppression des jquery*.js, quill.js, showdown.js,
to-markdown.js, jquery.signalR-2.2.1.js, dropzone.js et de leurs
.min.js associés.
'jquery-datepair' et 'jquery-ui-map' non publiés sur npm :
- jquery-ui-map n'est utilisé nulle part dans le repo (vérifié),
la dépendance est purement historique.
- datepair reste en static sous wwwroot/lib/jonthornton-Datepair/.
2026-06-14 14:11:33 +01:00
|
|
|
<script src="~/js/dropzone.bundle.min.js" asp-append-version="true"></script>
|
2016-05-17 18:22:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@section scripts{
|
|
|
|
|
<script>
|
|
|
|
|
$(document).ready(function(){
|
|
|
|
|
|
|
|
|
|
var isAdvancedUpload = function() {
|
|
|
|
|
var div = document.createElement('div');
|
|
|
|
|
return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && 'FormData' in window && 'FileReader' in window;
|
|
|
|
|
}();
|
|
|
|
|
|
|
|
|
|
var $form = $('.box');
|
|
|
|
|
|
|
|
|
|
if (isAdvancedUpload) {
|
|
|
|
|
$form.addClass('has-advanced-upload');
|
|
|
|
|
}
|
|
|
|
|
if (isAdvancedUpload) {
|
|
|
|
|
|
2023-03-20 09:13:16 +00:00
|
|
|
var droppedFiles = "false";
|
2016-05-17 18:22:18 +02:00
|
|
|
|
|
|
|
|
$form.on('drag dragstart dragend dragover dragenter dragleave drop', function(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
e.stopPropagation();
|
|
|
|
|
})
|
|
|
|
|
.on('dragover dragenter', function() {
|
|
|
|
|
$form.addClass('is-dragover');
|
|
|
|
|
})
|
|
|
|
|
.on('dragleave dragend drop', function() {
|
|
|
|
|
$form.removeClass('is-dragover');
|
|
|
|
|
})
|
|
|
|
|
.on('drop', function(e) {
|
|
|
|
|
droppedFiles = e.originalEvent.dataTransfer.files;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
$form.on('submit', function(e) {
|
|
|
|
|
if ($form.hasClass('is-uploading')) return false;
|
|
|
|
|
|
|
|
|
|
$form.addClass('is-uploading').removeClass('is-error');
|
|
|
|
|
|
|
|
|
|
if (isAdvancedUpload) {
|
|
|
|
|
// ajax for modern browsers
|
|
|
|
|
} else {
|
|
|
|
|
// ajax for legacy browsers
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
<form class="box" method="post" action="~/UserFiles/Create" enctype="multipart/form-data">
|
|
|
|
|
<div class="box__input">
|
|
|
|
|
<input class="box__file" type="file" name="files[]" id="file" data-multiple-caption="{count} files selected" multiple />
|
|
|
|
|
<label for="file"><strong>Choose a file</strong><span class="box__dragndrop"> or drag it here</span>.</label>
|
|
|
|
|
<button class="box__button" type="submit">Upload</button>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="box__uploading">Uploading…</div>
|
|
|
|
|
<div class="box__success">Done!</div>
|
|
|
|
|
<div class="box__error">Error! <span></span>.</div>
|
2023-03-20 09:13:16 +00:00
|
|
|
</form>
|