{"version":3,"sources":["webpack:///./src/components/MaterialsV2/CollabText/YTMFormula/YTMFormula.vue","webpack:///./src/components/MaterialsV2/CollabText/YTMFormula/YTMFormula.vue?fe4e","webpack:///./src/components/MaterialsV2/CollabText/YTMFormula/YTMFormula.js","webpack:///./src/components/MaterialsV2/CollabText/CollabEditor.vue","webpack:///./src/components/MaterialsV2/CollabText/CollabEditor.vue?5c27","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/selecting.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/drawing.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/modes.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/erasing.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/objects_storage/objects_storage.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/settings/settings.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/objects_storage/util.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/websocket/handlers.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/websocket/senders.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/line.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/rectangle.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/circle.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/operations/undo_redo.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/operations/remove_selected.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/operations/copy_paste.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/cursors/cursors.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/image.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/modes/text.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/context_menu/context_menu.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/instruments/common_settings.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/context_menu/stroke.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/context_menu/fill.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/context_menu/text.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/context_menu/locking.js","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/canvas.js","webpack:///./src/components/MaterialsV2/CollabCode/CollabCode.vue","webpack:///./src/components/MaterialsV2/CollabCode/CollabCode.vue?3b6f","webpack:///./src/components/MaterialsV2/CollabText/MenuBar.vue","webpack:///./src/components/MaterialsV2/CollabText/MenuBar.vue?103e","webpack:///./src/components/MaterialsV2/CollabText/MenuItem.vue","webpack:///./src/components/MaterialsV2/CollabText/MenuItem.vue?988c","webpack:///./src/components/MaterialsV2/BoardCellV3/BoardCell.vue","webpack:///./src/components/MaterialsV2/BoardCellV3/BoardCell.vue?a269","webpack:///./src/components/MaterialsV2/BoardCellV2/canvas/const.js","webpack:///./src/components/MaterialsV2/BoardsManager/boards_manager.js","webpack:///./src/components/MaterialsV2/CollabCode/CollabCode.vue?ee78","webpack:///./src/components/MaterialsV2/CollabText/MenuItem.vue?45a3","webpack:///./src/components/MaterialsV2/CollabText/YTMFormula/YTMFormula.vue?2acd","webpack:///./src/components/MaterialsV2/CollabText/MenuBar.vue?bec7","webpack:///./src/components/MaterialsV2/CollabText/CollabEditor.vue?29a4"],"names":["style","class","formula","id","virtual-keyboard-mode","fromKeyboard","showPreview","update","ref","setEditable","name","components","TextArea","NodeViewWrapper","props","editable","remixiconUrl","watch","new_val","this","$nextTick","save","methods","ev","target","value","mf","document","getElementById","setValue","suppressChangeNotifications","$refs","mfro","setOptions","readOnly","updateAttributes","editor","isEditable","node","attrs","__exports__","render","create","group","inline","selectable","type","String","default","tag","HTMLAttributes","YTMFormula","MenuBar","EditorContent","material","Object","required","Boolean","emit","ydoc","newValue","focus","extensions","configure","onReadOnlyChecked","checked","fragment","getXmlFragment","placeholder","onCreate","onFocus","onBlur","deleteContent","commands","clearContent","destroy","startSelecting","commonSettings","mode","stopPreviousMode","fabricCanvas","defaultCursor","hoverCursor","selection","makeObjectsSelectable","on","stopSelecting","nextChosen","__eventListeners","pop","startDrawing","isDrawingMode","freeDrawingBrush","width","getBrushWidth","color","getColor","decimate","Math","min","evt","registerObjectOnBoard","path","sendObjectAddition","stopDrawing","stopErasing","stopLine","stopRectangle","stopCircle","stopText","startErasing","e","hasOwnProperty","prevEraser","x","y","self","undefined","curPos","performErase","performEraseOnPoint","curMouse","round","pointer","erasing","makeObjectsUnselectable","from","to","dx","dy","steps","ceil","sqrt","stepX","stepY","i","object","values","objectsByUUID","isTargetTransparent","sendObjectDeletion","uuid","removeObject","setObjectsStorage","objectsJSON","addObjects","objects","Promise","resolve","reject","fabric","util","enlivenObjects","obj","denormalizeObject","add","requestRenderAll","extendToObjectMethod","set","noScaleCache","setLockStatus","locked","JSON","stringify","activeObjectsUUIDs","getActiveObjects","map","discardActiveObject","remove","activeObjects","filter","length","setActiveObject","ActiveSelection","canvas","forEachObject","is_cursor","makeObjectsUndraggable","lockMovementX","lockMovementY","draggable","makeObjectsDraggable","makeObjectsUnscaleable","lockUniScaling","setControlsVisibility","mt","mb","ml","mr","tl","tr","bl","br","mtr","scaleable","makeObjectsScaleable","normalizeObject","new_object","clone","top","left","scaleX","scaleY","normalizeManyObjects","result","push","toObject","extend","call","getObjectsFromTarget","targetObjects","getObjects","objs","o","handleObjectAddition","data","handleObjectTransform","objectOnBoard","objId","indexOf","insertAt","handleObjectDeletion","uuids","handleMouseMove","username","usersOnBoard","makeCursor","getRandomColor","renderCursors","registerObjectAdditionSender","sender","objectAdditionSender","registerObjectTransformSender","objectTransformSender","registerObjectDeletionSender","objectDeletionSender","registerMouseMoveSender","mouseMoveSender","isNewAction","history","newAction","payload","sendObjectTransform","transformations","sendMouseMove","drawLine","line","Line","fill","stroke","strokeWidth","curLineId","drawingLine","x2","y2","setCoords","finishDrawLine","x1","y1","startLine","scalingNow","rotatingNow","shiftKey","scaleLine","height","drawRectangle","rect","Rect","start_x","start_y","curRectId","drawingRectangle","abs","finishDrawRectangle","startRectangle","scaleRectangle","drawCircle","circle","Ellipse","rx","ry","curCircleId","drawingCircle","new_rx","new_ry","finishDrawCircle","startCircle","scaleCircle","performUndo","action","goBackwards","undoAddition","undoTransform","undoDeletion","performRedo","goForward","redoAddition","redoTransform","redoDeletion","parse","forEach","_","entries","deleteActiveObjects","getActiveObject","copyActiveObjects","Group","blob","Blob","groupToInsert","item","ClipboardItem","navigator","clipboard","write","then","catch","err","console","error","pasteObjects","read","types","includes","getType","text","keys","groups","prevMouse","Circle","radius","IText","fontSize","fontFamily","fontWeight","cornerSize","cursor","removeCursor","target_username","vpt","viewportTransform","right","bottom","renderCursor","scale","animate","new_left","max","new_top","onChange","renderAll","bind","duration","moveTo","colors","floor","random","addImageByURL","url","Image","fromURL","img","heightCoef","widthCoef","scaleToHeight","scaleToWidth","startText","evented","absolutePointer","selectionStart","selectionEnd","enterEditing","hiddenTextarea","hasControls","hasBorders","setContextMenu","contextMenuSettings","component","show","selectionParams","shouldShow","lockState","button","findTarget","dealWithSelection","getStrokeOfSelected","getFillOfSelected","getTextSettingsOfSelected","getLockedOfSelected","bound","getBoundingRect","showContextMenuAtPosition","offsetWidth","offsetHeight","hideContextMenu","setContextMenuComponent","contextMenu","hideContextMenuByClickOutside","classList","contains","setDefaultCommonSettings","brushWidth","setColor","newColor","changeBrushWidth","delta","idx","setStrokeColorToSelected","fire","setFillColorToSelected","textSettings","setLockedToSelected","boardId","cellId","Canvas","backgroundColor","renderOnAddRemove","objectCaching","targetFindTolerance","preserveObjectStacking","fireRightClick","stopContextMenu","opt","lastSent","triggerSendMouseMove","setInterval","clearInterval","prototype","onObjectAddition","onObjectTransform","onObjectDeletion","onMouseMove","code","options","cmOptions","border","onLangChange","Codemirror","computed","$store","getters","isProviderReady","old_val","binding","makeBinding","areMaterialsActive","newVal","cminstance","setOption","lineNumbers","smartIndent","indentUnit","foldGutter","styleActiveLine","autoCloseBrackets","ytext","yUndoManager","dispatch","a","put","lang","headers","params","getText","trackedOrigins","Set","$emit","awareness","setLocalStateField","new_material","undo","redo","clearHistory","setEditor","items","index","key","MenuItem","icon","title","chain","toggleBold","run","isActive","toggleItalic","toggleStrike","toggleCode","setLink","unsetLink","toggleHeading","level","setParagraph","toggleBulletList","toggleOrderedList","toggleTaskList","insertContent","previousUrl","getAttributes","href","window","prompt","extendMarkRange","xlink:href","Function","roomId","active","ar","collaboration","sendNewAR","Board","Array","newAR","fId","board","updateMaterial","MODE_SELECTING","MODE_DRAWING","MODE_ERASING","MODE_LINE","MODE_RECTANGLE","MODE_CIRCLE","MODE_TEXT","MODE_IMAGE","BoardsManager","board_id","store","cells","cell_by_user","objects_by_cell","get","resp","cId","content","board_fetched","t","split","localStorage","getItem","old_cellId","cell"],"mappings":"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","file":"js/group-lesson~11213f5a.477d9d69.js","sourcesContent":["\n\n\n\n","import { render } from \"./YTMFormula.vue?vue&type=template&id=4493c835&scoped=true\"\nimport script from \"./YTMFormula.vue?vue&type=script&lang=js\"\nexport * from \"./YTMFormula.vue?vue&type=script&lang=js\"\n\nimport \"./YTMFormula.vue?vue&type=style&index=0&id=4493c835&scoped=true&lang=css\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4493c835\"]])\n\nexport default __exports__","import {mergeAttributes, Node, VueNodeViewRenderer} from \"@tiptap/vue-3\";\nimport YTMFormula from \"@/components/MaterialsV2/CollabText/YTMFormula/YTMFormula.vue\";\n\nexport default Node.create({\n name: 'YTMFormula',\n group: 'inline',\n inline: true,\n selectable: false,\n addAttributes() {\n return {\n formula: {\n type: String,\n default: 'a^2+b^2=c^2',\n },\n };\n },\n parseHTML() {\n return [{ tag: 'Formula' }];\n },\n renderHTML({ HTMLAttributes }) {\n return ['Formula', mergeAttributes(HTMLAttributes)];\n },\n addNodeView() {\n return VueNodeViewRenderer(YTMFormula);\n },\n});\n","\n\n\n\n","import { render } from \"./CollabEditor.vue?vue&type=template&id=8b69f3f4\"\nimport script from \"./CollabEditor.vue?vue&type=script&lang=js\"\nexport * from \"./CollabEditor.vue?vue&type=script&lang=js\"\n\nimport \"./CollabEditor.vue?vue&type=style&index=0&id=8b69f3f4&lang=css\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import {MODE_SELECTING} from \"@/components/MaterialsV2/BoardCellV2/canvas/const\";\n\nexport function startSelecting() {\n if (this.commonSettings.mode) {\n this.stopPreviousMode();\n }\n this.commonSettings.mode = MODE_SELECTING;\n this.fabricCanvas.defaultCursor = 'default';\n this.fabricCanvas.hoverCursor = 'pointer';\n this.fabricCanvas.selection = true;\n this.makeObjectsSelectable();\n this.fabricCanvas.on('mouse:down', () => { this.fabricCanvas.defaultCursor = 'default'; });\n}\n\nexport function stopSelecting(nextChosen = false) {\n this.fabricCanvas.selection = false;\n this.fabricCanvas.__eventListeners['mouse:down'].pop();\n this.commonSettings.mode = null;\n if (!nextChosen) {\n this.startSelecting();\n }\n}\n","import {MODE_DRAWING} from \"@/components/MaterialsV2/BoardCellV2/canvas/const\";\n\nexport function startDrawing() {\n if (this.commonSettings.mode) {\n this.stopPreviousMode();\n }\n this.commonSettings.mode = MODE_DRAWING;\n this.fabricCanvas.isDrawingMode = true;\n this.fabricCanvas.freeDrawingBrush.width = this.getBrushWidth();\n this.fabricCanvas.freeDrawingBrush.color = this.getColor();\n this.fabricCanvas.freeDrawingBrush.decimate = Math.min(3, 2.25 * this.getBrushWidth());\n this.fabricCanvas.on('path:created', (evt) => {\n this.registerObjectOnBoard(evt.path);\n this.sendObjectAddition(evt.path);\n });\n}\n\nexport function stopDrawing(nextChosen = false) {\n this.fabricCanvas.isDrawingMode = false;\n this.fabricCanvas.__eventListeners['path:created'].pop();\n this.commonSettings.mode = null;\n if (!nextChosen) {\n this.startSelecting();\n }\n}\n","import {\n MODE_CIRCLE,\n MODE_DRAWING,\n MODE_ERASING,\n MODE_LINE,\n MODE_RECTANGLE,\n MODE_SELECTING,\n MODE_TEXT\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/const\";\n\nexport function stopPreviousMode() {\n switch (this.commonSettings.mode) {\n case MODE_SELECTING:\n this.stopSelecting(true);\n break;\n case MODE_DRAWING:\n this.stopDrawing(true);\n break;\n case MODE_ERASING:\n this.stopErasing(true);\n break;\n case MODE_LINE:\n this.stopLine(true);\n break;\n case MODE_RECTANGLE:\n this.stopRectangle(true);\n break;\n case MODE_CIRCLE:\n this.stopCircle(true);\n break;\n case MODE_TEXT:\n this.stopText(true);\n break;\n }\n}\n","import {isMobile} from \"@/util/is-mobile\";\nimport {MODE_ERASING} from \"@/components/MaterialsV2/BoardCellV2/canvas/const\";\n\nexport function startErasing() {\n if (this.commonSettings.mode) {\n this.stopPreviousMode();\n }\n this.commonSettings.mode = MODE_ERASING;\n this.fabricCanvas.defaultCursor = 'crosshair';\n this.fabricCanvas.hoverCursor = 'crosshair';\n this.fabricCanvas.selection = false;\n if (!isMobile()) {\n this.fabricCanvas.on('mouse:down', (evt) => {\n let curMouse = {\n x: Math.round(evt.pointer.x),\n y: Math.round(evt.pointer.y),\n };\n this.erasing = true;\n this.performEraseOnPoint(curMouse.x, curMouse.y);\n this.prevEraser.x = curMouse.x;\n this.prevEraser.y = curMouse.y;\n });\n this.fabricCanvas.on('mouse:move', (evt) => {\n let curMouse = {\n x: Math.round(evt.pointer.x),\n y: Math.round(evt.pointer.y),\n };\n if (curMouse.x === this.prevEraser.x && curMouse.y === this.prevEraser.y) {\n return;\n }\n if (this.erasing) {\n this.performErase(this.prevEraser, curMouse);\n }\n this.prevEraser.x = curMouse.x;\n this.prevEraser.y = curMouse.y;\n });\n this.fabricCanvas.on('mouse:up', (evt) => {\n this.erasing = false;\n });\n } else {\n this.fabricCanvas.on('touch:drag', evt => {\n if (evt.e.hasOwnProperty('changedTouches')) {\n this.prevEraser.x = null;\n this.prevEraser.y = null;\n } else if (evt.self && evt.self.x !== undefined && evt.self.y !== undefined) {\n let curPos = {\n x: evt.self.x,\n y: evt.self.y,\n }\n if (curPos.x === this.prevEraser.x && curPos.y === this.prevEraser.y) {\n return;\n }\n if (this.prevEraser.x !== null) {\n this.performErase(this.prevEraser, curPos);\n } else {\n this.performEraseOnPoint(curPos);\n }\n this.prevEraser.x = curPos.x;\n this.prevEraser.y = curPos.y;\n }\n });\n }\n this.makeObjectsUnselectable();\n}\n\nexport function stopErasing(nextChosen = false) {\n this.fabricCanvas.defaultCursor = 'default';\n this.fabricCanvas.hoverCursor = 'default';\n if (!isMobile()) {\n this.fabricCanvas.__eventListeners['mouse:down'].pop();\n this.fabricCanvas.__eventListeners['mouse:move'].pop();\n this.fabricCanvas.__eventListeners['mouse:up'].pop();\n } else {\n this.fabricCanvas.__eventListeners['touch:drag'].pop();\n }\n this.makeObjectsSelectable();\n this.commonSettings.mode = null;\n if (!nextChosen) {\n this.startSelecting();\n }\n}\n\nexport function performErase(from, to) {\n let dx = to.x - from.x;\n let dy = to.y - from.y;\n let steps = Math.ceil(Math.sqrt(dx * dx + dy * dy) / 3);\n let stepX = dx / steps;\n let stepY = dy / steps;\n for (let i = 1; i < steps; i++) {\n this.performEraseOnPoint(from.x + i * stepX, from.y + i * stepY);\n }\n this.performEraseOnPoint(to.x, to.y);\n}\n\nexport function performEraseOnPoint(x, y) {\n for (let object of Object.values(this.objectsByUUID)) {\n if (object.type !== 'image' && !this.fabricCanvas.isTargetTransparent(object, x, y)) {\n this.sendObjectDeletion([object.uuid]);\n this.removeObject(object.uuid);\n }\n }\n}\n","import {fabric} from \"fabric\";\nimport {v4 as uuidv4} from \"uuid\";\n\nexport function setObjectsStorage() {\n this.objectsByUUID = {};\n this.objectsJSON = {};\n}\n\nexport function addObjects(objects) {\n return new Promise((resolve, reject) => {\n fabric.util.enlivenObjects(objects, (objects) => {\n for (let obj of objects) {\n if (this.objectsByUUID.hasOwnProperty(obj.uuid)) {\n continue;\n }\n obj = this.denormalizeObject(obj);\n this.registerObjectOnBoard(obj);\n this.fabricCanvas.add(obj);\n }\n this.fabricCanvas.requestRenderAll();\n resolve();\n });\n });\n}\n\nexport function registerObjectOnBoard(object) {\n this.extendToObjectMethod(object);\n if (!object.uuid) {\n object.set({uuid: uuidv4()});\n }\n object.set({\n selectable: this.selectable,\n noScaleCache: false,\n });\n this.setLockStatus(object, !!object.locked);\n this.objectsByUUID[object.uuid] = object;\n this.objectsJSON[object.uuid] = JSON.stringify(object);\n}\n\nexport function removeObject(uuid) {\n if (!this.objectsByUUID.hasOwnProperty(uuid)) {\n return;\n }\n const activeObjectsUUIDs = this.fabricCanvas.getActiveObjects().map(obj => obj.uuid);\n this.fabricCanvas.discardActiveObject();\n this.fabricCanvas.remove(this.objectsByUUID[uuid]);\n delete this.objectsByUUID[uuid];\n delete this.objectsJSON[uuid];\n const activeObjects = activeObjectsUUIDs.map(uuid => this.objectsByUUID[uuid]).filter(obj => !!obj);\n if (activeObjects.length !== 0) {\n this.fabricCanvas.setActiveObject(new fabric.ActiveSelection(activeObjects, {canvas: this.fabricCanvas}));\n }\n this.fabricCanvas.requestRenderAll();\n}\n","export function makeObjectsUnselectable() {\n this.fabricCanvas.forEachObject(object => {\n object.selectable = false;\n });\n this.selectable = false;\n}\n\nexport function makeObjectsSelectable() {\n this.fabricCanvas.forEachObject(object => {\n if (!object.is_cursor) {\n object.selectable = true;\n }\n });\n this.selectable = true;\n}\n\nexport function makeObjectsUndraggable() {\n this.fabricCanvas.forEachObject((object) => {\n object.lockMovementX = true;\n object.lockMovementY = true;\n });\n this.draggable = false;\n}\n\nexport function makeObjectsDraggable() {\n this.fabricCanvas.forEachObject((object) => {\n if (!object.is_cursor && !object.locked) {\n object.lockMovementX = false;\n object.lockMovementY = false;\n }\n });\n this.draggable = true;\n}\n\nexport function makeObjectsUnscaleable() {\n this.fabricCanvas.forEachObject((object) => {\n object.lockUniScaling = true;\n object.setControlsVisibility({\n mt: false, mb: false, ml: false, mr: false,\n tl: false, tr: false, bl: false, br: false,\n mtr: false,\n });\n });\n this.scaleable = false;\n}\n\nexport function makeObjectsScaleable() {\n this.fabricCanvas.forEachObject((object) => {\n if (!object.is_cursor && !object.locked) {\n object.lockUniScaling = false;\n object.setControlsVisibility({\n mt: true, mb: true, ml: true, mr: true,\n tl: true, tr: true, bl: true, br: true,\n mtr: true,\n });\n }\n });\n this.scaleable = true;\n}\n","import {fabric} from \"fabric\";\n\nexport function normalizeObject(object) {\n let new_object = fabric.util.object.clone(object);\n new_object.set({\n top: object.top / this.fabricCanvas.width,\n left: object.left / this.fabricCanvas.width,\n scaleX: object.scaleX / this.fabricCanvas.width,\n scaleY: object.scaleY / this.fabricCanvas.width,\n });\n this.extendToObjectMethod(new_object);\n return new_object;\n}\n\nexport function normalizeManyObjects(objects) {\n let result = [];\n for (const object of objects) {\n result.push(this.normalizeObject(object));\n }\n return result;\n}\n\nexport function denormalizeObject(object) {\n let new_object = object;\n new_object.set({\n top: object.top * this.fabricCanvas.width,\n left: object.left * this.fabricCanvas.width,\n scaleX: object.scaleX * this.fabricCanvas.width,\n scaleY: object.scaleY * this.fabricCanvas.width,\n });\n return new_object;\n}\n\nexport function extendToObjectMethod(object) {\n object.toObject = (function(toObject) {\n return function() {\n return fabric.util.object.extend(toObject.call(this), {\n uuid: this.uuid,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n top: this.top,\n left: this.left,\n locked: this.locked,\n });\n };\n })(object.toObject);\n}\n\n// returns an array of copies of the objects in the target\nexport function getObjectsFromTarget(target) {\n if (!target) {\n return [];\n }\n if (target.uuid) {\n return [fabric.util.object.clone(this.objectsByUUID[target.uuid])];\n }\n const targetObjects = target.getObjects();\n this.fabricCanvas.discardActiveObject();\n const objs = targetObjects.map(o => fabric.util.object.clone(this.objectsByUUID[o.uuid]));\n this.fabricCanvas.setActiveObject(new fabric.ActiveSelection(targetObjects, { canvas: this.fabricCanvas }));\n return objs;\n}\n","import {fabric} from \"fabric\";\n\nexport function handleObjectAddition(data) {\n this.addObjects([data.object]);\n}\n\nexport function handleObjectTransform(data) {\n fabric.util.enlivenObjects(data.objects, objects => {\n const activeObjectsUUIDs = this.fabricCanvas.getActiveObjects().map(obj => obj.uuid);\n this.fabricCanvas.discardActiveObject();\n for (let obj of objects) {\n const objectOnBoard = this.objectsByUUID[obj.uuid];\n if (!objectOnBoard) {\n this.registerObjectOnBoard(obj);\n this.fabricCanvas.add(obj);\n continue;\n }\n obj = this.denormalizeObject(obj);\n const objId = this.fabricCanvas.getObjects().indexOf(objectOnBoard);\n this.fabricCanvas.remove(objectOnBoard)\n this.fabricCanvas.insertAt(obj, objId);\n this.registerObjectOnBoard(obj);\n }\n const activeObjects = activeObjectsUUIDs.map(uuid => this.objectsByUUID[uuid]).filter(obj => !!obj);\n if (activeObjects.length !== 0) {\n this.fabricCanvas.setActiveObject(new fabric.ActiveSelection(activeObjects, {canvas: this.fabricCanvas}));\n }\n this.fabricCanvas.requestRenderAll();\n });\n}\n\nexport function handleObjectDeletion(data) {\n for (const uuid of data.uuids) {\n this.removeObject(uuid);\n }\n}\n\nexport function handleMouseMove(data) {\n const username = data.username;\n if (!this.usersOnBoard.hasOwnProperty(username)) {\n this.makeCursor(this.getRandomColor(), username);\n }\n this.usersOnBoard[username].x = data.x * this.fabricCanvas.width;\n this.usersOnBoard[username].y = data.y * this.fabricCanvas.width;\n this.renderCursors(username);\n}\n","export function registerObjectAdditionSender(sender) {\n this.objectAdditionSender = sender;\n}\n\nexport function registerObjectTransformSender(sender) {\n this.objectTransformSender = sender;\n}\n\nexport function registerObjectDeletionSender(sender) {\n this.objectDeletionSender = sender;\n}\n\nexport function registerMouseMoveSender(sender) {\n this.mouseMoveSender = sender;\n}\n\nexport function sendObjectAddition(object, isNewAction = true) {\n if (isNewAction) {\n this.history.newAction({\n type: 'addition',\n payload: JSON.stringify(object),\n });\n }\n if (this.objectAdditionSender) {\n this.objectAdditionSender(this.normalizeObject(object));\n }\n}\n\nexport function sendObjectTransform(objects, isNewAction = true) {\n if (isNewAction) {\n let transformations = [];\n for (let object of objects) {\n transformations.push([this.objectsJSON[object.uuid], JSON.stringify(object)]);\n this.objectsJSON[object.uuid] = JSON.stringify(object);\n }\n this.history.newAction({\n type: 'transform',\n payload: transformations,\n });\n }\n if (this.objectTransformSender) {\n this.objectTransformSender(this.normalizeManyObjects(objects));\n }\n}\n\nexport function sendObjectDeletion(uuids, isNewAction = true) {\n if (isNewAction) {\n let objects = [];\n for (let uuid of uuids) {\n objects.push(this.objectsJSON[uuid]);\n }\n this.history.newAction({\n type: 'deletion',\n payload: objects,\n });\n }\n if (this.objectDeletionSender) {\n this.objectDeletionSender(uuids);\n }\n}\n\nexport function sendMouseMove(x, y) {\n if (this.mouseMoveSender) {\n this.mouseMoveSender(x / this.fabricCanvas.width, y / this.fabricCanvas.width);\n }\n}\n","import {fabric} from \"fabric\";\nimport {isMobile} from \"@/util/is-mobile\";\nimport {MODE_LINE} from \"@/components/MaterialsV2/BoardCellV2/canvas/const\";\n\nexport function drawLine(x, y) {\n this.makeObjectsUndraggable();\n let line = new fabric.Line([x, y, x, y], {\n fill: this.getColor(),\n stroke: this.getColor(),\n strokeWidth: this.getBrushWidth(),\n noScaleCache: false,\n });\n this.fabricCanvas.add(line);\n this.registerObjectOnBoard(line);\n this.curLineId = line.uuid;\n}\n\nexport function drawingLine(line, x, y) {\n if (line.x2 === x && line.y2 === y) {\n return;\n }\n line.set({x2: x, y2: y});\n line.setCoords();\n this.fabricCanvas.requestRenderAll();\n}\n\nexport function finishDrawLine() {\n if (!this.curLineId) {\n return;\n }\n const line = this.objectsByUUID[this.curLineId];\n if (line.x1 !== line.x2 || line.y1 !== line.y2) {\n this.fabricCanvas.setActiveObject(line);\n this.sendObjectAddition(line);\n } else {\n this.fabricCanvas.remove(line);\n }\n this.fabricCanvas.requestRenderAll();\n this.curLineId = null;\n this.makeObjectsDraggable();\n}\n\nexport function startLine() {\n if (this.commonSettings.mode) {\n this.stopPreviousMode();\n }\n this.commonSettings.mode = MODE_LINE;\n this.fabricCanvas.defaultCursor = this.fabricCanvas.hoverCursor = 'crosshair';\n if (!isMobile()) {\n this.fabricCanvas.on('mouse:down', evt => { this.drawLine(evt.pointer.x, evt.pointer.y) });\n this.fabricCanvas.on('mouse:move', evt => {\n if (this.scalingNow || this.rotatingNow) {\n this.finishDrawLine();\n return;\n }\n if (this.curLineId) {\n const line = this.objectsByUUID[this.curLineId];\n this.drawingLine(line, evt.pointer.x, evt.pointer.y, evt.e.shiftKey);\n }\n });\n this.fabricCanvas.on('mouse:up', () => { this.finishDrawLine() });\n } else {\n this.fabricCanvas.on('touch:drag', (evt) => {\n if (this.scalingNow || this.rotatingNow) {\n this.finishDrawLine();\n return;\n }\n if (evt.e.hasOwnProperty('changedTouches')) {\n this.finishDrawLine();\n } else if (evt.self.x !== undefined && evt.self.y !== undefined) {\n if (!this.curLineId) {\n this.drawLine(evt.self.x, evt.self.y);\n }\n const line = this.objectsByUUID[this.curLineId];\n this.drawingLine(line, evt.self.x, evt.self.y);\n }\n });\n }\n}\n\nexport function stopLine(nextChosen = false) {\n this.fabricCanvas.defaultCursor = this.fabricCanvas.hoverCursor = 'default';\n if (!isMobile()) {\n this.fabricCanvas.__eventListeners['mouse:down'].pop();\n this.fabricCanvas.__eventListeners['mouse:move'].pop();\n this.fabricCanvas.__eventListeners['mouse:up'].pop();\n } else {\n this.fabricCanvas.__eventListeners['touch:drag'].pop();\n }\n this.commonSettings.mode = null;\n if (!nextChosen) {\n this.startSelecting();\n }\n}\n\nexport function scaleLine(line) {\n line.set({\n width: line.width * line.scaleX,\n height: line.height * line.scaleY,\n scaleX: 1,\n scaleY: 1,\n });\n}\n","import {fabric} from \"fabric\";\nimport {isMobile} from \"@/util/is-mobile\";\nimport {MODE_RECTANGLE} from \"@/components/MaterialsV2/BoardCellV2/canvas/const\";\n\nexport function drawRectangle(x, y) {\n this.makeObjectsUndraggable();\n let rect = new fabric.Rect({\n left: x,\n top: y,\n start_x: x,\n start_y: y,\n width: this.getBrushWidth(),\n height: this.getBrushWidth(),\n fill: 'transparent',\n stroke: this.getColor(),\n strokeWidth: this.getBrushWidth(),\n noScaleCache: false,\n });\n this.fabricCanvas.add(rect);\n this.registerObjectOnBoard(rect);\n this.curRectId = rect.uuid;\n}\n\nexport function drawingRectangle(rect, x, y, shiftKey = false) {\n let width = Math.abs(x - rect.start_x);\n let height = Math.abs(y - rect.start_y);\n if (shiftKey) {\n width = height = Math.min(width, height);\n }\n rect.set({\n left: Math.min(x, rect.start_x),\n top: Math.min(y, rect.start_y),\n width: width,\n height: height,\n });\n rect.setCoords();\n this.fabricCanvas.requestRenderAll();\n}\n\nexport function finishDrawRectangle() {\n if (!this.curRectId) {\n return;\n }\n const rect = this.objectsByUUID[this.curRectId];\n if (rect.width > this.getBrushWidth() + 0.001 || rect.height > this.getBrushWidth() + 0.001) {\n this.fabricCanvas.setActiveObject(rect);\n this.sendObjectAddition(rect);\n } else {\n this.fabricCanvas.remove(rect);\n }\n this.fabricCanvas.requestRenderAll();\n this.curRectId = null;\n this.makeObjectsDraggable();\n}\n\nexport function startRectangle() {\n if (this.commonSettings.mode) {\n this.stopPreviousMode();\n }\n this.commonSettings.mode = MODE_RECTANGLE;\n this.fabricCanvas.defaultCursor = this.fabricCanvas.hoverCursor = 'crosshair';\n if (!isMobile()) {\n this.fabricCanvas.on('mouse:down', evt => { this.drawRectangle(evt.pointer.x, evt.pointer.y) });\n this.fabricCanvas.on('mouse:move', evt => {\n if (this.scalingNow || this.rotatingNow) {\n this.finishDrawRectangle();\n return;\n }\n if (this.curRectId) {\n const rect = this.objectsByUUID[this.curRectId];\n this.drawingRectangle(rect, evt.pointer.x, evt.pointer.y, evt.e.shiftKey);\n }\n });\n this.fabricCanvas.on('mouse:up', () => { this.finishDrawRectangle() });\n } else {\n this.fabricCanvas.on('touch:drag', evt => {\n if (this.scalingNow || this.rotatingNow) {\n this.finishDrawRectangle();\n return;\n }\n if (evt.e.hasOwnProperty('changedTouches')) {\n this.finishDrawRectangle();\n } else if (evt.self.x !== undefined && evt.self.y !== undefined) {\n if (!this.curRectId) {\n this.drawRectangle(evt.self.x, evt.self.y);\n }\n let rect = this.objectsByUUID[this.curRectId];\n this.drawingRectangle(rect, evt.self.x, evt.self.y);\n }\n });\n }\n}\n\nexport function stopRectangle(nextChosen = false) {\n this.fabricCanvas.defaultCursor = this.fabricCanvas.hoverCursor = 'default';\n if (!isMobile()) {\n this.fabricCanvas.__eventListeners['mouse:down'].pop();\n this.fabricCanvas.__eventListeners['mouse:move'].pop();\n this.fabricCanvas.__eventListeners['mouse:up'].pop();\n } else {\n this.fabricCanvas.__eventListeners['touch:drag'].pop();\n }\n this.commonSettings.mode = null;\n if (!nextChosen) {\n this.startSelecting();\n }\n}\n\nexport function scaleRectangle(rect) {\n rect.set({\n width: rect.width * rect.scaleX,\n height: rect.height * rect.scaleY,\n scaleX: 1,\n scaleY: 1,\n });\n}\n","import {fabric} from \"fabric\";\nimport {isMobile} from \"@/util/is-mobile\";\nimport {MODE_CIRCLE} from \"@/components/MaterialsV2/BoardCellV2/canvas/const\";\n\nexport function drawCircle(x, y) {\n this.makeObjectsUndraggable();\n let circle = new fabric.Ellipse({\n left: x,\n top: y,\n start_x: x,\n start_y: y,\n rx: this.getBrushWidth(),\n ry: this.getBrushWidth(),\n fill: 'transparent',\n stroke: this.getColor(),\n strokeWidth: this.getBrushWidth(),\n noScaleCache: false,\n });\n this.fabricCanvas.add(circle);\n this.registerObjectOnBoard(circle);\n this.curCircleId = circle.uuid;\n}\n\nexport function drawingCircle(circle, x, y, shiftKey = false) {\n let new_rx = Math.abs(x - circle.start_x) / 2;\n let new_ry = Math.abs(y - circle.start_y) / 2;\n if (shiftKey) {\n new_rx = new_ry = Math.min(new_rx, new_ry);\n }\n circle.set({\n left: Math.min(x, circle.start_x),\n top: Math.min(y, circle.start_y),\n rx: new_rx,\n ry: new_ry,\n });\n circle.setCoords();\n this.fabricCanvas.requestRenderAll();\n}\n\nexport function finishDrawCircle() {\n if (!this.curCircleId) {\n return;\n }\n const circle = this.objectsByUUID[this.curCircleId];\n if (circle.rx > this.getBrushWidth() + 0.001 || circle.ry > this.getBrushWidth() + 0.001) {\n this.fabricCanvas.setActiveObject(circle);\n this.sendObjectAddition(circle);\n } else {\n this.fabricCanvas.remove(circle);\n }\n this.fabricCanvas.requestRenderAll();\n this.curCircleId = null;\n this.makeObjectsDraggable();\n}\n\nexport function startCircle() {\n if (this.commonSettings.mode) {\n this.stopPreviousMode();\n }\n this.commonSettings.mode = MODE_CIRCLE;\n this.fabricCanvas.defaultCursor = this.fabricCanvas.hoverCursor = 'crosshair';\n if (!isMobile()) {\n this.fabricCanvas.on('mouse:down', evt => { this.drawCircle(evt.pointer.x, evt.pointer.y); });\n this.fabricCanvas.on('mouse:move', evt => {\n if (this.scalingNow || this.rotatingNow) {\n this.finishDrawCircle();\n return;\n }\n if (this.curCircleId) {\n const circle = this.objectsByUUID[this.curCircleId];\n this.drawingCircle(circle, evt.pointer.x, evt.pointer.y, evt.e.shiftKey);\n }\n });\n this.fabricCanvas.on('mouse:up', () => { this.finishDrawCircle() });\n } else {\n this.fabricCanvas.on('touch:drag', (evt) => {\n if (this.scalingNow || this.rotatingNow) {\n this.finishDrawCircle();\n return;\n }\n if (evt.e.hasOwnProperty('changedTouches')) {\n this.finishDrawCircle();\n } else if (evt.self.x !== undefined && evt.self.y !== undefined) {\n if (!this.curCircleId) {\n this.drawCircle(evt.self.x, evt.self.y);\n }\n const circle = this.objectsByUUID[this.curCircleId];\n this.drawingCircle(circle, evt.self.x, evt.self.y);\n }\n });\n }\n}\n\nexport function stopCircle(nextChosen = false) {\n this.fabricCanvas.defaultCursor = this.fabricCanvas.hoverCursor = 'default';\n if (!isMobile()) {\n this.fabricCanvas.__eventListeners['mouse:down'].pop();\n this.fabricCanvas.__eventListeners['mouse:move'].pop();\n this.fabricCanvas.__eventListeners['mouse:up'].pop();\n } else {\n this.fabricCanvas.__eventListeners['touch:drag'].pop();\n }\n this.commonSettings.mode = null;\n if (!nextChosen) {\n this.startSelecting();\n }\n}\n\nexport function scaleCircle(circle) {\n circle.set({\n rx: circle.rx * circle.scaleX,\n ry: circle.ry * circle.scaleY,\n scaleX: 1,\n scaleY: 1,\n });\n}\n","import {fabric} from \"fabric\";\n\nexport function performUndo() {\n const action = this.history.goBackwards();\n if (!action) {\n return;\n }\n this.fabricCanvas.discardActiveObject();\n switch (action.type) {\n case 'addition':\n this.undoAddition(action.payload);\n break;\n case 'transform':\n this.undoTransform(action.payload);\n break;\n case 'deletion':\n this.undoDeletion(action.payload);\n break;\n }\n}\n\nexport function performRedo() {\n const action = this.history.goForward();\n if (!action) {\n return;\n }\n this.fabricCanvas.discardActiveObject();\n switch (action.type) {\n case 'addition':\n this.redoAddition(action.payload);\n break;\n case 'transform':\n this.redoTransform(action.payload);\n break;\n case 'deletion':\n this.redoDeletion(action.payload);\n break;\n }\n}\n\nexport function undoAddition(action) {\n let object = JSON.parse(action);\n this.sendObjectDeletion([object.uuid], false);\n}\n\nexport function undoTransform(action) {\n let objects = [];\n for (let object of action) {\n objects.push(JSON.parse(object[0]));\n }\n let result = [];\n fabric.util.enlivenObjects(objects, objects => {\n objects.forEach(obj => {\n this.extendToObjectMethod(obj);\n result.push(obj);\n });\n });\n this.sendObjectTransform(result, false);\n}\n\nexport function undoDeletion(action) {\n let objects = [];\n for (const [_, object] of Object.entries(action)) {\n objects.push(JSON.parse(object));\n }\n fabric.util.enlivenObjects(objects, objects => {\n objects.forEach(obj => {\n this.extendToObjectMethod(obj);\n this.sendObjectAddition(obj, false);\n });\n });\n}\n\nexport function redoAddition(action) {\n let object = JSON.parse(action);\n fabric.util.enlivenObjects([object], objects => {\n objects.forEach(obj => {\n this.extendToObjectMethod(obj);\n this.sendObjectAddition(obj, false);\n });\n })\n}\n\nexport function redoTransform(action) {\n let objects = [];\n for (let object of action) {\n objects.push(JSON.parse(object[1]));\n }\n let result = [];\n fabric.util.enlivenObjects(objects, objects => {\n objects.forEach(obj => {\n this.extendToObjectMethod(obj);\n result.push(obj);\n });\n });\n this.sendObjectTransform(result, false);\n}\n\nexport function redoDeletion(action) {\n let uuids = [];\n for (const [_, object] of Object.entries(action)) {\n uuids.push(JSON.parse(object).uuid);\n }\n this.sendObjectDeletion(uuids, false);\n}\n","export function deleteActiveObjects() {\n let objects = this.getObjectsFromTarget(this.fabricCanvas.getActiveObject());\n let uuids = objects.map(obj => obj.uuid);\n if (uuids.length !== 0) {\n this.sendObjectDeletion(uuids);\n for (let uuid of uuids) {\n this.removeObject(uuid);\n }\n }\n}\n","import {fabric} from \"fabric\";\nimport {v4 as uuidv4} from \"uuid\";\n\nexport function copyActiveObjects() {\n const objects = this.getObjectsFromTarget(this.fabricCanvas.getActiveObject());\n if (objects.length !== 0) {\n const group = this.normalizeObject(new fabric.Group(objects));\n group.set({top: 0, left: 0});\n const blob = new Blob([JSON.stringify({groupToInsert: group})], {type: 'text/plain'});\n const item = new ClipboardItem({'text/plain': blob});\n navigator.clipboard.write([item]).then(() => {}).catch(err => {\n console.error(err);\n });\n }\n}\n\nexport function pasteObjects() {\n navigator.clipboard.read().then(data => {\n for (let i = 0; i < data.length; i++) {\n if (data[i].types.includes('text/plain')) {\n data[i].getType('text/plain').then(blob => {\n blob.text().then(text => {\n try {\n const obj = JSON.parse(text);\n if (Object.keys(obj).length !== 1 || !obj.groupToInsert) {\n return;\n }\n fabric.util.enlivenObjects([obj.groupToInsert], groups => {\n groups.forEach(group => {\n group = this.denormalizeObject(group);\n group.set({\n top: this.prevMouse.y || 0,\n left: this.prevMouse.x || 0,\n });\n const objects = group.getObjects();\n group.destroy(); // ungroup objects\n objects.forEach(object => {\n object.set({uuid: uuidv4()});\n this.registerObjectOnBoard(object);\n this.fabricCanvas.add(object);\n this.sendObjectAddition(object);\n });\n });\n this.fabricCanvas.requestRenderAll();\n });\n } catch (e) {\n console.error(e);\n }\n })\n });\n }\n }\n });\n}\n","import {fabric} from \"fabric\";\n\nexport function makeCursor(color, name) {\n let circle = new fabric.Circle({\n radius: 5,\n fill: color,\n });\n let text = new fabric.IText(name, {\n top: 20,\n left: 10,\n fontSize: 12,\n fontFamily: '-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji',\n fontWeight: 'bold',\n });\n let rect = new fabric.Rect({\n width: text.width * 1.125 + 12,\n height: text.height + 6,\n fill: 'white',\n top: 17,\n left: 4,\n rx: 10,\n ry: 10,\n });\n let group = new fabric.Group([ circle, rect, text ], {\n left: 100,\n top: 100,\n selectable: false,\n cornerSize: 7,\n hoverCursor: 'default',\n });\n group.is_cursor = true;\n this.usersOnBoard[name] = {\n cursor: group,\n };\n this.fabricCanvas.add(group).requestRenderAll();\n}\n\nexport function removeCursor(username) {\n this.fabricCanvas.remove(this.usersOnBoard[username].cursor);\n delete this.usersOnBoard[username];\n this.fabricCanvas.requestRenderAll();\n}\n\nexport function renderCursors(target_username = null) {\n let vpt = this.fabricCanvas.viewportTransform;\n const left = -vpt[4] / vpt[0];\n const right = (-vpt[4] + this.fabricCanvas.width - 30) / vpt[0];\n const top = -vpt[5] / vpt[0];\n const bottom = (-vpt[5] + this.fabricCanvas.height - 40) / vpt[0];\n if (target_username) {\n this.renderCursor(target_username, left, right, top, bottom, 1 / vpt[0], true);\n return;\n }\n for (const username in this.usersOnBoard) {\n this.renderCursor(username, left, right, top, bottom, 1 / vpt[0]);\n }\n}\n\nexport function renderCursor(username, left, right, top, bottom, scale, animate = false) {\n let obj = this.usersOnBoard[username].cursor;\n let new_left = Math.min(Math.max(this.usersOnBoard[username].x, left), right);\n let new_top = Math.min(Math.max(this.usersOnBoard[username].y, top), bottom);\n if (obj.left !== new_left || obj.top !== new_top) {\n if (animate) {\n obj.animate({\n left: new_left,\n top: new_top,\n }, {\n onChange: this.fabricCanvas.renderAll.bind(this.fabricCanvas),\n duration: 100,\n });\n } else {\n obj.set({\n left: new_left,\n top: new_top,\n });\n obj.setCoords();\n }\n }\n if (obj.scaleX !== scale) {\n obj.set({\n scaleX: scale,\n scaleY: scale,\n });\n }\n this.fabricCanvas.moveTo(obj, 100);\n}\n\nconst colors = ['darkviolet', 'purple', 'lime', 'cyan', 'navy', 'tomato', 'orangered',\n 'dodgerblue', 'aqua', 'fuchsia', 'coral', 'hotpink', 'lightseagreen', 'salmon'];\n\nexport function getRandomColor() {\n return colors[Math.floor(Math.random() * colors.length)];\n}\n","import {fabric} from \"fabric\";\n\nexport function addImageByURL(url) {\n fabric.Image.fromURL(url, img => {\n const heightCoef = img.height / (this.fabricCanvas.height * 0.9);\n const widthCoef = img.width / (this.fabricCanvas.width * 0.9);\n if (heightCoef > 1 && heightCoef > widthCoef) {\n img.scaleToHeight(Math.floor(this.fabricCanvas.height * 0.9));\n } else if (widthCoef > 1 && widthCoef > heightCoef) {\n img.scaleToWidth(Math.floor(this.fabricCanvas.width * 0.9));\n }\n this.registerObjectOnBoard(img);\n this.fabricCanvas.add(img).setActiveObject(img).requestRenderAll();\n this.sendObjectAddition(img);\n });\n}\n","import {fabric} from \"fabric\";\n\nexport function startText() {\n if (this.commonSettings.mode) {\n this.stopPreviousMode();\n }\n this.commonSettings.mode = 'text';\n this.fabricCanvas.defaultCursor = 'text';\n this.fabricCanvas.hoverCursor = 'text';\n this.fabricCanvas.selection = false;\n this.fabricCanvas.on('mouse:down', (evt) => {\n if (this.fabricCanvas.getActiveObject() && !this.fabricCanvas.getActiveObject().text) {\n this.fabricCanvas.getActiveObject().selectable = false;\n this.fabricCanvas.getActiveObject().evented = false;\n }\n if (!this.fabricCanvas.getActiveObject() || (this.fabricCanvas.getActiveObject() && !this.fabricCanvas.getActiveObject().text)) {\n let text = new fabric.IText(' ', {\n fontFamily: 'Helvetica',\n left: evt.absolutePointer.x,\n top: evt.absolutePointer.y,\n fontSize: 24 * this.fabricCanvas.width / 1111,\n fill: this.getColor(),\n });\n text.selectionStart = 0;\n text.selectionEnd = text.text.length;\n this.registerObjectOnBoard(text);\n this.fabricCanvas.add(text).setActiveObject(text);\n text.enterEditing();\n text.hiddenTextarea.focus();\n this.fabricCanvas.requestRenderAll();\n this.sendObjectAddition(text);\n }\n if (this.fabricCanvas.getActiveObject() && this.fabricCanvas.getActiveObject().hiddenTextarea) {\n this.fabricCanvas.getActiveObject().hasControls = true;\n this.fabricCanvas.getActiveObject().hasBorders = true;\n this.fabricCanvas.getActiveObject().lockMovementX = true;\n this.fabricCanvas.getActiveObject().lockMovementY = true;\n this.fabricCanvas.getActiveObject().lockUniScaling = true;\n this.fabricCanvas.requestRenderAll();\n }\n this.startSelecting();\n });\n}\n\nexport function stopText(nextChosen = false) {\n this.fabricCanvas.defaultCursor = 'default';\n this.fabricCanvas.hoverCursor = 'default';\n this.fabricCanvas.__eventListeners['mouse:down'].pop();\n this.commonSettings.mode = null;\n if (!nextChosen) {\n this.startSelecting();\n }\n}\n","import {reactive} from \"vue\";\n\nexport function setContextMenu() {\n this.contextMenuSettings = reactive({\n component: null,\n show: false,\n });\n this.selectionParams = reactive({\n stroke: {\n shouldShow: false,\n color: '',\n },\n fill: {\n shouldShow: false,\n color: '',\n },\n text: {\n shouldShow: false,\n color: '',\n },\n lockState: {\n shouldShow: false,\n locked: false,\n },\n });\n this.fabricCanvas.on('mouse:down', evt => {\n if (evt.button === 3) {\n const target = this.fabricCanvas.findTarget(evt);\n if (target) {\n this.fabricCanvas.discardActiveObject().setActiveObject(target).requestRenderAll();\n } else {\n this.fabricCanvas.discardActiveObject().requestRenderAll();\n }\n }\n });\n const dealWithSelection = () => {\n const target = this.fabricCanvas.getActiveObject();\n if (!target || (target.type === 'activeSelection' && target.getObjects().length === 0)) {\n return;\n }\n this.selection = true;\n this.selectionParams.stroke = this.getStrokeOfSelected();\n this.selectionParams.fill = this.getFillOfSelected();\n this.selectionParams.text = this.getTextSettingsOfSelected();\n this.selectionParams.lockState = this.getLockedOfSelected();\n let draggable = this.draggable, scaleable = this.scaleable;\n for (const object of this.fabricCanvas.getActiveObjects()) {\n if (object.locked || object.is_cursor) {\n draggable = scaleable = false;\n break;\n }\n }\n target.lockMovementX = target.lockMovementY = !draggable;\n target.lockUniScaling = !scaleable;\n target.setControlsVisibility({\n mt: scaleable, mb: scaleable, ml: scaleable, mr: scaleable,\n tl: scaleable, tr: scaleable, bl: scaleable, br: scaleable,\n mtr: scaleable,\n });\n const bound = target.getBoundingRect();\n this.showContextMenuAtPosition(\n Math.round(bound.left + (bound.width - this.contextMenuSettings.component.offsetWidth) / 2),\n Math.round(bound.top - this.contextMenuSettings.component.offsetHeight - 55),\n );\n };\n this.fabricCanvas.on('selection:created', evt => {\n dealWithSelection();\n });\n this.fabricCanvas.on('selection:updated', evt => {\n this.hideContextMenu();\n dealWithSelection();\n });\n this.fabricCanvas.on('selection:cleared', evt => {\n this.selection = false;\n this.hideContextMenu();\n });\n // we should not show context menu while dragging, scaling or rotating object\n this.fabricCanvas.on('object:moving', evt => {\n if (this.contextMenuSettings.show) {\n this.hideContextMenu();\n }\n });\n this.fabricCanvas.on('object:scaling', evt => {\n if (this.contextMenuSettings.show) {\n this.hideContextMenu();\n }\n });\n this.fabricCanvas.on('object:rotating', evt => {\n if (this.contextMenuSettings.show) {\n this.hideContextMenu();\n }\n });\n // when mouse up, we should show context menu over the selected object\n this.fabricCanvas.on('mouse:up', evt => {\n dealWithSelection();\n });\n}\n\nexport function setContextMenuComponent(contextMenu) {\n this.contextMenuSettings.component = contextMenu;\n}\n\nexport function hideContextMenuByClickOutside() {\n if (!this.selection) {\n this.hideContextMenu();\n }\n}\n\nexport function showContextMenuAtPosition(x, y) {\n this.contextMenuSettings.show = true;\n this.contextMenuSettings.component.style.left = x + 'px';\n this.contextMenuSettings.component.style.top = y + 'px';\n if (this.contextMenuSettings.component.classList.contains('ytm-hidden')) {\n this.contextMenuSettings.component.classList.remove('ytm-hidden');\n }\n if (!this.contextMenuSettings.component.classList.contains('ytm-visible')) {\n this.contextMenuSettings.component.classList.add('ytm-visible');\n }\n}\n\nexport function hideContextMenu() {\n this.contextMenuSettings.show = false;\n if (this.contextMenuSettings.component.classList.contains('ytm-visible')) {\n this.contextMenuSettings.component.classList.remove('ytm-visible');\n }\n if (!this.contextMenuSettings.component.classList.contains('ytm-hidden')) {\n this.contextMenuSettings.component.classList.add('ytm-hidden');\n }\n}\n","import {MODE_DRAWING} from \"@/components/MaterialsV2/BoardCellV2/canvas/const\";\nimport {reactive} from \"vue\";\n\nexport function setDefaultCommonSettings() {\n this.commonSettings = reactive({\n mode: null,\n brushWidth: 2,\n color: 'black',\n });\n}\n\nexport function getBrushWidth() {\n return Math.floor(this.commonSettings.brushWidth * this.fabricCanvas.width / 1111 * 100) / 100;\n}\n\nexport function getColor() {\n return this.commonSettings.color;\n}\n\nexport function setColor(newColor) {\n this.commonSettings.color = newColor;\n if (this.commonSettings.mode === MODE_DRAWING) {\n this.fabricCanvas.freeDrawingBrush.color = this.commonSettings.color;\n }\n}\n\nexport function changeBrushWidth(delta) {\n if (this.commonSettings.brushWidth + delta <= 0 || this.commonSettings.brushWidth + delta > 30) {\n return;\n }\n this.commonSettings.brushWidth += delta\n if (this.commonSettings.mode === MODE_DRAWING) {\n this.fabricCanvas.freeDrawingBrush.width = this.commonSettings.brushWidth;\n }\n}","export function getStrokeOfSelected() {\n const objects = this.fabricCanvas.getActiveObjects();\n if (objects.length === 0) {\n return {\n shouldShow: false,\n color: '',\n };\n }\n let stroke = {\n shouldShow: true,\n color: '',\n };\n for (const [idx, object] of objects.entries()) {\n if (object.type === 'image' || object.type === 'i-text') {\n stroke.shouldShow = false;\n stroke.color = '';\n break;\n }\n if (idx === 0) {\n stroke.color = object.stroke;\n } else if (object.stroke !== stroke.color) {\n stroke.color = '';\n break;\n }\n }\n return stroke;\n}\n\nexport function setStrokeColorToSelected(color) {\n const target = this.fabricCanvas.getActiveObject();\n if (!target) {\n return;\n }\n if (target.type === 'activeSelection') {\n for (const object of target.getObjects()) {\n this.objectsByUUID[object.uuid].set('stroke', color);\n }\n } else {\n target.set('stroke', color);\n }\n this.selectionParams.stroke.color = color;\n this.fabricCanvas.requestRenderAll();\n this.fabricCanvas.fire('object:modified', {target: target});\n}\n","export function getFillOfSelected() {\n const objects = this.fabricCanvas.getActiveObjects();\n if (objects.length === 0) {\n return {\n shouldShow: false,\n color: '',\n };\n }\n let fill = {\n shouldShow: true,\n color: '',\n };\n for (const [idx, object] of objects.entries()) {\n if (object.type === 'line' || object.type === 'image' || object.type === 'i-text') {\n fill.shouldShow = false;\n fill.color = '';\n break;\n }\n if (idx === 0) {\n fill.color = object.fill;\n } else if (object.fill !== fill.color) {\n fill.color = '';\n break;\n }\n }\n return fill;\n}\n\nexport function setFillColorToSelected(color) {\n const target = this.fabricCanvas.getActiveObject();\n if (!target) {\n return;\n }\n if (target.type === 'activeSelection') {\n for (const object of target.getObjects()) {\n this.objectsByUUID[object.uuid].set('fill', color);\n }\n } else {\n target.set('fill', color);\n }\n this.selectionParams.fill.color = color;\n this.fabricCanvas.requestRenderAll();\n this.fabricCanvas.fire('object:modified', {target: target});\n}\n","export function getTextSettingsOfSelected() {\n const objects = this.fabricCanvas.getActiveObjects();\n if (objects.length === 0) {\n return {\n shouldShow: false,\n color: '',\n };\n }\n let textSettings = {\n shouldShow: true,\n color: '',\n };\n for (const [idx, object] of objects.entries()) {\n if (object.type !== 'i-text') {\n textSettings.shouldShow = false;\n textSettings.color = '';\n break;\n }\n if (idx === 0) {\n textSettings.color = object.fill;\n } else if (object.fill !== textSettings.color) {\n textSettings.color = '';\n break;\n }\n }\n return textSettings;\n}\n","export function getLockedOfSelected() {\n const objects = this.fabricCanvas.getActiveObjects();\n if (objects.length === 0) {\n return {\n shouldShow: false,\n locked: false,\n };\n }\n let lockState = {\n shouldShow: true,\n locked: false,\n };\n for (const object of objects) {\n if (!!object.locked) {\n lockState.locked = true;\n break;\n }\n }\n return lockState;\n}\n\nexport function setLockedToSelected(value) {\n const target = this.fabricCanvas.getActiveObject();\n if (!target) {\n return;\n }\n if (target.type === 'activeSelection') {\n for (const object of target.getObjects()) {\n this.setLockStatus(this.objectsByUUID[object.uuid], value);\n }\n } else {\n this.setLockStatus(this.objectsByUUID[target.uuid], value);\n }\n this.selectionParams.lockState.locked = value;\n this.fabricCanvas.requestRenderAll();\n this.fabricCanvas.fire('object:modified', {target: target});\n}\n\nexport function setLockStatus(object, value) {\n if (value) {\n object.set({\n locked: true,\n lockMovementX: true,\n lockMovementY: true,\n lockUniScaling: true,\n });\n object.setControlsVisibility({\n mt: false, mb: false, ml: false, mr: false,\n tl: false, tr: false, bl: false, br: false,\n mtr: false,\n });\n } else {\n object.set({\n locked: undefined,\n lockMovementX: !this.draggable,\n lockMovementY: !this.draggable,\n lockUniScaling: !this.scaleable,\n });\n object.setControlsVisibility({\n mt: this.scaleable, mb: this.scaleable, ml: this.scaleable, mr: this.scaleable,\n tl: this.scaleable, tr: this.scaleable, bl: this.scaleable, br: this.scaleable,\n mtr: this.scaleable,\n });\n }\n}\n","import {fabric} from \"fabric\";\nimport {startSelecting, stopSelecting} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/selecting\";\nimport {startDrawing, stopDrawing} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/drawing\";\nimport {stopPreviousMode} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/modes\";\nimport {\n performErase,\n performEraseOnPoint,\n startErasing,\n stopErasing\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/erasing\";\nimport {\n addObjects,\n registerObjectOnBoard, removeObject,\n setObjectsStorage\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/objects_storage/objects_storage\";\nimport {\n makeObjectsDraggable, makeObjectsScaleable,\n makeObjectsSelectable, makeObjectsUndraggable, makeObjectsUnscaleable,\n makeObjectsUnselectable\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/settings/settings\";\nimport {\n extendToObjectMethod,\n denormalizeObject,\n normalizeManyObjects,\n normalizeObject, getObjectsFromTarget\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/objects_storage/util\";\nimport {\n handleMouseMove,\n handleObjectAddition,\n handleObjectDeletion,\n handleObjectTransform\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/websocket/handlers\";\nimport {HistoryStorage} from \"@/util/history-storage\";\nimport {\n registerMouseMoveSender, registerObjectAdditionSender, registerObjectDeletionSender, registerObjectTransformSender,\n sendMouseMove,\n sendObjectAddition,\n sendObjectDeletion,\n sendObjectTransform\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/websocket/senders\";\nimport {\n drawingLine,\n drawLine,\n finishDrawLine, scaleLine,\n startLine,\n stopLine\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/line\";\nimport {\n drawingRectangle,\n drawRectangle, finishDrawRectangle, scaleRectangle,\n startRectangle,\n stopRectangle\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/rectangle\";\nimport {\n drawCircle,\n drawingCircle,\n finishDrawCircle, scaleCircle,\n startCircle,\n stopCircle\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/circle\";\nimport {\n performRedo,\n performUndo, redoAddition, redoDeletion, redoTransform,\n undoAddition, undoDeletion,\n undoTransform\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/operations/undo_redo\";\nimport {deleteActiveObjects} from \"@/components/MaterialsV2/BoardCellV2/canvas/operations/remove_selected\";\nimport {copyActiveObjects, pasteObjects} from \"@/components/MaterialsV2/BoardCellV2/canvas/operations/copy_paste\";\nimport {\n getRandomColor,\n makeCursor,\n removeCursor,\n renderCursor,\n renderCursors\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/cursors/cursors\";\nimport {addImageByURL} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/image\";\nimport {startText, stopText} from \"@/components/MaterialsV2/BoardCellV2/canvas/modes/text\";\nimport {\n hideContextMenu, hideContextMenuByClickOutside,\n setContextMenu,\n setContextMenuComponent,\n showContextMenuAtPosition,\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/context_menu/context_menu\";\nimport {\n changeBrushWidth, getBrushWidth, getColor,\n setColor,\n setDefaultCommonSettings\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/instruments/common_settings\";\nimport {getStrokeOfSelected, setStrokeColorToSelected} from \"@/components/MaterialsV2/BoardCellV2/canvas/context_menu/stroke\";\nimport {getFillOfSelected, setFillColorToSelected} from \"@/components/MaterialsV2/BoardCellV2/canvas/context_menu/fill\";\nimport {getTextSettingsOfSelected} from \"@/components/MaterialsV2/BoardCellV2/canvas/context_menu/text\";\nimport {\n getLockedOfSelected,\n setLockedToSelected,\n setLockStatus\n} from \"@/components/MaterialsV2/BoardCellV2/canvas/context_menu/locking\";\n\nexport class YTMCanvas {\n constructor(boardId, cellId) {\n this.boardId = boardId;\n this.cellId = cellId;\n }\n\n setCanvas() {\n this.fabricCanvas = new fabric.Canvas(this.cellId + '_new', {\n backgroundColor: '#f8f8f8',\n renderOnAddRemove: false,\n objectCaching: false,\n targetFindTolerance: 3,\n preserveObjectStacking: true,\n fireRightClick: true,\n stopContextMenu: true,\n });\n this.scalingNow = false;\n this.fabricCanvas.on('object:scaling', opt => {\n this.scalingNow = true;\n switch (opt.target.type) {\n case 'line':\n this.scaleLine(opt.target);\n break;\n case 'rect':\n this.scaleRectangle(opt.target);\n break;\n case 'ellipse':\n this.scaleCircle(opt.target);\n break;\n }\n });\n this.rotatingNow = false;\n this.fabricCanvas.on('object:rotating', opt => {\n this.rotatingNow = true;\n })\n this.fabricCanvas.on('mouse:up', opt => {\n this.scalingNow = false;\n this.rotatingNow = false;\n });\n this.fabricCanvas.on('object:modified', opt => {\n let objects = this.getObjectsFromTarget(opt.target);\n if (objects.length !== 0) {\n this.sendObjectTransform(objects);\n }\n });\n this.usersOnBoard = {};\n this.prevMouse = {x: 0, y: 0};\n this.fabricCanvas.on('mouse:move', (evt) => {\n let curMouse = { x: evt.pointer.x, y: evt.pointer.y };\n if (curMouse.x !== this.prevMouse.x || curMouse.y !== this.prevMouse.y) {\n this.prevMouse = curMouse;\n }\n });\n let lastSent = { x: 0, y: 0 };\n this.triggerSendMouseMove = setInterval(() => {\n if (this.prevMouse.x !== lastSent.x || this.prevMouse.y !== lastSent.y) {\n this.sendMouseMove(this.prevMouse.x - 5, this.prevMouse.y - 5);\n lastSent = this.prevMouse;\n }\n }, 100);\n this.setDefaultCommonSettings();\n this.setContextMenu();\n this.prevEraser = {x: null, y: null};\n this.setObjectsStorage();\n this.history = new HistoryStorage(30);\n this.startSelecting();\n }\n\n destroy() {\n clearInterval(this.triggerSendMouseMove);\n }\n}\n\nYTMCanvas.prototype.onObjectAddition = registerObjectAdditionSender;\nYTMCanvas.prototype.onObjectTransform = registerObjectTransformSender;\nYTMCanvas.prototype.onObjectDeletion = registerObjectDeletionSender;\nYTMCanvas.prototype.onMouseMove = registerMouseMoveSender;\n\nYTMCanvas.prototype.setDefaultCommonSettings = setDefaultCommonSettings;\nYTMCanvas.prototype.changeBrushWidth = changeBrushWidth;\nYTMCanvas.prototype.setColor = setColor;\nYTMCanvas.prototype.getBrushWidth = getBrushWidth;\nYTMCanvas.prototype.getColor = getColor;\n\nYTMCanvas.prototype.setContextMenu = setContextMenu;\nYTMCanvas.prototype.setContextMenuComponent = setContextMenuComponent;\nYTMCanvas.prototype.showContextMenuAtPosition = showContextMenuAtPosition;\nYTMCanvas.prototype.hideContextMenu = hideContextMenu;\nYTMCanvas.prototype.hideContextMenuByClickOutside = hideContextMenuByClickOutside;\nYTMCanvas.prototype.getStrokeOfSelected = getStrokeOfSelected;\nYTMCanvas.prototype.setStrokeColorToSelected = setStrokeColorToSelected;\nYTMCanvas.prototype.getFillOfSelected = getFillOfSelected;\nYTMCanvas.prototype.setFillColorToSelected = setFillColorToSelected;\nYTMCanvas.prototype.getTextSettingsOfSelected = getTextSettingsOfSelected;\nYTMCanvas.prototype.getLockedOfSelected = getLockedOfSelected;\nYTMCanvas.prototype.setLockedToSelected = setLockedToSelected;\nYTMCanvas.prototype.setLockStatus = setLockStatus;\n\nYTMCanvas.prototype.setObjectsStorage = setObjectsStorage;\n\nYTMCanvas.prototype.handleObjectAddition = handleObjectAddition;\nYTMCanvas.prototype.handleObjectTransform = handleObjectTransform;\nYTMCanvas.prototype.handleObjectDeletion = handleObjectDeletion;\nYTMCanvas.prototype.handleMouseMove = handleMouseMove;\n\nYTMCanvas.prototype.sendObjectAddition = sendObjectAddition;\nYTMCanvas.prototype.sendObjectTransform = sendObjectTransform;\nYTMCanvas.prototype.sendObjectDeletion = sendObjectDeletion;\nYTMCanvas.prototype.sendMouseMove = sendMouseMove;\n\nYTMCanvas.prototype.makeCursor = makeCursor;\nYTMCanvas.prototype.removeCursor = removeCursor;\nYTMCanvas.prototype.renderCursors = renderCursors;\nYTMCanvas.prototype.renderCursor = renderCursor;\nYTMCanvas.prototype.getRandomColor = getRandomColor;\n\nYTMCanvas.prototype.addObjects = addObjects;\nYTMCanvas.prototype.registerObjectOnBoard = registerObjectOnBoard;\nYTMCanvas.prototype.removeObject = removeObject;\n\nYTMCanvas.prototype.extendToObjectMethod = extendToObjectMethod;\n\nYTMCanvas.prototype.getObjectsFromTarget = getObjectsFromTarget;\n\nYTMCanvas.prototype.normalizeObject = normalizeObject;\nYTMCanvas.prototype.normalizeManyObjects = normalizeManyObjects;\nYTMCanvas.prototype.denormalizeObject = denormalizeObject;\n\nYTMCanvas.prototype.makeObjectsUnselectable = makeObjectsUnselectable;\nYTMCanvas.prototype.makeObjectsSelectable = makeObjectsSelectable;\nYTMCanvas.prototype.makeObjectsUndraggable = makeObjectsUndraggable;\nYTMCanvas.prototype.makeObjectsDraggable = makeObjectsDraggable;\nYTMCanvas.prototype.makeObjectsUnscaleable = makeObjectsUnscaleable;\nYTMCanvas.prototype.makeObjectsScaleable = makeObjectsScaleable;\n\nYTMCanvas.prototype.stopPreviousMode = stopPreviousMode;\n\nYTMCanvas.prototype.startSelecting = startSelecting;\nYTMCanvas.prototype.stopSelecting = stopSelecting;\n\nYTMCanvas.prototype.startDrawing = startDrawing;\nYTMCanvas.prototype.stopDrawing = stopDrawing;\n\nYTMCanvas.prototype.startErasing = startErasing;\nYTMCanvas.prototype.stopErasing = stopErasing;\nYTMCanvas.prototype.performErase = performErase;\nYTMCanvas.prototype.performEraseOnPoint = performEraseOnPoint;\n\nYTMCanvas.prototype.startLine = startLine;\nYTMCanvas.prototype.stopLine = stopLine;\nYTMCanvas.prototype.drawLine = drawLine;\nYTMCanvas.prototype.drawingLine = drawingLine;\nYTMCanvas.prototype.finishDrawLine = finishDrawLine;\nYTMCanvas.prototype.scaleLine = scaleLine;\n\nYTMCanvas.prototype.startRectangle = startRectangle;\nYTMCanvas.prototype.stopRectangle = stopRectangle;\nYTMCanvas.prototype.drawRectangle = drawRectangle;\nYTMCanvas.prototype.drawingRectangle = drawingRectangle;\nYTMCanvas.prototype.finishDrawRectangle = finishDrawRectangle;\nYTMCanvas.prototype.scaleRectangle = scaleRectangle;\n\nYTMCanvas.prototype.startCircle = startCircle;\nYTMCanvas.prototype.stopCircle = stopCircle;\nYTMCanvas.prototype.drawCircle = drawCircle;\nYTMCanvas.prototype.drawingCircle = drawingCircle;\nYTMCanvas.prototype.finishDrawCircle = finishDrawCircle;\nYTMCanvas.prototype.scaleCircle = scaleCircle;\n\nYTMCanvas.prototype.startText = startText;\nYTMCanvas.prototype.stopText = stopText;\n\nYTMCanvas.prototype.addImageByURL = addImageByURL;\n\nYTMCanvas.prototype.performUndo = performUndo;\nYTMCanvas.prototype.performRedo = performRedo;\nYTMCanvas.prototype.undoAddition = undoAddition;\nYTMCanvas.prototype.undoTransform = undoTransform;\nYTMCanvas.prototype.undoDeletion = undoDeletion;\nYTMCanvas.prototype.redoAddition = redoAddition;\nYTMCanvas.prototype.redoTransform = redoTransform;\nYTMCanvas.prototype.redoDeletion = redoDeletion;\n\nYTMCanvas.prototype.deleteActiveObjects = deleteActiveObjects;\n\nYTMCanvas.prototype.copyActiveObjects = copyActiveObjects;\nYTMCanvas.prototype.pasteObjects = pasteObjects;\n","\n\n\n\n","import { render } from \"./CollabCode.vue?vue&type=template&id=5b8a66de\"\nimport script from \"./CollabCode.vue?vue&type=script&lang=js\"\nexport * from \"./CollabCode.vue?vue&type=script&lang=js\"\n\nimport \"./CollabCode.vue?vue&type=style&index=0&id=5b8a66de&lang=css\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./MenuBar.vue?vue&type=template&id=27ee8406\"\nimport script from \"./MenuBar.vue?vue&type=script&lang=js\"\nexport * from \"./MenuBar.vue?vue&type=script&lang=js\"\n\nimport \"./MenuBar.vue?vue&type=style&index=0&id=27ee8406&lang=css\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./MenuItem.vue?vue&type=template&id=52d3d23b&scoped=true\"\nimport script from \"./MenuItem.vue?vue&type=script&lang=js\"\nexport * from \"./MenuItem.vue?vue&type=script&lang=js\"\n\nimport \"./MenuItem.vue?vue&type=style&index=0&id=52d3d23b&scoped=true&lang=css\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-52d3d23b\"]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./BoardCell.vue?vue&type=template&id=65f504e1\"\nimport script from \"./BoardCell.vue?vue&type=script&lang=js\"\nexport * from \"./BoardCell.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export const MODE_SELECTING = 'selecting';\nexport const MODE_DRAWING = 'drawing';\nexport const MODE_ERASING = 'erasing';\nexport const MODE_LINE = 'line';\nexport const MODE_RECTANGLE = 'rectangle';\nexport const MODE_CIRCLE = 'circle';\nexport const MODE_TEXT = 'text';\nexport const MODE_IMAGE = 'image';\n","import axios from \"axios\";\nimport {SERVICE_BOARD_URI} from \"@/util/api-host\";\nimport {authHeader} from \"@/util/auth-header\";\n\nexport class BoardsManager {\n constructor(board_id, store, component) {\n this.board_id = board_id;\n this.store = store;\n this.cells = {};\n this.cell_by_user = {};\n this.objects_by_cell = {};\n this.store.dispatch('auth/autoLogin').then(() => {\n axios.get(\n SERVICE_BOARD_URI + '/board',\n {\n params: {board_id: this.board_id},\n headers: authHeader(),\n },\n ).then(resp => {\n const objects = resp.data.payload.objects;\n for (const object of objects) {\n if (!this.objects_by_cell.hasOwnProperty(object.cId)) {\n this.objects_by_cell[object.cId] = [];\n }\n this.objects_by_cell[object.cId].push(object.content);\n }\n component.board_fetched = true;\n });\n });\n }\n\n onNewSocketMessage(t, a, payload) {\n const cellId = payload.fId.split(':', 2)[1];\n if (!cellId) {\n return;\n }\n switch (t) {\n case 3002:\n if (!a || a === localStorage.getItem('username')) {\n return;\n }\n if (this.cell_by_user.hasOwnProperty(a) && this.cell_by_user[a] !== cellId) {\n const old_cellId = this.cell_by_user[a];\n this.cells[old_cellId].removeCursor(a);\n }\n this.cells[cellId].handleMouseMove({\n username: a,\n x: payload.x,\n y: payload.y,\n });\n this.cell_by_user[a] = cellId;\n break;\n case 3003:\n this.cells[cellId].handleObjectAddition({object: payload.o});\n break;\n case 3004:\n this.cells[cellId].handleObjectTransform({objects: payload.o});\n break;\n case 3005:\n this.cells[cellId].handleObjectDeletion({uuids: payload.o});\n break;\n default:\n console.error('unrecognized socket message', payload);\n }\n }\n\n registerBoardCell(cell) {\n this.cells[cell.cellId] = cell;\n }\n\n unregisterBoardCell(cell) {\n delete this.cells[cell.cellId];\n }\n}","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CollabCode.vue?vue&type=style&index=0&id=5b8a66de&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MenuItem.vue?vue&type=style&index=0&id=52d3d23b&scoped=true&lang=css\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./YTMFormula.vue?vue&type=style&index=0&id=4493c835&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MenuBar.vue?vue&type=style&index=0&id=27ee8406&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CollabEditor.vue?vue&type=style&index=0&id=8b69f3f4&lang=css\""],"sourceRoot":""}