// custom insertAt Stringmethod String.prototype.insertAt=function(index, string) { return this.substr(0, index) + string + this.substr(index); } var default_language = "en"; var file = null; $(window).unload(function() { $("#uploadContinue").prop("disabled", true); $("#uploadContinueQuick").prop("disabled", true); $("#FileNamePreview").val(""); }); var mobile_success = false; var local_success = false; var keystore_success = false; var place_on_new_page = false; function getArrayBuffer(data) { if (typeof data !== 'string') { return data; } var length = data.length; var array = new Uint8Array(length); for (var i = 0; i < length; i++) { array[i] = data.charCodeAt(i) & 0xFF; } return array.buffer; } function getArrayBase64(base64) { var raw = window.atob(base64); var rawLength = raw.length; var array = new Uint8Array(new ArrayBuffer(rawLength)); for (i = 0; i < rawLength; i++) { array[i] = raw.charCodeAt(i); } return array; } function registerEventListeners() { var locale = "EN"; var connector = "mobilebku"; $(document).bind("dragover", function(evt) { evt.preventDefault(); }); $(document).bind("drop", function(evt) { evt.preventDefault(); }); $("#borderBox").bind("dragenter", function(evt) { evt.preventDefault(); evt.stopPropagation(); highlightDropzone(); }); $("#borderBox").bind("dragover", function(evt) { evt.preventDefault(); evt.stopPropagation(); highlightDropzone(); }); $("#borderBox").bind("dragleave", function(evt) { evt.preventDefault(); evt.stopPropagation(); unhighlightDropzone(); }); $("#borderBox").bind("dragend", function(evt) { evt.preventDefault(); evt.stopPropagation(); unhighlightDropzone(); }); $("#borderBox").bind("drop", function(evt) { evt.preventDefault(); evt.stopPropagation(); unhighlightDropzone(); var files = evt.originalEvent.dataTransfer.files; if(files == null || files.length === 0) { return; } $("#FileNamePreview").val(files[0].name); $("uploadContinue").prop("disabled", true); $("uploadContinueQuick").prop("disabled", true); file = files[0]; checkPDF(file); }); $("#UploadStepButton").bind("click", function(evt) { toggleView("upload"); }); $("#PlaceStepButton").bind("click", function(evt) { place_on_new_page = false; toggleView("place"); $("#iFrame").contents().find("#placeSignature").click(); }); $("#SignStepButton").bind("click", function(evt) { $("#methodContainer").show(); $("#mobileSignOnFrame").hide(); mobile_success = false; local_success = false; keystore_success = false; toggleView("sign"); $("#DownloadResultButton").removeAttr("disabled"); $("#DownloadResultButton").attr("title", "Download your Document"); $("#DownloadResultButton").css("pointer-events", "auto"); }); $("#FinishStepButton").bind("click", function(evt) { toggleView("finish"); }); $("#uploadContinue").bind("click", function(evt) { $("#PlaceStepButton").click(); }); $("#uploadContinueQuick").bind("click", function(evt) { $("#iFrame").contents().find("#QuickSign").click(); $("#iFrame").contents().find("#delSignature").click(); place_on_new_page = false; $("#SignStepButton").click(); }); $("#DownloadResultButton").bind("click", function(evt) { $("#DownloadResultButton").attr("disabled", "disabled"); $("#DownloadResultButton").attr("title", "The download is valid only once!"); $("#DownloadResultButton").css("pointer-events", "none"); /* var isFileSaverSupported = false; try { isFileSaverSupported = !!new XMLHttpRequest; } catch (e) {} if(isFileSaverSupported) { evt.preventDefault(); $.get( $("#DownloadResultButton").attr("href") + "?base64=true", function( data ) { var array = getArrayBase64(data); saveAs(new Blob([array], { type: "application/pdf" }), "signed.pdf"); }); } */ evt.preventDefault(); window.open($("#DownloadResultButton").attr("href")); //return false; }); $("#LanguageDisplay").on("click", function(evt){ toggleLanguage(); }); function toggleView(input) { $("#DropContainer").hide(); $("#ViewContainer").hide(); $("#SignContainer").hide(); $("#DownloadContainer").hide(); $("#UploadStepButton").removeClass("active"); $("#PlaceStepButton").removeClass("active"); $("#SignStepButton").removeClass("active"); $("#FinishStepButton").removeClass("active"); $("#UploadStepButton").removeClass("active"); $("#PlaceStepButton").removeClass("active"); $("#SignStepButton").removeClass("active"); $("#FinishStepButton").removeClass("active"); $("#uploadNavText").hide(); $("#placeNavText").hide(); $("#signNavText").hide(); $("#downloadNavText").hide(); $("#BackBox").removeAttr("disabled"); $("#BackBox").css("pointer-events", "auto"); switch(input) { case "upload": $("#DropContainer").show(); $("#UploadStepButton").addClass("active"); $("#PlaceStepButton").css("pointer-events", "none"); $("#SignStepButton").css("pointer-events", "none"); $("#FinishStepButton").css("pointer-events", "none"); $("#uploadNavText").show(); $("#BackBox").attr("disabled", "disabled"); $("#BackBox").css("pointer-events", "none"); break; case "place": $("#ViewContainer").show(); $("#PlaceStepButton").addClass("active"); $("#PlaceStepButton").css("pointer-events", "auto"); $("#SignStepButton").css("pointer-events", "none"); $("#FinishStepButton").css("pointer-events", "none"); $("#placeNavText").show(); break; case "sign": $("#SignContainer").show(); $("#SignStepButton").addClass("active"); $("#SignStepButton").css("pointer-events", "auto"); $("#PlaceStepButton").css("pointer-events", "auto"); $("#FinishStepButton").css("pointer-events", "none"); $("#signNavText").show(); break; case "finish": $("#DownloadContainer").show(); $("#FinishStepButton").addClass("active"); $("#SignStepButton").css("pointer-events", "auto"); $("#downloadNavText").show(); break; } } $("#pdf-file").bind("change", function(evt) { file_event = evt; var files = evt.target.files; if(files == null || files.length === 0) { return; } $("body").addClass("wait"); $("#FileNamePreview").val(files[0].name); $("#uploadContinue").prop("disabled", true); $("#uploadContinueQuick").prop("disabled", true); $("#ContinueButtonText").hide(); $("#MobileSpinner").show(); file = files[0]; checkPDF(file); }); function checkPDF(to_check) { // Read the local file into a Uint8Array. var fileReader = new FileReader(); var is_pdf = true; fileReader.onload = function webViewerChangeFileReaderOnload(evt) { var buffer = evt.target.result; var uint8Array = new Uint8Array(buffer); if(uint8Array[0] == 37 && // % uint8Array[1] == 80 && // P uint8Array[2] == 68 && // D uint8Array[3] == 70 // F ) { console.log("File is PDF"); } else { console.log("File is NOT PDF"); is_pdf = false; } setFeedbackView(is_pdf); }; console.log("test if pdf.."); fileReader.readAsArrayBuffer(to_check); } function setFeedbackView(is_pdf) // and load PDF if successful { if(!is_pdf) // if no pdf { console.log("setting Error Feedback"); if($("#FormDefine").hasClass("has-success")) { $("#FormDefine").switchClass("has-success", "has-error"); } else { $("#FormDefine").addClass("has-error"); } $("#BadFeedback").show(); $("#GoodFeedback").hide(); $("#noPdfMessage").show(); $("#FormDefine").css("margin-bottom", "2.2em"); $("#uploadContinue").prop("disabled", true); $("#uploadContinueQuick").prop("disabled", true); $("#ContinueButtonText").show(); $("#MobileSpinner").hide(); } else // if it is pdf { console.log("setting Success Feedback"); if($("#FormDefine").hasClass("has-error")) { $("#FormDefine").switchClass("has-error", "has-success"); } else { $("#FormDefine").addClass("has-success"); } $("#BadFeedback").hide(); $("#GoodFeedback").show(); $("#noPdfMessage").hide(); $("#FormDefine").css("margin-bottom", ""); //$("#uploadContinue").prop("disabled", false); //$("#uploadContinueQuick").prop("disabled", false); previewFile(file); } //$("body").removeClass("wait"); } $("input[name='connector']").bind("change", function(evt) { connector = this.value; }); $("input[name='locale']").bind("change", function(evt) { locale = this.value; }); $("#btnSign").bind("click", function(evt) { sign(file, connector, locale); }); $("#MobilePhoneSubmit").bind("click", function(evt) { $("#mobileBKU").click(); mobile_success = true; $("body").addClass("wait"); sign(file, connector, locale); }); $("#LocalBKUSubmit").bind("click", function(evt) { $("#localBKU").click(); local_success = true; $("body").addClass("wait"); sign(file, connector, locale); }); $("#KeystoreSubmit").bind("click", function(evt) { $("#jks").click(); keystore_success = true; $("body").addClass("wait"); sign(file, connector, locale); }); $('[data-toggle="tooltip"]').tooltip(); } // //Creates an PDF.js instance within the PDF preview section and displays //the user selected PDF document. // function previewFile() { clearContentDiv(); createIframe(); } // from "Einfach Signieren" function addDataToForm(data, form) { var ret = []; for (var d in data) { if (typeof data[d] != "undefined") { var input = document.createElement('input'); input.type = 'hidden'; input.name = d; input.value = data[d]; form.appendChild(input); } } } // //Calls the sign servlet with the provided file and the provided connector and locale // function sign(file, connector, locale) { if(file == null) { alert("No file selected"); return } var form = document.createElement('form'); form.method = "POST"; form.action = "Sign"; form.target = "mobileSignOnFrame"; form.enctype = "application/x-www-form-urlencoded"; var input = document.createElement('input'); input.type = 'hidden'; input.name = "source"; input.value = "internal"; form.appendChild(input); // used beneath function uint8ToString(buf) { var i, length, out = ''; for (i = 0, length = buf.length; i < length; i += 1) { out += String.fromCharCode(buf[i]); } return out; } // starting the asynchronous things begin_convert(file); // convert file to b64 string function begin_convert(file) { // Read the local file into a Uint8Array. var fileReader = new FileReader(); fileReader.onload = function webViewerChangeFileReaderOnload(evt) { var buffer = evt.target.result; var uint8Array = new Uint8Array(buffer); console.log("onload filereader before string convert"); var array_string = uint8ToString(uint8Array) console.log("onload filereader after string convert"); var b64encoded = btoa(array_string); continueFormCreation(b64encoded); }; console.log("converting to b64.."); fileReader.readAsArrayBuffer(file); } function continueFormCreation(result) { input = document.createElement('input'); input.type = 'hidden'; input.name = "pdf-file-b64"; input.value = result; form.appendChild(input); input = document.createElement('input'); input.type = 'hidden'; input.name = "connector"; input.value = connector; form.appendChild(input); input = document.createElement('input'); input.type = 'hidden'; input.name = "locale"; input.value = locale; form.appendChild(input); ifr = document.getElementById('iFrame').contentWindow; if(ifr.isSignaturePlaced()) { //Signature has been manually placed console.log("signature manually placed: x: y:" + ifr.global_status.getSignature().posx + ", " + ifr.global_status.getSignature().posy) input = document.createElement('input'); input.type = 'hidden'; input.name = "sig-pos-x"; input.value = ifr.global_status.getSignature().posx; form.appendChild(input); input = document.createElement('input'); input.type = 'hidden'; input.name = "sig-pos-y"; input.value = ifr.global_status.getSignature().posy; form.appendChild(input); input = document.createElement('input'); input.type = 'hidden'; input.name = "sig-pos-p"; input.value = ifr.global_status.getSignature().page; form.appendChild(input); } else if(place_on_new_page) { console.log("signature will be placed on a new page"); input = document.createElement('input'); input.type = 'hidden'; input.name = "sig-pos-p"; input.value = "new"; form.appendChild(input); place_on_new_page = false; } else { console.log("signature will be placed on bottom"); } document.body.appendChild(form); $("#methodContainer").hide(); $("#mobileSignOnFrame").show(); form.submit(); $("body").removeClass("wait"); } } // //Changes color if the user drags a file over the dropzone // function highlightDropzone() { $("#borderBox").css("background", "#D8FFD8"); } // //Changes color back to original, if the user stops dragging a file over the dropzone (or drops the file) // function unhighlightDropzone() { $("#borderBox").css("background", "#E8F4FF"); } // //Removes all content that is inside of the PDF Preview section // function clearContentDiv() { $("#content").empty(); } // //Inserts an Iframe with a PDF.js instance into the PDF Preview section // function createIframe() { $("#content").append(""); } $(document).ready(function() { window.lang = new Lang('en'); // set default language window.lang.dynamic('th', 'assets/js/langpack/th.json'); // define language pack to load dynamically // check for language cookie var cookie_language = Cookies.get("language"); if(cookie_language && cookie_language !== default_language) { toggleLanguage(); } registerEventListeners(); }); function respond(arg, success) { // called when user successfully signed with mobile / card console.log("recieved response after server contact, arg: " + arg + ", success: " + success); if(!success) { window.alert("Server Response Error, please try again"); $("#SignStepButton").click(); return; } $("#DownloadResultButton").attr("href", arg); var insertIndex = file.name.indexOf(".pdf"); var download_name = file.name.insertAt(insertIndex, "_signed"); //$("#DownloadResultButton").attr("download", download_name); $("#methodContainer").show(); $("#mobileSignOnFrame").hide(); $("#FinishStepButton").click(); }; function toggleLanguage() { if(default_language === "de") { $("#LanguageDisplay").html ( " AT" ); default_language = "en"; window.lang.change('en'); if($("#iFrame").get(0) != null) // check if ready { $("#iFrame").get(0).contentWindow.switchLanguage("en"); } } else { $("#LanguageDisplay").html ( " EN" ); default_language = "de"; window.lang.change('th'); if($("#iFrame").get(0) != null) { $("#iFrame").get(0).contentWindow.switchLanguage("de"); } } // set Cookie Cookies.set("language", default_language); } function GoBack() { if($("#PlaceStepButton").hasClass("active")) { $("#UploadStepButton").click(); } else if($("#SignStepButton").hasClass("active")) { $("#PlaceStepButton").click(); } else if($("#FinishStepButton").hasClass("active")) { $("#SignStepButton").click(); } }