summaryrefslogtreecommitdiff
path: root/skins/common/protect.js
blob: a144e5ebfe5a9f97aeaa09b350bbbb327e448b73 (plain)
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
116
117
118
119
120
121
122
123
124
125
126
function protectInitialize(tableId, labelText) {
	if (document.createTextNode) {
		var box = document.getElementById(tableId);
		if (!box)
			return false;
		
		var tbody = box.getElementsByTagName('tbody')[0];
		var row = document.createElement('tr');
		tbody.appendChild(row);
		
		row.appendChild(document.createElement('td'));
		var col2 = document.createElement('td');
		row.appendChild(col2);
		
		var check = document.createElement('input');
		check.id = "mwProtectUnchained";
		check.type = "checkbox";
		check.onclick = protectChainUpdate;
		col2.appendChild(check);
		
		var label = document.createElement('label');
		label.setAttribute("for", "mwProtectUnchained");
		label.appendChild(document.createTextNode(labelText));
		col2.appendChild(label);
		
		if (protectAllMatch()) {
			check.checked = false;
			protectEnable(false);
		} else {
			check.checked = true;
			protectEnable(true);
		}
		
		return true;
	}
	return false;
}

function protectLevelsUpdate(source) {
	if (!protectUnchained()) {
		protectUpdateAll(source.selectedIndex);
	}
}

function protectChainUpdate() {
	if (protectUnchained()) {
		protectEnable(true);
	} else {
		protectChain();
		protectEnable(false);
	}
}


function protectAllMatch() {
	var values = new Array();
	protectForSelectors(function(set) {
		values[values.length] = set.selectedIndex;
	});
	for (var i = 1; i < values.length; i++) {
		if (values[i] != values[0]) {
			return false;
		}
	}
	return true;
}

function protectUnchained() {
	var unchain = document.getElementById("mwProtectUnchained");
	if (!unchain) {
		alert("This shouldn't happen");
		return false;
	}
	return unchain.checked;
}

function protectChain() {
	// Find the highest-protected action and bump them all to this level
	var maxIndex = -1;
	protectForSelectors(function(set) {
		if (set.selectedIndex > maxIndex) {
			maxIndex = set.selectedIndex;
		}
	});
	protectUpdateAll(maxIndex);
}

function protectUpdateAll(index) {
	protectForSelectors(function(set) {
		if (set.selectedIndex != index) {
			set.selectedIndex = index;
		}
	});
}

function protectForSelectors(func) {
	var selectors = protectSelectors();
	for (var i = 0; i < selectors.length; i++) {
		func(selectors[i]);
	}
}

function protectSelectors() {
	var all = document.getElementsByTagName("select");
	var ours = new Array();
	for (var i = 0; i < all.length; i++) {
		var set = all[i];
		if (set.id.match(/^mwProtect-level-/)) {
			ours[ours.length] = set;
		}
	}
	return ours;
}

function protectEnable(val) {
	// fixme
	var first = true;
	protectForSelectors(function(set) {
		if (first) {
			first = false;
		} else {
			set.disabled = !val;
			set.style.visible = val ? "visible" : "hidden";
		}
	});
}