UI: Update <a> tags to LinkTo's (#17866)

* chore: shared external link component, glimmerization

* chore: update easy a tags

* chore: update other a tags

* chore: lil cleanup

* changelog
This commit is contained in:
Chelsea Shaw 2022-11-11 09:56:44 -06:00 committed by GitHub
parent 1bae5eed3e
commit 0589dc1f53
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 105 additions and 78 deletions

3
changelog/17866.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:improvement
ui: consolidate all <a> tag usage
```

View File

@ -310,7 +310,7 @@
<Chevron @direction="left" /> <Chevron @direction="left" />
Go back Go back
</LinkTo> </LinkTo>
<a href="https://www.vaultproject.io/api/secret/databases" target="_blank" rel="noreferrer noopener">Documentation</a> <DocLink @path="/api/secret/databases">Documentation</DocLink>
</EmptyState> </EmptyState>
{{else}} {{else}}
{{#each @model.showAttrs as |attr|}} {{#each @model.showAttrs as |attr|}}

View File

@ -10,13 +10,9 @@
}}. Add a new license to your configuration and restart Vault." }}. Add a new license to your configuration and restart Vault."
@marginless={{true}} @marginless={{true}}
> >
<a <LearnLink @path="/tutorials/nomad/hashicorp-enterprise-license">
href="https://learn.hashicorp.com/tutorials/nomad/hashicorp-enterprise-license"
target="_blank"
rel="noreferrer noopener"
>
Read documentation Read documentation
</a> </LearnLink>
</AlertBanner> </AlertBanner>
</div> </div>
{{else if (lte this.licenseExpiringInDays 30)}} {{else if (lte this.licenseExpiringInDays 30)}}
@ -35,13 +31,9 @@
}}" }}"
@marginless={{true}} @marginless={{true}}
> >
<a <LearnLink @path="/tutorials/nomad/hashicorp-enterprise-license">
href="https://learn.hashicorp.com/tutorials/nomad/hashicorp-enterprise-license"
target="_blank"
rel="noreferrer noopener"
>
Read documentation Read documentation
</a> </LearnLink>
</AlertBanner> </AlertBanner>
</div> </div>
{{/if}} {{/if}}

View File

@ -4,9 +4,9 @@
<p data-test-link-status> <p data-test-link-status>
{{#if (eq this.state "connected")}} {{#if (eq this.state "connected")}}
This self-managed Vault is linked to This self-managed Vault is linked to
<a href="https://portal.cloud.hashicorp.com/sign-in" target="_blank" rel="noopener noreferrer"> <ExternalLink @href="https://portal.cloud.hashicorp.com/sign-in">
HCP. HCP.
</a> </ExternalLink>
{{else}} {{else}}
There was an error connecting to HCP. Click There was an error connecting to HCP. Click
<button type="button" class="text-button is-underline" {{on "click" (fn (mut this.showModal))}}> <button type="button" class="text-button is-underline" {{on "click" (fn (mut this.showModal))}}>

View File

@ -1,4 +1,9 @@
<a href={{this.namespaceLink}} class={{concat "is-block " this.class}} data-test-namespace-link={{this.normalizedNamespace}}> <ExternalLink
@href={{this.namespaceLink}}
@sameTab={{true}}
class={{concat "is-block " this.class}}
data-test-namespace-link={{this.normalizedNamespace}}
>
{{#if (has-block)}} {{#if (has-block)}}
{{yield}} {{yield}}
{{else}} {{else}}
@ -9,4 +14,4 @@
</span> </span>
</div> </div>
{{/if}} {{/if}}
</a> </ExternalLink>

View File

@ -208,9 +208,9 @@
</p> </p>
{{#each this.downloadHrefs as |dl|}} {{#each this.downloadHrefs as |dl|}}
<div class="box is-shadowless is-marginless is-fullwidth has-slim-padding"> <div class="box is-shadowless is-marginless is-fullwidth has-slim-padding">
<a data-test-ca-download-link href={{dl.url}} download={{dl.name}}> <ExternalLink @href={{dl.url}} @sameTab={{true}} download={{dl.name}} data-test-ca-download-link>
{{dl.display}} {{dl.display}}
</a> </ExternalLink>
</div> </div>
{{/each}} {{/each}}

View File

@ -21,12 +21,13 @@
<ul class="menu-list"> <ul class="menu-list">
<li class="action"> <li class="action">
{{#if this.useServiceWorker}} {{#if this.useServiceWorker}}
<a <ExternalLink
href="/v1/sys/storage/raft/snapshot" @href="/v1/sys/storage/raft/snapshot"
@sameTab={{true}}
onclick={{queue (action "downloadViaServiceWorker") (action D.actions.close)}} onclick={{queue (action "downloadViaServiceWorker") (action D.actions.close)}}
> >
Download Download
</a> </ExternalLink>
{{else}} {{else}}
<button <button
type="button" type="button"

View File

@ -12,13 +12,9 @@
<p> <p>
Using your template's regex as a starting point, you can specify which parts of your input to encode and decode. For Using your template's regex as a starting point, you can specify which parts of your input to encode and decode. For
example, you may want to handle input formatting or only decode part of an input. For more information, see example, you may want to handle input formatting or only decode part of an input. For more information, see
<a <LearnLink @path="/tutorials/vault/transform#advanced-handling">
href="https://learn.hashicorp.com/tutorials/vault/transform#advanced-handling"
target="_blank"
rel="noopener noreferrer"
>
our documentation. our documentation.
</a> </LearnLink>
</p> </p>
<div class="has-top-margin-l"> <div class="has-top-margin-l">
<RegexValidator <RegexValidator

View File

@ -7,22 +7,22 @@
HashiCorp HashiCorp
</span> </span>
<span> <span>
<a href={{changelog-url-for this.activeCluster.leaderNode.version}} class="link has-text-grey"> <ExternalLink @href={{changelog-url-for this.activeCluster.leaderNode.version}} class="link has-text-grey">
Vault Vault
{{this.activeCluster.leaderNode.version}} {{this.activeCluster.leaderNode.version}}
</a> </ExternalLink>
</span> </span>
{{#if (is-version "OSS")}} {{#if (is-version "OSS")}}
<span> <span>
<a href="https://hashicorp.com/products/vault/trial?source=vaultui" class="link has-text-grey"> <ExternalLink @href="https://hashicorp.com/products/vault/trial?source=vaultui" class="link has-text-grey">
Upgrade to Vault Enterprise Upgrade to Vault Enterprise
</a> </ExternalLink>
</span> </span>
{{/if}} {{/if}}
<span> <span>
<a class="has-text-grey" target="_blank" rel="noreferrer noopener" href="https://www.vaultproject.io/docs/index.html"> <DocLink @path="/docs/index.html" class="has-text-grey">
Documentation Documentation
</a> </DocLink>
</span> </span>
</footer> </footer>
{{#if (eq this.env "development")}} {{#if (eq this.env "development")}}

View File

@ -22,13 +22,9 @@
@message="Your Vault license has terminated and Vault is sealed. To unseal, add a current license to your configuration and restart Vault." @message="Your Vault license has terminated and Vault is sealed. To unseal, add a current license to your configuration and restart Vault."
> >
<p class="align-right"> <p class="align-right">
<a <LearnLink @path="/tutorials/nomad/hashicorp-enterprise-license">
href="https://learn.hashicorp.com/tutorials/nomad/hashicorp-enterprise-license"
target="_blank"
rel="noreferrer noopener"
>
License documentation License documentation
</a> </LearnLink>
</p> </p>
</EmptyState> </EmptyState>
</div> </div>
@ -67,9 +63,9 @@
<Page.footer> <Page.footer>
<div class="box is-borderless is-shadowless"> <div class="box is-borderless is-shadowless">
<p> <p>
<a target="_blank" rel="noreferrer noopener" href="https://www.vaultproject.io/docs/concepts/seal"> <ExternalLink @href="https://www.vaultproject.io/docs/concepts/seal">
Seal/unseal documentation Seal/unseal documentation
</a> </ExternalLink>
</p> </p>
</div> </div>
</Page.footer> </Page.footer>

View File

@ -1,10 +1,8 @@
import Component from '@ember/component'; import ExternalLink from './external-link';
import { computed } from '@ember/object';
import hbs from 'htmlbars-inline-precompile';
/** /**
* @module DocLink * @module DocLink
* `DocLink` components are used to render anchor links to relevant Vault documentation. * `DocLink` components are used to render anchor links to relevant Vault documentation at vaultproject.io.
* *
* @example * @example
* ```js * ```js
@ -14,20 +12,10 @@ import hbs from 'htmlbars-inline-precompile';
* @param path="/"{String} - The path to documentation on vaultproject.io that the component should link to. * @param path="/"{String} - The path to documentation on vaultproject.io that the component should link to.
* *
*/ */
export default class DocLinkComponent extends ExternalLink {
host = 'https://www.vaultproject.io';
export default Component.extend({ get href() {
tagName: 'a', return `${this.host}${this.args.path}`;
classNames: ['doc-link'], }
attributeBindings: ['target', 'rel', 'href'], }
layout: hbs`{{yield}}`,
target: '_blank',
rel: 'noreferrer noopener',
host: 'https://www.vaultproject.io',
path: '/',
href: computed('host', 'path', function () {
return `${this.host}${this.path}`;
}),
});

View File

@ -0,0 +1,9 @@
{{#if @sameTab}}
<a href={{this.href}} ...attributes>
{{yield}}
</a>
{{else}}
<a href={{this.href}} target="_blank" rel="noopener noreferrer" class="doc-link" ...attributes>
{{yield}}
</a>
{{/if}}

View File

@ -0,0 +1,21 @@
import Component from '@glimmer/component';
/**
* @module ExternalLinkComponent
* `ExternalLink` components are used to render anchor links to non-cluster links. Automatically opens in a new tab with noopener noreferrer.
* To link to vaultproject.io, use DocLink. To link to learn.hashicorp.com, use LearnLink.
*
* @example
* ```js
<ExternalLink @href="https://hashicorp.com">Arbitrary Link</ExternalLink>
* ```
*
* @param href="https://example.com/"{String} - The full href with protocol
* @param sameTab=false {Boolean} - by default, these links open in new tab. To override, pass @sameTab={{true}}
*
*/
export default class ExternalLinkComponent extends Component {
get href() {
return this.args.href;
}
}

View File

@ -1,5 +1,22 @@
import DocLink from './doc-link'; import ExternalLink from './external-link';
export default DocLink.extend({ /**
host: 'https://learn.hashicorp.com', * @module LearnLink
}); * `LearnLink` components are used to render anchor links to relevant Vault learn documentation at learn.hashicorp.com.
*
* @example
* ```js
<LearnLink @path="/docs/secrets/kv/kv-v2.html">Learn about KV v2</LearnLink>
* ```
*
* @param path="/"{String} - The path to documentation on learn.hashicorp.com that the component should link to.
*
*/
export default class LearnLinkComponent extends ExternalLink {
host = 'https://learn.hashicorp.com';
get href() {
return `${this.host}${this.args.path}`;
}
}

View File

@ -60,14 +60,14 @@
Performance Replication is a feature of Vault Enterprise Premium. Performance Replication is a feature of Vault Enterprise Premium.
</p> </p>
<p class="has-text-centered"> <p class="has-text-centered">
<a <ExternalLink
href="https://hashicorp.com/products/vault/trial?source=vaultui_Performance%20Replication" @href="https://hashicorp.com/products/vault/trial?source=vaultui_Performance%20Replication"
class="button is-ghost has-icon-right" class="button is-ghost has-icon-right"
data-test-upgrade-link="true" data-test-upgrade-link
> >
Learn more Learn more
<Chevron /> <Chevron />
</a> </ExternalLink>
</p> </p>
{{else if this.replicationEnabled}} {{else if this.replicationEnabled}}
<h6 class="title is-6 is-uppercase"> <h6 class="title is-6 is-uppercase">

View File

@ -85,10 +85,10 @@
</div> </div>
{{#if (and this.primaryUiUrl this.knownPrimaryClusterAddrs)}} {{#if (and this.primaryUiUrl this.knownPrimaryClusterAddrs)}}
<div class="grid-item-top-right"> <div class="grid-item-top-right">
<a href={{concat this.primaryUiUrl "/ui/"}} class="toolbar-link" data-test-primary-link> <ExternalLink @href={{concat this.primaryUiUrl "/ui/"}} class="toolbar-link" data-test-primary-link>
View primary cluster View primary cluster
<Icon @name="chevron-right" /> <Icon @name="chevron-right" />
</a> </ExternalLink>
</div> </div>
{{/if}} {{/if}}
<div class="grid-item-second-row"> <div class="grid-item-second-row">

View File

@ -10,14 +10,12 @@
@title="Upgrade to use {{this.featureName}}" @title="Upgrade to use {{this.featureName}}"
@message="You will need {{this.minimumEdition}} with {{this.featureName}} included to use this feature." @message="You will need {{this.minimumEdition}} with {{this.featureName}} included to use this feature."
> >
<a <ExternalLink
href="https://www.hashicorp.com/products/vault/enterprise?source=vaultui_{{this.featureName}}" @href="https://www.hashicorp.com/products/vault/enterprise?source=vaultui_{{this.featureName}}"
class="link has-icon-right" class="link has-icon-right"
target="_blank" data-test-upgrade-link
rel="noopener noreferrer"
data-test-upgrade-link="true"
> >
Vault Enterprise Vault Enterprise
<Chevron /> <Chevron />
</a> </ExternalLink>
</EmptyState> </EmptyState>

View File

@ -0,0 +1 @@
export { default } from 'core/components/external-link';