Simple image host.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

script.js 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. $(document).on("ready", function() {
  2. if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
  3. notify("Your Browser Sucks.");
  4. }
  5. function draw(files) {
  6. var output = [];
  7. files.forEach(function(f, i) {
  8. output.push(
  9. '<li class="file list-group-item" data-index='+i+'>'+
  10. '<div class="progress-bar"></div>'+
  11. '<button class="btn btn-default delete" onclick="uploaderDelete(this.parentNode)">X</button>'+
  12. '<img class="thumbnail" src="'+f.thumbnail+'">'+
  13. '<span class="name">'+util.htmlEntities(f.name)+'</span>'+
  14. '</li>'
  15. );
  16. });
  17. $("#uploader-list").html(output.join(""));
  18. }
  19. var files = [];
  20. $("#uploader-input").on("change", function(evt) {
  21. console.log(evt);
  22. //Enable upload button
  23. $("#uploader-upload").removeAttr("disabled");
  24. var inputFiles = evt.target.files;
  25. for (var i = 0; i < inputFiles.length; ++i) (function() {
  26. var f = inputFiles[i];
  27. f.thumbnail = "";
  28. var reader = new FileReader();
  29. reader.readAsDataURL(f);
  30. reader.onload = function(evt) {
  31. f.thumbnail = reader.result;
  32. draw(files);
  33. }
  34. files.push(inputFiles[i]);
  35. })();
  36. draw(files);
  37. });
  38. window.uploaderDelete = function(elem) {
  39. var index = elem.getAttribute("data-index");
  40. delete files[index];
  41. draw(files);
  42. }
  43. //Upload things when the upload button is clicked
  44. $("#uploader-upload").on("click", function(evt) {
  45. //First, disable all buttons
  46. $("#uploader button.btn").prop("disabled", true);
  47. var elems = [];
  48. $("#uploader-list .file").each(function() {
  49. var elem = $(this);
  50. elems[elem.data("index")] = elem;
  51. });
  52. //First, create a collection
  53. util.api("collection_create", {
  54. name: ($("#uploader-collection-name").val() || "Collection")
  55. }, function(err, res) {
  56. if (err)
  57. return util.error(err);
  58. var collectionId = res.id;
  59. //Go to collection once files are uploaded, or
  60. //delete the collection if it failed
  61. var a = util.async(files.length, function(res) {
  62. if (res.error) {
  63. util.api("collection_delete", {
  64. id: collectionId
  65. }, function(err, res) {
  66. if (err)
  67. return util.error(err);
  68. util.redirect("/", 5000);
  69. });
  70. } else {
  71. util.redirect("/view?"+collectionId);
  72. }
  73. });
  74. //Loop through files, uploading them
  75. files.forEach(function(f, i) {
  76. var progressBar = elems[i].children(".progress-bar");
  77. //Handle progress bars
  78. function getXhr(xhr) {
  79. xhr.upload.addEventListener("progress", function(evt) {
  80. if (!evt.lengthComputable)
  81. return;
  82. var percent = (evt.loaded / evt.total) * 100;
  83. progressBar.css({width: percent+"%"});
  84. }, false);
  85. }
  86. //Get file extension
  87. var ext = f.name.split(".");
  88. ext = ext[ext.length - 1];
  89. util.api("image_create", {
  90. name: f.name,
  91. description: "An image.",
  92. extension: ext,
  93. collectionId: collectionId,
  94. file: f
  95. }, function(err, res) {
  96. if (err) {
  97. a("error", true);
  98. return util.error(err);
  99. }
  100. a();
  101. }, getXhr);
  102. });
  103. });
  104. });
  105. });