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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. '<input class="name" value="'+util.htmlEntities(f.name)+'">'+
  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. function createThumbnail(i) {
  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. for (var i = 0; i < inputFiles.length; ++i) {
  37. createThumbnail(i);
  38. }
  39. draw(files);
  40. });
  41. window.uploaderDelete = function(elem) {
  42. var index = elem.getAttribute("data-index");
  43. delete files[index];
  44. draw(files);
  45. };
  46. //Upload things when the upload button is clicked
  47. $("#uploader-upload").on("click", function(evt) {
  48. //First, disable all buttons
  49. $("#uploader button.btn").prop("disabled", true);
  50. var elems = [];
  51. $("#uploader-list .file").each(function() {
  52. var elem = $(this);
  53. elems[elem.data("index")] = elem;
  54. });
  55. //First, create a collection
  56. util.api("collection_create", {
  57. name: ($("#uploader-collection-name").val() || "Collection")
  58. }, function(err, res) {
  59. if (err)
  60. return util.error(err);
  61. var collectionId = res.id;
  62. //Go to collection once files are uploaded, or
  63. //delete the collection if it failed
  64. var a = util.async(files.length, function(res) {
  65. if (res.error) {
  66. util.api("collection_delete", {
  67. id: collectionId
  68. }, function(err, res) {
  69. if (err)
  70. return util.error(err);
  71. util.redirect("/", 5000);
  72. });
  73. } else {
  74. util.redirect("/view?"+collectionId);
  75. }
  76. });
  77. //Loop through files, uploading them
  78. files.forEach(function(f, i) {
  79. var progressBar = elems[i].children(".progress-bar");
  80. //Handle progress bars
  81. function getXhr(xhr) {
  82. xhr.upload.addEventListener("progress", function(evt) {
  83. if (!evt.lengthComputable)
  84. return;
  85. var percent = (evt.loaded / evt.total) * 100;
  86. progressBar.css({width: percent+"%"});
  87. }, false);
  88. }
  89. //Get file extension
  90. var ext = f.name.split(".");
  91. ext = ext[ext.length - 1];
  92. util.api("image_create", {
  93. name: f.name,
  94. description: "An image.",
  95. extension: ext,
  96. collectionId: collectionId,
  97. file: f
  98. }, function(err, res) {
  99. if (err) {
  100. a("error", true);
  101. return util.error(err);
  102. }
  103. a();
  104. }, getXhr);
  105. });
  106. });
  107. });
  108. });