JSFiddle - React, Tailwind, and code Playground

by nathan

JavaScript

var file,
    mediaResource;

file = function (a) {
    var filename,
        reader,
        saveFile,
        type;
    reader = new FileReader();
    reader.onloaded = function (e) {
        filename = sha256(e.target.result);

        // this doesn't need to be done in the reader's onloaded, except that
        // the filename needs to be generated first
        saveFile(filename, e.target.result, function (entry) {
            url = entry.toURL();
            
            // flush the file data out of scope to save memory
            // important as browsers restrict RAM/page
            a = undefined;
        });
    };
    saveFile = function (name, data, oncomplete) {
        var error,
            processFs,
            quota = 5368709120, // 5 GB
            requestFileSystem;
        requestFileSystem = window.requestFileSystem ||
            window.webkitRequestFileSystem ||
            window.mozRequestFileSystem ||
            window.msRequestFileSystem ||
            window.oRequestFileSystem ||
            function () {
                throw "Not supported";
            };
        error = function () {
            throw "File error";
        };
        processFs = function () {
            fs.root.getFile(name, {}, function (entry) {
                entry.createWriter(function (writer) {
                    writer.onwriteend = function () {
                        if (typeof oncomplete === 'function') {
                            oncomplete(entry);
                        }
                    };
                    writer.write(data);
                });
            });
        };
        requestFileSystem(1, quota, processFs, error);
    };
    if (a instanceof File) {
        reader.readAsBinaryString(a);
        type = a.type;
    } else if (typeof a === 'string') {
        url = a;
    }
    return {
        getUrl : function () {
            return url;
        },
        getType : function () {
            return type;
        }
   ...