aboutsummaryrefslogtreecommitdiff
path: root/js/editredirect.js
blob: c7701993e09e28753ba8725ed061e3fd81c18489 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//Everything to do with the edit and delete forms is here...

var activeRedirect = null;

function createNewRedirect() {
	activeRedirect = new Redirect();
	el('#edit-redirect-form h3').textContent = 'Create Redirect';
	showForm('#edit-redirect-form', activeRedirect);
	el('#btn-save-redirect').setAttribute('disabled', 'disabled');
}

function editRedirect(index) {
	el('#edit-redirect-form h3').textContent = 'Edit Redirect';
	activeRedirect = new Redirect(REDIRECTS[index]); //Make a new one, which we can dump a bunch of stuff on...
	activeRedirect.existing = true;
	activeRedirect.index = index;
	showForm('#edit-redirect-form', activeRedirect);
	setTimeout(() => el('input[data-bind="description"]').focus(), 200); //Why not working...?
}

function cancelEdit() {
	activeRedirect = null;
	hideForm('#edit-redirect-form');
}

function saveRedirect() {
	let savedRedirect = new Redirect(activeRedirect);
	if (activeRedirect.existing) {
		REDIRECTS[activeRedirect.index] = savedRedirect; //To strip out any extra crap we've added
	} else {
		REDIRECTS.push(savedRedirect);
	
		let newNode = template.cloneNode(true);
		newNode.removeAttribute('id');
		el('.redirect-rows').appendChild(newNode);
	}

	updateBindings();
	saveChanges();
	hideForm('#edit-redirect-form');
}

function toggleAdvancedOptions(ev) {
	ev.preventDefault();
	let advancedOptions = el('.advanced');
	if (advancedOptions.classList.contains('hidden')) {
		advancedOptions.classList.remove('hidden');
		el('#advanced-toggle a').textContent = 'Hide advanced options...';
	} else {
		advancedOptions.classList.add('hidden');
		el('#advanced-toggle a').textContent = 'Show advanced options...';
	}
}


function editFormChange() {
	//Now read values back from the form...
	for (let input of el('#edit-redirect-form').querySelectorAll('input[type="text"][data-bind]')) {
		let prop = input.getAttribute('data-bind');
		activeRedirect[prop] = input.value;
	}
	
	activeRedirect.appliesTo = [];
	for (let input of el('#apply-to').querySelectorAll('input:checked')) {
		activeRedirect.appliesTo.push(input.value);
	}	

	activeRedirect.processMatches = el('#process-matches option:checked').value;
	activeRedirect.patternType = el('[name="patterntype"]:checked').value;

	activeRedirect.updateExampleResult();

	dataBind('#edit-redirect-form', activeRedirect);
}



var deleteIndex;
function confirmDeleteRedirect(index) {
	deleteIndex = index;
	let redirect = REDIRECTS[deleteIndex];
	showForm('#delete-redirect-form', redirect);
}

function deleteRedirect() {
	REDIRECTS.splice(deleteIndex, 1);
	let node = el(`.redirect-row[data-index="${deleteIndex}"]`);
	node.parentNode.removeChild(node);
	updateBindings();
	saveChanges();
	hideForm('#delete-redirect-form');
}

function cancelDelete() {
	hideForm('#delete-redirect-form');
}


function setupEditAndDeleteEventListeners() {

	el('#btn-save-redirect').addEventListener('click', saveRedirect);
	el('#btn-cancel-edit').addEventListener('click', cancelEdit);

	el('#confirm-delete').addEventListener('click', deleteRedirect);
	el('#cancel-delete').addEventListener('click', cancelDelete);

	el('#advanced-toggle a').addEventListener('click', toggleAdvancedOptions);	

	el('#create-new-redirect').addEventListener('click', createNewRedirect);
	//Listen to any change from the edit form...
	el('#edit-redirect-form').addEventListener('input', editFormChange);
}


setupEditAndDeleteEventListeners();