@obliczeniowo/elementary
Version:
Library made in Angular version 20
1 lines • 35.1 kB
Source Map (JSON)
{"version":3,"file":"obliczeniowo-elementary-files.mjs","sources":["../../../../projects/components/files/directives/drag-and-drop.directive.ts","../../../../projects/components/files/files.module.ts","../../../../projects/components/files/services/obl-file.service.ts","../../../../projects/components/files/services/json-file-system.service.ts","../../../../projects/components/files/classes/csv.ts","../../../../projects/components/files/obliczeniowo-elementary-files.ts"],"sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n Output,\n EventEmitter,\n ElementRef,\n Input,\n input\n} from '@angular/core';\n\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\nexport interface FileHandle {\n file: File;\n url: SafeUrl;\n}\n\nexport interface DragHandle {\n files: FileHandle[];\n evt: DragEvent;\n}\n\n@Directive({\n selector: '[oblDragAndDrop]',\n standalone: false\n})\nexport class DragAndDropDirective {\n /**\n * Change background color\n */\n @Input()\n @HostBinding('style.background') background: string = '#eee';\n\n /**\n * highlight when drag over\n */\n highlightColor = input<string>();\n\n /**\n * leave color\n */\n leaveColor = input<string>('#ffffff');\n\n /**\n * Emit DragHandle class object\n */\n @Output() files: EventEmitter<DragHandle> = new EventEmitter<DragHandle>();\n\n constructor(private readonly sanitizer: DomSanitizer, private readonly elementRef: ElementRef) { }\n\n @HostListener('mouseenter') onMouseEnter(): void {\n this.highlight(this.highlightColor());\n }\n\n @HostListener('mouseleave') onMouseLeave(): void {\n this.highlight(undefined);\n }\n\n private highlight(color?: string): void {\n this.elementRef.nativeElement.style.backgroundColor = color || this.leaveColor();\n }\n\n @HostListener('dragover', ['$event']) public onDragOver(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#999';\n }\n\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#eee';\n }\n\n @HostListener('drop', ['$event']) public onDrop(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#eee';\n\n const files: FileHandle[] = [];\n if (evt.dataTransfer) {\n for (let i = 0; i < evt.dataTransfer.files.length; i++) {\n const file = evt.dataTransfer.files[i];\n const url = this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(file));\n files.push({ file, url });\n }\n }\n if (files.length > 0) {\n this.files.emit({ files, evt });\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragAndDropDirective } from './directives/drag-and-drop.directive';\n\n@NgModule({\n declarations: [\n DragAndDropDirective\n ],\n imports: [\n CommonModule\n ],\n exports: [\n DragAndDropDirective\n ]\n})\nexport class FilesModule { }\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n\nimport { Inject, Injectable, DOCUMENT } from '@angular/core';\n\nexport type TextType = 'text/css' | 'text/csv' | 'text/json' | 'text/html' | 'text/javascript' | 'application/javascript' | 'application/json'\n | 'text/plain' | 'text/html' | 'image/svg+xml' | 'text/*';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OblFileService {\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n ) { }\n\n readTextFile(): Promise<string> {\n return this.readFile('text');\n }\n\n readFileAsDataUrl(): Promise<string> {\n return this.readFile('DataURL');\n }\n\n readFileAsArrayBuffer(): Promise<ArrayBuffer> {\n return this.readFile('ArrayBuffer');\n }\n\n loadJsonFile(url: string) {\n return fetch(url).then(resp => resp.json());\n }\n\n /**\n * Let you save text file on user device\n * @param text - text to save\n * @param textType - default text/plain\n */\n saveTextFile(\n text: string,\n fileName: string,\n textType: TextType = 'text/plain'\n ): void {\n const file = new window.Blob([text], { type: textType });\n\n this.saveBlobFile(file, fileName);\n }\n\n /**\n * Svg save file\n * @param svgContent\n * @param fileName\n */\n saveSvgFile(\n svgContent: string,\n fileName: string\n ): void {\n this.saveTextFile(svgContent, fileName, 'image/svg+xml')\n }\n\n /**\n * saving blob file\n */\n saveBlobFile(blob: Blob, fileName: string): void {\n const downloadAnchor = document.createElement('a');\n const fileURL = URL.createObjectURL(blob);\n\n downloadAnchor.href = fileURL;\n downloadAnchor.download = fileName;\n downloadAnchor.click();\n }\n\n /**\n * Create HTMLImageElement with loaded image as Promise\n */\n getImageFromUrl(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve, _reject) => {\n const image: HTMLImageElement = document.createElement('img') as HTMLImageElement;\n\n image.onload = () => {\n resolve(image);\n };\n\n image.src = url;\n });\n }\n\n /**\n * Reading file from user device\n * @param type - file type\n * @returns file\n */\n protected async readFile(type: 'text' | 'DataURL' | 'ArrayBuffer'): Promise<any> {\n return await new Promise((resolve, reject) => {\n const input = this.document.createElement('input');\n input.type = 'file';\n input.addEventListener('change', (event: any) => {\n const reader = new FileReader();\n reader.onload = (e: any) => {\n resolve(e.target.result);\n };\n switch (type) {\n case 'text':\n reader.readAsText(event.target.files[0]);\n break;\n case 'DataURL':\n reader.readAsDataURL(event.target.files[0]);\n break;\n case 'ArrayBuffer':\n reader.readAsArrayBuffer(event.target.files[0]);\n break;\n default:\n reject(new Error('Undefined type'));\n }\n });\n input.click();\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SystemResource } from '../models/system-resources.model';\nimport { SystemResourceType } from '../types/system-resource.type';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class JsonFileSystemService {\n /**\n * Maximum size of file as json string\n */\n protected maxSize = 300000;\n\n /**\n * field name\n */\n protected readonly resourcesField = 'systemResources';\n\n /**\n * Table of folders/files recovered from localeStorage\n */\n systemResources: SystemResource[] = [];\n\n constructor() {\n const localStorageResource = localStorage.getItem(this.resourcesField);\n\n if (localStorageResource) {\n this.systemResources = JSON.parse(localStorageResource);\n }\n }\n\n /**\n * Saving to localStorage\n */\n protected save(): void {\n localStorage.setItem(this.resourcesField, JSON.stringify(this.systemResources));\n }\n\n /**\n * Check if resource can be added\n * @param name name of resource file or folder\n * @param path path to resource\n * @param type type of resource: {@link SystemResourceType}\n * @param data data storage in resource required for files\n * @returns true if can be added, false if can't\n */\n checkResource(\n name: string,\n path = 'desktop',\n type: SystemResourceType = 'folder',\n // tslint:disable-next-line: ban-types\n data?: Object\n ): boolean {\n const find = this.systemResources.find(resource => resource.path === path &&\n resource.name === name &&\n resource.type === type\n );\n\n const findParent = path !== 'desktop' && this.systemResources.find(resource => resource.path) || true;\n\n if (find || !findParent || !data && type === 'file') {\n return false;\n }\n\n return true;\n }\n\n /**\n * Adding folder resource and update localStorage\n * @param name name of folder\n * @param path path to folder that contains resource\n * @param params external params\n * @returns true if added, or false fail\n */\n addFolder(\n name: string,\n path = 'desktop',\n params?: {\n x?: number,\n y?: number\n }\n ): boolean {\n if (!this.checkResource(name, path)) {\n return false;\n }\n\n this.systemResources.push({\n type: 'folder',\n name,\n path,\n x: params?.x || 0,\n y: params?.y || 0\n });\n\n this.save();\n\n return true;\n }\n\n /**\n * Adding the file to system and update localStorage\n * @param name name of file\n * @param data required data of file\n * @param appName name of app that will open this file\n * @param path path to folder\n * @param params optional parameters\n * @returns true if added, false other way\n */\n addFile(\n name: string,\n // tslint:disable-next-line: ban-types\n data: Object,\n appName: string,\n path: string = 'desktop',\n params?: {\n x?: number,\n y?: number\n }\n ): boolean {\n if (!this.checkResource(name, path, 'file', data)) {\n return false;\n }\n\n const strData = JSON.stringify(data);\n\n if (strData.length > this.maxSize) {\n return false;\n }\n\n this.systemResources.push(\n {\n name,\n data,\n path,\n appName,\n type: 'file',\n x: params?.x || 0,\n y: params?.y || 0\n }\n );\n\n this.save();\n\n return true;\n }\n\n /**\n * Return all resources in chosen path\n * @param path path to resources folder\n * @returns return resources storage in folder\n */\n getResources(path: string = 'desktop'): SystemResource[] {\n return this.systemResources.filter(resource => resource.path === path);\n }\n\n /**\n * Return folder from specific path\n */\n getFolder(path: string): false | SystemResource {\n const found = this.systemResources.find(resource => resource.name === path);\n\n return found || false;\n }\n\n /**\n * Check if resource can be updated and if so update it\n * @param resource resource to update\n */\n update(resource: SystemResource, newName?: string): void {\n const index = this.systemResources.findIndex(\n res => res.path === resource.path && res.name === resource.name && res.type === resource.type);\n\n if (\n index !== -1 &&\n !this.systemResources.find(\n (item, i) => item.path === resource.path &&\n item.type === resource.type &&\n item.name === newName &&\n i !== index\n )\n ) {\n if (newName) {\n resource.name = newName;\n }\n this.systemResources[index] = resource;\n this.save();\n }\n }\n\n /**\n * Check if folder path exist\n */\n pathFolderExist(path: string): boolean {\n if (path === 'desktop') {\n return true;\n }\n const folders = path.split('/');\n if (folders.length === 1) {\n return false;\n }\n const name = folders.pop();\n path = folders.join('/');\n\n return !!this.systemResources.find(item => item.path === path && name === item.name);\n }\n\n /**\n * Delete\n */\n delete(resource: SystemResource, saving = true): void {\n if (resource.type === 'folder') {\n this.getResources(resource.path + '/' + resource.name).forEach(\n res => this.delete(res, false)\n );\n }\n this.systemResources = this.systemResources.filter(res => !(res.name === resource.name &&\n res.type === resource.type &&\n res.path === resource.path)\n );\n\n if (saving) {\n this.save();\n }\n }\n}\n","import { ElementaryMath } from '@obliczeniowo/elementary/math';\n\nexport class Csv {\n /**\n * Static constructor that create Csv object from array\n * @param array array to convert to Csv object\n * @returns Csv object\n */\n static fromArray(\n array: (number | string | { [key: string]: any })[][],\n headers?: (number | string)[]\n ): Csv {\n const csv = new Csv(!!headers?.length);\n\n array.forEach((row) => {\n row.forEach((ceil, pos) => {\n const name = headers?.length && headers[pos] || pos\n csv.table.set(name, [...(csv.table.get(name) || []), ceil])\n })\n })\n\n return csv;\n }\n\n /**\n * Map object of columns containing array of values.\n *\n * By default system is parsing values to number or live as string. You can use columnParse field\n * to parse to any type you wanted (data, pare by JSON, or any other object)\n */\n table = new Map<string | number, (string | number | any)[]>();\n\n /**\n * errors to throw:\n * columns - if true throw error if number of columns is not equal in every row\n * headerNotAString - throw error when one of headers fields is not a string\n * empty - throw error when file contain empty string\n * columnParse - error when column contain improper format\n *\n * @example\n *\n * const file = await this.file.readTextFile();\n *\n * const csv = new Csv();\n *\n * csv.throwing.columnsParse['age'] = (value: string) => {\n * if (!ElementaryMath.isNumeric(value, true)) {\n * throw new Error(`Some value in \"col 2\" is not a number: \"${value}\"`);\n * }\n * };\n *\n * csv.throwing.columnsParse['zip'] = (value: string) => {\n * if (!ElementaryMath.isNumeric(value, true)) {\n * throw new Error(`Some value in \"zip\" is not a number: \"${value}\"`);\n * }\n *\n * if (!/^[0-9]{5,5}$/.test(value)) {\n * throw new Error(`Some value in \"zip\" have not 5 digits: \"${value}\"`);\n * }\n * }\n *\n * csv.parse(file, true);\n *\n * console.log(csv.table);\n */\n throwing: {\n columns?: boolean,\n headerNotAString?: boolean,\n empty?: boolean,\n columnsParse: { [key: string]: ((value: string) => void) },\n } = {\n columns: true,\n headerNotAString: false,\n empty: true,\n columnsParse: {}\n }\n\n /**\n * let you parse column however you want by adding key name corresponding to column name and parsing function\n *\n * @example\n *\n * const file = await this.file.readTextFile();\n *\n * const csv = new Csv();\n *\n * csv.columnsParse['zip'] = (value: string) => value.substring(0, 2) + '-' + value.substring(2);\n * csv.columnsParse['date'] = (value: string) => new Date(value);\n *\n * csv.parse(file, true);\n *\n * console.log(csv.table);\n */\n columnsParse: { [key: string | number]: ((value: string) => any) } = {};\n\n /**\n * let you prepare column to export to CSV clear format by using key name of column with method\n * that revers parsing method\n *\n * WARNING! If you use columnsParse you probably want to use this one as reverse process to CSV\n */\n columnsPrepare: { [key: string | number]: ((value: any) => string) } = {};\n\n /**\n * Default so call do nothing parsing string global method to override\n *\n * You can use parsing string static method from @obliczeniowo/elementary/parse call ParseString\n * or use totally own one\n *\n * @value - parsed string value\n */\n parseString: (value: string) => string = (value: string) => value;\n\n /**\n * Reverse method of parseString used to export back to CSV\n */\n prepareString: (value: any) => string = (value: any) => value.toString();\n\n constructor(\n public hasHeaders: boolean = false,\n public separator: string = ';'\n ) {\n }\n\n headers(): (string | number)[] {\n return Array.from(this.table.keys());\n }\n\n getRawRow(index: number): (string | number | any)[] {\n const line: any[] = [];\n this.table.forEach(column => {\n line.push(column[index]);\n })\n return line;\n }\n\n getJsonRow(index: number): { [key: string]: (string | number | any) } {\n const line: { [key: string]: (string | number | any) } = {};\n this.table.forEach((column, key) => {\n line[key] = column[index];\n })\n return line;\n }\n\n getColumn<T = (string | number | any)[]>(name: string): T {\n const value = this.table.get(name);\n\n if (!value) {\n throw new Error(`Column \"${name}\" not exist`);\n }\n\n return value as any;\n }\n\n parse(\n csvText: string,\n hasColumns: boolean = this.hasHeaders,\n separator: string = this.separator\n ) {\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n if (this.throwing.empty && (!csvText || !csvText.length)) {\n throw new Error('CSV file is empty');\n }\n\n let rows = csvText.search('\\r\\n') !== -1 && csvText.split('\\r\\n') || csvText.split('\\n');\n\n rows = rows.filter(row => row !== '');\n\n let headers: string[] = [];\n if (hasColumns) {\n headers = rows.shift()?.split(separator) || [];\n\n if (headers.length && this.throwing.headerNotAString) {\n const notNumber = headers.find(header => ElementaryMath.isNumeric(header, true));\n\n if (notNumber) {\n throw new Error(`Column name: ${notNumber} is a number`);\n }\n }\n }\n\n let length = headers.length;\n\n rows.forEach((row, rowIndex) => {\n const values = row.split(separator);\n\n if (!length) {\n length = values.length;\n }\n if (this.throwing.columns && length !== values.length) {\n throw new Error(`Error in line ${headers.length ? rowIndex + 2 : rowIndex + 1} of CSV file. Number of fields not equal to previous one`)\n }\n\n values.forEach((value, index) => {\n const id: any = headers[index] || index;\n const column = this.table.get(id) || [];\n if (this.throwing.columnsParse[id]) {\n this.throwing.columnsParse[id](value);\n }\n value = this.parseString(value);\n column.push(\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n this.columnsParse[id] && this.columnsParse[id](value) ||\n ElementaryMath.isNumeric(value, true) && parseFloat(value) ||\n value);\n this.table.set(id, column);\n })\n })\n }\n\n prepare(): string {\n let csv = '';\n const headers = this.headers();\n\n if (!headers.length) {\n throw new Error('Nothing to save');\n }\n\n if (this.hasHeaders) {\n csv += headers.join(this.separator) + '\\n';\n }\n\n const length = this.table.get(headers[0])?.length || 0;\n\n for (let row = 0; row < length; row++) {\n const record: string[] = [];\n this.table.forEach((column, key) => record.push(\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n this.columnsPrepare[key] && this.columnsPrepare[key](column[row]) ||\n this.prepareString(column[row]))\n );\n csv += record.join(this.separator) + '\\n';\n }\n\n return csv;\n }\n\n toJson(): { [key: string]: string }[] {\n const jsonObj: { [key: string]: string }[] = [];\n\n const headers = this.headers();\n\n if (!headers.length) {\n throw new Error('Nothing to save');\n }\n\n const length = this.table.get(headers[0])?.length || 0;\n\n for (let row = 0; row < length; row++) {\n const obj: { [key: string]: string } = {};\n this.table.forEach((column, key) => obj[key] =\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n this.columnsPrepare[key] && this.columnsPrepare[key](column[row]) ||\n this.prepareString(column[row]));\n jsonObj.push(obj);\n }\n return jsonObj;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}