{"version":3,"sources":["../js/Text/GreenlightTextTools_AreaTextHighlight.js"],"names":["g_oTextTools_AreaTextHighlight","TextTools_AreaTextHighlight","this","g_oBounds","x1","x2","y1","y2","prototype","initialiseHighlight","oViewer","g_oTextTools","g_bHighlightOnCompareCanvas","g_oCompare","g_oCompareViewer","g_oViewer","g_oArtworkViewer","oAnnotationViewer","g_oCompareAnnotationViewer","g_oAnnotationViewer","szHighlightCanvas","szNonHighlightCanvas","removeHighlights","highlightSections","g_oAnnotationText","changeCanvasFunction","$","event","mouseMove","mouseDown","css","g_oGreenlightMessages","displayWarningBubble","c_szHighlightUnavailableCanvas","oArtworkCanvas","oAnnotationCanvas","szCanvasId","oPosition","convertMousePositionToPercentages","x","y","highlightElement","mouseDrag","mouseUp","oAreaSelection","getTextInAreaBounds","length","c_szNoLiveTextFound","initialiseTextTool","g_eToolTypes","AreaTextHighlight","g_eActiveAnnotationType","g_bHighlightIsCharacterAccuracy","g_szHighlightColour","concat","g_iExistingAnnotationId","endhighlight","oBounds","getCharactersInAreaBounds","getWordsInAreaBounds","oWords","oNormalisedBounds","Math","min","max","oTextData","g_oTextData","getTextData","g_oDoc","documentId","g_iCurrentPage","textData","i","Paragraphs","j","Lines","k","Words","textInBounds","push","startingText","paragraph","line","word","endingText","leftToRight","isTextHighlightLeftToRight","oCharacters","l","Characters","character","oText","X2","X1","Y2","Y1","window"],"mappings":"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","file":"GreenlightTextTools_AreaTextHighlight-e75373f357.js","sourcesContent":["/*\r\n * Copyright (c) 2021 SGS Europe. All rights reserved.\r\n *\r\n * This program is the CONFIDENTIAL and PROPRIETARY property of SGS Europe.\r\n * Any unauthorised use, reproduction, or transfer of this program is strictly\r\n * prohibited.\r\n *\r\n * File Name:\tGreenlightTextTools_AreaTextHighlight.js\r\n *\r\n * Description:\tThe class containing the functionality required by the Greenlight for text tools for an area text highlight.\r\n * \r\n */\r\n\r\n// The text tools object.\r\nvar g_oTextTools_AreaTextHighlight = {\r\n\r\n\t\r\n};\r\n\r\n(function () {\r\n\t\"use strict\";\r\n\r\n\t/**\r\n\t * Load the text highlight tool for the page.\r\n\t */\r\n\tfunction TextTools_AreaTextHighlight() {\r\n\r\n\t\t// Bounds.\r\n\t\tthis.g_oBounds = {\r\n\t\t\tx1: 0,\r\n\t\t\tx2: 0,\r\n\t\t\ty1: 0,\r\n\t\t\ty2: 0\r\n\t\t};\r\n\t};\r\n\r\n\t/**\r\n\t * Initialises a text highlight.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.initialiseHighlight = function () {\r\n\r\n\t\t// Determine the canvas to highlight on, and the non highlight canvas.\r\n\t\tvar oViewer = !g_oTextTools.g_bHighlightOnCompareCanvas ? g_oViewer.g_oArtworkViewer : g_oCompare.g_oCompareViewer;\r\n\t\tvar oAnnotationViewer = !g_oTextTools.g_bHighlightOnCompareCanvas ? g_oViewer.g_oAnnotationViewer : g_oCompare.g_oCompareAnnotationViewer;\r\n\t\tvar szHighlightCanvas = !g_oTextTools.g_bHighlightOnCompareCanvas ? \"AnnotationViewer\" : \"CompareAnnotationViewer\";\r\n\t\tvar szNonHighlightCanvas = !g_oTextTools.g_bHighlightOnCompareCanvas ? \"CompareAnnotationViewer\" : \"AnnotationViewer\";\r\n\r\n\t\t// Reset the highlighting to the existing sections.\r\n\t\tg_oTextTools.removeHighlights(oAnnotationViewer);\r\n\t\tg_oTextTools.highlightSections(g_oTextTools.g_oAnnotationText, oViewer, oAnnotationViewer);\r\n\r\n\t\t// Activate the mouse move event.\r\n\t\tchangeCanvasFunction($(\"#\" + szHighlightCanvas), 'pointermove.annotationUI', function (event) {\r\n\t\t\tg_oTextTools_AreaTextHighlight.mouseMove(event, oViewer, oAnnotationViewer);\r\n\t\t});\r\n\r\n\t\t// Activate the mouse down event.\r\n\t\tchangeCanvasFunction($(\"#\" + szHighlightCanvas), 'pointerdown', function (event) {\r\n\t\t\tg_oTextTools_AreaTextHighlight.mouseDown(event, oViewer, oAnnotationViewer);\r\n\t\t});\r\n\r\n\t\t// Activate the mouse down event for the compare canvas.\r\n\t\t$(\"#\" + szNonHighlightCanvas).css(\"cursor\", \"default\");\r\n\t\tchangeCanvasFunction($(\"#\" + szNonHighlightCanvas), 'pointerdown', function (event) {\r\n\t\t\tg_oGreenlightMessages.displayWarningBubble(g_oTextTools.c_szHighlightUnavailableCanvas);\r\n\t\t});\r\n\t};\r\n\r\n\t/**\r\n\t * Mouse move event for a text highlight.\r\n\t * @param {object} event - The event.\r\n\t * @param {object} oArtworkCanvas - The artwork canvas.\r\n\t * @param {object} oAnnotationCanvas - The annotation canvas.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.mouseMove = function (event, oArtworkCanvas, oAnnotationCanvas) {\r\n\r\n\t\t// Determine the canvas id.\r\n\t\tvar szCanvasId = \"#\" + (!g_oTextTools.g_bHighlightOnCompareCanvas ? \"AnnotationViewer\" : \"CompareAnnotationViewer\");\r\n\r\n\t\t// Change the cursor to a crosshair.\r\n\t\t$(szCanvasId).css(\"cursor\", \"crosshair\");\r\n\r\n\t\t// Highlight the existing section.\r\n\t\tg_oTextTools.removeHighlights(oAnnotationCanvas);\r\n\t\tg_oTextTools.highlightSections(g_oTextTools.g_oAnnotationText, oArtworkCanvas, oAnnotationCanvas);\r\n\t};\r\n\r\n\t/**\r\n\t * Mouse down event for a text highlight.\r\n\t * @param {object} event - The event.\r\n\t * @param {object} oArtworkCanvas - The artwork canvas.\r\n\t * @param {object} oAnnotationCanvas - The annotation canvas.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.mouseDown = function (event, oArtworkCanvas, oAnnotationCanvas) {\r\n\t\t\r\n\t\t// Get the position of the mouse.\r\n\t\tvar oPosition = g_oTextTools.convertMousePositionToPercentages(event, oArtworkCanvas, oAnnotationCanvas);\r\n\r\n\t\t// Update the start and end bounds.\r\n\t\tg_oTextTools_AreaTextHighlight.g_oBounds.x1 = oPosition.x;\r\n\t\tg_oTextTools_AreaTextHighlight.g_oBounds.x2 = oPosition.x;\r\n\t\tg_oTextTools_AreaTextHighlight.g_oBounds.y1 = oPosition.y;\r\n\t\tg_oTextTools_AreaTextHighlight.g_oBounds.y2 = oPosition.y;\r\n\r\n\t\t// Reset the highlighting, then highlight the existing sections, then highlight the area.\r\n\t\tg_oTextTools.removeHighlights(oAnnotationCanvas);\r\n\t\tg_oTextTools.highlightSections(g_oTextTools.g_oAnnotationText, oArtworkCanvas, oAnnotationCanvas);\r\n\t\tg_oTextTools.highlightElement(g_oTextTools_AreaTextHighlight.g_oBounds.x1, g_oTextTools_AreaTextHighlight.g_oBounds.x2, g_oTextTools_AreaTextHighlight.g_oBounds.y1, g_oTextTools_AreaTextHighlight.g_oBounds.y2, oArtworkCanvas, oAnnotationCanvas);\r\n\r\n\t\t// Clear all bindings.\r\n\t\tchangeCanvasFunction();\r\n\r\n\t\t// Determine the canvas id.\r\n\t\tvar szCanvasId = \"#\" + (!g_oTextTools.g_bHighlightOnCompareCanvas ? \"AnnotationViewer\" : \"CompareAnnotationViewer\");\r\n\r\n\t\t// Change the cursor to crosshair.\r\n\t\t$(szCanvasId).css(\"cursor\", \"crosshair\");\r\n\r\n\t\t// Set the mouse drag event.\r\n\t\tchangeCanvasFunction($(szCanvasId), 'pointermove.annotationUI', function (event) {\r\n\t\t\tg_oTextTools_AreaTextHighlight.mouseDrag(event, oArtworkCanvas, oAnnotationCanvas);\r\n\t\t});\r\n\r\n\t\t// Set the mouse up event.\r\n\t\tchangeCanvasFunction($(szCanvasId), 'pointerup', function (event) {\r\n\t\t\tg_oTextTools_AreaTextHighlight.mouseUp(event, oArtworkCanvas, oAnnotationCanvas);\r\n\t\t});\r\n\t};\r\n\r\n\t/**\r\n\t * Mouse drag event for a text highlight.\r\n\t * @param {object} event - The event.\r\n\t * @param {object} oArtworkCanvas - The artwork canvas.\r\n\t * @param {object} oAnnotationCanvas - The annotation canvas.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.mouseDrag = function (event, oArtworkCanvas, oAnnotationCanvas) {\r\n\r\n\t\t// Get the position of the mouse.\r\n\t\tvar oPosition = g_oTextTools.convertMousePositionToPercentages(event, oArtworkCanvas, oAnnotationCanvas);\r\n\r\n\t\t// Update the start and end bounds.\r\n\t\tg_oTextTools_AreaTextHighlight.g_oBounds.x2 = oPosition.x;\r\n\t\tg_oTextTools_AreaTextHighlight.g_oBounds.y2 = oPosition.y;\r\n\r\n\t\t// Reset the highlighting, then highlight the existing sections, then highlight the area.\r\n\t\tg_oTextTools.removeHighlights(oAnnotationCanvas);\r\n\t\tg_oTextTools.highlightSections(g_oTextTools.g_oAnnotationText, oArtworkCanvas, oAnnotationCanvas);\r\n\t\tg_oTextTools.highlightElement(g_oTextTools_AreaTextHighlight.g_oBounds.x1, g_oTextTools_AreaTextHighlight.g_oBounds.x2, g_oTextTools_AreaTextHighlight.g_oBounds.y1, g_oTextTools_AreaTextHighlight.g_oBounds.y2, oArtworkCanvas, oAnnotationCanvas);\r\n\t};\r\n\r\n\t/**\r\n\t * Mouse up event for a text highlight.\r\n\t * @param {object} event - The event.\r\n\t * @param {object} oArtworkCanvas - The artwork canvas.\r\n\t * @param {object} oAnnotationCanvas - The annotation canvas.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.mouseUp = function (event, oArtworkCanvas, oAnnotationCanvas) {\r\n\t\t\r\n\t\t// Get the text in the area bounds.\r\n\t\tvar oAreaSelection = g_oTextTools_AreaTextHighlight.getTextInAreaBounds(g_oTextTools_AreaTextHighlight.g_oBounds, oArtworkCanvas, oAnnotationCanvas);\r\n\r\n\t\t// Ensure we have highlighted something.\r\n\t\tif (oAreaSelection.length == 0) {\r\n\t\t\tg_oGreenlightMessages.displayWarningBubble(g_oTextTools.c_szNoLiveTextFound);\r\n\t\t\tg_oTextTools.initialiseTextTool(g_oTextTools.g_eToolTypes.AreaTextHighlight, g_oTextTools.g_eActiveAnnotationType, g_oTextTools.g_bHighlightIsCharacterAccuracy, g_oTextTools.g_bHighlightOnCompareCanvas, g_oTextTools.g_szHighlightColour);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Add the words to the annotation text.\r\n\t\tg_oTextTools.g_oAnnotationText = g_oTextTools.g_oAnnotationText.concat(oAreaSelection);\r\n\r\n\t\t// If this is not a new annotation, re-initialise the highlight.\r\n\t\tif (g_oTextTools.g_iExistingAnnotationId != null) {\r\n\t\t\tg_oTextTools.initialiseTextTool(g_oTextTools.g_eToolTypes.AreaTextHighlight, g_oTextTools.g_eActiveAnnotationType, g_oTextTools.g_bHighlightIsCharacterAccuracy, g_oTextTools.g_bHighlightOnCompareCanvas, g_oTextTools.g_szHighlightColour);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// End the highlight.\r\n\t\tg_oTextTools.endhighlight(oArtworkCanvas, oAnnotationCanvas, true);\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the text within an area bounds.\r\n\t * @param {object} oBounds - The bounds.\r\n\t * @param {object} oArtworkCanvas - The artwork canvas.\r\n\t * @param {object} oAnnotationCanvas - The annotation canvas.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.getTextInAreaBounds = function (oBounds, oArtworkCanvas, oAnnotationCanvas) {\r\n\t\treturn g_oTextTools.g_bHighlightIsCharacterAccuracy ? g_oTextTools_AreaTextHighlight.getCharactersInAreaBounds(oBounds, oArtworkCanvas, oAnnotationCanvas) : g_oTextTools_AreaTextHighlight.getWordsInAreaBounds(oBounds, oArtworkCanvas, oAnnotationCanvas);\r\n\t};\r\n\r\n\t/**\r\n\t * Gets words within bounds.\r\n\t * @param {object} oBounds - The bounds.\r\n\t * @param {object} oArtworkCanvas - The artwork canvas.\r\n\t * @param {object} oAnnotationCanvas - The annotation canvas.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.getWordsInAreaBounds = function (oBounds, oArtworkCanvas, oAnnotationCanvas) {\r\n\r\n\t\t// Outline the word list to be returned.\r\n\t\tvar oWords = [];\r\n\r\n\t\t// Ensure the bounds are the correct direction.\r\n\t\tvar oNormalisedBounds = {\r\n\t\t\tx1: Math.min(oBounds.x1, oBounds.x2),\r\n\t\t\tx2: Math.max(oBounds.x1, oBounds.x2),\r\n\t\t\ty1: Math.min(oBounds.y1, oBounds.y2),\r\n\t\t\ty2: Math.max(oBounds.y1, oBounds.y2)\r\n\t\t};\r\n\r\n\t\t// Get the text data for the document page.\r\n\t\tvar oTextData = g_oTextData.getTextData(oArtworkCanvas.g_oDoc.documentId, oArtworkCanvas.g_iCurrentPage).textData;\r\n\r\n\t\t// Loop through each of the words.\r\n\t\tfor (var i = 0; i < oTextData.Paragraphs.length; i++) {\r\n\t\t\tfor (var j = 0; j < oTextData.Paragraphs[i].Lines.length; j++) {\r\n\t\t\t\tfor (var k = 0; k < oTextData.Paragraphs[i].Lines[j].Words.length; k++) {\r\n\r\n\t\t\t\t\t// If the word is in bounds.\r\n\t\t\t\t\tif (g_oTextTools_AreaTextHighlight.textInBounds(oNormalisedBounds, oTextData.Paragraphs[i].Lines[j].Words[k])) {\r\n\r\n\t\t\t\t\t\t// Add the word to the list.\r\n\t\t\t\t\t\toWords.push({\r\n\t\t\t\t\t\t\tstartingText: {\r\n\t\t\t\t\t\t\t\tparagraph: i,\r\n\t\t\t\t\t\t\t\tline: j,\r\n\t\t\t\t\t\t\t\tword: k\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tendingText: {\r\n\t\t\t\t\t\t\t\tparagraph: i,\r\n\t\t\t\t\t\t\t\tline: j,\r\n\t\t\t\t\t\t\t\tword: k\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tleftToRight: g_oTextTools.isTextHighlightLeftToRight()\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Return the result.\r\n\t\treturn oWords;\r\n\t};\r\n\r\n\t/**\r\n\t * Gets characters within bounds.\r\n\t * @param {object} oBounds - The bounds.\r\n\t * @param {object} oArtworkCanvas - The artwork canvas.\r\n\t * @param {object} oAnnotationCanvas - The annotation canvas.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.getCharactersInAreaBounds = function (oBounds, oArtworkCanvas, oAnnotationCanvas) {\r\n\r\n\t\t// Outline the character list to be returned.\r\n\t\tvar oCharacters = [];\r\n\r\n\t\t// Ensure the bounds are the correct direction.\r\n\t\tvar oNormalisedBounds = {\r\n\t\t\tx1: Math.min(oBounds.x1, oBounds.x2),\r\n\t\t\tx2: Math.max(oBounds.x1, oBounds.x2),\r\n\t\t\ty1: Math.min(oBounds.y1, oBounds.y2),\r\n\t\t\ty2: Math.max(oBounds.y1, oBounds.y2)\r\n\t\t};\r\n\r\n\t\t// Get the text data for the document page.\r\n\t\tvar oTextData = g_oTextData.getTextData(oArtworkCanvas.g_oDoc.documentId, oArtworkCanvas.g_iCurrentPage).textData;\r\n\r\n\t\t// Loop through each of the characters.\r\n\t\tfor (var i = 0; i < oTextData.Paragraphs.length; i++) {\r\n\t\t\tfor (var j = 0; j < oTextData.Paragraphs[i].Lines.length; j++) {\r\n\t\t\t\tfor (var k = 0; k < oTextData.Paragraphs[i].Lines[j].Words.length; k++) {\r\n\t\t\t\t\tfor (var l = 0; l < oTextData.Paragraphs[i].Lines[j].Words[k].Characters.length; l++) {\r\n\r\n\t\t\t\t\t\t// If the character is in bounds.\r\n\t\t\t\t\t\tif (g_oTextTools_AreaTextHighlight.textInBounds(oNormalisedBounds, oTextData.Paragraphs[i].Lines[j].Words[k].Characters[l])) {\r\n\r\n\t\t\t\t\t\t\t// Add the character to the list.\r\n\t\t\t\t\t\t\toCharacters.push({\r\n\t\t\t\t\t\t\t\tstartingText: {\r\n\t\t\t\t\t\t\t\t\tparagraph: i,\r\n\t\t\t\t\t\t\t\t\tline: j,\r\n\t\t\t\t\t\t\t\t\tword: k,\r\n\t\t\t\t\t\t\t\t\tcharacter: l\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tendingText: {\r\n\t\t\t\t\t\t\t\t\tparagraph: i,\r\n\t\t\t\t\t\t\t\t\tline: j,\r\n\t\t\t\t\t\t\t\t\tword: k,\r\n\t\t\t\t\t\t\t\t\tcharacter: l\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tleftToRight: g_oTextTools.isTextHighlightLeftToRight()\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Return the result.\r\n\t\treturn oCharacters;\r\n\t};\r\n\r\n\t/**\r\n\t * Checks if a text item is in bounds.\r\n\t * @param {object} oBounds - The bounds.\r\n\t * @param {object} oText - The text.\r\n\t */\r\n\tTextTools_AreaTextHighlight.prototype.textInBounds = function (oBounds, oText) {\r\n\r\n\t\t// Check for both a horizontal and vertical overlap.\r\n\t\treturn !(oBounds.x1 >= oText.X2 || oText.X1 >= oBounds.x2) && !(oBounds.y1 >= oText.Y2 || oText.Y1 >= oBounds.y2);\r\n\t};\r\n\r\n\t// Add the Text Tools tool object to the window.\r\n\twindow.TextTools_AreaTextHighlight = TextTools_AreaTextHighlight;\r\n}());"]}