NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Data URL generator
// @namespace https://github.com/AlorelUserscripts/data-url-generator
// @homepage https://github.com/AlorelUserscripts/data-url-generator
// @supportURL https://github.com/AlorelUserscripts/data-url-generator/issues
// @version 0.1.1
// @description Generates data URLs
// @author Alorel <a.molcanovas@gmail.com>
// @include *
// @grant GM_setClipboard
// @grant GM_registerMenuCommand
// @grant GM_notification
// @grant GM_openInTab
// @noframes
// @require https://cdn.rawgit.com/coolaj86/TextEncoderLite/v1.0.0/index.js
// @require https://cdn.rawgit.com/beatgammit/base64-js/v1.1.2/base64js.min.js
// @downloadURL https://raw.githubusercontent.com/AlorelUserscripts/data-url-generator/master/data-url.user.js
// @updateURL https://raw.githubusercontent.com/AlorelUserscripts/data-url-generator/master/data-url.meta.js
// @icon https://cdn.rawgit.com/AlorelUserscripts/data-url-generator/0.1/ico.png
// @license LGPL-2.1
// ==/UserScript==
(function (toast) {
"use strict";
//Check requirements
if ((function () {
var requirements = [
"window.XMLHttpRequest",
"window.FileReader",
"document.contentType"
];
for (var i = 0; i < requirements.length; i++) {
if (eval("typeof(" + requirements[i] + ")") === "undefined") {
toast("Your browser does not support " + requirements[i] + " - please update and try again.");
return false;
}
}
return true;
})()) {
var saveDataURL = function (dataurl) {
GM_setClipboard(dataurl);
toast({
text: "The data URL has been copied to your clipboard; clickie to open!",
onclick: function () {
GM_openInTab(dataurl);
}
});
},
menuCallback;
if (document.contentType === "text/html") {
var encoder = new TextEncoderLite('utf-8');
menuCallback = function () {
saveDataURL("data:text/html;base64," + base64js.fromByteArray(encoder.encode(document.firstElementChild.outerHTML)));
};
} else {
var blobToDataURL = function (blob, callback) {
var a = new FileReader();
a.onload = function (e) {
callback(e.target.result);
};
a.readAsDataURL(blob);
}, readyStateListener = function () {
if (this.readyState === 4) {
blobToDataURL(this.response, saveDataURL);
}
};
menuCallback = function () {
var xhr = new XMLHttpRequest();
xhr.responseType = "blob";
xhr.addEventListener("readystatechange", readyStateListener);
xhr.open("GET", document.URL);
xhr.send();
};
}
GM_registerMenuCommand("Get data URL!", menuCallback, "d");
}
})(GM_notification);