UNPKG

moh-common-lib

Version:

A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).

228 lines 16.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { UUID } from 'angular2-uuid'; /** @enum {number} */ var CommonImageError = { WrongType: 0, TooSmall: 1, TooBig: 2, AlreadyExists: 3, Unknown: 4, CannotOpen: 5, PDFnotSupported: 6, CannotOpenPDF: 7, }; export { CommonImageError }; CommonImageError[CommonImageError.WrongType] = 'WrongType'; CommonImageError[CommonImageError.TooSmall] = 'TooSmall'; CommonImageError[CommonImageError.TooBig] = 'TooBig'; CommonImageError[CommonImageError.AlreadyExists] = 'AlreadyExists'; CommonImageError[CommonImageError.Unknown] = 'Unknown'; CommonImageError[CommonImageError.CannotOpen] = 'CannotOpen'; CommonImageError[CommonImageError.PDFnotSupported] = 'PDFnotSupported'; CommonImageError[CommonImageError.CannotOpenPDF] = 'CannotOpenPDF'; var CommonImageProcessingError = /** @class */ (function () { // added errorDescription.PDF.JS gives proper error messages as invalid pdf structure or password protected pdf.Good for splunk tracking function CommonImageProcessingError(errorCode, errorDescription) { this.errorCode = errorCode; this.errorDescription = errorDescription; } return CommonImageProcessingError; }()); export { CommonImageProcessingError }; if (false) { /** @type {?} */ CommonImageProcessingError.prototype.commonImage; /** @type {?} */ CommonImageProcessingError.prototype.rawImageFile; /** @type {?} */ CommonImageProcessingError.prototype.maxSizeAllowed; /** @type {?} */ CommonImageProcessingError.prototype.errorCode; /** @type {?} */ CommonImageProcessingError.prototype.errorDescription; } /** * Image as uploaded by user * @template T */ var /** * Image as uploaded by user * @template T */ CommonImage = /** @class */ (function () { /** * @param fileContent (optional) The base64 of an image. See `fileContent` property. */ function CommonImage(fileContent) { this.attachmentOrder = 0; this.uuid = UUID.UUID(); if (fileContent) { this.fileContent = fileContent; } } /** * Returns the JSON of an image ready to be submitted to the API. You may * have to set attachmentOrder before calling this. */ /** * Returns the JSON of an image ready to be submitted to the API. You may * have to set attachmentOrder before calling this. * @return {?} */ CommonImage.prototype.toJSON = /** * Returns the JSON of an image ready to be submitted to the API. You may * have to set attachmentOrder before calling this. * @return {?} */ function () { return { attachmentOrder: this.attachmentOrder, // will be 0 - should it be 1? attachmentUuid: this.uuid, attachmentDocumentType: this.documentType }; }; /** * @return {?} */ CommonImage.prototype.clone = /** * @return {?} */ function () { /** @type {?} */ var newImage = new CommonImage(); newImage.uuid = this.uuid; newImage.fileContent = this.fileContent; newImage.documentType = this.documentType; newImage.contentType = this.contentType; newImage.size = this.size; // number of bytes. newImage.sizeUnit = this.sizeUnit; newImage.sizeTxt = this.sizeTxt; newImage.naturalHeight = this.naturalHeight; newImage.naturalWidth = this.naturalWidth; newImage.name = this.name; newImage.id = this.id; newImage.error = this.error; newImage.attachmentOrder = this.attachmentOrder; return newImage; }; /** * @return {?} */ CommonImage.prototype.calculateSize = /** * @return {?} */ function () { /** @type {?} */ var aMultiples = ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']; /** @type {?} */ var nBytes = this.size; /** @type {?} */ var sOutput = nBytes + ' bytes'; for (var nMultiple = 0, nApprox = nBytes / 1024; nApprox > 1; nApprox /= 1024, nMultiple++) { sOutput = nApprox.toFixed(3) + " " + aMultiples[nMultiple] + " (" + nBytes + " bytes)"; this.sizeUnit = aMultiples[nMultiple]; } this.sizeTxt = sOutput; }; return CommonImage; }()); /** * Image as uploaded by user * @template T */ export { CommonImage }; if (false) { /** @type {?} */ CommonImage.prototype.uuid; /** * The base64 content of an image. Must already be base64 or some other stringable data-type. * * You should be able to do <img src='myCommonImage.fileContent'> to render the image. * @type {?} */ CommonImage.prototype.fileContent; /** @type {?} */ CommonImage.prototype.documentType; /** * ContentType should generally match the MIME type, but can be set as needed by application. * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types * @type {?} */ CommonImage.prototype.contentType; /** @type {?} */ CommonImage.prototype.size; /** @type {?} */ CommonImage.prototype.sizeUnit; /** @type {?} */ CommonImage.prototype.sizeTxt; /** @type {?} */ CommonImage.prototype.naturalHeight; /** @type {?} */ CommonImage.prototype.naturalWidth; /** @type {?} */ CommonImage.prototype.name; /** @type {?} */ CommonImage.prototype.id; /** @type {?} */ CommonImage.prototype.error; /** @type {?} */ CommonImage.prototype.attachmentOrder; } /** * @record * @template T */ export function CommonAttachmentJson() { } if (false) { /** @type {?} */ CommonAttachmentJson.prototype.attachmentOrder; /** @type {?} */ CommonAttachmentJson.prototype.attachmentUuid; /** @type {?} */ CommonAttachmentJson.prototype.attachmentDocumentType; } /** * @record */ export function CommonImageScaleFactors() { } if (false) { /** @type {?} */ CommonImageScaleFactors.prototype.widthFactor; /** @type {?} */ CommonImageScaleFactors.prototype.heightFactor; /** * @param {?} scale * @return {?} */ CommonImageScaleFactors.prototype.scaleDown = function (scale) { }; } var CommonImageScaleFactorsImpl = /** @class */ (function () { function CommonImageScaleFactorsImpl(wFactor, hFactor) { this.widthFactor = wFactor; this.heightFactor = hFactor; } /** * @param {?} scale * @return {?} */ CommonImageScaleFactorsImpl.prototype.scaleDown = /** * @param {?} scale * @return {?} */ function (scale) { return new CommonImageScaleFactorsImpl(this.widthFactor * scale, this.heightFactor * scale); }; return CommonImageScaleFactorsImpl; }()); export { CommonImageScaleFactorsImpl }; if (false) { /** @type {?} */ CommonImageScaleFactorsImpl.prototype.widthFactor; /** @type {?} */ CommonImageScaleFactorsImpl.prototype.heightFactor; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VzLm1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW9oLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvbW9kZWxzL2ltYWdlcy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0lBSW5DLFlBQVM7SUFDVCxXQUFRO0lBQ1IsU0FBTTtJQUNOLGdCQUFhO0lBQ2IsVUFBTztJQUNQLGFBQVU7SUFDVixrQkFBZTtJQUNmLGdCQUFhOzs7Ozs7Ozs7OztBQUdmO0lBSUUsd0lBQXdJO0lBQ3hJLG9DQUFtQixTQUEyQixFQUFTLGdCQUF5QjtRQUE3RCxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUFTLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUztJQUVoRixDQUFDO0lBQ0gsaUNBQUM7QUFBRCxDQUFDLEFBUkQsSUFRQzs7OztJQVBDLGlEQUEwQjs7SUFDMUIsa0RBQW9COztJQUNwQixvREFBd0I7O0lBRVosK0NBQWtDOztJQUFFLHNEQUFnQzs7Ozs7O0FBUWxGOzs7OztJQUlFOztPQUVHO0lBQ0gscUJBQVksV0FBb0I7UUFnQ2hDLG9CQUFlLEdBQVcsQ0FBQyxDQUFDO1FBL0IxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQTZCRDs7O09BR0c7Ozs7OztJQUNILDRCQUFNOzs7OztJQUFOO1FBQ0UsT0FBTztZQUNMLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTs7WUFDckMsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ3pCLHNCQUFzQixFQUFFLElBQUksQ0FBQyxZQUFZO1NBQzFDLENBQUM7SUFDSixDQUFDOzs7O0lBRUQsMkJBQUs7OztJQUFMOztZQUNRLFFBQVEsR0FBRyxJQUFJLFdBQVcs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bURBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVVVJRCB9IGZyb20gJ2FuZ3VsYXIyLXV1aWQnO1xyXG5cclxuLy8gTk9URTogSWYgeW91IGNoYW5nZSBhbnl0aGluZyBpbiB0aGlzIGVudW0sIGNoZWNrIGltYWdlLWVycm9yLW1vZGFsLmNvbXBvbmVudC5odG1sIGZvciB0ZXN0cyBhbmQgZmlsZS11cGxvYWRlci5jb21wb25lbnQudHM6XHJcbmV4cG9ydCBlbnVtIENvbW1vbkltYWdlRXJyb3Ige1xyXG4gIFdyb25nVHlwZSxcclxuICBUb29TbWFsbCxcclxuICBUb29CaWcsXHJcbiAgQWxyZWFkeUV4aXN0cyxcclxuICBVbmtub3duLFxyXG4gIENhbm5vdE9wZW4sXHJcbiAgUERGbm90U3VwcG9ydGVkLFxyXG4gIENhbm5vdE9wZW5QREYsXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb21tb25JbWFnZVByb2Nlc3NpbmdFcnJvciB7XHJcbiAgY29tbW9uSW1hZ2U/OiBDb21tb25JbWFnZTtcclxuICByYXdJbWFnZUZpbGU/OiBGaWxlO1xyXG4gIG1heFNpemVBbGxvd2VkPzogbnVtYmVyO1xyXG4gIC8vIGFkZGVkIGVycm9yRGVzY3JpcHRpb24uUERGLkpTIGdpdmVzIHByb3BlciBlcnJvciBtZXNzYWdlcyBhcyBpbnZhbGlkIHBkZiBzdHJ1Y3R1cmUgb3IgcGFzc3dvcmQgcHJvdGVjdGVkIHBkZi5Hb29kIGZvciBzcGx1bmsgdHJhY2tpbmdcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXJyb3JDb2RlOiBDb21tb25JbWFnZUVycm9yLCBwdWJsaWMgZXJyb3JEZXNjcmlwdGlvbj86IHN0cmluZykge1xyXG5cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbWFnZSBhcyB1cGxvYWRlZCBieSB1c2VyXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29tbW9uSW1hZ2U8VCA9IGFueT4ge1xyXG5cclxuICB1dWlkOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSBmaWxlQ29udGVudCAob3B0aW9uYWwpIFRoZSBiYXNlNjQgb2YgYW4gaW1hZ2UuIFNlZSBgZmlsZUNvbnRlbnRgIHByb3BlcnR5LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGZpbGVDb250ZW50Pzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnV1aWQgPSBVVUlELlVVSUQoKTtcclxuICAgIGlmIChmaWxlQ29udGVudCkge1xyXG4gICAgICB0aGlzLmZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgYmFzZTY0IGNvbnRlbnQgb2YgYW4gaW1hZ2UuICBNdXN0IGFscmVhZHkgYmUgYmFzZTY0IG9yIHNvbWUgb3RoZXIgc3RyaW5nYWJsZSBkYXRhLXR5cGUuXHJcbiAgICogXHJcbiAgICogWW91IHNob3VsZCBiZSBhYmxlIHRvIGRvIDxpbWcgc3JjPSdteUNvbW1vbkltYWdlLmZpbGVDb250ZW50Jz4gdG8gcmVuZGVyIHRoZSBpbWFnZS5cclxuICAgKi9cclxuICBmaWxlQ29udGVudDogc3RyaW5nO1xyXG4gIGRvY3VtZW50VHlwZTogVDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udGVudFR5cGUgc2hvdWxkIGdlbmVyYWxseSBtYXRjaCB0aGUgTUlNRSB0eXBlLCBidXQgY2FuIGJlIHNldCBhcyBuZWVkZWQgYnkgYXBwbGljYXRpb24uXHJcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9NSU1FX3R5cGVzXHJcbiAgICovXHJcbiAgY29udGVudFR5cGU6IHN0cmluZztcclxuICAvLyBudW1iZXIgb2YgYnl0ZXMuXHJcbiAgc2l6ZTogbnVtYmVyO1xyXG4gIHNpemVVbml0OiBzdHJpbmc7XHJcbiAgc2l6ZVR4dDogc3RyaW5nO1xyXG4gIG5hdHVyYWxIZWlnaHQ6IG51bWJlcjtcclxuICBuYXR1cmFsV2lkdGg6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8vIGZpbGUgdW5pcW5lc3MgY2hlY2tzdW1cclxuICBpZDogc3RyaW5nO1xyXG5cclxuICBlcnJvcj86IENvbW1vbkltYWdlRXJyb3I7XHJcbiAgYXR0YWNobWVudE9yZGVyOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBKU09OIG9mIGFuIGltYWdlIHJlYWR5IHRvIGJlIHN1Ym1pdHRlZCB0byB0aGUgQVBJLiAgWW91IG1heVxyXG4gICAqIGhhdmUgdG8gc2V0IGF0dGFjaG1lbnRPcmRlciBiZWZvcmUgY2FsbGluZyB0aGlzLlxyXG4gICAqL1xyXG4gIHRvSlNPTigpOiBDb21tb25BdHRhY2htZW50SnNvbjxUPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhdHRhY2htZW50T3JkZXI6IHRoaXMuYXR0YWNobWVudE9yZGVyLCAvLyB3aWxsIGJlIDAgLSBzaG91bGQgaXQgYmUgMT9cclxuICAgICAgYXR0YWNobWVudFV1aWQ6IHRoaXMudXVpZCxcclxuICAgICAgYXR0YWNobWVudERvY3VtZW50VHlwZTogdGhpcy5kb2N1bWVudFR5cGVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpOiBDb21tb25JbWFnZSB7XHJcbiAgICBjb25zdCBuZXdJbWFnZSA9IG5ldyBDb21tb25JbWFnZSgpO1xyXG5cclxuICAgIG5ld0ltYWdlLnV1aWQgPSB0aGlzLnV1aWQ7XHJcbiAgICBuZXdJbWFnZS5maWxlQ29udGVudCA9IHRoaXMuZmlsZUNvbnRlbnQ7XHJcbiAgICBuZXdJbWFnZS5kb2N1bWVudFR5cGUgPSB0aGlzLmRvY3VtZW50VHlwZTtcclxuICAgIG5ld0ltYWdlLmNvbnRlbnRUeXBlID0gdGhpcy5jb250ZW50VHlwZTtcclxuICAgIG5ld0ltYWdlLnNpemUgPSB0aGlzLnNpemU7IC8vIG51bWJlciBvZiBieXRlcy5cclxuICAgIG5ld0ltYWdlLnNpemVVbml0ID0gdGhpcy5zaXplVW5pdDtcclxuICAgIG5ld0ltYWdlLnNpemVUeHQgPSB0aGlzLnNpemVUeHQ7XHJcbiAgICBuZXdJbWFnZS5uYXR1cmFsSGVpZ2h0ID0gdGhpcy5uYXR1cmFsSGVpZ2h0O1xyXG4gICAgbmV3SW1hZ2UubmF0dXJhbFdpZHRoID0gdGhpcy5uYXR1cmFsV2lkdGg7XHJcbiAgICBuZXdJbWFnZS5uYW1lID0gdGhpcy5uYW1lO1xyXG4gICAgbmV3SW1hZ2UuaWQgPSB0aGlzLmlkO1xyXG4gICAgbmV3SW1hZ2UuZXJyb3IgPSB0aGlzLmVycm9yO1xyXG4gICAgbmV3SW1hZ2UuYXR0YWNobWVudE9yZGVyID0gdGhpcy5hdHRhY2htZW50T3JkZXI7XHJcblxyXG4gICAgcmV0dXJuIG5ld0ltYWdlO1xyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlU2l6ZSgpIHtcclxuICAgIGNvbnN0IGFNdWx0aXBsZXMgPSBbJ0tpQicsICdNaUInLCAnR2lCJywgJ1RpQicsICdQaUInLCAnRWlCJywgJ1ppQicsICdZaUInXTtcclxuICAgIGNvbnN0IG5CeXRlczogbnVtYmVyID0gdGhpcy5zaXplO1xyXG4gICAgbGV0IHNPdXRwdXQ6IHN0cmluZyA9IG5CeXRlcyArICcgYnl0ZXMnO1xyXG4gICAgXHJcbiAgICBmb3IgKGxldCBuTXVsdGlwbGUgPSAwLCBuQXBwcm94ID0gbkJ5dGVzIC8gMTAyNDsgbkFwcHJveCA+IDE7IG5BcHByb3ggLz0gMTAyNCwgbk11bHRpcGxlKyspIHtcclxuICAgICAgc091dHB1dCA9IGAke25BcHByb3gudG9GaXhlZCgzKX0gJHthTXVsdGlwbGVzW25NdWx0aXBsZV19ICgke25CeXRlc30gYnl0ZXMpYDtcclxuICAgICAgdGhpcy5zaXplVW5pdCA9IGFNdWx0aXBsZXNbbk11bHRpcGxlXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNpemVUeHQgPSBzT3V0cHV0O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21tb25BdHRhY2htZW50SnNvbjxUPiB7XHJcbiAgYXR0YWNobWVudE9yZGVyOiBudW1iZXI7XHJcbiAgYXR0YWNobWVudFV1aWQ6IHN0cmluZztcclxuICBhdHRhY2htZW50RG9jdW1lbnRUeXBlOiBUO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkltYWdlU2NhbGVGYWN0b3JzIHtcclxuICB3aWR0aEZhY3RvcjogbnVtYmVyO1xyXG4gIGhlaWdodEZhY3RvcjogbnVtYmVyO1xyXG5cclxuICBzY2FsZURvd24oc2NhbGU6IG51bWJlcik6IENvbW1vbkltYWdlU2NhbGVGYWN0b3JzO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbW9uSW1hZ2VTY2FsZUZhY3RvcnNJbXBsIGltcGxlbWVudHMgQ29tbW9uSW1hZ2VTY2FsZUZhY3RvcnMge1xyXG4gIHdpZHRoRmFjdG9yOiBudW1iZXI7XHJcbiAgaGVpZ2h0RmFjdG9yOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHdGYWN0b3I6IG51bWJlciwgaEZhY3RvcjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLndpZHRoRmFjdG9yID0gd0ZhY3RvcjtcclxuICAgIHRoaXMuaGVpZ2h0RmFjdG9yID0gaEZhY3RvcjtcclxuICB9XHJcblxyXG4gIHNjYWxlRG93bihzY2FsZTogbnVtYmVyKTogQ29tbW9uSW1hZ2VTY2FsZUZhY3RvcnMge1xyXG4gICAgcmV0dXJuIG5ldyBDb21tb25JbWFnZVNjYWxlRmFjdG9yc0ltcGwoXHJcbiAgICAgIHRoaXMud2lkdGhGYWN0b3IgKiBzY2FsZSxcclxuICAgICAgdGhpcy5oZWlnaHRGYWN0b3IgKiBzY2FsZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==