44 lines
1.5 KiB
JavaScript
44 lines
1.5 KiB
JavaScript
// canvas-actions.js — creating a canvas from a normal page.
|
|
//
|
|
// The canvas view itself owns everything else (rename, delete, editing); this
|
|
// only covers the one action that has to start from the page, since a folder
|
|
// with no canvases has no canvas view to reach.
|
|
//
|
|
// Reuses openModal and postReplace from page/actions.js, which the page
|
|
// template loads first.
|
|
|
|
// validCanvasName mirrors canvasNameRe in canvas.go. Checking here only buys a
|
|
// better error message — the server rejects the same set regardless.
|
|
function validCanvasName(name) {
|
|
if (!name || name.length > 100) return false;
|
|
if (name.charAt(0) === '.') return false;
|
|
return !/[\/\\]/.test(name);
|
|
}
|
|
|
|
function newCanvas() {
|
|
var input = document.createElement('input');
|
|
input.type = 'text';
|
|
input.className = 'input';
|
|
input.placeholder = 'Canvas name';
|
|
|
|
openModal({
|
|
title: 'New canvas',
|
|
body: input,
|
|
confirm: {
|
|
label: 'CREATE',
|
|
onConfirm: function () {
|
|
var name = input.value.trim();
|
|
if (!validCanvasName(name)) {
|
|
alert('A canvas name cannot be empty, start with a dot, or contain a slash.');
|
|
return;
|
|
}
|
|
closeModal();
|
|
var base = window.location.pathname;
|
|
if (base.slice(-1) !== '/') base += '/';
|
|
var target = base + '?canvas=' + encodeURIComponent(name);
|
|
postReplace(target + '&create=1', null, target);
|
|
}
|
|
}
|
|
});
|
|
}
|