jquery.uploadPreview.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. (function ($) {
  2. $.extend({
  3. uploadPreview : function (options) {
  4. // Options + Defaults
  5. var settings = $.extend({
  6. input_field: ".image-input",
  7. preview_box: ".image-preview",
  8. label_field: ".image-label",
  9. label_default: "Choose File",
  10. label_selected: "Change File",
  11. no_label: false,
  12. success_callback : null,
  13. }, options);
  14. // Check if FileReader is available
  15. if (window.File && window.FileList && window.FileReader) {
  16. if (typeof($(settings.input_field)) !== 'undefined' && $(settings.input_field) !== null) {
  17. $(settings.input_field).change(function() {
  18. var files = this.files;
  19. if (files.length > 0) {
  20. var file = files[0];
  21. var reader = new FileReader();
  22. // Load file
  23. reader.addEventListener("load",function(event) {
  24. var loadedFile = event.target;
  25. // Check format
  26. if (file.type.match('image')) {
  27. // Image
  28. $(settings.preview_box).css("background-image", "url("+loadedFile.result+")");
  29. $(settings.preview_box).css("background-size", "cover");
  30. $(settings.preview_box).css("background-position", "center center");
  31. } else if (file.type.match('audio')) {
  32. // Audio
  33. $(settings.preview_box).html("<audio controls><source src='" + loadedFile.result + "' type='" + file.type + "' />Your browser does not support the audio element.</audio>");
  34. } else {
  35. alert("This file type is not supported yet.");
  36. }
  37. });
  38. if (settings.no_label == false) {
  39. // Change label
  40. $(settings.label_field).html(settings.label_selected);
  41. }
  42. // Read the file
  43. reader.readAsDataURL(file);
  44. // Success callback function call
  45. if(settings.success_callback) {
  46. settings.success_callback();
  47. }
  48. } else {
  49. if (settings.no_label == false) {
  50. // Change label
  51. $(settings.label_field).html(settings.label_default);
  52. }
  53. // Clear background
  54. $(settings.preview_box).css("background-image", "none");
  55. // Remove Audio
  56. $(settings.preview_box + " audio").remove();
  57. }
  58. });
  59. }
  60. } else {
  61. alert("You need a browser with file reader support, to use this form properly.");
  62. return false;
  63. }
  64. }
  65. });
  66. })(jQuery);