forked from cory/tildefriends
		
	Make requesting permissions appear less terrible.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3952 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		@@ -443,18 +443,59 @@ function api_localStorageGet(key, value) {
 | 
			
		||||
 | 
			
		||||
function api_requestPermission(permission, id) {
 | 
			
		||||
	let permissions = document.getElementById('permissions');
 | 
			
		||||
 | 
			
		||||
	let container = document.createElement('div');
 | 
			
		||||
	container.classList.add('permissions_contents');
 | 
			
		||||
 | 
			
		||||
	let div = document.createElement('div');
 | 
			
		||||
	div.appendChild(document.createTextNode(permission));
 | 
			
		||||
	for (let action of ['allow', 'allow once', 'deny once', 'deny']) {
 | 
			
		||||
	div.appendChild(document.createTextNode('This app is requesting the following permission:'));
 | 
			
		||||
	let span = document.createElement('span');
 | 
			
		||||
	span.style = 'font-weight: bold';
 | 
			
		||||
	span.appendChild(document.createTextNode(permission));
 | 
			
		||||
	div.appendChild(span);
 | 
			
		||||
	container.appendChild(div);
 | 
			
		||||
 | 
			
		||||
	div = document.createElement('div');
 | 
			
		||||
	div.style = 'padding: 1em';
 | 
			
		||||
	let check = document.createElement('input');
 | 
			
		||||
	check.id = 'permissions_remember_check';
 | 
			
		||||
	check.type = 'checkbox';
 | 
			
		||||
	div.appendChild(check);
 | 
			
		||||
	let label = document.createElement('label');
 | 
			
		||||
	label.htmlFor = check.id;
 | 
			
		||||
	label.appendChild(document.createTextNode('Remember this decision.'));
 | 
			
		||||
	div.appendChild(label);
 | 
			
		||||
	container.appendChild(div);
 | 
			
		||||
 | 
			
		||||
	const k_options = [
 | 
			
		||||
		{
 | 
			
		||||
			text: '✅ Allow',
 | 
			
		||||
			grant: ['allow once', 'allow'],
 | 
			
		||||
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			text: '❌ Deny',
 | 
			
		||||
			grant: ['deny once', 'deny'],
 | 
			
		||||
		},
 | 
			
		||||
	];
 | 
			
		||||
 | 
			
		||||
	div = document.createElement('div');
 | 
			
		||||
	for (let option of k_options) {
 | 
			
		||||
		let button = document.createElement('button');
 | 
			
		||||
		button.innerText = action;
 | 
			
		||||
		button.innerText = option.text;
 | 
			
		||||
		button.onclick = function() {
 | 
			
		||||
			send({action: 'permission', id: id, granted: action});
 | 
			
		||||
			permissions.removeChild(div);
 | 
			
		||||
			send({action: 'permission', id: id, granted: option.grant[check.checked ? 1 : 0]});
 | 
			
		||||
			while (permissions.firstChild) {
 | 
			
		||||
				permissions.removeChild(permissions.firstChild);
 | 
			
		||||
			}
 | 
			
		||||
			permissions.style.visibility = 'hidden';
 | 
			
		||||
		}
 | 
			
		||||
		div.appendChild(button);
 | 
			
		||||
	}
 | 
			
		||||
	permissions.appendChild(div);
 | 
			
		||||
	container.appendChild(div);
 | 
			
		||||
 | 
			
		||||
	permissions.appendChild(container);
 | 
			
		||||
	permissions.style.visibility = 'visible';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function receive(message) {
 | 
			
		||||
 
 | 
			
		||||
@@ -253,3 +253,23 @@ kbd {
 | 
			
		||||
	padding: 2px 4px;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#permissions {
 | 
			
		||||
	visibility: hidden;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	display: block;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	z-index: 100;
 | 
			
		||||
	display: flex;
 | 
			
		||||
	justify-content: center;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.permissions_contents {
 | 
			
		||||
	background-color: #444;
 | 
			
		||||
	border-left: 4px solid #fff;
 | 
			
		||||
	border-right: 4px solid #fff;
 | 
			
		||||
	border-bottom: 4px solid #fff;
 | 
			
		||||
	padding: 1em;
 | 
			
		||||
	margin: 0 auto;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user