mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-15 14:03:06 +00:00
97399 Improvements to ContextHelpDirective and ContextHelpWrapperComponent
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
<ng-container *ngVar="(communitiesRD$ | async) as communitiesRD">
|
<ng-container *ngVar="(communitiesRD$ | async) as communitiesRD">
|
||||||
<div *ngIf="communitiesRD?.hasSucceeded ">
|
<div *ngIf="communitiesRD?.hasSucceeded ">
|
||||||
<h2>
|
<h2>
|
||||||
<span *dsContextHelp="'context-help.multi-para.test'"
|
<span *dsContextHelp="{content: 'context-help.multi-para.test',
|
||||||
dsTooltipPlacment="right left">
|
tooltipPlacement: 'top',
|
||||||
{{'home.top-level-communities.head' | translate}}</span>
|
iconPlacement: 'right'}">
|
||||||
|
{{'home.top-level-communities.head' | translate}}</span>
|
||||||
</h2>
|
</h2>
|
||||||
<p class="lead">{{'home.top-level-communities.help' | translate}}</p>
|
<p class="lead">{{'home.top-level-communities.help' | translate}}</p>
|
||||||
<ds-viewable-collection
|
<ds-viewable-collection
|
||||||
|
@@ -1,26 +1,12 @@
|
|||||||
<!-- Set tooltip text. -->
|
|
||||||
<ng-template #help>
|
<ng-template #help>
|
||||||
<div class="preserve-line-breaks ds-context-help-content">{{ content | translate }}</div>
|
<div class="preserve-line-breaks ds-context-help-content">{{ content | translate }}</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
<i [ngClass]="{'ds-context-help-icon fas fa-question-circle shadow-sm': true,
|
||||||
<!-- Help icon, add tooltip to help icon. -->
|
'ds-context-help-icon-right': iconPlacement == 'right',
|
||||||
<i class="ds-context-help-icon fas fa-question-circle shadow-sm"
|
'ds-context-help-icon-left': iconPlacement == 'left'}"
|
||||||
[ngbTooltip]="help"
|
[ngbTooltip]="help"
|
||||||
|
[placement]="tooltipPlacement"
|
||||||
container="'body'"
|
container="'body'"
|
||||||
triggers="click:blur">
|
triggers="click:blur">
|
||||||
</i>
|
</i>
|
||||||
|
|
||||||
<!-- Indicate where to put the template (that is, the contents of
|
|
||||||
whatever component the context help directive was used on).
|
|
||||||
-->
|
|
||||||
<ng-container *ngTemplateOutlet="templateRef"></ng-container>
|
<ng-container *ngTemplateOutlet="templateRef"></ng-container>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <i class="ds-context-help-icon fas fa-question-circle shadow-sm"></i> -->
|
|
||||||
<!-- <ng-container *ngTemplateOutlet="templateRef"></ng-container> -->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- *ngClass="{'ds-context-help-icon-right': tooltipPlacement === 'right', 'ds-context-help-icon-left': tooltipPlacement === 'left'}" -->
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -3,21 +3,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ds-context-help-icon {
|
.ds-context-help-icon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
color: var(--bs-info);
|
||||||
|
background-color: var(--bs-white);
|
||||||
|
font-size: 16px; // not relative, because we don't want the icon to resize based on the container
|
||||||
|
line-height: 1;
|
||||||
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.ds-context-help-icon-left {
|
.ds-context-help-icon-left {
|
||||||
left: var(--ds-context-x-offset);
|
left: var(--ds-context-x-offset);
|
||||||
color: var(--bs-info);
|
|
||||||
background-color: var(--bs-white);
|
|
||||||
font-size: (--dscontext-help-icon-size);
|
|
||||||
line-height: 1;
|
|
||||||
border-radius: 50%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ds-context-help-icon-right {
|
.ds-context-help-icon-right {
|
||||||
right: var(--ds-context-icon-width);
|
right: calc(-1 * var(--ds-context-help-icon-size));
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep .tooltip-inner {
|
::ng-deep .tooltip-inner {
|
||||||
|
@@ -1,23 +1,20 @@
|
|||||||
import { Component, Input, OnInit, TemplateRef } from '@angular/core';
|
import { Component, Input, OnInit, TemplateRef } from '@angular/core';
|
||||||
import { PlacementArray } from '@ng-bootstrap/ng-bootstrap/util/positioning';
|
import { PlacementArray } from '@ng-bootstrap/ng-bootstrap/util/positioning';
|
||||||
|
import { PlacementDir } from './placement-dir.model';
|
||||||
|
|
||||||
|
// export type PlacementDir = 'left' | 'right';
|
||||||
|
|
||||||
export type PlacementDir = 'left' | 'right';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-context-help-wrapper',
|
selector: 'ds-context-help-wrapper',
|
||||||
templateUrl: './context-help-wrapper.component.html',
|
templateUrl: './context-help-wrapper.component.html',
|
||||||
styleUrls: ['./context-help-wrapper.component.scss']
|
styleUrls: ['./context-help-wrapper.component.scss'],
|
||||||
})
|
})
|
||||||
export class ContextHelpWrapperComponent implements OnInit {
|
export class ContextHelpWrapperComponent {
|
||||||
@Input() templateRef: TemplateRef<any>;
|
@Input() templateRef: TemplateRef<any>;
|
||||||
@Input() content: string;
|
@Input() content: string;
|
||||||
@Input() tooltipPlacement: PlacementArray; // TODO: type
|
@Input() tooltipPlacement: PlacementArray;
|
||||||
// @Input('iconPlacement') iconPlacement: string;
|
@Input() iconPlacement: PlacementDir;
|
||||||
|
|
||||||
constructor() { }
|
constructor() { }
|
||||||
|
|
||||||
ngOnInit(): void {
|
|
||||||
// console.log("In ContextHelpWrapperComponent.ngOnInit:", this.content); // XXX
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1 @@
|
|||||||
|
export type PlacementDir = 'left' | 'right';
|
@@ -1,29 +1,39 @@
|
|||||||
import { ComponentFactoryResolver, ComponentRef, Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
|
import { ComponentFactoryResolver, ComponentRef, Directive, ElementRef, Input, OnChanges, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
|
||||||
import { PlacementArray } from '@ng-bootstrap/ng-bootstrap/util/positioning';
|
import { PlacementArray } from '@ng-bootstrap/ng-bootstrap/util/positioning';
|
||||||
import { ContextHelpWrapperComponent, PlacementDir } from './context-help-wrapper/context-help-wrapper.component';
|
import { ContextHelpWrapperComponent } from './context-help-wrapper/context-help-wrapper.component';
|
||||||
|
import { PlacementDir } from './context-help-wrapper/placement-dir.model';
|
||||||
|
|
||||||
|
export type ContextHelpDirectiveInput = {
|
||||||
|
content: string,
|
||||||
|
tooltipPlacement?: PlacementArray,
|
||||||
|
iconPlacement?: PlacementDir
|
||||||
|
}
|
||||||
|
|
||||||
@Directive({
|
@Directive({
|
||||||
selector: '[dsContextHelp]'
|
selector: '[dsContextHelp]',
|
||||||
})
|
})
|
||||||
export class ContextHelpDirective implements OnInit {
|
export class ContextHelpDirective implements OnChanges {
|
||||||
@Input('dsContextHelp') content: string;
|
@Input() dsContextHelp: string | ContextHelpDirectiveInput;
|
||||||
@Input('dsTooltipPlacement') tooltipPlacement: PlacementArray;
|
|
||||||
// @Input('iconPlacement') iconPlacement: PlacementDir;
|
|
||||||
|
|
||||||
protected wrapper: ComponentRef<ContextHelpWrapperComponent>;
|
protected wrapper: ComponentRef<ContextHelpWrapperComponent>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private templateRef: TemplateRef<any>,
|
private templateRef: TemplateRef<any>,
|
||||||
private viewContainerRef: ViewContainerRef,
|
private viewContainerRef: ViewContainerRef,
|
||||||
private componentFactoryResolver: ComponentFactoryResolver
|
private componentFactoryResolver: ComponentFactoryResolver,
|
||||||
){}
|
){}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnChanges() {
|
||||||
|
const input: ContextHelpDirectiveInput = typeof(this.dsContextHelp) === 'string'
|
||||||
|
? {content: this.dsContextHelp}
|
||||||
|
: this.dsContextHelp;
|
||||||
|
|
||||||
const factory
|
const factory
|
||||||
= this.componentFactoryResolver.resolveComponentFactory(ContextHelpWrapperComponent);
|
= this.componentFactoryResolver.resolveComponentFactory(ContextHelpWrapperComponent);
|
||||||
this.wrapper = this.viewContainerRef.createComponent(factory);
|
this.wrapper = this.viewContainerRef.createComponent(factory);
|
||||||
this.wrapper.instance.templateRef = this.templateRef;
|
this.wrapper.instance.templateRef = this.templateRef;
|
||||||
this.wrapper.instance.content = this.content;
|
this.wrapper.instance.content = input.content;
|
||||||
this.wrapper.instance.tooltipPlacement = this.tooltipPlacement;
|
this.wrapper.instance.tooltipPlacement = input.tooltipPlacement;
|
||||||
|
this.wrapper.instance.iconPlacement = input.iconPlacement;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -180,6 +180,7 @@ import { LogInOidcComponent } from './log-in/methods/oidc/log-in-oidc.component'
|
|||||||
import { ContextHelpDirective } from './context-help.directive';
|
import { ContextHelpDirective } from './context-help.directive';
|
||||||
import { ContextHelpWrapperComponent } from './context-help-wrapper/context-help-wrapper.component';
|
import { ContextHelpWrapperComponent } from './context-help-wrapper/context-help-wrapper.component';
|
||||||
|
|
||||||
|
|
||||||
const MODULES = [
|
const MODULES = [
|
||||||
// Do NOT include UniversalModule, HttpModule, or JsonpModule here
|
// Do NOT include UniversalModule, HttpModule, or JsonpModule here
|
||||||
CommonModule,
|
CommonModule,
|
||||||
|
@@ -87,5 +87,5 @@
|
|||||||
--ds-search-form-scope-max-width: 150px;
|
--ds-search-form-scope-max-width: 150px;
|
||||||
|
|
||||||
--ds-context-x-offset: -16px;
|
--ds-context-x-offset: -16px;
|
||||||
--dscontext-help-icon-size: 16px;
|
--ds-context-help-icon-size: 16px;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user