Bear in mind that at the time of writing this, I have known how to use syntax-rules since yesterday, but my knowledge seems to be complete enough to write a working module system
GM_registerMenuCommand('Options', options);
function options() {
var div = document.createElement('div');
div.setAttribute('style', 'position: fixed; top:0; right:0');
div.innerHTML =
'<div>Options</div>' +
'<label>foo<input type="checkbox"></label><br>' +
'<label>bar<input type="checkbox"></label><br>' +
'<label>baz<input type="checkbox"></label><br>' +
'<a>save</a> <a>cancel</a>';
var boxes = div.getElementsByTagName('input');
for (var i = 0, l = boxes.length; i < l; i++)
boxes[i].checked = GM_getValue(boxes[i].previousSibling.textContent);
var a = div.getElementsByTagName('a');
a[0].addEventListener('click',
function() {//save
var div = this.parentNode;
var boxes = div.getElementsByTagName('input');
for (var i = 0, l = boxes.length; i < l; i++)
GM_setValue(boxes[i].previousSibling.textContent, boxes[i].checked);
div.parentNode.removeChild(div);
},
true);
a[1].addEventListener('click',
function() {//cancel
var div = this.parentNode;
div.parentNode.removeChild(div);
},
true);
document.body.appendChild(div);
}
This might surprise you, but noticing that one operator does two different things in two distinct languages isn't funny. Go and fuck yourself and your C++-level humour.