RegexToText

by Edgar Martinez

HTML

<div id="tool-text-from-regex">
  <div class="field">
    <textarea id="text-from-regex-text"></textarea>
  </div>
  <div class="field">
    <div id="action-error" style="display: none;"></div>
  </div>
  <div class="field">
    <input type="submit" value="Generate Text" id="text-from-regex-submit"> <input type="button" value="Copy to clipboard" id="copy-to-clipboard"> <span id="text-from-regex-submit-undo" class="undo" style="display: inline;"><a href="#">(undo)</a></span>
  </div>
  <div class="field">
    <div>
      
      Regex: <input type="text" value="hello \d{1,5} world" id="text-from-regex-regex">
      
    </div>
  </div>
  <div class="field">
    How many results?
    <input id="text-from-regex-how-many" value="5" size="3">
  </div>
</div>

JavaScript

mkTool("text-from-regex", function(r) {
    for (var n = parseInt($("#text-from-regex-how-many").val(), 10), o = $("#text-from-regex-regex").val(), e = "", t = 1; t <= n; t++) {
      var a = new RandExp(o);
      e += a.gen(),
        e += "\n";
    }
    return e
  }, {
    allowEmptyText: !0,
    exceptionFn: function(r) {
      $("#action-error").show(),
        $("#action-error").text(r)
    }
  })
	
////////////////////////////////librerias	

var undoStack = [];

function mkUndo (toolName) {
    var undoSelector = '#' + toolName + '-submit-undo';
    var textSelector = '#' + toolName + '-text';

    $(undoSelector).click(function (ev) {
        ev.preventDefault();

        var last = undoStack.pop();
        $(textSelector).val(last);

        if (undoStack.length == 0) {
            $(undoSelector).hide();
        }
    });
}

function mkTool (toolName, computeFn, opts) {
    opts = opts || {};

    var submitSelector = '#' + toolName + '-submit';
    var undoSelector = '#' + toolName + '-submit-undo';
    var textSelector = '#' + toolName + '-text';

    $(submitSelector).click(function () {
        var text = $(textSelector).val();
        if (!opts.allowEmptyText) {
            if (!text.length) return;
        }

        $('#action-error').hide();

        try {
            if (opts.asyncResultFn) {
                computeFn(text, opts.asyncResultFn);
            }
            else {
                var result = computeFn(text, opts.asyncResultFn);
                $(textSelector).val(result);
            }
        }
        catch (err) {
            if (opts.exceptionFn) opts.exceptionFn(err);
            return;
        }

        undoStack.push(text);

        $(undoSelector).show();
    });

    mkUndo(toolName);
}

function mkImageConvertTool (toolName, inputOpts, outputOpts, computeFn) {
    if ($('#tool-' + toolName).length == 0) return;

    var fileSelector = '#file-select';
    var submitSelector = '#submit';
    var selectedFile;

    //...