818b3193ff
With the new routes, all pages are not all at the same folder level anymore (e.g. /shaare and /shaare/123), so we can't just use './' everywhere. The most consistent way to handle this is to prefix all path with the proper variable, and handle the actual path in controllers.
53 lines
1.9 KiB
JavaScript
53 lines
1.9 KiB
JavaScript
/**
|
|
* Script used in the thumbnails update page.
|
|
*
|
|
* It retrieves the list of link IDs to update, and execute AJAX requests
|
|
* to update their thumbnails, while updating the progress bar.
|
|
*/
|
|
|
|
/**
|
|
* Update the thumbnail of the link with the current i index in ids.
|
|
* It contains a recursive call to retrieve the thumb of the next link when it succeed.
|
|
* It also update the progress bar and other visual feedback elements.
|
|
*
|
|
* @param {string} basePath Shaarli subfolder for XHR requests
|
|
* @param {array} ids List of LinkID to update
|
|
* @param {int} i Current index in ids
|
|
* @param {object} elements List of DOM element to avoid retrieving them at each iteration
|
|
*/
|
|
function updateThumb(basePath, ids, i, elements) {
|
|
const xhr = new XMLHttpRequest();
|
|
xhr.open('POST', `${basePath}/?do=ajax_thumb_update`);
|
|
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
xhr.responseType = 'json';
|
|
xhr.onload = () => {
|
|
if (xhr.status !== 200) {
|
|
alert(`An error occurred. Return code: ${xhr.status}`);
|
|
} else {
|
|
const { response } = xhr;
|
|
i += 1;
|
|
elements.progressBar.style.width = `${(i * 100) / ids.length}%`;
|
|
elements.current.innerHTML = i;
|
|
elements.title.innerHTML = response.title;
|
|
if (response.thumbnail !== false) {
|
|
elements.thumbnail.innerHTML = `<img src="${response.thumbnail}">`;
|
|
}
|
|
if (i < ids.length) {
|
|
updateThumb(ids, i, elements);
|
|
}
|
|
}
|
|
};
|
|
xhr.send(`id=${ids[i]}`);
|
|
}
|
|
|
|
(() => {
|
|
const basePath = document.querySelector('input[name="js_base_path"]').value;
|
|
const ids = document.getElementsByName('ids')[0].value.split(',');
|
|
const elements = {
|
|
progressBar: document.querySelector('.progressbar > div'),
|
|
current: document.querySelector('.progress-current'),
|
|
thumbnail: document.querySelector('.thumbnail-placeholder'),
|
|
title: document.querySelector('.thumbnail-link-title'),
|
|
};
|
|
updateThumb(basePath, ids, 0, elements);
|
|
})();
|