diff options
Diffstat (limited to 'front/share_window.ts')
-rw-r--r-- | front/share_window.ts | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/front/share_window.ts b/front/share_window.ts new file mode 100644 index 0000000..b62cb63 --- /dev/null +++ b/front/share_window.ts @@ -0,0 +1,121 @@ +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(); + } +}
\ No newline at end of file |