Til de, der kan lide at lege med bookmarklets er her en quick'n'dirty bookmarlet editor. Kald f.eks. filen
BookMarkletEdit.hta.
Du skriver en eller anden kode i feltet, som du plejer at skrive - på flere linjer og med indrykning. Du
skal dog huske at afslutte linjer med semikolon!
Når du vil teste din bookmarklet, trykker du
Create. Så kopieres indholdet til variabel og foldes sammen på én linje, samtidig med, der sættes
java script: før og
;void(0) efter. Til sidst kopieres det hele til clipboard'et.
Det er en helt simpel editor, men du kan dog bruge
Tab og
Shift+Tab på enkelt linjer og blokke af tekst.
Koden:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "
http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
<HTA:APPLICATION ID="BookMarkletEditor" APPLICATIONNAME="BookMarkletEdit" VERSION="BookMarkletEditor 1.0.0"
CAPTION="yes" BORDER="thin" INNERBORDER="yes" SHOWINTASKBAR="yes" SINGLEINSTANCE="yes"
SYSMENU="yes" NAVIGABLE="no" WINDOWSTATE="normal">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>BookMarklet</title>
<style type="text/css">
html, body {
height: 100%;
margin: 0;
padding: 0;
font: 11px tahoma, sans-serif;
background: buttonface;
overflow: auto;
}
p, h3 {
text-align: center;
}
h3 {
margin-top: 12px;
}
input {
width: 45px;
font: 11px tahoma, sans-serif;
}
button {
width: 85px;
}
input, button {
vertical-align: middle;
}
textarea {
font: 12px 'courier new';
width: 90%;
height: 350px;
margin: 0 auto;
display: block;
overflow: auto;
}
</style>
<script type="text/javascript">
String.prototype.trim=function(){return this.replace(/(^\s+)|\s+$/g,"")};
var sTab = " ";
var sBreak = "\r\n";
var sWhiteSpace = "";
function checkKeyUp(oTxt, oEvnt) {
var bKillEvnt = false;
if (oEvnt.keyCode==13 || oEvnt.keyCode==9) {
var oRng = document.selection.createRange(),
oRng2 = oRng.duplicate();
oRng2.moveToElementText(oTxt);
if (oEvnt.keyCode==13) {
while (oRng.compareEndPoints("StartToStart", oRng2)>-1 && oRng.text.indexOf(sBreak)<0) {
oRng.moveStart("character", -1);
}
if (oRng.text.indexOf(sBreak)>-1) oRng.moveStart("character", sBreak.length-1);
(/^([ ]*)/).test(oRng.text);
sWhiteSpace = RegExp.$1;
oRng.collapse(false);
oRng.text += sBreak + sWhiteSpace;
oRng.select();
bKillEvnt = true;
}
else if (oEvnt.keyCode==9) {
oRng2.setEndPoint("endToStart", oRng);
if (oEvnt.shiftKey) {
var bDoSelect = oRng.text.length>0;
while (oRng.compareEndPoints("StartToStart", oRng2)>0 && oRng.text.substr(0, sBreak.length)!=sBreak) {
oRng.moveStart("character", -1);
}
if (oRng.text.substr(0, sBreak.length)==sBreak) oRng.moveStart("character", sBreak.length-1);
if (oRng.text.length>0) {
var oRX = new RegExp("(^|"+sBreak+")[ ]{0,4}", "g");
oRng.text = oRng.text.replace(oRX, "$1");
oRng.setEndPoint("startToEnd", oRng2);
} else {
var oRX = new RegExp("(^|"+sBreak+")[ ]{0,4}", "g");
oRng.text = oRng.text.replace(oRX, "$1");
}
if (bDoSelect) oRng.select();
} else {
if (oRng.text.length>0) {
var oRX = new RegExp("(^|"+sBreak+")", "g");
oRng.text = oRng.text.replace(oRX, "$1"+sTab);
oRng.setEndPoint("startToEnd", oRng2);
oRng.select();
}
else oRng.text = sTab;
}
bKillEvnt = true;
}
}
if (bKillEvnt) {
oEvnt.cancelBubble = true;
oEvnt.returnValue = false;
}
}
function cleanTabs() {
clipboardData.setData("Text", clipboardData.getData("Text").replace(/\t/g, sTab));
}
function createBookMarklet() {
document.getElementById("bml").firstChild.nodeValue = "0";
var sCode = document.getElementById("code").value.trim();
if (/^\s*$/.test(sCode)) return;
sCode = sCode.replace(/[ ]+/g, " ");
sCode = sCode.replace(/\}\r\n/g, "};");
sCode = sCode.replace(/\r\n|\r|\n|\t/g, "");
sCode = sCode.replace(/ ?(=|\(|\)|\{|\}|\[|\]|\+|\-|\*|\?|,|;|<|>|&|\|) ?/g, "$1");
sCode = sCode.replace(/;\}/g, "}");
sCode = "java script:"+sCode+";void(0)";
sCode = sCode.replace(/;;/g, ";");
if (window.clipboardData) window.clipboardData.setData("Text", sCode);
document.getElementById("bml").firstChild.nodeValue = sCode.length;
}
window.onload = function() {
document.getElementById("code").focus();
}
</script>
</head>
<body>
<h3>Create BookMarklet</h3>
<p style="text-align:left"><textarea id="code" onkeydown="checkKeyUp(this, event)" onbeforepaste="cleanTabs()"></textarea></p>
<p><button onclick="createBookMarklet()">Create</button></p>
<p>Number of characters: <span id="bml">0</span></p>
</body>
</html>