Created
October 1, 2013 06:52
-
-
Save dchapkine/6774736 to your computer and use it in GitHub Desktop.
Turns a json object with snipet content into a simple link that let you edit the snippet in the html5snippet.net editor This is useful if you host js/css/html5 snippets in your tutorials and want users to be able to play with it without leaving the browser, and without saving snippets at html5snippet.net server. Another example is: If your app …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Turns a json object with snipet content into a simple link that let you | |
* edit the snippet in the html5snippet.net editor. | |
* | |
* This is useful if you host js/css/html5 snippets in your tutorials and want | |
* users to be able to play with it without leaving the browser, and without | |
* saving snippets at html5snippet.net server. | |
* | |
* To use this function, simply copy-paste it in your project. It's standalone. | |
* | |
* <example> | |
* { | |
project: { | |
title: "Snippet test", | |
html: "<p>html</p>", | |
js: "//js", | |
css: "p {color: red}", | |
} | |
} | |
* </example> | |
* | |
* <example> | |
* { | |
project: { | |
title: "Snippet test 2", | |
html: "<p>html</p>", | |
js: "function main(){alert('ready')}", | |
css: "p {color: red}", | |
libs: [], | |
mainFunction: "main" | |
} | |
} | |
* </example> | |
*/ | |
var makeHtml5SnippetLink = function (o) | |
{ | |
//var that = this; | |
var tools = { | |
base64_encode: function(data) { | |
// Encodes string using MIME base64 algorithm | |
// | |
// version: 1107.2516 | |
// discuss at: http://phpjs.org/functions/base64_encode | |
// + original by: Tyler Akins (http://rumkin.com) | |
// + improved by: Bayron Guevara | |
// + improved by: Thunder.m | |
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) | |
// + bugfixed by: Pellentesque Malesuada | |
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) | |
// - depends on: utf8_encode | |
// * example 1: base64_encode('Kevin van Zonneveld'); | |
// * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' | |
// mozilla has this native | |
// - but breaks in 2.0.0.12! | |
//if (typeof this.window['atob'] == 'function') { | |
// return atob(data); | |
//} | |
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; | |
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, | |
ac = 0, | |
enc = "", | |
tmp_arr = []; | |
if (!data) { | |
return data; | |
} | |
data = this.utf8_encode(data + ''); | |
do { // pack three octets into four hexets | |
o1 = data.charCodeAt(i++); | |
o2 = data.charCodeAt(i++); | |
o3 = data.charCodeAt(i++); | |
bits = o1 << 16 | o2 << 8 | o3; | |
h1 = bits >> 18 & 0x3f; | |
h2 = bits >> 12 & 0x3f; | |
h3 = bits >> 6 & 0x3f; | |
h4 = bits & 0x3f; | |
// use hexets to index into b64, and append result to encoded string | |
tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); | |
} while (i < data.length); | |
enc = tmp_arr.join(''); | |
switch (data.length % 3) { | |
case 1: | |
enc = enc.slice(0, -2) + '=='; | |
break; | |
case 2: | |
enc = enc.slice(0, -1) + '='; | |
break; | |
} | |
return enc; | |
}, | |
utf8_encode: function(argString) { | |
// Encodes an ISO-8859-1 string to UTF-8 | |
// | |
// version: 1107.2516 | |
// discuss at: http://phpjs.org/functions/utf8_encode | |
// + original by: Webtoolkit.info (http://www.webtoolkit.info/) | |
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) | |
// + improved by: sowberry | |
// + tweaked by: Jack | |
// + bugfixed by: Onno Marsman | |
// + improved by: Yves Sucaet | |
// + bugfixed by: Onno Marsman | |
// + bugfixed by: Ulrich | |
// + bugfixed by: Rafal Kukawski | |
// * example 1: utf8_encode('Kevin van Zonneveld'); | |
// * returns 1: 'Kevin van Zonneveld' | |
if (argString === null || typeof argString === "undefined") { | |
return ""; | |
} | |
var string = (argString + ''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n"); | |
var utftext = "", | |
start, end, stringl = 0; | |
start = end = 0; | |
stringl = string.length; | |
for (var n = 0; n < stringl; n++) { | |
var c1 = string.charCodeAt(n); | |
var enc = null; | |
if (c1 < 128) { | |
end++; | |
} else if (c1 > 127 && c1 < 2048) { | |
enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128); | |
} else { | |
enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128); | |
} | |
if (enc !== null) { | |
if (end > start) { | |
utftext += string.slice(start, end); | |
} | |
utftext += enc; | |
start = end = n + 1; | |
} | |
} | |
if (end > start) { | |
utftext += string.slice(start, stringl); | |
} | |
return utftext; | |
} | |
}; | |
return "http://html5snippet.net/#b64/"+encodeURIComponent(tools.base64_encode(JSON.stringify(o))); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment