1
0
mirror of https://github.com/janeczku/calibre-web synced 2024-12-26 10:00:37 +00:00

Prevent jQuery from cache busting static assets

If the HTML that's returned from the `$.get` request contains a `<script src="..."/>` tag it loads the JavaScript file via ajax, and by default it attaches a timestamp to it to bust cache. That means the file loads every time the modal is opened, and the browser treats it as a new file each time. The result is that code fires multiple times and events listeners are added multiple times.
This commit is contained in:
Jonathan Rehm 2017-07-22 11:11:14 -07:00
parent d799b859ea
commit d85e0b96dc

View File

@ -4,6 +4,11 @@ var updateText;
$(function() { $(function() {
// Allow ajax prefilters to be added/removed dynamically
// eslint-disable-next-line new-cap
const preFilters = $.Callbacks();
$.ajaxPrefilter(preFilters.fire);
function restartTimer() { function restartTimer() {
$("#spinner").addClass("hidden"); $("#spinner").addClass("hidden");
$("#RestartDialog").modal("hide"); $("#RestartDialog").modal("hide");
@ -123,9 +128,18 @@ $(function() {
$("#bookDetailsModal") $("#bookDetailsModal")
.on("show.bs.modal", function(e) { .on("show.bs.modal", function(e) {
var $modalBody = $(this).find(".modal-body"); const $modalBody = $(this).find(".modal-body");
// Prevent static assets from loading multiple times
const useCache = (options) => {
options.async = true;
options.cache = true;
};
preFilters.add(useCache);
$.get(e.relatedTarget.href).done(function(content) { $.get(e.relatedTarget.href).done(function(content) {
$modalBody.html(content); $modalBody.html(content);
preFilters.remove(useCache);
}); });
}) })
.on("hidden.bs.modal", function() { .on("hidden.bs.modal", function() {