| 
									
										
										
										
											2022-08-04 00:57:56 +00:00
										 |  |  | import {html, render} from './lit.min.js'; | 
					
						
							|  |  |  | import * as tfrpc from '/static/tfrpc.js'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function delete_user(user) { | 
					
						
							|  |  |  | 	if (confirm(`Are you sure you want to delete the user "${user}"?`)) { | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 		tfrpc.rpc | 
					
						
							|  |  |  | 			.delete_user(user) | 
					
						
							|  |  |  | 			.then(function () { | 
					
						
							|  |  |  | 				alert(`User "${user}" deleted successfully.`); | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 			.catch(function (error) { | 
					
						
							|  |  |  | 				alert( | 
					
						
							|  |  |  | 					`Failed to delete user "${user}": ${JSON.stringify(error, null, 2)}.` | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2022-08-04 00:57:56 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-17 00:29:57 +00:00
										 |  |  | function global_settings_set(key, value) { | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 	tfrpc.rpc | 
					
						
							|  |  |  | 		.global_settings_set(key, value) | 
					
						
							|  |  |  | 		.then(function () { | 
					
						
							|  |  |  | 			alert(`Set "${key}" to "${value}".`); | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		.catch(function (error) { | 
					
						
							|  |  |  | 			alert(`Failed to set "${key}": ${JSON.stringify(error, null, 2)}.`); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2022-08-17 00:29:57 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-26 12:24:36 -04:00
										 |  |  | function title_case(name) { | 
					
						
							|  |  |  | 	return name.split('_').map(x => x.charAt(0).toUpperCase() + x.substring(1)).join(' '); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | window.addEventListener('load', function () { | 
					
						
							|  |  |  | 	const permission_template = (permission) => html` <code>${permission}</code>`; | 
					
						
							| 
									
										
										
										
											2022-12-01 00:39:05 +00:00
										 |  |  | 	function input_template(key, description) { | 
					
						
							|  |  |  | 		if (description.type === 'boolean') { | 
					
						
							|  |  |  | 			return html`
 | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 				<li class="w3-row"> | 
					
						
							| 
									
										
										
										
											2024-08-26 12:24:36 -04:00
										 |  |  | 					<label class="w3-quarter" for=${'gs_' + key} style="font-weight: bold">${title_case(key)}</label> | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 					<div class="w3-quarter w3-padding">${description.description}</div> | 
					
						
							| 
									
										
										
										
											2024-08-25 13:03:19 -04:00
										 |  |  | 					<div class="w3-quarter w3-padding w3-center"><input class="w3-check" type="checkbox" ?checked=${description.value} id=${'gs_' + key}></input></div> | 
					
						
							| 
									
										
										
										
											2024-08-28 19:16:19 -04:00
										 |  |  | 					<button class="w3-quarter w3-button w3-theme-action" @click=${(e) => global_settings_set(key, e.srcElement.previousElementSibling.firstChild.checked)}>Set</button> | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 				</li> | 
					
						
							| 
									
										
										
										
											2022-12-28 17:16:50 +00:00
										 |  |  | 			`;
 | 
					
						
							|  |  |  | 		} else if (description.type === 'textarea') { | 
					
						
							|  |  |  | 			return html`
 | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 				<li class="w3-row"> | 
					
						
							| 
									
										
										
										
											2024-05-12 07:48:34 -04:00
										 |  |  | 					<label class="w3-quarter" for=${'gs_' + key} style="font-weight: bold" | 
					
						
							| 
									
										
										
										
											2024-08-26 12:24:36 -04:00
										 |  |  | 						>${title_case(key)}</label | 
					
						
							| 
									
										
										
										
											2024-05-12 07:48:34 -04:00
										 |  |  | 					> | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 					<div class="w3-rest w3-padding">${description.description}</div> | 
					
						
							| 
									
										
										
										
											2024-05-12 07:48:34 -04:00
										 |  |  | 					<textarea | 
					
						
							|  |  |  | 						class="w3-input" | 
					
						
							|  |  |  | 						style="vertical-align: top; resize: vertical" | 
					
						
							|  |  |  | 						id=${'gs_' + key} | 
					
						
							|  |  |  | 					> | 
					
						
							|  |  |  | ${description.value}</textarea | 
					
						
							|  |  |  | 					> | 
					
						
							|  |  |  | 					<button | 
					
						
							|  |  |  | 						class="w3-button w3-right w3-quarter w3-theme-action" | 
					
						
							|  |  |  | 						@click=${(e) => | 
					
						
							|  |  |  | 							global_settings_set( | 
					
						
							|  |  |  | 								key, | 
					
						
							|  |  |  | 								e.srcElement.previousElementSibling.value | 
					
						
							|  |  |  | 							)} | 
					
						
							|  |  |  | 					> | 
					
						
							|  |  |  | 						Set | 
					
						
							|  |  |  | 					</button> | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 				</li> | 
					
						
							| 
									
										
										
										
											2022-12-01 00:39:05 +00:00
										 |  |  | 			`;
 | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			return html`
 | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 				<li class="w3-row"> | 
					
						
							| 
									
										
										
										
											2024-08-26 12:24:36 -04:00
										 |  |  | 					<label class="w3-quarter" for=${'gs_' + key} style="font-weight: bold">${title_case(key)}</label> | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 					<div class="w3-quarter w3-padding">${description.description}</div> | 
					
						
							|  |  |  | 					<input class="w3-input w3-quarter" type="text" value="${description.value}" id=${'gs_' + key}></input> | 
					
						
							|  |  |  | 					<button class="w3-button w3-quarter w3-theme-action" @click=${(e) => global_settings_set(key, e.srcElement.previousElementSibling.value)}>Set</button> | 
					
						
							|  |  |  | 				</li> | 
					
						
							| 
									
										
										
										
											2022-12-01 00:39:05 +00:00
										 |  |  | 			`;
 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2022-08-13 19:39:29 +00:00
										 |  |  | 	const user_template = (user, permissions) => html`
 | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 		<li class="w3-card w3-margin"> | 
					
						
							| 
									
										
										
										
											2024-05-12 07:48:34 -04:00
										 |  |  | 			<button | 
					
						
							|  |  |  | 				class="w3-button w3-theme-action" | 
					
						
							|  |  |  | 				@click=${(e) => delete_user(user)} | 
					
						
							|  |  |  | 			> | 
					
						
							|  |  |  | 				Delete | 
					
						
							|  |  |  | 			</button> | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 			${user}: ${permissions.map((x) => permission_template(x))} | 
					
						
							| 
									
										
										
										
											2022-08-13 19:39:29 +00:00
										 |  |  | 		</li> | 
					
						
							|  |  |  | 	`;
 | 
					
						
							| 
									
										
										
										
											2022-08-04 00:57:56 +00:00
										 |  |  | 	const users_template = (users) => | 
					
						
							| 
									
										
										
										
											2024-05-12 07:48:34 -04:00
										 |  |  | 		html` <header class="w3-container w3-theme-l2"><h2>Users</h2></header>
 | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 			<ul class="w3-ul"> | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 				${Object.entries(users).map((u) => user_template(u[0], u[1]))} | 
					
						
							|  |  |  | 			</ul>`; | 
					
						
							| 
									
										
										
										
											2022-08-17 00:29:57 +00:00
										 |  |  | 	const page_template = (data) => | 
					
						
							| 
									
										
										
										
											2023-08-05 01:22:27 +00:00
										 |  |  | 		html`<div style="padding: 0; margin: 0; width: 100%; max-width: 100%">
 | 
					
						
							| 
									
										
										
										
											2024-04-30 19:18:33 -04:00
										 |  |  | 			<header class="w3-container w3-theme-l2"><h2>Global Settings</h2></header> | 
					
						
							|  |  |  | 			<div class="w3-container"> | 
					
						
							|  |  |  | 				<ul class="w3-ul"> | 
					
						
							|  |  |  | 					${Object.keys(data.settings) | 
					
						
							|  |  |  | 						.sort() | 
					
						
							|  |  |  | 						.map((x) => html`${input_template(x, data.settings[x])}`)} | 
					
						
							|  |  |  | 				</ul> | 
					
						
							| 
									
										
										
										
											2023-08-05 01:22:27 +00:00
										 |  |  | 			</div> | 
					
						
							|  |  |  | 			${users_template(data.users)} | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 		</div> `; | 
					
						
							| 
									
										
										
										
											2022-08-17 00:29:57 +00:00
										 |  |  | 	render(page_template(g_data), document.body); | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | }); |