diff --git a/apps/red-ui/src/app/components/help-mode-dialog/help-mode-dialog.component.html b/apps/red-ui/src/app/components/help-mode-dialog/help-mode-dialog.component.html
index 324dba8cd..58470ee76 100644
--- a/apps/red-ui/src/app/components/help-mode-dialog/help-mode-dialog.component.html
+++ b/apps/red-ui/src/app/components/help-mode-dialog/help-mode-dialog.component.html
@@ -1,6 +1,8 @@
-
-
-
+
+
+

+
+
diff --git a/apps/red-ui/src/app/components/help-mode-dialog/help-mode-dialog.component.scss b/apps/red-ui/src/app/components/help-mode-dialog/help-mode-dialog.component.scss
index 7658ba88b..3a3a69d4e 100644
--- a/apps/red-ui/src/app/components/help-mode-dialog/help-mode-dialog.component.scss
+++ b/apps/red-ui/src/app/components/help-mode-dialog/help-mode-dialog.component.scss
@@ -1,31 +1,18 @@
@import '../../../assets/styles/variables';
section {
- height: 90%;
background: $grey-11;
display: flex;
- flex-direction: column;
justify-content: center;
- align-items: center;
}
-.welcome-to-help-mode {
- height: 78px;
+.content {
width: 440px;
- font-size: 20px;
- font-weight: 600;
- letter-spacing: 0;
- line-height: 26px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
text-align: center;
padding-top: 20px;
-}
-
-.clicking-anywhere-on {
- height: 54px;
- width: 440px;
- font-size: 13px;
- letter-spacing: 0;
- line-height: 18px;
- text-align: center;
padding-bottom: 30px;
+ line-height: 18px;
}
diff --git a/apps/red-ui/src/app/components/help-mode/help-mode.component.html b/apps/red-ui/src/app/components/help-mode/help-mode.component.html
index 18dd783f9..cc3de9335 100644
--- a/apps/red-ui/src/app/components/help-mode/help-mode.component.html
+++ b/apps/red-ui/src/app/components/help-mode/help-mode.component.html
@@ -1,20 +1,16 @@
-
+
diff --git a/apps/red-ui/src/app/components/help-mode/help-mode.component.scss b/apps/red-ui/src/app/components/help-mode/help-mode.component.scss
index 9d76eb43c..6b4d04a32 100644
--- a/apps/red-ui/src/app/components/help-mode/help-mode.component.scss
+++ b/apps/red-ui/src/app/components/help-mode/help-mode.component.scss
@@ -14,6 +14,7 @@
display: flex;
align-items: center;
justify-content: center;
+ transition: all 0.25s;
}
.help-button:hover {
@@ -45,7 +46,6 @@
border-bottom: 60px solid $green-2;
z-index: 10;
position: absolute;
- pointer-events: none;
display: flex;
justify-content: center;
diff --git a/apps/red-ui/src/app/components/help-mode/help-mode.component.ts b/apps/red-ui/src/app/components/help-mode/help-mode.component.ts
index 9cae62bc8..c50754e22 100644
--- a/apps/red-ui/src/app/components/help-mode/help-mode.component.ts
+++ b/apps/red-ui/src/app/components/help-mode/help-mode.component.ts
@@ -9,14 +9,22 @@ import { HelpModeService } from '@shared/services/help-mode.service';
export class HelpModeComponent {
constructor(readonly helpModeService: HelpModeService) {}
- activateHelpMode() {
- this.helpModeService.isHelpModeActive = true;
- this.helpModeService.openHelpModeDialog();
+ @HostListener('document:keydown.escape') onEscKeydownHandler() {
+ if (!this.helpModeService.helpModeDialogIsOpened) {
+ this.helpModeService.deactivateHelpMode();
+ }
}
- @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {
- if (!this.helpModeService.helpModeDialogIsOpened) {
- this.helpModeService.isHelpModeActive = false;
+ @HostListener('document:keydown.h', ['$event']) onHKeydownHandler(event) {
+ const node = event?.target?.nodeName?.toLocaleLowerCase();
+ if (!this.helpModeService.isHelpModeActive && node !== 'input' && node !== 'textarea') {
+ this.helpModeService.activateHelpMode();
+ }
+ }
+
+ @HostListener('click') onClick() {
+ if (this.helpModeService.isHelpModeActive) {
+ this.helpModeService.highlightHelperElements();
}
}
}
diff --git a/apps/red-ui/src/app/modules/shared/directives/help-mode.directive.ts b/apps/red-ui/src/app/modules/shared/directives/help-mode.directive.ts
index abb5ae7d4..dfc6d0f9f 100644
--- a/apps/red-ui/src/app/modules/shared/directives/help-mode.directive.ts
+++ b/apps/red-ui/src/app/modules/shared/directives/help-mode.directive.ts
@@ -1,4 +1,4 @@
-import { Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';
+import { Directive, ElementRef, HostListener, Input, OnInit, Renderer2 } from '@angular/core';
import { HelpModeService } from '@shared/services/help-mode.service';
import * as links from '../../../../assets/help-mode/links.json';
import { LanguageService } from '@i18n/language.service';
@@ -7,9 +7,8 @@ import { LanguageService } from '@i18n/language.service';
selector: '[redactionHelpMode]',
exportAs: 'redactionHelpMode'
})
-export class HelpModeDirective {
- @Input('redactionHelpMode') element: string;
- private _lastChildCreated = null;
+export class HelpModeDirective implements OnInit {
+ @Input('redactionHelpMode') elementName: string;
constructor(
private readonly _elementRef: ElementRef,
@@ -18,37 +17,24 @@ export class HelpModeDirective {
private readonly _languageService: LanguageService
) {}
+ ngOnInit(): void {
+ this._createHelperElement();
+ }
+
+ private _createHelperElement() {
+ const element = this._elementRef.nativeElement;
+
+ const helperElement = this._renderer.createElement('div');
+ this._renderer.addClass(helperElement, 'help-mode-on-mouse-over');
+ this._renderer.addClass(helperElement, `help-mode-on-mouse-over-${this.elementName}`);
+
+ this._helpModeService.addElement(this.elementName, element, helperElement);
+ }
+
@HostListener('click') onClick() {
if (this._helpModeService.isHelpModeActive) {
const currentLocale = this._languageService.currentLanguage;
- window.open(links[this.element][currentLocale]);
- }
- }
-
- @HostListener('mouseover') onMouseOver() {
- if (this._helpModeService.isHelpModeActive && !this._lastChildCreated) {
- const element = this._elementRef.nativeElement;
- this._renderer.setStyle(element, 'position', 'relative');
-
- this._lastChildCreated = this._renderer.createElement('div');
- this._renderer.addClass(this._lastChildCreated, 'help-mode-on-mouse-over');
- this._renderer.addClass(this._lastChildCreated, `help-mode-on-mouse-over-${this.element}`);
-
- if (this.element === 'quick-filters') {
- this._renderer.insertBefore(element, this._lastChildCreated, element.firstChild);
- } else {
- this._renderer.appendChild(element, this._lastChildCreated);
- }
- }
- }
-
- @HostListener('mouseleave') onMouseLeave() {
- if (this._helpModeService.isHelpModeActive && this._lastChildCreated) {
- const element = this._elementRef.nativeElement;
- this._renderer.removeStyle(element, 'position');
-
- this._renderer.removeChild(element, this._lastChildCreated);
- this._lastChildCreated = null;
+ window.open(links[this.elementName][currentLocale]);
}
}
}
diff --git a/apps/red-ui/src/app/modules/shared/services/help-mode.service.ts b/apps/red-ui/src/app/modules/shared/services/help-mode.service.ts
index 716e54776..ead68d7c8 100644
--- a/apps/red-ui/src/app/modules/shared/services/help-mode.service.ts
+++ b/apps/red-ui/src/app/modules/shared/services/help-mode.service.ts
@@ -1,7 +1,16 @@
-import { Injectable } from '@angular/core';
+import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';
import { HelpModeDialogComponent } from '@components/help-mode-dialog/help-mode-dialog.component';
import { MatDialog } from '@angular/material/dialog';
+interface Helper {
+ readonly element: HTMLElement;
+ readonly helperElement: HTMLElement;
+}
+
+interface HelpElement {
+ [key: string]: Helper;
+}
+
@Injectable({
providedIn: 'root'
})
@@ -9,7 +18,13 @@ export class HelpModeService {
isHelpModeActive = false;
helpModeDialogIsOpened = false;
- constructor(private readonly _dialog: MatDialog) {}
+ private _elements: HelpElement = {};
+
+ private readonly _renderer: Renderer2;
+
+ constructor(private readonly _dialog: MatDialog, private readonly _rendererFactory: RendererFactory2) {
+ this._renderer = this._rendererFactory.createRenderer(null, null);
+ }
openHelpModeDialog() {
this.helpModeDialogIsOpened = true;
@@ -22,4 +37,42 @@ export class HelpModeService {
this.helpModeDialogIsOpened = false;
});
}
+
+ activateHelpMode() {
+ this.isHelpModeActive = true;
+ this.openHelpModeDialog();
+ this._enableHelperElements();
+ }
+
+ deactivateHelpMode() {
+ this.isHelpModeActive = false;
+ this._disableHelperElements();
+ }
+
+ highlightHelperElements() {
+ for (const { helperElement } of Object.values(this._elements)) {
+ this._renderer.addClass(helperElement, 'highlight');
+ setTimeout(() => {
+ this._renderer.removeClass(helperElement, 'highlight');
+ }, 500);
+ }
+ }
+
+ addElement(elementName: string, element: HTMLElement, helperElement: HTMLElement) {
+ this._elements[elementName] = { element, helperElement };
+ }
+
+ private _enableHelperElements() {
+ for (const { element, helperElement } of Object.values(this._elements)) {
+ this._renderer.setStyle(element, 'position', 'relative');
+ this._renderer.appendChild(element, helperElement);
+ }
+ }
+
+ private _disableHelperElements() {
+ for (const { element, helperElement } of Object.values(this._elements)) {
+ this._renderer.removeStyle(element, 'position');
+ this._renderer.removeChild(element, helperElement);
+ }
+ }
}
diff --git a/apps/red-ui/src/assets/styles/red-help-mode.scss b/apps/red-ui/src/assets/styles/red-help-mode.scss
index d36937a1f..c0958a77e 100644
--- a/apps/red-ui/src/assets/styles/red-help-mode.scss
+++ b/apps/red-ui/src/assets/styles/red-help-mode.scss
@@ -1,9 +1,7 @@
@import 'variables';
.help-mode-on-mouse-over {
- background: rgba(92, 229, 148, 0.5);
- z-index: 1;
- box-shadow: 0 0 0 2px $green-2 inset;
+ z-index: 100;
position: absolute;
top: -5px;
left: -5px;
@@ -11,6 +9,13 @@
height: 100%;
padding-right: 5px;
padding-bottom: 10px;
+ transition: all 0.25s;
+}
+
+.highlight,
+.help-mode-on-mouse-over:hover {
+ background: rgba(92, 229, 148, 0.5);
+ box-shadow: 0 0 0 2px $green-2 inset;
cursor: help;
}
@@ -20,7 +25,6 @@
padding-right: 10px;
}
-.help-mode-on-mouse-over-search,
.help-mode-on-mouse-over-notifications {
padding-left: 4px;
}