Files
HJGL_DS/HJGL_DSPackFile/PackFile/WeldMat/res/js/sign/LC700.js
T
2025-03-13 09:20:11 +08:00

1011 lines
26 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* global jQuery */
/*eslint-disable*/
'use strict';
// API Url
var apiUrl = 'http://localhost:8089/PPSignSDK/';
//var apiUrl = 'https://localhost:8090/PPSignSDK/';
/*var apiUrl;
if (location.protocol != 'https:') {
apiUrl = 'http://localhost:8089/PPSignSDK/';
}
else {
apiUrl = 'https://localhost:8090/PPSignSDK/';
}*/
// initialize device web api
var initUrl = apiUrl + 'InitialDevice?id=3&width=740&height=480';
// uninitialize device web api
var uninitUrl = apiUrl + 'UninitialDevice?id=3';
// get ink web api
var getInkUrl = apiUrl + 'GetInks';
// clear ink api
var clrInkUrl = apiUrl + 'Clear';
// open & close LCD api
var oplcdUrl = apiUrl + 'OpenLCD';
var cllcdUrl = apiUrl + 'CloseLCD';
// get pen width api
var penwidthUrl = apiUrl + 'SetPenWidth?Width=';
// get pen style api
var penstyUrl = apiUrl + 'SetPenStyle?Style=';
// get save drawing api
var savedrawUrl = apiUrl + 'SaveDrawingImage?';
// get size api
var getsizeUrl = apiUrl + 'GetSize';
// get point api
var getpointUrl = apiUrl + 'GetPointer';
// get about api
var aboutUrl = apiUrl + 'About';
// get Version ID api ( for L398 & E560 )
var veridUrl = apiUrl + 'VersionID';
// get pen ID api ( for L398 & E560 )
var penidUrl = apiUrl + 'PenID';
// get pad ID api ( for L398 & E560 )
var padidUrl = apiUrl + 'PadID';
// Display device information in LCD api ( only for L398 )
var diilUrl = apiUrl + 'DisplayDeviceInfoInLCD?show=';
// Get device information api
var devinfoUrl = apiUrl + 'GetDeviceInfo?type=';
// get Encode api
var encodeUrl = apiUrl + 'Encode?type=';
// get Decode api
var decodeUrl = apiUrl + 'Decode?type=';
// get Set clip api
var setclipUrl = apiUrl + 'SetClip';
// get color set api
var setcolorUrl = apiUrl + 'SetPenColor';
// get valid api
var validUrl = apiUrl + 'IsValid';
// save device data api
var savedataUrl = apiUrl + 'SaveDeviceData';
// read device data api
var readdataUrl = apiUrl + 'ReadDeviceData';
// save device data api
var cleardataUrl = apiUrl + 'ClearDeviceData';
// Get Decode File Path
var decodepathUrl = apiUrl + 'GetDecodeFilePath';
// GetDeviceConfirmOrCancelKeyStatus
var confirmStatusUrl = apiUrl + 'GetDeviceConfirmOrCancelKeyStatus';
// Save draw video
var saveDrawingVideoUrl = apiUrl + 'SaveDrawingVideo';
// Get video base64 code
var getDrawingVideoBase64DataUrl = apiUrl + 'GetDrawingVideoBase64Data';
// Enable Save Video Data
var enableSaveVideoDataUrl = apiUrl + 'EnableSaveVideoData?show=1';
var disableSaveVideoDataUrl = apiUrl + 'EnableSaveVideoData?show=0';
// get svg image base64 data...
var getSVGImageUrl = apiUrl + 'GetSVGImageBase64Data';
var TestApi = apiUrl + 'Test';
var canvas;
var context;
var isPolling = false;
var filenameCache = '';
var checkVideoIsGeneratge = false;
var isFirstPlay = true;
var LastVideoBase64Resp;
var LastSignatureBase64Data;
var g_nPlaybackSignStrokeCount = 0;
var g_nTotalPlaybackSignStrokeCount = 0;
function TestHandShake() {
//console.log('before TestHandShake');
$.ajax({
url: TestApi,
type: 'GET',
cache: false
}).done(function () {
//console.log('TestHandShake complete');
}).fail(function () {});
}
// initialize device
function initDevice() {
//event.preventDefault();
$.ajax({
url: initUrl,
type: 'GET',
cache: false
}).done(function (response) {
if (response === true) {
isPolling = true;
getInk();
getStatus();
$('.init').removeAttr('disabled');
$('#initBtn').attr('disabled', 'disabled');
clearInk();
} else {
alert('No device!');
}
}).fail(function (jqXHR, textStatus, errorThrown) {
alert('Connection fail(' + jqXHR.status + ')!');
});
}
// uninitialize device
function uninitDevice() {
//event.preventDefault();
isPolling = false;
clearInk();
$.ajax({
url: uninitUrl,
type: 'GET',
cache: false
}).done(function (response) {
if (response === true) {
var encodeArea = $('#encode');
var decodeArea = $('#decode');
var canvas = document.getElementById('ppCanvas');
context.clearRect(0, 0, canvas.width, canvas.height);
encodeArea.html("");
decodeArea.html("");
$('#colorSet').val("1");
$('#penWidth').val("3");
$('#penStyle').val("0");
$('.init').attr('disabled', 'disabled');
$('.videoControl').attr('disabled', 'disabled');
$('#initBtn').removeAttr('disabled');
};
});
}
// switch initialize
$('#initSwitch').click(function () {
if ($(this).prop('checked')) {
initDevice();
} else {
uninitDevice();
}
console.log($(this));
console.log($(this).prop('checked'));
});
// initialize canvas and setup context
window.onload = function () {
TestHandShake();
canvas = document.getElementById('ppCanvas');
if (canvas.getContext) {
context = canvas.getContext('2d');
}
initDevice();
};
window.onbeforeunload = function (e) {
if (isPolling) {
uninitDevice();
var milliseconds = 1000;
var start = new Date().getTime();
while (true) {
if (new Date().getTime() - start > milliseconds) {
break;
}
}
}
};
function getStatus() {
// 用polling的方式向self-host發送request取得簽名板按鈕status
(function poll() {
var timeId = setTimeout(function () {
clearTimeout(timeId);
// 取得狀態
if (isPolling) {
$.ajax({
url: confirmStatusUrl,
type: 'GET',
cache: false
}).done(function (result) {
//console.log('poll-confirmStatusUrl ' +result);
if (result == '1') {
// alert('Notify From Device : Confirmed.');
var canvas = document.getElementById('ppCanvas');
context.clearRect(0, 0, canvas.width, canvas.height);
drawImage(LastSignatureBase64Data);
encode();
} else if (result == '0') {
//alert('Notify From Device : Cancel !');
clearInk();
}
}).fail(function () {
console.log('Fail to get confirmed status!');
}).always(function () {
if (isPolling) {
poll();
} else {}
});
}
}, 500);
})();
};
function enableSaveVideoData() {
$.ajax({
url: enableSaveVideoDataUrl,
type: 'GET',
cache: false
}).done(function () {
clearInk();
document.getElementById('VideoStatusBtn').innerHTML = 'Disable';
$('.videoControl').removeAttr('disabled');
});
};
function disableSaveVideoData() {
$.ajax({
url: disableSaveVideoDataUrl,
type: 'GET',
cache: false
}).done(function () {
clearInk();
document.getElementById('VideoStatusBtn').innerHTML = 'Enable';
$('.videoControl').attr('disabled', 'disabled');
});
};
function getInk() {
// 用polling的方式向self-host發送request取得簽名板畫面(base64格式)
(function poll() {
var timeId = setTimeout(function () {
clearTimeout(timeId);
if (isPolling) {
$.ajax({
url: getInkUrl,
type: 'GET',
cache: false
}).done(function (data) {
//console.log('poll-getInkUrl');
var dataInfos = JSON.parse(data);
dataInfos.forEach(function (value) {
if (value.EventType === 0) {
drawImage(value.Image);
LastSignatureBase64Data = value.Image;
}
});
}).always(function () {
if (isPolling) {
poll();
} else {}
});
}
}, 50);
})();
};
function drawImage(base64) {
var dataUrl = 'data:image/png;base64,';
dataUrl = dataUrl + base64;
// 在image中載入圖檔,再畫到canvas呈現
var img = new Image();
img.addEventListener('load', function () {
context.drawImage(this, 0, 0, canvas.width, canvas.height);
}, false);
img.src = dataUrl;
};
// clear Ink
function clearInk() {
$.ajax({
url: clrInkUrl,
type: 'GET',
cache: false,
success: function success() {
var canvas = document.getElementById('ppCanvas');
context.clearRect(0, 0, canvas.width, canvas.height);
}
});
};
// open lcd
function openLcd() {
$.ajax({
url: oplcdUrl,
type: 'GET',
cache: false
});
$('.shutdown').fadeOut('fast');
};
// close lcd
function closeLcd() {
$.ajax({
url: cllcdUrl,
type: 'GET',
cache: false
});
$('.shutdown').fadeIn('fast');
};
// pen width change case
function pwChange() {
var pwVal = $('#penWidth').val();
$.ajax({
url: penwidthUrl + pwVal,
type: 'GET',
cache: false
}).done(function () {
clearInk();
});
// alert( penwidthUrl + pwVal );
};
// pen style change case
function psChange() {
var psVal = $('#penStyle').val();
$.ajax({
url: penstyUrl + psVal,
type: 'GET',
cache: false
});
// alert(penstyUrl + psVal);
};
// save drawing images
function saveDrawing() {
var getsdType = $('#sdType').val();
var getsdDpi = $('#sdDpi').val();
var localPath = 'DrawImage_' + generateString(5);
var sdT, sdD;
switch (getsdType) {
case '1':
sdT = '.BMP';
break;
case '2':
sdT = '.JPG';
break;
case '3':
sdT = '.PNG';
break;
case '4':
sdT = '.GIF';
break;
case '5':
sdT = '.TIFF';
break;
case '7':
sdT = '.PDF';
break;
case '8':
sdT = '.SVG';
break;
};
if (getsdDpi == '0') {
sdD = '150';
} else {
sdD = '300';
};
$.ajax({
url: savedrawUrl + 'type=' + getsdType + '&dpi=' + getsdDpi + '&path=' + localPath + sdT,
type: 'GET',
cache: false
}).done(function (resp) {
if (Boolean(parseInt(resp))) {
alert('Save file ' + localPath + ' failed' + ', result=' + resp);
} else {
if (navigator.userAgent.indexOf("WOW64") != -1 || navigator.userAgent.indexOf("Win64") != -1) {
alert('File' + resp + ' saved\nDpi' + sdD);
} else {
alert('File' + resp + ' saved\nDpi' + sdD);
}
}
});
};
function saveVideo() {
var getsvType = $('#svType').val();
var getsvFps = $('#svFps').val();
var localPath = 'DrawVideo_' + generateString(5);
var svT;
switch (getsvType) {
case '1':
svT = '.mp4';
break;
case '2':
svT = '.wmv';
break;
};
$.ajax({
url: saveDrawingVideoUrl + '?type=' + getsvType + '&fpsindex=' + getsvFps + '&path=' + localPath + svT,
type: 'GET',
cache: false
}).done(function (resp) {
///////////////////////////////////////////////////
$.ajax({
url: getDrawingVideoBase64DataUrl,
type: 'GET',
cache: false
}).done(function (resp2) {
console.log('getDrawingVideoBase64DataUrl');
LastVideoBase64Resp = resp2;
if (Boolean(parseInt(resp2))) {
alert('Save video ' + localPath + ' failed' + ', result=' + resp2);
} else {
var RespStruct = JSON.parse(LastVideoBase64Resp)[0];
if (navigator.userAgent.indexOf("WOW64") != -1 || navigator.userAgent.indexOf("Win64") != -1) {
alert('File' + resp + ' saved\n' + 'Received base64 data size :' + RespStruct.Image.length + '\n' + 'Rechecked base64 data size :' + RespStruct.ImageLength);
} else {
alert('File' + resp + ' saved\n' + 'Received base64 data size :' + RespStruct.Image.length + '\n' + 'Rechecked base64 data size :' + RespStruct.ImageLength);
}
filenameCache = resp;
if (!checkVideoIsGeneratge && !isFirstPlay) {
playback();
}
isFirstPlay = true;
checkVideoIsGeneratge = true;
}
}).fail(function () {}).always(function () {});
///////////////////////////////////////////////////
});
};
function videoStatusClick() {
var type = document.getElementById('VideoStatusBtn').innerHTML;
if (type === 'Enable') {
enableSaveVideoData();
} else {
disableSaveVideoData();
}
};
// playback drawing video
function playbackButtonClick() {
isFirstPlay = false;
checkVideoIsGeneratge = false;
if (checkVideoIsGeneratge) {
playback();
} else {
saveVideo();
}
};
function playback() {
var VideoFormat = JSON.parse(LastVideoBase64Resp)[0];
var videoBase64 = 'data:video/mp4;base64,' + VideoFormat.Image;
$('#playbackModal').modal('show');
$('#playback-video').get(0).src = videoBase64;
/*$.ajax({
url: getDrawingVideoBase64DataUrl,
type: 'GET'
})
.done(function(resp) {
var VideoFormat = JSON.parse(resp)[0];
console.log(VideoFormat);
var videoBase64 = 'data:video/mp4;base64,' + VideoFormat.Image;
$('#playbackModal').modal('show');
$('#playback-video').get(0).src = videoBase64;
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});*/
};
// Set clip
function setClip() {
var scWidth = $('#scWidth').val();
var scHeight = $('#scHeight').val();
if (!scWidth || scWidth < 0) {
alert('Insert Width!');
return;
};
if (!scHeight || scHeight < 0) {
alert('Insert height!');
return;
};
var canvas = document.getElementById('ppCanvas');
context.clearRect(0, 0, canvas.width, canvas.height);
$.ajax({
url: setclipUrl + '?width=' + scWidth + '&height=' + scHeight,
type: 'GET',
cache: false
});
};
// get size
function getSize() {
$.ajax({
url: getsizeUrl,
type: 'GET',
cache: false,
success: function success(data) {
if (data == '-8') {
alert('Ink Empty.\nresult=' + data);
} else {
alert('result=' + data);
}
},
error: function error() {
alert('Get size fail!');
}
});
};
// get pointer
function getPointer() {
var pointContant = $('#pointContant');
pointContant.empty();
$.ajax({
url: getpointUrl,
type: 'GET',
cache: false,
dataType: 'JSON',
success: function success(resp) {
var oJson = jQuery.parseJSON(resp);
var dataLength = oJson.length;
if (dataLength === 0) {
alert('Point information is empty.');
} else {
$('#myModal').modal('show');
for (var i = 0; i < dataLength; i++) {
pointContant.append('<tr><td>' + oJson[i].x + '</td><td>' + oJson[i].y + '</td><td align="right">' + oJson[i].pressure + '</td><td align="right">' + oJson[i].bStrokeEnd + '</td><td align="right">' + oJson[i].Time + '</td></tr>');
}
}
},
error: function error() {
alert('Get point information fail!');
}
});
};
// get about
function getAbout() {
$.ajax({
url: aboutUrl,
type: 'GET',
cache: false
});
};
// get version id
function getVerid() {
$.ajax({
url: veridUrl,
type: 'GET',
cache: false
}).done(function (data) {
alert(data);
});
};
// get pad id
function getPadid() {
$.ajax({
url: padidUrl,
type: 'GET',
cache: false
}).done(function (data) {
alert(data);
});
};
// get pen id
function getPenid() {
$.ajax({
url: penidUrl,
type: 'GET',
cache: false
}).done(function (data) {
alert(data);
});
};
// show device info in lcd
function showDiilcd() {
$.ajax({
url: diilUrl + '1',
type: 'GET',
cache: false
});
};
// hide device info in lcd
function hideDiilcd() {
$.ajax({
url: diilUrl + '0',
type: 'GET',
cache: false
});
};
// get device information
function getDevinf() {
var diVal = $('#devInfo').val();
$.ajax({
url: devinfoUrl + diVal,
type: 'GET',
cache: false
}).done(function (data) {
if (diVal == 1) {
if (data === "true") {
alert('Connected\nresult=' + data);
} else {
alert('Disconnected\nresult=' + data);
}
} else {
alert('result=' + data);
}
});
};
// Encode
function encode() {
var encodeType = '2';
$.ajax({
url: encodeUrl + encodeType,
type: 'GET',
cache: false
}).done(function (data) {
debugger
upLoadFile(data);
});
};
// Decode
function decode() {
var encodeContent = $('#encode').val();
var encodeType = $('#encodeType').val();
var decodeArea = $('#decode');
decodeArea.text("");
var decodeFormat;
switch (encodeType) {
case '1':
decodeFormat = '.BMP';
break;
case '2':
decodeFormat = '.JPG';
break;
case '3':
decodeFormat = '.PNG';
break;
case '4':
decodeFormat = '.GIF';
break;
case '5':
decodeFormat = '.TIFF';
break;
}
if (encodeType == 6) {
$.ajax({
url: decodeUrl + encodeType,
type: 'POST',
cache: false,
data: encodeContent,
success: function success(resp) {
decodeArea.append('X\t\t\t\tY\t\t\t\tbStrokeEnd\n');
var data = JSON.parse(resp);
for (var i = 0; i < data.length; i++) {
var x = data[i].x,
y = data[i].y,
bStrokeEnd = data[i].bStrokeEnd;
decodeArea.append(x + '\t\t\t\t' + y + '\t\t\t\t' + bStrokeEnd + '\n');
}
}
});
} else {
$.ajax({
url: decodeUrl + encodeType + '&path=Decode_Image_' + generateString(5) + decodeFormat,
type: 'POST',
cache: false,
data: encodeContent,
success: function success() {
$.ajax({
url: decodepathUrl,
type: 'GET',
cache: false,
success: function success(resp) {
alert('File' + resp + '\nSaved.');
}
});
}
});
};
};
// Get Valid
function getValid() {
$.ajax({
url: validUrl,
type: 'GET',
cache: false,
success: function success(data) {
if (data) {
alert('Protect is Valid');
} else {
alert('Protect is Not Valid');
}
}
});
};
// Save Device Data
function saveData() {
var svData = $('#svData').val();
var svPath = '?path=sample_save.txt';
$.ajax({
url: savedataUrl + svPath,
type: 'GET',
cache: false,
data: {
index: svData
}
}).done(function (result) {
alert('Upload ' + result + ' data into device.');
});
};
// Read Device Data
function readData() {
var reData = $('#reData').val();
var rePath = '?path=sample_read.txt';
$.ajax({
url: readdataUrl + rePath,
type: 'GET',
cache: false,
data: {
index: reData
}
}).done(function (resp) {
alert("Download device data to " + resp);
});
};
// Clear Device Data
function clearData() {
var clData = $('#clData').val();
$.ajax({
url: cleardataUrl,
type: 'GET',
cache: false,
data: {
index: clData
}
}).done(function (resp) {
if (resp == 0) {
alert('Clear Data success.');
} else {
alert('Clear Data failed.');
}
});
};
// Generate random number
function generateString(length) {
var text = "";
var possible = "0123456789";
for (var i = 0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}return text;
}
// Set pen color
function pcChange() {
var pcVal = $('#penColor').val();
var penColor;
switch (pcVal) {
case '1':
penColor = '?R=0&G=0&B=0';
break;
case '2':
penColor = '?R=255&G=0&B=0';
break;
case '3':
penColor = '?R=0&G=255&B=0';
break;
case '4':
penColor = '?R=0&G=0&B=255';
break;
case '5':
penColor = '?R=255&G=255&B=0';
break;
};
$.ajax({
url: setcolorUrl + penColor,
type: 'GET',
cache: false
});
};
// SVG Image button click...
function svgImageButtonClick() {
// get signature with SVG Image base64 data...
$.ajax({
url: getSVGImageUrl,
type: 'GET',
cache: false
}).done(function (data) {
if (data == '') {
alert('Ink Empty !');
} else {
displaySVGImage(data);
}
});
}
// display SVG Image...
function displaySVGImage(base64Data) {
var svgImageBase64 = 'data:image/svg+xml;base64,' + base64Data;
$('#displaySVGImageModal').modal('show');
$('#displaySVGImage').get(0).src = svgImageBase64;
}
// playback SVG Image button click...
function playbackSVGImageButtonClick() {
// get signature with SVG Image base64 data...
$.ajax({
url: getSVGImageUrl,
type: 'GET',
cache: false
}).done(function (data) {
if (data == '') {
alert('Ink Empty !');
} else {
goPlaybackSVGImage(data);
}
});
}
// go playback SVG Image...
function goPlaybackSVGImage(base64Data) {
$('#playbackSVGImageModal').modal('show');
DecodeSignSVGSample(base64Data);
g_nPlaybackSignStrokeCount = 0;
ClearSVGPathInfo();
StartPlaybackSignature();
}
function DecodeSignSVGSample(base64Data) {
// decode base64Data as SVG XML Data...
var signSVGXMLSample = atob(base64Data);
// insert signSVGXMLSample into document hidden 'div' element...
var div = document.createElement('div');
div.id = 'SignSVGXMLSample';
div.innerHTML = signSVGXMLSample;
div.style = 'display: none;';
var modal_svgXMLDataSource = document.getElementById("svgXMLDataSource");
modal_svgXMLDataSource.appendChild(div);
// get total path count from 'SignSVGXMLSample' element...
var pathList = document.querySelectorAll("#SignSVGXMLSample path");
g_nTotalPlaybackSignStrokeCount = pathList.length;
// clone element from 'SignSVGXMLSample svg' into 'svg_demo'...
var svgTagInSignSVGXMLSample = document.querySelector("#SignSVGXMLSample svg");
var modal_svgXMLDataTarget = document.getElementById("svgXMLDataTarget");
modal_svgXMLDataTarget.appendChild(svgTagInSignSVGXMLSample.cloneNode(true));
// set 'svgXMLDataTarget svg' element id...
var targetSVGTag = document.querySelector("#svgXMLDataTarget svg");
targetSVGTag.setAttribute('id', 'svg_box');
}
function ClearSVGPathInfo() {
var pathList = document.querySelectorAll("#svg_box path");
if(pathList) {
for (var i = 0; i < pathList.length; i++) {
var currentPath = pathList[i];
currentPath.setAttribute('d', '');
currentPath.setAttribute('stroke-width', '0');
}
}
}
function StartPlaybackSignature() {
(function keepPlaybackSignStroke() {
var timeId = setTimeout(function() {
clearTimeout(timeId);
if(g_nPlaybackSignStrokeCount < g_nTotalPlaybackSignStrokeCount)
{
var signSVGXMLSamplePathList = document.querySelectorAll("#SignSVGXMLSample path");
var pathList = document.querySelectorAll("#svg_box path");
if(signSVGXMLSamplePathList && pathList) {
// set current sign stroke path info into svg-box...
var currentSignSVGXMLSamplePath = signSVGXMLSamplePathList[g_nPlaybackSignStrokeCount];
var d = currentSignSVGXMLSamplePath.getAttribute('d');
var strokeWidth = currentSignSVGXMLSamplePath.getAttribute('stroke-width');
var currentPath = pathList[g_nPlaybackSignStrokeCount];
currentPath.setAttribute('d', d);
currentPath.setAttribute('stroke-width', strokeWidth);
g_nPlaybackSignStrokeCount++;
keepPlaybackSignStroke();
}
}
}, 10);
}());
}
function closePlaybackSVGImageModal() {
g_nTotalPlaybackSignStrokeCount = 0;
var svgboxTag = document.getElementById("svg_box");
svgboxTag.remove();
var signSVGXMLSampleTag = document.getElementById("SignSVGXMLSample");
signSVGXMLSampleTag.remove();
}
function playInPlaybackSVGImageModal() {
g_nPlaybackSignStrokeCount = 99999;
ClearSVGPathInfo();
g_nPlaybackSignStrokeCount = 0;
StartPlaybackSignature();
}