diff options
-rw-r--r-- | src/client/documents/Documents.ts | 10 | ||||
-rw-r--r-- | src/scraping/buxton/final/BuxtonImporter.ts | 30 |
2 files changed, 27 insertions, 13 deletions
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts index 24dd9ae91..86f68e883 100644 --- a/src/client/documents/Documents.ts +++ b/src/client/documents/Documents.ts @@ -367,11 +367,15 @@ export namespace Docs { const { __images } = device; delete device.__images; const { ImageDocument, StackingDocument } = Docs.Create; - const constructed = __images.map(relative => Utils.prepend(relative)); - const deviceImages = constructed.map((url, i) => ImageDocument(url, { title: `image${i}.${extname(url)}` })); + const constructed = __images.map(({ url, nativeWidth, nativeHeight }) => ({ url: Utils.prepend(url), nativeWidth, nativeHeight })); + const deviceImages = constructed.map(({ url, nativeWidth, nativeHeight }, i) => ImageDocument(url, { + title: `image${i}.${extname(url)}`, + _nativeWidth: nativeWidth, + _nativeHeight: nativeHeight + })); const doc = StackingDocument(deviceImages, { title: device.title, _LODdisable: true }); const deviceProto = Doc.GetProto(doc); - deviceProto.hero = new ImageField(constructed[0]); + deviceProto.hero = new ImageField(constructed[0].url); Docs.Get.DocumentHierarchyFromJson(device, undefined, deviceProto); Doc.AddDocToList(parentProto, "data", doc); } else if (errors) { diff --git a/src/scraping/buxton/final/BuxtonImporter.ts b/src/scraping/buxton/final/BuxtonImporter.ts index f9726872c..098671942 100644 --- a/src/scraping/buxton/final/BuxtonImporter.ts +++ b/src/scraping/buxton/final/BuxtonImporter.ts @@ -11,7 +11,7 @@ import { strictEqual } from "assert"; interface DocumentContents { body: string; - imageUrls: string[]; + imageData: ImageData[]; hyperlinks: string[]; captions: string[]; embeddedFileNames: string[]; @@ -29,7 +29,7 @@ export interface DeviceDocument { primaryKey: string; secondaryKey: string; attribute: string; - __images: string[]; + __images: ImageData[]; hyperlinks: string[]; captions: string[]; embeddedFileNames: string[]; @@ -57,6 +57,12 @@ interface Processor<T> { required?: boolean; } +interface ImageData { + url: string; + nativeWidth: number; + nativeHeight: number; +} + namespace Utilities { export function numberValue(raw: string) { @@ -265,12 +271,12 @@ async function extractFileContents(pathToDocument: string): Promise<DocumentCont console.log("Text extracted."); console.log("Beginning image extraction..."); - const imageUrls = await writeImages(zip); - console.log(`Extracted ${imageUrls.length} images.`); + const imageData = await writeImages(zip); + console.log(`Extracted ${imageData.length} images.`); zip.close(); - return { body, imageUrls, captions, embeddedFileNames, hyperlinks }; + return { body, imageData, captions, embeddedFileNames, hyperlinks }; } const imageEntry = /^word\/media\/\w+\.(jpeg|jpg|png|gif)/; @@ -281,11 +287,11 @@ interface Dimensions { type: string; } -async function writeImages(zip: any): Promise<string[]> { +async function writeImages(zip: any): Promise<ImageData[]> { const allEntries = Object.values<any>(zip.entries()).map(({ name }) => name); const imageEntries = allEntries.filter(name => imageEntry.test(name)); - const imageUrls: string[] = []; + const imageUrls: ImageData[] = []; for (const mediaPath of imageEntries) { const streamImage = () => new Promise<any>((resolve, reject) => { zip.stream(mediaPath, (error: any, stream: any) => error ? reject(error) : resolve(stream)); @@ -308,19 +314,23 @@ async function writeImages(zip: any): Promise<string[]> { await DashUploadUtils.outputResizedImages(streamImage, imageDir, generatedFileName, ext); - imageUrls.push(`/files/images/buxton/${generatedFileName}`); + imageUrls.push({ + url: `/files/images/buxton/${generatedFileName}`, + nativeWidth: width, + nativeHeight: height + }); } return imageUrls; } function analyze(fileName: string, contents: DocumentContents): AnalysisResult { - const { body, imageUrls, captions, hyperlinks, embeddedFileNames } = contents; + const { body, imageData, captions, hyperlinks, embeddedFileNames } = contents; const device: any = { hyperlinks, captions, embeddedFileNames, - __images: imageUrls + __images: imageData }; const errors: { [key: string]: string } = { fileName }; |