Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

126 Zeilen
4.0 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. // parent, args, callback
  4. wn.upload = {
  5. make: function(opts) {
  6. if(!opts.args) opts.args = {};
  7. var $upload = $('<div class="file-upload">\
  8. <p class="small"><a class="action-attach disabled" href="#"><i class="icon-upload"></i> '
  9. + wn._('Upload a file') + '</a> | <a class="action-link" href="#"><i class="icon-link"></i> '
  10. + wn._('Attach as web link') + '</a></p>\
  11. <div class="action-attach-input">\
  12. <input class="alert alert-info" style="padding: 7px; margin: 7px 0px;" type="file" name="filedata" />\
  13. </div>\
  14. <div class="action-link-input" style="display: none; margin-top: 7px;">\
  15. <input class="form-control" style="max-width: 300px;" type="text" name="file_url" />\
  16. <p class="text-muted">'
  17. + (opts.sample_url || 'e.g. http://example.com/somefile.png') +
  18. '</p>\
  19. </div>\
  20. <button class="btn btn-info btn-upload"><i class="icon-upload"></i> ' +wn._('Upload')
  21. +'</button></div>').appendTo(opts.parent);
  22. $upload.find(".action-link").click(function() {
  23. $upload.find(".action-attach").removeClass("disabled");
  24. $upload.find(".action-link").addClass("disabled");
  25. $upload.find(".action-attach-input").toggle(false);
  26. $upload.find(".action-link-input").toggle(true);
  27. $upload.find(".btn-upload").html('<i class="icon-link"></i> ' +wn._('Set Link'))
  28. return false;
  29. })
  30. $upload.find(".action-attach").click(function() {
  31. $upload.find(".action-link").removeClass("disabled");
  32. $upload.find(".action-attach").addClass("disabled");
  33. $upload.find(".action-link-input").toggle(false);
  34. $upload.find(".action-attach-input").toggle(true);
  35. $upload.find(".btn-upload").html('<i class="icon-upload"></i> ' +wn._('Upload'))
  36. return false;
  37. })
  38. // get the first file
  39. $upload.find(".btn-upload").click(function() {
  40. // convert functions to values
  41. for(key in opts.args) {
  42. if(typeof val==="function")
  43. opt.args[key] = opts.args[key]();
  44. }
  45. // add other inputs in the div as arguments
  46. opts.args.params = {};
  47. $upload.find("input[name]").each(function() {
  48. var key = $(this).attr("name");
  49. var type = $(this).attr("type");
  50. if(key!="filedata" && key!="file_url") {
  51. if(type === "checkbox") {
  52. opts.args.params[key] = $(this).is(":checked");
  53. } else {
  54. opts.args.params[key] = $(this).val();
  55. }
  56. }
  57. })
  58. opts.args.file_url = $upload.find('[name="file_url"]').val();
  59. var fileobj = $upload.find(":file").get(0).files[0];
  60. wn.upload.upload_file(fileobj, opts.args, opts);
  61. })
  62. },
  63. upload_file: function(fileobj, args, opts) {
  64. if(!fileobj && !args.file_url) {
  65. msgprint(wn._("Please attach a file or set a URL"));
  66. return;
  67. }
  68. var dataurl = null;
  69. var _upload_file = function() {
  70. if(opts.on_attach) {
  71. opts.on_attach(args, dataurl)
  72. } else {
  73. var msgbox = msgprint(wn._("Uploading..."));
  74. return wn.call({
  75. "method": "uploadfile",
  76. args: args,
  77. callback: function(r) {
  78. if(!r._server_messages)
  79. msgbox.hide();
  80. if(r.exc) {
  81. // if no onerror, assume callback will handle errors
  82. opts.onerror ? opts.onerror(r) : opts.callback(null, null, r);
  83. return;
  84. }
  85. opts.callback(r.message.fid, r.message.filename, r);
  86. $(document).trigger("upload_complete",
  87. [r.message.fid, r.message.filename]);
  88. }
  89. });
  90. }
  91. }
  92. if(args.file_url) {
  93. _upload_file();
  94. } else {
  95. var freader = new FileReader();
  96. freader.onload = function() {
  97. args.filename = fileobj.name;
  98. if((opts.max_width || opts.max_height) && (/\.(gif|jpg|jpeg|tiff|png)$/i).test(args.filename)) {
  99. wn.utils.resize_image(freader, function(_dataurl) {
  100. dataurl = _dataurl;
  101. args.filedata = _dataurl.split(",")[1];
  102. console.log("resized!")
  103. _upload_file();
  104. })
  105. } else {
  106. dataurl = freader.result;
  107. args.filedata = freader.result.split(",")[1];
  108. _upload_file();
  109. }
  110. };
  111. freader.readAsDataURL(fileobj);
  112. }
  113. }
  114. }