Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function() {
- var preTags = document.getElementsByTagName('pre');
- var preWithHeaderInfo = preTags[0];
- //var preWithContent = preTags[2];
- var preWithContent = "";
- for(var i=0;i=2){
- preWithContent = preWithContent + preTags[i].textContent;
- }
- }
- //var lines = preWithContent.textContent.split('\n');
- var lines = preWithContent.split('\n');
- // get data about the formatting (changes between different versions of chrome)
- var rgx = /^(0{8}:\s+)([0-9a-f]{2}\s+)[0-9a-f]{2}/m;
- var match = rgx.exec(lines[0]);
- var text = '';
- for (var i = 0; i < lines.length; i++) {
- var line = lines[i];
- var firstIndex = match[1].length; // first index of the chars to match (e.g. where a '84' would start)
- var indexJump = match[2].length; // how much space is between each set of numbers
- var totalCharsPerLine = 16;
- index = firstIndex;
- for (var j = 0; j < totalCharsPerLine; j++) {
- var hexValAsStr = line.substr(index, 2);
- if (hexValAsStr == ' ') {
- // no more chars
- break;
- }
- var asciiVal = parseInt(hexValAsStr, 16);
- text += String.fromCharCode(asciiVal);
- index += indexJump;
- }
- }
- var headerText = preWithHeaderInfo.textContent;
- var elToInsertBefore = document.body.childNodes[0];
- var insertedDiv = document.createElement("div");
- document.body.insertBefore(insertedDiv, elToInsertBefore);
- // find the filename
- var nodes = [document.body];
- var filepath = '';
- while (true) {
- var node = nodes.pop();
- if (node.hasChildNodes()) {
- var children = node.childNodes;
- for (var i = children.length - 1; i >= 0; i--) {
- nodes.push(children[i]);
- }
- }
- if (node.nodeType === Node.TEXT_NODE && /\S/.test(node.nodeValue)) {
- // 1st depth-first text node (with non-whitespace chars) found
- filepath = node.nodeValue;
- break;
- }
- }
- outputResults(insertedDiv, convertToBase64(text), filepath, headerText);
- insertedDiv.appendChild(document.createElement('hr'));
- function outputResults(parentElement, fileContents, fileUrl, headerText) {
- // last updated 1/27/12
- var rgx = /.+\/([^\/]+)/;
- var filename = rgx.exec(fileUrl)[1];
- // get the content type
- rgx = /content-type: (.+)/i;
- var match = rgx.exec(headerText);
- var contentTypeFound = match != null;
- var contentType = "text/plain";
- if (contentTypeFound) {
- contentType = match[1];
- }
- var dataUri = "data:" + contentType + ";base64," + fileContents;
- // check for gzipped file
- var gZipRgx = /content-encoding: gzip/i;
- if (gZipRgx.test(headerText)) {
- filename += '.gz';
- }
- // check for image
- var imageRgx = /image/i;
- var isImage = imageRgx.test(contentType);
- // create link
- var aTag = document.createElement('a');
- aTag.textContent = "Left-click to download the cached file";
- aTag.setAttribute('href', dataUri);
- aTag.setAttribute('download', filename);
- parentElement.appendChild(aTag);
- parentElement.appendChild(document.createElement('br'));
- // create image
- if (isImage) {
- var imgTag = document.createElement('img');
- imgTag.setAttribute("src", dataUri);
- parentElement.appendChild(imgTag);
- parentElement.appendChild(document.createElement('br'));
- }
- // create warning
- if (!contentTypeFound) {
- var pTag = document.createElement('p');
- pTag.textContent = "WARNING: the type of file was not found in the headers... defaulting to text file.";
- parentElement.appendChild(pTag);
- }
- }
- function getBase64Char(base64Value) {
- if (base64Value < 0) {
- throw "Invalid number: " + base64Value;
- } else if (base64Value <= 25) {
- // A-Z
- return String.fromCharCode(base64Value + "A".charCodeAt(0));
- } else if (base64Value <= 51) {
- // a-z
- base64Value -= 26; // a
- return String.fromCharCode(base64Value + "a".charCodeAt(0));
- } else if (base64Value <= 61) {
- // 0-9
- base64Value -= 52; // 0
- return String.fromCharCode(base64Value + "0".charCodeAt(0));
- } else if (base64Value <= 62) {
- return '+';
- } else if (base64Value <= 63) {
- return '/';
- } else {
- throw "Invalid number: " + base64Value;
- }
- }
- function convertToBase64(input) {
- // http://en.wikipedia.org/wiki/Base64#Example
- var remainingBits;
- var result = "";
- var additionalCharsNeeded = 0;
- var charIndex = -1;
- var charAsciiValue;
- var advanceToNextChar = function() {
- charIndex++;
- charAsciiValue = input.charCodeAt(charIndex);
- return charIndex < input.length;
- };
- while (true) {
- var base64Char;
- // handle 1st char
- if (!advanceToNextChar()) break;
- base64Char = charAsciiValue >>> 2;
- remainingBits = charAsciiValue & 3; // 0000 0011
- result += getBase64Char(base64Char); // 1st char
- additionalCharsNeeded = 3;
- // handle 2nd char
- if (!advanceToNextChar()) break;
- base64Char = (remainingBits << 4) | (charAsciiValue >>> 4);
- remainingBits = charAsciiValue & 15; // 0000 1111
- result += getBase64Char(base64Char); // 2nd char
- additionalCharsNeeded = 2;
- // handle 3rd char
- if (!advanceToNextChar()) break;
- base64Char = (remainingBits << 2) | (charAsciiValue >>> 6);
- result += getBase64Char(base64Char); // 3rd char
- remainingBits = charAsciiValue & 63; // 0011 1111
- result += getBase64Char(remainingBits); // 4th char
- additionalCharsNeeded = 0;
- }
- // there may be an additional 2-3 chars that need to be added
- if (additionalCharsNeeded == 2) {
- remainingBits = remainingBits << 2; // 4 extra bits
- result += getBase64Char(remainingBits) + "=";
- } else if (additionalCharsNeeded == 3) {
- remainingBits = remainingBits << 4; // 2 extra bits
- result += getBase64Char(remainingBits) + "==";
- } else if (additionalCharsNeeded != 0) {
- throw "Unhandled number of additional chars needed: " + additionalCharsNeeded;
- }
- return result;
- }
- })()
Add Comment
Please, Sign In to add comment