<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
Test message :/
<p>Other :/ text :)</p>
<span>This too <a href="http://example.com">Example.com</a> :/</span>
</body>
</html>
var smiles = {
":)": "data:image/gif;base64,R0lGODlhEwATAPcAAP/+//7/////+////fvzYvryYvvzZ/fxg/zxWfvxW/zwXPrtW/vxXvfrXv3xYvrvYvntYvnvY/ruZPrwZPfsZPjsZfjtZvfsZvHmY/zxavftaPrvavjuafzxbfnua/jta/ftbP3yb/zzcPvwb/zzcfvxcfzxc/3zdf3zdv70efvwd/rwd/vwefftd/3yfPvxfP70f/zzfvnwffvzf/rxf/rxgPjvgPjvgfnwhPvzhvjvhv71jfz0kPrykvz0mv72nvblTPnnUPjoUPrpUvnnUfnpUvXlUfnpU/npVPnqVPfnU/3uVvvsWPfpVvnqWfrrXPLiW/nrX/vtYv7xavrta/Hlcvnuf/Pphvbsif3zk/zzlPzylfjuk/z0o/LqnvbhSPbhSfjiS/jlS/jjTPfhTfjlTubUU+/iiPPokfrvl/Dll/ftovLWPfHXPvHZP/PbQ/bcRuDJP/PaRvjgSffdSe3ddu7fge7fi+zkuO7NMvPTOt2/Nu7SO+3OO/PWQdnGbOneqeneqvDqyu3JMuvJMu7KNfHNON7GZdnEbejanObXnOW8JOa9KOvCLOnBK9+4Ku3FL9ayKuzEMcenK9e+XODOiePSkODOkOW3ItisI9yxL+a9NtGiHr+VH5h5JsSfNM2bGN6rMJt4JMOYL5h4JZl5Jph3Jpl4J5h5J5h3KJl4KZp5Ks+sUN7Gi96lLL+PKMmbMZt2Jpp3Jpt3KZl4K7qFFdyiKdufKsedRdm7feOpQN2QKMKENrpvJbFfIrNjJL1mLMBpLr9oLrFhK69bJFkpE1kpFYNeTqFEIlsoFbmlnlsmFFwpGFkoF/////7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAANAALAAAAAATABMAAAj/AKEJHCgokKJKlhThGciQYSIva7r8SHPFzqGGAwPd4bKlh5YsPKy0qFLnT0NAaHTcsIHDho0aKkaAwGCGEkM1NmSkIjWLBosVJT6cOjUrzsBKPl54KmYsACoTMmk1WwaA1CRoeM7siJEqmTIAsjp40ICK2bEApfZcsoQlxwxRzgI8W8XhgoVYA+Kq6sMK0QEYKVCUkoVqQwQJFTwFEAAAFZ9PlFy4OEEiRIYJD55EodDA1ClTbPp0okRFxBQDBRgskAKhiRMlc+Sw4SNpFCIoBBwkUMBkCBIiY8qAgcPG0KBHrBTFQbCEV5EjQYQACfNFjp5CgxpxagVtUhIjwzaJYSHzhQ4cP3ryQHLEqJbASnu+6EIW6o2b2X0ISXK0CFSugazs0YYmwQhziyuE2PLLIv3h0hArkRhiCCzAENOLL7tgAoqDGLXSSSaPMLIIJpmAUst/GA3UCiuv1PIKLtw1FBAAOw==",
":/": "data:image/gif;base64,R0lGODlhIwAiAKIAAP//AMzMAJmZAGZmAP8AAAAAEQAAAP///yH5BAEHAAcALAAAAAAjACIAAAPeeLrc/jCuAGiwMi9Q6/XXpT3cR5VoGIzbx73wq7JWbMeh5t18mUednrAiWJFcw95F8EDCCgWbIWorOjqnV8EwhXG5toCVEZJ+vecwk8z7GtBgnJjsfLnh79v4UNemOXdhcwp9dnloPQJrfFlJSUsThY43g4yTjmKLZZdCkISSnCWKdKE8npGNZnGJi4RFPQYEsgSHaq2fqYCzs7Uyow5idbFuXLRyA7cTrwBRf4Zvb0vJZEUUvTfRYgMawddt2iyKm6aZ2ywHikWvNSHp5ucK6eLq7tPw6ALIyPn3/SwJADs=",
};
var replacements = [];
onEachTextNode(document.body, function(node) {
var newNode = replaceTokensWithImages(node, smiles);
replacements.push([node, newNode]);
});
replacements.forEach(function(replacement) {
var node, newNode;
node = replacement[0];
newNode = replacement[1];
node.parentNode.replaceChild(newNode, node);
});
function onEachTextNode(base, cb) {
var iterator =
document.createNodeIterator(base, NodeFilter.SHOW_TEXT, nonEmptyText);
var currentNode = iterator.nextNode();
while(currentNode !== null) {
cb(currentNode);
currentNode = iterator.nextNode();
}
function nonEmptyText(node) {
return node.textContent.search(/\S/) !== -1 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
}
}
function replaceTokensWithImages(textNode, map) {
var fragment = document.createDocumentFragment();
fragment.appendChild(textNode.cloneNode(true));
return Object.keys(map).reduce(function(node, token) {
return replaceTokenWithImage(node, token, map[token]);
}, fragment);
}
function replaceTokenWithImage(fragment, token, imageUrl) {
var newFragment = document.createDocumentFragment();
[].forEach.call(fragment.childNodes, function(node) {
if(node.nodeType !== document.TEXT_NODE) {
newFragment.appendChild(node.cloneNode(true));
return;
}
var text = node.textContent;
var sections = text.split(token);
var current, hasNext;
for(var i = 0; i < sections.length; i++) {
current = sections[i];
hasNext = (i + 1) in sections;
newFragment.appendChild(new Text(current));
if(hasNext) {
newFragment.appendChild(createImage());
}
}
});
return newFragment;
function createImage() {
var image = new Image();
image.src = imageUrl;
image.alt = token;
return image;
}
}
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |