{"version":3,"sources":["webpack:///./src/assets/playback.svg","webpack:///./src/components/common/newImage/CircleButton.vue?ccd7","webpack:///src/components/common/newImage/CircleButton.vue","webpack:///./src/components/common/newImage/CircleButton.vue?0420","webpack:///./src/components/common/newImage/CircleButton.vue","webpack:///./src/assets/Info_Line_16px_Icon_Light.svg","webpack:///./src/components/common/newImage/ImagePlayer.vue?d7b2","webpack:///../../../src/components/VTooltip/VTooltip.ts","webpack:///./src/assets/play.svg","webpack:///./src/components/common/newImage/canvas/constant.js","webpack:///./src/components/common/newImage/ImagePlayer.vue?8ee3","webpack:///src/components/common/newImage/ImagePlayer.vue","webpack:///./src/components/common/newImage/ImagePlayer.vue?2750","webpack:///./src/components/common/newImage/ImagePlayer.vue","webpack:///./src/assets/play_disabled.svg","webpack:///./src/components/common/newImage/CircleButton.vue?aabd","webpack:///./src/assets/pause.svg","webpack:///./src/assets/boxClose.svg","webpack:///./src/components/common/newImage/canvas/Box.js","webpack:///./src/components/common/newImage/canvas/util.js","webpack:///./src/components/common/newImage/canvas/ZoomPanning.js","webpack:///./src/components/common/newImage/canvas/CustomCorner.js","webpack:///./src/components/common/newImage/canvas/GlobalControl.js","webpack:///./src/components/common/newImage/canvas/FabricCanvas.js"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","playerState","CONSTANT","PAUSE_STATE","style","on","onClickPlay","attrs","PLAY_STATE","onClickPause","STOP_STATE","staticRenderFns","props","isWorkspace","type","default","data","computed","backgroundColor","methods","$emit","component","mixins","Colorable","Delayable","Dependent","Menuable","Toggleable","extend","name","closeDelay","Number","String","disabled","Boolean","openDelay","openOnHover","tag","transition","calculatedMinWidth","closeDependents","calculatedLeft","dimensions","activator","content","unknown","bottom","left","top","right","activatorLeft","attach","offsetLeft","width","nudgeLeft","parseInt","nudgeRight","calcXOverflow","calculatedTop","activatorTop","offsetTop","height","nudgeTop","nudgeBottom","pageYOffset","calcYOverflow","classes","computedTransition","isActive","offsetY","offsetX","styles","maxWidth","convertToUnit","minWidth","zIndex","activeZIndex","beforeMount","$nextTick","value","callActivate","mounted","getSlotType","consoleError","activate","updateDimensions","requestAnimationFrame","startTransition","deactivate","runDelay","genActivatorListeners","listeners","Activatable","options","call","focus","e","getActivator","blur","keydown","keyCode","keyCodes","esc","genActivatorAttributes","genTransition","genContent","setBackgroundColor","color","class","contentClass","activatorFixed","getScopeIdAttrs","directives","isContentActive","ref","getContentSlot","h","showLazyContent","genActivator","Object","freeze","FPS_INTERVAL","IMAGE_CACHE_SIZE","NOT_PLAYED_INDEX","DISABLE_STATE","MOUSE_CROSS","MOUSE_POINTER","MOUSE_DEFAULT","onContextMenu","onMouseDown","_e","zoom","onClickZoom","rawName","expression","contextmenu","onDownloadFrameImage","_v","_t","currentIndex","moveFrame","imageUrlList","detectedImageIndex","hasAfterImages","play","pause","currentLogId","components","PlayerZoom","ContextMenu","Loading","currentLog","fabricObject","resizingTimerId","entireImageLength","x","y","display","watch","nextLog","prevLog","canvasUpdate","updateAfterImagePath","resetCanvas","log_id","canvasInitialize","destroyed","window","object","logId","FabricCanvas","convertedBeforeImages","convertedAfterImages","convertedetectImage","detectionObjects","frameUpdateCallback","stateUpdateCallback","playerClear","afterImageUrls","canvasResizing","clearTimeout","setTimeout","loadedImagesInfo","playerPause","frameIndex","setZoom","closeContextMenu","event","button","secondaryButton","length","primaryButton","date","FileSaver","ClickOutside","Box","selectable","visible","canvas","rectObject","fabric","Rect","rx","ry","stroke","fill","strokeWidth","strokeUniform","hasRotatingPoint","hoverCursor","set","add","model","shapes","index","indexOf","splice","remove","tlX","tlY","brX","brY","pixelCalibrationValue","bgImgAreaWidth","bgImgAreaHeight","scaledWidth","scaleX","scaledHeight","scaleY","maxScaleY","maxScaleX","transFromDataToBox","canvasElement","imageObject","doNotCheckMinimum","originWidth","originHeight","changeCoordinateFromCenterCenterToLeftTop","checkDrawingBoundary","ratio","clientWidth","clientHeight","clientRatio","originRatio","startX","startY","w","box","id","originX","originY","complete","transFromBoxToData","changeCoordinateFromLeftTopToCenterCenter","toFixed","assign","checDrawingMinimumSize","centerX","centerY","ZoomPanning","bgImg","getCenter","pointer","zoomToPoint","checkViewportBoundary","cursor","setCursor","lastPosX","clientX","lastPosY","clientY","vpt","viewportTransform","deltaY","maxZoom","minZoom","preventDefault","stopPropagation","cw","getWidth","ch","getHeight","bgw","getScaledWidth","bgh","getScaledHeight","CustomCorner","fabricCanvasObject","prototype","cornerColor","cornerSize","transparentCorners","setControlsVisibility","mtr","deleteIconImg","require","imgElement","document","createElement","deleteBoxAction","eventData","transform","target","boxObjects","updateEmitter","emit","makeBackupJSON","requestRenderAll","renderIcon","ctx","styleOverride","size","save","translate","rotate","util","degreesToRadians","angle","drawImage","restore","src","controls","tr","Control","sizeX","sizeY","touchSizeX","touchSizeY","actionName","cursorStyle","mouseUpHandler","canvasDomElement","beforeImages","afterImages","detectedImage","detectionBoxes","updateFrameCallback","updateStateCallback","boxDrawingEvent","Map","EventEmitter","boxJsonBackup","initialize","addEventOnCanvas","Canvas","parentNode","drawThumbnail","zoomPanningObject","drawBox","bind","makeBox","onMouseWheel","onMouseMove","onMouseUp","processZoom","downX","absolutePointer","downY","detectionBGImage","aCoords","tl","br","endX","endY","getDetectionBGImageCoords","startPointerValid","endPointerValid","mouseUpPointerX","mouseUpPointerY","isDraw","action","startsWith","shapedUpdate","Math","abs","validToMakeBox","isValidToMakeBox","push","draw","brintToFrontShapes","discardActiveObject","handler","onMouseGrabMove","renderAll","setDimensions","forEach","fabricImageObjects","resizeAllImages","playingIndex","setBoxShapes","detectImageIndex","updatePlayerState","imageObj","fitImageToCanvas","evented","GlobalControl","importAllImages","afterImageObjects","precessedAfterImages","filter","imageValue","map","endIndex","imageUrl","Image","fromURL","image","setBGImg","ImageObj","canvasW","get","canvasH","ratioW","ratioH","scale","centerObject","imageCache","has","hit","Date","now","Promise","resolve","cacheImages","beforeImageObjects","loadImage","detectImageObject","organizeImage","imageUrls","all","url","before","after","detect","precessedBeforeImages","wholeImageLength","precessedImageObjects","boxes","obj","boxShapes","shape","bringToFront","frameIndexToChange","updatePlayingIndex","startAnimation","startTime","hideBoxes","performAnimation","elapsed","frameChange","animationRequest","requestAnimFrame","cancelAnimationFrame","manageCacheSize","clear","dispose","state","cachedImages","entries","entry","sort","a","b","removeItems","slice","item","imagePath","includes","removeImages","delete"],"mappings":"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","file":"js/chunk-0e03fb1f.4edc9be2.js","sourcesContent":["module.exports = __webpack_public_path__ + \"img/playback.c3ca3bc2.svg\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"circle-button\"},[(_vm.playerState === _vm.CONSTANT.PAUSE_STATE)?_c('div',{staticClass:\"icon-container\",style:(_vm.backgroundColor),on:{\"click\":_vm.onClickPlay}},[_c('img',{attrs:{\"src\":require(\"@/assets/play.svg\")}})]):(_vm.playerState === _vm.CONSTANT.PLAY_STATE)?_c('div',{staticClass:\"icon-container\",style:(_vm.backgroundColor),on:{\"click\":_vm.onClickPause}},[_c('img',{attrs:{\"src\":require(\"@/assets/pause.svg\")}})]):(_vm.playerState === _vm.CONSTANT.STOP_STATE)?_c('div',{staticClass:\"icon-container\",style:(_vm.backgroundColor),on:{\"click\":_vm.onClickPlay}},[_c('img',{attrs:{\"src\":require(\"@/assets/playback.svg\")}})]):_c('div',{staticClass:\"icon-container disabled\"},[_c('img',{attrs:{\"src\":require(\"@/assets/play_disabled.svg\")}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CircleButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CircleButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CircleButton.vue?vue&type=template&id=32fd396d&scoped=true&\"\nimport script from \"./CircleButton.vue?vue&type=script&lang=js&\"\nexport * from \"./CircleButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CircleButton.vue?vue&type=style&index=0&id=32fd396d&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"32fd396d\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/Info_Line_16px_Icon_Light.97b69c6c.svg\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImagePlayer.vue?vue&type=style&index=0&id=6b531401&lang=scss&scoped=true&\"","import './VTooltip.sass'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Menuable from '../../mixins/menuable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Helpers\nimport { convertToUnit, keyCodes, getSlotType } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable, Delayable, Dependent, Menuable, Toggleable).extend({\n name: 'v-tooltip',\n\n props: {\n closeDelay: {\n type: [Number, String],\n default: 0,\n },\n disabled: Boolean,\n openDelay: {\n type: [Number, String],\n default: 0,\n },\n openOnHover: {\n type: Boolean,\n default: true,\n },\n tag: {\n type: String,\n default: 'span',\n },\n transition: String,\n },\n\n data: () => ({\n calculatedMinWidth: 0,\n closeDependents: false,\n }),\n\n computed: {\n calculatedLeft (): string {\n const { activator, content } = this.dimensions\n const unknown = !this.bottom && !this.left && !this.top && !this.right\n const activatorLeft = this.attach !== false ? activator.offsetLeft : activator.left\n let left = 0\n\n if (this.top || this.bottom || unknown) {\n left = (\n activatorLeft +\n (activator.width / 2) -\n (content.width / 2)\n )\n } else if (this.left || this.right) {\n left = (\n activatorLeft +\n (this.right ? activator.width : -content.width) +\n (this.right ? 10 : -10)\n )\n }\n\n if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n return `${this.calcXOverflow(left, this.dimensions.content.width)}px`\n },\n calculatedTop (): string {\n const { activator, content } = this.dimensions\n const activatorTop = this.attach !== false ? activator.offsetTop : activator.top\n let top = 0\n\n if (this.top || this.bottom) {\n top = (\n activatorTop +\n (this.bottom ? activator.height : -content.height) +\n (this.bottom ? 10 : -10)\n )\n } else if (this.left || this.right) {\n top = (\n activatorTop +\n (activator.height / 2) -\n (content.height / 2)\n )\n }\n\n if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n if (this.attach === false) top += this.pageYOffset\n\n return `${this.calcYOverflow(top)}px`\n },\n classes (): object {\n return {\n 'v-tooltip--top': this.top,\n 'v-tooltip--right': this.right,\n 'v-tooltip--bottom': this.bottom,\n 'v-tooltip--left': this.left,\n 'v-tooltip--attached':\n this.attach === '' ||\n this.attach === true ||\n this.attach === 'attach',\n }\n },\n computedTransition (): string {\n if (this.transition) return this.transition\n\n return this.isActive ? 'scale-transition' : 'fade-transition'\n },\n offsetY (): boolean {\n return this.top || this.bottom\n },\n offsetX (): boolean {\n return this.left || this.right\n },\n styles (): object {\n return {\n left: this.calculatedLeft,\n maxWidth: convertToUnit(this.maxWidth),\n minWidth: convertToUnit(this.minWidth),\n top: this.calculatedTop,\n zIndex: this.zIndex || this.activeZIndex,\n }\n },\n },\n\n beforeMount () {\n this.$nextTick(() => {\n this.value && this.callActivate()\n })\n },\n\n mounted () {\n if (getSlotType(this, 'activator', true) === 'v-slot') {\n consoleError(`v-tooltip's activator slot must be bound, try ''`, this)\n }\n },\n\n methods: {\n activate () {\n // Update coordinates and dimensions of menu\n // and its activator\n this.updateDimensions()\n // Start the transition\n requestAnimationFrame(this.startTransition)\n },\n deactivate () {\n this.runDelay('close')\n },\n genActivatorListeners () {\n const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n listeners.focus = (e: Event) => {\n this.getActivator(e)\n this.runDelay('open')\n }\n listeners.blur = (e: Event) => {\n this.getActivator(e)\n this.runDelay('close')\n }\n listeners.keydown = (e: KeyboardEvent) => {\n if (e.keyCode === keyCodes.esc) {\n this.getActivator(e)\n this.runDelay('close')\n }\n }\n\n return listeners\n },\n genActivatorAttributes () {\n return {\n 'aria-haspopup': true,\n 'aria-expanded': String(this.isActive),\n }\n },\n genTransition () {\n const content = this.genContent()\n\n if (!this.computedTransition) return content\n\n return this.$createElement('transition', {\n props: {\n name: this.computedTransition,\n },\n }, [content])\n },\n genContent () {\n return this.$createElement(\n 'div',\n this.setBackgroundColor(this.color, {\n staticClass: 'v-tooltip__content',\n class: {\n [this.contentClass]: true,\n menuable__content__active: this.isActive,\n 'v-tooltip__content--fixed': this.activatorFixed,\n },\n style: this.styles,\n attrs: this.getScopeIdAttrs(),\n directives: [{\n name: 'show',\n value: this.isContentActive,\n }],\n ref: 'content',\n }),\n this.getContentSlot()\n )\n },\n },\n\n render (h): VNode {\n return h(this.tag, {\n staticClass: 'v-tooltip',\n class: this.classes,\n }, [\n this.showLazyContent(() => [this.genTransition()]),\n this.genActivator(),\n ])\n },\n})\n","module.exports = __webpack_public_path__ + \"img/play.2d5387b4.svg\";","export default Object.freeze({\n FPS_INTERVAL: 100,\n IMAGE_CACHE_SIZE: 150,\n NOT_PLAYED_INDEX: -1,\n STOP_STATE: 'STOP',\n PLAY_STATE: 'PLAY',\n PAUSE_STATE: 'PAUSE',\n DISABLE_STATE: 'DISABLE',\n MOUSE_CROSS: 'crosshair',\n MOUSE_POINTER: 'pointer',\n MOUSE_DEFAULT: 'default',\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"player-container\"},[_c('div',{staticClass:\"wrapper\",attrs:{\"data-testid\":\"Main_Stream_Box\"},on:{\"contextmenu\":_vm.onContextMenu,\"mousedown\":_vm.onMouseDown}},[(_vm.playerState === _vm.CONSTANT.DISABLE_STATE)?_c('Loading'):_vm._e(),_c('canvas',{ref:\"fabric\"}),_c('PlayerZoom',{attrs:{\"zoom\":_vm.zoom},on:{\"click\":_vm.onClickZoom}}),_c('ContextMenu',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.closeContextMenu),expression:\"closeContextMenu\"}],attrs:{\"data\":_vm.contextmenu,\"width\":120},on:{\"mousedown\":_vm.onDownloadFrameImage}},[_vm._v(\"Save Image\")])],1),_vm._t(\"default\",null,{\"currentIndex\":_vm.currentIndex,\"playerState\":_vm.playerState,\"moveFrame\":_vm.moveFrame,\"imageUrlList\":_vm.imageUrlList,\"detectedImageIndex\":_vm.detectedImageIndex,\"hasAfterImages\":_vm.hasAfterImages,\"play\":_vm.play,\"pause\":_vm.pause,\"currentLogId\":_vm.currentLogId})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImagePlayer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImagePlayer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImagePlayer.vue?vue&type=template&id=6b531401&scoped=true&\"\nimport script from \"./ImagePlayer.vue?vue&type=script&lang=js&\"\nexport * from \"./ImagePlayer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImagePlayer.vue?vue&type=style&index=0&id=6b531401&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6b531401\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installDirectives from \"!../../../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport ClickOutside from 'vuetify/lib/directives/click-outside'\ninstallDirectives(component, {ClickOutside})\n","module.exports = __webpack_public_path__ + \"img/play_disabled.434c9848.svg\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CircleButton.vue?vue&type=style&index=0&id=32fd396d&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/pause.f447f24e.svg\";","module.exports = __webpack_public_path__ + \"img/boxClose.fe043bf2.svg\";","import { fabric } from 'fabric'\n\nexport default class Box {\n constructor(object) {\n this.x = object.x || 0\n this.y = object.y || 0\n this.width = object.width || 0\n this.height = object.height || 0\n this.selectable = object.selectable\n this.visible = object.visible\n this.logId = object.logId || 0\n }\n\n draw(canvas) {\n if (!this.rectObject && this.width > 0 && this.height > 0) {\n this.rectObject = new fabric.Rect({\n width: this.width,\n height: this.height,\n top: this.y,\n left: this.x,\n rx: 3,\n ry: 3,\n stroke: '#F9423A',\n fill: '',\n strokeWidth: 3,\n strokeUniform: true,\n hasRotatingPoint: false,\n hoverCursor: 'pointer',\n selectable: this.selectable,\n })\n this.rectObject.set('visible', this.visible)\n canvas.add(this.rectObject)\n this.rectObject.model = this\n }\n }\n\n remove(canvas, shapes) {\n if (shapes) {\n const index = shapes.indexOf(this)\n if (index !== -1) {\n shapes.splice(index, 1)\n }\n }\n if (this.rectObject) {\n canvas.remove(this.rectObject)\n }\n }\n\n shapedUpdate(tlX, tlY, brX, brY) {\n // If the box line is correctly aligned with the image area, the line may escape from the image.\n // This shows poor design, reducing the box size by 3px so that the box line enters the image area.\n const pixelCalibrationValue = 3\n const bgImgAreaWidth = brX - tlX - pixelCalibrationValue\n const bgImgAreaHeight = brY - tlY - pixelCalibrationValue\n\n const scaledWidth = this.rectObject.width * this.rectObject.scaleX\n const scaledHeight = this.rectObject.height * this.rectObject.scaleY\n\n if (scaledHeight > bgImgAreaHeight) {\n const maxScaleY = bgImgAreaHeight / this.rectObject.height\n this.rectObject.set('scaleY', maxScaleY)\n }\n\n if (scaledWidth > bgImgAreaWidth) {\n const maxScaleX = bgImgAreaWidth / this.rectObject.width\n this.rectObject.set('scaleX', maxScaleX)\n }\n\n this.width = this.rectObject.width * this.rectObject.scaleX\n this.height = this.rectObject.height * this.rectObject.scaleY\n\n const top = this.rectObject.top\n const bottom = top + this.height\n const left = this.rectObject.left\n const right = left + this.width\n\n // Bottom Move\n if (bottom > brY) {\n this.rectObject.set('top', brY - this.height - pixelCalibrationValue)\n }\n\n // Top Move\n if (top < tlY) {\n this.rectObject.set('top', tlY)\n }\n\n // Right Move\n if (right > brX) {\n this.rectObject.set('left', brX - this.width - pixelCalibrationValue)\n }\n\n // left Move\n if (left < tlX) {\n this.rectObject.set('left', tlX)\n }\n\n this.x = this.rectObject.left\n this.y = this.rectObject.top\n }\n}\n","export function transFromDataToBox(data, canvasElement, imageObject, doNotCheckMinimum = false) {\n const originWidth = imageObject.width\n const originHeight = imageObject.height\n data = changeCoordinateFromCenterCenterToLeftTop(data)\n checkDrawingBoundary(data, originWidth, originHeight, doNotCheckMinimum)\n\n const clientWidth = canvasElement.clientWidth\n const clientHeight = canvasElement.clientHeight\n const clientRatio = clientWidth / clientHeight\n const originRatio = originWidth / originHeight\n let startX = 0\n let startY = 0\n let ratio\n if (clientRatio > originRatio) {\n // width longer\n const w = (clientHeight * originWidth) / originHeight\n startX = clientWidth / 2 - w / 2\n ratio = clientHeight / originHeight\n } else {\n const h = (clientWidth * originHeight) / originWidth\n startY = clientHeight / 2 - h / 2\n ratio = clientWidth / originWidth\n }\n const box = {\n id: null,\n x: startX + data.x * ratio,\n y: startY + data.y * ratio,\n width: data.width * ratio,\n height: data.height * ratio,\n originX: 0,\n originY: 0,\n data: null,\n complete: true,\n }\n box.originX = box.x\n box.originY = box.y\n box.logId = data.logId\n return box\n}\n\nexport function transFromBoxToData(box, canvasElement, imageObject, logId) {\n const originWidth = imageObject.width\n const originHeight = imageObject.height\n const clientWidth = canvasElement.clientWidth\n const clientHeight = canvasElement.clientHeight\n const clientRatio = clientWidth / clientHeight\n const originRatio = originWidth / originHeight\n let startX = 0\n let startY = 0\n let ratio\n if (clientRatio > originRatio) {\n // width longer\n const w = (clientHeight * originWidth) / originHeight\n startX = clientWidth / 2 - w / 2\n ratio = originHeight / clientHeight\n } else {\n const h = (clientWidth * originHeight) / originWidth\n startY = clientHeight / 2 - h / 2\n ratio = originWidth / clientWidth\n }\n box = changeCoordinateFromLeftTopToCenterCenter(box)\n return {\n ...box,\n x: +((box.x - startX) * ratio).toFixed(0),\n y: +((box.y - startY) * ratio).toFixed(0),\n width: +(box.width * ratio).toFixed(0),\n height: +(box.height * ratio).toFixed(0),\n logId,\n }\n}\n\nfunction changeCoordinateFromCenterCenterToLeftTop(box) {\n return Object.assign({}, box, { x: box.x - box.width / 2, y: box.y - box.height / 2 })\n}\n\nfunction changeCoordinateFromLeftTopToCenterCenter(box) {\n return Object.assign({}, box, { x: box.x + box.width / 2, y: box.y + box.height / 2 })\n}\n\nfunction checkDrawingBoundary(box, originWidth, originHeight, doNotCheckMinimum) {\n if (!doNotCheckMinimum) {\n checDrawingMinimumSize(box)\n }\n // if log data is wrong, data is fixing\n if (box.x < 0) {\n box.width = box.width + box.x\n box.x = 0\n }\n if (box.y < 0) {\n box.height = box.height + box.y\n box.y = 0\n }\n // check boundary and modify size\n if (box.x + box.width > originWidth) {\n box.width = originWidth - box.x\n }\n if (box.y + box.height > originHeight) {\n box.height = originHeight - box.y\n }\n}\n\nfunction checDrawingMinimumSize(box) {\n // check box min size and position centerization\n if (box.width < 50) {\n let centerX = box.x + box.width / 2\n box.x = centerX - 25\n box.width = 50\n }\n if (box.height < 50) {\n let centerY = box.y + box.height / 2\n box.y = centerY - 25\n box.height = 50\n }\n}\n","import CONSTANT from './constant'\n\nexport default class ZoomPanning {\n zoom = 1\n bgImg\n fabricObject\n lastPosX\n lastPosY\n cursor\n maxZoom = 5\n minZoom = 1\n\n constructor(fabricObject) {\n this.fabricObject = fabricObject\n }\n\n setBGImg(bgImg) {\n this.bgImg = bgImg\n this.setZoom(1)\n }\n\n setZoom(zoom) {\n this.zoom = zoom\n const { left, top } = this.fabricObject.getCenter()\n const pointer = { x: left, y: top }\n this.fabricObject.zoomToPoint(pointer, this.zoom)\n this.checkViewportBoundary()\n }\n\n onMouseDown(event) {\n this.cursor = CONSTANT.MOUSE_POINTER\n this.fabricObject.setCursor(CONSTANT.MOUSE_POINTER)\n this.lastPosX = event.e.clientX\n this.lastPosY = event.e.clientY\n this.fabricObject.set('selection', false)\n }\n\n onMouseUp() {\n this.cursor = CONSTANT.MOUSE_DEFAULT\n this.fabricObject.setCursor(CONSTANT.MOUSE_DEFAULT)\n }\n\n onMouseGrabMove(event) {\n if (this.cursor === CONSTANT.MOUSE_POINTER) {\n this.fabricObject.setCursor(CONSTANT.MOUSE_POINTER)\n var vpt = this.fabricObject.viewportTransform\n vpt[4] += event.e.clientX - this.lastPosX\n vpt[5] += event.e.clientY - this.lastPosY\n\n this.lastPosX = event.e.clientX\n this.lastPosY = event.e.clientY\n this.checkViewportBoundary()\n }\n }\n\n processZoom(e) {\n if (e.e.deltaY > 0 && this.maxZoom > this.zoom) {\n this.zoom += 0.1\n this.zoom = +this.zoom.toFixed(1)\n this.fabricObject.zoomToPoint(e.pointer, this.zoom)\n } else if (this.minZoom < this.zoom) {\n this.zoom -= 0.1\n this.zoom = +this.zoom.toFixed(1)\n this.fabricObject.zoomToPoint(e.pointer, this.zoom)\n }\n e.e.preventDefault()\n e.e.stopPropagation()\n this.checkViewportBoundary()\n }\n\n checkViewportBoundary() {\n if (this.bgImg) {\n let vpt = this.fabricObject.viewportTransform\n let cw = this.fabricObject.getWidth()\n let ch = this.fabricObject.getHeight()\n let bgw = +this.bgImg.getScaledWidth().toFixed()\n let bgh = +this.bgImg.getScaledHeight().toFixed()\n let offsetX = ((cw - bgw) / 2) * this.zoom\n let offsetY = ((ch - bgh) / 2) * this.zoom\n if (this.zoom <= 1) {\n vpt[4] = 0\n vpt[5] = 0\n } else {\n // over left\n if (vpt[4] > -offsetX) {\n vpt[4] = -offsetX\n }\n // over up\n if (vpt[5] > -offsetY) {\n vpt[5] = -offsetY\n }\n // over right\n if (vpt[4] < cw - bgw * this.zoom - offsetX) {\n vpt[4] = cw - bgw * this.zoom - offsetX\n }\n // over down\n if (vpt[5] < ch - bgh * this.zoom - offsetY) {\n vpt[5] = ch - bgh * this.zoom - offsetY\n }\n }\n }\n }\n}\n","import { fabric } from 'fabric'\n\nexport class CustomCorner {\n constructor(fabricCanvasObject) {\n // set corner default design\n fabric.Object.prototype.cornerColor = '#fff'\n fabric.Object.prototype.cornerSize = 5\n fabric.Object.prototype.transparentCorners = false\n fabric.Object.prototype.setControlsVisibility({ mtr: false })\n\n // custom tr corner\n const deleteIconImg = require('@/assets/boxClose.svg')\n const imgElement = document.createElement('img')\n imgElement.src = deleteIconImg\n\n function deleteBoxAction(eventData, transform) {\n const target = transform.target\n const canvas = target.canvas\n target.model.remove(fabricCanvasObject.fabricObject, fabricCanvasObject.boxObjects)\n fabricCanvasObject.updateEmitter.emit('updateBox', fabricCanvasObject.makeBackupJSON(fabricCanvasObject.boxObjects))\n canvas.requestRenderAll()\n }\n\n function renderIcon(ctx, left, top, styleOverride, fabricObject) {\n const size = 24\n ctx.save()\n ctx.translate(left, top)\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle))\n ctx.drawImage(imgElement, -size / 2, -size / 2, size, size)\n ctx.restore()\n }\n\n fabric.Object.prototype.controls.tr = new fabric.Control({\n x: 0.5,\n y: -0.5,\n offsetX: 3,\n offsetY: 0,\n sizeX: 24,\n sizeY: 24,\n touchSizeX: 24,\n touchSizeY: 24,\n actionName: 'delete',\n cursorStyle: 'pointer',\n mouseUpHandler: deleteBoxAction,\n render: renderIcon,\n })\n }\n}\n","function setCursor(fabricObject, bgImg, cursor) {\n if (fabricObject) {\n fabricObject.setCursor(cursor)\n fabricObject.set('defaultCursor', cursor)\n fabricObject.set('hoverCursor', cursor)\n }\n if (bgImg) {\n bgImg.set('defaultCursor', cursor)\n bgImg.set('hoverCursor', cursor)\n }\n}\n\nexport default {\n setCursor,\n}\n","import { fabric } from 'fabric'\nimport Box from './Box'\nimport CONSTANT from './constant'\nimport { transFromDataToBox, transFromBoxToData } from './util'\nimport ZoomPanning from './ZoomPanning'\nimport { CustomCorner } from './CustomCorner'\nimport GlobalControl from './GlobalControl'\nimport { EventEmitter } from 'events'\n\nexport default class FabricCanvas {\n // Class instance, canvas DOM\n canvasDomElement\n fabricObject\n zoomPanningObject\n // not Converted Image\n detectedImage\n afterImages\n beforeImages\n // Converted Image\n fabricImageObjects\n // Image Cache\n imageCache = new Map()\n // Player Image Index\n playingIndex = CONSTANT.NOT_PLAYED_INDEX\n detectImageIndex = 0\n endIndex = 0\n // Player State\n playerState = CONSTANT.STOP_STATE\n // animation ID\n animationRequest\n // view와 연동을 위한 index callback function\n updateFrameCallback\n updateStateCallback\n // Box를 더 빨리 그리기 위해 JSON 형식으로 백업\n boxJsonBackup\n boxObjects = []\n boxDrawingEvent = false\n // 감지된 이미지\n detectionBGImage\n isDraw = false\n updateEmitter = new EventEmitter()\n\n constructor(canvasDomElement, beforeImages, afterImages, detectedImage, detectionBoxes, updateFrameCallback, updateStateCallback, boxDrawingEvent) {\n this.canvasDomElement = canvasDomElement\n this.beforeImages = beforeImages\n this.afterImages = afterImages\n this.detectedImage = detectedImage\n this.boxJsonBackup = detectionBoxes\n this.updateFrameCallback = updateFrameCallback\n this.updateStateCallback = updateStateCallback\n this.boxDrawingEvent = boxDrawingEvent\n this.initialize(canvasDomElement)\n this.addEventOnCanvas()\n }\n\n async initialize(canvasDomElement) {\n this.fabricObject = new fabric.Canvas(canvasDomElement, {\n width: canvasDomElement.parentNode.clientWidth,\n height: canvasDomElement.parentNode.clientHeight,\n hasRotatingPoint: false,\n })\n await this.drawThumbnail(this.detectedImage)\n this.zoomPanningObject = new ZoomPanning(this.fabricObject)\n }\n // event\n addEventOnCanvas() {\n if (this.boxDrawingEvent) {\n new CustomCorner(this)\n this.fabricObject.on('mouse:down', this.drawBox.bind(this))\n this.fabricObject.on('mouse:up', this.makeBox.bind(this))\n this.fabricObject.on('mouse:wheel', this.onMouseWheel.bind(this))\n } else {\n this.fabricObject.on('mouse:down', this.onMouseDown.bind(this))\n this.fabricObject.on('mouse:move', this.onMouseMove.bind(this))\n this.fabricObject.on('mouse:up', this.onMouseUp.bind(this))\n }\n }\n\n onMouseWheel(event) {\n this.zoomPanningObject.processZoom(event)\n this.fabricObject.requestRenderAll()\n }\n\n drawBox(event) {\n this.downX = event.absolutePointer.x\n this.downY = event.absolutePointer.y\n }\n\n getDetectionBGImageCoords() {\n const tlX = this.detectionBGImage.aCoords.tl.x\n const tlY = this.detectionBGImage.aCoords.tl.y\n const brX = this.detectionBGImage.aCoords.br.x\n const brY = this.detectionBGImage.aCoords.br.y\n return { tlX, tlY, brX, brY }\n }\n\n isValidToMakeBox(startX, startY, endX, endY) {\n const { tlX, tlY, brX, brY } = this.getDetectionBGImageCoords()\n\n const startPointerValid = startX >= tlX && startX <= brX && startY >= tlY && startY <= brY\n const endPointerValid = endX >= tlX && endX <= brX && endY >= tlY && endY <= brY\n\n return startPointerValid && endPointerValid ? true : false\n }\n\n makeBox(event) {\n const mouseUpPointerX = event.absolutePointer.x\n const mouseUpPointerY = event.absolutePointer.y\n\n if (!this.isDraw && event.transform && event.transform.action) {\n if (event.transform.action.startsWith('scale') || event.transform.action.startsWith('drag')) {\n const { tlX, tlY, brX, brY } = this.getDetectionBGImageCoords()\n event.target.model.shapedUpdate(tlX, tlY, brX, brY)\n this.boxJsonBackup = this.makeBackupJSON(this.boxObjects)\n this.updateEmitter.emit('updateBox', this.boxJsonBackup)\n }\n } else if (this.isDraw) {\n const width = Math.abs(mouseUpPointerX - this.downX)\n const height = Math.abs(mouseUpPointerY - this.downY)\n const validToMakeBox = this.isValidToMakeBox(this.downX, this.downY, mouseUpPointerX, mouseUpPointerY)\n if (width && height && validToMakeBox) {\n const box = new Box({\n x: this.downX < mouseUpPointerX ? this.downX : mouseUpPointerX,\n y: this.downY < mouseUpPointerY ? this.downY : mouseUpPointerY,\n width,\n height,\n selectable: true,\n })\n this.boxObjects.push(box)\n box.draw(this.fabricObject)\n this.brintToFrontShapes()\n this.boxJsonBackup = this.makeBackupJSON(this.boxObjects)\n this.updateEmitter.emit('updateBox', this.boxJsonBackup)\n }\n this.fabricObject.discardActiveObject()\n }\n }\n\n boxUpdateHandler(handler) {\n this.updateEmitter.on('updateBox', handler)\n }\n\n onMouseDown(event) {\n this.zoomPanningObject.onMouseDown(event)\n }\n\n onMouseMove(event) {\n this.zoomPanningObject.onMouseGrabMove(event)\n this.fabricObject.renderAll()\n }\n\n onMouseUp(event) {\n this.zoomPanningObject.onMouseUp(event)\n }\n\n canvasResizing() {\n const width = this.canvasDomElement.parentNode.parentNode.clientWidth\n const height = this.canvasDomElement.parentNode.parentNode.clientHeight\n this.fabricObject.setDimensions({\n width,\n height,\n })\n this.boxObjects.forEach((box) => this.fabricObject.remove(box.rectObject))\n this.fabricObject.remove(this.detectionBGImage)\n\n if (this.fabricImageObjects) {\n this.resizeAllImages()\n if (this.playingIndex === CONSTANT.NOT_PLAYED_INDEX) {\n this.setBoxShapes(this.boxJsonBackup, true)\n this.fabricImageObjects[this.detectImageIndex].set('visible', true)\n this.updatePlayerState(CONSTANT.STOP_STATE)\n } else if (this.playingIndex === this.detectImageIndex) {\n this.setBoxShapes(this.boxJsonBackup, true)\n this.fabricImageObjects[this.detectImageIndex].set('visible', true)\n } else {\n this.setBoxShapes(this.boxJsonBackup, false)\n this.fabricImageObjects[this.playingIndex].set('visible', true)\n }\n } else {\n this.drawThumbnail(this.detectedImage)\n }\n }\n\n resizeAllImages() {\n this.fabricObject.remove(...this.fabricImageObjects)\n this.fabricImageObjects.forEach((imageObj) => {\n this.fitImageToCanvas(imageObj)\n imageObj.set('visible', false)\n })\n this.fabricObject.add(...this.fabricImageObjects)\n }\n\n setZoom(zoom) {\n this.zoomPanningObject.setZoom(zoom)\n this.fabricObject.requestRenderAll()\n }\n\n setDraw(isDraw) {\n this.isDraw = isDraw\n if (isDraw) {\n fabric.Object.prototype.evented = false\n GlobalControl.setCursor(this.fabricObject, this.detectionBGImage, CONSTANT.MOUSE_CROSS)\n // this.disabledActiveObject()\n } else {\n fabric.Object.prototype.evented = true\n GlobalControl.setCursor(this.fabricObject, this.detectionBGImage, CONSTANT.MOUSE_DEFAULT)\n }\n }\n\n async updateAfterImagePath(afterImages) {\n this.playerPause()\n this.afterImages = afterImages\n const afterImageObjects = await this.importAllImages(this.afterImages)\n const precessedAfterImages = afterImageObjects\n .filter((imageValue) => imageValue.imageObj !== null)\n .map((imageValue) => {\n this.fitImageToCanvas(imageValue.imageObj)\n return imageValue.imageObj\n })\n\n this.fabricImageObjects = [...this.fabricImageObjects, ...precessedAfterImages]\n this.endIndex = this.fabricImageObjects.length - 1\n\n return afterImageObjects\n .filter((imageValue) => imageValue.imageObj !== null)\n .map((imageValue) => {\n return imageValue.imageUrl\n })\n }\n\n async drawThumbnail(imageUrl) {\n await fabric.Image.fromURL(imageUrl, (image) => {\n image.set('selectable', false)\n image.set('hoverCursor', 'default')\n image.set('moveCursor', 'pointer')\n this.fitImageToCanvas(image)\n this.fabricObject.add(image)\n this.detectionBGImage = image\n this.setBoxShapes(this.boxJsonBackup, true)\n this.zoomPanningObject.setBGImg(image)\n this.fabricObject.renderAll()\n })\n }\n\n fitImageToCanvas(ImageObj) {\n const canvasW = this.fabricObject.get('width')\n const canvasH = this.fabricObject.get('height')\n const ratioW = canvasW / ImageObj.width\n const ratioH = canvasH / ImageObj.height\n if (ratioW < ratioH) ImageObj.scale(ratioW)\n else ImageObj.scale(ratioH)\n\n this.fabricObject.centerObject(ImageObj)\n }\n\n loadImage(imageUrl) {\n if (this.imageCache.has(imageUrl)) {\n this.imageCache.get(imageUrl).hit++\n this.imageCache.get(imageUrl).date = Date.now()\n return Promise.resolve({\n imageObj: this.imageCache.get(imageUrl).image,\n imageUrl,\n })\n } else {\n return new Promise((resolve) => {\n fabric.Image.fromURL(imageUrl, (imageObj) => {\n if (imageObj.width && imageObj.height) {\n imageObj.set('selectable', false)\n imageObj.set('hoverCursor', 'default')\n imageObj.set('visible', false)\n this.cacheImages(imageUrl, imageObj)\n resolve({ imageObj, imageUrl })\n } else resolve({ imageObj: null, imageUrl })\n })\n })\n }\n }\n\n // playPlayer 메서드를 실행하기 이전에 이미지로드를 위한 작업\n async preLoadImageForPlay() {\n return new Promise(async (resolve) => {\n const beforeImageObjects = await this.importAllImages(this.beforeImages)\n const afterImageObjects = await this.importAllImages(this.afterImages)\n const detectImageObject = await this.loadImage(this.detectedImage)\n resolve(this.organizeImage(beforeImageObjects, afterImageObjects, detectImageObject))\n })\n }\n\n // 필요한 이미지를 모두 사전에 불러옵니다.\n importAllImages(imageUrls) {\n return Promise.all(imageUrls.map((url) => this.loadImage(url)))\n }\n\n // Vue에서 사용할 이미지를 정리하고 반환합니다.\n organizeImage(before, after, detect) {\n const precessedBeforeImages = before.filter((imageValue) => imageValue.imageObj !== null)\n const precessedAfterImages = after.filter((imageValue) => imageValue.imageObj !== null)\n this.fabricImageObjects = [...precessedBeforeImages, detect, ...precessedAfterImages].map((imageValue) => {\n this.fitImageToCanvas(imageValue.imageObj)\n return imageValue.imageObj\n })\n this.endIndex = precessedBeforeImages.length + precessedAfterImages.length - 1\n this.detectImageIndex = precessedBeforeImages.length\n\n return {\n wholeImageLength: this.endIndex,\n detectedImageIndex: this.detectImageIndex,\n precessedImageObjects: [...precessedBeforeImages, detect, ...precessedAfterImages],\n }\n }\n // detection box draw\n setBoxShapes(boxes, visible) {\n this.boxObjects = []\n boxes.forEach((object) => {\n const obj = transFromDataToBox(object, this.canvasDomElement, this.detectionBGImage)\n const box = new Box({ ...obj, selectable: this.boxDrawingEvent, visible })\n this.boxObjects.push(box)\n box.draw(this.fabricObject)\n })\n this.boxJsonBackup = this.makeBackupJSON(this.boxObjects)\n }\n\n makeBackupJSON(boxShapes) {\n return boxShapes.map((shape) => {\n return transFromBoxToData(shape, this.canvasDomElement, this.detectionBGImage, shape.logId)\n })\n }\n\n brintToFrontShapes() {\n this.boxObjects.forEach((shape) => {\n if (shape.rectObject) {\n shape.rectObject.set('visible', true)\n shape.rectObject.bringToFront()\n }\n })\n }\n hideBoxes() {\n this.boxObjects.forEach((shape) => {\n if (shape.rectObject) shape.rectObject.set('visible', false)\n })\n }\n\n // controller\n moveFrame(frameIndexToChange) {\n if (this.playerState === CONSTANT.PLAY_STATE) this.playerPause()\n if (this.fabricImageObjects[this.playingIndex - 1]) {\n this.fabricImageObjects[this.playingIndex - 1].set('visible', false)\n }\n if (this.fabricImageObjects[frameIndexToChange]) {\n this.fabricImageObjects[frameIndexToChange].set('visible', true)\n this.fabricObject.add(this.fabricImageObjects[frameIndexToChange])\n if (this.detectImageIndex === frameIndexToChange) this.brintToFrontShapes()\n this.fabricObject.renderAll()\n this.updatePlayingIndex(frameIndexToChange)\n }\n }\n\n playPlayer(frameUpdateCallback) {\n if (this.playerState === CONSTANT.PLAY_STATE) return\n this.updateFrameCallback = frameUpdateCallback\n this.fabricObject.remove(...this.fabricImageObjects)\n this.fabricObject.add(...this.fabricImageObjects)\n this.playerState = CONSTANT.PLAY_STATE\n this.updateStateCallback(this.playerState)\n this.startAnimation()\n }\n\n startAnimation() {\n let startTime = Date.now()\n this.hideBoxes()\n const performAnimation = () => {\n const now = Date.now()\n const elapsed = now - startTime\n\n if (elapsed > CONSTANT.FPS_INTERVAL) {\n startTime = now - (elapsed % CONSTANT.FPS_INTERVAL)\n this.frameChange(++this.playingIndex)\n if (this.playingIndex === this.endIndex) {\n this.fabricImageObjects[this.endIndex].set('visible', false)\n this.fabricObject.requestRenderAll()\n this.frameChange(this.detectImageIndex)\n this.updatePlayingIndex(CONSTANT.NOT_PLAYED_INDEX)\n this.updatePlayerState(CONSTANT.STOP_STATE)\n } else {\n if (this.playingIndex === this.detectImageIndex && this.playerState !== CONSTANT.PAUSE_STATE) {\n this.updatePlayerState(CONSTANT.PAUSE_STATE)\n }\n this.updatePlayingIndex(this.playingIndex)\n }\n }\n if (this.playerState === CONSTANT.PLAY_STATE) {\n this.animationRequest = fabric.util.requestAnimFrame(performAnimation)\n }\n }\n this.animationRequest = fabric.util.requestAnimFrame(performAnimation)\n }\n\n frameChange(frameIndexToChange) {\n if (this.fabricImageObjects[this.playingIndex]) {\n this.fabricImageObjects[this.playingIndex].set('visible', false)\n this.fabricObject.requestRenderAll()\n }\n if (this.fabricImageObjects[frameIndexToChange]) {\n this.fabricImageObjects[frameIndexToChange].set('visible', true)\n this.fabricObject.add(this.fabricImageObjects[frameIndexToChange])\n if (frameIndexToChange === this.detectImageIndex) this.brintToFrontShapes()\n this.fabricObject.requestRenderAll()\n } else {\n this.playerState = CONSTANT.STOP_STATE\n this.updateStateCallback(this.playerState)\n this.updatePlayingIndex(CONSTANT.NOT_PLAYED_INDEX)\n cancelAnimationFrame(this.animationRequest)\n }\n }\n\n playerPause() {\n this.playerState = CONSTANT.PAUSE_STATE\n this.updateStateCallback(this.playerState)\n cancelAnimationFrame(this.animationRequest)\n this.manageCacheSize()\n }\n\n playerClear() {\n this.playerState = CONSTANT.STOP_STATE\n this.updateStateCallback(this.playerState)\n this.fabricObject.clear()\n this.fabricObject.dispose()\n }\n\n updatePlayerState(state) {\n this.playerState = state\n this.updateStateCallback(this.playerState)\n }\n\n updatePlayingIndex(index) {\n this.playingIndex = index\n this.updateFrameCallback(this.playingIndex)\n }\n\n // image cache\n cacheImages(url, image) {\n this.imageCache.set(url, { hit: 0, date: Date.now(), image })\n }\n manageCacheSize() {\n if (this.imageCache.size > CONSTANT.IMAGE_CACHE_SIZE) {\n const cachedImages = []\n for (const entry of this.imageCache.entries()) {\n cachedImages.push(entry)\n }\n // select hit & date is low\n cachedImages.sort((a, b) => a[1].hit - b[1].hit)\n cachedImages.sort((a, b) => a[1].date - b[1].date)\n const removeItems = cachedImages.slice(0, this.imageCache.size - CONSTANT.IMAGE_CACHE_SIZE).filter((item) => !this.imagePath.includes(item[0]))\n const removeImages = removeItems.map((item) => item[1].image)\n this.fabricObject.remove(...removeImages)\n removeItems.forEach((item) => {\n this.imageCache.delete(item[0])\n item[1].image.dispose()\n })\n }\n }\n}\n"],"sourceRoot":""}