Add the PrivacyLink component.
This commit is contained in:
parent
f8d8502c0c
commit
c6ed3023e8
|
@ -0,0 +1,2 @@
|
|||
// Link Exports
|
||||
export {PrivacyLink, PrivacyLinkProps} from './links/privacy-link.js';
|
|
@ -0,0 +1,29 @@
|
|||
import {html} from 'htm/preact';
|
||||
import {Component, ComponentChildren, VNode} from 'preact';
|
||||
|
||||
/**
|
||||
* Component properties for {@linkcode PrivacyLink}.
|
||||
*/
|
||||
export type PrivacyLinkProps = {
|
||||
children: ComponentChildren;
|
||||
class: string;
|
||||
href: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* A simple {@linkcode https://developer.mozilla.org/docs/Web/HTML/Element/a <a>}
|
||||
* element wrapper with `rel="noopener noreferrer"` and `target="_blank"`
|
||||
* already set.
|
||||
*/
|
||||
export class PrivacyLink extends Component<PrivacyLinkProps> {
|
||||
render(): VNode {
|
||||
const props: Record<string, string> = {
|
||||
class: this.props.class,
|
||||
href: this.props.href,
|
||||
rel: 'noopener noreferrer',
|
||||
target: '_blank',
|
||||
};
|
||||
|
||||
return html`<a ...${props}>${this.props.children}</a>`;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
import test from 'ava';
|
||||
import {html} from 'htm/preact';
|
||||
import {render} from 'preact-render-to-string';
|
||||
|
||||
import {PrivacyLink} from '../../source/gram.js';
|
||||
|
||||
test('PrivacyLink', (t) => {
|
||||
t.snapshot(render(html`<${PrivacyLink} />`), 'Empty');
|
||||
|
||||
t.snapshot(
|
||||
render(html`<${PrivacyLink} href="https://example.org">Example<//>`),
|
||||
'Text children',
|
||||
);
|
||||
|
||||
t.snapshot(
|
||||
render(
|
||||
html`
|
||||
<${PrivacyLink} href="https://example.org">
|
||||
Example <span class="bold">with children</span>
|
||||
<//>
|
||||
`,
|
||||
),
|
||||
'HTML children',
|
||||
);
|
||||
|
||||
t.snapshot(
|
||||
render(
|
||||
html`
|
||||
<${PrivacyLink} class="bold italic" href="https://example.org">
|
||||
Example
|
||||
<//>
|
||||
`,
|
||||
),
|
||||
'CSS class',
|
||||
);
|
||||
});
|
|
@ -0,0 +1,23 @@
|
|||
# Snapshot report for `tests/links/privacy-link.test.ts`
|
||||
|
||||
The actual snapshot is saved in `privacy-link.test.ts.snap`.
|
||||
|
||||
Generated by [AVA](https://avajs.dev).
|
||||
|
||||
## PrivacyLink
|
||||
|
||||
> Empty
|
||||
|
||||
'<a rel="noopener noreferrer" target="_blank"></a>'
|
||||
|
||||
> Text children
|
||||
|
||||
'<a href="https://example.org" rel="noopener noreferrer" target="_blank">Example</a>'
|
||||
|
||||
> HTML children
|
||||
|
||||
'<a href="https://example.org" rel="noopener noreferrer" target="_blank">Example <span class="bold">with children</span></a>'
|
||||
|
||||
> CSS class
|
||||
|
||||
'<a class="bold italic" href="https://example.org" rel="noopener noreferrer" target="_blank">Example</a>'
|
Binary file not shown.
Loading…
Reference in New Issue