Advertisement
egsemenov

Untitled

Apr 7th, 2020
555
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict";
  2.  
  3. var TAAG = TAAG || {};
  4. TAAG.fonts = {};
  5. TAAG.fonts.figlet = [];
  6. TAAG.fonts.figlet[0] = new Figlet();
  7. TAAG.fonts.aol = [];
  8. TAAG.fonts.aol[0] = new AolFont();
  9. TAAG.currentFont = null;
  10. TAAG.testingAll = false;
  11. TAAG.lastAjax = {};
  12. TAAG.opts = {};
  13. TAAG.opts.progComment = "";
  14. TAAG.opts.whiteSpace = "";
  15.  
  16. var AOLFONTS = {};
  17.  
  18. TAAG.imageGenerationSupported = (function (){
  19.   //var elem = document.createElement('canvas');
  20.   //return !!(elem.getContext && elem.getContext('2d') && elem.toDataURL);
  21.   return false;
  22. })();
  23. if (TAAG.imageGenerationSupported) {
  24.     document.getElementById("divBtnGenImage").style.display = "block";
  25. }
  26.  
  27. TAAG.displayClass = function(className, fontName) {
  28.     if (className !== 'fig') {
  29.         return className;
  30.     }
  31.     //console.log('fontname='+fontName);
  32.  
  33.     var ansiFonts = {};
  34.     ansiFonts['3D-ASCII'] = true;
  35.     ansiFonts['Bloody'] = true;
  36.     ansiFonts['Calvin S'] = true;
  37.     ansiFonts['Delta Corps Priest 1'] = true;
  38.     ansiFonts['Electronic'] = true;
  39.     ansiFonts['Elite'] = true;
  40.     ansiFonts['KOLO-TDF'] = true;
  41.     ansiFonts['ANSI Shadow'] = true;
  42.     ansiFonts['Stronger Than All'] = true;
  43.     ansiFonts['THIS'] = true;
  44.     ansiFonts['The Edge'] = true;
  45.  
  46.     return ansiFonts[fontName] ? 'fig-ansi' : 'fig';
  47. }
  48.  
  49. TAAG.updateWhiteSpace = function() {
  50.     var elm = document.getElementById("taagWhiteSpaceOverride");
  51.     if (elm) {TAAG.opts.whiteSpace = elm.value;}
  52. };
  53. TAAG.updateProgComment = function() {
  54.     var elm = document.getElementById("taagProgComment");
  55.     if (elm) {TAAG.opts.progComment = elm.value;}
  56. };
  57.  
  58. TAAG.setHash = function(page) {
  59.     var txtBox = document.getElementById("inputText");
  60.     var fontList = document.getElementById("fontList");
  61.     var params = [], paramsStr;
  62.    
  63.     var hBox = document.getElementById("taagCharWidth");
  64.     var hBoxValue = hBox.options[hBox.selectedIndex].value;
  65.     var vBox = document.getElementById("taagCharHeight");
  66.     var vBoxValue = vBox.options[vBox.selectedIndex].value;
  67.    
  68.     if (hBoxValue !== "default") {
  69.         params.push("h=" + hBox.selectedIndex);
  70.     }
  71.     if (vBoxValue !== "default") {
  72.         params.push("v=" + vBox.selectedIndex);
  73.     }
  74.     if (TAAG.opts.progComment !== "") {
  75.         params.push("c=" + encodeURIComponent(TAAG.opts.progComment));
  76.     }
  77.     if (TAAG.opts.whiteSpace !== "") {
  78.         params.push("w=" + encodeURIComponent(TAAG.opts.whiteSpace));
  79.     }
  80.     params.push("f="+encodeURIComponent(fontList.options[fontList.selectedIndex].text));
  81.     params.push("t="+ encodeURIComponent(txtBox.value));
  82.    
  83.     paramsStr = params.join("&");
  84.    
  85.     if (page === "display") {
  86.         window.location.hash = "#p=display&" + paramsStr;
  87.     } else if (page === "author") {
  88.         window.location.hash = "#p=author&" + paramsStr;
  89.     } else if (page === "about") {
  90.         window.location.hash = "#p=about&" + paramsStr;
  91.     } else if (page === "whatsnew") {
  92.         window.location.hash = "#p=whatsnew&" + paramsStr;
  93.     } else if (page === "moreopts") {
  94.         window.location.hash = "#p=moreopts&" + paramsStr;
  95.     } else if (page === "testall") {
  96.         window.location.hash = "#p=testall&" + paramsStr;
  97.     }
  98. };
  99.  
  100. TAAG.loadHash = function(hash) {
  101.     if (hash.length <= 1) {hash = "#nope=nope";}
  102.    
  103.     var elms = hash.substr(1).split("&");
  104.     var ii, params = {}, param, len;
  105.     var fontList = document.getElementById("fontList");
  106.     len = elms.length;
  107.     for (ii = 0; ii < len; ii++) {
  108.         param = elms[ii].split("=");
  109.         if (param.length === 2) {
  110.             params[param[0]] = decodeURIComponent(param[1]);
  111.         }
  112.     }
  113.    
  114.     if (params["h"]) {
  115.         var num = parseInt(params["h"], 10);
  116.         var hBox = document.getElementById("taagCharWidth");
  117.         if (num >= 0 && num < hBox.options.length) {
  118.             hBox.selectedIndex = num;
  119.         }
  120.     }
  121.     if (params["v"]) {
  122.         var num = parseInt(params["v"], 10);
  123.         var vBox = document.getElementById("taagCharHeight");
  124.         if (num >= 0 && num < vBox.options.length) {
  125.             vBox.selectedIndex = num;
  126.         }
  127.     }
  128.     if (params["c"]) {
  129.         TAAG.opts.progComment = params["c"];
  130.     }
  131.     if (params["w"]) {
  132.         TAAG.opts.whiteSpace = params["w"].substr(0,1);
  133.     }
  134.    
  135.     if (params["f"]) {
  136.         len = fontList.options.length;
  137.         for (ii = 0; ii < len; ii++) {
  138.             if (fontList.options[ii].text === params["f"]) {
  139.                 fontList.selectedIndex = ii;
  140.                 break;
  141.             }
  142.         }
  143.     }
  144.    
  145.     if (params["t"]) {
  146.         var txtBox = document.getElementById("inputText");
  147.         txtBox.value = params["t"];
  148.     }
  149.    
  150.     var page = params["p"];
  151.     if (page) {
  152.         if (page === "display") {
  153.             TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  154.                 TAAG.updateDisplay();
  155.                 var txtBox = document.getElementById("inputText");
  156.                 txtBox.focus();
  157.                 var tmp = txtBox.value;
  158.                 txtBox.value = "";
  159.                 txtBox.value = tmp;
  160.             });
  161.         } else if (page === "author") {
  162.             TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  163.                 TAAG.displayAuthorInfo();  
  164.             });
  165.         } else if (page === "about") {
  166.             TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  167.                 TAAG.displayAbout();  
  168.             });
  169.         } else if (page === "whatsnew") {
  170.             TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  171.                 TAAG.displayWhatsNew();  
  172.             });
  173.         } else if (page === "moreopts") {
  174.             TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  175.                 TAAG.displayMoreOptions();  
  176.             });
  177.         } else if (page === "testall") {
  178.             TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  179.                 TAAG.displayTestAll();  
  180.             });
  181.         }
  182.     } else {
  183.         var fontList = document.getElementById("fontList");
  184.         TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  185.             TAAG.updateDisplay();  
  186.             var txtBox = document.getElementById("inputText");
  187.             txtBox.focus();
  188.             var tmp = txtBox.value;
  189.             txtBox.value = "";
  190.             txtBox.value = tmp;
  191.         });
  192.     }
  193. };
  194.  
  195. TAAG.updateFont = function(newFont, callback, secondAttempt) {
  196.     var fontUrl = "./fonts/"+newFont;
  197.     var isFiglet = (fontUrl.substr(fontUrl.length-3,3)!=="aol") ? true : false;
  198.     if (isFiglet) {
  199.         TAAG.lastAjax = $.ajax({
  200.             url: fontUrl,
  201.             success: function(res) {
  202.                 TAAG.fonts.figlet[0].load(res);
  203.                 TAAG.currentFont = TAAG.fonts.figlet[0];
  204.                
  205.                 var charWidth = 10;
  206.                 TAAG.currentFont.loadHorizontalOpts(charWidth.options[charWidth.selectedIndex].value);
  207.                 var charHeight = document.getElementById("taagCharHeight");
  208.                 TAAG.currentFont.loadVerticalOpts(charHeight.options[charHeight.selectedIndex].value);
  209.                
  210.                 TAAG.setHash("display");
  211.                 if (callback) {callback();}
  212.             }
  213.         });
  214.     } else {
  215.         if (typeof AOLFONTS[newFont] !== "undefined") {
  216.             TAAG.fonts.aol[0].load(AOLFONTS[newFont]);
  217.             TAAG.currentFont = TAAG.fonts.aol[0];
  218.             TAAG.updateDisplay();
  219.             TAAG.setHash("display");
  220.             if (callback) {callback();}
  221.         } else {
  222.             if (!AOLFONTS.isLoaded && secondAttempt !== true) {
  223.                 var aolScript = document.createElement("script");
  224.                 aolScript.src = "./js/macros.min2.js";
  225. aolScript.charset="ISO-8859-1";
  226.                 aolScript.onload = function() {
  227.                     TAAG.updateFont(newFont, callback, true);
  228.                 };
  229.                 aolScript.onreadystatechange = function () {
  230.                     if (this.readyState === 'complete' || this.readyState === 'loaded' ) {
  231.                         TAAG.updateFont(newFont, callback, true);
  232.                     }
  233.                 };
  234.                 var head= document.getElementsByTagName('head')[0];
  235.                 head.appendChild(aolScript);
  236.             } else {
  237.                 console.log("Error: Something went wrong");
  238.             }
  239.         }
  240.     }
  241. };
  242.  
  243. TAAG.footerButtonsHidden = false;
  244. TAAG.changePage = function(newPage) {
  245.     TAAG.currentPage = newPage;
  246.     if (TAAG.lastAjax) {
  247.         if (typeof TAAG.lastAjax.abort !== "undefined") {
  248.             TAAG.lastAjax.abort();
  249.         }
  250.     }
  251.     if (newPage === "testall") {
  252.         TAAG.footerButtonsHidden = true;
  253.         $("#footer-text-specific").fadeOut("slow");
  254.     } else if (newPage === "testallstop") {
  255.         // do nothing
  256.     } else {
  257.         if (TAAG.footerButtonsHidden===true) {
  258.             TAAG.footerButtonsHidden = false;
  259.             $("#footer-text-specific").fadeIn("slow");
  260.         }
  261.     }
  262. };
  263.  
  264. TAAG.fontReady = function() {
  265.     if (TAAG.currentFont !== null) {
  266.         return true;
  267.     }
  268.     return false;  
  269. };
  270.  
  271. TAAG.getText = function(txt, txtId, font, fontName) {
  272.     font = font || TAAG.currentFont;
  273.     var txt = font.getText(txt);
  274.     txt = txt.replace(/</g, "&lt;").replace(/>/g, "&gt;");
  275.    
  276.     if (TAAG.opts.whiteSpace) {
  277.         if (TAAG.opts.whiteSpace !== " " && font.getFontType() === "fig") {
  278.             txt = txt.replace(/ /g, TAAG.opts.whiteSpace);
  279.         }
  280.     }
  281.    
  282.     var progCommentOpt = TAAG.opts.progComment;
  283.     if (progCommentOpt) {
  284.         if (progCommentOpt === "c") {
  285.             txt = "/***\n *    " + txt.split("\n").join("\n *    ") + "\n */";
  286.         } else if (progCommentOpt === "lua") {
  287.             txt = "--[[\n" + txt.split("\n").join("\n") + "\n--]]";
  288.         } else if (progCommentOpt === "c++") {
  289.             txt = "//  " + txt.split("\n").join("\n//  ");
  290.         } else if (progCommentOpt === "echo") {
  291.             txt = "echo \"" + txt.replace(/"/g,'\\"').replace(/`/g,'\\`').split("\n").join("\";\necho \"") + '";';
  292.         } else if (progCommentOpt === "bash") {
  293.             txt = "#  " + txt.split("\n").join("\n#  ");
  294.         } else if (progCommentOpt === "vb") {
  295.             txt = "'  " + txt.split("\n").join("\n'  ");
  296.         } else if (progCommentOpt === "mysql") {
  297.             txt = "--  " + txt.split("\n").join("\n--  ");
  298.         }
  299.     }
  300.    
  301.     fontName = fontName || fontList.options[fontList.selectedIndex].value.split('.')[0];
  302.  
  303.     var idStr = (typeof txtId !== "undefined") ? "id='"+txtId+"'" : "id='taag_output_text'";
  304.     return "<pre " + idStr + " style='float:left;' class='"+TAAG.displayClass(font.getFontType(),fontName)+"' contenteditable='true'>" + txt + "</pre><div style=\"clear:both\"></div>";
  305. };
  306.  
  307. TAAG.useFont = function(fontName) {
  308.     var ii,
  309.         fontList = document.getElementById("fontList"),
  310.         len = fontList.length,
  311.         listedName,
  312.         index = -1;
  313.     for (ii = 0; ii < len; ii++) {
  314.         listedName = fontList.options[ii].text;
  315.         if (listedName === fontName) {
  316.             index = ii;
  317.             break;
  318.         }
  319.     }
  320.     if (index === -1) {return;}
  321.     fontList.selectedIndex = index;
  322.     TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  323.         TAAG.updateDisplay();
  324.     });
  325. };
  326.  
  327. TAAG.updateDisplay = function() {
  328.     var inputTxt = document.getElementById("inputText");
  329.     var output = document.getElementById("outputFigDisplay");
  330.     var txtBox = document.getElementById("inputText");
  331.     var fontList = document.getElementById("fontList");
  332.     document.getElementById("outputFigDisplay").className = TAAG.displayClass(TAAG.currentFont.getFontType(), fontList.options[fontList.selectedIndex].value.split('.')[0]);
  333.  
  334. //console.log( document.getElementById("outputFigDisplay").className  );
  335.  
  336.     output.innerHTML = TAAG.getText(inputTxt.value);
  337.     TAAG.changePage("display");
  338. };
  339.  
  340. TAAG.displayAuthorInfo = function() {
  341.     if (!TAAG.fontReady()) {return;}
  342.     var comment = TAAG.currentFont.getComment().replace("<","&lt;").replace(">","&gt;").replace(/\bhttp:[^ \)\n\<,]+/g, "<a href='$&' target='_new'>$&</a>");
  343.     var output = document.getElementById("outputFigDisplay");
  344.     output.className = "fig";
  345.     output.innerHTML = "<pre>" + comment + "</pre>\n\n\n\n";
  346.     var fontList = document.getElementById("fontList");
  347.     TAAG.setHash("author");
  348.     TAAG.changePage("author");
  349. };
  350.  
  351. TAAG.displayAbout = function() {
  352.     if (TAAG.currentPage === "about") {return;}
  353.     TAAG.changePage("about");
  354.     TAAG.lastAjax = $.ajax({
  355.         url: "pages/about.dat",
  356.         success: function(res) {
  357.             if (TAAG.currentPage !== "about") {return;}
  358.             var ret = res.replace("\r\n","\n").replace("\r","\n");
  359.             var output = document.getElementById("outputFigDisplay");
  360.             output.className = "";
  361.             output.innerHTML = "" + ret + "\n\n\n\n";
  362.             TAAG.setHash("about");
  363.         }
  364.     });
  365. };
  366.  
  367. TAAG.displayWhatsNew = function() {
  368.     if (TAAG.currentPage === "whatsnew") {return;}
  369.     TAAG.changePage("whatsnew");
  370.     TAAG.lastAjax = $.ajax({
  371.         url: "pages/whatsnew.dat",//?" + Math.floor(Math.random()*1000000),
  372.         success: function(res) {
  373.             if (TAAG.currentPage !== "whatsnew") {return;}
  374.             var ret = res.replace("\r\n","\n").replace("\r","\n");
  375.             var output = document.getElementById("outputFigDisplay");
  376.             output.className = "";
  377.             output.innerHTML = "" + ret + "\n\n\n\n";
  378.             TAAG.setHash("whatsnew");
  379.         }
  380.     });
  381. };
  382.  
  383. TAAG.displayGeneratedImage = function() {
  384.     var textDisplay = $("#taag_output_text");
  385.     if (!textDisplay) {return;}
  386.     if (!TAAG.imageGenerationSupported) {return;}
  387.    
  388.     var imageBorder = document.createElement("div");
  389.     $(imageBorder).css({"borderWidth": "1px", "borderStyle": "solid", "borderColor": "black", "float":"left"});
  390.     var myCanvas = document.createElement("canvas");
  391.     var myContext = myCanvas.getContext("2d");
  392.     var txt = textDisplay.text();
  393.     txt = txt.replace(/\r\n/g,"\n").replace(/\r/g,"\n");
  394.     var lines = txt.split("\n");
  395.     var ii, len = lines.length;
  396.     var lineHeight;
  397.     var cWidth = 0, padding=5,messuarement;
  398.    
  399.     var tmp = document.createElement("div");
  400.     tmp.style.cssText = "font-family: "+textDisplay.css("font-family")+"; font-size: " + textDisplay.css("font-size") + "; display: block;white-space:pre;";
  401.     tmp.style.position = "absolute";
  402.     tmp.innerText = "|";
  403.     document.body.appendChild(tmp);
  404.     lineHeight = parseInt($(tmp).css("height"),10);
  405.     document.body.removeChild(tmp);
  406.    
  407.     myContext.font = "normal " + textDisplay.css("font-size") + " " + textDisplay.css("font-family");
  408.    
  409.     for (ii = 0; ii < len; ii++) {
  410.         messuarement = myContext.measureText(lines[ii]);
  411.         //console.log(messuarement.width);
  412.         cWidth = Math.max(cWidth, messuarement.width + (padding*2));
  413.     }
  414.     var cHeight = lineHeight * len + 0;
  415.     myCanvas.width = cWidth;
  416.     myCanvas.height = cHeight;
  417.     myContext.font = "normal 10pt monospace"; // setting a canvas' width and height clears properties
  418.    
  419.     for (ii = 0; ii < len; ii++) {
  420.         myContext.fillText(lines[ii], padding, padding+(ii*lineHeight));
  421.     }
  422.    
  423.     var oSaveCanvas = document.createElement("canvas");
  424.     oSaveCanvas.width = cWidth;
  425.     oSaveCanvas.height = cHeight;
  426.     oSaveCanvas.style.width = cWidth+"px";
  427.     oSaveCanvas.style.height = cHeight+"px";
  428.     var oSaveCtx = oSaveCanvas.getContext("2d");
  429.     oSaveCtx.drawImage(myCanvas, 0, 0, cWidth, cHeight, 0, 0, cWidth, cHeight);
  430.    
  431.     var myDataUri = oSaveCanvas.toDataURL().replace("image/png","image/octet-stream");
  432.    
  433.     var img = document.createElement("img");
  434.     img.src = myDataUri;
  435.     img.download = "ascii-art-text.png";
  436.    
  437.     var downloadLink = document.createElement("a");
  438.     downloadLink.appendChild(document.createTextNode("clicking this link"));
  439.     downloadLink.download = "ascii-art-text.png";
  440.     downloadLink.href = myDataUri;
  441.    
  442.     var display = $("#outputFigDisplay");
  443.     display.empty();
  444.    
  445.     display.append(document.createTextNode("You can download the image below by right clicking it as selecting 'Save Image As' (be sure to save it as a *.png file)"));
  446.     if (!$.browser.msie) {
  447.         display.append(document.createTextNode(", or by "));
  448.         display.append(downloadLink);
  449.     }
  450.     display.append(document.createTextNode("."));
  451.     display.append("<p/>");
  452.     imageBorder.appendChild(img);
  453.     display.append(imageBorder);
  454.     var endElm = document.createElement("div");
  455.     endElm.style.clear = "both";
  456.     display.append(endElm);
  457.    
  458.  
  459. };
  460.  
  461. TAAG.displayMoreOptions = function() {
  462.     if (TAAG.currentPage === "moreopts") {return;}
  463.     TAAG.changePage("moreopts");
  464.     TAAG.lastAjax = $.ajax({
  465.         url: "pages/moreopts.dat?2013.11.11",//?" + Math.floor(Math.random()*1000000),
  466.         success: function(res) {
  467.             if (TAAG.currentPage !== "moreopts") {return;}
  468.             var ret = res.replace("\r\n","\n").replace("\r","\n");
  469.             var output = document.getElementById("outputFigDisplay");
  470.             output.className = "";
  471.             output.innerHTML = "" + ret + "\n\n\n\n";
  472.            
  473.             var elm = document.getElementById("taagProgComment");
  474.             var ii, len;
  475.             if (elm) {
  476.                 $(elm).unbind( "change", TAAG.updateProgComment);
  477.                 $(elm).unbind( "keyup", TAAG.updateProgComment);
  478.                
  479.                 len = elm.options.length;
  480.                 for (ii = 0; ii < len; ii++) {
  481.                     if (elm.options[ii].value === TAAG.opts.progComment) {
  482.                         elm.selectedIndex = ii;
  483.                         break;  
  484.                     }
  485.                 }
  486.  
  487.                 $(elm).bind( "change", TAAG.updateProgComment);
  488.                 $(elm).bind( "keyup", TAAG.updateProgComment);
  489.             }
  490.  
  491.             var elm = document.getElementById("taagWhiteSpaceOverride");
  492.             if (elm) {
  493.                 $(elm).unbind( "change", TAAG.updateWhiteSpace);
  494.                
  495.                 elm.value = TAAG.opts.whiteSpace;
  496.                
  497.                 $(elm).bind( "change", TAAG.updateWhiteSpace);
  498.             }
  499.            
  500.             TAAG.setHash("moreopts");
  501.         }
  502.     });
  503. };
  504.  
  505. TAAG.testAll = {};
  506. TAAG.testAll.banner =
  507. "  *   )           )                   (    (  (   \n"+
  508. "` )  /(  (     ( /((        (  (      )\\   )\\ )\\  \n"+
  509. " ( )(_))))\\(   )\\())\\  (    )\\))(  ((((_)(((_)(_) \n"+
  510. "(_(_())/((_)\\ (_))((_) )\\ )((_))\\   )\\ _ )\\)_()_) \n"+
  511. "|_   _(_))((_)| |_ (_)_(_/( (()(_)  (_)_\\(_) || | \n"+
  512. "  | | / -_|_-<|  _|| | ' \\)) _` |    / _ \\ | || | \n"+
  513. "  |_| \\___/__/ \\__||_|_||_|\\__, |   /_/ \\_\\|_||_| \n"+
  514. "                           |___/                  ";
  515. TAAG.displayTestAll = function() {
  516.     if (TAAG.currentPage === "testall") {return;}
  517.     var fontList = document.getElementById("fontList");
  518.     var fList = [], afList = [], ii,val,len=fontList.options.length;
  519.     var output = document.getElementById("outputFigDisplay");
  520.     var testAllHtml = "<div id='taagTestAll' style=\"width:100%;\"><pre style=\"text-align:center;\" class=\"fig\">" + TAAG.testAll.banner + "</pre>";
  521.     testAllHtml += "<div style=\"text-align:center;\" id='taagTestAllListLoaded'>Loaded: 0 of " + len + "</div><p/><div id='taagTestAllCancelDiv' style=\"text-align:center;\"><button id='taagTestAllCancel' onclick='javascript:TAAG.testAllCancel()'>Cancel</button></div><p/><div style=\"text-align:center;\">Sort order: Popular FIGlet fonts, Regular FIGlet fonts, AOL fonts</div><p/>";
  522.     testAllHtml += "<p/><br/>";
  523.     testAllHtml += "</div>";
  524.     output.className = "";
  525.     output.innerHTML = testAllHtml;
  526.     TAAG.testAllDiv = document.getElementById("taagTestAll");
  527.     // create font list
  528.    
  529.    
  530.     for (ii=0; ii<len;ii++) {
  531.         val = fontList.options[ii].value;
  532.         if (val.substr(val.length-3,3)==="aol") {
  533.             afList.push(val);  
  534.         } else {
  535.             fList.push(val);
  536.         }
  537.     }
  538.     Array.prototype.push.apply(fList, afList);
  539.     TAAG.testAll.numFonts = fList.length;
  540.     var txtBox = document.getElementById("inputText");
  541.     TAAG.setHash("testall");
  542.    
  543.     TAAG.changePage("testall");
  544.     // TODO for test all:
  545.     // - fade out the non-useful buttons on the bottom toolbar (have a page change function to handle this)
  546.     TAAG.testAllDisplayer(fList, txtBox.value);
  547. };
  548.  
  549. TAAG.testAllCancel = function() {
  550.       TAAG.changePage("testallstop");
  551. };
  552.  
  553. TAAG.testAll.numFonts = 0;
  554. TAAG.testAll.figlet = new Figlet();
  555. TAAG.testAll.aolFont = new AolFont();
  556. TAAG.testAll.font = TAAG.testAll.figlet;
  557. TAAG.testAllDiv;
  558. TAAG.testAllDisplayer = function(fList, txt) {
  559.  
  560.     if (fList.length === 0) {
  561.         // we're done
  562.        
  563.         var dividerDiv = document.createElement("div");
  564.         dividerDiv.style.borderTop = "dashed 1px black";
  565.         TAAG.testAllDiv.appendChild(dividerDiv);
  566.        
  567.         var footerBlurb = document.createElement("div");
  568.         footerBlurb.style.paddingBottom = "40px";
  569.         footerBlurb.innerHTML = "<div style='width:700px;padding-top:20px;margin:0 auto;'><div style='text-align:center;padding-bottom:20px;'><p>If you're interested in creating your own font, see my <a href='http://patorjk.com/figlet-editor/'>FIGlet Editor</a></p><p>-</p>This app can now be installed into Google Chrome!</div><div style='padding-right:40px;float:left;'><a href='https://chrome.google.com/webstore/detail/fgnnnhgifkejnkjbmigmenlfnjkngelg'><img src='images/chrome-promotion.png' border='0'></a></div><ul><li><a href='https://chrome.google.com/webstore/detail/fgnnnhgifkejnkjbmigmenlfnjkngelg'>Click here</a> to visit the app's page in Chrome's App Store (app is <strong>free</strong>).</li><li>Hopefully the other browsers follow suite, though the app should still work offline in certain browsers like FireFox and IE10.</li></ul></div><div style='clear:both;'></div>";
  570.         TAAG.testAllDiv.appendChild(footerBlurb);
  571.        
  572.         var elm = document.getElementById("taagTestAllCancel");
  573.         if (elm) {
  574.             elm.disabled  = "disabled";  
  575.         }
  576.         return;
  577.     }
  578.     if (TAAG.currentPage !== "testall") {return;}
  579.     var fontItem = fList.splice(0,1)[0];
  580.     var fontName = fontItem.split(".")[0];
  581.     var fontUrl = "./fonts/"+fontItem;
  582.  
  583.     var isFiglet = (fontUrl.substr(fontUrl.length-3,3)!=="aol") ? true : false;
  584.     TAAG.lastAjax = $.ajax({
  585.         url: fontUrl,
  586.         success: function(res) {
  587.             try {
  588.                 if (TAAG.currentPage !== "testall") {return;}
  589.                 if (isFiglet) {
  590.                     TAAG.testAll.figlet.load(res);
  591.                    
  592.                     var charWidth = document.getElementById("taagCharWidth");
  593.                     TAAG.testAll.figlet.loadHorizontalOpts(charWidth.options[charWidth.selectedIndex].value);
  594.                     var charHeight = document.getElementById("taagCharHeight");
  595.                     TAAG.testAll.figlet.loadVerticalOpts(charHeight.options[charHeight.selectedIndex].value);
  596.                        
  597.                     TAAG.testAll.font = TAAG.testAll.figlet;
  598.                 } else {
  599.                     var data = AOLFONTS[fontItem];
  600.                     TAAG.testAll.aolFont.load(data);
  601.                     TAAG.testAll.font = TAAG.testAll.aolFont;
  602.                 }
  603.                 var elm = document.createElement("div");
  604.                 var fontId = "taag_font_"+fontName.replace(/[^a-zA-Z0-9]/g, "");
  605.                 elm.className = TAAG.displayClass(TAAG.testAll.font.getFontType(), fontName);
  606.                 elm.innerHTML = TAAG.getText(txt, fontId, TAAG.testAll.font, fontName );
  607.                 var dividerDiv = document.createElement("div");
  608.                 dividerDiv.style.borderTop = "dashed 1px black";
  609.                
  610.                 var infoBar = document.createElement("div");
  611.                 var divFontName = document.createElement("div");
  612.                 divFontName.appendChild(document.createTextNode( "Font Name: " + fontName ));
  613.                 divFontName.style.marginBottom = "4px";
  614.                 var btnUseFont = document.createElement("button");
  615.                 btnUseFont.appendChild( document.createTextNode("Use Font"));
  616.                
  617.                 $(btnUseFont).click((function() {
  618.                     var savedFontName = fontName;
  619.                     return function() {
  620.                         TAAG.useFont(savedFontName);  
  621.                     };
  622.                 })());
  623.                
  624.                 var btnSelectAll = document.createElement("button");
  625.                 btnSelectAll.appendChild(document.createTextNode("Select & Copy"));
  626.                
  627.                 $(btnSelectAll).click((function() {
  628.                     var savedFontId = fontId;
  629.                     return function() {
  630.                         var elm = document.getElementById(savedFontId);
  631.                        
  632.                         if (document.selection) {
  633.                             var range = document.body.createTextRange();
  634.                                 range.moveToElementText(elm);
  635.                             range.select();
  636.                         } else if (window.getSelection) {
  637.                             /*var range = document.createRange();
  638.                             elm.focus();
  639.                             range.selectNode(elm);
  640.                             window.getSelection().addRange(range);*/
  641.  
  642.                             elm.contentEditable = false;
  643.                             elm.focus();
  644.                             var mySelection = window.getSelection();
  645.                             if(mySelection.rangeCount > 0) {mySelection.removeAllRanges();}
  646.                             var range = document.createRange();
  647.                             range.selectNode(elm.parentNode);
  648.                             mySelection.addRange(range);
  649.                             elm.contentEditable = true;
  650.                            
  651.                         }
  652.  
  653.                         try {
  654.                             document.execCommand('copy');
  655.                         } catch (err) {
  656.                             alert('Unable to copy text, you will need to press Ctrl+C on your keyboard to copy.');
  657.                         }
  658.                     };
  659.                 })());
  660.                 infoBar.appendChild(divFontName);
  661.                 infoBar.appendChild(btnUseFont);
  662.                 infoBar.appendChild(btnSelectAll);
  663.                
  664.                 TAAG.testAllDiv.appendChild(dividerDiv);
  665.                 TAAG.testAllDiv.appendChild(elm);
  666.                 TAAG.testAllDiv.appendChild( infoBar );
  667.                 TAAG.testAllDiv.appendChild( document.createElement("p") );
  668.                
  669.                 var loadedDiv = document.getElementById("taagTestAllListLoaded");
  670.                 loadedDiv.innerHTML = "Loaded: " + (TAAG.testAll.numFonts-fList.length) + " of " + TAAG.testAll.numFonts;
  671.             } catch (err) {
  672.                
  673.             }
  674.             setTimeout(function() {
  675.                 TAAG.testAllDisplayer(fList, txt);
  676.             }, 20);
  677.         }
  678.     });
  679. };
  680.  
  681. (function() {
  682.    
  683.     // load up page from hash
  684.    
  685.     TAAG.loadHash(window.location.hash);
  686.    
  687.     // Event Listeners
  688.    
  689.     $("#inputText").bind("keyup", function(evt) {
  690.         evt = evt || window.event;
  691.         if (TAAG.fontReady()) { // don't run unless there is a font loaded
  692.             TAAG.updateDisplay();
  693.         }
  694.     });
  695.     $("#inputText").bind("blur", function(evt) {
  696.         TAAG.setHash("display");
  697.     });
  698.    
  699.     $("#maincontent").bind("resize", function() {
  700.         var contentSize = document.getElementById("maincontent").getBoundingClientRect();
  701.         var elm = document.getElementById("outputFigDisplay");
  702.         if (isFinite(contentSize.width) && isFinite(contentSize.height)) {
  703.             elm.style.width = contentSize.width + "px";
  704.             elm.style.height = contentSize.height + "px";
  705.         }
  706.     }, false);
  707.    
  708.     var updateTextAlignment = function() {
  709.         var elm = document.getElementById("outputFigDisplay");
  710.         if ( document.getElementById("tAlignmentLeft").checked === true) {
  711.             elm.style.textAlign = "left";
  712.         } else if (document.getElementById("tAlignmentRight").checked === true) {
  713.             elm.style.textAlign = "right";
  714.         } else if (document.getElementById("tAlignmentCenter").checked === true) {
  715.             elm.style.textAlign = "center";
  716.         }
  717.     };
  718.    
  719.     var updateFontFromDropDown = function() {
  720.         var fontList = document.getElementById("fontList");
  721.         TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  722.             TAAG.updateDisplay();  
  723.         });
  724.     };
  725.    
  726.     $("#fontList").bind("keyup", function(){
  727.         if (navigator.userAgent.indexOf("Firefox")!==-1){updateFontFromDropDown();}
  728.     });
  729.     $("#fontList").bind("change", updateFontFromDropDown);
  730.  
  731.     $(window).bind("hashchange", function(evt) {
  732.         // add to browser history (future feature)
  733.     });
  734.  
  735.     $("#btnAuthor").click(TAAG.displayAuthorInfo);
  736.     $("#btnMoreOptions").click(TAAG.displayMoreOptions);
  737.     $("#btnAbout").click(TAAG.displayAbout);
  738.     $("#btnTestAll").click(TAAG.displayTestAll);
  739.     $("#btnSelectAll").click( function(evt) {
  740.         var elm = document.getElementById("taag_output_text");
  741.         if (elm) {
  742.             if (document.selection) {
  743.                 var range = document.body.createTextRange();
  744.                     range.moveToElementText(elm);
  745.                 range.select();
  746.             } else if (window.getSelection) {
  747.                 elm.contentEditable = false;
  748.                 elm.focus();
  749.                 var mySelection = window.getSelection();
  750.                 if(mySelection.rangeCount > 0) {mySelection.removeAllRanges();}
  751.                 var range = document.createRange();
  752.                 range.selectNode(elm.parentNode);
  753.                 mySelection.addRange(range);
  754.                 elm.contentEditable = true;
  755.             }
  756.  
  757.             try {
  758.                 document.execCommand('copy');
  759.             } catch (err) {
  760.                 alert('Unable to copy text, you will need to press Ctrl+C on your keyboard to copy.');
  761.             }
  762.         }
  763.     });
  764.  
  765.     var updateCharFromDropDown = function() {
  766.         var fontList = document.getElementById("fontList");
  767.         TAAG.updateFont(fontList.options[fontList.selectedIndex].value, function() {
  768.             TAAG.updateDisplay();  
  769.         });
  770.     };
  771.    
  772.     $("#taagCharWidth").bind("keyup", function(){
  773.         if (navigator.userAgent.indexOf("Firefox")!==-1){updateCharFromDropDown();}
  774.     });
  775.     $("#taagCharWidth").bind( "change", updateCharFromDropDown);
  776.  
  777.     $("#taagCharHeight").bind( "keyup", function(){
  778.         if (navigator.userAgent.indexOf("Firefox")!==-1){updateCharFromDropDown();}
  779.     });
  780.     $("#taagCharHeight").bind( "change", updateCharFromDropDown);
  781.  
  782.     $("#btnShare").click( function() {
  783.         TAAG.shareBox.show();
  784.     });
  785.  
  786.     $("#divBtnGenImage").click(TAAG.displayGeneratedImage);
  787.  
  788.     $("#footer-buttons").fadeIn("slow");
  789. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement