1 line
6.2 KiB
JavaScript
1 line
6.2 KiB
JavaScript
(function(n,t,i){"use strict";var r=function(r){var u=this;if(u.$host=r,u.uploadUrl=r.attr("data-uploadurl"),u.dropTarget=r.find(".Disco-AttachmentUpload-DropTarget"),u.uploadProgressContainer=r.find(".Disco-AttachmentUpload-Progress"),u._uploadFilesInput=null,u.uploadFiles=function(){!u._uploadFilesInput||u._uploadFilesInput.remove();u._uploadFilesInput=i("<input>");u._uploadFilesInput.attr({type:"file",multiple:"multiple",title:"Disco ICT File Uploading"}).hide().change(function(n){var t=n.target.files;!!t&&t.length>0&&u._uploadFiles(t);u._uploadFilesInput.remove()}).appendTo(u.uploadProgressContainer).click()},!!u.dropTarget){var o=i(t),f=!1,e=null;o.on("dragover",function(){u.dropTarget.addClass("dragHighlight");u.dropTarget.removeClass("dragHover");f=!1});o.on("dragleave",function(){!e||n.clearInterval(e);f=!0;n.setTimeout(function(){f&&u.dropTarget.removeClass("dragHighlight");e=null},200)});u.dropTarget.on("dragover",function(n){n.stopPropagation();n.preventDefault();u.dropTarget.addClass("dragHover");f=!1;n.originalEvent.dataTransfer.dropEffect="copy"});u.dropTarget.on("drop",function(n){n.stopPropagation();n.preventDefault();f=!0;u.dropTarget.removeClass("dragHighlight");var t=n.originalEvent.dataTransfer.files;u._uploadFiles(t)})}return u.uploadImage=function(){let e=null,o=!1;var f=i("<div><video><\/video><\/div>").attr({id:"Disco_AttachmentUpload_ImageDialog",title:"Upload Image","class":"dialog Disco-AttachmentUpload-ImageDialog"});f.dialog({autoOpen:!0,draggable:!1,modal:!0,resizable:!1,width:720,height:405,close:function(){e&&e.getTracks().forEach(n=>n.stop());n.setTimeout(function(){f.dialog("destroy")},1)}}).closest(".ui-dialog").children(".ui-dialog-titlebar").css("border-bottom","none");const r=f.find("video")[0];navigator.mediaDevices.getUserMedia({audio:!1,video:{width:{ideal:1920},height:{ideal:1080},facingMode:"environment"}}).then(n=>{e=n,r.srcObject=n,r.play()}).catch(n=>{console.error(n),f.dialog("destroy")});r.addEventListener("canplay",()=>{if(!o){const i=720;let n=r.videoHeight/(r.videoWidth/i);isNaN(n)&&(n=405);r.setAttribute("width",i);r.setAttribute("height",n);o=!0;f.dialog("option","buttons",[{text:"Capture",click:()=>{const n=t.createElement("canvas");n.width=r.videoWidth;n.height=r.videoHeight;const i=n.getContext("2d");i.drawImage(r,0,0);n.toBlob(n=>{u._uploadImage(n)},"image/jpg")}}]);f.css("height","");f.closest(".ui-dialog").children(".ui-dialog-buttonpane").css("margin-top",0).find(".ui-button:first").focus()}})},u.onlineUpload=async function(){const o=u.$host.attr("data-onlineuploadurl"),s=u.$host.attr("data-qrcodeurl"),i=u.$host.find(".attachmentInput span.online-upload");if(!i.hasClass("fa-spinner")){if(i.removeClass("fa-qrcode").addClass("fa-spinner fa-spin d-green"),!n.QRCode){const n=t.createElement("script");n.src=s;n.type="text/javascript";n.onload=function(){u.onlineUploadDisplay()};t.body.appendChild(n)}const e=new FormData;e.append("__RequestVerificationToken",u.$host.find('input[name="__RequestVerificationToken"]').val());const r=await fetch(o,{method:"POST",body:e});if(!r.ok){alert("Error creating online upload session: "+r.statusText);i.removeClass("fa-spinner fa-spin d-green").addClass("fa-qrcode");return}const f=await r.json();if(!f.Success){alert("Unable to create online upload session: "+f.ErrorMessage);i.removeClass("fa-spinner fa-spin d-green").addClass("fa-qrcode");return}u.onlineUploadSession=f;u.onlineUploadDisplay();i.removeClass("fa-spinner fa-spin d-green").addClass("fa-qrcode")}},u.onlineUploadDisplay=function(){var t,f,e,r;!n.QRCode||!u.onlineUploadSession||(t=i("<div>").attr({title:"Online Upload","class":"dialog Disco-AttachmentUpload-OnlineUploadDialog"}),f=QRCode({msg:u.onlineUploadSession.SessionUri,ecl:"L"}),t.append(f),i('<input type="text" readonly>').val(u.onlineUploadSession.SessionUri).appendTo(t),i('<div class="info-box"><p class="fa-p"><i class="fa fa-info-circle information"><\/i> Scan the QR Code or send the link to upload files<\/p><\/div>').appendTo(t),e=new Date(u.onlineUploadSession.Expiration),r=setTimeout(function(){t.dialog("close")},e.getTime()-(new Date).getTime()),t.dialog({resizable:!1,width:500,modal:!0,autoOpen:!0,close:function(){!r||n.clearTimeout(r);t.dialog("destroy").remove()}}))},u.getFileComments=function(t,r,u){var e=!1,f=i("<div>").attr({title:"Upload File","class":"dialog Disco-AttachmentUpload-CommentDialog"}),o,h,s;f.html('<table><tr><th>File Name:<\/th><td class="filename"><\/td><\/tr><tr><th>Comments:<\/th><td><input class="comments" type="text" placeholder="optional" /><\/td><\/tr><tr><td class="thumbnail" colspan="2"><img /><\/td><\/tr><\/table>');!r||(o=f.find("td.thumbnail"),h=o.find("img"),r(h)&&o.show());f.find("td.filename").text(t).attr("title",t);s=f.find("input.comments").keypress(function(n){n.which===13&&(e=!0,f.dialog("close"))});f.dialog({resizable:!1,width:400,modal:!0,autoOpen:!0,buttons:{Upload:function(){e=!0;f.dialog("close");n.setTimeout(function(){s.focus()},1)},Cancel:function(){f.dialog("close")}},close:function(){var n=s.val();f.dialog("destroy").remove();u(e,n)}})},u._uploadImage=function(n){var t="CapturedImage-"+moment().format("YYYYMMDD-HHmmss")+".jpg";u.getFileComments(t,function(t){const i=URL.createObjectURL(n);return t.attr("src",i),!0},function(i,r){i&&u._uploadFile(n,t,r)})},u._uploadFiles=function(n){var t=i.makeArray(n),r=function(){if(t&&t.length!==0){var n=t.shift();u.getFileComments(n.name,function(t){if(!!n.type&&n.type.indexOf("image/")===0){var i=new FileReader;return i.onload=function(n){t.attr("src",n.target.result)},i.readAsDataURL(n),!0}return!1},function(t,i){t&&(u._uploadFile(n,n.name,i),r())})}};r()},u._uploadFile=async function(n,t,r){const f=new FormData,o=i("<div>").append(i("<i>").addClass("fa fa-cog fa-spin")).append(i("<span>").text("Uploading: "+t)).appendTo(u.uploadProgressContainer);f.append("__RequestVerificationToken",u.$host.find('input[name="__RequestVerificationToken"]').val());f.append("comments",r);f.append("file",n,t);const e=await fetch(u.uploadUrl,{method:"POST",body:f});if(o.slideUp(400,function(){o.remove()}),!e.ok){alert("Error Uploading ["+t+"]: "+e.statusText);const n=await e.text();console.error("Failed to upload file ["+t+"]: "+n)}},u};t.Disco||(t.Disco={});t.Disco.AttachmentUploader=r})(this,document,$); |