This component shows if a piece of content has been selected by a user as a favourite using a text label and icon.
No JavaScript functionality is provided and it is expected that the state handling will be done on a case-by-case basis on the project application.
The active state of the icon is managed by adding the class vf-bookmark--active
. This class should be added by your framework or sever-side code.
The component can be configured with a number of options.
bookmark_href
: defaults to JavaScript:Void(0);
label_inactive
: defaults to Bookmark
label_active
: defaults to Bookmarked
is_active
: defaults to true
true
or false
vf-bookmark--active
CSS classlabel_inactive
or label_active
modifier
: defaults to inline
inline
or button
icon
: defaults to star
star
or heart
(a bookmark icon may be added in the future)This component targets WCAG 2.1 AA accessibility.
Note that the SVG icons use aria-hidden="true"
as to be ignored by screen readers.
Depending on your environment you'll want to use render
or include
. As a rule of thumb: server-side use include
, precompiled browser use render
. If you're using vf-eleventy you should use include
.
include
You'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include
is an abstraction of render
and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"component-type": "element",
"bookmark_href": "JavaScript:Void(0);",
"label_inactive": "Add as bookmark",
"label_active": "Bookmarked",
"is_active": false,
"modifier": "button",
"icon": "heart"
}
%}
{% include "../path_to/vf-bookmark/vf-bookmark.njk" %}
render
This approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include
is not be available.
{% render '@vf-bookmark', {
"component-type": "element",
"bookmark_href": "JavaScript:Void(0);",
"label_inactive": "Add as bookmark",
"label_active": "Bookmarked",
"is_active": false,
"modifier": "button",
"icon": "heart"
} %}
<a href="JavaScript:Void(0);" class="vf-bookmark
vf-bookmark--button
|
vf-button vf-button--secondary">
<span class="vf-bookmark--icon vf-bookmark--icon-heart"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 140 140" height="140" width="140">
<g transform="matrix(10,0,0,10,0,0)">
<path d="M7,12.45l-5.52-5c-3-3,1.41-8.76,5.52-4.1,4.11-4.66,8.5,1.12,5.52,4.1Z"></path>
</g>
</svg></span>Add as bookmark</a>
Depending on your environment you'll want to use render
or include
. As a rule of thumb: server-side use include
, precompiled browser use render
. If you're using vf-eleventy you should use include
.
include
You'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include
is an abstraction of render
and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"component-type": "element",
"bookmark_href": "JavaScript:Void(0);",
"label_inactive": "Add as bookmark",
"label_active": "Bookmarked",
"is_active": true,
"modifier": "button",
"icon": "heart"
}
%}
{% include "../path_to/vf-bookmark/vf-bookmark.njk" %}
render
This approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include
is not be available.
{% render '@vf-bookmark', {
"component-type": "element",
"bookmark_href": "JavaScript:Void(0);",
"label_inactive": "Add as bookmark",
"label_active": "Bookmarked",
"is_active": true,
"modifier": "button",
"icon": "heart"
} %}
<a href="JavaScript:Void(0);" class="vf-bookmark
vf-bookmark--active vf-bookmark--button
|
vf-button vf-button--secondary">
<span class="vf-bookmark--icon vf-bookmark--icon-heart"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 140 140" height="140" width="140">
<g transform="matrix(10,0,0,10,0,0)">
<path d="M7,12.45l-5.52-5c-3-3,1.41-8.76,5.52-4.1,4.11-4.66,8.5,1.12,5.52,4.1Z"></path>
</g>
</svg></span>Bookmarked</a>
Depending on your environment you'll want to use render
or include
. As a rule of thumb: server-side use include
, precompiled browser use render
. If you're using vf-eleventy you should use include
.
include
You'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include
is an abstraction of render
and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"component-type": "element",
"bookmark_href": "JavaScript:Void(0);",
"label_inactive": "Bookmark",
"label_active": "Bookmarked",
"is_active": true,
"modifier": "inline",
"icon": "star"
}
%}
{% include "../path_to/vf-bookmark/vf-bookmark.njk" %}
render
This approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include
is not be available.
{% render '@vf-bookmark', {
"component-type": "element",
"bookmark_href": "JavaScript:Void(0);",
"label_inactive": "Bookmark",
"label_active": "Bookmarked",
"is_active": true,
"modifier": "inline",
"icon": "star"
} %}
<a href="JavaScript:Void(0);" class="vf-bookmark
vf-bookmark--active vf-bookmark--inline
|
vf-link">
<span class="vf-bookmark--icon vf-bookmark--icon-star"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 140 140" height="140" width="140">
<g transform="matrix(10,0,0,10,0,0)">
<path d="M7.49,1.09,9.08,4.3a.51.51,0,0,0,.41.3L13,5.12a.54.54,0,0,1,.3.93L10.77,8.56a.53.53,0,0,0-.16.48l.61,3.53a.55.55,0,0,1-.8.58L7.26,11.48a.59.59,0,0,0-.52,0L3.58,13.15a.55.55,0,0,1-.8-.58L3.39,9a.53.53,0,0,0-.16-.48L.67,6.05A.54.54,0,0,1,1,5.12L4.51,4.6a.51.51,0,0,0,.41-.3L6.51,1.09A.54.54,0,0,1,7.49,1.09Z"></path>
</g>
</svg></span>Bookmarked</a>
This repository is distributed with [npm][https://www.npmjs.com/]. After [installing npm][https://www.npmjs.com/get-npm] and yarn, you can install vf-bookmark
with this command.
$ yarn add --dev @visual-framework/vf-bookmark
[If your component uses JS]
You should import this component in ./components/vf-component-rollup/scripts.js
or your other JS process:
import { vfComponentName } from 'vf-bookmark/vf-bookmark';
// Or import directly
// import { vfComponentName } from '../components/raw/vf-bookmark/vf-bookmark.js';
vfComponentName(); // if needed, invoke it
[If your component uses Sass]
The style files included are written in Sass. If you're using a VF-core project, you can import it like this:
@import "@visual-framework/vf-bookmark/vf-bookmark.scss";
Make sure you import Sass requirements along with the modules. You can use a project boilerplate or the vf-sass-starter
vf-navigation--on-this-page
.vf-intro
so it's a white background, removes the padding.vf-intro
to be the 'correct' buttons.vf-component-assets:everything
on local dev/css/app.css
vf-css:generate-component-css
File system location: components/vf-bookmark
Find an issue on this page? Propose a change or discuss it.