ui.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. $(function (){
  2. var expires = 365;
  3. function clear_file() {
  4. var new_file = $("#file").clone();
  5. new_file.change(clear_url);
  6. $("#file").replaceWith(new_file);
  7. }
  8. function clear_url() {
  9. $("#url").val("")
  10. }
  11. function on_change_style(e) {
  12. var checked = $("input[name=style]:checked");
  13. if (checked.val() == "art") {
  14. $(".main-title").text("waifu2x");
  15. } else {
  16. $(".main-title").html("w<s>/a/</s>ifu2x");
  17. }
  18. $.cookie("style", checked.val(), {expires: expires});
  19. }
  20. function on_change_noise_level(e)
  21. {
  22. var checked = $("input[name=noise]:checked");
  23. $.cookie("noise", checked.val(), {expires: expires});
  24. }
  25. function on_change_scale_factor(e)
  26. {
  27. var checked = $("input[name=scale]:checked");
  28. $.cookie("scale", checked.val(), {expires: expires});
  29. }
  30. function restore_from_cookie()
  31. {
  32. if ($.cookie("style")) {
  33. $("input[name=style]").filter("[value=" + $.cookie("style") + "]").prop("checked", true)
  34. }
  35. if ($.cookie("noise")) {
  36. $("input[name=noise]").filter("[value=" + $.cookie("noise") + "]").prop("checked", true)
  37. }
  38. if ($.cookie("scale")) {
  39. $("input[name=scale]").filter("[value=" + $.cookie("scale") + "]").prop("checked", true)
  40. }
  41. }
  42. function uuid()
  43. {
  44. // ref: http://stackoverflow.com/a/2117523
  45. return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
  46. var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
  47. return v.toString(16);
  48. });
  49. }
  50. function download_with_xhr(e)
  51. {
  52. if (typeof window.URL.createObjectURL == "undefined" ||
  53. typeof window.Blob == "undefined" ||
  54. typeof window.XMLHttpRequest == "undefined" ||
  55. typeof window.URL.revokeObjectURL == "undefined")
  56. {
  57. return;
  58. }
  59. $("input[name=download]").attr("disabled", "disabled");
  60. e.preventDefault();
  61. e.stopPropagation();
  62. var xhr = new XMLHttpRequest();
  63. xhr.open('POST', '/api', true);
  64. xhr.responseType = 'arraybuffer';
  65. xhr.onload= function(e) {
  66. if (this.status == 200) {
  67. var blob = new Blob([this.response], {type : 'image/png'});
  68. var a = document.createElement("a");
  69. var url = URL.createObjectURL(blob);
  70. a.href = url;
  71. a.target = "_blank";
  72. a.download = uuid() + ".png";
  73. a.click();
  74. URL.revokeObjectURL(url);
  75. $("input[name=download]").removeAttr("disabled");
  76. } else {
  77. alert("Download Error");
  78. $("input[name=download]").removeAttr("disabled");
  79. }
  80. };
  81. xhr.send(new FormData($("form").get(0)));
  82. }
  83. $("#url").change(clear_file);
  84. $("#file").change(clear_url);
  85. $("input[name=style]").change(on_change_style);
  86. $("input[name=noise]").change(on_change_noise_level);
  87. $("input[name=scale]").change(on_change_scale_factor);
  88. $("input[name=download]").click(download_with_xhr);
  89. restore_from_cookie();
  90. on_change_style();
  91. on_change_scale_factor();
  92. on_change_noise_level();
  93. })