<button type="button" class="button ">
<span class="button__inner" data-text="fondid">
<span class="button__text">
fondid
</span>
</span>
</button>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": "fondid"
}
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}
<button type="button" class="button button--bordered ">
<span class="button__inner" data-text="fondid">
<span class="button__text">
fondid
</span>
</span>
</button>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": "fondid"
},
"modifier": "button--bordered"
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}
<button type="button" class="button button--icon-text ">
<span class="button__inner" data-text="fondid">
<span class="button__text">
fondid
<svg class="icon button__icon">
<use xlink:href="../../inc/svg/global.49d3f64de1a3f5ccf16c763316702027.svg#arrow-left"></use>
</svg>
</span>
</span>
</button>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": "fondid",
"icon": "arrow-left"
},
"modifier": "button--icon-text"
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}
<button type="button" class="button button--icon-text button--icon-text-large ">
<span class="button__inner" data-text="fondid">
<span class="button__text">
fondid
<svg class="icon button__icon">
<use xlink:href="../../inc/svg/global.49d3f64de1a3f5ccf16c763316702027.svg#arrow-left"></use>
</svg>
</span>
</span>
</button>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": "fondid",
"icon": "arrow-left",
"isTextLarge": true
},
"modifier": "button--icon-text button--icon-text-large"
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}
<button type="button" class="button button--icon-text ">
<span class="button__inner" data-text="fondid">
<span class="button__text">
fondid
<svg class="icon button__icon--appear button__icon">
<use xlink:href="../../inc/svg/global.49d3f64de1a3f5ccf16c763316702027.svg#arrow-left"></use>
</svg>
</span>
</span>
</button>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": "fondid",
"icon": "arrow-left",
"iconAppear": true
},
"modifier": "button--icon-text"
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}
<button type="button" class="button button--white ">
<span class="button__inner" data-text="fondid">
<span class="button__text">
fondid
</span>
</span>
</button>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": "fondid"
},
"modifier": "button--white"
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}
<button type="button" class="button button--icon ">
<span class="button__pseudo-icon">
<svg class="icon button__icon">
<use xlink:href="../../inc/svg/global.49d3f64de1a3f5ccf16c763316702027.svg#download"></use>
</svg>
</span>
<span class="button__inner" data-text="">
<span class="button__text">
<svg class="icon button__icon">
<use xlink:href="../../inc/svg/global.49d3f64de1a3f5ccf16c763316702027.svg#download"></use>
</svg>
</span>
</span>
</button>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": null,
"icon": "download"
},
"modifier": "button--icon"
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}
<a href="https://play.ee/" class="button ">
<span class="button__inner" data-text="fondid">
<span class="button__text">
fondid
</span>
</span>
</a>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": "fondid",
"link": "https://play.ee/"
}
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}
<button type="button" class="button button--bordered disabled" disabled>
<span class="button__inner" data-text="fondid">
<span class="button__text">
fondid
</span>
</span>
</button>
{% set element = data.link ? 'a' : 'button' %}
{% set includeIcon %}
{% include '@icon' with { name: data.icon, modifier: data.iconAppear ? 'button__icon--appear' : '', class: 'button__icon' } %}
{% endset %}
{% set icon %}
{% if data.icon %}
{{ includeIcon }}
{% endif %}
{% endset %}
{% set pseudoIcon %}
{% if data.icon and (not data.text) %}
<span class="button__pseudo-icon">
{{ includeIcon }}
</span>
{% endif %}
{% endset %}
<{{ element }} {% if data.link %} href="{{ data.link|default('#') }}" {% if data.download %} download {% endif %} {% else %} type="{{ type|default('button') }}" {% endif %} class="button {{ modifier }} {{ class }} {% if data.disabled %}disabled{% endif %}"{% if data.attributes %} {{ data.attributes }}{% endif %} {% if data.disabled %}disabled{% endif %}>
{{ pseudoIcon }}
<span class="button__inner" data-text="{{ data.text }}">
<span class="button__text">
{{ data.text }}
{{ icon }}
</span>
</span>
</{{ element }}>
{
"language": "en-US",
"data": {
"text": "fondid",
"disabled": true
},
"modifier": "button--bordered"
}
@keyframes bounce {
0% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
50% {
transition-timing-function: $transition-easing;
transform: translateX(4px);
}
100% {
transition-timing-function: $transition-easing;
transform: translateX(0);
}
}
.button {
position: relative;
display: inline-block;
padding: 0;
margin: 0;
height: 40px;
border: none;
background-color: transparent;
-webkit-appearance: none;
cursor: pointer;
@include bp(sm-min) {
height: 60px;
}
&:disabled {
cursor: auto;
& > * {
opacity: .3;
}
}
&.button--icon-text {
height: auto;
@include bp(sm-min) {
height: auto;
}
}
&.button--white {
height: 100%;
overflow: hidden;
}
&:before {
border-bottom: none;
}
&:after {
border-bottom: none;
}
&:focus {
&:after {
content: '';
position: absolute;
left: -4px;
right: -4px;
top: -4px;
bottom: -4px;
border: 2px solid var(--color-compliment);
background: transparent;
box-shadow: 0 0 4px rgba(var(--color-compliment), .7);
}
&.button--bordered,
&.button--icon,
&.button--white {
&:after {
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
}
}
&:disabled:after {
content: none;
}
}
}
.button--icon,
.button--bordered {
box-shadow: 0 0 0 1px var(--color-brand) inset;
transition: $transition-duration $transition-easing;
transition-property: border, box-shadow;
}
.button--icon {
overflow: hidden;
}
.button__pseudo-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
padding: 7px 7px;
@include bp(sm-min) {
padding: 17px;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: rgba(var(--color-text-inverse--rgb), .5);
}
.button:disabled & {
display: none;
}
}
.button__inner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
margin: 0;
border: none;
background-color: transparent;
text-transform: uppercase;
-webkit-appearance: none;
transition: opacity $transition-duration $transition-easing;
.button--white & {
display: flex;
align-items: center;
height: 100%;
background-color: var(--color-text-inverse);
transition: background-color $transition-duration $transition-easing, opacity;
}
.button--icon-text & {
text-transform: none;
overflow: visible;
}
&:before {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
width: 100%;
background: var(--color-brand);
color: var(--color-text-inverse);
transform: translateX(-101%);
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color, opacity;
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
.button--white & {
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-brand);
color: var(--color-text-inverse);
}
.button--icon-text &,
.button--icon & {
content: none;
}
.button:hover & {
@media (hover: hover) {
transform: translateX(0%);
}
}
.button:hover:disabled &,
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateX(-101%);
}
}
.button:active & {
color: $color-gray;
}
.button:active:disabled & {
color: var(--color-text-inverse);
}
}
}
.button__text {
display: flex;
position: relative;
align-items: center;
background: none;
color: var(--color-text);
transform: translateY(0%);
padding: 8px 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: transform, color;
font-size: $font-size-button;
font-weight: $font-weight-normal;
line-height: $font-line-height-button;
text-transform: uppercase;
@include bp(sm-min) {
font-size: $font-size-button-lg;
line-height: $font-line-height-button-lg;
padding: 15px 24px;
}
.button--white &,
.button--bordered & {
padding: 8px 24px;
@include bp(sm-min) {
padding: 15px 24px;
}
}
.button--icon & {
padding: 8px 8px;
@include bp(sm-min) {
padding: 18px;
}
}
.button--icon-text & {
text-transform: none;
padding: 0;
@include bp(sm-min) {
padding: 0;
}
}
.button--icon-text.button--icon-text-large & {
font-size: $font-size-large;
font-weight: $font-weight-normal;
line-height: $font-line-height-large;
@include bp(sm-min) {
font-size: $font-size-large-lg;
line-height: $font-line-height-large-lg;
}
}
.button:hover & {
@media (hover: hover) {
transform: translateY(100%);
}
}
.button.button--icon-text:hover & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button:hover:disabled & {
@media (hover: hover) {
transform: translateY(0);
}
}
.button--icon-text:active & {
color: rgba(var(--color-text--rgb), .5);
}
.button:active:disabled & {
color: var(--color-text);
}
}
.button__icon {
font-size: 24px;
transition-timing-function: $transition-easing;
transition-duration: $transition-duration;
transition-property: opacity;
&.button__icon--appear {
opacity: 0;
animation: bounce 500ms infinite;
.button:disabled & {
animation: none;
}
.button:hover & {
@media (hover: hover) {
opacity: 1;
}
}
.button:hover:disabled & {
@media (hover: hover) {
opacity: 0;
}
}
}
.button:hover & {
@media (hover: hover) {
animation: bounce 500ms infinite;
}
}
.button.button--icon:hover & {
@media (hover: hover) {
animation: none;
}
}
.button:hover:disabled & {
@media (hover: hover) {
animation: none;
}
}
.button:active & {
animation: none;
}
}
import './button.scss';
import Icon from '@icon';
export interface IButton {
text?: string;
backgroundColor?: string;
icon?: string;
iconAppear?: boolean;
link?: string;
disabled?: boolean;
}
export default class Button {
static render(data: IButton, className?: string): JQuery {
const element: string = data.link ? 'a' : 'button';
const classArray: string[] = ['button'];
const icon: string = data.icon ? Icon.render(data.icon, data.iconAppear ? 'button__icon--appear' : '', 'button__icon') : '';
const pseudoIcon: string = (data.icon && data.text.length === 0) ? '<span class="button__pseudo-icon">'+ icon +'</span>' : '';
if (className) {
classArray.push(className);
}
const textContent: string = '<span class="button__inner" data-text="'+ data.text +'"><span class="button__text">'+ data.text + icon +'</span></span>';
return $(`<${element} class="${classArray.join(' ')}" ${data.link ? `href="${data.link}"` : 'type="button"' } ${data.disabled ? 'disabled' : ''}>${pseudoIcon} ${textContent}</${element}>`);
}
}