FileHash.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. ;(function() {
  2. var hasBlobConstructor = (function() {
  3. try {
  4. return !!new Blob();
  5. } catch (e) {
  6. return false;
  7. }
  8. }());
  9. var BlobBuilder = (function() {
  10. return window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder;
  11. }());
  12. window.FileHash = new (function() {
  13. var _options = {}
  14. , _filesAdded = 0
  15. , _nativeFiles = []
  16. , _runtimeFiles = []
  17. ;
  18. return {
  19. init: function(options) {
  20. var scripts = '';
  21. _options = options;
  22. if (typeof _options.files === 'string') {
  23. _options.files = [_options.files];
  24. }
  25. for (var i = 0; i < _options.files.length; i++) {
  26. scripts += '<script type="text/javascript" src="' + _options.files[i] + '"></script>\n';
  27. }
  28. document.write(scripts);
  29. },
  30. add: function(fileData) {
  31. var type = fileData.type || ''
  32. , binStr = window.atob(fileData.data)
  33. ;
  34. // add native file where possible
  35. if (hasBlobConstructor) {
  36. _nativeFiles.push({
  37. name: fileData.name,
  38. blob: new Blob([binStr], { type: type })
  39. });
  40. } else if (BlobBuilder) {
  41. var bb = new BlobBuilder();
  42. bb.append(binStr);
  43. _nativeFiles.push({
  44. name: fileData.name,
  45. blob: bb.getBlob(type)
  46. });
  47. }
  48. // add runtime version
  49. if (window.o && window.o.File) {
  50. _runtimeFiles.push(new o.File(null, {
  51. name: fileData.name,
  52. type: type,
  53. data: binStr
  54. }));
  55. }
  56. _filesAdded++;
  57. if (_filesAdded == _options.files.length && _options.onready) {
  58. _options.onready.call(this);
  59. }
  60. },
  61. getNativeFiles: function() {
  62. return _nativeFiles;
  63. },
  64. getRuntimeFiles: function() {
  65. var files = [];
  66. // return fresh set
  67. o.each(_runtimeFiles, function(file) {
  68. files.push(new o.File(null, {
  69. name: file.name,
  70. data: file.getSource()
  71. }));
  72. });
  73. return files;
  74. },
  75. getEmptyFile: function(fileName) {
  76. return new o.File(null, {
  77. name: fileName || o.guid('file_') + '.zip',
  78. size: 0
  79. });
  80. }
  81. };
  82. });
  83. }());