{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-constraints/src/components/widgets/lively-pdf.js"],"names":["Morph","pdf","eventFunctionObject","LivelyPDF","initialize","onLoad","then","isLoaded","getAttribute","setURL","get","style","overflow","lively","addEventListener","e","onExtentChanged","onAnnotationClick","bind","html","registerKeys","getSubmorph","onPdfEdit","onPdfAdd","onPdfSave","onPdfCancel","onPdfDelete","registerButtons","currentPage","getPage","pageNumber","pages","find","ea","Array","from","querySelectorAll","showPage","page","forEach","hidden","prevPage","Number","last","nextPage","onUpDown","evt","stopPropagation","preventDefault","onLeftDown","onDownDown","onRightDown","onPrevButton","onNextButton","url","setAttribute","container","pdfLinkService","PDFJS","PDFLinkService","pdfViewer","PDFViewer","linkService","setViewer","currentScaleValue","fetch","response","blob","fileReader","FileReader","editedPdfText","atob","result","replace","originalPdfText","readAsDataURL","URL","createObjectURL","base64pdf","getDocument","pdfDocument","setDocument","pagesPromise","setChangeIndicator","deleteMode","setDeleteMode","enableEditMode","disableEditMode","shadowRoot","getSelection","rangeCount","currentPageNumber","getPageNumber","scale","_pages","viewport","selectionCoords","getRangeAt","getBoundingClientRect","pageCoords","querySelector","scaledSelectionCoords","topLeftX","x","topLeftY","bottom","y","topRightX","width","topRightY","bottomLeftX","bottomLeftY","height","bottomRightX","bottomRightY","content","window","prompt","newAnnotationId","getNewId","newPopupId","rawAnnotation","rawPopupAnnotation","createAnnotationObjects","currentPageString","getPageString","setAnnotationsArray","savePdf","deleteAnnotation","composedPath","editAnnotation","annotationSection","annotationId","dataset","match","annotation","getObjectString","replaceRegex","RegExp","newValue","newAnnotation","popupId","nextSibling","popup","parentElement","annotationsArray","getAnnotationsArray","newAnnotationsArray","newPdfData","btoa","that","newBlob","method","body","contentChanged","livelyContainer","query","updateChangeIndicator","indexOf","annotationsArrayId","annoationsArrayRef","newPageString","newAnnoationsArray","annotationsArrayReferenceRegEx","annotationsArrayReference","exec","annotationsArrayRegEx","id","regex","startSubstr","substring","search","object","pageRegex","pageString","selection","anchorNode","parentNode","lastUsedId","undefined","editButton","saveButton","cancelButton","classList","add","removeAttribute","annotations","getAllSubmorphs","remove","removeEventListener","bool","deleteButton","livelyExample","livelyMigrate","other"],"mappings":"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","file":"lively-pdf.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport pdf from \"src/external/pdf.js\"\n// see https://gist.github.com/yurydelendik/c6152fa75049d5c8f62f\n\nvar eventFunctionObject;\n\nexport default class LivelyPDF extends Morph {\n  initialize() {\n    pdf.onLoad().then(()=> {\n      this.isLoaded = true\n      if (this.getAttribute(\"src\")) {\n        this.setURL(this.getAttribute(\"src\"));\n      }\n    })\n    \n    if (this.getAttribute(\"overflow\")) {\n      this.get(\"#container\").style.overflow = this.getAttribute(\"overflow\")\n    }\n    \n    lively.addEventListener(\"pdf\", this, \"extent-changed\", \n      (e) => this.onExtentChanged(e));\n    \n    // Store event object to be able to remove the listener later \n    eventFunctionObject = this.onAnnotationClick.bind(this);\n    \n    lively.html.registerKeys(this, \"PDF\")\n  \n      // Register event handlers for edit mode for annotations\n    lively.addEventListener(\"pdf\", this.getSubmorph(\"#pdf-edit-button\"), \"click\",\n                          () => this.onPdfEdit());\n    lively.addEventListener(\"pdf\", this.getSubmorph(\"#pdf-add-button\"), \"click\",\n                          () => this.onPdfAdd());\n    lively.addEventListener(\"pdf\", this.getSubmorph(\"#pdf-save-button\"), \"click\",\n                          () => this.onPdfSave());\n    lively.addEventListener(\"pdf\", this.getSubmorph(\"#pdf-cancel-button\"), \"click\",\n                          () => this.onPdfCancel());\n    lively.addEventListener(\"pdf\", this.getSubmorph(\"#pdf-delete-button\"), \"click\",\n                          () => this.onPdfDelete());\n    this.registerButtons()\n    \n    this.currentPage = 1\n  }\n  \n  // pageNumber first==1\n  getPage(pageNumber) {\n    return this.pages().find(ea => ea.getAttribute(\"data-page-number\") == pageNumber)\n  }\n  \n  pages() {\n    return Array.from(this.get(\"#viewerContainer\").querySelectorAll(\".page\"))\n  }\n  \n  showPage(page) {\n    if (!page) return;\n    this.pages().forEach(ea => ea.hidden = true)\n    page.hidden = false\n    this.page = page\n  }\n  \n  prevPage() {\n    var page = this.getPage(this.currentPage--) \n    if (!page) {\n      this.currentPage = Number(this.pages().last.getAttribute(\"data-page-number\")) // wrap around\n      page = this.getPage(this.currentPage)  \n    }\n    return page\n  }\n  \n  nextPage() {\n    var page = this.getPage(this.currentPage++) \n    if (!page) {\n      this.currentPage = 1// wrap around\n      page = this.getPage(this.currentPage)  \n    }\n    return page\n  }\n  \n  onUpDown(evt) {\n    evt.stopPropagation()\n    evt.preventDefault()\n    this.showPage(this.prevPage())\n  }\n\n  onLeftDown(evt) {\n    evt.stopPropagation()\n    evt.preventDefault()\n    this.showPage(this.prevPage())\n  }\n\n  \n  onDownDown(evt) {\n    evt.stopPropagation()\n    evt.preventDefault()\n    this.showPage(this.nextPage())\n  }\n  \n  onRightDown(evt) {\n    evt.stopPropagation()\n    evt.preventDefault()\n    this.showPage(this.nextPage())\n  }\n  \n  onPrevButton() {\n    this.showPage(this.prevPage())\n  }\n  \n  onNextButton() {\n    this.showPage(this.nextPage())\n  }\n  \n  \n  async setURL(url) {\n    this.setAttribute(\"src\", url)\n    \n    if (!this.isLoaded) return\n    \n    var container = this.get('#viewerContainer');\n    this.pdfLinkService = new PDFJS.PDFLinkService();\n    this.pdfViewer = new PDFJS.PDFViewer({\n      container: container,\n      linkService: this.pdfLinkService\n    });\n    \n    this.pdfLinkService.setViewer(this.pdfViewer);\n    container.addEventListener('pagesinit',  () => {\n      this.pdfViewer.currentScaleValue = 'page-width';\n    });\n    \n    // Loading document\n    // Load a blob, transform the blob into base64\n    // Base64 is the format we need since it is editable and can be shown by PDFJS at the same time.\n    fetch(url).then(response => {\n      return response.blob();\n    }).then(blob => {\n      let fileReader = new FileReader();\n      fileReader.addEventListener('loadend', () => {\n        this.editedPdfText = atob(fileReader.result.replace(\"data:application/pdf;base64,\", \"\"));\n        this.originalPdfText = this.editedPdfText;\n      });\n      \n      fileReader.readAsDataURL(blob);\n      return URL.createObjectURL(blob);\n    }).then(base64pdf => {\n      PDFJS.getDocument(base64pdf).then(async (pdfDocument) => {\n        this.pdfViewer.setDocument(pdfDocument);\n        this.pdfLinkService.setDocument(pdfDocument, null);\n    \n        await this.pdfViewer.pagesPromise\n        // #TODO can we advice the pdfView to only render the current page we need?\n        // if (this.getAttribute(\"mode\") != \"scroll\") {\n        //   this.currentPage = 1 \n        //   this.showPage(this.getPage(this.currentPage))\n        // }\n      });\n    });\n    \n    // Update change indicator\n    this.setChangeIndicator(false); \n    this.deleteMode = false;\n  }\n  \n  \n// --------------------------------------------------------------\n// Event functions \n// --------------------------------------------------------------\n  \n  onExtentChanged() {\n    this.pdfViewer.currentScaleValue = 'page-width';\n  }   \n  \n  onPdfEdit() {\n    this.setDeleteMode(false);\n    this.enableEditMode();\n  }\n  \n  onPdfDelete() {   \n    this.disableEditMode(); \n    this.setDeleteMode(!this.deleteMode);\n  }\n  \n  onPdfAdd() {\n    if (this.shadowRoot.getSelection().rangeCount > 0) {\n      let currentPageNumber = this.getPageNumber(this.shadowRoot.getSelection());\n      let scale = this.pdfViewer._pages[0].viewport.scale;\n      let selectionCoords = this.shadowRoot.getSelection().getRangeAt(0).getBoundingClientRect();\n      let pageCoords = this.shadowRoot.querySelector('.page:nth-child(' + currentPageNumber + ') .canvasWrapper').getBoundingClientRect();\n      \n      // Calculate coords of the selection depending on the PDF scale \n      let scaledSelectionCoords = {\n        topLeftX: (selectionCoords.x - pageCoords.x) / scale,\n        topLeftY: (pageCoords.bottom - selectionCoords.y) / scale,\n        topRightX: (selectionCoords.x - pageCoords.x + selectionCoords.width) / scale,\n        topRightY: (pageCoords.bottom - selectionCoords.y) / scale,\n        bottomLeftX: (selectionCoords.x - pageCoords.x) / scale,\n        bottomLeftY: (pageCoords.bottom - selectionCoords.y - selectionCoords.height) / scale,\n        bottomRightX: (selectionCoords.x - pageCoords.x + selectionCoords.width) / scale,\n        bottomRightY: (pageCoords.bottom - selectionCoords.y - selectionCoords.height) / scale \n      };\n      let content = window.prompt('Please enter the content');\n      \n      // Create new anntotaion string which can later be inserted\n      let newAnnotationId = this.getNewId();\n      let newPopupId = this.getNewId(newAnnotationId);\n      let [rawAnnotation, rawPopupAnnotation] = this.createAnnotationObjects(scaledSelectionCoords, newAnnotationId, newPopupId, content);\n      \n      // Get the string of the current page object\n      let currentPageString = this.getPageString(currentPageNumber);\n      \n      // New annotations need to be written into the annotations array of a page\n      // Create or update the existing annotations array\n      this.setAnnotationsArray(currentPageString, newAnnotationId, newPopupId);\n               \n      this.editedPdfText = this.editedPdfText.replace('xref', rawPopupAnnotation + rawAnnotation + \"xref\");\n      this.setChangeIndicator(true);\n      this.savePdf();      \n    }\n  }\n  \n  onPdfSave() {\n    this.savePdf();\n  }\n  \n  onPdfCancel() {\n    this.disableEditMode(); \n  }\n  \n  \n// --------------------------------------------------------------\n// PDF manipulation functions\n// -------------------------------------------------------------- \n  \n  onAnnotationClick(e) {\n    if(this.deleteMode) {\n      this.deleteAnnotation(e.composedPath()[0]);\n    } else {\n      this.editAnnotation(e.composedPath()[0]);\n    }\n  }\n  \n  editAnnotation(annotationSection) {\n    let annotationId = annotationSection.dataset.annotationId.match(/\\d+/g)[0];\n    \n    // Get annotation in PDF by ID\n    let annotation = this.getObjectString(annotationId);\n    \n    let replaceRegex = new RegExp(\"\\\\/Contents\\\\s\\\\([^\\\\)]+\\\\)\", \"gm\");\n\n    let newValue = window.prompt('Please enter the new value');\n    let newAnnotation = \"\";\n    \n    if(newValue !== null) {\n      // Replace annotation with new text\n      newAnnotation = annotation.replace(replaceRegex, \"/Contents (\" + newValue + \")\");  \n\n      this.editedPdfText = this.editedPdfText.replace(annotation, newAnnotation);\n      this.setChangeIndicator(true);\n    }\n  }\n  \n   \n  deleteAnnotation(annotationSection) {\n    let annotationId = annotationSection.dataset.annotationId.match(/\\d+/g)[0];\n    let popupId = annotationSection.nextSibling.dataset.annotationId.match(/\\d+/g)[0];\n    \n    // Get objects in PDF by ID\n    let annotation = this.getObjectString(annotationId);\n    let popup = this.getObjectString(popupId);\n    \n    // Remove actual annotation\n    this.editedPdfText = this.editedPdfText.replace(annotation, \"\");\n    this.editedPdfText = this.editedPdfText.replace(popup, \"\");\n    \n    this.setChangeIndicator(true);\n    \n    // Get the annotations array to remove the reference\n    let currentPageNumber = annotationSection.parentElement.parentElement.dataset.pageNumber;\n    let currentPageString = this.getPageString(currentPageNumber);\n    let annotationsArray = this.getAnnotationsArray(currentPageString);\n    \n    // Remove the reference\n    let newAnnotationsArray = annotationsArray.replace(\" \" + annotationId + \" 0 R\", \"\");\n    newAnnotationsArray = newAnnotationsArray.replace(\" \" + popupId + \" 0 R\", \"\");\n    this.editedPdfText = this.editedPdfText.replace(annotationsArray, newAnnotationsArray);\n    \n    this.savePdf();\n    \n    this.setDeleteMode(false);\n  }\n  \n  \n  savePdf() {\n    let url = this.getAttribute(\"src\");\n    let newPdfData = \"data:application/pdf;base64,\" + btoa(this.editedPdfText);\n    let that = this;\n    \n    // Convert edited base64 back to Blob and write into PDF\n    fetch(newPdfData).then(response => response.blob()).then(newBlob => {\n      fetch(url, {method: 'PUT', body: newBlob }).then(() => {\n        PDFJS.getDocument(newPdfData).then(function (pdfDocument) {\n          that.pdfViewer.setDocument(pdfDocument);\n          that.pdfLinkService.setDocument(pdfDocument, null); \n        });\n        \n        that.originalPdfText = that.editedPdfText;\n        that.setChangeIndicator(false);\n      });\n    });\n  }\n    \n  \n// --------------------------------------------------------------\n// HELPER METHODS for PDF\n// --------------------------------------------------------------\n  \n  \n  setChangeIndicator(contentChanged) {\n    let livelyContainer = lively.query(this, \"lively-container\")\n    if (livelyContainer) {\n      livelyContainer.contentChanged = contentChanged;\n      livelyContainer.updateChangeIndicator();\n    }\n  }\n  \n  createAnnotationObjects(scaledSelectionCoords, newAnnotationId, newPopupId, content) {\n      let rawAnnotation = newAnnotationId + \" 0 obj\\n\\\n<< /Type /Annot /Popup \" + newPopupId + \" 0 R /Rect [ \" \n          + scaledSelectionCoords.bottomLeftX + \" \" \n          + scaledSelectionCoords.bottomLeftY + \" \"\n          + scaledSelectionCoords.topRightX + \" \" \n          + scaledSelectionCoords.topRightY\n        + \" ] /Contents (\" + content + \") /C [ 0.9709861 0.7674150 0.2850983 ] /F 4 /QuadPoints [ \" \n          + scaledSelectionCoords.topLeftX + \" \" \n          + scaledSelectionCoords.topLeftY + \" \"\n          + scaledSelectionCoords.topRightX + \" \" \n          + scaledSelectionCoords.topRightY + \" \"\n          + scaledSelectionCoords.bottomLeftX + \" \" \n          + scaledSelectionCoords.bottomLeftY + \" \" \n          + scaledSelectionCoords.bottomRightX + \" \" \n          + scaledSelectionCoords.bottomRightY\n        + \" ] /Subtype /Highlight >>\\n\\\nendobj\\n\";\n      \n      let rawPopupAnnotation = newPopupId + \" 0 obj\\n\\\n<< /Parent \" + newAnnotationId + \" 0 R /Type /Annot /Open true /Subtype /Popup /Rect [\" \n      + (scaledSelectionCoords.topRightX + 4) + \" \" \n      + scaledSelectionCoords.topRightY + \" \" \n      + (scaledSelectionCoords.bottomRightX + 132) + \" \" \n      + (scaledSelectionCoords.topRightY + 72) \n      + \" ] >>\\n\\\nendobj\\n\";  \n    \n    return new Array(rawAnnotation, rawPopupAnnotation);\n  }\n  \n  setAnnotationsArray(currentPageString, annotationId, popupId) {\n    // Check for an existing annotations array\n    if (currentPageString.indexOf('/Annots') === -1) {\n      // Since there are no annotations we have to create a new annotations array\n      let annotationsArrayId = this.getNewId(popupId);\n      let annoationsArrayRef = \" /Annots \" + annotationsArrayId + \" 0 R\";\n      \n      let newPageString = currentPageString.replace(\">>\", annoationsArrayRef + \" >>\");\n      let newAnnotationsArray = annotationsArrayId + \" 0 obj\\n [ \"\n          + annotationId + \" 0 R \" + popupId + \" 0 R ]\\nendobj\\n\";\n      \n      this.editedPdfText = this.editedPdfText.replace(currentPageString, newPageString);\n      this.editedPdfText = this.editedPdfText.replace('xref', newAnnotationsArray + \"xref\");\n    }\n    else {\n      let annotationsArray = this.getAnnotationsArray(currentPageString);\n      \n      // Insert the new IDs into the array\n      let newAnnoationsArray = annotationsArray.replace(\" ]\", \" \" +annotationId + \" 0 R \" + popupId + \" 0 R ]\");\n      this.editedPdfText = this.editedPdfText.replace(annotationsArray, newAnnoationsArray); \n    }\n  }\n  \n  getAnnotationsArray(currentPageString) {\n    let annotationsArrayReferenceRegEx = new RegExp(\"/Annots\\\\s(\\\\d+)\\\\s\\\\d+\", \"gm\");\n    let annotationsArrayReference = annotationsArrayReferenceRegEx.exec(currentPageString)[1];\n\n    let annotationsArrayRegEx = new RegExp(\"^(\" + annotationsArrayReference + \"\\\\s\\\\d\\\\sobj\\\\n*.*\\\\n*endobj)\", \"mg\");\n    let annotationsArray = this.editedPdfText.match(annotationsArrayRegEx)[0];\n    \n    return annotationsArray;\n  }\n  \n  getObjectString(id) {\n    let regex = new RegExp(\"^(\" + id + \"\\\\s\\\\d\\\\sobj)\", \"mg\");\n    let startSubstr = this.editedPdfText.substring(this.editedPdfText.search(regex));\n    let object = startSubstr.substring(0, startSubstr.indexOf('endobj') + 6);\n    return object;\n  }\n  \n  getPageString(pageNumber) {    \n    // Get currentPage object (as string) in PDF \n    let pageRegex = new RegExp(\"^<<\\\\s\\\\/Type\\\\s\\\\/Page\\\\s.*\\\\n*.*>>$\", 'gm');\n    let pageString = this.editedPdfText.match(pageRegex)[pageNumber - 1];\n    \n    return pageString;\n  }\n  \n  getPageNumber(selection) {\n    return selection.anchorNode.parentNode.parentNode.parentNode.dataset.pageNumber;\n  }\n  \n  getNewId(lastUsedId) {\n    // Optimization based on the assumption that \n    // there are no 1000 annotations within the PDF\n    let id = (lastUsedId === undefined) ? 1000 : lastUsedId + 1;\n    while(this.editedPdfText.indexOf(id + ' 0 obj') !== -1) {\n      id++;\n    }\n    \n    return id;\n  } \n        \n  \n// --------------------------------------------------------------\n// HELPER METHODS for general use\n// --------------------------------------------------------------\n  \n  \n  enableEditMode() {\n    let editButton = this.getSubmorph(\"#pdf-edit-button\");\n    let saveButton = this.getSubmorph(\"#pdf-save-button\");\n    let cancelButton = this.getSubmorph(\"#pdf-cancel-button\");\n    let that = this;\n    \n    editButton.classList.add(\"-edit--active\");\n    editButton.setAttribute(\"disabled\", \"true\");\n    saveButton.removeAttribute(\"disabled\");\n    cancelButton.removeAttribute(\"disabled\");\n    \n    this.pdfViewer.pagesPromise.then(() => {\n      let annotations = that.getAllSubmorphs(\".annotationLayer section.highlightAnnotation\");\n      annotations.forEach((annotation) => {\n        lively.addEventListener(\"pdf\", annotation, \"click\", eventFunctionObject);\n      });\n    });\n  }\n  \n  disableEditMode() {\n    let editButton = this.getSubmorph(\"#pdf-edit-button\");\n    let saveButton = this.getSubmorph(\"#pdf-save-button\");\n    let cancelButton = this.getSubmorph(\"#pdf-cancel-button\");\n    \n    editButton.classList.remove(\"-edit--active\");\n    editButton.removeAttribute(\"disabled\");\n    saveButton.setAttribute(\"disabled\", \"true\");\n    cancelButton.setAttribute(\"disabled\", \"true\");\n    \n    this.editedPdfText = this.originalPdfText;\n    // Remove event listener\n    let annotations = this.getAllSubmorphs(\".annotationLayer section.highlightAnnotation\");\n    annotations.forEach((annotation) => {\n      lively.removeEventListener(\"pdf\", annotation, \"click\", eventFunctionObject);\n    });\n  }\n  \n  setDeleteMode(bool) {\n    let deleteButton = this.getSubmorph(\"#pdf-delete-button\");\n    let that = this;\n    \n    if(bool) {\n      this.pdfViewer.pagesPromise.then(() => {\n        let annotations = that.getAllSubmorphs(\".annotationLayer section.highlightAnnotation\");\n        annotations.forEach((annotation) => {\n          lively.addEventListener(\"pdf\", annotation, \"click\", eventFunctionObject);\n        });\n      });\n      \n      deleteButton.classList.add('-delete--active');   \n    } else {      \n      // Remove event listener\n      let annotations = this.getAllSubmorphs(\".annotationLayer section.highlightAnnotation\");\n      annotations.forEach((annotation) => {\n        lively.removeEventListener(\"pdf\", annotation, \"click\", eventFunctionObject);\n      });\n      \n      deleteButton.classList.remove('-delete--active');   \n    }  \n    \n    this.deleteMode = bool;\n  }\n  \n  livelyExample() {\n    this.setURL(\"https://lively-kernel.org/publications/media/KrahnIngallsHirschfeldLinckePalacz_2009_LivelyWikiADevelopmentEnvironmentForCreatingAndSharingActiveWebContent_AcmDL.pdf\")\n  }\n  \n  livelyMigrate(other) {\n    //  this.setURL(other.getURL())\n  }\n}\n"]}