By calling the function segmentEmailAdresses(), “breaking points” (``) are automatically added to the labels of existing email addresses.
Rules:
Examples:
name@<wbr>my-domain.com
firstname.<wbr>lastname@<wbr>my-domain.com
f.lastname@<wbr>my-domain.com
firstname.l@<wbr>my-domain.com
firstname.a.<wbr>lastname@<wbr>my-domain.com
<!-- Default -->
<a href="#" class="link"><span class="link-label">sprechender Link im Text</span></a>
<!-- With Target -->
<a href="#" class="link" target="_blank"><span class="link-label" data-annotation="öffnet in neuer Registerkarte">Link</span></a>
<!-- Annotation -->
<a href="#" class="link"><span class="link-label" data-annotation="PDF-Datei">Link mit einer Anmerkung</span></a>
<!-- Download -->
<a href="#" class="link" download><span class="link-label" data-annotation="PDF-Datei herunterladen">Link</span></a>
<!-- External -->
<a href="https://" class="link" rel="external"><span class="link-label">Link zu anderer Website</span></a>
<!-- Email -->
<a href="mailto:firstname.a.lastname@my-domain.com" class="link"><span class="link-label">firstname.a.lastname@my-domain.com</span></a>
<!-- Phone -->
<a href="tel:0123-456789" class="link"><span class="link-label">Link mit Telefonnummer (für Mobiles)</span></a>
<!-- Stand-alone -->
<a href="#" class="link is-stand-alone"><span class="link-label">Alleinstehender Link</span></a>
<!-- With Icon After -->
<a href="#" class="link is-stand-alone"><span class="link-label">Link mit Icon</span><svg class="icon is-download-simple">
<use href="../../icons/icons-bold.svg#icon--download-simple" xlink:href="../../icons/icons-bold.svg#icon--download-simple"></use>
</svg>
</a>
<!-- With Icon Before -->
<a href="#" class="link is-stand-alone"><svg class="icon is-arrow-right">
<use href="../../icons/icons-bold.svg#icon--arrow-right" xlink:href="../../icons/icons-bold.svg#icon--arrow-right"></use>
</svg>
<span class="link-label">Link mit Icon</span></a>
<!-- Icon Only -->
<a href="#" class="link is-stand-alone is-icon-only" title="Link mit ausgebelendetem Text"><svg class="icon is-download-simple">
<use href="../../icons/icons-bold.svg#icon--download-simple" xlink:href="../../icons/icons-bold.svg#icon--download-simple"></use>
</svg>
<span class="link-label">Link mit ausgebelendetem Text</span></a>
<!-- Button -->
<button class="link"><span class="link-label">Button styled as Link</span></button>
<!-- Button Disabled -->
<a class="link"><span class="link-label">Disabled Button</span></a>
<!-- Doc Only -->
<div class="doc-section">
<h2 class="doc-section-title">Link</h2>
<div class="doc-notes">
<ul>
<li><strong>Immer sogenannte <em>sprechende Links</em> verwenden.</strong> D.h. immer das Ziel des Links im Link-Text beschreiben und nie Worte wie <em>„hier klicken“</em>, <em>„mehr“</em> o.ä. als Link-Text benutzen.
<ul>
<li>Richtig: <em>„Hier geht es <a href="#">zur Design Library</a>.“</em></li>
<li>Falsch: <em>„Um zu unserer Design Library zu gelangen, klicken Sie <a href="#">hier</a>.“</em></li>
</ul>
</li>
<li>Der Ausdruck <em>„weiterlesen“</em> sollte ebenfalls vermieden werden.
<ul>
<li>Richtig: <em>„<a href="#">Erfahren Sie mehr zum Thema Sprechende Links.</a>“</em></li>
<li>Falsch: <em>„<a href="#">Weiterlesen …</a>“</em></li>
</ul>
</li>
<li>Im Link-Text sollten (wenn möglich) die für Suchmaschienen relevanten Schlüsselworte auftauchen:
<ul>
<li>Richtig: <em>„<a href="#">Zum Thema Sprechende Links in der Design Library</a>“</em></li>
<li>Falsch: <em>„<a href="#">Mehr dazu in der Design Library</a>“</em></li>
</ul>
</li>
</ul>
</div>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Default</h2>
</header>
<p>Biodiesel <a href="#" class="link"><span class="link-label">sprechender Link im Text</span></a>
locavore Echo Park bespoke tattooed mlkshk. Master cleanse actually XOXO Schlitz. Four loko disrupt jean shorts meh. Bitters <a href="#" class="link" target="_blank"><span class="link-label" data-annotation="öffnet in neuer Registerkarte">Link</span></a>
sartorial gastropub, hashtag four loko skateboard chillwave deep. <a href="https://" class="link" rel="external"><span class="link-label">Link zu anderer Website</span></a>
normcore vegan tilde vinyl small batch <a href="#" class="link"><span class="link-label" data-annotation="PDF-Datei">Link mit einer Anmerkung</span></a>
organic Marfa migas <a href="#" class="link" download><span class="link-label" data-annotation="PDF-Datei herunterladen">Link</span></a>
Austin Schlitz. Echo Park bespoke tattooed <a href="mailto:firstname.a.lastname@my-domain.com" class="link"><span class="link-label">firstname.a.lastname@my-domain.com</span></a>
Master cleanse actually.</p>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">In Small Copy</h2>
</header>
<p class="copy is-small">Biodiesel <a href="#" class="link"><span class="link-label">sprechender Link im Text</span></a>
locavore Echo Park bespoke tattooed mlkshk. Master cleanse actually XOXO Schlitz.</p>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Stand alone</h2>
<div class="doc-variant-configuration">
</div>
</header>
<a href="#" class="link is-stand-alone"><span class="link-label">Alleinstehender Link</span></a>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Icon</h2>
<div class="doc-variant-configuration">
</div>
</header>
<a href="#" class="link is-stand-alone"><span class="link-label">Link mit Icon</span><svg class="icon is-download-simple">
<use href="../../icons/icons-bold.svg#icon--download-simple" xlink:href="../../icons/icons-bold.svg#icon--download-simple"></use>
</svg>
</a>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Icon</h2>
<div class="doc-variant-configuration">
</div>
</header>
<a href="#" class="link is-stand-alone"><svg class="icon is-arrow-right">
<use href="../../icons/icons-bold.svg#icon--arrow-right" xlink:href="../../icons/icons-bold.svg#icon--arrow-right"></use>
</svg>
<span class="link-label">Link mit Icon</span></a>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Icon only</h2>
<div class="doc-variant-configuration">
<ul class="doc-variant-modifiers">
<li></li>
<li>is-icon-only</li>
</ul>
</div>
</header>
<a href="#" class="link is-stand-alone is-icon-only" title="Link mit ausgebelendetem Text"><svg class="icon is-download-simple">
<use href="../../icons/icons-bold.svg#icon--download-simple" xlink:href="../../icons/icons-bold.svg#icon--download-simple"></use>
</svg>
<span class="link-label">Link mit ausgebelendetem Text</span></a>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Button styled as Link</h2>
<div class="doc-variant-configuration">
<ul class="doc-variant-modifiers">
<li>link</li>
</ul>
</div>
</header>
<button class="link"><span class="link-label">Button styled as Link</span></button>
<button class="link" disabled="disabled"><span class="link-label">Disabled Button</span></button>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Phone</h2>
<div class="doc-variant-configuration">
</div>
<div class="doc-variant-notes">Verlinkte Telefonnummern werden nur in mobilen Viewports ausgezeichnet.</div>
</header>
<a href="tel:0123-456789" class="link"><span class="link-label">Link mit Telefonnummer (für Mobiles)</span></a>
</section>
</div>
<!-- Default -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- With Target -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- Annotation -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- Download -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- External -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- Email -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- Phone -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- Stand-alone -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- With Icon After -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- With Icon Before -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- Icon Only -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- Button -->
<button class="link{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-disabled}} disabled="disabled"{{/if~}}
{{~#onclick}} onclick="{{.}}"{{/onclick~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#label}}<span class="link-label">{{{.}}}</span>{{/label~}}
{{~#unless icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</button>
<!-- Button Disabled -->
<a {{#url}}href="{{.}}"{{/url~}}
class="link{{#if is-stand-alone}} is-stand-alone{{/if}}{{#if is-icon-only}} is-icon-only{{/if}}{{#modifier}} {{{.}}}{{/modifier}}"
{{~#target}} target="{{.}}"{{/target~}}
{{~#if is-download}} download{{/if~}}
{{~#if is-icon-only}} title="{{label}}"{{/if~}}
{{~#if is-external}} rel="external"{{/if~}}
>
{{~#if icon.is-before}}{{#icon~}}
{{~render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/if~}}
{{~#if label}}<span class="link-label"{{#annotation}} data-annotation="{{.}}"{{/annotation}}>{{{label}}}</span>{{/if~}}
{{~#unless icon.is-before}}{{#icon~}}
{{render '@icon' (contextData '@link' this) merge=true~}}
{{~/icon}}{{/unless~}}
</a>
<!-- Doc Only -->
<div class="doc-section">
<h2 class="doc-section-title">Link</h2>
<div class="doc-notes">
{{#markdown}}
+ **Immer sogenannte *sprechende Links* verwenden.** D.h. immer das Ziel des Links im Link-Text beschreiben und nie Worte wie *„hier klicken“*, *„mehr“* o.ä. als Link-Text benutzen.
+ Richtig: *„Hier geht es [zur Design Library](#).“*
+ Falsch: *„Um zu unserer Design Library zu gelangen, klicken Sie [hier](#).“*
+ Der Ausdruck *„weiterlesen“* sollte ebenfalls vermieden werden.
+ Richtig: *„[Erfahren Sie mehr zum Thema Sprechende Links.](#)“*
+ Falsch: *„[Weiterlesen …](#)“*
+ Im Link-Text sollten (wenn möglich) die für Suchmaschienen relevanten Schlüsselworte auftauchen:
+ Richtig: *„[Zum Thema Sprechende Links in der Design Library](#)“*
+ Falsch: *„[Mehr dazu in der Design Library](#)“*
{{/markdown}}
</div>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Default</h2>
</header>
<p>Biodiesel {{render '@link'}} locavore Echo Park bespoke tattooed mlkshk. Master cleanse actually XOXO Schlitz. Four loko disrupt jean shorts meh. Bitters {{render '@link--with-target'}} sartorial gastropub, hashtag four loko skateboard chillwave deep. {{render '@link--external'}} normcore vegan tilde vinyl small batch {{render '@link--annotation'}} organic Marfa migas {{render '@link--download'}} Austin Schlitz. Echo Park bespoke tattooed {{render '@link--email'}} Master cleanse actually.</p>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">In Small Copy</h2>
</header>
<p class="copy is-small">Biodiesel {{render '@link'}} locavore Echo Park bespoke tattooed mlkshk. Master cleanse actually XOXO Schlitz.</p>
</section>
{{#variants}}
<section class="doc-variant">
<header class="doc-variant-header">
{{#title}}
<h2 class="doc-variant-title">{{{.}}}</h2>
{{/title}}
<div class="doc-variant-configuration">
{{#if modifiers}}
<ul class="doc-variant-modifiers">
{{#modifiers}}
<li>{{{.}}}</li>
{{/modifiers}}
</ul>
{{/if}}
</div>
{{#annotations}}
<div class="doc-variant-notes">{{{.}}}</div>
{{/annotations}}
</header>
{{#samples}}
{{#if url}}
{{render '@link' (contextData '@link' this) merge=true}}
{{/if}}
{{#unless url}}
{{render '@link--button' (contextData '@link' this) merge=true}}
{{/unless}}
{{/samples}}
</section>
{{/variants}}
</div>
/* Default */
{
"label": "sprechender Link im Text",
"url": "#"
}
/* With Target */
{
"label": "Link",
"url": "#",
"target": "_blank",
"annotation": "öffnet in neuer Registerkarte"
}
/* Annotation */
{
"label": "Link mit einer Anmerkung",
"url": "#",
"annotation": "PDF-Datei"
}
/* Download */
{
"label": "Link",
"url": "#",
"annotation": "PDF-Datei herunterladen",
"is-download": true
}
/* External */
{
"label": "Link zu anderer Website",
"url": "https://",
"is-external": true
}
/* Email */
{
"label": "firstname.a.lastname@my-domain.com",
"url": "mailto:firstname.a.lastname@my-domain.com"
}
/* Phone */
{
"label": "Link mit Telefonnummer (für Mobiles)",
"url": "tel:0123-456789"
}
/* Stand-alone */
{
"label": "Alleinstehender Link",
"url": "#",
"is-stand-alone": true
}
/* With Icon After */
{
"label": "Link mit Icon",
"url": "#",
"is-stand-alone": true,
"icon": {
"id": "download-simple",
"weight": "bold"
}
}
/* With Icon Before */
{
"label": "Link mit Icon",
"url": "#",
"is-stand-alone": true,
"icon": {
"is-before": true,
"id": "arrow-right",
"weight": "bold"
}
}
/* Icon Only */
{
"label": "Link mit ausgebelendetem Text",
"url": "#",
"is-stand-alone": true,
"is-icon-only": true,
"icon": {
"is-before": true,
"id": "download-simple",
"weight": "bold"
}
}
/* Button */
{
"label": "Button styled as Link",
"url": null
}
/* Button Disabled */
{
"label": "Disabled Button",
"url": null,
"is-disabled": true
}
/* Doc Only */
{
"label": "sprechender Link im Text",
"url": "#",
"variants": [
{
"title": "Stand alone",
"modifiers": null,
"samples": {
"label": "Alleinstehender Link",
"url": "#",
"is-stand-alone": true
}
},
{
"title": "Icon",
"modifiers": null,
"samples": {
"label": "Link mit Icon",
"url": "#",
"is-stand-alone": true,
"icon": {
"id": "download-simple",
"weight": "bold"
}
}
},
{
"title": "Icon",
"modifiers": null,
"samples": {
"label": "Link mit Icon",
"url": "#",
"is-stand-alone": true,
"icon": {
"is-before": true,
"id": "arrow-right",
"weight": "bold"
}
}
},
{
"title": "Icon only",
"modifiers": [
null,
"is-icon-only"
],
"samples": {
"label": "Link mit ausgebelendetem Text",
"url": "#",
"is-stand-alone": true,
"is-icon-only": true,
"icon": {
"is-before": true,
"id": "download-simple",
"weight": "bold"
}
}
},
{
"title": "Button styled as Link",
"modifiers": "link",
"samples": [
{
"label": "Button styled as Link",
"url": null
},
{
"label": "Disabled Button",
"url": null,
"is-disabled": true
}
]
},
{
"title": "Phone",
"annotations": "Verlinkte Telefonnummern werden nur in mobilen Viewports ausgezeichnet.",
"samples": {
"label": "Link mit Telefonnummer (für Mobiles)",
"url": "tel:0123-456789"
}
}
]
}
import { renderEmailAdresses, segmentEmailAdresses } from "./_link.script";
renderEmailAdresses();
segmentEmailAdresses();
function renderEmailAdresses () {
/*
* Replaces masked email addresses
* Scheme for addresses "[name (at) domain (punkt) de]"
*/
let defaults = {
selectors: {
email: ".epost",
}
}
// Email adresses
let getEmail = function(text) {
let email = {
label: text,
href: ""
};
if (typeof text !== "string" || text === "") {
return email;
}
email.label = email.label.replace(/ ?\(at\) ?/, "@");
email.label = email.label.replace(/ ?\(punkt\) ?/, ".");
email.href = email.label;
// Email address in brackets
if (email.label.search(/\[.*\]/) !== -1) {
let results = email.label.match(/(.*?) ?\[(.*)\]/);
email.href = results[2] ? results[2] : email.label;
email.label = results[1] ? results[1] : email.label;
}
email.href = "mailto:" + email.href;
return email;
}
let elements = document.querySelectorAll(defaults.selectors.email);
for (let i = 0; i < elements.length; i++) {
let element = elements[i],
email = getEmail(element.innerText);
element.innerText = email.label;
if (element.title !== "") {
email.href += "?subject=" + element.title;
}
if (email.href) {
let link = document.createElement('a');
link.setAttribute("href", email.href);
link.innerText = email.label;
element.innerText = "";
element.appendChild(link);
}
}
}
function segmentEmailAdresses() {
let addresses = document.querySelectorAll('a[href^="mailto:"]');
addresses.forEach((address) => {
let label = address.innerHTML;
if (! label.match(/@/)) {
return;
}
let [name, domain] = label.split(/@/);
// Add word breaks to chunks beginning with period and greater than 5 characters
name = name.replace(/\.(\w{5,})/g, ".<wbr>$1");
// Remove word breaks to chunks at start smaller than 5 characters
name = name.replace(/^([^>]*>)?(\w{1,4})\.<wbr>/g, "$1$2.");
address.innerHTML = `${name}@<wbr>${domain}`;
});
}
export {
renderEmailAdresses,
segmentEmailAdresses,
};
$link_text-decoration-width: 2px !default;
$link_text-decoration-offset: 3px !default;
@import "_link.settings";
@import "_link.styles";
$link_states--standalone: (
default: (
background: linear-gradient(to left, $link_text-decoration-color, $link_text-decoration-color 50%, $link_text-decoration-color--hover 50%, $link_text-decoration-color--hover) no-repeat,
background-size: 200% $link_text-decoration-width,
background-position: 100% 100%,
transition-property: background-position,
transition-duration: $_transition-duration,
text-decoration: none,
),
hover: (
transition-duration: $_transition-duration--in,
background-position: 0 100%,
),
focus: (
background-image: linear-gradient(to left, transparent, transparent),
),
active: (
transition-duration: $_transition-duration--in,
background-position: 0 100%,
),
disabled: (
background: linear-gradient(to left, $_action-accent-color--disabled, $_action-accent-color--disabled) no-repeat,
background-position: 0 100%,
background-size: 100% $link_text-decoration-width,
),
);
%link {
@include not-on-desktop(){
&:link {
text-decoration-thickness: 1.5px;
}
}
}
%link--stand-alone {
$inset-inline: .1em;
font-weight: $_font-weight--bold;
text-decoration: none !important;
box-shadow: none;
display: block;
margin-inline: (-1 * $inset-inline);
> span {
@include state-styles($link_states--standalone, default);
display: inline;
padding-inline: $inset-inline;
background-color: transparent;
}
> span + .icon {
margin-left: .25em;
}
> .icon + span {
margin-right: .25em;
}
@include action-states($link-states--standalone, $descendant: "> span");
&:not([disabled]):not([aria-disabled=true]):focus-visible {
$focus-inset: map.get(map.get($link-states, focus), margin-inline);
margin-inline: calc(#{$focus-inset} - #{$inset-inline});
}
@include not-on-mobile(){
&[href^="tel:"] > span {
background: transparent !important;
cursor: default !important;
}
}
}
$link-color: $_action-color !default;
$link-color--hover: $_action-color--hover !default;
$link-color--active: $_action-color--active !default;
$link-color--visited: $link-color !default; // Regard: rgba()-colors don’t work on :visited
$link_text-decoration-color: $_action-text-decoration-color !default;
$link_text-decoration-color--hover: $_action-text-decoration-color--hover !default;
$link_text-decoration-color--active: $_action-text-decoration-color--active !default;
$link_text-decoration-color--visited: $link_text-decoration-color !default;
$link_text-decoration-width: inherit !default;
$link_text-decoration-offset: inherit !default;
$link-states: (
default: (
color: $link-color,
text-decoration: underline,
text-decoration-color: $link_text-decoration-color,
text-decoration-skip-ink: auto,
text-decoration-thickness: $link_text-decoration-width,
text-underline-offset: $link_text-decoration-offset,
transition-property: (color, text-decoration-color),
transition-duration: $_transition-duration--out,
),
visited: ( // Please regard: Not all properties can be used for styling visited links
color: $link-color--visited,
text-decoration-color: $link_text-decoration-color--visited,
),
hover: (
color: $link-color--hover,
text-decoration-color: $link_text-decoration-color--hover,
transition-duration: $_transition-duration--in,
),
focus: map.merge(
(
text-decoration-color: transparent,
padding-inline: .2em,
margin-inline: -.2em,
),
$_focus_styles,
),
active: (
color: $link-color--active,
text-decoration-color: $link_text-decoration-color--active,
)
) !default;
%link {
display: inline;
align-items: center;
column-gap: .25em;
&:link,
&:visited {
@include state-styles($link-states, default);
}
@if map.get($link-states, visited) {
&:visited:not([href^="#"]) {
@include state-styles($link-states, visited);
}
}
@include action-states($link-states);
&-label {
&[data-annotation] {
&::after {
content: " (" attr(data-annotation) ")";
}
}
}
.is-icon-only > &-label {
@extend %visually-hidden;
}
&[href^="tel:"] {
white-space: nowrap;
}
@include not-on-mobile(){
&[href^="tel:"]:not(:focus-visible) {
background-color: transparent !important;
color: $_text-color !important;
box-shadow: none !important;
text-decoration: none !important;
cursor: default !important;
}
}
}
button:not([disabled]) {
&.link {
@include state-styles($link-states, default);
}
}
%link--stand-alone {
@extend %link;
@include stack-spacing();
display: flex;
width: max-content;
max-width: 100%;
text-wrap: pretty;
p > &::before {
margin-top: 0;
}
}
%link--external {
%link-label:not([data-annotation]) {
&::after {
content: "\00a0\2197";
}
}
}
.link {
@extend %link;
&-label {
@extend %link-label;
}
&[rel~="external"] {
@extend %link--external;
}
}
%link.is-stand-alone {
@extend %link--stand-alone
}
button.link {
@extend %link--stand-alone;
}