JSFiddle - React, Tailwind, and code Playground

by John Schulz

HTML

<img src="http://desandro.com/content/2.resources/5.close-pixelate/img/stanley-small.jpg" />

JavaScript

var image2canvas = (function(global, document, undefined) {
    function image2canvas(img, opts) {
        if (!img) return;
        for (var key in opts) image2canvas[key] = opts[key];

        image2canvas.init.apply(image2canvas, arguments);
    }

    var defaults = {
        areSameOrigin: (function(global, document, undefined) {

            function areSameOrigin(remoteURL, localURL) {
                var local = areSameOrigin.parse(localURL || document.location.href),
                    remote = areSameOrigin.parse(remoteURL),
                    localOrigin = local.protocol + '//' + (document.domain || local.authority) + ':' + local.port,
                    remoteOrigin = remote.protocol + '//' + remote.authority + ':' + remote.port,
                    isRelative = (!remote.authority) && remote.relative,
                    isLocal = /^(?:file|data)$/.test(remote.protocol) || isRelative,
                    isSame = localOrigin === remoteOrigin;

                return !!(isLocal || isSame);
            };

            // parseUri 1.2.2
            // (c) Steven Levithan <stevenlevithan.com>
            // MIT License
            areSameOrigin.parse = function(str) {
                var o = areSameOrigin.parse.options,
                    m = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
                    uri = {},
                    i = 14;

                while (i--) uri[o.key[i]] = m[i] || "";

                uri[o.q.name] = {};
                uri[o.key[o.q.index]].replace(o.q.parser, function($0, $1, $2) {
                    if ($1) uri[o.q.name][$1] = $2;
                });

                return uri;
            };

            areSameOrigin.parse.options = {
                strictMode: true,
                key: ["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"],
                q: {
                    index: 12,
                   ...