diff options
Diffstat (limited to 'client/src/app')
-rw-r--r-- | client/src/app/app.component.html | 2 | ||||
-rw-r--r-- | client/src/app/app.module.ts | 3 | ||||
-rw-r--r-- | client/src/app/core/hotkeys/hotkeys.component.html | 18 | ||||
-rw-r--r-- | client/src/app/core/hotkeys/hotkeys.component.scss | 105 | ||||
-rw-r--r-- | client/src/app/core/hotkeys/hotkeys.component.ts | 46 | ||||
-rw-r--r-- | client/src/app/core/hotkeys/hotkeys.module.ts | 23 | ||||
-rw-r--r-- | client/src/app/core/hotkeys/index.ts | 1 | ||||
-rw-r--r-- | client/src/app/core/index.ts | 3 | ||||
-rw-r--r-- | client/src/app/core/theme/theme.service.ts | 1 |
9 files changed, 198 insertions, 4 deletions
diff --git a/client/src/app/app.component.html b/client/src/app/app.component.html index 23ed04c2d..87de874bb 100644 --- a/client/src/app/app.component.html +++ b/client/src/app/app.component.html | |||
@@ -1,6 +1,6 @@ | |||
1 | <div *ngIf="customCSS" [innerHTML]="customCSS"></div> | 1 | <div *ngIf="customCSS" [innerHTML]="customCSS"></div> |
2 | 2 | ||
3 | <hotkeys-cheatsheet></hotkeys-cheatsheet> | 3 | <my-hotkeys-cheatsheet></my-hotkeys-cheatsheet> |
4 | 4 | ||
5 | <div [ngClass]="{ 'user-logged-in': isUserLoggedIn(), 'user-not-logged-in': !isUserLoggedIn() }"> | 5 | <div [ngClass]="{ 'user-logged-in': isUserLoggedIn(), 'user-not-logged-in': !isUserLoggedIn() }"> |
6 | <div class="header"> | 6 | <div class="header"> |
diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index ba16c072e..e5a188321 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts | |||
@@ -5,7 +5,8 @@ import { ResetPasswordModule } from '@app/reset-password' | |||
5 | 5 | ||
6 | import { MetaLoader, MetaModule, MetaStaticLoader, PageTitlePositioning } from '@ngx-meta/core' | 6 | import { MetaLoader, MetaModule, MetaStaticLoader, PageTitlePositioning } from '@ngx-meta/core' |
7 | import { ClipboardModule } from 'ngx-clipboard' | 7 | import { ClipboardModule } from 'ngx-clipboard' |
8 | import { HotkeyModule, IHotkeyOptions } from 'angular2-hotkeys' | 8 | import { HotkeyModule } from '@app/core/hotkeys' |
9 | import { IHotkeyOptions } from 'angular2-hotkeys' | ||
9 | import 'focus-visible' | 10 | import 'focus-visible' |
10 | 11 | ||
11 | import { AppRoutingModule } from './app-routing.module' | 12 | import { AppRoutingModule } from './app-routing.module' |
diff --git a/client/src/app/core/hotkeys/hotkeys.component.html b/client/src/app/core/hotkeys/hotkeys.component.html new file mode 100644 index 000000000..61f03be33 --- /dev/null +++ b/client/src/app/core/hotkeys/hotkeys.component.html | |||
@@ -0,0 +1,18 @@ | |||
1 | <div class="cfp-hotkeys-container fade" [ngClass]="{'in': helpVisible}"> | ||
2 | <div class="cfp-hotkeys"> | ||
3 | <h4 class="cfp-hotkeys-title">{{ title }}</h4> | ||
4 | <div class="cfp-hotkeys-table"> | ||
5 | <table> | ||
6 | <tbody> | ||
7 | <tr *ngFor="let hotkey of hotkeys"> | ||
8 | <td class="cfp-hotkeys-keys"> | ||
9 | <span *ngFor="let key of hotkey.formatted" class="cfp-hotkeys-key">{{ key }}</span> | ||
10 | </td> | ||
11 | <td class="cfp-hotkeys-text">{{ hotkey.description }}</td> | ||
12 | </tr> | ||
13 | </tbody> | ||
14 | </table> | ||
15 | </div> | ||
16 | <div class="cfp-hotkeys-close" (click)="toggleCheatSheet()">×</div> | ||
17 | </div> | ||
18 | </div> \ No newline at end of file | ||
diff --git a/client/src/app/core/hotkeys/hotkeys.component.scss b/client/src/app/core/hotkeys/hotkeys.component.scss new file mode 100644 index 000000000..9af10b7c4 --- /dev/null +++ b/client/src/app/core/hotkeys/hotkeys.component.scss | |||
@@ -0,0 +1,105 @@ | |||
1 | .cfp-hotkeys-container { | ||
2 | display: table !important; | ||
3 | position: fixed; | ||
4 | overflow: auto; | ||
5 | width: 100%; | ||
6 | height: 100%; | ||
7 | top: 0; | ||
8 | left: 0; | ||
9 | color: #333; | ||
10 | font-size: 1em; | ||
11 | background-color: rgba(255,255,255,0.9); | ||
12 | } | ||
13 | |||
14 | .cfp-hotkeys-container.fade { | ||
15 | z-index: -1024; | ||
16 | visibility: hidden; | ||
17 | opacity: 0; | ||
18 | -webkit-transition: opacity 0.15s linear; | ||
19 | -moz-transition: opacity 0.15s linear; | ||
20 | -o-transition: opacity 0.15s linear; | ||
21 | transition: opacity 0.15s linear; | ||
22 | } | ||
23 | |||
24 | .cfp-hotkeys-container.fade.in { | ||
25 | z-index: 10002; | ||
26 | visibility: visible; | ||
27 | opacity: 1; | ||
28 | } | ||
29 | |||
30 | .cfp-hotkeys-title { | ||
31 | font-weight: bold; | ||
32 | text-align: center; | ||
33 | font-size: 1.2em; | ||
34 | } | ||
35 | |||
36 | .cfp-hotkeys { | ||
37 | width: 100%; | ||
38 | height: 100%; | ||
39 | display: table-cell; | ||
40 | vertical-align: middle; | ||
41 | } | ||
42 | |||
43 | .cfp-hotkeys table { | ||
44 | margin: auto; | ||
45 | color: #333; | ||
46 | } | ||
47 | |||
48 | .cfp-content { | ||
49 | display: table-cell; | ||
50 | vertical-align: middle; | ||
51 | } | ||
52 | |||
53 | .cfp-hotkeys-keys { | ||
54 | padding: 5px; | ||
55 | text-align: right; | ||
56 | } | ||
57 | |||
58 | .cfp-hotkeys-key { | ||
59 | display: inline-block; | ||
60 | color: #fff; | ||
61 | background-color: #333; | ||
62 | border: 1px solid #333; | ||
63 | border-radius: 5px; | ||
64 | text-align: center; | ||
65 | margin-right: 5px; | ||
66 | box-shadow: inset 0 1px 0 #666, 0 1px 0 #bbb; | ||
67 | padding: 5px 9px; | ||
68 | font-size: 1em; | ||
69 | } | ||
70 | |||
71 | .cfp-hotkeys-text { | ||
72 | padding-left: 10px; | ||
73 | font-size: 1em; | ||
74 | } | ||
75 | |||
76 | .cfp-hotkeys-close { | ||
77 | position: fixed; | ||
78 | top: 20px; | ||
79 | right: 20px; | ||
80 | font-size: 2em; | ||
81 | font-weight: bold; | ||
82 | padding: 5px 10px; | ||
83 | border: 1px solid #ddd; | ||
84 | border-radius: 5px; | ||
85 | min-height: 45px; | ||
86 | min-width: 45px; | ||
87 | text-align: center; | ||
88 | } | ||
89 | |||
90 | .cfp-hotkeys-close:hover { | ||
91 | background-color: #fff; | ||
92 | cursor: pointer; | ||
93 | } | ||
94 | |||
95 | @media all and (max-width: 500px) { | ||
96 | .cfp-hotkeys { | ||
97 | font-size: 0.8em; | ||
98 | } | ||
99 | } | ||
100 | |||
101 | @media all and (min-width: 750px) { | ||
102 | .cfp-hotkeys { | ||
103 | font-size: 1.2em; | ||
104 | } | ||
105 | } \ No newline at end of file | ||
diff --git a/client/src/app/core/hotkeys/hotkeys.component.ts b/client/src/app/core/hotkeys/hotkeys.component.ts new file mode 100644 index 000000000..f6f299965 --- /dev/null +++ b/client/src/app/core/hotkeys/hotkeys.component.ts | |||
@@ -0,0 +1,46 @@ | |||
1 | import { Component, OnInit, OnDestroy, Input } from '@angular/core' | ||
2 | import { Subscription } from 'rxjs' | ||
3 | import { I18n } from '@ngx-translate/i18n-polyfill' | ||
4 | import { HotkeysService, Hotkey } from 'angular2-hotkeys' | ||
5 | |||
6 | @Component({ | ||
7 | selector : 'my-hotkeys-cheatsheet', | ||
8 | templateUrl : './hotkeys.component.html', | ||
9 | styleUrls: [ './hotkeys.component.scss' ] | ||
10 | }) | ||
11 | export class CheatSheetComponent implements OnInit, OnDestroy { | ||
12 | helpVisible = false | ||
13 | @Input() title = this.i18n('Keyboard Shortcuts:') | ||
14 | subscription: Subscription | ||
15 | |||
16 | hotkeys: Hotkey[] | ||
17 | |||
18 | constructor ( | ||
19 | private hotkeysService: HotkeysService, | ||
20 | private i18n: I18n | ||
21 | ) {} | ||
22 | |||
23 | public ngOnInit (): void { | ||
24 | this.subscription = this.hotkeysService.cheatSheetToggle.subscribe((isOpen) => { | ||
25 | if (isOpen !== false) { | ||
26 | this.hotkeys = this.hotkeysService.hotkeys.filter(hotkey => hotkey.description) | ||
27 | } | ||
28 | |||
29 | if (isOpen === false) { | ||
30 | this.helpVisible = false | ||
31 | } else { | ||
32 | this.toggleCheatSheet() | ||
33 | } | ||
34 | }) | ||
35 | } | ||
36 | |||
37 | public ngOnDestroy (): void { | ||
38 | if (this.subscription) { | ||
39 | this.subscription.unsubscribe() | ||
40 | } | ||
41 | } | ||
42 | |||
43 | public toggleCheatSheet (): void { | ||
44 | this.helpVisible = !this.helpVisible | ||
45 | } | ||
46 | } | ||
diff --git a/client/src/app/core/hotkeys/hotkeys.module.ts b/client/src/app/core/hotkeys/hotkeys.module.ts new file mode 100644 index 000000000..7d420587e --- /dev/null +++ b/client/src/app/core/hotkeys/hotkeys.module.ts | |||
@@ -0,0 +1,23 @@ | |||
1 | import { NgModule, ModuleWithProviders } from '@angular/core' | ||
2 | import { CommonModule } from '@angular/common' | ||
3 | import { HotkeysDirective, IHotkeyOptions, HotkeyOptions, HotkeysService } from 'angular2-hotkeys' | ||
4 | import { CheatSheetComponent } from './hotkeys.component' | ||
5 | |||
6 | export * from './hotkeys.component' | ||
7 | |||
8 | @NgModule({ | ||
9 | imports : [CommonModule], | ||
10 | exports : [HotkeysDirective, CheatSheetComponent], | ||
11 | declarations : [HotkeysDirective, CheatSheetComponent] | ||
12 | }) | ||
13 | export class HotkeyModule { | ||
14 | static forRoot (options: IHotkeyOptions = {}): ModuleWithProviders { | ||
15 | return { | ||
16 | ngModule : HotkeyModule, | ||
17 | providers : [ | ||
18 | HotkeysService, | ||
19 | { provide : HotkeyOptions, useValue : options } | ||
20 | ] | ||
21 | } | ||
22 | } | ||
23 | } | ||
diff --git a/client/src/app/core/hotkeys/index.ts b/client/src/app/core/hotkeys/index.ts new file mode 100644 index 000000000..4f2796766 --- /dev/null +++ b/client/src/app/core/hotkeys/index.ts | |||
@@ -0,0 +1 @@ | |||
export * from './hotkeys.module' | |||
diff --git a/client/src/app/core/index.ts b/client/src/app/core/index.ts index 521afc29c..524589d74 100644 --- a/client/src/app/core/index.ts +++ b/client/src/app/core/index.ts | |||
@@ -1,6 +1,7 @@ | |||
1 | export * from './auth' | 1 | export * from './auth' |
2 | export * from './server' | ||
3 | export * from './confirm' | 2 | export * from './confirm' |
4 | export * from './routing' | 3 | export * from './routing' |
4 | export * from './server' | ||
5 | export * from './theme' | 5 | export * from './theme' |
6 | |||
6 | export * from './core.module' | 7 | export * from './core.module' |
diff --git a/client/src/app/core/theme/theme.service.ts b/client/src/app/core/theme/theme.service.ts index 17d33b4e5..a6eef0898 100644 --- a/client/src/app/core/theme/theme.service.ts +++ b/client/src/app/core/theme/theme.service.ts | |||
@@ -16,7 +16,6 @@ export class ThemeService { | |||
16 | this.previousTheme['inputPlaceholderColor'] = '#fff' | 16 | this.previousTheme['inputPlaceholderColor'] = '#fff' |
17 | 17 | ||
18 | this.darkTheme = (peertubeLocalStorage.getItem('theme') === 'dark') | 18 | this.darkTheme = (peertubeLocalStorage.getItem('theme') === 'dark') |
19 | console.log(this.darkTheme) | ||
20 | if (this.darkTheme) this.toggleDarkTheme(false) | 19 | if (this.darkTheme) this.toggleDarkTheme(false) |
21 | } | 20 | } |
22 | 21 | ||