Revize 69da7086
Přidáno uživatelem castic96 před téměř 5 roky(ů)
fe/fulltextsearch/package-lock.json | ||
---|---|---|
1770 | 1770 |
"webpack-sources": "1.4.3" |
1771 | 1771 |
} |
1772 | 1772 |
}, |
1773 |
"@ngx-translate/core": { |
|
1774 |
"version": "12.1.2", |
|
1775 |
"resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-12.1.2.tgz", |
|
1776 |
"integrity": "sha512-ZudJsqIxTKlLmPoqK8gJY3UpMGujR0Xm7HfXL6AR79yGRS23QqpjAhMfx4v5qUCcHMmQ9/78bW8QJLfp31c7vQ==" |
|
1777 |
}, |
|
1778 |
"@ngx-translate/http-loader": { |
|
1779 |
"version": "4.0.0", |
|
1780 |
"resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-4.0.0.tgz", |
|
1781 |
"integrity": "sha512-x8LumqydWD7eX9yQTAVeoCM9gFUIGVTUjZqbxdAUavAA3qVnk9wCQux7iHLPXpydl8vyQmLoPQR+fFU+DUDOMA==", |
|
1782 |
"requires": { |
|
1783 |
"tslib": "^1.9.0" |
|
1784 |
} |
|
1785 |
}, |
|
1773 | 1786 |
"@npmcli/ci-detect": { |
1774 | 1787 |
"version": "1.2.0", |
1775 | 1788 |
"resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.2.0.tgz", |
... | ... | |
2239 | 2252 |
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", |
2240 | 2253 |
"dev": true |
2241 | 2254 |
}, |
2242 |
"angular-x-image-viewer": { |
|
2243 |
"version": "2.0.1", |
|
2244 |
"resolved": "https://registry.npmjs.org/angular-x-image-viewer/-/angular-x-image-viewer-2.0.1.tgz", |
|
2245 |
"integrity": "sha512-wt+wVwBOYqDlsJb8yqVKf5RyuZZmG0oZCG4w98ChQqBkZ3IyuuyrwP9lcsf1vOKs/0nfWrTob3YqfEppVlOLAA==" |
|
2246 |
}, |
|
2247 | 2255 |
"ansi-colors": { |
2248 | 2256 |
"version": "3.2.4", |
2249 | 2257 |
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", |
fe/fulltextsearch/package.json | ||
---|---|---|
24 | 24 |
"@fortawesome/angular-fontawesome": "^0.6.1", |
25 | 25 |
"@fortawesome/fontawesome-svg-core": "^1.2.28", |
26 | 26 |
"@fortawesome/free-solid-svg-icons": "^5.13.0", |
27 |
"@ngx-translate/core": "^12.1.2", |
|
28 |
"@ngx-translate/http-loader": "^4.0.0", |
|
27 | 29 |
"bootstrap": "^4.4.1", |
28 | 30 |
"jquery": "^3.4.1", |
29 | 31 |
"ngx-image-viewer": "^1.0.13", |
fe/fulltextsearch/src/app/app.component.ts | ||
---|---|---|
1 | 1 |
import { Component } from '@angular/core'; |
2 |
import { TranslateService } from '@ngx-translate/core'; |
|
2 | 3 |
|
3 | 4 |
@Component({ |
4 | 5 |
selector: 'app-root', |
... | ... | |
6 | 7 |
styleUrls: ['./app.component.css'] |
7 | 8 |
}) |
8 | 9 |
export class AppComponent { |
10 |
constructor(translate: TranslateService) { |
|
11 |
translate.addLangs(['en', 'de', 'cz']); |
|
12 |
translate.setDefaultLang('en'); |
|
13 |
|
|
14 |
const browserLang = translate.getBrowserLang(); |
|
15 |
translate.use(browserLang.match(/en|de|cz/) ? browserLang : 'en'); |
|
16 |
} |
|
9 | 17 |
} |
fe/fulltextsearch/src/app/app.module.ts | ||
---|---|---|
1 | 1 |
import { BrowserModule } from '@angular/platform-browser'; |
2 | 2 |
import { NgModule } from '@angular/core'; |
3 |
import { HttpClientModule } from '@angular/common/http'; |
|
3 |
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
|
4 | 4 |
|
5 | 5 |
import { AppRoutingModule } from './app-routing.module'; |
6 | 6 |
import { AppComponent } from './app.component'; |
... | ... | |
33 | 33 |
import { BrowseDetailsComponent } from './components/pages/browse/browse-details/browse-details.component'; |
34 | 34 |
import { ImageViewerModule } from 'ngx-image-viewer'; |
35 | 35 |
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; |
36 |
import { TranslateHttpLoader } from '@ngx-translate/http-loader'; |
|
37 |
import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; |
|
38 |
|
|
39 |
export function HttpLoaderFactory(httpClient: HttpClient) { |
|
40 |
return new TranslateHttpLoader(httpClient, '../assets/i18n/', '-lang.json'); |
|
41 |
} |
|
36 | 42 |
|
37 | 43 |
@NgModule({ |
38 | 44 |
declarations: [ |
... | ... | |
68 | 74 |
MatSidenavModule, |
69 | 75 |
MatListModule, |
70 | 76 |
ImageViewerModule.forRoot(), |
71 |
FontAwesomeModule |
|
77 |
FontAwesomeModule, |
|
78 |
TranslateModule.forRoot({ |
|
79 |
loader: { |
|
80 |
provide: TranslateLoader, |
|
81 |
useFactory: HttpLoaderFactory, |
|
82 |
deps: [HttpClient] |
|
83 |
} |
|
84 |
}) |
|
72 | 85 |
], |
73 | 86 |
providers: [DataHolderService, DatePipe], |
74 | 87 |
bootstrap: [AppComponent] |
fe/fulltextsearch/src/app/components/layout/main-nav/main-nav.component.html | ||
---|---|---|
8 | 8 |
<mat-nav-list (click)="drawer.close()"> |
9 | 9 |
<a mat-list-item routerLink=""> |
10 | 10 |
<mat-icon>home</mat-icon> |
11 |
Home</a>
|
|
11 |
{{'app-main-nav.home' | translate}}</a>
|
|
12 | 12 |
<a mat-list-item routerLink="search"> |
13 | 13 |
<mat-icon>search</mat-icon> |
14 |
Search</a>
|
|
14 |
{{'app-main-nav.search' | translate}}</a>
|
|
15 | 15 |
<a mat-list-item routerLink="browse"> |
16 | 16 |
<mat-icon>list</mat-icon> |
17 |
Browse</a>
|
|
17 |
{{'app-main-nav.browse' | translate}}</a>
|
|
18 | 18 |
<a mat-list-item routerLink="upload"> |
19 | 19 |
<mat-icon>backup</mat-icon> |
20 |
Upload</a>
|
|
20 |
{{'app-main-nav.upload' | translate}}</a>
|
|
21 | 21 |
<a mat-list-item (click)="openAboutDialog()"> |
22 | 22 |
<mat-icon>info</mat-icon> |
23 |
About</a>
|
|
23 |
{{'app-main-nav.about' | translate}}</a>
|
|
24 | 24 |
<a mat-list-item routerLink="help"> |
25 | 25 |
<mat-icon>help</mat-icon> |
26 |
Help</a>
|
|
26 |
{{'app-main-nav.help' | translate}}</a>
|
|
27 | 27 |
</mat-nav-list> |
28 | 28 |
</mat-sidenav> |
29 | 29 |
<mat-sidenav-content> |
... | ... | |
40 | 40 |
<div class="app-logo" routerLink="" style="outline: none"> |
41 | 41 |
<span style="display: flex;"> |
42 | 42 |
<mat-icon>search</mat-icon> |
43 |
<div>FULL TEXT SEARCH<br> APPLICATION</div>
|
|
43 |
<div>{{'app-main-nav.title1' | translate}}<br> {{'app-main-nav.title2' | translate}}</div>
|
|
44 | 44 |
</span> |
45 | 45 |
</div> |
46 | 46 |
<!-- left navigation items --> |
47 |
<a mat-button class="noHover active" routerLink="search" *ngIf="!(isHandset$ | async)">Search</a>
|
|
48 |
<a mat-button routerLink="browse" *ngIf="!(isHandset$ | async)">Browse</a>
|
|
49 |
<a mat-button routerLink="upload" *ngIf="!(isHandset$ | async)">Upload</a>
|
|
47 |
<a mat-button class="noHover active" routerLink="search" *ngIf="!(isHandset$ | async)">{{'app-main-nav.search' | translate}}</a>
|
|
48 |
<a mat-button routerLink="browse" *ngIf="!(isHandset$ | async)">{{'app-main-nav.browse' | translate}}</a>
|
|
49 |
<a mat-button routerLink="upload" *ngIf="!(isHandset$ | async)">{{'app-main-nav.upload' | translate}}</a>
|
|
50 | 50 |
<!-- navigation items space --> |
51 | 51 |
<div class="space"></div> |
52 | 52 |
<!-- right navigation items --> |
53 |
<a mat-button (click)="openAboutDialog()" *ngIf="!(isHandset$ | async)">About</a>
|
|
54 |
<a mat-button routerLink="help" *ngIf="!(isHandset$ | async)">Help</a>
|
|
55 |
<select (change)="onLanguageSelect($event)">
|
|
56 |
<option *ngFor="let language of languages">{{language}}</option>
|
|
53 |
<a mat-button (click)="openAboutDialog()" *ngIf="!(isHandset$ | async)">{{'app-main-nav.about' | translate}}</a>
|
|
54 |
<a mat-button routerLink="help" *ngIf="!(isHandset$ | async)">{{'app-main-nav.help' | translate}}</a>
|
|
55 |
<select #langSelect (change)="onLanguageSelect($event, langSelect)">
|
|
56 |
<option *ngFor="let lang of translate.getLangs()" [value]="lang" [selected]="lang === translate.currentLang">{{lang | uppercase}}</option>
|
|
57 | 57 |
</select> |
58 | 58 |
</mat-toolbar> |
59 | 59 |
<ng-content></ng-content> |
fe/fulltextsearch/src/app/components/layout/main-nav/main-nav.component.ts | ||
---|---|---|
3 | 3 |
import { Observable } from 'rxjs'; |
4 | 4 |
import { map, shareReplay } from 'rxjs/operators'; |
5 | 5 |
import { AboutDialogComponent } from '../../shared-components/about-dialog/about-dialog.component'; |
6 |
import {MatDialog} from '@angular/material/dialog'; |
|
7 |
import {LoggerService} from '../../../services/logger/logger.service'; |
|
6 |
import { MatDialog } from '@angular/material/dialog'; |
|
7 |
import { LoggerService } from '../../../services/logger/logger.service'; |
|
8 |
import { TranslateService } from '@ngx-translate/core'; |
|
8 | 9 |
|
9 | 10 |
@Component({ |
10 | 11 |
selector: 'app-main-nav', |
... | ... | |
13 | 14 |
}) |
14 | 15 |
export class MainNavComponent { |
15 | 16 |
|
16 |
languages: string[] = ['EN', 'DE', 'CZ']; |
|
17 |
|
|
18 | 17 |
isHandset$: Observable<boolean> = this.breakpointObserver.observe(Breakpoints.Handset) |
19 | 18 |
.pipe( |
20 | 19 |
map(result => result.matches), |
... | ... | |
23 | 22 |
|
24 | 23 |
constructor(private breakpointObserver: BreakpointObserver, |
25 | 24 |
public dialog: MatDialog, |
26 |
private LOGGER: LoggerService) {} |
|
25 |
private LOGGER: LoggerService, |
|
26 |
public translate: TranslateService ) {} |
|
27 | 27 |
|
28 | 28 |
openAboutDialog() { |
29 | 29 |
this.dialog.open(AboutDialogComponent, { panelClass: 'custom-dialog-container' }); |
30 | 30 |
} |
31 | 31 |
|
32 |
onLanguageSelect(event) { |
|
33 |
console.log(event.target.value);
|
|
34 |
this.LOGGER.error('Selected language ' + event.target.value);
|
|
32 |
onLanguageSelect(event, langSelect) {
|
|
33 |
this.translate.use(langSelect.value);
|
|
34 |
this.LOGGER.info('Selected language: ' + event.target.value);
|
|
35 | 35 |
} |
36 | 36 |
|
37 | 37 |
} |
fe/fulltextsearch/src/app/components/pages/browse/browse.component.html | ||
---|---|---|
1 | 1 |
<div class="page-top-margin"> |
2 | 2 |
<div class="text-box mat-elevation-z8"> |
3 | 3 |
<div class="card"> |
4 |
<h1 class="card-header">All documents</h1>
|
|
4 |
<h1 class="card-header">{{'app-browse.card-header' | translate}}</h1>
|
|
5 | 5 |
<div> |
6 | 6 |
<app-table-browse></app-table-browse> |
7 | 7 |
</div> |
fe/fulltextsearch/src/app/components/pages/browse/table/table.component.html | ||
---|---|---|
2 | 2 |
<table mat-table class="full-width-table" matSort aria-label="Elements"> |
3 | 3 |
<!-- Id Column --> |
4 | 4 |
<ng-container matColumnDef="id"> |
5 |
<th mat-header-cell *matHeaderCellDef mat-sort-header>Id</th>
|
|
5 |
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'app-table-browse.id' | translate}}</th>
|
|
6 | 6 |
<td mat-cell *matCellDef="let row">{{row.id}}</td> |
7 | 7 |
</ng-container> |
8 | 8 |
|
9 | 9 |
<!-- Name Column --> |
10 | 10 |
<ng-container matColumnDef="documentName"> |
11 |
<th mat-header-cell *matHeaderCellDef mat-sort-header>Document name</th>
|
|
11 |
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'app-table-browse.document-name' | translate}}</th>
|
|
12 | 12 |
<td mat-cell *matCellDef="let row"> |
13 | 13 |
<a routerLink="/browse/{{row.documentName}}"> |
14 | 14 |
{{row.documentName}} |
... | ... | |
18 | 18 |
|
19 | 19 |
<!-- Test Column --> |
20 | 20 |
<ng-container matColumnDef="originDate"> |
21 |
<th mat-header-cell *matHeaderCellDef mat-sort-header>Origin date</th>
|
|
21 |
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'app-table-browse.origin-date' | translate}}</th>
|
|
22 | 22 |
<td mat-cell *matCellDef="let row">{{row.originDate | date:'d. M. yyyy'}}</td> |
23 | 23 |
</ng-container> |
24 | 24 |
|
25 | 25 |
<!-- Test Column --> |
26 | 26 |
<ng-container matColumnDef="uploadedDate"> |
27 |
<th mat-header-cell *matHeaderCellDef mat-sort-header>Uploaded date</th>
|
|
27 |
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{'app-table-browse.uploaded-date' | translate}}</th>
|
|
28 | 28 |
<td mat-cell *matCellDef="let row">{{row.uploadedDate | date:'d. M. yyyy'}}</td> |
29 | 29 |
</ng-container> |
30 | 30 |
|
fe/fulltextsearch/src/app/components/pages/help/help.component.html | ||
---|---|---|
1 | 1 |
<div class="page-top-margin"> |
2 | 2 |
<div class="text-box"> |
3 | 3 |
<div class="card"> |
4 |
<h1 class="card-header">Help</h1>
|
|
4 |
<h1 class="card-header">{{'app-help.card-header' | translate}}</h1>
|
|
5 | 5 |
<div class="card-body"> |
6 |
<h2 class="card-title">How it is works</h2> |
|
7 |
<p class="card-text">Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus, |
|
8 |
dolor nunc faucibus |
|
9 |
libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque |
|
10 |
quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at |
|
11 |
felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et |
|
12 |
magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi |
|
13 |
tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam |
|
14 |
est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora |
|
15 |
incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices. |
|
16 |
In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio |
|
17 |
a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.</p> |
|
18 |
<h2 class="card-title">Manual</h2> |
|
19 |
<p class="card-text">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Et harum quidem rerum facilis est et expedita |
|
20 |
distinctio. Aenean id metus id velit ullamcorper pulvinar. Curabitur bibendum justo non orci. Etiam egestas |
|
21 |
wisi a erat. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Nulla non arcu lacinia neque faucibus |
|
22 |
fringilla. Etiam dui sem, fermentum vitae, sagittis id, malesuada in, quam. Quis autem vel eum iure reprehenderit |
|
23 |
qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas |
|
24 |
nulla pariatur? Aliquam erat volutpat. Aliquam id dolor.</p> |
|
25 |
<h2 class="card-title">FAQ</h2> |
|
26 |
<p class="card-text">Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus, |
|
27 |
dolor nunc faucibus |
|
28 |
libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque |
|
29 |
quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at |
|
30 |
felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et |
|
31 |
magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi |
|
32 |
tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam |
|
33 |
est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora |
|
34 |
incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices. |
|
35 |
In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio |
|
36 |
a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.</p> |
|
37 |
<h2 class="card-title">Support</h2> |
|
38 |
<p class="card-text">Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus, |
|
39 |
dolor nunc faucibus |
|
40 |
libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque |
|
41 |
quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at |
|
42 |
felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et |
|
43 |
magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi |
|
44 |
tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam |
|
45 |
est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora |
|
46 |
incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices. |
|
47 |
In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio |
|
48 |
a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.</p> |
|
49 |
<h2>Contact admin</h2> |
|
6 |
<h2 class="card-title">{{'app-help.how-it-works-title' | translate}}</h2> |
|
7 |
<p class="card-text">{{'app-help.how-it-works-text' | translate}}</p> |
|
8 |
<h2 class="card-title">{{'app-help.manual-title' | translate}}</h2> |
|
9 |
<p class="card-text">{{'app-help.manual-text' | translate}}</p> |
|
10 |
<h2 class="card-title">{{'app-help.faq-title' | translate}}</h2> |
|
11 |
<p class="card-text">{{'app-help.faq-text' | translate}}</p> |
|
12 |
<h2 class="card-title">{{'app-help.support-title' | translate}}</h2> |
|
13 |
<p class="card-text">{{'app-help.support-text' | translate}}</p> |
|
14 |
<h2>{{'app-help.contact-admin-title' | translate}}</h2> |
|
50 | 15 |
<address> |
51 | 16 |
<a href="mailto:jim@rock.com">jim@rock.com</a><br> |
52 | 17 |
<a href="tel:+13115552368">(311) 555-2368</a> |
fe/fulltextsearch/src/app/components/pages/search/search-paginator/search-paginator.component.html | ||
---|---|---|
14 | 14 |
class="image" src="data:image/jpg;base64,{{row.imageCut}}" |
15 | 15 |
(load)="draw(row,row.randomId + 'Img' , row.randomId + 'Canvas' )"/> |
16 | 16 |
<canvas id="{{row.randomId + 'Canvas'}}" style="position: absolute;" title="Result"> |
17 |
Your browser does not support the HTML5 canvas tag.
|
|
17 |
{{'app-search-paginator.canvas-error' | translate}}
|
|
18 | 18 |
</canvas> |
19 | 19 |
</div> |
20 | 20 |
</div> |
fe/fulltextsearch/src/app/components/pages/search/search-paginator/search-paginator.component.ts | ||
---|---|---|
1 |
import { Component, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';
|
|
1 |
import {Component, Input, OnChanges, SimpleChanges, ViewChild} from '@angular/core';
|
|
2 | 2 |
import { MatPaginator } from '@angular/material/paginator'; |
3 | 3 |
import { MatTableDataSource } from '@angular/material/table'; |
4 | 4 |
import { TextRegion } from '../../../../model/parts/TextRegion'; |
5 | 5 |
import { SearchResponse } from '../../../../model/SearchResponse'; |
6 |
import Utils from '../../../../../Utils';
|
|
7 |
import {DrawerService} from '../../../../services/drawer/drawer.service';
|
|
8 |
import {LoggerService} from '../../../../services/logger/logger.service';
|
|
6 |
import { DrawerService } from '../../../../services/drawer/drawer.service';
|
|
7 |
import { LoggerService } from '../../../../services/logger/logger.service';
|
|
8 |
import { TranslateService } from '@ngx-translate/core';
|
|
9 | 9 |
|
10 | 10 |
@Component({ |
11 | 11 |
selector: 'app-search-paginator', |
... | ... | |
20 | 20 |
/** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ |
21 | 21 |
displayedColumns = ['image']; |
22 | 22 |
|
23 |
constructor(private LOGGER: LoggerService, private drawer: DrawerService) {} |
|
23 |
constructor(private LOGGER: LoggerService, private drawer: DrawerService, private translate: TranslateService) { |
|
24 |
|
|
25 |
} |
|
24 | 26 |
|
25 | 27 |
ngOnChanges(changes: SimpleChanges): void { |
26 | 28 |
this.tableDataSource = new MatTableDataSource<TextRegion>(this.inputData.textRegions); |
29 |
// this.tableDataSource.paginator._intl.itemsPerPageLabel = this.translate.instant('app-search-paginator.items-per-page'); |
|
27 | 30 |
this.tableDataSource.paginator = this.paginator; |
28 | 31 |
} |
29 | 32 |
|
fe/fulltextsearch/src/app/components/pages/search/search.component.html | ||
---|---|---|
8 | 8 |
</div>--> |
9 | 9 |
<div class="row" *ngIf="data"> |
10 | 10 |
<p class="card-header"> |
11 |
<span>Searching expression: </span><b>{{data.expression}}</b><br>
|
|
12 |
<span>Documents found: </span><b>{{data.textRegions.length}}</b>
|
|
11 |
<span>{{'app-search.expression' | translate}}</span><b>{{data.expression}}</b><br>
|
|
12 |
<span>{{'app-search.found' | translate}}</span><b>{{data.textRegions.length}}</b>
|
|
13 | 13 |
</p> |
14 | 14 |
</div> |
15 | 15 |
<div class="row"> |
fe/fulltextsearch/src/app/components/pages/upload/upload.component.html | ||
---|---|---|
1 | 1 |
<div class="page-top-margin"> |
2 | 2 |
<div class="text-box"> |
3 | 3 |
<div class="card"> |
4 |
<h1 class="card-header">Upload files</h1>
|
|
4 |
<h1 class="card-header">{{'app-upload.card-header' | translate}}</h1>
|
|
5 | 5 |
<div class="card-body"> |
6 | 6 |
<div class="row justify-content-center align-items-center"> |
7 | 7 |
<input type="file" (change)="onFilesSelected($event)" multiple #fileInput accept="image/jpeg, image/png, application/xml, text/xml"> |
8 |
<button class="btn btn-outline-secondary" type="button" (click)="fileInput.click()">Pick files</button>
|
|
9 |
<button class="btn btn-outline-secondary" type="button" (click)="onUpload()">Upload</button>
|
|
8 |
<button class="btn btn-outline-secondary" type="button" (click)="fileInput.click()">{{'app-upload.pick-files' | translate}}</button>
|
|
9 |
<button class="btn btn-outline-secondary" type="button" (click)="onUpload()">{{'app-upload.upload' | translate}}</button>
|
|
10 | 10 |
</div> |
11 | 11 |
<mat-progress-bar mode="determinate" [value]="progress" color="warn"></mat-progress-bar> |
12 | 12 |
<div class="row justify-content-center align-items-center"> |
fe/fulltextsearch/src/app/components/shared-components/about-dialog/about-dialog.component.html | ||
---|---|---|
1 | 1 |
<div class="dialog-header"> |
2 |
<h1 mat-dialog-title>About</h1>
|
|
2 |
<h1 mat-dialog-title>{{'app-about-dialog.title' | translate}}</h1>
|
|
3 | 3 |
<span class="clickable" mat-dialog-close> |
4 | 4 |
<mat-icon>clear</mat-icon> |
5 | 5 |
</span> |
... | ... | |
7 | 7 |
|
8 | 8 |
<mat-dialog-content> |
9 | 9 |
|
10 |
<span><b>App version(FE):</b> </span> {{appVersionFE}}<br> |
|
11 |
<span><b>App version(BE):</b></span> {{appVersionBE}}<br> |
|
12 |
<span><b>Solr version:</b></span> {{solrVersion}}<br> |
|
13 |
<h3><b>Project made by ASWI team ANONYMOUS(2020)</b></h3> |
|
14 |
<p> |
|
15 |
Lorem Ipsum is simply dummy text of the printing and |
|
16 |
typesetting industry. Lorem Ipsum has been the industry's |
|
17 |
standard dummy text ever since the 1500s, when an unknown |
|
18 |
printer took a galley of type and scrambled it to make a |
|
19 |
type specimen book. |
|
20 |
</p> |
|
10 |
<span><b>{{'app-about-dialog.fe-version' | translate}}</b> </span> {{appVersionFE}}<br> |
|
11 |
<span><b>{{'app-about-dialog.be-version' | translate}}</b></span> {{appVersionBE}}<br> |
|
12 |
<span><b>{{'app-about-dialog.solr-version' | translate}}</b></span> {{solrVersion}}<br> |
|
13 |
<h3><b>{{'app-about-dialog.header3' | translate}}</b></h3> |
|
14 |
<p>{{'app-about-dialog.paragraph' | translate}}</p> |
|
21 | 15 |
|
22 | 16 |
</mat-dialog-content> |
fe/fulltextsearch/src/app/components/shared-components/search-box/search-box.component.html | ||
---|---|---|
5 | 5 |
<mat-icon>search</mat-icon> |
6 | 6 |
</span> |
7 | 7 |
</div> |
8 |
<input type="text" class="form-control" [(ngModel)]="expression" (keyup.enter) = "onSubmit()" placeholder="Enter text to search..." aria-label="Search" aria-describedby="basic-addon2">
|
|
8 |
<input type="text" class="form-control" [(ngModel)]="expression" (keyup.enter) = "onSubmit()" placeholder="{{'app-search-box.placeholder' | translate}}" aria-label="Search" aria-describedby="basic-addon2">
|
|
9 | 9 |
<div class="input-group-append"> |
10 | 10 |
<span class="input-group-text clickable" id="clear-icon"> |
11 | 11 |
<mat-icon *ngIf="expression" matSuffix aria-label="Clear" (click)="expression=''">clear</mat-icon> |
12 | 12 |
</span> |
13 |
<button class="btn btn-outline-secondary" type="button" (click)="onSubmit()">Search</button>
|
|
13 |
<button class="btn btn-outline-secondary" type="button" (click)="onSubmit()">{{'app-search-box.search' | translate}}</button>
|
|
14 | 14 |
</div> |
15 | 15 |
</div> |
16 | 16 |
</div> |
fe/fulltextsearch/src/app/components/shared-components/search-box/search-box.component.ts | ||
---|---|---|
3 | 3 |
import { QueryService } from '../../../services/query/query.service'; |
4 | 4 |
import { Router } from '@angular/router'; |
5 | 5 |
import { DataHolderService } from '../../../services/data-holder/data-holder.service'; |
6 |
import {SearchComponent} from '../../pages/search/search.component'; |
|
7 | 6 |
import {Subscription} from 'rxjs'; |
8 | 7 |
|
9 | 8 |
@Component({ |
fe/fulltextsearch/src/assets/i18n/cz-lang.json | ||
---|---|---|
1 |
{ |
|
2 |
"app-title": "Fulltext search app", |
|
3 |
"app-main-nav": { |
|
4 |
"title1": "FULLTEXT SEARCH", |
|
5 |
"title2": "APPLICATION", |
|
6 |
"home": "Domů", |
|
7 |
"search": "Vyhledat", |
|
8 |
"browse": "Procházet", |
|
9 |
"upload": "Nahrát", |
|
10 |
"about": "O nás", |
|
11 |
"help": "Pomoc" |
|
12 |
}, |
|
13 |
"app-search-box": { |
|
14 |
"search": "Vyhledat", |
|
15 |
"placeholder": "Zadejte text k vyhledání..." |
|
16 |
}, |
|
17 |
"app-search": { |
|
18 |
"expression": "Hledaný výraz: ", |
|
19 |
"found": "Nalezeno dokumentů: " |
|
20 |
}, |
|
21 |
"app-search-paginator": { |
|
22 |
"canvas-error": "Váš prohlížeč nepodporuje HTML5 canvas tag.", |
|
23 |
"items-per-page": "Položek na stránku:" |
|
24 |
}, |
|
25 |
"app-browse": { |
|
26 |
"card-header": "Všechny dokumenty" |
|
27 |
}, |
|
28 |
"app-table-browse": { |
|
29 |
"id": "Id", |
|
30 |
"document-name": "Název dokumentu", |
|
31 |
"origin-date": "Datum vytvoření", |
|
32 |
"uploaded-date": "Datum nahrání" |
|
33 |
}, |
|
34 |
"app-upload": { |
|
35 |
"card-header": "Nahrát soubory", |
|
36 |
"pick-files": "Vybrat soubory", |
|
37 |
"upload": "Nahrát" |
|
38 |
}, |
|
39 |
"app-about-dialog": { |
|
40 |
"title": "O nás", |
|
41 |
"fe-version": "Verze aplikace (FE):", |
|
42 |
"be-version": "Verze aplikace (BE):", |
|
43 |
"solr-version": "Verze Solr:", |
|
44 |
"header3": "Projekt vytvořen týmem ANONYMOUS v rámci projektu ASWI (2020)", |
|
45 |
"paragraph": " Lorem Ipsum is simply dummy text of the printing and\n typesetting industry. Lorem Ipsum has been the industry's\n standard dummy text ever since the 1500s, when an unknown\n printer took a galley of type and scrambled it to make a\n type specimen book." |
|
46 |
}, |
|
47 |
"app-help": { |
|
48 |
"card-header": "Pomoc", |
|
49 |
"how-it-works-title": "Jak to funguje", |
|
50 |
"how-it-works-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n dolor nunc faucibus\n libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.", |
|
51 |
"manual-title": "Návod", |
|
52 |
"manual-text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Et harum quidem rerum facilis est et expedita\n distinctio. Aenean id metus id velit ullamcorper pulvinar. Curabitur bibendum justo non orci. Etiam egestas\n wisi a erat. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Nulla non arcu lacinia neque faucibus\n fringilla. Etiam dui sem, fermentum vitae, sagittis id, malesuada in, quam. Quis autem vel eum iure reprehenderit\n qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas\n nulla pariatur? Aliquam erat volutpat. Aliquam id dolor.", |
|
53 |
"faq-title": "Nejčastější dotazy", |
|
54 |
"faq-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n dolor nunc faucibus\n libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.", |
|
55 |
"support-title": "Podpora", |
|
56 |
"support-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n dolor nunc faucibus\n libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.", |
|
57 |
"contact-admin-title": "Kontakt na administrátora" |
|
58 |
} |
|
59 |
} |
fe/fulltextsearch/src/assets/i18n/en-lang.json | ||
---|---|---|
1 |
{ |
|
2 |
"app-title": "Fulltext search app", |
|
3 |
"app-main-nav": { |
|
4 |
"title1": "FULLTEXT SEARCH", |
|
5 |
"title2": "APPLICATION", |
|
6 |
"home": "Home", |
|
7 |
"search": "Search", |
|
8 |
"browse": "Browse", |
|
9 |
"upload": "Upload", |
|
10 |
"about": "About", |
|
11 |
"help": "Help" |
|
12 |
}, |
|
13 |
"app-search-box": { |
|
14 |
"search": "Search", |
|
15 |
"placeholder": "Enter text to search..." |
|
16 |
}, |
|
17 |
"app-search": { |
|
18 |
"expression": "Searching expression: ", |
|
19 |
"found": "Documents found: " |
|
20 |
}, |
|
21 |
"app-search-paginator": { |
|
22 |
"canvas-error": "Your browser does not support the HTML5 canvas tag.", |
|
23 |
"items-per-page": "Items per page:" |
|
24 |
}, |
|
25 |
"app-browse": { |
|
26 |
"card-header": "All documents" |
|
27 |
}, |
|
28 |
"app-table-browse": { |
|
29 |
"id": "Id", |
|
30 |
"document-name": "Document name", |
|
31 |
"origin-date": "Origin date", |
|
32 |
"uploaded-date": "Uploaded date" |
|
33 |
}, |
|
34 |
"app-upload": { |
|
35 |
"card-header": "Upload files", |
|
36 |
"pick-files": "Pick files", |
|
37 |
"upload": "Upload" |
|
38 |
}, |
|
39 |
"app-about-dialog": { |
|
40 |
"title": "About", |
|
41 |
"fe-version": "App version (FE):", |
|
42 |
"be-version": "App version (BE):", |
|
43 |
"solr-version": "Solr version:", |
|
44 |
"header3": "Project made by ASWI team ANONYMOUS (2020)", |
|
45 |
"paragraph": " Lorem Ipsum is simply dummy text of the printing and\n typesetting industry. Lorem Ipsum has been the industry's\n standard dummy text ever since the 1500s, when an unknown\n printer took a galley of type and scrambled it to make a\n type specimen book." |
|
46 |
}, |
|
47 |
"app-help": { |
|
48 |
"card-header": "Help", |
|
49 |
"how-it-works-title": "How it is works", |
|
50 |
"how-it-works-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n dolor nunc faucibus\n libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.", |
|
51 |
"manual-title": "Manual", |
|
52 |
"manual-text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Et harum quidem rerum facilis est et expedita\n distinctio. Aenean id metus id velit ullamcorper pulvinar. Curabitur bibendum justo non orci. Etiam egestas\n wisi a erat. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Nulla non arcu lacinia neque faucibus\n fringilla. Etiam dui sem, fermentum vitae, sagittis id, malesuada in, quam. Quis autem vel eum iure reprehenderit\n qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas\n nulla pariatur? Aliquam erat volutpat. Aliquam id dolor.", |
|
53 |
"faq-title": "FAQ", |
|
54 |
"faq-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n dolor nunc faucibus\n libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.", |
|
55 |
"support-title": "Support", |
|
56 |
"support-text": "Praesent in mauris eu tortor porttitor accumsan. Duis bibendum, lectus ut viverra rhoncus,\n dolor nunc faucibus\n libero, eget facilisis enim ipsum id lacus. Sed ac dolor sit amet purus malesuada congue. Integer pellentesque\n quam vel velit. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Phasellus rhoncus. Donec quis nibh at\n felis congue commodo. Integer pellentesque quam vel velit. Integer in sapien. Cum sociis natoque penatibus et\n magnis dis parturient montes, nascetur ridiculus mus. Maecenas aliquet accumsan leo. Pellentesque habitant morbi\n tristique senectus et netus et malesuada fames ac turpis egestas. In dapibus augue non sapien. Neque porro quisquam\n est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora\n incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Praesent id justo in neque elementum ultrices.\n In convallis. Maecenas fermentum, sem in pharetra pellentesque, velit turpis volutpat ante, in pharetra metus odio\n a lectus. Mauris tincidunt sem sed arcu. Vivamus porttitor turpis ac leo.", |
|
57 |
"contact-admin-title": "Contact admin" |
|
58 |
} |
|
59 |
} |
Také k dispozici: Unified diff
Re #7905: Lokalizace FE
- vytvořeny překlady cz a en
- překlady definovány v JSON souborech