43 lines
1.3 KiB
JavaScript
43 lines
1.3 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
function apiDocumentPath(path) {
|
|
return (path || '')
|
|
.replace(/^\/+/, '')
|
|
.split('/')
|
|
.map(encodeURIComponent)
|
|
.join('/');
|
|
}
|
|
|
|
document.addEventListener('click', function (event) {
|
|
var button = event.target.closest('[data-move-path]');
|
|
if (!button) return;
|
|
|
|
var currentPath = button.getAttribute('data-move-path');
|
|
var baseHash = button.getAttribute('data-move-hash');
|
|
var destination = window.prompt('Move document to:', currentPath);
|
|
if (destination === null || destination.trim() === '' || destination.trim() === currentPath) return;
|
|
|
|
button.disabled = true;
|
|
fetch('/api/documents/' + apiDocumentPath(currentPath) + '/move', {
|
|
method: 'POST',
|
|
credentials: 'same-origin',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ path: destination.trim(), baseHash: baseHash }),
|
|
})
|
|
.then(function (response) {
|
|
return response.json().then(function (data) {
|
|
if (!response.ok) throw new Error(data.error || 'Move failed');
|
|
return data;
|
|
});
|
|
})
|
|
.then(function (data) {
|
|
window.location.assign(data.url);
|
|
})
|
|
.catch(function (error) {
|
|
window.alert(error.message || 'Failed to move document');
|
|
button.disabled = false;
|
|
});
|
|
});
|
|
})();
|