diff --git a/src/js/main.js b/src/js/main.js index 034fe38..4a71d07 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -6,682 +6,682 @@ import Picker from "vanilla-picker"; function main(){ -var whiteboardId = getQueryVariable("whiteboardid"); -var randomid = getQueryVariable("randomid"); -if (randomid && !whiteboardId) { //set random whiteboard on empty whiteboardid - whiteboardId = Array(2).fill(null).map(() => Math.random().toString(36).substr(2)).join(''); - const urlParams = new URLSearchParams(window.location.search); - urlParams.set('whiteboardid', whiteboardId); - window.location.search = urlParams; -} - -whiteboardId = whiteboardId || "myNewWhiteboard"; -whiteboardId = unescape(encodeURIComponent(whiteboardId)).replace(/[^a-zA-Z0-9 ]/g, ""); -var myUsername = getQueryVariable("username"); -var accessToken = getQueryVariable("accesstoken"); -myUsername = myUsername || "unknown" + (Math.random() + "").substring(2, 6); -accessToken = accessToken || ""; -var accessDenied = false; - -// Custom Html Title -var title = getQueryVariable("title"); -if (!title === false) { - document.title = decodeURIComponent(title); -} - -var url = document.URL.substr(0, document.URL.lastIndexOf('/')); -var signaling_socket = null; -var urlSplit = url.split("/"); -var subdir = ""; -for (var i = 3; i < urlSplit.length; i++) { - subdir = subdir + '/' + urlSplit[i]; -} -signaling_socket = io("", { "path": subdir + "/ws-api" }); // Connect even if we are in a subdir behind a reverse proxy - -signaling_socket.on('connect', function () { - console.log("Websocket connected!"); - - signaling_socket.on('drawToWhiteboard', function (content) { - whiteboard.handleEventsAndData(content, true); - }); - - signaling_socket.on('refreshUserBadges', function () { - whiteboard.refreshUserBadges(); - }); - - signaling_socket.on('wrongAccessToken', function () { - if (!accessDenied) { - accessDenied = true; - showBasicAlert("Access denied! Wrong accessToken!") - } - }); - - signaling_socket.on('updateSmallestScreenResolution', function (widthHeight) { - whiteboard.updateSmallestScreenResolution(widthHeight["w"], widthHeight["h"]); - }); - - signaling_socket.emit('joinWhiteboard', { wid: whiteboardId, at: accessToken, windowWidthHeight: { w: $(window).width(), h: $(window).height() } }); -}); - -$(document).ready(function () { - if (getQueryVariable("webdav") == "true") { - $("#uploadWebDavBtn").show(); + var whiteboardId = getQueryVariable("whiteboardid"); + var randomid = getQueryVariable("randomid"); + if (randomid && !whiteboardId) { //set random whiteboard on empty whiteboardid + whiteboardId = Array(2).fill(null).map(() => Math.random().toString(36).substr(2)).join(''); + const urlParams = new URLSearchParams(window.location.search); + urlParams.set('whiteboardid', whiteboardId); + window.location.search = urlParams; } - whiteboard.loadWhiteboard("#whiteboardContainer", { //Load the whiteboard - whiteboardId: whiteboardId, - username: btoa(myUsername), - sendFunction: function (content) { - content["at"] = accessToken; - signaling_socket.emit('drawToWhiteboard', content); - } - }); - // request whiteboard from server - $.get(subdir + "/api/loadwhiteboard", { wid: whiteboardId, at: accessToken }).done(function (data) { - whiteboard.loadData(data) - }); + whiteboardId = whiteboardId || "myNewWhiteboard"; + whiteboardId = unescape(encodeURIComponent(whiteboardId)).replace(/[^a-zA-Z0-9 ]/g, ""); + var myUsername = getQueryVariable("username"); + var accessToken = getQueryVariable("accesstoken"); + myUsername = myUsername || "unknown" + (Math.random() + "").substring(2, 6); + accessToken = accessToken || ""; + var accessDenied = false; - $(window).resize(function () { - signaling_socket.emit('updateScreenResolution', { at: accessToken, windowWidthHeight: { w: $(window).width(), h: $(window).height() } }); - }) + // Custom Html Title + var title = getQueryVariable("title"); + if (!title === false) { + document.title = decodeURIComponent(title); + } - /*----------------/ - Whiteboard actions - /----------------*/ + var url = document.URL.substr(0, document.URL.lastIndexOf('/')); + var signaling_socket = null; + var urlSplit = url.split("/"); + var subdir = ""; + for (var i = 3; i < urlSplit.length; i++) { + subdir = subdir + '/' + urlSplit[i]; + } + signaling_socket = io("", { "path": subdir + "/ws-api" }); // Connect even if we are in a subdir behind a reverse proxy - //Handle key actions - $(document).on("keydown", function (e) { - if (e.which == 16) { - whiteboard.pressedKeys["shift"] = true; //Used for straight lines... - } - //console.log(e.which); - }); - $(document).on("keyup", function (e) { - if (e.which == 16) { - whiteboard.pressedKeys["shift"] = false; - } - }); + signaling_socket.on('connect', function () { + console.log("Websocket connected!"); - var shortcutFunctions = { - clearWhiteboard: function () { whiteboard.clearWhiteboard(); }, - undoStep: function () { whiteboard.undoWhiteboardClick(); }, - redoStep: function () { whiteboard.redoWhiteboardClick(); }, - setTool_mouse: function () { $(".whiteboardTool[tool=mouse]").click(); }, - setTool_recSelect: function () { $(".whiteboardTool[tool=recSelect]").click(); }, - setTool_pen: function () { - $(".whiteboardTool[tool=pen]").click(); - whiteboard.redrawMouseCursor(); - }, - setTool_line: function () { $(".whiteboardTool[tool=line]").click(); }, - setTool_rect: function () { $(".whiteboardTool[tool=rect]").click(); }, - setTool_circle: function () { $(".whiteboardTool[tool=circle]").click(); }, - setTool_text: function () { $(".whiteboardTool[tool=text]").click(); }, - setTool_eraser: function () { - $(".whiteboardTool[tool=eraser]").click(); - whiteboard.redrawMouseCursor(); - }, - thickness_bigger: function () { - var thickness = parseInt($("#whiteboardThicknessSlider").val()) + 1; - $("#whiteboardThicknessSlider").val(thickness); - whiteboard.setStrokeThickness(thickness); - whiteboard.redrawMouseCursor(); - }, - thickness_smaller: function () { - var thickness = parseInt($("#whiteboardThicknessSlider").val()) - 1; - $("#whiteboardThicknessSlider").val(thickness); - whiteboard.setStrokeThickness(thickness); - whiteboard.redrawMouseCursor(); - }, - openColorPicker: function () { $("#whiteboardColorpicker").click(); }, - saveWhiteboardAsImage: function () { $("#saveAsImageBtn").click(); }, - saveWhiteboardAsJson: function () { $("#saveAsJSONBtn").click(); }, - uploadWhiteboardToWebDav: function () { $("#uploadWebDavBtn").click(); }, - uploadJsonToWhiteboard: function () { $("#uploadJsonBtn").click(); }, - shareWhiteboard: function () { $("#shareWhiteboardBtn").click(); }, - hideShowControls: function () { $("#minMaxBtn").click(); }, + signaling_socket.on('drawToWhiteboard', function (content) { + whiteboard.handleEventsAndData(content, true); + }); - setDrawColorBlack: function () { - whiteboard.setDrawColor("black"); - whiteboard.redrawMouseCursor(); - }, - setDrawColorRed: function () { - whiteboard.setDrawColor("red"); - whiteboard.redrawMouseCursor(); - }, - setDrawColorGreen: function () { - whiteboard.setDrawColor("green"); - whiteboard.redrawMouseCursor(); - }, - setDrawColorBlue: function () { - whiteboard.setDrawColor("blue"); - whiteboard.redrawMouseCursor(); - }, - setDrawColorYellow: function () { - whiteboard.setDrawColor("yellow"); - whiteboard.redrawMouseCursor(); - }, + signaling_socket.on('refreshUserBadges', function () { + whiteboard.refreshUserBadges(); + }); - toggleLineRecCircle: function () { - var activeTool = $(".whiteboardTool.active").attr("tool"); - if (activeTool == "line") { - $(".whiteboardTool[tool=rect]").click(); - } else if (activeTool == "rect") { - $(".whiteboardTool[tool=circle]").click(); - } else { - $(".whiteboardTool[tool=line]").click(); + signaling_socket.on('wrongAccessToken', function () { + if (!accessDenied) { + accessDenied = true; + showBasicAlert("Access denied! Wrong accessToken!") } - }, - togglePenEraser: function () { - var activeTool = $(".whiteboardTool.active").attr("tool"); - if (activeTool == "pen") { - $(".whiteboardTool[tool=eraser]").click(); - } else { + }); + + signaling_socket.on('updateSmallestScreenResolution', function (widthHeight) { + whiteboard.updateSmallestScreenResolution(widthHeight["w"], widthHeight["h"]); + }); + + signaling_socket.emit('joinWhiteboard', { wid: whiteboardId, at: accessToken, windowWidthHeight: { w: $(window).width(), h: $(window).height() } }); + }); + + $(document).ready(function () { + if (getQueryVariable("webdav") == "true") { + $("#uploadWebDavBtn").show(); + } + whiteboard.loadWhiteboard("#whiteboardContainer", { //Load the whiteboard + whiteboardId: whiteboardId, + username: btoa(myUsername), + sendFunction: function (content) { + content["at"] = accessToken; + signaling_socket.emit('drawToWhiteboard', content); + } + }); + + // request whiteboard from server + $.get(subdir + "/api/loadwhiteboard", { wid: whiteboardId, at: accessToken }).done(function (data) { + whiteboard.loadData(data) + }); + + $(window).resize(function () { + signaling_socket.emit('updateScreenResolution', { at: accessToken, windowWidthHeight: { w: $(window).width(), h: $(window).height() } }); + }) + + /*----------------/ + Whiteboard actions + /----------------*/ + + //Handle key actions + $(document).on("keydown", function (e) { + if (e.which == 16) { + whiteboard.pressedKeys["shift"] = true; //Used for straight lines... + } + //console.log(e.which); + }); + $(document).on("keyup", function (e) { + if (e.which == 16) { + whiteboard.pressedKeys["shift"] = false; + } + }); + + var shortcutFunctions = { + clearWhiteboard: function () { whiteboard.clearWhiteboard(); }, + undoStep: function () { whiteboard.undoWhiteboardClick(); }, + redoStep: function () { whiteboard.redoWhiteboardClick(); }, + setTool_mouse: function () { $(".whiteboardTool[tool=mouse]").click(); }, + setTool_recSelect: function () { $(".whiteboardTool[tool=recSelect]").click(); }, + setTool_pen: function () { $(".whiteboardTool[tool=pen]").click(); - } - }, - toggleMainColors: function () { - var bgColor = $("#whiteboardColorpicker")[0].style.backgroundColor; - if (bgColor == "blue") { - shortcutFunctions.setDrawColorGreen(); - } else if (bgColor == "green") { - shortcutFunctions.setDrawColorYellow(); - } else if (bgColor == "yellow") { - shortcutFunctions.setDrawColorRed(); - } else if (bgColor == "red") { - shortcutFunctions.setDrawColorBlack(); + whiteboard.redrawMouseCursor(); + }, + setTool_line: function () { $(".whiteboardTool[tool=line]").click(); }, + setTool_rect: function () { $(".whiteboardTool[tool=rect]").click(); }, + setTool_circle: function () { $(".whiteboardTool[tool=circle]").click(); }, + setTool_text: function () { $(".whiteboardTool[tool=text]").click(); }, + setTool_eraser: function () { + $(".whiteboardTool[tool=eraser]").click(); + whiteboard.redrawMouseCursor(); + }, + thickness_bigger: function () { + var thickness = parseInt($("#whiteboardThicknessSlider").val()) + 1; + $("#whiteboardThicknessSlider").val(thickness); + whiteboard.setStrokeThickness(thickness); + whiteboard.redrawMouseCursor(); + }, + thickness_smaller: function () { + var thickness = parseInt($("#whiteboardThicknessSlider").val()) - 1; + $("#whiteboardThicknessSlider").val(thickness); + whiteboard.setStrokeThickness(thickness); + whiteboard.redrawMouseCursor(); + }, + openColorPicker: function () { $("#whiteboardColorpicker").click(); }, + saveWhiteboardAsImage: function () { $("#saveAsImageBtn").click(); }, + saveWhiteboardAsJson: function () { $("#saveAsJSONBtn").click(); }, + uploadWhiteboardToWebDav: function () { $("#uploadWebDavBtn").click(); }, + uploadJsonToWhiteboard: function () { $("#uploadJsonBtn").click(); }, + shareWhiteboard: function () { $("#shareWhiteboardBtn").click(); }, + hideShowControls: function () { $("#minMaxBtn").click(); }, + + setDrawColorBlack: function () { + whiteboard.setDrawColor("black"); + whiteboard.redrawMouseCursor(); + }, + setDrawColorRed: function () { + whiteboard.setDrawColor("red"); + whiteboard.redrawMouseCursor(); + }, + setDrawColorGreen: function () { + whiteboard.setDrawColor("green"); + whiteboard.redrawMouseCursor(); + }, + setDrawColorBlue: function () { + whiteboard.setDrawColor("blue"); + whiteboard.redrawMouseCursor(); + }, + setDrawColorYellow: function () { + whiteboard.setDrawColor("yellow"); + whiteboard.redrawMouseCursor(); + }, + + toggleLineRecCircle: function () { + var activeTool = $(".whiteboardTool.active").attr("tool"); + if (activeTool == "line") { + $(".whiteboardTool[tool=rect]").click(); + } else if (activeTool == "rect") { + $(".whiteboardTool[tool=circle]").click(); + } else { + $(".whiteboardTool[tool=line]").click(); + } + }, + togglePenEraser: function () { + var activeTool = $(".whiteboardTool.active").attr("tool"); + if (activeTool == "pen") { + $(".whiteboardTool[tool=eraser]").click(); + } else { + $(".whiteboardTool[tool=pen]").click(); + } + }, + toggleMainColors: function () { + var bgColor = $("#whiteboardColorpicker")[0].style.backgroundColor; + if (bgColor == "blue") { + shortcutFunctions.setDrawColorGreen(); + } else if (bgColor == "green") { + shortcutFunctions.setDrawColorYellow(); + } else if (bgColor == "yellow") { + shortcutFunctions.setDrawColorRed(); + } else if (bgColor == "red") { + shortcutFunctions.setDrawColorBlack(); + } else { + shortcutFunctions.setDrawColorBlue(); + } + }, + + moveDraggableUp: function () { + var elm = whiteboard.tool == "text" ? $("#" + whiteboard.latestActiveTextBoxId) : $(".dragMe")[0]; + var p = $(elm).position(); + $(elm).css({ top: p.top - 5, left: p.left }) + }, + moveDraggableDown: function () { + var elm = whiteboard.tool == "text" ? $("#" + whiteboard.latestActiveTextBoxId) : $(".dragMe")[0]; + var p = $(elm).position(); + $(elm).css({ top: p.top + 5, left: p.left }) + }, + moveDraggableLeft: function () { + var elm = whiteboard.tool == "text" ? $("#" + whiteboard.latestActiveTextBoxId) : $(".dragMe")[0]; + var p = $(elm).position(); + $(elm).css({ top: p.top, left: p.left - 5 }) + }, + moveDraggableRight: function () { + var elm = whiteboard.tool == "text" ? $("#" + whiteboard.latestActiveTextBoxId) : $(".dragMe")[0]; + var p = $(elm).position(); + $(elm).css({ top: p.top, left: p.left + 5 }) + }, + dropDraggable: function () { + $($(".dragMe")[0]).find('.addToCanvasBtn').click(); + }, + addToBackground: function () { + $($(".dragMe")[0]).find('.addToBackgroundBtn').click(); + }, + cancelAllActions: function () { whiteboard.escKeyAction(); }, + deleteSelection: function () { whiteboard.delKeyAction(); }, + } + + //Load keybindings from keybinds.js to given functions + for (var i in keybinds) { + if (shortcutFunctions[keybinds[i]]) { + keymage(i, shortcutFunctions[keybinds[i]], { preventDefault: true }); } else { - shortcutFunctions.setDrawColorBlue(); + console.error("function you want to keybind on key:", i, "named:", keybinds[i], "is not available!") } - }, - - moveDraggableUp: function () { - var elm = whiteboard.tool == "text" ? $("#" + whiteboard.latestActiveTextBoxId) : $(".dragMe")[0]; - var p = $(elm).position(); - $(elm).css({ top: p.top - 5, left: p.left }) - }, - moveDraggableDown: function () { - var elm = whiteboard.tool == "text" ? $("#" + whiteboard.latestActiveTextBoxId) : $(".dragMe")[0]; - var p = $(elm).position(); - $(elm).css({ top: p.top + 5, left: p.left }) - }, - moveDraggableLeft: function () { - var elm = whiteboard.tool == "text" ? $("#" + whiteboard.latestActiveTextBoxId) : $(".dragMe")[0]; - var p = $(elm).position(); - $(elm).css({ top: p.top, left: p.left - 5 }) - }, - moveDraggableRight: function () { - var elm = whiteboard.tool == "text" ? $("#" + whiteboard.latestActiveTextBoxId) : $(".dragMe")[0]; - var p = $(elm).position(); - $(elm).css({ top: p.top, left: p.left + 5 }) - }, - dropDraggable: function () { - $($(".dragMe")[0]).find('.addToCanvasBtn').click(); - }, - addToBackground: function () { - $($(".dragMe")[0]).find('.addToBackgroundBtn').click(); - }, - cancelAllActions: function () { whiteboard.escKeyAction(); }, - deleteSelection: function () { whiteboard.delKeyAction(); }, - } - - //Load keybindings from keybinds.js to given functions - for (var i in keybinds) { - if (shortcutFunctions[keybinds[i]]) { - keymage(i, shortcutFunctions[keybinds[i]], { preventDefault: true }); - } else { - console.error("function you want to keybind on key:", i, "named:", keybinds[i], "is not available!") - } - } - - // whiteboard clear button - $("#whiteboardTrashBtn").click(function () { - $("#whiteboardTrashBtnConfirm").show().focus(); - $(this).css({ visibility: "hidden" }); - }); - - $("#whiteboardTrashBtnConfirm").mouseout(function () { - $(this).hide(); - $("#whiteboardTrashBtn").css({ visibility: "inherit" }); - }); - - $("#whiteboardTrashBtnConfirm").click(function () { - $(this).hide(); - $("#whiteboardTrashBtn").css({ visibility: "inherit" }); - whiteboard.clearWhiteboard(); - }); - - // undo button - $("#whiteboardUndoBtn").click(function () { - whiteboard.undoWhiteboardClick(); - }); - - // redo button - $("#whiteboardRedoBtn").click(function () { - whiteboard.redoWhiteboardClick(); - }); - - // switch tool - $(".whiteboardTool").click(function () { - $(".whiteboardTool").removeClass("active"); - $(this).addClass("active"); - var activeTool = $(this).attr("tool"); - whiteboard.setTool(activeTool); - if (activeTool == "mouse" || activeTool == "recSelect") { - $(".activeToolIcon").empty(); - } else { - $(".activeToolIcon").html($(this).html()); //Set Active icon the same as the button icon - } - }); - - // upload image button - $("#addImgToCanvasBtn").click(function () { - showBasicAlert("Please drag the image into the browser."); - }); - - // save image as png - $("#saveAsImageBtn").click(function () { - var imgData = whiteboard.getImageDataBase64(); - - var w = window.open('about:blank'); //Firefox will not allow downloads without extra window - setTimeout(function () { //FireFox seems to require a setTimeout for this to work. - var a = document.createElement('a'); - a.href = imgData; - a.download = 'whiteboard.png'; - w.document.body.appendChild(a); - a.click(); - w.document.body.removeChild(a); - setTimeout(function () { w.close(); }, 100); - }, 0); - }); - - // save image to json containing steps - $("#saveAsJSONBtn").click(function () { - var imgData = whiteboard.getImageDataJson(); - - var w = window.open('about:blank'); //Firefox will not allow downloads without extra window - setTimeout(function () { //FireFox seems to require a setTimeout for this to work. - var a = document.createElement('a'); - a.href = window.URL.createObjectURL(new Blob([imgData], { type: 'text/json' })); - a.download = 'whiteboard.json'; - w.document.body.appendChild(a); - a.click(); - w.document.body.removeChild(a); - setTimeout(function () { w.close(); }, 100); - }, 0); - }); - - $("#uploadWebDavBtn").click(function () { - if ($(".webdavUploadBtn").length > 0) { - return; } - var webdavserver = localStorage.getItem('webdavserver') || "" - var webdavpath = localStorage.getItem('webdavpath') || "/" - var webdavusername = localStorage.getItem('webdavusername') || "" - var webdavpassword = localStorage.getItem('webdavpassword') || "" - var webDavHtml = $('
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
Server URL:
Path:path always have to start & end with "/"
Username:
Password:
Note: You have to generate and use app credentials if you have 2 Factor Auth activated on your dav/nextcloud server!
' + - '
'); - webDavHtml.find(".webdavUploadBtn").click(function () { - var webdavserver = webDavHtml.find(".webdavserver").val(); - localStorage.setItem('webdavserver', webdavserver); - var webdavpath = webDavHtml.find(".webdavpath").val(); - localStorage.setItem('webdavpath', webdavpath); - var webdavusername = webDavHtml.find(".webdavusername").val(); - localStorage.setItem('webdavusername', webdavusername); - var webdavpassword = webDavHtml.find(".webdavpassword").val(); - localStorage.setItem('webdavpassword', webdavpassword); - var base64data = whiteboard.getImageDataBase64(); - var webdavaccess = { - webdavserver: webdavserver, - webdavpath: webdavpath, - webdavusername: webdavusername, - webdavpassword: webdavpassword + // whiteboard clear button + $("#whiteboardTrashBtn").click(function () { + $("#whiteboardTrashBtnConfirm").show().focus(); + $(this).css({ visibility: "hidden" }); + }); + + $("#whiteboardTrashBtnConfirm").mouseout(function () { + $(this).hide(); + $("#whiteboardTrashBtn").css({ visibility: "inherit" }); + }); + + $("#whiteboardTrashBtnConfirm").click(function () { + $(this).hide(); + $("#whiteboardTrashBtn").css({ visibility: "inherit" }); + whiteboard.clearWhiteboard(); + }); + + // undo button + $("#whiteboardUndoBtn").click(function () { + whiteboard.undoWhiteboardClick(); + }); + + // redo button + $("#whiteboardRedoBtn").click(function () { + whiteboard.redoWhiteboardClick(); + }); + + // switch tool + $(".whiteboardTool").click(function () { + $(".whiteboardTool").removeClass("active"); + $(this).addClass("active"); + var activeTool = $(this).attr("tool"); + whiteboard.setTool(activeTool); + if (activeTool == "mouse" || activeTool == "recSelect") { + $(".activeToolIcon").empty(); + } else { + $(".activeToolIcon").html($(this).html()); //Set Active icon the same as the button icon } - webDavHtml.find(".loadingWebdavText").show(); - webDavHtml.find(".webdavUploadBtn").hide(); - saveWhiteboardToWebdav(base64data, webdavaccess, function (err) { - if (err) { - webDavHtml.find(".loadingWebdavText").hide(); - webDavHtml.find(".webdavUploadBtn").show(); - } else { - webDavHtml.parents(".basicalert").remove(); - } - }); - }) - showBasicAlert(webDavHtml, { - header: "Save to Webdav", - okBtnText: "cancel", - headercolor: "#0082c9" - }) - }); + }); - // upload json containing steps - $("#uploadJsonBtn").click(function () { - $("#myFile").click(); - }); + // upload image button + $("#addImgToCanvasBtn").click(function () { + showBasicAlert("Please drag the image into the browser."); + }); - $("#shareWhiteboardBtn").click(function () { - var url = window.location.href; - var s = url.indexOf("&username=") !== -1 ? "&username=" : "username="; //Remove username from url - var urlSlpit = url.split(s); - var urlStart = urlSlpit[0]; - if (urlSlpit.length > 1) { - var endSplit = urlSlpit[1].split("&"); - endSplit = endSplit.splice(1, 1); - urlStart += "&" + endSplit.join("&"); - } - $("