@arsedizioni/ars-utils 18.1.19 → 18.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-clipper.ui.mjs","sources":["../../../projects/ars-utils/clipper.ui/ui/document/base/document-base.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document-menu/document-menu.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document-menu/document-menu.component.html","../../../projects/ars-utils/clipper.ui/ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/ui/references/references.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.html","../../../projects/ars-utils/clipper.ui/ui/search-dialog/search-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-dialog/search-dialog.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document-index/document-index.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document-index/document-index.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document.component.html","../../../projects/ars-utils/clipper.ui/ui/document/documents.ts","../../../projects/ars-utils/clipper.ui/ui/last-15-days/last-15-days.component.ts","../../../projects/ars-utils/clipper.ui/ui/last-15-days/last-15-days.component.html","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.html","../../../projects/ars-utils/clipper.ui/ui/browser-dialog/browser-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/browser-dialog/browser-dialog.component.html","../../../projects/ars-utils/clipper.ui/public_api.ts","../../../projects/ars-utils/clipper.ui/arsedizioni-ars-utils-clipper.ui.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { SendToDialogComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { saveAs } from 'file-saver';\r\nimport {\r\n ClipperService \r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n})\r\nexport class ClipperDocumentBaseComponent {\r\n constructor(\r\n public $dialog: DialogService,\r\n public $clipper: ClipperService\r\n ) { }\r\n\r\n /**\r\n * Export a document in pdf format\r\n * @param item : the document to export\r\n */\r\n exportPdf(item: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!item || item.model === 11) return;\r\n this.$dialog\r\n .confirm(\"Confermi l'esportazione?\", 'Attenzione!')\r\n .componentInstance.choosen.subscribe((r: any) => {\r\n if (r.result === 'ok') {\r\n let id = item.id || item.documentId;\r\n this.$dialog.busy('Esportazione in corso...');\r\n this.$clipper.exportPdf(id)\r\n .subscribe({\r\n next: (r2: any) => {\r\n saveAs(r2, (item.title1 ? item.title1 : id) + '.pdf');\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save current document list or just the selected documents as a csv\r\n * @param items: the item list\r\n * @param searchParams: the search params\r\n */\r\n exportItems(items: any, searchParams: any = null) {\r\n if (!this.$clipper.loggedIn) return;\r\n let ids: string[] = [];\r\n if (items) {\r\n items.forEach((n: any) => {\r\n ids.push(n.documentId)\r\n });\r\n }\r\n let model: any = { ids: ids, query: null, format: 1 };\r\n if (model.ids.length === 0) model.query = searchParams;\r\n this.$dialog.busy('Salvataggio in corso...');\r\n this.$clipper.export(model)\r\n .subscribe({\r\n next: (r) => {\r\n saveAs(r, 'elenco.csv');\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n\r\n addToBag(items: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n let ids: string[] = [];\r\n items.forEach((n: any) => {\r\n ids.push(n.id || n.documentId);\r\n });\r\n this.$clipper.addToBag(ids).subscribe(() => {\r\n this.$dialog.toast(\"Operazione completata con successo.\");\r\n });\r\n }\r\n\r\n /**\r\n * Show a document permalink\r\n * @param item : the item to show the link for\r\n */\r\n showLink(item: any) {\r\n if (!item) return;\r\n let id = item.id || item.documentId;\r\n let channels = item.channelName\r\n ? 'Canali: ' + item.channelName + '<br>'\r\n : '';\r\n let origin = item.origin\r\n ? 'Origine: ' +\r\n item.origin +\r\n ' ' +\r\n (item.originDescription ? item.originDescription : '') +\r\n '<br>'\r\n : '';\r\n let topics = item.topics ? 'Argomento: ' + item.topics + '<br>' : '';\r\n if (!id) return;\r\n let message =\r\n \"<p>Il link che trovi qui sotto è un riferimento diretto al documento selezionato.</p>\" +\r\n \"<p>Lo puoi utilizzare nella tua documentazione o inviarlo per email ad un tuo collega. La persona che desidererà visualizzare il documento dovrà necessariamente essere un utente abbonato.</p>\" +\r\n \"<p>Seleziona e copia (fai CTRL+C) il link qui sotto.</p>\" +\r\n \"<div class='small item-greyed-2'>\" +\r\n this.$clipper.serviceUri +\r\n '/?id=' +\r\n id +\r\n '</div>' +\r\n '<br>' +\r\n '<hr>' +\r\n '<p class=\"small\">' +\r\n channels +\r\n origin +\r\n topics +\r\n '</p>';\r\n\r\n this.$dialog.info(message, 'Copia link', 'CHIUDI');\r\n }\r\n\r\n /**\r\n * Send documents links by email\r\n * @param items : the document list\r\n */\r\n sendItemsTo(items: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!items || items.length === 0) return;\r\n let d = this.$dialog.open(SendToDialogComponent, {\r\n ariaLabel: 'invia documenti per email',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: {\r\n info:\r\n 'Puoi inviare i documenti a chi vuoi ma, per poterli visualizzare, è necessario essere un utente abbonato.',\r\n count: items.length,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n let ids: string[] = [];\r\n items.forEach((n: any) => {\r\n ids.push(n.id || n.documentId);\r\n });\r\n r.ids = ids;\r\n this.$dialog.busy('Invio in corso...');\r\n this.$clipper.sendTo(r)\r\n .subscribe({\r\n next: (r2: any) => {\r\n if (!r2.success) this.$dialog.error(r2.message);\r\n else {\r\n this.$dialog.toast('Invio completato con successo.');\r\n\r\n // Finished\r\n d.close();\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param documentId : the document id\r\n * @param title: the document short title\r\n */\r\n openReport(documentId: string, title: string = null) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!documentId) return;\r\n this.$clipper.report(documentId)\r\n .subscribe({\r\n next: (r) => {\r\n saveAs(r, (title ? title : documentId) + '.html');\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport {\r\n ClipperDefinitions,\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\nexport interface ClipperFacet {\r\n type: number;\r\n typeName: string;\r\n title: string;\r\n value: string;\r\n count: number;\r\n}\r\n\r\ninterface ClipperFacetGroup {\r\n name: string;\r\n selectedValue: string;\r\n selectedValueDescription: string;\r\n values: ClipperFacet[];\r\n index: number;\r\n}\r\n\r\nexport class ClipperSearchFacetsSnapshot {\r\n groups: ClipperFacetGroup[] = [];\r\n usedGroups: ClipperFacetGroup[] = [];\r\n hasFacets: boolean = false;\r\n sector?: string = null;\r\n author?: string = null;\r\n anchor?: string = null;\r\n type?: string = null;\r\n reason?: string = null;\r\n fromDate?: Date = null;\r\n toDate?: Date = null;\r\n interval?: string = null;\r\n}\r\n\r\n@Component({\r\n selector: 'clipper-search-facets',\r\n templateUrl: './search-facets.component.html',\r\n styleUrls: ['./search-facets.component.scss'],\r\n standalone: true,\r\n imports: [FlexModule, MatButtonModule, MatTooltipModule, MatIconModule, MatDividerModule, MatExpansionModule]\r\n})\r\nexport class ClipperSearchFacetsComponent {\r\n @Input() busy: boolean = false;\r\n @Output() changed = new EventEmitter<void>();\r\n\r\n groups: ClipperFacetGroup[] = [];\r\n usedGroups: ClipperFacetGroup[] = [];\r\n hasFacets: boolean = false;\r\n hasTooManyResults: boolean = true;\r\n sector: string = null;\r\n author: string = null;\r\n anchor: string = null;\r\n type: string = null;\r\n reason: string = null;\r\n fromDate: Date = null;\r\n toDate: Date = null;\r\n interval: string = null;\r\n changedInterval: boolean = false;\r\n changedSector: boolean = false;\r\n changedAuthor: boolean = false;\r\n changedAnchor: boolean = false;\r\n changedType: boolean = false;\r\n changedReason: boolean = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Update facets\r\n * @param values : the facets values\r\n * @param interval : the date interval for YEAR facets\r\n */\r\n update(values: ClipperFacet[][] = null, interval: string = null) {\r\n this.interval = interval;\r\n if (values) {\r\n this.groups = [];\r\n values.forEach((n) => {\r\n let name = n[0].typeName;\r\n let index = n[0].type;\r\n let i = SystemUtils.arrayFindIndexByKey(\r\n this.usedGroups,\r\n 'index',\r\n index);\r\n let j = SystemUtils.arrayFindIndexByKey(\r\n this.groups,\r\n 'index',\r\n index\r\n );\r\n if (i === -1 && j === -1) {\r\n this.groups.push({\r\n name: name,\r\n selectedValue: null,\r\n selectedValueDescription: null,\r\n values: n,\r\n index: index,\r\n });\r\n } else {\r\n if (this.usedGroups[i].values.length > 1) {\r\n // Different contents, remove used groupds, and add groups\r\n this.usedGroups.splice(i, 1);\r\n if (j === -1) {\r\n this.groups.push({\r\n name: name,\r\n selectedValue: null,\r\n selectedValueDescription: null,\r\n values: n,\r\n index: index,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.hasFacets = this.groups.length > 0 || this.usedGroups.length > 0;\r\n }\r\n\r\n /**\r\n * Save snapshot\r\n */\r\n saveSnapshot(): ClipperSearchFacetsSnapshot {\r\n return {\r\n groups: this.groups,\r\n usedGroups: this.usedGroups,\r\n hasFacets: this.hasFacets,\r\n sector: this.sector,\r\n author: this.author,\r\n anchor: this.anchor,\r\n type: this.type,\r\n reason: this.reason,\r\n fromDate: this.fromDate,\r\n toDate: this.toDate,\r\n interval: this.interval\r\n };\r\n }\r\n\r\n /**\r\n * Restore from snapshot\r\n */\r\n restoreFromSnapshot(snapshot: ClipperSearchFacetsSnapshot) {\r\n (this.groups = snapshot.groups),\r\n (this.usedGroups = snapshot.usedGroups),\r\n (this.hasFacets = snapshot.hasFacets),\r\n (this.sector = snapshot.sector),\r\n (this.author = snapshot.author),\r\n (this.anchor = snapshot.anchor),\r\n (this.type = snapshot.type),\r\n (this.reason = snapshot.reason),\r\n (this.fromDate = snapshot.fromDate),\r\n (this.toDate = snapshot.toDate),\r\n (this.interval = snapshot.interval);\r\n this.update();\r\n }\r\n\r\n /**\r\n * Reset current object using a previous one\r\n */\r\n restoreFrom(old: ClipperSearchFacetsComponent) {\r\n this.groups = old.groups;\r\n this.usedGroups = old.usedGroups;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Use a facet item as filter\r\n * @param group : the facet group\r\n * @param item : the facet item\r\n */\r\n use(group: ClipperFacetGroup, item: ClipperFacet) {\r\n group.selectedValue = item.value;\r\n group.selectedValueDescription = item.title;\r\n let j = SystemUtils.arrayFindIndexByKey(this.groups, 'index', group.index);\r\n if (j !== -1) {\r\n this.groups.splice(j, 1);\r\n let updated = false;\r\n this.usedGroups.forEach((n, i) => {\r\n if (!updated && n.index > group.index) {\r\n this.usedGroups.splice(i, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) this.usedGroups.push(group);\r\n }\r\n this.apply();\r\n }\r\n\r\n /**\r\n * dismiss a facet group filter\r\n * @param group : the facet group\r\n * @param apply : true to emit changed event and generate a new search, false just for update\r\n */\r\n dismiss(group: ClipperFacetGroup, apply: boolean = true) {\r\n group.selectedValue = null;\r\n group.selectedValueDescription = null;\r\n let i = SystemUtils.arrayFindIndexByKey(this.usedGroups, 'index', group.index);\r\n if (i !== -1) {\r\n this.usedGroups.splice(i, 1);\r\n let updated = false;\r\n this.groups.forEach((n, j) => {\r\n if (!updated && n.index > group.index) {\r\n this.groups.splice(j, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) this.groups.push(group);\r\n }\r\n if (apply) this.apply();\r\n }\r\n\r\n /**\r\n * Apply filter\r\n */\r\n private apply() {\r\n if (this.usedGroups.length > 0) {\r\n this.usedGroups.forEach((n: any) => {\r\n if (n.index === ClipperDefinitions.FAC_YEAR) {\r\n this.fromDate = new Date(parseInt(n.selectedValue), 0, 1, 12, 0, 0);\r\n this.toDate = new Date(parseInt(n.selectedValue), 11, 31, 12, 0, 0);\r\n } else if (n.index === ClipperDefinitions.FAC_SECTOR) {\r\n this.sector = n.selectedValue;\r\n } else if (n.index === ClipperDefinitions.FAC_AUTHOR) {\r\n this.author = n.selectedValue;\r\n } else if (n.index === ClipperDefinitions.FAC_DOCUMENTTYPE) {\r\n this.type = n.selectedValue;\r\n } else if (n.index === ClipperDefinitions.FAC_ARTICLE) {\r\n this.anchor = n.selectedValue;\r\n } else if (n.index === ClipperDefinitions.FAC_REASON) {\r\n this.reason = n.selectedValue;\r\n }\r\n });\r\n }\r\n if (this.groups.length > 0) {\r\n this.groups.forEach((n: any) => {\r\n if (n.index === ClipperDefinitions.FAC_YEAR) {\r\n this.changedInterval = this.fromDate !== null;\r\n this.fromDate = null;\r\n this.toDate = null;\r\n } else if (n.index === ClipperDefinitions.FAC_SECTOR) {\r\n this.changedSector = this.sector !== null;\r\n this.sector = null;\r\n } else if (n.index === ClipperDefinitions.FAC_AUTHOR) {\r\n this.changedAuthor = this.author !== null;\r\n this.author = null;\r\n } else if (n.index === ClipperDefinitions.FAC_DOCUMENTTYPE) {\r\n this.changedType = this.type !== null;\r\n this.type = null;\r\n } else if (n.index === ClipperDefinitions.FAC_ARTICLE) {\r\n this.changedAnchor = this.anchor !== null;\r\n this.anchor = null;\r\n } else if (n.index === ClipperDefinitions.FAC_REASON) {\r\n this.changedReason = this.reason !== null;\r\n this.reason = null;\r\n }\r\n });\r\n }\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Clear facets by group index\r\n * @param index : the group index to clear. Use -1 to clear all groups at once\r\n * @returns : the number of groups dismissed\r\n */\r\n clear(index: number = -1): number {\r\n let dismissed = 0;\r\n this.usedGroups.forEach((n: any) => {\r\n if (index === -1 || index === n.index) {\r\n if (n.index === ClipperDefinitions.FAC_YEAR) {\r\n this.changedInterval = true;\r\n this.fromDate = null;\r\n this.toDate = null;\r\n } else if (n.index === ClipperDefinitions.FAC_SECTOR) {\r\n this.changedSector = true;\r\n this.sector = null;\r\n } else if (n.index === ClipperDefinitions.FAC_AUTHOR) {\r\n this.changedAuthor = true;\r\n this.author = null;\r\n } else if (n.index === ClipperDefinitions.FAC_DOCUMENTTYPE) {\r\n this.changedType = true;\r\n this.type = null;\r\n } else if (n.index === ClipperDefinitions.FAC_ARTICLE) {\r\n this.changedAnchor = true;\r\n this.anchor = null;\r\n } else if (n.index === ClipperDefinitions.FAC_REASON) {\r\n this.changedReason = true;\r\n this.reason = null;\r\n }\r\n this.dismiss(n, false);\r\n dismissed++;\r\n }\r\n });\r\n if (dismissed) this.changed.emit();\r\n\r\n return dismissed;\r\n }\r\n\r\n /**\r\n * Reset\r\n */\r\n reset() {\r\n this.groups = [];\r\n this.usedGroups = [];\r\n this.hasFacets = false;\r\n this.fromDate = null;\r\n this.toDate = null;\r\n this.sector = null;\r\n this.author = null;\r\n this.anchor = null;\r\n this.type = null;\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxFill style=\"overflow: hidden;\">\r\n <div>\r\n @if (usedGroups.length > 0) {\r\n<div class=\"small\" style=\"padding-left: 15px\">\r\n <div>Selezione:</div>\r\n <div class=\"facets-selection\">\r\n @for (ug of usedGroups; track ug) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed-1 bold\">{{ug.name}}:</div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small truncated bold\">\r\n <div>{{ug.selectedValueDescription}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button class=\"small-icon-button\" matTooltip=\"Rimuovi\"\r\n (click)=\"dismiss(ug)\" color=\"primary\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n <mat-divider></mat-divider>\r\n </div>\r\n}\r\n @if (busy) {\r\n<div style=\"padding: 15px\">\r\n <p>Sto calcolando...</p>\r\n </div>\r\n}\r\n </div>\r\n @if (!busy) {\r\n<div fxFlex=\"100\" style=\"overflow: auto\">\r\n <div class=\"facets-items-container\">\r\n @for (group of groups; track group; let i = $index) {\r\n <mat-accordion displayMode=\"flat\" class=\"mat-elevation-z0\">\r\n <mat-expansion-panel class=\"facets-panel mat-elevation-z0\" [expanded]=\"i == 0\" hideToggle=\"false\">\r\n <mat-expansion-panel-header class=\"facets-header\" [collapsedHeight]=\"'40px'\" [expandedHeight]=\"'40px'\"\r\n [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && interval) {\r\n<div style=\"width: 180px\">{{interval}} &nbsp;\r\n ({{group.values.length}})\r\n </div>\r\n}\r\n @if (group.index != 2 || !interval) {\r\n<div style=\"width: 180px\">{{group.name}} &nbsp;\r\n ({{group.values.length}}) </div>\r\n}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <div style=\"width:100%\"></div>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track item) {\r\n <li class=\"small\" (click)=\"use(group, item)\"\r\n [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill fxFlexAlign=\"center\">\r\n <div fxFlex=\"*\" class=\"truncated\">\r\n <div>{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n {{hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n}\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n}\r\n </div>\r\n </div>\r\n}\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport {\r\n ClipperDefinitions,\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\n\r\n@Component({\r\n selector: 'clipper-document-menu',\r\n templateUrl: './document-menu.component.html',\r\n styleUrls: ['./document-menu.component.scss'],\r\n standalone: true,\r\n imports: [\r\n \r\n MatMenuModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatTooltipModule,\r\n ],\r\n})\r\nexport class ClipperDocumentMenuComponent implements OnInit {\r\n\r\n @Input() selectionSource: string;\r\n @Input() parent: any;\r\n @Input() item: any;\r\n @Input() isReference: boolean = false;\r\n @Input() isReadable: boolean = true;\r\n @Input() isSelectable: boolean = false;\r\n @Input() isDeadline: boolean = false;\r\n @Input() isLawInForce: boolean = false;\r\n @Input() isLaw: boolean = false;\r\n\r\n selection: any = null;\r\n\r\n constructor(public $clipper: ClipperService) {\r\n }\r\n\r\n ngOnInit() {\r\n switch (this.selectionSource) {\r\n case 'selection':\r\n this.selection = this.parent.selection.all;\r\n break;\r\n case 'bag':\r\n this.selection = this.$clipper.bag;\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n */\r\n clearSelection() {\r\n this.parent.selection.clear();\r\n }\r\n\r\n\r\n /**\r\n* Checks if all documents are supported by RS\r\n* @param documents : the list of documens\r\n* @returns: true if all documents supports RS\r\n*/\r\n RS_enabled(documents: any): boolean {\r\n if (!documents) return false;\r\n let allow = false;\r\n documents.forEach((n: any) => {\r\n allow = n.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||\r\n n.model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO ||\r\n n.model === ClipperDefinitions.DM_SCADENZA;\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n}","@if (selectionSource === 'selection') {\r\n<button mat-menu-item (click)=\"clearSelection()\"\r\n [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n}\r\n@if (selectionSource === 'bag') {\r\n<button mat-menu-item (click)=\"parent.manageBag()\"\r\n [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item || (selection && selection.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent.open(item ? item.documentId : selection[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (selectionSource !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent.addToBag(item ? [item] : selection)\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item || (selection && selection.length > 1))) {\r\n<button mat-menu-item (click)=\"parent.sendTo(item ? item : null)\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item && item.model != 11) || (selection && selection.length === 1 && selection[0].model != 11))) {\r\n<button mat-menu-item\r\n \r\n (click)=\"parent.exportPdf(item ? item : selection[0])\" [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent.showLink(item ? item : selection[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n@if ((isLawInForce || isDeadline) && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent.report(item ? item : selection[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent.references(item ? item : selection[0], 1)\">\r\n Documenti richiamati\r\n </button>\r\n}\r\n @if ( !isReference &&(item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent.references(item ? item : selection[0], 2)\">\r\n Documenti che richiamano\r\n </button>\r\n}\r\n @if (!isReference && isLawInForce && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"parent.references(item ? item : selection[0], 4)\">\r\n Juris\r\n </button>\r\n}\r\n @if (!isReference && isLawInForce && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra modifiche normative'\" (click)=\"parent.references(item ? item : selection[0], 3)\">\r\n Modifiche\r\n</button>\r\n}\r\n</mat-menu>\r\n@if ((item || selection?.length > 0) && RS_enabled(item ? [item] : selection) && !isSelectable) {\r\n<mat-divider ></mat-divider>\r\n} \r\n@if ((item || selection?.length > 0) && RS_enabled(item ? [item] : selection) && !isSelectable) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\"\r\n [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\" [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n}\r\n <mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent.RS_newLaw(item)\">\r\n Nuova legge\r\n </button>\r\n @if (item || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"parent.RS_newActivity(item)\">\r\n Nuova attività\r\n </button>\r\n}\r\n @if (item || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent.RS_usageReport(item)\">\r\n Report utilizzo norma\r\n </button>\r\n}\r\n </mat-menu>\r\n","import { Component, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MediaChange, MediaObserver } from '@ngbracket/ngx-layout';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent } from '@angular/material/dialog';\r\nimport { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { DateFormat, ScreenService, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { startOfDay, startOfToday, subDays } from 'date-fns'\r\nimport { ClipperDocumentBaseComponent } from '../document/base/document-base.component';\r\nimport {\r\n ClipperDefinitions,\r\n ClipperService,\r\n DocumentReferenceSnapshot\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport saveAs from 'file-saver';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { ClipperDocumentMenuComponent } from '../document/document-menu/document-menu.component';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { NgStyle, NgClass } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './references.component.html',\r\n styleUrls: ['./references.component.scss'],\r\n standalone: true,\r\n imports: [\r\n FlexModule,\r\n MatDialogTitle,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n \r\n MatCheckboxModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatBadgeModule,\r\n ClipperDocumentMenuComponent,\r\n MatDialogContent,\r\n NgStyle,\r\n ExtendedModule,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperSearchFacetsComponent,\r\n \r\n NgClass,\r\n MatPaginatorModule,\r\n ],\r\n})\r\nexport class ClipperReferencesComponent extends ClipperDocumentBaseComponent\r\n implements OnInit, OnDestroy {\r\n @ViewChild('facetsSidenav') facetsSidenav : MatSidenav;\r\n @ViewChild('facetsSearch') facetsSearch : ClipperSearchFacetsComponent;\r\n @ViewChild('paginator') paginator!: MatPaginator;\r\n @ViewChild('contextMenuTrigger') contextMenu!: MatMenuTrigger;\r\n\r\n private __d$: Subject<void> = new Subject<void>();\r\n\r\n title: string = null;\r\n selection: SelectableModel<any, string> = new SelectableModel(true, 'documentId');\r\n snapshot: DocumentReferenceSnapshot = null;\r\n facetsMode: string = 'side';\r\n facetsClosed: boolean = false;\r\n contentHeight: number = null;\r\n contextMenuPosition = { x: '0px', y: '0px' };\r\n mq: string = null;\r\n anchor: string = null;\r\n item: any = null;\r\n\r\n constructor(\r\n public $dialog: DialogService,\r\n public $clipper: ClipperService,\r\n public $screen: ScreenService,\r\n private media: MediaObserver,\r\n private dialogRef: MatDialogRef<ClipperReferencesComponent>,\r\n @Inject(MAT_DIALOG_DATA) _data: any\r\n ) {\r\n super($dialog, $clipper);\r\n\r\n // Choose the title\r\n switch (_data.mode) {\r\n case ClipperDefinitions.SM_REFERENCES_IN:\r\n this.title = 'Documenti richiamati nelle note o nel testo';\r\n break;\r\n case ClipperDefinitions.SM_REFERENCES_OUT:\r\n this.title = 'Documenti che richiamano quello in visione';\r\n break;\r\n case ClipperDefinitions.SM_CHANGES_IN:\r\n this.title = 'Modifiche subite';\r\n break;\r\n case ClipperDefinitions.SM_CHANGES_OUT:\r\n this.title = 'Modifiche apportate';\r\n break;\r\n case ClipperDefinitions.SM_JURIS:\r\n this.title = 'Giurisprudenza associata';\r\n break;\r\n }\r\n if (_data.anchorTitle) this.title += ' - ' + _data.anchorTitle;\r\n\r\n this.anchor = _data.anchor;\r\n\r\n // Use service snapshot\r\n this.snapshot = $clipper.referencesSnapshot;\r\n if (!this.snapshot)\r\n this.snapshot = {\r\n searchParams: {},\r\n };\r\n if (\r\n this.snapshot.searchParams.mode !== _data.mode ||\r\n this.snapshot.searchParams.documentId !== _data.id ||\r\n this.snapshot.searchParams.anchor !== _data.anchor\r\n ) {\r\n this.snapshot.searchParams = {\r\n mode: _data.mode,\r\n model: _data.model,\r\n anchor: _data.anchor,\r\n documentId: _data.id,\r\n useModifierInfo: _data.mode === ClipperDefinitions.SM_CHANGES_OUT,\r\n returnModifierInfo: _data.mode !== ClipperDefinitions.SM_CHANGES_OUT,\r\n first: 0,\r\n count: 25,\r\n };\r\n\r\n // Store snapshot\r\n $clipper.referencesSnapshot = this.snapshot;\r\n\r\n // New search\r\n this.fetch(true);\r\n } else {\r\n setTimeout(() => {\r\n // Display current snapshot facets if necessary\r\n this.displayFacets();\r\n this.restoreScrollPosition();\r\n }, 250);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n // React to media query changes\r\n this.media\r\n .asObservable()\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe((changes: MediaChange[]) => {\r\n this.mq = changes[0].mqAlias;\r\n this.updateFacetsVisibility();\r\n });\r\n this.updateFacetsVisibility();\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe(() => {\r\n // Update view\r\n this.updateView();\r\n });\r\n this.adjustView();\r\n\r\n setTimeout(() => {\r\n // React to sidenav state change\r\n if (this.facetsSidenav)\r\n this.facetsSidenav.openedChange\r\n .subscribe(() => {\r\n this.adjustView();\r\n });\r\n\r\n // Configure facet seach component\r\n if (this.facetsSearch) {\r\n this.facetsSearch.changed.subscribe(() => {\r\n if (this.facetsSearch.fromDate) {\r\n this.snapshot.searchParams.fromDate = this.facetsSearch.fromDate;\r\n this.snapshot.searchParams.toDate = this.facetsSearch.toDate;\r\n this.snapshot.searchParams.year = this.facetsSearch.fromDate.getFullYear();\r\n } else if (this.facetsSearch.changedInterval) {\r\n this.snapshot.searchParams.year = null;\r\n this.snapshot.searchParams.fromDate = null;\r\n this.snapshot.searchParams.toDate = null;\r\n }\r\n if (this.facetsSearch.sector || this.facetsSearch.changedSector)\r\n this.snapshot.searchParams.sector = this.facetsSearch.sector;\r\n if (this.facetsSearch.type || this.facetsSearch.changedType)\r\n this.snapshot.searchParams.type = this.facetsSearch.type;\r\n if (this.facetsSearch.author || this.facetsSearch.changedAuthor)\r\n this.snapshot.searchParams.author = this.facetsSearch.author;\r\n if (this.facetsSearch.reason || this.facetsSearch.changedReason)\r\n this.snapshot.searchParams.reason = this.facetsSearch.reason;\r\n this.snapshot.searchParams.anchor = this.facetsSearch.anchor\r\n ? this.facetsSearch.anchor\r\n : this.anchor;\r\n this.fetch(true);\r\n });\r\n }\r\n }, 250);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.__d$.next();\r\n this.__d$.complete();\r\n }\r\n\r\n onContextMenu(event: MouseEvent, item: any) {\r\n event.preventDefault();\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n this.contextMenu.menuData = { item: item };\r\n this.contextMenu.openMenu();\r\n }\r\n\r\n /**\r\n * Close dialog\r\n */\r\n close() {\r\n this.saveScrollPosition();\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Save scroll position\r\n */\r\n saveScrollPosition() {\r\n this.$clipper.scrollable.savePosition(\r\n this.snapshot.searchParams.documentId,\r\n '#references_container'\r\n );\r\n }\r\n\r\n /**\r\n * Reset scroll position\r\n */\r\n resetScrollPosition() {\r\n document.querySelector('#references_container').scrollTo(0, 0);\r\n }\r\n\r\n /**\r\n * Restore scroll position\r\n */\r\n restoreScrollPosition() {\r\n this.$clipper.scrollable.tryRestorePosition(\r\n this.snapshot.searchParams.documentId,\r\n '#references_container'\r\n );\r\n }\r\n\r\n /**\r\n * Update menu buttons visibility when the menu is closed\r\n */\r\n updateMenuButtonsVisibility() {\r\n this.snapshot.items.forEach((n: any) => {\r\n n.isMenuOpen = false;\r\n });\r\n }\r\n\r\n /**\r\n * Adjust view\r\n */\r\n adjustView() {\r\n setTimeout(() => {\r\n this.updateView();\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Update view\r\n */\r\n updateView() {\r\n // Update router height\r\n let a = window.innerHeight;\r\n let b = document.getElementById('clipper-references-fixed');\r\n try {\r\n if (!a || !b || a === 0) this.adjustView();\r\n let hb = b.clientHeight;\r\n if (hb === 0) this.adjustView();\r\n this.contentHeight = a - (hb + 12);\r\n } catch { }\r\n }\r\n\r\n /**\r\n * Update sidenav visibility\r\n * @param mq : the current media query\r\n */\r\n updateFacetsVisibility() {\r\n if (this.mq === 'xs') {\r\n this.facetsMode = 'over';\r\n if (\r\n this.facetsSearch &&\r\n this.facetsSearch.hasFacets &&\r\n this.facetsSidenav &&\r\n this.facetsSidenav.opened\r\n )\r\n this.facetsSidenav.close();\r\n } else {\r\n this.facetsMode = 'side';\r\n if (\r\n this.facetsSearch &&\r\n this.facetsSearch.hasFacets &&\r\n this.facetsSidenav &&\r\n !this.facetsClosed\r\n )\r\n this.facetsSidenav.toggle(true);\r\n }\r\n }\r\n\r\n /**\r\n * Open facetsSidenav sidebar\r\n */\r\n facetsOpen() {\r\n this.facetsClosed = false;\r\n this.facetsSidenav.open();\r\n }\r\n\r\n /**\r\n * Close facets sidebar\r\n * @param closedManually : ture if facets has been closed manually by clicking the button\r\n */\r\n facetsClose(closedManually: boolean = false) {\r\n if (this.mq !== 'xs') this.facetsClosed = closedManually;\r\n this.facetsSidenav.close();\r\n }\r\n\r\n /**\r\n * Export a document in pdf format\r\n * @param item : the document to export\r\n */\r\n exportPdf(item: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!item || item.model === 11) return;\r\n this.$dialog\r\n .confirm(\"Confermi l'esportazione?\", 'Attenzione!')\r\n .componentInstance.choosen\r\n .subscribe((r: any) => {\r\n if (r.result === 'ok') {\r\n this.$dialog.busy('Esportazione in corso...');\r\n this.$clipper\r\n .exportPdf(item.documentId)\r\n .subscribe({\r\n next: (r2: any) => {\r\n saveAs(\r\n r2,\r\n (item.title1 ? item.title1 : item.documentId) + '.pdf'\r\n );\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Send document links by email\r\n * @param item : the item to add\r\n */\r\n sendTo(item: any = null) {\r\n this.sendItemsTo(item ? [item] : this.selection.all);\r\n }\r\n\r\n /**\r\n * Perform a search\r\n * @param newSearch: true if is a new search\r\n */\r\n fetch(newSearch: boolean = false) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (newSearch) this.snapshot.searchParams.first = 0;\r\n this.snapshot.searchParams.useModifierInfo =\r\n this.snapshot.searchParams.mode === ClipperDefinitions.SM_CHANGES_OUT;\r\n this.snapshot.searchParams.returnModifierInfo =\r\n this.snapshot.searchParams.mode !== ClipperDefinitions.SM_CHANGES_OUT;\r\n this.$dialog.busy('Ricerca in corso...');\r\n this.$clipper.references(this.snapshot.searchParams)\r\n .subscribe({\r\n next: (r) => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else {\r\n const today = startOfToday();\r\n let group = ''; \r\n this.snapshot.total = r.value?.total ?? 0;\r\n this.snapshot.items = r.value?.items ?? []; \r\n this.snapshot.items.forEach((n: any) => {\r\n if (\r\n n.model === ClipperDefinitions.DM_SCADENZA ||\r\n n.model === ClipperDefinitions.DM_SEGNALAZIONE\r\n ) {\r\n switch (n.model) {\r\n case ClipperDefinitions.DM_SCADENZA:\r\n n.originDescription = 'Scadenza';\r\n break;\r\n case ClipperDefinitions.DM_SEGNALAZIONE:\r\n n.originDescription = 'Segnalazione';\r\n break;\r\n }\r\n if (n.expiringInfo) {\r\n let parts = n.expiringInfo.split('|');\r\n if (parts.length === 3) n.description = parts[2];\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15))\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n }\r\n } else {\r\n if (n.date) {\r\n n.date = startOfDay(new Date(n.date));\r\n const d = startOfDay(subDays(startOfToday(), 7))\r\n n.isNew = n.date > d;\r\n }\r\n if (n.anchors) {\r\n let anchorType: number;\r\n let anchors: any = [];\r\n n.anchors.forEach((a: any) => {\r\n if (a.type === 20) return;\r\n if (a.type !== anchorType) {\r\n if (a.type >= 3)\r\n anchors.push({ text: a.typeDescription });\r\n anchorType = a.type;\r\n }\r\n let score = a.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n anchors.push({\r\n text: a.text,\r\n title: a.title,\r\n documentId: a.documentId,\r\n uri: a.uri,\r\n veryRelevant: score > 0.6,\r\n });\r\n });\r\n n.anchors = anchors;\r\n }\r\n if (n.validityState > 0) {\r\n n.validityDescription = 'Il documento non è più vigente';\r\n n.isExpired = true;\r\n if (n.validUntilDate) {\r\n const expiringDate = startOfDay(new Date(n.validUntilDate));\r\n if (expiringDate < today) {\r\n n.validityDescription =\r\n 'Il documento non è più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n } else {\r\n n.validityDescription =\r\n 'Il documento non sarà più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n n.isExpired = false;\r\n }\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n n.isExpired = n.date < today;\r\n }\r\n }\r\n let year = SystemUtils.formatDate(n.date, DateFormat.LongMonthAndYear).toLowerCase();\r\n if (group !== year) {\r\n n.group = year;\r\n group = year;\r\n }\r\n if (n.taxonomy) {\r\n n.taxonomyNodes = n.taxonomy.split('\\r\\n');\r\n if (\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_GUIDA ||\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_GUIDA_NORMATIVA ||\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI\r\n ) {\r\n for (let i = 0; i < n.taxonomyNodes.length; i++) {\r\n let node = n.taxonomyNodes[i];\r\n let p = node.indexOf('>');\r\n if (p !== -1)\r\n n.taxonomyNodes[i] = node\r\n .substring(p + 1)\r\n .replace(/\\>/gi, ' > ');\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Handle facets\r\n if (this.snapshot.total > 0) {\r\n if (newSearch)\r\n // Update facets\r\n this.displayFacets(this.snapshot.searchParams);\r\n } else {\r\n this.facetsSearch.reset();\r\n this.facetsSidenav.close();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n }\r\n\r\n this.resetScrollPosition();\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: any) {\r\n let first = e.pageIndex * this.snapshot.searchParams.count;\r\n this.snapshot.searchParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param searchParams : the current search params to use to gather facets or null to use current snapshot\r\n */\r\n displayFacets(searchParams: any = null) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (searchParams) {\r\n this.facetsSearch.busy = true;\r\n this.$clipper.referencesFacets(searchParams)\r\n .subscribe({\r\n next: (r) => {\r\n if (r.success) {\r\n this.facetsSearch.update(r.value.facets, null);\r\n if (\r\n this.facetsSearch.hasFacets &&\r\n !this.facetsClosed &&\r\n this.mq !== 'xs'\r\n )\r\n this.facetsOpen();\r\n else this.facetsClose();\r\n this.snapshot.facets = this.facetsSearch;\r\n }\r\n\r\n this.resetScrollPosition();\r\n },\r\n complete: () => {\r\n this.facetsSearch.busy = false;\r\n }\r\n });\r\n } else if (this.snapshot.facets) {\r\n this.facetsSearch.restoreFrom(this.snapshot.facets);\r\n if (this.facetsSearch.hasFacets && !this.facetsClosed && this.mq !== 'xs')\r\n this.facetsOpen();\r\n else this.facetsClose();\r\n }\r\n }\r\n\r\n /**\r\n * Close current dialog and return the id to navigate to\r\n * @param id : the document id\r\n */\r\n open(id: string) {\r\n this.dialogRef.close({ id: id });\r\n }\r\n}\r\n","<div id=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxFill style=\"padding: 0 0 0 15px;\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n @if (snapshot.searchParams.mode == 1) {\r\n <mat-checkbox color=\"primary\" name=\"excludeTextReferences\"\r\n [(ngModel)]=\"snapshot.searchParams.excludeTextReferences\" (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note</mat-checkbox>\r\n }\r\n @if (snapshot.searchParams.mode == 2) {\r\n <mat-checkbox color=\"primary\" name=\"excludeNotesReferences\"\r\n [(ngModel)]=\"snapshot.searchParams.excludeNotesReferences\" (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\" color=\"primary\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (facetsSearch && facetsSearch.hasFacets && facetsSidenav && (!facetsSidenav.opened || facetsClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"facetsOpen()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content style=\"padding:0 0 0 15px\" [ngStyle]=\"{'min-height.px': contentHeight}\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': contentHeight}\">\r\n <mat-sidenav #facetsSidenav position=\"end\" autoFocus=\"false\" opened=\"false\" mode=\"{{facetsMode}}\"\r\n class=\"sidenav sidenav-facets\">\r\n @if (facetsSearch.busy) {\r\n <div class=\"sidenav-overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"height:5px\">\r\n @if (facetsSearch.busy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"64px\">\r\n <div fxLayout=\"row\" fxFill class=\"sidenav-title-container\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" fxLayoutAlign=\"start\">\r\n <span class=\"sidenav-title\">Affina ricerca</span>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Nascondi\"\r\n (click)=\"facetsClose(true)\" color=\"primary\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow: hidden;\">\r\n <clipper-search-facets #facetsSearch></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <div [ngStyle]=\"{'height.px': contentHeight }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"100\" id=\"references_container\" style=\"overflow: auto\">\r\n <div style=\"overflow:hidden\">\r\n @if (!snapshot.total) {\r\n <div style=\"padding:32px;\">\r\n <div class=\"item-greyed-1\" style='text-align: center'>\r\n <p>Nessun elemento da visualizzare.</p>\r\n <p>Il filtro applicato non consente la selezione di alcun risulato.</p>\r\n </div>\r\n </div>\r\n }\r\n @if (snapshot.total) {\r\n <div>\r\n @for (item of snapshot.items; track item) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div style=\"padding-left: 15px; padding-top:24px;\">\r\n <div class=\"item-accent\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"0px\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection.isSelected(item.documentId) }\">\r\n <div fxFlex=\"48px\" fxFlexAlign=\"center\" fxLayoutAlign=\"center\">\r\n @if ($screen.isTouchable || item.isOver || selection.isSelected(item.documentId)) {\r\n <mat-checkbox color=\"primary\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (!item.isJuris && item.model != 9 && (item.model != 11 || snapshot.searchParams.mode == 2) &&\r\n item.modelName && item.modelName.length > 0) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">\r\n {{item.modelName}}</div>\r\n }\r\n @if (!item.isJuris && item.model == 22) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">ARS\r\n BLOG</div>\r\n }\r\n @if (item.author && item.origin === 'LR') {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">{{item.author}}</div>\r\n }\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n <a (click)=\"open(item.documentId)\"\r\n [attr.aria-label]=\"'Apri documento ' + (item.title1 ? item.title1: item.title2)\">{{item.title1\r\n ? item.title1 : item.title2}}</a>\r\n @if (item.part > 0) {\r\n <span class=\"item-badge\">PARTE {{item.part}}</span>\r\n }\r\n\r\n </div>\r\n @if (item.title1 && item.title2) {\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n {{item.title2}}\r\n </div>\r\n }\r\n @if (item.originDescription ) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-2\">\r\n {{item.originDescription}}\r\n </div>\r\n }\r\n @if (item.anchors.length > 0) {\r\n <div class=\"item-line item-line-3 item-line-read\">\r\n <div class=\"item-line-block\">\r\n <div class=\"item-line-block-title\">DETTAGLIO</div>\r\n <div>\r\n @for (a of item.anchors; track a) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n <a class=\"link\" style='line-height: 18px; margin-right: 8px'\r\n (click)=\"open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if\r\n (a.veryRelevant) {\r\n <sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n }</a>\r\n }\r\n @if (!a.uri && a.text) {\r\n <span style='line-height: 18px; margin-right: 8px '>{{a.text}}</span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (item.validityState > 0) {\r\n <div class=\"item-line item-line-3 item-line-read\">\r\n <span\r\n style=\"background-color: red; color: white; padding: 2px 4px; border-radius: 3px; border: 1px solid red\">\r\n {{item.validityDescription}}\r\n </span>\r\n </div>\r\n }\r\n\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (snapshot.total > 0) {\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot.total\"\r\n [pageSize]=\"25\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>","import { Component } from '@angular/core';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-help.component.html',\r\n styleUrls: ['./search-free-text-help.component.scss'],\r\n standalone: true,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule, MatButtonModule, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextHelpComponent{\r\n\r\n constructor() {}\r\n\r\n}\r\n","<h2 mat-dialog-title>Come effettuare la ricerca in testo libero</h2>\r\n<div mat-dialog-content>\r\n <p>Normalmente viene sempre effettuata una ricerca per frase: tutte le parole specificate debbono essere\r\n \"ragionevolmente vicine\" (entro 5 parole) l'una dall'altra.</p>\r\n <p>La ricerca per frase di solito produce i risultati più rilevanti.</p>\r\n <p>Tuttavia è possibile istruire Clipper per eseguire ricerche differenti e più complesse.</p>\r\n <p>Tutte gli elementi che compongono la stringa di ricerca devono essere separati da virgola.</p>\r\n <ul>\r\n <li>Se un elemento è composto da più parole è una frase, altrimenti una parola</li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">+</b> davanti all'elemento, l'elemento <b>dovrà per forza</b> essere presente nel documento\r\n </li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">-</b> davanti all'elemento, l'elemento <b>non dovrà</b> essere presente nel documento</li>\r\n </ul>\r\n <p>Ecco alcuni esempi:</p>\r\n <ul>\r\n <li><b>serbatoi interrati</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\"</li>\r\n <li><b>serbatoi, interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono una o l'altra parola.</li>\r\n <li><b>serbatoi, +interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ed eventualmente \"serbatoi\".</li>\r\n <li><b>serbatoi, -interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ma non \"serbatoi\".</li>\r\n <li><b>\"serbatoi interrati\", -gas</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\" e per la parola \"gas\"; il risultato sarà tutti i documenti che contengono la frase \"serbatoi interrati\" ma non la parola \"gas\".</li>\r\n </ul>\r\n <p>Saranno mostrati per primi (più rilevanti) i documenti che rispettano in pieno la condizione.</p>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill >\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { MatDialog, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport interface SearchFreeTextQueryParams {\r\n query: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-query-builder.component.html',\r\n styleUrls: ['./search-free-text-query-builder.component.scss'],\r\n standalone: true,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatDialogActions, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextQueryBuilderComponent {\r\n @Output() done = new EventEmitter<SearchFreeTextQueryParams>();\r\n\r\n queryAnd: string = '';\r\n queryOr: string = '';\r\n queryNot: string = '';\r\n queryPhrase: string = '';\r\n queryStart: string = '';\r\n\r\n constructor(private $dialog: DialogService, public dialog: MatDialog) { }\r\n\r\n\r\n /**\r\n * Clear\r\n */\r\n clear() {\r\n this.queryAnd = null;\r\n this.queryOr = null;\r\n this.queryNot = null;\r\n this.queryPhrase = null;\r\n this.queryStart = null;\r\n }\r\n\r\n /**\r\n * Submit\r\n */\r\n ok() {\r\n let query = '';\r\n // Phrase\r\n if (this.queryPhrase.length > 0) {\r\n query += ' \"';\r\n query += this.queryPhrase.replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n // Or\r\n if (this.queryOr.length > 0) {\r\n let parts = this.queryOr.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', ';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n // And\r\n if (this.queryAnd.length > 0) {\r\n let parts = this.queryAnd.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', +';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n // Start with\r\n if (this.queryStart.length > 0) {\r\n if (query.length > 0) query += ', +';\r\n query += this.queryStart.replace('\"', '').trim();\r\n query += '*';\r\n query += ' ';\r\n }\r\n // Not\r\n if (this.queryNot.length > 0) {\r\n if (query.length === 0) {\r\n // Invalid query\r\n this.$dialog.error(\r\n \"L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.\"\r\n );\r\n return;\r\n }\r\n let parts = this.queryNot.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', -';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n\r\n\r\n // Notify\r\n if (query.length > 0) this.done.emit({ query: query });\r\n }\r\n}\r\n","<h2 mat-dialog-title>Trova gli elementi che contengono...</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Questa esatta parola o frase</mat-label>\r\n <input matInput name=\"queryPhrase\" [(ngModel)]=\"queryPhrase\" maxlength=\"200\" />\r\n @if (queryPhrase) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\"\r\n (click)=\"queryPhrase=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tutte queste parole</mat-label>\r\n <input matInput name=\"queryAnd\" [(ngModel)]=\"queryAnd\" maxlength=\"200\" />\r\n @if (queryAnd) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryAnd=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Una qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryOr\" [(ngModel)]=\"queryOr\" maxlength=\"200\" />\r\n @if (queryOr) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryOr=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Parole che iniziano con</mat-label>\r\n <input matInput name=\"queryStart\" [(ngModel)]=\"queryStart\" maxlength=\"200\" />\r\n @if (queryStart) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\"\r\n (click)=\"queryStart=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Nessuna qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryNot\" [(ngModel)]=\"queryNot\" maxlength=\"200\" />\r\n @if (queryNot) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryNot=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n <mat-hint>Separate da virgola. L'operatore di esclusione funziona solo se prima è stato inserito un valore in\r\n almeno uno degli altri quattro campi. </mat-hint>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\" fxLayoutAlign=\"start\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\">OK</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">ANNULLA</button>\r\n </div>\r\n </div>\r\n</div>","import { Component, EventEmitter, Inject, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { DateInterval, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport {\r\n ClipperDefinitions,\r\n ClipperService,\r\n ClipperSearchParams,\r\n SearchUtils\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { DateIntervalChangeDirective } from '@arsedizioni/ars-utils/core';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-dialog.component.html',\r\n styleUrls: ['./search-dialog.component.scss'],\r\n providers: [\r\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ],\r\n standalone: true,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n FlexModule,\r\n \r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n \r\n MatTooltipModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n ExtendedModule,\r\n MatDatepickerModule,\r\n DateIntervalChangeDirective,\r\n MatDialogActions,\r\n MatDialogClose,\r\n SafeHtmlPipe,\r\n ],\r\n})\r\nexport class ClipperSearchDialogComponent implements OnInit {\r\n @ViewChild('okButton') okButton!: HTMLButtonElement;\r\n @Output() done = new EventEmitter<ClipperSearchParams>();\r\n\r\n params: ClipperSearchParams;\r\n interval: DateInterval = new DateInterval();\r\n models: any;\r\n sectors: any;\r\n sources: any;\r\n sourceInterval: DateInterval = new DateInterval();\r\n topics: any;\r\n types: any;\r\n authors: any;\r\n enableAuthor: boolean = false;\r\n enableTopic: boolean = false;\r\n enableTaxonomy: boolean = false;\r\n enableType: boolean = false;\r\n enableText: boolean = false;\r\n enableModel: boolean = false;\r\n enableSector: boolean = false;\r\n enableSource: boolean = false;\r\n enableDocument: boolean = false;\r\n enableDeadline: boolean = false;\r\n enablePublication: boolean = false;\r\n enableChanges: boolean = false;\r\n enableRead: boolean = false;\r\n enableComments: boolean = false;\r\n\r\n\r\n constructor(\r\n private $dialog: ApplicationDialogService,\r\n private $clipper: ClipperService,\r\n public dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) _data: any\r\n ) {\r\n this.enablePublication = _data.enablePublication;\r\n this.enableDocument = _data.enableDocument;\r\n this.enableDeadline = _data.enableDeadline;\r\n this.enableModel = _data.enableModel;\r\n this.enableSector = _data.enableSector;\r\n this.enableSource = _data.enableSource;\r\n this.enableAuthor = _data.enableAuthor;\r\n this.enableTopic = _data.enableTopic;\r\n this.enableTaxonomy = _data.enableTaxonomy;\r\n this.enableType = _data.enableType;\r\n this.enableText = _data.enableText;\r\n this.enableChanges = _data.enableChanges;\r\n this.enableComments = _data.enableComments;\r\n this.enableRead = true;\r\n this.params = {\r\n showUnreadDocumentsOnly: _data.params.showUnreadDocumentsOnly,\r\n showCommentedDocumentsOnly: _data.params.showCommentedDocumentsOnly,\r\n count: 25,\r\n first: 0\r\n };\r\n this.params.text = _data.params.text;\r\n this.params.titleOnly = _data.params.titleOnly;\r\n if (this.enableSector) {\r\n this.params.sector = _data.params.sector;\r\n if (_data.sectors) this.sectors = _data.sectors;\r\n else this.sectors = ClipperDefinitions.SECTORS;\r\n }\r\n if (this.enableAuthor) this.params.author = _data.params.author;\r\n if (this.enableModel) {\r\n this.models = _data.models;\r\n this.params.sector = _data.params.sector; // Use sector as value and not model\r\n }\r\n if (this.enableDocument) this.params.number = _data.params.number;\r\n if (this.enableDocument || this.enablePublication) {\r\n if (_data.params.fromDate) this.interval.from = _data.params.fromDate;\r\n if (_data.params.toDate) this.interval.to = _data.params.toDate;\r\n\r\n }\r\n if (this.enableTopic) this.params.topic = _data.params.topic;\r\n if (this.enableTaxonomy) {\r\n this.params.taxonomy = _data.params.taxonomy;\r\n this.params.taxonomyPath = _data.params.taxonomyPath;\r\n this.params.taxonomyNode = _data.params.taxonomyNode;\r\n }\r\n if (this.enableType) {\r\n this.types = ClipperDefinitions.SECTOR_TYPES;\r\n this.params.type = _data.params.type;\r\n }\r\n if (this.enableSource) {\r\n this.sources = ClipperDefinitions.SOURCES;\r\n this.params.source = _data.params.source;\r\n this.params.sourceNumber = _data.params.sourceNumber;\r\n if (_data.params.sourceFromDate)\r\n this.sourceInterval.from = _data.params.sourceFromDate;\r\n if (_data.params.sourceToDate)\r\n this.sourceInterval.to = _data.params.sourceToDate;\r\n }\r\n if (this.enableChanges) {\r\n this.types = _data.changeReasons;\r\n this.params.reason = _data.params.reason;\r\n this.params.changedNumber = _data.params.changedNumber;\r\n this.params.changedYear = _data.params.changedYear;\r\n this.params.changedTitle = _data.params.changedTitle;\r\n this.params.modifierNumber = _data.params.modifierNumber;\r\n this.params.modifierYear = _data.params.modifierYear;\r\n this.params.modifierTitle = _data.params.modifierTitle;\r\n }\r\n if (this.enableDeadline) {\r\n this.types = _data.deadlines;\r\n this.params.type = _data.params.type;\r\n }\r\n if (!this.enableRead === false)\r\n this.enableRead = false;\r\n if (\r\n this.params.model === ClipperDefinitions.DM_SCADENZA_SEGNALAZIONE ||\r\n this.params.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||\r\n this.params.model === ClipperDefinitions.DM_METODI_ANALISI\r\n )\r\n this.enableRead = false;\r\n }\r\n\r\n ngOnInit() {\r\n this.authors = [];\r\n\r\n if (this.enableTopic) {\r\n if (!this.$clipper.loggedIn) return;\r\n // Load topics\r\n this.$clipper.getTopics()\r\n .subscribe(r => {\r\n if (r.success) {\r\n let name = '';\r\n r.value.forEach((n: any) => {\r\n name = '';\r\n (n.value.match(/./g) || []).forEach(() => {\r\n name += '&nbsp;&nbsp;';\r\n });\r\n name += n.value + ' - ' + n.name;\r\n n.title = name;\r\n });\r\n this.topics = r.value;\r\n }\r\n });\r\n }\r\n\r\n if (this.enableAuthor && this.params.sector) this.sectorChanged();\r\n }\r\n\r\n\r\n /**\r\n * Update authors when selected sectors changed\r\n */\r\n sectorChanged() {\r\n if (this.enableAuthor) {\r\n let authors: any = [];\r\n if (this.params.sector) {\r\n ClipperDefinitions.SECTOR_AUTHORS.forEach((n: any) => {\r\n if (n.sectorId === this.params.sector) authors.push(n);\r\n });\r\n }\r\n this.authors = authors;\r\n }\r\n\r\n if (this.enableType) {\r\n if (this.params.sector) {\r\n let types: any = [];\r\n ClipperDefinitions.SECTOR_TYPES.forEach((n: any) => {\r\n if (n.sectorId === this.params.sector) types.push(n);\r\n });\r\n this.types = types;\r\n } else this.types = ClipperDefinitions.SECTOR_TYPES;\r\n }\r\n }\r\n\r\n /**\r\n * Clear search\r\n */\r\n clear() {\r\n SearchUtils.clear(this.params);\r\n this.interval.clear();\r\n this.sourceInterval.clear();\r\n this.sectorChanged();\r\n }\r\n\r\n\r\n /**\r\n * Show free text help\r\n */\r\n help() {\r\n this.$dialog.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n /**\r\n * Compose a free text search query\r\n */\r\n compose() {\r\n let d = this.$dialog.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%'\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n this.params.text = r.query;\r\n\r\n // Finished\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Submit search\r\n */\r\n ok() {\r\n this.okButton.focus();\r\n if (this.params.text)\r\n this.params.text = SearchUtils.normalizeTextQuery(this.params.text);\r\n if (this.interval) {\r\n this.params.fromDate = this.interval.from;\r\n this.params.toDate = this.interval.to;\r\n }\r\n if (this.sourceInterval) {\r\n this.params.sourceFromDate = this.sourceInterval.from;\r\n this.params.sourceToDate = this.sourceInterval.to;\r\n }\r\n setTimeout(() => {\r\n // Notify\r\n this.done.emit(this.params);\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Select a taxonomy topic\r\n */\r\n selectTaxonomy() {\r\n if (!this.$clipper.loggedIn) return;\r\n let params = null;\r\n if (\r\n this.params.model === ClipperDefinitions.DM_GUIDA ||\r\n this.params.model === ClipperDefinitions.DM_GUIDA_NORMATIVA ||\r\n this.params.model === ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI\r\n ) {\r\n params = { model: ClipperDefinitions.DM_GUIDA, countItems: true };\r\n }\r\n this.$dialog.busy('Caricamento in corso...');\r\n this.$clipper.getTaxonomy(params)\r\n .subscribe({\r\n next: r => {\r\n this.$dialog\r\n .selectTree(\r\n this.$clipper.toNodes(r.value.subFolders),\r\n 'Seleziona un argomento',\r\n null,\r\n this.params.taxonomyNode\r\n )\r\n .componentInstance.done.subscribe(r => {\r\n let n = r.selectedItems[0].bag;\r\n this.params.taxonomy = n.id;\r\n this.params.taxonomyPath = n.path;\r\n this.params.taxonomyNode = n.name;\r\n });\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n}\r\n","<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <div fxFlexAlign=\"end\">\r\n @if (enableRead) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" name=\"showUnreadDocumentsOnly\" [(ngModel)]=\"params.showUnreadDocumentsOnly\">\r\n Mostra solo non letti</mat-checkbox>\r\n </div>\r\n}\r\n @if (enableComments) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" name=\"showCommentedDocumentsOnly\"\r\n [(ngModel)]=\"params.showCommentedDocumentsOnly\">\r\n Mostra solo norme con commenti</mat-checkbox>\r\n </div>\r\n}\r\n </div>\r\n @if (enableModel) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"model\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (m of models; track m) {\r\n <mat-option [value]=\"m.id\">\r\n {{m.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableSector) {\r\n<mat-form-field>\r\n <mat-label>Settore</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"sector\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sectors; track s) {\r\n <mat-option [value]=\"s.id\">\r\n @if (s.group == 'A') {\r\n<span>&nbsp;&nbsp;</span>\r\n}\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableAuthor && authors && authors.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" #sector=\"ngModel\" name=\"author\">\r\n <mat-option>Tutti</mat-option>\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.authorId\">\r\n {{a.authorDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTopic && topics && topics.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" #topic=\"ngModel\" name=\"topic\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n <div [innerHtml]=\"t.title | safeHtml\"></div>\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTaxonomy) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <input matInput [(ngModel)]=\"params.taxonomyNode\" readonly name=\"taxonomy\" />\r\n @if (params.taxonomyNode) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.taxonomy = null; params.taxonomyNode = null; params.taxonomyPath = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button type=\"button\" mat-icon-button matSuffix aria-label=\"Scegli\" matTooltip=\"Scegli\"\r\n (click)=\"selectTaxonomy()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n @if (params.taxonomyNode) {\r\n<mat-hint align=\"start\" class=\"truncated lowercase\">\r\n <div>{{params.taxonomyPath}}</div>\r\n </mat-hint>\r\n}\r\n </mat-form-field>\r\n}\r\n @if (enableType) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" #topic=\"ngModel\" name=\"type\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.documentTypeId\" [matTooltip]=\"t.documentTypeDescription\">\r\n {{t.documentTypeDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput name=\"text\" #text [(ngModel)]=\"params.text\" maxlength=\"200\" />\r\n @if (params.text) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); compose()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); help()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" [disabled]=\"!params.text\" name=\"titleOnly\"\r\n [(ngModel)]=\"params.titleOnly\">Cerca\r\n solo nel titolo</mat-checkbox>\r\n </div>\r\n}\r\n @if (enablePublication) {\r\n<div>\r\n <div class=\"section-title\">Pubblicazione</div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n}\r\n @if (enableDocument) {\r\n<div>\r\n <div class=\"section-title\">Estremi documento</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.number\" #number=\"ngModel\" name=\"number\" maxlength=\"10\" />\r\n @if (params.number) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (number.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom2=\"ngModel\"\r\n name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableSource) {\r\n<div>\r\n <div class=\"section-title\">Fonte</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.sourceNumber\" #sourceNumber=\"ngModel\" name=\"sourceNumber\"\r\n maxlength=\"10\" />\r\n @if (params.sourceNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (sourceNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker3\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom3=\"ngModel\" name=\"rangeFrom3\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo3=\"ngModel\" name=\"rangeTo3\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix\r\n mat-icon-button aria-label=\"Pulisci\" (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker3\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker3></mat-date-range-picker>\r\n @if (rangeFrom3.invalid || rangeTo3.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n @if (sources && sources.length > 0) {\r\n<mat-form-field fxFlex=\"100\">\r\n <mat-label>Tipo fonte</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" #sector=\"ngModel\" name=\"source\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.id\">\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableChanges) {\r\n<div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.reason\" #topic=\"ngModel\" name=\"reason\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"section-title mat-body-3\">Documento modificato</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\"><i>Saranno visualizzati i documenti modificanti.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedNumber\" #changedNumber=\"ngModel\" name=\"changedNumber\"\r\n maxlength=\"10\" />\r\n @if (params.changedNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (changedNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput [(ngModel)]=\"params.changedYear\" #changedYear=\"ngModel\"\r\n name=\"changedYear\" maxlength=\"4\" />\r\n @if (params.changedYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedTitle\" #changedTitle=\"ngModel\" name=\"changedTitle\"\r\n maxlength=\"10\" />\r\n @if (params.changedTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title \">Documento modificante</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\">\r\n <i>Saranno visualizzati i documenti modificati, oppure solo i modificanti se è stato specificato\r\n l'estremo del documento modificato.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierNumber\" #modifierNumber=\"ngModel\" name=\"modifierNumber\"\r\n maxlength=\"10\" />\r\n @if (params.modifierNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (modifierNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=1750 matInput [(ngModel)]=\"params.modifierYear\" #modifierYear=\"ngModel\"\r\n name=\"modifierYear\" maxlength=\"4\" />\r\n @if (params.modifierYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierTitle\" #modifierTitle=\"ngModel\" name=\"modifierTitle\"\r\n maxlength=\"10\" />\r\n @if (params.modifierTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { MatSelectionList, MatListModule } from '@angular/material/list';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport {\r\n ClipperService \r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n\r\nexport interface ClipperDocumentIndexDialogData {\r\n documentId: string,\r\n excludedTypes?: number[],\r\n multiple?: boolean\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document-index.component.html',\r\n styleUrls: ['./document-index.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n \r\n MatListModule,\r\n \r\n FlexModule,\r\n NgStyle,\r\n ExtendedModule,\r\n MatTooltipModule,\r\n MatDialogActions,\r\n MatButtonModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class ClipperDocumentIndexComponent {\r\n @ViewChild('selection') selection!: MatSelectionList;\r\n @Output() done = new EventEmitter<any>();\r\n\r\n data: ClipperDocumentIndexDialogData;\r\n items: any;\r\n okDisabled: boolean = true;\r\n\r\n constructor(\r\n private $dialog: DialogService,\r\n private $clipper: ClipperService,\r\n public dialogRef: MatDialogRef<ClipperDocumentIndexComponent>,\r\n @Inject(MAT_DIALOG_DATA) _data: ClipperDocumentIndexDialogData\r\n ) {\r\n this.data = _data;\r\n if (this.data?.documentId)\r\n this.load(this.data?.documentId, this.data.excludedTypes);\r\n }\r\n\r\n /**\r\n * Display document structure\r\n * @param documentId : the document id\r\n * @param excludedTypes: the array of fragment type to be excluded off\r\n */\r\n load(documentId: string, excludedTypes: number[] = null) {\r\n if (!this.$clipper.loggedIn) return;\r\n this.$dialog.setBusy('Caricamento in corso...');\r\n this.$clipper.index(documentId)\r\n .subscribe({\r\n next: (r) => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else {\r\n this.items = []; \r\n r.value?.items.forEach((n: any) => {\r\n if (!excludedTypes || excludedTypes.indexOf(n.type) === -1) {\r\n if (n.title) n.description = n.title;\r\n else {\r\n if (n.type < 3) {\r\n n.description = n.text.trim();\r\n } else {\r\n n.description =\r\n n.typeDescription.trim() + ' ' + n.text.trim() + '.';\r\n }\r\n }\r\n this.items.push(n);\r\n }\r\n });\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n */\r\n select() {\r\n this.okDisabled =\r\n !this.selection || this.selection.selectedOptions.selected.length === 0;\r\n }\r\n\r\n /**\r\n * Confirm selection\r\n */\r\n use(item: any = null) {\r\n if (this.okDisabled) return;\r\n if (this.data.multiple){\r\n if (item) return; // multiple and single item selection not supported\r\n let selection: any = [];\r\n this.selection.selectedOptions.selected.forEach((n: any) => {\r\n selection.push(n.value);\r\n });\r\n this.done.emit({ data: selection });\r\n } else if (item) {\r\n this.done.emit({ data: item }); \r\n }\r\n }\r\n}\r\n","<h2 mat-dialog-title>Indice</h2>\r\n<div mat-dialog-content>\r\n @if (!items || items.length === 0) {\r\n<p>\r\n Nessun elemento da visualizzare.\r\n </p>\r\n}\r\n @if (items && items.length > 0) {\r\n<mat-selection-list dense #selection (selectionChange)=\"select();\"\r\n [multiple]=\"data.multiple\" hideSingleSelectionIndicator=\"true\">\r\n @for (item of items; track item) {\r\n \r\n @if (item.type > 4) {\r\n<div class=\"small uppercase truncated\" style=\"font-weight: 600; display: flex; align-items: center; min-height: 36px;\">\r\n <div>{{item.description}}</div>\r\n </div>\r\n}\r\n @if (item.type <= 4) {\r\n<mat-list-option color=\"primary\" [selected]=\"false\" [value]=\"item\" (click)=\"use(item)\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div [ngStyle]=\"{'flex': '0 0 ' + (10 * item.level) + 'px'}\"></div>\r\n <div style=\"flex: 1 1 100%\" class=\"truncated\">\r\n <div class=\"small\" [matTooltip]=\"item.description\">{{item.description}}</div>\r\n </div>\r\n </div>\r\n </mat-list-option>\r\n}\r\n \r\n}\r\n </mat-selection-list>\r\n}\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n @if (data.multiple) {\r\n<button mat-flat-button color=\"primary\" [disabled]=\"okDisabled\" (click)=\"use()\">USA</button>\r\n}\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MediaChange, MediaObserver } from '@ngbracket/ngx-layout';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogContent } from '@angular/material/dialog';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n BroadcastService,\r\n SystemUtils,\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport {\r\n ClipperDefinitions,\r\n ClipperService,\r\n ClipperMessages\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperReferencesComponent } from '../references/references.component';\r\nimport { ClipperDocumentBaseComponent } from './base/document-base.component';\r\nimport { ClipperDocumentIndexComponent } from './document-index/document-index.component';\r\nimport { FilePreviewComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { SafeUrlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { NgStyle } from '@angular/common';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document.component.html',\r\n styleUrls: ['./document.component.scss'],\r\n standalone: true,\r\n imports: [\r\n FlexModule,\r\n \r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n ExtendedModule,\r\n MatDividerModule,\r\n MatProgressBarModule,\r\n MatDialogContent,\r\n NgStyle,\r\n MatSidenavModule,\r\n \r\n SafeUrlPipe,\r\n ],\r\n})\r\nexport class ClipperDocumentComponent extends ClipperDocumentBaseComponent\r\n implements OnInit, OnDestroy {\r\n @ViewChild('relevantsSidenav') relevantsSidenav!: MatSidenav;\r\n @Output() closing = new EventEmitter<any>();\r\n @Output() opening = new EventEmitter<any>();\r\n\r\n // Compliance related events\r\n @Output() onComplianceAnalysis = new EventEmitter<any>();\r\n @Output() onCompliancePlanning = new EventEmitter<any>();\r\n @Output() onComplianceUsageReport = new EventEmitter<any>();\r\n\r\n private __d$: Subject<void> = new Subject<void>();\r\n private rendererListener1: any;\r\n\r\n contentHeight: number = null;\r\n url: any = null;\r\n title: string = null;\r\n busy: boolean = false;\r\n lastQuery: string = null;\r\n lastUrl: string = null;\r\n lastDocument: any = {};\r\n relevants: any = {\r\n items: [],\r\n hits: 0,\r\n hit: 0,\r\n minimumScore: 100,\r\n };\r\n relevantsMode: string = 'side';\r\n relevantsClosed: boolean = false;\r\n relevantsBusy: boolean = false;\r\n relevantDocumentId: string = null;\r\n selectionMode: number = null;\r\n newModule: number = null;\r\n module: number = null;\r\n mq: string = null;\r\n isDeadline: boolean = false;\r\n isLawInForce: boolean = false;\r\n\r\n constructor(\r\n public $broadcast: BroadcastService,\r\n public $dialog: DialogService,\r\n public $clipper: ClipperService,\r\n public media: MediaObserver,\r\n public renderer: Renderer2,\r\n public router: Router,\r\n public sanitizer: DomSanitizer,\r\n public dialogRef: MatDialogRef<ClipperDocumentComponent>,\r\n @Inject(MAT_DIALOG_DATA) _data: any\r\n ) {\r\n super($dialog, $clipper);\r\n\r\n if (_data) {\r\n this.selectionMode = _data.selectionMode;\r\n if (_data.query) this.lastQuery = _data.query;\r\n else this.lastQuery = '';\r\n if (_data.id) {\r\n let url =\r\n this.$clipper.serviceUri +\r\n '/documents/render/?query=' +\r\n this.lastQuery +\r\n '&id=' +\r\n _data.id;\r\n this.navigateByUrl(url);\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n // Listen to window messages\r\n this.rendererListener1 = this.renderer.listen(\r\n 'window',\r\n 'message',\r\n (e: Event) => {\r\n let event = e as MessageEvent;\r\n if (!event) return;\r\n if (event.data) {\r\n try {\r\n var data = JSON.parse(event.data);\r\n if (data) {\r\n switch (data.type) {\r\n case 'navigated':\r\n this.navigated(\r\n data.id,\r\n data.title1,\r\n data.title2,\r\n data.model,\r\n data.module,\r\n data.moduleName,\r\n data.date,\r\n data.number,\r\n data.author,\r\n data.origin,\r\n data.originDescription,\r\n data.bag,\r\n data.validityInfo,\r\n data.expiringInfo,\r\n data.primaryId,\r\n data.primaryModel,\r\n data.secondaryId,\r\n data.isTrial\r\n );\r\n break;\r\n case 'navigate':\r\n this.navigate(data.url);\r\n break;\r\n case 'references':\r\n this.openReferences(\r\n data.id,\r\n data.mode,\r\n data.model,\r\n data.anchor,\r\n data.anchorTitle,\r\n data.update\r\n );\r\n break;\r\n case 'hits':\r\n this.relevants.hits = data.total;\r\n this.updateRelevants();\r\n break;\r\n }\r\n }\r\n } catch { \r\n }\r\n }\r\n }\r\n );\r\n\r\n // React to media query changes\r\n this.media\r\n .asObservable()\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe((changes: MediaChange[]) => {\r\n this.mq = changes[0].mqAlias;\r\n if (\r\n this.relevants &&\r\n this.relevants.items &&\r\n this.relevants.items.length > 0\r\n )\r\n this.updateRelevantsVisibility();\r\n });\r\n //this.updateRelevantsVisibility();\r\n\r\n // React to relevant items sidenav state change\r\n if (this.relevantsSidenav)\r\n this.relevantsSidenav.openedChange\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe(\r\n () => {\r\n this.adjustView();\r\n }\r\n );\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe(() => {\r\n // Update view\r\n this.updateView();\r\n });\r\n this.adjustView();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.__d$.next();\r\n this.__d$.complete();\r\n if (this.rendererListener1)\r\n this.rendererListener1();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Close dialog\r\n */\r\n\r\n close() {\r\n if (this.closing) this.closing.emit({ newModule: this.newModule });\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Navigate to a new document\r\n * @param id : the document id\r\n */\r\n navigate(id: string) {\r\n if (!id || id.length == 0)\r\n return; // Nothing to do\r\n if (id.indexOf('?') !== -1) {\r\n if (id.startsWith('/api'))\r\n this.navigateByUrl(this.$clipper.serviceUri + id.substring(4));\r\n else if (!id.startsWith(this.$clipper.serviceUri))\r\n this.navigateByUrl(this.$clipper.serviceUri + id);\r\n else this.navigateByUrl(id);\r\n } else\r\n this.navigateByUrl(\r\n this.$clipper.serviceUri +\r\n '/documents/render/?query=&id=' +\r\n id\r\n );\r\n }\r\n\r\n /**\r\n * Navigate by url\r\n * @param url : the url to navigate to\r\n */\r\n navigateByUrl(url: string) {\r\n if (!url || url.length === 0 || url === 'about:blank')\r\n return; // Nothing to do\r\n this.lastUrl = url;\r\n // Clean url\r\n let parts = url.split('#');\r\n url = parts[0];\r\n if (parts.length > 1) { \r\n url += '#' + parts[1];\r\n }\r\n // Handle free text query\r\n let q = '';\r\n let pos = url.indexOf('query=');\r\n if (pos !== -1) {\r\n pos += 6;\r\n while (url.length > pos && url[pos] !== '&' && url[pos] !== '#')\r\n q += url[pos++];\r\n }\r\n if (q.length > 0) {\r\n // Reset\r\n this.relevants.hit = 0;\r\n if (\r\n !this.module ||\r\n this.module === ClipperDefinitions.MOD_NORMATIVA_VIGENTE ||\r\n this.module === ClipperDefinitions.MOD_SEMANTIC_SEARCH\r\n ) {\r\n try {\r\n // Assign query to enable search for fragments\r\n this.lastQuery = decodeURIComponent(encodeURIComponent(q));\r\n } catch {\r\n this.lastQuery = q;\r\n }\r\n }\r\n }\r\n\r\n let navigateToFile = url.indexOf('&file=true') !== -1;\r\n if (navigateToFile === true) {\r\n // Preview\r\n this.previewFile(url);\r\n } else {\r\n // Begin loading only if not downloading a file\r\n this.busy = url.indexOf('documents/render/item') === -1;\r\n // Navigate\r\n this.url = url;\r\n }\r\n }\r\n navigated(\r\n id: string, // Documnent id\r\n title1: string, // Title 1\r\n title2: string, // Title 2\r\n model: number, // Model\r\n moduleId: number, // Module\r\n moduleName: string, // Module name\r\n date: string, // Date\r\n number: string, // Number\r\n author: string, // Author\r\n origin: string, // Origin\r\n originDescription: string, // Origin description\r\n bag: string, // Flags\r\n validityInfo: string, // Info about validity\r\n expiringInfo: string, // Info about expiring date\r\n primaryId: string, // Primary document id\r\n primaryModel: number, // Primary document model\r\n secondaryId: string, // Secondary document id\r\n isTrial: boolean // True if is a trial request\r\n ) {\r\n // Check for session expiring\r\n if (title1 === 'Sessione non valida') {\r\n this.$dialog\r\n .error(title2, null, title1, 'Accedi di nuovo')\r\n .afterClosed()\r\n .subscribe(() => {\r\n this.router.navigate(['login']);\r\n });\r\n return;\r\n }\r\n\r\n // Store data\r\n this.lastDocument.id = id;\r\n this.lastDocument.title1 = title1 ? SystemUtils.urlDecode(title1) : null;\r\n this.lastDocument.title2 = title2 ? SystemUtils.urlDecode(title2) : null;\r\n this.lastDocument.model = model;\r\n this.lastDocument.module = moduleId;\r\n this.lastDocument.moduleName = moduleName;\r\n this.lastDocument.date = new Date(date);\r\n this.lastDocument.number = number;\r\n this.lastDocument.author = author;\r\n this.lastDocument.origin = origin;\r\n this.lastDocument.originDescription = originDescription;\r\n this.lastDocument.bag = bag;\r\n this.lastDocument.validityInfo = validityInfo;\r\n this.lastDocument.primaryId = primaryId;\r\n this.lastDocument.primaryModel = primaryModel;\r\n this.lastDocument.hasPrimary =\r\n primaryId &&\r\n (model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO ||\r\n model === ClipperDefinitions.DM_NORMATIVA_VIGENTE);\r\n if (primaryId) {\r\n var description = '';\r\n switch (primaryModel ? primaryModel : model) {\r\n case ClipperDefinitions.DM_NORMATIVA_VIGENTE:\r\n description = 'Testo vigente';\r\n break;\r\n case ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO:\r\n description = 'Testo storico';\r\n break;\r\n case ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI:\r\n description = 'Adempimento';\r\n break;\r\n case ClipperDefinitions.DM_GUIDA_NORMATIVA:\r\n description = 'Guida';\r\n break;\r\n case ClipperDefinitions.DM_SCADENZA:\r\n description = 'Scadenza';\r\n break;\r\n case ClipperDefinitions.DM_COORDINAMENTO:\r\n description = 'Modifica';\r\n break;\r\n default:\r\n description = 'Collegamento';\r\n break;\r\n }\r\n this.lastDocument.primaryDescription = description;\r\n }\r\n this.lastDocument.secondaryId = secondaryId;\r\n this.lastDocument.isTrial = isTrial;\r\n\r\n // Handle expiring info\r\n this.lastDocument.expiringDescription = null;\r\n if (expiringInfo) {\r\n let parts = expiringInfo.split('#');\r\n if (parts.length > 0) {\r\n let parts2 = parts[0].split('|');\r\n if (parts2.length > 0)\r\n this.lastDocument.expiringDate = new Date(parts2[0]);\r\n if (parts2.length > 1) this.lastDocument.expiringInfo = parts2[1];\r\n if (parts2.length > 2)\r\n this.lastDocument.expiringInfo += '|' + parts2[2];\r\n }\r\n if (parts.length > 1) this.lastDocument.expiringDescription = parts[1];\r\n }\r\n\r\n // Set title\r\n this.title = this.lastDocument.title1\r\n ? this.lastDocument.title1\r\n : this.lastDocument.title2;\r\n\r\n // Notify navigation has completed\r\n this.$broadcast.sendMessage(ClipperMessages.DOCUMENT_NAVIGATED, {\r\n document: this.lastDocument,\r\n });\r\n\r\n // Get last document update\r\n this.$clipper.lastUpdate(this.lastDocument.id).subscribe((r: any) => {\r\n if (r.success) this.lastDocument.lastUpdate = r.value;\r\n });\r\n\r\n if (!this.hasRelevants()) {\r\n this.relevantsSidenav.close();\r\n }\r\n\r\n this.busy = false;\r\n\r\n this.adjustView();\r\n }\r\n\r\n /**\r\n * goto previous document in history\r\n */\r\n back() {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage('{\"type\": \"back\"}', '*');\r\n }\r\n\r\n /**\r\n * Goto next document in history\r\n */\r\n forward() {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage('{\"type\": \"forward\"}', '*');\r\n }\r\n\r\n /**\r\n * Print current document\r\n */\r\n print() {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage('{\"type\": \"print\"}', '*');\r\n }\r\n\r\n /**\r\n * Find in current document\r\n */\r\n find() {\r\n this.$dialog.info('Per cercare nel documento premi CTRL + F.');\r\n }\r\n\r\n /**\r\n * Goto next relevant item\r\n */\r\n nextRelevant() {\r\n let i = this.relevants.hit + 1;\r\n if (i <= this.relevants.hits) {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage('{\"type\": \"relevant\", \"value\": \"next\"}', '*');\r\n this.relevants.hit++;\r\n }\r\n }\r\n\r\n /**\r\n * Goto previous relevant item\r\n */\r\n previousRelevant() {\r\n let i = this.relevants.hit - 1;\r\n if (i > 0) {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"previous\"}',\r\n '*'\r\n );\r\n this.relevants.hit--;\r\n }\r\n }\r\n\r\n /**\r\n * Check if current document should show relevants\r\n */\r\n hasRelevants() {\r\n return this.relevantDocumentId == this.lastDocument.id && this.relevants;\r\n }\r\n\r\n /**\r\n * Goto a relevant item\r\n * @param item : the item to go to\r\n */\r\n gotoRelevant(item: any) {\r\n if (item.type === ClipperDefinitions.FT_FILE) {\r\n window.open(\r\n this.$clipper.serviceUri +\r\n '/documents/render/item/?id=' +\r\n item.documentId,\r\n '_blank'\r\n );\r\n } else {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"' + item.uri + '\"}',\r\n '*'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Adjust view\r\n */\r\n adjustView() {\r\n setTimeout(() => {\r\n this.updateView();\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Update view\r\n */\r\n updateView() {\r\n let a = window.innerHeight;\r\n let b = document.getElementById('clipper-document-fixed');\r\n try {\r\n if (!a || !b || a === 0) this.adjustView();\r\n let hb = b.clientHeight;\r\n if (hb === 0) this.adjustView();\r\n this.contentHeight = a - (hb + 12);\r\n } catch { }\r\n }\r\n\r\n /**\r\n * Update relevant items\r\n */\r\n updateRelevants() {\r\n if (\r\n !this.lastQuery ||\r\n this.lastQuery.length === 0 ||\r\n this.lastQuery === ' ' ||\r\n (this.lastDocument &&\r\n this.lastDocument.model != ClipperDefinitions.DM_NORMATIVA_VIGENTE)\r\n ) {\r\n this.relevantsClose();\r\n this.adjustView();\r\n } else {\r\n this.$clipper\r\n .query({\r\n id: this.lastDocument.id,\r\n text: this.lastQuery,\r\n count: 1,\r\n })\r\n .subscribe((r: any) => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else {\r\n let minimumScore = 0;\r\n if (r.value?.items && r.value?.items.length > 0) {\r\n r.value.items[0].anchors.forEach((n: any) => {\r\n let score = n.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n if (minimumScore > score) minimumScore = score;\r\n n.score = score;\r\n });\r\n this.relevants.minimumScore = minimumScore;\r\n this.relevants.items = r.value.items[0].anchors;\r\n this.relevantDocumentId = this.lastDocument.id;\r\n }\r\n\r\n if (\r\n this.relevants.items &&\r\n this.relevants.items.length > 0 &&\r\n !this.relevantsClosed &&\r\n this.mq !== 'xs'\r\n )\r\n this.relevantsOpen();\r\n else this.relevantsClose();\r\n this.adjustView();\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Update relevants sidenav visibility\r\n */\r\n updateRelevantsVisibility() {\r\n if (this.mq === 'xs') {\r\n this.relevantsMode = 'over';\r\n if (this.relevantsSidenav && this.relevantsSidenav.opened) {\r\n this.relevantsSidenav.close();\r\n }\r\n } else {\r\n this.relevantsMode = 'side';\r\n if (this.relevantsSidenav && !this.relevantsClosed) {\r\n this.relevantsSidenav.toggle(true);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Open relevant items sidebar\r\n */\r\n relevantsOpen() {\r\n this.relevantsClosed = false;\r\n this.relevantsSidenav.open();\r\n }\r\n\r\n /**\r\n * Close facets sidebar\r\n * @param closedManually : ture if facets has been closed manually by clicking the button\r\n */\r\n relevantsClose(closedManually: boolean = false) {\r\n if (this.mq !== 'xs') this.relevantsClosed = closedManually;\r\n this.relevantsSidenav.close();\r\n }\r\n\r\n /**\r\n * Display document structure\r\n */\r\n index(documentId: string) {\r\n let d = this.$dialog.open(ClipperDocumentIndexComponent, {\r\n ariaLabel: 'indice documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId,\r\n excludedTypes: null,\r\n multiple: false\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n if (r.data.documentId === documentId) {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage(\r\n '{\"type\": \"goto\", \"value\":\"' + r.data.uri + '\"}',\r\n '*'\r\n );\r\n } else {\r\n this.openDocument(r.data.documentId + '#' + r.data.uri);\r\n }\r\n\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Get the id in a query string\r\n * @param url : the url to process\r\n * @param name : the optional id paramenter name. Default is 'id'\r\n * @returns : the id parame\r\n */\r\n private getId(url: string, name: string = 'id'): string {\r\n const start = url.lastIndexOf(name + '=') + 3;\r\n const end = url.indexOf('&', start);\r\n return url.substring(start, end);\r\n }\r\n\r\n /**\r\n * Preview a file if possible\r\n * @param url : the url to preview\r\n */\r\n previewFile(url: string) {\r\n if (!url || url.length === 0)\r\n return; // Nothing to do\r\n // Get the id\r\n let id = this.getId(url);\r\n if (!id || id.length === 0)\r\n return; // Nothing to do\r\n // Create the url\r\n this.$clipper.newOTP(id).subscribe(\r\n r => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else if (!r.value.canPreview)\r\n // Donload manually\r\n location.href = url;\r\n else {\r\n this.$dialog.open(FilePreviewComponent, {\r\n panelClass: 'preview-panel',\r\n ariaLabel: 'anteprima',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: {\r\n url: url,\r\n embed: r.value.canEmbed\r\n },\r\n minWidth: '375px',\r\n maxWidth: '900px',\r\n width: '99%',\r\n height: '99%'\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show document comment\r\n */\r\n showComment() {\r\n if (this.lastDocument.bag[7] !== 'T') return;\r\n this.$clipper\r\n .comment(this.lastDocument.id)\r\n .subscribe((r: any) => {\r\n if (!r.success) {\r\n if (r.message === \"Il tuo abbonamento non consente di visualizzare i commenti alle norme.\")\r\n this.$dialog.error(\"Il servizio di <b>commenti alle norme</b> non è compreso nel tuo abbonamento, per maggiori informazioni rivolgersi all'agente commerciale di riferimento o inviare una mail a <a href='mailto:sales@arsedizioni.it' target='_blank'>sales@arsedizioni.it</a>.\", null, \"Attenzione\");\r\n else\r\n this.$dialog.error(r.message);\r\n } else {\r\n if (r.value && r.value.length > 1)\r\n this.$dialog.info(r.value.replace(/\\n/g, '<br>\\r\\n'), \"Commento\", \"CHIUDI\", 700);\r\n else\r\n this.$dialog.info(\"Commento non più disponibile o in fase di revisione.\");\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n open(document: any, newWindow: boolean = false) {\r\n if (!newWindow) {\r\n if (this.opening) this.opening.emit({ id: document.id });\r\n else this.openDocument(document.id);\r\n } else window.open('/documento/' + document.id, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n */\r\n private openDocument(documentId: string) {\r\n if (!documentId) return;\r\n this.$dialog.open(ClipperDocumentComponent, {\r\n ariaLabel: 'documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: { id: documentId },\r\n panelClass: 'document-container',\r\n minWidth: '375px',\r\n maxWidth: '1400px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param documentId : the document id\r\n * @param mode : the mode\r\n */\r\n openReferences(\r\n documentId: string,\r\n mode: number = ClipperDefinitions.SM_REFERENCES_IN,\r\n model: number = null,\r\n anchor: string = null,\r\n anchorTitle: string = null,\r\n update: boolean = true\r\n ) {\r\n if (!documentId) documentId = this.lastDocument.id;\r\n let d = this.$dialog.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n id: documentId,\r\n mode: mode,\r\n model: model,\r\n anchor: anchor,\r\n anchorTitle: anchorTitle,\r\n update: update,\r\n },\r\n panelClass: 'references-container',\r\n minWidth: '375px',\r\n maxWidth: '1000px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: any) => {\r\n if (r && r.id) {\r\n this.navigate(r.id);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Display a report\r\n * @param item\r\n */\r\n displayReport(item: any) {\r\n if (!item) return;\r\n if (item.model != ClipperDefinitions.DM_NORMATIVA_VIGENTE && item.model != ClipperDefinitions.DM_SCADENZA) {\r\n this.$dialog.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n }\r\n this.openReport(item.id, item.title1 ? item.title1 : item.title2);\r\n }\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n canSelect(): boolean {\r\n return this.selectionMode > 0 && this.lastDocument && (this.lastDocument.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE || this.lastDocument.model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO)\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n select() {\r\n if (this.lastDocument) {\r\n this.$broadcast.sendMessage(ClipperMessages.DOCUMENT_SELECTED_INNER, [\r\n this.lastDocument,\r\n ]);\r\n this.close();\r\n }\r\n }\r\n\r\n\r\n //\r\n // Registro e scadenzario\r\n //\r\n\r\n /**\r\n * Checks if all documents are supported by RS\r\n * @param documents : the list of documens\r\n * @returns: true if all documents supports RS\r\n */\r\n RS_enabled(documents: any): boolean {\r\n if (!documents) return false;\r\n if (this.selectionMode > 0) return false;\r\n let allow = false;\r\n documents.forEach((n: any) => {\r\n allow = n.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||\r\n n.model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO ||\r\n n.model === ClipperDefinitions.DM_SCADENZA;\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * New law\r\n * @param document: the law\r\n */\r\n RS_newLaw(document: any): boolean {\r\n if (!document) return false;\r\n if (this.selectionMode > 0 || !this.$clipper.supportsRS) return false;\r\n if (\r\n document.model !== ClipperDefinitions.DM_NORMATIVA_VIGENTE &&\r\n document.model !== ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO &&\r\n document.model !== ClipperDefinitions.DM_SCADENZA) return false;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_NEW_LAW, [document]);\r\n return true;\r\n }\r\n\r\n /**\r\n * New activity\r\n * @param document: the law\r\n */\r\n RS_newActivity(document: any): boolean {\r\n if (!document) return false;\r\n if (this.selectionMode > 0 || !this.$clipper.supportsRS) return false;\r\n if (\r\n document.model !== ClipperDefinitions.DM_NORMATIVA_VIGENTE &&\r\n document.model !== ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO &&\r\n document.model !== ClipperDefinitions.DM_SCADENZA) return false;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_NEW_ACTIVITY, document);\r\n return true;\r\n }\r\n\r\n /**\r\n * Document usage report\r\n * @param document: the law\r\n */\r\n RS_usageReport(document: any): boolean {\r\n if (!document) return false;\r\n if (this.selectionMode > 0 || !this.$clipper.supportsRS) return false;\r\n if (\r\n document.model !== ClipperDefinitions.DM_NORMATIVA_VIGENTE &&\r\n document.model !== ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO &&\r\n document.model !== ClipperDefinitions.DM_SCADENZA) return false;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n return true;\r\n }\r\n\r\n}\r\n\r\n","<div id=\"clipper-document-fixed\">\r\n <div class=\"clipper-document-header\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex.lt-md=\"50\" fxFlex=\"70\" fxFlexAlign=\"center\" class=\"document-title-block\">\r\n <div class=\"truncated\">\r\n <div class=\"large bold\">{{title}}</div>\r\n @if (lastDocument && lastDocument.lastUpdate) {\r\n <div class=\"small item-greyed-2\" style=\"padding-top:5px\">\r\n AGGIORNATO A:\r\n {{lastDocument.lastUpdate}}\r\n </div>\r\n }\r\n @if (lastDocument && lastDocument.expiringDescription) {\r\n <div class=\"small item-greyed-2\" style=\"padding-top:5px\">\r\n {{lastDocument.expiringDescription}}</div>\r\n }\r\n @if (lastDocument && lastDocument.validityInfo) {\r\n <div class=\"small\" style=\"padding-top:5px\"><span class=\"item-line-red-badge\"><b>Attenzione!</b>\r\n {{lastDocument.validityInfo}}</span></div>\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex.lt-md=\"50\" fxFlex=\"30\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"start\" style=\"padding:6px 10px 5px 0\">\r\n @if (canSelect()) {\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"select()\">\r\n Usa selezione\r\n </button>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Indietro\"\r\n aria-label=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Avanti\"\r\n aria-label=\"Avanti\" (click)=\"forward()\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row wrap \" fxFill fxLayoutAlign=\"space-between\" style=\"padding-left: 8px\">\r\n <div fxFlex.xs=\"100\" fxFlexAlign=\"center\">\r\n @if (lastDocument.model === 9) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"index(lastDocument.id)\" color=\"primary\">\r\n Indice\r\n </button>\r\n }\r\n @if (lastDocument.bag && (lastDocument.bag[1] ==='T' || lastDocument.bag[3] ==='T')) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Collegamenti\"\r\n [attr.aria-label]=\"'Collegamenti al documento'\" [matMenuTriggerFor]=\"menuLinks\" color=\"primary\">\r\n Collegamenti\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuLinks=\"matMenu\">\r\n @if (lastDocument.bag && lastDocument.bag[1] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti richiamati'\"\r\n (click)=\"openReferences(lastDocument.id, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[3] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti che richiamano'\"\r\n (click)=\"openReferences(lastDocument.id, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[2] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument.id, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[4] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument.id, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[4] !=='T' && lastDocument.bag[6] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche apportate'\"\r\n (click)=\"openReferences(lastDocument.id, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n </mat-menu>\r\n @if (lastDocument.hasPrimary) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra documento primario'\"\r\n (click)=\"navigate(lastDocument.primaryId)\" color=\"primary\">\r\n {{lastDocument.primaryDescription}}\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[2] ==='T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument.id, 4)\" color=\"primary\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[4] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument.id, 3)\" color=\"primary\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[4] !== 'T' && lastDocument.bag[6] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche apportate'\" (click)=\"openReferences(lastDocument.id, 5)\" color=\"primary\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n @if (lastDocument.secondaryId) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra documento secondario'\"\r\n (click)=\"navigate(lastDocument.secondaryId)\" color=\"primary\">\r\n Testo storico\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[7] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra commento'\"\r\n (click)=\"showComment()\" color=\"primary\">\r\n Commento\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex.xs=\"100\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (hasRelevants() && relevants.hits) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed\" style=\"margin-left:20px; margin-right: 5px\"\r\n matTooltip=\"Parole evidenziate\">{{relevants.hit}}\r\n di {{relevants.hits}}</div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla parola precedente'\"\r\n (click)=\"previousRelevant()\" color=\"primary\" matTooltip=\"Parola precedente\"\r\n [disabled]=\"relevants.hit <= 1\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla prossima parola'\"\r\n (click)=\"nextRelevant()\" color=\"primary\" matTooltip=\"Prossima parola\"\r\n [disabled]=\"relevants.hit >= relevants.hits\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni sul documento\"\r\n [attr.aria-label]=\"'Azioni da eseguire sul documento'\" [matMenuTriggerFor]=\"menuActions\" color=\"primary\">\r\n Azioni\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Apri documento in una nuova finestra'\"\r\n (click)=\"open(lastDocument, true)\">\r\n <mat-icon>open_in_browser</mat-icon>Apri in nuova finestra\r\n </button>\r\n <button mat-menu-item (click)=\"print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <mat-icon>print</mat-icon>Stampa\r\n </button>\r\n <button mat-menu-item (click)=\"find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <mat-icon>find_in_page</mat-icon>Trova nel documento (CTRL+F)\r\n </button>\r\n <button mat-menu-item (click)=\"sendItemsTo([lastDocument])\" [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n </button>\r\n <button mat-menu-item (click)=\"addToBag([lastDocument])\"\r\n [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n </button>\r\n @if (lastDocument && lastDocument.model != 11) {\r\n <button mat-menu-item (click)=\"exportPdf(lastDocument)\" [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n </button>\r\n }\r\n <button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"showLink(lastDocument)\">\r\n <mat-icon>link</mat-icon>Link\r\n </button>\r\n @if ((lastDocument.model === 9 || lastDocument.model === 10)) {\r\n <button mat-menu-item [attr.aria-label]=\"'Genera un report sul documento'\"\r\n (click)=\"displayReport(lastDocument)\">\r\n <mat-icon>assignment</mat-icon>Report\r\n </button>\r\n }\r\n @if (RS_enabled([lastDocument]) && !canSelect()) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (RS_enabled([lastDocument]) && !canSelect()) {\r\n <button type=\"button\" mat-menu-item matTooltip=\"Registro & Scadenzario\"\r\n [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\" [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n }\r\n <mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"RS_newLaw(lastDocument)\">\r\n Nuova legge\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"RS_newActivity(lastDocument)\">\r\n Nuova attività\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"RS_usageReport(lastDocument)\">\r\n Report utilizzo norma\r\n </button>\r\n </mat-menu>\r\n </mat-menu>\r\n @if (hasRelevants() && relevants.items && relevantsSidenav && (!relevantsSidenav.opened || relevantsClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" fxHide fxShow.xs mat-icon-button color=\"primary\" matTooltip=\"Rilevanza\"\r\n aria-label=\"'Rilevanza'\" (click)=\"relevantsOpen()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n <button type=\"button\" fxShow fxHide.xs mat-button color=\"primary\" aria-label=\"'Rilevanza'\"\r\n (click)=\"relevantsOpen()\">\r\n Rilevanza\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (busy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content style=\"padding:0\" [ngStyle]=\"{'min-height.px': contentHeight}\">\r\n <mat-sidenav-container [hasBackdrop]=\"false\" [ngStyle]=\"{'height.px': contentHeight}\">\r\n <mat-sidenav #relevantsSidenav position=\"end\" autoFocus=\"false\" opened=\"false\" mode=\"{{relevantsMode}}\"\r\n class=\"sidenav sidenav-facets relevants-sidenav\">\r\n @if (relevantsBusy) {\r\n <div class=\"sidenav-overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"height:5px\">\r\n @if (relevantsBusy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"64px\">\r\n <div fxLayout=\"row\" fxFill class=\"sidenav-title-container\">\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\" fxLayoutAlign=\"start\">\r\n <span class=\"sidenav-title\">Rilevanza</span>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Nascondi\"\r\n (click)=\"relevantsClose(true)\" color=\"primary\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"scrollbox\">\r\n @if (relevantsBusy) {\r\n <div style=\"padding: 10px; max-width: 340px;\">\r\n <p>Ricerca parti del documento significative in corso...</p>\r\n </div>\r\n }\r\n @if (!relevantsBusy) {\r\n <div style=\"max-width: 340px;\">\r\n <div style=\"padding: 0 10px\">\r\n <p>Parti del documento più significative per la ricerca di <span class='word-hit'>{{lastQuery}}</span>\r\n </p>\r\n <nav class=\"relevant-items\">\r\n <ul>\r\n @for (item of relevants.items; track item) {\r\n <li class=\"small\" (click)=\"gotoRelevant(item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlex=\"100\">\r\n <!--<div [matTooltip]=\"item.title\"> -->\r\n {{item.title}}\r\n <!--</div> -->\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (item.score > 1.2) {\r\n <span fxFlexAlign=\"start\">\r\n <mat-icon style='font-size:small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <div id=\"scroller\" style=\"overflow:auto;\" [ngStyle]=\"{'height.px': contentHeight}\">\r\n <iframe id=\"documentBody\" name=\"documentBody\" style=\"width: 100%; border:0; overflow:hidden;\"\r\n [src]=\"url | safeUrl\" [ngStyle]=\"{'height.px': contentHeight-10}\"></iframe>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>","import { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport {\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentComponent } from './document.component';\r\n\r\n export class ClipperDocumentsUtils {\r\n /**\r\n * Open a document\r\n * @param dialog : the dialog service\r\n * @param clipper : the clipper service\r\n * @param documentId : the document id \r\n * @param query : the query for highlight\r\n * @param selectionMode : the selection mode (1 = single, 2 = multiple, 3 = any selection)\r\n */\r\n static openDocument(\r\n $dialog: DialogService,\r\n $clipper: ClipperService,\r\n documentId: string, \r\n query: string = null,\r\n selectionMode: number = null): MatDialogRef<ClipperDocumentComponent> {\r\n if (!documentId){\r\n $dialog.error(\"Documento non valido.\");\r\n }\r\n if (!$clipper.loggedIn) {\r\n $dialog.error(\"Clipper non è disponibile in questo momento. Verifica la connessione.\");\r\n return null;\r\n }\r\n return $dialog.open(ClipperDocumentComponent, {\r\n ariaLabel: 'documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n id: documentId,\r\n query: query,\r\n selectionMode: selectionMode\r\n },\r\n panelClass: 'document-container',\r\n minWidth: '375px',\r\n maxWidth: '1400px',\r\n width: '99%',\r\n height: '99%'\r\n });\r\n }\r\n\r\n /**\r\n * Extract document title\r\n * @param title : the full document title\r\n */\r\n static parseDocumentTitle(title: string) {\r\n if (!title) return title;\r\n let p = title.indexOf('[');\r\n if (p !== -1) return title.substring(0, p);\r\n return title;\r\n }\r\n\r\n}","import { Component, OnDestroy, OnInit, Input, ViewChild } from '@angular/core';\r\nimport { MatAccordion, MatExpansionModule } from '@angular/material/expansion';\r\nimport { Subject } from 'rxjs';\r\nimport {\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentBaseComponent } from '../document/base/document-base.component';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { ClipperDocumentsUtils } from '../document/documents';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n\r\n@Component({\r\n selector: 'clipper-last-15-days',\r\n templateUrl: './last-15-days.component.html',\r\n styleUrls: ['./last-15-days.component.scss'],\r\n standalone: true,\r\n imports: [ MatTooltipModule, FlexModule, MatButtonModule, MatExpansionModule]\r\n})\r\nexport class ClipperLast15DaysComponent\r\n extends ClipperDocumentBaseComponent\r\n implements OnInit, OnDestroy {\r\n\r\n @ViewChild(MatAccordion) daysAccordion!: MatAccordion;\r\n\r\n\r\n private __d$: Subject<void> = new Subject<void>();\r\n\r\n days: any;\r\n daysExpanded: number = 0;\r\n daysLoaded: boolean = false;\r\n \r\n @Input() showHeader: boolean = true;\r\n\r\n constructor(\r\n public $dialog: DialogService,\r\n public $clipper: ClipperService\r\n ) {\r\n super($dialog, $clipper);\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.$clipper.loggedIn) {\r\n this.fetch();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.__d$.next();\r\n this.__d$.complete();\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n open(documentId: string, newWindow: boolean = false) {\r\n if (!newWindow) this.openDocument(documentId);\r\n else window.open('/documento/' + documentId, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n */\r\n private openDocument(documentId: string) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.$dialog,\r\n this.$clipper,\r\n documentId,\r\n null,\r\n null); \r\n }\r\n\r\n\r\n /**\r\n * Load home personalized contents\r\n */\r\n fetch() {\r\n if (!this.$clipper.loggedIn) return;\r\n if (this.daysLoaded || !this.$clipper.loggedIn) return;\r\n this.$dialog.busy('Preparazione contenuti personalizzati...');\r\n this.$clipper.home()\r\n .subscribe({\r\n next: (r: any) => {\r\n if (!r.success) {\r\n this.$dialog.error(r.message);\r\n } else {\r\n let days: any = [];\r\n r.value.items.forEach((n: any) => {\r\n if (n.items && n.items.length > 0) days.push(n);\r\n });\r\n this.days = days;\r\n this.daysLoaded = true;\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Expand or collapse home days view\r\n * @param collapse\r\n */\r\n expand(collapse: boolean = false) {\r\n if (collapse) this.daysAccordion.closeAll();\r\n else this.daysAccordion.openAll();\r\n }\r\n\r\n\r\n}\r\n","@if (showHeader) {\r\n<div class=\"dialog-title form-column\">\r\n <p>Ecco cosa è successo negli ultimi 15 giorni in base alla tua configurazione.</p>\r\n <p>Per modificare la tua\r\n configurazione devi accedere a <a class=\"link\" href=\"https://clipper.arsedizioni.it\"\r\n matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">Clipper</a>.</p>\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlexAlign=\"center\">\r\n <button mat-button matTooltip=\"Espandi tutto\" [attr.aria-label]=\"'Espandi tutto \\ comprimi tutto'\" color=\"primary\"\r\n (click)=\"expand()\">\r\n Espandi tutto\r\n </button>\r\n <button mat-button matTooltip=\"Comprimi tutto\" [attr.aria-label]=\"'Comprimi tutto'\" color=\"primary\"\r\n (click)=\"expand(true)\">\r\n Comprimi tutto\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n<div>\r\n <mat-accordion #daysAccordion displayMode=\"flat\" multi=\"true\">\r\n @for (d of days; track d; let i = $index) {\r\n <mat-expansion-panel class=\"mat-elevation-z0\" [expanded]=\"i == 0\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span class=\"item-greyed-2\">{{d.label}} &nbsp;({{d.count}})</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n @for (g of d.items; track g; let j = $index) {\r\n <div style=\"padding-left: 15px;\">\r\n <div class=\"item-accent\" style=\"padding-top: 8px;\">{{g.label}} &nbsp;({{g.items.length}})</div>\r\n @for (item of g.items; track item; let k = $index) {\r\n <div style=\"padding-left: 15px;\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">{{k + 1}}.</div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n <div fxLayout=\"column\" fxFill class=\"item\" style=\"padding: 4px 8px; cursor: pointer\"\r\n [attr.aria-label]=\"'Apri documento'\" (click)=\"open(item.documentId)\">\r\n @if (item.author && item.origin === 'LR') {\r\n<div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\"\r\n >\r\n {{item.author}}</div>\r\n}\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n @if (item.title1) {\r\n<span><b>{{item.title1}}\r\n @if (item.part > 0) {\r\n<span class=\"item-badge\">PARTE\r\n {{item.part}}</span>\r\n}</b></span>\r\n}\r\n </div>\r\n @if (item.title2) {\r\n<div class=\"item-line item-line-2 item-line-read\">{{item.title2}}\r\n </div>\r\n}\r\n @if (item.originDescription ) {\r\n<div class=\"item-line item-line-3 item-line-read item-greyed-2\">\r\n {{item.originDescription}}\r\n </div>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n}\r\n </mat-expansion-panel>\r\n}\r\n </mat-accordion>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'clipper-search-result-item',\r\n templateUrl: './search-result-item.component.html',\r\n styleUrls: ['./search-result-item.component.scss'],\r\n standalone: true,\r\n imports: [\r\n \r\n \r\n MatTooltipModule,\r\n MatIconModule,\r\n ],\r\n})\r\nexport class ClipperSearchResultItemComponent {\r\n\r\n @Input() parent: any;\r\n @Input() item: any;\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n */\r\n open(documentId: string) {\r\n this.parent.open(documentId);\r\n }\r\n}\r\n","<div class=\"item-line item-line-4 item-line-read item-greyed-2 uppercase bold\">\r\n {{item.modelName}}\r\n</div>\r\n@if (item.author && item.origin === 'LR') {\r\n<div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">\r\n {{item.author}}\r\n</div>\r\n}\r\n<div class=\"item-line item-line-2 item-line-read\">\r\n <a (click)=\"open(item.documentId)\" [attr.aria-label]=\"'Apri documento ' + (item.title1 || item.title2)\">{{item.title1\r\n ||\r\n item.title2}}</a>\r\n @if (item.part > 0) {\r\n<span class=\"item-badge\">PARTE {{item.part}}</span>\r\n}\r\n</div>\r\n@if (item.title1 && item.title2) {\r\n<div class=\"item-line item-line-2 item-line-read\">\r\n {{item.title2}}\r\n</div>\r\n}\r\n@if (item.originDescription ) {\r\n<div class=\"item-line item-line-3 item-line-read item-greyed-2\">\r\n {{item.originDescription}}</div>\r\n}\r\n@if (item.anchors.length > 0) {\r\n<div class=\"item-line item-line-3 item-line-read\">\r\n <div class=\"item-line-block\">\r\n <div class=\"item-line-block-title\">DETTAGLIO</div>\r\n <div>\r\n @for (a of item.anchors; track a) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n<a class=\"link\" style='line-height: 18px; margin-right: 8px'\r\n (click)=\"open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if (a.veryRelevant) {\r\n<sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n}</a>\r\n}\r\n @if (!a.uri && a.text) {\r\n<span style='line-height: 18px; margin-right: 8px '>{{a.text}}</span>\r\n}\r\n </span>\r\n}\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@if (item.validityState > 0) {\r\n<div class=\"item-line item-line-3 item-line-read\">\r\n <span class=\"item-line-red-badge\">\r\n {{item.validityDescription}}\r\n </span>\r\n</div>\r\n}","import { Component, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MediaChange, MediaObserver } from '@ngbracket/ngx-layout';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogContent } from '@angular/material/dialog';\r\nimport { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { startOfDay, startOfToday, subDays } from 'date-fns';\r\nimport {\r\n BroadcastService,\r\n DateFormat,\r\n ScreenService,\r\n SelectableModel,\r\n SystemUtils\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport {\r\n SearchUtils,\r\n ClipperService,\r\n ClipperMessages,\r\n ClipperDefinitions,\r\n ClipperDialogData,\r\n DocumentSearchSnapshot,\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentBaseComponent } from '../document/base/document-base.component';\r\nimport { ClipperReferencesComponent } from '../references/references.component';\r\nimport { ClipperSearchDialogComponent } from '../search-dialog/search-dialog.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { ClipperDocumentsUtils } from '../document/documents';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER } from '@angular/material/datepicker';\r\nimport { ClipperLast15DaysComponent } from '../last-15-days/last-15-days.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { ClipperDocumentMenuComponent } from '../document/document-menu/document-menu.component';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { NgStyle, NgClass } from '@angular/common';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './browser-dialog.component.html',\r\n styleUrls: ['./browser-dialog.component.scss'],\r\n providers: [\r\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ],\r\n standalone: true,\r\n imports: [\r\n FlexModule,\r\n MatTooltipModule, \r\n MatButtonModule,\r\n MatIconModule,\r\n MatBadgeModule,\r\n MatTabsModule,\r\n ExtendedModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatCheckboxModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n ClipperDocumentMenuComponent,\r\n MatDialogContent,\r\n NgStyle,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperSearchFacetsComponent,\r\n NgClass,\r\n ClipperSearchResultItemComponent,\r\n MatPaginatorModule,\r\n ClipperLast15DaysComponent,\r\n ],\r\n})\r\nexport class ClipperBrowserDialogComponent\r\n extends ClipperDocumentBaseComponent\r\n implements OnInit, OnDestroy {\r\n @ViewChild('facetsSidenav') facetsSidenav: MatSidenav;\r\n @ViewChild('facetsSearch') facetsSearch: ClipperSearchFacetsComponent\r\n @ViewChild('last15Days') last15Days: ClipperLast15DaysComponent;\r\n @ViewChild('paginator') paginator!: MatPaginator;\r\n @ViewChild('contextMenuTrigger') contextMenu!: MatMenuTrigger;\r\n\r\n\r\n\r\n private __d$: Subject<void> = new Subject<void>();\r\n\r\n dialogTab: number = 1;\r\n data: ClipperDialogData = {};\r\n title: string = 'Ricerca in Clipper';\r\n trackableId = (index: number, item: any) => { index >= 0 ? item.id : 0 }\r\n selection: SelectableModel<any, string> = new SelectableModel(true, 'documentId');\r\n snapshot: DocumentSearchSnapshot = {\r\n searchInfo: null,\r\n searchParams: {\r\n module: ClipperDefinitions.MOD_SEMANTIC_SEARCH,\r\n model: null,\r\n first: 0,\r\n count: 25\r\n },\r\n };\r\n facetsMode: string = 'side';\r\n facetsClosed: boolean = false;\r\n currentModel: string = 'Tutto';\r\n currentSort: string = 'Rilevanza';\r\n contentHeight: number = null;\r\n contextMenuPosition = { x: '0px', y: '0px' };\r\n mq: string = null;\r\n item: any = null;\r\n\r\n constructor(\r\n public $dialog: ApplicationDialogService, \r\n public $clipper: ClipperService,\r\n public $screen: ScreenService,\r\n private $broadcast: BroadcastService,\r\n private dialogRef: MatDialogRef<ClipperBrowserDialogComponent>,\r\n private media: MediaObserver,\r\n @Inject(MAT_DIALOG_DATA) _data: ClipperDialogData\r\n ) {\r\n super($dialog, $clipper);\r\n\r\n // Store dialog data\r\n this.data = _data ?? {};\r\n\r\n // Use service snapshot\r\n this.snapshot = $clipper.snapshot;\r\n if (!this.snapshot)\r\n this.snapshot = {\r\n searchInfo: null,\r\n searchParams: null,\r\n };\r\n if (this.snapshot.searchParams == null) {\r\n this.snapshot.searchParams = {\r\n module: ClipperDefinitions.MOD_SEMANTIC_SEARCH,\r\n model: null,\r\n first: 0,\r\n count: 25,\r\n };\r\n\r\n // Store snapshot\r\n $clipper.snapshot = this.snapshot;\r\n }\r\n\r\n // Set initial model\r\n this.changeModel(_data?.initialModel, false);\r\n\r\n this.$clipper.visible = true;\r\n }\r\n\r\n ngOnInit() {\r\n this.$broadcast.getMessage()\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe((message: any) => {\r\n if (message.id === ClipperMessages.DOCUMENT_SELECTED_INNER) {\r\n this.$broadcast.sendMessage(ClipperMessages.DOCUMENT_SELECTED, message.data);\r\n this.close();\r\n }\r\n });\r\n\r\n // React to media query changes\r\n this.media\r\n .asObservable()\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe((changes: MediaChange[]) => {\r\n this.mq = changes[0].mqAlias;\r\n this.updateFacetsVisibility(this.mq);\r\n });\r\n this.updateFacetsVisibility();\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe(() => {\r\n // Update view\r\n this.updateView();\r\n });\r\n this.adjustView();\r\n\r\n setTimeout(() => {\r\n // React to sidenav state change\r\n if (this.facetsSidenav)\r\n this.facetsSidenav.openedChange\r\n .subscribe(() => {\r\n this.adjustView();\r\n });\r\n\r\n // Configure facet seach componet\r\n if (this.facetsSearch) {\r\n this.facetsSearch.changed\r\n .subscribe(() => {\r\n if (this.facetsSearch.fromDate) {\r\n this.snapshot.searchParams.fromDate = this.facetsSearch.fromDate;\r\n this.snapshot.searchParams.toDate = this.facetsSearch.toDate;\r\n this.snapshot.searchParams.year = this.facetsSearch.fromDate.getFullYear();\r\n } else if (this.facetsSearch.changedInterval) {\r\n this.snapshot.searchParams.year = null;\r\n this.snapshot.searchParams.fromDate = null;\r\n this.snapshot.searchParams.toDate = null;\r\n }\r\n if (this.facetsSearch.sector || this.facetsSearch.changedSector)\r\n this.snapshot.searchParams.sector = this.facetsSearch.sector;\r\n if (this.facetsSearch.type || this.facetsSearch.changedType)\r\n this.snapshot.searchParams.type = this.facetsSearch.type;\r\n if (this.facetsSearch.author || this.facetsSearch.changedAuthor)\r\n this.snapshot.searchParams.author = this.facetsSearch.author;\r\n this.fetch(true);\r\n });\r\n }\r\n\r\n if (this.snapshot.facets) {\r\n this.facetsSearch.restoreFromSnapshot(this.snapshot.facets);\r\n if (this.snapshot.facets.hasFacets) this.facetsOpen();\r\n }\r\n }, 250);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.__d$.next();\r\n this.__d$.complete();\r\n this.$clipper.visible = false;\r\n }\r\n\r\n onContextMenu(event: MouseEvent, item: any) {\r\n event.preventDefault();\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n this.contextMenu.menuData = { item: item };\r\n this.contextMenu.openMenu();\r\n }\r\n\r\n /**\r\n * Update sidenav visibility\r\n * @param mq : the current media query\r\n */\r\n updateFacetsVisibility(mq: string = null) {\r\n if (!mq) mq = this.$screen.mq;\r\n if (mq === 'xs') {\r\n this.facetsMode = 'over';\r\n if (\r\n this.facetsSearch &&\r\n this.facetsSearch.hasFacets &&\r\n this.facetsSidenav &&\r\n this.facetsSidenav.opened\r\n )\r\n this.facetsSidenav.close();\r\n } else {\r\n this.facetsMode = 'side';\r\n if (\r\n this.facetsSearch &&\r\n this.facetsSearch.hasFacets &&\r\n this.facetsSidenav &&\r\n !this.facetsClosed\r\n )\r\n this.facetsSidenav.toggle(true);\r\n }\r\n }\r\n\r\n /**\r\n * Open facetsSidenav sidebar\r\n */\r\n facetsOpen() {\r\n this.facetsClosed = false;\r\n this.facetsSidenav.open();\r\n }\r\n\r\n /**\r\n * Close facets sidebar\r\n * @param closedManually : ture if facets has been closed manually by clicking the button\r\n */\r\n facetsClose(closedManually: boolean = false) {\r\n if (this.mq !== 'xs') this.facetsClosed = closedManually;\r\n this.facetsSidenav.close();\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param searchParams : the current search params to use to gather facets\r\n */\r\n getFacets(searchParams: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!this.facetsSearch) return;\r\n this.facetsSearch.busy = true;\r\n this.$clipper.queryFacets(searchParams)\r\n .subscribe((r: any) => {\r\n this.facetsSearch.update(r.value.facets, r.value.interval);\r\n if (this.facetsSearch.hasFacets && !this.facetsClosed && this.mq !== 'xs')\r\n this.facetsOpen();\r\n else this.facetsClose();\r\n this.facetsSearch.busy = false;\r\n\r\n this.snapshot.facets = this.facetsSearch.saveSnapshot();\r\n\r\n // Update view\r\n this.adjustView();\r\n });\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n */\r\n getSeletectIds(): string[] {\r\n if (this.selection.current.selected.length > 100) {\r\n this.$dialog.error('La selezione non può contenere più di 100 elementi.');\r\n return null;\r\n }\r\n let ids: string[] = [];\r\n if (this.selection.current.selected.length > 0) {\r\n this.selection.current.selected.forEach((n: any) => {\r\n ids.push(n.documentId);\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Check if every element are selected\r\n */\r\n isAllSelected() {\r\n return (\r\n this.selection.current.selected.length === this.snapshot.items.length\r\n );\r\n }\r\n\r\n /**\r\n * Master selection toggle\r\n * @parma args: event info\r\n */\r\n masterSelectionToggle(args: any) {\r\n if (args.checked)\r\n this.snapshot.items.forEach((row: any) =>\r\n this.selection.select(row, row.documentId)\r\n );\r\n else\r\n this.snapshot.items.forEach((row: any) =>\r\n this.selection.deselect(row, row.documentId)\r\n );\r\n }\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n canSelect(): boolean {\r\n let allow =\r\n this.selection &&\r\n ((this.data.selectionMode === 1 &&\r\n this.selection.current.selected.length === 1) ||\r\n (this.data.selectionMode === 2 &&\r\n this.selection.current.selected.length > 1) ||\r\n (this.data.selectionMode === 3 &&\r\n this.selection.current.selected.length > 0));\r\n if (allow && this.data.selectableModels?.length > 0) {\r\n this.selection.current.selected.forEach(n => {\r\n if (this.data.selectableModels.indexOf(n.model) === -1) {\r\n allow = false;\r\n return;\r\n }\r\n });\r\n }\r\n return allow;\r\n\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n select() {\r\n if (this.selection.current.selected && this.selection.current.selected.length > 0) {\r\n this.$broadcast.sendMessage(\r\n ClipperMessages.DOCUMENT_SELECTED,\r\n this.selection.current.selected\r\n );\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n * @param newRoute: the new route to navigate to\r\n */\r\n close(newRoute: any = null) {\r\n this.dialogRef.close(newRoute);\r\n }\r\n\r\n /**\r\n * Reset scroll position\r\n */\r\n resetScrollPosition() {\r\n document.querySelector('#search_container').scrollTo(0, 0);\r\n }\r\n\r\n /**\r\n * Update menu buttons visibility when the menu is closed\r\n */\r\n updateMenuButtonsVisibility() {\r\n this.snapshot.items.forEach((n: any) => {\r\n n.isMenuOpen = false;\r\n });\r\n }\r\n\r\n /**\r\n * Update sort\r\n */\r\n updateSortOptions() {\r\n switch (this.snapshot.searchParams.sortMode) {\r\n case ClipperDefinitions.SRT_DATE_ASC:\r\n this.currentSort = 'Data cre.';\r\n break;\r\n case ClipperDefinitions.SRT_POPULARITY:\r\n this.currentSort = 'Popolarità';\r\n break;\r\n case ClipperDefinitions.SRT_RELEVANCE:\r\n this.currentSort = 'Rilevanza';\r\n break;\r\n case ClipperDefinitions.SRT_ORIGINAL:\r\n this.currentSort = 'Data ins. decr.';\r\n break;\r\n case ClipperDefinitions.SRT_TAXONOMY:\r\n this.currentSort = 'Argomento';\r\n break;\r\n default:\r\n this.snapshot.searchParams.sortMode = ClipperDefinitions.SRT_DATE_DESC;\r\n this.currentSort = 'Data decr.';\r\n break;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Adjust view\r\n */\r\n adjustView() {\r\n setTimeout(() => {\r\n this.updateView();\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Update view\r\n */\r\n updateView() {\r\n // Update router height\r\n let a = window.innerHeight;\r\n let b = document.getElementById('clipper-browser-fixed');\r\n try {\r\n if (!a || !b || a === 0) this.adjustView();\r\n let hb = b.clientHeight;\r\n if (hb === 0) this.adjustView();\r\n this.contentHeight = a - hb;\r\n } catch { }\r\n }\r\n\r\n /**\r\n * Update current search info\r\n */\r\n private updateSearchInfo() {\r\n let si = [];\r\n if (\r\n this.snapshot.searchParams.sector ||\r\n (this.facetsSearch && this.facetsSearch.sector)\r\n ) {\r\n let s = SystemUtils.arrayFindByKey(\r\n ClipperDefinitions.SECTORS,\r\n 'id',\r\n this.facetsSearch && this.facetsSearch.sector\r\n ? this.facetsSearch.sector\r\n : this.snapshot.searchParams.sector\r\n );\r\n if (s) {\r\n si.push({\r\n field: 'settore',\r\n value: s.name,\r\n sep: si.length > 0,\r\n });\r\n } else {\r\n let s = SystemUtils.arrayFindByKey(\r\n ClipperDefinitions.MODELS,\r\n 'id',\r\n this.facetsSearch && this.facetsSearch.sector\r\n ? this.facetsSearch.sector\r\n : this.snapshot.searchParams.sector\r\n );\r\n if (s) {\r\n si.push({\r\n field: 'sezione',\r\n value: s.name,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n }\r\n if (\r\n this.snapshot.searchParams.author ||\r\n (this.facetsSearch && this.facetsSearch.author)\r\n ) {\r\n let a = SystemUtils.arrayFindByKey(\r\n ClipperDefinitions.SECTOR_AUTHORS,\r\n 'authorId',\r\n this.facetsSearch && this.facetsSearch.author\r\n ? this.facetsSearch.author\r\n : this.snapshot.searchParams.author\r\n );\r\n if (a) {\r\n si.push({\r\n field: 'autore',\r\n value: a.authorDescription,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n if (this.snapshot.searchParams.topic)\r\n si.push({\r\n field: 'argomento',\r\n value: this.snapshot.searchParams.topic,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.taxonomy)\r\n si.push({\r\n field: 'argomento',\r\n value: this.snapshot.searchParams.taxonomyNode,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.number)\r\n si.push({\r\n field: 'numero',\r\n value: this.snapshot.searchParams.number,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n !this.snapshot.interval &&\r\n (this.snapshot.searchParams.fromDate ||\r\n (this.facetsSearch &&\r\n this.facetsSearch.fromDate &&\r\n this.snapshot.searchParams.model !==\r\n ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO))\r\n ) {\r\n let d1 =\r\n this.facetsSearch && this.facetsSearch.fromDate\r\n ? this.facetsSearch.fromDate\r\n : this.snapshot.searchParams.fromDate;\r\n const d2 =\r\n this.facetsSearch && this.facetsSearch.toDate\r\n ? this.facetsSearch.toDate\r\n : this.snapshot.searchParams.toDate;\r\n si.push({\r\n field: !d2 ? 'in data' : 'da data',\r\n value: SystemUtils.formatDate(d1),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (!this.snapshot.interval && \r\n (this.snapshot.searchParams.toDate ||\r\n (this.facetsSearch &&\r\n this.facetsSearch.toDate &&\r\n this.snapshot.searchParams.model !==\r\n ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO))\r\n ) {\r\n let d =\r\n this.facetsSearch && this.facetsSearch.toDate\r\n ? this.facetsSearch.toDate\r\n : this.snapshot.searchParams.toDate;\r\n si.push({\r\n field: 'a data',\r\n value: SystemUtils.formatDate(d),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (this.snapshot.interval)\r\n si.push({\r\n field: 'intervallo',\r\n value: this.snapshot.interval,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.source)\r\n si.push({\r\n field: 'fonte',\r\n value: SystemUtils.arrayGetValue(\r\n ClipperDefinitions.SOURCES,\r\n this.snapshot.searchParams.source\r\n ),\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.sourceNumber)\r\n si.push({\r\n field: 'num. fonte',\r\n value: this.snapshot.searchParams.sourceNumber,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.snapshot.searchParams.sourceFromDate ||\r\n (this.facetsSearch &&\r\n this.facetsSearch.fromDate &&\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO)\r\n ) {\r\n let d1 =\r\n this.facetsSearch && this.facetsSearch.fromDate\r\n ? this.facetsSearch.fromDate\r\n : this.snapshot.searchParams.sourceFromDate;\r\n const d2 =\r\n this.facetsSearch && this.facetsSearch.toDate\r\n ? this.facetsSearch.toDate\r\n : this.snapshot.searchParams.sourceToDate;\r\n si.push({\r\n field: !d2 ? 'in data fonte' : 'da data fonte',\r\n value: SystemUtils.formatDate(d1),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (\r\n this.snapshot.searchParams.sourceToDate ||\r\n (this.facetsSearch &&\r\n this.facetsSearch.toDate &&\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO)\r\n ) {\r\n let d =\r\n this.facetsSearch && this.facetsSearch.toDate\r\n ? this.facetsSearch.toDate\r\n : this.snapshot.searchParams.sourceToDate;\r\n si.push({\r\n field: 'a data fonte',\r\n value: SystemUtils.formatDate(d),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (this.snapshot.searchParams.text)\r\n si.push({\r\n field: 'testo',\r\n value: this.snapshot.searchParams.text,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.snapshot.searchParams.type ||\r\n (this.facetsSearch && this.facetsSearch.type)\r\n ) {\r\n let t = SystemUtils.arrayFindByKey(\r\n ClipperDefinitions.SECTOR_TYPES,\r\n 'documentTypeId',\r\n this.facetsSearch && this.facetsSearch.type\r\n ? this.facetsSearch.type\r\n : this.snapshot.searchParams.type\r\n );\r\n if (t) {\r\n si.push({\r\n field: 'tipo',\r\n value: t.documentTypeDescription,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n if (this.snapshot.searchParams.showUnreadDocumentsOnly)\r\n si.push({\r\n field: 'stato',\r\n value: 'non letti',\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.snapshot.searchParams.reason ||\r\n (this.facetsSearch && this.facetsSearch.reason)\r\n )\r\n si.push({\r\n field: 'tipo mod.',\r\n value: SystemUtils.arrayGetValue(\r\n ClipperDefinitions.CHANGE_REASONS,\r\n this.facetsSearch && this.facetsSearch.reason\r\n ? this.facetsSearch.reason\r\n : this.snapshot.searchParams.reason\r\n ),\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.changedNumber)\r\n si.push({\r\n field: 'num. modificato',\r\n value: this.snapshot.searchParams.changedNumber,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.changedYear)\r\n si.push({\r\n field: 'anno modificato',\r\n value: this.snapshot.searchParams.changedYear,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.changedTitle)\r\n si.push({\r\n field: 'titolo modificato',\r\n value: this.snapshot.searchParams.changedTitle,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.modifierNumber)\r\n si.push({\r\n field: 'num. modificante',\r\n value: this.snapshot.searchParams.modifierNumber,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.modifierYear)\r\n si.push({\r\n field: 'anno modificante',\r\n value: this.snapshot.searchParams.modifierYear,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.modifierTitle)\r\n si.push({\r\n field: 'titolo modificante',\r\n value: this.snapshot.searchParams.modifierTitle,\r\n sep: si.length > 0,\r\n });\r\n\r\n this.snapshot.searchInfo = si;\r\n }\r\n\r\n /**\r\n * Change search model\r\n * @param model : the new document model \r\n * @param fetch : true if data must be fetched. Default is true\r\n */\r\n changeModel(model: number = null, fetch: boolean = true) {\r\n this.snapshot.searchParams.model = model;\r\n switch (model) {\r\n case ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO: this.currentModel = \"Gazzette e bollettini\"; break;\r\n case ClipperDefinitions.DM_NORMATIVA_VIGENTE: this.currentModel = \"Normativa vigente\"; break;\r\n default:\r\n this.currentModel = \"Tutto\";\r\n break;\r\n }\r\n if (fetch)\r\n this.fetch(true);\r\n }\r\n\r\n /**\r\n * Apply a sort\r\n * @param mode : the sort mode\r\n */\r\n sortBy(mode: number) {\r\n this.snapshot.searchParams.sortMode = mode;\r\n this.updateSortOptions();\r\n this.fetch(false);\r\n }\r\n\r\n /**\r\n * Perform a search using current params\r\n */\r\n fetch(newSearch: boolean = false) {\r\n this.$dialog.busy('Ricerca in corso...');\r\n this.snapshot.searchParams.count = 25;\r\n if (newSearch) {\r\n this.snapshot.searchParams.first = 0;\r\n if (this.snapshot.searchParams.text)\r\n this.snapshot.searchParams.sortMode = ClipperDefinitions.SRT_RELEVANCE;\r\n else if (!this.snapshot.searchParams.sortMode)\r\n this.snapshot.searchParams.sortMode = ClipperDefinitions.SRT_DATE_DESC;\r\n this.updateSortOptions();\r\n }\r\n if (this.snapshot.searchParams.year > 0) {\r\n const year = this.snapshot.searchParams.year;\r\n this.snapshot.searchParams.fromDate = new Date(year, 0, 1, 2);\r\n this.snapshot.searchParams.toDate = new Date(year, 11, 31, 2);\r\n } else {\r\n this.snapshot.searchParams.year = null;\r\n }\r\n if (this.snapshot.searchParams.text) {\r\n this.snapshot.searchParams.text = SearchUtils.normalizeTextQuery(this.snapshot.searchParams.text);\r\n }\r\n this.$clipper.query(this.snapshot.searchParams)\r\n .subscribe({\r\n next: (r: any) => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else {\r\n this.snapshot.total = r.value?.total ?? 0;\r\n this.snapshot.items = r.value?.items ?? [];\r\n this.snapshot.interval = r.value?.interval;\r\n const today = startOfToday();\r\n const groupByYear =\r\n this.snapshot.searchParams.sortMode ===\r\n ClipperDefinitions.SRT_DATE_ASC ||\r\n this.snapshot.searchParams.sortMode ===\r\n ClipperDefinitions.SRT_DATE_DESC;\r\n const groupByRelevance =\r\n this.snapshot.searchParams.sortMode ===\r\n ClipperDefinitions.SRT_RELEVANCE;\r\n const groupByPopularity =\r\n this.snapshot.searchParams.sortMode ===\r\n ClipperDefinitions.SRT_POPULARITY;\r\n let group = '';\r\n this.snapshot.items.forEach((n: any) => {\r\n if (\r\n n.model === ClipperDefinitions.DM_SCADENZA ||\r\n n.model === ClipperDefinitions.DM_SEGNALAZIONE\r\n ) {\r\n switch (n.model) {\r\n case ClipperDefinitions.DM_SCADENZA:\r\n n.originDescription = 'Scadenza';\r\n break;\r\n case ClipperDefinitions.DM_SEGNALAZIONE:\r\n n.originDescription = 'Segnalazione';\r\n break;\r\n }\r\n if (n.expiringInfo) {\r\n let parts = n.expiringInfo.split('|');\r\n if (parts.length === 3) n.description = parts[2];\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = subDays(n.date, 15);\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n }\r\n } else {\r\n if (n.date) {\r\n n.date = startOfDay(new Date(n.date));\r\n const d = startOfDay(subDays(startOfToday(), 7))\r\n n.isNew = n.date > d;\r\n }\r\n if (n.anchors) {\r\n let anchorType: number;\r\n let anchors: any = [];\r\n n.anchors.forEach((a: any) => {\r\n if (a.type === 20) return;\r\n if (a.type !== anchorType) {\r\n if (a.type >= 3)\r\n anchors.push({ text: a.typeDescription });\r\n anchorType = a.type;\r\n }\r\n let score = a.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n anchors.push({\r\n text: a.text,\r\n title: a.title,\r\n documentId: a.documentId,\r\n uri: a.uri,\r\n veryRelevant: score > 0.6,\r\n });\r\n });\r\n n.anchors = anchors;\r\n }\r\n if (n.validityState > 0) {\r\n n.validityDescription = 'Il documento non è più vigente';\r\n n.isExpired = true;\r\n if (n.validUntilDate) {\r\n const expiringDate = startOfDay(new Date(n.validUntilDate));\r\n if (expiringDate < today) {\r\n n.validityDescription =\r\n 'Il documento non è più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n } else {\r\n n.validityDescription =\r\n 'Il documento non sarà più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n n.isExpired = false;\r\n }\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n n.isExpired = n.date < today;\r\n }\r\n }\r\n if (groupByYear) {\r\n let year = SystemUtils.formatDate(n.date, DateFormat.LongMonthAndYear).toLowerCase();\r\n if (group !== year) {\r\n n.group = year;\r\n group = year;\r\n }\r\n } else if (groupByRelevance) {\r\n if (group !== 'none') {\r\n n.group =\r\n 'Elenco per rilevanza: gli elementi più importanti sono in testa';\r\n group = 'none';\r\n }\r\n } else if (groupByPopularity) {\r\n if (group !== 'none') {\r\n n.group =\r\n 'Elenco per popolarità: gli elementi più importanti sono in testa';\r\n group = 'none';\r\n }\r\n }\r\n if (n.taxonomy) {\r\n n.taxonomyNodes = n.taxonomy.split('\\r\\n');\r\n if (\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_GUIDA ||\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_GUIDA_NORMATIVA ||\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI\r\n ) {\r\n for (let i = 0; i < n.taxonomyNodes.length; i++) {\r\n let node = n.taxonomyNodes[i];\r\n let p = node.indexOf('>');\r\n if (p !== -1)\r\n n.taxonomyNodes[i] = node\r\n .substring(p + 1)\r\n .replace(/\\>/gi, ' > ');\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Show toast if new search\r\n if (this.snapshot.total > 0) {\r\n if (this.facetsSearch)\r\n this.facetsSearch.hasTooManyResults = this.snapshot.total >= 1000;\r\n if (newSearch && this.snapshot.searchParams.first === 0) {\r\n if (this.snapshot.total >= 1000) {\r\n let t = this.$dialog.toast(\r\n 'Ho trovato più di 1000 elementi',\r\n 3000,\r\n 'warning',\r\n 'Rifinisci'\r\n );\r\n t.instance.action.subscribe(() => {\r\n this.advancedSearch();\r\n });\r\n } else {\r\n this.$dialog.toast(\r\n 'Ho trovato ' +\r\n this.snapshot.total +\r\n (this.snapshot.total === 1 ? ' elemento' : ' elementi')\r\n );\r\n }\r\n }\r\n\r\n if (newSearch && !this.snapshot.searchParams.first) {\r\n // Update facets\r\n this.getFacets(this.snapshot.searchParams);\r\n }\r\n } else {\r\n this.facetsSearch.reset();\r\n this.facetsSidenav.close();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n }\r\n this.resetScrollPosition();\r\n\r\n // Update snapshot\r\n this.$clipper.snapshot = this.snapshot;\r\n\r\n // Update view\r\n this.updateSearchInfo();\r\n this.updateFacetsVisibility();\r\n this.adjustView();\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: any) {\r\n let first = e.pageIndex * this.snapshot.searchParams.count;\r\n this.snapshot.searchParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Clear search\r\n */\r\n clearSearch() {\r\n this.snapshot.searchParams = {\r\n module: ClipperDefinitions.MOD_SEMANTIC_SEARCH,\r\n model: ClipperDefinitions.DM_NORMATIVA_VIGENTE,\r\n first: 0,\r\n count: 25,\r\n };\r\n this.currentModel = 'Normativa vigente';\r\n this.snapshot.items = null;\r\n this.snapshot.total = 0;\r\n this.snapshot.facets = null;\r\n this.facetsSearch.reset();\r\n this.facetsSidenav.close();\r\n this.updateSearchInfo();\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n open(documentId: string, newWindow: boolean = false) {\r\n if (!newWindow) this.openDocument(documentId);\r\n else window.open('/documento/' + documentId, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n */\r\n private openDocument(documentId: string) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.$dialog,\r\n this.$clipper,\r\n documentId,\r\n this.snapshot.searchParams.text,\r\n this.data.selectionMode\r\n );\r\n }\r\n\r\n /**\r\n * Compose a free text search query\r\n */\r\n composeSearch() {\r\n let d = this.$dialog.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n this.snapshot.searchParams.text = r.query;\r\n\r\n // Finished\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Return item state css class\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateCssClass(item: any) {\r\n if (item.isExpired) return 'item-expired-ind';\r\n if (item.popularity === 3) return 'item-popular-ind';\r\n else if (item.popularity > 3) return 'item-very-popular-ind';\r\n return null;\r\n }\r\n\r\n /**\r\n * Return the item state tooltip text\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateTooltip(item: any) {\r\n if (item.isExpired) return 'Non più vigente';\r\n if (item.popularity === 3) return 'Documento con numero di citazioni alto';\r\n else if (item.popularity > 3)\r\n return 'Documento con numero di citazioni molto alto';\r\n return null;\r\n }\r\n\r\n /**\r\n * Send item link or all selected ones by email\r\n * @param item : the optional item\r\n */\r\n sendTo(item: any = null) {\r\n this.sendItemsTo(item ? [item] : this.selection.current.selected);\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param item : the document item\r\n * @param mode : the mode\r\n */\r\n references(item: any, mode: number = ClipperDefinitions.SM_REFERENCES_IN) {\r\n if (!item) return;\r\n let d = this.$dialog.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: { id: item.documentId, mode: mode },\r\n panelClass: 'references-container',\r\n minWidth: '375px',\r\n maxWidth: '1000px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: any) => {\r\n if (r && r.id) this.open(r.id);\r\n });\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param item : the document\r\n */\r\n report(item: any) {\r\n if (!item) return; if (!item) return;\r\n if (item.model != ClipperDefinitions.DM_NORMATIVA_VIGENTE && item.model != ClipperDefinitions.DM_SCADENZA) {\r\n this.$dialog.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n } this.openReport(item.documentId, item.title1);\r\n }\r\n\r\n /**\r\n * Perform search\r\n */\r\n search() {\r\n if (this.snapshot.searchParams.sector === this.facetsSearch.sector)\r\n this.snapshot.searchParams.sector = null;\r\n\r\n // Reset paginator\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n\r\n // Reset facets search\r\n this.facetsSearch.reset();\r\n\r\n // Do search\r\n this.fetch(true);\r\n }\r\n\r\n /**\r\n * Show advanced search\r\n */\r\n advancedSearch() {\r\n let d = this.$dialog.open(ClipperSearchDialogComponent, {\r\n ariaLabel: 'ricerca avanzata',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n params: this.snapshot.searchParams,\r\n enableRead: false,\r\n enableSector: true,\r\n enableType: true,\r\n enableAuthor: true,\r\n enableTopic: true,\r\n enableText: true,\r\n enableDocument: true,\r\n enableSource: true,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '700px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n // Update search params\r\n r.model = this.snapshot.searchParams.model;\r\n this.snapshot.searchParams = r;\r\n this.snapshot.searchParams.first = 0;\r\n this.snapshot.searchParams.count = 25;\r\n if (this.snapshot.searchParams.sector === this.facetsSearch.sector)\r\n this.snapshot.searchParams.sector = null;\r\n\r\n // Reset paginator\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n\r\n // Reset facets search\r\n this.facetsSearch.reset();\r\n\r\n // Do search\r\n this.fetch(true);\r\n\r\n // Finished\r\n d.close();\r\n\r\n });\r\n }\r\n\r\n /**\r\n * Show free text help\r\n */\r\n helpSearch() {\r\n this.$dialog.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Manage clipper bag\r\n */\r\n manageBag() {\r\n let items: any = [];\r\n this.$clipper.bag.forEach((n: any) => {\r\n let title = n.Title1 ? n.Title1 : n.Title2;\r\n items.push({\r\n template: title,\r\n bag: n,\r\n searchBag: { name: title },\r\n });\r\n });\r\n let d = this.$dialog.select({\r\n title: 'Gestisci documenti di lavoro',\r\n multi: false,\r\n mustSelect: false,\r\n okCaption: 'SELEZIONA',\r\n items: items,\r\n canDelete: true,\r\n canView: true,\r\n });\r\n d.componentInstance.view\r\n .subscribe((r: any) => {\r\n let item = r.bag;\r\n this.open(item.DocumentId);\r\n });\r\n d.componentInstance.delete\r\n .subscribe((r: any) => {\r\n var item = r.selectedItems[0].bag;\r\n this.$clipper.removeFromBag(item.DocumentId).subscribe(() => {\r\n this.$dialog.toast('Operazione completata con successo.');\r\n for (let p = 0; p < r.items.length; p++) {\r\n if (r.items[p].bag.DocumentId === item.DocumentId) {\r\n r.items.splice(p, 1);\r\n if (r.items.length === 0) d.close();\r\n return;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Show home tab\r\n */\r\n showHome() {\r\n this.dialogTab = 2;\r\n if (this.$clipper.loggedIn && !this.last15Days.daysLoaded) this.last15Days.fetch();\r\n }\r\n\r\n /**\r\n * Expand or collapse home days view\r\n * @param collapse\r\n */\r\n expandHome(collapse: boolean = false) {\r\n this.last15Days.expand(collapse)\r\n }\r\n \r\n //\r\n // Registro e scadenzario\r\n //\r\n\r\n /**\r\n * Checks if all documents are supported by RS\r\n * @param documents : the list of documens\r\n * @returns: true if all documents supports RS\r\n */\r\n RS_enabled(documents: any): boolean {\r\n if (!documents) return false;\r\n if (this.data.selectionMode > 0) return false;\r\n let allow = false;\r\n documents.forEach((n: any) => {\r\n allow = n.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||\r\n n.model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO ||\r\n n.model === ClipperDefinitions.DM_SCADENZA;\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * New law\r\n * @param document: the law\r\n */\r\n RS_newLaw(document: any) {\r\n if (this.data.selectionMode > 0 || !this.$clipper.supportsRS) return;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_NEW_LAW, document ? [document] : this.selection.current.selected);\r\n }\r\n\r\n /**\r\n * New activity\r\n * @param document: the law\r\n */\r\n RS_newActivity(document: any) {\r\n if (!document) return;\r\n if (this.data.selectionMode > 0 || !this.$clipper.supportsRS) return;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_NEW_ACTIVITY, document);\r\n }\r\n\r\n /**\r\n * Document usage report\r\n * @param document: the law\r\n */\r\n RS_usageReport(document: any) {\r\n if (!document) return;\r\n if (this.data.selectionMode > 0 || !this.$clipper.supportsRS) return;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n }\r\n\r\n}\r\n","<div id=\"clipper-browser-fixed\">\r\n <div class=\"clipper-browser-header\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <img src=\"./../../../assets/images/clipper_logo.png\" alt=\"Clipper\" style=\"max-height: 50px; padding: 5px\" />\r\n </a>\r\n </div>\r\n @if (data.selectionMode > 0) {\r\n <div fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (canSelect()) {\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"select()\">\r\n Usa selezione\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div fxFlex=\"150px\" fxLayoutAlign=\"end\">\r\n @if ($clipper.bag.length > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Documenti di lavoro\"\r\n aria-label=\"'Documenti di lavoro'\" (click)=\"manageBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"$clipper.bag.length\" matBadgeColor=\"accent\">work_outline</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <nav mat-tab-nav-bar mat-stretch-tabs [tabPanel]=\"tabPanel1\">\r\n <a mat-tab-link (click)=\"dialogTab = 1\" [active]=\"dialogTab === 1\" [disabled]=\"!$clipper.loggedIn\">Ricerca</a>\r\n <a mat-tab-link (click)=\"showHome()\" [active]=\"dialogTab === 2\" [disabled]=\"!$clipper.loggedIn\">\r\n <mat-icon>update</mat-icon>\r\n <span fxHide.xs style=\"margin-left: 8px\"> Ultimi 15 giorni</span>\r\n </a>\r\n </nav>\r\n <mat-tab-nav-panel #tabPanel1></mat-tab-nav-panel>\r\n <div [hidden]=\"dialogTab !== 1\">\r\n <div style=\"padding: 15px 0 10px 15px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex=\"100\" fxFlex.xs=\"62\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Numero</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"snapshot.searchParams.number\" #number=\"ngModel\" name=\"number\"\r\n maxlength=\"10\" (keyup.Enter)=\"fetch(true)\">\r\n @if (snapshot.searchParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"snapshot.searchParams.number = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"snapshot.searchParams.year\" #year=\"ngModel\" name=\"year\" min=\"0\"\r\n maxlength=\"4\" (keyup.Enter)=\"fetch(true)\" />\r\n @if (snapshot.searchParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"snapshot.searchParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (year.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"100\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Parole, frasi o concetti...</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" #text [(ngModel)]=\"snapshot.searchParams.text\"\r\n maxlength=\"200\" (keyup.Enter)=\"search()\" autofocus />\r\n @if (snapshot.searchParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"snapshot.searchParams.text = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); composeSearch()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); helpSearch()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxFlex.xs=\"36\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end\" fxFill>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"search()\" color=\"primary\"\r\n [attr.aria-label]=\"'Avvia la ricerca'\" matTooltip=\"Avvia ricerca\" [disabled]=\"!$clipper.loggedIn\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"advancedSearch()\" color=\"primary\"\r\n [attr.aria-label]=\"'Ricerca avanzata'\" matTooltip=\"Ricerca avanzata\" [disabled]=\"!$clipper.loggedIn\">\r\n <mat-icon>settings</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n @if (snapshot.searchInfo && snapshot.searchInfo.length > 0) {\r\n <div fxHide.xs class=\"search-info small\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <b>RICERCA ATTIVA</b>&nbsp;&nbsp;&nbsp;\r\n @for (si of snapshot.searchInfo; track si) {\r\n <span>\r\n {{si.sep ? '&nbsp;&nbsp;' : ''}} {{si.field}}: <span\r\n class=\"item-primary lowercase\"><i>{{si.value}}</i></span>\r\n </span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"start\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Azzera ricerca\" (click)=\"clearSearch()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div style=\"padding:0 0 6px 20px;\" fxLayout=\"row wrap-reverse\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlexAlign=\"center\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n @if (snapshot.total > 0) {\r\n <div fxFlexAlign=\"center\">\r\n <mat-checkbox color=\"primary\" (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\"\r\n [disabled]=\"!snapshot.items || snapshot.items.length == 0\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"*\">\r\n @if (snapshot.total > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Ordina\" [attr.aria-label]=\"'Menu ordina'\"\r\n [matMenuTriggerFor]=\"menuSort\" color=\"primary\" [disabled]=\"!snapshot.total\">\r\n <span fxHide.lt-lg>Ordina per:</span>\r\n <mat-icon fxHide.gt-md>sort</mat-icon> {{currentSort}}\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSort=\"matMenu\">\r\n <button mat-menu-item (click)=\"sortBy(3)\" [attr.aria-label]=\"'Ordina per data decrescente'\">\r\n Data decrescente\r\n </button>\r\n <button mat-menu-item (click)=\"sortBy(2)\" [attr.aria-label]=\"'Ordina per data crescente'\">\r\n Data crescente\r\n </button>\r\n @if (snapshot.searchParams.text) {\r\n <button mat-menu-item (click)=\"sortBy(1)\" [attr.aria-label]=\"'Ordina per rilevanza'\">\r\n Rilevanza\r\n </button>\r\n }\r\n <button mat-menu-item (click)=\"sortBy(5)\" [attr.aria-label]=\"'Ordina per popolarità'\">\r\n Popolarità\r\n </button>\r\n <!-- <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"sortBy(4)\"\r\n [attr.aria-label]=\"'Ordina per data di inserimento descrescente'\">\r\n Data di inserimento decrescente\r\n </button>-->\r\n </mat-menu>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Menu modello'\"\r\n [matMenuTriggerFor]=\"menuModels\" color=\"primary\">\r\n <span fxHide.lt-lg>Mostra:</span>\r\n <mat-icon fxHide.gt-md>filter_list</mat-icon> {{currentModel}}\r\n <mat-icon class=\" icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n <mat-menu #menuModels=\"matMenu\">\r\n <button mat-menu-item (click)=\"changeModel(2)\" [attr.aria-label]=\"'Mostra aggiornamento normativo'\">\r\n Gazzette e bollettini\r\n </button>\r\n <button mat-menu-item (click)=\"changeModel(9)\" [attr.aria-label]=\"'Normativa vigente'\">\r\n Normativa vigente\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"changeModel()\" [attr.aria-label]=\"'Mostra tutti i documenti'\">\r\n Tutto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n color=\"primary\" [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [isSelectable]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (facetsSearch && facetsSearch.hasFacets && facetsSidenav && (!facetsSidenav.opened || facetsClosed)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Affina ricerca\"\r\n aria-label=\"'Affina ricerca'\" (click)=\"facetsOpen()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"dialogTab !== 2\">\r\n <div class=\"dialog-title form-column\">\r\n <p>Ecco cosa è successo negli ultimi 15 giorni in base alla tua configurazione.</p>\r\n <p>Per modificare la tua\r\n configurazione devi accedere a <a class=\"link\" href=\"https://clipper.arsedizioni.it\"\r\n matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">Clipper</a>.</p>\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlexAlign=\"center\">\r\n <button mat-button matTooltip=\"Espandi tutto\" [attr.aria-label]=\"'Espandi tutto \\ comprimi tutto'\"\r\n color=\"primary\" (click)=\"expandHome()\">\r\n Espandi tutto\r\n </button>\r\n <button mat-button matTooltip=\"Comprimi tutto\" [attr.aria-label]=\"'Comprimi tutto'\" color=\"primary\"\r\n (click)=\"expandHome(true)\">\r\n Comprimi tutto\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content style=\"padding:0 0 0 15px\" [ngStyle]=\"{'min-height.px': contentHeight}\">\r\n <div [hidden]=\"dialogTab !== 1\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': contentHeight}\">\r\n <mat-sidenav #facetsSidenav position=\"end\" autoFocus=\"false\" opened=\"false\" mode=\"{{facetsMode}}\"\r\n class=\"sidenav sidenav-facets\">\r\n @if (facetsSearch.busy) {\r\n <div class=\"sidenav-overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"height:5px\">\r\n @if (facetsSearch.busy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"64px\">\r\n <div fxLayout=\"row\" fxFill class=\"sidenav-title-container\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" fxLayoutAlign=\"start\">\r\n <span class=\"sidenav-title\">Affina ricerca</span>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Nascondi\" (click)=\"facetsClose(true)\"\r\n color=\"primary\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow: hidden;\">\r\n <clipper-search-facets #facetsSearch></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <div [ngStyle]=\"{'height.px': contentHeight }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"100\" id=\"search_container\" style=\"overflow: auto\">\r\n <div style=\"overflow:hidden\">\r\n @if (!snapshot.total) {\r\n <div style=\"padding:32px; text-align: center;\" class=\"item-greyed-1\">\r\n <p>\r\n Non hai ancora effettuato\r\n la tua prima ricerca oppure la ricerca effettuata non ha prodotto alcun risultato.</p>\r\n <p>Inserisci nell'apposito campo ciò che intendi cercare e fai click su <b>Trova</b> oppure utilizza\r\n la\r\n <b>Ricerca avanzata</b>\r\n </p>.\r\n </div>\r\n }\r\n @if (snapshot.total > 0) {\r\n <div>\r\n @for (item of snapshot.items; track trackableId($index, item)) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div class=\"items-group-title item-accent\">{{item.group}}</div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection.isSelected(item) }\">\r\n <div fxFlex=\"48px\" fxFlexAlign=\"center\">\r\n @if ($screen.isTouchable || item.isOver || selection.isSelected(item.documentId)) {\r\n <mat-checkbox fxLayoutAlign=\"center\" color=\"primary\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\" style=\"padding:6px 0\">\r\n <clipper-search-result-item [parent]=\"this\" [item]=\"item\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection.isSelected(item)) {\r\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isSelectable]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (snapshot.total > 0) {\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [pageIndex]=\"snapshot.searchParams.first / snapshot.searchParams.count\" [length]=\"snapshot.total\"\r\n [pageSize]=\"snapshot.searchParams.count\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n </div>\r\n <div [hidden]=\"dialogTab !== 2\">\r\n <clipper-last-15-days #last15Days [showHeader]=\"false\"></clipper-last-15-days>\r\n </div>\r\n</div>","/*\r\n * Public API Surface of ars-utils\r\n */\r\n\r\nexport * from './ui/browser-dialog/browser-dialog.component';\r\nexport * from './ui/search-dialog/search-dialog.component';\r\nexport * from './ui/search-facets/search-facets.component';\r\nexport * from './ui/search-free-text-help/search-free-text-help.component';\r\nexport * from './ui/search-free-text-query-builder/search-free-text-query-builder.component';\r\nexport * from './ui/search-result-item/search-result-item.component';\r\nexport * from './ui/last-15-days/last-15-days.component';\r\nexport * from './ui/references/references.component';\r\nexport * from './ui/document/base/document-base.component';\r\nexport * from './ui/document/document.component';\r\nexport * from './ui/document/document-index/document-index.component';\r\nexport * from './ui/document/document-menu/document-menu.component';\r\nexport * from './ui/document/documents';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i4","i6","i5","saveAs","i10","i11","i8","i7","i12","i15","i9","i13","i14","i17","i18","i20","i21"],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-clipper.ui.mjs","sources":["../../../projects/ars-utils/clipper.ui/ui/document/base/document-base.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document-menu/document-menu.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document-menu/document-menu.component.html","../../../projects/ars-utils/clipper.ui/ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/ui/references/references.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.html","../../../projects/ars-utils/clipper.ui/ui/search-dialog/search-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-dialog/search-dialog.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document-index/document-index.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document-index/document-index.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document.component.html","../../../projects/ars-utils/clipper.ui/ui/document/documents.ts","../../../projects/ars-utils/clipper.ui/ui/last-15-days/last-15-days.component.ts","../../../projects/ars-utils/clipper.ui/ui/last-15-days/last-15-days.component.html","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.html","../../../projects/ars-utils/clipper.ui/ui/browser-dialog/browser-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/browser-dialog/browser-dialog.component.html","../../../projects/ars-utils/clipper.ui/public_api.ts","../../../projects/ars-utils/clipper.ui/arsedizioni-ars-utils-clipper.ui.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { SendToDialogComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { saveAs } from 'file-saver';\r\nimport {\r\n ClipperService \r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n})\r\nexport class ClipperDocumentBaseComponent {\r\n constructor(\r\n public $dialog: DialogService,\r\n public $clipper: ClipperService\r\n ) { }\r\n\r\n /**\r\n * Export a document in pdf format\r\n * @param item : the document to export\r\n */\r\n exportPdf(item: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!item || item.model === 11) return;\r\n this.$dialog\r\n .confirm(\"Confermi l'esportazione?\", 'Attenzione!')\r\n .componentInstance.choosen.subscribe((r: any) => {\r\n if (r.result === 'ok') {\r\n let id = item.id || item.documentId;\r\n this.$dialog.busy('Esportazione in corso...');\r\n this.$clipper.exportPdf(id)\r\n .subscribe({\r\n next: (r2: any) => {\r\n saveAs(r2, (item.title1 ? item.title1 : id) + '.pdf');\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save current document list or just the selected documents as a csv\r\n * @param items: the item list\r\n * @param searchParams: the search params\r\n */\r\n exportItems(items: any, searchParams: any = null) {\r\n if (!this.$clipper.loggedIn) return;\r\n let ids: string[] = [];\r\n if (items) {\r\n items.forEach((n: any) => {\r\n ids.push(n.documentId)\r\n });\r\n }\r\n let model: any = { ids: ids, query: null, format: 1 };\r\n if (model.ids.length === 0) model.query = searchParams;\r\n this.$dialog.busy('Salvataggio in corso...');\r\n this.$clipper.export(model)\r\n .subscribe({\r\n next: (r) => {\r\n saveAs(r, 'elenco.csv');\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n\r\n addToBag(items: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n let ids: string[] = [];\r\n items.forEach((n: any) => {\r\n ids.push(n.id || n.documentId);\r\n });\r\n this.$clipper.addToBag(ids).subscribe(() => {\r\n this.$dialog.toast(\"Operazione completata con successo.\");\r\n });\r\n }\r\n\r\n /**\r\n * Show a document permalink\r\n * @param item : the item to show the link for\r\n */\r\n showLink(item: any) {\r\n if (!item) return;\r\n let id = item.id || item.documentId;\r\n let channels = item.channelName\r\n ? 'Canali: ' + item.channelName + '<br>'\r\n : '';\r\n let origin = item.origin\r\n ? 'Origine: ' +\r\n item.origin +\r\n ' ' +\r\n (item.originDescription ? item.originDescription : '') +\r\n '<br>'\r\n : '';\r\n let topics = item.topics ? 'Argomento: ' + item.topics + '<br>' : '';\r\n if (!id) return;\r\n let message =\r\n \"<p>Il link che trovi qui sotto è un riferimento diretto al documento selezionato.</p>\" +\r\n \"<p>Lo puoi utilizzare nella tua documentazione o inviarlo per email ad un tuo collega. La persona che desidererà visualizzare il documento dovrà necessariamente essere un utente abbonato.</p>\" +\r\n \"<p>Seleziona e copia (fai CTRL+C) il link qui sotto.</p>\" +\r\n \"<div class='small item-greyed-2'>\" +\r\n this.$clipper.serviceUri +\r\n '/?id=' +\r\n id +\r\n '</div>' +\r\n '<br>' +\r\n '<hr>' +\r\n '<p class=\"small\">' +\r\n channels +\r\n origin +\r\n topics +\r\n '</p>';\r\n\r\n this.$dialog.info(message, 'Copia link', 'CHIUDI');\r\n }\r\n\r\n /**\r\n * Send documents links by email\r\n * @param items : the document list\r\n */\r\n sendItemsTo(items: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!items || items.length === 0) return;\r\n let d = this.$dialog.open(SendToDialogComponent, {\r\n ariaLabel: 'invia documenti per email',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: {\r\n info:\r\n 'Puoi inviare i documenti a chi vuoi ma, per poterli visualizzare, è necessario essere un utente abbonato.',\r\n count: items.length,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n let ids: string[] = [];\r\n items.forEach((n: any) => {\r\n ids.push(n.id || n.documentId);\r\n });\r\n r.ids = ids;\r\n this.$dialog.busy('Invio in corso...');\r\n this.$clipper.sendTo(r)\r\n .subscribe({\r\n next: (r2: any) => {\r\n if (!r2.success) this.$dialog.error(r2.message);\r\n else {\r\n this.$dialog.toast('Invio completato con successo.');\r\n\r\n // Finished\r\n d.close();\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param documentId : the document id\r\n * @param title: the document short title\r\n */\r\n openReport(documentId: string, title: string = null) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!documentId) return;\r\n this.$clipper.report(documentId)\r\n .subscribe({\r\n next: (r) => {\r\n saveAs(r, (title ? title : documentId) + '.html');\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport {\r\n ClipperDefinitions,\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\nexport interface ClipperFacet {\r\n type: number;\r\n typeName: string;\r\n title: string;\r\n value: string;\r\n count: number;\r\n}\r\n\r\ninterface ClipperFacetGroup {\r\n name: string;\r\n selectedValue: string;\r\n selectedValueDescription: string;\r\n values: ClipperFacet[];\r\n index: number;\r\n}\r\n\r\nexport class ClipperSearchFacetsSnapshot {\r\n groups: ClipperFacetGroup[] = [];\r\n usedGroups: ClipperFacetGroup[] = [];\r\n hasFacets: boolean = false;\r\n sector?: string = null;\r\n author?: string = null;\r\n anchor?: string = null;\r\n type?: string = null;\r\n reason?: string = null;\r\n fromDate?: Date = null;\r\n toDate?: Date = null;\r\n interval?: string = null;\r\n}\r\n\r\n@Component({\r\n selector: 'clipper-search-facets',\r\n templateUrl: './search-facets.component.html',\r\n styleUrls: ['./search-facets.component.scss'],\r\n standalone: true,\r\n imports: [FlexModule, MatButtonModule, MatTooltipModule, MatIconModule, MatDividerModule, MatExpansionModule]\r\n})\r\nexport class ClipperSearchFacetsComponent {\r\n @Input() busy: boolean = false;\r\n @Output() changed = new EventEmitter<void>();\r\n\r\n groups: ClipperFacetGroup[] = [];\r\n usedGroups: ClipperFacetGroup[] = [];\r\n hasFacets: boolean = false;\r\n hasTooManyResults: boolean = true;\r\n sector: string = null;\r\n author: string = null;\r\n anchor: string = null;\r\n type: string = null;\r\n reason: string = null;\r\n fromDate: Date = null;\r\n toDate: Date = null;\r\n interval: string = null;\r\n changedInterval: boolean = false;\r\n changedSector: boolean = false;\r\n changedAuthor: boolean = false;\r\n changedAnchor: boolean = false;\r\n changedType: boolean = false;\r\n changedReason: boolean = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Update facets\r\n * @param values : the facets values\r\n * @param interval : the date interval for YEAR facets\r\n */\r\n update(values: ClipperFacet[][] = null, interval: string = null) {\r\n this.interval = interval;\r\n if (values) {\r\n this.groups = [];\r\n values.forEach((n) => {\r\n let name = n[0].typeName;\r\n let index = n[0].type;\r\n let i = SystemUtils.arrayFindIndexByKey(\r\n this.usedGroups,\r\n 'index',\r\n index);\r\n let j = SystemUtils.arrayFindIndexByKey(\r\n this.groups,\r\n 'index',\r\n index\r\n );\r\n if (i === -1 && j === -1) {\r\n this.groups.push({\r\n name: name,\r\n selectedValue: null,\r\n selectedValueDescription: null,\r\n values: n,\r\n index: index,\r\n });\r\n } else {\r\n if (this.usedGroups[i].values.length > 1) {\r\n // Different contents, remove used groupds, and add groups\r\n this.usedGroups.splice(i, 1);\r\n if (j === -1) {\r\n this.groups.push({\r\n name: name,\r\n selectedValue: null,\r\n selectedValueDescription: null,\r\n values: n,\r\n index: index,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.hasFacets = this.groups.length > 0 || this.usedGroups.length > 0;\r\n }\r\n\r\n /**\r\n * Save snapshot\r\n */\r\n saveSnapshot(): ClipperSearchFacetsSnapshot {\r\n return {\r\n groups: this.groups,\r\n usedGroups: this.usedGroups,\r\n hasFacets: this.hasFacets,\r\n sector: this.sector,\r\n author: this.author,\r\n anchor: this.anchor,\r\n type: this.type,\r\n reason: this.reason,\r\n fromDate: this.fromDate,\r\n toDate: this.toDate,\r\n interval: this.interval\r\n };\r\n }\r\n\r\n /**\r\n * Restore from snapshot\r\n */\r\n restoreFromSnapshot(snapshot: ClipperSearchFacetsSnapshot) {\r\n (this.groups = snapshot.groups),\r\n (this.usedGroups = snapshot.usedGroups),\r\n (this.hasFacets = snapshot.hasFacets),\r\n (this.sector = snapshot.sector),\r\n (this.author = snapshot.author),\r\n (this.anchor = snapshot.anchor),\r\n (this.type = snapshot.type),\r\n (this.reason = snapshot.reason),\r\n (this.fromDate = snapshot.fromDate),\r\n (this.toDate = snapshot.toDate),\r\n (this.interval = snapshot.interval);\r\n this.update();\r\n }\r\n\r\n /**\r\n * Reset current object using a previous one\r\n */\r\n restoreFrom(old: ClipperSearchFacetsComponent) {\r\n this.groups = old.groups;\r\n this.usedGroups = old.usedGroups;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Use a facet item as filter\r\n * @param group : the facet group\r\n * @param item : the facet item\r\n */\r\n use(group: ClipperFacetGroup, item: ClipperFacet) {\r\n group.selectedValue = item.value;\r\n group.selectedValueDescription = item.title;\r\n let j = SystemUtils.arrayFindIndexByKey(this.groups, 'index', group.index);\r\n if (j !== -1) {\r\n this.groups.splice(j, 1);\r\n let updated = false;\r\n this.usedGroups.forEach((n, i) => {\r\n if (!updated && n.index > group.index) {\r\n this.usedGroups.splice(i, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) this.usedGroups.push(group);\r\n }\r\n this.apply();\r\n }\r\n\r\n /**\r\n * dismiss a facet group filter\r\n * @param group : the facet group\r\n * @param apply : true to emit changed event and generate a new search, false just for update\r\n */\r\n dismiss(group: ClipperFacetGroup, apply: boolean = true) {\r\n group.selectedValue = null;\r\n group.selectedValueDescription = null;\r\n let i = SystemUtils.arrayFindIndexByKey(this.usedGroups, 'index', group.index);\r\n if (i !== -1) {\r\n this.usedGroups.splice(i, 1);\r\n let updated = false;\r\n this.groups.forEach((n, j) => {\r\n if (!updated && n.index > group.index) {\r\n this.groups.splice(j, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) this.groups.push(group);\r\n }\r\n if (apply) this.apply();\r\n }\r\n\r\n /**\r\n * Apply filter\r\n */\r\n private apply() {\r\n if (this.usedGroups.length > 0) {\r\n this.usedGroups.forEach((n: any) => {\r\n if (n.index === ClipperDefinitions.FAC_YEAR) {\r\n this.fromDate = new Date(parseInt(n.selectedValue), 0, 1, 12, 0, 0);\r\n this.toDate = new Date(parseInt(n.selectedValue), 11, 31, 12, 0, 0);\r\n } else if (n.index === ClipperDefinitions.FAC_SECTOR) {\r\n this.sector = n.selectedValue;\r\n } else if (n.index === ClipperDefinitions.FAC_AUTHOR) {\r\n this.author = n.selectedValue;\r\n } else if (n.index === ClipperDefinitions.FAC_DOCUMENTTYPE) {\r\n this.type = n.selectedValue;\r\n } else if (n.index === ClipperDefinitions.FAC_ARTICLE) {\r\n this.anchor = n.selectedValue;\r\n } else if (n.index === ClipperDefinitions.FAC_REASON) {\r\n this.reason = n.selectedValue;\r\n }\r\n });\r\n }\r\n if (this.groups.length > 0) {\r\n this.groups.forEach((n: any) => {\r\n if (n.index === ClipperDefinitions.FAC_YEAR) {\r\n this.changedInterval = this.fromDate !== null;\r\n this.fromDate = null;\r\n this.toDate = null;\r\n } else if (n.index === ClipperDefinitions.FAC_SECTOR) {\r\n this.changedSector = this.sector !== null;\r\n this.sector = null;\r\n } else if (n.index === ClipperDefinitions.FAC_AUTHOR) {\r\n this.changedAuthor = this.author !== null;\r\n this.author = null;\r\n } else if (n.index === ClipperDefinitions.FAC_DOCUMENTTYPE) {\r\n this.changedType = this.type !== null;\r\n this.type = null;\r\n } else if (n.index === ClipperDefinitions.FAC_ARTICLE) {\r\n this.changedAnchor = this.anchor !== null;\r\n this.anchor = null;\r\n } else if (n.index === ClipperDefinitions.FAC_REASON) {\r\n this.changedReason = this.reason !== null;\r\n this.reason = null;\r\n }\r\n });\r\n }\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Clear facets by group index\r\n * @param index : the group index to clear. Use -1 to clear all groups at once\r\n * @returns : the number of groups dismissed\r\n */\r\n clear(index: number = -1): number {\r\n let dismissed = 0;\r\n this.usedGroups.forEach((n: any) => {\r\n if (index === -1 || index === n.index) {\r\n if (n.index === ClipperDefinitions.FAC_YEAR) {\r\n this.changedInterval = true;\r\n this.fromDate = null;\r\n this.toDate = null;\r\n } else if (n.index === ClipperDefinitions.FAC_SECTOR) {\r\n this.changedSector = true;\r\n this.sector = null;\r\n } else if (n.index === ClipperDefinitions.FAC_AUTHOR) {\r\n this.changedAuthor = true;\r\n this.author = null;\r\n } else if (n.index === ClipperDefinitions.FAC_DOCUMENTTYPE) {\r\n this.changedType = true;\r\n this.type = null;\r\n } else if (n.index === ClipperDefinitions.FAC_ARTICLE) {\r\n this.changedAnchor = true;\r\n this.anchor = null;\r\n } else if (n.index === ClipperDefinitions.FAC_REASON) {\r\n this.changedReason = true;\r\n this.reason = null;\r\n }\r\n this.dismiss(n, false);\r\n dismissed++;\r\n }\r\n });\r\n if (dismissed) this.changed.emit();\r\n\r\n return dismissed;\r\n }\r\n\r\n /**\r\n * Reset\r\n */\r\n reset() {\r\n this.groups = [];\r\n this.usedGroups = [];\r\n this.hasFacets = false;\r\n this.fromDate = null;\r\n this.toDate = null;\r\n this.sector = null;\r\n this.author = null;\r\n this.anchor = null;\r\n this.type = null;\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxFill style=\"overflow: hidden;\">\r\n <div>\r\n @if (usedGroups.length > 0) {\r\n<div class=\"small\" style=\"padding-left: 15px\">\r\n <div>Selezione:</div>\r\n <div class=\"facets-selection\">\r\n @for (ug of usedGroups; track ug) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed-1 bold\">{{ug.name}}:</div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small truncated bold\">\r\n <div>{{ug.selectedValueDescription}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button class=\"small-icon-button\" matTooltip=\"Rimuovi\"\r\n (click)=\"dismiss(ug)\" color=\"primary\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n <mat-divider></mat-divider>\r\n </div>\r\n}\r\n @if (busy) {\r\n<div style=\"padding: 15px\">\r\n <p>Sto calcolando...</p>\r\n </div>\r\n}\r\n </div>\r\n @if (!busy) {\r\n<div fxFlex=\"100\" style=\"overflow: auto\">\r\n <div class=\"facets-items-container\">\r\n @for (group of groups; track group; let i = $index) {\r\n <mat-accordion displayMode=\"flat\" class=\"mat-elevation-z0\">\r\n <mat-expansion-panel class=\"facets-panel mat-elevation-z0\" [expanded]=\"i == 0\" hideToggle=\"false\">\r\n <mat-expansion-panel-header class=\"facets-header\" [collapsedHeight]=\"'40px'\" [expandedHeight]=\"'40px'\"\r\n [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && interval) {\r\n<div style=\"width: 180px\">{{interval}} &nbsp;\r\n ({{group.values.length}})\r\n </div>\r\n}\r\n @if (group.index != 2 || !interval) {\r\n<div style=\"width: 180px\">{{group.name}} &nbsp;\r\n ({{group.values.length}}) </div>\r\n}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <div style=\"width:100%\"></div>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track item) {\r\n <li class=\"small\" (click)=\"use(group, item)\"\r\n [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill fxFlexAlign=\"center\">\r\n <div fxFlex=\"*\" class=\"truncated\">\r\n <div>{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n {{hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n}\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n}\r\n </div>\r\n </div>\r\n}\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport {\r\n ClipperDefinitions,\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\n\r\n@Component({\r\n selector: 'clipper-document-menu',\r\n templateUrl: './document-menu.component.html',\r\n styleUrls: ['./document-menu.component.scss'],\r\n standalone: true,\r\n imports: [\r\n \r\n MatMenuModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatTooltipModule,\r\n ],\r\n})\r\nexport class ClipperDocumentMenuComponent implements OnInit {\r\n\r\n @Input() selectionSource: string;\r\n @Input() parent: any;\r\n @Input() item: any;\r\n @Input() isReference: boolean = false;\r\n @Input() isReadable: boolean = true;\r\n @Input() isSelectable: boolean = false;\r\n @Input() isDeadline: boolean = false;\r\n @Input() isLawInForce: boolean = false;\r\n @Input() isLaw: boolean = false;\r\n\r\n selection: any = null;\r\n\r\n constructor(public $clipper: ClipperService) {\r\n }\r\n\r\n ngOnInit() {\r\n switch (this.selectionSource) {\r\n case 'selection':\r\n this.selection = this.parent.selection.all;\r\n break;\r\n case 'bag':\r\n this.selection = this.$clipper.bag;\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n */\r\n clearSelection() {\r\n this.parent.selection.clear();\r\n }\r\n\r\n\r\n /**\r\n* Checks if all documents are supported by RS\r\n* @param documents : the list of documens\r\n* @returns: true if all documents supports RS\r\n*/\r\n RS_enabled(documents: any): boolean {\r\n if (!documents) return false;\r\n let allow = false;\r\n documents.forEach((n: any) => {\r\n allow = n.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||\r\n n.model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO ||\r\n n.model === ClipperDefinitions.DM_SCADENZA;\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n}","@if (selectionSource === 'selection') {\r\n<button mat-menu-item (click)=\"clearSelection()\"\r\n [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n}\r\n@if (selectionSource === 'bag') {\r\n<button mat-menu-item (click)=\"parent.manageBag()\"\r\n [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item || (selection && selection.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent.open(item ? item.documentId : selection[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (selectionSource !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent.addToBag(item ? [item] : selection)\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item || (selection && selection.length > 1))) {\r\n<button mat-menu-item (click)=\"parent.sendTo(item ? item : null)\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item && item.model != 11) || (selection && selection.length === 1 && selection[0].model != 11))) {\r\n<button mat-menu-item\r\n \r\n (click)=\"parent.exportPdf(item ? item : selection[0])\" [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent.showLink(item ? item : selection[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n@if ((isLawInForce || isDeadline) && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent.report(item ? item : selection[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent.references(item ? item : selection[0], 1)\">\r\n Documenti richiamati\r\n </button>\r\n}\r\n @if ( !isReference &&(item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent.references(item ? item : selection[0], 2)\">\r\n Documenti che richiamano\r\n </button>\r\n}\r\n @if (!isReference && isLawInForce && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"parent.references(item ? item : selection[0], 4)\">\r\n Juris\r\n </button>\r\n}\r\n @if (!isReference && isLawInForce && (item || (selection && selection.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra modifiche normative'\" (click)=\"parent.references(item ? item : selection[0], 3)\">\r\n Modifiche\r\n</button>\r\n}\r\n</mat-menu>\r\n@if ((item || selection?.length > 0) && RS_enabled(item ? [item] : selection) && !isSelectable) {\r\n<mat-divider ></mat-divider>\r\n} \r\n@if ((item || selection?.length > 0) && RS_enabled(item ? [item] : selection) && !isSelectable) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\"\r\n [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\" [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n}\r\n <mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent.RS_newLaw(item)\">\r\n Nuova legge\r\n </button>\r\n @if (item || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"parent.RS_newActivity(item)\">\r\n Nuova attività\r\n </button>\r\n}\r\n @if (item || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent.RS_usageReport(item)\">\r\n Report utilizzo norma\r\n </button>\r\n}\r\n </mat-menu>\r\n","import { Component, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MediaChange, MediaObserver } from '@ngbracket/ngx-layout';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent } from '@angular/material/dialog';\r\nimport { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { DateFormat, ScreenService, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { startOfDay, startOfToday, subDays } from 'date-fns'\r\nimport { ClipperDocumentBaseComponent } from '../document/base/document-base.component';\r\nimport {\r\n ClipperDefinitions,\r\n ClipperService,\r\n DocumentReferenceSnapshot\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport saveAs from 'file-saver';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { ClipperDocumentMenuComponent } from '../document/document-menu/document-menu.component';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { NgStyle, NgClass } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './references.component.html',\r\n styleUrls: ['./references.component.scss'],\r\n standalone: true,\r\n imports: [\r\n FlexModule,\r\n MatDialogTitle,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n \r\n MatCheckboxModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatBadgeModule,\r\n ClipperDocumentMenuComponent,\r\n MatDialogContent,\r\n NgStyle,\r\n ExtendedModule,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperSearchFacetsComponent,\r\n \r\n NgClass,\r\n MatPaginatorModule,\r\n ],\r\n})\r\nexport class ClipperReferencesComponent extends ClipperDocumentBaseComponent\r\n implements OnInit, OnDestroy {\r\n @ViewChild('facetsSidenav') facetsSidenav : MatSidenav;\r\n @ViewChild('facetsSearch') facetsSearch : ClipperSearchFacetsComponent;\r\n @ViewChild('paginator') paginator!: MatPaginator;\r\n @ViewChild('contextMenuTrigger') contextMenu!: MatMenuTrigger;\r\n\r\n private __d$: Subject<void> = new Subject<void>();\r\n\r\n title: string = null;\r\n selection: SelectableModel<any, string> = new SelectableModel(true, 'documentId');\r\n snapshot: DocumentReferenceSnapshot = null;\r\n facetsMode: string = 'side';\r\n facetsClosed: boolean = false;\r\n contentHeight: number = null;\r\n contextMenuPosition = { x: '0px', y: '0px' };\r\n mq: string = null;\r\n anchor: string = null;\r\n item: any = null;\r\n\r\n constructor(\r\n public $dialog: DialogService,\r\n public $clipper: ClipperService,\r\n public $screen: ScreenService,\r\n private media: MediaObserver,\r\n private dialogRef: MatDialogRef<ClipperReferencesComponent>,\r\n @Inject(MAT_DIALOG_DATA) _data: any\r\n ) {\r\n super($dialog, $clipper);\r\n\r\n // Choose the title\r\n switch (_data.mode) {\r\n case ClipperDefinitions.SM_REFERENCES_IN:\r\n this.title = 'Documenti richiamati nelle note o nel testo';\r\n break;\r\n case ClipperDefinitions.SM_REFERENCES_OUT:\r\n this.title = 'Documenti che richiamano quello in visione';\r\n break;\r\n case ClipperDefinitions.SM_CHANGES_IN:\r\n this.title = 'Modifiche subite';\r\n break;\r\n case ClipperDefinitions.SM_CHANGES_OUT:\r\n this.title = 'Modifiche apportate';\r\n break;\r\n case ClipperDefinitions.SM_JURIS:\r\n this.title = 'Giurisprudenza associata';\r\n break;\r\n }\r\n if (_data.anchorTitle) this.title += ' - ' + _data.anchorTitle;\r\n\r\n this.anchor = _data.anchor;\r\n\r\n // Use service snapshot\r\n this.snapshot = $clipper.referencesSnapshot;\r\n if (!this.snapshot)\r\n this.snapshot = {\r\n searchParams: {},\r\n };\r\n if (\r\n this.snapshot.searchParams.mode !== _data.mode ||\r\n this.snapshot.searchParams.documentId !== _data.id ||\r\n this.snapshot.searchParams.anchor !== _data.anchor\r\n ) {\r\n this.snapshot.searchParams = {\r\n mode: _data.mode,\r\n model: _data.model,\r\n anchor: _data.anchor,\r\n documentId: _data.id,\r\n useModifierInfo: _data.mode === ClipperDefinitions.SM_CHANGES_OUT,\r\n returnModifierInfo: _data.mode !== ClipperDefinitions.SM_CHANGES_OUT,\r\n first: 0,\r\n count: 25,\r\n };\r\n\r\n // Store snapshot\r\n $clipper.referencesSnapshot = this.snapshot;\r\n\r\n // New search\r\n this.fetch(true);\r\n } else {\r\n setTimeout(() => {\r\n // Display current snapshot facets if necessary\r\n this.displayFacets();\r\n this.restoreScrollPosition();\r\n }, 250);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n // React to media query changes\r\n this.media\r\n .asObservable()\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe((changes: MediaChange[]) => {\r\n this.mq = changes[0].mqAlias;\r\n this.updateFacetsVisibility();\r\n });\r\n this.updateFacetsVisibility();\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe(() => {\r\n // Update view\r\n this.updateView();\r\n });\r\n this.adjustView();\r\n\r\n setTimeout(() => {\r\n // React to sidenav state change\r\n if (this.facetsSidenav)\r\n this.facetsSidenav.openedChange\r\n .subscribe(() => {\r\n this.adjustView();\r\n });\r\n\r\n // Configure facet seach component\r\n if (this.facetsSearch) {\r\n this.facetsSearch.changed.subscribe(() => {\r\n if (this.facetsSearch.fromDate) {\r\n this.snapshot.searchParams.fromDate = this.facetsSearch.fromDate;\r\n this.snapshot.searchParams.toDate = this.facetsSearch.toDate;\r\n this.snapshot.searchParams.year = this.facetsSearch.fromDate.getFullYear();\r\n } else if (this.facetsSearch.changedInterval) {\r\n this.snapshot.searchParams.year = null;\r\n this.snapshot.searchParams.fromDate = null;\r\n this.snapshot.searchParams.toDate = null;\r\n }\r\n if (this.facetsSearch.sector || this.facetsSearch.changedSector)\r\n this.snapshot.searchParams.sector = this.facetsSearch.sector;\r\n if (this.facetsSearch.type || this.facetsSearch.changedType)\r\n this.snapshot.searchParams.type = this.facetsSearch.type;\r\n if (this.facetsSearch.author || this.facetsSearch.changedAuthor)\r\n this.snapshot.searchParams.author = this.facetsSearch.author;\r\n if (this.facetsSearch.reason || this.facetsSearch.changedReason)\r\n this.snapshot.searchParams.reason = this.facetsSearch.reason;\r\n this.snapshot.searchParams.anchor = this.facetsSearch.anchor\r\n ? this.facetsSearch.anchor\r\n : this.anchor;\r\n this.fetch(true);\r\n });\r\n }\r\n }, 250);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.__d$.next();\r\n this.__d$.complete();\r\n }\r\n\r\n onContextMenu(event: MouseEvent, item: any) {\r\n event.preventDefault();\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n this.contextMenu.menuData = { item: item };\r\n this.contextMenu.openMenu();\r\n }\r\n\r\n /**\r\n * Close dialog\r\n */\r\n close() {\r\n this.saveScrollPosition();\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Save scroll position\r\n */\r\n saveScrollPosition() {\r\n this.$clipper.scrollable.savePosition(\r\n this.snapshot.searchParams.documentId,\r\n '#references_container'\r\n );\r\n }\r\n\r\n /**\r\n * Reset scroll position\r\n */\r\n resetScrollPosition() {\r\n document.querySelector('#references_container').scrollTo(0, 0);\r\n }\r\n\r\n /**\r\n * Restore scroll position\r\n */\r\n restoreScrollPosition() {\r\n this.$clipper.scrollable.tryRestorePosition(\r\n this.snapshot.searchParams.documentId,\r\n '#references_container'\r\n );\r\n }\r\n\r\n /**\r\n * Update menu buttons visibility when the menu is closed\r\n */\r\n updateMenuButtonsVisibility() {\r\n this.snapshot.items.forEach((n: any) => {\r\n n.isMenuOpen = false;\r\n });\r\n }\r\n\r\n /**\r\n * Adjust view\r\n */\r\n adjustView() {\r\n setTimeout(() => {\r\n this.updateView();\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Update view\r\n */\r\n updateView() {\r\n // Update router height\r\n let a = window.innerHeight;\r\n let b = document.getElementById('clipper-references-fixed');\r\n try {\r\n if (!a || !b || a === 0) this.adjustView();\r\n let hb = b.clientHeight;\r\n if (hb === 0) this.adjustView();\r\n this.contentHeight = a - (hb + 12);\r\n } catch { }\r\n }\r\n\r\n /**\r\n * Update sidenav visibility\r\n * @param mq : the current media query\r\n */\r\n updateFacetsVisibility() {\r\n if (this.mq === 'xs') {\r\n this.facetsMode = 'over';\r\n if (\r\n this.facetsSearch &&\r\n this.facetsSearch.hasFacets &&\r\n this.facetsSidenav &&\r\n this.facetsSidenav.opened\r\n )\r\n this.facetsSidenav.close();\r\n } else {\r\n this.facetsMode = 'side';\r\n if (\r\n this.facetsSearch &&\r\n this.facetsSearch.hasFacets &&\r\n this.facetsSidenav &&\r\n !this.facetsClosed\r\n )\r\n this.facetsSidenav.toggle(true);\r\n }\r\n }\r\n\r\n /**\r\n * Open facetsSidenav sidebar\r\n */\r\n facetsOpen() {\r\n this.facetsClosed = false;\r\n this.facetsSidenav.open();\r\n }\r\n\r\n /**\r\n * Close facets sidebar\r\n * @param closedManually : ture if facets has been closed manually by clicking the button\r\n */\r\n facetsClose(closedManually: boolean = false) {\r\n if (this.mq !== 'xs') this.facetsClosed = closedManually;\r\n this.facetsSidenav.close();\r\n }\r\n\r\n /**\r\n * Export a document in pdf format\r\n * @param item : the document to export\r\n */\r\n exportPdf(item: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!item || item.model === 11) return;\r\n this.$dialog\r\n .confirm(\"Confermi l'esportazione?\", 'Attenzione!')\r\n .componentInstance.choosen\r\n .subscribe((r: any) => {\r\n if (r.result === 'ok') {\r\n this.$dialog.busy('Esportazione in corso...');\r\n this.$clipper\r\n .exportPdf(item.documentId)\r\n .subscribe({\r\n next: (r2: any) => {\r\n saveAs(\r\n r2,\r\n (item.title1 ? item.title1 : item.documentId) + '.pdf'\r\n );\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Send document links by email\r\n * @param item : the item to add\r\n */\r\n sendTo(item: any = null) {\r\n this.sendItemsTo(item ? [item] : this.selection.all);\r\n }\r\n\r\n /**\r\n * Perform a search\r\n * @param newSearch: true if is a new search\r\n */\r\n fetch(newSearch: boolean = false) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (newSearch) this.snapshot.searchParams.first = 0;\r\n this.snapshot.searchParams.useModifierInfo =\r\n this.snapshot.searchParams.mode === ClipperDefinitions.SM_CHANGES_OUT;\r\n this.snapshot.searchParams.returnModifierInfo =\r\n this.snapshot.searchParams.mode !== ClipperDefinitions.SM_CHANGES_OUT;\r\n this.$dialog.busy('Ricerca in corso...');\r\n this.$clipper.references(this.snapshot.searchParams)\r\n .subscribe({\r\n next: (r) => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else {\r\n const today = startOfToday();\r\n let group = ''; \r\n this.snapshot.total = r.value?.total ?? 0;\r\n this.snapshot.items = r.value?.items ?? []; \r\n this.snapshot.items.forEach((n: any) => {\r\n if (\r\n n.model === ClipperDefinitions.DM_SCADENZA ||\r\n n.model === ClipperDefinitions.DM_SEGNALAZIONE\r\n ) {\r\n switch (n.model) {\r\n case ClipperDefinitions.DM_SCADENZA:\r\n n.originDescription = 'Scadenza';\r\n break;\r\n case ClipperDefinitions.DM_SEGNALAZIONE:\r\n n.originDescription = 'Segnalazione';\r\n break;\r\n }\r\n if (n.expiringInfo) {\r\n let parts = n.expiringInfo.split('|');\r\n if (parts.length === 3) n.description = parts[2];\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15))\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n }\r\n } else {\r\n if (n.date) {\r\n n.date = startOfDay(new Date(n.date));\r\n const d = startOfDay(subDays(startOfToday(), 7))\r\n n.isNew = n.date > d;\r\n }\r\n if (n.anchors) {\r\n let anchorType: number;\r\n let anchors: any = [];\r\n n.anchors.forEach((a: any) => {\r\n if (a.type === 20) return;\r\n if (a.type !== anchorType) {\r\n if (a.type >= 3)\r\n anchors.push({ text: a.typeDescription });\r\n anchorType = a.type;\r\n }\r\n let score = a.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n anchors.push({\r\n text: a.text,\r\n title: a.title,\r\n documentId: a.documentId,\r\n uri: a.uri,\r\n veryRelevant: score > 0.6,\r\n });\r\n });\r\n n.anchors = anchors;\r\n }\r\n if (n.validityState > 0) {\r\n n.validityDescription = 'Il documento non è più vigente';\r\n n.isExpired = true;\r\n if (n.validUntilDate) {\r\n const expiringDate = startOfDay(new Date(n.validUntilDate));\r\n if (expiringDate < today) {\r\n n.validityDescription =\r\n 'Il documento non è più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n } else {\r\n n.validityDescription =\r\n 'Il documento non sarà più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n n.isExpired = false;\r\n }\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n n.isExpired = n.date < today;\r\n }\r\n }\r\n let year = SystemUtils.formatDate(n.date, DateFormat.LongMonthAndYear).toLowerCase();\r\n if (group !== year) {\r\n n.group = year;\r\n group = year;\r\n }\r\n if (n.taxonomy) {\r\n n.taxonomyNodes = n.taxonomy.split('\\r\\n');\r\n if (\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_GUIDA ||\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_GUIDA_NORMATIVA ||\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI\r\n ) {\r\n for (let i = 0; i < n.taxonomyNodes.length; i++) {\r\n let node = n.taxonomyNodes[i];\r\n let p = node.indexOf('>');\r\n if (p !== -1)\r\n n.taxonomyNodes[i] = node\r\n .substring(p + 1)\r\n .replace(/\\>/gi, ' > ');\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Handle facets\r\n if (this.snapshot.total > 0) {\r\n if (newSearch)\r\n // Update facets\r\n this.displayFacets(this.snapshot.searchParams);\r\n } else {\r\n this.facetsSearch.reset();\r\n this.facetsSidenav.close();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n }\r\n\r\n this.resetScrollPosition();\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: any) {\r\n let first = e.pageIndex * this.snapshot.searchParams.count;\r\n this.snapshot.searchParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param searchParams : the current search params to use to gather facets or null to use current snapshot\r\n */\r\n displayFacets(searchParams: any = null) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (searchParams) {\r\n this.facetsSearch.busy = true;\r\n this.$clipper.referencesFacets(searchParams)\r\n .subscribe({\r\n next: (r) => {\r\n if (r.success) {\r\n this.facetsSearch.update(r.value.facets, null);\r\n if (\r\n this.facetsSearch.hasFacets &&\r\n !this.facetsClosed &&\r\n this.mq !== 'xs'\r\n )\r\n this.facetsOpen();\r\n else this.facetsClose();\r\n this.snapshot.facets = this.facetsSearch;\r\n }\r\n\r\n this.resetScrollPosition();\r\n },\r\n complete: () => {\r\n this.facetsSearch.busy = false;\r\n }\r\n });\r\n } else if (this.snapshot.facets) {\r\n this.facetsSearch.restoreFrom(this.snapshot.facets);\r\n if (this.facetsSearch.hasFacets && !this.facetsClosed && this.mq !== 'xs')\r\n this.facetsOpen();\r\n else this.facetsClose();\r\n }\r\n }\r\n\r\n /**\r\n * Close current dialog and return the id to navigate to\r\n * @param id : the document id\r\n */\r\n open(id: string) {\r\n this.dialogRef.close({ id: id });\r\n }\r\n}\r\n","<div id=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxFill style=\"padding: 0 0 0 15px;\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n @if (snapshot.searchParams.mode == 1) {\r\n <mat-checkbox color=\"primary\" name=\"excludeTextReferences\"\r\n [(ngModel)]=\"snapshot.searchParams.excludeTextReferences\" (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note</mat-checkbox>\r\n }\r\n @if (snapshot.searchParams.mode == 2) {\r\n <mat-checkbox color=\"primary\" name=\"excludeNotesReferences\"\r\n [(ngModel)]=\"snapshot.searchParams.excludeNotesReferences\" (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\" color=\"primary\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (facetsSearch && facetsSearch.hasFacets && facetsSidenav && (!facetsSidenav.opened || facetsClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"facetsOpen()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content style=\"padding:0 0 0 15px\" [ngStyle]=\"{'min-height.px': contentHeight}\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': contentHeight}\">\r\n <mat-sidenav #facetsSidenav position=\"end\" autoFocus=\"false\" opened=\"false\" mode=\"{{facetsMode}}\"\r\n class=\"sidenav sidenav-facets\">\r\n @if (facetsSearch.busy) {\r\n <div class=\"sidenav-overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"height:5px\">\r\n @if (facetsSearch.busy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"64px\">\r\n <div fxLayout=\"row\" fxFill class=\"sidenav-title-container\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" fxLayoutAlign=\"start\">\r\n <span class=\"sidenav-title\">Affina ricerca</span>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Nascondi\"\r\n (click)=\"facetsClose(true)\" color=\"primary\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow: hidden;\">\r\n <clipper-search-facets #facetsSearch></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <div [ngStyle]=\"{'height.px': contentHeight }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"100\" id=\"references_container\" style=\"overflow: auto\">\r\n <div style=\"overflow:hidden\">\r\n @if (!snapshot.total) {\r\n <div style=\"padding:32px;\">\r\n <div class=\"item-greyed-1\" style='text-align: center'>\r\n <p>Nessun elemento da visualizzare.</p>\r\n <p>Il filtro applicato non consente la selezione di alcun risulato.</p>\r\n </div>\r\n </div>\r\n }\r\n @if (snapshot.total) {\r\n <div>\r\n @for (item of snapshot.items; track item) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div style=\"padding-left: 15px; padding-top:24px;\">\r\n <div class=\"item-accent\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"0px\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection.isSelected(item.documentId) }\">\r\n <div fxFlex=\"48px\" fxFlexAlign=\"center\" fxLayoutAlign=\"center\">\r\n @if ($screen.isTouchable || item.isOver || selection.isSelected(item.documentId)) {\r\n <mat-checkbox color=\"primary\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (!item.isJuris && item.model != 9 && (item.model != 11 || snapshot.searchParams.mode == 2) &&\r\n item.modelName && item.modelName.length > 0) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">\r\n {{item.modelName}}</div>\r\n }\r\n @if (!item.isJuris && item.model == 22) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">ARS\r\n BLOG</div>\r\n }\r\n @if (item.author && item.origin === 'LR') {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">{{item.author}}</div>\r\n }\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n <a (click)=\"open(item.documentId)\"\r\n [attr.aria-label]=\"'Apri documento ' + (item.title1 ? item.title1: item.title2)\">{{item.title1\r\n ? item.title1 : item.title2}}</a>\r\n @if (item.part > 0) {\r\n <span class=\"item-badge\">PARTE {{item.part}}</span>\r\n }\r\n\r\n </div>\r\n @if (item.title1 && item.title2) {\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n {{item.title2}}\r\n </div>\r\n }\r\n @if (item.originDescription ) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-2\">\r\n {{item.originDescription}}\r\n </div>\r\n }\r\n @if (item.anchors.length > 0) {\r\n <div class=\"item-line item-line-3 item-line-read\">\r\n <div class=\"item-line-block\">\r\n <div class=\"item-line-block-title\">DETTAGLIO</div>\r\n <div>\r\n @for (a of item.anchors; track a) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n <a class=\"link\" style='line-height: 18px; margin-right: 8px'\r\n (click)=\"open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if\r\n (a.veryRelevant) {\r\n <sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n }</a>\r\n }\r\n @if (!a.uri && a.text) {\r\n <span style='line-height: 18px; margin-right: 8px '>{{a.text}}</span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (item.validityState > 0) {\r\n <div class=\"item-line item-line-3 item-line-read\">\r\n <span\r\n style=\"background-color: red; color: white; padding: 2px 4px; border-radius: 3px; border: 1px solid red\">\r\n {{item.validityDescription}}\r\n </span>\r\n </div>\r\n }\r\n\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (snapshot.total > 0) {\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot.total\"\r\n [pageSize]=\"25\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>","import { Component } from '@angular/core';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-help.component.html',\r\n styleUrls: ['./search-free-text-help.component.scss'],\r\n standalone: true,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule, MatButtonModule, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextHelpComponent{\r\n\r\n constructor() {}\r\n\r\n}\r\n","<h2 mat-dialog-title>Come effettuare la ricerca in testo libero</h2>\r\n<div mat-dialog-content>\r\n <p>Normalmente viene sempre effettuata una ricerca per frase: tutte le parole specificate debbono essere\r\n \"ragionevolmente vicine\" (entro 5 parole) l'una dall'altra.</p>\r\n <p>La ricerca per frase di solito produce i risultati più rilevanti.</p>\r\n <p>Tuttavia è possibile istruire Clipper per eseguire ricerche differenti e più complesse.</p>\r\n <p>Tutte gli elementi che compongono la stringa di ricerca devono essere separati da virgola.</p>\r\n <ul>\r\n <li>Se un elemento è composto da più parole è una frase, altrimenti una parola</li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">+</b> davanti all'elemento, l'elemento <b>dovrà per forza</b> essere presente nel documento\r\n </li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">-</b> davanti all'elemento, l'elemento <b>non dovrà</b> essere presente nel documento</li>\r\n </ul>\r\n <p>Ecco alcuni esempi:</p>\r\n <ul>\r\n <li><b>serbatoi interrati</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\"</li>\r\n <li><b>serbatoi, interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono una o l'altra parola.</li>\r\n <li><b>serbatoi, +interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ed eventualmente \"serbatoi\".</li>\r\n <li><b>serbatoi, -interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ma non \"serbatoi\".</li>\r\n <li><b>\"serbatoi interrati\", -gas</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\" e per la parola \"gas\"; il risultato sarà tutti i documenti che contengono la frase \"serbatoi interrati\" ma non la parola \"gas\".</li>\r\n </ul>\r\n <p>Saranno mostrati per primi (più rilevanti) i documenti che rispettano in pieno la condizione.</p>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill >\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { MatDialog, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport interface SearchFreeTextQueryParams {\r\n query: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-query-builder.component.html',\r\n styleUrls: ['./search-free-text-query-builder.component.scss'],\r\n standalone: true,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatDialogActions, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextQueryBuilderComponent {\r\n @Output() done = new EventEmitter<SearchFreeTextQueryParams>();\r\n\r\n queryAnd: string = '';\r\n queryOr: string = '';\r\n queryNot: string = '';\r\n queryPhrase: string = '';\r\n queryStart: string = '';\r\n\r\n constructor(private $dialog: DialogService, public dialog: MatDialog) { }\r\n\r\n\r\n /**\r\n * Clear\r\n */\r\n clear() {\r\n this.queryAnd = null;\r\n this.queryOr = null;\r\n this.queryNot = null;\r\n this.queryPhrase = null;\r\n this.queryStart = null;\r\n }\r\n\r\n /**\r\n * Submit\r\n */\r\n ok() {\r\n let query = '';\r\n // Phrase\r\n if (this.queryPhrase.length > 0) {\r\n query += ' \"';\r\n query += this.queryPhrase.replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n // Or\r\n if (this.queryOr.length > 0) {\r\n let parts = this.queryOr.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', ';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n // And\r\n if (this.queryAnd.length > 0) {\r\n let parts = this.queryAnd.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', +';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n // Start with\r\n if (this.queryStart.length > 0) {\r\n if (query.length > 0) query += ', +';\r\n query += this.queryStart.replace('\"', '').trim();\r\n query += '*';\r\n query += ' ';\r\n }\r\n // Not\r\n if (this.queryNot.length > 0) {\r\n if (query.length === 0) {\r\n // Invalid query\r\n this.$dialog.error(\r\n \"L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.\"\r\n );\r\n return;\r\n }\r\n let parts = this.queryNot.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', -';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n\r\n\r\n // Notify\r\n if (query.length > 0) this.done.emit({ query: query });\r\n }\r\n}\r\n","<h2 mat-dialog-title>Trova gli elementi che contengono...</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Questa esatta parola o frase</mat-label>\r\n <input matInput name=\"queryPhrase\" [(ngModel)]=\"queryPhrase\" maxlength=\"200\" />\r\n @if (queryPhrase) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\"\r\n (click)=\"queryPhrase=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tutte queste parole</mat-label>\r\n <input matInput name=\"queryAnd\" [(ngModel)]=\"queryAnd\" maxlength=\"200\" />\r\n @if (queryAnd) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryAnd=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Una qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryOr\" [(ngModel)]=\"queryOr\" maxlength=\"200\" />\r\n @if (queryOr) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryOr=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Parole che iniziano con</mat-label>\r\n <input matInput name=\"queryStart\" [(ngModel)]=\"queryStart\" maxlength=\"200\" />\r\n @if (queryStart) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\"\r\n (click)=\"queryStart=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Nessuna qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryNot\" [(ngModel)]=\"queryNot\" maxlength=\"200\" />\r\n @if (queryNot) {\r\n<a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryNot=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n}\r\n <mat-hint>Separate da virgola. L'operatore di esclusione funziona solo se prima è stato inserito un valore in\r\n almeno uno degli altri quattro campi. </mat-hint>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\" fxLayoutAlign=\"start\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\">OK</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">ANNULLA</button>\r\n </div>\r\n </div>\r\n</div>","import { Component, EventEmitter, Inject, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { DateInterval, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport {\r\n ClipperDefinitions,\r\n ClipperService,\r\n ClipperSearchParams,\r\n SearchUtils\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { DateIntervalChangeDirective } from '@arsedizioni/ars-utils/core';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-dialog.component.html',\r\n styleUrls: ['./search-dialog.component.scss'],\r\n providers: [\r\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ],\r\n standalone: true,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n FlexModule,\r\n \r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n \r\n MatTooltipModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n ExtendedModule,\r\n MatDatepickerModule,\r\n DateIntervalChangeDirective,\r\n MatDialogActions,\r\n MatDialogClose,\r\n SafeHtmlPipe,\r\n ],\r\n})\r\nexport class ClipperSearchDialogComponent implements OnInit {\r\n @ViewChild('okButton') okButton!: HTMLButtonElement;\r\n @Output() done = new EventEmitter<ClipperSearchParams>();\r\n\r\n params: ClipperSearchParams;\r\n interval: DateInterval = new DateInterval();\r\n models: any;\r\n sectors: any;\r\n sources: any;\r\n sourceInterval: DateInterval = new DateInterval();\r\n topics: any;\r\n types: any;\r\n authors: any;\r\n enableAuthor: boolean = false;\r\n enableTopic: boolean = false;\r\n enableTaxonomy: boolean = false;\r\n enableType: boolean = false;\r\n enableText: boolean = false;\r\n enableModel: boolean = false;\r\n enableSector: boolean = false;\r\n enableSource: boolean = false;\r\n enableDocument: boolean = false;\r\n enableDeadline: boolean = false;\r\n enablePublication: boolean = false;\r\n enableChanges: boolean = false;\r\n enableRead: boolean = false;\r\n enableComments: boolean = false;\r\n\r\n\r\n constructor(\r\n private $dialog: ApplicationDialogService,\r\n private $clipper: ClipperService,\r\n public dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) _data: any\r\n ) {\r\n this.enablePublication = _data.enablePublication;\r\n this.enableDocument = _data.enableDocument;\r\n this.enableDeadline = _data.enableDeadline;\r\n this.enableModel = _data.enableModel;\r\n this.enableSector = _data.enableSector;\r\n this.enableSource = _data.enableSource;\r\n this.enableAuthor = _data.enableAuthor;\r\n this.enableTopic = _data.enableTopic;\r\n this.enableTaxonomy = _data.enableTaxonomy;\r\n this.enableType = _data.enableType;\r\n this.enableText = _data.enableText;\r\n this.enableChanges = _data.enableChanges;\r\n this.enableComments = _data.enableComments;\r\n this.enableRead = true;\r\n this.params = {\r\n showUnreadDocumentsOnly: _data.params.showUnreadDocumentsOnly,\r\n showCommentedDocumentsOnly: _data.params.showCommentedDocumentsOnly,\r\n count: 25,\r\n first: 0\r\n };\r\n this.params.text = _data.params.text;\r\n this.params.titleOnly = _data.params.titleOnly;\r\n if (this.enableSector) {\r\n this.params.sector = _data.params.sector;\r\n if (_data.sectors) this.sectors = _data.sectors;\r\n else this.sectors = ClipperDefinitions.SECTORS;\r\n }\r\n if (this.enableAuthor) this.params.author = _data.params.author;\r\n if (this.enableModel) {\r\n this.models = _data.models;\r\n this.params.sector = _data.params.sector; // Use sector as value and not model\r\n }\r\n if (this.enableDocument) this.params.number = _data.params.number;\r\n if (this.enableDocument || this.enablePublication) {\r\n if (_data.params.fromDate) this.interval.from = _data.params.fromDate;\r\n if (_data.params.toDate) this.interval.to = _data.params.toDate;\r\n\r\n }\r\n if (this.enableTopic) this.params.topic = _data.params.topic;\r\n if (this.enableTaxonomy) {\r\n this.params.taxonomy = _data.params.taxonomy;\r\n this.params.taxonomyPath = _data.params.taxonomyPath;\r\n this.params.taxonomyNode = _data.params.taxonomyNode;\r\n }\r\n if (this.enableType) {\r\n this.types = ClipperDefinitions.SECTOR_TYPES;\r\n this.params.type = _data.params.type;\r\n }\r\n if (this.enableSource) {\r\n this.sources = ClipperDefinitions.SOURCES;\r\n this.params.source = _data.params.source;\r\n this.params.sourceNumber = _data.params.sourceNumber;\r\n if (_data.params.sourceFromDate)\r\n this.sourceInterval.from = _data.params.sourceFromDate;\r\n if (_data.params.sourceToDate)\r\n this.sourceInterval.to = _data.params.sourceToDate;\r\n }\r\n if (this.enableChanges) {\r\n this.types = _data.changeReasons;\r\n this.params.reason = _data.params.reason;\r\n this.params.changedNumber = _data.params.changedNumber;\r\n this.params.changedYear = _data.params.changedYear;\r\n this.params.changedTitle = _data.params.changedTitle;\r\n this.params.modifierNumber = _data.params.modifierNumber;\r\n this.params.modifierYear = _data.params.modifierYear;\r\n this.params.modifierTitle = _data.params.modifierTitle;\r\n }\r\n if (this.enableDeadline) {\r\n this.types = _data.deadlines;\r\n this.params.type = _data.params.type;\r\n }\r\n if (!this.enableRead === false)\r\n this.enableRead = false;\r\n if (\r\n this.params.model === ClipperDefinitions.DM_SCADENZA_SEGNALAZIONE ||\r\n this.params.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||\r\n this.params.model === ClipperDefinitions.DM_METODI_ANALISI\r\n )\r\n this.enableRead = false;\r\n }\r\n\r\n ngOnInit() {\r\n this.authors = [];\r\n\r\n if (this.enableTopic) {\r\n if (!this.$clipper.loggedIn) return;\r\n // Load topics\r\n this.$clipper.getTopics()\r\n .subscribe(r => {\r\n if (r.success) {\r\n let name = '';\r\n r.value.forEach((n: any) => {\r\n name = '';\r\n (n.value.match(/./g) || []).forEach(() => {\r\n name += '&nbsp;&nbsp;';\r\n });\r\n name += n.value + ' - ' + n.name;\r\n n.title = name;\r\n });\r\n this.topics = r.value;\r\n }\r\n });\r\n }\r\n\r\n if (this.enableAuthor && this.params.sector) this.sectorChanged();\r\n }\r\n\r\n\r\n /**\r\n * Update authors when selected sectors changed\r\n */\r\n sectorChanged() {\r\n if (this.enableAuthor) {\r\n let authors: any = [];\r\n if (this.params.sector) {\r\n ClipperDefinitions.SECTOR_AUTHORS.forEach((n: any) => {\r\n if (n.sectorId === this.params.sector) authors.push(n);\r\n });\r\n }\r\n this.authors = authors;\r\n }\r\n\r\n if (this.enableType) {\r\n if (this.params.sector) {\r\n let types: any = [];\r\n ClipperDefinitions.SECTOR_TYPES.forEach((n: any) => {\r\n if (n.sectorId === this.params.sector) types.push(n);\r\n });\r\n this.types = types;\r\n } else this.types = ClipperDefinitions.SECTOR_TYPES;\r\n }\r\n }\r\n\r\n /**\r\n * Clear search\r\n */\r\n clear() {\r\n SearchUtils.clear(this.params);\r\n this.interval.clear();\r\n this.sourceInterval.clear();\r\n this.sectorChanged();\r\n }\r\n\r\n\r\n /**\r\n * Show free text help\r\n */\r\n help() {\r\n this.$dialog.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n /**\r\n * Compose a free text search query\r\n */\r\n compose() {\r\n let d = this.$dialog.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%'\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n this.params.text = r.query;\r\n\r\n // Finished\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Submit search\r\n */\r\n ok() {\r\n this.okButton.focus();\r\n if (this.params.text)\r\n this.params.text = SearchUtils.normalizeTextQuery(this.params.text);\r\n if (this.interval) {\r\n this.params.fromDate = this.interval.from;\r\n this.params.toDate = this.interval.to;\r\n }\r\n if (this.sourceInterval) {\r\n this.params.sourceFromDate = this.sourceInterval.from;\r\n this.params.sourceToDate = this.sourceInterval.to;\r\n }\r\n setTimeout(() => {\r\n // Notify\r\n this.done.emit(this.params);\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Select a taxonomy topic\r\n */\r\n selectTaxonomy() {\r\n if (!this.$clipper.loggedIn) return;\r\n let params = null;\r\n if (\r\n this.params.model === ClipperDefinitions.DM_GUIDA ||\r\n this.params.model === ClipperDefinitions.DM_GUIDA_NORMATIVA ||\r\n this.params.model === ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI\r\n ) {\r\n params = { model: ClipperDefinitions.DM_GUIDA, countItems: true };\r\n }\r\n this.$dialog.busy('Caricamento in corso...');\r\n this.$clipper.getTaxonomy(params)\r\n .subscribe({\r\n next: r => {\r\n this.$dialog\r\n .selectTree(\r\n this.$clipper.toNodes(r.value.subFolders),\r\n 'Seleziona un argomento',\r\n null,\r\n this.params.taxonomyNode\r\n )\r\n .componentInstance.done.subscribe(r => {\r\n let n = r.selectedItems[0].bag;\r\n this.params.taxonomy = n.id;\r\n this.params.taxonomyPath = n.path;\r\n this.params.taxonomyNode = n.name;\r\n });\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n}\r\n","<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <div fxFlexAlign=\"end\">\r\n @if (enableRead) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showUnreadDocumentsOnly\" [(ngModel)]=\"params.showUnreadDocumentsOnly\">\r\n Mostra solo non letti</mat-checkbox>\r\n </div>\r\n}\r\n @if (enableComments) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showCommentedDocumentsOnly\"\r\n [(ngModel)]=\"params.showCommentedDocumentsOnly\">\r\n Mostra solo norme con commenti</mat-checkbox>\r\n </div>\r\n}\r\n </div>\r\n @if (enableModel) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"model\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (m of models; track m) {\r\n <mat-option [value]=\"m.id\">\r\n {{m.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableSector) {\r\n<mat-form-field>\r\n <mat-label>Settore</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"sector\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sectors; track s) {\r\n <mat-option [value]=\"s.id\">\r\n @if (s.group == 'A') {\r\n<span>&nbsp;&nbsp;</span>\r\n}\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableAuthor && authors && authors.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" #sector=\"ngModel\" name=\"author\">\r\n <mat-option>Tutti</mat-option>\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.authorId\">\r\n {{a.authorDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTopic && topics && topics.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" #topic=\"ngModel\" name=\"topic\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n <div [innerHtml]=\"t.title | safeHtml\"></div>\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTaxonomy) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <input matInput [(ngModel)]=\"params.taxonomyNode\" readonly name=\"taxonomy\" />\r\n @if (params.taxonomyNode) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.taxonomy = null; params.taxonomyNode = null; params.taxonomyPath = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button type=\"button\" mat-icon-button matSuffix aria-label=\"Scegli\" matTooltip=\"Scegli\"\r\n (click)=\"selectTaxonomy()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n @if (params.taxonomyNode) {\r\n<mat-hint align=\"start\" class=\"truncated lowercase\">\r\n <div>{{params.taxonomyPath}}</div>\r\n </mat-hint>\r\n}\r\n </mat-form-field>\r\n}\r\n @if (enableType) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" #topic=\"ngModel\" name=\"type\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.documentTypeId\" [matTooltip]=\"t.documentTypeDescription\">\r\n {{t.documentTypeDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput name=\"text\" #text [(ngModel)]=\"params.text\" maxlength=\"200\" />\r\n @if (params.text) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); compose()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); help()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" [disabled]=\"!params.text\" name=\"titleOnly\"\r\n [(ngModel)]=\"params.titleOnly\">Cerca\r\n solo nel titolo</mat-checkbox>\r\n </div>\r\n}\r\n @if (enablePublication) {\r\n<div>\r\n <div class=\"section-title\">Pubblicazione</div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n}\r\n @if (enableDocument) {\r\n<div>\r\n <div class=\"section-title\">Estremi documento</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.number\" #number=\"ngModel\" name=\"number\" maxlength=\"10\" />\r\n @if (params.number) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (number.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom2=\"ngModel\"\r\n name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableSource) {\r\n<div>\r\n <div class=\"section-title\">Fonte</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.sourceNumber\" #sourceNumber=\"ngModel\" name=\"sourceNumber\"\r\n maxlength=\"10\" />\r\n @if (params.sourceNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (sourceNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker3\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom3=\"ngModel\" name=\"rangeFrom3\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo3=\"ngModel\" name=\"rangeTo3\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix\r\n mat-icon-button aria-label=\"Pulisci\" (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker3\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker3></mat-date-range-picker>\r\n @if (rangeFrom3.invalid || rangeTo3.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n @if (sources && sources.length > 0) {\r\n<mat-form-field fxFlex=\"100\">\r\n <mat-label>Tipo fonte</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" #sector=\"ngModel\" name=\"source\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.id\">\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableChanges) {\r\n<div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.reason\" #topic=\"ngModel\" name=\"reason\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"section-title mat-body-3\">Documento modificato</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\"><i>Saranno visualizzati i documenti modificanti.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedNumber\" #changedNumber=\"ngModel\" name=\"changedNumber\"\r\n maxlength=\"10\" />\r\n @if (params.changedNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (changedNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput [(ngModel)]=\"params.changedYear\" #changedYear=\"ngModel\"\r\n name=\"changedYear\" maxlength=\"4\" />\r\n @if (params.changedYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedTitle\" #changedTitle=\"ngModel\" name=\"changedTitle\"\r\n maxlength=\"10\" />\r\n @if (params.changedTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title \">Documento modificante</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\">\r\n <i>Saranno visualizzati i documenti modificati, oppure solo i modificanti se è stato specificato\r\n l'estremo del documento modificato.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierNumber\" #modifierNumber=\"ngModel\" name=\"modifierNumber\"\r\n maxlength=\"10\" />\r\n @if (params.modifierNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (modifierNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=1750 matInput [(ngModel)]=\"params.modifierYear\" #modifierYear=\"ngModel\"\r\n name=\"modifierYear\" maxlength=\"4\" />\r\n @if (params.modifierYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierTitle\" #modifierTitle=\"ngModel\" name=\"modifierTitle\"\r\n maxlength=\"10\" />\r\n @if (params.modifierTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { MatSelectionList, MatListModule } from '@angular/material/list';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport {\r\n ClipperService \r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n\r\nexport interface ClipperDocumentIndexDialogData {\r\n documentId: string,\r\n excludedTypes?: number[],\r\n multiple?: boolean\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document-index.component.html',\r\n styleUrls: ['./document-index.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n \r\n MatListModule,\r\n \r\n FlexModule,\r\n NgStyle,\r\n ExtendedModule,\r\n MatTooltipModule,\r\n MatDialogActions,\r\n MatButtonModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class ClipperDocumentIndexComponent {\r\n @ViewChild('selection') selection!: MatSelectionList;\r\n @Output() done = new EventEmitter<any>();\r\n\r\n data: ClipperDocumentIndexDialogData;\r\n items: any;\r\n okDisabled: boolean = true;\r\n\r\n constructor(\r\n private $dialog: DialogService,\r\n private $clipper: ClipperService,\r\n public dialogRef: MatDialogRef<ClipperDocumentIndexComponent>,\r\n @Inject(MAT_DIALOG_DATA) _data: ClipperDocumentIndexDialogData\r\n ) {\r\n this.data = _data;\r\n if (this.data?.documentId)\r\n this.load(this.data?.documentId, this.data.excludedTypes);\r\n }\r\n\r\n /**\r\n * Display document structure\r\n * @param documentId : the document id\r\n * @param excludedTypes: the array of fragment type to be excluded off\r\n */\r\n load(documentId: string, excludedTypes: number[] = null) {\r\n if (!this.$clipper.loggedIn) return;\r\n this.$dialog.setBusy('Caricamento in corso...');\r\n this.$clipper.index(documentId)\r\n .subscribe({\r\n next: (r) => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else {\r\n this.items = []; \r\n r.value?.items.forEach((n: any) => {\r\n if (!excludedTypes || excludedTypes.indexOf(n.type) === -1) {\r\n if (n.title) n.description = n.title;\r\n else {\r\n if (n.type < 3) {\r\n n.description = n.text.trim();\r\n } else {\r\n n.description =\r\n n.typeDescription.trim() + ' ' + n.text.trim() + '.';\r\n }\r\n }\r\n this.items.push(n);\r\n }\r\n });\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n */\r\n select() {\r\n this.okDisabled =\r\n !this.selection || this.selection.selectedOptions.selected.length === 0;\r\n }\r\n\r\n /**\r\n * Confirm selection\r\n */\r\n use(item: any = null) {\r\n if (this.okDisabled) return;\r\n if (this.data.multiple){\r\n if (item) return; // multiple and single item selection not supported\r\n let selection: any = [];\r\n this.selection.selectedOptions.selected.forEach((n: any) => {\r\n selection.push(n.value);\r\n });\r\n this.done.emit({ data: selection });\r\n } else if (item) {\r\n this.done.emit({ data: item }); \r\n }\r\n }\r\n}\r\n","<h2 mat-dialog-title>Indice</h2>\r\n<div mat-dialog-content>\r\n @if (!items || items.length === 0) {\r\n<p>\r\n Nessun elemento da visualizzare.\r\n </p>\r\n}\r\n @if (items && items.length > 0) {\r\n<mat-selection-list dense #selection (selectionChange)=\"select();\"\r\n [multiple]=\"data.multiple\" hideSingleSelectionIndicator=\"true\">\r\n @for (item of items; track item) {\r\n \r\n @if (item.type > 4) {\r\n<div class=\"small uppercase truncated\" style=\"font-weight: 600; display: flex; align-items: center; min-height: 36px;\">\r\n <div>{{item.description}}</div>\r\n </div>\r\n}\r\n @if (item.type <= 4) {\r\n<mat-list-option color=\"primary\" [selected]=\"false\" [value]=\"item\" (click)=\"use(item)\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div [ngStyle]=\"{'flex': '0 0 ' + (10 * item.level) + 'px'}\"></div>\r\n <div style=\"flex: 1 1 100%\" class=\"truncated\">\r\n <div class=\"small\" [matTooltip]=\"item.description\">{{item.description}}</div>\r\n </div>\r\n </div>\r\n </mat-list-option>\r\n}\r\n \r\n}\r\n </mat-selection-list>\r\n}\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n @if (data.multiple) {\r\n<button mat-flat-button color=\"primary\" [disabled]=\"okDisabled\" (click)=\"use()\">USA</button>\r\n}\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MediaChange, MediaObserver } from '@ngbracket/ngx-layout';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogContent } from '@angular/material/dialog';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n BroadcastService,\r\n SystemUtils,\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport {\r\n ClipperDefinitions,\r\n ClipperService,\r\n ClipperMessages\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperReferencesComponent } from '../references/references.component';\r\nimport { ClipperDocumentBaseComponent } from './base/document-base.component';\r\nimport { ClipperDocumentIndexComponent } from './document-index/document-index.component';\r\nimport { FilePreviewComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { SafeUrlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { NgStyle } from '@angular/common';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document.component.html',\r\n styleUrls: ['./document.component.scss'],\r\n standalone: true,\r\n imports: [\r\n FlexModule,\r\n \r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n ExtendedModule,\r\n MatDividerModule,\r\n MatProgressBarModule,\r\n MatDialogContent,\r\n NgStyle,\r\n MatSidenavModule,\r\n \r\n SafeUrlPipe,\r\n ],\r\n})\r\nexport class ClipperDocumentComponent extends ClipperDocumentBaseComponent\r\n implements OnInit, OnDestroy {\r\n @ViewChild('relevantsSidenav') relevantsSidenav!: MatSidenav;\r\n @Output() closing = new EventEmitter<any>();\r\n @Output() opening = new EventEmitter<any>();\r\n\r\n // Compliance related events\r\n @Output() onComplianceAnalysis = new EventEmitter<any>();\r\n @Output() onCompliancePlanning = new EventEmitter<any>();\r\n @Output() onComplianceUsageReport = new EventEmitter<any>();\r\n\r\n private __d$: Subject<void> = new Subject<void>();\r\n private rendererListener1: any;\r\n\r\n contentHeight: number = null;\r\n url: any = null;\r\n title: string = null;\r\n busy: boolean = false;\r\n lastQuery: string = null;\r\n lastUrl: string = null;\r\n lastDocument: any = {};\r\n relevants: any = {\r\n items: [],\r\n hits: 0,\r\n hit: 0,\r\n minimumScore: 100,\r\n };\r\n relevantsMode: string = 'side';\r\n relevantsClosed: boolean = false;\r\n relevantsBusy: boolean = false;\r\n relevantDocumentId: string = null;\r\n selectionMode: number = null;\r\n newModule: number = null;\r\n module: number = null;\r\n mq: string = null;\r\n isDeadline: boolean = false;\r\n isLawInForce: boolean = false;\r\n\r\n constructor(\r\n public $broadcast: BroadcastService,\r\n public $dialog: DialogService,\r\n public $clipper: ClipperService,\r\n public media: MediaObserver,\r\n public renderer: Renderer2,\r\n public router: Router,\r\n public sanitizer: DomSanitizer,\r\n public dialogRef: MatDialogRef<ClipperDocumentComponent>,\r\n @Inject(MAT_DIALOG_DATA) _data: any\r\n ) {\r\n super($dialog, $clipper);\r\n\r\n if (_data) {\r\n this.selectionMode = _data.selectionMode;\r\n if (_data.query) this.lastQuery = _data.query;\r\n else this.lastQuery = '';\r\n if (_data.id) {\r\n let url =\r\n this.$clipper.serviceUri +\r\n '/documents/render/?query=' +\r\n this.lastQuery +\r\n '&id=' +\r\n _data.id;\r\n this.navigateByUrl(url);\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n // Listen to window messages\r\n this.rendererListener1 = this.renderer.listen(\r\n 'window',\r\n 'message',\r\n (e: Event) => {\r\n let event = e as MessageEvent;\r\n if (!event) return;\r\n if (event.data) {\r\n try {\r\n var data = JSON.parse(event.data);\r\n if (data) {\r\n switch (data.type) {\r\n case 'navigated':\r\n this.navigated(\r\n data.id,\r\n data.title1,\r\n data.title2,\r\n data.model,\r\n data.module,\r\n data.moduleName,\r\n data.date,\r\n data.number,\r\n data.author,\r\n data.origin,\r\n data.originDescription,\r\n data.bag,\r\n data.validityInfo,\r\n data.expiringInfo,\r\n data.primaryId,\r\n data.primaryModel,\r\n data.secondaryId,\r\n data.isTrial\r\n );\r\n break;\r\n case 'navigate':\r\n this.navigate(data.url);\r\n break;\r\n case 'references':\r\n this.openReferences(\r\n data.id,\r\n data.mode,\r\n data.model,\r\n data.anchor,\r\n data.anchorTitle,\r\n data.update\r\n );\r\n break;\r\n case 'hits':\r\n this.relevants.hits = data.total;\r\n this.updateRelevants();\r\n break;\r\n }\r\n }\r\n } catch { \r\n }\r\n }\r\n }\r\n );\r\n\r\n // React to media query changes\r\n this.media\r\n .asObservable()\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe((changes: MediaChange[]) => {\r\n this.mq = changes[0].mqAlias;\r\n if (\r\n this.relevants &&\r\n this.relevants.items &&\r\n this.relevants.items.length > 0\r\n )\r\n this.updateRelevantsVisibility();\r\n });\r\n //this.updateRelevantsVisibility();\r\n\r\n // React to relevant items sidenav state change\r\n if (this.relevantsSidenav)\r\n this.relevantsSidenav.openedChange\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe(\r\n () => {\r\n this.adjustView();\r\n }\r\n );\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe(() => {\r\n // Update view\r\n this.updateView();\r\n });\r\n this.adjustView();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.__d$.next();\r\n this.__d$.complete();\r\n if (this.rendererListener1)\r\n this.rendererListener1();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Close dialog\r\n */\r\n\r\n close() {\r\n if (this.closing) this.closing.emit({ newModule: this.newModule });\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Navigate to a new document\r\n * @param id : the document id\r\n */\r\n navigate(id: string) {\r\n if (!id || id.length == 0)\r\n return; // Nothing to do\r\n if (id.indexOf('?') !== -1) {\r\n if (id.startsWith('/api'))\r\n this.navigateByUrl(this.$clipper.serviceUri + id.substring(4));\r\n else if (!id.startsWith(this.$clipper.serviceUri))\r\n this.navigateByUrl(this.$clipper.serviceUri + id);\r\n else this.navigateByUrl(id);\r\n } else\r\n this.navigateByUrl(\r\n this.$clipper.serviceUri +\r\n '/documents/render/?query=&id=' +\r\n id\r\n );\r\n }\r\n\r\n /**\r\n * Navigate by url\r\n * @param url : the url to navigate to\r\n */\r\n navigateByUrl(url: string) {\r\n if (!url || url.length === 0 || url === 'about:blank')\r\n return; // Nothing to do\r\n this.lastUrl = url;\r\n // Clean url\r\n let parts = url.split('#');\r\n url = parts[0];\r\n if (parts.length > 1) { \r\n url += '#' + parts[1];\r\n }\r\n // Handle free text query\r\n let q = '';\r\n let pos = url.indexOf('query=');\r\n if (pos !== -1) {\r\n pos += 6;\r\n while (url.length > pos && url[pos] !== '&' && url[pos] !== '#')\r\n q += url[pos++];\r\n }\r\n if (q.length > 0) {\r\n // Reset\r\n this.relevants.hit = 0;\r\n if (\r\n !this.module ||\r\n this.module === ClipperDefinitions.MOD_NORMATIVA_VIGENTE ||\r\n this.module === ClipperDefinitions.MOD_SEMANTIC_SEARCH\r\n ) {\r\n try {\r\n // Assign query to enable search for fragments\r\n this.lastQuery = decodeURIComponent(encodeURIComponent(q));\r\n } catch {\r\n this.lastQuery = q;\r\n }\r\n }\r\n }\r\n\r\n let navigateToFile = url.indexOf('&file=true') !== -1;\r\n if (navigateToFile === true) {\r\n // Preview\r\n this.previewFile(url);\r\n } else {\r\n // Begin loading only if not downloading a file\r\n this.busy = url.indexOf('documents/render/item') === -1;\r\n // Navigate\r\n this.url = url;\r\n }\r\n }\r\n navigated(\r\n id: string, // Documnent id\r\n title1: string, // Title 1\r\n title2: string, // Title 2\r\n model: number, // Model\r\n moduleId: number, // Module\r\n moduleName: string, // Module name\r\n date: string, // Date\r\n number: string, // Number\r\n author: string, // Author\r\n origin: string, // Origin\r\n originDescription: string, // Origin description\r\n bag: string, // Flags\r\n validityInfo: string, // Info about validity\r\n expiringInfo: string, // Info about expiring date\r\n primaryId: string, // Primary document id\r\n primaryModel: number, // Primary document model\r\n secondaryId: string, // Secondary document id\r\n isTrial: boolean // True if is a trial request\r\n ) {\r\n // Check for session expiring\r\n if (title1 === 'Sessione non valida') {\r\n this.$dialog\r\n .error(title2, null, title1, 'Accedi di nuovo')\r\n .afterClosed()\r\n .subscribe(() => {\r\n this.router.navigate(['login']);\r\n });\r\n return;\r\n }\r\n\r\n // Store data\r\n this.lastDocument.id = id;\r\n this.lastDocument.title1 = title1 ? SystemUtils.urlDecode(title1) : null;\r\n this.lastDocument.title2 = title2 ? SystemUtils.urlDecode(title2) : null;\r\n this.lastDocument.model = model;\r\n this.lastDocument.module = moduleId;\r\n this.lastDocument.moduleName = moduleName;\r\n this.lastDocument.date = new Date(date);\r\n this.lastDocument.number = number;\r\n this.lastDocument.author = author;\r\n this.lastDocument.origin = origin;\r\n this.lastDocument.originDescription = originDescription;\r\n this.lastDocument.bag = bag;\r\n this.lastDocument.validityInfo = validityInfo;\r\n this.lastDocument.primaryId = primaryId;\r\n this.lastDocument.primaryModel = primaryModel;\r\n this.lastDocument.hasPrimary =\r\n primaryId &&\r\n (model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO ||\r\n model === ClipperDefinitions.DM_NORMATIVA_VIGENTE);\r\n if (primaryId) {\r\n var description = '';\r\n switch (primaryModel ? primaryModel : model) {\r\n case ClipperDefinitions.DM_NORMATIVA_VIGENTE:\r\n description = 'Testo vigente';\r\n break;\r\n case ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO:\r\n description = 'Testo storico';\r\n break;\r\n case ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI:\r\n description = 'Adempimento';\r\n break;\r\n case ClipperDefinitions.DM_GUIDA_NORMATIVA:\r\n description = 'Guida';\r\n break;\r\n case ClipperDefinitions.DM_SCADENZA:\r\n description = 'Scadenza';\r\n break;\r\n case ClipperDefinitions.DM_COORDINAMENTO:\r\n description = 'Modifica';\r\n break;\r\n default:\r\n description = 'Collegamento';\r\n break;\r\n }\r\n this.lastDocument.primaryDescription = description;\r\n }\r\n this.lastDocument.secondaryId = secondaryId;\r\n this.lastDocument.isTrial = isTrial;\r\n\r\n // Handle expiring info\r\n this.lastDocument.expiringDescription = null;\r\n if (expiringInfo) {\r\n let parts = expiringInfo.split('#');\r\n if (parts.length > 0) {\r\n let parts2 = parts[0].split('|');\r\n if (parts2.length > 0)\r\n this.lastDocument.expiringDate = new Date(parts2[0]);\r\n if (parts2.length > 1) this.lastDocument.expiringInfo = parts2[1];\r\n if (parts2.length > 2)\r\n this.lastDocument.expiringInfo += '|' + parts2[2];\r\n }\r\n if (parts.length > 1) this.lastDocument.expiringDescription = parts[1];\r\n }\r\n\r\n // Set title\r\n this.title = this.lastDocument.title1\r\n ? this.lastDocument.title1\r\n : this.lastDocument.title2;\r\n\r\n // Notify navigation has completed\r\n this.$broadcast.sendMessage(ClipperMessages.DOCUMENT_NAVIGATED, {\r\n document: this.lastDocument,\r\n });\r\n\r\n // Get last document update\r\n this.$clipper.lastUpdate(this.lastDocument.id).subscribe((r: any) => {\r\n if (r.success) this.lastDocument.lastUpdate = r.value;\r\n });\r\n\r\n if (!this.hasRelevants()) {\r\n this.relevantsSidenav.close();\r\n }\r\n\r\n this.busy = false;\r\n\r\n this.adjustView();\r\n }\r\n\r\n /**\r\n * goto previous document in history\r\n */\r\n back() {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage('{\"type\": \"back\"}', '*');\r\n }\r\n\r\n /**\r\n * Goto next document in history\r\n */\r\n forward() {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage('{\"type\": \"forward\"}', '*');\r\n }\r\n\r\n /**\r\n * Print current document\r\n */\r\n print() {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage('{\"type\": \"print\"}', '*');\r\n }\r\n\r\n /**\r\n * Find in current document\r\n */\r\n find() {\r\n this.$dialog.info('Per cercare nel documento premi CTRL + F.');\r\n }\r\n\r\n /**\r\n * Goto next relevant item\r\n */\r\n nextRelevant() {\r\n let i = this.relevants.hit + 1;\r\n if (i <= this.relevants.hits) {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage('{\"type\": \"relevant\", \"value\": \"next\"}', '*');\r\n this.relevants.hit++;\r\n }\r\n }\r\n\r\n /**\r\n * Goto previous relevant item\r\n */\r\n previousRelevant() {\r\n let i = this.relevants.hit - 1;\r\n if (i > 0) {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"previous\"}',\r\n '*'\r\n );\r\n this.relevants.hit--;\r\n }\r\n }\r\n\r\n /**\r\n * Check if current document should show relevants\r\n */\r\n hasRelevants() {\r\n return this.relevantDocumentId == this.lastDocument.id && this.relevants;\r\n }\r\n\r\n /**\r\n * Goto a relevant item\r\n * @param item : the item to go to\r\n */\r\n gotoRelevant(item: any) {\r\n if (item.type === ClipperDefinitions.FT_FILE) {\r\n window.open(\r\n this.$clipper.serviceUri +\r\n '/documents/render/item/?id=' +\r\n item.documentId,\r\n '_blank'\r\n );\r\n } else {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"' + item.uri + '\"}',\r\n '*'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Adjust view\r\n */\r\n adjustView() {\r\n setTimeout(() => {\r\n this.updateView();\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Update view\r\n */\r\n updateView() {\r\n let a = window.innerHeight;\r\n let b = document.getElementById('clipper-document-fixed');\r\n try {\r\n if (!a || !b || a === 0) this.adjustView();\r\n let hb = b.clientHeight;\r\n if (hb === 0) this.adjustView();\r\n this.contentHeight = a - (hb + 12);\r\n } catch { }\r\n }\r\n\r\n /**\r\n * Update relevant items\r\n */\r\n updateRelevants() {\r\n if (\r\n !this.lastQuery ||\r\n this.lastQuery.length === 0 ||\r\n this.lastQuery === ' ' ||\r\n (this.lastDocument &&\r\n this.lastDocument.model != ClipperDefinitions.DM_NORMATIVA_VIGENTE)\r\n ) {\r\n this.relevantsClose();\r\n this.adjustView();\r\n } else {\r\n this.$clipper\r\n .query({\r\n id: this.lastDocument.id,\r\n text: this.lastQuery,\r\n count: 1,\r\n })\r\n .subscribe((r: any) => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else {\r\n let minimumScore = 0;\r\n if (r.value?.items && r.value?.items.length > 0) {\r\n r.value.items[0].anchors.forEach((n: any) => {\r\n let score = n.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n if (minimumScore > score) minimumScore = score;\r\n n.score = score;\r\n });\r\n this.relevants.minimumScore = minimumScore;\r\n this.relevants.items = r.value.items[0].anchors;\r\n this.relevantDocumentId = this.lastDocument.id;\r\n }\r\n\r\n if (\r\n this.relevants.items &&\r\n this.relevants.items.length > 0 &&\r\n !this.relevantsClosed &&\r\n this.mq !== 'xs'\r\n )\r\n this.relevantsOpen();\r\n else this.relevantsClose();\r\n this.adjustView();\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Update relevants sidenav visibility\r\n */\r\n updateRelevantsVisibility() {\r\n if (this.mq === 'xs') {\r\n this.relevantsMode = 'over';\r\n if (this.relevantsSidenav && this.relevantsSidenav.opened) {\r\n this.relevantsSidenav.close();\r\n }\r\n } else {\r\n this.relevantsMode = 'side';\r\n if (this.relevantsSidenav && !this.relevantsClosed) {\r\n this.relevantsSidenav.toggle(true);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Open relevant items sidebar\r\n */\r\n relevantsOpen() {\r\n this.relevantsClosed = false;\r\n this.relevantsSidenav.open();\r\n }\r\n\r\n /**\r\n * Close facets sidebar\r\n * @param closedManually : ture if facets has been closed manually by clicking the button\r\n */\r\n relevantsClose(closedManually: boolean = false) {\r\n if (this.mq !== 'xs') this.relevantsClosed = closedManually;\r\n this.relevantsSidenav.close();\r\n }\r\n\r\n /**\r\n * Display document structure\r\n */\r\n index(documentId: string) {\r\n let d = this.$dialog.open(ClipperDocumentIndexComponent, {\r\n ariaLabel: 'indice documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId,\r\n excludedTypes: null,\r\n multiple: false\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n if (r.data.documentId === documentId) {\r\n let f = document.getElementById('documentBody') as any;\r\n f.contentWindow.postMessage(\r\n '{\"type\": \"goto\", \"value\":\"' + r.data.uri + '\"}',\r\n '*'\r\n );\r\n } else {\r\n this.openDocument(r.data.documentId + '#' + r.data.uri);\r\n }\r\n\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Get the id in a query string\r\n * @param url : the url to process\r\n * @param name : the optional id paramenter name. Default is 'id'\r\n * @returns : the id parame\r\n */\r\n private getId(url: string, name: string = 'id'): string {\r\n const start = url.lastIndexOf(name + '=') + 3;\r\n const end = url.indexOf('&', start);\r\n return url.substring(start, end);\r\n }\r\n\r\n /**\r\n * Preview a file if possible\r\n * @param url : the url to preview\r\n */\r\n previewFile(url: string) {\r\n if (!url || url.length === 0)\r\n return; // Nothing to do\r\n // Get the id\r\n let id = this.getId(url);\r\n if (!id || id.length === 0)\r\n return; // Nothing to do\r\n // Create the url\r\n this.$clipper.newOTP(id).subscribe(\r\n r => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else if (!r.value.canPreview)\r\n // Donload manually\r\n location.href = url;\r\n else {\r\n this.$dialog.open(FilePreviewComponent, {\r\n panelClass: 'preview-panel',\r\n ariaLabel: 'anteprima',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: {\r\n url: url,\r\n embed: r.value.canEmbed\r\n },\r\n minWidth: '375px',\r\n maxWidth: '900px',\r\n width: '99%',\r\n height: '99%'\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show document comment\r\n */\r\n showComment() {\r\n if (this.lastDocument.bag[7] !== 'T') return;\r\n this.$clipper\r\n .comment(this.lastDocument.id)\r\n .subscribe((r: any) => {\r\n if (!r.success) {\r\n if (r.message === \"Il tuo abbonamento non consente di visualizzare i commenti alle norme.\")\r\n this.$dialog.error(\"Il servizio di <b>commenti alle norme</b> non è compreso nel tuo abbonamento, per maggiori informazioni rivolgersi all'agente commerciale di riferimento o inviare una mail a <a href='mailto:sales@arsedizioni.it' target='_blank'>sales@arsedizioni.it</a>.\", null, \"Attenzione\");\r\n else\r\n this.$dialog.error(r.message);\r\n } else {\r\n if (r.value && r.value.length > 1)\r\n this.$dialog.info(r.value.replace(/\\n/g, '<br>\\r\\n'), \"Commento\", \"CHIUDI\", 700);\r\n else\r\n this.$dialog.info(\"Commento non più disponibile o in fase di revisione.\");\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n open(document: any, newWindow: boolean = false) {\r\n if (!newWindow) {\r\n if (this.opening) this.opening.emit({ id: document.id });\r\n else this.openDocument(document.id);\r\n } else window.open('/documento/' + document.id, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n */\r\n private openDocument(documentId: string) {\r\n if (!documentId) return;\r\n this.$dialog.open(ClipperDocumentComponent, {\r\n ariaLabel: 'documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: { id: documentId },\r\n panelClass: 'document-container',\r\n minWidth: '375px',\r\n maxWidth: '1400px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param documentId : the document id\r\n * @param mode : the mode\r\n */\r\n openReferences(\r\n documentId: string,\r\n mode: number = ClipperDefinitions.SM_REFERENCES_IN,\r\n model: number = null,\r\n anchor: string = null,\r\n anchorTitle: string = null,\r\n update: boolean = true\r\n ) {\r\n if (!documentId) documentId = this.lastDocument.id;\r\n let d = this.$dialog.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n id: documentId,\r\n mode: mode,\r\n model: model,\r\n anchor: anchor,\r\n anchorTitle: anchorTitle,\r\n update: update,\r\n },\r\n panelClass: 'references-container',\r\n minWidth: '375px',\r\n maxWidth: '1000px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: any) => {\r\n if (r && r.id) {\r\n this.navigate(r.id);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Display a report\r\n * @param item\r\n */\r\n displayReport(item: any) {\r\n if (!item) return;\r\n if (item.model != ClipperDefinitions.DM_NORMATIVA_VIGENTE && item.model != ClipperDefinitions.DM_SCADENZA) {\r\n this.$dialog.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n }\r\n this.openReport(item.id, item.title1 ? item.title1 : item.title2);\r\n }\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n canSelect(): boolean {\r\n return this.selectionMode > 0 && this.lastDocument && (this.lastDocument.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE || this.lastDocument.model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO)\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n select() {\r\n if (this.lastDocument) {\r\n this.$broadcast.sendMessage(ClipperMessages.DOCUMENT_SELECTED_INNER, [\r\n this.lastDocument,\r\n ]);\r\n this.close();\r\n }\r\n }\r\n\r\n\r\n //\r\n // Registro e scadenzario\r\n //\r\n\r\n /**\r\n * Checks if all documents are supported by RS\r\n * @param documents : the list of documens\r\n * @returns: true if all documents supports RS\r\n */\r\n RS_enabled(documents: any): boolean {\r\n if (!documents) return false;\r\n if (this.selectionMode > 0) return false;\r\n let allow = false;\r\n documents.forEach((n: any) => {\r\n allow = n.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||\r\n n.model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO ||\r\n n.model === ClipperDefinitions.DM_SCADENZA;\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * New law\r\n * @param document: the law\r\n */\r\n RS_newLaw(document: any): boolean {\r\n if (!document) return false;\r\n if (this.selectionMode > 0 || !this.$clipper.supportsRS) return false;\r\n if (\r\n document.model !== ClipperDefinitions.DM_NORMATIVA_VIGENTE &&\r\n document.model !== ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO &&\r\n document.model !== ClipperDefinitions.DM_SCADENZA) return false;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_NEW_LAW, [document]);\r\n return true;\r\n }\r\n\r\n /**\r\n * New activity\r\n * @param document: the law\r\n */\r\n RS_newActivity(document: any): boolean {\r\n if (!document) return false;\r\n if (this.selectionMode > 0 || !this.$clipper.supportsRS) return false;\r\n if (\r\n document.model !== ClipperDefinitions.DM_NORMATIVA_VIGENTE &&\r\n document.model !== ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO &&\r\n document.model !== ClipperDefinitions.DM_SCADENZA) return false;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_NEW_ACTIVITY, document);\r\n return true;\r\n }\r\n\r\n /**\r\n * Document usage report\r\n * @param document: the law\r\n */\r\n RS_usageReport(document: any): boolean {\r\n if (!document) return false;\r\n if (this.selectionMode > 0 || !this.$clipper.supportsRS) return false;\r\n if (\r\n document.model !== ClipperDefinitions.DM_NORMATIVA_VIGENTE &&\r\n document.model !== ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO &&\r\n document.model !== ClipperDefinitions.DM_SCADENZA) return false;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n return true;\r\n }\r\n\r\n}\r\n\r\n","<div id=\"clipper-document-fixed\">\r\n <div class=\"clipper-document-header\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex.lt-md=\"50\" fxFlex=\"70\" fxFlexAlign=\"center\" class=\"document-title-block\">\r\n <div class=\"truncated\">\r\n <div class=\"large bold\">{{title}}</div>\r\n @if (lastDocument && lastDocument.lastUpdate) {\r\n <div class=\"small item-greyed-2\" style=\"padding-top:5px\">\r\n AGGIORNATO A:\r\n {{lastDocument.lastUpdate}}\r\n </div>\r\n }\r\n @if (lastDocument && lastDocument.expiringDescription) {\r\n <div class=\"small item-greyed-2\" style=\"padding-top:5px\">\r\n {{lastDocument.expiringDescription}}</div>\r\n }\r\n @if (lastDocument && lastDocument.validityInfo) {\r\n <div class=\"small\" style=\"padding-top:5px\"><span class=\"item-line-red-badge\"><b>Attenzione!</b>\r\n {{lastDocument.validityInfo}}</span></div>\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex.lt-md=\"50\" fxFlex=\"30\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"start\" style=\"padding:6px 10px 5px 0\">\r\n @if (canSelect()) {\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"select()\">\r\n Usa selezione\r\n </button>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Indietro\"\r\n aria-label=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Avanti\"\r\n aria-label=\"Avanti\" (click)=\"forward()\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row wrap \" fxFill fxLayoutAlign=\"space-between\" style=\"padding-left: 8px\">\r\n <div fxFlex.xs=\"100\" fxFlexAlign=\"center\">\r\n @if (lastDocument.model === 9) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"index(lastDocument.id)\" color=\"primary\">\r\n Indice\r\n </button>\r\n }\r\n @if (lastDocument.bag && (lastDocument.bag[1] ==='T' || lastDocument.bag[3] ==='T')) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Collegamenti\"\r\n [attr.aria-label]=\"'Collegamenti al documento'\" [matMenuTriggerFor]=\"menuLinks\" color=\"primary\">\r\n Collegamenti\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuLinks=\"matMenu\">\r\n @if (lastDocument.bag && lastDocument.bag[1] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti richiamati'\"\r\n (click)=\"openReferences(lastDocument.id, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[3] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti che richiamano'\"\r\n (click)=\"openReferences(lastDocument.id, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[2] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument.id, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[4] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument.id, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[4] !=='T' && lastDocument.bag[6] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche apportate'\"\r\n (click)=\"openReferences(lastDocument.id, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n </mat-menu>\r\n @if (lastDocument.hasPrimary) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra documento primario'\"\r\n (click)=\"navigate(lastDocument.primaryId)\" color=\"primary\">\r\n {{lastDocument.primaryDescription}}\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[2] ==='T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument.id, 4)\" color=\"primary\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[4] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument.id, 3)\" color=\"primary\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[4] !== 'T' && lastDocument.bag[6] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche apportate'\" (click)=\"openReferences(lastDocument.id, 5)\" color=\"primary\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n @if (lastDocument.secondaryId) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra documento secondario'\"\r\n (click)=\"navigate(lastDocument.secondaryId)\" color=\"primary\">\r\n Testo storico\r\n </button>\r\n }\r\n @if (lastDocument.bag && lastDocument.bag[7] === 'T') {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra commento'\"\r\n (click)=\"showComment()\" color=\"primary\">\r\n Commento\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex.xs=\"100\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (hasRelevants() && relevants.hits) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed\" style=\"margin-left:20px; margin-right: 5px\"\r\n matTooltip=\"Parole evidenziate\">{{relevants.hit}}\r\n di {{relevants.hits}}</div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla parola precedente'\"\r\n (click)=\"previousRelevant()\" color=\"primary\" matTooltip=\"Parola precedente\"\r\n [disabled]=\"relevants.hit <= 1\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla prossima parola'\"\r\n (click)=\"nextRelevant()\" color=\"primary\" matTooltip=\"Prossima parola\"\r\n [disabled]=\"relevants.hit >= relevants.hits\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni sul documento\"\r\n [attr.aria-label]=\"'Azioni da eseguire sul documento'\" [matMenuTriggerFor]=\"menuActions\" color=\"primary\">\r\n Azioni\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Apri documento in una nuova finestra'\"\r\n (click)=\"open(lastDocument, true)\">\r\n <mat-icon>open_in_browser</mat-icon>Apri in nuova finestra\r\n </button>\r\n <button mat-menu-item (click)=\"print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <mat-icon>print</mat-icon>Stampa\r\n </button>\r\n <button mat-menu-item (click)=\"find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <mat-icon>find_in_page</mat-icon>Trova nel documento (CTRL+F)\r\n </button>\r\n <button mat-menu-item (click)=\"sendItemsTo([lastDocument])\" [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n </button>\r\n <button mat-menu-item (click)=\"addToBag([lastDocument])\"\r\n [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n </button>\r\n @if (lastDocument && lastDocument.model != 11) {\r\n <button mat-menu-item (click)=\"exportPdf(lastDocument)\" [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n </button>\r\n }\r\n <button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"showLink(lastDocument)\">\r\n <mat-icon>link</mat-icon>Link\r\n </button>\r\n @if ((lastDocument.model === 9 || lastDocument.model === 10)) {\r\n <button mat-menu-item [attr.aria-label]=\"'Genera un report sul documento'\"\r\n (click)=\"displayReport(lastDocument)\">\r\n <mat-icon>assignment</mat-icon>Report\r\n </button>\r\n }\r\n @if (RS_enabled([lastDocument]) && !canSelect()) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (RS_enabled([lastDocument]) && !canSelect()) {\r\n <button type=\"button\" mat-menu-item matTooltip=\"Registro & Scadenzario\"\r\n [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\" [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n }\r\n <mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"RS_newLaw(lastDocument)\">\r\n Nuova legge\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"RS_newActivity(lastDocument)\">\r\n Nuova attività\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"RS_usageReport(lastDocument)\">\r\n Report utilizzo norma\r\n </button>\r\n </mat-menu>\r\n </mat-menu>\r\n @if (hasRelevants() && relevants.items && relevantsSidenav && (!relevantsSidenav.opened || relevantsClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" fxHide fxShow.xs mat-icon-button color=\"primary\" matTooltip=\"Rilevanza\"\r\n aria-label=\"'Rilevanza'\" (click)=\"relevantsOpen()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n <button type=\"button\" fxShow fxHide.xs mat-button color=\"primary\" aria-label=\"'Rilevanza'\"\r\n (click)=\"relevantsOpen()\">\r\n Rilevanza\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (busy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content style=\"padding:0\" [ngStyle]=\"{'min-height.px': contentHeight}\">\r\n <mat-sidenav-container [hasBackdrop]=\"false\" [ngStyle]=\"{'height.px': contentHeight}\">\r\n <mat-sidenav #relevantsSidenav position=\"end\" autoFocus=\"false\" opened=\"false\" mode=\"{{relevantsMode}}\"\r\n class=\"sidenav sidenav-facets relevants-sidenav\">\r\n @if (relevantsBusy) {\r\n <div class=\"sidenav-overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"height:5px\">\r\n @if (relevantsBusy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"64px\">\r\n <div fxLayout=\"row\" fxFill class=\"sidenav-title-container\">\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\" fxLayoutAlign=\"start\">\r\n <span class=\"sidenav-title\">Rilevanza</span>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Nascondi\"\r\n (click)=\"relevantsClose(true)\" color=\"primary\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"scrollbox\">\r\n @if (relevantsBusy) {\r\n <div style=\"padding: 10px; max-width: 340px;\">\r\n <p>Ricerca parti del documento significative in corso...</p>\r\n </div>\r\n }\r\n @if (!relevantsBusy) {\r\n <div style=\"max-width: 340px;\">\r\n <div style=\"padding: 0 10px\">\r\n <p>Parti del documento più significative per la ricerca di <span class='word-hit'>{{lastQuery}}</span>\r\n </p>\r\n <nav class=\"relevant-items\">\r\n <ul>\r\n @for (item of relevants.items; track item) {\r\n <li class=\"small\" (click)=\"gotoRelevant(item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlex=\"100\">\r\n <!--<div [matTooltip]=\"item.title\"> -->\r\n {{item.title}}\r\n <!--</div> -->\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (item.score > 1.2) {\r\n <span fxFlexAlign=\"start\">\r\n <mat-icon style='font-size:small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <div id=\"scroller\" style=\"overflow:auto;\" [ngStyle]=\"{'height.px': contentHeight}\">\r\n <iframe id=\"documentBody\" name=\"documentBody\" style=\"width: 100%; border:0; overflow:hidden;\"\r\n [src]=\"url | safeUrl\" [ngStyle]=\"{'height.px': contentHeight-10}\"></iframe>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>","import { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport {\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentComponent } from './document.component';\r\n\r\n export class ClipperDocumentsUtils {\r\n /**\r\n * Open a document\r\n * @param dialog : the dialog service\r\n * @param clipper : the clipper service\r\n * @param documentId : the document id \r\n * @param query : the query for highlight\r\n * @param selectionMode : the selection mode (1 = single, 2 = multiple, 3 = any selection)\r\n */\r\n static openDocument(\r\n $dialog: DialogService,\r\n $clipper: ClipperService,\r\n documentId: string, \r\n query: string = null,\r\n selectionMode: number = null): MatDialogRef<ClipperDocumentComponent> {\r\n if (!documentId){\r\n $dialog.error(\"Documento non valido.\");\r\n }\r\n if (!$clipper.loggedIn) {\r\n $dialog.error(\"Clipper non è disponibile in questo momento. Verifica la connessione.\");\r\n return null;\r\n }\r\n return $dialog.open(ClipperDocumentComponent, {\r\n ariaLabel: 'documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n id: documentId,\r\n query: query,\r\n selectionMode: selectionMode\r\n },\r\n panelClass: 'document-container',\r\n minWidth: '375px',\r\n maxWidth: '1400px',\r\n width: '99%',\r\n height: '99%'\r\n });\r\n }\r\n\r\n /**\r\n * Extract document title\r\n * @param title : the full document title\r\n */\r\n static parseDocumentTitle(title: string) {\r\n if (!title) return title;\r\n let p = title.indexOf('[');\r\n if (p !== -1) return title.substring(0, p);\r\n return title;\r\n }\r\n\r\n}","import { Component, OnDestroy, OnInit, Input, ViewChild } from '@angular/core';\r\nimport { MatAccordion, MatExpansionModule } from '@angular/material/expansion';\r\nimport { Subject } from 'rxjs';\r\nimport {\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentBaseComponent } from '../document/base/document-base.component';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { ClipperDocumentsUtils } from '../document/documents';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n\r\n@Component({\r\n selector: 'clipper-last-15-days',\r\n templateUrl: './last-15-days.component.html',\r\n styleUrls: ['./last-15-days.component.scss'],\r\n standalone: true,\r\n imports: [ MatTooltipModule, FlexModule, MatButtonModule, MatExpansionModule]\r\n})\r\nexport class ClipperLast15DaysComponent\r\n extends ClipperDocumentBaseComponent\r\n implements OnInit, OnDestroy {\r\n\r\n @ViewChild(MatAccordion) daysAccordion!: MatAccordion;\r\n\r\n\r\n private __d$: Subject<void> = new Subject<void>();\r\n\r\n days: any;\r\n daysExpanded: number = 0;\r\n daysLoaded: boolean = false;\r\n \r\n @Input() showHeader: boolean = true;\r\n\r\n constructor(\r\n public $dialog: DialogService,\r\n public $clipper: ClipperService\r\n ) {\r\n super($dialog, $clipper);\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.$clipper.loggedIn) {\r\n this.fetch();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.__d$.next();\r\n this.__d$.complete();\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n open(documentId: string, newWindow: boolean = false) {\r\n if (!newWindow) this.openDocument(documentId);\r\n else window.open('/documento/' + documentId, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n */\r\n private openDocument(documentId: string) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.$dialog,\r\n this.$clipper,\r\n documentId,\r\n null,\r\n null); \r\n }\r\n\r\n\r\n /**\r\n * Load home personalized contents\r\n */\r\n fetch() {\r\n if (!this.$clipper.loggedIn) return;\r\n if (this.daysLoaded || !this.$clipper.loggedIn) return;\r\n this.$dialog.busy('Preparazione contenuti personalizzati...');\r\n this.$clipper.home()\r\n .subscribe({\r\n next: (r: any) => {\r\n if (!r.success) {\r\n this.$dialog.error(r.message);\r\n } else {\r\n let days: any = [];\r\n r.value.items.forEach((n: any) => {\r\n if (n.items && n.items.length > 0) days.push(n);\r\n });\r\n this.days = days;\r\n this.daysLoaded = true;\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Expand or collapse home days view\r\n * @param collapse\r\n */\r\n expand(collapse: boolean = false) {\r\n if (collapse) this.daysAccordion.closeAll();\r\n else this.daysAccordion.openAll();\r\n }\r\n\r\n\r\n}\r\n","@if (showHeader) {\r\n<div class=\"dialog-title form-column\">\r\n <p>Ecco cosa è successo negli ultimi 15 giorni in base alla tua configurazione.</p>\r\n <p>Per modificare la tua\r\n configurazione devi accedere a <a class=\"link\" href=\"https://clipper.arsedizioni.it\"\r\n matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">Clipper</a>.</p>\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlexAlign=\"center\">\r\n <button mat-button matTooltip=\"Espandi tutto\" [attr.aria-label]=\"'Espandi tutto \\ comprimi tutto'\" color=\"primary\"\r\n (click)=\"expand()\">\r\n Espandi tutto\r\n </button>\r\n <button mat-button matTooltip=\"Comprimi tutto\" [attr.aria-label]=\"'Comprimi tutto'\" color=\"primary\"\r\n (click)=\"expand(true)\">\r\n Comprimi tutto\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n<div>\r\n <mat-accordion #daysAccordion displayMode=\"flat\" multi=\"true\">\r\n @for (d of days; track d; let i = $index) {\r\n <mat-expansion-panel class=\"mat-elevation-z0\" [expanded]=\"i == 0\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span class=\"item-greyed-2\">{{d.label}} &nbsp;({{d.count}})</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n @for (g of d.items; track g; let j = $index) {\r\n <div style=\"padding-left: 15px;\">\r\n <div class=\"item-accent\" style=\"padding-top: 8px;\">{{g.label}} &nbsp;({{g.items.length}})</div>\r\n @for (item of g.items; track item; let k = $index) {\r\n <div style=\"padding-left: 15px;\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">{{k + 1}}.</div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n <div fxLayout=\"column\" fxFill class=\"item\" style=\"padding: 4px 8px; cursor: pointer\"\r\n [attr.aria-label]=\"'Apri documento'\" (click)=\"open(item.documentId)\">\r\n @if (item.author && item.origin === 'LR') {\r\n<div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\"\r\n >\r\n {{item.author}}</div>\r\n}\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n @if (item.title1) {\r\n<span><b>{{item.title1}}\r\n @if (item.part > 0) {\r\n<span class=\"item-badge\">PARTE\r\n {{item.part}}</span>\r\n}</b></span>\r\n}\r\n </div>\r\n @if (item.title2) {\r\n<div class=\"item-line item-line-2 item-line-read\">{{item.title2}}\r\n </div>\r\n}\r\n @if (item.originDescription ) {\r\n<div class=\"item-line item-line-3 item-line-read item-greyed-2\">\r\n {{item.originDescription}}\r\n </div>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n}\r\n </mat-expansion-panel>\r\n}\r\n </mat-accordion>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'clipper-search-result-item',\r\n templateUrl: './search-result-item.component.html',\r\n styleUrls: ['./search-result-item.component.scss'],\r\n standalone: true,\r\n imports: [\r\n \r\n \r\n MatTooltipModule,\r\n MatIconModule,\r\n ],\r\n})\r\nexport class ClipperSearchResultItemComponent {\r\n\r\n @Input() parent: any;\r\n @Input() item: any;\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n */\r\n open(documentId: string) {\r\n this.parent.open(documentId);\r\n }\r\n}\r\n","<div class=\"item-line item-line-4 item-line-read item-greyed-2 uppercase bold\">\r\n {{item.modelName}}\r\n</div>\r\n@if (item.author && item.origin === 'LR') {\r\n<div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">\r\n {{item.author}}\r\n</div>\r\n}\r\n<div class=\"item-line item-line-2 item-line-read\">\r\n <a (click)=\"open(item.documentId)\" [attr.aria-label]=\"'Apri documento ' + (item.title1 || item.title2)\">{{item.title1\r\n ||\r\n item.title2}}</a>\r\n @if (item.part > 0) {\r\n<span class=\"item-badge\">PARTE {{item.part}}</span>\r\n}\r\n</div>\r\n@if (item.title1 && item.title2) {\r\n<div class=\"item-line item-line-2 item-line-read\">\r\n {{item.title2}}\r\n</div>\r\n}\r\n@if (item.originDescription ) {\r\n<div class=\"item-line item-line-3 item-line-read item-greyed-2\">\r\n {{item.originDescription}}</div>\r\n}\r\n@if (item.anchors.length > 0) {\r\n<div class=\"item-line item-line-3 item-line-read\">\r\n <div class=\"item-line-block\">\r\n <div class=\"item-line-block-title\">DETTAGLIO</div>\r\n <div>\r\n @for (a of item.anchors; track a) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n<a class=\"link\" style='line-height: 18px; margin-right: 8px'\r\n (click)=\"open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if (a.veryRelevant) {\r\n<sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n}</a>\r\n}\r\n @if (!a.uri && a.text) {\r\n<span style='line-height: 18px; margin-right: 8px '>{{a.text}}</span>\r\n}\r\n </span>\r\n}\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@if (item.validityState > 0) {\r\n<div class=\"item-line item-line-3 item-line-read\">\r\n <span class=\"item-line-red-badge\">\r\n {{item.validityDescription}}\r\n </span>\r\n</div>\r\n}","import { Component, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MediaChange, MediaObserver } from '@ngbracket/ngx-layout';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogContent } from '@angular/material/dialog';\r\nimport { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { startOfDay, startOfToday, subDays } from 'date-fns';\r\nimport {\r\n BroadcastService,\r\n DateFormat,\r\n ScreenService,\r\n SelectableModel,\r\n SystemUtils\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport {\r\n SearchUtils,\r\n ClipperService,\r\n ClipperMessages,\r\n ClipperDefinitions,\r\n ClipperDialogData,\r\n DocumentSearchSnapshot,\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentBaseComponent } from '../document/base/document-base.component';\r\nimport { ClipperReferencesComponent } from '../references/references.component';\r\nimport { ClipperSearchDialogComponent } from '../search-dialog/search-dialog.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { ClipperDocumentsUtils } from '../document/documents';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER } from '@angular/material/datepicker';\r\nimport { ClipperLast15DaysComponent } from '../last-15-days/last-15-days.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { ClipperDocumentMenuComponent } from '../document/document-menu/document-menu.component';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { ExtendedModule } from '@ngbracket/ngx-layout/extended';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { NgStyle, NgClass } from '@angular/common';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './browser-dialog.component.html',\r\n styleUrls: ['./browser-dialog.component.scss'],\r\n providers: [\r\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ],\r\n standalone: true,\r\n imports: [\r\n FlexModule,\r\n MatTooltipModule, \r\n MatButtonModule,\r\n MatIconModule,\r\n MatBadgeModule,\r\n MatTabsModule,\r\n ExtendedModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatCheckboxModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n ClipperDocumentMenuComponent,\r\n MatDialogContent,\r\n NgStyle,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperSearchFacetsComponent,\r\n NgClass,\r\n ClipperSearchResultItemComponent,\r\n MatPaginatorModule,\r\n ClipperLast15DaysComponent,\r\n ],\r\n})\r\nexport class ClipperBrowserDialogComponent\r\n extends ClipperDocumentBaseComponent\r\n implements OnInit, OnDestroy {\r\n @ViewChild('facetsSidenav') facetsSidenav: MatSidenav;\r\n @ViewChild('facetsSearch') facetsSearch: ClipperSearchFacetsComponent\r\n @ViewChild('last15Days') last15Days: ClipperLast15DaysComponent;\r\n @ViewChild('paginator') paginator!: MatPaginator;\r\n @ViewChild('contextMenuTrigger') contextMenu!: MatMenuTrigger;\r\n\r\n\r\n\r\n private __d$: Subject<void> = new Subject<void>();\r\n\r\n dialogTab: number = 1;\r\n data: ClipperDialogData = {};\r\n title: string = 'Ricerca in Clipper';\r\n trackableId = (index: number, item: any) => { index >= 0 ? item.id : 0 }\r\n selection: SelectableModel<any, string> = new SelectableModel(true, 'documentId');\r\n snapshot: DocumentSearchSnapshot = {\r\n searchInfo: null,\r\n searchParams: {\r\n module: ClipperDefinitions.MOD_SEMANTIC_SEARCH,\r\n model: null,\r\n first: 0,\r\n count: 25\r\n },\r\n };\r\n facetsMode: string = 'side';\r\n facetsClosed: boolean = false;\r\n currentModel: string = 'Tutto';\r\n currentSort: string = 'Rilevanza';\r\n contentHeight: number = null;\r\n contextMenuPosition = { x: '0px', y: '0px' };\r\n mq: string = null;\r\n item: any = null;\r\n\r\n constructor(\r\n public $dialog: ApplicationDialogService, \r\n public $clipper: ClipperService,\r\n public $screen: ScreenService,\r\n private $broadcast: BroadcastService,\r\n private dialogRef: MatDialogRef<ClipperBrowserDialogComponent>,\r\n private media: MediaObserver,\r\n @Inject(MAT_DIALOG_DATA) _data: ClipperDialogData\r\n ) {\r\n super($dialog, $clipper);\r\n\r\n // Store dialog data\r\n this.data = _data ?? {};\r\n\r\n // Use service snapshot\r\n this.snapshot = $clipper.snapshot;\r\n if (!this.snapshot)\r\n this.snapshot = {\r\n searchInfo: null,\r\n searchParams: null,\r\n };\r\n if (this.snapshot.searchParams == null) {\r\n this.snapshot.searchParams = {\r\n module: ClipperDefinitions.MOD_SEMANTIC_SEARCH,\r\n model: null,\r\n first: 0,\r\n count: 25,\r\n };\r\n\r\n // Store snapshot\r\n $clipper.snapshot = this.snapshot;\r\n }\r\n\r\n // Set initial model\r\n this.changeModel(_data?.initialModel, false);\r\n\r\n this.$clipper.visible = true;\r\n }\r\n\r\n ngOnInit() {\r\n this.$broadcast.getMessage()\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe((message: any) => {\r\n if (message.id === ClipperMessages.DOCUMENT_SELECTED_INNER) {\r\n this.$broadcast.sendMessage(ClipperMessages.DOCUMENT_SELECTED, message.data);\r\n this.close();\r\n }\r\n });\r\n\r\n // React to media query changes\r\n this.media\r\n .asObservable()\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe((changes: MediaChange[]) => {\r\n this.mq = changes[0].mqAlias;\r\n this.updateFacetsVisibility(this.mq);\r\n });\r\n this.updateFacetsVisibility();\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.__d$))\r\n .subscribe(() => {\r\n // Update view\r\n this.updateView();\r\n });\r\n this.adjustView();\r\n\r\n setTimeout(() => {\r\n // React to sidenav state change\r\n if (this.facetsSidenav)\r\n this.facetsSidenav.openedChange\r\n .subscribe(() => {\r\n this.adjustView();\r\n });\r\n\r\n // Configure facet seach componet\r\n if (this.facetsSearch) {\r\n this.facetsSearch.changed\r\n .subscribe(() => {\r\n if (this.facetsSearch.fromDate) {\r\n this.snapshot.searchParams.fromDate = this.facetsSearch.fromDate;\r\n this.snapshot.searchParams.toDate = this.facetsSearch.toDate;\r\n this.snapshot.searchParams.year = this.facetsSearch.fromDate.getFullYear();\r\n } else if (this.facetsSearch.changedInterval) {\r\n this.snapshot.searchParams.year = null;\r\n this.snapshot.searchParams.fromDate = null;\r\n this.snapshot.searchParams.toDate = null;\r\n }\r\n if (this.facetsSearch.sector || this.facetsSearch.changedSector)\r\n this.snapshot.searchParams.sector = this.facetsSearch.sector;\r\n if (this.facetsSearch.type || this.facetsSearch.changedType)\r\n this.snapshot.searchParams.type = this.facetsSearch.type;\r\n if (this.facetsSearch.author || this.facetsSearch.changedAuthor)\r\n this.snapshot.searchParams.author = this.facetsSearch.author;\r\n this.fetch(true);\r\n });\r\n }\r\n\r\n if (this.snapshot.facets) {\r\n this.facetsSearch.restoreFromSnapshot(this.snapshot.facets);\r\n if (this.snapshot.facets.hasFacets) this.facetsOpen();\r\n }\r\n }, 250);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.__d$.next();\r\n this.__d$.complete();\r\n this.$clipper.visible = false;\r\n }\r\n\r\n onContextMenu(event: MouseEvent, item: any) {\r\n event.preventDefault();\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n this.contextMenu.menuData = { item: item };\r\n this.contextMenu.openMenu();\r\n }\r\n\r\n /**\r\n * Update sidenav visibility\r\n * @param mq : the current media query\r\n */\r\n updateFacetsVisibility(mq: string = null) {\r\n if (!mq) mq = this.$screen.mq;\r\n if (mq === 'xs') {\r\n this.facetsMode = 'over';\r\n if (\r\n this.facetsSearch &&\r\n this.facetsSearch.hasFacets &&\r\n this.facetsSidenav &&\r\n this.facetsSidenav.opened\r\n )\r\n this.facetsSidenav.close();\r\n } else {\r\n this.facetsMode = 'side';\r\n if (\r\n this.facetsSearch &&\r\n this.facetsSearch.hasFacets &&\r\n this.facetsSidenav &&\r\n !this.facetsClosed\r\n )\r\n this.facetsSidenav.toggle(true);\r\n }\r\n }\r\n\r\n /**\r\n * Open facetsSidenav sidebar\r\n */\r\n facetsOpen() {\r\n this.facetsClosed = false;\r\n this.facetsSidenav.open();\r\n }\r\n\r\n /**\r\n * Close facets sidebar\r\n * @param closedManually : ture if facets has been closed manually by clicking the button\r\n */\r\n facetsClose(closedManually: boolean = false) {\r\n if (this.mq !== 'xs') this.facetsClosed = closedManually;\r\n this.facetsSidenav.close();\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param searchParams : the current search params to use to gather facets\r\n */\r\n getFacets(searchParams: any) {\r\n if (!this.$clipper.loggedIn) return;\r\n if (!this.facetsSearch) return;\r\n this.facetsSearch.busy = true;\r\n this.$clipper.queryFacets(searchParams)\r\n .subscribe((r: any) => {\r\n this.facetsSearch.update(r.value.facets, r.value.interval);\r\n if (this.facetsSearch.hasFacets && !this.facetsClosed && this.mq !== 'xs')\r\n this.facetsOpen();\r\n else this.facetsClose();\r\n this.facetsSearch.busy = false;\r\n\r\n this.snapshot.facets = this.facetsSearch.saveSnapshot();\r\n\r\n // Update view\r\n this.adjustView();\r\n });\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n */\r\n getSeletectIds(): string[] {\r\n if (this.selection.current.selected.length > 100) {\r\n this.$dialog.error('La selezione non può contenere più di 100 elementi.');\r\n return null;\r\n }\r\n let ids: string[] = [];\r\n if (this.selection.current.selected.length > 0) {\r\n this.selection.current.selected.forEach((n: any) => {\r\n ids.push(n.documentId);\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Check if every element are selected\r\n */\r\n isAllSelected() {\r\n return (\r\n this.selection.current.selected.length === this.snapshot.items.length\r\n );\r\n }\r\n\r\n /**\r\n * Master selection toggle\r\n * @parma args: event info\r\n */\r\n masterSelectionToggle(args: any) {\r\n if (args.checked)\r\n this.snapshot.items.forEach((row: any) =>\r\n this.selection.select(row, row.documentId)\r\n );\r\n else\r\n this.snapshot.items.forEach((row: any) =>\r\n this.selection.deselect(row, row.documentId)\r\n );\r\n }\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n canSelect(): boolean {\r\n let allow =\r\n this.selection &&\r\n ((this.data.selectionMode === 1 &&\r\n this.selection.current.selected.length === 1) ||\r\n (this.data.selectionMode === 2 &&\r\n this.selection.current.selected.length > 1) ||\r\n (this.data.selectionMode === 3 &&\r\n this.selection.current.selected.length > 0));\r\n if (allow && this.data.selectableModels?.length > 0) {\r\n this.selection.current.selected.forEach(n => {\r\n if (this.data.selectableModels.indexOf(n.model) === -1) {\r\n allow = false;\r\n return;\r\n }\r\n });\r\n }\r\n return allow;\r\n\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n select() {\r\n if (this.selection.current.selected && this.selection.current.selected.length > 0) {\r\n this.$broadcast.sendMessage(\r\n ClipperMessages.DOCUMENT_SELECTED,\r\n this.selection.current.selected\r\n );\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n * @param newRoute: the new route to navigate to\r\n */\r\n close(newRoute: any = null) {\r\n this.dialogRef.close(newRoute);\r\n }\r\n\r\n /**\r\n * Reset scroll position\r\n */\r\n resetScrollPosition() {\r\n document.querySelector('#search_container').scrollTo(0, 0);\r\n }\r\n\r\n /**\r\n * Update menu buttons visibility when the menu is closed\r\n */\r\n updateMenuButtonsVisibility() {\r\n this.snapshot.items.forEach((n: any) => {\r\n n.isMenuOpen = false;\r\n });\r\n }\r\n\r\n /**\r\n * Update sort\r\n */\r\n updateSortOptions() {\r\n switch (this.snapshot.searchParams.sortMode) {\r\n case ClipperDefinitions.SRT_DATE_ASC:\r\n this.currentSort = 'Data cre.';\r\n break;\r\n case ClipperDefinitions.SRT_POPULARITY:\r\n this.currentSort = 'Popolarità';\r\n break;\r\n case ClipperDefinitions.SRT_RELEVANCE:\r\n this.currentSort = 'Rilevanza';\r\n break;\r\n case ClipperDefinitions.SRT_ORIGINAL:\r\n this.currentSort = 'Data ins. decr.';\r\n break;\r\n case ClipperDefinitions.SRT_TAXONOMY:\r\n this.currentSort = 'Argomento';\r\n break;\r\n default:\r\n this.snapshot.searchParams.sortMode = ClipperDefinitions.SRT_DATE_DESC;\r\n this.currentSort = 'Data decr.';\r\n break;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Adjust view\r\n */\r\n adjustView() {\r\n setTimeout(() => {\r\n this.updateView();\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Update view\r\n */\r\n updateView() {\r\n // Update router height\r\n let a = window.innerHeight;\r\n let b = document.getElementById('clipper-browser-fixed');\r\n try {\r\n if (!a || !b || a === 0) this.adjustView();\r\n let hb = b.clientHeight;\r\n if (hb === 0) this.adjustView();\r\n this.contentHeight = a - hb;\r\n } catch { }\r\n }\r\n\r\n /**\r\n * Update current search info\r\n */\r\n private updateSearchInfo() {\r\n let si = [];\r\n if (\r\n this.snapshot.searchParams.sector ||\r\n (this.facetsSearch && this.facetsSearch.sector)\r\n ) {\r\n let s = SystemUtils.arrayFindByKey(\r\n ClipperDefinitions.SECTORS,\r\n 'id',\r\n this.facetsSearch && this.facetsSearch.sector\r\n ? this.facetsSearch.sector\r\n : this.snapshot.searchParams.sector\r\n );\r\n if (s) {\r\n si.push({\r\n field: 'settore',\r\n value: s.name,\r\n sep: si.length > 0,\r\n });\r\n } else {\r\n let s = SystemUtils.arrayFindByKey(\r\n ClipperDefinitions.MODELS,\r\n 'id',\r\n this.facetsSearch && this.facetsSearch.sector\r\n ? this.facetsSearch.sector\r\n : this.snapshot.searchParams.sector\r\n );\r\n if (s) {\r\n si.push({\r\n field: 'sezione',\r\n value: s.name,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n }\r\n if (\r\n this.snapshot.searchParams.author ||\r\n (this.facetsSearch && this.facetsSearch.author)\r\n ) {\r\n let a = SystemUtils.arrayFindByKey(\r\n ClipperDefinitions.SECTOR_AUTHORS,\r\n 'authorId',\r\n this.facetsSearch && this.facetsSearch.author\r\n ? this.facetsSearch.author\r\n : this.snapshot.searchParams.author\r\n );\r\n if (a) {\r\n si.push({\r\n field: 'autore',\r\n value: a.authorDescription,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n if (this.snapshot.searchParams.topic)\r\n si.push({\r\n field: 'argomento',\r\n value: this.snapshot.searchParams.topic,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.taxonomy)\r\n si.push({\r\n field: 'argomento',\r\n value: this.snapshot.searchParams.taxonomyNode,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.number)\r\n si.push({\r\n field: 'numero',\r\n value: this.snapshot.searchParams.number,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n !this.snapshot.interval &&\r\n (this.snapshot.searchParams.fromDate ||\r\n (this.facetsSearch &&\r\n this.facetsSearch.fromDate &&\r\n this.snapshot.searchParams.model !==\r\n ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO))\r\n ) {\r\n let d1 =\r\n this.facetsSearch && this.facetsSearch.fromDate\r\n ? this.facetsSearch.fromDate\r\n : this.snapshot.searchParams.fromDate;\r\n const d2 =\r\n this.facetsSearch && this.facetsSearch.toDate\r\n ? this.facetsSearch.toDate\r\n : this.snapshot.searchParams.toDate;\r\n si.push({\r\n field: !d2 ? 'in data' : 'da data',\r\n value: SystemUtils.formatDate(d1),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (!this.snapshot.interval && \r\n (this.snapshot.searchParams.toDate ||\r\n (this.facetsSearch &&\r\n this.facetsSearch.toDate &&\r\n this.snapshot.searchParams.model !==\r\n ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO))\r\n ) {\r\n let d =\r\n this.facetsSearch && this.facetsSearch.toDate\r\n ? this.facetsSearch.toDate\r\n : this.snapshot.searchParams.toDate;\r\n si.push({\r\n field: 'a data',\r\n value: SystemUtils.formatDate(d),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (this.snapshot.interval)\r\n si.push({\r\n field: 'intervallo',\r\n value: this.snapshot.interval,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.source)\r\n si.push({\r\n field: 'fonte',\r\n value: SystemUtils.arrayGetValue(\r\n ClipperDefinitions.SOURCES,\r\n this.snapshot.searchParams.source\r\n ),\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.sourceNumber)\r\n si.push({\r\n field: 'num. fonte',\r\n value: this.snapshot.searchParams.sourceNumber,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.snapshot.searchParams.sourceFromDate ||\r\n (this.facetsSearch &&\r\n this.facetsSearch.fromDate &&\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO)\r\n ) {\r\n let d1 =\r\n this.facetsSearch && this.facetsSearch.fromDate\r\n ? this.facetsSearch.fromDate\r\n : this.snapshot.searchParams.sourceFromDate;\r\n const d2 =\r\n this.facetsSearch && this.facetsSearch.toDate\r\n ? this.facetsSearch.toDate\r\n : this.snapshot.searchParams.sourceToDate;\r\n si.push({\r\n field: !d2 ? 'in data fonte' : 'da data fonte',\r\n value: SystemUtils.formatDate(d1),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (\r\n this.snapshot.searchParams.sourceToDate ||\r\n (this.facetsSearch &&\r\n this.facetsSearch.toDate &&\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO)\r\n ) {\r\n let d =\r\n this.facetsSearch && this.facetsSearch.toDate\r\n ? this.facetsSearch.toDate\r\n : this.snapshot.searchParams.sourceToDate;\r\n si.push({\r\n field: 'a data fonte',\r\n value: SystemUtils.formatDate(d),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (this.snapshot.searchParams.text)\r\n si.push({\r\n field: 'testo',\r\n value: this.snapshot.searchParams.text,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.snapshot.searchParams.type ||\r\n (this.facetsSearch && this.facetsSearch.type)\r\n ) {\r\n let t = SystemUtils.arrayFindByKey(\r\n ClipperDefinitions.SECTOR_TYPES,\r\n 'documentTypeId',\r\n this.facetsSearch && this.facetsSearch.type\r\n ? this.facetsSearch.type\r\n : this.snapshot.searchParams.type\r\n );\r\n if (t) {\r\n si.push({\r\n field: 'tipo',\r\n value: t.documentTypeDescription,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n if (this.snapshot.searchParams.showUnreadDocumentsOnly)\r\n si.push({\r\n field: 'stato',\r\n value: 'non letti',\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.snapshot.searchParams.reason ||\r\n (this.facetsSearch && this.facetsSearch.reason)\r\n )\r\n si.push({\r\n field: 'tipo mod.',\r\n value: SystemUtils.arrayGetValue(\r\n ClipperDefinitions.CHANGE_REASONS,\r\n this.facetsSearch && this.facetsSearch.reason\r\n ? this.facetsSearch.reason\r\n : this.snapshot.searchParams.reason\r\n ),\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.changedNumber)\r\n si.push({\r\n field: 'num. modificato',\r\n value: this.snapshot.searchParams.changedNumber,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.changedYear)\r\n si.push({\r\n field: 'anno modificato',\r\n value: this.snapshot.searchParams.changedYear,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.changedTitle)\r\n si.push({\r\n field: 'titolo modificato',\r\n value: this.snapshot.searchParams.changedTitle,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.modifierNumber)\r\n si.push({\r\n field: 'num. modificante',\r\n value: this.snapshot.searchParams.modifierNumber,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.modifierYear)\r\n si.push({\r\n field: 'anno modificante',\r\n value: this.snapshot.searchParams.modifierYear,\r\n sep: si.length > 0,\r\n });\r\n if (this.snapshot.searchParams.modifierTitle)\r\n si.push({\r\n field: 'titolo modificante',\r\n value: this.snapshot.searchParams.modifierTitle,\r\n sep: si.length > 0,\r\n });\r\n\r\n this.snapshot.searchInfo = si;\r\n }\r\n\r\n /**\r\n * Change search model\r\n * @param model : the new document model \r\n * @param fetch : true if data must be fetched. Default is true\r\n */\r\n changeModel(model: number = null, fetch: boolean = true) {\r\n this.snapshot.searchParams.model = model;\r\n switch (model) {\r\n case ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO: this.currentModel = \"Gazzette e bollettini\"; break;\r\n case ClipperDefinitions.DM_NORMATIVA_VIGENTE: this.currentModel = \"Normativa vigente\"; break;\r\n default:\r\n this.currentModel = \"Tutto\";\r\n break;\r\n }\r\n if (fetch)\r\n this.fetch(true);\r\n }\r\n\r\n /**\r\n * Apply a sort\r\n * @param mode : the sort mode\r\n */\r\n sortBy(mode: number) {\r\n this.snapshot.searchParams.sortMode = mode;\r\n this.updateSortOptions();\r\n this.fetch(false);\r\n }\r\n\r\n /**\r\n * Perform a search using current params\r\n */\r\n fetch(newSearch: boolean = false) {\r\n this.$dialog.busy('Ricerca in corso...');\r\n this.snapshot.searchParams.count = 25;\r\n if (newSearch) {\r\n this.snapshot.searchParams.first = 0;\r\n if (this.snapshot.searchParams.text)\r\n this.snapshot.searchParams.sortMode = ClipperDefinitions.SRT_RELEVANCE;\r\n else if (!this.snapshot.searchParams.sortMode)\r\n this.snapshot.searchParams.sortMode = ClipperDefinitions.SRT_DATE_DESC;\r\n this.updateSortOptions();\r\n }\r\n if (this.snapshot.searchParams.year > 0) {\r\n const year = this.snapshot.searchParams.year;\r\n this.snapshot.searchParams.fromDate = new Date(year, 0, 1, 2);\r\n this.snapshot.searchParams.toDate = new Date(year, 11, 31, 2);\r\n } else {\r\n this.snapshot.searchParams.year = null;\r\n }\r\n if (this.snapshot.searchParams.text) {\r\n this.snapshot.searchParams.text = SearchUtils.normalizeTextQuery(this.snapshot.searchParams.text);\r\n }\r\n this.$clipper.query(this.snapshot.searchParams)\r\n .subscribe({\r\n next: (r: any) => {\r\n if (!r.success) this.$dialog.error(r.message);\r\n else {\r\n this.snapshot.total = r.value?.total ?? 0;\r\n this.snapshot.items = r.value?.items ?? [];\r\n this.snapshot.interval = r.value?.interval;\r\n const today = startOfToday();\r\n const groupByYear =\r\n this.snapshot.searchParams.sortMode ===\r\n ClipperDefinitions.SRT_DATE_ASC ||\r\n this.snapshot.searchParams.sortMode ===\r\n ClipperDefinitions.SRT_DATE_DESC;\r\n const groupByRelevance =\r\n this.snapshot.searchParams.sortMode ===\r\n ClipperDefinitions.SRT_RELEVANCE;\r\n const groupByPopularity =\r\n this.snapshot.searchParams.sortMode ===\r\n ClipperDefinitions.SRT_POPULARITY;\r\n let group = '';\r\n this.snapshot.items.forEach((n: any) => {\r\n if (\r\n n.model === ClipperDefinitions.DM_SCADENZA ||\r\n n.model === ClipperDefinitions.DM_SEGNALAZIONE\r\n ) {\r\n switch (n.model) {\r\n case ClipperDefinitions.DM_SCADENZA:\r\n n.originDescription = 'Scadenza';\r\n break;\r\n case ClipperDefinitions.DM_SEGNALAZIONE:\r\n n.originDescription = 'Segnalazione';\r\n break;\r\n }\r\n if (n.expiringInfo) {\r\n let parts = n.expiringInfo.split('|');\r\n if (parts.length === 3) n.description = parts[2];\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = subDays(n.date, 15);\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n }\r\n } else {\r\n if (n.date) {\r\n n.date = startOfDay(new Date(n.date));\r\n const d = startOfDay(subDays(startOfToday(), 7))\r\n n.isNew = n.date > d;\r\n }\r\n if (n.anchors) {\r\n let anchorType: number;\r\n let anchors: any = [];\r\n n.anchors.forEach((a: any) => {\r\n if (a.type === 20) return;\r\n if (a.type !== anchorType) {\r\n if (a.type >= 3)\r\n anchors.push({ text: a.typeDescription });\r\n anchorType = a.type;\r\n }\r\n let score = a.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n anchors.push({\r\n text: a.text,\r\n title: a.title,\r\n documentId: a.documentId,\r\n uri: a.uri,\r\n veryRelevant: score > 0.6,\r\n });\r\n });\r\n n.anchors = anchors;\r\n }\r\n if (n.validityState > 0) {\r\n n.validityDescription = 'Il documento non è più vigente';\r\n n.isExpired = true;\r\n if (n.validUntilDate) {\r\n const expiringDate = startOfDay(new Date(n.validUntilDate));\r\n if (expiringDate < today) {\r\n n.validityDescription =\r\n 'Il documento non è più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n } else {\r\n n.validityDescription =\r\n 'Il documento non sarà più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n n.isExpired = false;\r\n }\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n n.isExpired = n.date < today;\r\n }\r\n }\r\n if (groupByYear) {\r\n let year = SystemUtils.formatDate(n.date, DateFormat.LongMonthAndYear).toLowerCase();\r\n if (group !== year) {\r\n n.group = year;\r\n group = year;\r\n }\r\n } else if (groupByRelevance) {\r\n if (group !== 'none') {\r\n n.group =\r\n 'Elenco per rilevanza: gli elementi più importanti sono in testa';\r\n group = 'none';\r\n }\r\n } else if (groupByPopularity) {\r\n if (group !== 'none') {\r\n n.group =\r\n 'Elenco per popolarità: gli elementi più importanti sono in testa';\r\n group = 'none';\r\n }\r\n }\r\n if (n.taxonomy) {\r\n n.taxonomyNodes = n.taxonomy.split('\\r\\n');\r\n if (\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_GUIDA ||\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_GUIDA_NORMATIVA ||\r\n this.snapshot.searchParams.model ===\r\n ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI\r\n ) {\r\n for (let i = 0; i < n.taxonomyNodes.length; i++) {\r\n let node = n.taxonomyNodes[i];\r\n let p = node.indexOf('>');\r\n if (p !== -1)\r\n n.taxonomyNodes[i] = node\r\n .substring(p + 1)\r\n .replace(/\\>/gi, ' > ');\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Show toast if new search\r\n if (this.snapshot.total > 0) {\r\n if (this.facetsSearch)\r\n this.facetsSearch.hasTooManyResults = this.snapshot.total >= 1000;\r\n if (newSearch && this.snapshot.searchParams.first === 0) {\r\n if (this.snapshot.total >= 1000) {\r\n let t = this.$dialog.toast(\r\n 'Ho trovato più di 1000 elementi',\r\n 3000,\r\n 'warning',\r\n 'Rifinisci'\r\n );\r\n t.instance.action.subscribe(() => {\r\n this.advancedSearch();\r\n });\r\n } else {\r\n this.$dialog.toast(\r\n 'Ho trovato ' +\r\n this.snapshot.total +\r\n (this.snapshot.total === 1 ? ' elemento' : ' elementi')\r\n );\r\n }\r\n }\r\n\r\n if (newSearch && !this.snapshot.searchParams.first) {\r\n // Update facets\r\n this.getFacets(this.snapshot.searchParams);\r\n }\r\n } else {\r\n this.facetsSearch.reset();\r\n this.facetsSidenav.close();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n }\r\n this.resetScrollPosition();\r\n\r\n // Update snapshot\r\n this.$clipper.snapshot = this.snapshot;\r\n\r\n // Update view\r\n this.updateSearchInfo();\r\n this.updateFacetsVisibility();\r\n this.adjustView();\r\n }\r\n },\r\n complete: () => {\r\n this.$dialog.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: any) {\r\n let first = e.pageIndex * this.snapshot.searchParams.count;\r\n this.snapshot.searchParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Clear search\r\n */\r\n clearSearch() {\r\n this.snapshot.searchParams = {\r\n module: ClipperDefinitions.MOD_SEMANTIC_SEARCH,\r\n model: ClipperDefinitions.DM_NORMATIVA_VIGENTE,\r\n first: 0,\r\n count: 25,\r\n };\r\n this.currentModel = 'Normativa vigente';\r\n this.snapshot.items = null;\r\n this.snapshot.total = 0;\r\n this.snapshot.facets = null;\r\n this.facetsSearch.reset();\r\n this.facetsSidenav.close();\r\n this.updateSearchInfo();\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n open(documentId: string, newWindow: boolean = false) {\r\n if (!newWindow) this.openDocument(documentId);\r\n else window.open('/documento/' + documentId, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n */\r\n private openDocument(documentId: string) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.$dialog,\r\n this.$clipper,\r\n documentId,\r\n this.snapshot.searchParams.text,\r\n this.data.selectionMode\r\n );\r\n }\r\n\r\n /**\r\n * Compose a free text search query\r\n */\r\n composeSearch() {\r\n let d = this.$dialog.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n this.snapshot.searchParams.text = r.query;\r\n\r\n // Finished\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Return item state css class\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateCssClass(item: any) {\r\n if (item.isExpired) return 'item-expired-ind';\r\n if (item.popularity === 3) return 'item-popular-ind';\r\n else if (item.popularity > 3) return 'item-very-popular-ind';\r\n return null;\r\n }\r\n\r\n /**\r\n * Return the item state tooltip text\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateTooltip(item: any) {\r\n if (item.isExpired) return 'Non più vigente';\r\n if (item.popularity === 3) return 'Documento con numero di citazioni alto';\r\n else if (item.popularity > 3)\r\n return 'Documento con numero di citazioni molto alto';\r\n return null;\r\n }\r\n\r\n /**\r\n * Send item link or all selected ones by email\r\n * @param item : the optional item\r\n */\r\n sendTo(item: any = null) {\r\n this.sendItemsTo(item ? [item] : this.selection.current.selected);\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param item : the document item\r\n * @param mode : the mode\r\n */\r\n references(item: any, mode: number = ClipperDefinitions.SM_REFERENCES_IN) {\r\n if (!item) return;\r\n let d = this.$dialog.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: { id: item.documentId, mode: mode },\r\n panelClass: 'references-container',\r\n minWidth: '375px',\r\n maxWidth: '1000px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: any) => {\r\n if (r && r.id) this.open(r.id);\r\n });\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param item : the document\r\n */\r\n report(item: any) {\r\n if (!item) return; if (!item) return;\r\n if (item.model != ClipperDefinitions.DM_NORMATIVA_VIGENTE && item.model != ClipperDefinitions.DM_SCADENZA) {\r\n this.$dialog.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n } this.openReport(item.documentId, item.title1);\r\n }\r\n\r\n /**\r\n * Perform search\r\n */\r\n search() {\r\n if (this.snapshot.searchParams.sector === this.facetsSearch.sector)\r\n this.snapshot.searchParams.sector = null;\r\n\r\n // Reset paginator\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n\r\n // Reset facets search\r\n this.facetsSearch.reset();\r\n\r\n // Do search\r\n this.fetch(true);\r\n }\r\n\r\n /**\r\n * Show advanced search\r\n */\r\n advancedSearch() {\r\n let d = this.$dialog.open(ClipperSearchDialogComponent, {\r\n ariaLabel: 'ricerca avanzata',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n params: this.snapshot.searchParams,\r\n enableRead: false,\r\n enableSector: true,\r\n enableType: true,\r\n enableAuthor: true,\r\n enableTopic: true,\r\n enableText: true,\r\n enableDocument: true,\r\n enableSource: true,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '700px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: any) => {\r\n // Update search params\r\n r.model = this.snapshot.searchParams.model;\r\n this.snapshot.searchParams = r;\r\n this.snapshot.searchParams.first = 0;\r\n this.snapshot.searchParams.count = 25;\r\n if (this.snapshot.searchParams.sector === this.facetsSearch.sector)\r\n this.snapshot.searchParams.sector = null;\r\n\r\n // Reset paginator\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n\r\n // Reset facets search\r\n this.facetsSearch.reset();\r\n\r\n // Do search\r\n this.fetch(true);\r\n\r\n // Finished\r\n d.close();\r\n\r\n });\r\n }\r\n\r\n /**\r\n * Show free text help\r\n */\r\n helpSearch() {\r\n this.$dialog.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Manage clipper bag\r\n */\r\n manageBag() {\r\n let items: any = [];\r\n this.$clipper.bag.forEach((n: any) => {\r\n let title = n.Title1 ? n.Title1 : n.Title2;\r\n items.push({\r\n template: title,\r\n bag: n,\r\n searchBag: { name: title },\r\n });\r\n });\r\n let d = this.$dialog.select({\r\n title: 'Gestisci documenti di lavoro',\r\n multi: false,\r\n mustSelect: false,\r\n okCaption: 'SELEZIONA',\r\n items: items,\r\n canDelete: true,\r\n canView: true,\r\n });\r\n d.componentInstance.view\r\n .subscribe((r: any) => {\r\n let item = r.bag;\r\n this.open(item.DocumentId);\r\n });\r\n d.componentInstance.delete\r\n .subscribe((r: any) => {\r\n var item = r.selectedItems[0].bag;\r\n this.$clipper.removeFromBag(item.DocumentId).subscribe(() => {\r\n this.$dialog.toast('Operazione completata con successo.');\r\n for (let p = 0; p < r.items.length; p++) {\r\n if (r.items[p].bag.DocumentId === item.DocumentId) {\r\n r.items.splice(p, 1);\r\n if (r.items.length === 0) d.close();\r\n return;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Show home tab\r\n */\r\n showHome() {\r\n this.dialogTab = 2;\r\n if (this.$clipper.loggedIn && !this.last15Days.daysLoaded) this.last15Days.fetch();\r\n }\r\n\r\n /**\r\n * Expand or collapse home days view\r\n * @param collapse\r\n */\r\n expandHome(collapse: boolean = false) {\r\n this.last15Days.expand(collapse)\r\n }\r\n \r\n //\r\n // Registro e scadenzario\r\n //\r\n\r\n /**\r\n * Checks if all documents are supported by RS\r\n * @param documents : the list of documens\r\n * @returns: true if all documents supports RS\r\n */\r\n RS_enabled(documents: any): boolean {\r\n if (!documents) return false;\r\n if (this.data.selectionMode > 0) return false;\r\n let allow = false;\r\n documents.forEach((n: any) => {\r\n allow = n.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||\r\n n.model === ClipperDefinitions.DM_AGGIORNAMENTO_NORMATIVO ||\r\n n.model === ClipperDefinitions.DM_SCADENZA;\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * New law\r\n * @param document: the law\r\n */\r\n RS_newLaw(document: any) {\r\n if (this.data.selectionMode > 0 || !this.$clipper.supportsRS) return;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_NEW_LAW, document ? [document] : this.selection.current.selected);\r\n }\r\n\r\n /**\r\n * New activity\r\n * @param document: the law\r\n */\r\n RS_newActivity(document: any) {\r\n if (!document) return;\r\n if (this.data.selectionMode > 0 || !this.$clipper.supportsRS) return;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_NEW_ACTIVITY, document);\r\n }\r\n\r\n /**\r\n * Document usage report\r\n * @param document: the law\r\n */\r\n RS_usageReport(document: any) {\r\n if (!document) return;\r\n if (this.data.selectionMode > 0 || !this.$clipper.supportsRS) return;\r\n this.$broadcast.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n }\r\n\r\n}\r\n","<div id=\"clipper-browser-fixed\">\r\n <div class=\"clipper-browser-header\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <img src=\"./../../../assets/images/clipper_logo.png\" alt=\"Clipper\" style=\"max-height: 50px; padding: 5px\" />\r\n </a>\r\n </div>\r\n @if (data.selectionMode > 0) {\r\n <div fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (canSelect()) {\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"select()\">\r\n Usa selezione\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div fxFlex=\"150px\" fxLayoutAlign=\"end\">\r\n @if ($clipper.bag.length > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Documenti di lavoro\"\r\n aria-label=\"'Documenti di lavoro'\" (click)=\"manageBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"$clipper.bag.length\" matBadgeColor=\"accent\">work_outline</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <nav mat-tab-nav-bar mat-stretch-tabs [tabPanel]=\"tabPanel1\">\r\n <a mat-tab-link (click)=\"dialogTab = 1\" [active]=\"dialogTab === 1\" [disabled]=\"!$clipper.loggedIn\">Ricerca</a>\r\n <a mat-tab-link (click)=\"showHome()\" [active]=\"dialogTab === 2\" [disabled]=\"!$clipper.loggedIn\">\r\n <mat-icon>update</mat-icon>\r\n <span fxHide.xs style=\"margin-left: 8px\"> Ultimi 15 giorni</span>\r\n </a>\r\n </nav>\r\n <mat-tab-nav-panel #tabPanel1></mat-tab-nav-panel>\r\n <div [hidden]=\"dialogTab !== 1\">\r\n <div style=\"padding: 15px 0 10px 15px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex=\"100\" fxFlex.xs=\"62\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Numero</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"snapshot.searchParams.number\" #number=\"ngModel\" name=\"number\"\r\n maxlength=\"10\" (keyup.Enter)=\"fetch(true)\">\r\n @if (snapshot.searchParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"snapshot.searchParams.number = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"snapshot.searchParams.year\" #year=\"ngModel\" name=\"year\" min=\"0\"\r\n maxlength=\"4\" (keyup.Enter)=\"fetch(true)\" />\r\n @if (snapshot.searchParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"snapshot.searchParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (year.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"100\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Parole, frasi o concetti...</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" #text [(ngModel)]=\"snapshot.searchParams.text\"\r\n maxlength=\"200\" (keyup.Enter)=\"search()\" autofocus />\r\n @if (snapshot.searchParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"snapshot.searchParams.text = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); composeSearch()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); helpSearch()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxFlex.xs=\"36\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end\" fxFill>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"search()\" color=\"primary\"\r\n [attr.aria-label]=\"'Avvia la ricerca'\" matTooltip=\"Avvia ricerca\" [disabled]=\"!$clipper.loggedIn\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"advancedSearch()\" color=\"primary\"\r\n [attr.aria-label]=\"'Ricerca avanzata'\" matTooltip=\"Ricerca avanzata\" [disabled]=\"!$clipper.loggedIn\">\r\n <mat-icon>settings</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n @if (snapshot.searchInfo && snapshot.searchInfo.length > 0) {\r\n <div fxHide.xs class=\"search-info small\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <b>RICERCA ATTIVA</b>&nbsp;&nbsp;&nbsp;\r\n @for (si of snapshot.searchInfo; track si) {\r\n <span>\r\n {{si.sep ? '&nbsp;&nbsp;' : ''}} {{si.field}}: <span\r\n class=\"item-primary lowercase\"><i>{{si.value}}</i></span>\r\n </span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"start\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Azzera ricerca\" (click)=\"clearSearch()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div style=\"padding:0 0 6px 20px;\" fxLayout=\"row wrap-reverse\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlexAlign=\"center\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n @if (snapshot.total > 0) {\r\n <div fxFlexAlign=\"center\">\r\n <mat-checkbox color=\"primary\" (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\"\r\n [disabled]=\"!snapshot.items || snapshot.items.length == 0\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"*\">\r\n @if (snapshot.total > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Ordina\" [attr.aria-label]=\"'Menu ordina'\"\r\n [matMenuTriggerFor]=\"menuSort\" color=\"primary\" [disabled]=\"!snapshot.total\">\r\n <span fxHide.lt-lg>Ordina per:</span>\r\n <mat-icon fxHide.gt-md>sort</mat-icon> {{currentSort}}\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSort=\"matMenu\">\r\n <button mat-menu-item (click)=\"sortBy(3)\" [attr.aria-label]=\"'Ordina per data decrescente'\">\r\n Data decrescente\r\n </button>\r\n <button mat-menu-item (click)=\"sortBy(2)\" [attr.aria-label]=\"'Ordina per data crescente'\">\r\n Data crescente\r\n </button>\r\n @if (snapshot.searchParams.text) {\r\n <button mat-menu-item (click)=\"sortBy(1)\" [attr.aria-label]=\"'Ordina per rilevanza'\">\r\n Rilevanza\r\n </button>\r\n }\r\n <button mat-menu-item (click)=\"sortBy(5)\" [attr.aria-label]=\"'Ordina per popolarità'\">\r\n Popolarità\r\n </button>\r\n <!-- <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"sortBy(4)\"\r\n [attr.aria-label]=\"'Ordina per data di inserimento descrescente'\">\r\n Data di inserimento decrescente\r\n </button>-->\r\n </mat-menu>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Menu modello'\"\r\n [matMenuTriggerFor]=\"menuModels\" color=\"primary\">\r\n <span fxHide.lt-lg>Mostra:</span>\r\n <mat-icon fxHide.gt-md>filter_list</mat-icon> {{currentModel}}\r\n <mat-icon class=\" icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n <mat-menu #menuModels=\"matMenu\">\r\n <button mat-menu-item (click)=\"changeModel(2)\" [attr.aria-label]=\"'Mostra aggiornamento normativo'\">\r\n Gazzette e bollettini\r\n </button>\r\n <button mat-menu-item (click)=\"changeModel(9)\" [attr.aria-label]=\"'Normativa vigente'\">\r\n Normativa vigente\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"changeModel()\" [attr.aria-label]=\"'Mostra tutti i documenti'\">\r\n Tutto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n color=\"primary\" [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [isSelectable]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (facetsSearch && facetsSearch.hasFacets && facetsSidenav && (!facetsSidenav.opened || facetsClosed)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Affina ricerca\"\r\n aria-label=\"'Affina ricerca'\" (click)=\"facetsOpen()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"dialogTab !== 2\">\r\n <div class=\"dialog-title form-column\">\r\n <p>Ecco cosa è successo negli ultimi 15 giorni in base alla tua configurazione.</p>\r\n <p>Per modificare la tua\r\n configurazione devi accedere a <a class=\"link\" href=\"https://clipper.arsedizioni.it\"\r\n matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">Clipper</a>.</p>\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlexAlign=\"center\">\r\n <button mat-button matTooltip=\"Espandi tutto\" [attr.aria-label]=\"'Espandi tutto \\ comprimi tutto'\"\r\n color=\"primary\" (click)=\"expandHome()\">\r\n Espandi tutto\r\n </button>\r\n <button mat-button matTooltip=\"Comprimi tutto\" [attr.aria-label]=\"'Comprimi tutto'\" color=\"primary\"\r\n (click)=\"expandHome(true)\">\r\n Comprimi tutto\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content style=\"padding:0 0 0 15px\" [ngStyle]=\"{'min-height.px': contentHeight}\">\r\n <div [hidden]=\"dialogTab !== 1\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': contentHeight}\">\r\n <mat-sidenav #facetsSidenav position=\"end\" autoFocus=\"false\" opened=\"false\" mode=\"{{facetsMode}}\"\r\n class=\"sidenav sidenav-facets\">\r\n @if (facetsSearch.busy) {\r\n <div class=\"sidenav-overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"height:5px\">\r\n @if (facetsSearch.busy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"64px\">\r\n <div fxLayout=\"row\" fxFill class=\"sidenav-title-container\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" fxLayoutAlign=\"start\">\r\n <span class=\"sidenav-title\">Affina ricerca</span>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Nascondi\" (click)=\"facetsClose(true)\"\r\n color=\"primary\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow: hidden;\">\r\n <clipper-search-facets #facetsSearch></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <div [ngStyle]=\"{'height.px': contentHeight }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"100\" id=\"search_container\" style=\"overflow: auto\">\r\n <div style=\"overflow:hidden\">\r\n @if (!snapshot.total) {\r\n <div style=\"padding:32px; text-align: center;\" class=\"item-greyed-1\">\r\n <p>\r\n Non hai ancora effettuato\r\n la tua prima ricerca oppure la ricerca effettuata non ha prodotto alcun risultato.</p>\r\n <p>Inserisci nell'apposito campo ciò che intendi cercare e fai click su <b>Trova</b> oppure utilizza\r\n la\r\n <b>Ricerca avanzata</b>\r\n </p>.\r\n </div>\r\n }\r\n @if (snapshot.total > 0) {\r\n <div>\r\n @for (item of snapshot.items; track trackableId($index, item)) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div class=\"items-group-title item-accent\">{{item.group}}</div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection.isSelected(item) }\">\r\n <div fxFlex=\"48px\" fxFlexAlign=\"center\">\r\n @if ($screen.isTouchable || item.isOver || selection.isSelected(item.documentId)) {\r\n <mat-checkbox fxLayoutAlign=\"center\" color=\"primary\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\" style=\"padding:6px 0\">\r\n <clipper-search-result-item [parent]=\"this\" [item]=\"item\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection.isSelected(item)) {\r\n <button fxFlexAlign=\"center\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isSelectable]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (snapshot.total > 0) {\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [pageIndex]=\"snapshot.searchParams.first / snapshot.searchParams.count\" [length]=\"snapshot.total\"\r\n [pageSize]=\"snapshot.searchParams.count\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n </div>\r\n <div [hidden]=\"dialogTab !== 2\">\r\n <clipper-last-15-days #last15Days [showHeader]=\"false\"></clipper-last-15-days>\r\n </div>\r\n</div>","/*\r\n * Public API Surface of ars-utils\r\n */\r\n\r\nexport * from './ui/browser-dialog/browser-dialog.component';\r\nexport * from './ui/search-dialog/search-dialog.component';\r\nexport * from './ui/search-facets/search-facets.component';\r\nexport * from './ui/search-free-text-help/search-free-text-help.component';\r\nexport * from './ui/search-free-text-query-builder/search-free-text-query-builder.component';\r\nexport * from './ui/search-result-item/search-result-item.component';\r\nexport * from './ui/last-15-days/last-15-days.component';\r\nexport * from './ui/references/references.component';\r\nexport * from './ui/document/base/document-base.component';\r\nexport * from './ui/document/document.component';\r\nexport * from './ui/document/document-index/document-index.component';\r\nexport * from './ui/document/document-menu/document-menu.component';\r\nexport * from './ui/document/documents';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i4","i6","i5","saveAs","i10","i11","i8","i7","i12","i15","i9","i13","i14","i17","i18","i20","i21"],"mappings":"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"}