diff --git a/web/angular/src/app/TranslatedPaginatorConfiguration.ts b/web/angular/src/app/TranslatedPaginatorConfiguration.ts
new file mode 100644
index 0000000..79f63f5
--- /dev/null
+++ b/web/angular/src/app/TranslatedPaginatorConfiguration.ts
@@ -0,0 +1,28 @@
+import {MatPaginatorIntl} from "@angular/material";
+import {TranslateService} from "@ngx-translate/core";
+
+export function TranslatedPaginator(translate: TranslateService) {
+
+ const paginatorIntl = new MatPaginatorIntl();
+
+ getTranslations(translate, paginatorIntl);
+
+ translate.onLangChange.subscribe(() => {
+ getTranslations(translate, paginatorIntl)
+ });
+
+ return paginatorIntl;
+}
+
+function getTranslations(tr: TranslateService, p: MatPaginatorIntl) {
+
+ tr.get("logs.first_page_label").subscribe((t) => p.firstPageLabel = t);
+ tr.get("logs.last_page_label").subscribe((t) => p.lastPageLabel = t);
+ tr.get("logs.items_per_page").subscribe((t) => p.itemsPerPageLabel = t);
+ tr.get("logs.next_page").subscribe((t) => p.nextPageLabel = t);
+ tr.get("logs.prev_page").subscribe((t) => p.previousPageLabel = t);
+ tr.get("logs.of").subscribe((of) =>
+ p.getRangeLabel = (page, pageSize, length) => `${page * pageSize + 1}-${Math.min(pageSize * (page + 1), length)} ${of} ${length}`
+ );
+
+}
diff --git a/web/angular/src/app/api.service.ts b/web/angular/src/app/api.service.ts
index 4d60604..2e805e1 100755
--- a/web/angular/src/app/api.service.ts
+++ b/web/angular/src/app/api.service.ts
@@ -13,7 +13,7 @@ export class ApiService {
}
getLogs() {
- return this.http.post(this.url + "/logs", "{\"level\":\"info\", \"since\":10000}");
+ return this.http.post(this.url + "/logs", "{\"level\":6, \"since\":1}");
}
getProjects() {
diff --git a/web/angular/src/app/app.component.css b/web/angular/src/app/app.component.css
index 37aa71c..1417e5b 100755
--- a/web/angular/src/app/app.component.css
+++ b/web/angular/src/app/app.component.css
@@ -1,3 +1,10 @@
.nav-spacer {
flex: 1 1 auto;
}
+
+.icon {
+ padding: 0 14px;
+}
+
+.nav-link {
+}
diff --git a/web/angular/src/app/app.component.html b/web/angular/src/app/app.component.html
index f8509a6..0b2ebdd 100755
--- a/web/angular/src/app/app.component.html
+++ b/web/angular/src/app/app.component.html
@@ -1,8 +1,9 @@
- {{ "nav.title" | translate }}
+
+
+
+
- favorite
- delete
@@ -12,12 +13,6 @@
-
diff --git a/web/angular/src/app/app.module.ts b/web/angular/src/app/app.module.ts
index 9497248..fa6974e 100755
--- a/web/angular/src/app/app.module.ts
+++ b/web/angular/src/app/app.module.ts
@@ -17,6 +17,7 @@ import {
MatIconModule,
MatInputModule,
MatMenuModule,
+ MatPaginatorIntl,
MatPaginatorModule,
MatSelectModule,
MatSliderModule,
@@ -36,8 +37,9 @@ import {CreateProjectComponent} from './create-project/create-project.component'
import {FormsModule, ReactiveFormsModule} from "@angular/forms";
import {UpdateProjectComponent} from './update-project/update-project.component';
import {SnackBarComponent} from "./messenger/snack-bar.component";
-import {TranslateLoader, TranslateModule} from "@ngx-translate/core";
+import {TranslateLoader, TranslateModule, TranslateService} from "@ngx-translate/core";
import {TranslateHttpLoader} from "@ngx-translate/http-loader";
+import {TranslatedPaginator} from "./TranslatedPaginatorConfiguration";
export function createTranslateLoader(http: HttpClient) {
@@ -95,6 +97,7 @@ export function createTranslateLoader(http: HttpClient) {
providers: [
ApiService,
MessengerService,
+ {provide: MatPaginatorIntl, useFactory: TranslatedPaginator, deps: [TranslateService]}
],
entryComponents: [
SnackBarComponent,
diff --git a/web/angular/src/app/logs/logs.component.html b/web/angular/src/app/logs/logs.component.html
index 782e545..fe4994c 100644
--- a/web/angular/src/app/logs/logs.component.html
+++ b/web/angular/src/app/logs/logs.component.html
@@ -1,32 +1,40 @@
-
-
-
-
-
+
+
+
+
+
+
-
- Level
- {{entry.level}}
-
-
- Time
- {{entry.timestamp}}
-
-
- Message
- {{entry.message}}
-
-
- Data
-
- {{entry.data}}
-
-
+
-
-
-
+
+ {{"logs.level" | translate}}
+ {{entry.level}}
+
+
+ {{"logs.time" | translate}}
+ {{entry.timestamp}}
+
+
+ {{"logs.message" | translate}}
+ {{entry.message}}
+
+
+ {{"logs.data" | translate}}
+
+ {{entry.data}}
+
+
-
+
+
+
+
+
+
+
diff --git a/web/angular/src/app/logs/logs.component.ts b/web/angular/src/app/logs/logs.component.ts
index 5bd22c0..1d9f2f8 100644
--- a/web/angular/src/app/logs/logs.component.ts
+++ b/web/angular/src/app/logs/logs.component.ts
@@ -45,7 +45,7 @@ export class LogsComponent implements OnInit {
message: entry.message,
timestamp: moment.unix(entry.timestamp).toISOString(),
data: JSON.stringify(JSON.parse(entry.data), null, 2),
- level: entry.level.toUpperCase()
+ level: entry.level
}
});
}
diff --git a/web/angular/src/assets/i18n/en.json b/web/angular/src/assets/i18n/en.json
index 65bb994..86a1c61 100644
--- a/web/angular/src/assets/i18n/en.json
+++ b/web/angular/src/assets/i18n/en.json
@@ -1,6 +1,23 @@
{
"nav": {
"title": "task_tracker",
- "langSelect": "Language"
+ "langSelect": "Language",
+ "logs": "Logs",
+ "project_list": "Projects",
+ "new_project": "New Project"
+ },
+ "logs": {
+ "filter": "Filter",
+ "time": "Time",
+ "level": "Level",
+ "message": "Message",
+ "data": "Details",
+ "first_page_label": "First page",
+ "last_page_label": "Last page",
+ "of": "of",
+ "items_per_page": "Items per page",
+ "next_page": "Next page",
+ "prev_page": "Previous page"
+
}
}
diff --git a/web/angular/src/assets/i18n/fr.json b/web/angular/src/assets/i18n/fr.json
index d5df126..8ae38ba 100644
--- a/web/angular/src/assets/i18n/fr.json
+++ b/web/angular/src/assets/i18n/fr.json
@@ -1,6 +1,23 @@
{
"nav": {
"title": "task_tracker (fr)",
- "langSelect": "Langue"
+ "langSelect": "Langue",
+ "logs": "Journal",
+ "project_list": "Projets",
+ "new_project": "Nouveau projet"
+ },
+ "logs": {
+ "filter": "Filtrer",
+ "time": "Date",
+ "level": "Niveau",
+ "message": "Message",
+ "data": "Details",
+ "first_page_label": "Première page",
+ "last_page_label": "Dernière page",
+ "of": "de",
+ "items_per_page": "Items par page",
+ "next_page": "Page suivante",
+ "prev_page": "Page précédante"
}
}
+
diff --git a/web/angular/src/styles.css b/web/angular/src/styles.css
index 2246283..8d87d32 100644
--- a/web/angular/src/styles.css
+++ b/web/angular/src/styles.css
@@ -1,36 +1,51 @@
/* You can add global styles to this file, and also import other style files */
@import "~@angular/material/prebuilt-themes/indigo-pink.css";
-.line-new {
- fill: none;
- stroke: #31a6a2;
- stroke-width: 3;
+body {
+ margin: 0;
}
-.line-failed {
- fill: none;
- stroke: #8c2627;
- stroke-width: 3;
+.nav-title {
+ font-weight: bold;
+ font-size: 18px;
}
-.line-closed {
- fill: none;
- stroke: #62f24b;
- stroke-width: 3;
+
+.container {
+ width: 100%;
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+ margin-top: 15px;
}
-.overlay {
- fill: none;
- pointer-events: all;
+@media (min-width: 576px) {
+ .container {
+ max-width: 540px;
+ }
}
-/* Style the dots by assigning a fill and stroke */
-.dot {
- fill: #ffab00;
- stroke: #fff;
+@media (min-width: 768px) {
+ .container {
+ max-width: 720px;
+ }
}
-.focus circle {
- fill: none;
- stroke: steelblue;
+@media (min-width: 992px) {
+ .container {
+ max-width: 960px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ max-width: 1140px;
+ }
+}
+
+@media (min-width: 1600px) {
+ .container {
+ max-width: 1440px;
+ }
}