diff options
author | bobzel <zzzman@gmail.com> | 2024-04-30 13:28:15 -0400 |
---|---|---|
committer | bobzel <zzzman@gmail.com> | 2024-04-30 13:28:15 -0400 |
commit | daeae9db15372b8bd5f5aab387988051341c9209 (patch) | |
tree | 0fc06306943c26844c4690840bf1a594901537e8 /src/ClientUtils.ts | |
parent | 6de58d7ecbfd14beb7389c6ff56e764b5c00ba25 (diff) |
broke out clusters code from freeformview to its own file. cleaned up a bit.
Diffstat (limited to 'src/ClientUtils.ts')
-rw-r--r-- | src/ClientUtils.ts | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/ClientUtils.ts b/src/ClientUtils.ts index 8011a1928..dbbba896f 100644 --- a/src/ClientUtils.ts +++ b/src/ClientUtils.ts @@ -5,6 +5,7 @@ import * as rp from 'request-promise'; import { numberRange, decimalToHexString } from './Utils'; import { CollectionViewType, DocumentType } from './client/documents/DocumentTypes'; import { Colors } from './client/views/global/globalEnums'; +import { CreateImage } from './client/views/nodes/WebBoxRenderer'; export function DashColor(color: string) { try { @@ -658,3 +659,63 @@ export function dateRangeStrToDates(dateStr: string) { return [new Date(fromYear, fromMonth, fromDay), new Date(toYear, toMonth, toDay)]; } + +function replaceCanvases(oldDiv: HTMLElement, newDiv: HTMLElement) { + if (oldDiv.childNodes && newDiv) { + for (let i = 0; i < oldDiv.childNodes.length; i++) { + replaceCanvases(oldDiv.childNodes[i] as HTMLElement, newDiv.childNodes[i] as HTMLElement); + } + } + if (oldDiv instanceof HTMLCanvasElement) { + if (oldDiv.className === 'collectionFreeFormView-grid') { + const newCan = newDiv as HTMLCanvasElement; + const parEle = newCan.parentElement as HTMLElement; + parEle.removeChild(newCan); + parEle.appendChild(document.createElement('div')); + } else { + const canvas = oldDiv; + const img = document.createElement('img'); // create a Image Element + try { + img.src = canvas.toDataURL(); // image source + } catch (e) { + console.log(e); + } + img.style.width = canvas.style.width; + img.style.height = canvas.style.height; + const newCan = newDiv as HTMLCanvasElement; + if (newCan) { + const parEle = newCan.parentElement as HTMLElement; + parEle.removeChild(newCan); + parEle.appendChild(img); + } + } + } +} + +export function UpdateIcon( + filename: string, + docViewContent: HTMLElement, + width: number, + height: number, + panelWidth: number, + panelHeight: number, + scrollTop: number, + realNativeHeight: number, + noSuffix: boolean, + replaceRootFilename: string | undefined, + cb: (iconFile: string, nativeWidth: number, nativeHeight: number) => any +) { + const newDiv = docViewContent.cloneNode(true) as HTMLDivElement; + newDiv.style.width = width.toString(); + newDiv.style.height = height.toString(); + replaceCanvases(docViewContent, newDiv); + const htmlString = new XMLSerializer().serializeToString(newDiv); + const nativeWidth = width; + const nativeHeight = height; + return CreateImage(ClientUtils.prepend(''), document.styleSheets, htmlString, nativeWidth, (nativeWidth * panelHeight) / panelWidth, (scrollTop * panelHeight) / realNativeHeight) + .then(async (dataUrl: any) => { + const returnedFilename = await ClientUtils.convertDataUri(dataUrl, filename, noSuffix, replaceRootFilename); + cb(returnedFilename as string, nativeWidth, nativeHeight); + }) + .catch((error: any) => console.error('oops, something went wrong!', error)); +} |