import { BaseWindow } from './window';
import { mk, mkhdiv, mkcheckbox } from './util';
export class ShareWindow extends BaseWindow {
contents: HTMLElement;
constructor(folder, filename, x, y, w) {
super(null, x, y, w, 0);
make_share_window(this, folder, filename);
}
}
// This monstrocity creates the 'Share file' window
function make_share_window(wnd, folder, filename) {
wnd.h2.style.display = 'flex';
// The title of the window. WE set its 'flex' to 1 1 0 so it fills up the titlebar
// and pushes the X button to the very right
var heading = mk(wnd.h2, 'span', 'wndtitle');
heading.innerText = "Share " + filename;
// Close button
var x_button = mk(wnd.h2, 'button', 'close_button');
x_button.innerText = "X";
x_button.onclick = () => { wnd.destroy(); }
wnd.contents = mk(wnd.visuals, 'div', 'share_dialog_contents');
wnd.contents.style.padding = "0.5rem";
// This is the data that will be sent when we hit "Generate link"
var data = {
write_permissions: false,
private: false,
has_password: false,
password: "",
userlist: [],
}
// If private link is clicked, show the "Add user" button and the user list
var userlist, add_user;
mkcheckbox(wnd.contents, "Private link", (toggled) => {
add_user.style.display = toggled ? "block" : "none";
userlist.style.display = toggled ? "block" : "none";
data.private = toggled;
});
userlist = mk(wnd.contents, 'div');
userlist.style.display = "none";
add_user = mk(wnd.contents, 'button');
add_user.innerText = "Add user";
add_user.style.display = "none";
// When we hit 'Add user', add an input field for a new user
add_user.onclick = (_e) => {
var i = mk(userlist, 'input') as HTMLInputElement;
i.value = 'John Doe';
let index = data.userlist.length;
data.userlist.push(i.value);
i.onchange = (_e) => {
data.userlist[index] = i.value;
}
}
// Click the add_user once to add a default user, since a URL that nobody can use makes no sense
add_user.click();
mkcheckbox(wnd.contents, "Give write permissions", (toggled) => {
data.write_permissions = toggled;
});
// If 'Password protected' is checked, show the password field
let password_container;
mkcheckbox(wnd.contents, "Password protected", (toggled) => {
data.has_password = toggled;
password_container.style.display = toggled ? "flex" : "none";
});
password_container = mkhdiv(wnd.contents);
password_container.style.display = 'none'
var password_label = mk(password_container, 'label');
password_label.innerText = "Password";
var password_input = mk(password_container, 'input') as HTMLInputElement;
password_input.type = 'password';
password_input.autocomplete = 'off'
password_input.style.flex = "1 0 0";
password_input.onchange = (_e) => {
data.password = password_input.value;
};
var generate_url_button = mk(wnd.contents, 'button');
generate_url_button.innerText = "Generate link";
generate_url_button.onclick = () => {
// The backend expects the users to be either an empty string, if the URL is public
// or a comma separated list of usernaems
var users = "";
if (data.private) {
users = data.userlist.join(',');
}
var form_data = new FormData();
form_data.append('folder', folder);
form_data.append('filename', filename);
form_data.append('users', users);
// 0 = No permissions, 1 = Read only, 2 = Write , 1|2 = 3 = RW
// Only 1 and 3 make sense in the context of a URL
form_data.append('permissions', (data.write_permissions ? 3 : 1).toString());
form_data.append('password', data.has_password ? data.password : "");
var xhr = new XMLHttpRequest();
xhr.open('POST', '/php/share.php', true);
xhr.onload = function () {
alert(xhr.response);
}
xhr.send(form_data);
wnd.destroy();
}
}