Version Description
Download this release
Release Info
Developer | aristath |
Plugin | Kirki |
Version | 3.0.26 |
Comparing to | |
See all releases |
Code changes from version 3.0.25 to 3.0.26
- controls/class-kirki-controls.php +1 -0
- controls/css/styles.css +3 -1
- controls/js/script.js +584 -479
- controls/js/script.min.js +1 -1
- controls/php/class-kirki-control-base.php +20 -7
- controls/php/class-kirki-control-checkbox.php +57 -0
- controls/php/class-kirki-control-dimension.php +1 -1
- controls/php/class-kirki-control-multicheck.php +1 -1
- controls/php/class-kirki-control-radio-buttonset.php +1 -1
- controls/php/class-kirki-control-repeater.php +19 -8
- controls/php/class-kirki-control-typography.php +13 -11
- controls/views/number.php +37 -0
- core/class-kirki-helper.php +37 -29
- core/class-kirki-init.php +4 -1
- core/class-kirki-modules.php +2 -0
- core/class-kirki-sanitize-values.php +2 -2
- core/class-kirki.php +5 -0
- field/class-kirki-field-dimension.php +1 -1
- field/class-kirki-field-dimensions.php +1 -1
- field/class-kirki-field-typography.php +8 -8
- kirki.php +1 -1
- modules/css/class-kirki-css-to-file.php +3 -1
- modules/css/class-kirki-modules-css.php +25 -1
- modules/css/class-kirki-output.php +3 -1
- modules/css/field/class-kirki-output-field-background.php +6 -0
- modules/css/field/class-kirki-output-field-dimensions.php +1 -1
- modules/css/property/class-kirki-output-property-background-position.php +2 -2
- modules/custom-sections/sections.js +31 -31
- modules/customizer-branding/branding.js +1 -1
- modules/field-dependencies/field-dependencies.js +117 -60
- modules/icons/icons.js +1 -1
- modules/postmessage/class-kirki-modules-postmessage.php +1 -1
- modules/preset/class-kirki-modules-preset.php +68 -0
- modules/preset/preset.js +32 -0
- modules/tooltips/tooltip.js +7 -7
- modules/webfont-loader/class-kirki-modules-webfont-loader.php +83 -0
- modules/webfont-loader/vendor-typekit/src/closure.js +2 -0
- modules/webfont-loader/vendor-typekit/src/core/cssclassname.js +46 -0
- modules/webfont-loader/vendor-typekit/src/core/domhelper.js +405 -0
- modules/webfont-loader/vendor-typekit/src/core/eventdispatcher.js +195 -0
- modules/webfont-loader/vendor-typekit/src/core/font.js +140 -0
- modules/webfont-loader/vendor-typekit/src/core/fontmodule.js +16 -0
- modules/webfont-loader/vendor-typekit/src/core/fontmoduleloader.js +47 -0
- modules/webfont-loader/vendor-typekit/src/core/fontruler.js +60 -0
- modules/webfont-loader/vendor-typekit/src/core/fontwatcher.js +171 -0
- modules/webfont-loader/vendor-typekit/src/core/fontwatchrunner.js +249 -0
- modules/webfont-loader/vendor-typekit/src/core/initialize.js +97 -0
- modules/webfont-loader/vendor-typekit/src/core/nativefontwatchrunner.js +69 -0
- modules/webfont-loader/vendor-typekit/src/core/stylesheetwaiter.js +48 -0
- modules/webfont-loader/vendor-typekit/src/core/webfont.js +97 -0
- modules/webfont-loader/vendor-typekit/src/modules.yml +34 -0
- modules/webfont-loader/vendor-typekit/src/modules/custom.js +63 -0
- modules/webfont-loader/vendor-typekit/src/modules/fontdeck.js +66 -0
- modules/webfont-loader/vendor-typekit/src/modules/google/fontapiparser.js +181 -0
- modules/webfont-loader/vendor-typekit/src/modules/google/fontapiurlbuilder.js +77 -0
- modules/webfont-loader/vendor-typekit/src/modules/google/googlefontapi.js +54 -0
- modules/webfont-loader/vendor-typekit/src/modules/monotype.js +110 -0
- modules/webfont-loader/vendor-typekit/src/modules/typekit.js +73 -0
- modules/webfont-loader/vendor-typekit/webfontloader.js +17 -0
- modules/webfonts/class-kirki-fonts-google.php +11 -11
- modules/webfonts/class-kirki-modules-webfonts-async.php +30 -10
- modules/webfonts/webfont-names.json +1 -0
- modules/webfonts/webfonts.json +1 -1
- readme.txt +28 -1
controls/class-kirki-controls.php
CHANGED
@@ -25,6 +25,7 @@ class Kirki_Controls {
|
|
25 |
'code',
|
26 |
'color',
|
27 |
'generic',
|
|
|
28 |
'radio',
|
29 |
'select',
|
30 |
'textarea',
|
25 |
'code',
|
26 |
'color',
|
27 |
'generic',
|
28 |
+
'number',
|
29 |
'radio',
|
30 |
'select',
|
31 |
'textarea',
|
controls/css/styles.css
CHANGED
@@ -62,7 +62,7 @@
|
|
62 |
position: relative;
|
63 |
left: -25%;
|
64 |
top: -25%;
|
65 |
-
z-index:
|
66 |
.customize-control-kirki-color-palette .colors-wrapper.with-margin label {
|
67 |
margin: 3px; }
|
68 |
.customize-control-kirki-color-palette .colors-wrapper input {
|
@@ -73,6 +73,8 @@
|
|
73 |
|
74 |
.customize-control-kirki-color input[data-type="hue"] + .iris-strip-horiz .iris-slider {
|
75 |
background-image: -webkit-linear-gradient(left, red, #ff7f00, yellow, #80ff00, lime, #00ff80, cyan, #007fff, blue, #7f00ff, magenta, #ff0080, red) !important; }
|
|
|
|
|
76 |
|
77 |
.customize-control-kirki-dashicons {
|
78 |
position: relative; }
|
62 |
position: relative;
|
63 |
left: -25%;
|
64 |
top: -25%;
|
65 |
+
z-index: 1; }
|
66 |
.customize-control-kirki-color-palette .colors-wrapper.with-margin label {
|
67 |
margin: 3px; }
|
68 |
.customize-control-kirki-color-palette .colors-wrapper input {
|
73 |
|
74 |
.customize-control-kirki-color input[data-type="hue"] + .iris-strip-horiz .iris-slider {
|
75 |
background-image: -webkit-linear-gradient(left, red, #ff7f00, yellow, #80ff00, lime, #00ff80, cyan, #007fff, blue, #7f00ff, magenta, #ff0080, red) !important; }
|
76 |
+
.customize-control-kirki-color .iris-picker .iris-square-handle {
|
77 |
+
z-index: 8; }
|
78 |
|
79 |
.customize-control-kirki-dashicons {
|
80 |
position: relative; }
|
controls/js/script.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/* jshint -W079 */
|
2 |
/* jshint unused:false */
|
3 |
if ( _.isUndefined( window.kirkiSetSettingValue ) ) {
|
4 |
-
var kirkiSetSettingValue = { //
|
5 |
|
6 |
/**
|
7 |
* Set the value of the control.
|
@@ -18,8 +18,8 @@ if ( _.isUndefined( window.kirkiSetSettingValue ) ) {
|
|
18 |
* and determine if we need to do any further work based on those.
|
19 |
*/
|
20 |
var $this = this,
|
21 |
-
|
22 |
-
|
23 |
|
24 |
// If the control doesn't exist then return.
|
25 |
if ( _.isUndefined( subControl ) ) {
|
@@ -37,14 +37,14 @@ if ( _.isUndefined( window.kirkiSetSettingValue ) ) {
|
|
37 |
$this.setColorPicker( $this.findElement( setting, '.kirki-color-control' ), value['background-color'] );
|
38 |
}
|
39 |
$this.findElement( setting, '.placeholder, .thumbnail' ).removeClass().addClass( 'placeholder' ).html( 'No file selected' );
|
40 |
-
_.each( ['background-repeat', 'background-position'], function( subVal ) {
|
41 |
if ( ! _.isUndefined( value[ subVal ] ) ) {
|
42 |
$this.setSelectWoo( $this.findElement( setting, '.' + subVal + ' select' ), value[ subVal ] );
|
43 |
}
|
44 |
-
});
|
45 |
-
_.each( ['background-size', 'background-attachment'], function( subVal ) {
|
46 |
jQuery( $this.findElement( setting, '.' + subVal + ' input[value="' + value + '"]' ) ).prop( 'checked', true );
|
47 |
-
});
|
48 |
valueJSON = JSON.stringify( value ).replace( /'/g, ''' );
|
49 |
jQuery( $this.findElement( setting, '.background-hidden-value' ).attr( 'value', valueJSON ) ).trigger( 'change' );
|
50 |
break;
|
@@ -86,16 +86,16 @@ if ( _.isUndefined( window.kirkiSetSettingValue ) ) {
|
|
86 |
case 'kirki-multicheck':
|
87 |
$this.findElement( setting, 'input' ).each( function() {
|
88 |
jQuery( this ).prop( 'checked', false );
|
89 |
-
});
|
90 |
_.each( value, function( subValue, i ) {
|
91 |
jQuery( $this.findElement( setting, 'input[value="' + value[ i ] + '"]' ) ).prop( 'checked', true );
|
92 |
-
});
|
93 |
break;
|
94 |
|
95 |
case 'kirki-multicolor':
|
96 |
_.each( value, function( subVal, index ) {
|
97 |
$this.setColorPicker( $this.findElement( setting, '.multicolor-index-' + index ), subVal );
|
98 |
-
});
|
99 |
break;
|
100 |
|
101 |
case 'kirki-radio-buttonset':
|
@@ -108,16 +108,16 @@ if ( _.isUndefined( window.kirkiSetSettingValue ) ) {
|
|
108 |
break;
|
109 |
|
110 |
case 'kirki-typography':
|
111 |
-
_.each( ['font-family', 'variant'], function( subVal ) {
|
112 |
if ( ! _.isUndefined( value[ subVal ] ) ) {
|
113 |
$this.setSelectWoo( $this.findElement( setting, '.' + subVal + ' select' ), value[ subVal ] );
|
114 |
}
|
115 |
-
});
|
116 |
-
_.each( ['font-size', 'line-height', 'letter-spacing', 'word-spacing'], function( subVal ) {
|
117 |
if ( ! _.isUndefined( value[ subVal ] ) ) {
|
118 |
jQuery( $this.findElement( setting, '.' + subVal + ' input' ) ).prop( 'value', value[ subVal ] );
|
119 |
}
|
120 |
-
});
|
121 |
|
122 |
if ( ! _.isUndefined( value.color ) ) {
|
123 |
$this.setColorPicker( $this.findElement( setting, '.kirki-color-control' ), value.color );
|
@@ -129,7 +129,7 @@ if ( _.isUndefined( window.kirkiSetSettingValue ) ) {
|
|
129 |
case 'kirki-dimensions':
|
130 |
_.each( value, function( subValue, id ) {
|
131 |
jQuery( $this.findElement( setting, '.' + id + ' input' ) ).prop( 'value', subValue );
|
132 |
-
});
|
133 |
break;
|
134 |
|
135 |
case 'kirki-repeater':
|
@@ -202,7 +202,7 @@ if ( _.isUndefined( window.kirkiSetSettingValue ) ) {
|
|
202 |
*/
|
203 |
setValue: function( setting, value, timeout ) {
|
204 |
timeout = ( _.isUndefined( timeout ) ) ? 100 : parseInt( timeout, 10 );
|
205 |
-
wp.customize.instance( setting ).set({});
|
206 |
setTimeout( function() {
|
207 |
wp.customize.instance( setting ).set( value );
|
208 |
}, timeout );
|
@@ -295,7 +295,7 @@ kirki = jQuery.extend( kirki, {
|
|
295 |
description: control.params.description,
|
296 |
'data-id': control.id,
|
297 |
inputAttrs: control.params.inputAttrs,
|
298 |
-
'default': control.params
|
299 |
value: kirki.setting.get( control.id ),
|
300 |
choices: control.params.choices
|
301 |
} ) );
|
@@ -355,7 +355,7 @@ kirki = jQuery.extend( kirki, {
|
|
355 |
mode: control.params.mode,
|
356 |
inputAttrs: control.params.inputAttrs,
|
357 |
'data-palette': control.params.palette,
|
358 |
-
'data-default-color': control.params
|
359 |
'data-alpha': control.params.choices.alpha,
|
360 |
value: kirki.setting.get( control.id )
|
361 |
} ) );
|
@@ -416,8 +416,8 @@ kirki = jQuery.extend( kirki, {
|
|
416 |
inputAttrs: control.params.inputAttrs,
|
417 |
choices: control.params.choices,
|
418 |
value: kirki.setting.get( control.id )
|
419 |
-
|
420 |
-
|
421 |
|
422 |
if ( ! _.isUndefined( control.params ) && ! _.isUndefined( control.params.choices ) && ! _.isUndefined( control.params.choices.element ) && 'textarea' === control.params.choices.element ) {
|
423 |
template = wp.template( 'kirki-input-textarea' );
|
@@ -429,6 +429,60 @@ kirki = jQuery.extend( kirki, {
|
|
429 |
}
|
430 |
},
|
431 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
432 |
'kirki-select': {
|
433 |
|
434 |
/**
|
@@ -474,7 +528,7 @@ kirki = jQuery.extend( kirki, {
|
|
474 |
value: kirki.setting.get( control.id ),
|
475 |
multiple: control.params.multiple || 1,
|
476 |
placeholder: control.params.placeholder
|
477 |
-
|
478 |
}
|
479 |
}
|
480 |
}
|
@@ -482,6 +536,7 @@ kirki = jQuery.extend( kirki, {
|
|
482 |
/* global kirkiL10n */
|
483 |
var kirki = kirki || {};
|
484 |
kirki = jQuery.extend( kirki, {
|
|
|
485 |
/**
|
486 |
* An object containing definitions for input fields.
|
487 |
*
|
@@ -510,7 +565,7 @@ kirki = jQuery.extend( kirki, {
|
|
510 |
// Save the value
|
511 |
input.on( 'change keyup paste click', function() {
|
512 |
kirki.setting.set( control.id, jQuery( this ).val() );
|
513 |
-
});
|
514 |
}
|
515 |
},
|
516 |
|
@@ -535,7 +590,7 @@ kirki = jQuery.extend( kirki, {
|
|
535 |
*/
|
536 |
init: function( control ) {
|
537 |
var picker = jQuery( '.kirki-color-control[data-id="' + control.id + '"]' ),
|
538 |
-
|
539 |
|
540 |
control.choices = control.choices || {};
|
541 |
if ( _.isEmpty( control.choices ) && control.params.choices ) {
|
@@ -553,12 +608,12 @@ kirki = jQuery.extend( kirki, {
|
|
553 |
if ( clear.length ) {
|
554 |
clear.click( function() {
|
555 |
kirki.setting.set( control.id, '' );
|
556 |
-
});
|
557 |
}
|
558 |
}, 200 );
|
559 |
|
560 |
// Saves our settings to the WP API
|
561 |
-
picker.wpColorPicker({
|
562 |
change: function() {
|
563 |
|
564 |
// Small hack: the picker needs a small delay
|
@@ -566,7 +621,7 @@ kirki = jQuery.extend( kirki, {
|
|
566 |
kirki.setting.set( control.id, picker.val() );
|
567 |
}, 20 );
|
568 |
}
|
569 |
-
});
|
570 |
}
|
571 |
},
|
572 |
|
@@ -591,7 +646,7 @@ kirki = jQuery.extend( kirki, {
|
|
591 |
// Save the value
|
592 |
input.on( 'change keyup paste click', function() {
|
593 |
kirki.setting.set( control.id, jQuery( this ).val() );
|
594 |
-
});
|
595 |
}
|
596 |
},
|
597 |
|
@@ -616,7 +671,7 @@ kirki = jQuery.extend( kirki, {
|
|
616 |
// Save the value
|
617 |
textarea.on( 'change keyup paste click', function() {
|
618 |
kirki.setting.set( control.id, jQuery( this ).val() );
|
619 |
-
});
|
620 |
}
|
621 |
},
|
622 |
|
@@ -632,13 +687,13 @@ kirki = jQuery.extend( kirki, {
|
|
632 |
*/
|
633 |
init: function( control ) {
|
634 |
var element = jQuery( 'select[data-id="' + control.id + '"]' ),
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
escapeMarkup: function( markup ) {
|
639 |
return markup;
|
640 |
}
|
641 |
-
|
642 |
if ( control.params.placeholder ) {
|
643 |
selectWooOptions.placeholder = control.params.placeholder;
|
644 |
selectWooOptions.allowClear = true;
|
@@ -651,10 +706,83 @@ kirki = jQuery.extend( kirki, {
|
|
651 |
selectValue = jQuery( this ).val();
|
652 |
selectValue = ( null === selectValue && 1 < multiple ) ? [] : selectValue;
|
653 |
kirki.setting.set( control.id, selectValue );
|
654 |
-
});
|
655 |
}
|
656 |
},
|
657 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
658 |
image: {
|
659 |
|
660 |
/**
|
@@ -666,8 +794,8 @@ kirki = jQuery.extend( kirki, {
|
|
666 |
*/
|
667 |
getTemplate: function( data ) {
|
668 |
var html = '',
|
669 |
-
|
670 |
-
|
671 |
|
672 |
data = _.defaults( data, {
|
673 |
label: '',
|
@@ -702,12 +830,12 @@ kirki = jQuery.extend( kirki, {
|
|
702 |
}
|
703 |
html += '<div class="actions">';
|
704 |
html += '<button class="button image-upload-remove-button' + ( '' === url ? ' hidden' : '' ) + '">' + kirkiL10n.remove + '</button>';
|
705 |
-
if ( data
|
706 |
html += '<button type="button" class="button image-default-button"';
|
707 |
-
if ( data
|
708 |
html += ' style="display:none;"';
|
709 |
}
|
710 |
-
html += '>' + kirkiL10n
|
711 |
}
|
712 |
html += '<button type="button" class="button image-upload-button">' + kirkiL10n.selectFile + '</button>';
|
713 |
html += '</div></div>';
|
@@ -722,13 +850,14 @@ kirki = jQuery.extend( kirki, {
|
|
722 |
* @param {Object} control - The control object.
|
723 |
* @returns {null}
|
724 |
*/
|
725 |
-
init: function( control ) {
|
726 |
}
|
727 |
}
|
728 |
}
|
729 |
} );
|
730 |
var kirki = kirki || {};
|
731 |
kirki = jQuery.extend( kirki, {
|
|
|
732 |
/**
|
733 |
* An object containing definitions for settings.
|
734 |
*
|
@@ -749,9 +878,9 @@ kirki = jQuery.extend( kirki, {
|
|
749 |
*/
|
750 |
get: function( setting ) {
|
751 |
var parts = setting.split( '[' ),
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
|
756 |
_.each( parts, function( part, i ) {
|
757 |
part = part.replace( ']', '' );
|
@@ -772,7 +901,7 @@ kirki = jQuery.extend( kirki, {
|
|
772 |
currentVal = currentVal[ part ];
|
773 |
}
|
774 |
}
|
775 |
-
});
|
776 |
|
777 |
return currentVal;
|
778 |
},
|
@@ -797,13 +926,13 @@ kirki = jQuery.extend( kirki, {
|
|
797 |
*/
|
798 |
set: function( element, value, key ) {
|
799 |
var setting,
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
|
808 |
// Get the setting from the element.
|
809 |
setting = element;
|
@@ -820,7 +949,7 @@ kirki = jQuery.extend( kirki, {
|
|
820 |
return;
|
821 |
}
|
822 |
|
823 |
-
parts = setting.split( '[' )
|
824 |
|
825 |
// Find the setting we're using in the control using the customizer API.
|
826 |
_.each( parts, function( part, i ) {
|
@@ -882,6 +1011,7 @@ kirki = jQuery.extend( kirki, {
|
|
882 |
/* global ajaxurl */
|
883 |
var kirki = kirki || {};
|
884 |
kirki = jQuery.extend( kirki, {
|
|
|
885 |
/**
|
886 |
* A collection of utility methods.
|
887 |
*
|
@@ -955,7 +1085,7 @@ kirki = jQuery.extend( kirki, {
|
|
955 |
*/
|
956 |
getFont: function( family ) {
|
957 |
var self = this,
|
958 |
-
|
959 |
|
960 |
if ( 'undefined' === typeof fonts[ family ] ) {
|
961 |
return false;
|
@@ -973,9 +1103,9 @@ kirki = jQuery.extend( kirki, {
|
|
973 |
*/
|
974 |
getFonts: function( order, category, number ) {
|
975 |
var self = this,
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
|
980 |
// Make sure order is correct.
|
981 |
order = order || 'alpha';
|
@@ -1025,7 +1155,7 @@ kirki = jQuery.extend( kirki, {
|
|
1025 |
*/
|
1026 |
getVariants: function( family ) {
|
1027 |
var self = this,
|
1028 |
-
|
1029 |
|
1030 |
// Early exit if font was not found.
|
1031 |
if ( ! font ) {
|
@@ -1098,8 +1228,8 @@ kirki = jQuery.extend( kirki, {
|
|
1098 |
* @since 3.0.17
|
1099 |
* @returns {Array}
|
1100 |
*/
|
1101 |
-
getVariants: function(
|
1102 |
-
return ['regular', 'italic', '700', '700italic'];
|
1103 |
}
|
1104 |
},
|
1105 |
|
@@ -1131,6 +1261,39 @@ kirki = jQuery.extend( kirki, {
|
|
1131 |
}
|
1132 |
return false;
|
1133 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1134 |
}
|
1135 |
}
|
1136 |
} );
|
@@ -1153,11 +1316,11 @@ kirki = jQuery.extend( kirki, {
|
|
1153 |
* @augments wp.customize.Control
|
1154 |
* @augments wp.customize.Class
|
1155 |
*/
|
1156 |
-
wp.customize.kirkiDynamicControl = wp.customize.Control.extend({
|
1157 |
|
1158 |
initialize: function( id, options ) {
|
1159 |
var control = this,
|
1160 |
-
|
1161 |
|
1162 |
args.params = args.params || {};
|
1163 |
if ( ! args.params.type ) {
|
@@ -1184,7 +1347,7 @@ kirki = jQuery.extend( kirki, {
|
|
1184 |
*/
|
1185 |
_setUpSettingRootLinks: function() {
|
1186 |
var control = this,
|
1187 |
-
|
1188 |
|
1189 |
nodes.each( function() {
|
1190 |
var node = jQuery( this );
|
@@ -1206,7 +1369,7 @@ kirki = jQuery.extend( kirki, {
|
|
1206 |
*/
|
1207 |
_setUpSettingPropertyLinks: function() {
|
1208 |
var control = this,
|
1209 |
-
|
1210 |
|
1211 |
if ( ! control.setting ) {
|
1212 |
return;
|
@@ -1216,8 +1379,8 @@ kirki = jQuery.extend( kirki, {
|
|
1216 |
|
1217 |
nodes.each( function() {
|
1218 |
var node = jQuery( this ),
|
1219 |
-
|
1220 |
-
|
1221 |
|
1222 |
element = new wp.customize.Element( node );
|
1223 |
control.propertyElements.push( element );
|
@@ -1267,7 +1430,7 @@ kirki = jQuery.extend( kirki, {
|
|
1267 |
*/
|
1268 |
embed: function() {
|
1269 |
var control = this,
|
1270 |
-
|
1271 |
|
1272 |
if ( ! sectionId ) {
|
1273 |
return;
|
@@ -1331,42 +1494,14 @@ kirki = jQuery.extend( kirki, {
|
|
1331 |
this.container.on( 'change keyup paste click', 'input', function() {
|
1332 |
control.setting.set( jQuery( this ).val() );
|
1333 |
} );
|
1334 |
-
},
|
1335 |
-
|
1336 |
-
kirkiValidateCSSValue: function( value ) {
|
1337 |
-
|
1338 |
-
var validUnits = ['rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax'],
|
1339 |
-
numericValue,
|
1340 |
-
unit;
|
1341 |
-
|
1342 |
-
// 0 is always a valid value, and we can't check calc() values effectively.
|
1343 |
-
if ( '0' === value || ( 0 <= value.indexOf( 'calc(' ) && 0 <= value.indexOf( ')' ) ) ) {
|
1344 |
-
return true;
|
1345 |
-
}
|
1346 |
-
|
1347 |
-
if ( 'auto' === value || 'inherit' === value || 'initial' === value ) {
|
1348 |
-
return true;
|
1349 |
-
}
|
1350 |
-
|
1351 |
-
// Get the numeric value.
|
1352 |
-
numericValue = parseFloat( value );
|
1353 |
-
|
1354 |
-
// Get the unit
|
1355 |
-
unit = value.replace( numericValue, '' );
|
1356 |
-
|
1357 |
-
// Check the validity of the numeric value and units.
|
1358 |
-
if ( isNaN( numericValue ) || -1 === jQuery.inArray( unit, validUnits ) ) {
|
1359 |
-
return false;
|
1360 |
-
}
|
1361 |
-
return true;
|
1362 |
}
|
1363 |
} );
|
1364 |
}() );
|
1365 |
_.each( kirki.control, function( obj, type ) {
|
1366 |
-
wp.customize.controlConstructor[ type ] = wp.customize.kirkiDynamicControl.extend({});
|
1367 |
} );
|
1368 |
/* global kirkiControlLoader */
|
1369 |
-
wp.customize.controlConstructor['kirki-background'] = wp.customize.Control.extend({
|
1370 |
|
1371 |
// When we're finished loading continue processing
|
1372 |
ready: function() {
|
@@ -1386,8 +1521,8 @@ wp.customize.controlConstructor['kirki-background'] = wp.customize.Control.exten
|
|
1386 |
initKirkiControl: function() {
|
1387 |
|
1388 |
var control = this,
|
1389 |
-
|
1390 |
-
|
1391 |
|
1392 |
// Hide unnecessary controls if the value doesn't have an image.
|
1393 |
if ( _.isUndefined( value['background-image'] ) || '' === value['background-image'] ) {
|
@@ -1398,47 +1533,47 @@ wp.customize.controlConstructor['kirki-background'] = wp.customize.Control.exten
|
|
1398 |
}
|
1399 |
|
1400 |
// Color.
|
1401 |
-
picker.wpColorPicker({
|
1402 |
change: function() {
|
1403 |
setTimeout( function() {
|
1404 |
control.saveValue( 'background-color', picker.val() );
|
1405 |
}, 100 );
|
1406 |
}
|
1407 |
-
});
|
1408 |
|
1409 |
// Background-Repeat.
|
1410 |
control.container.on( 'change', '.background-repeat select', function() {
|
1411 |
control.saveValue( 'background-repeat', jQuery( this ).val() );
|
1412 |
-
});
|
1413 |
|
1414 |
// Background-Size.
|
1415 |
control.container.on( 'change click', '.background-size input', function() {
|
1416 |
control.saveValue( 'background-size', jQuery( this ).val() );
|
1417 |
-
});
|
1418 |
|
1419 |
// Background-Position.
|
1420 |
control.container.on( 'change', '.background-position select', function() {
|
1421 |
control.saveValue( 'background-position', jQuery( this ).val() );
|
1422 |
-
});
|
1423 |
|
1424 |
// Background-Attachment.
|
1425 |
control.container.on( 'change click', '.background-attachment input', function() {
|
1426 |
control.saveValue( 'background-attachment', jQuery( this ).val() );
|
1427 |
-
});
|
1428 |
|
1429 |
// Background-Image.
|
1430 |
control.container.on( 'click', '.background-image-upload-button', function( e ) {
|
1431 |
-
var image = wp.media({ multiple: false }).open().on( 'select', function() {
|
1432 |
|
1433 |
// This will return the selected image from the Media Uploader, the result is an object.
|
1434 |
var uploadedImage = image.state().get( 'selection' ).first(),
|
1435 |
-
|
1436 |
-
|
1437 |
-
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
1441 |
-
|
1442 |
|
1443 |
if ( ! _.isUndefined( uploadedImage.toJSON().sizes.medium ) ) {
|
1444 |
previewImage = uploadedImage.toJSON().sizes.medium.url;
|
@@ -1466,15 +1601,15 @@ wp.customize.controlConstructor['kirki-background'] = wp.customize.Control.exten
|
|
1466 |
if ( removeButton.length ) {
|
1467 |
removeButton.show();
|
1468 |
}
|
1469 |
-
|
1470 |
|
1471 |
e.preventDefault();
|
1472 |
-
});
|
1473 |
|
1474 |
control.container.on( 'click', '.background-image-upload-remove-button', function( e ) {
|
1475 |
|
1476 |
var preview,
|
1477 |
-
|
1478 |
|
1479 |
e.preventDefault();
|
1480 |
|
@@ -1495,7 +1630,7 @@ wp.customize.controlConstructor['kirki-background'] = wp.customize.Control.exten
|
|
1495 |
if ( removeButton.length ) {
|
1496 |
removeButton.hide();
|
1497 |
}
|
1498 |
-
});
|
1499 |
},
|
1500 |
|
1501 |
/**
|
@@ -1504,22 +1639,22 @@ wp.customize.controlConstructor['kirki-background'] = wp.customize.Control.exten
|
|
1504 |
saveValue: function( property, value ) {
|
1505 |
|
1506 |
var control = this,
|
1507 |
-
|
1508 |
-
|
1509 |
|
1510 |
val[ property ] = value;
|
1511 |
|
1512 |
jQuery( input ).attr( 'value', JSON.stringify( val ) ).trigger( 'change' );
|
1513 |
control.setting.set( val );
|
1514 |
}
|
1515 |
-
});
|
1516 |
-
wp.customize.controlConstructor['kirki-color-palette'] = wp.customize.kirkiDynamicControl.extend({});
|
1517 |
-
wp.customize.controlConstructor['kirki-dashicons'] = wp.customize.kirkiDynamicControl.extend({});
|
1518 |
-
wp.customize.controlConstructor['kirki-date'] = wp.customize.kirkiDynamicControl.extend({
|
1519 |
|
1520 |
initKirkiControl: function() {
|
1521 |
var control = this,
|
1522 |
-
|
1523 |
|
1524 |
// Init the datepicker
|
1525 |
jQuery( selector ).datepicker( {
|
@@ -1535,12 +1670,12 @@ wp.customize.controlConstructor['kirki-date'] = wp.customize.kirkiDynamicControl
|
|
1535 |
}
|
1536 |
} );
|
1537 |
/* global dimensionkirkiL10n */
|
1538 |
-
wp.customize.controlConstructor['kirki-dimension'] = wp.customize.kirkiDynamicControl.extend({
|
1539 |
|
1540 |
initKirkiControl: function() {
|
1541 |
|
1542 |
var control = this,
|
1543 |
-
|
1544 |
|
1545 |
// Notifications.
|
1546 |
control.kirkiNotifications();
|
@@ -1550,7 +1685,7 @@ wp.customize.controlConstructor['kirki-dimension'] = wp.customize.kirkiDynamicCo
|
|
1550 |
|
1551 |
value = jQuery( this ).val();
|
1552 |
control.setting.set( value );
|
1553 |
-
});
|
1554 |
},
|
1555 |
|
1556 |
/**
|
@@ -1564,7 +1699,7 @@ wp.customize.controlConstructor['kirki-dimension'] = wp.customize.kirkiDynamicCo
|
|
1564 |
setting.bind( function( value ) {
|
1565 |
var code = 'long_title';
|
1566 |
|
1567 |
-
if ( false ===
|
1568 |
setting.notifications.add( code, new wp.customize.Notification(
|
1569 |
code,
|
1570 |
{
|
@@ -1578,17 +1713,17 @@ wp.customize.controlConstructor['kirki-dimension'] = wp.customize.kirkiDynamicCo
|
|
1578 |
} );
|
1579 |
} );
|
1580 |
}
|
1581 |
-
});
|
1582 |
/* global dimensionskirkiL10n */
|
1583 |
-
wp.customize.controlConstructor['kirki-dimensions'] = wp.customize.kirkiDynamicControl.extend({
|
1584 |
|
1585 |
initKirkiControl: function() {
|
1586 |
|
1587 |
var control = this,
|
1588 |
-
|
1589 |
-
|
1590 |
-
|
1591 |
-
|
1592 |
|
1593 |
_.each( subControls, function( v, i ) {
|
1594 |
if ( true === v ) {
|
@@ -1617,7 +1752,7 @@ wp.customize.controlConstructor['kirki-dimensions'] = wp.customize.kirkiDynamicC
|
|
1617 |
|
1618 |
// Save the value
|
1619 |
control.saveValue( value );
|
1620 |
-
});
|
1621 |
},
|
1622 |
|
1623 |
/**
|
@@ -1626,11 +1761,11 @@ wp.customize.controlConstructor['kirki-dimensions'] = wp.customize.kirkiDynamicC
|
|
1626 |
saveValue: function( value ) {
|
1627 |
|
1628 |
var control = this,
|
1629 |
-
|
1630 |
|
1631 |
_.each( value, function( newSubValue, i ) {
|
1632 |
newValue[ i ] = newSubValue;
|
1633 |
-
});
|
1634 |
|
1635 |
control.setting.set( newValue );
|
1636 |
},
|
@@ -1645,13 +1780,13 @@ wp.customize.controlConstructor['kirki-dimensions'] = wp.customize.kirkiDynamicC
|
|
1645 |
wp.customize( control.id, function( setting ) {
|
1646 |
setting.bind( function( value ) {
|
1647 |
var code = 'long_title',
|
1648 |
-
|
1649 |
-
|
1650 |
|
1651 |
setting.notifications.remove( code );
|
1652 |
|
1653 |
_.each( value, function( val, direction ) {
|
1654 |
-
if ( false ===
|
1655 |
subs[ direction ] = val;
|
1656 |
} else {
|
1657 |
delete subs[ direction ];
|
@@ -1670,16 +1805,16 @@ wp.customize.controlConstructor['kirki-dimensions'] = wp.customize.kirkiDynamicC
|
|
1670 |
} );
|
1671 |
} );
|
1672 |
}
|
1673 |
-
});
|
1674 |
/* global tinyMCE */
|
1675 |
-
wp.customize.controlConstructor['kirki-editor'] = wp.customize.kirkiDynamicControl.extend({
|
1676 |
|
1677 |
initKirkiControl: function() {
|
1678 |
|
1679 |
var control = this,
|
1680 |
-
|
1681 |
-
|
1682 |
-
|
1683 |
|
1684 |
wp.editor.initialize( id, {
|
1685 |
tinymce: {
|
@@ -1687,7 +1822,7 @@ wp.customize.controlConstructor['kirki-editor'] = wp.customize.kirkiDynamicContr
|
|
1687 |
},
|
1688 |
quicktags: true,
|
1689 |
mediaButtons: true
|
1690 |
-
});
|
1691 |
|
1692 |
editor = tinyMCE.get( id );
|
1693 |
|
@@ -1699,20 +1834,20 @@ wp.customize.controlConstructor['kirki-editor'] = wp.customize.kirkiDynamicContr
|
|
1699 |
content = editor.getContent();
|
1700 |
element.val( content ).trigger( 'change' );
|
1701 |
wp.customize.instance( control.id ).set( content );
|
1702 |
-
});
|
1703 |
}
|
1704 |
}
|
1705 |
-
});
|
1706 |
/* global fontAwesomeJSON */
|
1707 |
-
wp.customize.controlConstructor['kirki-fontawesome'] = wp.customize.kirkiDynamicControl.extend({
|
1708 |
|
1709 |
initKirkiControl: function() {
|
1710 |
|
1711 |
var control = this,
|
1712 |
-
|
1713 |
-
|
1714 |
-
|
1715 |
-
|
1716 |
data: [],
|
1717 |
escapeMarkup: function( markup ) {
|
1718 |
return markup;
|
@@ -1723,27 +1858,27 @@ wp.customize.controlConstructor['kirki-fontawesome'] = wp.customize.kirkiDynamic
|
|
1723 |
templateSelection: function( val ) {
|
1724 |
return '<i class="fa fa-lg fa-' + val.id + '" aria-hidden="true"></i>' + ' ' + val.text;
|
1725 |
}
|
1726 |
-
|
1727 |
-
|
1728 |
|
1729 |
_.each( icons.icons, function( icon ) {
|
1730 |
-
selectWooOptions.data.push({
|
1731 |
id: icon.id,
|
1732 |
text: icon.name
|
1733 |
-
});
|
1734 |
-
});
|
1735 |
|
1736 |
select = jQuery( element ).selectWoo( selectWooOptions );
|
1737 |
|
1738 |
select.on( 'change', function() {
|
1739 |
selectValue = jQuery( this ).val();
|
1740 |
control.setting.set( selectValue );
|
1741 |
-
});
|
1742 |
select.val( control.setting._value ).trigger( 'change' );
|
1743 |
}
|
1744 |
-
});
|
1745 |
/* global kirkiControlLoader */
|
1746 |
-
wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
1747 |
|
1748 |
// When we're finished loading continue processing
|
1749 |
ready: function() {
|
@@ -1763,12 +1898,12 @@ wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
|
1763 |
initKirkiControl: function() {
|
1764 |
|
1765 |
var control = this,
|
1766 |
-
|
1767 |
-
|
1768 |
-
|
1769 |
-
|
1770 |
-
|
1771 |
-
|
1772 |
|
1773 |
control.container.find( '.kirki-controls-loading-spinner' ).hide();
|
1774 |
|
@@ -1793,7 +1928,7 @@ wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
|
1793 |
}
|
1794 |
|
1795 |
// If value is default, hide the default button.
|
1796 |
-
if ( value === control.params
|
1797 |
control.container.find( 'image-default-button' ).hide();
|
1798 |
}
|
1799 |
|
@@ -1802,11 +1937,11 @@ wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
|
1802 |
}
|
1803 |
|
1804 |
control.container.on( 'click', '.image-upload-button', function( e ) {
|
1805 |
-
var image = wp.media({ multiple: false }).open().on( 'select', function() {
|
1806 |
|
1807 |
// This will return the selected image from the Media Uploader, the result is an object.
|
1808 |
var uploadedImage = image.state().get( 'selection' ).first(),
|
1809 |
-
|
1810 |
|
1811 |
if ( ! _.isUndefined( uploadedImage.toJSON().sizes.medium ) ) {
|
1812 |
previewImage = uploadedImage.toJSON().sizes.medium.url;
|
@@ -1832,16 +1967,16 @@ wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
|
1832 |
removeButton.show();
|
1833 |
defaultButton.hide();
|
1834 |
}
|
1835 |
-
|
1836 |
|
1837 |
e.preventDefault();
|
1838 |
-
});
|
1839 |
|
1840 |
control.container.on( 'click', '.image-upload-remove-button', function( e ) {
|
1841 |
|
1842 |
var preview,
|
1843 |
-
|
1844 |
-
|
1845 |
|
1846 |
e.preventDefault();
|
1847 |
|
@@ -1863,30 +1998,30 @@ wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
|
1863 |
defaultButton.show();
|
1864 |
}
|
1865 |
}
|
1866 |
-
});
|
1867 |
|
1868 |
control.container.on( 'click', '.image-default-button', function( e ) {
|
1869 |
|
1870 |
var preview,
|
1871 |
-
|
1872 |
-
|
1873 |
|
1874 |
e.preventDefault();
|
1875 |
|
1876 |
-
control.saveValue( 'url', control.params
|
1877 |
|
1878 |
preview = control.container.find( '.placeholder, .thumbnail' );
|
1879 |
removeButton = control.container.find( '.image-upload-remove-button' );
|
1880 |
defaultButton = control.container.find( '.image-default-button' );
|
1881 |
|
1882 |
if ( preview.length ) {
|
1883 |
-
preview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '<img src="' + control.params
|
1884 |
}
|
1885 |
if ( removeButton.length ) {
|
1886 |
removeButton.show();
|
1887 |
defaultButton.hide();
|
1888 |
}
|
1889 |
-
});
|
1890 |
},
|
1891 |
|
1892 |
/**
|
@@ -1894,8 +2029,8 @@ wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
|
1894 |
*/
|
1895 |
getValue: function() {
|
1896 |
var control = this,
|
1897 |
-
|
1898 |
-
|
1899 |
|
1900 |
if ( 'array' === saveAs && _.isString( value ) ) {
|
1901 |
value = {
|
@@ -1910,8 +2045,8 @@ wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
|
1910 |
*/
|
1911 |
saveValue: function( property, value ) {
|
1912 |
var control = this,
|
1913 |
-
|
1914 |
-
|
1915 |
|
1916 |
if ( 'array' === saveAs ) {
|
1917 |
if ( _.isString( valueOld ) ) {
|
@@ -1925,8 +2060,8 @@ wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend({
|
|
1925 |
control.setting.set( value );
|
1926 |
control.container.find( 'button' ).trigger( 'change' );
|
1927 |
}
|
1928 |
-
});
|
1929 |
-
wp.customize.controlConstructor['kirki-multicheck'] = wp.customize.kirkiDynamicControl.extend({
|
1930 |
|
1931 |
initKirkiControl: function() {
|
1932 |
|
@@ -1935,23 +2070,26 @@ wp.customize.controlConstructor['kirki-multicheck'] = wp.customize.kirkiDynamicC
|
|
1935 |
// Save the value
|
1936 |
control.container.on( 'change', 'input', function() {
|
1937 |
var value = [],
|
1938 |
-
|
1939 |
|
1940 |
// Build the value as an object using the sub-values from individual checkboxes.
|
1941 |
jQuery.each( control.params.choices, function( key ) {
|
1942 |
if ( control.container.find( 'input[value="' + key + '"]' ).is( ':checked' ) ) {
|
|
|
1943 |
value[ i ] = key;
|
1944 |
i++;
|
|
|
|
|
1945 |
}
|
1946 |
-
});
|
1947 |
|
1948 |
// Update the value in the customizer.
|
1949 |
control.setting.set( value );
|
1950 |
-
});
|
1951 |
}
|
1952 |
-
});
|
1953 |
/* global kirkiControlLoader */
|
1954 |
-
wp.customize.controlConstructor['kirki-multicolor'] = wp.customize.Control.extend({
|
1955 |
|
1956 |
// When we're finished loading continue processing
|
1957 |
ready: function() {
|
@@ -1973,16 +2111,16 @@ wp.customize.controlConstructor['kirki-multicolor'] = wp.customize.Control.exten
|
|
1973 |
'use strict';
|
1974 |
|
1975 |
var control = this,
|
1976 |
-
|
1977 |
-
|
1978 |
-
|
1979 |
-
|
1980 |
|
1981 |
// Proxy function that handles changing the individual colors
|
1982 |
function kirkiMulticolorChangeHandler( control, value, subSetting ) {
|
1983 |
|
1984 |
var picker = control.container.find( '.multicolor-index-' + subSetting ),
|
1985 |
-
|
1986 |
change: function() {
|
1987 |
|
1988 |
// Color controls require a small delay.
|
@@ -1995,12 +2133,12 @@ wp.customize.controlConstructor['kirki-multicolor'] = wp.customize.Control.exten
|
|
1995 |
control.container.find( '.multicolor-index-' + subSetting ).trigger( 'change' );
|
1996 |
}, 100 );
|
1997 |
}
|
1998 |
-
|
1999 |
|
2000 |
if ( _.isObject( colors.irisArgs ) ) {
|
2001 |
_.each( colors.irisArgs, function( irisValue, irisKey ) {
|
2002 |
args[ irisKey ] = irisValue;
|
2003 |
-
});
|
2004 |
}
|
2005 |
|
2006 |
// Did we change the value?
|
@@ -2020,101 +2158,23 @@ wp.customize.controlConstructor['kirki-multicolor'] = wp.customize.Control.exten
|
|
2020 |
saveValue: function( property, value ) {
|
2021 |
|
2022 |
var control = this,
|
2023 |
-
|
2024 |
-
|
2025 |
|
2026 |
val[ property ] = value;
|
2027 |
|
2028 |
jQuery( input ).attr( 'value', JSON.stringify( val ) ).trigger( 'change' );
|
2029 |
control.setting.set( val );
|
2030 |
}
|
2031 |
-
});
|
2032 |
-
wp.customize.controlConstructor['kirki-
|
2033 |
-
|
2034 |
-
initKirkiControl: function() {
|
2035 |
-
|
2036 |
-
var control = this,
|
2037 |
-
value = control.setting._value,
|
2038 |
-
html = '',
|
2039 |
-
input,
|
2040 |
-
up,
|
2041 |
-
down;
|
2042 |
-
|
2043 |
-
// Make sure we use default values if none are define for some arguments.
|
2044 |
-
control.params.choices = _.defaults( control.params.choices, {
|
2045 |
-
min: 0,
|
2046 |
-
max: 100,
|
2047 |
-
step: 1
|
2048 |
-
} );
|
2049 |
-
|
2050 |
-
// Make sure we have a valid value.
|
2051 |
-
if ( isNaN( value ) || '' === value ) {
|
2052 |
-
value = ( 0 > control.params.choices.min && 0 < control.params.choices.max ) ? 0 : control.params.choices.min;
|
2053 |
-
}
|
2054 |
-
value = parseFloat( value );
|
2055 |
-
|
2056 |
-
// If step is 'any', set to 0.001.
|
2057 |
-
control.params.choices.step = ( 'any' === control.params.choices.step ) ? 0.001 : control.params.choices.step;
|
2058 |
-
|
2059 |
-
// Make sure choices are properly formtted as numbers.
|
2060 |
-
control.params.choices.min = parseFloat( control.params.choices.min );
|
2061 |
-
control.params.choices.max = parseFloat( control.params.choices.max );
|
2062 |
-
control.params.choices.step = parseFloat( control.params.choices.step );
|
2063 |
-
|
2064 |
-
// Build the HTML for the control.
|
2065 |
-
html += '<label>';
|
2066 |
-
if ( control.params.label ) {
|
2067 |
-
html += '<span class="customize-control-title">' + control.params.label + '</span>';
|
2068 |
-
}
|
2069 |
-
if ( control.params.description ) {
|
2070 |
-
html += '<span class="description customize-control-description">' + control.params.description + '</span>';
|
2071 |
-
}
|
2072 |
-
html += '<div class="customize-control-content">';
|
2073 |
-
html += '<input ' + control.params.inputAttrs + ' type="text" ' + control.params.link + ' value="' + value + '" />';
|
2074 |
-
html += '<div class="quantity button minus">-</div>';
|
2075 |
-
html += '<div class="quantity button plus">+</div>';
|
2076 |
-
html += '</div>';
|
2077 |
-
html += '</label>';
|
2078 |
-
|
2079 |
-
control.container.html( html );
|
2080 |
-
|
2081 |
-
input = control.container.find( 'input' );
|
2082 |
-
up = control.container.find( '.plus' );
|
2083 |
-
down = control.container.find( '.minus' );
|
2084 |
-
|
2085 |
-
up.click( function() {
|
2086 |
-
var oldVal = parseFloat( input.val() ),
|
2087 |
-
newVal;
|
2088 |
-
|
2089 |
-
newVal = ( oldVal >= control.params.choices.max ) ? oldVal : oldVal + control.params.choices.step;
|
2090 |
-
|
2091 |
-
input.val( newVal );
|
2092 |
-
input.trigger( 'change' );
|
2093 |
-
} );
|
2094 |
-
|
2095 |
-
down.click( function() {
|
2096 |
-
var oldVal = parseFloat( input.val() ),
|
2097 |
-
newVal;
|
2098 |
-
|
2099 |
-
newVal = ( oldVal <= control.params.choices.min ) ? oldVal : oldVal - control.params.choices.step;
|
2100 |
-
|
2101 |
-
input.val( newVal );
|
2102 |
-
input.trigger( 'change' );
|
2103 |
-
} );
|
2104 |
-
|
2105 |
-
this.container.on( 'change keyup paste click', 'input', function() {
|
2106 |
-
control.setting.set( jQuery( this ).val() );
|
2107 |
-
});
|
2108 |
-
}
|
2109 |
-
});
|
2110 |
-
wp.customize.controlConstructor['kirki-palette'] = wp.customize.kirkiDynamicControl.extend({});
|
2111 |
/* global kirkiSetSettingValue */
|
2112 |
-
wp.customize.controlConstructor['kirki-preset'] = wp.customize.kirkiDynamicControl.extend({
|
2113 |
|
2114 |
initKirkiControl: function() {
|
2115 |
|
2116 |
var control = this,
|
2117 |
-
|
2118 |
|
2119 |
// Trigger a change
|
2120 |
this.container.on( 'change', 'select', function() {
|
@@ -2137,15 +2197,15 @@ wp.customize.controlConstructor['kirki-preset'] = wp.customize.kirkiDynamicContr
|
|
2137 |
// We'll have to loop through them all and apply the changes needed to them.
|
2138 |
jQuery.each( value.settings, function( presetSetting, presetSettingValue ) {
|
2139 |
kirkiSetSettingValue.set( presetSetting, presetSettingValue );
|
2140 |
-
});
|
2141 |
}
|
2142 |
-
});
|
2143 |
wp.customize.previewer.refresh();
|
2144 |
-
});
|
2145 |
}
|
2146 |
-
});
|
2147 |
-
wp.customize.controlConstructor['kirki-radio-buttonset'] = wp.customize.kirkiDynamicControl.extend({});
|
2148 |
-
wp.customize.controlConstructor['kirki-radio-image'] = wp.customize.kirkiDynamicControl.extend({});
|
2149 |
/* global kirkiControlLoader */
|
2150 |
var RepeaterRow = function( rowIndex, container, label, control ) {
|
2151 |
|
@@ -2155,23 +2215,23 @@ var RepeaterRow = function( rowIndex, container, label, control ) {
|
|
2155 |
this.rowIndex = rowIndex;
|
2156 |
this.container = container;
|
2157 |
this.label = label;
|
2158 |
-
this.header = this.container.find( '.repeater-row-header' )
|
2159 |
|
2160 |
this.header.on( 'click', function() {
|
2161 |
self.toggleMinimize();
|
2162 |
-
});
|
2163 |
|
2164 |
this.container.on( 'click', '.repeater-row-remove', function() {
|
2165 |
self.remove();
|
2166 |
-
});
|
2167 |
|
2168 |
this.header.on( 'mousedown', function() {
|
2169 |
self.container.trigger( 'row:start-dragging' );
|
2170 |
-
});
|
2171 |
|
2172 |
this.container.on( 'keyup change', 'input, select, textarea', function( e ) {
|
2173 |
self.container.trigger( 'row:update', [ self.rowIndex, jQuery( e.target ).data( 'field' ), e.target ] );
|
2174 |
-
});
|
2175 |
|
2176 |
this.setRowIndex = function( rowIndex ) {
|
2177 |
this.rowIndex = rowIndex;
|
@@ -2190,14 +2250,14 @@ var RepeaterRow = function( rowIndex, container, label, control ) {
|
|
2190 |
this.remove = function() {
|
2191 |
this.container.slideUp( 300, function() {
|
2192 |
jQuery( this ).detach();
|
2193 |
-
});
|
2194 |
this.container.trigger( 'row:remove', [ this.rowIndex ] );
|
2195 |
};
|
2196 |
|
2197 |
this.updateLabel = function() {
|
2198 |
var rowLabelField,
|
2199 |
-
|
2200 |
-
|
2201 |
|
2202 |
if ( 'field' === this.label.type ) {
|
2203 |
rowLabelField = this.container.find( '.repeater-field [data-field="' + this.label.field + '"]' );
|
@@ -2226,7 +2286,7 @@ var RepeaterRow = function( rowIndex, container, label, control ) {
|
|
2226 |
this.updateLabel();
|
2227 |
};
|
2228 |
|
2229 |
-
wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
2230 |
|
2231 |
// When we're finished loading continue processing
|
2232 |
ready: function() {
|
@@ -2248,8 +2308,8 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2248 |
'use strict';
|
2249 |
|
2250 |
var control = this,
|
2251 |
-
|
2252 |
-
|
2253 |
|
2254 |
// The current value set in Control Class (set in Kirki_Customize_Repeater_Control::to_json() function)
|
2255 |
var settingValue = this.params.value;
|
@@ -2287,56 +2347,57 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2287 |
} else {
|
2288 |
jQuery( control.selector + ' .limit' ).addClass( 'highlight' );
|
2289 |
}
|
2290 |
-
});
|
2291 |
|
2292 |
this.container.on( 'click', '.repeater-row-remove', function() {
|
2293 |
control.currentIndex--;
|
2294 |
if ( ! limit || control.currentIndex < limit ) {
|
2295 |
jQuery( control.selector + ' .limit' ).removeClass( 'highlight' );
|
2296 |
}
|
2297 |
-
});
|
2298 |
|
2299 |
this.container.on( 'click keypress', '.repeater-field-image .upload-button,.repeater-field-cropped_image .upload-button,.repeater-field-upload .upload-button', function( e ) {
|
2300 |
e.preventDefault();
|
2301 |
control.$thisButton = jQuery( this );
|
2302 |
control.openFrame( e );
|
2303 |
-
});
|
2304 |
|
2305 |
this.container.on( 'click keypress', '.repeater-field-image .remove-button,.repeater-field-cropped_image .remove-button', function( e ) {
|
2306 |
e.preventDefault();
|
2307 |
control.$thisButton = jQuery( this );
|
2308 |
control.removeImage( e );
|
2309 |
-
});
|
2310 |
|
2311 |
this.container.on( 'click keypress', '.repeater-field-upload .remove-button', function( e ) {
|
2312 |
e.preventDefault();
|
2313 |
control.$thisButton = jQuery( this );
|
2314 |
control.removeFile( e );
|
2315 |
-
});
|
2316 |
|
2317 |
/**
|
2318 |
* Function that loads the Mustache template
|
2319 |
*/
|
2320 |
this.repeaterTemplate = _.memoize( function() {
|
2321 |
var compiled,
|
2322 |
-
|
2323 |
-
|
2324 |
-
|
2325 |
-
|
2326 |
-
|
2327 |
-
|
2328 |
-
|
|
|
2329 |
evaluate: /<#([\s\S]+?)#>/g,
|
2330 |
interpolate: /\{\{\{([\s\S]+?)\}\}\}/g,
|
2331 |
escape: /\{\{([^\}]+?)\}\}(?!\})/g,
|
2332 |
variable: 'data'
|
2333 |
-
|
2334 |
|
2335 |
return function( data ) {
|
2336 |
compiled = _.template( control.container.find( '.customize-control-repeater-content' ).first().html(), null, options );
|
2337 |
return compiled( data );
|
2338 |
};
|
2339 |
-
});
|
2340 |
|
2341 |
// When we load the control, the fields have not been filled up
|
2342 |
// This is the first time that we create all the rows
|
@@ -2345,18 +2406,18 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2345 |
theNewRow = control.addRow( subValue );
|
2346 |
control.initColorPicker();
|
2347 |
control.initSelect( theNewRow, subValue );
|
2348 |
-
});
|
2349 |
}
|
2350 |
|
2351 |
// Once we have displayed the rows, we cleanup the values
|
2352 |
this.setValue( settingValue, true, true );
|
2353 |
|
2354 |
-
this.repeaterFieldsContainer.sortable({
|
2355 |
handle: '.repeater-row-header',
|
2356 |
update: function() {
|
2357 |
control.sort();
|
2358 |
}
|
2359 |
-
});
|
2360 |
|
2361 |
},
|
2362 |
|
@@ -2386,19 +2447,20 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2386 |
|
2387 |
var libMediaType = this.getMimeType();
|
2388 |
|
2389 |
-
this.frame = wp.media({
|
2390 |
states: [
|
2391 |
-
new wp.media.controller.Library({
|
2392 |
-
library:
|
2393 |
multiple: false,
|
2394 |
-
date:
|
2395 |
-
})
|
2396 |
]
|
2397 |
-
});
|
2398 |
|
2399 |
// When a file is selected, run a callback.
|
2400 |
this.frame.on( 'select', this.onSelect, this );
|
2401 |
},
|
|
|
2402 |
/**
|
2403 |
* Create a media modal select frame, and store it so the instance can be reused when needed.
|
2404 |
* This is mostly a copy/paste of Core api.CroppedImageControl in /wp-admin/js/customize-control.js
|
@@ -2409,8 +2471,8 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2409 |
|
2410 |
// We get the field id from which this was called
|
2411 |
var currentFieldId = this.$thisButton.siblings( 'input.hidden-field' ).attr( 'data-field' ),
|
2412 |
-
|
2413 |
-
|
2414 |
|
2415 |
// Make sure we got it
|
2416 |
if ( _.isString( currentFieldId ) && '' !== currentFieldId ) {
|
@@ -2431,25 +2493,25 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2431 |
}
|
2432 |
}
|
2433 |
|
2434 |
-
this.frame = wp.media({
|
2435 |
button: {
|
2436 |
text: 'Select and Crop',
|
2437 |
close: false
|
2438 |
},
|
2439 |
states: [
|
2440 |
-
new wp.media.controller.Library({
|
2441 |
-
library:
|
2442 |
-
multiple:
|
2443 |
-
date:
|
2444 |
-
suggestedWidth:
|
2445 |
suggestedHeight: this.params.height
|
2446 |
-
}),
|
2447 |
-
new wp.media.controller.CustomizeImageCropper({
|
2448 |
imgSelectOptions: this.calculateImageSelectOptions,
|
2449 |
control: this
|
2450 |
-
})
|
2451 |
]
|
2452 |
-
});
|
2453 |
|
2454 |
this.frame.on( 'select', this.onSelectForCrop, this );
|
2455 |
this.frame.on( 'cropped', this.onCropped, this );
|
@@ -2515,18 +2577,18 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2515 |
'use strict';
|
2516 |
|
2517 |
var control = controller.get( 'control' ),
|
2518 |
-
|
2519 |
-
|
2520 |
-
|
2521 |
-
|
2522 |
-
|
2523 |
-
|
2524 |
-
|
2525 |
-
|
2526 |
-
|
2527 |
-
|
2528 |
-
|
2529 |
-
|
2530 |
|
2531 |
controller.set( 'canSkipCrop', ! control.mustBeCropped( flexWidth, flexHeight, xInit, yInit, realWidth, realHeight ) );
|
2532 |
|
@@ -2542,16 +2604,16 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2542 |
y1 = ( yImg - yInit ) / 2;
|
2543 |
|
2544 |
imgSelectOptions = {
|
2545 |
-
handles:
|
2546 |
-
keys:
|
2547 |
-
instance:
|
2548 |
-
persistent:
|
2549 |
-
imageWidth:
|
2550 |
imageHeight: realHeight,
|
2551 |
-
x1:
|
2552 |
-
y1:
|
2553 |
-
x2:
|
2554 |
-
y2:
|
2555 |
};
|
2556 |
|
2557 |
if ( false === flexHeight && false === flexWidth ) {
|
@@ -2678,7 +2740,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2678 |
'use strict';
|
2679 |
|
2680 |
var $targetDiv,
|
2681 |
-
|
2682 |
|
2683 |
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
|
2684 |
return;
|
@@ -2689,7 +2751,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2689 |
|
2690 |
$targetDiv.find( '.kirki-image-attachment' ).slideUp( 'fast', function() {
|
2691 |
jQuery( this ).show().html( jQuery( this ).data( 'placeholder' ) );
|
2692 |
-
});
|
2693 |
$targetDiv.find( '.hidden-field' ).val( '' );
|
2694 |
$uploadButton.text( $uploadButton.data( 'label' ) );
|
2695 |
this.$thisButton.hide();
|
@@ -2703,7 +2765,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2703 |
'use strict';
|
2704 |
|
2705 |
var $targetDiv,
|
2706 |
-
|
2707 |
|
2708 |
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
|
2709 |
return;
|
@@ -2714,7 +2776,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2714 |
|
2715 |
$targetDiv.find( '.kirki-file-attachment' ).slideUp( 'fast', function() {
|
2716 |
jQuery( this ).show().html( jQuery( this ).data( 'placeholder' ) );
|
2717 |
-
});
|
2718 |
$targetDiv.find( '.hidden-field' ).val( '' );
|
2719 |
$uploadButton.text( $uploadButton.data( 'label' ) );
|
2720 |
this.$thisButton.hide();
|
@@ -2749,21 +2811,21 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2749 |
|
2750 |
// We need to filter the values after the first load to remove data requrired for diplay but that we don't want to save in DB
|
2751 |
var filteredValue = newValue,
|
2752 |
-
|
2753 |
|
2754 |
if ( filtering ) {
|
2755 |
jQuery.each( this.params.fields, function( index, value ) {
|
2756 |
if ( 'image' === value.type || 'cropped_image' === value.type || 'upload' === value.type ) {
|
2757 |
filter.push( index );
|
2758 |
}
|
2759 |
-
});
|
2760 |
jQuery.each( newValue, function( index, value ) {
|
2761 |
jQuery.each( filter, function( ind, field ) {
|
2762 |
if ( ! _.isUndefined( value[ field ] ) && ! _.isUndefined( value[ field ].id ) ) {
|
2763 |
filteredValue[index][ field ] = value[ field ].id;
|
2764 |
}
|
2765 |
-
});
|
2766 |
-
});
|
2767 |
}
|
2768 |
|
2769 |
this.setting.set( encodeURI( JSON.stringify( filteredValue ) ) );
|
@@ -2786,12 +2848,12 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2786 |
'use strict';
|
2787 |
|
2788 |
var control = this,
|
2789 |
-
|
2790 |
-
|
2791 |
-
|
2792 |
-
|
2793 |
-
|
2794 |
-
|
2795 |
|
2796 |
if ( template ) {
|
2797 |
|
@@ -2804,7 +2866,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2804 |
if ( data ) {
|
2805 |
for ( i in data ) {
|
2806 |
if ( data.hasOwnProperty( i ) && templateData.hasOwnProperty( i ) ) {
|
2807 |
-
templateData[ i ]
|
2808 |
}
|
2809 |
}
|
2810 |
}
|
@@ -2824,19 +2886,19 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2824 |
|
2825 |
newRow.container.on( 'row:remove', function( e, rowIndex ) {
|
2826 |
control.deleteRow( rowIndex );
|
2827 |
-
});
|
2828 |
|
2829 |
newRow.container.on( 'row:update', function( e, rowIndex, fieldName, element ) {
|
2830 |
control.updateField.call( control, e, rowIndex, fieldName, element );
|
2831 |
newRow.updateLabel();
|
2832 |
-
});
|
2833 |
|
2834 |
// Add the row to rows collection
|
2835 |
this.rows[ this.currentIndex ] = newRow;
|
2836 |
|
2837 |
for ( i in templateData ) {
|
2838 |
if ( templateData.hasOwnProperty( i ) ) {
|
2839 |
-
newRowSetting[ i ] = templateData[ i ]
|
2840 |
}
|
2841 |
}
|
2842 |
|
@@ -2854,22 +2916,22 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2854 |
'use strict';
|
2855 |
|
2856 |
var control = this,
|
2857 |
-
|
2858 |
-
|
2859 |
-
|
2860 |
-
|
2861 |
-
|
2862 |
|
2863 |
$rows.each( function( i, element ) {
|
2864 |
newOrder.push( jQuery( element ).data( 'row' ) );
|
2865 |
-
});
|
2866 |
|
2867 |
jQuery.each( newOrder, function( newPosition, oldPosition ) {
|
2868 |
newRows[ newPosition ] = control.rows[ oldPosition ];
|
2869 |
newRows[ newPosition ].setRowIndex( newPosition );
|
2870 |
|
2871 |
newSettings[ newPosition ] = settings[ oldPosition ];
|
2872 |
-
});
|
2873 |
|
2874 |
control.rows = newRows;
|
2875 |
control.setValue( newSettings );
|
@@ -2886,9 +2948,9 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2886 |
'use strict';
|
2887 |
|
2888 |
var currentSettings = this.getValue(),
|
2889 |
-
|
2890 |
-
|
2891 |
-
|
2892 |
|
2893 |
if ( currentSettings[ index ] ) {
|
2894 |
|
@@ -2930,8 +2992,8 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2930 |
'use strict';
|
2931 |
|
2932 |
var type,
|
2933 |
-
|
2934 |
-
|
2935 |
|
2936 |
if ( ! this.rows[ rowIndex ] ) {
|
2937 |
return;
|
@@ -2971,9 +3033,9 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2971 |
'use strict';
|
2972 |
|
2973 |
var control = this,
|
2974 |
-
|
2975 |
-
|
2976 |
-
|
2977 |
|
2978 |
// We check if the color palette parameter is defined.
|
2979 |
if ( ! _.isUndefined( fieldId ) && ! _.isUndefined( control.params.fields[ fieldId ] ) && ! _.isUndefined( control.params.fields[ fieldId ].palettes ) && _.isObject( control.params.fields[ fieldId ].palettes ) ) {
|
@@ -2984,9 +3046,9 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
2984 |
options.change = function( event, ui ) {
|
2985 |
|
2986 |
var currentPicker = jQuery( event.target ),
|
2987 |
-
|
2988 |
-
|
2989 |
-
|
2990 |
|
2991 |
currentSettings[ rowIndex ][ currentPicker.data( 'field' ) ] = ui.color.toString();
|
2992 |
control.setValue( currentSettings, true );
|
@@ -3012,11 +3074,11 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
3012 |
'use strict';
|
3013 |
|
3014 |
var control = this,
|
3015 |
-
|
3016 |
-
|
3017 |
-
|
3018 |
-
|
3019 |
-
|
3020 |
|
3021 |
if ( 0 === dropdown.length ) {
|
3022 |
return;
|
@@ -3039,23 +3101,23 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
|
|
3039 |
this.container.on( 'change', '.repeater-field select', function( event ) {
|
3040 |
|
3041 |
var currentDropdown = jQuery( event.target ),
|
3042 |
-
|
3043 |
-
|
3044 |
-
|
3045 |
|
3046 |
currentSettings[ rowIndex ][ currentDropdown.data( 'field' ) ] = jQuery( this ).val();
|
3047 |
control.setValue( currentSettings );
|
3048 |
-
});
|
3049 |
}
|
3050 |
-
});
|
3051 |
-
wp.customize.controlConstructor['kirki-slider'] = wp.customize.kirkiDynamicControl.extend({
|
3052 |
|
3053 |
initKirkiControl: function() {
|
3054 |
var control = this,
|
3055 |
-
|
3056 |
rangeInput = control.container.find( 'input[type="range"]' ),
|
3057 |
textInput = control.container.find( 'input[type="text"]' ),
|
3058 |
-
|
3059 |
|
3060 |
// Set the initial value in the text input.
|
3061 |
textInput.attr( 'value', value );
|
@@ -3086,14 +3148,14 @@ wp.customize.controlConstructor['kirki-slider'] = wp.customize.kirkiDynamicContr
|
|
3086 |
// set slider and text input values to default
|
3087 |
// and hen save.
|
3088 |
control.container.find( '.slider-reset' ).on( 'click', function() {
|
3089 |
-
textInput.attr( 'value', control.params
|
3090 |
-
rangeInput.attr( 'value', control.params
|
3091 |
control.setting.set( textInput.val() );
|
3092 |
} );
|
3093 |
}
|
3094 |
-
});
|
3095 |
/* global kirkiControlLoader */
|
3096 |
-
wp.customize.controlConstructor['kirki-sortable'] = wp.customize.Control.extend({
|
3097 |
|
3098 |
// When we're finished loading continue processing
|
3099 |
ready: function() {
|
@@ -3122,23 +3184,23 @@ wp.customize.controlConstructor['kirki-sortable'] = wp.customize.Control.extend(
|
|
3122 |
control.sortableContainer = control.container.find( 'ul.sortable' ).first();
|
3123 |
|
3124 |
// Init sortable.
|
3125 |
-
control.sortableContainer.sortable({
|
3126 |
|
3127 |
// Update value when we stop sorting.
|
3128 |
stop: function() {
|
3129 |
control.updateValue();
|
3130 |
}
|
3131 |
-
}).disableSelection().find( 'li' ).each( function() {
|
3132 |
|
3133 |
// Enable/disable options when we click on the eye of Thundera.
|
3134 |
jQuery( this ).find( 'i.visibility' ).click( function() {
|
3135 |
jQuery( this ).toggleClass( 'dashicons-visibility-faint' ).parents( 'li:eq(0)' ).toggleClass( 'invisible' );
|
3136 |
-
});
|
3137 |
-
}).click( function() {
|
3138 |
|
3139 |
// Update value on click.
|
3140 |
control.updateValue();
|
3141 |
-
});
|
3142 |
},
|
3143 |
|
3144 |
/**
|
@@ -3149,91 +3211,91 @@ wp.customize.controlConstructor['kirki-sortable'] = wp.customize.Control.extend(
|
|
3149 |
'use strict';
|
3150 |
|
3151 |
var control = this,
|
3152 |
-
|
3153 |
|
3154 |
this.sortableContainer.find( 'li' ).each( function() {
|
3155 |
if ( ! jQuery( this ).is( '.invisible' ) ) {
|
3156 |
newValue.push( jQuery( this ).data( 'value' ) );
|
3157 |
}
|
3158 |
-
});
|
3159 |
control.setting.set( newValue );
|
3160 |
}
|
3161 |
-
});
|
3162 |
-
wp.customize.controlConstructor['kirki-switch'] = wp.customize.kirkiDynamicControl.extend({
|
3163 |
|
3164 |
initKirkiControl: function() {
|
3165 |
|
3166 |
'use strict';
|
3167 |
|
3168 |
var control = this,
|
3169 |
-
|
3170 |
|
3171 |
// Save the value
|
3172 |
this.container.on( 'change', 'input', function() {
|
3173 |
checkboxValue = ( jQuery( this ).is( ':checked' ) ) ? true : false;
|
3174 |
control.setting.set( checkboxValue );
|
3175 |
-
});
|
3176 |
}
|
3177 |
-
});
|
3178 |
-
wp.customize.controlConstructor['kirki-toggle'] = wp.customize.kirkiDynamicControl.extend({
|
3179 |
|
3180 |
initKirkiControl: function() {
|
3181 |
|
3182 |
var control = this,
|
3183 |
-
|
3184 |
|
3185 |
// Save the value
|
3186 |
this.container.on( 'change', 'input', function() {
|
3187 |
checkboxValue = ( jQuery( this ).is( ':checked' ) ) ? true : false;
|
3188 |
control.setting.set( checkboxValue );
|
3189 |
-
});
|
3190 |
}
|
3191 |
-
});
|
3192 |
/* global kirkiL10n, kirki */
|
3193 |
-
wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicControl.extend({
|
3194 |
|
3195 |
initKirkiControl: function() {
|
3196 |
|
3197 |
'use strict';
|
3198 |
|
3199 |
var control = this,
|
3200 |
-
|
3201 |
-
|
3202 |
|
3203 |
control.renderFontSelector();
|
3204 |
control.renderBackupFontSelector();
|
3205 |
control.renderVariantSelector();
|
3206 |
|
3207 |
// Font-size.
|
3208 |
-
if ( control.params
|
3209 |
this.container.on( 'change keyup paste', '.font-size input', function() {
|
3210 |
control.saveValue( 'font-size', jQuery( this ).val() );
|
3211 |
} );
|
3212 |
}
|
3213 |
|
3214 |
// Line-height.
|
3215 |
-
if ( control.params
|
3216 |
this.container.on( 'change keyup paste', '.line-height input', function() {
|
3217 |
control.saveValue( 'line-height', jQuery( this ).val() );
|
3218 |
} );
|
3219 |
}
|
3220 |
|
3221 |
// Margin-top.
|
3222 |
-
if ( control.params
|
3223 |
this.container.on( 'change keyup paste', '.margin-top input', function() {
|
3224 |
control.saveValue( 'margin-top', jQuery( this ).val() );
|
3225 |
} );
|
3226 |
}
|
3227 |
|
3228 |
// Margin-bottom.
|
3229 |
-
if ( control.params
|
3230 |
this.container.on( 'change keyup paste', '.margin-bottom input', function() {
|
3231 |
control.saveValue( 'margin-bottom', jQuery( this ).val() );
|
3232 |
} );
|
3233 |
}
|
3234 |
|
3235 |
// Letter-spacing.
|
3236 |
-
if ( control.params
|
3237 |
value['letter-spacing'] = ( jQuery.isNumeric( value['letter-spacing'] ) ) ? value['letter-spacing'] + 'px' : value['letter-spacing'];
|
3238 |
this.container.on( 'change keyup paste', '.letter-spacing input', function() {
|
3239 |
value['letter-spacing'] = ( jQuery.isNumeric( jQuery( this ).val() ) ) ? jQuery( this ).val() + 'px' : jQuery( this ).val();
|
@@ -3242,37 +3304,37 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3242 |
}
|
3243 |
|
3244 |
// Word-spacing.
|
3245 |
-
if ( control.params
|
3246 |
this.container.on( 'change keyup paste', '.word-spacing input', function() {
|
3247 |
control.saveValue( 'word-spacing', jQuery( this ).val() );
|
3248 |
} );
|
3249 |
}
|
3250 |
|
3251 |
// Text-align.
|
3252 |
-
if ( control.params
|
3253 |
this.container.on( 'change', '.text-align input', function() {
|
3254 |
control.saveValue( 'text-align', jQuery( this ).val() );
|
3255 |
} );
|
3256 |
}
|
3257 |
|
3258 |
// Text-transform.
|
3259 |
-
if ( control.params
|
3260 |
jQuery( control.selector + ' .text-transform select' ).selectWoo().on( 'change', function() {
|
3261 |
control.saveValue( 'text-transform', jQuery( this ).val() );
|
3262 |
} );
|
3263 |
}
|
3264 |
|
3265 |
// Text-decoration.
|
3266 |
-
if ( control.params
|
3267 |
jQuery( control.selector + ' .text-decoration select' ).selectWoo().on( 'change', function() {
|
3268 |
control.saveValue( 'text-decoration', jQuery( this ).val() );
|
3269 |
} );
|
3270 |
}
|
3271 |
|
3272 |
// Color.
|
3273 |
-
if ( control.params
|
3274 |
picker = this.container.find( '.kirki-color-control' );
|
3275 |
-
picker.wpColorPicker({
|
3276 |
change: function() {
|
3277 |
setTimeout( function() {
|
3278 |
control.saveValue( 'color', picker.val() );
|
@@ -3289,18 +3351,19 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3289 |
renderFontSelector: function() {
|
3290 |
|
3291 |
var control = this,
|
3292 |
-
|
3293 |
-
|
3294 |
-
|
3295 |
-
|
3296 |
-
|
3297 |
-
|
3298 |
-
|
|
|
3299 |
|
3300 |
// Format standard fonts as an array.
|
3301 |
if ( ! _.isUndefined( fonts.standard ) ) {
|
3302 |
_.each( fonts.standard, function( font ) {
|
3303 |
-
standardFonts.push({
|
3304 |
id: font.family.replace( /"/g, ''' ),
|
3305 |
text: font.label
|
3306 |
} );
|
@@ -3310,22 +3373,48 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3310 |
// Format google fonts as an array.
|
3311 |
if ( ! _.isUndefined( fonts.google ) ) {
|
3312 |
_.each( fonts.google, function( font ) {
|
3313 |
-
googleFonts.push({
|
3314 |
id: font.family,
|
3315 |
text: font.family
|
3316 |
} );
|
3317 |
} );
|
3318 |
}
|
3319 |
|
|
|
|
|
|
|
|
|
|
|
|
|
3320 |
// Combine forces and build the final data.
|
3321 |
-
data =
|
3322 |
-
|
3323 |
-
|
3324 |
-
|
3325 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3326 |
|
3327 |
// Instantiate selectWoo with the data.
|
3328 |
-
fontSelect = jQuery( selector ).selectWoo({
|
3329 |
data: data
|
3330 |
} );
|
3331 |
|
@@ -3355,12 +3444,12 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3355 |
renderBackupFontSelector: function() {
|
3356 |
|
3357 |
var control = this,
|
3358 |
-
|
3359 |
-
|
3360 |
-
|
3361 |
-
|
3362 |
-
|
3363 |
-
|
3364 |
|
3365 |
if ( _.isUndefined( value['font-backup'] ) || null === value['font-backup'] ) {
|
3366 |
value['font-backup'] = '';
|
@@ -3376,7 +3465,7 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3376 |
// Format standard fonts as an array.
|
3377 |
if ( ! _.isUndefined( fonts.standard ) ) {
|
3378 |
_.each( fonts.standard, function( font ) {
|
3379 |
-
standardFonts.push({
|
3380 |
id: font.family.replace( /"/g, ''' ),
|
3381 |
text: font.label
|
3382 |
} );
|
@@ -3384,7 +3473,7 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3384 |
}
|
3385 |
|
3386 |
// Instantiate selectWoo with the data.
|
3387 |
-
fontSelect = jQuery( selector ).selectWoo({
|
3388 |
data: standardFonts
|
3389 |
} );
|
3390 |
|
@@ -3408,24 +3497,37 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3408 |
renderVariantSelector: function() {
|
3409 |
|
3410 |
var control = this,
|
3411 |
-
|
3412 |
-
|
3413 |
-
|
3414 |
-
|
3415 |
-
|
3416 |
-
|
3417 |
-
|
3418 |
-
|
3419 |
-
|
3420 |
-
|
3421 |
|
3422 |
if ( 'google' === fontType ) {
|
3423 |
variants = kirki.util.webfonts.google.getVariants( fontFamily );
|
3424 |
}
|
3425 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3426 |
if ( 'inherit' === fontFamily ) {
|
3427 |
value.variant = 'inherit';
|
3428 |
-
variants = [''];
|
3429 |
jQuery( control.selector + ' .variant' ).hide();
|
3430 |
}
|
3431 |
|
@@ -3436,7 +3538,7 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3436 |
|
3437 |
control.saveValue( 'variant', value.variant );
|
3438 |
|
3439 |
-
if ( '' === value.variant ) {
|
3440 |
fontWeight = '';
|
3441 |
fontStyle = '';
|
3442 |
} else {
|
@@ -3458,7 +3560,7 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3458 |
if ( value.variant === variant ) {
|
3459 |
isValid = true;
|
3460 |
}
|
3461 |
-
data.push({
|
3462 |
id: variant,
|
3463 |
text: variant
|
3464 |
} );
|
@@ -3473,12 +3575,15 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3473 |
}
|
3474 |
|
3475 |
// Instantiate selectWoo with the data.
|
3476 |
-
variantSelector = jQuery( selector ).selectWoo({
|
3477 |
data: data
|
3478 |
} );
|
3479 |
variantSelector.val( value.variant ).trigger( 'change' );
|
3480 |
variantSelector.on( 'change', function() {
|
3481 |
control.saveValue( 'variant', jQuery( this ).val() );
|
|
|
|
|
|
|
3482 |
|
3483 |
fontWeight = ( ! _.isString( value.variant ) ) ? '400' : value.variant.match( /\d/g );
|
3484 |
fontWeight = ( ! _.isObject( fontWeight ) ) ? '400' : fontWeight.join( '' );
|
@@ -3494,11 +3599,11 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3494 |
*/
|
3495 |
getFonts: function() {
|
3496 |
var control = this,
|
3497 |
-
|
3498 |
-
|
3499 |
-
|
3500 |
googleFontsNumber = 0,
|
3501 |
-
|
3502 |
|
3503 |
// Get google fonts.
|
3504 |
if ( ! _.isEmpty( control.params.choices.fonts.google ) ) {
|
@@ -3562,8 +3667,8 @@ wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicC
|
|
3562 |
saveValue: function( property, value ) {
|
3563 |
|
3564 |
var control = this,
|
3565 |
-
|
3566 |
-
|
3567 |
|
3568 |
val[ property ] = value;
|
3569 |
|
1 |
/* jshint -W079 */
|
2 |
/* jshint unused:false */
|
3 |
if ( _.isUndefined( window.kirkiSetSettingValue ) ) {
|
4 |
+
var kirkiSetSettingValue = { // eslint-disable-line vars-on-top
|
5 |
|
6 |
/**
|
7 |
* Set the value of the control.
|
18 |
* and determine if we need to do any further work based on those.
|
19 |
*/
|
20 |
var $this = this,
|
21 |
+
subControl = wp.customize.settings.controls[ setting ],
|
22 |
+
valueJSON;
|
23 |
|
24 |
// If the control doesn't exist then return.
|
25 |
if ( _.isUndefined( subControl ) ) {
|
37 |
$this.setColorPicker( $this.findElement( setting, '.kirki-color-control' ), value['background-color'] );
|
38 |
}
|
39 |
$this.findElement( setting, '.placeholder, .thumbnail' ).removeClass().addClass( 'placeholder' ).html( 'No file selected' );
|
40 |
+
_.each( [ 'background-repeat', 'background-position' ], function( subVal ) {
|
41 |
if ( ! _.isUndefined( value[ subVal ] ) ) {
|
42 |
$this.setSelectWoo( $this.findElement( setting, '.' + subVal + ' select' ), value[ subVal ] );
|
43 |
}
|
44 |
+
} );
|
45 |
+
_.each( [ 'background-size', 'background-attachment' ], function( subVal ) {
|
46 |
jQuery( $this.findElement( setting, '.' + subVal + ' input[value="' + value + '"]' ) ).prop( 'checked', true );
|
47 |
+
} );
|
48 |
valueJSON = JSON.stringify( value ).replace( /'/g, ''' );
|
49 |
jQuery( $this.findElement( setting, '.background-hidden-value' ).attr( 'value', valueJSON ) ).trigger( 'change' );
|
50 |
break;
|
86 |
case 'kirki-multicheck':
|
87 |
$this.findElement( setting, 'input' ).each( function() {
|
88 |
jQuery( this ).prop( 'checked', false );
|
89 |
+
} );
|
90 |
_.each( value, function( subValue, i ) {
|
91 |
jQuery( $this.findElement( setting, 'input[value="' + value[ i ] + '"]' ) ).prop( 'checked', true );
|
92 |
+
} );
|
93 |
break;
|
94 |
|
95 |
case 'kirki-multicolor':
|
96 |
_.each( value, function( subVal, index ) {
|
97 |
$this.setColorPicker( $this.findElement( setting, '.multicolor-index-' + index ), subVal );
|
98 |
+
} );
|
99 |
break;
|
100 |
|
101 |
case 'kirki-radio-buttonset':
|
108 |
break;
|
109 |
|
110 |
case 'kirki-typography':
|
111 |
+
_.each( [ 'font-family', 'variant' ], function( subVal ) {
|
112 |
if ( ! _.isUndefined( value[ subVal ] ) ) {
|
113 |
$this.setSelectWoo( $this.findElement( setting, '.' + subVal + ' select' ), value[ subVal ] );
|
114 |
}
|
115 |
+
} );
|
116 |
+
_.each( [ 'font-size', 'line-height', 'letter-spacing', 'word-spacing' ], function( subVal ) {
|
117 |
if ( ! _.isUndefined( value[ subVal ] ) ) {
|
118 |
jQuery( $this.findElement( setting, '.' + subVal + ' input' ) ).prop( 'value', value[ subVal ] );
|
119 |
}
|
120 |
+
} );
|
121 |
|
122 |
if ( ! _.isUndefined( value.color ) ) {
|
123 |
$this.setColorPicker( $this.findElement( setting, '.kirki-color-control' ), value.color );
|
129 |
case 'kirki-dimensions':
|
130 |
_.each( value, function( subValue, id ) {
|
131 |
jQuery( $this.findElement( setting, '.' + id + ' input' ) ).prop( 'value', subValue );
|
132 |
+
} );
|
133 |
break;
|
134 |
|
135 |
case 'kirki-repeater':
|
202 |
*/
|
203 |
setValue: function( setting, value, timeout ) {
|
204 |
timeout = ( _.isUndefined( timeout ) ) ? 100 : parseInt( timeout, 10 );
|
205 |
+
wp.customize.instance( setting ).set( {} );
|
206 |
setTimeout( function() {
|
207 |
wp.customize.instance( setting ).set( value );
|
208 |
}, timeout );
|
295 |
description: control.params.description,
|
296 |
'data-id': control.id,
|
297 |
inputAttrs: control.params.inputAttrs,
|
298 |
+
'default': control.params.default,
|
299 |
value: kirki.setting.get( control.id ),
|
300 |
choices: control.params.choices
|
301 |
} ) );
|
355 |
mode: control.params.mode,
|
356 |
inputAttrs: control.params.inputAttrs,
|
357 |
'data-palette': control.params.palette,
|
358 |
+
'data-default-color': control.params.default,
|
359 |
'data-alpha': control.params.choices.alpha,
|
360 |
value: kirki.setting.get( control.id )
|
361 |
} ) );
|
416 |
inputAttrs: control.params.inputAttrs,
|
417 |
choices: control.params.choices,
|
418 |
value: kirki.setting.get( control.id )
|
419 |
+
},
|
420 |
+
template;
|
421 |
|
422 |
if ( ! _.isUndefined( control.params ) && ! _.isUndefined( control.params.choices ) && ! _.isUndefined( control.params.choices.element ) && 'textarea' === control.params.choices.element ) {
|
423 |
template = wp.template( 'kirki-input-textarea' );
|
429 |
}
|
430 |
},
|
431 |
|
432 |
+
/**
|
433 |
+
* The number control.
|
434 |
+
*
|
435 |
+
* @since 3.0.26
|
436 |
+
*/
|
437 |
+
'kirki-number': {
|
438 |
+
|
439 |
+
/**
|
440 |
+
* Init the control.
|
441 |
+
*
|
442 |
+
* @since 3.0.26
|
443 |
+
* @param {Object} control - The customizer control object.
|
444 |
+
* @returns {null}
|
445 |
+
*/
|
446 |
+
init: function( control ) {
|
447 |
+
var self = this;
|
448 |
+
|
449 |
+
// Render the template.
|
450 |
+
self.template( control );
|
451 |
+
|
452 |
+
// Init the control.
|
453 |
+
kirki.input.number.init( control );
|
454 |
+
},
|
455 |
+
|
456 |
+
/**
|
457 |
+
* Render the template.
|
458 |
+
*
|
459 |
+
* @since 3.0.27
|
460 |
+
* @param {Object} control - The customizer control object.
|
461 |
+
* @param {Object} control.params - The control parameters.
|
462 |
+
* @param {string} control.params.label - The control label.
|
463 |
+
* @param {string} control.params.description - The control description.
|
464 |
+
* @param {string} control.params.inputAttrs - extra input arguments.
|
465 |
+
* @param {string} control.params.default - The default value.
|
466 |
+
* @param {Object} control.params.choices - Any extra choices we may need.
|
467 |
+
* @param {string} control.id - The setting.
|
468 |
+
* @returns {null}
|
469 |
+
*/
|
470 |
+
template: function( control ) {
|
471 |
+
var template = wp.template( 'kirki-input-number' );
|
472 |
+
|
473 |
+
control.container.html(
|
474 |
+
template( args = {
|
475 |
+
label: control.params.label,
|
476 |
+
description: control.params.description,
|
477 |
+
'data-id': control.id,
|
478 |
+
inputAttrs: control.params.inputAttrs,
|
479 |
+
choices: control.params.choices,
|
480 |
+
value: kirki.setting.get( control.id )
|
481 |
+
} )
|
482 |
+
);
|
483 |
+
}
|
484 |
+
},
|
485 |
+
|
486 |
'kirki-select': {
|
487 |
|
488 |
/**
|
528 |
value: kirki.setting.get( control.id ),
|
529 |
multiple: control.params.multiple || 1,
|
530 |
placeholder: control.params.placeholder
|
531 |
+
} ) );
|
532 |
}
|
533 |
}
|
534 |
}
|
536 |
/* global kirkiL10n */
|
537 |
var kirki = kirki || {};
|
538 |
kirki = jQuery.extend( kirki, {
|
539 |
+
|
540 |
/**
|
541 |
* An object containing definitions for input fields.
|
542 |
*
|
565 |
// Save the value
|
566 |
input.on( 'change keyup paste click', function() {
|
567 |
kirki.setting.set( control.id, jQuery( this ).val() );
|
568 |
+
} );
|
569 |
}
|
570 |
},
|
571 |
|
590 |
*/
|
591 |
init: function( control ) {
|
592 |
var picker = jQuery( '.kirki-color-control[data-id="' + control.id + '"]' ),
|
593 |
+
clear;
|
594 |
|
595 |
control.choices = control.choices || {};
|
596 |
if ( _.isEmpty( control.choices ) && control.params.choices ) {
|
608 |
if ( clear.length ) {
|
609 |
clear.click( function() {
|
610 |
kirki.setting.set( control.id, '' );
|
611 |
+
} );
|
612 |
}
|
613 |
}, 200 );
|
614 |
|
615 |
// Saves our settings to the WP API
|
616 |
+
picker.wpColorPicker( {
|
617 |
change: function() {
|
618 |
|
619 |
// Small hack: the picker needs a small delay
|
621 |
kirki.setting.set( control.id, picker.val() );
|
622 |
}, 20 );
|
623 |
}
|
624 |
+
} );
|
625 |
}
|
626 |
},
|
627 |
|
646 |
// Save the value
|
647 |
input.on( 'change keyup paste click', function() {
|
648 |
kirki.setting.set( control.id, jQuery( this ).val() );
|
649 |
+
} );
|
650 |
}
|
651 |
},
|
652 |
|
671 |
// Save the value
|
672 |
textarea.on( 'change keyup paste click', function() {
|
673 |
kirki.setting.set( control.id, jQuery( this ).val() );
|
674 |
+
} );
|
675 |
}
|
676 |
},
|
677 |
|
687 |
*/
|
688 |
init: function( control ) {
|
689 |
var element = jQuery( 'select[data-id="' + control.id + '"]' ),
|
690 |
+
multiple = parseInt( element.data( 'multiple' ), 10 ),
|
691 |
+
selectValue,
|
692 |
+
selectWooOptions = {
|
693 |
escapeMarkup: function( markup ) {
|
694 |
return markup;
|
695 |
}
|
696 |
+
};
|
697 |
if ( control.params.placeholder ) {
|
698 |
selectWooOptions.placeholder = control.params.placeholder;
|
699 |
selectWooOptions.allowClear = true;
|
706 |
selectValue = jQuery( this ).val();
|
707 |
selectValue = ( null === selectValue && 1 < multiple ) ? [] : selectValue;
|
708 |
kirki.setting.set( control.id, selectValue );
|
709 |
+
} );
|
710 |
}
|
711 |
},
|
712 |
|
713 |
+
/**
|
714 |
+
* Number fields.
|
715 |
+
*
|
716 |
+
* @since 3.0.26
|
717 |
+
*/
|
718 |
+
number: {
|
719 |
+
|
720 |
+
/**
|
721 |
+
* Init the control.
|
722 |
+
*
|
723 |
+
* @since 3.0.17
|
724 |
+
* @param {Object} control - The control object.
|
725 |
+
* @param {Object} control.id - The setting.
|
726 |
+
* @returns {null}
|
727 |
+
*/
|
728 |
+
init: function( control ) {
|
729 |
+
|
730 |
+
var element = jQuery( 'input[data-id="' + control.id + '"]' ),
|
731 |
+
value = control.setting._value,
|
732 |
+
up,
|
733 |
+
down;
|
734 |
+
|
735 |
+
// Make sure we use default values if none are define for some arguments.
|
736 |
+
control.params.choices = _.defaults( control.params.choices, {
|
737 |
+
min: 0,
|
738 |
+
max: 100,
|
739 |
+
step: 1
|
740 |
+
} );
|
741 |
+
|
742 |
+
// Make sure we have a valid value.
|
743 |
+
if ( isNaN( value ) || '' === value ) {
|
744 |
+
value = ( 0 > control.params.choices.min && 0 < control.params.choices.max ) ? 0 : control.params.choices.min;
|
745 |
+
}
|
746 |
+
value = parseFloat( value );
|
747 |
+
|
748 |
+
// If step is 'any', set to 0.001.
|
749 |
+
control.params.choices.step = ( 'any' === control.params.choices.step ) ? 0.001 : control.params.choices.step;
|
750 |
+
|
751 |
+
// Make sure choices are properly formtted as numbers.
|
752 |
+
control.params.choices.min = parseFloat( control.params.choices.min );
|
753 |
+
control.params.choices.max = parseFloat( control.params.choices.max );
|
754 |
+
control.params.choices.step = parseFloat( control.params.choices.step );
|
755 |
+
|
756 |
+
up = jQuery( '.kirki-input-container[data-id="' + control.id + '"] .plus' );
|
757 |
+
down = jQuery( '.kirki-input-container[data-id="' + control.id + '"] .minus' );
|
758 |
+
|
759 |
+
up.click( function() {
|
760 |
+
var oldVal = parseFloat( element.val() ),
|
761 |
+
newVal;
|
762 |
+
|
763 |
+
newVal = ( oldVal >= control.params.choices.max ) ? oldVal : oldVal + control.params.choices.step;
|
764 |
+
|
765 |
+
element.val( newVal );
|
766 |
+
element.trigger( 'change' );
|
767 |
+
} );
|
768 |
+
|
769 |
+
down.click( function() {
|
770 |
+
var oldVal = parseFloat( element.val() ),
|
771 |
+
newVal;
|
772 |
+
|
773 |
+
newVal = ( oldVal <= control.params.choices.min ) ? oldVal : oldVal - control.params.choices.step;
|
774 |
+
|
775 |
+
element.val( newVal );
|
776 |
+
element.trigger( 'change' );
|
777 |
+
} );
|
778 |
+
|
779 |
+
element.on( 'change keyup paste click', function() {
|
780 |
+
kirki.setting.set( control.id, jQuery( this ).val() );
|
781 |
+
} );
|
782 |
+
}
|
783 |
+
|
784 |
+
},
|
785 |
+
|
786 |
image: {
|
787 |
|
788 |
/**
|
794 |
*/
|
795 |
getTemplate: function( data ) {
|
796 |
var html = '',
|
797 |
+
saveAs = 'url',
|
798 |
+
url;
|
799 |
|
800 |
data = _.defaults( data, {
|
801 |
label: '',
|
830 |
}
|
831 |
html += '<div class="actions">';
|
832 |
html += '<button class="button image-upload-remove-button' + ( '' === url ? ' hidden' : '' ) + '">' + kirkiL10n.remove + '</button>';
|
833 |
+
if ( data.default && '' !== data.default ) {
|
834 |
html += '<button type="button" class="button image-default-button"';
|
835 |
+
if ( data.default === data.value || ( ! _.isUndefined( data.value.url ) && data.default === data.value.url ) ) {
|
836 |
html += ' style="display:none;"';
|
837 |
}
|
838 |
+
html += '>' + kirkiL10n.default + '</button>';
|
839 |
}
|
840 |
html += '<button type="button" class="button image-upload-button">' + kirkiL10n.selectFile + '</button>';
|
841 |
html += '</div></div>';
|
850 |
* @param {Object} control - The control object.
|
851 |
* @returns {null}
|
852 |
*/
|
853 |
+
init: function( control ) {
|
854 |
}
|
855 |
}
|
856 |
}
|
857 |
} );
|
858 |
var kirki = kirki || {};
|
859 |
kirki = jQuery.extend( kirki, {
|
860 |
+
|
861 |
/**
|
862 |
* An object containing definitions for settings.
|
863 |
*
|
878 |
*/
|
879 |
get: function( setting ) {
|
880 |
var parts = setting.split( '[' ),
|
881 |
+
foundSetting = '',
|
882 |
+
foundInStep = 0,
|
883 |
+
currentVal = '';
|
884 |
|
885 |
_.each( parts, function( part, i ) {
|
886 |
part = part.replace( ']', '' );
|
901 |
currentVal = currentVal[ part ];
|
902 |
}
|
903 |
}
|
904 |
+
} );
|
905 |
|
906 |
return currentVal;
|
907 |
},
|
926 |
*/
|
927 |
set: function( element, value, key ) {
|
928 |
var setting,
|
929 |
+
parts,
|
930 |
+
currentNode = '',
|
931 |
+
foundNode = '',
|
932 |
+
subSettingObj = {},
|
933 |
+
currentVal,
|
934 |
+
subSetting,
|
935 |
+
subSettingParts;
|
936 |
|
937 |
// Get the setting from the element.
|
938 |
setting = element;
|
949 |
return;
|
950 |
}
|
951 |
|
952 |
+
parts = setting.split( '[' );
|
953 |
|
954 |
// Find the setting we're using in the control using the customizer API.
|
955 |
_.each( parts, function( part, i ) {
|
1011 |
/* global ajaxurl */
|
1012 |
var kirki = kirki || {};
|
1013 |
kirki = jQuery.extend( kirki, {
|
1014 |
+
|
1015 |
/**
|
1016 |
* A collection of utility methods.
|
1017 |
*
|
1085 |
*/
|
1086 |
getFont: function( family ) {
|
1087 |
var self = this,
|
1088 |
+
fonts = self.getFonts();
|
1089 |
|
1090 |
if ( 'undefined' === typeof fonts[ family ] ) {
|
1091 |
return false;
|
1103 |
*/
|
1104 |
getFonts: function( order, category, number ) {
|
1105 |
var self = this,
|
1106 |
+
ordered = {},
|
1107 |
+
categorized = {},
|
1108 |
+
plucked = {};
|
1109 |
|
1110 |
// Make sure order is correct.
|
1111 |
order = order || 'alpha';
|
1155 |
*/
|
1156 |
getVariants: function( family ) {
|
1157 |
var self = this,
|
1158 |
+
font = self.getFont( family );
|
1159 |
|
1160 |
// Early exit if font was not found.
|
1161 |
if ( ! font ) {
|
1228 |
* @since 3.0.17
|
1229 |
* @returns {Array}
|
1230 |
*/
|
1231 |
+
getVariants: function() {
|
1232 |
+
return [ 'regular', 'italic', '700', '700italic' ];
|
1233 |
}
|
1234 |
},
|
1235 |
|
1261 |
}
|
1262 |
return false;
|
1263 |
}
|
1264 |
+
},
|
1265 |
+
|
1266 |
+
validate: {
|
1267 |
+
cssValue: function( value ) {
|
1268 |
+
|
1269 |
+
var validUnits = [ 'fr', 'rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax' ],
|
1270 |
+
numericValue,
|
1271 |
+
unit;
|
1272 |
+
|
1273 |
+
// Whitelist values.
|
1274 |
+
if ( 0 === value || '0' === value || 'auto' === value || 'inherit' === value || 'initial' === value ) {
|
1275 |
+
return true;
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
// Skip checking if calc().
|
1279 |
+
if ( 0 <= value.indexOf( 'calc(' ) && 0 <= value.indexOf( ')' ) ) {
|
1280 |
+
return true;
|
1281 |
+
}
|
1282 |
+
|
1283 |
+
// Get the numeric value.
|
1284 |
+
numericValue = parseFloat( value );
|
1285 |
+
|
1286 |
+
// Get the unit
|
1287 |
+
unit = value.replace( numericValue, '' );
|
1288 |
+
|
1289 |
+
// Allow unitless.
|
1290 |
+
if ( ! value ) {
|
1291 |
+
return;
|
1292 |
+
}
|
1293 |
+
|
1294 |
+
// Check the validity of the numeric value and units.
|
1295 |
+
return ( ! isNaN( numericValue ) && -1 < jQuery.inArray( unit, validUnits ) );
|
1296 |
+
}
|
1297 |
}
|
1298 |
}
|
1299 |
} );
|
1316 |
* @augments wp.customize.Control
|
1317 |
* @augments wp.customize.Class
|
1318 |
*/
|
1319 |
+
wp.customize.kirkiDynamicControl = wp.customize.Control.extend( {
|
1320 |
|
1321 |
initialize: function( id, options ) {
|
1322 |
var control = this,
|
1323 |
+
args = options || {};
|
1324 |
|
1325 |
args.params = args.params || {};
|
1326 |
if ( ! args.params.type ) {
|
1347 |
*/
|
1348 |
_setUpSettingRootLinks: function() {
|
1349 |
var control = this,
|
1350 |
+
nodes = control.container.find( '[data-customize-setting-link]' );
|
1351 |
|
1352 |
nodes.each( function() {
|
1353 |
var node = jQuery( this );
|
1369 |
*/
|
1370 |
_setUpSettingPropertyLinks: function() {
|
1371 |
var control = this,
|
1372 |
+
nodes;
|
1373 |
|
1374 |
if ( ! control.setting ) {
|
1375 |
return;
|
1379 |
|
1380 |
nodes.each( function() {
|
1381 |
var node = jQuery( this ),
|
1382 |
+
element,
|
1383 |
+
propertyName = node.data( 'customizeSettingPropertyLink' );
|
1384 |
|
1385 |
element = new wp.customize.Element( node );
|
1386 |
control.propertyElements.push( element );
|
1430 |
*/
|
1431 |
embed: function() {
|
1432 |
var control = this,
|
1433 |
+
sectionId = control.section();
|
1434 |
|
1435 |
if ( ! sectionId ) {
|
1436 |
return;
|
1494 |
this.container.on( 'change keyup paste click', 'input', function() {
|
1495 |
control.setting.set( jQuery( this ).val() );
|
1496 |
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1497 |
}
|
1498 |
} );
|
1499 |
}() );
|
1500 |
_.each( kirki.control, function( obj, type ) {
|
1501 |
+
wp.customize.controlConstructor[ type ] = wp.customize.kirkiDynamicControl.extend( {} );
|
1502 |
} );
|
1503 |
/* global kirkiControlLoader */
|
1504 |
+
wp.customize.controlConstructor['kirki-background'] = wp.customize.Control.extend( {
|
1505 |
|
1506 |
// When we're finished loading continue processing
|
1507 |
ready: function() {
|
1521 |
initKirkiControl: function() {
|
1522 |
|
1523 |
var control = this,
|
1524 |
+
value = control.setting._value,
|
1525 |
+
picker = control.container.find( '.kirki-color-control' );
|
1526 |
|
1527 |
// Hide unnecessary controls if the value doesn't have an image.
|
1528 |
if ( _.isUndefined( value['background-image'] ) || '' === value['background-image'] ) {
|
1533 |
}
|
1534 |
|
1535 |
// Color.
|
1536 |
+
picker.wpColorPicker( {
|
1537 |
change: function() {
|
1538 |
setTimeout( function() {
|
1539 |
control.saveValue( 'background-color', picker.val() );
|
1540 |
}, 100 );
|
1541 |
}
|
1542 |
+
} );
|
1543 |
|
1544 |
// Background-Repeat.
|
1545 |
control.container.on( 'change', '.background-repeat select', function() {
|
1546 |
control.saveValue( 'background-repeat', jQuery( this ).val() );
|
1547 |
+
} );
|
1548 |
|
1549 |
// Background-Size.
|
1550 |
control.container.on( 'change click', '.background-size input', function() {
|
1551 |
control.saveValue( 'background-size', jQuery( this ).val() );
|
1552 |
+
} );
|
1553 |
|
1554 |
// Background-Position.
|
1555 |
control.container.on( 'change', '.background-position select', function() {
|
1556 |
control.saveValue( 'background-position', jQuery( this ).val() );
|
1557 |
+
} );
|
1558 |
|
1559 |
// Background-Attachment.
|
1560 |
control.container.on( 'change click', '.background-attachment input', function() {
|
1561 |
control.saveValue( 'background-attachment', jQuery( this ).val() );
|
1562 |
+
} );
|
1563 |
|
1564 |
// Background-Image.
|
1565 |
control.container.on( 'click', '.background-image-upload-button', function( e ) {
|
1566 |
+
var image = wp.media( { multiple: false } ).open().on( 'select', function() {
|
1567 |
|
1568 |
// This will return the selected image from the Media Uploader, the result is an object.
|
1569 |
var uploadedImage = image.state().get( 'selection' ).first(),
|
1570 |
+
previewImage = uploadedImage.toJSON().sizes.full.url,
|
1571 |
+
imageUrl,
|
1572 |
+
imageID,
|
1573 |
+
imageWidth,
|
1574 |
+
imageHeight,
|
1575 |
+
preview,
|
1576 |
+
removeButton;
|
1577 |
|
1578 |
if ( ! _.isUndefined( uploadedImage.toJSON().sizes.medium ) ) {
|
1579 |
previewImage = uploadedImage.toJSON().sizes.medium.url;
|
1601 |
if ( removeButton.length ) {
|
1602 |
removeButton.show();
|
1603 |
}
|
1604 |
+
} );
|
1605 |
|
1606 |
e.preventDefault();
|
1607 |
+
} );
|
1608 |
|
1609 |
control.container.on( 'click', '.background-image-upload-remove-button', function( e ) {
|
1610 |
|
1611 |
var preview,
|
1612 |
+
removeButton;
|
1613 |
|
1614 |
e.preventDefault();
|
1615 |
|
1630 |
if ( removeButton.length ) {
|
1631 |
removeButton.hide();
|
1632 |
}
|
1633 |
+
} );
|
1634 |
},
|
1635 |
|
1636 |
/**
|
1639 |
saveValue: function( property, value ) {
|
1640 |
|
1641 |
var control = this,
|
1642 |
+
input = jQuery( '#customize-control-' + control.id.replace( '[', '-' ).replace( ']', '' ) + ' .background-hidden-value' ),
|
1643 |
+
val = control.setting._value;
|
1644 |
|
1645 |
val[ property ] = value;
|
1646 |
|
1647 |
jQuery( input ).attr( 'value', JSON.stringify( val ) ).trigger( 'change' );
|
1648 |
control.setting.set( val );
|
1649 |
}
|
1650 |
+
} );
|
1651 |
+
wp.customize.controlConstructor['kirki-color-palette'] = wp.customize.kirkiDynamicControl.extend( {} );
|
1652 |
+
wp.customize.controlConstructor['kirki-dashicons'] = wp.customize.kirkiDynamicControl.extend( {} );
|
1653 |
+
wp.customize.controlConstructor['kirki-date'] = wp.customize.kirkiDynamicControl.extend( {
|
1654 |
|
1655 |
initKirkiControl: function() {
|
1656 |
var control = this,
|
1657 |
+
selector = control.selector + ' input.datepicker';
|
1658 |
|
1659 |
// Init the datepicker
|
1660 |
jQuery( selector ).datepicker( {
|
1670 |
}
|
1671 |
} );
|
1672 |
/* global dimensionkirkiL10n */
|
1673 |
+
wp.customize.controlConstructor['kirki-dimension'] = wp.customize.kirkiDynamicControl.extend( {
|
1674 |
|
1675 |
initKirkiControl: function() {
|
1676 |
|
1677 |
var control = this,
|
1678 |
+
value;
|
1679 |
|
1680 |
// Notifications.
|
1681 |
control.kirkiNotifications();
|
1685 |
|
1686 |
value = jQuery( this ).val();
|
1687 |
control.setting.set( value );
|
1688 |
+
} );
|
1689 |
},
|
1690 |
|
1691 |
/**
|
1699 |
setting.bind( function( value ) {
|
1700 |
var code = 'long_title';
|
1701 |
|
1702 |
+
if ( false === kirki.util.validate.cssValue( value ) ) {
|
1703 |
setting.notifications.add( code, new wp.customize.Notification(
|
1704 |
code,
|
1705 |
{
|
1713 |
} );
|
1714 |
} );
|
1715 |
}
|
1716 |
+
} );
|
1717 |
/* global dimensionskirkiL10n */
|
1718 |
+
wp.customize.controlConstructor['kirki-dimensions'] = wp.customize.kirkiDynamicControl.extend( {
|
1719 |
|
1720 |
initKirkiControl: function() {
|
1721 |
|
1722 |
var control = this,
|
1723 |
+
subControls = control.params.choices.controls,
|
1724 |
+
value = {},
|
1725 |
+
subsArray = [],
|
1726 |
+
i;
|
1727 |
|
1728 |
_.each( subControls, function( v, i ) {
|
1729 |
if ( true === v ) {
|
1752 |
|
1753 |
// Save the value
|
1754 |
control.saveValue( value );
|
1755 |
+
} );
|
1756 |
},
|
1757 |
|
1758 |
/**
|
1761 |
saveValue: function( value ) {
|
1762 |
|
1763 |
var control = this,
|
1764 |
+
newValue = {};
|
1765 |
|
1766 |
_.each( value, function( newSubValue, i ) {
|
1767 |
newValue[ i ] = newSubValue;
|
1768 |
+
} );
|
1769 |
|
1770 |
control.setting.set( newValue );
|
1771 |
},
|
1780 |
wp.customize( control.id, function( setting ) {
|
1781 |
setting.bind( function( value ) {
|
1782 |
var code = 'long_title',
|
1783 |
+
subs = {},
|
1784 |
+
message;
|
1785 |
|
1786 |
setting.notifications.remove( code );
|
1787 |
|
1788 |
_.each( value, function( val, direction ) {
|
1789 |
+
if ( false === kirki.util.validate.cssValue( val ) ) {
|
1790 |
subs[ direction ] = val;
|
1791 |
} else {
|
1792 |
delete subs[ direction ];
|
1805 |
} );
|
1806 |
} );
|
1807 |
}
|
1808 |
+
} );
|
1809 |
/* global tinyMCE */
|
1810 |
+
wp.customize.controlConstructor['kirki-editor'] = wp.customize.kirkiDynamicControl.extend( {
|
1811 |
|
1812 |
initKirkiControl: function() {
|
1813 |
|
1814 |
var control = this,
|
1815 |
+
element = control.container.find( 'textarea' ),
|
1816 |
+
id = 'kirki-editor-' + control.id.replace( '[', '' ).replace( ']', '' ),
|
1817 |
+
editor;
|
1818 |
|
1819 |
wp.editor.initialize( id, {
|
1820 |
tinymce: {
|
1822 |
},
|
1823 |
quicktags: true,
|
1824 |
mediaButtons: true
|
1825 |
+
} );
|
1826 |
|
1827 |
editor = tinyMCE.get( id );
|
1828 |
|
1834 |
content = editor.getContent();
|
1835 |
element.val( content ).trigger( 'change' );
|
1836 |
wp.customize.instance( control.id ).set( content );
|
1837 |
+
} );
|
1838 |
}
|
1839 |
}
|
1840 |
+
} );
|
1841 |
/* global fontAwesomeJSON */
|
1842 |
+
wp.customize.controlConstructor['kirki-fontawesome'] = wp.customize.kirkiDynamicControl.extend( {
|
1843 |
|
1844 |
initKirkiControl: function() {
|
1845 |
|
1846 |
var control = this,
|
1847 |
+
element = this.container.find( 'select' ),
|
1848 |
+
icons = jQuery.parseJSON( fontAwesomeJSON ),
|
1849 |
+
selectValue,
|
1850 |
+
selectWooOptions = {
|
1851 |
data: [],
|
1852 |
escapeMarkup: function( markup ) {
|
1853 |
return markup;
|
1858 |
templateSelection: function( val ) {
|
1859 |
return '<i class="fa fa-lg fa-' + val.id + '" aria-hidden="true"></i>' + ' ' + val.text;
|
1860 |
}
|
1861 |
+
},
|
1862 |
+
select;
|
1863 |
|
1864 |
_.each( icons.icons, function( icon ) {
|
1865 |
+
selectWooOptions.data.push( {
|
1866 |
id: icon.id,
|
1867 |
text: icon.name
|
1868 |
+
} );
|
1869 |
+
} );
|
1870 |
|
1871 |
select = jQuery( element ).selectWoo( selectWooOptions );
|
1872 |
|
1873 |
select.on( 'change', function() {
|
1874 |
selectValue = jQuery( this ).val();
|
1875 |
control.setting.set( selectValue );
|
1876 |
+
} );
|
1877 |
select.val( control.setting._value ).trigger( 'change' );
|
1878 |
}
|
1879 |
+
} );
|
1880 |
/* global kirkiControlLoader */
|
1881 |
+
wp.customize.controlConstructor['kirki-image'] = wp.customize.Control.extend( {
|
1882 |
|
1883 |
// When we're finished loading continue processing
|
1884 |
ready: function() {
|
1898 |
initKirkiControl: function() {
|
1899 |
|
1900 |
var control = this,
|
1901 |
+
value = control.getValue(),
|
1902 |
+
saveAs = ( ! _.isUndefined( control.params.choices ) && ! _.isUndefined( control.params.choices.save_as ) ) ? control.params.choices.save_as : 'url',
|
1903 |
+
preview = control.container.find( '.placeholder, .thumbnail' ),
|
1904 |
+
previewImage = ( 'array' === saveAs ) ? value.url : value,
|
1905 |
+
removeButton = control.container.find( '.image-upload-remove-button' ),
|
1906 |
+
defaultButton = control.container.find( '.image-default-button' );
|
1907 |
|
1908 |
control.container.find( '.kirki-controls-loading-spinner' ).hide();
|
1909 |
|
1928 |
}
|
1929 |
|
1930 |
// If value is default, hide the default button.
|
1931 |
+
if ( value === control.params.default ) {
|
1932 |
control.container.find( 'image-default-button' ).hide();
|
1933 |
}
|
1934 |
|
1937 |
}
|
1938 |
|
1939 |
control.container.on( 'click', '.image-upload-button', function( e ) {
|
1940 |
+
var image = wp.media( { multiple: false } ).open().on( 'select', function() {
|
1941 |
|
1942 |
// This will return the selected image from the Media Uploader, the result is an object.
|
1943 |
var uploadedImage = image.state().get( 'selection' ).first(),
|
1944 |
+
previewImage = uploadedImage.toJSON().sizes.full.url;
|
1945 |
|
1946 |
if ( ! _.isUndefined( uploadedImage.toJSON().sizes.medium ) ) {
|
1947 |
previewImage = uploadedImage.toJSON().sizes.medium.url;
|
1967 |
removeButton.show();
|
1968 |
defaultButton.hide();
|
1969 |
}
|
1970 |
+
} );
|
1971 |
|
1972 |
e.preventDefault();
|
1973 |
+
} );
|
1974 |
|
1975 |
control.container.on( 'click', '.image-upload-remove-button', function( e ) {
|
1976 |
|
1977 |
var preview,
|
1978 |
+
removeButton,
|
1979 |
+
defaultButton;
|
1980 |
|
1981 |
e.preventDefault();
|
1982 |
|
1998 |
defaultButton.show();
|
1999 |
}
|
2000 |
}
|
2001 |
+
} );
|
2002 |
|
2003 |
control.container.on( 'click', '.image-default-button', function( e ) {
|
2004 |
|
2005 |
var preview,
|
2006 |
+
removeButton,
|
2007 |
+
defaultButton;
|
2008 |
|
2009 |
e.preventDefault();
|
2010 |
|
2011 |
+
control.saveValue( 'url', control.params.default );
|
2012 |
|
2013 |
preview = control.container.find( '.placeholder, .thumbnail' );
|
2014 |
removeButton = control.container.find( '.image-upload-remove-button' );
|
2015 |
defaultButton = control.container.find( '.image-default-button' );
|
2016 |
|
2017 |
if ( preview.length ) {
|
2018 |
+
preview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '<img src="' + control.params.default + '" alt="" />' );
|
2019 |
}
|
2020 |
if ( removeButton.length ) {
|
2021 |
removeButton.show();
|
2022 |
defaultButton.hide();
|
2023 |
}
|
2024 |
+
} );
|
2025 |
},
|
2026 |
|
2027 |
/**
|
2029 |
*/
|
2030 |
getValue: function() {
|
2031 |
var control = this,
|
2032 |
+
value = control.setting._value,
|
2033 |
+
saveAs = ( ! _.isUndefined( control.params.choices ) && ! _.isUndefined( control.params.choices.save_as ) ) ? control.params.choices.save_as : 'url';
|
2034 |
|
2035 |
if ( 'array' === saveAs && _.isString( value ) ) {
|
2036 |
value = {
|
2045 |
*/
|
2046 |
saveValue: function( property, value ) {
|
2047 |
var control = this,
|
2048 |
+
valueOld = control.setting._value,
|
2049 |
+
saveAs = ( ! _.isUndefined( control.params.choices ) && ! _.isUndefined( control.params.choices.save_as ) ) ? control.params.choices.save_as : 'url';
|
2050 |
|
2051 |
if ( 'array' === saveAs ) {
|
2052 |
if ( _.isString( valueOld ) ) {
|
2060 |
control.setting.set( value );
|
2061 |
control.container.find( 'button' ).trigger( 'change' );
|
2062 |
}
|
2063 |
+
} );
|
2064 |
+
wp.customize.controlConstructor['kirki-multicheck'] = wp.customize.kirkiDynamicControl.extend( {
|
2065 |
|
2066 |
initKirkiControl: function() {
|
2067 |
|
2070 |
// Save the value
|
2071 |
control.container.on( 'change', 'input', function() {
|
2072 |
var value = [],
|
2073 |
+
i = 0;
|
2074 |
|
2075 |
// Build the value as an object using the sub-values from individual checkboxes.
|
2076 |
jQuery.each( control.params.choices, function( key ) {
|
2077 |
if ( control.container.find( 'input[value="' + key + '"]' ).is( ':checked' ) ) {
|
2078 |
+
control.container.find( 'input[value="' + key + '"]' ).parent().addClass( 'checked' );
|
2079 |
value[ i ] = key;
|
2080 |
i++;
|
2081 |
+
} else {
|
2082 |
+
control.container.find( 'input[value="' + key + '"]' ).parent().removeClass( 'checked' );
|
2083 |
}
|
2084 |
+
} );
|
2085 |
|
2086 |
// Update the value in the customizer.
|
2087 |
control.setting.set( value );
|
2088 |
+
} );
|
2089 |
}
|
2090 |
+
} );
|
2091 |
/* global kirkiControlLoader */
|
2092 |
+
wp.customize.controlConstructor['kirki-multicolor'] = wp.customize.Control.extend( {
|
2093 |
|
2094 |
// When we're finished loading continue processing
|
2095 |
ready: function() {
|
2111 |
'use strict';
|
2112 |
|
2113 |
var control = this,
|
2114 |
+
colors = control.params.choices,
|
2115 |
+
keys = Object.keys( colors ),
|
2116 |
+
value = this.params.value,
|
2117 |
+
i = 0;
|
2118 |
|
2119 |
// Proxy function that handles changing the individual colors
|
2120 |
function kirkiMulticolorChangeHandler( control, value, subSetting ) {
|
2121 |
|
2122 |
var picker = control.container.find( '.multicolor-index-' + subSetting ),
|
2123 |
+
args = {
|
2124 |
change: function() {
|
2125 |
|
2126 |
// Color controls require a small delay.
|
2133 |
control.container.find( '.multicolor-index-' + subSetting ).trigger( 'change' );
|
2134 |
}, 100 );
|
2135 |
}
|
2136 |
+
};
|
2137 |
|
2138 |
if ( _.isObject( colors.irisArgs ) ) {
|
2139 |
_.each( colors.irisArgs, function( irisValue, irisKey ) {
|
2140 |
args[ irisKey ] = irisValue;
|
2141 |
+
} );
|
2142 |
}
|
2143 |
|
2144 |
// Did we change the value?
|
2158 |
saveValue: function( property, value ) {
|
2159 |
|
2160 |
var control = this,
|
2161 |
+
input = control.container.find( '.multicolor-hidden-value' ),
|
2162 |
+
val = control.setting._value;
|
2163 |
|
2164 |
val[ property ] = value;
|
2165 |
|
2166 |
jQuery( input ).attr( 'value', JSON.stringify( val ) ).trigger( 'change' );
|
2167 |
control.setting.set( val );
|
2168 |
}
|
2169 |
+
} );
|
2170 |
+
wp.customize.controlConstructor['kirki-palette'] = wp.customize.kirkiDynamicControl.extend( {} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2171 |
/* global kirkiSetSettingValue */
|
2172 |
+
wp.customize.controlConstructor['kirki-preset'] = wp.customize.kirkiDynamicControl.extend( {
|
2173 |
|
2174 |
initKirkiControl: function() {
|
2175 |
|
2176 |
var control = this,
|
2177 |
+
selectValue;
|
2178 |
|
2179 |
// Trigger a change
|
2180 |
this.container.on( 'change', 'select', function() {
|
2197 |
// We'll have to loop through them all and apply the changes needed to them.
|
2198 |
jQuery.each( value.settings, function( presetSetting, presetSettingValue ) {
|
2199 |
kirkiSetSettingValue.set( presetSetting, presetSettingValue );
|
2200 |
+
} );
|
2201 |
}
|
2202 |
+
} );
|
2203 |
wp.customize.previewer.refresh();
|
2204 |
+
} );
|
2205 |
}
|
2206 |
+
} );
|
2207 |
+
wp.customize.controlConstructor['kirki-radio-buttonset'] = wp.customize.kirkiDynamicControl.extend( {} );
|
2208 |
+
wp.customize.controlConstructor['kirki-radio-image'] = wp.customize.kirkiDynamicControl.extend( {} );
|
2209 |
/* global kirkiControlLoader */
|
2210 |
var RepeaterRow = function( rowIndex, container, label, control ) {
|
2211 |
|
2215 |
this.rowIndex = rowIndex;
|
2216 |
this.container = container;
|
2217 |
this.label = label;
|
2218 |
+
this.header = this.container.find( '.repeater-row-header' );
|
2219 |
|
2220 |
this.header.on( 'click', function() {
|
2221 |
self.toggleMinimize();
|
2222 |
+
} );
|
2223 |
|
2224 |
this.container.on( 'click', '.repeater-row-remove', function() {
|
2225 |
self.remove();
|
2226 |
+
} );
|
2227 |
|
2228 |
this.header.on( 'mousedown', function() {
|
2229 |
self.container.trigger( 'row:start-dragging' );
|
2230 |
+
} );
|
2231 |
|
2232 |
this.container.on( 'keyup change', 'input, select, textarea', function( e ) {
|
2233 |
self.container.trigger( 'row:update', [ self.rowIndex, jQuery( e.target ).data( 'field' ), e.target ] );
|
2234 |
+
} );
|
2235 |
|
2236 |
this.setRowIndex = function( rowIndex ) {
|
2237 |
this.rowIndex = rowIndex;
|
2250 |
this.remove = function() {
|
2251 |
this.container.slideUp( 300, function() {
|
2252 |
jQuery( this ).detach();
|
2253 |
+
} );
|
2254 |
this.container.trigger( 'row:remove', [ this.rowIndex ] );
|
2255 |
};
|
2256 |
|
2257 |
this.updateLabel = function() {
|
2258 |
var rowLabelField,
|
2259 |
+
rowLabel,
|
2260 |
+
rowLabelSelector;
|
2261 |
|
2262 |
if ( 'field' === this.label.type ) {
|
2263 |
rowLabelField = this.container.find( '.repeater-field [data-field="' + this.label.field + '"]' );
|
2286 |
this.updateLabel();
|
2287 |
};
|
2288 |
|
2289 |
+
wp.customize.controlConstructor.repeater = wp.customize.Control.extend( {
|
2290 |
|
2291 |
// When we're finished loading continue processing
|
2292 |
ready: function() {
|
2308 |
'use strict';
|
2309 |
|
2310 |
var control = this,
|
2311 |
+
limit,
|
2312 |
+
theNewRow;
|
2313 |
|
2314 |
// The current value set in Control Class (set in Kirki_Customize_Repeater_Control::to_json() function)
|
2315 |
var settingValue = this.params.value;
|
2347 |
} else {
|
2348 |
jQuery( control.selector + ' .limit' ).addClass( 'highlight' );
|
2349 |
}
|
2350 |
+
} );
|
2351 |
|
2352 |
this.container.on( 'click', '.repeater-row-remove', function() {
|
2353 |
control.currentIndex--;
|
2354 |
if ( ! limit || control.currentIndex < limit ) {
|
2355 |
jQuery( control.selector + ' .limit' ).removeClass( 'highlight' );
|
2356 |
}
|
2357 |
+
} );
|
2358 |
|
2359 |
this.container.on( 'click keypress', '.repeater-field-image .upload-button,.repeater-field-cropped_image .upload-button,.repeater-field-upload .upload-button', function( e ) {
|
2360 |
e.preventDefault();
|
2361 |
control.$thisButton = jQuery( this );
|
2362 |
control.openFrame( e );
|
2363 |
+
} );
|
2364 |
|
2365 |
this.container.on( 'click keypress', '.repeater-field-image .remove-button,.repeater-field-cropped_image .remove-button', function( e ) {
|
2366 |
e.preventDefault();
|
2367 |
control.$thisButton = jQuery( this );
|
2368 |
control.removeImage( e );
|
2369 |
+
} );
|
2370 |
|
2371 |
this.container.on( 'click keypress', '.repeater-field-upload .remove-button', function( e ) {
|
2372 |
e.preventDefault();
|
2373 |
control.$thisButton = jQuery( this );
|
2374 |
control.removeFile( e );
|
2375 |
+
} );
|
2376 |
|
2377 |
/**
|
2378 |
* Function that loads the Mustache template
|
2379 |
*/
|
2380 |
this.repeaterTemplate = _.memoize( function() {
|
2381 |
var compiled,
|
2382 |
+
|
2383 |
+
/*
|
2384 |
+
* Underscore's default ERB-style templates are incompatible with PHP
|
2385 |
+
* when asp_tags is enabled, so WordPress uses Mustache-inspired templating syntax.
|
2386 |
+
*
|
2387 |
+
* @see trac ticket #22344.
|
2388 |
+
*/
|
2389 |
+
options = {
|
2390 |
evaluate: /<#([\s\S]+?)#>/g,
|
2391 |
interpolate: /\{\{\{([\s\S]+?)\}\}\}/g,
|
2392 |
escape: /\{\{([^\}]+?)\}\}(?!\})/g,
|
2393 |
variable: 'data'
|
2394 |
+
};
|
2395 |
|
2396 |
return function( data ) {
|
2397 |
compiled = _.template( control.container.find( '.customize-control-repeater-content' ).first().html(), null, options );
|
2398 |
return compiled( data );
|
2399 |
};
|
2400 |
+
} );
|
2401 |
|
2402 |
// When we load the control, the fields have not been filled up
|
2403 |
// This is the first time that we create all the rows
|
2406 |
theNewRow = control.addRow( subValue );
|
2407 |
control.initColorPicker();
|
2408 |
control.initSelect( theNewRow, subValue );
|
2409 |
+
} );
|
2410 |
}
|
2411 |
|
2412 |
// Once we have displayed the rows, we cleanup the values
|
2413 |
this.setValue( settingValue, true, true );
|
2414 |
|
2415 |
+
this.repeaterFieldsContainer.sortable( {
|
2416 |
handle: '.repeater-row-header',
|
2417 |
update: function() {
|
2418 |
control.sort();
|
2419 |
}
|
2420 |
+
} );
|
2421 |
|
2422 |
},
|
2423 |
|
2447 |
|
2448 |
var libMediaType = this.getMimeType();
|
2449 |
|
2450 |
+
this.frame = wp.media( {
|
2451 |
states: [
|
2452 |
+
new wp.media.controller.Library( {
|
2453 |
+
library: wp.media.query( { type: libMediaType } ),
|
2454 |
multiple: false,
|
2455 |
+
date: false
|
2456 |
+
} )
|
2457 |
]
|
2458 |
+
} );
|
2459 |
|
2460 |
// When a file is selected, run a callback.
|
2461 |
this.frame.on( 'select', this.onSelect, this );
|
2462 |
},
|
2463 |
+
|
2464 |
/**
|
2465 |
* Create a media modal select frame, and store it so the instance can be reused when needed.
|
2466 |
* This is mostly a copy/paste of Core api.CroppedImageControl in /wp-admin/js/customize-control.js
|
2471 |
|
2472 |
// We get the field id from which this was called
|
2473 |
var currentFieldId = this.$thisButton.siblings( 'input.hidden-field' ).attr( 'data-field' ),
|
2474 |
+
attrs = [ 'width', 'height', 'flex_width', 'flex_height' ], // A list of attributes to look for
|
2475 |
+
libMediaType = this.getMimeType();
|
2476 |
|
2477 |
// Make sure we got it
|
2478 |
if ( _.isString( currentFieldId ) && '' !== currentFieldId ) {
|
2493 |
}
|
2494 |
}
|
2495 |
|
2496 |
+
this.frame = wp.media( {
|
2497 |
button: {
|
2498 |
text: 'Select and Crop',
|
2499 |
close: false
|
2500 |
},
|
2501 |
states: [
|
2502 |
+
new wp.media.controller.Library( {
|
2503 |
+
library: wp.media.query( { type: libMediaType } ),
|
2504 |
+
multiple: false,
|
2505 |
+
date: false,
|
2506 |
+
suggestedWidth: this.params.width,
|
2507 |
suggestedHeight: this.params.height
|
2508 |
+
} ),
|
2509 |
+
new wp.media.controller.CustomizeImageCropper( {
|
2510 |
imgSelectOptions: this.calculateImageSelectOptions,
|
2511 |
control: this
|
2512 |
+
} )
|
2513 |
]
|
2514 |
+
} );
|
2515 |
|
2516 |
this.frame.on( 'select', this.onSelectForCrop, this );
|
2517 |
this.frame.on( 'cropped', this.onCropped, this );
|
2577 |
'use strict';
|
2578 |
|
2579 |
var control = controller.get( 'control' ),
|
2580 |
+
flexWidth = !! parseInt( control.params.flex_width, 10 ),
|
2581 |
+
flexHeight = !! parseInt( control.params.flex_height, 10 ),
|
2582 |
+
realWidth = attachment.get( 'width' ),
|
2583 |
+
realHeight = attachment.get( 'height' ),
|
2584 |
+
xInit = parseInt( control.params.width, 10 ),
|
2585 |
+
yInit = parseInt( control.params.height, 10 ),
|
2586 |
+
ratio = xInit / yInit,
|
2587 |
+
xImg = realWidth,
|
2588 |
+
yImg = realHeight,
|
2589 |
+
x1,
|
2590 |
+
y1,
|
2591 |
+
imgSelectOptions;
|
2592 |
|
2593 |
controller.set( 'canSkipCrop', ! control.mustBeCropped( flexWidth, flexHeight, xInit, yInit, realWidth, realHeight ) );
|
2594 |
|
2604 |
y1 = ( yImg - yInit ) / 2;
|
2605 |
|
2606 |
imgSelectOptions = {
|
2607 |
+
handles: true,
|
2608 |
+
keys: true,
|
2609 |
+
instance: true,
|
2610 |
+
persistent: true,
|
2611 |
+
imageWidth: realWidth,
|
2612 |
imageHeight: realHeight,
|
2613 |
+
x1: x1,
|
2614 |
+
y1: y1,
|
2615 |
+
x2: xInit + x1,
|
2616 |
+
y2: yInit + y1
|
2617 |
};
|
2618 |
|
2619 |
if ( false === flexHeight && false === flexWidth ) {
|
2740 |
'use strict';
|
2741 |
|
2742 |
var $targetDiv,
|
2743 |
+
$uploadButton;
|
2744 |
|
2745 |
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
|
2746 |
return;
|
2751 |
|
2752 |
$targetDiv.find( '.kirki-image-attachment' ).slideUp( 'fast', function() {
|
2753 |
jQuery( this ).show().html( jQuery( this ).data( 'placeholder' ) );
|
2754 |
+
} );
|
2755 |
$targetDiv.find( '.hidden-field' ).val( '' );
|
2756 |
$uploadButton.text( $uploadButton.data( 'label' ) );
|
2757 |
this.$thisButton.hide();
|
2765 |
'use strict';
|
2766 |
|
2767 |
var $targetDiv,
|
2768 |
+
$uploadButton;
|
2769 |
|
2770 |
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
|
2771 |
return;
|
2776 |
|
2777 |
$targetDiv.find( '.kirki-file-attachment' ).slideUp( 'fast', function() {
|
2778 |
jQuery( this ).show().html( jQuery( this ).data( 'placeholder' ) );
|
2779 |
+
} );
|
2780 |
$targetDiv.find( '.hidden-field' ).val( '' );
|
2781 |
$uploadButton.text( $uploadButton.data( 'label' ) );
|
2782 |
this.$thisButton.hide();
|
2811 |
|
2812 |
// We need to filter the values after the first load to remove data requrired for diplay but that we don't want to save in DB
|
2813 |
var filteredValue = newValue,
|
2814 |
+
filter = [];
|
2815 |
|
2816 |
if ( filtering ) {
|
2817 |
jQuery.each( this.params.fields, function( index, value ) {
|
2818 |
if ( 'image' === value.type || 'cropped_image' === value.type || 'upload' === value.type ) {
|
2819 |
filter.push( index );
|
2820 |
}
|
2821 |
+
} );
|
2822 |
jQuery.each( newValue, function( index, value ) {
|
2823 |
jQuery.each( filter, function( ind, field ) {
|
2824 |
if ( ! _.isUndefined( value[ field ] ) && ! _.isUndefined( value[ field ].id ) ) {
|
2825 |
filteredValue[index][ field ] = value[ field ].id;
|
2826 |
}
|
2827 |
+
} );
|
2828 |
+
} );
|
2829 |
}
|
2830 |
|
2831 |
this.setting.set( encodeURI( JSON.stringify( filteredValue ) ) );
|
2848 |
'use strict';
|
2849 |
|
2850 |
var control = this,
|
2851 |
+
template = control.repeaterTemplate(), // The template for the new row (defined on Kirki_Customize_Repeater_Control::render_content() ).
|
2852 |
+
settingValue = this.getValue(), // Get the current setting value.
|
2853 |
+
newRowSetting = {}, // Saves the new setting data.
|
2854 |
+
templateData, // Data to pass to the template
|
2855 |
+
newRow,
|
2856 |
+
i;
|
2857 |
|
2858 |
if ( template ) {
|
2859 |
|
2866 |
if ( data ) {
|
2867 |
for ( i in data ) {
|
2868 |
if ( data.hasOwnProperty( i ) && templateData.hasOwnProperty( i ) ) {
|
2869 |
+
templateData[ i ].default = data[ i ];
|
2870 |
}
|
2871 |
}
|
2872 |
}
|
2886 |
|
2887 |
newRow.container.on( 'row:remove', function( e, rowIndex ) {
|
2888 |
control.deleteRow( rowIndex );
|
2889 |
+
} );
|
2890 |
|
2891 |
newRow.container.on( 'row:update', function( e, rowIndex, fieldName, element ) {
|
2892 |
control.updateField.call( control, e, rowIndex, fieldName, element );
|
2893 |
newRow.updateLabel();
|
2894 |
+
} );
|
2895 |
|
2896 |
// Add the row to rows collection
|
2897 |
this.rows[ this.currentIndex ] = newRow;
|
2898 |
|
2899 |
for ( i in templateData ) {
|
2900 |
if ( templateData.hasOwnProperty( i ) ) {
|
2901 |
+
newRowSetting[ i ] = templateData[ i ].default;
|
2902 |
}
|
2903 |
}
|
2904 |
|
2916 |
'use strict';
|
2917 |
|
2918 |
var control = this,
|
2919 |
+
$rows = this.repeaterFieldsContainer.find( '.repeater-row' ),
|
2920 |
+
newOrder = [],
|
2921 |
+
settings = control.getValue(),
|
2922 |
+
newRows = [],
|
2923 |
+
newSettings = [];
|
2924 |
|
2925 |
$rows.each( function( i, element ) {
|
2926 |
newOrder.push( jQuery( element ).data( 'row' ) );
|
2927 |
+
} );
|
2928 |
|
2929 |
jQuery.each( newOrder, function( newPosition, oldPosition ) {
|
2930 |
newRows[ newPosition ] = control.rows[ oldPosition ];
|
2931 |
newRows[ newPosition ].setRowIndex( newPosition );
|
2932 |
|
2933 |
newSettings[ newPosition ] = settings[ oldPosition ];
|
2934 |
+
} );
|
2935 |
|
2936 |
control.rows = newRows;
|
2937 |
control.setValue( newSettings );
|
2948 |
'use strict';
|
2949 |
|
2950 |
var currentSettings = this.getValue(),
|
2951 |
+
row,
|
2952 |
+
i,
|
2953 |
+
prop;
|
2954 |
|
2955 |
if ( currentSettings[ index ] ) {
|
2956 |
|
2992 |
'use strict';
|
2993 |
|
2994 |
var type,
|
2995 |
+
row,
|
2996 |
+
currentSettings;
|
2997 |
|
2998 |
if ( ! this.rows[ rowIndex ] ) {
|
2999 |
return;
|
3033 |
'use strict';
|
3034 |
|
3035 |
var control = this,
|
3036 |
+
colorPicker = control.container.find( '.color-picker-hex' ),
|
3037 |
+
options = {},
|
3038 |
+
fieldId = colorPicker.data( 'field' );
|
3039 |
|
3040 |
// We check if the color palette parameter is defined.
|
3041 |
if ( ! _.isUndefined( fieldId ) && ! _.isUndefined( control.params.fields[ fieldId ] ) && ! _.isUndefined( control.params.fields[ fieldId ].palettes ) && _.isObject( control.params.fields[ fieldId ].palettes ) ) {
|
3046 |
options.change = function( event, ui ) {
|
3047 |
|
3048 |
var currentPicker = jQuery( event.target ),
|
3049 |
+
row = currentPicker.closest( '.repeater-row' ),
|
3050 |
+
rowIndex = row.data( 'row' ),
|
3051 |
+
currentSettings = control.getValue();
|
3052 |
|
3053 |
currentSettings[ rowIndex ][ currentPicker.data( 'field' ) ] = ui.color.toString();
|
3054 |
control.setValue( currentSettings, true );
|
3074 |
'use strict';
|
3075 |
|
3076 |
var control = this,
|
3077 |
+
dropdown = theNewRow.container.find( '.repeater-field select' ),
|
3078 |
+
$select,
|
3079 |
+
dataField,
|
3080 |
+
multiple,
|
3081 |
+
selectWooOptions = {};
|
3082 |
|
3083 |
if ( 0 === dropdown.length ) {
|
3084 |
return;
|
3101 |
this.container.on( 'change', '.repeater-field select', function( event ) {
|
3102 |
|
3103 |
var currentDropdown = jQuery( event.target ),
|
3104 |
+
row = currentDropdown.closest( '.repeater-row' ),
|
3105 |
+
rowIndex = row.data( 'row' ),
|
3106 |
+
currentSettings = control.getValue();
|
3107 |
|
3108 |
currentSettings[ rowIndex ][ currentDropdown.data( 'field' ) ] = jQuery( this ).val();
|
3109 |
control.setValue( currentSettings );
|
3110 |
+
} );
|
3111 |
}
|
3112 |
+
} );
|
3113 |
+
wp.customize.controlConstructor['kirki-slider'] = wp.customize.kirkiDynamicControl.extend( {
|
3114 |
|
3115 |
initKirkiControl: function() {
|
3116 |
var control = this,
|
3117 |
+
changeAction = ( 'postMessage' === control.setting.transport ) ? 'mousemove change' : 'change',
|
3118 |
rangeInput = control.container.find( 'input[type="range"]' ),
|
3119 |
textInput = control.container.find( 'input[type="text"]' ),
|
3120 |
+
value = control.setting._value;
|
3121 |
|
3122 |
// Set the initial value in the text input.
|
3123 |
textInput.attr( 'value', value );
|
3148 |
// set slider and text input values to default
|
3149 |
// and hen save.
|
3150 |
control.container.find( '.slider-reset' ).on( 'click', function() {
|
3151 |
+
textInput.attr( 'value', control.params.default );
|
3152 |
+
rangeInput.attr( 'value', control.params.default );
|
3153 |
control.setting.set( textInput.val() );
|
3154 |
} );
|
3155 |
}
|
3156 |
+
} );
|
3157 |
/* global kirkiControlLoader */
|
3158 |
+
wp.customize.controlConstructor['kirki-sortable'] = wp.customize.Control.extend( {
|
3159 |
|
3160 |
// When we're finished loading continue processing
|
3161 |
ready: function() {
|
3184 |
control.sortableContainer = control.container.find( 'ul.sortable' ).first();
|
3185 |
|
3186 |
// Init sortable.
|
3187 |
+
control.sortableContainer.sortable( {
|
3188 |
|
3189 |
// Update value when we stop sorting.
|
3190 |
stop: function() {
|
3191 |
control.updateValue();
|
3192 |
}
|
3193 |
+
} ).disableSelection().find( 'li' ).each( function() {
|
3194 |
|
3195 |
// Enable/disable options when we click on the eye of Thundera.
|
3196 |
jQuery( this ).find( 'i.visibility' ).click( function() {
|
3197 |
jQuery( this ).toggleClass( 'dashicons-visibility-faint' ).parents( 'li:eq(0)' ).toggleClass( 'invisible' );
|
3198 |
+
} );
|
3199 |
+
} ).click( function() {
|
3200 |
|
3201 |
// Update value on click.
|
3202 |
control.updateValue();
|
3203 |
+
} );
|
3204 |
},
|
3205 |
|
3206 |
/**
|
3211 |
'use strict';
|
3212 |
|
3213 |
var control = this,
|
3214 |
+
newValue = [];
|
3215 |
|
3216 |
this.sortableContainer.find( 'li' ).each( function() {
|
3217 |
if ( ! jQuery( this ).is( '.invisible' ) ) {
|
3218 |
newValue.push( jQuery( this ).data( 'value' ) );
|
3219 |
}
|
3220 |
+
} );
|
3221 |
control.setting.set( newValue );
|
3222 |
}
|
3223 |
+
} );
|
3224 |
+
wp.customize.controlConstructor['kirki-switch'] = wp.customize.kirkiDynamicControl.extend( {
|
3225 |
|
3226 |
initKirkiControl: function() {
|
3227 |
|
3228 |
'use strict';
|
3229 |
|
3230 |
var control = this,
|
3231 |
+
checkboxValue = control.setting._value;
|
3232 |
|
3233 |
// Save the value
|
3234 |
this.container.on( 'change', 'input', function() {
|
3235 |
checkboxValue = ( jQuery( this ).is( ':checked' ) ) ? true : false;
|
3236 |
control.setting.set( checkboxValue );
|
3237 |
+
} );
|
3238 |
}
|
3239 |
+
} );
|
3240 |
+
wp.customize.controlConstructor['kirki-toggle'] = wp.customize.kirkiDynamicControl.extend( {
|
3241 |
|
3242 |
initKirkiControl: function() {
|
3243 |
|
3244 |
var control = this,
|
3245 |
+
checkboxValue = control.setting._value;
|
3246 |
|
3247 |
// Save the value
|
3248 |
this.container.on( 'change', 'input', function() {
|
3249 |
checkboxValue = ( jQuery( this ).is( ':checked' ) ) ? true : false;
|
3250 |
control.setting.set( checkboxValue );
|
3251 |
+
} );
|
3252 |
}
|
3253 |
+
} );
|
3254 |
/* global kirkiL10n, kirki */
|
3255 |
+
wp.customize.controlConstructor['kirki-typography'] = wp.customize.kirkiDynamicControl.extend( {
|
3256 |
|
3257 |
initKirkiControl: function() {
|
3258 |
|
3259 |
'use strict';
|
3260 |
|
3261 |
var control = this,
|
3262 |
+
value = control.setting._value,
|
3263 |
+
picker;
|
3264 |
|
3265 |
control.renderFontSelector();
|
3266 |
control.renderBackupFontSelector();
|
3267 |
control.renderVariantSelector();
|
3268 |
|
3269 |
// Font-size.
|
3270 |
+
if ( control.params.default['font-size'] ) {
|
3271 |
this.container.on( 'change keyup paste', '.font-size input', function() {
|
3272 |
control.saveValue( 'font-size', jQuery( this ).val() );
|
3273 |
} );
|
3274 |
}
|
3275 |
|
3276 |
// Line-height.
|
3277 |
+
if ( control.params.default['line-height'] ) {
|
3278 |
this.container.on( 'change keyup paste', '.line-height input', function() {
|
3279 |
control.saveValue( 'line-height', jQuery( this ).val() );
|
3280 |
} );
|
3281 |
}
|
3282 |
|
3283 |
// Margin-top.
|
3284 |
+
if ( control.params.default['margin-top'] ) {
|
3285 |
this.container.on( 'change keyup paste', '.margin-top input', function() {
|
3286 |
control.saveValue( 'margin-top', jQuery( this ).val() );
|
3287 |
} );
|
3288 |
}
|
3289 |
|
3290 |
// Margin-bottom.
|
3291 |
+
if ( control.params.default['margin-bottom'] ) {
|
3292 |
this.container.on( 'change keyup paste', '.margin-bottom input', function() {
|
3293 |
control.saveValue( 'margin-bottom', jQuery( this ).val() );
|
3294 |
} );
|
3295 |
}
|
3296 |
|
3297 |
// Letter-spacing.
|
3298 |
+
if ( control.params.default['letter-spacing'] ) {
|
3299 |
value['letter-spacing'] = ( jQuery.isNumeric( value['letter-spacing'] ) ) ? value['letter-spacing'] + 'px' : value['letter-spacing'];
|
3300 |
this.container.on( 'change keyup paste', '.letter-spacing input', function() {
|
3301 |
value['letter-spacing'] = ( jQuery.isNumeric( jQuery( this ).val() ) ) ? jQuery( this ).val() + 'px' : jQuery( this ).val();
|
3304 |
}
|
3305 |
|
3306 |
// Word-spacing.
|
3307 |
+
if ( control.params.default['word-spacing'] ) {
|
3308 |
this.container.on( 'change keyup paste', '.word-spacing input', function() {
|
3309 |
control.saveValue( 'word-spacing', jQuery( this ).val() );
|
3310 |
} );
|
3311 |
}
|
3312 |
|
3313 |
// Text-align.
|
3314 |
+
if ( control.params.default['text-align'] ) {
|
3315 |
this.container.on( 'change', '.text-align input', function() {
|
3316 |
control.saveValue( 'text-align', jQuery( this ).val() );
|
3317 |
} );
|
3318 |
}
|
3319 |
|
3320 |
// Text-transform.
|
3321 |
+
if ( control.params.default['text-transform'] ) {
|
3322 |
jQuery( control.selector + ' .text-transform select' ).selectWoo().on( 'change', function() {
|
3323 |
control.saveValue( 'text-transform', jQuery( this ).val() );
|
3324 |
} );
|
3325 |
}
|
3326 |
|
3327 |
// Text-decoration.
|
3328 |
+
if ( control.params.default['text-decoration'] ) {
|
3329 |
jQuery( control.selector + ' .text-decoration select' ).selectWoo().on( 'change', function() {
|
3330 |
control.saveValue( 'text-decoration', jQuery( this ).val() );
|
3331 |
} );
|
3332 |
}
|
3333 |
|
3334 |
// Color.
|
3335 |
+
if ( ! _.isUndefined( control.params.default.color ) ) {
|
3336 |
picker = this.container.find( '.kirki-color-control' );
|
3337 |
+
picker.wpColorPicker( {
|
3338 |
change: function() {
|
3339 |
setTimeout( function() {
|
3340 |
control.saveValue( 'color', picker.val() );
|
3351 |
renderFontSelector: function() {
|
3352 |
|
3353 |
var control = this,
|
3354 |
+
selector = control.selector + ' .font-family select',
|
3355 |
+
data = [],
|
3356 |
+
standardFonts = [],
|
3357 |
+
googleFonts = [],
|
3358 |
+
value = control.setting._value,
|
3359 |
+
fonts = control.getFonts(),
|
3360 |
+
fontSelect,
|
3361 |
+
controlFontFamilies;
|
3362 |
|
3363 |
// Format standard fonts as an array.
|
3364 |
if ( ! _.isUndefined( fonts.standard ) ) {
|
3365 |
_.each( fonts.standard, function( font ) {
|
3366 |
+
standardFonts.push( {
|
3367 |
id: font.family.replace( /"/g, ''' ),
|
3368 |
text: font.label
|
3369 |
} );
|
3373 |
// Format google fonts as an array.
|
3374 |
if ( ! _.isUndefined( fonts.google ) ) {
|
3375 |
_.each( fonts.google, function( font ) {
|
3376 |
+
googleFonts.push( {
|
3377 |
id: font.family,
|
3378 |
text: font.family
|
3379 |
} );
|
3380 |
} );
|
3381 |
}
|
3382 |
|
3383 |
+
// Do we have custom fonts?
|
3384 |
+
controlFontFamilies = {};
|
3385 |
+
if ( ! _.isUndefined( control.params ) && ! _.isUndefined( control.params.choices ) && ! _.isUndefined( control.params.choices.fonts ) && ! _.isUndefined( control.params.choices.fonts.families ) ) {
|
3386 |
+
controlFontFamilies = control.params.choices.fonts.families;
|
3387 |
+
}
|
3388 |
+
|
3389 |
// Combine forces and build the final data.
|
3390 |
+
data = jQuery.extend( {}, controlFontFamilies, {
|
3391 |
+
default: {
|
3392 |
+
text: kirkiL10n.defaultCSSValues,
|
3393 |
+
children: [
|
3394 |
+
{ id: '', text: kirkiL10n.defaultBrowserFamily },
|
3395 |
+
{ id: 'inherit', text: 'initial' },
|
3396 |
+
{ id: 'inherit', text: 'inherit' }
|
3397 |
+
]
|
3398 |
+
},
|
3399 |
+
standard: {
|
3400 |
+
text: kirkiL10n.standardFonts,
|
3401 |
+
children: standardFonts
|
3402 |
+
},
|
3403 |
+
google: {
|
3404 |
+
text: kirkiL10n.googleFonts,
|
3405 |
+
children: googleFonts
|
3406 |
+
}
|
3407 |
+
} );
|
3408 |
+
|
3409 |
+
if ( kirkiL10n.isScriptDebug ) {
|
3410 |
+
console.info( 'Kirki Debug: Font families for control "' + control.id + '":' );
|
3411 |
+
console.info( data );
|
3412 |
+
}
|
3413 |
+
|
3414 |
+
data = _.values( data );
|
3415 |
|
3416 |
// Instantiate selectWoo with the data.
|
3417 |
+
fontSelect = jQuery( selector ).selectWoo( {
|
3418 |
data: data
|
3419 |
} );
|
3420 |
|
3444 |
renderBackupFontSelector: function() {
|
3445 |
|
3446 |
var control = this,
|
3447 |
+
selector = control.selector + ' .font-backup select',
|
3448 |
+
standardFonts = [],
|
3449 |
+
value = control.setting._value,
|
3450 |
+
fontFamily = value['font-family'],
|
3451 |
+
fonts = control.getFonts(),
|
3452 |
+
fontSelect;
|
3453 |
|
3454 |
if ( _.isUndefined( value['font-backup'] ) || null === value['font-backup'] ) {
|
3455 |
value['font-backup'] = '';
|
3465 |
// Format standard fonts as an array.
|
3466 |
if ( ! _.isUndefined( fonts.standard ) ) {
|
3467 |
_.each( fonts.standard, function( font ) {
|
3468 |
+
standardFonts.push( {
|
3469 |
id: font.family.replace( /"/g, ''' ),
|
3470 |
text: font.label
|
3471 |
} );
|
3473 |
}
|
3474 |
|
3475 |
// Instantiate selectWoo with the data.
|
3476 |
+
fontSelect = jQuery( selector ).selectWoo( {
|
3477 |
data: standardFonts
|
3478 |
} );
|
3479 |
|
3497 |
renderVariantSelector: function() {
|
3498 |
|
3499 |
var control = this,
|
3500 |
+
value = control.setting._value,
|
3501 |
+
fontFamily = value['font-family'],
|
3502 |
+
selector = control.selector + ' .variant select',
|
3503 |
+
data = [],
|
3504 |
+
isValid = false,
|
3505 |
+
fontType = kirki.util.webfonts.getFontType( fontFamily ),
|
3506 |
+
variants = [ '', 'regular', 'italic', '700', '700italic' ],
|
3507 |
+
fontWeight,
|
3508 |
+
variantSelector,
|
3509 |
+
fontStyle;
|
3510 |
|
3511 |
if ( 'google' === fontType ) {
|
3512 |
variants = kirki.util.webfonts.google.getVariants( fontFamily );
|
3513 |
}
|
3514 |
|
3515 |
+
// Check if we've got custom variants defined for this font.
|
3516 |
+
if ( ! _.isUndefined( control.params ) && ! _.isUndefined( control.params.choices ) && ! _.isUndefined( control.params.choices.fonts ) && ! _.isUndefined( control.params.choices.fonts.variants ) ) {
|
3517 |
+
|
3518 |
+
// Check if we have variants for this font-family.
|
3519 |
+
if ( ! _.isUndefined( control.params.choices.fonts.variants[ fontFamily ] ) ) {
|
3520 |
+
variants = control.params.choices.fonts.variants[ fontFamily ];
|
3521 |
+
}
|
3522 |
+
}
|
3523 |
+
if ( kirkiL10n.isScriptDebug ) {
|
3524 |
+
console.info( 'Kirki Debug: Font variants for font-family "' + fontFamily + '":' );
|
3525 |
+
console.info( variants );
|
3526 |
+
}
|
3527 |
+
|
3528 |
if ( 'inherit' === fontFamily ) {
|
3529 |
value.variant = 'inherit';
|
3530 |
+
variants = [ '' ];
|
3531 |
jQuery( control.selector + ' .variant' ).hide();
|
3532 |
}
|
3533 |
|
3538 |
|
3539 |
control.saveValue( 'variant', value.variant );
|
3540 |
|
3541 |
+
if ( '' === value.variant || ! value.variant ) {
|
3542 |
fontWeight = '';
|
3543 |
fontStyle = '';
|
3544 |
} else {
|
3560 |
if ( value.variant === variant ) {
|
3561 |
isValid = true;
|
3562 |
}
|
3563 |
+
data.push( {
|
3564 |
id: variant,
|
3565 |
text: variant
|
3566 |
} );
|
3575 |
}
|
3576 |
|
3577 |
// Instantiate selectWoo with the data.
|
3578 |
+
variantSelector = jQuery( selector ).selectWoo( {
|
3579 |
data: data
|
3580 |
} );
|
3581 |
variantSelector.val( value.variant ).trigger( 'change' );
|
3582 |
variantSelector.on( 'change', function() {
|
3583 |
control.saveValue( 'variant', jQuery( this ).val() );
|
3584 |
+
if ( 'string' !== typeof value.variant ) {
|
3585 |
+
value.variant = variants[0];
|
3586 |
+
}
|
3587 |
|
3588 |
fontWeight = ( ! _.isString( value.variant ) ) ? '400' : value.variant.match( /\d/g );
|
3589 |
fontWeight = ( ! _.isObject( fontWeight ) ) ? '400' : fontWeight.join( '' );
|
3599 |
*/
|
3600 |
getFonts: function() {
|
3601 |
var control = this,
|
3602 |
+
initialGoogleFonts = kirki.util.webfonts.google.getFonts(),
|
3603 |
+
googleFonts = {},
|
3604 |
+
googleFontsSort = 'alpha',
|
3605 |
googleFontsNumber = 0,
|
3606 |
+
standardFonts = {};
|
3607 |
|
3608 |
// Get google fonts.
|
3609 |
if ( ! _.isEmpty( control.params.choices.fonts.google ) ) {
|
3667 |
saveValue: function( property, value ) {
|
3668 |
|
3669 |
var control = this,
|
3670 |
+
input = control.container.find( '.typography-hidden-value' ),
|
3671 |
+
val = control.setting._value;
|
3672 |
|
3673 |
val[ property ] = value;
|
3674 |
|
controls/js/script.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
if(_.isUndefined(window.kirkiSetSettingValue))var kirkiSetSettingValue={set:function(e,t){var i,n=this,a=wp.customize.settings.controls[e];if(_.isUndefined(a))return!0;switch(n.setValue(e,t),a.type){case"kirki-background":_.isUndefined(t["background-color"])||n.setColorPicker(n.findElement(e,".kirki-color-control"),t["background-color"]),n.findElement(e,".placeholder, .thumbnail").removeClass().addClass("placeholder").html("No file selected"),_.each(["background-repeat","background-position"],function(i){_.isUndefined(t[i])||n.setSelectWoo(n.findElement(e,"."+i+" select"),t[i])}),_.each(["background-size","background-attachment"],function(i){jQuery(n.findElement(e,"."+i+' input[value="'+t+'"]')).prop("checked",!0)}),i=JSON.stringify(t).replace(/'/g,"'"),jQuery(n.findElement(e,".background-hidden-value").attr("value",i)).trigger("change");break;case"kirki-code":jQuery(n.findElement(e,".CodeMirror"))[0].CodeMirror.setValue(t);break;case"checkbox":case"kirki-switch":case"kirki-toggle":t=1===t||"1"===t||!0===t,jQuery(n.findElement(e,"input")).prop("checked",t),wp.customize.instance(e).set(t);break;case"kirki-select":case"kirki-preset":case"kirki-fontawesome":n.setSelectWoo(n.findElement(e,"select"),t);break;case"kirki-slider":jQuery(n.findElement(e,"input")).prop("value",t),jQuery(n.findElement(e,".kirki_range_value .value")).html(t);break;case"kirki-generic":(_.isUndefined(a.choices)||_.isUndefined(a.choices.element))&&(a.choices.element="input"),jQuery(n.findElement(e,a.choices.element)).prop("value",t);break;case"kirki-color":n.setColorPicker(n.findElement(e,".kirki-color-control"),t);break;case"kirki-multicheck":n.findElement(e,"input").each(function(){jQuery(this).prop("checked",!1)}),_.each(t,function(i,a){jQuery(n.findElement(e,'input[value="'+t[a]+'"]')).prop("checked",!0)});break;case"kirki-multicolor":_.each(t,function(t,i){n.setColorPicker(n.findElement(e,".multicolor-index-"+i),t)});break;case"kirki-radio-buttonset":case"kirki-radio-image":case"kirki-radio":case"kirki-dashicons":case"kirki-color-palette":case"kirki-palette":jQuery(n.findElement(e,'input[value="'+t+'"]')).prop("checked",!0);break;case"kirki-typography":_.each(["font-family","variant"],function(i){_.isUndefined(t[i])||n.setSelectWoo(n.findElement(e,"."+i+" select"),t[i])}),_.each(["font-size","line-height","letter-spacing","word-spacing"],function(i){_.isUndefined(t[i])||jQuery(n.findElement(e,"."+i+" input")).prop("value",t[i])}),_.isUndefined(t.color)||n.setColorPicker(n.findElement(e,".kirki-color-control"),t.color),i=JSON.stringify(t).replace(/'/g,"'"),jQuery(n.findElement(e,".typography-hidden-value").attr("value",i)).trigger("change");break;case"kirki-dimensions":_.each(t,function(t,i){jQuery(n.findElement(e,"."+i+" input")).prop("value",t)});break;case"kirki-repeater":case"kirki-custom":break;default:jQuery(n.findElement(e,"input")).prop("value",t)}},setColorPicker:function(e,t){e.attr("data-default-color",t).data("default-color",t).wpColorPicker("color",t)},setSelectWoo:function(e,t){jQuery(e).selectWoo().val(t).trigger("change")},setTextarea:function(e,t){jQuery(e).prop("value",t)},findElement:function(e,t){return wp.customize.control(e).container.find(t)},setValue:function(e,t,i){i=_.isUndefined(i)?100:parseInt(i,10),wp.customize.instance(e).set({}),setTimeout(function(){wp.customize.instance(e).set(t)},i)}};(kirki={initialized:!1,initialize:function(){this.initialized||(setTimeout(function(){kirki.util.webfonts.standard.initialize(),kirki.util.webfonts.google.initialize()},150),this.initialized=!0)}}).initialize();var kirki=kirki||{};kirki=(kirki=jQuery.extend(kirki,{control:{"kirki-radio":{init:function(e){this.template(e),kirki.input.radio.init(e)},template:function(e){var t=wp.template("kirki-input-radio");e.container.html(t({label:e.params.label,description:e.params.description,"data-id":e.id,inputAttrs:e.params.inputAttrs,default:e.params.default,value:kirki.setting.get(e.id),choices:e.params.choices}))}},"kirki-color":{init:function(e){this.template(e),kirki.input.color.init(e)},template:function(e){var t=wp.template("kirki-input-color");e.container.html(t({label:e.params.label,description:e.params.description,"data-id":e.id,mode:e.params.mode,inputAttrs:e.params.inputAttrs,"data-palette":e.params.palette,"data-default-color":e.params.default,"data-alpha":e.params.choices.alpha,value:kirki.setting.get(e.id)}))}},"kirki-generic":{init:function(e){this.template(e),_.isUndefined(e.params)||_.isUndefined(e.params.choices)||_.isUndefined(e.params.choices.element)||"textarea"!==e.params.choices.element?kirki.input.genericInput.init(e):kirki.input.textarea.init(e)},template:function(e){var t,i={label:e.params.label,description:e.params.description,"data-id":e.id,inputAttrs:e.params.inputAttrs,choices:e.params.choices,value:kirki.setting.get(e.id)};if(!_.isUndefined(e.params)&&!_.isUndefined(e.params.choices)&&!_.isUndefined(e.params.choices.element)&&"textarea"===e.params.choices.element)return t=wp.template("kirki-input-textarea"),void e.container.html(t(i));t=wp.template("kirki-input-generic"),e.container.html(t(i))}},"kirki-select":{init:function(e){this.template(e),kirki.input.select.init(e)},template:function(e){var t=wp.template("kirki-input-select");e.container.html(t({label:e.params.label,description:e.params.description,"data-id":e.id,inputAttrs:e.params.inputAttrs,choices:e.params.choices,value:kirki.setting.get(e.id),multiple:e.params.multiple||1,placeholder:e.params.placeholder}))}}}}))||{},kirki=(kirki=jQuery.extend(kirki,{input:{radio:{init:function(e){jQuery('input[data-id="'+e.id+'"]').on("change keyup paste click",function(){kirki.setting.set(e.id,jQuery(this).val())})}},color:{init:function(e){var t,i=jQuery('.kirki-color-control[data-id="'+e.id+'"]');e.choices=e.choices||{},_.isEmpty(e.choices)&&e.params.choices&&(e.choices=e.params.choices),_.isEmpty(e.choices)||i.wpColorPicker(e.choices),setTimeout(function(){(t=jQuery('.kirki-input-container[data-id="'+e.id+'"] .wp-picker-clear')).length&&t.click(function(){kirki.setting.set(e.id,"")})},200),i.wpColorPicker({change:function(){setTimeout(function(){kirki.setting.set(e.id,i.val())},20)}})}},genericInput:{init:function(e){jQuery('input[data-id="'+e.id+'"]').on("change keyup paste click",function(){kirki.setting.set(e.id,jQuery(this).val())})}},textarea:{init:function(e){jQuery('textarea[data-id="'+e.id+'"]').on("change keyup paste click",function(){kirki.setting.set(e.id,jQuery(this).val())})}},select:{init:function(e){var t,i=jQuery('select[data-id="'+e.id+'"]'),n=parseInt(i.data("multiple"),10),a={escapeMarkup:function(e){return e}};e.params.placeholder&&(a.placeholder=e.params.placeholder,a.allowClear=!0),1<n&&(a.maximumSelectionLength=n),jQuery(i).selectWoo(a).on("change",function(){t=null===(t=jQuery(this).val())&&1<n?[]:t,kirki.setting.set(e.id,t)})}},image:{getTemplate:function(e){var t,i="";return e=_.defaults(e,{label:"",description:"",inputAttrs:"","data-id":"",choices:{},value:""}),_.isUndefined(e.choices)||_.isUndefined(e.choices.save_as)||e.choices.save_as,t=e.value,_.isObject(e.value)&&!_.isUndefined(e.value.url)&&(t=e.value.url),i+="<label>",e.label&&(i+='<span class="customize-control-title">'+e.label+"</span>"),e.description&&(i+='<span class="description customize-control-description">'+e.description+"</span>"),i+="</label>",i+='<div class="image-wrapper attachment-media-view image-upload">',e.value.url||""!==t?i+='<div class="thumbnail thumbnail-image"><img src="'+t+'" alt="" /></div>':i+='<div class="placeholder">'+kirkiL10n.noFileSelected+"</div>",i+='<div class="actions">',i+='<button class="button image-upload-remove-button'+(""===t?" hidden":"")+'">'+kirkiL10n.remove+"</button>",e.default&&""!==e.default&&(i+='<button type="button" class="button image-default-button"',(e.default===e.value||!_.isUndefined(e.value.url)&&e.default===e.value.url)&&(i+=' style="display:none;"'),i+=">"+kirkiL10n.default+"</button>"),i+='<button type="button" class="button image-upload-button">'+kirkiL10n.selectFile+"</button>",i+="</div></div>",'<div class="kirki-input-container" data-id="'+e.id+'">'+i+"</div>"},init:function(e){}}}}))||{},kirki=(kirki=jQuery.extend(kirki,{setting:{get:function(e){var t=e.split("["),i="",n=0,a="";return _.each(t,function(e,t){e=e.replace("]",""),0===t?i=e:i+="["+e+"]",_.isUndefined(wp.customize.instance(i))||(a=wp.customize.instance(i).get(),n=t),n<t&&_.isObject(a)&&!_.isUndefined(a[e])&&(a=a[e])}),a},set:function(e,t,i){var n,a,r,o,s,c="",l="",u={};n=e,_.isObject(e)&&(n=jQuery(e).attr("data-id")?e.attr("data-id"):e.parents("[data-id]").attr("data-id")),void 0===wp.customize.control(n)?(a=n.split("["),_.each(a,function(e,t){e=e.replace("]",""),c=0===t?e:"["+e+"]",_.isUndefined(wp.customize.instance(c))||(l=c,r=wp.customize.instance(l).get())}),""!==(o=n.replace(l,""))?(_.isObject(r)||(r={}),"["===o.charAt(0)&&(o=o.replace("[","")),s=o.split("["),_.each(s,function(e,t){s[t]=e.replace("]","")}),i&&s.push(i),u='{"'+s.join('":{"')+'":"'+t+'"'+"}".repeat(s.length),u=JSON.parse(u),jQuery.extend(!0,r,u),t=r):i&&((r=_.isObject(r)?r:{})[i]=t,t=r),wp.customize.control(l).setting.set(t)):wp.customize.control(n).setting.set(t)}}}))||{};kirki=jQuery.extend(kirki,{util:{webfonts:{google:{fonts:{},initialize:function(){this.setFonts()},setFonts:function(){var e=this;_.isEmpty(e.fonts)&&jQuery.post(ajaxurl,{action:"kirki_fonts_google_all_get"},function(t){e.fonts=JSON.parse(t)})},getFont:function(e){var t=this.getFonts();return void 0!==t[e]&&t[e]},getFonts:function(e,t,i){var n=this,a={},r={},o={};return e="alpha"!==(e=e||"alpha")&&"popularity"!==e&&"trending"!==e?"alpha":e,i=i||0,i=parseInt(i,10),"alpha"===e?a=jQuery.extend({},n.fonts.items):_.each(n.fonts.order[e],function(e){a[e]=n.fonts.items[e]}),""!==t&&t?_.each(a,function(e,i){t===e.category&&(r[i]=e)}):r=a,0<i?(_.each(_.first(_.keys(r),i),function(e){o[e]=r[e]}),o):r},getVariants:function(e){var t=this.getFont(e);return!!t&&(!_.isUndefined(t.variants)&&t.variants)}},standard:{fonts:{},initialize:function(){this.setFonts()},setFonts:function(){var e=this;_.isEmpty(e.fonts)&&jQuery.post(ajaxurl,{action:"kirki_fonts_standard_all_get"},function(t){e.fonts=JSON.parse(t)})},getVariants:function(e){return["regular","italic","700","700italic"]}},getFontType:function(e){return void 0!==this.standard.fonts[e]||void 0!==this.standard.fonts.stack&&void 0!==this.standard.fonts.stack[e]?"standard":void 0!==this.google.fonts.items[e]&&"google"}}}}),function(){"use strict";wp.customize.kirkiDynamicControl=wp.customize.Control.extend({initialize:function(e,t){var i=t||{};i.params=i.params||{},i.params.type||(i.params.type="kirki-generic"),i.params.content||(i.params.content=jQuery("<li></li>"),i.params.content.attr("id","customize-control-"+e.replace(/]/g,"").replace(/\[/g,"-")),i.params.content.attr("class","customize-control customize-control-"+i.params.type)),this.propertyElements=[],wp.customize.Control.prototype.initialize.call(this,e,i)},_setUpSettingRootLinks:function(){var e=this;e.container.find("[data-customize-setting-link]").each(function(){var t=jQuery(this);wp.customize(t.data("customizeSettingLink"),function(i){var n=new wp.customize.Element(t);e.elements.push(n),n.sync(i),n.set(i())})})},_setUpSettingPropertyLinks:function(){var e=this;e.setting&&e.container.find("[data-customize-setting-property-link]").each(function(){var t,i=jQuery(this),n=i.data("customizeSettingPropertyLink");t=new wp.customize.Element(i),e.propertyElements.push(t),t.set(e.setting()[n]),t.bind(function(t){var i=e.setting();t!==i[n]&&((i=_.clone(i))[n]=t,e.setting.set(i))}),e.setting.bind(function(e){e[n]!==t.get()&&t.set(e[n])})})},ready:function(){var e=this;e._setUpSettingRootLinks(),e._setUpSettingPropertyLinks(),wp.customize.Control.prototype.ready.call(e),e.deferred.embedded.done(function(){e.initKirkiControl(e)})},embed:function(){var e=this,t=e.section();t&&wp.customize.section(t,function(t){"kirki-expanded"===t.params.type||t.expanded()||wp.customize.settings.autofocus.control===e.id?e.actuallyEmbed():t.expanded.bind(function(t){t&&e.actuallyEmbed()})})},actuallyEmbed:function(){"resolved"!==this.deferred.embedded.state()&&(this.renderContent(),this.deferred.embedded.resolve())},focus:function(e){this.actuallyEmbed(),wp.customize.Control.prototype.focus.call(this,e)},initKirkiControl:function(e){void 0===kirki.control[e.params.type]?this.container.on("change keyup paste click","input",function(){e.setting.set(jQuery(this).val())}):kirki.control[e.params.type].init(e)},kirkiValidateCSSValue:function(e){var t,i;return"0"===e||0<=e.indexOf("calc(")&&0<=e.indexOf(")")||("auto"===e||"inherit"===e||"initial"===e||(t=parseFloat(e),i=e.replace(t,""),!isNaN(t)&&-1!==jQuery.inArray(i,["rem","em","ex","%","px","cm","mm","in","pt","pc","ch","vh","vw","vmin","vmax"])))}})}(),_.each(kirki.control,function(e,t){wp.customize.controlConstructor[t]=wp.customize.kirkiDynamicControl.extend({})}),wp.customize.controlConstructor["kirki-background"]=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){var e=this,t=e.setting._value,i=e.container.find(".kirki-color-control");(_.isUndefined(t["background-image"])||""===t["background-image"])&&(e.container.find(".background-wrapper > .background-repeat").hide(),e.container.find(".background-wrapper > .background-position").hide(),e.container.find(".background-wrapper > .background-size").hide(),e.container.find(".background-wrapper > .background-attachment").hide()),i.wpColorPicker({change:function(){setTimeout(function(){e.saveValue("background-color",i.val())},100)}}),e.container.on("change",".background-repeat select",function(){e.saveValue("background-repeat",jQuery(this).val())}),e.container.on("change click",".background-size input",function(){e.saveValue("background-size",jQuery(this).val())}),e.container.on("change",".background-position select",function(){e.saveValue("background-position",jQuery(this).val())}),e.container.on("change click",".background-attachment input",function(){e.saveValue("background-attachment",jQuery(this).val())}),e.container.on("click",".background-image-upload-button",function(t){var i=wp.media({multiple:!1}).open().on("select",function(){var t,n,a,r=i.state().get("selection").first(),o=r.toJSON().sizes.full.url;_.isUndefined(r.toJSON().sizes.medium)?_.isUndefined(r.toJSON().sizes.thumbnail)||(o=r.toJSON().sizes.thumbnail.url):o=r.toJSON().sizes.medium.url,t=r.toJSON().sizes.full.url,r.toJSON().id,r.toJSON().width,r.toJSON().height,""!==t&&e.container.find(".background-wrapper > .background-repeat, .background-wrapper > .background-position, .background-wrapper > .background-size, .background-wrapper > .background-attachment").show(),e.saveValue("background-image",t),n=e.container.find(".placeholder, .thumbnail"),a=e.container.find(".background-image-upload-remove-button"),n.length&&n.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+o+'" alt="" />'),a.length&&a.show()});t.preventDefault()}),e.container.on("click",".background-image-upload-remove-button",function(t){var i,n;t.preventDefault(),e.saveValue("background-image",""),i=e.container.find(".placeholder, .thumbnail"),n=e.container.find(".background-image-upload-remove-button"),e.container.find(".background-wrapper > .background-repeat").hide(),e.container.find(".background-wrapper > .background-position").hide(),e.container.find(".background-wrapper > .background-size").hide(),e.container.find(".background-wrapper > .background-attachment").hide(),i.length&&i.removeClass().addClass("placeholder").html("No file selected"),n.length&&n.hide()})},saveValue:function(e,t){var i=jQuery("#customize-control-"+this.id.replace("[","-").replace("]","")+" .background-hidden-value"),n=this.setting._value;n[e]=t,jQuery(i).attr("value",JSON.stringify(n)).trigger("change"),this.setting.set(n)}}),wp.customize.controlConstructor["kirki-color-palette"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-dashicons"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-date"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e=this,t=e.selector+" input.datepicker";jQuery(t).datepicker({dateFormat:"yy-mm-dd"}),e.container.find(".kirki-controls-loading-spinner").hide(),this.container.on("change keyup paste","input.datepicker",function(){e.setting.set(jQuery(this).val())})}}),wp.customize.controlConstructor["kirki-dimension"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t=this;t.kirkiNotifications(),this.container.on("change keyup paste","input",function(){e=jQuery(this).val(),t.setting.set(e)})},kirkiNotifications:function(){var e=this;wp.customize(e.id,function(t){t.bind(function(i){var n="long_title";!1===e.kirkiValidateCSSValue(i)?t.notifications.add(n,new wp.customize.Notification(n,{type:"warning",message:dimensionkirkiL10n["invalid-value"]})):t.notifications.remove(n)})})}}),wp.customize.controlConstructor["kirki-dimensions"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t=this.params.choices.controls,i={},n=[];for(_.each(t,function(e,t){!0===e&&n.push(t)}),e=0;e<n.length;e++)i[n[e]]=this.setting._value[n[e]],this.updateDimensionsValue(n[e],i)},updateDimensionsValue:function(e,t){var i=this;i.container.on("change keyup paste","."+e+" input",function(){t[e]=jQuery(this).val(),i.kirkiNotifications(),i.saveValue(t)})},saveValue:function(e){var t={};_.each(e,function(e,i){t[i]=e}),this.setting.set(t)},kirkiNotifications:function(){var e=this;wp.customize(e.id,function(t){t.bind(function(i){var n,a="long_title",r={};if(t.notifications.remove(a),_.each(i,function(t,i){!1===e.kirkiValidateCSSValue(t)?r[i]=t:delete r[i]}),!_.isEmpty(r))return n=dimensionskirkiL10n["invalid-value"]+" ("+_.values(r).toString()+") ",void t.notifications.add(a,new wp.customize.Notification(a,{type:"warning",message:n}));t.notifications.remove(a)})})}}),wp.customize.controlConstructor["kirki-editor"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t=this,i=t.container.find("textarea"),n="kirki-editor-"+t.id.replace("[","").replace("]","");wp.editor.initialize(n,{tinymce:{wpautop:!0},quicktags:!0,mediaButtons:!0}),(e=tinyMCE.get(n))&&e.onChange.add(function(n){var a;n.save(),a=e.getContent(),i.val(a).trigger("change"),wp.customize.instance(t.id).set(a)})}}),wp.customize.controlConstructor["kirki-fontawesome"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t,i=this,n=this.container.find("select"),a=jQuery.parseJSON(fontAwesomeJSON),r={data:[],escapeMarkup:function(e){return e},templateResult:function(e){return'<i class="fa fa-lg fa-'+e.id+'" aria-hidden="true"></i> '+e.text},templateSelection:function(e){return'<i class="fa fa-lg fa-'+e.id+'" aria-hidden="true"></i> '+e.text}};_.each(a.icons,function(e){r.data.push({id:e.id,text:e.name})}),(t=jQuery(n).selectWoo(r)).on("change",function(){e=jQuery(this).val(),i.setting.set(e)}),t.val(i.setting._value).trigger("change")}}),wp.customize.controlConstructor["kirki-image"]=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){var e=this,t=e.getValue(),i=_.isUndefined(e.params.choices)||_.isUndefined(e.params.choices.save_as)?"url":e.params.choices.save_as,n=e.container.find(".placeholder, .thumbnail"),a="array"===i?t.url:t,r=e.container.find(".image-upload-remove-button"),o=e.container.find(".image-default-button");e.container.find(".kirki-controls-loading-spinner").hide(),"id"!==i&&"ID"!==i||""===t||wp.media.attachment(t).fetch().then(function(){setTimeout(function(){var e=wp.media.attachment(t).get("url");n.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+e+'" alt="" />')},700)}),("url"===i&&""!==t||"array"===i&&!_.isUndefined(t.url)&&""!==t.url)&&e.container.find("image-default-button").hide(),("url"===i&&""===t||"array"===i&&(_.isUndefined(t.url)||""===t.url))&&r.hide(),t===e.params.default&&e.container.find("image-default-button").hide(),""!==a&&n.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+a+'" alt="" />'),e.container.on("click",".image-upload-button",function(t){var a=wp.media({multiple:!1}).open().on("select",function(){var t=a.state().get("selection").first(),s=t.toJSON().sizes.full.url;_.isUndefined(t.toJSON().sizes.medium)?_.isUndefined(t.toJSON().sizes.thumbnail)||(s=t.toJSON().sizes.thumbnail.url):s=t.toJSON().sizes.medium.url,"array"===i?(e.saveValue("id",t.toJSON().id),e.saveValue("url",t.toJSON().sizes.full.url),e.saveValue("width",t.toJSON().width),e.saveValue("height",t.toJSON().height)):"id"===i?e.saveValue("id",t.toJSON().id):e.saveValue("url",t.toJSON().sizes.full.url),n.length&&n.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+s+'" alt="" />'),r.length&&(r.show(),o.hide())});t.preventDefault()}),e.container.on("click",".image-upload-remove-button",function(t){var i,n,a;t.preventDefault(),e.saveValue("id",""),e.saveValue("url",""),e.saveValue("width",""),e.saveValue("height",""),i=e.container.find(".placeholder, .thumbnail"),n=e.container.find(".image-upload-remove-button"),a=e.container.find(".image-default-button"),i.length&&i.removeClass().addClass("placeholder").html("No file selected"),n.length&&(n.hide(),jQuery(a).hasClass("button")&&a.show())}),e.container.on("click",".image-default-button",function(t){var i,n,a;t.preventDefault(),e.saveValue("url",e.params.default),i=e.container.find(".placeholder, .thumbnail"),n=e.container.find(".image-upload-remove-button"),a=e.container.find(".image-default-button"),i.length&&i.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+e.params.default+'" alt="" />'),n.length&&(n.show(),a.hide())})},getValue:function(){var e=this.setting._value;return"array"===(_.isUndefined(this.params.choices)||_.isUndefined(this.params.choices.save_as)?"url":this.params.choices.save_as)&&_.isString(e)&&(e={url:e}),e},saveValue:function(e,t){var i=this,n=i.setting._value;if("array"===(_.isUndefined(i.params.choices)||_.isUndefined(i.params.choices.save_as)?"url":i.params.choices.save_as))return _.isString(n)&&(n={}),n[e]=t,i.setting.set(n),void i.container.find("button").trigger("change");i.setting.set(t),i.container.find("button").trigger("change")}}),wp.customize.controlConstructor["kirki-multicheck"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e=this;e.container.on("change","input",function(){var t=[],i=0;jQuery.each(e.params.choices,function(n){e.container.find('input[value="'+n+'"]').is(":checked")&&(t[i]=n,i++)}),e.setting.set(t)})}}),wp.customize.controlConstructor["kirki-multicolor"]=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){"use strict";var e=this.params.choices,t=Object.keys(e),i=(this.params.value,0);function n(t,i,n){var a=t.container.find(".multicolor-index-"+n),r={change:function(){setTimeout(function(){t.saveValue(n,a.val()),t.container.find(".multicolor-index-"+n).trigger("change")},100)}};_.isObject(e.irisArgs)&&_.each(e.irisArgs,function(e,t){r[t]=e}),a.wpColorPicker(r)}for(;i<Object.keys(e).length;)n(this,0,t[i]),i++},saveValue:function(e,t){var i=this.container.find(".multicolor-hidden-value"),n=this.setting._value;n[e]=t,jQuery(i).attr("value",JSON.stringify(n)).trigger("change"),this.setting.set(n)}}),wp.customize.controlConstructor["kirki-number"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t,i,n=this,a=n.setting._value,r="";n.params.choices=_.defaults(n.params.choices,{min:0,max:100,step:1}),(isNaN(a)||""===a)&&(a=0>n.params.choices.min&&0<n.params.choices.max?0:n.params.choices.min),a=parseFloat(a),n.params.choices.step="any"===n.params.choices.step?.001:n.params.choices.step,n.params.choices.min=parseFloat(n.params.choices.min),n.params.choices.max=parseFloat(n.params.choices.max),n.params.choices.step=parseFloat(n.params.choices.step),r+="<label>",n.params.label&&(r+='<span class="customize-control-title">'+n.params.label+"</span>"),n.params.description&&(r+='<span class="description customize-control-description">'+n.params.description+"</span>"),r+='<div class="customize-control-content">',r+="<input "+n.params.inputAttrs+' type="text" '+n.params.link+' value="'+a+'" />',r+='<div class="quantity button minus">-</div>',r+='<div class="quantity button plus">+</div>',r+="</div>",r+="</label>",n.container.html(r),e=n.container.find("input"),t=n.container.find(".plus"),i=n.container.find(".minus"),t.click(function(){var t,i=parseFloat(e.val());t=i>=n.params.choices.max?i:i+n.params.choices.step,e.val(t),e.trigger("change")}),i.click(function(){var t,i=parseFloat(e.val());t=i<=n.params.choices.min?i:i-n.params.choices.step,e.val(t),e.trigger("change")}),this.container.on("change keyup paste click","input",function(){n.setting.set(jQuery(this).val())})}}),wp.customize.controlConstructor["kirki-palette"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-preset"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t=this;this.container.on("change","select",function(){e=jQuery(this).val(),t.setting.set(e),jQuery.each(t.params.choices,function(t,i){e===t&&jQuery.each(i.settings,function(e,t){kirkiSetSettingValue.set(e,t)})}),wp.customize.previewer.refresh()})}}),wp.customize.controlConstructor["kirki-radio-buttonset"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-radio-image"]=wp.customize.kirkiDynamicControl.extend({});var RepeaterRow=function(e,t,i,n){"use strict";var a=this;this.rowIndex=e,this.container=t,this.label=i,this.header=this.container.find(".repeater-row-header"),this.header.on("click",function(){a.toggleMinimize()}),this.container.on("click",".repeater-row-remove",function(){a.remove()}),this.header.on("mousedown",function(){a.container.trigger("row:start-dragging")}),this.container.on("keyup change","input, select, textarea",function(e){a.container.trigger("row:update",[a.rowIndex,jQuery(e.target).data("field"),e.target])}),this.setRowIndex=function(e){this.rowIndex=e,this.container.attr("data-row",e),this.container.data("row",e),this.updateLabel()},this.toggleMinimize=function(){this.container.toggleClass("minimized"),this.header.find(".dashicons").toggleClass("dashicons-arrow-up").toggleClass("dashicons-arrow-down")},this.remove=function(){this.container.slideUp(300,function(){jQuery(this).detach()}),this.container.trigger("row:remove",[this.rowIndex])},this.updateLabel=function(){var e,t,i;if("field"===this.label.type&&(e=this.container.find('.repeater-field [data-field="'+this.label.field+'"]'),_.isFunction(e.val)&&""!==(t=e.val())))return _.isUndefined(n.params.fields[this.label.field])||_.isUndefined(n.params.fields[this.label.field].type)||("select"===n.params.fields[this.label.field].type?_.isUndefined(n.params.fields[this.label.field].choices)||_.isUndefined(n.params.fields[this.label.field].choices[e.val()])||(t=n.params.fields[this.label.field].choices[e.val()]):"radio"!==n.params.fields[this.label.field].type&&"radio-image"!==n.params.fields[this.label.field].type||(i=n.selector+' [data-row="'+this.rowIndex+'"] .repeater-field [data-field="'+this.label.field+'"]:checked',t=jQuery(i).val())),void this.header.find(".repeater-row-label").text(t);this.header.find(".repeater-row-label").text(this.label.value+" "+(this.rowIndex+1))},this.updateLabel()};wp.customize.controlConstructor.repeater=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){"use strict";var e,t,i=this,n=this.params.value;i.container.find(".kirki-controls-loading-spinner").hide(),this.settingField=this.container.find("[data-customize-setting-link]").first(),this.setValue([],!1),this.repeaterFieldsContainer=this.container.find(".repeater-fields").first(),this.currentIndex=0,this.rows=[],e=!1,_.isUndefined(this.params.choices.limit)||(e=!(0>=this.params.choices.limit)&&parseInt(this.params.choices.limit,10)),this.container.on("click","button.repeater-add",function(n){n.preventDefault(),!e||i.currentIndex<e?((t=i.addRow()).toggleMinimize(),i.initColorPicker(),i.initSelect(t)):jQuery(i.selector+" .limit").addClass("highlight")}),this.container.on("click",".repeater-row-remove",function(){i.currentIndex--,(!e||i.currentIndex<e)&&jQuery(i.selector+" .limit").removeClass("highlight")}),this.container.on("click keypress",".repeater-field-image .upload-button,.repeater-field-cropped_image .upload-button,.repeater-field-upload .upload-button",function(e){e.preventDefault(),i.$thisButton=jQuery(this),i.openFrame(e)}),this.container.on("click keypress",".repeater-field-image .remove-button,.repeater-field-cropped_image .remove-button",function(e){e.preventDefault(),i.$thisButton=jQuery(this),i.removeImage(e)}),this.container.on("click keypress",".repeater-field-upload .remove-button",function(e){e.preventDefault(),i.$thisButton=jQuery(this),i.removeFile(e)}),this.repeaterTemplate=_.memoize(function(){var e={evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"};return function(t){return _.template(i.container.find(".customize-control-repeater-content").first().html(),null,e)(t)}}),n.length&&_.each(n,function(e){t=i.addRow(e),i.initColorPicker(),i.initSelect(t,e)}),this.setValue(n,!0,!0),this.repeaterFieldsContainer.sortable({handle:".repeater-row-header",update:function(){i.sort()}})},openFrame:function(e){"use strict";wp.customize.utils.isKeydownButNotEnterEvent(e)||(this.$thisButton.closest(".repeater-field").hasClass("repeater-field-cropped_image")?this.initCropperFrame():this.initFrame(),this.frame.open())},initFrame:function(){"use strict";var e=this.getMimeType();this.frame=wp.media({states:[new wp.media.controller.Library({library:wp.media.query({type:e}),multiple:!1,date:!1})]}),this.frame.on("select",this.onSelect,this)},initCropperFrame:function(){"use strict";var e=this.$thisButton.siblings("input.hidden-field").attr("data-field"),t=this.getMimeType();_.isString(e)&&""!==e&&_.isObject(this.params.fields[e])&&"cropped_image"===this.params.fields[e].type&&["width","height","flex_width","flex_height"].forEach(function(t){_.isUndefined(this.params.fields[e][t])||(this.params[t]=this.params.fields[e][t])}.bind(this)),this.frame=wp.media({button:{text:"Select and Crop",close:!1},states:[new wp.media.controller.Library({library:wp.media.query({type:t}),multiple:!1,date:!1,suggestedWidth:this.params.width,suggestedHeight:this.params.height}),new wp.media.controller.CustomizeImageCropper({imgSelectOptions:this.calculateImageSelectOptions,control:this})]}),this.frame.on("select",this.onSelectForCrop,this),this.frame.on("cropped",this.onCropped,this),this.frame.on("skippedcrop",this.onSkippedCrop,this)},onSelect:function(){"use strict";var e=this.frame.state().get("selection").first().toJSON();this.$thisButton.closest(".repeater-field").hasClass("repeater-field-upload")?this.setFileInRepeaterField(e):this.setImageInRepeaterField(e)},onSelectForCrop:function(){"use strict";var e=this.frame.state().get("selection").first().toJSON();this.params.width!==e.width||this.params.height!==e.height||this.params.flex_width||this.params.flex_height?this.frame.setState("cropper"):this.setImageInRepeaterField(e)},onCropped:function(e){"use strict";this.setImageInRepeaterField(e)},calculateImageSelectOptions:function(e,t){"use strict";var i,n,a,r=t.get("control"),o=!!parseInt(r.params.flex_width,10),s=!!parseInt(r.params.flex_height,10),c=e.get("width"),l=e.get("height"),u=parseInt(r.params.width,10),d=parseInt(r.params.height,10),p=u/d,h=c,f=l;return t.set("canSkipCrop",!r.mustBeCropped(o,s,u,d,c,l)),h/f>p?u=(d=f)*p:d=(u=h)/p,a={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:c,imageHeight:l,x1:i=(h-u)/2,y1:n=(f-d)/2,x2:u+i,y2:d+n},!1===s&&!1===o&&(a.aspectRatio=u+":"+d),!1===s&&(a.maxHeight=d),!1===o&&(a.maxWidth=u),a},mustBeCropped:function(e,t,i,n,a,r){"use strict";return!(!0===e&&!0===t||!0===e&&n===r||!0===t&&i===a||i===a&&n===r||a<=i)},onSkippedCrop:function(){"use strict";var e=this.frame.state().get("selection").first().toJSON();this.setImageInRepeaterField(e)},setImageInRepeaterField:function(e){"use strict";var t=this.$thisButton.closest(".repeater-field-image,.repeater-field-cropped_image");t.find(".kirki-image-attachment").html('<img src="'+e.url+'">').hide().slideDown("slow"),t.find(".hidden-field").val(e.id),this.$thisButton.text(this.$thisButton.data("alt-label")),t.find(".remove-button").show(),t.find("input, textarea, select").trigger("change"),this.frame.close()},setFileInRepeaterField:function(e){"use strict";var t=this.$thisButton.closest(".repeater-field-upload");t.find(".kirki-file-attachment").html('<span class="file"><span class="dashicons dashicons-media-default"></span> '+e.filename+"</span>").hide().slideDown("slow"),t.find(".hidden-field").val(e.id),this.$thisButton.text(this.$thisButton.data("alt-label")),t.find(".upload-button").show(),t.find(".remove-button").show(),t.find("input, textarea, select").trigger("change"),this.frame.close()},getMimeType:function(){"use strict";var e=this.$thisButton.siblings("input.hidden-field").attr("data-field");return _.isString(e)&&""!==e&&_.isObject(this.params.fields[e])&&"upload"===this.params.fields[e].type&&!_.isUndefined(this.params.fields[e].mime_type)?this.params.fields[e].mime_type:"image"},removeImage:function(e){"use strict";var t,i;wp.customize.utils.isKeydownButNotEnterEvent(e)||(i=(t=this.$thisButton.closest(".repeater-field-image,.repeater-field-cropped_image,.repeater-field-upload")).find(".upload-button"),t.find(".kirki-image-attachment").slideUp("fast",function(){jQuery(this).show().html(jQuery(this).data("placeholder"))}),t.find(".hidden-field").val(""),i.text(i.data("label")),this.$thisButton.hide(),t.find("input, textarea, select").trigger("change"))},removeFile:function(e){"use strict";var t,i;wp.customize.utils.isKeydownButNotEnterEvent(e)||(i=(t=this.$thisButton.closest(".repeater-field-upload")).find(".upload-button"),t.find(".kirki-file-attachment").slideUp("fast",function(){jQuery(this).show().html(jQuery(this).data("placeholder"))}),t.find(".hidden-field").val(""),i.text(i.data("label")),this.$thisButton.hide(),t.find("input, textarea, select").trigger("change"))},getValue:function(){"use strict";return JSON.parse(decodeURI(this.setting.get()))},setValue:function(e,t,i){"use strict";var n=e,a=[];i&&(jQuery.each(this.params.fields,function(e,t){"image"!==t.type&&"cropped_image"!==t.type&&"upload"!==t.type||a.push(e)}),jQuery.each(e,function(e,t){jQuery.each(a,function(i,a){_.isUndefined(t[a])||_.isUndefined(t[a].id)||(n[e][a]=t[a].id)})})),this.setting.set(encodeURI(JSON.stringify(n))),t&&this.settingField.trigger("change")},addRow:function(e){"use strict";var t,i,n,a=this,r=a.repeaterTemplate(),o=this.getValue(),s={};if(r){if(t=jQuery.extend(!0,{},a.params.fields),e)for(n in e)e.hasOwnProperty(n)&&t.hasOwnProperty(n)&&(t[n].default=e[n]);for(n in t.index=this.currentIndex,r=r(t),(i=new RepeaterRow(a.currentIndex,jQuery(r).appendTo(a.repeaterFieldsContainer),a.params.row_label,a)).container.on("row:remove",function(e,t){a.deleteRow(t)}),i.container.on("row:update",function(e,t,n,r){a.updateField.call(a,e,t,n,r),i.updateLabel()}),this.rows[this.currentIndex]=i,t)t.hasOwnProperty(n)&&(s[n]=t[n].default);return o[this.currentIndex]=s,this.setValue(o,!0),this.currentIndex++,i}},sort:function(){"use strict";var e=this,t=this.repeaterFieldsContainer.find(".repeater-row"),i=[],n=e.getValue(),a=[],r=[];t.each(function(e,t){i.push(jQuery(t).data("row"))}),jQuery.each(i,function(t,i){a[t]=e.rows[i],a[t].setRowIndex(t),r[t]=n[i]}),e.rows=a,e.setValue(r)},deleteRow:function(e){"use strict";var t,i=this.getValue();for(t in i[e]&&this.rows[e]&&(delete i[e],delete this.rows[e],this.setValue(i,!0)),1,this.rows)this.rows.hasOwnProperty(t)&&this.rows[t]&&(this.rows[t].updateLabel(),0)},updateField:function(e,t,i,n){"use strict";var a,r,o;this.rows[t]&&this.params.fields[i]&&(a=this.params.fields[i].type,r=this.rows[t],o=this.getValue(),n=jQuery(n),_.isUndefined(o[r.rowIndex][i])||(o[r.rowIndex][i]="checkbox"===a?n.is(":checked"):n.val(),this.setValue(o,!0)))},initColorPicker:function(){"use strict";var e=this,t=e.container.find(".color-picker-hex"),i={},n=t.data("field");_.isUndefined(n)||_.isUndefined(e.params.fields[n])||_.isUndefined(e.params.fields[n].palettes)||!_.isObject(e.params.fields[n].palettes)||(i.palettes=e.params.fields[n].palettes),i.change=function(t,i){var n=jQuery(t.target),a=n.closest(".repeater-row").data("row"),r=e.getValue();r[a][n.data("field")]=i.color.toString(),e.setValue(r,!0)},0!==t.length&&t.wpColorPicker(i)},initSelect:function(e,t){"use strict";var i,n,a=this,r=e.container.find(".repeater-field select"),o={};0!==r.length&&(i=r.data("field"),"undefed"!==(n=jQuery(r).data("multiple"))&&jQuery.isNumeric(n)&&1<(n=parseInt(n,10))&&(o.maximumSelectionLength=n),(t=t||{})[i]=t[i]||"",jQuery(r).selectWoo(o).val(t[i]),this.container.on("change",".repeater-field select",function(e){var t=jQuery(e.target),i=t.closest(".repeater-row").data("row"),n=a.getValue();n[i][t.data("field")]=jQuery(this).val(),a.setValue(n)}))}}),wp.customize.controlConstructor["kirki-slider"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e=this,t="postMessage"===e.setting.transport?"mousemove change":"change",i=e.container.find('input[type="range"]'),n=e.container.find('input[type="text"]'),a=e.setting._value;n.attr("value",a),i.on("mousemove change",function(){n.attr("value",i.val())}),i.on(t,function(){e.setting.set(i.val())}),n.on("input paste change",function(){i.attr("value",n.val()),e.setting.set(n.val())}),e.container.find(".slider-reset").on("click",function(){n.attr("value",e.params.default),i.attr("value",e.params.default),e.setting.set(n.val())})}}),wp.customize.controlConstructor["kirki-sortable"]=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){"use strict";var e=this;e.container.find(".kirki-controls-loading-spinner").hide(),e.sortableContainer=e.container.find("ul.sortable").first(),e.sortableContainer.sortable({stop:function(){e.updateValue()}}).disableSelection().find("li").each(function(){jQuery(this).find("i.visibility").click(function(){jQuery(this).toggleClass("dashicons-visibility-faint").parents("li:eq(0)").toggleClass("invisible")})}).click(function(){e.updateValue()})},updateValue:function(){"use strict";var e=[];this.sortableContainer.find("li").each(function(){jQuery(this).is(".invisible")||e.push(jQuery(this).data("value"))}),this.setting.set(e)}}),wp.customize.controlConstructor["kirki-switch"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){"use strict";var e=this,t=e.setting._value;this.container.on("change","input",function(){t=!!jQuery(this).is(":checked"),e.setting.set(t)})}}),wp.customize.controlConstructor["kirki-toggle"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e=this,t=e.setting._value;this.container.on("change","input",function(){t=!!jQuery(this).is(":checked"),e.setting.set(t)})}}),wp.customize.controlConstructor["kirki-typography"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){"use strict";var e,t=this,i=t.setting._value;t.renderFontSelector(),t.renderBackupFontSelector(),t.renderVariantSelector(),t.params.default["font-size"]&&this.container.on("change keyup paste",".font-size input",function(){t.saveValue("font-size",jQuery(this).val())}),t.params.default["line-height"]&&this.container.on("change keyup paste",".line-height input",function(){t.saveValue("line-height",jQuery(this).val())}),t.params.default["margin-top"]&&this.container.on("change keyup paste",".margin-top input",function(){t.saveValue("margin-top",jQuery(this).val())}),t.params.default["margin-bottom"]&&this.container.on("change keyup paste",".margin-bottom input",function(){t.saveValue("margin-bottom",jQuery(this).val())}),t.params.default["letter-spacing"]&&(i["letter-spacing"]=jQuery.isNumeric(i["letter-spacing"])?i["letter-spacing"]+"px":i["letter-spacing"],this.container.on("change keyup paste",".letter-spacing input",function(){i["letter-spacing"]=jQuery.isNumeric(jQuery(this).val())?jQuery(this).val()+"px":jQuery(this).val(),t.saveValue("letter-spacing",i["letter-spacing"])})),t.params.default["word-spacing"]&&this.container.on("change keyup paste",".word-spacing input",function(){t.saveValue("word-spacing",jQuery(this).val())}),t.params.default["text-align"]&&this.container.on("change",".text-align input",function(){t.saveValue("text-align",jQuery(this).val())}),t.params.default["text-transform"]&&jQuery(t.selector+" .text-transform select").selectWoo().on("change",function(){t.saveValue("text-transform",jQuery(this).val())}),t.params.default["text-decoration"]&&jQuery(t.selector+" .text-decoration select").selectWoo().on("change",function(){t.saveValue("text-decoration",jQuery(this).val())}),t.params.default.color&&(e=this.container.find(".kirki-color-control")).wpColorPicker({change:function(){setTimeout(function(){t.saveValue("color",e.val())},100)}})},renderFontSelector:function(){var e,t,i=this,n=i.selector+" .font-family select",a=[],r=[],o=i.setting._value,s=i.getFonts();_.isUndefined(s.standard)||_.each(s.standard,function(e){a.push({id:e.family.replace(/"/g,"'"),text:e.label})}),_.isUndefined(s.google)||_.each(s.google,function(e){r.push({id:e.family,text:e.family})}),e=[{text:kirkiL10n.defaultCSSValues,children:[{id:"inherit",text:"inherit"}]},{text:kirkiL10n.standardFonts,children:a},{text:kirkiL10n.googleFonts,children:r}],t=jQuery(n).selectWoo({data:e}),o["font-family"]&&t.val(o["font-family"].replace(/'/g,'"')).trigger("change"),t.on("change",function(){i.saveValue("font-family",jQuery(this).val()),i.renderBackupFontSelector(),i.renderVariantSelector()})},renderBackupFontSelector:function(){var e,t=this,i=t.selector+" .font-backup select",n=[],a=t.setting._value,r=a["font-family"],o=t.getFonts();(_.isUndefined(a["font-backup"])||null===a["font-backup"])&&(a["font-backup"]=""),"inherit"!==r&&"google"===kirki.util.webfonts.getFontType(r)?(jQuery(t.selector+" .font-backup").show(),_.isUndefined(o.standard)||_.each(o.standard,function(e){n.push({id:e.family.replace(/"/g,"'"),text:e.label})}),e=jQuery(i).selectWoo({data:n}),void 0!==a["font-backup"]&&e.val(a["font-backup"].replace(/'/g,'"')).trigger("change"),e.on("change",function(){t.saveValue("font-backup",jQuery(this).val())})):jQuery(t.selector+" .font-backup").hide()},renderVariantSelector:function(){var e,t,i,n=this,a=n.setting._value,r=a["font-family"],o=n.selector+" .variant select",s=[],c=!1,l=["regular","italic","700","700italic"];if("google"===kirki.util.webfonts.getFontType(r)&&(l=kirki.util.webfonts.google.getVariants(r)),"inherit"===r&&(a.variant="inherit",l=[""],jQuery(n.selector+" .variant").hide()),1>=l.length)return jQuery(n.selector+" .variant").hide(),a.variant=l[0],n.saveValue("variant",a.variant),""===a.variant?(e="",i=""):(e=_.isString(a.variant)?a.variant.match(/\d/g):"400",e=_.isObject(e)?e.join(""):"400",i=-1!==a.variant.indexOf("italic")?"italic":"normal"),n.saveValue("font-weight",e),void n.saveValue("font-style",i);jQuery(n.selector+" .font-backup").show(),jQuery(n.selector+" .variant").show(),_.each(l,function(e){a.variant===e&&(c=!0),s.push({id:e,text:e})}),c||(a.variant="regular"),jQuery(o).hasClass("select2-hidden-accessible")&&(jQuery(o).selectWoo("destroy"),jQuery(o).empty()),(t=jQuery(o).selectWoo({data:s})).val(a.variant).trigger("change"),t.on("change",function(){n.saveValue("variant",jQuery(this).val()),e=_.isString(a.variant)?a.variant.match(/\d/g):"400",e=_.isObject(e)?e.join(""):"400",i=-1!==a.variant.indexOf("italic")?"italic":"normal",n.saveValue("font-weight",e),n.saveValue("font-style",i)})},getFonts:function(){var e=this,t=kirki.util.webfonts.google.getFonts(),i={},n="alpha",a=0,r={};return _.isEmpty(e.params.choices.fonts.google)?i=kirki.util.webfonts.google.getFonts(n,"",a):"alpha"===e.params.choices.fonts.google[0]||"popularity"===e.params.choices.fonts.google[0]||"trending"===e.params.choices.fonts.google[0]?(n=e.params.choices.fonts.google[0],isNaN(e.params.choices.fonts.google[1])||(a=parseInt(e.params.choices.fonts.google[1],10)),i=kirki.util.webfonts.google.getFonts(n,"",a)):_.each(e.params.choices.fonts.google,function(e){void 0===t[e]||_.isEmpty(t[e])||(i[e]=t[e])}),_.isEmpty(e.params.choices.fonts.standard)?_.each(kirki.util.webfonts.standard.fonts,function(e,t){r[t]={family:e.stack,label:e.label}}):_.each(e.params.choices.fonts.standard,function(e){void 0===kirki.util.webfonts.standard.fonts[e]||_.isEmpty(kirki.util.webfonts.standard.fonts[e])?r[e]={family:e,label:e}:(r[e]={},"undefined"===kirki.util.webfonts.standard.fonts[e].stack||_.isEmpty(kirki.util.webfonts.standard.fonts[e].stack)?r[e].family=i[e]:r[e].family=kirki.util.webfonts.standard.fonts[e].stack,"undefined"===kirki.util.webfonts.standard.fonts[e].label||_.isEmpty(kirki.util.webfonts.standard.fonts[e].label)?_.isEmpty(r[e])||(r[e].label=r[e]):r[e].label=kirki.util.webfonts.standard.fonts[e].label)}),{google:i,standard:r}},saveValue:function(e,t){var i=this.container.find(".typography-hidden-value"),n=this.setting._value;n[e]=t,jQuery(i).attr("value",JSON.stringify(n)).trigger("change"),this.setting.set(n)}});
|
1 |
+
if(_.isUndefined(window.kirkiSetSettingValue))var kirkiSetSettingValue={set:function(i,n){var e,a=this,t=wp.customize.settings.controls[i];if(_.isUndefined(t))return!0;switch(a.setValue(i,n),t.type){case"kirki-background":_.isUndefined(n["background-color"])||a.setColorPicker(a.findElement(i,".kirki-color-control"),n["background-color"]),a.findElement(i,".placeholder, .thumbnail").removeClass().addClass("placeholder").html("No file selected"),_.each(["background-repeat","background-position"],function(e){_.isUndefined(n[e])||a.setSelectWoo(a.findElement(i,"."+e+" select"),n[e])}),_.each(["background-size","background-attachment"],function(e){jQuery(a.findElement(i,"."+e+' input[value="'+n+'"]')).prop("checked",!0)}),e=JSON.stringify(n).replace(/'/g,"'"),jQuery(a.findElement(i,".background-hidden-value").attr("value",e)).trigger("change");break;case"kirki-code":jQuery(a.findElement(i,".CodeMirror"))[0].CodeMirror.setValue(n);break;case"checkbox":case"kirki-switch":case"kirki-toggle":n=1===n||"1"===n||!0===n,jQuery(a.findElement(i,"input")).prop("checked",n),wp.customize.instance(i).set(n);break;case"kirki-select":case"kirki-preset":case"kirki-fontawesome":a.setSelectWoo(a.findElement(i,"select"),n);break;case"kirki-slider":jQuery(a.findElement(i,"input")).prop("value",n),jQuery(a.findElement(i,".kirki_range_value .value")).html(n);break;case"kirki-generic":(_.isUndefined(t.choices)||_.isUndefined(t.choices.element))&&(t.choices.element="input"),jQuery(a.findElement(i,t.choices.element)).prop("value",n);break;case"kirki-color":a.setColorPicker(a.findElement(i,".kirki-color-control"),n);break;case"kirki-multicheck":a.findElement(i,"input").each(function(){jQuery(this).prop("checked",!1)}),_.each(n,function(e,t){jQuery(a.findElement(i,'input[value="'+n[t]+'"]')).prop("checked",!0)});break;case"kirki-multicolor":_.each(n,function(e,t){a.setColorPicker(a.findElement(i,".multicolor-index-"+t),e)});break;case"kirki-radio-buttonset":case"kirki-radio-image":case"kirki-radio":case"kirki-dashicons":case"kirki-color-palette":case"kirki-palette":jQuery(a.findElement(i,'input[value="'+n+'"]')).prop("checked",!0);break;case"kirki-typography":_.each(["font-family","variant"],function(e){_.isUndefined(n[e])||a.setSelectWoo(a.findElement(i,"."+e+" select"),n[e])}),_.each(["font-size","line-height","letter-spacing","word-spacing"],function(e){_.isUndefined(n[e])||jQuery(a.findElement(i,"."+e+" input")).prop("value",n[e])}),_.isUndefined(n.color)||a.setColorPicker(a.findElement(i,".kirki-color-control"),n.color),e=JSON.stringify(n).replace(/'/g,"'"),jQuery(a.findElement(i,".typography-hidden-value").attr("value",e)).trigger("change");break;case"kirki-dimensions":_.each(n,function(e,t){jQuery(a.findElement(i,"."+t+" input")).prop("value",e)});break;case"kirki-repeater":case"kirki-custom":break;default:jQuery(a.findElement(i,"input")).prop("value",n)}},setColorPicker:function(e,t){e.attr("data-default-color",t).data("default-color",t).wpColorPicker("color",t)},setSelectWoo:function(e,t){jQuery(e).selectWoo().val(t).trigger("change")},setTextarea:function(e,t){jQuery(e).prop("value",t)},findElement:function(e,t){return wp.customize.control(e).container.find(t)},setValue:function(e,t,i){i=_.isUndefined(i)?100:parseInt(i,10),wp.customize.instance(e).set({}),setTimeout(function(){wp.customize.instance(e).set(t)},i)}};(kirki={initialized:!1,initialize:function(){this.initialized||(setTimeout(function(){kirki.util.webfonts.standard.initialize(),kirki.util.webfonts.google.initialize()},150),this.initialized=!0)}}).initialize();var kirki=kirki||{};kirki=(kirki=jQuery.extend(kirki,{control:{"kirki-radio":{init:function(e){this.template(e),kirki.input.radio.init(e)},template:function(e){var t=wp.template("kirki-input-radio");e.container.html(t({label:e.params.label,description:e.params.description,"data-id":e.id,inputAttrs:e.params.inputAttrs,default:e.params.default,value:kirki.setting.get(e.id),choices:e.params.choices}))}},"kirki-color":{init:function(e){this.template(e),kirki.input.color.init(e)},template:function(e){var t=wp.template("kirki-input-color");e.container.html(t({label:e.params.label,description:e.params.description,"data-id":e.id,mode:e.params.mode,inputAttrs:e.params.inputAttrs,"data-palette":e.params.palette,"data-default-color":e.params.default,"data-alpha":e.params.choices.alpha,value:kirki.setting.get(e.id)}))}},"kirki-generic":{init:function(e){this.template(e),_.isUndefined(e.params)||_.isUndefined(e.params.choices)||_.isUndefined(e.params.choices.element)||"textarea"!==e.params.choices.element?kirki.input.genericInput.init(e):kirki.input.textarea.init(e)},template:function(e){var t,i={label:e.params.label,description:e.params.description,"data-id":e.id,inputAttrs:e.params.inputAttrs,choices:e.params.choices,value:kirki.setting.get(e.id)};if(!_.isUndefined(e.params)&&!_.isUndefined(e.params.choices)&&!_.isUndefined(e.params.choices.element)&&"textarea"===e.params.choices.element)return t=wp.template("kirki-input-textarea"),void e.container.html(t(i));t=wp.template("kirki-input-generic"),e.container.html(t(i))}},"kirki-number":{init:function(e){this.template(e),kirki.input.number.init(e)},template:function(e){var t=wp.template("kirki-input-number");e.container.html(t(args={label:e.params.label,description:e.params.description,"data-id":e.id,inputAttrs:e.params.inputAttrs,choices:e.params.choices,value:kirki.setting.get(e.id)}))}},"kirki-select":{init:function(e){this.template(e),kirki.input.select.init(e)},template:function(e){var t=wp.template("kirki-input-select");e.container.html(t({label:e.params.label,description:e.params.description,"data-id":e.id,inputAttrs:e.params.inputAttrs,choices:e.params.choices,value:kirki.setting.get(e.id),multiple:e.params.multiple||1,placeholder:e.params.placeholder}))}}}}))||{},kirki=(kirki=jQuery.extend(kirki,{input:{radio:{init:function(e){jQuery('input[data-id="'+e.id+'"]').on("change keyup paste click",function(){kirki.setting.set(e.id,jQuery(this).val())})}},color:{init:function(e){var t,i=jQuery('.kirki-color-control[data-id="'+e.id+'"]');e.choices=e.choices||{},_.isEmpty(e.choices)&&e.params.choices&&(e.choices=e.params.choices),_.isEmpty(e.choices)||i.wpColorPicker(e.choices),setTimeout(function(){(t=jQuery('.kirki-input-container[data-id="'+e.id+'"] .wp-picker-clear')).length&&t.click(function(){kirki.setting.set(e.id,"")})},200),i.wpColorPicker({change:function(){setTimeout(function(){kirki.setting.set(e.id,i.val())},20)}})}},genericInput:{init:function(e){jQuery('input[data-id="'+e.id+'"]').on("change keyup paste click",function(){kirki.setting.set(e.id,jQuery(this).val())})}},textarea:{init:function(e){jQuery('textarea[data-id="'+e.id+'"]').on("change keyup paste click",function(){kirki.setting.set(e.id,jQuery(this).val())})}},select:{init:function(e){var t,i=jQuery('select[data-id="'+e.id+'"]'),n=parseInt(i.data("multiple"),10),a={escapeMarkup:function(e){return e}};e.params.placeholder&&(a.placeholder=e.params.placeholder,a.allowClear=!0),1<n&&(a.maximumSelectionLength=n),jQuery(i).selectWoo(a).on("change",function(){t=null===(t=jQuery(this).val())&&1<n?[]:t,kirki.setting.set(e.id,t)})}},number:{init:function(i){var e,t,n=jQuery('input[data-id="'+i.id+'"]'),a=i.setting._value;i.params.choices=_.defaults(i.params.choices,{min:0,max:100,step:1}),(isNaN(a)||""===a)&&(a=i.params.choices.min<0&&0<i.params.choices.max?0:i.params.choices.min),a=parseFloat(a),i.params.choices.step="any"===i.params.choices.step?.001:i.params.choices.step,i.params.choices.min=parseFloat(i.params.choices.min),i.params.choices.max=parseFloat(i.params.choices.max),i.params.choices.step=parseFloat(i.params.choices.step),e=jQuery('.kirki-input-container[data-id="'+i.id+'"] .plus'),t=jQuery('.kirki-input-container[data-id="'+i.id+'"] .minus'),e.click(function(){var e,t=parseFloat(n.val());e=t>=i.params.choices.max?t:t+i.params.choices.step,n.val(e),n.trigger("change")}),t.click(function(){var e,t=parseFloat(n.val());e=t<=i.params.choices.min?t:t-i.params.choices.step,n.val(e),n.trigger("change")}),n.on("change keyup paste click",function(){kirki.setting.set(i.id,jQuery(this).val())})}},image:{getTemplate:function(e){var t,i="";return e=_.defaults(e,{label:"",description:"",inputAttrs:"","data-id":"",choices:{},value:""}),_.isUndefined(e.choices)||_.isUndefined(e.choices.save_as)||e.choices.save_as,t=e.value,_.isObject(e.value)&&!_.isUndefined(e.value.url)&&(t=e.value.url),i+="<label>",e.label&&(i+='<span class="customize-control-title">'+e.label+"</span>"),e.description&&(i+='<span class="description customize-control-description">'+e.description+"</span>"),i+="</label>",i+='<div class="image-wrapper attachment-media-view image-upload">',e.value.url||""!==t?i+='<div class="thumbnail thumbnail-image"><img src="'+t+'" alt="" /></div>':i+='<div class="placeholder">'+kirkiL10n.noFileSelected+"</div>",i+='<div class="actions">',i+='<button class="button image-upload-remove-button'+(""===t?" hidden":"")+'">'+kirkiL10n.remove+"</button>",e.default&&""!==e.default&&(i+='<button type="button" class="button image-default-button"',(e.default===e.value||!_.isUndefined(e.value.url)&&e.default===e.value.url)&&(i+=' style="display:none;"'),i+=">"+kirkiL10n.default+"</button>"),i+='<button type="button" class="button image-upload-button">'+kirkiL10n.selectFile+"</button>",i+="</div></div>",'<div class="kirki-input-container" data-id="'+e.id+'">'+i+"</div>"},init:function(e){}}}}))||{},kirki=(kirki=jQuery.extend(kirki,{setting:{get:function(e){var t=e.split("["),i="",n=0,a="";return _.each(t,function(e,t){e=e.replace("]",""),0===t?i=e:i+="["+e+"]",_.isUndefined(wp.customize.instance(i))||(a=wp.customize.instance(i).get(),n=t),n<t&&_.isObject(a)&&!_.isUndefined(a[e])&&(a=a[e])}),a},set:function(e,t,i){var n,a,r,o,s,c="",l="",u={};n=e,_.isObject(e)&&(n=jQuery(e).attr("data-id")?e.attr("data-id"):e.parents("[data-id]").attr("data-id")),void 0===wp.customize.control(n)?(a=n.split("["),_.each(a,function(e,t){e=e.replace("]",""),c=0===t?e:"["+e+"]",_.isUndefined(wp.customize.instance(c))||(l=c,r=wp.customize.instance(l).get())}),""!==(o=n.replace(l,""))?(_.isObject(r)||(r={}),"["===o.charAt(0)&&(o=o.replace("[","")),s=o.split("["),_.each(s,function(e,t){s[t]=e.replace("]","")}),i&&s.push(i),u='{"'+s.join('":{"')+'":"'+t+'"'+"}".repeat(s.length),u=JSON.parse(u),jQuery.extend(!0,r,u),t=r):i&&((r=_.isObject(r)?r:{})[i]=t,t=r),wp.customize.control(l).setting.set(t)):wp.customize.control(n).setting.set(t)}}}))||{};kirki=jQuery.extend(kirki,{util:{webfonts:{google:{fonts:{},initialize:function(){this.setFonts()},setFonts:function(){var t=this;_.isEmpty(t.fonts)&&jQuery.post(ajaxurl,{action:"kirki_fonts_google_all_get"},function(e){t.fonts=JSON.parse(e)})},getFont:function(e){var t=this.getFonts();return void 0!==t[e]&&t[e]},getFonts:function(e,i,t){var n=this,a={},r={},o={};return e="alpha"!==(e=e||"alpha")&&"popularity"!==e&&"trending"!==e?"alpha":e,t=t||0,t=parseInt(t,10),"alpha"===e?a=jQuery.extend({},n.fonts.items):_.each(n.fonts.order[e],function(e){a[e]=n.fonts.items[e]}),""!==i&&i?_.each(a,function(e,t){i===e.category&&(r[t]=e)}):r=a,0<t?(_.each(_.first(_.keys(r),t),function(e){o[e]=r[e]}),o):r},getVariants:function(e){var t=this.getFont(e);return!!t&&(!_.isUndefined(t.variants)&&t.variants)}},standard:{fonts:{},initialize:function(){this.setFonts()},setFonts:function(){var t=this;_.isEmpty(t.fonts)&&jQuery.post(ajaxurl,{action:"kirki_fonts_standard_all_get"},function(e){t.fonts=JSON.parse(e)})},getVariants:function(){return["regular","italic","700","700italic"]}},getFontType:function(e){return void 0!==this.standard.fonts[e]||void 0!==this.standard.fonts.stack&&void 0!==this.standard.fonts.stack[e]?"standard":void 0!==this.google.fonts.items[e]&&"google"}},validate:{cssValue:function(e){var t,i;return 0===e||"0"===e||"auto"===e||"inherit"===e||"initial"===e||(0<=e.indexOf("calc(")&&0<=e.indexOf(")")||(t=parseFloat(e),i=e.replace(t,""),e?!isNaN(t)&&-1<jQuery.inArray(i,["fr","rem","em","ex","%","px","cm","mm","in","pt","pc","ch","vh","vw","vmin","vmax"]):void 0))}}}}),function(){"use strict";wp.customize.kirkiDynamicControl=wp.customize.Control.extend({initialize:function(e,t){var i=t||{};i.params=i.params||{},i.params.type||(i.params.type="kirki-generic"),i.params.content||(i.params.content=jQuery("<li></li>"),i.params.content.attr("id","customize-control-"+e.replace(/]/g,"").replace(/\[/g,"-")),i.params.content.attr("class","customize-control customize-control-"+i.params.type)),this.propertyElements=[],wp.customize.Control.prototype.initialize.call(this,e,i)},_setUpSettingRootLinks:function(){var n=this;n.container.find("[data-customize-setting-link]").each(function(){var i=jQuery(this);wp.customize(i.data("customizeSettingLink"),function(e){var t=new wp.customize.Element(i);n.elements.push(t),t.sync(e),t.set(e())})})},_setUpSettingPropertyLinks:function(){var n=this;n.setting&&n.container.find("[data-customize-setting-property-link]").each(function(){var t,e=jQuery(this),i=e.data("customizeSettingPropertyLink");t=new wp.customize.Element(e),n.propertyElements.push(t),t.set(n.setting()[i]),t.bind(function(e){var t=n.setting();e!==t[i]&&((t=_.clone(t))[i]=e,n.setting.set(t))}),n.setting.bind(function(e){e[i]!==t.get()&&t.set(e[i])})})},ready:function(){var e=this;e._setUpSettingRootLinks(),e._setUpSettingPropertyLinks(),wp.customize.Control.prototype.ready.call(e),e.deferred.embedded.done(function(){e.initKirkiControl(e)})},embed:function(){var t=this,e=t.section();e&&wp.customize.section(e,function(e){"kirki-expanded"===e.params.type||e.expanded()||wp.customize.settings.autofocus.control===t.id?t.actuallyEmbed():e.expanded.bind(function(e){e&&t.actuallyEmbed()})})},actuallyEmbed:function(){"resolved"!==this.deferred.embedded.state()&&(this.renderContent(),this.deferred.embedded.resolve())},focus:function(e){this.actuallyEmbed(),wp.customize.Control.prototype.focus.call(this,e)},initKirkiControl:function(e){void 0===kirki.control[e.params.type]?this.container.on("change keyup paste click","input",function(){e.setting.set(jQuery(this).val())}):kirki.control[e.params.type].init(e)}})}(),_.each(kirki.control,function(e,t){wp.customize.controlConstructor[t]=wp.customize.kirkiDynamicControl.extend({})}),wp.customize.controlConstructor["kirki-background"]=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){var o=this,e=o.setting._value,t=o.container.find(".kirki-color-control");(_.isUndefined(e["background-image"])||""===e["background-image"])&&(o.container.find(".background-wrapper > .background-repeat").hide(),o.container.find(".background-wrapper > .background-position").hide(),o.container.find(".background-wrapper > .background-size").hide(),o.container.find(".background-wrapper > .background-attachment").hide()),t.wpColorPicker({change:function(){setTimeout(function(){o.saveValue("background-color",t.val())},100)}}),o.container.on("change",".background-repeat select",function(){o.saveValue("background-repeat",jQuery(this).val())}),o.container.on("change click",".background-size input",function(){o.saveValue("background-size",jQuery(this).val())}),o.container.on("change",".background-position select",function(){o.saveValue("background-position",jQuery(this).val())}),o.container.on("change click",".background-attachment input",function(){o.saveValue("background-attachment",jQuery(this).val())}),o.container.on("click",".background-image-upload-button",function(e){var r=wp.media({multiple:!1}).open().on("select",function(){var e,t,i,n=r.state().get("selection").first(),a=n.toJSON().sizes.full.url;_.isUndefined(n.toJSON().sizes.medium)?_.isUndefined(n.toJSON().sizes.thumbnail)||(a=n.toJSON().sizes.thumbnail.url):a=n.toJSON().sizes.medium.url,e=n.toJSON().sizes.full.url,n.toJSON().id,n.toJSON().width,n.toJSON().height,""!==e&&o.container.find(".background-wrapper > .background-repeat, .background-wrapper > .background-position, .background-wrapper > .background-size, .background-wrapper > .background-attachment").show(),o.saveValue("background-image",e),t=o.container.find(".placeholder, .thumbnail"),i=o.container.find(".background-image-upload-remove-button"),t.length&&t.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+a+'" alt="" />'),i.length&&i.show()});e.preventDefault()}),o.container.on("click",".background-image-upload-remove-button",function(e){var t,i;e.preventDefault(),o.saveValue("background-image",""),t=o.container.find(".placeholder, .thumbnail"),i=o.container.find(".background-image-upload-remove-button"),o.container.find(".background-wrapper > .background-repeat").hide(),o.container.find(".background-wrapper > .background-position").hide(),o.container.find(".background-wrapper > .background-size").hide(),o.container.find(".background-wrapper > .background-attachment").hide(),t.length&&t.removeClass().addClass("placeholder").html("No file selected"),i.length&&i.hide()})},saveValue:function(e,t){var i=jQuery("#customize-control-"+this.id.replace("[","-").replace("]","")+" .background-hidden-value"),n=this.setting._value;n[e]=t,jQuery(i).attr("value",JSON.stringify(n)).trigger("change"),this.setting.set(n)}}),wp.customize.controlConstructor["kirki-color-palette"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-dashicons"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-date"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e=this,t=e.selector+" input.datepicker";jQuery(t).datepicker({dateFormat:"yy-mm-dd"}),e.container.find(".kirki-controls-loading-spinner").hide(),this.container.on("change keyup paste","input.datepicker",function(){e.setting.set(jQuery(this).val())})}}),wp.customize.controlConstructor["kirki-dimension"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t=this;t.kirkiNotifications(),this.container.on("change keyup paste","input",function(){e=jQuery(this).val(),t.setting.set(e)})},kirkiNotifications:function(){wp.customize(this.id,function(i){i.bind(function(e){var t="long_title";!1===kirki.util.validate.cssValue(e)?i.notifications.add(t,new wp.customize.Notification(t,{type:"warning",message:dimensionkirkiL10n["invalid-value"]})):i.notifications.remove(t)})})}}),wp.customize.controlConstructor["kirki-dimensions"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t=this.params.choices.controls,i={},n=[];for(_.each(t,function(e,t){!0===e&&n.push(t)}),e=0;e<n.length;e++)i[n[e]]=this.setting._value[n[e]],this.updateDimensionsValue(n[e],i)},updateDimensionsValue:function(e,t){var i=this;i.container.on("change keyup paste","."+e+" input",function(){t[e]=jQuery(this).val(),i.kirkiNotifications(),i.saveValue(t)})},saveValue:function(e){var i={};_.each(e,function(e,t){i[t]=e}),this.setting.set(i)},kirkiNotifications:function(){wp.customize(this.id,function(a){a.bind(function(e){var t,i="long_title",n={};if(a.notifications.remove(i),_.each(e,function(e,t){!1===kirki.util.validate.cssValue(e)?n[t]=e:delete n[t]}),!_.isEmpty(n))return t=dimensionskirkiL10n["invalid-value"]+" ("+_.values(n).toString()+") ",void a.notifications.add(i,new wp.customize.Notification(i,{type:"warning",message:t}));a.notifications.remove(i)})})}}),wp.customize.controlConstructor["kirki-editor"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var i,n=this,a=n.container.find("textarea"),e="kirki-editor-"+n.id.replace("[","").replace("]","");wp.editor.initialize(e,{tinymce:{wpautop:!0},quicktags:!0,mediaButtons:!0}),(i=tinyMCE.get(e))&&i.onChange.add(function(e){var t;e.save(),t=i.getContent(),a.val(t).trigger("change"),wp.customize.instance(n.id).set(t)})}}),wp.customize.controlConstructor["kirki-fontawesome"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e,t,i=this,n=this.container.find("select"),a=jQuery.parseJSON(fontAwesomeJSON),r={data:[],escapeMarkup:function(e){return e},templateResult:function(e){return'<i class="fa fa-lg fa-'+e.id+'" aria-hidden="true"></i> '+e.text},templateSelection:function(e){return'<i class="fa fa-lg fa-'+e.id+'" aria-hidden="true"></i> '+e.text}};_.each(a.icons,function(e){r.data.push({id:e.id,text:e.name})}),(t=jQuery(n).selectWoo(r)).on("change",function(){e=jQuery(this).val(),i.setting.set(e)}),t.val(i.setting._value).trigger("change")}}),wp.customize.controlConstructor["kirki-image"]=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){var a=this,t=a.getValue(),n=_.isUndefined(a.params.choices)||_.isUndefined(a.params.choices.save_as)?"url":a.params.choices.save_as,r=a.container.find(".placeholder, .thumbnail"),e="array"===n?t.url:t,o=a.container.find(".image-upload-remove-button"),s=a.container.find(".image-default-button");a.container.find(".kirki-controls-loading-spinner").hide(),"id"!==n&&"ID"!==n||""===t||wp.media.attachment(t).fetch().then(function(){setTimeout(function(){var e=wp.media.attachment(t).get("url");r.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+e+'" alt="" />')},700)}),("url"===n&&""!==t||"array"===n&&!_.isUndefined(t.url)&&""!==t.url)&&a.container.find("image-default-button").hide(),("url"===n&&""===t||"array"===n&&(_.isUndefined(t.url)||""===t.url))&&o.hide(),t===a.params.default&&a.container.find("image-default-button").hide(),""!==e&&r.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+e+'" alt="" />'),a.container.on("click",".image-upload-button",function(e){var i=wp.media({multiple:!1}).open().on("select",function(){var e=i.state().get("selection").first(),t=e.toJSON().sizes.full.url;_.isUndefined(e.toJSON().sizes.medium)?_.isUndefined(e.toJSON().sizes.thumbnail)||(t=e.toJSON().sizes.thumbnail.url):t=e.toJSON().sizes.medium.url,"array"===n?(a.saveValue("id",e.toJSON().id),a.saveValue("url",e.toJSON().sizes.full.url),a.saveValue("width",e.toJSON().width),a.saveValue("height",e.toJSON().height)):"id"===n?a.saveValue("id",e.toJSON().id):a.saveValue("url",e.toJSON().sizes.full.url),r.length&&r.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+t+'" alt="" />'),o.length&&(o.show(),s.hide())});e.preventDefault()}),a.container.on("click",".image-upload-remove-button",function(e){var t,i,n;e.preventDefault(),a.saveValue("id",""),a.saveValue("url",""),a.saveValue("width",""),a.saveValue("height",""),t=a.container.find(".placeholder, .thumbnail"),i=a.container.find(".image-upload-remove-button"),n=a.container.find(".image-default-button"),t.length&&t.removeClass().addClass("placeholder").html("No file selected"),i.length&&(i.hide(),jQuery(n).hasClass("button")&&n.show())}),a.container.on("click",".image-default-button",function(e){var t,i,n;e.preventDefault(),a.saveValue("url",a.params.default),t=a.container.find(".placeholder, .thumbnail"),i=a.container.find(".image-upload-remove-button"),n=a.container.find(".image-default-button"),t.length&&t.removeClass().addClass("thumbnail thumbnail-image").html('<img src="'+a.params.default+'" alt="" />'),i.length&&(i.show(),n.hide())})},getValue:function(){var e=this.setting._value;return"array"===(_.isUndefined(this.params.choices)||_.isUndefined(this.params.choices.save_as)?"url":this.params.choices.save_as)&&_.isString(e)&&(e={url:e}),e},saveValue:function(e,t){var i=this,n=i.setting._value;if("array"===(_.isUndefined(i.params.choices)||_.isUndefined(i.params.choices.save_as)?"url":i.params.choices.save_as))return _.isString(n)&&(n={}),n[e]=t,i.setting.set(n),void i.container.find("button").trigger("change");i.setting.set(t),i.container.find("button").trigger("change")}}),wp.customize.controlConstructor["kirki-multicheck"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var n=this;n.container.on("change","input",function(){var t=[],i=0;jQuery.each(n.params.choices,function(e){n.container.find('input[value="'+e+'"]').is(":checked")?(n.container.find('input[value="'+e+'"]').parent().addClass("checked"),t[i]=e,i++):n.container.find('input[value="'+e+'"]').parent().removeClass("checked")}),n.setting.set(t)})}}),wp.customize.controlConstructor["kirki-multicolor"]=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){"use strict";var r=this.params.choices,e=Object.keys(r),t=(this.params.value,0);function i(e,t,i){var n=e.container.find(".multicolor-index-"+i),a={change:function(){setTimeout(function(){e.saveValue(i,n.val()),e.container.find(".multicolor-index-"+i).trigger("change")},100)}};_.isObject(r.irisArgs)&&_.each(r.irisArgs,function(e,t){a[t]=e}),n.wpColorPicker(a)}for(;t<Object.keys(r).length;)i(this,0,e[t]),t++},saveValue:function(e,t){var i=this.container.find(".multicolor-hidden-value"),n=this.setting._value;n[e]=t,jQuery(i).attr("value",JSON.stringify(n)).trigger("change"),this.setting.set(n)}}),wp.customize.controlConstructor["kirki-palette"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-preset"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var i,e=this;this.container.on("change","select",function(){i=jQuery(this).val(),e.setting.set(i),jQuery.each(e.params.choices,function(e,t){i===e&&jQuery.each(t.settings,function(e,t){kirkiSetSettingValue.set(e,t)})}),wp.customize.previewer.refresh()})}}),wp.customize.controlConstructor["kirki-radio-buttonset"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-radio-image"]=wp.customize.kirkiDynamicControl.extend({});var RepeaterRow=function(e,t,i,n){"use strict";var a=this;this.rowIndex=e,this.container=t,this.label=i,this.header=this.container.find(".repeater-row-header"),this.header.on("click",function(){a.toggleMinimize()}),this.container.on("click",".repeater-row-remove",function(){a.remove()}),this.header.on("mousedown",function(){a.container.trigger("row:start-dragging")}),this.container.on("keyup change","input, select, textarea",function(e){a.container.trigger("row:update",[a.rowIndex,jQuery(e.target).data("field"),e.target])}),this.setRowIndex=function(e){this.rowIndex=e,this.container.attr("data-row",e),this.container.data("row",e),this.updateLabel()},this.toggleMinimize=function(){this.container.toggleClass("minimized"),this.header.find(".dashicons").toggleClass("dashicons-arrow-up").toggleClass("dashicons-arrow-down")},this.remove=function(){this.container.slideUp(300,function(){jQuery(this).detach()}),this.container.trigger("row:remove",[this.rowIndex])},this.updateLabel=function(){var e,t,i;if("field"===this.label.type&&(e=this.container.find('.repeater-field [data-field="'+this.label.field+'"]'),_.isFunction(e.val)&&""!==(t=e.val())))return _.isUndefined(n.params.fields[this.label.field])||_.isUndefined(n.params.fields[this.label.field].type)||("select"===n.params.fields[this.label.field].type?_.isUndefined(n.params.fields[this.label.field].choices)||_.isUndefined(n.params.fields[this.label.field].choices[e.val()])||(t=n.params.fields[this.label.field].choices[e.val()]):"radio"!==n.params.fields[this.label.field].type&&"radio-image"!==n.params.fields[this.label.field].type||(i=n.selector+' [data-row="'+this.rowIndex+'"] .repeater-field [data-field="'+this.label.field+'"]:checked',t=jQuery(i).val())),void this.header.find(".repeater-row-label").text(t);this.header.find(".repeater-row-label").text(this.label.value+" "+(this.rowIndex+1))},this.updateLabel()};wp.customize.controlConstructor.repeater=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){"use strict";var t,i,n=this,e=this.params.value;n.container.find(".kirki-controls-loading-spinner").hide(),this.settingField=this.container.find("[data-customize-setting-link]").first(),this.setValue([],!1),this.repeaterFieldsContainer=this.container.find(".repeater-fields").first(),this.currentIndex=0,this.rows=[],t=!1,_.isUndefined(this.params.choices.limit)||(t=!(this.params.choices.limit<=0)&&parseInt(this.params.choices.limit,10)),this.container.on("click","button.repeater-add",function(e){e.preventDefault(),!t||n.currentIndex<t?((i=n.addRow()).toggleMinimize(),n.initColorPicker(),n.initSelect(i)):jQuery(n.selector+" .limit").addClass("highlight")}),this.container.on("click",".repeater-row-remove",function(){n.currentIndex--,(!t||n.currentIndex<t)&&jQuery(n.selector+" .limit").removeClass("highlight")}),this.container.on("click keypress",".repeater-field-image .upload-button,.repeater-field-cropped_image .upload-button,.repeater-field-upload .upload-button",function(e){e.preventDefault(),n.$thisButton=jQuery(this),n.openFrame(e)}),this.container.on("click keypress",".repeater-field-image .remove-button,.repeater-field-cropped_image .remove-button",function(e){e.preventDefault(),n.$thisButton=jQuery(this),n.removeImage(e)}),this.container.on("click keypress",".repeater-field-upload .remove-button",function(e){e.preventDefault(),n.$thisButton=jQuery(this),n.removeFile(e)}),this.repeaterTemplate=_.memoize(function(){var t={evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"};return function(e){return _.template(n.container.find(".customize-control-repeater-content").first().html(),null,t)(e)}}),e.length&&_.each(e,function(e){i=n.addRow(e),n.initColorPicker(),n.initSelect(i,e)}),this.setValue(e,!0,!0),this.repeaterFieldsContainer.sortable({handle:".repeater-row-header",update:function(){n.sort()}})},openFrame:function(e){"use strict";wp.customize.utils.isKeydownButNotEnterEvent(e)||(this.$thisButton.closest(".repeater-field").hasClass("repeater-field-cropped_image")?this.initCropperFrame():this.initFrame(),this.frame.open())},initFrame:function(){"use strict";var e=this.getMimeType();this.frame=wp.media({states:[new wp.media.controller.Library({library:wp.media.query({type:e}),multiple:!1,date:!1})]}),this.frame.on("select",this.onSelect,this)},initCropperFrame:function(){"use strict";var t=this.$thisButton.siblings("input.hidden-field").attr("data-field"),e=this.getMimeType();_.isString(t)&&""!==t&&_.isObject(this.params.fields[t])&&"cropped_image"===this.params.fields[t].type&&["width","height","flex_width","flex_height"].forEach(function(e){_.isUndefined(this.params.fields[t][e])||(this.params[e]=this.params.fields[t][e])}.bind(this)),this.frame=wp.media({button:{text:"Select and Crop",close:!1},states:[new wp.media.controller.Library({library:wp.media.query({type:e}),multiple:!1,date:!1,suggestedWidth:this.params.width,suggestedHeight:this.params.height}),new wp.media.controller.CustomizeImageCropper({imgSelectOptions:this.calculateImageSelectOptions,control:this})]}),this.frame.on("select",this.onSelectForCrop,this),this.frame.on("cropped",this.onCropped,this),this.frame.on("skippedcrop",this.onSkippedCrop,this)},onSelect:function(){"use strict";var e=this.frame.state().get("selection").first().toJSON();this.$thisButton.closest(".repeater-field").hasClass("repeater-field-upload")?this.setFileInRepeaterField(e):this.setImageInRepeaterField(e)},onSelectForCrop:function(){"use strict";var e=this.frame.state().get("selection").first().toJSON();this.params.width!==e.width||this.params.height!==e.height||this.params.flex_width||this.params.flex_height?this.frame.setState("cropper"):this.setImageInRepeaterField(e)},onCropped:function(e){"use strict";this.setImageInRepeaterField(e)},calculateImageSelectOptions:function(e,t){"use strict";var i,n,a,r=t.get("control"),o=!!parseInt(r.params.flex_width,10),s=!!parseInt(r.params.flex_height,10),c=e.get("width"),l=e.get("height"),u=parseInt(r.params.width,10),d=parseInt(r.params.height,10),p=u/d,h=c,f=l;return t.set("canSkipCrop",!r.mustBeCropped(o,s,u,d,c,l)),p<h/f?u=(d=f)*p:d=(u=h)/p,a={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:c,imageHeight:l,x1:i=(h-u)/2,y1:n=(f-d)/2,x2:u+i,y2:d+n},!1===s&&!1===o&&(a.aspectRatio=u+":"+d),!1===s&&(a.maxHeight=d),!1===o&&(a.maxWidth=u),a},mustBeCropped:function(e,t,i,n,a,r){"use strict";return!(!0===e&&!0===t||!0===e&&n===r||!0===t&&i===a||i===a&&n===r||a<=i)},onSkippedCrop:function(){"use strict";var e=this.frame.state().get("selection").first().toJSON();this.setImageInRepeaterField(e)},setImageInRepeaterField:function(e){"use strict";var t=this.$thisButton.closest(".repeater-field-image,.repeater-field-cropped_image");t.find(".kirki-image-attachment").html('<img src="'+e.url+'">').hide().slideDown("slow"),t.find(".hidden-field").val(e.id),this.$thisButton.text(this.$thisButton.data("alt-label")),t.find(".remove-button").show(),t.find("input, textarea, select").trigger("change"),this.frame.close()},setFileInRepeaterField:function(e){"use strict";var t=this.$thisButton.closest(".repeater-field-upload");t.find(".kirki-file-attachment").html('<span class="file"><span class="dashicons dashicons-media-default"></span> '+e.filename+"</span>").hide().slideDown("slow"),t.find(".hidden-field").val(e.id),this.$thisButton.text(this.$thisButton.data("alt-label")),t.find(".upload-button").show(),t.find(".remove-button").show(),t.find("input, textarea, select").trigger("change"),this.frame.close()},getMimeType:function(){"use strict";var e=this.$thisButton.siblings("input.hidden-field").attr("data-field");return _.isString(e)&&""!==e&&_.isObject(this.params.fields[e])&&"upload"===this.params.fields[e].type&&!_.isUndefined(this.params.fields[e].mime_type)?this.params.fields[e].mime_type:"image"},removeImage:function(e){"use strict";var t,i;wp.customize.utils.isKeydownButNotEnterEvent(e)||(i=(t=this.$thisButton.closest(".repeater-field-image,.repeater-field-cropped_image,.repeater-field-upload")).find(".upload-button"),t.find(".kirki-image-attachment").slideUp("fast",function(){jQuery(this).show().html(jQuery(this).data("placeholder"))}),t.find(".hidden-field").val(""),i.text(i.data("label")),this.$thisButton.hide(),t.find("input, textarea, select").trigger("change"))},removeFile:function(e){"use strict";var t,i;wp.customize.utils.isKeydownButNotEnterEvent(e)||(i=(t=this.$thisButton.closest(".repeater-field-upload")).find(".upload-button"),t.find(".kirki-file-attachment").slideUp("fast",function(){jQuery(this).show().html(jQuery(this).data("placeholder"))}),t.find(".hidden-field").val(""),i.text(i.data("label")),this.$thisButton.hide(),t.find("input, textarea, select").trigger("change"))},getValue:function(){"use strict";return JSON.parse(decodeURI(this.setting.get()))},setValue:function(e,t,i){"use strict";var a=e,r=[];i&&(jQuery.each(this.params.fields,function(e,t){"image"!==t.type&&"cropped_image"!==t.type&&"upload"!==t.type||r.push(e)}),jQuery.each(e,function(i,n){jQuery.each(r,function(e,t){_.isUndefined(n[t])||_.isUndefined(n[t].id)||(a[i][t]=n[t].id)})})),this.setting.set(encodeURI(JSON.stringify(a))),t&&this.settingField.trigger("change")},addRow:function(e){"use strict";var t,a,i,r=this,n=r.repeaterTemplate(),o=this.getValue(),s={};if(n){if(t=jQuery.extend(!0,{},r.params.fields),e)for(i in e)e.hasOwnProperty(i)&&t.hasOwnProperty(i)&&(t[i].default=e[i]);for(i in t.index=this.currentIndex,n=n(t),(a=new RepeaterRow(r.currentIndex,jQuery(n).appendTo(r.repeaterFieldsContainer),r.params.row_label,r)).container.on("row:remove",function(e,t){r.deleteRow(t)}),a.container.on("row:update",function(e,t,i,n){r.updateField.call(r,e,t,i,n),a.updateLabel()}),this.rows[this.currentIndex]=a,t)t.hasOwnProperty(i)&&(s[i]=t[i].default);return o[this.currentIndex]=s,this.setValue(o,!0),this.currentIndex++,a}},sort:function(){"use strict";var i=this,e=this.repeaterFieldsContainer.find(".repeater-row"),n=[],a=i.getValue(),r=[],o=[];e.each(function(e,t){n.push(jQuery(t).data("row"))}),jQuery.each(n,function(e,t){r[e]=i.rows[t],r[e].setRowIndex(e),o[e]=a[t]}),i.rows=r,i.setValue(o)},deleteRow:function(e){"use strict";var t,i=this.getValue();for(t in i[e]&&this.rows[e]&&(delete i[e],delete this.rows[e],this.setValue(i,!0)),1,this.rows)this.rows.hasOwnProperty(t)&&this.rows[t]&&(this.rows[t].updateLabel(),0)},updateField:function(e,t,i,n){"use strict";var a,r,o;this.rows[t]&&this.params.fields[i]&&(a=this.params.fields[i].type,r=this.rows[t],o=this.getValue(),n=jQuery(n),_.isUndefined(o[r.rowIndex][i])||(o[r.rowIndex][i]="checkbox"===a?n.is(":checked"):n.val(),this.setValue(o,!0)))},initColorPicker:function(){"use strict";var r=this,e=r.container.find(".color-picker-hex"),t={},i=e.data("field");_.isUndefined(i)||_.isUndefined(r.params.fields[i])||_.isUndefined(r.params.fields[i].palettes)||!_.isObject(r.params.fields[i].palettes)||(t.palettes=r.params.fields[i].palettes),t.change=function(e,t){var i=jQuery(e.target),n=i.closest(".repeater-row").data("row"),a=r.getValue();a[n][i.data("field")]=t.color.toString(),r.setValue(a,!0)},0!==e.length&&e.wpColorPicker(t)},initSelect:function(e,t){"use strict";var i,n,a=this,r=e.container.find(".repeater-field select"),o={};0!==r.length&&(i=r.data("field"),"undefed"!==(n=jQuery(r).data("multiple"))&&jQuery.isNumeric(n)&&1<(n=parseInt(n,10))&&(o.maximumSelectionLength=n),(t=t||{})[i]=t[i]||"",jQuery(r).selectWoo(o).val(t[i]),this.container.on("change",".repeater-field select",function(e){var t=jQuery(e.target),i=t.closest(".repeater-row").data("row"),n=a.getValue();n[i][t.data("field")]=jQuery(this).val(),a.setValue(n)}))}}),wp.customize.controlConstructor["kirki-slider"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e=this,t="postMessage"===e.setting.transport?"mousemove change":"change",i=e.container.find('input[type="range"]'),n=e.container.find('input[type="text"]'),a=e.setting._value;n.attr("value",a),i.on("mousemove change",function(){n.attr("value",i.val())}),i.on(t,function(){e.setting.set(i.val())}),n.on("input paste change",function(){i.attr("value",n.val()),e.setting.set(n.val())}),e.container.find(".slider-reset").on("click",function(){n.attr("value",e.params.default),i.attr("value",e.params.default),e.setting.set(n.val())})}}),wp.customize.controlConstructor["kirki-sortable"]=wp.customize.Control.extend({ready:function(){"use strict";!_.isUndefined(window.kirkiControlLoader)&&_.isFunction(kirkiControlLoader)?kirkiControlLoader(this):this.initKirkiControl()},initKirkiControl:function(){"use strict";var e=this;e.container.find(".kirki-controls-loading-spinner").hide(),e.sortableContainer=e.container.find("ul.sortable").first(),e.sortableContainer.sortable({stop:function(){e.updateValue()}}).disableSelection().find("li").each(function(){jQuery(this).find("i.visibility").click(function(){jQuery(this).toggleClass("dashicons-visibility-faint").parents("li:eq(0)").toggleClass("invisible")})}).click(function(){e.updateValue()})},updateValue:function(){"use strict";var e=[];this.sortableContainer.find("li").each(function(){jQuery(this).is(".invisible")||e.push(jQuery(this).data("value"))}),this.setting.set(e)}}),wp.customize.controlConstructor["kirki-switch"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){"use strict";var e=this,t=e.setting._value;this.container.on("change","input",function(){t=!!jQuery(this).is(":checked"),e.setting.set(t)})}}),wp.customize.controlConstructor["kirki-toggle"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){var e=this,t=e.setting._value;this.container.on("change","input",function(){t=!!jQuery(this).is(":checked"),e.setting.set(t)})}}),wp.customize.controlConstructor["kirki-typography"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(){"use strict";var e,t=this,i=t.setting._value;t.renderFontSelector(),t.renderBackupFontSelector(),t.renderVariantSelector(),t.params.default["font-size"]&&this.container.on("change keyup paste",".font-size input",function(){t.saveValue("font-size",jQuery(this).val())}),t.params.default["line-height"]&&this.container.on("change keyup paste",".line-height input",function(){t.saveValue("line-height",jQuery(this).val())}),t.params.default["margin-top"]&&this.container.on("change keyup paste",".margin-top input",function(){t.saveValue("margin-top",jQuery(this).val())}),t.params.default["margin-bottom"]&&this.container.on("change keyup paste",".margin-bottom input",function(){t.saveValue("margin-bottom",jQuery(this).val())}),t.params.default["letter-spacing"]&&(i["letter-spacing"]=jQuery.isNumeric(i["letter-spacing"])?i["letter-spacing"]+"px":i["letter-spacing"],this.container.on("change keyup paste",".letter-spacing input",function(){i["letter-spacing"]=jQuery.isNumeric(jQuery(this).val())?jQuery(this).val()+"px":jQuery(this).val(),t.saveValue("letter-spacing",i["letter-spacing"])})),t.params.default["word-spacing"]&&this.container.on("change keyup paste",".word-spacing input",function(){t.saveValue("word-spacing",jQuery(this).val())}),t.params.default["text-align"]&&this.container.on("change",".text-align input",function(){t.saveValue("text-align",jQuery(this).val())}),t.params.default["text-transform"]&&jQuery(t.selector+" .text-transform select").selectWoo().on("change",function(){t.saveValue("text-transform",jQuery(this).val())}),t.params.default["text-decoration"]&&jQuery(t.selector+" .text-decoration select").selectWoo().on("change",function(){t.saveValue("text-decoration",jQuery(this).val())}),_.isUndefined(t.params.default.color)||(e=this.container.find(".kirki-color-control")).wpColorPicker({change:function(){setTimeout(function(){t.saveValue("color",e.val())},100)}})},renderFontSelector:function(){var e,t,i=this,n=i.selector+" .font-family select",a=[],r=[],o=[],s=i.setting._value,c=i.getFonts();_.isUndefined(c.standard)||_.each(c.standard,function(e){r.push({id:e.family.replace(/"/g,"'"),text:e.label})}),_.isUndefined(c.google)||_.each(c.google,function(e){o.push({id:e.family,text:e.family})}),t={},_.isUndefined(i.params)||_.isUndefined(i.params.choices)||_.isUndefined(i.params.choices.fonts)||_.isUndefined(i.params.choices.fonts.families)||(t=i.params.choices.fonts.families),a=jQuery.extend({},t,{default:{text:kirkiL10n.defaultCSSValues,children:[{id:"",text:kirkiL10n.defaultBrowserFamily},{id:"inherit",text:"initial"},{id:"inherit",text:"inherit"}]},standard:{text:kirkiL10n.standardFonts,children:r},google:{text:kirkiL10n.googleFonts,children:o}}),kirkiL10n.isScriptDebug&&(console.info('Kirki Debug: Font families for control "'+i.id+'":'),console.info(a)),a=_.values(a),e=jQuery(n).selectWoo({data:a}),s["font-family"]&&e.val(s["font-family"].replace(/'/g,'"')).trigger("change"),e.on("change",function(){i.saveValue("font-family",jQuery(this).val()),i.renderBackupFontSelector(),i.renderVariantSelector()})},renderBackupFontSelector:function(){var e,t=this,i=t.selector+" .font-backup select",n=[],a=t.setting._value,r=a["font-family"],o=t.getFonts();(_.isUndefined(a["font-backup"])||null===a["font-backup"])&&(a["font-backup"]=""),"inherit"!==r&&"google"===kirki.util.webfonts.getFontType(r)?(jQuery(t.selector+" .font-backup").show(),_.isUndefined(o.standard)||_.each(o.standard,function(e){n.push({id:e.family.replace(/"/g,"'"),text:e.label})}),e=jQuery(i).selectWoo({data:n}),void 0!==a["font-backup"]&&e.val(a["font-backup"].replace(/'/g,'"')).trigger("change"),e.on("change",function(){t.saveValue("font-backup",jQuery(this).val())})):jQuery(t.selector+" .font-backup").hide()},renderVariantSelector:function(){var e,t,i,n=this,a=n.setting._value,r=a["font-family"],o=n.selector+" .variant select",s=[],c=!1,l=kirki.util.webfonts.getFontType(r),u=["","regular","italic","700","700italic"];if("google"===l&&(u=kirki.util.webfonts.google.getVariants(r)),_.isUndefined(n.params)||_.isUndefined(n.params.choices)||_.isUndefined(n.params.choices.fonts)||_.isUndefined(n.params.choices.fonts.variants)||_.isUndefined(n.params.choices.fonts.variants[r])||(u=n.params.choices.fonts.variants[r]),kirkiL10n.isScriptDebug&&(console.info('Kirki Debug: Font variants for font-family "'+r+'":'),console.info(u)),"inherit"===r&&(a.variant="inherit",u=[""],jQuery(n.selector+" .variant").hide()),u.length<=1)return jQuery(n.selector+" .variant").hide(),a.variant=u[0],n.saveValue("variant",a.variant),""!==a.variant&&a.variant?(e=_.isString(a.variant)?a.variant.match(/\d/g):"400",e=_.isObject(e)?e.join(""):"400",i=-1!==a.variant.indexOf("italic")?"italic":"normal"):i=e="",n.saveValue("font-weight",e),void n.saveValue("font-style",i);jQuery(n.selector+" .font-backup").show(),jQuery(n.selector+" .variant").show(),_.each(u,function(e){a.variant===e&&(c=!0),s.push({id:e,text:e})}),c||(a.variant="regular"),jQuery(o).hasClass("select2-hidden-accessible")&&(jQuery(o).selectWoo("destroy"),jQuery(o).empty()),(t=jQuery(o).selectWoo({data:s})).val(a.variant).trigger("change"),t.on("change",function(){n.saveValue("variant",jQuery(this).val()),"string"!=typeof a.variant&&(a.variant=u[0]),e=_.isString(a.variant)?a.variant.match(/\d/g):"400",e=_.isObject(e)?e.join(""):"400",i=-1!==a.variant.indexOf("italic")?"italic":"normal",n.saveValue("font-weight",e),n.saveValue("font-style",i)})},getFonts:function(){var e=this,t=kirki.util.webfonts.google.getFonts(),i={},n="alpha",a=0,r={};return _.isEmpty(e.params.choices.fonts.google)?i=kirki.util.webfonts.google.getFonts(n,"",a):"alpha"===e.params.choices.fonts.google[0]||"popularity"===e.params.choices.fonts.google[0]||"trending"===e.params.choices.fonts.google[0]?(n=e.params.choices.fonts.google[0],isNaN(e.params.choices.fonts.google[1])||(a=parseInt(e.params.choices.fonts.google[1],10)),i=kirki.util.webfonts.google.getFonts(n,"",a)):_.each(e.params.choices.fonts.google,function(e){void 0===t[e]||_.isEmpty(t[e])||(i[e]=t[e])}),_.isEmpty(e.params.choices.fonts.standard)?_.each(kirki.util.webfonts.standard.fonts,function(e,t){r[t]={family:e.stack,label:e.label}}):_.each(e.params.choices.fonts.standard,function(e){void 0===kirki.util.webfonts.standard.fonts[e]||_.isEmpty(kirki.util.webfonts.standard.fonts[e])?r[e]={family:e,label:e}:(r[e]={},"undefined"===kirki.util.webfonts.standard.fonts[e].stack||_.isEmpty(kirki.util.webfonts.standard.fonts[e].stack)?r[e].family=i[e]:r[e].family=kirki.util.webfonts.standard.fonts[e].stack,"undefined"===kirki.util.webfonts.standard.fonts[e].label||_.isEmpty(kirki.util.webfonts.standard.fonts[e].label)?_.isEmpty(r[e])||(r[e].label=r[e]):r[e].label=kirki.util.webfonts.standard.fonts[e].label)}),{google:i,standard:r}},saveValue:function(e,t){var i=this.container.find(".typography-hidden-value"),n=this.setting._value;n[e]=t,jQuery(i).attr("value",JSON.stringify(n)).trigger("change"),this.setting.set(n)}});
|
controls/php/class-kirki-control-base.php
CHANGED
@@ -57,6 +57,15 @@ class Kirki_Control_Base extends WP_Customize_Control {
|
|
57 |
*/
|
58 |
public $required = array();
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
/**
|
61 |
* Extra script dependencies.
|
62 |
*
|
@@ -109,13 +118,15 @@ class Kirki_Control_Base extends WP_Customize_Control {
|
|
109 |
'kirki-script',
|
110 |
'kirkiL10n',
|
111 |
array(
|
112 |
-
'
|
113 |
-
'
|
114 |
-
'
|
115 |
-
'
|
116 |
-
'
|
117 |
-
'
|
118 |
-
'
|
|
|
|
|
119 |
)
|
120 |
);
|
121 |
|
@@ -169,6 +180,8 @@ class Kirki_Control_Base extends WP_Customize_Control {
|
|
169 |
$this->json['kirkiOptionType'] = $this->option_type;
|
170 |
// The option-name.
|
171 |
$this->json['kirkiOptionName'] = $this->option_name;
|
|
|
|
|
172 |
}
|
173 |
|
174 |
/**
|
57 |
*/
|
58 |
public $required = array();
|
59 |
|
60 |
+
/**
|
61 |
+
* Whitelisting the "preset" argument.
|
62 |
+
*
|
63 |
+
* @since 3.0.26
|
64 |
+
* @access public
|
65 |
+
* @var array
|
66 |
+
*/
|
67 |
+
public $preset = array();
|
68 |
+
|
69 |
/**
|
70 |
* Extra script dependencies.
|
71 |
*
|
118 |
'kirki-script',
|
119 |
'kirkiL10n',
|
120 |
array(
|
121 |
+
'isScriptDebug' => ( defined( 'SCRIPT_DEBUG' ) && true === SCRIPT_DEBUG ),
|
122 |
+
'noFileSelected' => esc_attr__( 'No File Selected', 'kirki' ),
|
123 |
+
'remove' => esc_attr__( 'Remove', 'kirki' ),
|
124 |
+
'default' => esc_attr__( 'Default', 'kirki' ),
|
125 |
+
'selectFile' => esc_attr__( 'Select File', 'kirki' ),
|
126 |
+
'standardFonts' => esc_attr__( 'Standard Fonts', 'kirki' ),
|
127 |
+
'googleFonts' => esc_attr__( 'Google Fonts', 'kirki' ),
|
128 |
+
'defaultCSSValues' => esc_attr__( 'CSS Defaults', 'kirki' ),
|
129 |
+
'defaultBrowserFamily' => esc_attr__( 'Default Browser Font-Family', 'kirki' ),
|
130 |
)
|
131 |
);
|
132 |
|
180 |
$this->json['kirkiOptionType'] = $this->option_type;
|
181 |
// The option-name.
|
182 |
$this->json['kirkiOptionName'] = $this->option_name;
|
183 |
+
// The preset.
|
184 |
+
$this->json['preset'] = $this->preset;
|
185 |
}
|
186 |
|
187 |
/**
|
controls/php/class-kirki-control-checkbox.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Customizer Control: checkbox.
|
4 |
+
*
|
5 |
+
* Creates a new custom control.
|
6 |
+
* Custom controls contains all background-related options.
|
7 |
+
*
|
8 |
+
* @package Kirki
|
9 |
+
* @subpackage Controls
|
10 |
+
* @copyright Copyright (c) 2017, Aristeides Stathopoulos
|
11 |
+
* @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
|
12 |
+
* @since 3.0.26
|
13 |
+
*/
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Adds a checkbox control.
|
17 |
+
*
|
18 |
+
* @since 3.0.26
|
19 |
+
*/
|
20 |
+
class Kirki_Control_Checkbox extends Kirki_Control_Base {
|
21 |
+
|
22 |
+
/**
|
23 |
+
* The control type.
|
24 |
+
*
|
25 |
+
* @access public
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
public $type = 'kirki-checkbox';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Render the control's content.
|
32 |
+
* Verbatim copy from WP_Customize_Control->render_content.
|
33 |
+
*
|
34 |
+
* @since 3.0.26
|
35 |
+
*/
|
36 |
+
protected function render_content() {
|
37 |
+
$input_id = '_customize-input-' . $this->id;
|
38 |
+
$description_id = '_customize-description-' . $this->id;
|
39 |
+
$describedby_attr = ( ! empty( $this->description ) ) ? ' aria-describedby="' . esc_attr( $description_id ) . '" ' : '';
|
40 |
+
?>
|
41 |
+
<span class="customize-inside-control-row">
|
42 |
+
<input
|
43 |
+
id="<?php echo esc_attr( $input_id ); ?>"
|
44 |
+
<?php echo $describedby_attr; ?>
|
45 |
+
type="checkbox"
|
46 |
+
value="<?php echo esc_attr( $this->value() ); ?>"
|
47 |
+
<?php $this->link(); ?>
|
48 |
+
<?php checked( $this->value() ); ?>
|
49 |
+
/>
|
50 |
+
<label for="<?php echo esc_attr( $input_id ); ?>"><?php echo esc_html( $this->label ); ?></label>
|
51 |
+
<?php if ( ! empty( $this->description ) ) : ?>
|
52 |
+
<span id="<?php echo esc_attr( $description_id ); ?>" class="description customize-control-description"><?php echo $this->description; ?></span>
|
53 |
+
<?php endif; ?>
|
54 |
+
</span>
|
55 |
+
<?php
|
56 |
+
}
|
57 |
+
}
|
controls/php/class-kirki-control-dimension.php
CHANGED
@@ -56,7 +56,7 @@ class Kirki_Control_Dimension extends Kirki_Control_Base {
|
|
56 |
<# if ( data.label ) { #><span class="customize-control-title">{{{ data.label }}}</span><# } #>
|
57 |
<# if ( data.description ) { #><span class="description customize-control-description">{{{ data.description }}}</span><# } #>
|
58 |
<div class="input-wrapper">
|
59 |
-
<# var val = (
|
60 |
<input {{{ data.inputAttrs }}} type="text" value="{{ val }}"/>
|
61 |
</div>
|
62 |
</label>
|
56 |
<# if ( data.label ) { #><span class="customize-control-title">{{{ data.label }}}</span><# } #>
|
57 |
<# if ( data.description ) { #><span class="description customize-control-description">{{{ data.description }}}</span><# } #>
|
58 |
<div class="input-wrapper">
|
59 |
+
<# var val = ( data.value && _.isString( data.value ) ) ? data.value.replace( '%%', '%' ) : ''; #>
|
60 |
<input {{{ data.inputAttrs }}} type="text" value="{{ val }}"/>
|
61 |
</div>
|
62 |
</label>
|
controls/php/class-kirki-control-multicheck.php
CHANGED
@@ -49,7 +49,7 @@ class Kirki_Control_MultiCheck extends Kirki_Control_Base {
|
|
49 |
|
50 |
<ul>
|
51 |
<# for ( key in data.choices ) { #>
|
52 |
-
<li><label
|
53 |
<# } #>
|
54 |
</ul>
|
55 |
<?php
|
49 |
|
50 |
<ul>
|
51 |
<# for ( key in data.choices ) { #>
|
52 |
+
<li><label<# if ( _.contains( data.value, key ) ) { #> class="checked"<# } #>><input {{{ data.inputAttrs }}} type="checkbox" value="{{ key }}"<# if ( _.contains( data.value, key ) ) { #> checked<# } #> />{{ data.choices[ key ] }}</label></li>
|
53 |
<# } #>
|
54 |
</ul>
|
55 |
<?php
|
controls/php/class-kirki-control-radio-buttonset.php
CHANGED
@@ -44,7 +44,7 @@ class Kirki_Control_Radio_Buttonset extends Kirki_Control_Base {
|
|
44 |
<div id="input_{{ data.id }}" class="buttonset">
|
45 |
<# for ( key in data.choices ) { #>
|
46 |
<input {{{ data.inputAttrs }}} class="switch-input screen-reader-text" type="radio" value="{{ key }}" name="_customize-radio-{{{ data.id }}}" id="{{ data.id }}{{ key }}" {{{ data.link }}}<# if ( key === data.value ) { #> checked="checked" <# } #>>
|
47 |
-
<label class="switch-label switch-label-<# if ( key === data.value ) { #>on <# } else { #>off<# } #>" for="{{ data.id }}{{ key }}">{{ data.choices[ key ] }}</label>
|
48 |
</input>
|
49 |
<# } #>
|
50 |
</div>
|
44 |
<div id="input_{{ data.id }}" class="buttonset">
|
45 |
<# for ( key in data.choices ) { #>
|
46 |
<input {{{ data.inputAttrs }}} class="switch-input screen-reader-text" type="radio" value="{{ key }}" name="_customize-radio-{{{ data.id }}}" id="{{ data.id }}{{ key }}" {{{ data.link }}}<# if ( key === data.value ) { #> checked="checked" <# } #>>
|
47 |
+
<label class="switch-label switch-label-<# if ( key === data.value ) { #>on <# } else { #>off<# } #>" for="{{ data.id }}{{ key }}">{{{ data.choices[ key ] }}}</label>
|
48 |
</input>
|
49 |
<# } #>
|
50 |
</div>
|
controls/php/class-kirki-control-repeater.php
CHANGED
@@ -51,6 +51,14 @@ class Kirki_Control_Repeater extends Kirki_Control_Base {
|
|
51 |
*/
|
52 |
public $row_label = array();
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
/**
|
55 |
* Constructor.
|
56 |
* Supplied `$args` override class property defaults.
|
@@ -247,7 +255,7 @@ class Kirki_Control_Repeater extends Kirki_Control_Base {
|
|
247 |
<div class="repeater-row-content">
|
248 |
<# _.each( data, function( field, i ) { #>
|
249 |
|
250 |
-
<div class="repeater-field repeater-field-{{{ field.type }}}">
|
251 |
|
252 |
<# if ( 'text' === field.type || 'url' === field.type || 'link' === field.type || 'email' === field.type || 'tel' === field.type || 'date' === field.type || 'number' === field.type ) { #>
|
253 |
<# var fieldExtras = ''; #>
|
@@ -338,17 +346,20 @@ class Kirki_Control_Repeater extends Kirki_Control_Base {
|
|
338 |
|
339 |
<# } else if ( 'color' === field.type ) { #>
|
340 |
|
341 |
-
<# var defaultValue = '';
|
342 |
-
if ( field.default ) {
|
343 |
-
defaultValue = ( '#' !== field.default.substring( 0, 1 ) ) ? '#' + field.default : field.default;
|
344 |
-
defaultValue = ' data-default-color=' + defaultValue; // Quotes added automatically.
|
345 |
-
} #>
|
346 |
<label>
|
347 |
<# if ( field.label ) { #><span class="customize-control-title">{{{ field.label }}}</span><# } #>
|
348 |
<# if ( field.description ) { #><span class="description customize-control-description">{{{ field.description }}}</span><# } #>
|
349 |
-
<input class="color-picker-hex" type="text" maxlength="7" placeholder="<?php esc_attr_e( 'Hex Value', 'kirki' ); ?>" value="{{{ field.default }}}" data-field="{{{ field.id }}}" {{ defaultValue }} />
|
350 |
-
|
351 |
</label>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
|
353 |
<# } else if ( 'textarea' === field.type ) { #>
|
354 |
|
51 |
*/
|
52 |
public $row_label = array();
|
53 |
|
54 |
+
/**
|
55 |
+
* The button label
|
56 |
+
*
|
57 |
+
* @access public
|
58 |
+
* @var string
|
59 |
+
*/
|
60 |
+
public $button_label = '';
|
61 |
+
|
62 |
/**
|
63 |
* Constructor.
|
64 |
* Supplied `$args` override class property defaults.
|
255 |
<div class="repeater-row-content">
|
256 |
<# _.each( data, function( field, i ) { #>
|
257 |
|
258 |
+
<div class="repeater-field repeater-field-{{{ field.type }}} repeater-field-{{ field.id }}">
|
259 |
|
260 |
<# if ( 'text' === field.type || 'url' === field.type || 'link' === field.type || 'email' === field.type || 'tel' === field.type || 'date' === field.type || 'number' === field.type ) { #>
|
261 |
<# var fieldExtras = ''; #>
|
346 |
|
347 |
<# } else if ( 'color' === field.type ) { #>
|
348 |
|
|
|
|
|
|
|
|
|
|
|
349 |
<label>
|
350 |
<# if ( field.label ) { #><span class="customize-control-title">{{{ field.label }}}</span><# } #>
|
351 |
<# if ( field.description ) { #><span class="description customize-control-description">{{{ field.description }}}</span><# } #>
|
|
|
|
|
352 |
</label>
|
353 |
+
<# var defaultValue = '';
|
354 |
+
if ( field.default ) {
|
355 |
+
if ( -1 === field.default.indexOf( 'rgba' ) ) {
|
356 |
+
defaultValue = ( '#' !== field.default.substring( 0, 1 ) ) ? '#' + field.default : field.default;
|
357 |
+
defaultValue = ' data-default-color=' + defaultValue; // Quotes added automatically.
|
358 |
+
} else {
|
359 |
+
defaultValue = ' data-default-color="' + defaultValue + '" data-alpha="true"';
|
360 |
+
}
|
361 |
+
} #>
|
362 |
+
<input class="color-picker-hex" type="text" maxlength="7" placeholder="<?php esc_attr_e( 'Hex Value', 'kirki' ); ?>" value="{{{ field.default }}}" data-field="{{{ field.id }}}" {{ defaultValue }} />
|
363 |
|
364 |
<# } else if ( 'textarea' === field.type ) { #>
|
365 |
|
controls/php/class-kirki-control-typography.php
CHANGED
@@ -73,7 +73,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
73 |
|
74 |
<div class="wrapper">
|
75 |
|
76 |
-
<# if ( data.default['font-family'] ) { #>
|
77 |
<# data.value['font-family'] = data.value['font-family'] || data['default']['font-family']; #>
|
78 |
<# if ( data.choices['fonts'] ) { data.fonts = data.choices['fonts']; } #>
|
79 |
<div class="font-family">
|
@@ -94,7 +94,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
94 |
<# } #>
|
95 |
<# } #>
|
96 |
|
97 |
-
<# if ( data.default['font-size'] ) { #>
|
98 |
<# data.value['font-size'] = data.value['font-size'] || data['default']['font-size']; #>
|
99 |
<div class="font-size">
|
100 |
<h5><?php esc_attr_e( 'Font Size', 'kirki' ); ?></h5>
|
@@ -102,7 +102,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
102 |
</div>
|
103 |
<# } #>
|
104 |
|
105 |
-
<# if ( data.default['line-height'] ) { #>
|
106 |
<# data.value['line-height'] = data.value['line-height'] || data['default']['line-height']; #>
|
107 |
<div class="line-height">
|
108 |
<h5><?php esc_attr_e( 'Line Height', 'kirki' ); ?></h5>
|
@@ -110,7 +110,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
110 |
</div>
|
111 |
<# } #>
|
112 |
|
113 |
-
<# if ( data.default['letter-spacing'] ) { #>
|
114 |
<# data.value['letter-spacing'] = data.value['letter-spacing'] || data['default']['letter-spacing']; #>
|
115 |
<div class="letter-spacing">
|
116 |
<h5><?php esc_attr_e( 'Letter Spacing', 'kirki' ); ?></h5>
|
@@ -118,7 +118,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
118 |
</div>
|
119 |
<# } #>
|
120 |
|
121 |
-
<# if ( data.default['word-spacing'] ) { #>
|
122 |
<# data.value['word-spacing'] = data.value['word-spacing'] || data['default']['word-spacing']; #>
|
123 |
<div class="word-spacing">
|
124 |
<h5><?php esc_attr_e( 'Word Spacing', 'kirki' ); ?></h5>
|
@@ -126,7 +126,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
126 |
</div>
|
127 |
<# } #>
|
128 |
|
129 |
-
<# if ( data.default['text-align'] ) { #>
|
130 |
<# data.value['text-align'] = data.value['text-align'] || data['default']['text-align']; #>
|
131 |
<div class="text-align">
|
132 |
<h5><?php esc_attr_e( 'Text Align', 'kirki' ); ?></h5>
|
@@ -165,11 +165,12 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
165 |
</div>
|
166 |
<# } #>
|
167 |
|
168 |
-
<# if ( data.default['text-transform'] ) { #>
|
169 |
<# data.value['text-transform'] = data.value['text-transform'] || data['default']['text-transform']; #>
|
170 |
<div class="text-transform">
|
171 |
<h5><?php esc_attr_e( 'Text Transform', 'kirki' ); ?></h5>
|
172 |
<select {{{ data.inputAttrs }}} id="kirki-typography-text-transform-{{{ data.id }}}">
|
|
|
173 |
<option value="none"<# if ( 'none' === data.value['text-transform'] ) { #>selected<# } #>><?php esc_attr_e( 'None', 'kirki' ); ?></option>
|
174 |
<option value="capitalize"<# if ( 'capitalize' === data.value['text-transform'] ) { #>selected<# } #>><?php esc_attr_e( 'Capitalize', 'kirki' ); ?></option>
|
175 |
<option value="uppercase"<# if ( 'uppercase' === data.value['text-transform'] ) { #>selected<# } #>><?php esc_attr_e( 'Uppercase', 'kirki' ); ?></option>
|
@@ -180,11 +181,12 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
180 |
</div>
|
181 |
<# } #>
|
182 |
|
183 |
-
<# if ( data.default['text-decoration'] ) { #>
|
184 |
<# data.value['text-decoration'] = data.value['text-decoration'] || data['default']['text-decoration']; #>
|
185 |
<div class="text-decoration">
|
186 |
<h5><?php esc_attr_e( 'Text Decoration', 'kirki' ); ?></h5>
|
187 |
<select {{{ data.inputAttrs }}} id="kirki-typography-text-decoration-{{{ data.id }}}">
|
|
|
188 |
<option value="none"<# if ( 'none' === data.value['text-decoration'] ) { #>selected<# } #>><?php esc_attr_e( 'None', 'kirki' ); ?></option>
|
189 |
<option value="underline"<# if ( 'underline' === data.value['text-decoration'] ) { #>selected<# } #>><?php esc_attr_e( 'Underline', 'kirki' ); ?></option>
|
190 |
<option value="overline"<# if ( 'overline' === data.value['text-decoration'] ) { #>selected<# } #>><?php esc_attr_e( 'Overline', 'kirki' ); ?></option>
|
@@ -195,7 +197,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
195 |
</div>
|
196 |
<# } #>
|
197 |
|
198 |
-
<# if ( data.default['margin-top'] ) { #>
|
199 |
<# data.value['margin-top'] = data.value['margin-top'] || data['default']['margin-top']; #>
|
200 |
<div class="margin-top">
|
201 |
<h5><?php esc_attr_e( 'Margin Top', 'kirki' ); ?></h5>
|
@@ -203,7 +205,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
203 |
</div>
|
204 |
<# } #>
|
205 |
|
206 |
-
<# if ( data.default['margin-bottom'] ) { #>
|
207 |
<# data.value['margin-bottom'] = data.value['margin-bottom'] || data['default']['margin-bottom']; #>
|
208 |
<div class="margin-bottom">
|
209 |
<h5><?php esc_attr_e( 'Margin Bottom', 'kirki' ); ?></h5>
|
@@ -211,7 +213,7 @@ class Kirki_Control_Typography extends Kirki_Control_Base {
|
|
211 |
</div>
|
212 |
<# } #>
|
213 |
|
214 |
-
<# if (
|
215 |
<# data.value['color'] = data.value['color'] || data['default']['color']; #>
|
216 |
<div class="color">
|
217 |
<h5><?php esc_attr_e( 'Color', 'kirki' ); ?></h5>
|
73 |
|
74 |
<div class="wrapper">
|
75 |
|
76 |
+
<# if ( ! _.isUndefined( data.default['font-family'] ) ) { #>
|
77 |
<# data.value['font-family'] = data.value['font-family'] || data['default']['font-family']; #>
|
78 |
<# if ( data.choices['fonts'] ) { data.fonts = data.choices['fonts']; } #>
|
79 |
<div class="font-family">
|
94 |
<# } #>
|
95 |
<# } #>
|
96 |
|
97 |
+
<# if ( ! _.isUndefined( data.default['font-size'] ) ) { #>
|
98 |
<# data.value['font-size'] = data.value['font-size'] || data['default']['font-size']; #>
|
99 |
<div class="font-size">
|
100 |
<h5><?php esc_attr_e( 'Font Size', 'kirki' ); ?></h5>
|
102 |
</div>
|
103 |
<# } #>
|
104 |
|
105 |
+
<# if ( ! _.isUndefined( data.default['line-height'] ) ) { #>
|
106 |
<# data.value['line-height'] = data.value['line-height'] || data['default']['line-height']; #>
|
107 |
<div class="line-height">
|
108 |
<h5><?php esc_attr_e( 'Line Height', 'kirki' ); ?></h5>
|
110 |
</div>
|
111 |
<# } #>
|
112 |
|
113 |
+
<# if ( ! _.isUndefined( data.default['letter-spacing'] ) ) { #>
|
114 |
<# data.value['letter-spacing'] = data.value['letter-spacing'] || data['default']['letter-spacing']; #>
|
115 |
<div class="letter-spacing">
|
116 |
<h5><?php esc_attr_e( 'Letter Spacing', 'kirki' ); ?></h5>
|
118 |
</div>
|
119 |
<# } #>
|
120 |
|
121 |
+
<# if ( ! _.isUndefined( data.default['word-spacing'] ) ) { #>
|
122 |
<# data.value['word-spacing'] = data.value['word-spacing'] || data['default']['word-spacing']; #>
|
123 |
<div class="word-spacing">
|
124 |
<h5><?php esc_attr_e( 'Word Spacing', 'kirki' ); ?></h5>
|
126 |
</div>
|
127 |
<# } #>
|
128 |
|
129 |
+
<# if ( ! _.isUndefined( data.default['text-align'] ) ) { #>
|
130 |
<# data.value['text-align'] = data.value['text-align'] || data['default']['text-align']; #>
|
131 |
<div class="text-align">
|
132 |
<h5><?php esc_attr_e( 'Text Align', 'kirki' ); ?></h5>
|
165 |
</div>
|
166 |
<# } #>
|
167 |
|
168 |
+
<# if ( ! _.isUndefined( data.default['text-transform'] ) ) { #>
|
169 |
<# data.value['text-transform'] = data.value['text-transform'] || data['default']['text-transform']; #>
|
170 |
<div class="text-transform">
|
171 |
<h5><?php esc_attr_e( 'Text Transform', 'kirki' ); ?></h5>
|
172 |
<select {{{ data.inputAttrs }}} id="kirki-typography-text-transform-{{{ data.id }}}">
|
173 |
+
<option value=""<# if ( '' === data.value['text-transform'] ) { #>selected<# } #>></option>
|
174 |
<option value="none"<# if ( 'none' === data.value['text-transform'] ) { #>selected<# } #>><?php esc_attr_e( 'None', 'kirki' ); ?></option>
|
175 |
<option value="capitalize"<# if ( 'capitalize' === data.value['text-transform'] ) { #>selected<# } #>><?php esc_attr_e( 'Capitalize', 'kirki' ); ?></option>
|
176 |
<option value="uppercase"<# if ( 'uppercase' === data.value['text-transform'] ) { #>selected<# } #>><?php esc_attr_e( 'Uppercase', 'kirki' ); ?></option>
|
181 |
</div>
|
182 |
<# } #>
|
183 |
|
184 |
+
<# if ( ! _.isUndefined( data.default['text-decoration'] ) ) { #>
|
185 |
<# data.value['text-decoration'] = data.value['text-decoration'] || data['default']['text-decoration']; #>
|
186 |
<div class="text-decoration">
|
187 |
<h5><?php esc_attr_e( 'Text Decoration', 'kirki' ); ?></h5>
|
188 |
<select {{{ data.inputAttrs }}} id="kirki-typography-text-decoration-{{{ data.id }}}">
|
189 |
+
<option value=""<# if ( '' === data.value['text-decoration'] ) { #>selected<# } #>></option>
|
190 |
<option value="none"<# if ( 'none' === data.value['text-decoration'] ) { #>selected<# } #>><?php esc_attr_e( 'None', 'kirki' ); ?></option>
|
191 |
<option value="underline"<# if ( 'underline' === data.value['text-decoration'] ) { #>selected<# } #>><?php esc_attr_e( 'Underline', 'kirki' ); ?></option>
|
192 |
<option value="overline"<# if ( 'overline' === data.value['text-decoration'] ) { #>selected<# } #>><?php esc_attr_e( 'Overline', 'kirki' ); ?></option>
|
197 |
</div>
|
198 |
<# } #>
|
199 |
|
200 |
+
<# if ( ! _.isUndefined( data.default['margin-top'] ) ) { #>
|
201 |
<# data.value['margin-top'] = data.value['margin-top'] || data['default']['margin-top']; #>
|
202 |
<div class="margin-top">
|
203 |
<h5><?php esc_attr_e( 'Margin Top', 'kirki' ); ?></h5>
|
205 |
</div>
|
206 |
<# } #>
|
207 |
|
208 |
+
<# if ( ! _.isUndefined( data.default['margin-bottom'] ) ) { #>
|
209 |
<# data.value['margin-bottom'] = data.value['margin-bottom'] || data['default']['margin-bottom']; #>
|
210 |
<div class="margin-bottom">
|
211 |
<h5><?php esc_attr_e( 'Margin Bottom', 'kirki' ); ?></h5>
|
213 |
</div>
|
214 |
<# } #>
|
215 |
|
216 |
+
<# if ( ! _.isUndefined( data.default['color'] ) && false !== data.default['color'] ) { #>
|
217 |
<# data.value['color'] = data.value['color'] || data['default']['color']; #>
|
218 |
<div class="color">
|
219 |
<h5><?php esc_attr_e( 'Color', 'kirki' ); ?></h5>
|
controls/views/number.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Customizer controls underscore.js template.
|
4 |
+
*
|
5 |
+
* @package Kirki
|
6 |
+
* @subpackage Controls
|
7 |
+
* @copyright Copyright (c) 2017, Aristeides Stathopoulos
|
8 |
+
* @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
|
9 |
+
* @since 3.0.27
|
10 |
+
*/
|
11 |
+
|
12 |
+
?>
|
13 |
+
<#
|
14 |
+
data = _.defaults( data, {
|
15 |
+
label: '',
|
16 |
+
description: '',
|
17 |
+
inputAttrs: '',
|
18 |
+
value: '',
|
19 |
+
'data-id': ''
|
20 |
+
} );
|
21 |
+
#>
|
22 |
+
|
23 |
+
<div class="kirki-input-container" data-id="{{ data['data-id'] }}">
|
24 |
+
<label>
|
25 |
+
<# if ( data.label ) { #>
|
26 |
+
<span class="customize-control-title">{{{ data.label }}}</span>
|
27 |
+
<# } #>
|
28 |
+
<# if ( data.description ) { #>
|
29 |
+
<span class="description customize-control-description">{{{ data.description }}}</span>
|
30 |
+
<# } #>
|
31 |
+
<div class="customize-control-content">
|
32 |
+
<input {{{ data.inputAttrs }}} type="text" value="{{ data.value }}" data-id="{{ data['data-id'] }}"/>
|
33 |
+
<div class="quantity button minus">-</div>
|
34 |
+
<div class="quantity button plus">+</div>
|
35 |
+
</div>
|
36 |
+
</label>
|
37 |
+
</div>
|
core/class-kirki-helper.php
CHANGED
@@ -272,7 +272,7 @@ class Kirki_Helper {
|
|
272 |
'deep-purple' => array( '#EDE7F6', '#D1C4E9', '#B39DDB', '#9575CD', '#7E57C2', '#673AB7', '#5E35B1', '#512DA8', '#4527A0', '#311B92', '#B388FF', '#7C4DFF', '#651FFF', '#6200EA' ),
|
273 |
'indigo' => array( '#E8EAF6', '#C5CAE9', '#9FA8DA', '#7986CB', '#5C6BC0', '#3F51B5', '#3949AB', '#303F9F', '#283593', '#1A237E', '#8C9EFF', '#536DFE', '#3D5AFE', '#304FFE' ),
|
274 |
'blue' => array( '#E3F2FD', '#BBDEFB', '#90CAF9', '#64B5F6', '#42A5F5', '#2196F3', '#1E88E5', '#1976D2', '#1565C0', '#0D47A1', '#82B1FF', '#448AFF', '#2979FF', '#2962FF' ),
|
275 |
-
'
|
276 |
'cyan' => array( '#E0F7FA', '#B2EBF2', '#80DEEA', '#4DD0E1', '#26C6DA', '#00BCD4', '#00ACC1', '#0097A7', '#00838F', '#006064', '#84FFFF', '#18FFFF', '#00E5FF', '#00B8D4' ),
|
277 |
'teal' => array( '#E0F2F1', '#B2DFDB', '#80CBC4', '#4DB6AC', '#26A69A', '#009688', '#00897B', '#00796B', '#00695C', '#004D40', '#A7FFEB', '#64FFDA', '#1DE9B6', '#00BFA5' ),
|
278 |
'green' => array( '#E8F5E9', '#C8E6C9', '#A5D6A7', '#81C784', '#66BB6A', '#4CAF50', '#43A047', '#388E3C', '#2E7D32', '#1B5E20', '#B9F6CA', '#69F0AE', '#00E676', '#00C853' ),
|
@@ -382,36 +382,44 @@ class Kirki_Helper {
|
|
382 |
* @return boolean whether The comparison has succeded (true) or failed (false).
|
383 |
*/
|
384 |
public static function compare_values( $value1, $value2, $operator ) {
|
385 |
-
$
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
}
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
}
|
400 |
-
|
401 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
402 |
if ( is_array( $value1 ) && ! is_array( $value2 ) ) {
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
$return = ( in_array( $value1, $value2 ) );
|
408 |
-
} elseif ( false === strrpos( $value1, $value2 ) && false === strpos( $value2, $value1 ) ) {
|
409 |
-
$return = false;
|
410 |
}
|
411 |
-
|
412 |
-
// @codingStandardsIgnoreLine WordPress.PHP.StrictComparisons.LooseComparison
|
413 |
-
$return = ( $value1 == $value2 ) ? true : false; // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
|
414 |
}
|
415 |
-
return
|
416 |
}
|
417 |
}
|
272 |
'deep-purple' => array( '#EDE7F6', '#D1C4E9', '#B39DDB', '#9575CD', '#7E57C2', '#673AB7', '#5E35B1', '#512DA8', '#4527A0', '#311B92', '#B388FF', '#7C4DFF', '#651FFF', '#6200EA' ),
|
273 |
'indigo' => array( '#E8EAF6', '#C5CAE9', '#9FA8DA', '#7986CB', '#5C6BC0', '#3F51B5', '#3949AB', '#303F9F', '#283593', '#1A237E', '#8C9EFF', '#536DFE', '#3D5AFE', '#304FFE' ),
|
274 |
'blue' => array( '#E3F2FD', '#BBDEFB', '#90CAF9', '#64B5F6', '#42A5F5', '#2196F3', '#1E88E5', '#1976D2', '#1565C0', '#0D47A1', '#82B1FF', '#448AFF', '#2979FF', '#2962FF' ),
|
275 |
+
'light-blue' => array( '#E1F5FE', '#B3E5FC', '#81D4fA', '#4fC3F7', '#29B6FC', '#03A9F4', '#039BE5', '#0288D1', '#0277BD', '#01579B', '#80D8FF', '#40C4FF', '#00B0FF', '#0091EA' ),
|
276 |
'cyan' => array( '#E0F7FA', '#B2EBF2', '#80DEEA', '#4DD0E1', '#26C6DA', '#00BCD4', '#00ACC1', '#0097A7', '#00838F', '#006064', '#84FFFF', '#18FFFF', '#00E5FF', '#00B8D4' ),
|
277 |
'teal' => array( '#E0F2F1', '#B2DFDB', '#80CBC4', '#4DB6AC', '#26A69A', '#009688', '#00897B', '#00796B', '#00695C', '#004D40', '#A7FFEB', '#64FFDA', '#1DE9B6', '#00BFA5' ),
|
278 |
'green' => array( '#E8F5E9', '#C8E6C9', '#A5D6A7', '#81C784', '#66BB6A', '#4CAF50', '#43A047', '#388E3C', '#2E7D32', '#1B5E20', '#B9F6CA', '#69F0AE', '#00E676', '#00C853' ),
|
382 |
* @return boolean whether The comparison has succeded (true) or failed (false).
|
383 |
*/
|
384 |
public static function compare_values( $value1, $value2, $operator ) {
|
385 |
+
if ( '===' === $operator ) {
|
386 |
+
return $value1 === $value2;
|
387 |
+
}
|
388 |
+
if ( '!==' === $operator ) {
|
389 |
+
return $value1 !== $value2;
|
390 |
+
}
|
391 |
+
if ( ( '!=' === $operator || 'not equal' === $operator ) ) {
|
392 |
+
return $value1 != $value2;
|
393 |
+
}
|
394 |
+
if ( ( '>=' === $operator || 'greater or equal' === $operator || 'equal or greater' === $operator ) ) {
|
395 |
+
return $value2 >= $value1;
|
396 |
+
}
|
397 |
+
if ( ( '<=' === $operator || 'smaller or equal' === $operator || 'equal or smaller' === $operator ) ) {
|
398 |
+
return $value2 <= $value1;
|
399 |
+
}
|
400 |
+
if ( ( '>' === $operator || 'greater' === $operator ) ) {
|
401 |
+
return $value2 > $value1;
|
402 |
+
}
|
403 |
+
if ( ( '<' === $operator || 'smaller' === $operator ) ) {
|
404 |
+
return $value2 < $value1;
|
405 |
+
}
|
406 |
+
if ( 'contains' === $operator || 'in' === $operator ) {
|
407 |
+
if ( is_array( $value1 ) && is_array( $value2 ) ) {
|
408 |
+
foreach ( $value2 as $val ) {
|
409 |
+
if ( in_array( $val, $value1 ) ) {
|
410 |
+
return true;
|
411 |
+
}
|
412 |
+
}
|
413 |
+
return false;
|
414 |
+
}
|
415 |
if ( is_array( $value1 ) && ! is_array( $value2 ) ) {
|
416 |
+
return in_array( $value2, $value1 );
|
417 |
+
}
|
418 |
+
if ( is_array( $value2 ) && ! is_array( $value1 ) ) {
|
419 |
+
return in_array( $value1, $value2 );
|
|
|
|
|
|
|
420 |
}
|
421 |
+
return ( false !== strrpos( $value1, $value2 ) || false !== strpos( $value2, $value1 ) );
|
|
|
|
|
422 |
}
|
423 |
+
return $value1 == $value2;
|
424 |
}
|
425 |
}
|
core/class-kirki-init.php
CHANGED
@@ -81,7 +81,7 @@ class Kirki_Init {
|
|
81 |
public function default_control_types( $control_types = array() ) {
|
82 |
|
83 |
$this->control_types = array(
|
84 |
-
'checkbox' => '
|
85 |
'kirki-background' => 'Kirki_Control_Background',
|
86 |
'code_editor' => 'Kirki_Control_Code',
|
87 |
'kirki-color' => 'Kirki_Control_Color',
|
@@ -142,6 +142,9 @@ class Kirki_Init {
|
|
142 |
}
|
143 |
|
144 |
$this->control_types = $this->default_control_types();
|
|
|
|
|
|
|
145 |
foreach ( $this->control_types as $key => $classname ) {
|
146 |
if ( ! class_exists( $classname ) ) {
|
147 |
unset( $this->control_types[ $key ] );
|
81 |
public function default_control_types( $control_types = array() ) {
|
82 |
|
83 |
$this->control_types = array(
|
84 |
+
'checkbox' => 'Kirki_Control_Checkbox',
|
85 |
'kirki-background' => 'Kirki_Control_Background',
|
86 |
'code_editor' => 'Kirki_Control_Code',
|
87 |
'kirki-color' => 'Kirki_Control_Color',
|
142 |
}
|
143 |
|
144 |
$this->control_types = $this->default_control_types();
|
145 |
+
if ( ! class_exists( 'WP_Customize_Code_Editor_Control' ) ) {
|
146 |
+
unset( $this->control_types['code_editor'] );
|
147 |
+
}
|
148 |
foreach ( $this->control_types as $key => $classname ) {
|
149 |
if ( ! class_exists( $classname ) ) {
|
150 |
unset( $this->control_types[ $key ] );
|
core/class-kirki-modules.php
CHANGED
@@ -69,6 +69,8 @@ class Kirki_Modules {
|
|
69 |
'field-dependencies' => 'Kirki_Modules_Field_Dependencies',
|
70 |
'custom-sections' => 'Kirki_Modules_Custom_Sections',
|
71 |
'webfonts' => 'Kirki_Modules_Webfonts',
|
|
|
|
|
72 |
)
|
73 |
);
|
74 |
|
69 |
'field-dependencies' => 'Kirki_Modules_Field_Dependencies',
|
70 |
'custom-sections' => 'Kirki_Modules_Custom_Sections',
|
71 |
'webfonts' => 'Kirki_Modules_Webfonts',
|
72 |
+
'webfont-loader' => 'Kirki_Modules_Webfont_Loader',
|
73 |
+
'preset' => 'Kirki_Modules_Preset',
|
74 |
)
|
75 |
);
|
76 |
|
core/class-kirki-sanitize-values.php
CHANGED
@@ -102,7 +102,7 @@ class Kirki_Sanitize_Values {
|
|
102 |
}
|
103 |
|
104 |
// If auto, inherit or initial, return the value.
|
105 |
-
if ( 'auto' === $value || 'initial' === $value || 'inherit' === $value ) {
|
106 |
return $value;
|
107 |
}
|
108 |
|
@@ -121,7 +121,7 @@ class Kirki_Sanitize_Values {
|
|
121 |
$unit_used = '';
|
122 |
|
123 |
// An array of all valid CSS units. Their order was carefully chosen for this evaluation, don't mix it up!!!
|
124 |
-
$units = array( 'rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax' );
|
125 |
foreach ( $units as $unit ) {
|
126 |
if ( false !== strpos( $value, $unit ) ) {
|
127 |
$unit_used = $unit;
|
102 |
}
|
103 |
|
104 |
// If auto, inherit or initial, return the value.
|
105 |
+
if ( 'auto' === $value || 'initial' === $value || 'inherit' === $value || 'normal' === $value ) {
|
106 |
return $value;
|
107 |
}
|
108 |
|
121 |
$unit_used = '';
|
122 |
|
123 |
// An array of all valid CSS units. Their order was carefully chosen for this evaluation, don't mix it up!!!
|
124 |
+
$units = array( 'fr', 'rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax' );
|
125 |
foreach ( $units as $unit ) {
|
126 |
if ( false !== strpos( $value, $unit ) ) {
|
127 |
$unit_used = $unit;
|
core/class-kirki.php
CHANGED
@@ -233,6 +233,11 @@ class Kirki extends Kirki_Init {
|
|
233 |
return;
|
234 |
}
|
235 |
|
|
|
|
|
|
|
|
|
|
|
236 |
$str = str_replace( array( '-', '_' ), ' ', $args['type'] );
|
237 |
$classname = 'Kirki_Field_' . str_replace( ' ', '_', ucwords( $str ) );
|
238 |
if ( class_exists( $classname ) ) {
|
233 |
return;
|
234 |
}
|
235 |
|
236 |
+
// If the field is font-awesome, enqueue the icons on the frontend.
|
237 |
+
if ( class_exists( 'Kirki_Modules_CSS' ) && ( 'fontawesome' === $args['type'] || 'kirki-fontawesome' === $args['type'] ) ) {
|
238 |
+
Kirki_Modules_CSS::add_fontawesome_script();
|
239 |
+
}
|
240 |
+
|
241 |
$str = str_replace( array( '-', '_' ), ' ', $args['type'] );
|
242 |
$classname = 'Kirki_Field_' . str_replace( ' ', '_', ucwords( $str ) );
|
243 |
if ( class_exists( $classname ) ) {
|
field/class-kirki-field-dimension.php
CHANGED
@@ -33,6 +33,6 @@ class Kirki_Field_Dimension extends Kirki_Field {
|
|
33 |
* @return string
|
34 |
*/
|
35 |
public function sanitize( $value ) {
|
36 |
-
return
|
37 |
}
|
38 |
}
|
33 |
* @return string
|
34 |
*/
|
35 |
public function sanitize( $value ) {
|
36 |
+
return sanitize_text_field( $value );
|
37 |
}
|
38 |
}
|
field/class-kirki-field-dimensions.php
CHANGED
@@ -52,7 +52,7 @@ class Kirki_Field_Dimensions extends Kirki_Field {
|
|
52 |
|
53 |
// Sanitize each sub-value separately.
|
54 |
foreach ( $value as $key => $sub_value ) {
|
55 |
-
$value[ $key ] =
|
56 |
}
|
57 |
return $value;
|
58 |
|
52 |
|
53 |
// Sanitize each sub-value separately.
|
54 |
foreach ( $value as $key => $sub_value ) {
|
55 |
+
$value[ $key ] = sanitize_text_field( $sub_value );
|
56 |
}
|
57 |
return $value;
|
58 |
|
field/class-kirki-field-typography.php
CHANGED
@@ -172,25 +172,25 @@ class Kirki_Field_Typography extends Kirki_Field {
|
|
172 |
case 'letter-spacing':
|
173 |
case 'word-spacing':
|
174 |
case 'line-height':
|
175 |
-
$value[ $key ] =
|
176 |
break;
|
177 |
case 'text-align':
|
178 |
-
if ( ! in_array( $val, array( 'inherit', 'left', 'center', 'right', 'justify' ), true ) ) {
|
179 |
-
$value['text-align'] = '
|
180 |
}
|
181 |
break;
|
182 |
case 'text-transform':
|
183 |
-
if ( ! in_array( $val, array( 'none', 'capitalize', 'uppercase', 'lowercase', 'initial', 'inherit' ), true ) ) {
|
184 |
-
$value['text-transform'] = '
|
185 |
}
|
186 |
break;
|
187 |
case 'text-decoration':
|
188 |
-
if ( ! in_array( $val, array( 'none', 'underline', 'overline', 'line-through', 'initial', 'inherit' ), true ) ) {
|
189 |
-
$value['text-transform'] = '
|
190 |
}
|
191 |
break;
|
192 |
case 'color':
|
193 |
-
$value['color'] = ariColor::newColor( $val )->toCSS( 'hex' );
|
194 |
break;
|
195 |
} // End switch().
|
196 |
} // End foreach().
|
172 |
case 'letter-spacing':
|
173 |
case 'word-spacing':
|
174 |
case 'line-height':
|
175 |
+
$value[ $key ] = '' === trim( $value[ $key ] ) ? '' : sanitize_text_field( $val );
|
176 |
break;
|
177 |
case 'text-align':
|
178 |
+
if ( ! in_array( $val, array( '', 'inherit', 'left', 'center', 'right', 'justify' ), true ) ) {
|
179 |
+
$value['text-align'] = '';
|
180 |
}
|
181 |
break;
|
182 |
case 'text-transform':
|
183 |
+
if ( ! in_array( $val, array( '', 'none', 'capitalize', 'uppercase', 'lowercase', 'initial', 'inherit' ), true ) ) {
|
184 |
+
$value['text-transform'] = '';
|
185 |
}
|
186 |
break;
|
187 |
case 'text-decoration':
|
188 |
+
if ( ! in_array( $val, array( ''. 'none', 'underline', 'overline', 'line-through', 'initial', 'inherit' ), true ) ) {
|
189 |
+
$value['text-transform'] = '';
|
190 |
}
|
191 |
break;
|
192 |
case 'color':
|
193 |
+
$value['color'] = '' === $value['color'] ? '' : ariColor::newColor( $val )->toCSS( 'hex' );
|
194 |
break;
|
195 |
} // End switch().
|
196 |
} // End foreach().
|
kirki.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Description: The ultimate WordPress Customizer Toolkit
|
6 |
* Author: Aristeides Stathopoulos
|
7 |
* Author URI: http://aristath.github.io
|
8 |
-
* Version: 3.0.
|
9 |
* Text Domain: kirki
|
10 |
*
|
11 |
* GitHub Plugin URI: aristath/kirki
|
5 |
* Description: The ultimate WordPress Customizer Toolkit
|
6 |
* Author: Aristeides Stathopoulos
|
7 |
* Author URI: http://aristath.github.io
|
8 |
+
* Version: 3.0.26
|
9 |
* Text Domain: kirki
|
10 |
*
|
11 |
* GitHub Plugin URI: aristath/kirki
|
modules/css/class-kirki-css-to-file.php
CHANGED
@@ -114,7 +114,8 @@ class Kirki_CSS_To_File {
|
|
114 |
}
|
115 |
$css = implode( $css, '' );
|
116 |
|
117 |
-
|
|
|
118 |
$css = str_replace( array( "\n", "\t", "\r\n" ), '', $css );
|
119 |
$css = str_replace( array( '{ ', '{ ', '{ ' ), '{', $css );
|
120 |
$css = str_replace( ': ', ':', $css );
|
@@ -122,6 +123,7 @@ class Kirki_CSS_To_File {
|
|
122 |
$css = explode( '}', $css );
|
123 |
$css = array_unique( $css );
|
124 |
$css = implode( $css, '}' );
|
|
|
125 |
|
126 |
// If the folder doesn't exist, create it.
|
127 |
if ( ! file_exists( $this->get_path( 'folder' ) ) ) {
|
114 |
}
|
115 |
$css = implode( $css, '' );
|
116 |
|
117 |
+
/*
|
118 |
+
WIP: Minimize the CSS a bit. Commented-out because of https://github.com/aristath/kirki/issues/1787
|
119 |
$css = str_replace( array( "\n", "\t", "\r\n" ), '', $css );
|
120 |
$css = str_replace( array( '{ ', '{ ', '{ ' ), '{', $css );
|
121 |
$css = str_replace( ': ', ':', $css );
|
123 |
$css = explode( '}', $css );
|
124 |
$css = array_unique( $css );
|
125 |
$css = implode( $css, '}' );
|
126 |
+
*/
|
127 |
|
128 |
// If the folder doesn't exist, create it.
|
129 |
if ( ! file_exists( $this->get_path( 'folder' ) ) ) {
|
modules/css/class-kirki-modules-css.php
CHANGED
@@ -58,6 +58,16 @@ class Kirki_Modules_CSS {
|
|
58 |
*/
|
59 |
protected $css_to_file;
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
/**
|
62 |
* Constructor
|
63 |
*
|
@@ -203,7 +213,8 @@ class Kirki_Modules_CSS {
|
|
203 |
}
|
204 |
$this->processed = true;
|
205 |
}
|
206 |
-
|
|
|
207 |
wp_enqueue_script( 'kirki-fontawesome-font', 'https://use.fontawesome.com/30858dc40a.js', array(), '4.0.7', true );
|
208 |
}
|
209 |
}
|
@@ -292,4 +303,17 @@ class Kirki_Modules_CSS {
|
|
292 |
return Kirki_Modules_CSS_Generator::styles_parse( Kirki_Modules_CSS_Generator::add_prefixes( $css ) );
|
293 |
}
|
294 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
}
|
58 |
*/
|
59 |
protected $css_to_file;
|
60 |
|
61 |
+
/**
|
62 |
+
* Should we enqueue font-awesome?
|
63 |
+
*
|
64 |
+
* @static
|
65 |
+
* @access protected
|
66 |
+
* @since 3.0.26
|
67 |
+
* @var bool
|
68 |
+
*/
|
69 |
+
protected static $enqueue_fa = false;
|
70 |
+
|
71 |
/**
|
72 |
* Constructor
|
73 |
*
|
213 |
}
|
214 |
$this->processed = true;
|
215 |
}
|
216 |
+
|
217 |
+
if ( self::$enqueue_fa && apply_filters( 'kirki_load_fontawesome', true ) ) {
|
218 |
wp_enqueue_script( 'kirki-fontawesome-font', 'https://use.fontawesome.com/30858dc40a.js', array(), '4.0.7', true );
|
219 |
}
|
220 |
}
|
303 |
return Kirki_Modules_CSS_Generator::styles_parse( Kirki_Modules_CSS_Generator::add_prefixes( $css ) );
|
304 |
}
|
305 |
}
|
306 |
+
|
307 |
+
/**
|
308 |
+
* Runs when we're adding a font-awesome field to allow enqueueing the
|
309 |
+
* fontawesome script on the frontend.
|
310 |
+
*
|
311 |
+
* @static
|
312 |
+
* @since 3.0.26
|
313 |
+
* @access public
|
314 |
+
* @return void
|
315 |
+
*/
|
316 |
+
public static function add_fontawesome_script() {
|
317 |
+
self::$enqueue_fa = true;
|
318 |
+
}
|
319 |
}
|
modules/css/class-kirki-output.php
CHANGED
@@ -282,7 +282,9 @@ class Kirki_Output {
|
|
282 |
$this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ][] = $output['prefix'] . $value . $output['units'] . $output['suffix'];
|
283 |
return;
|
284 |
}
|
285 |
-
|
|
|
|
|
286 |
}
|
287 |
|
288 |
/**
|
282 |
$this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ][] = $output['prefix'] . $value . $output['units'] . $output['suffix'];
|
283 |
return;
|
284 |
}
|
285 |
+
if ( is_string( $value ) ) {
|
286 |
+
$this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $output['prefix'] . $this->process_property_value( $output['property'], $value ) . $output['units'] . $output['suffix'];
|
287 |
+
}
|
288 |
}
|
289 |
|
290 |
/**
|
modules/css/field/class-kirki-output-field-background.php
CHANGED
@@ -34,6 +34,12 @@ class Kirki_Output_Field_Background extends Kirki_Output {
|
|
34 |
);
|
35 |
|
36 |
foreach ( array( 'background-image', 'background-color', 'background-repeat', 'background-position', 'background-size', 'background-attachment' ) as $property ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
if ( isset( $value[ $property ] ) && ! empty( $value[ $property ] ) ) {
|
38 |
$this->styles[ $output['media_query'] ][ $output['element'] ][ $property ] = $output['prefix'] . $this->process_property_value( $property, $value[ $property ] ) . $output['suffix'];
|
39 |
}
|
34 |
);
|
35 |
|
36 |
foreach ( array( 'background-image', 'background-color', 'background-repeat', 'background-position', 'background-size', 'background-attachment' ) as $property ) {
|
37 |
+
|
38 |
+
// See https://github.com/aristath/kirki/issues/1808.
|
39 |
+
if ( 'background-color' === $property && ( ! isset( $value['background-image'] ) || empty( $value['background-image'] ) ) ) {
|
40 |
+
$this->styles[ $output['media_query'] ][ $output['element'] ]['background'] = $output['prefix'] . $this->process_property_value( $property, $value[ $property ] ) . $output['suffix'];
|
41 |
+
}
|
42 |
+
|
43 |
if ( isset( $value[ $property ] ) && ! empty( $value[ $property ] ) ) {
|
44 |
$this->styles[ $output['media_query'] ][ $output['element'] ][ $property ] = $output['prefix'] . $this->process_property_value( $property, $value[ $property ] ) . $output['suffix'];
|
45 |
}
|
modules/css/field/class-kirki-output-field-dimensions.php
CHANGED
@@ -37,7 +37,7 @@ class Kirki_Output_Field_Dimensions extends Kirki_Output {
|
|
37 |
return;
|
38 |
}
|
39 |
|
40 |
-
foreach ( $value as $key
|
41 |
|
42 |
$property = ( empty( $output['property'] ) ) ? $key : $output['property'] . '-' . $key;
|
43 |
if ( isset( $output['choice'] ) && $output['property'] ) {
|
37 |
return;
|
38 |
}
|
39 |
|
40 |
+
foreach ( array_keys( $value ) as $key ) {
|
41 |
|
42 |
$property = ( empty( $output['property'] ) ) ? $key : $output['property'] . '-' . $key;
|
43 |
if ( isset( $output['choice'] ) && $output['property'] ) {
|
modules/css/property/class-kirki-output-property-background-position.php
CHANGED
@@ -47,10 +47,10 @@ class Kirki_Output_Property_Background_Position extends Kirki_Output_Property {
|
|
47 |
|
48 |
// If x is not left/center/right, we need to sanitize it.
|
49 |
if ( ! in_array( $x, $x_dimensions, true ) ) {
|
50 |
-
$x =
|
51 |
}
|
52 |
if ( ! in_array( $y, $y_dimensions, true ) ) {
|
53 |
-
$y =
|
54 |
}
|
55 |
$this->value = $x . ' ' . $y;
|
56 |
return;
|
47 |
|
48 |
// If x is not left/center/right, we need to sanitize it.
|
49 |
if ( ! in_array( $x, $x_dimensions, true ) ) {
|
50 |
+
$x = sanitize_text_field( $x );
|
51 |
}
|
52 |
if ( ! in_array( $y, $y_dimensions, true ) ) {
|
53 |
+
$y = sanitize_text_field( $y );
|
54 |
}
|
55 |
$this->value = $x . ' ' . $y;
|
56 |
return;
|
modules/custom-sections/sections.js
CHANGED
@@ -4,7 +4,7 @@ jQuery( document ).ready( function() {
|
|
4 |
|
5 |
// Get the pane element.
|
6 |
var pane = jQuery( '#sub-accordion-section-' + section.id ),
|
7 |
-
|
8 |
|
9 |
// Check if the section is expanded.
|
10 |
if ( sectionLi.hasClass( 'control-section-kirki-expanded' ) ) {
|
@@ -24,16 +24,16 @@ jQuery( document ).ready( function() {
|
|
24 |
( function() {
|
25 |
|
26 |
var _panelEmbed,
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
|
33 |
wp.customize.bind( 'pane-contents-reflowed', function() {
|
34 |
|
35 |
var panels = [],
|
36 |
-
|
37 |
|
38 |
// Reflow Sections.
|
39 |
wp.customize.section.each( function( section ) {
|
@@ -42,7 +42,7 @@ jQuery( document ).ready( function() {
|
|
42 |
return;
|
43 |
}
|
44 |
sections.push( section );
|
45 |
-
});
|
46 |
|
47 |
sections.sort( wp.customize.utils.prioritySort ).reverse();
|
48 |
|
@@ -50,7 +50,7 @@ jQuery( document ).ready( function() {
|
|
50 |
var parentContainer = jQuery( '#sub-accordion-section-' + section.params.section );
|
51 |
|
52 |
parentContainer.children( '.section-meta' ).after( section.headContainer );
|
53 |
-
});
|
54 |
|
55 |
// Reflow Panels.
|
56 |
wp.customize.panel.each( function( panel ) {
|
@@ -58,7 +58,7 @@ jQuery( document ).ready( function() {
|
|
58 |
return;
|
59 |
}
|
60 |
panels.push( panel );
|
61 |
-
});
|
62 |
|
63 |
panels.sort( wp.customize.utils.prioritySort ).reverse();
|
64 |
|
@@ -66,15 +66,15 @@ jQuery( document ).ready( function() {
|
|
66 |
var parentContainer = jQuery( '#sub-accordion-panel-' + panel.params.panel );
|
67 |
|
68 |
parentContainer.children( '.panel-meta' ).after( panel.headContainer );
|
69 |
-
});
|
70 |
-
});
|
71 |
|
72 |
// Extend Panel.
|
73 |
_panelEmbed = wp.customize.Panel.prototype.embed;
|
74 |
_panelIsContextuallyActive = wp.customize.Panel.prototype.isContextuallyActive;
|
75 |
_panelAttachEvents = wp.customize.Panel.prototype.attachEvents;
|
76 |
|
77 |
-
wp.customize.Panel = wp.customize.Panel.extend({
|
78 |
attachEvents: function() {
|
79 |
var panel;
|
80 |
|
@@ -95,7 +95,7 @@ jQuery( document ).ready( function() {
|
|
95 |
} else {
|
96 |
parent.contentContainer.removeClass( 'current-panel-parent' );
|
97 |
}
|
98 |
-
});
|
99 |
|
100 |
panel.container.find( '.customize-panel-back' ).off( 'click keydown' ).on( 'click keydown', function( event ) {
|
101 |
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
|
@@ -106,13 +106,13 @@ jQuery( document ).ready( function() {
|
|
106 |
if ( panel.expanded() ) {
|
107 |
wp.customize.panel( panel.params.panel ).expand();
|
108 |
}
|
109 |
-
});
|
110 |
},
|
111 |
|
112 |
embed: function() {
|
113 |
|
114 |
var panel = this,
|
115 |
-
|
116 |
if ( 'kirki-nested' !== this.params.type || _.isUndefined( this.params.panel ) ) {
|
117 |
_panelEmbed.call( this );
|
118 |
return;
|
@@ -128,8 +128,8 @@ jQuery( document ).ready( function() {
|
|
128 |
isContextuallyActive: function() {
|
129 |
|
130 |
var panel = this,
|
131 |
-
|
132 |
-
|
133 |
|
134 |
if ( 'kirki-nested' !== this.params.type ) {
|
135 |
return _panelIsContextuallyActive.call( this );
|
@@ -147,7 +147,7 @@ jQuery( document ).ready( function() {
|
|
147 |
}
|
148 |
|
149 |
children.push( child );
|
150 |
-
});
|
151 |
|
152 |
children.sort( wp.customize.utils.prioritySort );
|
153 |
|
@@ -155,17 +155,17 @@ jQuery( document ).ready( function() {
|
|
155 |
if ( child.active() && child.isContextuallyActive() ) {
|
156 |
activeCount += 1;
|
157 |
}
|
158 |
-
});
|
159 |
return ( 0 !== activeCount );
|
160 |
}
|
161 |
-
});
|
162 |
|
163 |
// Extend Section.
|
164 |
_sectionEmbed = wp.customize.Section.prototype.embed;
|
165 |
_sectionIsContextuallyActive = wp.customize.Section.prototype.isContextuallyActive;
|
166 |
_sectionAttachEvents = wp.customize.Section.prototype.attachEvents;
|
167 |
|
168 |
-
wp.customize.Section = wp.customize.Section.extend({
|
169 |
attachEvents: function() {
|
170 |
|
171 |
var section = this;
|
@@ -185,7 +185,7 @@ jQuery( document ).ready( function() {
|
|
185 |
} else {
|
186 |
parent.contentContainer.removeClass( 'current-section-parent' );
|
187 |
}
|
188 |
-
});
|
189 |
|
190 |
section.container.find( '.customize-section-back' ).off( 'click keydown' ).on( 'click keydown', function( event ) {
|
191 |
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
|
@@ -195,13 +195,13 @@ jQuery( document ).ready( function() {
|
|
195 |
if ( section.expanded() ) {
|
196 |
wp.customize.section( section.params.section ).expand();
|
197 |
}
|
198 |
-
});
|
199 |
},
|
200 |
|
201 |
embed: function() {
|
202 |
|
203 |
var section = this,
|
204 |
-
|
205 |
|
206 |
if ( 'kirki-nested' !== this.params.type || _.isUndefined( this.params.section ) ) {
|
207 |
_sectionEmbed.call( section );
|
@@ -217,8 +217,8 @@ jQuery( document ).ready( function() {
|
|
217 |
|
218 |
isContextuallyActive: function() {
|
219 |
var section = this,
|
220 |
-
|
221 |
-
|
222 |
if ( 'kirki-nested' !== this.params.type ) {
|
223 |
return _sectionIsContextuallyActive.call( this );
|
224 |
}
|
@@ -234,7 +234,7 @@ jQuery( document ).ready( function() {
|
|
234 |
return;
|
235 |
}
|
236 |
children.push( child );
|
237 |
-
});
|
238 |
|
239 |
children.sort( wp.customize.utils.prioritySort );
|
240 |
|
@@ -248,9 +248,9 @@ jQuery( document ).ready( function() {
|
|
248 |
activeCount += 1;
|
249 |
}
|
250 |
}
|
251 |
-
});
|
252 |
|
253 |
return ( 0 !== activeCount );
|
254 |
}
|
255 |
-
});
|
256 |
-
}
|
4 |
|
5 |
// Get the pane element.
|
6 |
var pane = jQuery( '#sub-accordion-section-' + section.id ),
|
7 |
+
sectionLi = jQuery( '#accordion-section-' + section.id );
|
8 |
|
9 |
// Check if the section is expanded.
|
10 |
if ( sectionLi.hasClass( 'control-section-kirki-expanded' ) ) {
|
24 |
( function() {
|
25 |
|
26 |
var _panelEmbed,
|
27 |
+
_panelIsContextuallyActive,
|
28 |
+
_panelAttachEvents,
|
29 |
+
_sectionEmbed,
|
30 |
+
_sectionIsContextuallyActive,
|
31 |
+
_sectionAttachEvents;
|
32 |
|
33 |
wp.customize.bind( 'pane-contents-reflowed', function() {
|
34 |
|
35 |
var panels = [],
|
36 |
+
sections = [];
|
37 |
|
38 |
// Reflow Sections.
|
39 |
wp.customize.section.each( function( section ) {
|
42 |
return;
|
43 |
}
|
44 |
sections.push( section );
|
45 |
+
} );
|
46 |
|
47 |
sections.sort( wp.customize.utils.prioritySort ).reverse();
|
48 |
|
50 |
var parentContainer = jQuery( '#sub-accordion-section-' + section.params.section );
|
51 |
|
52 |
parentContainer.children( '.section-meta' ).after( section.headContainer );
|
53 |
+
} );
|
54 |
|
55 |
// Reflow Panels.
|
56 |
wp.customize.panel.each( function( panel ) {
|
58 |
return;
|
59 |
}
|
60 |
panels.push( panel );
|
61 |
+
} );
|
62 |
|
63 |
panels.sort( wp.customize.utils.prioritySort ).reverse();
|
64 |
|
66 |
var parentContainer = jQuery( '#sub-accordion-panel-' + panel.params.panel );
|
67 |
|
68 |
parentContainer.children( '.panel-meta' ).after( panel.headContainer );
|
69 |
+
} );
|
70 |
+
} );
|
71 |
|
72 |
// Extend Panel.
|
73 |
_panelEmbed = wp.customize.Panel.prototype.embed;
|
74 |
_panelIsContextuallyActive = wp.customize.Panel.prototype.isContextuallyActive;
|
75 |
_panelAttachEvents = wp.customize.Panel.prototype.attachEvents;
|
76 |
|
77 |
+
wp.customize.Panel = wp.customize.Panel.extend( {
|
78 |
attachEvents: function() {
|
79 |
var panel;
|
80 |
|
95 |
} else {
|
96 |
parent.contentContainer.removeClass( 'current-panel-parent' );
|
97 |
}
|
98 |
+
} );
|
99 |
|
100 |
panel.container.find( '.customize-panel-back' ).off( 'click keydown' ).on( 'click keydown', function( event ) {
|
101 |
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
|
106 |
if ( panel.expanded() ) {
|
107 |
wp.customize.panel( panel.params.panel ).expand();
|
108 |
}
|
109 |
+
} );
|
110 |
},
|
111 |
|
112 |
embed: function() {
|
113 |
|
114 |
var panel = this,
|
115 |
+
parentContainer;
|
116 |
if ( 'kirki-nested' !== this.params.type || _.isUndefined( this.params.panel ) ) {
|
117 |
_panelEmbed.call( this );
|
118 |
return;
|
128 |
isContextuallyActive: function() {
|
129 |
|
130 |
var panel = this,
|
131 |
+
children,
|
132 |
+
activeCount = 0;
|
133 |
|
134 |
if ( 'kirki-nested' !== this.params.type ) {
|
135 |
return _panelIsContextuallyActive.call( this );
|
147 |
}
|
148 |
|
149 |
children.push( child );
|
150 |
+
} );
|
151 |
|
152 |
children.sort( wp.customize.utils.prioritySort );
|
153 |
|
155 |
if ( child.active() && child.isContextuallyActive() ) {
|
156 |
activeCount += 1;
|
157 |
}
|
158 |
+
} );
|
159 |
return ( 0 !== activeCount );
|
160 |
}
|
161 |
+
} );
|
162 |
|
163 |
// Extend Section.
|
164 |
_sectionEmbed = wp.customize.Section.prototype.embed;
|
165 |
_sectionIsContextuallyActive = wp.customize.Section.prototype.isContextuallyActive;
|
166 |
_sectionAttachEvents = wp.customize.Section.prototype.attachEvents;
|
167 |
|
168 |
+
wp.customize.Section = wp.customize.Section.extend( {
|
169 |
attachEvents: function() {
|
170 |
|
171 |
var section = this;
|
185 |
} else {
|
186 |
parent.contentContainer.removeClass( 'current-section-parent' );
|
187 |
}
|
188 |
+
} );
|
189 |
|
190 |
section.container.find( '.customize-section-back' ).off( 'click keydown' ).on( 'click keydown', function( event ) {
|
191 |
if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
|
195 |
if ( section.expanded() ) {
|
196 |
wp.customize.section( section.params.section ).expand();
|
197 |
}
|
198 |
+
} );
|
199 |
},
|
200 |
|
201 |
embed: function() {
|
202 |
|
203 |
var section = this,
|
204 |
+
parentContainer;
|
205 |
|
206 |
if ( 'kirki-nested' !== this.params.type || _.isUndefined( this.params.section ) ) {
|
207 |
_sectionEmbed.call( section );
|
217 |
|
218 |
isContextuallyActive: function() {
|
219 |
var section = this,
|
220 |
+
children,
|
221 |
+
activeCount = 0;
|
222 |
if ( 'kirki-nested' !== this.params.type ) {
|
223 |
return _sectionIsContextuallyActive.call( this );
|
224 |
}
|
234 |
return;
|
235 |
}
|
236 |
children.push( child );
|
237 |
+
} );
|
238 |
|
239 |
children.sort( wp.customize.utils.prioritySort );
|
240 |
|
248 |
activeCount += 1;
|
249 |
}
|
250 |
}
|
251 |
+
} );
|
252 |
|
253 |
return ( 0 !== activeCount );
|
254 |
}
|
255 |
+
} );
|
256 |
+
}( jQuery ) );
|
modules/customizer-branding/branding.js
CHANGED
@@ -11,4 +11,4 @@ jQuery( document ).ready( function() {
|
|
11 |
jQuery( 'div#customize-info > .customize-panel-description' ).replaceWith( '<div class="customize-panel-description">' + kirkiBranding.description + '</div>' );
|
12 |
}
|
13 |
|
14 |
-
});
|
11 |
jQuery( 'div#customize-info > .customize-panel-description' ).replaceWith( '<div class="customize-panel-description">' + kirkiBranding.description + '</div>' );
|
12 |
}
|
13 |
|
14 |
+
} );
|
modules/field-dependencies/field-dependencies.js
CHANGED
@@ -12,9 +12,9 @@ var kirkiDependencies = {
|
|
12 |
_.each( self.listenTo, function( slaves, master ) {
|
13 |
_.each( slaves, function( slave ) {
|
14 |
wp.customize( master, function( setting ) {
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
|
19 |
isDisplayed = function() {
|
20 |
return self.showKirkiControl( wp.customize.control( slave ) );
|
@@ -26,11 +26,11 @@ var kirkiDependencies = {
|
|
26 |
setActiveState();
|
27 |
setting.bind( setActiveState );
|
28 |
control.active.validate = isDisplayed;
|
29 |
-
|
30 |
-
|
31 |
} );
|
32 |
-
});
|
33 |
-
});
|
34 |
},
|
35 |
|
36 |
/**
|
@@ -41,8 +41,17 @@ var kirkiDependencies = {
|
|
41 |
* @returns {bool}
|
42 |
*/
|
43 |
showKirkiControl: function( control ) {
|
44 |
-
var self
|
45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
|
47 |
if ( _.isString( control ) ) {
|
48 |
control = wp.customize.control( control );
|
@@ -54,39 +63,70 @@ var kirkiDependencies = {
|
|
54 |
}
|
55 |
|
56 |
// Loop control requirements.
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
// Tweak for using active callbacks with serialized options instead of theme_mods.
|
61 |
-
if (
|
62 |
-
control.params && // Check if control.params exists.
|
63 |
-
control.params.kirkiOptionType && // Check if option_type exists.
|
64 |
-
'option' === control.params.kirkiOptionType && // We're using options.
|
65 |
-
control.params.kirkiOptionName && // Check if option_name exists.
|
66 |
-
! _.isEmpty( control.params.kirkiOptionName ) && // Check if option_name is not empty.
|
67 |
-
-1 === requirement.setting.indexOf( control.params.kirkiOptionName + '[' ) // Make sure we don't already have the option_name in there.
|
68 |
-
) {
|
69 |
-
requirement.setting = control.params.kirkiOptionName + '[' + requirement.setting + ']';
|
70 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
-
//
|
73 |
-
if (
|
74 |
-
|
75 |
-
return;
|
76 |
}
|
|
|
77 |
|
78 |
-
|
|
|
|
|
79 |
|
80 |
-
|
81 |
-
|
82 |
-
self.
|
83 |
}
|
84 |
|
85 |
-
|
86 |
-
|
|
|
87 |
}
|
88 |
-
|
89 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
},
|
91 |
|
92 |
/**
|
@@ -99,26 +139,42 @@ var kirkiDependencies = {
|
|
99 |
* @returns {bool}
|
100 |
*/
|
101 |
evaluate: function( value1, value2, operator ) {
|
102 |
-
var found
|
103 |
-
result = null;
|
104 |
|
105 |
if ( '===' === operator ) {
|
106 |
-
|
107 |
-
}
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
}
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
}
|
120 |
-
|
121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
if ( _.isArray( value2 ) ) {
|
123 |
_.each( value2, function( value ) {
|
124 |
if ( value == value1 ) { // jshint ignore:line
|
@@ -126,25 +182,26 @@ var kirkiDependencies = {
|
|
126 |
}
|
127 |
} );
|
128 |
return found;
|
129 |
-
}
|
|
|
130 |
if ( ! _.isUndefined( value2[ value1 ] ) ) {
|
131 |
found = true;
|
132 |
}
|
133 |
-
|
134 |
_.each( value2, function( subValue ) {
|
135 |
if ( value1 === subValue ) {
|
136 |
found = true;
|
137 |
}
|
138 |
} );
|
139 |
return found;
|
140 |
-
}
|
141 |
-
|
|
|
|
|
|
|
|
|
142 |
}
|
143 |
}
|
144 |
-
|
145 |
-
return true;
|
146 |
-
}
|
147 |
-
return result;
|
148 |
}
|
149 |
};
|
150 |
|
12 |
_.each( self.listenTo, function( slaves, master ) {
|
13 |
_.each( slaves, function( slave ) {
|
14 |
wp.customize( master, function( setting ) {
|
15 |
+
var setupControl = function( control ) {
|
16 |
+
var setActiveState,
|
17 |
+
isDisplayed;
|
18 |
|
19 |
isDisplayed = function() {
|
20 |
return self.showKirkiControl( wp.customize.control( slave ) );
|
26 |
setActiveState();
|
27 |
setting.bind( setActiveState );
|
28 |
control.active.validate = isDisplayed;
|
29 |
+
};
|
30 |
+
wp.customize.control( slave, setupControl );
|
31 |
} );
|
32 |
+
} );
|
33 |
+
} );
|
34 |
},
|
35 |
|
36 |
/**
|
41 |
* @returns {bool}
|
42 |
*/
|
43 |
showKirkiControl: function( control ) {
|
44 |
+
var self = this,
|
45 |
+
show = true,
|
46 |
+
isOption = (
|
47 |
+
control.params && // Check if control.params exists.
|
48 |
+
control.params.kirkiOptionType && // Check if option_type exists.
|
49 |
+
'option' === control.params.kirkiOptionType && // We're using options.
|
50 |
+
control.params.kirkiOptionName && // Check if option_name exists.
|
51 |
+
! _.isEmpty( control.params.kirkiOptionName ) // Check if option_name is not empty.
|
52 |
+
),
|
53 |
+
i;
|
54 |
+
|
55 |
|
56 |
if ( _.isString( control ) ) {
|
57 |
control = wp.customize.control( control );
|
63 |
}
|
64 |
|
65 |
// Loop control requirements.
|
66 |
+
for ( i = 0; i < control.params.required.length; i++ ) {
|
67 |
+
if ( ! self.checkCondition( control.params.required[ i ], control, isOption, 'AND' ) ) {
|
68 |
+
show = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
+
}
|
71 |
+
return show;
|
72 |
+
},
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Check a condition.
|
76 |
+
*
|
77 |
+
* @param {Object} requirement - The requirement, inherited from showKirkiControl.
|
78 |
+
* @param {Object} control - The control object.
|
79 |
+
* @param {bool} isOption - Whether it's an option or not.
|
80 |
+
* @param {string} relation - Can be one of 'AND' or 'OR'.
|
81 |
+
*/
|
82 |
+
checkCondition: function( requirement, control, isOption, relation ) {
|
83 |
+
var self = this,
|
84 |
+
childRelation = ( 'AND' === relation ) ? 'OR' : 'AND',
|
85 |
+
nestedItems,
|
86 |
+
i;
|
87 |
+
|
88 |
+
// Tweak for using active callbacks with serialized options instead of theme_mods.
|
89 |
+
if ( isOption && requirement.setting ) {
|
90 |
|
91 |
+
// Make sure we don't already have the option_name in there.
|
92 |
+
if ( -1 === requirement.setting.indexOf( control.params.kirkiOptionName + '[' ) ) {
|
93 |
+
requirement.setting = control.params.kirkiOptionName + '[' + requirement.setting + ']';
|
|
|
94 |
}
|
95 |
+
}
|
96 |
|
97 |
+
// If an array of other requirements nested, we need to process them separately.
|
98 |
+
if ( 'undefined' !== typeof requirement[0] && 'undefined' === typeof requirement.setting ) {
|
99 |
+
nestedItems = [];
|
100 |
|
101 |
+
// Loop sub-requirements.
|
102 |
+
for ( i = 0; i < requirement.length; i++ ) {
|
103 |
+
nestedItems.push( self.checkCondition( requirement[ i ], control, isOption, childRelation ) );
|
104 |
}
|
105 |
|
106 |
+
// OR relation. Check that true is part of the array.
|
107 |
+
if ( 'OR' === childRelation ) {
|
108 |
+
return ( -1 !== nestedItems.indexOf( true ) );
|
109 |
}
|
110 |
+
|
111 |
+
// AND relation. Check that false is not part of the array.
|
112 |
+
return ( -1 === nestedItems.indexOf( false ) );
|
113 |
+
}
|
114 |
+
|
115 |
+
// Early exit if setting is not defined.
|
116 |
+
if ( 'undefined' === typeof wp.customize.control( requirement.setting ) ) {
|
117 |
+
return true;
|
118 |
+
}
|
119 |
+
|
120 |
+
self.listenTo[ requirement.setting ] = self.listenTo[ requirement.setting ] || [];
|
121 |
+
if ( -1 === self.listenTo[ requirement.setting ].indexOf( control.id ) ) {
|
122 |
+
self.listenTo[ requirement.setting ].push( control.id );
|
123 |
+
}
|
124 |
+
|
125 |
+
return self.evaluate(
|
126 |
+
requirement.value,
|
127 |
+
wp.customize.control( requirement.setting ).setting._value,
|
128 |
+
requirement.operator
|
129 |
+
);
|
130 |
},
|
131 |
|
132 |
/**
|
139 |
* @returns {bool}
|
140 |
*/
|
141 |
evaluate: function( value1, value2, operator ) {
|
142 |
+
var found = false;
|
|
|
143 |
|
144 |
if ( '===' === operator ) {
|
145 |
+
return value1 === value2;
|
146 |
+
}
|
147 |
+
if ( '==' === operator || '=' === operator || 'equals' === operator || 'equal' === operator ) {
|
148 |
+
return value1 == value2;
|
149 |
+
}
|
150 |
+
if ( '!==' === operator ) {
|
151 |
+
return value1 !== value2;
|
152 |
+
}
|
153 |
+
if ( '!=' === operator || 'not equal' === operator ) {
|
154 |
+
return value1 != value2;
|
155 |
+
}
|
156 |
+
if ( '>=' === operator || 'greater or equal' === operator || 'equal or greater' === operator ) {
|
157 |
+
return value2 >= value1;
|
158 |
+
}
|
159 |
+
if ( '<=' === operator || 'smaller or equal' === operator || 'equal or smaller' === operator ) {
|
160 |
+
return value2 <= value1;
|
161 |
+
}
|
162 |
+
if ( '>' === operator || 'greater' === operator ) {
|
163 |
+
return value2 > value1;
|
164 |
+
}
|
165 |
+
if ( '<' === operator || 'smaller' === operator ) {
|
166 |
+
return value2 < value1;
|
167 |
+
}
|
168 |
+
if ( 'contains' === operator || 'in' === operator ) {
|
169 |
+
if ( _.isArray( value1 ) && _.isArray( value2 ) ) {
|
170 |
+
_.each( value2, function( value ) {
|
171 |
+
if ( value1.includes( value ) ) {
|
172 |
+
found = true;
|
173 |
+
return false;
|
174 |
+
}
|
175 |
+
} );
|
176 |
+
return found;
|
177 |
+
}
|
178 |
if ( _.isArray( value2 ) ) {
|
179 |
_.each( value2, function( value ) {
|
180 |
if ( value == value1 ) { // jshint ignore:line
|
182 |
}
|
183 |
} );
|
184 |
return found;
|
185 |
+
}
|
186 |
+
if ( _.isObject( value2 ) ) {
|
187 |
if ( ! _.isUndefined( value2[ value1 ] ) ) {
|
188 |
found = true;
|
189 |
}
|
|
|
190 |
_.each( value2, function( subValue ) {
|
191 |
if ( value1 === subValue ) {
|
192 |
found = true;
|
193 |
}
|
194 |
} );
|
195 |
return found;
|
196 |
+
}
|
197 |
+
if ( _.isString( value2 ) ) {
|
198 |
+
if ( _.isString( value1 ) ) {
|
199 |
+
return ( -1 < value1.indexOf( value2 ) && -1 < value2.indexOf( value1 ) );
|
200 |
+
}
|
201 |
+
return -1 < value1.indexOf( value2 );
|
202 |
}
|
203 |
}
|
204 |
+
return value1 == value2;
|
|
|
|
|
|
|
205 |
}
|
206 |
};
|
207 |
|
modules/icons/icons.js
CHANGED
@@ -27,4 +27,4 @@ jQuery( document ).ready( function() {
|
|
27 |
|
28 |
}
|
29 |
|
30 |
-
});
|
27 |
|
28 |
}
|
29 |
|
30 |
+
} );
|
modules/postmessage/class-kirki-modules-postmessage.php
CHANGED
@@ -411,7 +411,7 @@ class Kirki_Modules_PostMessage {
|
|
411 |
if ( isset( $args['type'] ) ) {
|
412 |
switch ( $args['type'] ) {
|
413 |
case 'kirki-typography':
|
414 |
-
$script .= 'fontFamily=(_.isUndefined(newval[\'font-family\']))?\'\':newval[\'font-family\'];variant=(_.isUndefined(newval.variant))?\'400\':newval.variant;fontSize=(_.isUndefined(newval[\'font-size\']))?\'\':newval[\'font-size\'];lineHeight=(_.isUndefined(newval[\'line-height\']))?\'\':newval[\'line-height\'];letterSpacing=(_.isUndefined(newval[\'letter-spacing\']))?\'\':newval[\'letter-spacing\'];wordSpacing=(_.isUndefined(newval[\'word-spacing\']))?\'\':newval[\'word-spacing\'];textAlign=(_.isUndefined(newval[\'text-align\']))?\'\':newval[\'text-align\'];textTransform=(_.isUndefined(newval[\'text-transform\']))?\'\':newval[\'text-transform\'];textDecoration=(_.isUndefined(newval[\'text-decoration\']))?\'\':newval[\'text-decoration\'];color=(_.isUndefined(newval.color))?\'\':newval.color;fw=(!_.isString(newval.variant))?\'400\':newval.variant.match(/\d/g);fontWeight=(!_.isObject(fw))?400:fw.join(\'\');fontStyle=(
|
415 |
break;
|
416 |
}
|
417 |
}
|
411 |
if ( isset( $args['type'] ) ) {
|
412 |
switch ( $args['type'] ) {
|
413 |
case 'kirki-typography':
|
414 |
+
$script .= 'fontFamily=(_.isUndefined(newval[\'font-family\']))?\'\':newval[\'font-family\'];variant=(_.isUndefined(newval.variant))?\'400\':newval.variant;fontSize=(_.isUndefined(newval[\'font-size\']))?\'\':newval[\'font-size\'];lineHeight=(_.isUndefined(newval[\'line-height\']))?\'\':newval[\'line-height\'];letterSpacing=(_.isUndefined(newval[\'letter-spacing\']))?\'\':newval[\'letter-spacing\'];wordSpacing=(_.isUndefined(newval[\'word-spacing\']))?\'\':newval[\'word-spacing\'];textAlign=(_.isUndefined(newval[\'text-align\']))?\'\':newval[\'text-align\'];textTransform=(_.isUndefined(newval[\'text-transform\']))?\'\':newval[\'text-transform\'];textDecoration=(_.isUndefined(newval[\'text-decoration\']))?\'\':newval[\'text-decoration\'];color=(_.isUndefined(newval.color))?\'\':newval.color;fw=(!_.isString(newval.variant))?\'400\':newval.variant.match(/\d/g);fontWeight=(!_.isObject(fw))?400:fw.join(\'\');fontStyle=(variant&&-1!==variant.indexOf(\'italic\'))?\'italic\':\'normal\';css=\'\';';
|
415 |
break;
|
416 |
}
|
417 |
}
|
modules/preset/class-kirki-modules-preset.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Automatic preset scripts calculation for Kirki controls.
|
4 |
+
*
|
5 |
+
* @package Kirki
|
6 |
+
* @category Modules
|
7 |
+
* @author Aristeides Stathopoulos
|
8 |
+
* @copyright Copyright (c) 2017, Aristeides Stathopoulos
|
9 |
+
* @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
|
10 |
+
* @since 3.0.26
|
11 |
+
*/
|
12 |
+
|
13 |
+
// Exit if accessed directly.
|
14 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
15 |
+
exit;
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Adds styles to the customizer.
|
20 |
+
*/
|
21 |
+
class Kirki_Modules_Preset {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* The object instance.
|
25 |
+
*
|
26 |
+
* @static
|
27 |
+
* @access private
|
28 |
+
* @since 3.0.26
|
29 |
+
* @var object
|
30 |
+
*/
|
31 |
+
private static $instance;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Constructor.
|
35 |
+
*
|
36 |
+
* @access protected
|
37 |
+
* @since 3.0.26
|
38 |
+
*/
|
39 |
+
protected function __construct() {
|
40 |
+
add_action( 'customize_controls_print_footer_scripts', array( $this, 'customize_controls_print_footer_scripts' ) );
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Gets an instance of this object.
|
45 |
+
* Prevents duplicate instances which avoid artefacts and improves performance.
|
46 |
+
*
|
47 |
+
* @static
|
48 |
+
* @access public
|
49 |
+
* @since 3.0.26
|
50 |
+
* @return object
|
51 |
+
*/
|
52 |
+
public static function get_instance() {
|
53 |
+
if ( ! self::$instance ) {
|
54 |
+
self::$instance = new self();
|
55 |
+
}
|
56 |
+
return self::$instance;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Enqueue scripts.
|
61 |
+
*
|
62 |
+
* @access public
|
63 |
+
* @since 3.0.26
|
64 |
+
*/
|
65 |
+
public function customize_controls_print_footer_scripts() {
|
66 |
+
wp_enqueue_script( 'kirki-preset', trailingslashit( Kirki::$url ) . 'modules/preset/preset.js', array( 'jquery' ), KIRKI_VERSION );
|
67 |
+
}
|
68 |
+
}
|
modules/preset/preset.js
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* global kirkiSetSettingValue */
|
2 |
+
jQuery( document ).ready( function() {
|
3 |
+
|
4 |
+
// Loop Controls.
|
5 |
+
wp.customize.control.each( function( control ) {
|
6 |
+
|
7 |
+
// Check if we have a preset defined.
|
8 |
+
if ( control.params && control.params.preset && ! _.isEmpty( control.params.preset ) ) {
|
9 |
+
wp.customize( control.id, function( value ) {
|
10 |
+
|
11 |
+
// Listen to value changes.
|
12 |
+
value.bind( function( to ) {
|
13 |
+
|
14 |
+
// Loop preset definitions.
|
15 |
+
_.each( control.params.preset, function( preset, valueToListen ) {
|
16 |
+
|
17 |
+
// Check if the value set want is the same as the one we're looking for.
|
18 |
+
if ( valueToListen === to ) {
|
19 |
+
|
20 |
+
// Loop settings defined inside the preset.
|
21 |
+
_.each( preset.settings, function( controlValue, controlID ) {
|
22 |
+
|
23 |
+
// Set the value.
|
24 |
+
kirkiSetSettingValue.set( controlID, controlValue );
|
25 |
+
} );
|
26 |
+
}
|
27 |
+
} );
|
28 |
+
} );
|
29 |
+
} );
|
30 |
+
}
|
31 |
+
} );
|
32 |
+
} );
|
modules/tooltips/tooltip.js
CHANGED
@@ -4,8 +4,8 @@ jQuery( document ).ready( function() {
|
|
4 |
function kirkiTooltipAdd( control ) {
|
5 |
_.each( kirkiTooltips, function( tooltip ) {
|
6 |
let trigger,
|
7 |
-
|
8 |
-
|
9 |
|
10 |
if ( tooltip.id !== control.id ) {
|
11 |
return;
|
@@ -25,8 +25,8 @@ jQuery( document ).ready( function() {
|
|
25 |
// Handle onclick events.
|
26 |
jQuery( '.tooltip-trigger[data-setting="' + tooltip.id + '"]' ).on( 'click', function() {
|
27 |
jQuery( '.tooltip-content[data-setting="' + tooltip.id + '"]' ).toggleClass( 'hidden' );
|
28 |
-
});
|
29 |
-
});
|
30 |
|
31 |
// Close tooltips if we click anywhere else.
|
32 |
jQuery( document ).mouseup( function( e ) {
|
@@ -35,8 +35,8 @@ jQuery( document ).ready( function() {
|
|
35 |
if ( ! jQuery( '.tooltip-content' ).hasClass( 'hidden' ) ) {
|
36 |
jQuery( '.tooltip-content' ).addClass( 'hidden' );
|
37 |
}
|
38 |
-
|
39 |
-
});
|
40 |
}
|
41 |
|
42 |
wp.customize.control.each( function( control ) {
|
@@ -51,5 +51,5 @@ jQuery( document ).ready( function() {
|
|
51 |
} );
|
52 |
}
|
53 |
} );
|
54 |
-
});
|
55 |
} );
|
4 |
function kirkiTooltipAdd( control ) {
|
5 |
_.each( kirkiTooltips, function( tooltip ) {
|
6 |
let trigger,
|
7 |
+
controlID,
|
8 |
+
content;
|
9 |
|
10 |
if ( tooltip.id !== control.id ) {
|
11 |
return;
|
25 |
// Handle onclick events.
|
26 |
jQuery( '.tooltip-trigger[data-setting="' + tooltip.id + '"]' ).on( 'click', function() {
|
27 |
jQuery( '.tooltip-content[data-setting="' + tooltip.id + '"]' ).toggleClass( 'hidden' );
|
28 |
+
} );
|
29 |
+
} );
|
30 |
|
31 |
// Close tooltips if we click anywhere else.
|
32 |
jQuery( document ).mouseup( function( e ) {
|
35 |
if ( ! jQuery( '.tooltip-content' ).hasClass( 'hidden' ) ) {
|
36 |
jQuery( '.tooltip-content' ).addClass( 'hidden' );
|
37 |
}
|
38 |
+
}
|
39 |
+
} );
|
40 |
}
|
41 |
|
42 |
wp.customize.control.each( function( control ) {
|
51 |
} );
|
52 |
}
|
53 |
} );
|
54 |
+
} );
|
55 |
} );
|
modules/webfont-loader/class-kirki-modules-webfont-loader.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WebFont-Loader Module.
|
4 |
+
*
|
5 |
+
* @see https://github.com/typekit/webfontloader
|
6 |
+
* @package Kirki
|
7 |
+
* @category Modules
|
8 |
+
* @author Aristeides Stathopoulos
|
9 |
+
* @copyright Copyright (c) 2017, Aristeides Stathopoulos
|
10 |
+
* @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
|
11 |
+
* @since 3.0.26
|
12 |
+
*/
|
13 |
+
|
14 |
+
// Exit if accessed directly.
|
15 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
16 |
+
exit;
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Adds script for tooltips.
|
21 |
+
*/
|
22 |
+
class Kirki_Modules_Webfont_Loader {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* The object instance.
|
26 |
+
*
|
27 |
+
* @static
|
28 |
+
* @access private
|
29 |
+
* @since 3.0.26
|
30 |
+
* @var object
|
31 |
+
*/
|
32 |
+
private static $instance;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Only load the webfont script if this is true.
|
36 |
+
*
|
37 |
+
* @static
|
38 |
+
* @access public
|
39 |
+
* @since 3.0.26
|
40 |
+
* @var bool
|
41 |
+
*/
|
42 |
+
public static $load = false;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* The class constructor
|
46 |
+
*
|
47 |
+
* @access protected
|
48 |
+
* @since 3.0.26
|
49 |
+
*/
|
50 |
+
protected function __construct() {
|
51 |
+
add_action( 'wp_head', array( $this, 'enqueue_scripts' ), 20 );
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Gets an instance of this object.
|
56 |
+
* Prevents duplicate instances which avoid artefacts and improves performance.
|
57 |
+
*
|
58 |
+
* @static
|
59 |
+
* @access public
|
60 |
+
* @since 3.0.26
|
61 |
+
* @return object
|
62 |
+
*/
|
63 |
+
public static function get_instance() {
|
64 |
+
if ( ! self::$instance ) {
|
65 |
+
self::$instance = new self();
|
66 |
+
}
|
67 |
+
return self::$instance;
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Enqueue scripts.
|
72 |
+
*
|
73 |
+
* @access public
|
74 |
+
* @since 3.0.26
|
75 |
+
* @return void
|
76 |
+
*/
|
77 |
+
public function enqueue_scripts() {
|
78 |
+
global $wp_customize;
|
79 |
+
if ( self::$load || $wp_customize || is_customize_preview() ) {
|
80 |
+
wp_enqueue_script( 'webfont-loader', trailingslashit( Kirki::$url ) . 'modules/webfont-loader/vendor-typekit/webfontloader.js', array(), '3.0.28', true );
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
modules/webfont-loader/vendor-typekit/src/closure.js
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
/* Web Font Loader v{{version}} - (c) Adobe Systems, Google. License: Apache 2.0 */
|
2 |
+
(function(){{{source}}}());
|
modules/webfont-loader/vendor-typekit/src/core/cssclassname.js
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.CssClassName');
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Handles sanitization and construction of css class names.
|
5 |
+
* @param {string=} opt_joinChar The character to join parts of the name on.
|
6 |
+
* Defaults to '-'.
|
7 |
+
* @constructor
|
8 |
+
*/
|
9 |
+
webfont.CssClassName = function(opt_joinChar) {
|
10 |
+
/** @type {string} */
|
11 |
+
this.joinChar_ = opt_joinChar || webfont.CssClassName.DEFAULT_JOIN_CHAR;
|
12 |
+
};
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @const
|
16 |
+
* @type {string}
|
17 |
+
*/
|
18 |
+
webfont.CssClassName.DEFAULT_JOIN_CHAR = '-';
|
19 |
+
|
20 |
+
goog.scope(function () {
|
21 |
+
var CssClassName = webfont.CssClassName;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Sanitizes a string for use as a css class name. Removes non-word and
|
25 |
+
* underscore characters.
|
26 |
+
* @param {string} name The string.
|
27 |
+
* @return {string} The sanitized string.
|
28 |
+
*/
|
29 |
+
CssClassName.prototype.sanitize = function(name) {
|
30 |
+
return name.replace(/[\W_]+/g, '').toLowerCase();
|
31 |
+
};
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Builds a complete css class name given a variable number of parts.
|
35 |
+
* Sanitizes, then joins the parts together.
|
36 |
+
* @param {...string} var_args The parts to join.
|
37 |
+
* @return {string} The sanitized and joined string.
|
38 |
+
*/
|
39 |
+
CssClassName.prototype.build = function(var_args) {
|
40 |
+
var parts = []
|
41 |
+
for (var i = 0; i < arguments.length; i++) {
|
42 |
+
parts.push(this.sanitize(arguments[i]));
|
43 |
+
}
|
44 |
+
return parts.join(this.joinChar_);
|
45 |
+
};
|
46 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/domhelper.js
ADDED
@@ -0,0 +1,405 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.DomHelper');
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Handles common DOM manipulation tasks. The aim of this library is to cover
|
5 |
+
* the needs of typical font loading. Not more, not less.
|
6 |
+
* @param {Window} mainWindow The main window webfontloader.js is loaded in.
|
7 |
+
* @param {Window=} opt_loadWindow The window we'll load the font into. By
|
8 |
+
* default, the main window is used.
|
9 |
+
* @constructor
|
10 |
+
*/
|
11 |
+
webfont.DomHelper = function(mainWindow, opt_loadWindow) {
|
12 |
+
this.mainWindow_ = mainWindow;
|
13 |
+
this.loadWindow_ = opt_loadWindow || mainWindow;
|
14 |
+
|
15 |
+
/** @type {string} */
|
16 |
+
this.protocol_;
|
17 |
+
|
18 |
+
/** @type {Document} */
|
19 |
+
this.document_ = this.loadWindow_.document;
|
20 |
+
};
|
21 |
+
|
22 |
+
goog.scope(function () {
|
23 |
+
var DomHelper = webfont.DomHelper;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* The NativeFontWatchRunnner depends on the correct and reliable
|
27 |
+
* |onload| event, and browsers with the native font loading API
|
28 |
+
* have reliable @onload support as far as we know. So we use the
|
29 |
+
* event for such a case and unconditionally invokes the callback
|
30 |
+
* otherwise.
|
31 |
+
*
|
32 |
+
* @const
|
33 |
+
* @type {boolean}
|
34 |
+
*/
|
35 |
+
DomHelper.CAN_WAIT_STYLESHEET = !!window['FontFace'];
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Creates an element.
|
39 |
+
* @param {string} elem The element type.
|
40 |
+
* @param {Object=} opt_attr A hash of attribute key/value pairs.
|
41 |
+
* @param {string=} opt_innerHtml Contents of the element.
|
42 |
+
* @return {Element} the new element.
|
43 |
+
*/
|
44 |
+
DomHelper.prototype.createElement = function(elem, opt_attr,
|
45 |
+
opt_innerHtml) {
|
46 |
+
var domElement = this.document_.createElement(elem);
|
47 |
+
|
48 |
+
if (opt_attr) {
|
49 |
+
for (var attr in opt_attr) {
|
50 |
+
// protect against native prototype augmentations
|
51 |
+
if (opt_attr.hasOwnProperty(attr)) {
|
52 |
+
if (attr == "style") {
|
53 |
+
this.setStyle(domElement, opt_attr[attr]);
|
54 |
+
} else {
|
55 |
+
domElement.setAttribute(attr, opt_attr[attr]);
|
56 |
+
}
|
57 |
+
}
|
58 |
+
}
|
59 |
+
}
|
60 |
+
if (opt_innerHtml) {
|
61 |
+
domElement.appendChild(this.document_.createTextNode(opt_innerHtml));
|
62 |
+
}
|
63 |
+
return domElement;
|
64 |
+
};
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Inserts an element into the document. This is intended for unambiguous
|
68 |
+
* elements such as html, body, head.
|
69 |
+
* @param {string} tagName The element name.
|
70 |
+
* @param {Element} e The element to append.
|
71 |
+
* @return {boolean} True if the element was inserted.
|
72 |
+
*/
|
73 |
+
DomHelper.prototype.insertInto = function(tagName, e) {
|
74 |
+
var t = this.document_.getElementsByTagName(tagName)[0];
|
75 |
+
|
76 |
+
if (!t) { // opera allows documents without a head
|
77 |
+
t = document.documentElement;
|
78 |
+
}
|
79 |
+
|
80 |
+
// This is safer than appendChild in IE. appendChild causes random
|
81 |
+
// JS errors in IE. Sometimes errors in other JS exectution, sometimes
|
82 |
+
// complete 'This page cannot be displayed' errors. For our purposes,
|
83 |
+
// it's equivalent because we don't need to insert at any specific
|
84 |
+
// location.
|
85 |
+
t.insertBefore(e, t.lastChild);
|
86 |
+
return true;
|
87 |
+
};
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Calls a function when the body tag exists.
|
91 |
+
* @param {function()} callback The function to call.
|
92 |
+
*/
|
93 |
+
DomHelper.prototype.whenBodyExists = function(callback) {
|
94 |
+
var that = this;
|
95 |
+
|
96 |
+
if (that.document_.body) {
|
97 |
+
callback();
|
98 |
+
} else {
|
99 |
+
if (that.document_.addEventListener) {
|
100 |
+
that.document_.addEventListener('DOMContentLoaded', callback);
|
101 |
+
} else {
|
102 |
+
that.document_.attachEvent('onreadystatechange', function () {
|
103 |
+
if (that.document_.readyState == 'interactive' || that.document_.readyState == 'complete') {
|
104 |
+
callback();
|
105 |
+
}
|
106 |
+
});
|
107 |
+
}
|
108 |
+
}
|
109 |
+
};
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Removes an element from the DOM.
|
113 |
+
* @param {Element} node The element to remove.
|
114 |
+
* @return {boolean} True if the element was removed.
|
115 |
+
*/
|
116 |
+
DomHelper.prototype.removeElement = function(node) {
|
117 |
+
if (node.parentNode) {
|
118 |
+
node.parentNode.removeChild(node);
|
119 |
+
return true;
|
120 |
+
}
|
121 |
+
return false;
|
122 |
+
};
|
123 |
+
|
124 |
+
/**
|
125 |
+
* @deprecated Use updateClassName().
|
126 |
+
*
|
127 |
+
* Appends a name to an element's class attribute.
|
128 |
+
* @param {Element} e The element.
|
129 |
+
* @param {string} name The class name to add.
|
130 |
+
*/
|
131 |
+
DomHelper.prototype.appendClassName = function(e, name) {
|
132 |
+
this.updateClassName(e, [name]);
|
133 |
+
};
|
134 |
+
|
135 |
+
/**
|
136 |
+
* @deprecated Use updateClassName().
|
137 |
+
*
|
138 |
+
* Removes a name to an element's class attribute.
|
139 |
+
* @param {Element} e The element.
|
140 |
+
* @param {string} name The class name to remove.
|
141 |
+
*/
|
142 |
+
DomHelper.prototype.removeClassName = function(e, name) {
|
143 |
+
this.updateClassName(e, null, [name]);
|
144 |
+
};
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Updates an element's class attribute in a single change. This
|
148 |
+
* allows multiple updates in a single class name change so there
|
149 |
+
* is no chance for a browser to relayout in between changes.
|
150 |
+
*
|
151 |
+
* @param {Element} e The element.
|
152 |
+
* @param {Array.<string>=} opt_add List of class names to add.
|
153 |
+
* @param {Array.<string>=} opt_remove List of class names to remove.
|
154 |
+
*/
|
155 |
+
DomHelper.prototype.updateClassName = function (e, opt_add, opt_remove) {
|
156 |
+
var add = opt_add || [],
|
157 |
+
remove = opt_remove || [];
|
158 |
+
|
159 |
+
var classes = e.className.split(/\s+/);
|
160 |
+
|
161 |
+
for (var i = 0; i < add.length; i += 1) {
|
162 |
+
var found = false;
|
163 |
+
|
164 |
+
for (var j = 0; j < classes.length; j += 1) {
|
165 |
+
if (add[i] === classes[j]) {
|
166 |
+
found = true;
|
167 |
+
break;
|
168 |
+
}
|
169 |
+
}
|
170 |
+
|
171 |
+
if (!found) {
|
172 |
+
classes.push(add[i]);
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
var remainingClasses = [];
|
177 |
+
|
178 |
+
for (var i = 0; i < classes.length; i += 1) {
|
179 |
+
var found = false;
|
180 |
+
|
181 |
+
for (var j = 0; j < remove.length; j += 1) {
|
182 |
+
if (classes[i] === remove[j]) {
|
183 |
+
found = true;
|
184 |
+
break;
|
185 |
+
}
|
186 |
+
}
|
187 |
+
|
188 |
+
if (!found) {
|
189 |
+
remainingClasses.push(classes[i]);
|
190 |
+
}
|
191 |
+
}
|
192 |
+
|
193 |
+
e.className = remainingClasses.join(' ')
|
194 |
+
.replace(/\s+/g, ' ')
|
195 |
+
.replace(/^\s+|\s+$/, '');
|
196 |
+
};
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Returns true if an element has a given class name and false otherwise.
|
200 |
+
* @param {Element} e The element.
|
201 |
+
* @param {string} name The class name to check for.
|
202 |
+
* @return {boolean} Whether or not the element has this class name.
|
203 |
+
*/
|
204 |
+
DomHelper.prototype.hasClassName = function(e, name) {
|
205 |
+
var classes = e.className.split(/\s+/);
|
206 |
+
for (var i = 0, len = classes.length; i < len; i++) {
|
207 |
+
if (classes[i] == name) {
|
208 |
+
return true;
|
209 |
+
}
|
210 |
+
}
|
211 |
+
return false;
|
212 |
+
};
|
213 |
+
|
214 |
+
/**
|
215 |
+
* Sets the style attribute on an element.
|
216 |
+
* @param {Element} e The element.
|
217 |
+
* @param {string} styleString The style string.
|
218 |
+
*/
|
219 |
+
DomHelper.prototype.setStyle = function(e, styleString) {
|
220 |
+
e.style.cssText = styleString;
|
221 |
+
};
|
222 |
+
|
223 |
+
/**
|
224 |
+
* @return {Window} The main window webfontloader.js is loaded in (for config).
|
225 |
+
*/
|
226 |
+
DomHelper.prototype.getMainWindow = function() {
|
227 |
+
return this.mainWindow_;
|
228 |
+
};
|
229 |
+
|
230 |
+
/**
|
231 |
+
* @return {Window} The window that we're loading the font(s) into.
|
232 |
+
*/
|
233 |
+
DomHelper.prototype.getLoadWindow = function() {
|
234 |
+
return this.loadWindow_;
|
235 |
+
};
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Returns the hostname of the current document.
|
239 |
+
* @return {string} hostname.
|
240 |
+
*/
|
241 |
+
DomHelper.prototype.getHostName = function() {
|
242 |
+
return this.getLoadWindow().location.hostname || this.getMainWindow().location.hostname;
|
243 |
+
};
|
244 |
+
|
245 |
+
/**
|
246 |
+
* Creates a style element.
|
247 |
+
* @param {string} css Contents of the style element.
|
248 |
+
* @return {Element} a DOM element.
|
249 |
+
*/
|
250 |
+
DomHelper.prototype.createStyle = function(css) {
|
251 |
+
var e = this.createElement('style');
|
252 |
+
|
253 |
+
e.setAttribute('type', 'text/css');
|
254 |
+
if (e.styleSheet) { // IE
|
255 |
+
e.styleSheet.cssText = css;
|
256 |
+
} else {
|
257 |
+
e.appendChild(document.createTextNode(css));
|
258 |
+
}
|
259 |
+
return e;
|
260 |
+
};
|
261 |
+
|
262 |
+
/**
|
263 |
+
* Loads an external stylesheet.
|
264 |
+
*
|
265 |
+
* @param {string} href the URL of the stylesheet
|
266 |
+
* @param {function(Error)=} opt_callback Called when the stylesheet has loaded or failed to
|
267 |
+
* load. Note that the callback is *NOT* guaranteed to be called in all browsers. The first
|
268 |
+
* argument to the callback is an error object that is falsy when there are no errors and
|
269 |
+
* truthy when there are.
|
270 |
+
* @param {boolean=} opt_async True if the stylesheet should be loaded asynchronously. Defaults to false.
|
271 |
+
* @return {Element} The link element
|
272 |
+
*/
|
273 |
+
DomHelper.prototype.loadStylesheet = function (href, opt_callback, opt_async) {
|
274 |
+
var link = this.createElement('link', {
|
275 |
+
'rel': 'stylesheet',
|
276 |
+
'href': href,
|
277 |
+
'media': (opt_async ? 'only x' : 'all')
|
278 |
+
});
|
279 |
+
|
280 |
+
var sheets = this.document_.styleSheets,
|
281 |
+
eventFired = false,
|
282 |
+
asyncResolved = !opt_async,
|
283 |
+
callbackArg = null,
|
284 |
+
callback = opt_callback || null;
|
285 |
+
|
286 |
+
function mayInvokeCallback() {
|
287 |
+
if (callback && eventFired && asyncResolved) {
|
288 |
+
callback(callbackArg);
|
289 |
+
callback = null;
|
290 |
+
}
|
291 |
+
}
|
292 |
+
|
293 |
+
if (DomHelper.CAN_WAIT_STYLESHEET) {
|
294 |
+
link.onload = function () {
|
295 |
+
eventFired = true;
|
296 |
+
mayInvokeCallback();
|
297 |
+
};
|
298 |
+
|
299 |
+
link.onerror = function () {
|
300 |
+
eventFired = true;
|
301 |
+
callbackArg = new Error('Stylesheet failed to load');
|
302 |
+
mayInvokeCallback();
|
303 |
+
};
|
304 |
+
} else {
|
305 |
+
// Some callers expect opt_callback being called asynchronously.
|
306 |
+
setTimeout(function () {
|
307 |
+
eventFired = true;
|
308 |
+
mayInvokeCallback();
|
309 |
+
}, 0);
|
310 |
+
}
|
311 |
+
|
312 |
+
function onStylesheetAvailable(callback) {
|
313 |
+
for (var i = 0; i < sheets.length; i++) {
|
314 |
+
if (sheets[i].href && sheets[i].href.indexOf(href) !== -1) {
|
315 |
+
return callback();
|
316 |
+
}
|
317 |
+
}
|
318 |
+
|
319 |
+
setTimeout(function () {
|
320 |
+
onStylesheetAvailable(callback);
|
321 |
+
}, 0);
|
322 |
+
}
|
323 |
+
|
324 |
+
function onMediaAvailable(callback) {
|
325 |
+
for (var i = 0; i < sheets.length; i++) {
|
326 |
+
if (sheets[i].href && sheets[i].href.indexOf(href) !== -1 && sheets[i].media) {
|
327 |
+
/**
|
328 |
+
* @type {string|MediaList|null}
|
329 |
+
*/
|
330 |
+
var media = sheets[i].media;
|
331 |
+
|
332 |
+
if (media === "all" || (media.mediaText && media.mediaText === "all")) {
|
333 |
+
return callback();
|
334 |
+
}
|
335 |
+
}
|
336 |
+
}
|
337 |
+
|
338 |
+
setTimeout(function () {
|
339 |
+
onMediaAvailable(callback);
|
340 |
+
}, 0);
|
341 |
+
}
|
342 |
+
|
343 |
+
this.insertInto('head', link);
|
344 |
+
|
345 |
+
if (opt_async) {
|
346 |
+
onStylesheetAvailable(function () {
|
347 |
+
link.media = "all";
|
348 |
+
// The media type change doesn't take effect immediately on Chrome, so
|
349 |
+
// we'll query the media attribute on the stylesheet until it changes
|
350 |
+
// to "all".
|
351 |
+
onMediaAvailable(function () {
|
352 |
+
asyncResolved = true;
|
353 |
+
mayInvokeCallback();
|
354 |
+
});
|
355 |
+
});
|
356 |
+
}
|
357 |
+
|
358 |
+
return link;
|
359 |
+
};
|
360 |
+
|
361 |
+
/**
|
362 |
+
* Loads an external script file.
|
363 |
+
* @param {string} src URL of the script.
|
364 |
+
* @param {function(Error)=} opt_callback callback when the script has loaded. The first argument to
|
365 |
+
* the callback is an error object that is falsy when there are no errors and truthy when there are.
|
366 |
+
* @param {number=} opt_timeout The number of milliseconds after which the callback will be called
|
367 |
+
* with a timeout error. Defaults to 5 seconds.
|
368 |
+
* @return {Element} The script element
|
369 |
+
*/
|
370 |
+
DomHelper.prototype.loadScript = function(src, opt_callback, opt_timeout) {
|
371 |
+
var head = this.document_.getElementsByTagName('head')[0];
|
372 |
+
|
373 |
+
if (head) {
|
374 |
+
var script = this.createElement('script', {
|
375 |
+
'src': src
|
376 |
+
});
|
377 |
+
var done = false;
|
378 |
+
script.onload = script.onreadystatechange = function() {
|
379 |
+
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
|
380 |
+
done = true;
|
381 |
+
if (opt_callback) {
|
382 |
+
opt_callback(null);
|
383 |
+
}
|
384 |
+
script.onload = script.onreadystatechange = null;
|
385 |
+
// Avoid a bizarre issue with unclosed <base> tag in IE6 - http://blog.dotsmart.net/2008/04/
|
386 |
+
if (script.parentNode.tagName == 'HEAD') head.removeChild(script);
|
387 |
+
}
|
388 |
+
};
|
389 |
+
head.appendChild(script);
|
390 |
+
|
391 |
+
setTimeout(function () {
|
392 |
+
if (!done) {
|
393 |
+
done = true;
|
394 |
+
if (opt_callback) {
|
395 |
+
opt_callback(new Error('Script load timeout'));
|
396 |
+
}
|
397 |
+
}
|
398 |
+
}, opt_timeout || 5000);
|
399 |
+
|
400 |
+
return script;
|
401 |
+
}
|
402 |
+
|
403 |
+
return null;
|
404 |
+
};
|
405 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/eventdispatcher.js
ADDED
@@ -0,0 +1,195 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.EventDispatcher');
|
2 |
+
|
3 |
+
goog.require('webfont.CssClassName');
|
4 |
+
|
5 |
+
/**
|
6 |
+
* A class to dispatch events and manage the event class names on an html
|
7 |
+
* element that represent the current state of fonts on the page. Active class
|
8 |
+
* names always overwrite inactive class names of the same type, while loading
|
9 |
+
* class names may be present whenever a font is loading (regardless of if an
|
10 |
+
* associated active or inactive class name is also present).
|
11 |
+
*
|
12 |
+
* @param {webfont.DomHelper} domHelper
|
13 |
+
* @param {Object} config
|
14 |
+
* @constructor
|
15 |
+
*/
|
16 |
+
webfont.EventDispatcher = function(domHelper, config) {
|
17 |
+
this.domHelper_ = domHelper;
|
18 |
+
this.htmlElement_ = domHelper.getLoadWindow().document.documentElement;
|
19 |
+
this.callbacks_ = config;
|
20 |
+
this.namespace_ = webfont.EventDispatcher.DEFAULT_NAMESPACE;
|
21 |
+
this.cssClassName_ = new webfont.CssClassName('-');
|
22 |
+
this.dispatchEvents_ = config['events'] !== false;
|
23 |
+
this.setClasses_ = config['classes'] !== false;
|
24 |
+
};
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @const
|
28 |
+
* @type {string}
|
29 |
+
*/
|
30 |
+
webfont.EventDispatcher.DEFAULT_NAMESPACE = 'wf';
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @const
|
34 |
+
* @type {string}
|
35 |
+
*/
|
36 |
+
webfont.EventDispatcher.LOADING = 'loading';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @const
|
40 |
+
* @type {string}
|
41 |
+
*/
|
42 |
+
webfont.EventDispatcher.ACTIVE = 'active';
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @const
|
46 |
+
* @type {string}
|
47 |
+
*/
|
48 |
+
webfont.EventDispatcher.INACTIVE = 'inactive';
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @const
|
52 |
+
* @type {string}
|
53 |
+
*/
|
54 |
+
webfont.EventDispatcher.FONT = 'font';
|
55 |
+
|
56 |
+
goog.scope(function () {
|
57 |
+
var EventDispatcher = webfont.EventDispatcher;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Dispatch the loading event and append the loading class name.
|
61 |
+
*/
|
62 |
+
EventDispatcher.prototype.dispatchLoading = function() {
|
63 |
+
if (this.setClasses_) {
|
64 |
+
this.domHelper_.updateClassName(this.htmlElement_,
|
65 |
+
[
|
66 |
+
this.cssClassName_.build(this.namespace_, webfont.EventDispatcher.LOADING)
|
67 |
+
]
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
this.dispatch_(webfont.EventDispatcher.LOADING);
|
72 |
+
};
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Dispatch the font loading event and append the font loading class name.
|
76 |
+
* @param {webfont.Font} font
|
77 |
+
*/
|
78 |
+
EventDispatcher.prototype.dispatchFontLoading = function(font) {
|
79 |
+
if (this.setClasses_) {
|
80 |
+
this.domHelper_.updateClassName(this.htmlElement_,
|
81 |
+
[
|
82 |
+
this.cssClassName_.build(this.namespace_, font.getName(), font.getVariation().toString(), webfont.EventDispatcher.LOADING)
|
83 |
+
]
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
this.dispatch_(webfont.EventDispatcher.FONT + webfont.EventDispatcher.LOADING, font);
|
88 |
+
};
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Dispatch the font active event, remove the font loading class name, remove
|
92 |
+
* the font inactive class name, and append the font active class name.
|
93 |
+
* @param {webfont.Font} font
|
94 |
+
*/
|
95 |
+
EventDispatcher.prototype.dispatchFontActive = function(font) {
|
96 |
+
if (this.setClasses_) {
|
97 |
+
this.domHelper_.updateClassName(
|
98 |
+
this.htmlElement_,
|
99 |
+
[
|
100 |
+
this.cssClassName_.build(this.namespace_, font.getName(), font.getVariation().toString(), webfont.EventDispatcher.ACTIVE)
|
101 |
+
],
|
102 |
+
[
|
103 |
+
this.cssClassName_.build(this.namespace_, font.getName(), font.getVariation().toString(), webfont.EventDispatcher.LOADING),
|
104 |
+
this.cssClassName_.build(this.namespace_, font.getName(), font.getVariation().toString(), webfont.EventDispatcher.INACTIVE)
|
105 |
+
]
|
106 |
+
);
|
107 |
+
}
|
108 |
+
|
109 |
+
this.dispatch_(webfont.EventDispatcher.FONT + webfont.EventDispatcher.ACTIVE, font);
|
110 |
+
};
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Dispatch the font inactive event, remove the font loading class name, and
|
114 |
+
* append the font inactive class name (unless the font active class name is
|
115 |
+
* already present).
|
116 |
+
* @param {webfont.Font} font
|
117 |
+
*/
|
118 |
+
EventDispatcher.prototype.dispatchFontInactive = function(font) {
|
119 |
+
if (this.setClasses_) {
|
120 |
+
var hasFontActive = this.domHelper_.hasClassName(this.htmlElement_,
|
121 |
+
this.cssClassName_.build(this.namespace_, font.getName(), font.getVariation().toString(), webfont.EventDispatcher.ACTIVE)
|
122 |
+
),
|
123 |
+
add = [],
|
124 |
+
remove = [
|
125 |
+
this.cssClassName_.build(this.namespace_, font.getName(), font.getVariation().toString(), webfont.EventDispatcher.LOADING)
|
126 |
+
];
|
127 |
+
|
128 |
+
if (!hasFontActive) {
|
129 |
+
add.push(this.cssClassName_.build(this.namespace_, font.getName(), font.getVariation().toString(), webfont.EventDispatcher.INACTIVE));
|
130 |
+
}
|
131 |
+
|
132 |
+
this.domHelper_.updateClassName(this.htmlElement_, add, remove);
|
133 |
+
}
|
134 |
+
|
135 |
+
this.dispatch_(webfont.EventDispatcher.FONT + webfont.EventDispatcher.INACTIVE, font);
|
136 |
+
};
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Dispatch the inactive event, remove the loading class name, and append the
|
140 |
+
* inactive class name (unless the active class name is already present).
|
141 |
+
*/
|
142 |
+
EventDispatcher.prototype.dispatchInactive = function() {
|
143 |
+
if (this.setClasses_) {
|
144 |
+
var hasActive = this.domHelper_.hasClassName(this.htmlElement_,
|
145 |
+
this.cssClassName_.build(this.namespace_, webfont.EventDispatcher.ACTIVE)
|
146 |
+
),
|
147 |
+
add = [],
|
148 |
+
remove = [
|
149 |
+
this.cssClassName_.build(this.namespace_, webfont.EventDispatcher.LOADING)
|
150 |
+
];
|
151 |
+
|
152 |
+
if (!hasActive) {
|
153 |
+
add.push(this.cssClassName_.build(this.namespace_, webfont.EventDispatcher.INACTIVE));
|
154 |
+
}
|
155 |
+
|
156 |
+
this.domHelper_.updateClassName(this.htmlElement_, add, remove);
|
157 |
+
}
|
158 |
+
|
159 |
+
this.dispatch_(webfont.EventDispatcher.INACTIVE);
|
160 |
+
};
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Dispatch the active event, remove the loading class name, remove the inactive
|
164 |
+
* class name, and append the active class name.
|
165 |
+
*/
|
166 |
+
EventDispatcher.prototype.dispatchActive = function() {
|
167 |
+
if (this.setClasses_) {
|
168 |
+
this.domHelper_.updateClassName(this.htmlElement_,
|
169 |
+
[
|
170 |
+
this.cssClassName_.build(this.namespace_, webfont.EventDispatcher.ACTIVE)
|
171 |
+
],
|
172 |
+
[
|
173 |
+
this.cssClassName_.build(this.namespace_, webfont.EventDispatcher.LOADING),
|
174 |
+
this.cssClassName_.build(this.namespace_, webfont.EventDispatcher.INACTIVE)
|
175 |
+
]
|
176 |
+
);
|
177 |
+
}
|
178 |
+
|
179 |
+
this.dispatch_(webfont.EventDispatcher.ACTIVE);
|
180 |
+
};
|
181 |
+
|
182 |
+
/**
|
183 |
+
* @param {string} event
|
184 |
+
* @param {webfont.Font=} opt_font
|
185 |
+
*/
|
186 |
+
EventDispatcher.prototype.dispatch_ = function(event, opt_font) {
|
187 |
+
if (this.dispatchEvents_ && this.callbacks_[event]) {
|
188 |
+
if (opt_font) {
|
189 |
+
this.callbacks_[event](opt_font.getName(), opt_font.getVariation());
|
190 |
+
} else {
|
191 |
+
this.callbacks_[event]();
|
192 |
+
}
|
193 |
+
}
|
194 |
+
};
|
195 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/font.js
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.Font');
|
2 |
+
|
3 |
+
/**
|
4 |
+
* This class is an abstraction for a single font or typeface.
|
5 |
+
* It contains the font name and the variation (i.e. style
|
6 |
+
* and weight.) A collection Font instances can represent a
|
7 |
+
* font family.
|
8 |
+
*
|
9 |
+
* @constructor
|
10 |
+
* @param {string} name The font family name
|
11 |
+
* @param {string=} opt_variation A font variation description
|
12 |
+
*/
|
13 |
+
webfont.Font = function (name, opt_variation) {
|
14 |
+
this.name_ = name;
|
15 |
+
this.weight_ = 4;
|
16 |
+
this.style_ = 'n'
|
17 |
+
|
18 |
+
var variation = opt_variation || 'n4',
|
19 |
+
match = variation.match(/^([nio])([1-9])$/i);
|
20 |
+
|
21 |
+
if (match) {
|
22 |
+
this.style_ = match[1];
|
23 |
+
this.weight_ = parseInt(match[2], 10);
|
24 |
+
}
|
25 |
+
};
|
26 |
+
|
27 |
+
goog.scope(function () {
|
28 |
+
var Font = webfont.Font;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @return {string}
|
32 |
+
*/
|
33 |
+
Font.prototype.getName = function () {
|
34 |
+
return this.name_;
|
35 |
+
};
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @return {string}
|
39 |
+
*/
|
40 |
+
Font.prototype.getCssName = function () {
|
41 |
+
return this.quote_(this.name_);
|
42 |
+
};
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Returns a CSS string representation of the font that
|
46 |
+
* can be used as the CSS font property shorthand.
|
47 |
+
*
|
48 |
+
* @return {string}
|
49 |
+
*/
|
50 |
+
Font.prototype.toCssString = function () {
|
51 |
+
return this.getCssStyle() + ' ' + this.getCssWeight() + ' 300px ' + this.getCssName();
|
52 |
+
};
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @private
|
56 |
+
* @param {string} name
|
57 |
+
* @return {string}
|
58 |
+
*/
|
59 |
+
Font.prototype.quote_ = function (name) {
|
60 |
+
var quoted = [];
|
61 |
+
var split = name.split(/,\s*/);
|
62 |
+
for (var i = 0; i < split.length; i++) {
|
63 |
+
var part = split[i].replace(/['"]/g, '');
|
64 |
+
if (part.indexOf(' ') == -1 && !(/^\d/.test(part))) {
|
65 |
+
quoted.push(part);
|
66 |
+
} else {
|
67 |
+
quoted.push("'" + part + "'");
|
68 |
+
}
|
69 |
+
}
|
70 |
+
return quoted.join(',');
|
71 |
+
};
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @return {string}
|
75 |
+
*/
|
76 |
+
Font.prototype.getVariation = function () {
|
77 |
+
return this.style_ + this.weight_;
|
78 |
+
};
|
79 |
+
|
80 |
+
/**
|
81 |
+
* @return {string}
|
82 |
+
*/
|
83 |
+
Font.prototype.getCssVariation = function () {
|
84 |
+
return 'font-style:' + this.getCssStyle() + ';font-weight:' + this.getCssWeight() + ';';
|
85 |
+
};
|
86 |
+
|
87 |
+
/**
|
88 |
+
* @return {string}
|
89 |
+
*/
|
90 |
+
Font.prototype.getCssWeight = function () {
|
91 |
+
return this.weight_ + '00';
|
92 |
+
};
|
93 |
+
|
94 |
+
/**
|
95 |
+
* @return {string}
|
96 |
+
*/
|
97 |
+
Font.prototype.getCssStyle = function () {
|
98 |
+
var style = 'normal';
|
99 |
+
|
100 |
+
if (this.style_ === 'o') {
|
101 |
+
style = 'oblique';
|
102 |
+
} else if (this.style_ === 'i') {
|
103 |
+
style = 'italic';
|
104 |
+
}
|
105 |
+
|
106 |
+
return style;
|
107 |
+
};
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Parses a CSS font declaration and returns a font
|
111 |
+
* variation description.
|
112 |
+
*
|
113 |
+
* @param {string} css
|
114 |
+
* @return {string}
|
115 |
+
*/
|
116 |
+
Font.parseCssVariation = function (css) {
|
117 |
+
var weight = 4,
|
118 |
+
style = 'n',
|
119 |
+
m = null;
|
120 |
+
|
121 |
+
if (css) {
|
122 |
+
m = css.match(/(normal|oblique|italic)/i);
|
123 |
+
|
124 |
+
if (m && m[1]) {
|
125 |
+
style = m[1].substr(0, 1).toLowerCase();
|
126 |
+
}
|
127 |
+
|
128 |
+
m = css.match(/([1-9]00|normal|bold)/i);
|
129 |
+
|
130 |
+
if (m && m[1]) {
|
131 |
+
if (/bold/i.test(m[1])) {
|
132 |
+
weight = 7;
|
133 |
+
} else if (/[1-9]00/.test(m[1])) {
|
134 |
+
weight = parseInt(m[1].substr(0, 1), 10);
|
135 |
+
}
|
136 |
+
}
|
137 |
+
}
|
138 |
+
return style + weight;
|
139 |
+
}
|
140 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/fontmodule.js
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.FontModule');
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @interface
|
5 |
+
*/
|
6 |
+
webfont.FontModule = function () {};
|
7 |
+
|
8 |
+
goog.scope(function () {
|
9 |
+
var FontModule = webfont.FontModule;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @param {function(Array.<webfont.Font>, webfont.FontTestStrings=, Object.<string, boolean>=)} onReady
|
13 |
+
*/
|
14 |
+
FontModule.prototype.load = function (onReady) {};
|
15 |
+
});
|
16 |
+
|
modules/webfont-loader/vendor-typekit/src/core/fontmoduleloader.js
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.FontModuleLoader');
|
2 |
+
goog.provide('webfont.FontModuleFactory');
|
3 |
+
|
4 |
+
/** @typedef {function(Object, webfont.DomHelper): webfont.FontModule} */
|
5 |
+
webfont.FontModuleFactory;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* @constructor
|
9 |
+
*/
|
10 |
+
webfont.FontModuleLoader = function() {
|
11 |
+
/**
|
12 |
+
* @type {Object.<string, webfont.FontModuleFactory>}
|
13 |
+
*/
|
14 |
+
this.modules_ = {};
|
15 |
+
};
|
16 |
+
|
17 |
+
goog.scope(function () {
|
18 |
+
var FontModuleLoader = webfont.FontModuleLoader;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @param {string} name
|
22 |
+
* @param {webfont.FontModuleFactory} factory
|
23 |
+
*/
|
24 |
+
FontModuleLoader.prototype.addModuleFactory = function(name, factory) {
|
25 |
+
this.modules_[name] = factory;
|
26 |
+
};
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @param {Object} configuration
|
30 |
+
* @param {webfont.DomHelper} domHelper
|
31 |
+
* @return {Array.<webfont.FontModule>}
|
32 |
+
*/
|
33 |
+
FontModuleLoader.prototype.getModules = function(configuration, domHelper) {
|
34 |
+
var modules = [];
|
35 |
+
|
36 |
+
for (var key in configuration) {
|
37 |
+
if (configuration.hasOwnProperty(key)) {
|
38 |
+
var moduleFactory = this.modules_[key];
|
39 |
+
|
40 |
+
if (moduleFactory) {
|
41 |
+
modules.push(moduleFactory(configuration[key], domHelper));
|
42 |
+
}
|
43 |
+
}
|
44 |
+
}
|
45 |
+
return modules;
|
46 |
+
};
|
47 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/fontruler.js
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.FontRuler');
|
2 |
+
|
3 |
+
/**
|
4 |
+
* An element that can be used to measure the metrics
|
5 |
+
* of a given font and string.
|
6 |
+
* @constructor
|
7 |
+
* @param {webfont.DomHelper} domHelper
|
8 |
+
* @param {string} fontTestString
|
9 |
+
*/
|
10 |
+
webfont.FontRuler = function (domHelper, fontTestString) {
|
11 |
+
this.domHelper_ = domHelper;
|
12 |
+
this.fontTestString_ = fontTestString;
|
13 |
+
this.el_ = this.domHelper_.createElement('span', {
|
14 |
+
"aria-hidden": "true"
|
15 |
+
}, this.fontTestString_);
|
16 |
+
};
|
17 |
+
|
18 |
+
goog.scope(function () {
|
19 |
+
var FontRuler = webfont.FontRuler;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @param {webfont.Font} font
|
23 |
+
*/
|
24 |
+
FontRuler.prototype.setFont = function(font) {
|
25 |
+
this.domHelper_.setStyle(this.el_, this.computeStyleString_(font));
|
26 |
+
};
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Inserts the ruler into the DOM.
|
30 |
+
*/
|
31 |
+
FontRuler.prototype.insert = function() {
|
32 |
+
this.domHelper_.insertInto('body', this.el_);
|
33 |
+
};
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @private
|
37 |
+
* @param {webfont.Font} font
|
38 |
+
* @return {string}
|
39 |
+
*/
|
40 |
+
FontRuler.prototype.computeStyleString_ = function(font) {
|
41 |
+
return "display:block;position:absolute;top:-9999px;left:-9999px;" +
|
42 |
+
"font-size:300px;width:auto;height:auto;line-height:normal;margin:0;" +
|
43 |
+
"padding:0;font-variant:normal;white-space:nowrap;font-family:" +
|
44 |
+
font.getCssName() + ";" + font.getCssVariation();
|
45 |
+
};
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @return {number}
|
49 |
+
*/
|
50 |
+
FontRuler.prototype.getWidth = function() {
|
51 |
+
return this.el_.offsetWidth;
|
52 |
+
};
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Removes the ruler element from the DOM.
|
56 |
+
*/
|
57 |
+
FontRuler.prototype.remove = function() {
|
58 |
+
this.domHelper_.removeElement(this.el_);
|
59 |
+
};
|
60 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/fontwatcher.js
ADDED
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.FontWatcher');
|
2 |
+
|
3 |
+
goog.require('webfont.FontWatchRunner');
|
4 |
+
goog.require('webfont.NativeFontWatchRunner');
|
5 |
+
|
6 |
+
/**
|
7 |
+
* @typedef {Object.<string, Array.<string>>}
|
8 |
+
*/
|
9 |
+
webfont.FontTestStrings;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @constructor
|
13 |
+
* @param {webfont.DomHelper} domHelper
|
14 |
+
* @param {webfont.EventDispatcher} eventDispatcher
|
15 |
+
* @param {number=} opt_timeout
|
16 |
+
*/
|
17 |
+
webfont.FontWatcher = function(domHelper, eventDispatcher, opt_timeout) {
|
18 |
+
this.domHelper_ = domHelper;
|
19 |
+
this.eventDispatcher_ = eventDispatcher;
|
20 |
+
this.currentlyWatched_ = 0;
|
21 |
+
this.last_ = false;
|
22 |
+
this.success_ = false;
|
23 |
+
this.timeout_ = opt_timeout;
|
24 |
+
};
|
25 |
+
|
26 |
+
goog.scope(function () {
|
27 |
+
var FontWatcher = webfont.FontWatcher,
|
28 |
+
FontWatchRunner = webfont.FontWatchRunner,
|
29 |
+
NativeFontWatchRunner = webfont.NativeFontWatchRunner;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @type {null|boolean}
|
33 |
+
*/
|
34 |
+
FontWatcher.SHOULD_USE_NATIVE_LOADER = null;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @return {string}
|
38 |
+
*/
|
39 |
+
FontWatcher.getUserAgent = function () {
|
40 |
+
return window.navigator.userAgent;
|
41 |
+
};
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @return {string}
|
45 |
+
*/
|
46 |
+
FontWatcher.getVendor = function () {
|
47 |
+
return window.navigator.vendor;
|
48 |
+
};
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Returns true if this browser has support for
|
52 |
+
* the CSS font loading API.
|
53 |
+
*
|
54 |
+
* @return {boolean}
|
55 |
+
*/
|
56 |
+
FontWatcher.shouldUseNativeLoader = function () {
|
57 |
+
if (FontWatcher.SHOULD_USE_NATIVE_LOADER === null) {
|
58 |
+
if (!!window.FontFace) {
|
59 |
+
var match = /Gecko.*Firefox\/(\d+)/.exec(FontWatcher.getUserAgent());
|
60 |
+
var safari10Match = /OS X.*Version\/10\..*Safari/.exec(FontWatcher.getUserAgent()) && /Apple/.exec(FontWatcher.getVendor());
|
61 |
+
|
62 |
+
if (match) {
|
63 |
+
FontWatcher.SHOULD_USE_NATIVE_LOADER = parseInt(match[1], 10) > 42;
|
64 |
+
} else if (safari10Match) {
|
65 |
+
FontWatcher.SHOULD_USE_NATIVE_LOADER = false;
|
66 |
+
} else {
|
67 |
+
FontWatcher.SHOULD_USE_NATIVE_LOADER = true;
|
68 |
+
}
|
69 |
+
} else {
|
70 |
+
FontWatcher.SHOULD_USE_NATIVE_LOADER = false;
|
71 |
+
}
|
72 |
+
}
|
73 |
+
return FontWatcher.SHOULD_USE_NATIVE_LOADER;
|
74 |
+
};
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Watches a set of font families.
|
78 |
+
* @param {Array.<webfont.Font>} fonts The fonts to watch.
|
79 |
+
* @param {webfont.FontTestStrings} fontTestStrings The font test strings for
|
80 |
+
* each family.
|
81 |
+
* @param {Object.<String, boolean>} metricCompatibleFonts
|
82 |
+
* @param {boolean} last True if this is the last set of fonts to watch.
|
83 |
+
*/
|
84 |
+
FontWatcher.prototype.watchFonts = function(fonts,
|
85 |
+
fontTestStrings, metricCompatibleFonts, last) {
|
86 |
+
var length = fonts.length,
|
87 |
+
testStrings = fontTestStrings || {};
|
88 |
+
|
89 |
+
if (length === 0 && last) {
|
90 |
+
this.eventDispatcher_.dispatchInactive();
|
91 |
+
return;
|
92 |
+
}
|
93 |
+
|
94 |
+
this.currentlyWatched_ += fonts.length;
|
95 |
+
|
96 |
+
if (last) {
|
97 |
+
this.last_ = last;
|
98 |
+
}
|
99 |
+
|
100 |
+
var i, fontWatchRunners = [];
|
101 |
+
for (i = 0; i < fonts.length; i++) {
|
102 |
+
var font = fonts[i],
|
103 |
+
testString = testStrings[font.getName()];
|
104 |
+
|
105 |
+
this.eventDispatcher_.dispatchFontLoading(font);
|
106 |
+
|
107 |
+
var fontWatchRunner = null;
|
108 |
+
|
109 |
+
if (FontWatcher.shouldUseNativeLoader()) {
|
110 |
+
fontWatchRunner = new NativeFontWatchRunner(
|
111 |
+
goog.bind(this.fontActive_, this),
|
112 |
+
goog.bind(this.fontInactive_, this),
|
113 |
+
this.domHelper_,
|
114 |
+
font,
|
115 |
+
this.timeout_,
|
116 |
+
testString
|
117 |
+
);
|
118 |
+
} else {
|
119 |
+
fontWatchRunner = new FontWatchRunner(
|
120 |
+
goog.bind(this.fontActive_, this),
|
121 |
+
goog.bind(this.fontInactive_, this),
|
122 |
+
this.domHelper_,
|
123 |
+
font,
|
124 |
+
this.timeout_,
|
125 |
+
metricCompatibleFonts,
|
126 |
+
testString
|
127 |
+
);
|
128 |
+
}
|
129 |
+
|
130 |
+
fontWatchRunners.push(fontWatchRunner);
|
131 |
+
}
|
132 |
+
|
133 |
+
for (i = 0; i < fontWatchRunners.length; i++) {
|
134 |
+
fontWatchRunners[i].start();
|
135 |
+
}
|
136 |
+
};
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Called by a FontWatchRunner when a font has been detected as active.
|
140 |
+
* @param {webfont.Font} font
|
141 |
+
* @private
|
142 |
+
*/
|
143 |
+
FontWatcher.prototype.fontActive_ = function(font) {
|
144 |
+
this.eventDispatcher_.dispatchFontActive(font);
|
145 |
+
this.success_ = true;
|
146 |
+
this.decreaseCurrentlyWatched_();
|
147 |
+
};
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Called by a FontWatchRunner when a font has been detected as inactive.
|
151 |
+
* @param {webfont.Font} font
|
152 |
+
* @private
|
153 |
+
*/
|
154 |
+
FontWatcher.prototype.fontInactive_ = function(font) {
|
155 |
+
this.eventDispatcher_.dispatchFontInactive(font);
|
156 |
+
this.decreaseCurrentlyWatched_();
|
157 |
+
};
|
158 |
+
|
159 |
+
/**
|
160 |
+
* @private
|
161 |
+
*/
|
162 |
+
FontWatcher.prototype.decreaseCurrentlyWatched_ = function() {
|
163 |
+
if (--this.currentlyWatched_ == 0 && this.last_) {
|
164 |
+
if (this.success_) {
|
165 |
+
this.eventDispatcher_.dispatchActive();
|
166 |
+
} else {
|
167 |
+
this.eventDispatcher_.dispatchInactive();
|
168 |
+
}
|
169 |
+
}
|
170 |
+
};
|
171 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/fontwatchrunner.js
ADDED
@@ -0,0 +1,249 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.FontWatchRunner');
|
2 |
+
|
3 |
+
goog.require('webfont.Font');
|
4 |
+
goog.require('webfont.FontRuler');
|
5 |
+
|
6 |
+
/**
|
7 |
+
* @constructor
|
8 |
+
* @param {function(webfont.Font)} activeCallback
|
9 |
+
* @param {function(webfont.Font)} inactiveCallback
|
10 |
+
* @param {webfont.DomHelper} domHelper
|
11 |
+
* @param {webfont.Font} font
|
12 |
+
* @param {number=} opt_timeout
|
13 |
+
* @param {Object.<string, boolean>=} opt_metricCompatibleFonts
|
14 |
+
* @param {string=} opt_fontTestString
|
15 |
+
*/
|
16 |
+
webfont.FontWatchRunner = function(activeCallback, inactiveCallback, domHelper,
|
17 |
+
font, opt_timeout, opt_metricCompatibleFonts, opt_fontTestString) {
|
18 |
+
this.activeCallback_ = activeCallback;
|
19 |
+
this.inactiveCallback_ = inactiveCallback;
|
20 |
+
this.domHelper_ = domHelper;
|
21 |
+
this.font_ = font;
|
22 |
+
this.fontTestString_ = opt_fontTestString || webfont.FontWatchRunner.DEFAULT_TEST_STRING;
|
23 |
+
this.lastResortWidths_ = {};
|
24 |
+
this.timeout_ = opt_timeout || 3000;
|
25 |
+
|
26 |
+
this.metricCompatibleFonts_ = opt_metricCompatibleFonts || null;
|
27 |
+
|
28 |
+
this.fontRulerA_ = null;
|
29 |
+
this.fontRulerB_ = null;
|
30 |
+
this.lastResortRulerA_ = null;
|
31 |
+
this.lastResortRulerB_ = null;
|
32 |
+
|
33 |
+
this.setupRulers_();
|
34 |
+
};
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @enum {string}
|
38 |
+
* @const
|
39 |
+
*/
|
40 |
+
webfont.FontWatchRunner.LastResortFonts = {
|
41 |
+
SERIF: 'serif',
|
42 |
+
SANS_SERIF: 'sans-serif'
|
43 |
+
};
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Default test string. Characters are chosen so that their widths vary a lot
|
47 |
+
* between the fonts in the default stacks. We want each fallback stack
|
48 |
+
* to always start out at a different width than the other.
|
49 |
+
* @type {string}
|
50 |
+
* @const
|
51 |
+
*/
|
52 |
+
webfont.FontWatchRunner.DEFAULT_TEST_STRING = 'BESbswy';
|
53 |
+
|
54 |
+
goog.scope(function () {
|
55 |
+
var FontWatchRunner = webfont.FontWatchRunner,
|
56 |
+
Font = webfont.Font,
|
57 |
+
FontRuler = webfont.FontRuler;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* @type {null|boolean}
|
61 |
+
*/
|
62 |
+
FontWatchRunner.HAS_WEBKIT_FALLBACK_BUG = null;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @return {string}
|
66 |
+
*/
|
67 |
+
FontWatchRunner.getUserAgent = function () {
|
68 |
+
return window.navigator.userAgent;
|
69 |
+
};
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Returns true if this browser is WebKit and it has the fallback bug
|
73 |
+
* which is present in WebKit 536.11 and earlier.
|
74 |
+
*
|
75 |
+
* @return {boolean}
|
76 |
+
*/
|
77 |
+
FontWatchRunner.hasWebKitFallbackBug = function () {
|
78 |
+
if (FontWatchRunner.HAS_WEBKIT_FALLBACK_BUG === null) {
|
79 |
+
var match = /AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(FontWatchRunner.getUserAgent());
|
80 |
+
|
81 |
+
FontWatchRunner.HAS_WEBKIT_FALLBACK_BUG = !!match &&
|
82 |
+
(parseInt(match[1], 10) < 536 ||
|
83 |
+
(parseInt(match[1], 10) === 536 &&
|
84 |
+
parseInt(match[2], 10) <= 11));
|
85 |
+
}
|
86 |
+
return FontWatchRunner.HAS_WEBKIT_FALLBACK_BUG;
|
87 |
+
};
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @private
|
91 |
+
*/
|
92 |
+
FontWatchRunner.prototype.setupRulers_ = function() {
|
93 |
+
this.fontRulerA_ = new FontRuler(this.domHelper_, this.fontTestString_);
|
94 |
+
this.fontRulerB_ = new FontRuler(this.domHelper_, this.fontTestString_);
|
95 |
+
this.lastResortRulerA_ = new FontRuler(this.domHelper_, this.fontTestString_);
|
96 |
+
this.lastResortRulerB_ = new FontRuler(this.domHelper_, this.fontTestString_);
|
97 |
+
|
98 |
+
this.fontRulerA_.setFont(new Font(this.font_.getName() + ',' + FontWatchRunner.LastResortFonts.SERIF, this.font_.getVariation()));
|
99 |
+
this.fontRulerB_.setFont(new Font(this.font_.getName() + ',' + FontWatchRunner.LastResortFonts.SANS_SERIF, this.font_.getVariation()));
|
100 |
+
this.lastResortRulerA_.setFont(new Font(FontWatchRunner.LastResortFonts.SERIF, this.font_.getVariation()));
|
101 |
+
this.lastResortRulerB_.setFont(new Font(FontWatchRunner.LastResortFonts.SANS_SERIF, this.font_.getVariation()));
|
102 |
+
|
103 |
+
this.fontRulerA_.insert();
|
104 |
+
this.fontRulerB_.insert();
|
105 |
+
this.lastResortRulerA_.insert();
|
106 |
+
this.lastResortRulerB_.insert();
|
107 |
+
};
|
108 |
+
|
109 |
+
FontWatchRunner.prototype.start = function() {
|
110 |
+
this.lastResortWidths_[FontWatchRunner.LastResortFonts.SERIF] = this.lastResortRulerA_.getWidth();
|
111 |
+
this.lastResortWidths_[FontWatchRunner.LastResortFonts.SANS_SERIF] = this.lastResortRulerB_.getWidth();
|
112 |
+
|
113 |
+
this.started_ = goog.now();
|
114 |
+
|
115 |
+
this.check_();
|
116 |
+
};
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Returns true if the given width matches the generic font family width.
|
120 |
+
*
|
121 |
+
* @private
|
122 |
+
* @param {number} width
|
123 |
+
* @param {string} lastResortFont
|
124 |
+
* @return {boolean}
|
125 |
+
*/
|
126 |
+
FontWatchRunner.prototype.widthMatches_ = function(width, lastResortFont) {
|
127 |
+
return width === this.lastResortWidths_[lastResortFont];
|
128 |
+
};
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Return true if the given widths match any of the generic font family
|
132 |
+
* widths.
|
133 |
+
*
|
134 |
+
* @private
|
135 |
+
* @param {number} a
|
136 |
+
* @param {number} b
|
137 |
+
* @return {boolean}
|
138 |
+
*/
|
139 |
+
FontWatchRunner.prototype.widthsMatchLastResortWidths_ = function(a, b) {
|
140 |
+
for (var font in FontWatchRunner.LastResortFonts) {
|
141 |
+
if (FontWatchRunner.LastResortFonts.hasOwnProperty(font)) {
|
142 |
+
if (this.widthMatches_(a, FontWatchRunner.LastResortFonts[font]) &&
|
143 |
+
this.widthMatches_(b, FontWatchRunner.LastResortFonts[font])) {
|
144 |
+
return true;
|
145 |
+
}
|
146 |
+
}
|
147 |
+
}
|
148 |
+
return false;
|
149 |
+
};
|
150 |
+
|
151 |
+
/**
|
152 |
+
* @private
|
153 |
+
* Returns true if the loading has timed out.
|
154 |
+
* @return {boolean}
|
155 |
+
*/
|
156 |
+
FontWatchRunner.prototype.hasTimedOut_ = function() {
|
157 |
+
return goog.now() - this.started_ >= this.timeout_;
|
158 |
+
};
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Returns true if both fonts match the normal fallback fonts.
|
162 |
+
*
|
163 |
+
* @private
|
164 |
+
* @param {number} a
|
165 |
+
* @param {number} b
|
166 |
+
* @return {boolean}
|
167 |
+
*/
|
168 |
+
FontWatchRunner.prototype.isFallbackFont_ = function (a, b) {
|
169 |
+
return this.widthMatches_(a, FontWatchRunner.LastResortFonts.SERIF) &&
|
170 |
+
this.widthMatches_(b, FontWatchRunner.LastResortFonts.SANS_SERIF);
|
171 |
+
};
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Returns true if the WebKit bug is present and both widths match a last resort font.
|
175 |
+
*
|
176 |
+
* @private
|
177 |
+
* @param {number} a
|
178 |
+
* @param {number} b
|
179 |
+
* @return {boolean}
|
180 |
+
*/
|
181 |
+
FontWatchRunner.prototype.isLastResortFont_ = function (a, b) {
|
182 |
+
return FontWatchRunner.hasWebKitFallbackBug() && this.widthsMatchLastResortWidths_(a, b);
|
183 |
+
};
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Returns true if the current font is metric compatible. Also returns true
|
187 |
+
* if we do not have a list of metric compatible fonts.
|
188 |
+
*
|
189 |
+
* @private
|
190 |
+
* @return {boolean}
|
191 |
+
*/
|
192 |
+
FontWatchRunner.prototype.isMetricCompatibleFont_ = function () {
|
193 |
+
return this.metricCompatibleFonts_ === null || this.metricCompatibleFonts_.hasOwnProperty(this.font_.getName());
|
194 |
+
};
|
195 |
+
|
196 |
+
/**
|
197 |
+
* Checks the width of the two spans against their original widths during each
|
198 |
+
* async loop. If the width of one of the spans is different than the original
|
199 |
+
* width, then we know that the font is rendering and finish with the active
|
200 |
+
* callback. If we wait more than 5 seconds and nothing has changed, we finish
|
201 |
+
* with the inactive callback.
|
202 |
+
*
|
203 |
+
* @private
|
204 |
+
*/
|
205 |
+
FontWatchRunner.prototype.check_ = function() {
|
206 |
+
var widthA = this.fontRulerA_.getWidth();
|
207 |
+
var widthB = this.fontRulerB_.getWidth();
|
208 |
+
|
209 |
+
if (this.isFallbackFont_(widthA, widthB) || this.isLastResortFont_(widthA, widthB)) {
|
210 |
+
if (this.hasTimedOut_()) {
|
211 |
+
if (this.isLastResortFont_(widthA, widthB) && this.isMetricCompatibleFont_()) {
|
212 |
+
this.finish_(this.activeCallback_);
|
213 |
+
} else {
|
214 |
+
this.finish_(this.inactiveCallback_);
|
215 |
+
}
|
216 |
+
} else {
|
217 |
+
this.asyncCheck_();
|
218 |
+
}
|
219 |
+
} else {
|
220 |
+
this.finish_(this.activeCallback_);
|
221 |
+
}
|
222 |
+
};
|
223 |
+
|
224 |
+
/**
|
225 |
+
* @private
|
226 |
+
*/
|
227 |
+
FontWatchRunner.prototype.asyncCheck_ = function() {
|
228 |
+
setTimeout(goog.bind(function () {
|
229 |
+
this.check_();
|
230 |
+
}, this), 50);
|
231 |
+
};
|
232 |
+
|
233 |
+
/**
|
234 |
+
* @private
|
235 |
+
* @param {function(webfont.Font)} callback
|
236 |
+
*/
|
237 |
+
FontWatchRunner.prototype.finish_ = function(callback) {
|
238 |
+
// Remove elements and trigger callback (which adds active/inactive class) asynchronously to avoid reflow chain if
|
239 |
+
// several fonts are finished loading right after each other
|
240 |
+
setTimeout(goog.bind(function () {
|
241 |
+
this.fontRulerA_.remove();
|
242 |
+
this.fontRulerB_.remove();
|
243 |
+
this.lastResortRulerA_.remove();
|
244 |
+
this.lastResortRulerB_.remove();
|
245 |
+
callback(this.font_);
|
246 |
+
}, this), 0);
|
247 |
+
};
|
248 |
+
|
249 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/initialize.js
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont');
|
2 |
+
|
3 |
+
goog.require('webfont.WebFont');
|
4 |
+
|
5 |
+
goog.require('webfont.modules.Typekit');
|
6 |
+
goog.require('webfont.modules.Fontdeck');
|
7 |
+
goog.require('webfont.modules.Monotype');
|
8 |
+
goog.require('webfont.modules.Custom');
|
9 |
+
goog.require('webfont.modules.google.GoogleFontApi');
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @define {boolean}
|
13 |
+
*/
|
14 |
+
var INCLUDE_CUSTOM_MODULE = false;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @define {boolean}
|
18 |
+
*/
|
19 |
+
var INCLUDE_FONTDECK_MODULE = false;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @define {boolean}
|
23 |
+
*/
|
24 |
+
var INCLUDE_MONOTYPE_MODULE = false;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @define {boolean}
|
28 |
+
*/
|
29 |
+
var INCLUDE_TYPEKIT_MODULE = false;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @define {boolean}
|
33 |
+
*/
|
34 |
+
var INCLUDE_GOOGLE_MODULE = false;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @define {string}
|
38 |
+
*/
|
39 |
+
var WEBFONT = 'WebFont';
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @define {string}
|
43 |
+
*/
|
44 |
+
var WEBFONT_CONFIG = 'WebFontConfig';
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @type {webfont.WebFont}
|
48 |
+
*/
|
49 |
+
var webFontLoader = new webfont.WebFont(window);
|
50 |
+
|
51 |
+
if (INCLUDE_CUSTOM_MODULE) {
|
52 |
+
webFontLoader.addModule(webfont.modules.Custom.NAME, function (configuration, domHelper) {
|
53 |
+
return new webfont.modules.Custom(domHelper, configuration);
|
54 |
+
});
|
55 |
+
}
|
56 |
+
|
57 |
+
if (INCLUDE_FONTDECK_MODULE) {
|
58 |
+
webFontLoader.addModule(webfont.modules.Fontdeck.NAME, function (configuration, domHelper) {
|
59 |
+
return new webfont.modules.Fontdeck(domHelper, configuration);
|
60 |
+
});
|
61 |
+
}
|
62 |
+
|
63 |
+
if (INCLUDE_MONOTYPE_MODULE) {
|
64 |
+
webFontLoader.addModule(webfont.modules.Monotype.NAME, function (configuration, domHelper) {
|
65 |
+
return new webfont.modules.Monotype(domHelper, configuration);
|
66 |
+
});
|
67 |
+
}
|
68 |
+
|
69 |
+
if (INCLUDE_TYPEKIT_MODULE) {
|
70 |
+
webFontLoader.addModule(webfont.modules.Typekit.NAME, function (configuration, domHelper) {
|
71 |
+
return new webfont.modules.Typekit(domHelper, configuration);
|
72 |
+
});
|
73 |
+
}
|
74 |
+
|
75 |
+
if (INCLUDE_GOOGLE_MODULE) {
|
76 |
+
webFontLoader.addModule(webfont.modules.google.GoogleFontApi.NAME, function (configuration, domHelper) {
|
77 |
+
return new webfont.modules.google.GoogleFontApi(domHelper, configuration);
|
78 |
+
});
|
79 |
+
}
|
80 |
+
|
81 |
+
var exports = {
|
82 |
+
'load': goog.bind(webFontLoader.load, webFontLoader)
|
83 |
+
};
|
84 |
+
|
85 |
+
if (typeof define === "function" && define.amd) {
|
86 |
+
define(function () {
|
87 |
+
return exports;
|
88 |
+
});
|
89 |
+
} else if (typeof module !== "undefined" && module.exports) {
|
90 |
+
module.exports = exports;
|
91 |
+
} else {
|
92 |
+
window[WEBFONT] = exports;
|
93 |
+
|
94 |
+
if (window[WEBFONT_CONFIG]) {
|
95 |
+
webFontLoader.load(window[WEBFONT_CONFIG]);
|
96 |
+
}
|
97 |
+
}
|
modules/webfont-loader/vendor-typekit/src/core/nativefontwatchrunner.js
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.NativeFontWatchRunner');
|
2 |
+
|
3 |
+
goog.require('webfont.Font');
|
4 |
+
|
5 |
+
goog.scope(function () {
|
6 |
+
/**
|
7 |
+
* @constructor
|
8 |
+
* @param {function(webfont.Font)} activeCallback
|
9 |
+
* @param {function(webfont.Font)} inactiveCallback
|
10 |
+
* @param {webfont.DomHelper} domHelper
|
11 |
+
* @param {webfont.Font} font
|
12 |
+
* @param {number=} opt_timeout
|
13 |
+
* @param {string=} opt_fontTestString
|
14 |
+
*/
|
15 |
+
webfont.NativeFontWatchRunner = function(activeCallback, inactiveCallback, domHelper, font, opt_timeout, opt_fontTestString) {
|
16 |
+
this.activeCallback_ = activeCallback;
|
17 |
+
this.inactiveCallback_ = inactiveCallback;
|
18 |
+
this.font_ = font;
|
19 |
+
this.domHelper_ = domHelper;
|
20 |
+
this.timeout_ = opt_timeout || 3000;
|
21 |
+
this.fontTestString_ = opt_fontTestString || undefined;
|
22 |
+
};
|
23 |
+
|
24 |
+
var NativeFontWatchRunner = webfont.NativeFontWatchRunner;
|
25 |
+
|
26 |
+
NativeFontWatchRunner.prototype.start = function () {
|
27 |
+
var doc = this.domHelper_.getLoadWindow().document,
|
28 |
+
that = this;
|
29 |
+
|
30 |
+
var start = goog.now();
|
31 |
+
|
32 |
+
var loader = new Promise(function (resolve, reject) {
|
33 |
+
var check = function () {
|
34 |
+
var now = goog.now();
|
35 |
+
|
36 |
+
if (now - start >= that.timeout_) {
|
37 |
+
reject();
|
38 |
+
} else {
|
39 |
+
doc.fonts.load(that.font_.toCssString(), that.fontTestString_).then(function (fonts) {
|
40 |
+
if (fonts.length >= 1) {
|
41 |
+
resolve();
|
42 |
+
} else {
|
43 |
+
setTimeout(check, 25);
|
44 |
+
}
|
45 |
+
}, function () {
|
46 |
+
reject();
|
47 |
+
});
|
48 |
+
}
|
49 |
+
};
|
50 |
+
|
51 |
+
check();
|
52 |
+
});
|
53 |
+
|
54 |
+
var timeoutId = null,
|
55 |
+
timer = new Promise(function (resolve, reject) {
|
56 |
+
timeoutId = setTimeout(reject, that.timeout_);
|
57 |
+
});
|
58 |
+
|
59 |
+
Promise.race([timer, loader]).then(function () {
|
60 |
+
if (timeoutId) {
|
61 |
+
clearTimeout(timeoutId);
|
62 |
+
timeoutId = null;
|
63 |
+
}
|
64 |
+
that.activeCallback_(that.font_);
|
65 |
+
}, function () {
|
66 |
+
that.inactiveCallback_(that.font_);
|
67 |
+
});
|
68 |
+
};
|
69 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/stylesheetwaiter.js
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.StyleSheetWaiter');
|
2 |
+
|
3 |
+
/**
|
4 |
+
* A utility class for handling callback from DomHelper.loadStylesheet().
|
5 |
+
*
|
6 |
+
* @constructor
|
7 |
+
*/
|
8 |
+
webfont.StyleSheetWaiter = function() {
|
9 |
+
/** @private @type {number} */
|
10 |
+
this.waitingCount_ = 0;
|
11 |
+
/** @private @type {Function} */
|
12 |
+
this.onReady_ = null;
|
13 |
+
};
|
14 |
+
|
15 |
+
goog.scope(function () {
|
16 |
+
var StyleSheetWaiter = webfont.StyleSheetWaiter;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @return {function(Error)}
|
20 |
+
*/
|
21 |
+
StyleSheetWaiter.prototype.startWaitingLoad = function() {
|
22 |
+
var self = this;
|
23 |
+
self.waitingCount_++;
|
24 |
+
return function(error) {
|
25 |
+
self.waitingCount_--;
|
26 |
+
self.fireIfReady_();
|
27 |
+
};
|
28 |
+
};
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @param {Function} fn
|
32 |
+
*/
|
33 |
+
StyleSheetWaiter.prototype.waitWhileNeededThen = function(fn) {
|
34 |
+
this.onReady_ = fn;
|
35 |
+
this.fireIfReady_();
|
36 |
+
};
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @private
|
40 |
+
*/
|
41 |
+
StyleSheetWaiter.prototype.fireIfReady_ = function() {
|
42 |
+
var isReady = 0 == this.waitingCount_;
|
43 |
+
if (isReady && this.onReady_) {
|
44 |
+
this.onReady_();
|
45 |
+
this.onReady_ = null;
|
46 |
+
}
|
47 |
+
};
|
48 |
+
});
|
modules/webfont-loader/vendor-typekit/src/core/webfont.js
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.WebFont');
|
2 |
+
|
3 |
+
goog.require('webfont.DomHelper');
|
4 |
+
goog.require('webfont.EventDispatcher');
|
5 |
+
goog.require('webfont.FontWatcher');
|
6 |
+
goog.require('webfont.FontModuleLoader');
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @param {Window} mainWindow The main application window containing
|
10 |
+
* webfontloader.js.
|
11 |
+
* @constructor
|
12 |
+
*/
|
13 |
+
webfont.WebFont = function(mainWindow) {
|
14 |
+
this.mainWindow_ = mainWindow;
|
15 |
+
this.fontModuleLoader_ = new webfont.FontModuleLoader();
|
16 |
+
this.moduleLoading_ = 0;
|
17 |
+
this.events_ = true;
|
18 |
+
this.classes_ = true;
|
19 |
+
};
|
20 |
+
|
21 |
+
goog.scope(function () {
|
22 |
+
var WebFont = webfont.WebFont,
|
23 |
+
DomHelper = webfont.DomHelper,
|
24 |
+
EventDispatcher = webfont.EventDispatcher,
|
25 |
+
FontWatcher = webfont.FontWatcher;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @param {string} name
|
29 |
+
* @param {webfont.FontModuleFactory} factory
|
30 |
+
*/
|
31 |
+
WebFont.prototype.addModule = function(name, factory) {
|
32 |
+
this.fontModuleLoader_.addModuleFactory(name, factory);
|
33 |
+
};
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @param {Object} configuration
|
37 |
+
*/
|
38 |
+
WebFont.prototype.load = function(configuration) {
|
39 |
+
var context = configuration['context'] || this.mainWindow_;
|
40 |
+
this.domHelper_ = new DomHelper(this.mainWindow_, context);
|
41 |
+
|
42 |
+
this.events_ = configuration['events'] !== false;
|
43 |
+
this.classes_ = configuration['classes'] !== false;
|
44 |
+
|
45 |
+
var eventDispatcher = new EventDispatcher(
|
46 |
+
this.domHelper_,
|
47 |
+
configuration
|
48 |
+
);
|
49 |
+
|
50 |
+
this.load_(eventDispatcher, configuration);
|
51 |
+
};
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @param {webfont.EventDispatcher} eventDispatcher
|
55 |
+
* @param {webfont.FontWatcher} fontWatcher
|
56 |
+
* @param {Array.<webfont.Font>} fonts
|
57 |
+
* @param {webfont.FontTestStrings=} opt_fontTestStrings
|
58 |
+
* @param {Object.<string, boolean>=} opt_metricCompatibleFonts
|
59 |
+
*/
|
60 |
+
WebFont.prototype.onModuleReady_ = function(eventDispatcher, fontWatcher, fonts, opt_fontTestStrings, opt_metricCompatibleFonts) {
|
61 |
+
var allModulesLoaded = --this.moduleLoading_ == 0;
|
62 |
+
|
63 |
+
if (this.classes_ || this.events_) {
|
64 |
+
setTimeout(function () {
|
65 |
+
fontWatcher.watchFonts(fonts, opt_fontTestStrings || null, opt_metricCompatibleFonts || null, allModulesLoaded);
|
66 |
+
}, 0);
|
67 |
+
}
|
68 |
+
};
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @param {webfont.EventDispatcher} eventDispatcher
|
72 |
+
* @param {Object} configuration
|
73 |
+
*/
|
74 |
+
WebFont.prototype.load_ = function(eventDispatcher, configuration) {
|
75 |
+
var modules = [],
|
76 |
+
timeout = configuration['timeout'],
|
77 |
+
self = this;
|
78 |
+
|
79 |
+
// Immediately dispatch the loading event before initializing the modules
|
80 |
+
// so we know for sure that the loading event is synchronous.
|
81 |
+
eventDispatcher.dispatchLoading();
|
82 |
+
|
83 |
+
modules = this.fontModuleLoader_.getModules(configuration, this.domHelper_);
|
84 |
+
|
85 |
+
var fontWatcher = new webfont.FontWatcher(this.domHelper_, eventDispatcher, timeout);
|
86 |
+
|
87 |
+
this.moduleLoading_ = modules.length;
|
88 |
+
|
89 |
+
for (var i = 0, len = modules.length; i < len; i++) {
|
90 |
+
var module = modules[i];
|
91 |
+
|
92 |
+
module.load(function (fonts, opt_fontTestStrings, opt_metricCompatibleFonts) {
|
93 |
+
self.onModuleReady_(eventDispatcher, fontWatcher, fonts, opt_fontTestStrings, opt_metricCompatibleFonts);
|
94 |
+
});
|
95 |
+
}
|
96 |
+
};
|
97 |
+
});
|
modules/webfont-loader/vendor-typekit/src/modules.yml
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
core:
|
2 |
+
- ../tools/compiler/base.js
|
3 |
+
- core/domhelper.js
|
4 |
+
- core/stylesheetwaiter.js
|
5 |
+
- core/cssclassname.js
|
6 |
+
- core/font.js
|
7 |
+
- core/eventdispatcher.js
|
8 |
+
- core/fontmodule.js
|
9 |
+
- core/fontmoduleloader.js
|
10 |
+
- core/fontruler.js
|
11 |
+
- core/nativefontwatchrunner.js
|
12 |
+
- core/fontwatchrunner.js
|
13 |
+
- core/fontwatcher.js
|
14 |
+
- core/webfont.js
|
15 |
+
- core/initialize.js
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
google:
|
20 |
+
- modules/google/fontapiurlbuilder.js
|
21 |
+
- modules/google/fontapiparser.js
|
22 |
+
- modules/google/googlefontapi.js
|
23 |
+
|
24 |
+
fontdeck:
|
25 |
+
- modules/fontdeck.js
|
26 |
+
|
27 |
+
typekit:
|
28 |
+
- modules/typekit.js
|
29 |
+
|
30 |
+
monotype:
|
31 |
+
- modules/monotype.js
|
32 |
+
|
33 |
+
custom:
|
34 |
+
- modules/custom.js
|
modules/webfont-loader/vendor-typekit/src/modules/custom.js
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.modules.Custom');
|
2 |
+
|
3 |
+
goog.require('webfont.Font');
|
4 |
+
goog.require('webfont.StyleSheetWaiter');
|
5 |
+
|
6 |
+
/**
|
7 |
+
*
|
8 |
+
* WebFont.load({
|
9 |
+
* custom: {
|
10 |
+
* families: ['Font1', 'Font2'],
|
11 |
+
* urls: [ 'https://moo', 'https://meuh' ] }
|
12 |
+
* });
|
13 |
+
*
|
14 |
+
* @constructor
|
15 |
+
* @implements {webfont.FontModule}
|
16 |
+
*/
|
17 |
+
webfont.modules.Custom = function(domHelper, configuration) {
|
18 |
+
this.domHelper_ = domHelper;
|
19 |
+
this.configuration_ = configuration;
|
20 |
+
};
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @const
|
24 |
+
* @type {string}
|
25 |
+
*/
|
26 |
+
webfont.modules.Custom.NAME = 'custom';
|
27 |
+
|
28 |
+
goog.scope(function () {
|
29 |
+
var Custom = webfont.modules.Custom,
|
30 |
+
Font = webfont.Font,
|
31 |
+
StyleSheetWaiter = webfont.StyleSheetWaiter;
|
32 |
+
|
33 |
+
Custom.prototype.load = function(onReady) {
|
34 |
+
var i, len;
|
35 |
+
var urls = this.configuration_['urls'] || [];
|
36 |
+
var familiesConfiguration = this.configuration_['families'] || [];
|
37 |
+
var fontTestStrings = this.configuration_['testStrings'] || {};
|
38 |
+
var waiter = new StyleSheetWaiter();
|
39 |
+
for (i = 0, len = urls.length; i < len; i++) {
|
40 |
+
this.domHelper_.loadStylesheet(urls[i], waiter.startWaitingLoad());
|
41 |
+
}
|
42 |
+
|
43 |
+
var fonts = [];
|
44 |
+
|
45 |
+
for (i = 0, len = familiesConfiguration.length; i < len; i++) {
|
46 |
+
var components = familiesConfiguration[i].split(":");
|
47 |
+
|
48 |
+
if (components[1]) {
|
49 |
+
var variations = components[1].split(",");
|
50 |
+
|
51 |
+
for (var j = 0; j < variations.length; j += 1) {
|
52 |
+
fonts.push(new Font(components[0], variations[j]));
|
53 |
+
}
|
54 |
+
} else {
|
55 |
+
fonts.push(new Font(components[0]));
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
waiter.waitWhileNeededThen(function() {
|
60 |
+
onReady(fonts, fontTestStrings);
|
61 |
+
});
|
62 |
+
};
|
63 |
+
});
|
modules/webfont-loader/vendor-typekit/src/modules/fontdeck.js
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.modules.Fontdeck');
|
2 |
+
|
3 |
+
goog.require('webfont.Font');
|
4 |
+
|
5 |
+
/**
|
6 |
+
* @constructor
|
7 |
+
* @implements {webfont.FontModule}
|
8 |
+
*/
|
9 |
+
webfont.modules.Fontdeck = function(domHelper, configuration) {
|
10 |
+
this.domHelper_ = domHelper;
|
11 |
+
this.configuration_ = configuration;
|
12 |
+
this.fonts_ = [];
|
13 |
+
};
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @const
|
17 |
+
* @type {string}
|
18 |
+
*/
|
19 |
+
webfont.modules.Fontdeck.NAME = 'fontdeck';
|
20 |
+
webfont.modules.Fontdeck.HOOK = '__webfontfontdeckmodule__';
|
21 |
+
webfont.modules.Fontdeck.API = 'https://f.fontdeck.com/s/css/js/';
|
22 |
+
|
23 |
+
goog.scope(function () {
|
24 |
+
var Fontdeck = webfont.modules.Fontdeck,
|
25 |
+
Font = webfont.Font,
|
26 |
+
FontVariationDescription = webfont.FontVariationDescription;
|
27 |
+
|
28 |
+
Fontdeck.prototype.getScriptSrc = function(projectId) {
|
29 |
+
// For empty iframes, fall back to main window's hostname.
|
30 |
+
var hostname = this.domHelper_.getHostName();
|
31 |
+
var api = this.configuration_['api'] || webfont.modules.Fontdeck.API;
|
32 |
+
return api + hostname + '/' + projectId + '.js';
|
33 |
+
};
|
34 |
+
|
35 |
+
Fontdeck.prototype.load = function(onReady) {
|
36 |
+
var projectId = this.configuration_['id'];
|
37 |
+
var loadWindow = this.domHelper_.getLoadWindow();
|
38 |
+
var self = this;
|
39 |
+
|
40 |
+
if (projectId) {
|
41 |
+
// Provide data to Fontdeck for processing.
|
42 |
+
if (!loadWindow[webfont.modules.Fontdeck.HOOK]) {
|
43 |
+
loadWindow[webfont.modules.Fontdeck.HOOK] = {};
|
44 |
+
}
|
45 |
+
|
46 |
+
// Fontdeck will call this function to indicate support status
|
47 |
+
// and what fonts are provided.
|
48 |
+
loadWindow[webfont.modules.Fontdeck.HOOK][projectId] = function(fontdeckSupports, data) {
|
49 |
+
for (var i = 0, j = data['fonts'].length; i<j; ++i) {
|
50 |
+
var font = data['fonts'][i];
|
51 |
+
self.fonts_.push(new Font(font['name'], Font.parseCssVariation('font-weight:' + font['weight'] + ';font-style:' + font['style'])));
|
52 |
+
}
|
53 |
+
onReady(self.fonts_);
|
54 |
+
};
|
55 |
+
|
56 |
+
// Call the Fontdeck API.
|
57 |
+
this.domHelper_.loadScript(this.getScriptSrc(projectId), function (err) {
|
58 |
+
if (err) {
|
59 |
+
onReady([]);
|
60 |
+
}
|
61 |
+
});
|
62 |
+
} else {
|
63 |
+
onReady([]);
|
64 |
+
}
|
65 |
+
};
|
66 |
+
});
|
modules/webfont-loader/vendor-typekit/src/modules/google/fontapiparser.js
ADDED
@@ -0,0 +1,181 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.modules.google.FontApiParser');
|
2 |
+
|
3 |
+
goog.require('webfont.Font');
|
4 |
+
|
5 |
+
/**
|
6 |
+
* @constructor
|
7 |
+
*/
|
8 |
+
webfont.modules.google.FontApiParser = function(fontFamilies) {
|
9 |
+
this.fontFamilies_ = fontFamilies;
|
10 |
+
this.parsedFonts_ = [];
|
11 |
+
this.fontTestStrings_ = {};
|
12 |
+
};
|
13 |
+
|
14 |
+
webfont.modules.google.FontApiParser.INT_FONTS = {
|
15 |
+
'latin': webfont.FontWatchRunner.DEFAULT_TEST_STRING,
|
16 |
+
'latin-ext': '\u00E7\u00F6\u00FC\u011F\u015F',
|
17 |
+
'cyrillic': '\u0439\u044f\u0416',
|
18 |
+
'greek': '\u03b1\u03b2\u03a3',
|
19 |
+
'khmer': '\u1780\u1781\u1782',
|
20 |
+
'Hanuman': '\u1780\u1781\u1782' // For backward compatibility
|
21 |
+
};
|
22 |
+
|
23 |
+
webfont.modules.google.FontApiParser.WEIGHTS = {
|
24 |
+
'thin': '1',
|
25 |
+
'extralight': '2',
|
26 |
+
'extra-light': '2',
|
27 |
+
'ultralight': '2',
|
28 |
+
'ultra-light': '2',
|
29 |
+
'light': '3',
|
30 |
+
'regular': '4',
|
31 |
+
'book': '4',
|
32 |
+
'medium': '5',
|
33 |
+
'semi-bold': '6',
|
34 |
+
'semibold': '6',
|
35 |
+
'demi-bold': '6',
|
36 |
+
'demibold': '6',
|
37 |
+
'bold': '7',
|
38 |
+
'extra-bold': '8',
|
39 |
+
'extrabold': '8',
|
40 |
+
'ultra-bold': '8',
|
41 |
+
'ultrabold': '8',
|
42 |
+
'black': '9',
|
43 |
+
'heavy': '9',
|
44 |
+
'l': '3',
|
45 |
+
'r': '4',
|
46 |
+
'b': '7'
|
47 |
+
};
|
48 |
+
|
49 |
+
webfont.modules.google.FontApiParser.STYLES = {
|
50 |
+
'i': 'i',
|
51 |
+
'italic': 'i',
|
52 |
+
'n': 'n',
|
53 |
+
'normal': 'n'
|
54 |
+
};
|
55 |
+
|
56 |
+
webfont.modules.google.FontApiParser.VARIATION_MATCH =
|
57 |
+
new RegExp("^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|" +
|
58 |
+
"(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i" +
|
59 |
+
"|normal|italic)?$");
|
60 |
+
|
61 |
+
goog.scope(function () {
|
62 |
+
var FontApiParser = webfont.modules.google.FontApiParser,
|
63 |
+
Font = webfont.Font;
|
64 |
+
|
65 |
+
FontApiParser.prototype.parse = function() {
|
66 |
+
var length = this.fontFamilies_.length;
|
67 |
+
|
68 |
+
for (var i = 0; i < length; i++) {
|
69 |
+
var elements = this.fontFamilies_[i].split(":");
|
70 |
+
var fontFamily = elements[0].replace(/\+/g, " ");
|
71 |
+
var variations = ['n4'];
|
72 |
+
|
73 |
+
if (elements.length >= 2) {
|
74 |
+
var fvds = this.parseVariations_(elements[1]);
|
75 |
+
|
76 |
+
if (fvds.length > 0) {
|
77 |
+
variations = fvds;
|
78 |
+
}
|
79 |
+
if (elements.length == 3) {
|
80 |
+
var subsets = this.parseSubsets_(elements[2]);
|
81 |
+
if (subsets.length > 0) {
|
82 |
+
var fontTestString = FontApiParser.INT_FONTS[subsets[0]];
|
83 |
+
|
84 |
+
if (fontTestString) {
|
85 |
+
this.fontTestStrings_[fontFamily] = fontTestString;
|
86 |
+
}
|
87 |
+
}
|
88 |
+
}
|
89 |
+
}
|
90 |
+
|
91 |
+
// For backward compatibility
|
92 |
+
if (!this.fontTestStrings_[fontFamily]) {
|
93 |
+
var hanumanTestString = FontApiParser.INT_FONTS[fontFamily];
|
94 |
+
if (hanumanTestString) {
|
95 |
+
this.fontTestStrings_[fontFamily] = hanumanTestString;
|
96 |
+
}
|
97 |
+
}
|
98 |
+
|
99 |
+
for (var j = 0; j < variations.length; j += 1) {
|
100 |
+
this.parsedFonts_.push(new Font(fontFamily, variations[j]));
|
101 |
+
}
|
102 |
+
}
|
103 |
+
};
|
104 |
+
|
105 |
+
FontApiParser.prototype.generateFontVariationDescription_ = function(variation) {
|
106 |
+
if (!variation.match(/^[\w-]+$/)) {
|
107 |
+
return '';
|
108 |
+
}
|
109 |
+
var normalizedVariation = variation.toLowerCase();
|
110 |
+
var groups = FontApiParser.VARIATION_MATCH.exec(normalizedVariation);
|
111 |
+
if (groups == null) {
|
112 |
+
return '';
|
113 |
+
}
|
114 |
+
var styleMatch = this.normalizeStyle_(groups[2]);
|
115 |
+
var weightMatch = this.normalizeWeight_(groups[1]);
|
116 |
+
return [styleMatch, weightMatch].join('');
|
117 |
+
};
|
118 |
+
|
119 |
+
|
120 |
+
FontApiParser.prototype.normalizeStyle_ = function(parsedStyle) {
|
121 |
+
if (parsedStyle == null || parsedStyle == '') {
|
122 |
+
return 'n';
|
123 |
+
}
|
124 |
+
return FontApiParser.STYLES[parsedStyle];
|
125 |
+
};
|
126 |
+
|
127 |
+
|
128 |
+
FontApiParser.prototype.normalizeWeight_ = function(parsedWeight) {
|
129 |
+
if (parsedWeight == null || parsedWeight == '') {
|
130 |
+
return '4';
|
131 |
+
}
|
132 |
+
var weight = FontApiParser.WEIGHTS[parsedWeight];
|
133 |
+
if (weight) {
|
134 |
+
return weight;
|
135 |
+
}
|
136 |
+
if (isNaN(parsedWeight)) {
|
137 |
+
return '4';
|
138 |
+
}
|
139 |
+
return parsedWeight.substr(0, 1);
|
140 |
+
};
|
141 |
+
|
142 |
+
|
143 |
+
FontApiParser.prototype.parseVariations_ = function(variations) {
|
144 |
+
var finalVariations = [];
|
145 |
+
|
146 |
+
if (!variations) {
|
147 |
+
return finalVariations;
|
148 |
+
}
|
149 |
+
var providedVariations = variations.split(",");
|
150 |
+
var length = providedVariations.length;
|
151 |
+
|
152 |
+
for (var i = 0; i < length; i++) {
|
153 |
+
var variation = providedVariations[i];
|
154 |
+
var fvd = this.generateFontVariationDescription_(variation);
|
155 |
+
|
156 |
+
if (fvd) {
|
157 |
+
finalVariations.push(fvd);
|
158 |
+
}
|
159 |
+
}
|
160 |
+
return finalVariations;
|
161 |
+
};
|
162 |
+
|
163 |
+
|
164 |
+
FontApiParser.prototype.parseSubsets_ = function(subsets) {
|
165 |
+
var finalSubsets = [];
|
166 |
+
|
167 |
+
if (!subsets) {
|
168 |
+
return finalSubsets;
|
169 |
+
}
|
170 |
+
return subsets.split(",");
|
171 |
+
};
|
172 |
+
|
173 |
+
|
174 |
+
FontApiParser.prototype.getFonts = function() {
|
175 |
+
return this.parsedFonts_;
|
176 |
+
};
|
177 |
+
|
178 |
+
FontApiParser.prototype.getFontTestStrings = function() {
|
179 |
+
return this.fontTestStrings_;
|
180 |
+
};
|
181 |
+
});
|
modules/webfont-loader/vendor-typekit/src/modules/google/fontapiurlbuilder.js
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.modules.google.FontApiUrlBuilder');
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @constructor
|
5 |
+
*/
|
6 |
+
webfont.modules.google.FontApiUrlBuilder = function(apiUrl, text) {
|
7 |
+
if (apiUrl) {
|
8 |
+
this.apiUrl_ = apiUrl;
|
9 |
+
} else {
|
10 |
+
this.apiUrl_ = webfont.modules.google.FontApiUrlBuilder.DEFAULT_API_URL;
|
11 |
+
}
|
12 |
+
this.fontFamilies_ = [];
|
13 |
+
this.subsets_ = [];
|
14 |
+
this.text_ = text || '';
|
15 |
+
};
|
16 |
+
|
17 |
+
|
18 |
+
webfont.modules.google.FontApiUrlBuilder.DEFAULT_API_URL = 'https://fonts.googleapis.com/css';
|
19 |
+
|
20 |
+
goog.scope(function () {
|
21 |
+
var FontApiUrlBuilder = webfont.modules.google.FontApiUrlBuilder;
|
22 |
+
|
23 |
+
FontApiUrlBuilder.prototype.setFontFamilies = function(fontFamilies) {
|
24 |
+
this.parseFontFamilies_(fontFamilies);
|
25 |
+
};
|
26 |
+
|
27 |
+
|
28 |
+
FontApiUrlBuilder.prototype.parseFontFamilies_ =
|
29 |
+
function(fontFamilies) {
|
30 |
+
var length = fontFamilies.length;
|
31 |
+
|
32 |
+
for (var i = 0; i < length; i++) {
|
33 |
+
var elements = fontFamilies[i].split(':');
|
34 |
+
|
35 |
+
if (elements.length == 3) {
|
36 |
+
this.subsets_.push(elements.pop());
|
37 |
+
}
|
38 |
+
var joinCharacter = '';
|
39 |
+
if (elements.length == 2 && elements[1] != ''){
|
40 |
+
joinCharacter = ':';
|
41 |
+
}
|
42 |
+
this.fontFamilies_.push(elements.join(joinCharacter));
|
43 |
+
}
|
44 |
+
};
|
45 |
+
|
46 |
+
|
47 |
+
FontApiUrlBuilder.prototype.webSafe = function(string) {
|
48 |
+
return string.replace(/ /g, '+');
|
49 |
+
};
|
50 |
+
|
51 |
+
|
52 |
+
FontApiUrlBuilder.prototype.build = function() {
|
53 |
+
if (this.fontFamilies_.length == 0) {
|
54 |
+
throw new Error('No fonts to load!');
|
55 |
+
}
|
56 |
+
if (this.apiUrl_.indexOf("kit=") != -1) {
|
57 |
+
return this.apiUrl_;
|
58 |
+
}
|
59 |
+
var length = this.fontFamilies_.length;
|
60 |
+
var sb = [];
|
61 |
+
|
62 |
+
for (var i = 0; i < length; i++) {
|
63 |
+
sb.push(this.webSafe(this.fontFamilies_[i]));
|
64 |
+
}
|
65 |
+
var url = this.apiUrl_ + '?family=' + sb.join('%7C'); // '|' escaped.
|
66 |
+
|
67 |
+
if (this.subsets_.length > 0) {
|
68 |
+
url += '&subset=' + this.subsets_.join(',');
|
69 |
+
}
|
70 |
+
|
71 |
+
if (this.text_.length > 0) {
|
72 |
+
url += '&text=' + encodeURIComponent(this.text_);
|
73 |
+
}
|
74 |
+
|
75 |
+
return url;
|
76 |
+
};
|
77 |
+
});
|
modules/webfont-loader/vendor-typekit/src/modules/google/googlefontapi.js
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.modules.google.GoogleFontApi');
|
2 |
+
|
3 |
+
goog.require('webfont.modules.google.FontApiUrlBuilder');
|
4 |
+
goog.require('webfont.modules.google.FontApiParser');
|
5 |
+
goog.require('webfont.FontWatchRunner');
|
6 |
+
goog.require('webfont.StyleSheetWaiter');
|
7 |
+
|
8 |
+
/**
|
9 |
+
* @constructor
|
10 |
+
* @implements {webfont.FontModule}
|
11 |
+
*/
|
12 |
+
webfont.modules.google.GoogleFontApi = function(domHelper, configuration) {
|
13 |
+
this.domHelper_ = domHelper;
|
14 |
+
this.configuration_ = configuration;
|
15 |
+
};
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @const
|
19 |
+
* @type {string}
|
20 |
+
*/
|
21 |
+
webfont.modules.google.GoogleFontApi.NAME = 'google';
|
22 |
+
|
23 |
+
goog.scope(function () {
|
24 |
+
var GoogleFontApi = webfont.modules.google.GoogleFontApi,
|
25 |
+
FontWatchRunner = webfont.FontWatchRunner,
|
26 |
+
StyleSheetWaiter = webfont.StyleSheetWaiter,
|
27 |
+
FontApiUrlBuilder = webfont.modules.google.FontApiUrlBuilder,
|
28 |
+
FontApiParser = webfont.modules.google.FontApiParser;
|
29 |
+
|
30 |
+
GoogleFontApi.METRICS_COMPATIBLE_FONTS = {
|
31 |
+
"Arimo": true,
|
32 |
+
"Cousine": true,
|
33 |
+
"Tinos": true
|
34 |
+
};
|
35 |
+
|
36 |
+
GoogleFontApi.prototype.load = function(onReady) {
|
37 |
+
var waiter = new StyleSheetWaiter();
|
38 |
+
var domHelper = this.domHelper_;
|
39 |
+
var fontApiUrlBuilder = new FontApiUrlBuilder(
|
40 |
+
this.configuration_['api'],
|
41 |
+
this.configuration_['text']
|
42 |
+
);
|
43 |
+
var fontFamilies = this.configuration_['families'];
|
44 |
+
fontApiUrlBuilder.setFontFamilies(fontFamilies);
|
45 |
+
|
46 |
+
var fontApiParser = new FontApiParser(fontFamilies);
|
47 |
+
fontApiParser.parse();
|
48 |
+
|
49 |
+
domHelper.loadStylesheet(fontApiUrlBuilder.build(), waiter.startWaitingLoad());
|
50 |
+
waiter.waitWhileNeededThen(function() {
|
51 |
+
onReady(fontApiParser.getFonts(), fontApiParser.getFontTestStrings(), GoogleFontApi.METRICS_COMPATIBLE_FONTS);
|
52 |
+
});
|
53 |
+
};
|
54 |
+
});
|
modules/webfont-loader/vendor-typekit/src/modules/monotype.js
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.modules.Monotype');
|
2 |
+
|
3 |
+
goog.require('webfont.Font');
|
4 |
+
|
5 |
+
/**
|
6 |
+
webfont.load({
|
7 |
+
monotype: {
|
8 |
+
projectId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'//this is your Fonts.com Web fonts projectId
|
9 |
+
}
|
10 |
+
});
|
11 |
+
*/
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @constructor
|
15 |
+
* @implements {webfont.FontModule}
|
16 |
+
*/
|
17 |
+
webfont.modules.Monotype = function(domHelper, configuration) {
|
18 |
+
this.domHelper_ = domHelper;
|
19 |
+
this.configuration_ = configuration;
|
20 |
+
};
|
21 |
+
|
22 |
+
/**
|
23 |
+
* name of the module through which external API is supposed to call the MonotypeFontAPI.
|
24 |
+
*
|
25 |
+
* @const
|
26 |
+
* @type {string}
|
27 |
+
*/
|
28 |
+
webfont.modules.Monotype.NAME = 'monotype';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* __mti_fntLst is the name of function that exposes Monotype's font list.
|
32 |
+
* @const
|
33 |
+
*/
|
34 |
+
webfont.modules.Monotype.HOOK = '__mti_fntLst';
|
35 |
+
|
36 |
+
/**
|
37 |
+
* __MonotypeAPIScript__ is the id of script added by google API. Currently 'fonts.com' supports only one script in a page.
|
38 |
+
* This may require change in future if 'fonts.com' begins supporting multiple scripts per page.
|
39 |
+
* @const
|
40 |
+
*/
|
41 |
+
webfont.modules.Monotype.SCRIPTID = '__MonotypeAPIScript__';
|
42 |
+
|
43 |
+
/**
|
44 |
+
* __MonotypeConfiguration__ is function exposed to fonts.com. fonts.com will use this function to get webfontloader configuration
|
45 |
+
* @const
|
46 |
+
*/
|
47 |
+
webfont.modules.Monotype.CONFIGURATION = '__MonotypeConfiguration__';
|
48 |
+
|
49 |
+
goog.scope(function() {
|
50 |
+
var Monotype = webfont.modules.Monotype,
|
51 |
+
Font = webfont.Font;
|
52 |
+
|
53 |
+
|
54 |
+
Monotype.prototype.getScriptSrc = function(projectId, version) {
|
55 |
+
var api = (this.configuration_['api'] || 'https://fast.fonts.net/jsapi')
|
56 |
+
return api + '/' + projectId + '.js' + (version ? '?v=' + version : '');
|
57 |
+
};
|
58 |
+
|
59 |
+
Monotype.prototype.load = function(onReady) {
|
60 |
+
var self = this;
|
61 |
+
var projectId = self.configuration_['projectId'];
|
62 |
+
var version = self.configuration_['version'];
|
63 |
+
|
64 |
+
|
65 |
+
function checkAndLoadIfDownloaded() {
|
66 |
+
if (loadWindow[Monotype.HOOK + projectId]) {
|
67 |
+
var mti_fnts = loadWindow[Monotype.HOOK + projectId](),
|
68 |
+
fonts = [],
|
69 |
+
fntVariation;
|
70 |
+
|
71 |
+
if (mti_fnts) {
|
72 |
+
for (var i = 0; i < mti_fnts.length; i++) {
|
73 |
+
var fnt = mti_fnts[i]["fontfamily"];
|
74 |
+
|
75 |
+
//Check if font-style and font-weight is available
|
76 |
+
if (mti_fnts[i]["fontStyle"] != undefined && mti_fnts[i]["fontWeight"] != undefined) {
|
77 |
+
fntVariation = mti_fnts[i]["fontStyle"] + mti_fnts[i]["fontWeight"];
|
78 |
+
fonts.push(new Font(fnt, fntVariation));
|
79 |
+
} else {
|
80 |
+
fonts.push(new Font(fnt));
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
onReady(fonts);
|
85 |
+
} else {
|
86 |
+
setTimeout(function() {
|
87 |
+
checkAndLoadIfDownloaded();
|
88 |
+
}, 50);
|
89 |
+
}
|
90 |
+
}
|
91 |
+
if (projectId) {
|
92 |
+
var loadWindow = self.domHelper_.getLoadWindow();
|
93 |
+
|
94 |
+
var script = this.domHelper_.loadScript(self.getScriptSrc(projectId, version), function(err) {
|
95 |
+
if (err) {
|
96 |
+
onReady([]);
|
97 |
+
} else {
|
98 |
+
loadWindow[Monotype.CONFIGURATION+ projectId] = function() {
|
99 |
+
return self.configuration_;
|
100 |
+
};
|
101 |
+
|
102 |
+
checkAndLoadIfDownloaded();
|
103 |
+
}
|
104 |
+
});
|
105 |
+
script["id"] = Monotype.SCRIPTID + projectId;
|
106 |
+
} else {
|
107 |
+
onReady([]);
|
108 |
+
}
|
109 |
+
};
|
110 |
+
});
|
modules/webfont-loader/vendor-typekit/src/modules/typekit.js
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
goog.provide('webfont.modules.Typekit');
|
2 |
+
|
3 |
+
goog.require('webfont.Font');
|
4 |
+
|
5 |
+
/**
|
6 |
+
* @constructor
|
7 |
+
* @implements {webfont.FontModule}
|
8 |
+
*/
|
9 |
+
webfont.modules.Typekit = function(domHelper, configuration) {
|
10 |
+
this.domHelper_ = domHelper;
|
11 |
+
this.configuration_ = configuration;
|
12 |
+
};
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @const
|
16 |
+
* @type {string}
|
17 |
+
*/
|
18 |
+
webfont.modules.Typekit.NAME = 'typekit';
|
19 |
+
|
20 |
+
goog.scope(function () {
|
21 |
+
var Typekit = webfont.modules.Typekit,
|
22 |
+
Font = webfont.Font;
|
23 |
+
|
24 |
+
Typekit.prototype.getScriptSrc = function(kitId) {
|
25 |
+
var api = this.configuration_['api'] || 'https://use.typekit.net';
|
26 |
+
return api + '/' + kitId + '.js';
|
27 |
+
};
|
28 |
+
|
29 |
+
Typekit.prototype.load = function(onReady) {
|
30 |
+
var kitId = this.configuration_['id'];
|
31 |
+
var configuration = this.configuration_;
|
32 |
+
var loadWindow = this.domHelper_.getLoadWindow();
|
33 |
+
var that = this;
|
34 |
+
|
35 |
+
if (kitId) {
|
36 |
+
// Load the Typekit script. Once it is done loading we grab its configuration
|
37 |
+
// and use that to populate the fonts we should watch.
|
38 |
+
this.domHelper_.loadScript(this.getScriptSrc(kitId), function (err) {
|
39 |
+
if (err) {
|
40 |
+
onReady([]);
|
41 |
+
} else {
|
42 |
+
if (loadWindow['Typekit'] && loadWindow['Typekit']['config'] && loadWindow['Typekit']['config']['fn']) {
|
43 |
+
var fn = loadWindow['Typekit']['config']['fn'],
|
44 |
+
fonts = [];
|
45 |
+
|
46 |
+
for (var i = 0; i < fn.length; i += 2) {
|
47 |
+
var font = fn[i],
|
48 |
+
variations = fn[i + 1];
|
49 |
+
|
50 |
+
for (var j = 0; j < variations.length; j++) {
|
51 |
+
fonts.push(new Font(font, variations[j]));
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
// Kick off font loading but disable font events so
|
56 |
+
// we don't duplicate font watching.
|
57 |
+
try {
|
58 |
+
loadWindow['Typekit']['load']({
|
59 |
+
'events': false,
|
60 |
+
'classes': false,
|
61 |
+
'async': true
|
62 |
+
});
|
63 |
+
} catch (e) {}
|
64 |
+
|
65 |
+
onReady(fonts);
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}, 2000);
|
69 |
+
} else {
|
70 |
+
onReady([]);
|
71 |
+
}
|
72 |
+
};
|
73 |
+
});
|
modules/webfont-loader/vendor-typekit/webfontloader.js
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Web Font Loader v1.6.28 - (c) Adobe Systems, Google. License: Apache 2.0 */(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function p(a,b,c){p=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?aa:ba;return p.apply(null,arguments)}var q=Date.now||function(){return+new Date};function ca(a,b){this.a=a;this.o=b||a;this.c=this.o.document}var da=!!window.FontFace;function t(a,b,c,d){b=a.c.createElement(b);if(c)for(var e in c)c.hasOwnProperty(e)&&("style"==e?b.style.cssText=c[e]:b.setAttribute(e,c[e]));d&&b.appendChild(a.c.createTextNode(d));return b}function u(a,b,c){a=a.c.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(c,a.lastChild)}function v(a){a.parentNode&&a.parentNode.removeChild(a)}
|
2 |
+
function w(a,b,c){b=b||[];c=c||[];for(var d=a.className.split(/\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<d.length;g+=1)if(b[e]===d[g]){f=!0;break}f||d.push(b[e])}b=[];for(e=0;e<d.length;e+=1){f=!1;for(g=0;g<c.length;g+=1)if(d[e]===c[g]){f=!0;break}f||b.push(d[e])}a.className=b.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function y(a,b){for(var c=a.className.split(/\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return!0;return!1}
|
3 |
+
function ea(a){return a.o.location.hostname||a.a.location.hostname}function z(a,b,c){function d(){m&&e&&f&&(m(g),m=null)}b=t(a,"link",{rel:"stylesheet",href:b,media:"all"});var e=!1,f=!0,g=null,m=c||null;da?(b.onload=function(){e=!0;d()},b.onerror=function(){e=!0;g=Error("Stylesheet failed to load");d()}):setTimeout(function(){e=!0;d()},0);u(a,"head",b)}
|
4 |
+
function A(a,b,c,d){var e=a.c.getElementsByTagName("head")[0];if(e){var f=t(a,"script",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(g=!0,c&&c(null),f.onload=f.onreadystatechange=null,"HEAD"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);setTimeout(function(){g||(g=!0,c&&c(Error("Script load timeout")))},d||5E3);return f}return null};function B(){this.a=0;this.c=null}function C(a){a.a++;return function(){a.a--;D(a)}}function E(a,b){a.c=b;D(a)}function D(a){0==a.a&&a.c&&(a.c(),a.c=null)};function F(a){this.a=a||"-"}F.prototype.c=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.a)};function G(a,b){this.c=a;this.f=4;this.a="n";var c=(b||"n4").match(/^([nio])([1-9])$/i);c&&(this.a=c[1],this.f=parseInt(c[2],10))}function fa(a){return H(a)+" "+(a.f+"00")+" 300px "+I(a.c)}function I(a){var b=[];a=a.split(/,\s*/);for(var c=0;c<a.length;c++){var d=a[c].replace(/['"]/g,"");-1!=d.indexOf(" ")||/^\d/.test(d)?b.push("'"+d+"'"):b.push(d)}return b.join(",")}function J(a){return a.a+a.f}function H(a){var b="normal";"o"===a.a?b="oblique":"i"===a.a&&(b="italic");return b}
|
5 |
+
function ga(a){var b=4,c="n",d=null;a&&((d=a.match(/(normal|oblique|italic)/i))&&d[1]&&(c=d[1].substr(0,1).toLowerCase()),(d=a.match(/([1-9]00|normal|bold)/i))&&d[1]&&(/bold/i.test(d[1])?b=7:/[1-9]00/.test(d[1])&&(b=parseInt(d[1].substr(0,1),10))));return c+b};function ha(a,b){this.c=a;this.f=a.o.document.documentElement;this.h=b;this.a=new F("-");this.j=!1!==b.events;this.g=!1!==b.classes}function ia(a){a.g&&w(a.f,[a.a.c("wf","loading")]);K(a,"loading")}function L(a){if(a.g){var b=y(a.f,a.a.c("wf","active")),c=[],d=[a.a.c("wf","loading")];b||c.push(a.a.c("wf","inactive"));w(a.f,c,d)}K(a,"inactive")}function K(a,b,c){if(a.j&&a.h[b])if(c)a.h[b](c.c,J(c));else a.h[b]()};function ja(){this.c={}}function ka(a,b,c){var d=[],e;for(e in b)if(b.hasOwnProperty(e)){var f=a.c[e];f&&d.push(f(b[e],c))}return d};function M(a,b){this.c=a;this.f=b;this.a=t(this.c,"span",{"aria-hidden":"true"},this.f)}function N(a){u(a.c,"body",a.a)}function O(a){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+I(a.c)+";"+("font-style:"+H(a)+";font-weight:"+(a.f+"00")+";")};function P(a,b,c,d,e,f){this.g=a;this.j=b;this.a=d;this.c=c;this.f=e||3E3;this.h=f||void 0}P.prototype.start=function(){var a=this.c.o.document,b=this,c=q(),d=new Promise(function(d,e){function f(){q()-c>=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?d():setTimeout(f,25)},function(){e()})}f()}),e=null,f=new Promise(function(a,d){e=setTimeout(d,b.f)});Promise.race([f,d]).then(function(){e&&(clearTimeout(e),e=null);b.g(b.a)},function(){b.j(b.a)})};function Q(a,b,c,d,e,f,g){this.v=a;this.B=b;this.c=c;this.a=d;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.m=this.j=this.h=this.g=null;this.g=new M(this.c,this.s);this.h=new M(this.c,this.s);this.j=new M(this.c,this.s);this.m=new M(this.c,this.s);a=new G(this.a.c+",serif",J(this.a));a=O(a);this.g.a.style.cssText=a;a=new G(this.a.c+",sans-serif",J(this.a));a=O(a);this.h.a.style.cssText=a;a=new G("serif",J(this.a));a=O(a);this.j.a.style.cssText=a;a=new G("sans-serif",J(this.a));a=
|
6 |
+
O(a);this.m.a.style.cssText=a;N(this.g);N(this.h);N(this.j);N(this.m)}var R={D:"serif",C:"sans-serif"},S=null;function T(){if(null===S){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);S=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return S}Q.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.m.a.offsetWidth;this.A=q();U(this)};
|
7 |
+
function la(a,b,c){for(var d in R)if(R.hasOwnProperty(d)&&b===a.f[R[d]]&&c===a.f[R[d]])return!0;return!1}function U(a){var b=a.g.a.offsetWidth,c=a.h.a.offsetWidth,d;(d=b===a.f.serif&&c===a.f["sans-serif"])||(d=T()&&la(a,b,c));d?q()-a.A>=a.w?T()&&la(a,b,c)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):ma(a):V(a,a.v)}function ma(a){setTimeout(p(function(){U(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.m.a);b(this.a)},a),0)};function W(a,b,c){this.c=a;this.a=b;this.f=0;this.m=this.j=!1;this.s=c}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,J(a).toString(),"active")],[b.a.c("wf",a.c,J(a).toString(),"loading"),b.a.c("wf",a.c,J(a).toString(),"inactive")]);K(b,"fontactive",a);this.m=!0;na(this)};
|
8 |
+
W.prototype.h=function(a){var b=this.a;if(b.g){var c=y(b.f,b.a.c("wf",a.c,J(a).toString(),"active")),d=[],e=[b.a.c("wf",a.c,J(a).toString(),"loading")];c||d.push(b.a.c("wf",a.c,J(a).toString(),"inactive"));w(b.f,d,e)}K(b,"fontinactive",a);na(this)};function na(a){0==--a.f&&a.j&&(a.m?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),K(a,"active")):L(a.a))};function oa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}oa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;pa(this,new ha(this.c,a),a)};
|
9 |
+
function qa(a,b,c,d,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,m=d||null||{};if(0===c.length&&f)L(b.a);else{b.f+=c.length;f&&(b.j=f);var h,l=[];for(h=0;h<c.length;h++){var k=c[h],n=m[k.c],r=b.a,x=k;r.g&&w(r.f,[r.a.c("wf",x.c,J(x).toString(),"loading")]);K(r,"fontloading",x);r=null;if(null===X)if(window.FontFace){var x=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent),xa=/OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent)&&/Apple/.exec(window.navigator.vendor);
|
10 |
+
X=x?42<parseInt(x[1],10):xa?!1:!0}else X=!1;X?r=new P(p(b.g,b),p(b.h,b),b.c,k,b.s,n):r=new Q(p(b.g,b),p(b.h,b),b.c,k,b.s,a,n);l.push(r)}for(h=0;h<l.length;h++)l[h].start()}},0)}function pa(a,b,c){var d=[],e=c.timeout;ia(b);var d=ka(a.a,c,a.c),f=new W(a.c,b,e);a.h=d.length;b=0;for(c=d.length;b<c;b++)d[b].load(function(b,d,c){qa(a,f,b,d,c)})};function ra(a,b){this.c=a;this.a=b}
|
11 |
+
ra.prototype.load=function(a){function b(){if(f["__mti_fntLst"+d]){var c=f["__mti_fntLst"+d](),e=[],h;if(c)for(var l=0;l<c.length;l++){var k=c[l].fontfamily;void 0!=c[l].fontStyle&&void 0!=c[l].fontWeight?(h=c[l].fontStyle+c[l].fontWeight,e.push(new G(k,h))):e.push(new G(k))}a(e)}else setTimeout(function(){b()},50)}var c=this,d=c.a.projectId,e=c.a.version;if(d){var f=c.c.o;A(this.c,(c.a.api||"https://fast.fonts.net/jsapi")+"/"+d+".js"+(e?"?v="+e:""),function(e){e?a([]):(f["__MonotypeConfiguration__"+
|
12 |
+
d]=function(){return c.a},b())}).id="__MonotypeAPIScript__"+d}else a([])};function sa(a,b){this.c=a;this.a=b}sa.prototype.load=function(a){var b,c,d=this.a.urls||[],e=this.a.families||[],f=this.a.testStrings||{},g=new B;b=0;for(c=d.length;b<c;b++)z(this.c,d[b],C(g));var m=[];b=0;for(c=e.length;b<c;b++)if(d=e[b].split(":"),d[1])for(var h=d[1].split(","),l=0;l<h.length;l+=1)m.push(new G(d[0],h[l]));else m.push(new G(d[0]));E(g,function(){a(m,f)})};function ta(a,b){a?this.c=a:this.c=ua;this.a=[];this.f=[];this.g=b||""}var ua="https://fonts.googleapis.com/css";function va(a,b){for(var c=b.length,d=0;d<c;d++){var e=b[d].split(":");3==e.length&&a.f.push(e.pop());var f="";2==e.length&&""!=e[1]&&(f=":");a.a.push(e.join(f))}}
|
13 |
+
function wa(a){if(0==a.a.length)throw Error("No fonts to load!");if(-1!=a.c.indexOf("kit="))return a.c;for(var b=a.a.length,c=[],d=0;d<b;d++)c.push(a.a[d].replace(/ /g,"+"));b=a.c+"?family="+c.join("%7C");0<a.f.length&&(b+="&subset="+a.f.join(","));0<a.g.length&&(b+="&text="+encodeURIComponent(a.g));return b};function ya(a){this.f=a;this.a=[];this.c={}}
|
14 |
+
var za={latin:"BESbswy","latin-ext":"\u00e7\u00f6\u00fc\u011f\u015f",cyrillic:"\u0439\u044f\u0416",greek:"\u03b1\u03b2\u03a3",khmer:"\u1780\u1781\u1782",Hanuman:"\u1780\u1781\u1782"},Aa={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},Ba={i:"i",italic:"i",n:"n",normal:"n"},
|
15 |
+
Ca=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;
|
16 |
+
function Da(a){for(var b=a.f.length,c=0;c<b;c++){var d=a.f[c].split(":"),e=d[0].replace(/\+/g," "),f=["n4"];if(2<=d.length){var g;var m=d[1];g=[];if(m)for(var m=m.split(","),h=m.length,l=0;l<h;l++){var k;k=m[l];if(k.match(/^[\w-]+$/)){var n=Ca.exec(k.toLowerCase());if(null==n)k="";else{k=n[2];k=null==k||""==k?"n":Ba[k];n=n[1];if(null==n||""==n)n="4";else var r=Aa[n],n=r?r:isNaN(n)?"4":n.substr(0,1);k=[k,n].join("")}}else k="";k&&g.push(k)}0<g.length&&(f=g);3==d.length&&(d=d[2],g=[],d=d?d.split(","):
|
17 |
+
g,0<d.length&&(d=za[d[0]])&&(a.c[e]=d))}a.c[e]||(d=za[e])&&(a.c[e]=d);for(d=0;d<f.length;d+=1)a.a.push(new G(e,f[d]))}};function Ea(a,b){this.c=a;this.a=b}var Fa={Arimo:!0,Cousine:!0,Tinos:!0};Ea.prototype.load=function(a){var b=new B,c=this.c,d=new ta(this.a.api,this.a.text),e=this.a.families;va(d,e);var f=new ya(e);Da(f);z(c,wa(d),C(b));E(b,function(){a(f.a,f.c,Fa)})};function Ga(a,b){this.c=a;this.a=b}Ga.prototype.load=function(a){var b=this.a.id,c=this.c.o;b?A(this.c,(this.a.api||"https://use.typekit.net")+"/"+b+".js",function(b){if(b)a([]);else if(c.Typekit&&c.Typekit.config&&c.Typekit.config.fn){b=c.Typekit.config.fn;for(var e=[],f=0;f<b.length;f+=2)for(var g=b[f],m=b[f+1],h=0;h<m.length;h++)e.push(new G(g,m[h]));try{c.Typekit.load({events:!1,classes:!1,async:!0})}catch(l){}a(e)}},2E3):a([])};function Ha(a,b){this.c=a;this.f=b;this.a=[]}Ha.prototype.load=function(a){var b=this.f.id,c=this.c.o,d=this;b?(c.__webfontfontdeckmodule__||(c.__webfontfontdeckmodule__={}),c.__webfontfontdeckmodule__[b]=function(b,c){for(var g=0,m=c.fonts.length;g<m;++g){var h=c.fonts[g];d.a.push(new G(h.name,ga("font-weight:"+h.weight+";font-style:"+h.style)))}a(d.a)},A(this.c,(this.f.api||"https://f.fontdeck.com/s/css/js/")+ea(this.c)+"/"+b+".js",function(b){b&&a([])})):a([])};var Y=new oa(window);Y.a.c.custom=function(a,b){return new sa(b,a)};Y.a.c.fontdeck=function(a,b){return new Ha(b,a)};Y.a.c.monotype=function(a,b){return new ra(b,a)};Y.a.c.typekit=function(a,b){return new Ga(b,a)};Y.a.c.google=function(a,b){return new Ea(b,a)};var Z={load:p(Y.load,Y)};"function"===typeof define&&define.amd?define(function(){return Z}):"undefined"!==typeof module&&module.exports?module.exports=Z:(window.WebFont=Z,window.WebFontConfig&&Y.load(window.WebFontConfig));}());
|
modules/webfonts/class-kirki-fonts-google.php
CHANGED
@@ -27,13 +27,13 @@ final class Kirki_Fonts_Google {
|
|
27 |
private static $instance = null;
|
28 |
|
29 |
/**
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
|
38 |
/**
|
39 |
* If set to true, forces loading ALL variants.
|
@@ -73,9 +73,9 @@ final class Kirki_Fonts_Google {
|
|
73 |
}
|
74 |
|
75 |
add_action( 'wp_ajax_kirki_fonts_google_all_get', array( $this, 'get_googlefonts_json' ) );
|
76 |
-
add_action( '
|
77 |
-
add_action( 'wp_ajax_kirki_fonts_standard_all_get', array( $this, '
|
78 |
-
add_action( '
|
79 |
|
80 |
// Populate the array of google fonts.
|
81 |
$this->google_fonts = Kirki_Fonts::get_google_fonts();
|
@@ -230,7 +230,7 @@ final class Kirki_Fonts_Google {
|
|
230 |
* @since 3.0.17
|
231 |
* @return void
|
232 |
*/
|
233 |
-
public function
|
234 |
echo wp_json_encode( Kirki_Fonts::get_standard_fonts() ); // WPCS: XSS ok.
|
235 |
wp_die();
|
236 |
}
|
27 |
private static $instance = null;
|
28 |
|
29 |
/**
|
30 |
+
* DUMMY. DOESN'T DO ANYTHING, SIMPLY BACKWARDS-COMPATIBILITY.
|
31 |
+
*
|
32 |
+
* @static
|
33 |
+
* @access public
|
34 |
+
* @var bool
|
35 |
+
*/
|
36 |
+
public static $force_load_all_subsets = false;
|
37 |
|
38 |
/**
|
39 |
* If set to true, forces loading ALL variants.
|
73 |
}
|
74 |
|
75 |
add_action( 'wp_ajax_kirki_fonts_google_all_get', array( $this, 'get_googlefonts_json' ) );
|
76 |
+
add_action( 'wp_ajax_nopriv_kirki_fonts_google_all_get', array( $this, 'get_googlefonts_json' ) );
|
77 |
+
add_action( 'wp_ajax_kirki_fonts_standard_all_get', array( $this, 'get_standardfonts_json' ) );
|
78 |
+
add_action( 'wp_ajax_nopriv_kirki_fonts_standard_all_get', array( $this, 'get_standardfonts_json' ) );
|
79 |
|
80 |
// Populate the array of google fonts.
|
81 |
$this->google_fonts = Kirki_Fonts::get_google_fonts();
|
230 |
* @since 3.0.17
|
231 |
* @return void
|
232 |
*/
|
233 |
+
public function get_standardfonts_json() {
|
234 |
echo wp_json_encode( Kirki_Fonts::get_standard_fonts() ); // WPCS: XSS ok.
|
235 |
wp_die();
|
236 |
}
|
modules/webfonts/class-kirki-modules-webfonts-async.php
CHANGED
@@ -42,6 +42,15 @@ final class Kirki_Modules_Webfonts_Async {
|
|
42 |
*/
|
43 |
protected $googlefonts;
|
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
/**
|
46 |
* Constructor.
|
47 |
*
|
@@ -59,6 +68,7 @@ final class Kirki_Modules_Webfonts_Async {
|
|
59 |
$this->googlefonts = $googlefonts;
|
60 |
|
61 |
add_action( 'wp_head', array( $this, 'webfont_loader' ) );
|
|
|
62 |
|
63 |
add_filter( 'wp_resource_hints', array( $this, 'resource_hints' ), 10, 2 );
|
64 |
|
@@ -102,7 +112,6 @@ final class Kirki_Modules_Webfonts_Async {
|
|
102 |
// Goes through $this->fonts and adds or removes things as needed.
|
103 |
$this->googlefonts->process_fonts();
|
104 |
|
105 |
-
$fonts_to_load = array();
|
106 |
foreach ( $this->googlefonts->fonts as $font => $weights ) {
|
107 |
foreach ( $weights as $key => $value ) {
|
108 |
if ( 'italic' === $value ) {
|
@@ -111,16 +120,27 @@ final class Kirki_Modules_Webfonts_Async {
|
|
111 |
$weights[ $key ] = str_replace( array( 'regular', 'bold', 'italic' ), array( '400', '', 'i' ), $value );
|
112 |
}
|
113 |
}
|
114 |
-
$fonts_to_load[] = $font . ':' . join( ',', $weights ) . ':cyrillic,cyrillic-ext,devanagari,greek,greek-ext,khmer,latin,latin-ext,vietnamese,hebrew,arabic,bengali,gujarati,tamil,telugu,thai';
|
|
|
|
|
|
|
115 |
}
|
116 |
-
|
117 |
-
|
118 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
}
|
120 |
-
wp_add_inline_script(
|
121 |
-
'webfont-loader',
|
122 |
-
'WebFont.load({google:{families:[\'' . join( '\', \'', $fonts_to_load ) . '\']}});',
|
123 |
-
'after'
|
124 |
-
);
|
125 |
}
|
126 |
}
|
42 |
*/
|
43 |
protected $googlefonts;
|
44 |
|
45 |
+
/**
|
46 |
+
* Fonts to load.
|
47 |
+
*
|
48 |
+
* @access protected
|
49 |
+
* @since 3.0.26
|
50 |
+
* @var array
|
51 |
+
*/
|
52 |
+
protected $fonts_to_load = array();
|
53 |
+
|
54 |
/**
|
55 |
* Constructor.
|
56 |
*
|
68 |
$this->googlefonts = $googlefonts;
|
69 |
|
70 |
add_action( 'wp_head', array( $this, 'webfont_loader' ) );
|
71 |
+
add_action( 'wp_head', array( $this, 'webfont_loader_script' ), 30 );
|
72 |
|
73 |
add_filter( 'wp_resource_hints', array( $this, 'resource_hints' ), 10, 2 );
|
74 |
|
112 |
// Goes through $this->fonts and adds or removes things as needed.
|
113 |
$this->googlefonts->process_fonts();
|
114 |
|
|
|
115 |
foreach ( $this->googlefonts->fonts as $font => $weights ) {
|
116 |
foreach ( $weights as $key => $value ) {
|
117 |
if ( 'italic' === $value ) {
|
120 |
$weights[ $key ] = str_replace( array( 'regular', 'bold', 'italic' ), array( '400', '', 'i' ), $value );
|
121 |
}
|
122 |
}
|
123 |
+
$this->fonts_to_load[] = $font . ':' . join( ',', $weights ) . ':cyrillic,cyrillic-ext,devanagari,greek,greek-ext,khmer,latin,latin-ext,vietnamese,hebrew,arabic,bengali,gujarati,tamil,telugu,thai';
|
124 |
+
}
|
125 |
+
if ( ! empty( $this->fonts_to_load ) ) {
|
126 |
+
Kirki_Modules_Webfont_Loader::$load = true;
|
127 |
}
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Webfont Loader script for Google Fonts.
|
132 |
+
*
|
133 |
+
* @access public
|
134 |
+
* @since 3.0.0
|
135 |
+
*/
|
136 |
+
public function webfont_loader_script() {
|
137 |
+
|
138 |
+
if ( ! empty( $this->fonts_to_load ) ) {
|
139 |
+
wp_add_inline_script(
|
140 |
+
'webfont-loader',
|
141 |
+
'WebFont.load({google:{families:[\'' . join( '\', \'', $this->fonts_to_load ) . '\']}});',
|
142 |
+
'after'
|
143 |
+
);
|
144 |
}
|
|
|
|
|
|
|
|
|
|
|
145 |
}
|
146 |
}
|
modules/webfonts/webfont-names.json
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
["Roboto","Open Sans","Lato","Montserrat","Roboto Condensed","Oswald","Source Sans Pro","Slabo 27px","Raleway","PT Sans","Roboto Slab","Merriweather","Open Sans Condensed","Ubuntu","Playfair Display","Noto Sans","Poppins","Lora","Roboto Mono","PT Serif","Titillium Web","Arimo","Muli","PT Sans Narrow","Noto Serif","Fira Sans","Nunito","Inconsolata","Indie Flower","Anton","Dosis","Bitter","Crimson Text","Oxygen","Nanum Gothic","Cabin","Arvo","Fjalla One","Libre Baskerville","Work Sans","Quicksand","Josefin Sans","Exo 2","Hind","Lobster","Yanone Kaffeesatz","Rubik","Abel","Karla","Abril Fatface","Pacifico","Nunito Sans","Libre Franklin","Merriweather Sans","Varela Round","Ubuntu Condensed","Shadows Into Light","Asap","Exo","Cormorant Garamond","Gloria Hallelujah","Bree Serif","Dancing Script","Questrial","Signika","Source Serif Pro","Archivo Narrow","Source Code Pro","Play","Amatic SC","Acme","Kanit","Maven Pro","EB Garamond","Hind Siliguri","Rajdhani","Rokkitt","Francois One","Patua One","Comfortaa","Berkshire Swash","PT Sans Caption","Crete Round","Cuprum","Cairo","Cinzel","Shrikhand","Vollkorn","Catamaran","Ropa Sans","Heebo","Passion One","Righteous","Pathway Gothic One","Philosopher","Poiret One","Alegreya","Permanent Marker","Noticia Text","Satisfy","Yantramanav","Teko","Old Standard TT","Courgette","Great Vibes","Russo One","Prompt","ABeeZee","Archivo Black","Alegreya Sans","Monda","Domine","Orbitron","Cookie","Kaushan Script","Quattrocento Sans","News Cycle","Tinos","Lobster Two","Concert One","Istok Web","Josefin Slab","Assistant","Cardo","Alfa Slab One","Fredoka One","Gudea","Titan One","Handlee","Quattrocento","Economica","Fira Sans Condensed","Playfair Display SC","Didact Gothic","Pontano Sans","Sanchez","Kalam","Sacramento","Cabin Condensed","Caveat","Amiri","Marck Script","Hammersmith One","Arapey","Jura","BenchNine","Neuton","Khand","Nanum Myeongjo","Ruda","Tangerine","Volkhov","Monoton","Audiowide","Boogaloo","Armata","Fira Sans Extra Condensed","Shadows Into Light Two","VT323","Khula","Chivo","Cantarell","Antic","Aldrich","Hind Madurai","Glegoo","Architects Daughter","Pragati Narrow","Prosto One","Bangers","Gentium Basic","Hind Vadodara","Antic Slab","Unica One","Amaranth","Vidaloka","Enriqueta","Frank Ruhl Libre","Luckiest Guy","Patrick Hand","Bevan","Caveat Brush","Barlow Condensed","Forum","Ultra","PT Mono","Kreon","Sintony","Sorts Mill Goudy","Yrsa","Scada","Homemade Apple","Arsenal","Prata","Basic","Neucha","Covered By Your Grace","Merienda","Julius Sans One","Changa","Gentium Book Basic","Contrail One","Cabin Sketch","Actor","Yellowtail","Alegreya Sans SC","Alice","Sigmar One","Signika Negative","Rufina","Martel","Adamina","Magra","Fugaz One","Bad Script","Lusitana","Nothing You Could Do","Playball","Varela","Damion","Special Elite","Barlow","Overpass","Press Start 2P","Advent Pro","Alex Brush","Arbutus Slab","Paytone One","Arima Madurai","Barlow Semi Condensed","Chewy","Share","Rancho","Slabo 13px","Ubuntu Mono","Rock Salt","Coustard","Allura","Viga","Coda","Montserrat Alternates","Syncopate","Oleo Script","Rambla","Cantata One","PT Serif Caption","Cinzel Decorative","Sarala","Ovo","Gochi Hand","Spinnaker","Just Another Hand","Michroma","Marcellus","Overlock","Love Ya Like A Sister","Carter One","Electrolize","Cousine","Eczar","Lustria","Marmelad","Candal","Niconne","Coming Soon","Saira Condensed","Black Ops One","Molengo","Saira","Nobile","Carme","Squada One","Karma","Cormorant","Marcellus SC","Radley","Kameron","Ceviche One","Parisienne","Zilla Slab","Marvel","Copse","Oranienbaum","Reenie Beanie","Freckle Face","Saira Extra Condensed","Pinyon Script","Unna","Hind Guntur","Mr Dafoe","IM Fell DW Pica","Jockey One","Voltaire","Goudy Bookletter 1911","Leckerli One","Fauna One","Quantico","Alef","Itim","Telex","Lateef","Days One","Baloo","Allerta","Pridi","Average","Norican","Grand Hotel","Rochester","Italianno","Changa One","Saira Semi Condensed","Reem Kufi","Limelight","Carrois Gothic","Skranji","Halant","Nixie One","Fredericka the Great","Anonymous Pro","Spirax","Martel Sans","Palanquin","Space Mono","Alegreya SC","Taviraj","Nanum Gothic Coding","Bungee","Tauri","Rasa","Londrina Solid","Bubblegum Sans","El Messiri","Yesteryear","Aclonica","Archivo","Allerta Stencil","Puritan","Metrophobic","Annie Use Your Telescope","Kelly Slab","Caudex","Tenor Sans","Cutive","Fanwood Text","Bungee Inline","Homenaje","Doppio One","Rosario","Biryani","Calligraffitti","Kurale","Average Sans","Nanum Pen Script","Faster One","Inder","Nanum Brush Script","Share Tech Mono","Judson","Abhaya Libre","Jaldi","GFS Didot","Racing Sans One","Graduate","Rozha One","Convergence","Mukta Vaani","Lalezar","Sue Ellen Francisco","Petit Formal Script","Mada","Artifika","Schoolbell","Lilita One","Mukta","Aladin","Yeseva One","Miriam Libre","Six Caps","Gilda Display","Encode Sans Condensed","Mitr","Scheherazade","Happy Monkey","Gruppo","Andada","Delius","Give You Glory","Quando","Spectral","Trocchi","Herr Von Muellerhoff","Bowlby One SC","Trirong","The Girl Next Door","Allan","Pompiere","Belleza","Cambay","Gravitas One","Balthazar","Merienda One","Andika","Montez","Cambo","Fontdiner Swanky","Alike","Strait","Arizonia","Secular One","Lekton","Zeyada","Chelsea Market","Oxygen Mono","Mr De Haviland","Buenard","Fjord One","Mako","Hanuman","Capriola","Cutive Mono","Knewave","IM Fell Double Pica","Mate","Qwigley","Oregano","Wire One","Megrim","Anaheim","Vesper Libre","Walter Turncoat","Federo","Poly","La Belle Aurore","Averia Serif Libre","Short Stack","Belgrano","Carrois Gothic SC","Kristi","Proza Libre","Baloo Paaji","Bowlby One","Gafata","Chau Philomene One","Duru Sans","Vast Shadow","Mouse Memoirs","Baumans","Lemon","Stalemate","Seaweed Script","Gabriela","IM Fell English","Athiti","Fondamento","Maitree","Palanquin Dark","Fira Mono","Baloo Bhaina","Pangolin","Expletus Sans","Brawler","Waiting for the Sunrise","Orienta","Imprima","Emilys Candy","Rouge Script","UnifrakturMaguntia","Creepster","Oleo Script Swash Caps","Cherry Swash","Stardos Stencil","Crafty Girls","Amiko","Bilbo Swash Caps","Shojumaru","Voces","Podkova","Suez One","Rye","Yatra One","Meddon","Clicker Script","NTR","Denk One","Lemonada","Holtwood One SC","Patrick Hand SC","Pattaya","Rammetto One","Cedarville Cursive","Unkempt","Delius Swash Caps","Iceland","Gurajada","IM Fell English SC","Just Me Again Down Here","Lily Script One","Laila","Englebert","Wallpoet","Loved by the King","Crushed","Tulpen One","Rubik Mono One","Harmattan","Port Lligat Slab","Dawning of a New Day","Amethysta","Frijole","Encode Sans","Raleway Dots","Euphoria Script","Poller One","Ledger","Tienne","Asap Condensed","Bentham","Italiana","Krona One","Baloo Chettan","Mukta Malar","Salsa","Sansita","Battambang","Nova Mono","Suranna","Corben","Baloo Tamma","Sofia","Londrina Outline","Over the Rainbow","Metamorphous","Cherry Cream Soda","Headland One","Sriracha","Cormorant Infant","Sniglet","Geo","Vampiro One","Padauk","Prociono","Life Savers","Cantora One","Do Hyeon","Finger Paint","Share Tech","Ranchers","Kotta One","McLaren","Medula One","Arya","Aguafina Script","Codystar","David Libre","Gothic A1","Mirza","Engagement","Shanti","Cormorant SC","Nova Square","Sumana","Bungee Shade","Vibur","Sarpanch","Nosifer","Mallanna","Khmer","Scope One","Averia Sans Libre","Simonetta","Nova Slim","IBM Plex Sans","Dorsa","Princess Sofia","Amarante","Fenix","Ramabhadra","Coda Caption","Habibi","Flamenco","Bilbo","Slackey","Katibeh","Mogra","Port Lligat Sans","Koulen","Bubbler One","Stint Ultra Expanded","Pavanam","Dynalight","Mate SC","Donegal One","Sail","Mandali","Encode Sans Semi Condensed","Quintessential","Elsie","Averia Libre","League Script","Mountains of Christmas","Mystery Quest","Rosarivo","Kranky","Condiment","Rakkas","Kite One","Germania One","Mrs Saint Delafield","Miniver","Junge","Aref Ruqaa","Numans","Bellefair","Sarina","Alike Angular","Hi Melody","Maiden Orange","Dekko","Antic Didone","Delius Unicase","Kadwa","Ruslan Display","Milonga","Inika","Sura","Rhodium Libre","Stoke","Sancreek","Montserrat Subrayada","Pirata One","Kavoon","Wendy One","Rationale","Almendra","Fascinate Inline","Cagliostro","Chonburi","Trade Winds","Jim Nightshade","Ruluko","Peralta","Asul","Nova Round","IM Fell French Canon","Buda","IBM Plex Serif","Amita","Esteban","BioRhyme","Spectral SC","Ribeye","IM Fell DW Pica SC","Joti One","IBM Plex Sans Condensed","Paprika","Baloo Bhai","Overlock SC","Swanky and Moo Moo","Sonsie One","Text Me One","UnifrakturCook","Croissant One","Stint Ultra Condensed","Linden Hill","Baloo Thambi","Sedgwick Ave","Flavors","Fresca","IM Fell Great Primer","Angkor","Revalia","Montaga","Mina","New Rocker","Nova Flat","Ramaraja","Offside","Encode Sans Expanded","Glass Antiqua","Monsieur La Doulaise","Diplomata","Lovers Quarrel","Mukta Mahee","Timmana","Redressed","Griffy","Wellfleet","Tajawal","Risque","Julee","Content","Manuale","Sunshiney","Plaster","Asset","Galindo","Akronim","MedievalSharp","Atma","Marko One","Cormorant Upright","Eagle Lake","Averia Gruesa Libre","Snippet","Della Respira","Henny Penny","Gugi","Baloo Bhaijaan","Autour One","Lancelot","Ruthie","Bigshot One","Monofett","IBM Plex Mono","Sree Krushnadevaraya","Nokora","Purple Purse","Oldenburg","Snowburst One","Farsan","Inknut Antiqua","Spicy Rice","Jolly Lodger","Iceberg","Smythe","Petrona","Uncial Antiqua","Underdog","Cormorant Unicase","IM Fell Double Pica SC","Ewert","Goblin One","Irish Grover","Bayon","Chango","Macondo","Overpass Mono","Arbutus","Caesar Dressing","Trykker","Faustina","Margarine","Ravi Prakash","Metal Mania","Barrio","Butcherman","Elsie Swash Caps","Kantumruy","Coiny","Diplomata SC","Atomic Age","Molle","Mrs Sheppards","Eater","Meie Script","Miltonian Tattoo","Dr Sugiyama","Modern Antiqua","Rum Raisin","IM Fell French Canon SC","Original Surfer","Lakki Reddy","Galdeano","Jomhuria","Seymour One","Keania One","Astloch","Siemreap","Modak","Almendra SC","Zilla Slab Highlight","Galada","Piedra","Jacques Francois Shadow","Sahitya","Ribeye Marrow","Sirin Stencil","Chicle","Jacques Francois","Londrina Shadow","Ruge Boogie","Tillana","IM Fell Great Primer SC","Odor Mean Chey","Smokum","Felipa","Almendra Display","Kenia","Miltonian","Nova Oval","GFS Neohellenic","Devonshire","Warnes","Nova Script","Bokor","Meera Inimai","Geostar Fill","Freehand","Asar","Ranga","Fascinate","Bonbon","Passero One","Kavivanar","Metal","Suwannaphum","Combo","Romanesco","Encode Sans Semi Expanded","Black Han Sans","Trochut","Nova Cut","Fruktur","Kdam Thmor","Miss Fajardose","Bahiana","Londrina Sketch","Butterfly Kids","Chathura","Moul","Dangrek","Bigelow Rules","Libre Barcode 39 Text","Sedgwick Ave Display","Stalinist One","Baloo Da","Supermercado One","Vollkorn SC","Macondo Swash Caps","Sofadi One","Kumar One","Bungee Outline","Emblema One","Taprom","Sevillana","Federant","Erica One","Gorditas","Tenali Ramakrishna","Geostar","Aubrey","Hanalei","Hanalei Fill","Chela One","Chenla","Cute Font","Mr Bedfort","Baloo Tammudu","Gamja Flower","Gidugu","Unlock","Preahvihear","Peddana","Gaegu","Bungee Hairline","Libre Barcode 39 Extended Text","Moulpali","Fasthand","Jua","Libre Barcode 39 Extended","Dhurjati","Suravaram","BioRhyme Expanded","Libre Barcode 128 Text","Libre Barcode 39","Libre Barcode 128","Poor Story","Stylish","Black And White Picture","Song Myung","Kumar One Outline","Yeon Sung","East Sea Dokdo","Kirang Haerang","Dokdo","Sunflower"]
|
modules/webfonts/webfonts.json
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"items":{"ABeeZee":{"family":"ABeeZee","category":"sans-serif","variants":["italic","regular"]},"Abel":{"family":"Abel","category":"sans-serif","variants":["regular"]},"Abhaya Libre":{"family":"Abhaya Libre","category":"serif","variants":["500","600","700","800","regular"]},"Abril Fatface":{"family":"Abril Fatface","category":"display","variants":["regular"]},"Aclonica":{"family":"Aclonica","category":"sans-serif","variants":["regular"]},"Acme":{"family":"Acme","category":"sans-serif","variants":["regular"]},"Actor":{"family":"Actor","category":"sans-serif","variants":["regular"]},"Adamina":{"family":"Adamina","category":"serif","variants":["regular"]},"Advent Pro":{"family":"Advent Pro","category":"sans-serif","variants":["100","200","300","500","600","700","regular"]},"Aguafina Script":{"family":"Aguafina Script","category":"handwriting","variants":["regular"]},"Akronim":{"family":"Akronim","category":"display","variants":["regular"]},"Aladin":{"family":"Aladin","category":"handwriting","variants":["regular"]},"Aldrich":{"family":"Aldrich","category":"sans-serif","variants":["regular"]},"Alef":{"family":"Alef","category":"sans-serif","variants":["700","regular"]},"Alegreya":{"family":"Alegreya","category":"serif","variants":["500","500italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Alegreya SC":{"family":"Alegreya SC","category":"serif","variants":["500","500italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Alegreya Sans":{"family":"Alegreya Sans","category":"sans-serif","variants":["100","100italic","300","300italic","500","500italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Alegreya Sans SC":{"family":"Alegreya Sans SC","category":"sans-serif","variants":["100","100italic","300","300italic","500","500italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Alex Brush":{"family":"Alex Brush","category":"handwriting","variants":["regular"]},"Alfa Slab One":{"family":"Alfa Slab One","category":"display","variants":["regular"]},"Alice":{"family":"Alice","category":"serif","variants":["regular"]},"Alike":{"family":"Alike","category":"serif","variants":["regular"]},"Alike Angular":{"family":"Alike Angular","category":"serif","variants":["regular"]},"Allan":{"family":"Allan","category":"display","variants":["700","regular"]},"Allerta":{"family":"Allerta","category":"sans-serif","variants":["regular"]},"Allerta Stencil":{"family":"Allerta Stencil","category":"sans-serif","variants":["regular"]},"Allura":{"family":"Allura","category":"handwriting","variants":["regular"]},"Almendra":{"family":"Almendra","category":"serif","variants":["700","700italic","italic","regular"]},"Almendra Display":{"family":"Almendra Display","category":"display","variants":["regular"]},"Almendra SC":{"family":"Almendra SC","category":"serif","variants":["regular"]},"Amarante":{"family":"Amarante","category":"display","variants":["regular"]},"Amaranth":{"family":"Amaranth","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Amatic SC":{"family":"Amatic SC","category":"handwriting","variants":["700","regular"]},"Amethysta":{"family":"Amethysta","category":"serif","variants":["regular"]},"Amiko":{"family":"Amiko","category":"sans-serif","variants":["600","700","regular"]},"Amiri":{"family":"Amiri","category":"serif","variants":["700","700italic","italic","regular"]},"Amita":{"family":"Amita","category":"handwriting","variants":["700","regular"]},"Anaheim":{"family":"Anaheim","category":"sans-serif","variants":["regular"]},"Andada":{"family":"Andada","category":"serif","variants":["regular"]},"Andika":{"family":"Andika","category":"sans-serif","variants":["regular"]},"Angkor":{"family":"Angkor","category":"display","variants":["regular"]},"Annie Use Your Telescope":{"family":"Annie Use Your Telescope","category":"handwriting","variants":["regular"]},"Anonymous Pro":{"family":"Anonymous Pro","category":"monospace","variants":["700","700italic","italic","regular"]},"Antic":{"family":"Antic","category":"sans-serif","variants":["regular"]},"Antic Didone":{"family":"Antic Didone","category":"serif","variants":["regular"]},"Antic Slab":{"family":"Antic Slab","category":"serif","variants":["regular"]},"Anton":{"family":"Anton","category":"sans-serif","variants":["regular"]},"Arapey":{"family":"Arapey","category":"serif","variants":["italic","regular"]},"Arbutus":{"family":"Arbutus","category":"display","variants":["regular"]},"Arbutus Slab":{"family":"Arbutus Slab","category":"serif","variants":["regular"]},"Architects Daughter":{"family":"Architects Daughter","category":"handwriting","variants":["regular"]},"Archivo":{"family":"Archivo","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Archivo Black":{"family":"Archivo Black","category":"sans-serif","variants":["regular"]},"Archivo Narrow":{"family":"Archivo Narrow","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Aref Ruqaa":{"family":"Aref Ruqaa","category":"serif","variants":["700","regular"]},"Arima Madurai":{"family":"Arima Madurai","category":"display","variants":["100","200","300","500","700","800","900","regular"]},"Arimo":{"family":"Arimo","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Arizonia":{"family":"Arizonia","category":"handwriting","variants":["regular"]},"Armata":{"family":"Armata","category":"sans-serif","variants":["regular"]},"Arsenal":{"family":"Arsenal","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Artifika":{"family":"Artifika","category":"serif","variants":["regular"]},"Arvo":{"family":"Arvo","category":"serif","variants":["700","700italic","italic","regular"]},"Arya":{"family":"Arya","category":"sans-serif","variants":["700","regular"]},"Asap":{"family":"Asap","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Asap Condensed":{"family":"Asap Condensed","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Asar":{"family":"Asar","category":"serif","variants":["regular"]},"Asset":{"family":"Asset","category":"display","variants":["regular"]},"Assistant":{"family":"Assistant","category":"sans-serif","variants":["200","300","600","700","800","regular"]},"Astloch":{"family":"Astloch","category":"display","variants":["700","regular"]},"Asul":{"family":"Asul","category":"sans-serif","variants":["700","regular"]},"Athiti":{"family":"Athiti","category":"sans-serif","variants":["200","300","500","600","700","regular"]},"Atma":{"family":"Atma","category":"display","variants":["300","500","600","700","regular"]},"Atomic Age":{"family":"Atomic Age","category":"display","variants":["regular"]},"Aubrey":{"family":"Aubrey","category":"display","variants":["regular"]},"Audiowide":{"family":"Audiowide","category":"display","variants":["regular"]},"Autour One":{"family":"Autour One","category":"display","variants":["regular"]},"Average":{"family":"Average","category":"serif","variants":["regular"]},"Average Sans":{"family":"Average Sans","category":"sans-serif","variants":["regular"]},"Averia Gruesa Libre":{"family":"Averia Gruesa Libre","category":"display","variants":["regular"]},"Averia Libre":{"family":"Averia Libre","category":"display","variants":["300","300italic","700","700italic","italic","regular"]},"Averia Sans Libre":{"family":"Averia Sans Libre","category":"display","variants":["300","300italic","700","700italic","italic","regular"]},"Averia Serif Libre":{"family":"Averia Serif Libre","category":"display","variants":["300","300italic","700","700italic","italic","regular"]},"Bad Script":{"family":"Bad Script","category":"handwriting","variants":["regular"]},"Bahiana":{"family":"Bahiana","category":"display","variants":["regular"]},"Baloo":{"family":"Baloo","category":"display","variants":["regular"]},"Baloo Bhai":{"family":"Baloo Bhai","category":"display","variants":["regular"]},"Baloo Bhaijaan":{"family":"Baloo Bhaijaan","category":"display","variants":["regular"]},"Baloo Bhaina":{"family":"Baloo Bhaina","category":"display","variants":["regular"]},"Baloo Chettan":{"family":"Baloo Chettan","category":"display","variants":["regular"]},"Baloo Da":{"family":"Baloo Da","category":"display","variants":["regular"]},"Baloo Paaji":{"family":"Baloo Paaji","category":"display","variants":["regular"]},"Baloo Tamma":{"family":"Baloo Tamma","category":"display","variants":["regular"]},"Baloo Tammudu":{"family":"Baloo Tammudu","category":"display","variants":["regular"]},"Baloo Thambi":{"family":"Baloo Thambi","category":"display","variants":["regular"]},"Balthazar":{"family":"Balthazar","category":"serif","variants":["regular"]},"Bangers":{"family":"Bangers","category":"display","variants":["regular"]},"Barlow":{"family":"Barlow","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Barlow Condensed":{"family":"Barlow Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Barlow Semi Condensed":{"family":"Barlow Semi Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Barrio":{"family":"Barrio","category":"display","variants":["regular"]},"Basic":{"family":"Basic","category":"sans-serif","variants":["regular"]},"Battambang":{"family":"Battambang","category":"display","variants":["700","regular"]},"Baumans":{"family":"Baumans","category":"display","variants":["regular"]},"Bayon":{"family":"Bayon","category":"display","variants":["regular"]},"Belgrano":{"family":"Belgrano","category":"serif","variants":["regular"]},"Bellefair":{"family":"Bellefair","category":"serif","variants":["regular"]},"Belleza":{"family":"Belleza","category":"sans-serif","variants":["regular"]},"BenchNine":{"family":"BenchNine","category":"sans-serif","variants":["300","700","regular"]},"Bentham":{"family":"Bentham","category":"serif","variants":["regular"]},"Berkshire Swash":{"family":"Berkshire Swash","category":"handwriting","variants":["regular"]},"Bevan":{"family":"Bevan","category":"display","variants":["regular"]},"Bigelow Rules":{"family":"Bigelow Rules","category":"display","variants":["regular"]},"Bigshot One":{"family":"Bigshot One","category":"display","variants":["regular"]},"Bilbo":{"family":"Bilbo","category":"handwriting","variants":["regular"]},"Bilbo Swash Caps":{"family":"Bilbo Swash Caps","category":"handwriting","variants":["regular"]},"BioRhyme":{"family":"BioRhyme","category":"serif","variants":["200","300","700","800","regular"]},"BioRhyme Expanded":{"family":"BioRhyme Expanded","category":"serif","variants":["200","300","700","800","regular"]},"Biryani":{"family":"Biryani","category":"sans-serif","variants":["200","300","600","700","800","900","regular"]},"Bitter":{"family":"Bitter","category":"serif","variants":["700","italic","regular"]},"Black Ops One":{"family":"Black Ops One","category":"display","variants":["regular"]},"Bokor":{"family":"Bokor","category":"display","variants":["regular"]},"Bonbon":{"family":"Bonbon","category":"handwriting","variants":["regular"]},"Boogaloo":{"family":"Boogaloo","category":"display","variants":["regular"]},"Bowlby One":{"family":"Bowlby One","category":"display","variants":["regular"]},"Bowlby One SC":{"family":"Bowlby One SC","category":"display","variants":["regular"]},"Brawler":{"family":"Brawler","category":"serif","variants":["regular"]},"Bree Serif":{"family":"Bree Serif","category":"serif","variants":["regular"]},"Bubblegum Sans":{"family":"Bubblegum Sans","category":"display","variants":["regular"]},"Bubbler One":{"family":"Bubbler One","category":"sans-serif","variants":["regular"]},"Buda":{"family":"Buda","category":"display","variants":["300"]},"Buenard":{"family":"Buenard","category":"serif","variants":["700","regular"]},"Bungee":{"family":"Bungee","category":"display","variants":["regular"]},"Bungee Hairline":{"family":"Bungee Hairline","category":"display","variants":["regular"]},"Bungee Inline":{"family":"Bungee Inline","category":"display","variants":["regular"]},"Bungee Outline":{"family":"Bungee Outline","category":"display","variants":["regular"]},"Bungee Shade":{"family":"Bungee Shade","category":"display","variants":["regular"]},"Butcherman":{"family":"Butcherman","category":"display","variants":["regular"]},"Butterfly Kids":{"family":"Butterfly Kids","category":"handwriting","variants":["regular"]},"Cabin":{"family":"Cabin","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Cabin Condensed":{"family":"Cabin Condensed","category":"sans-serif","variants":["500","600","700","regular"]},"Cabin Sketch":{"family":"Cabin Sketch","category":"display","variants":["700","regular"]},"Caesar Dressing":{"family":"Caesar Dressing","category":"display","variants":["regular"]},"Cagliostro":{"family":"Cagliostro","category":"sans-serif","variants":["regular"]},"Cairo":{"family":"Cairo","category":"sans-serif","variants":["200","300","600","700","900","regular"]},"Calligraffitti":{"family":"Calligraffitti","category":"handwriting","variants":["regular"]},"Cambay":{"family":"Cambay","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Cambo":{"family":"Cambo","category":"serif","variants":["regular"]},"Candal":{"family":"Candal","category":"sans-serif","variants":["regular"]},"Cantarell":{"family":"Cantarell","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Cantata One":{"family":"Cantata One","category":"serif","variants":["regular"]},"Cantora One":{"family":"Cantora One","category":"sans-serif","variants":["regular"]},"Capriola":{"family":"Capriola","category":"sans-serif","variants":["regular"]},"Cardo":{"family":"Cardo","category":"serif","variants":["700","italic","regular"]},"Carme":{"family":"Carme","category":"sans-serif","variants":["regular"]},"Carrois Gothic":{"family":"Carrois Gothic","category":"sans-serif","variants":["regular"]},"Carrois Gothic SC":{"family":"Carrois Gothic SC","category":"sans-serif","variants":["regular"]},"Carter One":{"family":"Carter One","category":"display","variants":["regular"]},"Catamaran":{"family":"Catamaran","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Caudex":{"family":"Caudex","category":"serif","variants":["700","700italic","italic","regular"]},"Caveat":{"family":"Caveat","category":"handwriting","variants":["700","regular"]},"Caveat Brush":{"family":"Caveat Brush","category":"handwriting","variants":["regular"]},"Cedarville Cursive":{"family":"Cedarville Cursive","category":"handwriting","variants":["regular"]},"Ceviche One":{"family":"Ceviche One","category":"display","variants":["regular"]},"Changa":{"family":"Changa","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Changa One":{"family":"Changa One","category":"display","variants":["italic","regular"]},"Chango":{"family":"Chango","category":"display","variants":["regular"]},"Chathura":{"family":"Chathura","category":"sans-serif","variants":["100","300","700","800","regular"]},"Chau Philomene One":{"family":"Chau Philomene One","category":"sans-serif","variants":["italic","regular"]},"Chela One":{"family":"Chela One","category":"display","variants":["regular"]},"Chelsea Market":{"family":"Chelsea Market","category":"display","variants":["regular"]},"Chenla":{"family":"Chenla","category":"display","variants":["regular"]},"Cherry Cream Soda":{"family":"Cherry Cream Soda","category":"display","variants":["regular"]},"Cherry Swash":{"family":"Cherry Swash","category":"display","variants":["700","regular"]},"Chewy":{"family":"Chewy","category":"display","variants":["regular"]},"Chicle":{"family":"Chicle","category":"display","variants":["regular"]},"Chivo":{"family":"Chivo","category":"sans-serif","variants":["300","300italic","700","700italic","900","900italic","italic","regular"]},"Chonburi":{"family":"Chonburi","category":"display","variants":["regular"]},"Cinzel":{"family":"Cinzel","category":"serif","variants":["700","900","regular"]},"Cinzel Decorative":{"family":"Cinzel Decorative","category":"display","variants":["700","900","regular"]},"Clicker Script":{"family":"Clicker Script","category":"handwriting","variants":["regular"]},"Coda":{"family":"Coda","category":"display","variants":["800","regular"]},"Coda Caption":{"family":"Coda Caption","category":"sans-serif","variants":["800"]},"Codystar":{"family":"Codystar","category":"display","variants":["300","regular"]},"Coiny":{"family":"Coiny","category":"display","variants":["regular"]},"Combo":{"family":"Combo","category":"display","variants":["regular"]},"Comfortaa":{"family":"Comfortaa","category":"display","variants":["300","700","regular"]},"Coming Soon":{"family":"Coming Soon","category":"handwriting","variants":["regular"]},"Concert One":{"family":"Concert One","category":"display","variants":["regular"]},"Condiment":{"family":"Condiment","category":"handwriting","variants":["regular"]},"Content":{"family":"Content","category":"display","variants":["700","regular"]},"Contrail One":{"family":"Contrail One","category":"display","variants":["regular"]},"Convergence":{"family":"Convergence","category":"sans-serif","variants":["regular"]},"Cookie":{"family":"Cookie","category":"handwriting","variants":["regular"]},"Copse":{"family":"Copse","category":"serif","variants":["regular"]},"Corben":{"family":"Corben","category":"display","variants":["700","regular"]},"Cormorant":{"family":"Cormorant","category":"serif","variants":["300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"Cormorant Garamond":{"family":"Cormorant Garamond","category":"serif","variants":["300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"Cormorant Infant":{"family":"Cormorant Infant","category":"serif","variants":["300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"Cormorant SC":{"family":"Cormorant SC","category":"serif","variants":["300","500","600","700","regular"]},"Cormorant Unicase":{"family":"Cormorant Unicase","category":"serif","variants":["300","500","600","700","regular"]},"Cormorant Upright":{"family":"Cormorant Upright","category":"serif","variants":["300","500","600","700","regular"]},"Courgette":{"family":"Courgette","category":"handwriting","variants":["regular"]},"Cousine":{"family":"Cousine","category":"monospace","variants":["700","700italic","italic","regular"]},"Coustard":{"family":"Coustard","category":"serif","variants":["900","regular"]},"Covered By Your Grace":{"family":"Covered By Your Grace","category":"handwriting","variants":["regular"]},"Crafty Girls":{"family":"Crafty Girls","category":"handwriting","variants":["regular"]},"Creepster":{"family":"Creepster","category":"display","variants":["regular"]},"Crete Round":{"family":"Crete Round","category":"serif","variants":["italic","regular"]},"Crimson Text":{"family":"Crimson Text","category":"serif","variants":["600","600italic","700","700italic","italic","regular"]},"Croissant One":{"family":"Croissant One","category":"display","variants":["regular"]},"Crushed":{"family":"Crushed","category":"display","variants":["regular"]},"Cuprum":{"family":"Cuprum","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Cutive":{"family":"Cutive","category":"serif","variants":["regular"]},"Cutive Mono":{"family":"Cutive Mono","category":"monospace","variants":["regular"]},"Damion":{"family":"Damion","category":"handwriting","variants":["regular"]},"Dancing Script":{"family":"Dancing Script","category":"handwriting","variants":["700","regular"]},"Dangrek":{"family":"Dangrek","category":"display","variants":["regular"]},"David Libre":{"family":"David Libre","category":"serif","variants":["500","700","regular"]},"Dawning of a New Day":{"family":"Dawning of a New Day","category":"handwriting","variants":["regular"]},"Days One":{"family":"Days One","category":"sans-serif","variants":["regular"]},"Dekko":{"family":"Dekko","category":"handwriting","variants":["regular"]},"Delius":{"family":"Delius","category":"handwriting","variants":["regular"]},"Delius Swash Caps":{"family":"Delius Swash Caps","category":"handwriting","variants":["regular"]},"Delius Unicase":{"family":"Delius Unicase","category":"handwriting","variants":["700","regular"]},"Della Respira":{"family":"Della Respira","category":"serif","variants":["regular"]},"Denk One":{"family":"Denk One","category":"sans-serif","variants":["regular"]},"Devonshire":{"family":"Devonshire","category":"handwriting","variants":["regular"]},"Dhurjati":{"family":"Dhurjati","category":"sans-serif","variants":["regular"]},"Didact Gothic":{"family":"Didact Gothic","category":"sans-serif","variants":["regular"]},"Diplomata":{"family":"Diplomata","category":"display","variants":["regular"]},"Diplomata SC":{"family":"Diplomata SC","category":"display","variants":["regular"]},"Domine":{"family":"Domine","category":"serif","variants":["700","regular"]},"Donegal One":{"family":"Donegal One","category":"serif","variants":["regular"]},"Doppio One":{"family":"Doppio One","category":"sans-serif","variants":["regular"]},"Dorsa":{"family":"Dorsa","category":"sans-serif","variants":["regular"]},"Dosis":{"family":"Dosis","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Dr Sugiyama":{"family":"Dr Sugiyama","category":"handwriting","variants":["regular"]},"Duru Sans":{"family":"Duru Sans","category":"sans-serif","variants":["regular"]},"Dynalight":{"family":"Dynalight","category":"display","variants":["regular"]},"EB Garamond":{"family":"EB Garamond","category":"serif","variants":["500","500italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Eagle Lake":{"family":"Eagle Lake","category":"handwriting","variants":["regular"]},"Eater":{"family":"Eater","category":"display","variants":["regular"]},"Economica":{"family":"Economica","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Eczar":{"family":"Eczar","category":"serif","variants":["500","600","700","800","regular"]},"El Messiri":{"family":"El Messiri","category":"sans-serif","variants":["500","600","700","regular"]},"Electrolize":{"family":"Electrolize","category":"sans-serif","variants":["regular"]},"Elsie":{"family":"Elsie","category":"display","variants":["900","regular"]},"Elsie Swash Caps":{"family":"Elsie Swash Caps","category":"display","variants":["900","regular"]},"Emblema One":{"family":"Emblema One","category":"display","variants":["regular"]},"Emilys Candy":{"family":"Emilys Candy","category":"display","variants":["regular"]},"Encode Sans":{"family":"Encode Sans","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Encode Sans Condensed":{"family":"Encode Sans Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Encode Sans Expanded":{"family":"Encode Sans Expanded","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Encode Sans Semi Condensed":{"family":"Encode Sans Semi Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Encode Sans Semi Expanded":{"family":"Encode Sans Semi Expanded","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Engagement":{"family":"Engagement","category":"handwriting","variants":["regular"]},"Englebert":{"family":"Englebert","category":"sans-serif","variants":["regular"]},"Enriqueta":{"family":"Enriqueta","category":"serif","variants":["700","regular"]},"Erica One":{"family":"Erica One","category":"display","variants":["regular"]},"Esteban":{"family":"Esteban","category":"serif","variants":["regular"]},"Euphoria Script":{"family":"Euphoria Script","category":"handwriting","variants":["regular"]},"Ewert":{"family":"Ewert","category":"display","variants":["regular"]},"Exo":{"family":"Exo","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Exo 2":{"family":"Exo 2","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Expletus Sans":{"family":"Expletus Sans","category":"display","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Fanwood Text":{"family":"Fanwood Text","category":"serif","variants":["italic","regular"]},"Farsan":{"family":"Farsan","category":"display","variants":["regular"]},"Fascinate":{"family":"Fascinate","category":"display","variants":["regular"]},"Fascinate Inline":{"family":"Fascinate Inline","category":"display","variants":["regular"]},"Faster One":{"family":"Faster One","category":"display","variants":["regular"]},"Fasthand":{"family":"Fasthand","category":"serif","variants":["regular"]},"Fauna One":{"family":"Fauna One","category":"serif","variants":["regular"]},"Faustina":{"family":"Faustina","category":"serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Federant":{"family":"Federant","category":"display","variants":["regular"]},"Federo":{"family":"Federo","category":"sans-serif","variants":["regular"]},"Felipa":{"family":"Felipa","category":"handwriting","variants":["regular"]},"Fenix":{"family":"Fenix","category":"serif","variants":["regular"]},"Finger Paint":{"family":"Finger Paint","category":"display","variants":["regular"]},"Fira Mono":{"family":"Fira Mono","category":"monospace","variants":["500","700","regular"]},"Fira Sans":{"family":"Fira Sans","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Fira Sans Condensed":{"family":"Fira Sans Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Fira Sans Extra Condensed":{"family":"Fira Sans Extra Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Fjalla One":{"family":"Fjalla One","category":"sans-serif","variants":["regular"]},"Fjord One":{"family":"Fjord One","category":"serif","variants":["regular"]},"Flamenco":{"family":"Flamenco","category":"display","variants":["300","regular"]},"Flavors":{"family":"Flavors","category":"display","variants":["regular"]},"Fondamento":{"family":"Fondamento","category":"handwriting","variants":["italic","regular"]},"Fontdiner Swanky":{"family":"Fontdiner Swanky","category":"display","variants":["regular"]},"Forum":{"family":"Forum","category":"display","variants":["regular"]},"Francois One":{"family":"Francois One","category":"sans-serif","variants":["regular"]},"Frank Ruhl Libre":{"family":"Frank Ruhl Libre","category":"serif","variants":["300","500","700","900","regular"]},"Freckle Face":{"family":"Freckle Face","category":"display","variants":["regular"]},"Fredericka the Great":{"family":"Fredericka the Great","category":"display","variants":["regular"]},"Fredoka One":{"family":"Fredoka One","category":"display","variants":["regular"]},"Freehand":{"family":"Freehand","category":"display","variants":["regular"]},"Fresca":{"family":"Fresca","category":"sans-serif","variants":["regular"]},"Frijole":{"family":"Frijole","category":"display","variants":["regular"]},"Fruktur":{"family":"Fruktur","category":"display","variants":["regular"]},"Fugaz One":{"family":"Fugaz One","category":"display","variants":["regular"]},"GFS Didot":{"family":"GFS Didot","category":"serif","variants":["regular"]},"GFS Neohellenic":{"family":"GFS Neohellenic","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Gabriela":{"family":"Gabriela","category":"serif","variants":["regular"]},"Gafata":{"family":"Gafata","category":"sans-serif","variants":["regular"]},"Galada":{"family":"Galada","category":"display","variants":["regular"]},"Galdeano":{"family":"Galdeano","category":"sans-serif","variants":["regular"]},"Galindo":{"family":"Galindo","category":"display","variants":["regular"]},"Gentium Basic":{"family":"Gentium Basic","category":"serif","variants":["700","700italic","italic","regular"]},"Gentium Book Basic":{"family":"Gentium Book Basic","category":"serif","variants":["700","700italic","italic","regular"]},"Geo":{"family":"Geo","category":"sans-serif","variants":["italic","regular"]},"Geostar":{"family":"Geostar","category":"display","variants":["regular"]},"Geostar Fill":{"family":"Geostar Fill","category":"display","variants":["regular"]},"Germania One":{"family":"Germania One","category":"display","variants":["regular"]},"Gidugu":{"family":"Gidugu","category":"sans-serif","variants":["regular"]},"Gilda Display":{"family":"Gilda Display","category":"serif","variants":["regular"]},"Give You Glory":{"family":"Give You Glory","category":"handwriting","variants":["regular"]},"Glass Antiqua":{"family":"Glass Antiqua","category":"display","variants":["regular"]},"Glegoo":{"family":"Glegoo","category":"serif","variants":["700","regular"]},"Gloria Hallelujah":{"family":"Gloria Hallelujah","category":"handwriting","variants":["regular"]},"Goblin One":{"family":"Goblin One","category":"display","variants":["regular"]},"Gochi Hand":{"family":"Gochi Hand","category":"handwriting","variants":["regular"]},"Gorditas":{"family":"Gorditas","category":"display","variants":["700","regular"]},"Goudy Bookletter 1911":{"family":"Goudy Bookletter 1911","category":"serif","variants":["regular"]},"Graduate":{"family":"Graduate","category":"display","variants":["regular"]},"Grand Hotel":{"family":"Grand Hotel","category":"handwriting","variants":["regular"]},"Gravitas One":{"family":"Gravitas One","category":"display","variants":["regular"]},"Great Vibes":{"family":"Great Vibes","category":"handwriting","variants":["regular"]},"Griffy":{"family":"Griffy","category":"display","variants":["regular"]},"Gruppo":{"family":"Gruppo","category":"display","variants":["regular"]},"Gudea":{"family":"Gudea","category":"sans-serif","variants":["700","italic","regular"]},"Gurajada":{"family":"Gurajada","category":"serif","variants":["regular"]},"Habibi":{"family":"Habibi","category":"serif","variants":["regular"]},"Halant":{"family":"Halant","category":"serif","variants":["300","500","600","700","regular"]},"Hammersmith One":{"family":"Hammersmith One","category":"sans-serif","variants":["regular"]},"Hanalei":{"family":"Hanalei","category":"display","variants":["regular"]},"Hanalei Fill":{"family":"Hanalei Fill","category":"display","variants":["regular"]},"Handlee":{"family":"Handlee","category":"handwriting","variants":["regular"]},"Hanuman":{"family":"Hanuman","category":"serif","variants":["700","regular"]},"Happy Monkey":{"family":"Happy Monkey","category":"display","variants":["regular"]},"Harmattan":{"family":"Harmattan","category":"sans-serif","variants":["regular"]},"Headland One":{"family":"Headland One","category":"serif","variants":["regular"]},"Heebo":{"family":"Heebo","category":"sans-serif","variants":["100","300","500","700","800","900","regular"]},"Henny Penny":{"family":"Henny Penny","category":"display","variants":["regular"]},"Herr Von Muellerhoff":{"family":"Herr Von Muellerhoff","category":"handwriting","variants":["regular"]},"Hind":{"family":"Hind","category":"sans-serif","variants":["300","500","600","700","regular"]},"Hind Guntur":{"family":"Hind Guntur","category":"sans-serif","variants":["300","500","600","700","regular"]},"Hind Madurai":{"family":"Hind Madurai","category":"sans-serif","variants":["300","500","600","700","regular"]},"Hind Siliguri":{"family":"Hind Siliguri","category":"sans-serif","variants":["300","500","600","700","regular"]},"Hind Vadodara":{"family":"Hind Vadodara","category":"sans-serif","variants":["300","500","600","700","regular"]},"Holtwood One SC":{"family":"Holtwood One SC","category":"serif","variants":["regular"]},"Homemade Apple":{"family":"Homemade Apple","category":"handwriting","variants":["regular"]},"Homenaje":{"family":"Homenaje","category":"sans-serif","variants":["regular"]},"IM Fell DW Pica":{"family":"IM Fell DW Pica","category":"serif","variants":["italic","regular"]},"IM Fell DW Pica SC":{"family":"IM Fell DW Pica SC","category":"serif","variants":["regular"]},"IM Fell Double Pica":{"family":"IM Fell Double Pica","category":"serif","variants":["italic","regular"]},"IM Fell Double Pica SC":{"family":"IM Fell Double Pica SC","category":"serif","variants":["regular"]},"IM Fell English":{"family":"IM Fell English","category":"serif","variants":["italic","regular"]},"IM Fell English SC":{"family":"IM Fell English SC","category":"serif","variants":["regular"]},"IM Fell French Canon":{"family":"IM Fell French Canon","category":"serif","variants":["italic","regular"]},"IM Fell French Canon SC":{"family":"IM Fell French Canon SC","category":"serif","variants":["regular"]},"IM Fell Great Primer":{"family":"IM Fell Great Primer","category":"serif","variants":["italic","regular"]},"IM Fell Great Primer SC":{"family":"IM Fell Great Primer SC","category":"serif","variants":["regular"]},"Iceberg":{"family":"Iceberg","category":"display","variants":["regular"]},"Iceland":{"family":"Iceland","category":"display","variants":["regular"]},"Imprima":{"family":"Imprima","category":"sans-serif","variants":["regular"]},"Inconsolata":{"family":"Inconsolata","category":"monospace","variants":["700","regular"]},"Inder":{"family":"Inder","category":"sans-serif","variants":["regular"]},"Indie Flower":{"family":"Indie Flower","category":"handwriting","variants":["regular"]},"Inika":{"family":"Inika","category":"serif","variants":["700","regular"]},"Inknut Antiqua":{"family":"Inknut Antiqua","category":"serif","variants":["300","500","600","700","800","900","regular"]},"Irish Grover":{"family":"Irish Grover","category":"display","variants":["regular"]},"Istok Web":{"family":"Istok Web","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Italiana":{"family":"Italiana","category":"serif","variants":["regular"]},"Italianno":{"family":"Italianno","category":"handwriting","variants":["regular"]},"Itim":{"family":"Itim","category":"handwriting","variants":["regular"]},"Jacques Francois":{"family":"Jacques Francois","category":"serif","variants":["regular"]},"Jacques Francois Shadow":{"family":"Jacques Francois Shadow","category":"display","variants":["regular"]},"Jaldi":{"family":"Jaldi","category":"sans-serif","variants":["700","regular"]},"Jim Nightshade":{"family":"Jim Nightshade","category":"handwriting","variants":["regular"]},"Jockey One":{"family":"Jockey One","category":"sans-serif","variants":["regular"]},"Jolly Lodger":{"family":"Jolly Lodger","category":"display","variants":["regular"]},"Jomhuria":{"family":"Jomhuria","category":"display","variants":["regular"]},"Josefin Sans":{"family":"Josefin Sans","category":"sans-serif","variants":["100","100italic","300","300italic","600","600italic","700","700italic","italic","regular"]},"Josefin Slab":{"family":"Josefin Slab","category":"serif","variants":["100","100italic","300","300italic","600","600italic","700","700italic","italic","regular"]},"Joti One":{"family":"Joti One","category":"display","variants":["regular"]},"Judson":{"family":"Judson","category":"serif","variants":["700","italic","regular"]},"Julee":{"family":"Julee","category":"handwriting","variants":["regular"]},"Julius Sans One":{"family":"Julius Sans One","category":"sans-serif","variants":["regular"]},"Junge":{"family":"Junge","category":"serif","variants":["regular"]},"Jura":{"family":"Jura","category":"sans-serif","variants":["300","500","600","700","regular"]},"Just Another Hand":{"family":"Just Another Hand","category":"handwriting","variants":["regular"]},"Just Me Again Down Here":{"family":"Just Me Again Down Here","category":"handwriting","variants":["regular"]},"Kadwa":{"family":"Kadwa","category":"serif","variants":["700","regular"]},"Kalam":{"family":"Kalam","category":"handwriting","variants":["300","700","regular"]},"Kameron":{"family":"Kameron","category":"serif","variants":["700","regular"]},"Kanit":{"family":"Kanit","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Kantumruy":{"family":"Kantumruy","category":"sans-serif","variants":["300","700","regular"]},"Karla":{"family":"Karla","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Karma":{"family":"Karma","category":"serif","variants":["300","500","600","700","regular"]},"Katibeh":{"family":"Katibeh","category":"display","variants":["regular"]},"Kaushan Script":{"family":"Kaushan Script","category":"handwriting","variants":["regular"]},"Kavivanar":{"family":"Kavivanar","category":"handwriting","variants":["regular"]},"Kavoon":{"family":"Kavoon","category":"display","variants":["regular"]},"Kdam Thmor":{"family":"Kdam Thmor","category":"display","variants":["regular"]},"Keania One":{"family":"Keania One","category":"display","variants":["regular"]},"Kelly Slab":{"family":"Kelly Slab","category":"display","variants":["regular"]},"Kenia":{"family":"Kenia","category":"display","variants":["regular"]},"Khand":{"family":"Khand","category":"sans-serif","variants":["300","500","600","700","regular"]},"Khmer":{"family":"Khmer","category":"display","variants":["regular"]},"Khula":{"family":"Khula","category":"sans-serif","variants":["300","600","700","800","regular"]},"Kite One":{"family":"Kite One","category":"sans-serif","variants":["regular"]},"Knewave":{"family":"Knewave","category":"display","variants":["regular"]},"Kotta One":{"family":"Kotta One","category":"serif","variants":["regular"]},"Koulen":{"family":"Koulen","category":"display","variants":["regular"]},"Kranky":{"family":"Kranky","category":"display","variants":["regular"]},"Kreon":{"family":"Kreon","category":"serif","variants":["300","700","regular"]},"Kristi":{"family":"Kristi","category":"handwriting","variants":["regular"]},"Krona One":{"family":"Krona One","category":"sans-serif","variants":["regular"]},"Kumar One":{"family":"Kumar One","category":"display","variants":["regular"]},"Kumar One Outline":{"family":"Kumar One Outline","category":"display","variants":["regular"]},"Kurale":{"family":"Kurale","category":"serif","variants":["regular"]},"La Belle Aurore":{"family":"La Belle Aurore","category":"handwriting","variants":["regular"]},"Laila":{"family":"Laila","category":"serif","variants":["300","500","600","700","regular"]},"Lakki Reddy":{"family":"Lakki Reddy","category":"handwriting","variants":["regular"]},"Lalezar":{"family":"Lalezar","category":"display","variants":["regular"]},"Lancelot":{"family":"Lancelot","category":"display","variants":["regular"]},"Lateef":{"family":"Lateef","category":"handwriting","variants":["regular"]},"Lato":{"family":"Lato","category":"sans-serif","variants":["100","100italic","300","300italic","700","700italic","900","900italic","italic","regular"]},"League Script":{"family":"League Script","category":"handwriting","variants":["regular"]},"Leckerli One":{"family":"Leckerli One","category":"handwriting","variants":["regular"]},"Ledger":{"family":"Ledger","category":"serif","variants":["regular"]},"Lekton":{"family":"Lekton","category":"sans-serif","variants":["700","italic","regular"]},"Lemon":{"family":"Lemon","category":"display","variants":["regular"]},"Lemonada":{"family":"Lemonada","category":"display","variants":["300","600","700","regular"]},"Libre Barcode 128":{"family":"Libre Barcode 128","category":"display","variants":["regular"]},"Libre Barcode 128 Text":{"family":"Libre Barcode 128 Text","category":"display","variants":["regular"]},"Libre Barcode 39":{"family":"Libre Barcode 39","category":"display","variants":["regular"]},"Libre Barcode 39 Extended":{"family":"Libre Barcode 39 Extended","category":"display","variants":["regular"]},"Libre Barcode 39 Extended Text":{"family":"Libre Barcode 39 Extended Text","category":"display","variants":["regular"]},"Libre Barcode 39 Text":{"family":"Libre Barcode 39 Text","category":"display","variants":["regular"]},"Libre Baskerville":{"family":"Libre Baskerville","category":"serif","variants":["700","italic","regular"]},"Libre Franklin":{"family":"Libre Franklin","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Life Savers":{"family":"Life Savers","category":"display","variants":["700","regular"]},"Lilita One":{"family":"Lilita One","category":"display","variants":["regular"]},"Lily Script One":{"family":"Lily Script One","category":"display","variants":["regular"]},"Limelight":{"family":"Limelight","category":"display","variants":["regular"]},"Linden Hill":{"family":"Linden Hill","category":"serif","variants":["italic","regular"]},"Lobster":{"family":"Lobster","category":"display","variants":["regular"]},"Lobster Two":{"family":"Lobster Two","category":"display","variants":["700","700italic","italic","regular"]},"Londrina Outline":{"family":"Londrina Outline","category":"display","variants":["regular"]},"Londrina Shadow":{"family":"Londrina Shadow","category":"display","variants":["regular"]},"Londrina Sketch":{"family":"Londrina Sketch","category":"display","variants":["regular"]},"Londrina Solid":{"family":"Londrina Solid","category":"display","variants":["100","300","900","regular"]},"Lora":{"family":"Lora","category":"serif","variants":["700","700italic","italic","regular"]},"Love Ya Like A Sister":{"family":"Love Ya Like A Sister","category":"display","variants":["regular"]},"Loved by the King":{"family":"Loved by the King","category":"handwriting","variants":["regular"]},"Lovers Quarrel":{"family":"Lovers Quarrel","category":"handwriting","variants":["regular"]},"Luckiest Guy":{"family":"Luckiest Guy","category":"display","variants":["regular"]},"Lusitana":{"family":"Lusitana","category":"serif","variants":["700","regular"]},"Lustria":{"family":"Lustria","category":"serif","variants":["regular"]},"Macondo":{"family":"Macondo","category":"display","variants":["regular"]},"Macondo Swash Caps":{"family":"Macondo Swash Caps","category":"display","variants":["regular"]},"Mada":{"family":"Mada","category":"sans-serif","variants":["200","300","500","600","700","900","regular"]},"Magra":{"family":"Magra","category":"sans-serif","variants":["700","regular"]},"Maiden Orange":{"family":"Maiden Orange","category":"display","variants":["regular"]},"Maitree":{"family":"Maitree","category":"serif","variants":["200","300","500","600","700","regular"]},"Mako":{"family":"Mako","category":"sans-serif","variants":["regular"]},"Mallanna":{"family":"Mallanna","category":"sans-serif","variants":["regular"]},"Mandali":{"family":"Mandali","category":"sans-serif","variants":["regular"]},"Manuale":{"family":"Manuale","category":"serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Marcellus":{"family":"Marcellus","category":"serif","variants":["regular"]},"Marcellus SC":{"family":"Marcellus SC","category":"serif","variants":["regular"]},"Marck Script":{"family":"Marck Script","category":"handwriting","variants":["regular"]},"Margarine":{"family":"Margarine","category":"display","variants":["regular"]},"Marko One":{"family":"Marko One","category":"serif","variants":["regular"]},"Marmelad":{"family":"Marmelad","category":"sans-serif","variants":["regular"]},"Martel":{"family":"Martel","category":"serif","variants":["200","300","600","700","800","900","regular"]},"Martel Sans":{"family":"Martel Sans","category":"sans-serif","variants":["200","300","600","700","800","900","regular"]},"Marvel":{"family":"Marvel","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Mate":{"family":"Mate","category":"serif","variants":["italic","regular"]},"Mate SC":{"family":"Mate SC","category":"serif","variants":["regular"]},"Maven Pro":{"family":"Maven Pro","category":"sans-serif","variants":["500","700","900","regular"]},"McLaren":{"family":"McLaren","category":"display","variants":["regular"]},"Meddon":{"family":"Meddon","category":"handwriting","variants":["regular"]},"MedievalSharp":{"family":"MedievalSharp","category":"display","variants":["regular"]},"Medula One":{"family":"Medula One","category":"display","variants":["regular"]},"Meera Inimai":{"family":"Meera Inimai","category":"sans-serif","variants":["regular"]},"Megrim":{"family":"Megrim","category":"display","variants":["regular"]},"Meie Script":{"family":"Meie Script","category":"handwriting","variants":["regular"]},"Merienda":{"family":"Merienda","category":"handwriting","variants":["700","regular"]},"Merienda One":{"family":"Merienda One","category":"handwriting","variants":["regular"]},"Merriweather":{"family":"Merriweather","category":"serif","variants":["300","300italic","700","700italic","900","900italic","italic","regular"]},"Merriweather Sans":{"family":"Merriweather Sans","category":"sans-serif","variants":["300","300italic","700","700italic","800","800italic","italic","regular"]},"Metal":{"family":"Metal","category":"display","variants":["regular"]},"Metal Mania":{"family":"Metal Mania","category":"display","variants":["regular"]},"Metamorphous":{"family":"Metamorphous","category":"display","variants":["regular"]},"Metrophobic":{"family":"Metrophobic","category":"sans-serif","variants":["regular"]},"Michroma":{"family":"Michroma","category":"sans-serif","variants":["regular"]},"Milonga":{"family":"Milonga","category":"display","variants":["regular"]},"Miltonian":{"family":"Miltonian","category":"display","variants":["regular"]},"Miltonian Tattoo":{"family":"Miltonian Tattoo","category":"display","variants":["regular"]},"Miniver":{"family":"Miniver","category":"display","variants":["regular"]},"Miriam Libre":{"family":"Miriam Libre","category":"sans-serif","variants":["700","regular"]},"Mirza":{"family":"Mirza","category":"display","variants":["500","600","700","regular"]},"Miss Fajardose":{"family":"Miss Fajardose","category":"handwriting","variants":["regular"]},"Mitr":{"family":"Mitr","category":"sans-serif","variants":["200","300","500","600","700","regular"]},"Modak":{"family":"Modak","category":"display","variants":["regular"]},"Modern Antiqua":{"family":"Modern Antiqua","category":"display","variants":["regular"]},"Mogra":{"family":"Mogra","category":"display","variants":["regular"]},"Molengo":{"family":"Molengo","category":"sans-serif","variants":["regular"]},"Molle":{"family":"Molle","category":"handwriting","variants":["italic"]},"Monda":{"family":"Monda","category":"sans-serif","variants":["700","regular"]},"Monofett":{"family":"Monofett","category":"display","variants":["regular"]},"Monoton":{"family":"Monoton","category":"display","variants":["regular"]},"Monsieur La Doulaise":{"family":"Monsieur La Doulaise","category":"handwriting","variants":["regular"]},"Montaga":{"family":"Montaga","category":"serif","variants":["regular"]},"Montez":{"family":"Montez","category":"handwriting","variants":["regular"]},"Montserrat":{"family":"Montserrat","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Montserrat Alternates":{"family":"Montserrat Alternates","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Montserrat Subrayada":{"family":"Montserrat Subrayada","category":"sans-serif","variants":["700","regular"]},"Moul":{"family":"Moul","category":"display","variants":["regular"]},"Moulpali":{"family":"Moulpali","category":"display","variants":["regular"]},"Mountains of Christmas":{"family":"Mountains of Christmas","category":"display","variants":["700","regular"]},"Mouse Memoirs":{"family":"Mouse Memoirs","category":"sans-serif","variants":["regular"]},"Mr Bedfort":{"family":"Mr Bedfort","category":"handwriting","variants":["regular"]},"Mr Dafoe":{"family":"Mr Dafoe","category":"handwriting","variants":["regular"]},"Mr De Haviland":{"family":"Mr De Haviland","category":"handwriting","variants":["regular"]},"Mrs Saint Delafield":{"family":"Mrs Saint Delafield","category":"handwriting","variants":["regular"]},"Mrs Sheppards":{"family":"Mrs Sheppards","category":"handwriting","variants":["regular"]},"Mukta":{"family":"Mukta","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Mukta Mahee":{"family":"Mukta Mahee","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Mukta Malar":{"family":"Mukta Malar","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Mukta Vaani":{"family":"Mukta Vaani","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Muli":{"family":"Muli","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Mystery Quest":{"family":"Mystery Quest","category":"display","variants":["regular"]},"NTR":{"family":"NTR","category":"sans-serif","variants":["regular"]},"Neucha":{"family":"Neucha","category":"handwriting","variants":["regular"]},"Neuton":{"family":"Neuton","category":"serif","variants":["200","300","700","800","italic","regular"]},"New Rocker":{"family":"New Rocker","category":"display","variants":["regular"]},"News Cycle":{"family":"News Cycle","category":"sans-serif","variants":["700","regular"]},"Niconne":{"family":"Niconne","category":"handwriting","variants":["regular"]},"Nixie One":{"family":"Nixie One","category":"display","variants":["regular"]},"Nobile":{"family":"Nobile","category":"sans-serif","variants":["500","500italic","700","700italic","italic","regular"]},"Nokora":{"family":"Nokora","category":"serif","variants":["700","regular"]},"Norican":{"family":"Norican","category":"handwriting","variants":["regular"]},"Nosifer":{"family":"Nosifer","category":"display","variants":["regular"]},"Nothing You Could Do":{"family":"Nothing You Could Do","category":"handwriting","variants":["regular"]},"Noticia Text":{"family":"Noticia Text","category":"serif","variants":["700","700italic","italic","regular"]},"Noto Sans":{"family":"Noto Sans","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Noto Serif":{"family":"Noto Serif","category":"serif","variants":["700","700italic","italic","regular"]},"Nova Cut":{"family":"Nova Cut","category":"display","variants":["regular"]},"Nova Flat":{"family":"Nova Flat","category":"display","variants":["regular"]},"Nova Mono":{"family":"Nova Mono","category":"monospace","variants":["regular"]},"Nova Oval":{"family":"Nova Oval","category":"display","variants":["regular"]},"Nova Round":{"family":"Nova Round","category":"display","variants":["regular"]},"Nova Script":{"family":"Nova Script","category":"display","variants":["regular"]},"Nova Slim":{"family":"Nova Slim","category":"display","variants":["regular"]},"Nova Square":{"family":"Nova Square","category":"display","variants":["regular"]},"Numans":{"family":"Numans","category":"sans-serif","variants":["regular"]},"Nunito":{"family":"Nunito","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Nunito Sans":{"family":"Nunito Sans","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Odor Mean Chey":{"family":"Odor Mean Chey","category":"display","variants":["regular"]},"Offside":{"family":"Offside","category":"display","variants":["regular"]},"Old Standard TT":{"family":"Old Standard TT","category":"serif","variants":["700","italic","regular"]},"Oldenburg":{"family":"Oldenburg","category":"display","variants":["regular"]},"Oleo Script":{"family":"Oleo Script","category":"display","variants":["700","regular"]},"Oleo Script Swash Caps":{"family":"Oleo Script Swash Caps","category":"display","variants":["700","regular"]},"Open Sans":{"family":"Open Sans","category":"sans-serif","variants":["300","300italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Open Sans Condensed":{"family":"Open Sans Condensed","category":"sans-serif","variants":["300","300italic","700"]},"Oranienbaum":{"family":"Oranienbaum","category":"serif","variants":["regular"]},"Orbitron":{"family":"Orbitron","category":"sans-serif","variants":["500","700","900","regular"]},"Oregano":{"family":"Oregano","category":"display","variants":["italic","regular"]},"Orienta":{"family":"Orienta","category":"sans-serif","variants":["regular"]},"Original Surfer":{"family":"Original Surfer","category":"display","variants":["regular"]},"Oswald":{"family":"Oswald","category":"sans-serif","variants":["200","300","500","600","700","regular"]},"Over the Rainbow":{"family":"Over the Rainbow","category":"handwriting","variants":["regular"]},"Overlock":{"family":"Overlock","category":"display","variants":["700","700italic","900","900italic","italic","regular"]},"Overlock SC":{"family":"Overlock SC","category":"display","variants":["regular"]},"Overpass":{"family":"Overpass","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Overpass Mono":{"family":"Overpass Mono","category":"monospace","variants":["300","600","700","regular"]},"Ovo":{"family":"Ovo","category":"serif","variants":["regular"]},"Oxygen":{"family":"Oxygen","category":"sans-serif","variants":["300","700","regular"]},"Oxygen Mono":{"family":"Oxygen Mono","category":"monospace","variants":["regular"]},"PT Mono":{"family":"PT Mono","category":"monospace","variants":["regular"]},"PT Sans":{"family":"PT Sans","category":"sans-serif","variants":["700","700italic","italic","regular"]},"PT Sans Caption":{"family":"PT Sans Caption","category":"sans-serif","variants":["700","regular"]},"PT Sans Narrow":{"family":"PT Sans Narrow","category":"sans-serif","variants":["700","regular"]},"PT Serif":{"family":"PT Serif","category":"serif","variants":["700","700italic","italic","regular"]},"PT Serif Caption":{"family":"PT Serif Caption","category":"serif","variants":["italic","regular"]},"Pacifico":{"family":"Pacifico","category":"handwriting","variants":["regular"]},"Padauk":{"family":"Padauk","category":"sans-serif","variants":["700","regular"]},"Palanquin":{"family":"Palanquin","category":"sans-serif","variants":["100","200","300","500","600","700","regular"]},"Palanquin Dark":{"family":"Palanquin Dark","category":"sans-serif","variants":["500","600","700","regular"]},"Pangolin":{"family":"Pangolin","category":"handwriting","variants":["regular"]},"Paprika":{"family":"Paprika","category":"display","variants":["regular"]},"Parisienne":{"family":"Parisienne","category":"handwriting","variants":["regular"]},"Passero One":{"family":"Passero One","category":"display","variants":["regular"]},"Passion One":{"family":"Passion One","category":"display","variants":["700","900","regular"]},"Pathway Gothic One":{"family":"Pathway Gothic One","category":"sans-serif","variants":["regular"]},"Patrick Hand":{"family":"Patrick Hand","category":"handwriting","variants":["regular"]},"Patrick Hand SC":{"family":"Patrick Hand SC","category":"handwriting","variants":["regular"]},"Pattaya":{"family":"Pattaya","category":"sans-serif","variants":["regular"]},"Patua One":{"family":"Patua One","category":"display","variants":["regular"]},"Pavanam":{"family":"Pavanam","category":"sans-serif","variants":["regular"]},"Paytone One":{"family":"Paytone One","category":"sans-serif","variants":["regular"]},"Peddana":{"family":"Peddana","category":"serif","variants":["regular"]},"Peralta":{"family":"Peralta","category":"display","variants":["regular"]},"Permanent Marker":{"family":"Permanent Marker","category":"handwriting","variants":["regular"]},"Petit Formal Script":{"family":"Petit Formal Script","category":"handwriting","variants":["regular"]},"Petrona":{"family":"Petrona","category":"serif","variants":["regular"]},"Philosopher":{"family":"Philosopher","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Piedra":{"family":"Piedra","category":"display","variants":["regular"]},"Pinyon Script":{"family":"Pinyon Script","category":"handwriting","variants":["regular"]},"Pirata One":{"family":"Pirata One","category":"display","variants":["regular"]},"Plaster":{"family":"Plaster","category":"display","variants":["regular"]},"Play":{"family":"Play","category":"sans-serif","variants":["700","regular"]},"Playball":{"family":"Playball","category":"display","variants":["regular"]},"Playfair Display":{"family":"Playfair Display","category":"serif","variants":["700","700italic","900","900italic","italic","regular"]},"Playfair Display SC":{"family":"Playfair Display SC","category":"serif","variants":["700","700italic","900","900italic","italic","regular"]},"Podkova":{"family":"Podkova","category":"serif","variants":["500","600","700","800","regular"]},"Poiret One":{"family":"Poiret One","category":"display","variants":["regular"]},"Poller One":{"family":"Poller One","category":"display","variants":["regular"]},"Poly":{"family":"Poly","category":"serif","variants":["italic","regular"]},"Pompiere":{"family":"Pompiere","category":"display","variants":["regular"]},"Pontano Sans":{"family":"Pontano Sans","category":"sans-serif","variants":["regular"]},"Poppins":{"family":"Poppins","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Port Lligat Sans":{"family":"Port Lligat Sans","category":"sans-serif","variants":["regular"]},"Port Lligat Slab":{"family":"Port Lligat Slab","category":"serif","variants":["regular"]},"Pragati Narrow":{"family":"Pragati Narrow","category":"sans-serif","variants":["700","regular"]},"Prata":{"family":"Prata","category":"serif","variants":["regular"]},"Preahvihear":{"family":"Preahvihear","category":"display","variants":["regular"]},"Press Start 2P":{"family":"Press Start 2P","category":"display","variants":["regular"]},"Pridi":{"family":"Pridi","category":"serif","variants":["200","300","500","600","700","regular"]},"Princess Sofia":{"family":"Princess Sofia","category":"handwriting","variants":["regular"]},"Prociono":{"family":"Prociono","category":"serif","variants":["regular"]},"Prompt":{"family":"Prompt","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Prosto One":{"family":"Prosto One","category":"display","variants":["regular"]},"Proza Libre":{"family":"Proza Libre","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Puritan":{"family":"Puritan","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Purple Purse":{"family":"Purple Purse","category":"display","variants":["regular"]},"Quando":{"family":"Quando","category":"serif","variants":["regular"]},"Quantico":{"family":"Quantico","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Quattrocento":{"family":"Quattrocento","category":"serif","variants":["700","regular"]},"Quattrocento Sans":{"family":"Quattrocento Sans","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Questrial":{"family":"Questrial","category":"sans-serif","variants":["regular"]},"Quicksand":{"family":"Quicksand","category":"sans-serif","variants":["300","500","700","regular"]},"Quintessential":{"family":"Quintessential","category":"handwriting","variants":["regular"]},"Qwigley":{"family":"Qwigley","category":"handwriting","variants":["regular"]},"Racing Sans One":{"family":"Racing Sans One","category":"display","variants":["regular"]},"Radley":{"family":"Radley","category":"serif","variants":["italic","regular"]},"Rajdhani":{"family":"Rajdhani","category":"sans-serif","variants":["300","500","600","700","regular"]},"Rakkas":{"family":"Rakkas","category":"display","variants":["regular"]},"Raleway":{"family":"Raleway","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Raleway Dots":{"family":"Raleway Dots","category":"display","variants":["regular"]},"Ramabhadra":{"family":"Ramabhadra","category":"sans-serif","variants":["regular"]},"Ramaraja":{"family":"Ramaraja","category":"serif","variants":["regular"]},"Rambla":{"family":"Rambla","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Rammetto One":{"family":"Rammetto One","category":"display","variants":["regular"]},"Ranchers":{"family":"Ranchers","category":"display","variants":["regular"]},"Rancho":{"family":"Rancho","category":"handwriting","variants":["regular"]},"Ranga":{"family":"Ranga","category":"display","variants":["700","regular"]},"Rasa":{"family":"Rasa","category":"serif","variants":["300","500","600","700","regular"]},"Rationale":{"family":"Rationale","category":"sans-serif","variants":["regular"]},"Ravi Prakash":{"family":"Ravi Prakash","category":"display","variants":["regular"]},"Redressed":{"family":"Redressed","category":"handwriting","variants":["regular"]},"Reem Kufi":{"family":"Reem Kufi","category":"sans-serif","variants":["regular"]},"Reenie Beanie":{"family":"Reenie Beanie","category":"handwriting","variants":["regular"]},"Revalia":{"family":"Revalia","category":"display","variants":["regular"]},"Rhodium Libre":{"family":"Rhodium Libre","category":"serif","variants":["regular"]},"Ribeye":{"family":"Ribeye","category":"display","variants":["regular"]},"Ribeye Marrow":{"family":"Ribeye Marrow","category":"display","variants":["regular"]},"Righteous":{"family":"Righteous","category":"display","variants":["regular"]},"Risque":{"family":"Risque","category":"display","variants":["regular"]},"Roboto":{"family":"Roboto","category":"sans-serif","variants":["100","100italic","300","300italic","500","500italic","700","700italic","900","900italic","italic","regular"]},"Roboto Condensed":{"family":"Roboto Condensed","category":"sans-serif","variants":["300","300italic","700","700italic","italic","regular"]},"Roboto Mono":{"family":"Roboto Mono","category":"monospace","variants":["100","100italic","300","300italic","500","500italic","700","700italic","italic","regular"]},"Roboto Slab":{"family":"Roboto Slab","category":"serif","variants":["100","300","700","regular"]},"Rochester":{"family":"Rochester","category":"handwriting","variants":["regular"]},"Rock Salt":{"family":"Rock Salt","category":"handwriting","variants":["regular"]},"Rokkitt":{"family":"Rokkitt","category":"serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Romanesco":{"family":"Romanesco","category":"handwriting","variants":["regular"]},"Ropa Sans":{"family":"Ropa Sans","category":"sans-serif","variants":["italic","regular"]},"Rosario":{"family":"Rosario","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Rosarivo":{"family":"Rosarivo","category":"serif","variants":["italic","regular"]},"Rouge Script":{"family":"Rouge Script","category":"handwriting","variants":["regular"]},"Rozha One":{"family":"Rozha One","category":"serif","variants":["regular"]},"Rubik":{"family":"Rubik","category":"sans-serif","variants":["300","300italic","500","500italic","700","700italic","900","900italic","italic","regular"]},"Rubik Mono One":{"family":"Rubik Mono One","category":"sans-serif","variants":["regular"]},"Ruda":{"family":"Ruda","category":"sans-serif","variants":["700","900","regular"]},"Rufina":{"family":"Rufina","category":"serif","variants":["700","regular"]},"Ruge Boogie":{"family":"Ruge Boogie","category":"handwriting","variants":["regular"]},"Ruluko":{"family":"Ruluko","category":"sans-serif","variants":["regular"]},"Rum Raisin":{"family":"Rum Raisin","category":"sans-serif","variants":["regular"]},"Ruslan Display":{"family":"Ruslan Display","category":"display","variants":["regular"]},"Russo One":{"family":"Russo One","category":"sans-serif","variants":["regular"]},"Ruthie":{"family":"Ruthie","category":"handwriting","variants":["regular"]},"Rye":{"family":"Rye","category":"display","variants":["regular"]},"Sacramento":{"family":"Sacramento","category":"handwriting","variants":["regular"]},"Sahitya":{"family":"Sahitya","category":"serif","variants":["700","regular"]},"Sail":{"family":"Sail","category":"display","variants":["regular"]},"Saira":{"family":"Saira","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Saira Condensed":{"family":"Saira Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Saira Extra Condensed":{"family":"Saira Extra Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Saira Semi Condensed":{"family":"Saira Semi Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Salsa":{"family":"Salsa","category":"display","variants":["regular"]},"Sanchez":{"family":"Sanchez","category":"serif","variants":["italic","regular"]},"Sancreek":{"family":"Sancreek","category":"display","variants":["regular"]},"Sansita":{"family":"Sansita","category":"sans-serif","variants":["700","700italic","800","800italic","900","900italic","italic","regular"]},"Sarala":{"family":"Sarala","category":"sans-serif","variants":["700","regular"]},"Sarina":{"family":"Sarina","category":"display","variants":["regular"]},"Sarpanch":{"family":"Sarpanch","category":"sans-serif","variants":["500","600","700","800","900","regular"]},"Satisfy":{"family":"Satisfy","category":"handwriting","variants":["regular"]},"Scada":{"family":"Scada","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Scheherazade":{"family":"Scheherazade","category":"serif","variants":["700","regular"]},"Schoolbell":{"family":"Schoolbell","category":"handwriting","variants":["regular"]},"Scope One":{"family":"Scope One","category":"serif","variants":["regular"]},"Seaweed Script":{"family":"Seaweed Script","category":"display","variants":["regular"]},"Secular One":{"family":"Secular One","category":"sans-serif","variants":["regular"]},"Sedgwick Ave":{"family":"Sedgwick Ave","category":"handwriting","variants":["regular"]},"Sedgwick Ave Display":{"family":"Sedgwick Ave Display","category":"handwriting","variants":["regular"]},"Sevillana":{"family":"Sevillana","category":"display","variants":["regular"]},"Seymour One":{"family":"Seymour One","category":"sans-serif","variants":["regular"]},"Shadows Into Light":{"family":"Shadows Into Light","category":"handwriting","variants":["regular"]},"Shadows Into Light Two":{"family":"Shadows Into Light Two","category":"handwriting","variants":["regular"]},"Shanti":{"family":"Shanti","category":"sans-serif","variants":["regular"]},"Share":{"family":"Share","category":"display","variants":["700","700italic","italic","regular"]},"Share Tech":{"family":"Share Tech","category":"sans-serif","variants":["regular"]},"Share Tech Mono":{"family":"Share Tech Mono","category":"monospace","variants":["regular"]},"Shojumaru":{"family":"Shojumaru","category":"display","variants":["regular"]},"Short Stack":{"family":"Short Stack","category":"handwriting","variants":["regular"]},"Shrikhand":{"family":"Shrikhand","category":"display","variants":["regular"]},"Siemreap":{"family":"Siemreap","category":"display","variants":["regular"]},"Sigmar One":{"family":"Sigmar One","category":"display","variants":["regular"]},"Signika":{"family":"Signika","category":"sans-serif","variants":["300","600","700","regular"]},"Signika Negative":{"family":"Signika Negative","category":"sans-serif","variants":["300","600","700","regular"]},"Simonetta":{"family":"Simonetta","category":"display","variants":["900","900italic","italic","regular"]},"Sintony":{"family":"Sintony","category":"sans-serif","variants":["700","regular"]},"Sirin Stencil":{"family":"Sirin Stencil","category":"display","variants":["regular"]},"Six Caps":{"family":"Six Caps","category":"sans-serif","variants":["regular"]},"Skranji":{"family":"Skranji","category":"display","variants":["700","regular"]},"Slabo 13px":{"family":"Slabo 13px","category":"serif","variants":["regular"]},"Slabo 27px":{"family":"Slabo 27px","category":"serif","variants":["regular"]},"Slackey":{"family":"Slackey","category":"display","variants":["regular"]},"Smokum":{"family":"Smokum","category":"display","variants":["regular"]},"Smythe":{"family":"Smythe","category":"display","variants":["regular"]},"Sniglet":{"family":"Sniglet","category":"display","variants":["800","regular"]},"Snippet":{"family":"Snippet","category":"sans-serif","variants":["regular"]},"Snowburst One":{"family":"Snowburst One","category":"display","variants":["regular"]},"Sofadi One":{"family":"Sofadi One","category":"display","variants":["regular"]},"Sofia":{"family":"Sofia","category":"handwriting","variants":["regular"]},"Sonsie One":{"family":"Sonsie One","category":"display","variants":["regular"]},"Sorts Mill Goudy":{"family":"Sorts Mill Goudy","category":"serif","variants":["italic","regular"]},"Source Code Pro":{"family":"Source Code Pro","category":"monospace","variants":["200","300","500","600","700","900","regular"]},"Source Sans Pro":{"family":"Source Sans Pro","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","900","900italic","italic","regular"]},"Source Serif Pro":{"family":"Source Serif Pro","category":"serif","variants":["600","700","regular"]},"Space Mono":{"family":"Space Mono","category":"monospace","variants":["700","700italic","italic","regular"]},"Special Elite":{"family":"Special Elite","category":"display","variants":["regular"]},"Spectral":{"family":"Spectral","category":"serif","variants":["200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Spectral SC":{"family":"Spectral SC","category":"serif","variants":["200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Spicy Rice":{"family":"Spicy Rice","category":"display","variants":["regular"]},"Spinnaker":{"family":"Spinnaker","category":"sans-serif","variants":["regular"]},"Spirax":{"family":"Spirax","category":"display","variants":["regular"]},"Squada One":{"family":"Squada One","category":"display","variants":["regular"]},"Sree Krushnadevaraya":{"family":"Sree Krushnadevaraya","category":"serif","variants":["regular"]},"Sriracha":{"family":"Sriracha","category":"handwriting","variants":["regular"]},"Stalemate":{"family":"Stalemate","category":"handwriting","variants":["regular"]},"Stalinist One":{"family":"Stalinist One","category":"display","variants":["regular"]},"Stardos Stencil":{"family":"Stardos Stencil","category":"display","variants":["700","regular"]},"Stint Ultra Condensed":{"family":"Stint Ultra Condensed","category":"display","variants":["regular"]},"Stint Ultra Expanded":{"family":"Stint Ultra Expanded","category":"display","variants":["regular"]},"Stoke":{"family":"Stoke","category":"serif","variants":["300","regular"]},"Strait":{"family":"Strait","category":"sans-serif","variants":["regular"]},"Sue Ellen Francisco":{"family":"Sue Ellen Francisco","category":"handwriting","variants":["regular"]},"Suez One":{"family":"Suez One","category":"serif","variants":["regular"]},"Sumana":{"family":"Sumana","category":"serif","variants":["700","regular"]},"Sunshiney":{"family":"Sunshiney","category":"handwriting","variants":["regular"]},"Supermercado One":{"family":"Supermercado One","category":"display","variants":["regular"]},"Sura":{"family":"Sura","category":"serif","variants":["700","regular"]},"Suranna":{"family":"Suranna","category":"serif","variants":["regular"]},"Suravaram":{"family":"Suravaram","category":"serif","variants":["regular"]},"Suwannaphum":{"family":"Suwannaphum","category":"display","variants":["regular"]},"Swanky and Moo Moo":{"family":"Swanky and Moo Moo","category":"handwriting","variants":["regular"]},"Syncopate":{"family":"Syncopate","category":"sans-serif","variants":["700","regular"]},"Tangerine":{"family":"Tangerine","category":"handwriting","variants":["700","regular"]},"Taprom":{"family":"Taprom","category":"display","variants":["regular"]},"Tauri":{"family":"Tauri","category":"sans-serif","variants":["regular"]},"Taviraj":{"family":"Taviraj","category":"serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Teko":{"family":"Teko","category":"sans-serif","variants":["300","500","600","700","regular"]},"Telex":{"family":"Telex","category":"sans-serif","variants":["regular"]},"Tenali Ramakrishna":{"family":"Tenali Ramakrishna","category":"sans-serif","variants":["regular"]},"Tenor Sans":{"family":"Tenor Sans","category":"sans-serif","variants":["regular"]},"Text Me One":{"family":"Text Me One","category":"sans-serif","variants":["regular"]},"The Girl Next Door":{"family":"The Girl Next Door","category":"handwriting","variants":["regular"]},"Tienne":{"family":"Tienne","category":"serif","variants":["700","900","regular"]},"Tillana":{"family":"Tillana","category":"handwriting","variants":["500","600","700","800","regular"]},"Timmana":{"family":"Timmana","category":"sans-serif","variants":["regular"]},"Tinos":{"family":"Tinos","category":"serif","variants":["700","700italic","italic","regular"]},"Titan One":{"family":"Titan One","category":"display","variants":["regular"]},"Titillium Web":{"family":"Titillium Web","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","900","italic","regular"]},"Trade Winds":{"family":"Trade Winds","category":"display","variants":["regular"]},"Trirong":{"family":"Trirong","category":"serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Trocchi":{"family":"Trocchi","category":"serif","variants":["regular"]},"Trochut":{"family":"Trochut","category":"display","variants":["700","italic","regular"]},"Trykker":{"family":"Trykker","category":"serif","variants":["regular"]},"Tulpen One":{"family":"Tulpen One","category":"display","variants":["regular"]},"Ubuntu":{"family":"Ubuntu","category":"sans-serif","variants":["300","300italic","500","500italic","700","700italic","italic","regular"]},"Ubuntu Condensed":{"family":"Ubuntu Condensed","category":"sans-serif","variants":["regular"]},"Ubuntu Mono":{"family":"Ubuntu Mono","category":"monospace","variants":["700","700italic","italic","regular"]},"Ultra":{"family":"Ultra","category":"serif","variants":["regular"]},"Uncial Antiqua":{"family":"Uncial Antiqua","category":"display","variants":["regular"]},"Underdog":{"family":"Underdog","category":"display","variants":["regular"]},"Unica One":{"family":"Unica One","category":"display","variants":["regular"]},"UnifrakturCook":{"family":"UnifrakturCook","category":"display","variants":["700"]},"UnifrakturMaguntia":{"family":"UnifrakturMaguntia","category":"display","variants":["regular"]},"Unkempt":{"family":"Unkempt","category":"display","variants":["700","regular"]},"Unlock":{"family":"Unlock","category":"display","variants":["regular"]},"Unna":{"family":"Unna","category":"serif","variants":["700","700italic","italic","regular"]},"VT323":{"family":"VT323","category":"monospace","variants":["regular"]},"Vampiro One":{"family":"Vampiro One","category":"display","variants":["regular"]},"Varela":{"family":"Varela","category":"sans-serif","variants":["regular"]},"Varela Round":{"family":"Varela Round","category":"sans-serif","variants":["regular"]},"Vast Shadow":{"family":"Vast Shadow","category":"display","variants":["regular"]},"Vesper Libre":{"family":"Vesper Libre","category":"serif","variants":["500","700","900","regular"]},"Vibur":{"family":"Vibur","category":"handwriting","variants":["regular"]},"Vidaloka":{"family":"Vidaloka","category":"serif","variants":["regular"]},"Viga":{"family":"Viga","category":"sans-serif","variants":["regular"]},"Voces":{"family":"Voces","category":"display","variants":["regular"]},"Volkhov":{"family":"Volkhov","category":"serif","variants":["700","700italic","italic","regular"]},"Vollkorn":{"family":"Vollkorn","category":"serif","variants":["600","600italic","700","700italic","900","900italic","italic","regular"]},"Vollkorn SC":{"family":"Vollkorn SC","category":"serif","variants":["600","700","900","regular"]},"Voltaire":{"family":"Voltaire","category":"sans-serif","variants":["regular"]},"Waiting for the Sunrise":{"family":"Waiting for the Sunrise","category":"handwriting","variants":["regular"]},"Wallpoet":{"family":"Wallpoet","category":"display","variants":["regular"]},"Walter Turncoat":{"family":"Walter Turncoat","category":"handwriting","variants":["regular"]},"Warnes":{"family":"Warnes","category":"display","variants":["regular"]},"Wellfleet":{"family":"Wellfleet","category":"display","variants":["regular"]},"Wendy One":{"family":"Wendy One","category":"sans-serif","variants":["regular"]},"Wire One":{"family":"Wire One","category":"sans-serif","variants":["regular"]},"Work Sans":{"family":"Work Sans","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Yanone Kaffeesatz":{"family":"Yanone Kaffeesatz","category":"sans-serif","variants":["200","300","700","regular"]},"Yantramanav":{"family":"Yantramanav","category":"sans-serif","variants":["100","300","500","700","900","regular"]},"Yatra One":{"family":"Yatra One","category":"display","variants":["regular"]},"Yellowtail":{"family":"Yellowtail","category":"handwriting","variants":["regular"]},"Yeseva One":{"family":"Yeseva One","category":"display","variants":["regular"]},"Yesteryear":{"family":"Yesteryear","category":"handwriting","variants":["regular"]},"Yrsa":{"family":"Yrsa","category":"serif","variants":["300","500","600","700","regular"]},"Zeyada":{"family":"Zeyada","category":"handwriting","variants":["regular"]},"Zilla Slab":{"family":"Zilla Slab","category":"serif","variants":["300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"Zilla Slab Highlight":{"family":"Zilla Slab Highlight","category":"display","variants":["700","regular"]}},"order":{"popularity":["Roboto","Open Sans","Lato","Roboto Condensed","Montserrat","Slabo 27px","Oswald","Source Sans Pro","Raleway","PT Sans","Roboto Slab","Merriweather","Open Sans Condensed","Lora","Ubuntu","Playfair Display","Noto Sans","Titillium Web","Poppins","PT Serif","Arimo","Muli","PT Sans Narrow","Noto Serif","Indie Flower","Inconsolata","Dosis","Nunito","Anton","Bitter","Fira Sans","Oxygen","Crimson Text","Josefin Sans","Cabin","Work Sans","Libre Baskerville","Fjalla One","Arvo","Lobster","Quicksand","Exo 2","Hind","Abril Fatface","Roboto Mono","Rubik","Catamaran","Yanone Kaffeesatz","Abel","Karla","Pacifico","Bree Serif","Varela Round","Acme","Shadows Into Light","Asap","Merriweather Sans","Libre Franklin","Ubuntu Condensed","Gloria Hallelujah","Signika","Archivo Narrow","Dancing Script","Cormorant Garamond","Questrial","Source Code Pro","Nunito Sans","Play","Rajdhani","Maven Pro","Source Serif Pro","Cairo","Crete Round","Francois One","Archivo Black","Berkshire Swash","EB Garamond","Amatic SC","PT Sans Caption","Rokkitt","Comfortaa","Cuprum","Patua One","Exo","Vollkorn","Ropa Sans","Shrikhand","Kanit","Poiret One","Domine","Cinzel","Courgette","Pathway Gothic One","Righteous","Old Standard TT","Satisfy","Josefin Slab","Heebo","Orbitron","Alegreya","Alegreya Sans","Quattrocento Sans","News Cycle","Russo One","Passion One","Hind Siliguri","Cookie","Noticia Text","Permanent Marker","Great Vibes","Istok Web","Kaushan Script","Teko","Monda","Lobster Two","ABeeZee","Cardo","Gudea","Yantramanav","Philosopher","Amaranth","Sanchez","Quattrocento","Tinos","Cabin Condensed","Economica","Kalam","Pontano Sans","Playfair Display SC","Sacramento","Alfa Slab One","Handlee","Arapey","Amiri","Bangers","Didact Gothic","Volkhov","Hammersmith One","Prompt","Audiowide","Concert One","Fredoka One","BenchNine","Jura","Tangerine","Adamina","Neuton","Armata","Sarala","Vidaloka","Caveat","Marck Script","Boogaloo","Shadows Into Light Two","Cantarell","Khand","Assistant","Ruda","Monoton","Arima Madurai","Rock Salt","Overpass","Architects Daughter","Gentium Book Basic","Caveat Brush","Glegoo","Antic Slab","Scada","Unica One","VT323","Yellowtail","Changa","Sorts Mill Goudy","Julius Sans One","Kreon","Coustard","Fira Sans Condensed","Hind Madurai","Luckiest Guy","Chewy","Gentium Basic","Patrick Hand","PT Mono","Pragati Narrow","Bad Script","Prata","Forum","Aldrich","Yrsa","Neucha","Homemade Apple","Special Elite","Alice","Playball","Paytone One","Bevan","Sintony","Magra","Actor","Contrail One","Signika Negative","Ovo","Enriqueta","Varela","Arsenal","Gochi Hand","Damion","Sigmar One","Cabin Sketch","Basic","Martel","Oleo Script","Alegreya Sans SC","Arbutus Slab","Rufina","Nothing You Could Do","Lusitana","Advent Pro","Kameron","Rambla","Covered By Your Grace","Hind Vadodara","Fira Sans Extra Condensed","PT Serif Caption","Alex Brush","Rancho","Fugaz One","Prosto One","Merienda","Montserrat Alternates","Press Start 2P","Share","Just Another Hand","Marmelad","Ubuntu Mono","Cantata One","Chivo","Frank Ruhl Libre","Coda","Allura","Nobile","Barlow Condensed","Lustria","Carme","Convergence","Ceviche One","Marcellus","Bungee","Spinnaker","Electrolize","Michroma","Coming Soon","Overlock","Reenie Beanie","Slabo 13px","Alef","Pinyon Script","Niconne","Copse","Voltaire","Cousine","Khula","Radley","Oranienbaum","Marcellus SC","Ultra","Carter One","Syncopate","Viga","Telex","Archivo","Molengo","Parisienne","Freckle Face","Bubblegum Sans","Jaldi","Quantico","Average","Grand Hotel","Fauna One","Limelight","Leckerli One","Changa One","Metrophobic","Cutive Mono","Days One","Fredericka the Great","Black Ops One","Karma","Lateef","Goudy Bookletter 1911","Carrois Gothic","Space Mono","Annie Use Your Telescope","Alegreya SC","Aladin","Rosario","Love Ya Like A Sister","Marvel","Andada","Rochester","Squada One","Candal","Baloo","Cinzel Decorative","Jockey One","Nixie One","Aclonica","Homenaje","Hind Guntur","Yesteryear","Martel Sans","Italianno","Norican","Bowlby One SC","Rasa","Allerta","Kurale","Antic","Reem Kufi","Palanquin","Tauri","Cutive","Puritan","Cambay","Anonymous Pro","Lalezar","Pompiere","Itim","Average Sans","Kelly Slab","Allerta Stencil","Pridi","Calligraffitti","Voces","Mr Dafoe","Fanwood Text","Racing Sans One","Tenor Sans","Graduate","Biryani","Halant","Inder","Barlow","Gravitas One","Cormorant","Scheherazade","Mitr","El Messiri","Doppio One","Six Caps","Short Stack","The Girl Next Door","Give You Glory","Lilita One","Capriola","Taviraj","Yeseva One","Risque","Happy Monkey","Mr De Haviland","Trocchi","Petit Formal Script","Gilda Display","Schoolbell","Caudex","Delius","Judson","Zilla Slab","Artifika","Fontdiner Swanky","Saira Semi Condensed","GFS Didot","Bungee Inline","Quando","Abhaya Libre","Andika","Londrina Solid","Balthazar","Unna","Baloo Paaji","Lekton","Herr Von Muellerhoff","IM Fell Double Pica","Belleza","Wire One","Merienda One","Mada","Zeyada","Sue Ellen Francisco","Share Tech Mono","Montez","Trirong","Macondo","Baumans","Allan","Alike","Encode Sans Condensed","Arizonia","Gabriela","Rozha One","Chelsea Market","Vast Shadow","Eczar","Duru Sans","Mate","Mako","Megrim","Knewave","Bowlby One","IM Fell English","Clicker Script","Poly","Cambo","Oregano","Saira Extra Condensed","Rouge Script","Athiti","Gruppo","Qwigley","Imprima","Strait","La Belle Aurore","Barlow Semi Condensed","Saira","Kristi","Brawler","NTR","Crafty Girls","Rammetto One","Federo","Walter Turncoat","Frijole","Lemon","Miriam Libre","Gafata","Hanuman","Bilbo Swash Caps","Belgrano","Kranky","Emilys Candy","Oxygen Mono","Waiting for the Sunrise","Anaheim","Loved by the King","Quintessential","Euphoria Script","Fondamento","Iceland","Secular One","Fira Mono","Seaweed Script","Unkempt","Denk One","Palanquin Dark","Baloo Bhaina","Spectral","Mouse Memoirs","Dawning of a New Day","Creepster","Cherry Swash","Lily Script One","Saira Condensed","Shojumaru","Carrois Gothic SC","Port Lligat Slab","Maitree","Just Me Again Down Here","Orienta","Averia Serif Libre","Titan One","Oleo Script Swash Caps","Podkova","Patrick Hand SC","Expletus Sans","Stalemate","Cedarville Cursive","Crushed","Italiana","Delius Swash Caps","IM Fell English SC","UnifrakturMaguntia","Corben","Metamorphous","Sofia","Raleway Dots","Tienne","Buenard","Harmattan","Over the Rainbow","Pangolin","Sniglet","Vesper Libre","Meddon","Mukta","Gurajada","Engagement","Mukta Vaani","Stardos Stencil","Ledger","Nova Mono","David Libre","Amethysta","Aguafina Script","Rye","Prociono","Life Savers","Numans","Salsa","Spirax","Bentham","Headland One","Joti One","Finger Paint","Vampiro One","Cantora One","Sriracha","Holtwood One SC","Kotta One","Sancreek","Lemonada","Geo","Cherry Cream Soda","Skranji","Codystar","Shanti","Amiko","Proza Libre","Baloo Tamma","Ranchers","Ramabhadra","Chau Philomene One","Simonetta","IM Fell DW Pica","Englebert","Condiment","Suranna","Mirza","Nova Square","Laila","Medula One","Wallpoet","Nova Slim","Bungee Shade","Poller One","Pattaya","Rubik Mono One","Suez One","McLaren","Share Tech","Faster One","Asap Condensed","Spectral SC","Supermercado One","Mystery Quest","Mallanna","Aref Ruqaa","Fjord One","Wendy One","Jim Nightshade","Amarante","Dorsa","Averia Sans Libre","Dynalight","Baloo Chettan","Maiden Orange","Tulpen One","Rosarivo","Kite One","Habibi","Germania One","Sarpanch","Londrina Outline","Port Lligat Sans","League Script","Mate SC","Katibeh","Slackey","Antic Didone","Almendra","Averia Libre","Stint Ultra Condensed","Fenix","Mountains of Christmas","Inika","Pirata One","Ruslan Display","Asul","Sumana","Khmer","Nosifer","Flamenco","Sail","Stint Ultra Expanded","Rationale","Cormorant Infant","Vibur","Fascinate Inline","Henny Penny","Encode Sans","Mandali","Dekko","Mrs Saint Delafield","Delius Unicase","Montserrat Subrayada","Donegal One","Milonga","Ruluko","Krona One","Alike Angular","Mogra","Elsie","Ruthie","Stoke","Esteban","Princess Sofia","Bilbo","Chonburi","IM Fell French Canon","Kadwa","Junge","Lovers Quarrel","Rakkas","Cormorant SC","Ravi Prakash","Trade Winds","Kavoon","Ribeye","Cagliostro","Faustina","Nova Flat","Coda Caption","Swanky and Moo Moo","Bellefair","UnifrakturCook","Sonsie One","Sarina","Sansita","Akronim","Croissant One","Nova Round","Paprika","Fresca","Arya","Griffy","Pavanam","Peralta","Miniver","Sedgwick Ave","Scope One","Buda","Text Me One","Amita","Battambang","Plaster","Bubbler One","Monsieur La Doulaise","Chicle","Rhodium Libre","IM Fell DW Pica SC","Monofett","IM Fell Great Primer","Linden Hill","Baloo Thambi","Asset","Glass Antiqua","Offside","Julee","Londrina Shadow","Diplomata SC","Overlock SC","Spicy Rice","Ranga","Angkor","Margarine","Ramaraja","BioRhyme","Autour One","Eagle Lake","IM Fell Double Pica SC","New Rocker","Redressed","Revalia","MedievalSharp","Trykker","Galindo","Della Respira","Snippet","Iceberg","Macondo Swash Caps","Baloo Bhai","Bigelow Rules","Fascinate","Molle","Snowburst One","Yatra One","Wellfleet","Uncial Antiqua","Underdog","Averia Gruesa Libre","Ribeye Marrow","Montaga","Petrona","Bigshot One","Sunshiney","Ewert","Original Surfer","Cormorant Upright","Geostar Fill","Encode Sans Semi Condensed","Caesar Dressing","Meie Script","Marko One","Inknut Antiqua","Modern Antiqua","Sahitya","Lancelot","Irish Grover","Goblin One","Purple Purse","Oldenburg","Baloo Bhaijaan","Keania One","Dr Sugiyama","Content","Encode Sans Expanded","Jacques Francois Shadow","GFS Neohellenic","IM Fell French Canon SC","Jomhuria","Atomic Age","Chango","Metal Mania","Sura","Almendra SC","Rum Raisin","Smythe","Mukta Malar","Astloch","Atma","Miltonian Tattoo","Jolly Lodger","Flavors","Farsan","Elsie Swash Caps","Diplomata","Tillana","Romanesco","Galada","Sree Krushnadevaraya","Nokora","Arbutus","Ruge Boogie","Piedra","Jacques Francois","Warnes","Seymour One","IM Fell Great Primer SC","Galdeano","Miltonian","Smokum","Lakki Reddy","Passero One","Devonshire","Trochut","Nova Oval","Gorditas","Mrs Sheppards","Kenia","Manuale","Koulen","Overpass Mono","Coiny","Miss Fajardose","Freehand","Asar","Barrio","Bonbon","Odor Mean Chey","Bayon","Felipa","Meera Inimai","Bokor","Padauk","Modak","Suwannaphum","Londrina Sketch","Almendra Display","Nova Script","Butcherman","Stalinist One","Dangrek","Timmana","Eater","Moul","Metal","Fruktur","Combo","Erica One","Butterfly Kids","Vollkorn SC","Sofadi One","Sedgwick Ave Display","Sirin Stencil","Kavivanar","Nova Cut","Cormorant Unicase","Kantumruy","Emblema One","Chathura","Siemreap","Aubrey","Kumar One","Geostar","Hanalei Fill","Baloo Da","Sevillana","Hanalei","Zilla Slab Highlight","Federant","Chela One","Taprom","Bungee Hairline","Bahiana","Bungee Outline","Tenali Ramakrishna","Baloo Tammudu","Mr Bedfort","Preahvihear","Libre Barcode 39 Text","Chenla","Peddana","Suravaram","Fasthand","Gidugu","Moulpali","Libre Barcode 39 Extended Text","Mukta Mahee","Encode Sans Semi Expanded","Kdam Thmor","Unlock","Dhurjati","Kumar One Outline","Libre Barcode 39 Extended","Libre Barcode 128 Text","Libre Barcode 39","BioRhyme Expanded","Libre Barcode 128"],"trending":["Supermercado One","Risque","Kavivanar","VT323","Sedgwick Ave","Macondo","Saira Condensed","Miriam Libre","Libre Barcode 39","Bungee Hairline","Encode Sans Semi Expanded","Baloo Bhai","Caveat Brush","Ranchers","Libre Barcode 39 Extended","Archivo","Libre Barcode 128","Titan One","Andada","Rasa","Emblema One","GFS Neohellenic","Cambo","Port Lligat Sans","BioRhyme Expanded","Kumar One Outline","Lemon","Suravaram","Bangers","Voces","Miniver","Harmattan","Poly","Dekko","Scada","Biryani","Bowlby One","Ceviche One","Baloo Chettan","Source Code Pro","Sedgwick Ave Display","Libre Barcode 128 Text","Mirza","Bubblegum Sans","Rakkas","Sigmar One","Dangrek","IM Fell English SC","Manuale","Basic","Hanalei Fill","Sriracha","Marmelad","Suez One","Pridi","Kavoon","Aref Ruqaa","Englebert","Jolly Lodger","Hind Madurai","Rock Salt","Trocchi","Meera Inimai","Voltaire","Marck Script","Encode Sans","Metrophobic","Baloo Da","Seymour One","Astloch","Economica","Arima Madurai","Cherry Cream Soda","Cormorant Upright","Barlow","Arsenal","Fascinate Inline","Jacques Francois Shadow","Share Tech","Montez","Nunito Sans","Space Mono","Just Me Again Down Here","Nova Flat","Joti One","Barlow Semi Condensed","Gentium Book Basic","Love Ya Like A Sister","Smokum","Cormorant Garamond","Nosifer","Aclonica","Kurale","Federant","Bigshot One","Londrina Shadow","Felipa","Podkova","Shrikhand","Cormorant Unicase","Jacques Francois","Gidugu","Butcherman","Freehand","Dorsa","Jura","Atomic Age","Londrina Sketch","Arbutus","Kelly Slab","Caesar Dressing","Sunshiney","Gravitas One","Carter One","Palanquin","Chango","Forum","Ruge Boogie","Kite One","Raleway Dots","Fontdiner Swanky","Rubik Mono One","Mr De Haviland","Goblin One","Coming Soon","Fruktur","Geo","Kantumruy","Ravi Prakash","Neuton","Palanquin Dark","Simonetta","Molle","Carme","IM Fell French Canon SC","Asset","Croissant One","Eater","Aubrey","Tillana","Chewy","Kalam","Gurajada","Pompiere","David Libre","Angkor","Kenia","Bonbon","Geostar","Laila","Swanky and Moo Moo","Modern Antiqua","Marko One","IM Fell English","Give You Glory","Sofadi One","Jomhuria","Padauk","Orienta","Philosopher","Ruluko","Over the Rainbow","Engagement","Andika","Gentium Basic","Gilda Display","Galdeano","IM Fell DW Pica SC","Encode Sans Condensed","Macondo Swash Caps","Lateef","Copse","Baloo Tamma","Anton","Qwigley","Rosarivo","Comfortaa","Fira Sans Extra Condensed","Anaheim","Schoolbell","Taprom","Volkhov","Fjord One","Donegal One","Saira","Gruppo","Jockey One","Buenard","Cantarell","Homemade Apple","Delius","Cinzel","Iceberg","Battambang","Gochi Hand","Diplomata SC","Libre Baskerville","Mate SC","Oleo Script","Finger Paint","Farsan","Sancreek","Belgrano","Skranji","Moul","Flavors","McLaren","Taviraj","Telex","Bilbo","Petit Formal Script","Lekton","Content","Yrsa","Paytone One","Fira Sans","Orbitron","Oregano","Fauna One","Gafata","Megrim","Eczar","Overpass Mono","Lustria","Roboto Mono","Prompt","Sonsie One","Mr Dafoe","Almendra SC","Kaushan Script","Esteban","Cagliostro","Mate","Delius Swash Caps","Judson","Poller One","El Messiri","Inconsolata","Zilla Slab","Offside","Acme","Mako","Suwannaphum","Rubik","Nova Mono","Tinos","Mitr","Autour One","Zeyada","Italianno","Katibeh","Smythe","IM Fell Double Pica","Meddon","Allan","Archivo Narrow","Noto Sans","Graduate","UnifrakturMaguntia","Sacramento","Ledger","Poppins","Sura","Satisfy","Changa One","Signika","Underdog","Audiowide","Averia Libre","Nova Cut","Tangerine","Allura","Proza Libre","Cutive","Titillium Web","Seaweed Script","Oxygen Mono","Special Elite","Condiment","Wellfleet","Butterfly Kids","Indie Flower","Nobile","Griffy","Wallpoet","Exo 2","Kranky","Lobster","Spinnaker","Bentham","EB Garamond","Arizonia","Fira Sans Condensed","Abril Fatface","Metal Mania","Glegoo","Nothing You Could Do","Cousine","Dhurjati","Barrio","Martel Sans","Alex Brush","Noticia Text","Luckiest Guy","Barlow Condensed","Eagle Lake","Hanalei","Kumar One","Italiana","Short Stack","Salsa","Amarante","Antic Slab","Fugaz One","Federo","Miltonian","Loved by the King","Princess Sofia","Bitter","Atma","Molengo","Lusitana","Fredericka the Great","Brawler","Almendra Display","Lemonada","Wendy One","Nixie One","Sarina","PT Sans Caption","Timmana","Elsie Swash Caps","Martel","The Girl Next Door","Karla","Architects Daughter","Unica One","Cherry Swash","Gudea","Rosario","Montserrat Alternates","Stoke","Strait","Aladin","Oranienbaum","Racing Sans One","Athiti","Actor","Expletus Sans","Imprima","Maitree","Cormorant Infant","Parisienne","Erica One","Hammersmith One","Allerta Stencil","Maiden Orange","Permanent Marker","Domine","Medula One","Noto Serif","Nokora","Josefin Sans","Pontano Sans","Bevan","Fredoka One","Happy Monkey","Gloria Hallelujah","Ubuntu Mono","Francois One","Bad Script","Emilys Candy","Kristi","Monoton","Akronim","Dosis","Tienne","Puritan","Petrona","Marcellus SC","Rajdhani","Abhaya Libre","Spectral","Sree Krushnadevaraya","Bahiana","Ubuntu Condensed","Fanwood Text","Just Another Hand","Goudy Bookletter 1911","Ropa Sans","Alegreya SC","Port Lligat Slab","Mrs Saint Delafield","Nova Oval","Arimo","Righteous","Allerta","PT Serif","Headland One","Cedarville Cursive","Asap","Fresca","Hind Guntur","Sintony","Stint Ultra Expanded","Playfair Display SC","Linden Hill","Varela Round","Encode Sans Semi Condensed","Lovers Quarrel","Poiret One","Piedra","Purple Purse","Libre Franklin","Chela One","Fasthand","Paprika","Bayon","Asul","ABeeZee","Uncial Antiqua","Creepster","Kanit","Slabo 13px","Codystar","Source Sans Pro","Numans","Amethysta","Antic Didone","Montaga","Shojumaru","Knewave","Oxygen","Enriqueta","Merienda One","Ramabhadra","Peddana","Ribeye","Almendra","Geostar Fill","Ribeye Marrow","Galada","Inder","Bilbo Swash Caps","Marcellus","Bokor","Fondamento","Kreon","Hind","Reem Kufi","Roboto Slab","Signika Negative","Maven Pro","Metal","Capriola","Josefin Slab","Neucha","Asap Condensed","Share Tech Mono","Chenla","Rancho","Mystery Quest","Magra","Leckerli One","Scheherazade","Didact Gothic","Playfair Display","Original Surfer","Yanone Kaffeesatz","Sue Ellen Francisco","Jim Nightshade","Baumans","Moulpali","Shadows Into Light Two","Arya","Russo One","Norican","Saira Semi Condensed","IM Fell Great Primer","Shanti","Montserrat","Average Sans","Dancing Script","Kameron","Alice","Ranga","Freckle Face","Alfa Slab One","Revalia","Walter Turncoat","Tulpen One","Unlock","Homenaje","Quattrocento Sans","MedievalSharp","Combo","Six Caps","Flamenco","Herr Von Muellerhoff","Cabin Condensed","Rye","Roboto Condensed","Amaranth","Doppio One","Habibi","Stardos Stencil","Caudex","Modak","News Cycle","PT Sans Narrow","Zilla Slab Highlight","Ruslan Display","Sofia","Open Sans","PT Mono","Trochut","Yatra One","Ruda","Nova Round","Handlee","Lakki Reddy","Bubbler One","Merriweather Sans","Raleway","Glass Antiqua","Lancelot","Quando","Dawning of a New Day","Days One","Hanuman","Questrial","Slackey","Rammetto One","Crimson Text","Duru Sans","Junge","IM Fell DW Pica","Karma","Annie Use Your Telescope","Secular One","Crafty Girls","Squada One","Black Ops One","Stalemate","Lato","Stint Ultra Condensed","Alike Angular","PT Sans","Patrick Hand SC","Old Standard TT","Alegreya","Passero One","Pattaya","Cutive Mono","Sail","Kotta One","Waiting for the Sunrise","Arbutus Slab","Nova Script","Mr Bedfort","Sevillana","Sorts Mill Goudy","Pathway Gothic One","Yellowtail","PT Serif Caption","Quintessential","Armata","Amiri","Michroma","Margarine","Artifika","Cormorant","La Belle Aurore","Calligraffitti","Vampiro One","Rokkitt","Merienda","Cairo","Rambla","Spicy Rice","Rochester","Pinyon Script","Oldenburg","Sarpanch","Niconne","Fira Mono","Alike","Koulen","Elsie","Cabin","Cuprum","Julee","Galindo","Kdam Thmor","Anonymous Pro","Coda Caption","Unkempt","Vibur","Henny Penny","Sahitya","Alegreya Sans SC","Peralta","Wire One","Keania One","BenchNine","Work Sans","Playball","Bungee Inline","Monda","Tenor Sans","Ubuntu","Amita","Lora","Pirata One","Vidaloka","Arapey","Belleza","Bungee Outline","Abel","Merriweather","Marvel","Coda","Snippet","Nova Square","Fjalla One","Carrois Gothic","Oswald","Clicker Script","Play","Miss Fajardose","Press Start 2P","Mrs Sheppards","Mallanna","Averia Gruesa Libre","Irish Grover","Bigelow Rules","Warnes","Text Me One","Delius Unicase","Halant","Bree Serif","Cardo","Quattrocento","Tauri","Rationale","Pacifico","Dynalight","Open Sans Condensed","Suranna","Yesteryear","Teko","IM Fell Double Pica SC","Boogaloo","Monsieur La Doulaise","Baloo Paaji","Ruthie","Cormorant SC","Mukta Vaani","Cookie","Vast Shadow","Yeseva One","Asar","Assistant","Lobster Two","Plaster","Istok Web","Khand","Trade Winds","IM Fell French Canon","Alegreya Sans","Prata","Crushed","Vollkorn","Arvo","Advent Pro","Varela","Rouge Script","Damion","Covered By Your Grace","Life Savers","Ewert","Aldrich","Nova Slim","Prociono","Romanesco","Sanchez","BioRhyme","Tenali Ramakrishna","Lily Script One","Buda","Averia Serif Libre","Viga","Preahvihear","Miltonian Tattoo","Bungee Shade","Chivo","Scope One","Heebo","Amatic SC","Trykker","GFS Didot","Mandali","Reenie Beanie","Sniglet","Source Serif Pro","Overlock","Carrois Gothic SC","Quantico","Quicksand","Redressed","Syncopate","Gorditas","Sansita","NTR","Patrick Hand","Passion One","Libre Barcode 39 Extended Text","Khmer","Antic","Baloo","Exo","Aguafina Script","Chonburi","Electrolize","Muli","Catamaran","Rhodium Libre","Ultra","Londrina Solid","Cabin Sketch","Mouse Memoirs","Rum Raisin","Corben","Nunito","Siemreap","Overlock SC","Baloo Bhaijaan","Averia Sans Libre","Mogra","Radley","Cinzel Decorative","Mukta","Coiny","Yantramanav","Faustina","Faster One","New Rocker","Alef","Fenix","League Script","Trirong","Gabriela","Fascinate","Diplomata","Chicle","Kadwa","Bowlby One SC","Roboto","Balthazar","Chathura","Metamorphous","Hind Siliguri","Monofett","Hind Vadodara","Amiko","Inknut Antiqua","Convergence","Frank Ruhl Libre","Meie Script","Crete Round","Libre Barcode 39 Text","Baloo Tammudu","Iceland","Mada","Archivo Black","Chau Philomene One","Julius Sans One","Devonshire","Shadows Into Light","Great Vibes","Denk One","Pragati Narrow","Londrina Outline","Krona One","Share","Oleo Script Swash Caps","Chelsea Market","Berkshire Swash","Euphoria Script","Slabo 27px","Caveat","Unna","Pavanam","Adamina","Rufina","Milonga","Grand Hotel","Baloo Thambi","Vollkorn SC","Inika","Della Respira","Germania One","Overpass","Sarala","Holtwood One SC","Patua One","Cambay","Candal","Vesper Libre","IM Fell Great Primer SC","Odor Mean Chey","Changa","Saira Extra Condensed","Coustard","Frijole","Cantata One","Ramaraja","Ovo","Stalinist One","Dr Sugiyama","Concert One","Sirin Stencil","Montserrat Subrayada","Baloo Bhaina","UnifrakturCook","Average","Prosto One","Cantora One","Snowburst One","Jaldi","Contrail One","Rozha One","Limelight","Mukta Malar","Mountains of Christmas","Lilita One","Spectral SC","Courgette","Lalezar","Bellefair","Sumana","Pangolin","Spirax","Bungee","Itim","Mukta Mahee","Encode Sans Expanded","Khula"]}}
|
1 |
+
{"items":{"ABeeZee":{"family":"ABeeZee","category":"sans-serif","variants":["italic","regular"]},"Abel":{"family":"Abel","category":"sans-serif","variants":["regular"]},"Abhaya Libre":{"family":"Abhaya Libre","category":"serif","variants":["500","600","700","800","regular"]},"Abril Fatface":{"family":"Abril Fatface","category":"display","variants":["regular"]},"Aclonica":{"family":"Aclonica","category":"sans-serif","variants":["regular"]},"Acme":{"family":"Acme","category":"sans-serif","variants":["regular"]},"Actor":{"family":"Actor","category":"sans-serif","variants":["regular"]},"Adamina":{"family":"Adamina","category":"serif","variants":["regular"]},"Advent Pro":{"family":"Advent Pro","category":"sans-serif","variants":["100","200","300","500","600","700","regular"]},"Aguafina Script":{"family":"Aguafina Script","category":"handwriting","variants":["regular"]},"Akronim":{"family":"Akronim","category":"display","variants":["regular"]},"Aladin":{"family":"Aladin","category":"handwriting","variants":["regular"]},"Aldrich":{"family":"Aldrich","category":"sans-serif","variants":["regular"]},"Alef":{"family":"Alef","category":"sans-serif","variants":["700","regular"]},"Alegreya":{"family":"Alegreya","category":"serif","variants":["500","500italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Alegreya SC":{"family":"Alegreya SC","category":"serif","variants":["500","500italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Alegreya Sans":{"family":"Alegreya Sans","category":"sans-serif","variants":["100","100italic","300","300italic","500","500italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Alegreya Sans SC":{"family":"Alegreya Sans SC","category":"sans-serif","variants":["100","100italic","300","300italic","500","500italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Alex Brush":{"family":"Alex Brush","category":"handwriting","variants":["regular"]},"Alfa Slab One":{"family":"Alfa Slab One","category":"display","variants":["regular"]},"Alice":{"family":"Alice","category":"serif","variants":["regular"]},"Alike":{"family":"Alike","category":"serif","variants":["regular"]},"Alike Angular":{"family":"Alike Angular","category":"serif","variants":["regular"]},"Allan":{"family":"Allan","category":"display","variants":["700","regular"]},"Allerta":{"family":"Allerta","category":"sans-serif","variants":["regular"]},"Allerta Stencil":{"family":"Allerta Stencil","category":"sans-serif","variants":["regular"]},"Allura":{"family":"Allura","category":"handwriting","variants":["regular"]},"Almendra":{"family":"Almendra","category":"serif","variants":["700","700italic","italic","regular"]},"Almendra Display":{"family":"Almendra Display","category":"display","variants":["regular"]},"Almendra SC":{"family":"Almendra SC","category":"serif","variants":["regular"]},"Amarante":{"family":"Amarante","category":"display","variants":["regular"]},"Amaranth":{"family":"Amaranth","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Amatic SC":{"family":"Amatic SC","category":"handwriting","variants":["700","regular"]},"Amethysta":{"family":"Amethysta","category":"serif","variants":["regular"]},"Amiko":{"family":"Amiko","category":"sans-serif","variants":["600","700","regular"]},"Amiri":{"family":"Amiri","category":"serif","variants":["700","700italic","italic","regular"]},"Amita":{"family":"Amita","category":"handwriting","variants":["700","regular"]},"Anaheim":{"family":"Anaheim","category":"sans-serif","variants":["regular"]},"Andada":{"family":"Andada","category":"serif","variants":["regular"]},"Andika":{"family":"Andika","category":"sans-serif","variants":["regular"]},"Angkor":{"family":"Angkor","category":"display","variants":["regular"]},"Annie Use Your Telescope":{"family":"Annie Use Your Telescope","category":"handwriting","variants":["regular"]},"Anonymous Pro":{"family":"Anonymous Pro","category":"monospace","variants":["700","700italic","italic","regular"]},"Antic":{"family":"Antic","category":"sans-serif","variants":["regular"]},"Antic Didone":{"family":"Antic Didone","category":"serif","variants":["regular"]},"Antic Slab":{"family":"Antic Slab","category":"serif","variants":["regular"]},"Anton":{"family":"Anton","category":"sans-serif","variants":["regular"]},"Arapey":{"family":"Arapey","category":"serif","variants":["italic","regular"]},"Arbutus":{"family":"Arbutus","category":"display","variants":["regular"]},"Arbutus Slab":{"family":"Arbutus Slab","category":"serif","variants":["regular"]},"Architects Daughter":{"family":"Architects Daughter","category":"handwriting","variants":["regular"]},"Archivo":{"family":"Archivo","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Archivo Black":{"family":"Archivo Black","category":"sans-serif","variants":["regular"]},"Archivo Narrow":{"family":"Archivo Narrow","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Aref Ruqaa":{"family":"Aref Ruqaa","category":"serif","variants":["700","regular"]},"Arima Madurai":{"family":"Arima Madurai","category":"display","variants":["100","200","300","500","700","800","900","regular"]},"Arimo":{"family":"Arimo","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Arizonia":{"family":"Arizonia","category":"handwriting","variants":["regular"]},"Armata":{"family":"Armata","category":"sans-serif","variants":["regular"]},"Arsenal":{"family":"Arsenal","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Artifika":{"family":"Artifika","category":"serif","variants":["regular"]},"Arvo":{"family":"Arvo","category":"serif","variants":["700","700italic","italic","regular"]},"Arya":{"family":"Arya","category":"sans-serif","variants":["700","regular"]},"Asap":{"family":"Asap","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Asap Condensed":{"family":"Asap Condensed","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Asar":{"family":"Asar","category":"serif","variants":["regular"]},"Asset":{"family":"Asset","category":"display","variants":["regular"]},"Assistant":{"family":"Assistant","category":"sans-serif","variants":["200","300","600","700","800","regular"]},"Astloch":{"family":"Astloch","category":"display","variants":["700","regular"]},"Asul":{"family":"Asul","category":"sans-serif","variants":["700","regular"]},"Athiti":{"family":"Athiti","category":"sans-serif","variants":["200","300","500","600","700","regular"]},"Atma":{"family":"Atma","category":"display","variants":["300","500","600","700","regular"]},"Atomic Age":{"family":"Atomic Age","category":"display","variants":["regular"]},"Aubrey":{"family":"Aubrey","category":"display","variants":["regular"]},"Audiowide":{"family":"Audiowide","category":"display","variants":["regular"]},"Autour One":{"family":"Autour One","category":"display","variants":["regular"]},"Average":{"family":"Average","category":"serif","variants":["regular"]},"Average Sans":{"family":"Average Sans","category":"sans-serif","variants":["regular"]},"Averia Gruesa Libre":{"family":"Averia Gruesa Libre","category":"display","variants":["regular"]},"Averia Libre":{"family":"Averia Libre","category":"display","variants":["300","300italic","700","700italic","italic","regular"]},"Averia Sans Libre":{"family":"Averia Sans Libre","category":"display","variants":["300","300italic","700","700italic","italic","regular"]},"Averia Serif Libre":{"family":"Averia Serif Libre","category":"display","variants":["300","300italic","700","700italic","italic","regular"]},"Bad Script":{"family":"Bad Script","category":"handwriting","variants":["regular"]},"Bahiana":{"family":"Bahiana","category":"display","variants":["regular"]},"Baloo":{"family":"Baloo","category":"display","variants":["regular"]},"Baloo Bhai":{"family":"Baloo Bhai","category":"display","variants":["regular"]},"Baloo Bhaijaan":{"family":"Baloo Bhaijaan","category":"display","variants":["regular"]},"Baloo Bhaina":{"family":"Baloo Bhaina","category":"display","variants":["regular"]},"Baloo Chettan":{"family":"Baloo Chettan","category":"display","variants":["regular"]},"Baloo Da":{"family":"Baloo Da","category":"display","variants":["regular"]},"Baloo Paaji":{"family":"Baloo Paaji","category":"display","variants":["regular"]},"Baloo Tamma":{"family":"Baloo Tamma","category":"display","variants":["regular"]},"Baloo Tammudu":{"family":"Baloo Tammudu","category":"display","variants":["regular"]},"Baloo Thambi":{"family":"Baloo Thambi","category":"display","variants":["regular"]},"Balthazar":{"family":"Balthazar","category":"serif","variants":["regular"]},"Bangers":{"family":"Bangers","category":"display","variants":["regular"]},"Barlow":{"family":"Barlow","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Barlow Condensed":{"family":"Barlow Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Barlow Semi Condensed":{"family":"Barlow Semi Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Barrio":{"family":"Barrio","category":"display","variants":["regular"]},"Basic":{"family":"Basic","category":"sans-serif","variants":["regular"]},"Battambang":{"family":"Battambang","category":"display","variants":["700","regular"]},"Baumans":{"family":"Baumans","category":"display","variants":["regular"]},"Bayon":{"family":"Bayon","category":"display","variants":["regular"]},"Belgrano":{"family":"Belgrano","category":"serif","variants":["regular"]},"Bellefair":{"family":"Bellefair","category":"serif","variants":["regular"]},"Belleza":{"family":"Belleza","category":"sans-serif","variants":["regular"]},"BenchNine":{"family":"BenchNine","category":"sans-serif","variants":["300","700","regular"]},"Bentham":{"family":"Bentham","category":"serif","variants":["regular"]},"Berkshire Swash":{"family":"Berkshire Swash","category":"handwriting","variants":["regular"]},"Bevan":{"family":"Bevan","category":"display","variants":["regular"]},"Bigelow Rules":{"family":"Bigelow Rules","category":"display","variants":["regular"]},"Bigshot One":{"family":"Bigshot One","category":"display","variants":["regular"]},"Bilbo":{"family":"Bilbo","category":"handwriting","variants":["regular"]},"Bilbo Swash Caps":{"family":"Bilbo Swash Caps","category":"handwriting","variants":["regular"]},"BioRhyme":{"family":"BioRhyme","category":"serif","variants":["200","300","700","800","regular"]},"BioRhyme Expanded":{"family":"BioRhyme Expanded","category":"serif","variants":["200","300","700","800","regular"]},"Biryani":{"family":"Biryani","category":"sans-serif","variants":["200","300","600","700","800","900","regular"]},"Bitter":{"family":"Bitter","category":"serif","variants":["700","italic","regular"]},"Black And White Picture":{"family":"Black And White Picture","category":"sans-serif","variants":["regular"]},"Black Han Sans":{"family":"Black Han Sans","category":"sans-serif","variants":["regular"]},"Black Ops One":{"family":"Black Ops One","category":"display","variants":["regular"]},"Bokor":{"family":"Bokor","category":"display","variants":["regular"]},"Bonbon":{"family":"Bonbon","category":"handwriting","variants":["regular"]},"Boogaloo":{"family":"Boogaloo","category":"display","variants":["regular"]},"Bowlby One":{"family":"Bowlby One","category":"display","variants":["regular"]},"Bowlby One SC":{"family":"Bowlby One SC","category":"display","variants":["regular"]},"Brawler":{"family":"Brawler","category":"serif","variants":["regular"]},"Bree Serif":{"family":"Bree Serif","category":"serif","variants":["regular"]},"Bubblegum Sans":{"family":"Bubblegum Sans","category":"display","variants":["regular"]},"Bubbler One":{"family":"Bubbler One","category":"sans-serif","variants":["regular"]},"Buda":{"family":"Buda","category":"display","variants":["300"]},"Buenard":{"family":"Buenard","category":"serif","variants":["700","regular"]},"Bungee":{"family":"Bungee","category":"display","variants":["regular"]},"Bungee Hairline":{"family":"Bungee Hairline","category":"display","variants":["regular"]},"Bungee Inline":{"family":"Bungee Inline","category":"display","variants":["regular"]},"Bungee Outline":{"family":"Bungee Outline","category":"display","variants":["regular"]},"Bungee Shade":{"family":"Bungee Shade","category":"display","variants":["regular"]},"Butcherman":{"family":"Butcherman","category":"display","variants":["regular"]},"Butterfly Kids":{"family":"Butterfly Kids","category":"handwriting","variants":["regular"]},"Cabin":{"family":"Cabin","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Cabin Condensed":{"family":"Cabin Condensed","category":"sans-serif","variants":["500","600","700","regular"]},"Cabin Sketch":{"family":"Cabin Sketch","category":"display","variants":["700","regular"]},"Caesar Dressing":{"family":"Caesar Dressing","category":"display","variants":["regular"]},"Cagliostro":{"family":"Cagliostro","category":"sans-serif","variants":["regular"]},"Cairo":{"family":"Cairo","category":"sans-serif","variants":["200","300","600","700","900","regular"]},"Calligraffitti":{"family":"Calligraffitti","category":"handwriting","variants":["regular"]},"Cambay":{"family":"Cambay","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Cambo":{"family":"Cambo","category":"serif","variants":["regular"]},"Candal":{"family":"Candal","category":"sans-serif","variants":["regular"]},"Cantarell":{"family":"Cantarell","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Cantata One":{"family":"Cantata One","category":"serif","variants":["regular"]},"Cantora One":{"family":"Cantora One","category":"sans-serif","variants":["regular"]},"Capriola":{"family":"Capriola","category":"sans-serif","variants":["regular"]},"Cardo":{"family":"Cardo","category":"serif","variants":["700","italic","regular"]},"Carme":{"family":"Carme","category":"sans-serif","variants":["regular"]},"Carrois Gothic":{"family":"Carrois Gothic","category":"sans-serif","variants":["regular"]},"Carrois Gothic SC":{"family":"Carrois Gothic SC","category":"sans-serif","variants":["regular"]},"Carter One":{"family":"Carter One","category":"display","variants":["regular"]},"Catamaran":{"family":"Catamaran","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Caudex":{"family":"Caudex","category":"serif","variants":["700","700italic","italic","regular"]},"Caveat":{"family":"Caveat","category":"handwriting","variants":["700","regular"]},"Caveat Brush":{"family":"Caveat Brush","category":"handwriting","variants":["regular"]},"Cedarville Cursive":{"family":"Cedarville Cursive","category":"handwriting","variants":["regular"]},"Ceviche One":{"family":"Ceviche One","category":"display","variants":["regular"]},"Changa":{"family":"Changa","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Changa One":{"family":"Changa One","category":"display","variants":["italic","regular"]},"Chango":{"family":"Chango","category":"display","variants":["regular"]},"Chathura":{"family":"Chathura","category":"sans-serif","variants":["100","300","700","800","regular"]},"Chau Philomene One":{"family":"Chau Philomene One","category":"sans-serif","variants":["italic","regular"]},"Chela One":{"family":"Chela One","category":"display","variants":["regular"]},"Chelsea Market":{"family":"Chelsea Market","category":"display","variants":["regular"]},"Chenla":{"family":"Chenla","category":"display","variants":["regular"]},"Cherry Cream Soda":{"family":"Cherry Cream Soda","category":"display","variants":["regular"]},"Cherry Swash":{"family":"Cherry Swash","category":"display","variants":["700","regular"]},"Chewy":{"family":"Chewy","category":"display","variants":["regular"]},"Chicle":{"family":"Chicle","category":"display","variants":["regular"]},"Chivo":{"family":"Chivo","category":"sans-serif","variants":["300","300italic","700","700italic","900","900italic","italic","regular"]},"Chonburi":{"family":"Chonburi","category":"display","variants":["regular"]},"Cinzel":{"family":"Cinzel","category":"serif","variants":["700","900","regular"]},"Cinzel Decorative":{"family":"Cinzel Decorative","category":"display","variants":["700","900","regular"]},"Clicker Script":{"family":"Clicker Script","category":"handwriting","variants":["regular"]},"Coda":{"family":"Coda","category":"display","variants":["800","regular"]},"Coda Caption":{"family":"Coda Caption","category":"sans-serif","variants":["800"]},"Codystar":{"family":"Codystar","category":"display","variants":["300","regular"]},"Coiny":{"family":"Coiny","category":"display","variants":["regular"]},"Combo":{"family":"Combo","category":"display","variants":["regular"]},"Comfortaa":{"family":"Comfortaa","category":"display","variants":["300","700","regular"]},"Coming Soon":{"family":"Coming Soon","category":"handwriting","variants":["regular"]},"Concert One":{"family":"Concert One","category":"display","variants":["regular"]},"Condiment":{"family":"Condiment","category":"handwriting","variants":["regular"]},"Content":{"family":"Content","category":"display","variants":["700","regular"]},"Contrail One":{"family":"Contrail One","category":"display","variants":["regular"]},"Convergence":{"family":"Convergence","category":"sans-serif","variants":["regular"]},"Cookie":{"family":"Cookie","category":"handwriting","variants":["regular"]},"Copse":{"family":"Copse","category":"serif","variants":["regular"]},"Corben":{"family":"Corben","category":"display","variants":["700","regular"]},"Cormorant":{"family":"Cormorant","category":"serif","variants":["300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"Cormorant Garamond":{"family":"Cormorant Garamond","category":"serif","variants":["300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"Cormorant Infant":{"family":"Cormorant Infant","category":"serif","variants":["300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"Cormorant SC":{"family":"Cormorant SC","category":"serif","variants":["300","500","600","700","regular"]},"Cormorant Unicase":{"family":"Cormorant Unicase","category":"serif","variants":["300","500","600","700","regular"]},"Cormorant Upright":{"family":"Cormorant Upright","category":"serif","variants":["300","500","600","700","regular"]},"Courgette":{"family":"Courgette","category":"handwriting","variants":["regular"]},"Cousine":{"family":"Cousine","category":"monospace","variants":["700","700italic","italic","regular"]},"Coustard":{"family":"Coustard","category":"serif","variants":["900","regular"]},"Covered By Your Grace":{"family":"Covered By Your Grace","category":"handwriting","variants":["regular"]},"Crafty Girls":{"family":"Crafty Girls","category":"handwriting","variants":["regular"]},"Creepster":{"family":"Creepster","category":"display","variants":["regular"]},"Crete Round":{"family":"Crete Round","category":"serif","variants":["italic","regular"]},"Crimson Text":{"family":"Crimson Text","category":"serif","variants":["600","600italic","700","700italic","italic","regular"]},"Croissant One":{"family":"Croissant One","category":"display","variants":["regular"]},"Crushed":{"family":"Crushed","category":"display","variants":["regular"]},"Cuprum":{"family":"Cuprum","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Cute Font":{"family":"Cute Font","category":"display","variants":["regular"]},"Cutive":{"family":"Cutive","category":"serif","variants":["regular"]},"Cutive Mono":{"family":"Cutive Mono","category":"monospace","variants":["regular"]},"Damion":{"family":"Damion","category":"handwriting","variants":["regular"]},"Dancing Script":{"family":"Dancing Script","category":"handwriting","variants":["700","regular"]},"Dangrek":{"family":"Dangrek","category":"display","variants":["regular"]},"David Libre":{"family":"David Libre","category":"serif","variants":["500","700","regular"]},"Dawning of a New Day":{"family":"Dawning of a New Day","category":"handwriting","variants":["regular"]},"Days One":{"family":"Days One","category":"sans-serif","variants":["regular"]},"Dekko":{"family":"Dekko","category":"handwriting","variants":["regular"]},"Delius":{"family":"Delius","category":"handwriting","variants":["regular"]},"Delius Swash Caps":{"family":"Delius Swash Caps","category":"handwriting","variants":["regular"]},"Delius Unicase":{"family":"Delius Unicase","category":"handwriting","variants":["700","regular"]},"Della Respira":{"family":"Della Respira","category":"serif","variants":["regular"]},"Denk One":{"family":"Denk One","category":"sans-serif","variants":["regular"]},"Devonshire":{"family":"Devonshire","category":"handwriting","variants":["regular"]},"Dhurjati":{"family":"Dhurjati","category":"sans-serif","variants":["regular"]},"Didact Gothic":{"family":"Didact Gothic","category":"sans-serif","variants":["regular"]},"Diplomata":{"family":"Diplomata","category":"display","variants":["regular"]},"Diplomata SC":{"family":"Diplomata SC","category":"display","variants":["regular"]},"Do Hyeon":{"family":"Do Hyeon","category":"sans-serif","variants":["regular"]},"Dokdo":{"family":"Dokdo","category":"handwriting","variants":["regular"]},"Domine":{"family":"Domine","category":"serif","variants":["700","regular"]},"Donegal One":{"family":"Donegal One","category":"serif","variants":["regular"]},"Doppio One":{"family":"Doppio One","category":"sans-serif","variants":["regular"]},"Dorsa":{"family":"Dorsa","category":"sans-serif","variants":["regular"]},"Dosis":{"family":"Dosis","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Dr Sugiyama":{"family":"Dr Sugiyama","category":"handwriting","variants":["regular"]},"Duru Sans":{"family":"Duru Sans","category":"sans-serif","variants":["regular"]},"Dynalight":{"family":"Dynalight","category":"display","variants":["regular"]},"EB Garamond":{"family":"EB Garamond","category":"serif","variants":["500","500italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Eagle Lake":{"family":"Eagle Lake","category":"handwriting","variants":["regular"]},"East Sea Dokdo":{"family":"East Sea Dokdo","category":"handwriting","variants":["regular"]},"Eater":{"family":"Eater","category":"display","variants":["regular"]},"Economica":{"family":"Economica","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Eczar":{"family":"Eczar","category":"serif","variants":["500","600","700","800","regular"]},"El Messiri":{"family":"El Messiri","category":"sans-serif","variants":["500","600","700","regular"]},"Electrolize":{"family":"Electrolize","category":"sans-serif","variants":["regular"]},"Elsie":{"family":"Elsie","category":"display","variants":["900","regular"]},"Elsie Swash Caps":{"family":"Elsie Swash Caps","category":"display","variants":["900","regular"]},"Emblema One":{"family":"Emblema One","category":"display","variants":["regular"]},"Emilys Candy":{"family":"Emilys Candy","category":"display","variants":["regular"]},"Encode Sans":{"family":"Encode Sans","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Encode Sans Condensed":{"family":"Encode Sans Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Encode Sans Expanded":{"family":"Encode Sans Expanded","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Encode Sans Semi Condensed":{"family":"Encode Sans Semi Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Encode Sans Semi Expanded":{"family":"Encode Sans Semi Expanded","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Engagement":{"family":"Engagement","category":"handwriting","variants":["regular"]},"Englebert":{"family":"Englebert","category":"sans-serif","variants":["regular"]},"Enriqueta":{"family":"Enriqueta","category":"serif","variants":["700","regular"]},"Erica One":{"family":"Erica One","category":"display","variants":["regular"]},"Esteban":{"family":"Esteban","category":"serif","variants":["regular"]},"Euphoria Script":{"family":"Euphoria Script","category":"handwriting","variants":["regular"]},"Ewert":{"family":"Ewert","category":"display","variants":["regular"]},"Exo":{"family":"Exo","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Exo 2":{"family":"Exo 2","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Expletus Sans":{"family":"Expletus Sans","category":"display","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Fanwood Text":{"family":"Fanwood Text","category":"serif","variants":["italic","regular"]},"Farsan":{"family":"Farsan","category":"display","variants":["regular"]},"Fascinate":{"family":"Fascinate","category":"display","variants":["regular"]},"Fascinate Inline":{"family":"Fascinate Inline","category":"display","variants":["regular"]},"Faster One":{"family":"Faster One","category":"display","variants":["regular"]},"Fasthand":{"family":"Fasthand","category":"serif","variants":["regular"]},"Fauna One":{"family":"Fauna One","category":"serif","variants":["regular"]},"Faustina":{"family":"Faustina","category":"serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Federant":{"family":"Federant","category":"display","variants":["regular"]},"Federo":{"family":"Federo","category":"sans-serif","variants":["regular"]},"Felipa":{"family":"Felipa","category":"handwriting","variants":["regular"]},"Fenix":{"family":"Fenix","category":"serif","variants":["regular"]},"Finger Paint":{"family":"Finger Paint","category":"display","variants":["regular"]},"Fira Mono":{"family":"Fira Mono","category":"monospace","variants":["500","700","regular"]},"Fira Sans":{"family":"Fira Sans","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Fira Sans Condensed":{"family":"Fira Sans Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Fira Sans Extra Condensed":{"family":"Fira Sans Extra Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Fjalla One":{"family":"Fjalla One","category":"sans-serif","variants":["regular"]},"Fjord One":{"family":"Fjord One","category":"serif","variants":["regular"]},"Flamenco":{"family":"Flamenco","category":"display","variants":["300","regular"]},"Flavors":{"family":"Flavors","category":"display","variants":["regular"]},"Fondamento":{"family":"Fondamento","category":"handwriting","variants":["italic","regular"]},"Fontdiner Swanky":{"family":"Fontdiner Swanky","category":"display","variants":["regular"]},"Forum":{"family":"Forum","category":"display","variants":["regular"]},"Francois One":{"family":"Francois One","category":"sans-serif","variants":["regular"]},"Frank Ruhl Libre":{"family":"Frank Ruhl Libre","category":"serif","variants":["300","500","700","900","regular"]},"Freckle Face":{"family":"Freckle Face","category":"display","variants":["regular"]},"Fredericka the Great":{"family":"Fredericka the Great","category":"display","variants":["regular"]},"Fredoka One":{"family":"Fredoka One","category":"display","variants":["regular"]},"Freehand":{"family":"Freehand","category":"display","variants":["regular"]},"Fresca":{"family":"Fresca","category":"sans-serif","variants":["regular"]},"Frijole":{"family":"Frijole","category":"display","variants":["regular"]},"Fruktur":{"family":"Fruktur","category":"display","variants":["regular"]},"Fugaz One":{"family":"Fugaz One","category":"display","variants":["regular"]},"GFS Didot":{"family":"GFS Didot","category":"serif","variants":["regular"]},"GFS Neohellenic":{"family":"GFS Neohellenic","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Gabriela":{"family":"Gabriela","category":"serif","variants":["regular"]},"Gaegu":{"family":"Gaegu","category":"handwriting","variants":["300","700","regular"]},"Gafata":{"family":"Gafata","category":"sans-serif","variants":["regular"]},"Galada":{"family":"Galada","category":"display","variants":["regular"]},"Galdeano":{"family":"Galdeano","category":"sans-serif","variants":["regular"]},"Galindo":{"family":"Galindo","category":"display","variants":["regular"]},"Gamja Flower":{"family":"Gamja Flower","category":"handwriting","variants":["regular"]},"Gentium Basic":{"family":"Gentium Basic","category":"serif","variants":["700","700italic","italic","regular"]},"Gentium Book Basic":{"family":"Gentium Book Basic","category":"serif","variants":["700","700italic","italic","regular"]},"Geo":{"family":"Geo","category":"sans-serif","variants":["italic","regular"]},"Geostar":{"family":"Geostar","category":"display","variants":["regular"]},"Geostar Fill":{"family":"Geostar Fill","category":"display","variants":["regular"]},"Germania One":{"family":"Germania One","category":"display","variants":["regular"]},"Gidugu":{"family":"Gidugu","category":"sans-serif","variants":["regular"]},"Gilda Display":{"family":"Gilda Display","category":"serif","variants":["regular"]},"Give You Glory":{"family":"Give You Glory","category":"handwriting","variants":["regular"]},"Glass Antiqua":{"family":"Glass Antiqua","category":"display","variants":["regular"]},"Glegoo":{"family":"Glegoo","category":"serif","variants":["700","regular"]},"Gloria Hallelujah":{"family":"Gloria Hallelujah","category":"handwriting","variants":["regular"]},"Goblin One":{"family":"Goblin One","category":"display","variants":["regular"]},"Gochi Hand":{"family":"Gochi Hand","category":"handwriting","variants":["regular"]},"Gorditas":{"family":"Gorditas","category":"display","variants":["700","regular"]},"Gothic A1":{"family":"Gothic A1","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Goudy Bookletter 1911":{"family":"Goudy Bookletter 1911","category":"serif","variants":["regular"]},"Graduate":{"family":"Graduate","category":"display","variants":["regular"]},"Grand Hotel":{"family":"Grand Hotel","category":"handwriting","variants":["regular"]},"Gravitas One":{"family":"Gravitas One","category":"display","variants":["regular"]},"Great Vibes":{"family":"Great Vibes","category":"handwriting","variants":["regular"]},"Griffy":{"family":"Griffy","category":"display","variants":["regular"]},"Gruppo":{"family":"Gruppo","category":"display","variants":["regular"]},"Gudea":{"family":"Gudea","category":"sans-serif","variants":["700","italic","regular"]},"Gugi":{"family":"Gugi","category":"display","variants":["regular"]},"Gurajada":{"family":"Gurajada","category":"serif","variants":["regular"]},"Habibi":{"family":"Habibi","category":"serif","variants":["regular"]},"Halant":{"family":"Halant","category":"serif","variants":["300","500","600","700","regular"]},"Hammersmith One":{"family":"Hammersmith One","category":"sans-serif","variants":["regular"]},"Hanalei":{"family":"Hanalei","category":"display","variants":["regular"]},"Hanalei Fill":{"family":"Hanalei Fill","category":"display","variants":["regular"]},"Handlee":{"family":"Handlee","category":"handwriting","variants":["regular"]},"Hanuman":{"family":"Hanuman","category":"serif","variants":["700","regular"]},"Happy Monkey":{"family":"Happy Monkey","category":"display","variants":["regular"]},"Harmattan":{"family":"Harmattan","category":"sans-serif","variants":["regular"]},"Headland One":{"family":"Headland One","category":"serif","variants":["regular"]},"Heebo":{"family":"Heebo","category":"sans-serif","variants":["100","300","500","700","800","900","regular"]},"Henny Penny":{"family":"Henny Penny","category":"display","variants":["regular"]},"Herr Von Muellerhoff":{"family":"Herr Von Muellerhoff","category":"handwriting","variants":["regular"]},"Hi Melody":{"family":"Hi Melody","category":"handwriting","variants":["regular"]},"Hind":{"family":"Hind","category":"sans-serif","variants":["300","500","600","700","regular"]},"Hind Guntur":{"family":"Hind Guntur","category":"sans-serif","variants":["300","500","600","700","regular"]},"Hind Madurai":{"family":"Hind Madurai","category":"sans-serif","variants":["300","500","600","700","regular"]},"Hind Siliguri":{"family":"Hind Siliguri","category":"sans-serif","variants":["300","500","600","700","regular"]},"Hind Vadodara":{"family":"Hind Vadodara","category":"sans-serif","variants":["300","500","600","700","regular"]},"Holtwood One SC":{"family":"Holtwood One SC","category":"serif","variants":["regular"]},"Homemade Apple":{"family":"Homemade Apple","category":"handwriting","variants":["regular"]},"Homenaje":{"family":"Homenaje","category":"sans-serif","variants":["regular"]},"IBM Plex Mono":{"family":"IBM Plex Mono","category":"monospace","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"IBM Plex Sans":{"family":"IBM Plex Sans","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"IBM Plex Sans Condensed":{"family":"IBM Plex Sans Condensed","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"IBM Plex Serif":{"family":"IBM Plex Serif","category":"serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"IM Fell DW Pica":{"family":"IM Fell DW Pica","category":"serif","variants":["italic","regular"]},"IM Fell DW Pica SC":{"family":"IM Fell DW Pica SC","category":"serif","variants":["regular"]},"IM Fell Double Pica":{"family":"IM Fell Double Pica","category":"serif","variants":["italic","regular"]},"IM Fell Double Pica SC":{"family":"IM Fell Double Pica SC","category":"serif","variants":["regular"]},"IM Fell English":{"family":"IM Fell English","category":"serif","variants":["italic","regular"]},"IM Fell English SC":{"family":"IM Fell English SC","category":"serif","variants":["regular"]},"IM Fell French Canon":{"family":"IM Fell French Canon","category":"serif","variants":["italic","regular"]},"IM Fell French Canon SC":{"family":"IM Fell French Canon SC","category":"serif","variants":["regular"]},"IM Fell Great Primer":{"family":"IM Fell Great Primer","category":"serif","variants":["italic","regular"]},"IM Fell Great Primer SC":{"family":"IM Fell Great Primer SC","category":"serif","variants":["regular"]},"Iceberg":{"family":"Iceberg","category":"display","variants":["regular"]},"Iceland":{"family":"Iceland","category":"display","variants":["regular"]},"Imprima":{"family":"Imprima","category":"sans-serif","variants":["regular"]},"Inconsolata":{"family":"Inconsolata","category":"monospace","variants":["700","regular"]},"Inder":{"family":"Inder","category":"sans-serif","variants":["regular"]},"Indie Flower":{"family":"Indie Flower","category":"handwriting","variants":["regular"]},"Inika":{"family":"Inika","category":"serif","variants":["700","regular"]},"Inknut Antiqua":{"family":"Inknut Antiqua","category":"serif","variants":["300","500","600","700","800","900","regular"]},"Irish Grover":{"family":"Irish Grover","category":"display","variants":["regular"]},"Istok Web":{"family":"Istok Web","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Italiana":{"family":"Italiana","category":"serif","variants":["regular"]},"Italianno":{"family":"Italianno","category":"handwriting","variants":["regular"]},"Itim":{"family":"Itim","category":"handwriting","variants":["regular"]},"Jacques Francois":{"family":"Jacques Francois","category":"serif","variants":["regular"]},"Jacques Francois Shadow":{"family":"Jacques Francois Shadow","category":"display","variants":["regular"]},"Jaldi":{"family":"Jaldi","category":"sans-serif","variants":["700","regular"]},"Jim Nightshade":{"family":"Jim Nightshade","category":"handwriting","variants":["regular"]},"Jockey One":{"family":"Jockey One","category":"sans-serif","variants":["regular"]},"Jolly Lodger":{"family":"Jolly Lodger","category":"display","variants":["regular"]},"Jomhuria":{"family":"Jomhuria","category":"display","variants":["regular"]},"Josefin Sans":{"family":"Josefin Sans","category":"sans-serif","variants":["100","100italic","300","300italic","600","600italic","700","700italic","italic","regular"]},"Josefin Slab":{"family":"Josefin Slab","category":"serif","variants":["100","100italic","300","300italic","600","600italic","700","700italic","italic","regular"]},"Joti One":{"family":"Joti One","category":"display","variants":["regular"]},"Jua":{"family":"Jua","category":"sans-serif","variants":["regular"]},"Judson":{"family":"Judson","category":"serif","variants":["700","italic","regular"]},"Julee":{"family":"Julee","category":"handwriting","variants":["regular"]},"Julius Sans One":{"family":"Julius Sans One","category":"sans-serif","variants":["regular"]},"Junge":{"family":"Junge","category":"serif","variants":["regular"]},"Jura":{"family":"Jura","category":"sans-serif","variants":["300","500","600","700","regular"]},"Just Another Hand":{"family":"Just Another Hand","category":"handwriting","variants":["regular"]},"Just Me Again Down Here":{"family":"Just Me Again Down Here","category":"handwriting","variants":["regular"]},"Kadwa":{"family":"Kadwa","category":"serif","variants":["700","regular"]},"Kalam":{"family":"Kalam","category":"handwriting","variants":["300","700","regular"]},"Kameron":{"family":"Kameron","category":"serif","variants":["700","regular"]},"Kanit":{"family":"Kanit","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Kantumruy":{"family":"Kantumruy","category":"sans-serif","variants":["300","700","regular"]},"Karla":{"family":"Karla","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Karma":{"family":"Karma","category":"serif","variants":["300","500","600","700","regular"]},"Katibeh":{"family":"Katibeh","category":"display","variants":["regular"]},"Kaushan Script":{"family":"Kaushan Script","category":"handwriting","variants":["regular"]},"Kavivanar":{"family":"Kavivanar","category":"handwriting","variants":["regular"]},"Kavoon":{"family":"Kavoon","category":"display","variants":["regular"]},"Kdam Thmor":{"family":"Kdam Thmor","category":"display","variants":["regular"]},"Keania One":{"family":"Keania One","category":"display","variants":["regular"]},"Kelly Slab":{"family":"Kelly Slab","category":"display","variants":["regular"]},"Kenia":{"family":"Kenia","category":"display","variants":["regular"]},"Khand":{"family":"Khand","category":"sans-serif","variants":["300","500","600","700","regular"]},"Khmer":{"family":"Khmer","category":"display","variants":["regular"]},"Khula":{"family":"Khula","category":"sans-serif","variants":["300","600","700","800","regular"]},"Kirang Haerang":{"family":"Kirang Haerang","category":"display","variants":["regular"]},"Kite One":{"family":"Kite One","category":"sans-serif","variants":["regular"]},"Knewave":{"family":"Knewave","category":"display","variants":["regular"]},"Kotta One":{"family":"Kotta One","category":"serif","variants":["regular"]},"Koulen":{"family":"Koulen","category":"display","variants":["regular"]},"Kranky":{"family":"Kranky","category":"display","variants":["regular"]},"Kreon":{"family":"Kreon","category":"serif","variants":["300","700","regular"]},"Kristi":{"family":"Kristi","category":"handwriting","variants":["regular"]},"Krona One":{"family":"Krona One","category":"sans-serif","variants":["regular"]},"Kumar One":{"family":"Kumar One","category":"display","variants":["regular"]},"Kumar One Outline":{"family":"Kumar One Outline","category":"display","variants":["regular"]},"Kurale":{"family":"Kurale","category":"serif","variants":["regular"]},"La Belle Aurore":{"family":"La Belle Aurore","category":"handwriting","variants":["regular"]},"Laila":{"family":"Laila","category":"serif","variants":["300","500","600","700","regular"]},"Lakki Reddy":{"family":"Lakki Reddy","category":"handwriting","variants":["regular"]},"Lalezar":{"family":"Lalezar","category":"display","variants":["regular"]},"Lancelot":{"family":"Lancelot","category":"display","variants":["regular"]},"Lateef":{"family":"Lateef","category":"handwriting","variants":["regular"]},"Lato":{"family":"Lato","category":"sans-serif","variants":["100","100italic","300","300italic","700","700italic","900","900italic","italic","regular"]},"League Script":{"family":"League Script","category":"handwriting","variants":["regular"]},"Leckerli One":{"family":"Leckerli One","category":"handwriting","variants":["regular"]},"Ledger":{"family":"Ledger","category":"serif","variants":["regular"]},"Lekton":{"family":"Lekton","category":"sans-serif","variants":["700","italic","regular"]},"Lemon":{"family":"Lemon","category":"display","variants":["regular"]},"Lemonada":{"family":"Lemonada","category":"display","variants":["300","600","700","regular"]},"Libre Barcode 128":{"family":"Libre Barcode 128","category":"display","variants":["regular"]},"Libre Barcode 128 Text":{"family":"Libre Barcode 128 Text","category":"display","variants":["regular"]},"Libre Barcode 39":{"family":"Libre Barcode 39","category":"display","variants":["regular"]},"Libre Barcode 39 Extended":{"family":"Libre Barcode 39 Extended","category":"display","variants":["regular"]},"Libre Barcode 39 Extended Text":{"family":"Libre Barcode 39 Extended Text","category":"display","variants":["regular"]},"Libre Barcode 39 Text":{"family":"Libre Barcode 39 Text","category":"display","variants":["regular"]},"Libre Baskerville":{"family":"Libre Baskerville","category":"serif","variants":["700","italic","regular"]},"Libre Franklin":{"family":"Libre Franklin","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Life Savers":{"family":"Life Savers","category":"display","variants":["700","regular"]},"Lilita One":{"family":"Lilita One","category":"display","variants":["regular"]},"Lily Script One":{"family":"Lily Script One","category":"display","variants":["regular"]},"Limelight":{"family":"Limelight","category":"display","variants":["regular"]},"Linden Hill":{"family":"Linden Hill","category":"serif","variants":["italic","regular"]},"Lobster":{"family":"Lobster","category":"display","variants":["regular"]},"Lobster Two":{"family":"Lobster Two","category":"display","variants":["700","700italic","italic","regular"]},"Londrina Outline":{"family":"Londrina Outline","category":"display","variants":["regular"]},"Londrina Shadow":{"family":"Londrina Shadow","category":"display","variants":["regular"]},"Londrina Sketch":{"family":"Londrina Sketch","category":"display","variants":["regular"]},"Londrina Solid":{"family":"Londrina Solid","category":"display","variants":["100","300","900","regular"]},"Lora":{"family":"Lora","category":"serif","variants":["700","700italic","italic","regular"]},"Love Ya Like A Sister":{"family":"Love Ya Like A Sister","category":"display","variants":["regular"]},"Loved by the King":{"family":"Loved by the King","category":"handwriting","variants":["regular"]},"Lovers Quarrel":{"family":"Lovers Quarrel","category":"handwriting","variants":["regular"]},"Luckiest Guy":{"family":"Luckiest Guy","category":"display","variants":["regular"]},"Lusitana":{"family":"Lusitana","category":"serif","variants":["700","regular"]},"Lustria":{"family":"Lustria","category":"serif","variants":["regular"]},"Macondo":{"family":"Macondo","category":"display","variants":["regular"]},"Macondo Swash Caps":{"family":"Macondo Swash Caps","category":"display","variants":["regular"]},"Mada":{"family":"Mada","category":"sans-serif","variants":["200","300","500","600","700","900","regular"]},"Magra":{"family":"Magra","category":"sans-serif","variants":["700","regular"]},"Maiden Orange":{"family":"Maiden Orange","category":"display","variants":["regular"]},"Maitree":{"family":"Maitree","category":"serif","variants":["200","300","500","600","700","regular"]},"Mako":{"family":"Mako","category":"sans-serif","variants":["regular"]},"Mallanna":{"family":"Mallanna","category":"sans-serif","variants":["regular"]},"Mandali":{"family":"Mandali","category":"sans-serif","variants":["regular"]},"Manuale":{"family":"Manuale","category":"serif","variants":["500","500italic","600","600italic","700","700italic","italic","regular"]},"Marcellus":{"family":"Marcellus","category":"serif","variants":["regular"]},"Marcellus SC":{"family":"Marcellus SC","category":"serif","variants":["regular"]},"Marck Script":{"family":"Marck Script","category":"handwriting","variants":["regular"]},"Margarine":{"family":"Margarine","category":"display","variants":["regular"]},"Marko One":{"family":"Marko One","category":"serif","variants":["regular"]},"Marmelad":{"family":"Marmelad","category":"sans-serif","variants":["regular"]},"Martel":{"family":"Martel","category":"serif","variants":["200","300","600","700","800","900","regular"]},"Martel Sans":{"family":"Martel Sans","category":"sans-serif","variants":["200","300","600","700","800","900","regular"]},"Marvel":{"family":"Marvel","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Mate":{"family":"Mate","category":"serif","variants":["italic","regular"]},"Mate SC":{"family":"Mate SC","category":"serif","variants":["regular"]},"Maven Pro":{"family":"Maven Pro","category":"sans-serif","variants":["500","700","900","regular"]},"McLaren":{"family":"McLaren","category":"display","variants":["regular"]},"Meddon":{"family":"Meddon","category":"handwriting","variants":["regular"]},"MedievalSharp":{"family":"MedievalSharp","category":"display","variants":["regular"]},"Medula One":{"family":"Medula One","category":"display","variants":["regular"]},"Meera Inimai":{"family":"Meera Inimai","category":"sans-serif","variants":["regular"]},"Megrim":{"family":"Megrim","category":"display","variants":["regular"]},"Meie Script":{"family":"Meie Script","category":"handwriting","variants":["regular"]},"Merienda":{"family":"Merienda","category":"handwriting","variants":["700","regular"]},"Merienda One":{"family":"Merienda One","category":"handwriting","variants":["regular"]},"Merriweather":{"family":"Merriweather","category":"serif","variants":["300","300italic","700","700italic","900","900italic","italic","regular"]},"Merriweather Sans":{"family":"Merriweather Sans","category":"sans-serif","variants":["300","300italic","700","700italic","800","800italic","italic","regular"]},"Metal":{"family":"Metal","category":"display","variants":["regular"]},"Metal Mania":{"family":"Metal Mania","category":"display","variants":["regular"]},"Metamorphous":{"family":"Metamorphous","category":"display","variants":["regular"]},"Metrophobic":{"family":"Metrophobic","category":"sans-serif","variants":["regular"]},"Michroma":{"family":"Michroma","category":"sans-serif","variants":["regular"]},"Milonga":{"family":"Milonga","category":"display","variants":["regular"]},"Miltonian":{"family":"Miltonian","category":"display","variants":["regular"]},"Miltonian Tattoo":{"family":"Miltonian Tattoo","category":"display","variants":["regular"]},"Mina":{"family":"Mina","category":"sans-serif","variants":["700","regular"]},"Miniver":{"family":"Miniver","category":"display","variants":["regular"]},"Miriam Libre":{"family":"Miriam Libre","category":"sans-serif","variants":["700","regular"]},"Mirza":{"family":"Mirza","category":"display","variants":["500","600","700","regular"]},"Miss Fajardose":{"family":"Miss Fajardose","category":"handwriting","variants":["regular"]},"Mitr":{"family":"Mitr","category":"sans-serif","variants":["200","300","500","600","700","regular"]},"Modak":{"family":"Modak","category":"display","variants":["regular"]},"Modern Antiqua":{"family":"Modern Antiqua","category":"display","variants":["regular"]},"Mogra":{"family":"Mogra","category":"display","variants":["regular"]},"Molengo":{"family":"Molengo","category":"sans-serif","variants":["regular"]},"Molle":{"family":"Molle","category":"handwriting","variants":["italic"]},"Monda":{"family":"Monda","category":"sans-serif","variants":["700","regular"]},"Monofett":{"family":"Monofett","category":"display","variants":["regular"]},"Monoton":{"family":"Monoton","category":"display","variants":["regular"]},"Monsieur La Doulaise":{"family":"Monsieur La Doulaise","category":"handwriting","variants":["regular"]},"Montaga":{"family":"Montaga","category":"serif","variants":["regular"]},"Montez":{"family":"Montez","category":"handwriting","variants":["regular"]},"Montserrat":{"family":"Montserrat","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Montserrat Alternates":{"family":"Montserrat Alternates","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Montserrat Subrayada":{"family":"Montserrat Subrayada","category":"sans-serif","variants":["700","regular"]},"Moul":{"family":"Moul","category":"display","variants":["regular"]},"Moulpali":{"family":"Moulpali","category":"display","variants":["regular"]},"Mountains of Christmas":{"family":"Mountains of Christmas","category":"display","variants":["700","regular"]},"Mouse Memoirs":{"family":"Mouse Memoirs","category":"sans-serif","variants":["regular"]},"Mr Bedfort":{"family":"Mr Bedfort","category":"handwriting","variants":["regular"]},"Mr Dafoe":{"family":"Mr Dafoe","category":"handwriting","variants":["regular"]},"Mr De Haviland":{"family":"Mr De Haviland","category":"handwriting","variants":["regular"]},"Mrs Saint Delafield":{"family":"Mrs Saint Delafield","category":"handwriting","variants":["regular"]},"Mrs Sheppards":{"family":"Mrs Sheppards","category":"handwriting","variants":["regular"]},"Mukta":{"family":"Mukta","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Mukta Mahee":{"family":"Mukta Mahee","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Mukta Malar":{"family":"Mukta Malar","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Mukta Vaani":{"family":"Mukta Vaani","category":"sans-serif","variants":["200","300","500","600","700","800","regular"]},"Muli":{"family":"Muli","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Mystery Quest":{"family":"Mystery Quest","category":"display","variants":["regular"]},"NTR":{"family":"NTR","category":"sans-serif","variants":["regular"]},"Nanum Brush Script":{"family":"Nanum Brush Script","category":"handwriting","variants":["regular"]},"Nanum Gothic":{"family":"Nanum Gothic","category":"sans-serif","variants":["700","800","regular"]},"Nanum Gothic Coding":{"family":"Nanum Gothic Coding","category":"monospace","variants":["700","regular"]},"Nanum Myeongjo":{"family":"Nanum Myeongjo","category":"serif","variants":["700","800","regular"]},"Nanum Pen Script":{"family":"Nanum Pen Script","category":"handwriting","variants":["regular"]},"Neucha":{"family":"Neucha","category":"handwriting","variants":["regular"]},"Neuton":{"family":"Neuton","category":"serif","variants":["200","300","700","800","italic","regular"]},"New Rocker":{"family":"New Rocker","category":"display","variants":["regular"]},"News Cycle":{"family":"News Cycle","category":"sans-serif","variants":["700","regular"]},"Niconne":{"family":"Niconne","category":"handwriting","variants":["regular"]},"Nixie One":{"family":"Nixie One","category":"display","variants":["regular"]},"Nobile":{"family":"Nobile","category":"sans-serif","variants":["500","500italic","700","700italic","italic","regular"]},"Nokora":{"family":"Nokora","category":"serif","variants":["700","regular"]},"Norican":{"family":"Norican","category":"handwriting","variants":["regular"]},"Nosifer":{"family":"Nosifer","category":"display","variants":["regular"]},"Nothing You Could Do":{"family":"Nothing You Could Do","category":"handwriting","variants":["regular"]},"Noticia Text":{"family":"Noticia Text","category":"serif","variants":["700","700italic","italic","regular"]},"Noto Sans":{"family":"Noto Sans","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Noto Serif":{"family":"Noto Serif","category":"serif","variants":["700","700italic","italic","regular"]},"Nova Cut":{"family":"Nova Cut","category":"display","variants":["regular"]},"Nova Flat":{"family":"Nova Flat","category":"display","variants":["regular"]},"Nova Mono":{"family":"Nova Mono","category":"monospace","variants":["regular"]},"Nova Oval":{"family":"Nova Oval","category":"display","variants":["regular"]},"Nova Round":{"family":"Nova Round","category":"display","variants":["regular"]},"Nova Script":{"family":"Nova Script","category":"display","variants":["regular"]},"Nova Slim":{"family":"Nova Slim","category":"display","variants":["regular"]},"Nova Square":{"family":"Nova Square","category":"display","variants":["regular"]},"Numans":{"family":"Numans","category":"sans-serif","variants":["regular"]},"Nunito":{"family":"Nunito","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Nunito Sans":{"family":"Nunito Sans","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Odor Mean Chey":{"family":"Odor Mean Chey","category":"display","variants":["regular"]},"Offside":{"family":"Offside","category":"display","variants":["regular"]},"Old Standard TT":{"family":"Old Standard TT","category":"serif","variants":["700","italic","regular"]},"Oldenburg":{"family":"Oldenburg","category":"display","variants":["regular"]},"Oleo Script":{"family":"Oleo Script","category":"display","variants":["700","regular"]},"Oleo Script Swash Caps":{"family":"Oleo Script Swash Caps","category":"display","variants":["700","regular"]},"Open Sans":{"family":"Open Sans","category":"sans-serif","variants":["300","300italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Open Sans Condensed":{"family":"Open Sans Condensed","category":"sans-serif","variants":["300","300italic","700"]},"Oranienbaum":{"family":"Oranienbaum","category":"serif","variants":["regular"]},"Orbitron":{"family":"Orbitron","category":"sans-serif","variants":["500","700","900","regular"]},"Oregano":{"family":"Oregano","category":"display","variants":["italic","regular"]},"Orienta":{"family":"Orienta","category":"sans-serif","variants":["regular"]},"Original Surfer":{"family":"Original Surfer","category":"display","variants":["regular"]},"Oswald":{"family":"Oswald","category":"sans-serif","variants":["200","300","500","600","700","regular"]},"Over the Rainbow":{"family":"Over the Rainbow","category":"handwriting","variants":["regular"]},"Overlock":{"family":"Overlock","category":"display","variants":["700","700italic","900","900italic","italic","regular"]},"Overlock SC":{"family":"Overlock SC","category":"display","variants":["regular"]},"Overpass":{"family":"Overpass","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Overpass Mono":{"family":"Overpass Mono","category":"monospace","variants":["300","600","700","regular"]},"Ovo":{"family":"Ovo","category":"serif","variants":["regular"]},"Oxygen":{"family":"Oxygen","category":"sans-serif","variants":["300","700","regular"]},"Oxygen Mono":{"family":"Oxygen Mono","category":"monospace","variants":["regular"]},"PT Mono":{"family":"PT Mono","category":"monospace","variants":["regular"]},"PT Sans":{"family":"PT Sans","category":"sans-serif","variants":["700","700italic","italic","regular"]},"PT Sans Caption":{"family":"PT Sans Caption","category":"sans-serif","variants":["700","regular"]},"PT Sans Narrow":{"family":"PT Sans Narrow","category":"sans-serif","variants":["700","regular"]},"PT Serif":{"family":"PT Serif","category":"serif","variants":["700","700italic","italic","regular"]},"PT Serif Caption":{"family":"PT Serif Caption","category":"serif","variants":["italic","regular"]},"Pacifico":{"family":"Pacifico","category":"handwriting","variants":["regular"]},"Padauk":{"family":"Padauk","category":"sans-serif","variants":["700","regular"]},"Palanquin":{"family":"Palanquin","category":"sans-serif","variants":["100","200","300","500","600","700","regular"]},"Palanquin Dark":{"family":"Palanquin Dark","category":"sans-serif","variants":["500","600","700","regular"]},"Pangolin":{"family":"Pangolin","category":"handwriting","variants":["regular"]},"Paprika":{"family":"Paprika","category":"display","variants":["regular"]},"Parisienne":{"family":"Parisienne","category":"handwriting","variants":["regular"]},"Passero One":{"family":"Passero One","category":"display","variants":["regular"]},"Passion One":{"family":"Passion One","category":"display","variants":["700","900","regular"]},"Pathway Gothic One":{"family":"Pathway Gothic One","category":"sans-serif","variants":["regular"]},"Patrick Hand":{"family":"Patrick Hand","category":"handwriting","variants":["regular"]},"Patrick Hand SC":{"family":"Patrick Hand SC","category":"handwriting","variants":["regular"]},"Pattaya":{"family":"Pattaya","category":"sans-serif","variants":["regular"]},"Patua One":{"family":"Patua One","category":"display","variants":["regular"]},"Pavanam":{"family":"Pavanam","category":"sans-serif","variants":["regular"]},"Paytone One":{"family":"Paytone One","category":"sans-serif","variants":["regular"]},"Peddana":{"family":"Peddana","category":"serif","variants":["regular"]},"Peralta":{"family":"Peralta","category":"display","variants":["regular"]},"Permanent Marker":{"family":"Permanent Marker","category":"handwriting","variants":["regular"]},"Petit Formal Script":{"family":"Petit Formal Script","category":"handwriting","variants":["regular"]},"Petrona":{"family":"Petrona","category":"serif","variants":["regular"]},"Philosopher":{"family":"Philosopher","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Piedra":{"family":"Piedra","category":"display","variants":["regular"]},"Pinyon Script":{"family":"Pinyon Script","category":"handwriting","variants":["regular"]},"Pirata One":{"family":"Pirata One","category":"display","variants":["regular"]},"Plaster":{"family":"Plaster","category":"display","variants":["regular"]},"Play":{"family":"Play","category":"sans-serif","variants":["700","regular"]},"Playball":{"family":"Playball","category":"display","variants":["regular"]},"Playfair Display":{"family":"Playfair Display","category":"serif","variants":["700","700italic","900","900italic","italic","regular"]},"Playfair Display SC":{"family":"Playfair Display SC","category":"serif","variants":["700","700italic","900","900italic","italic","regular"]},"Podkova":{"family":"Podkova","category":"serif","variants":["500","600","700","800","regular"]},"Poiret One":{"family":"Poiret One","category":"display","variants":["regular"]},"Poller One":{"family":"Poller One","category":"display","variants":["regular"]},"Poly":{"family":"Poly","category":"serif","variants":["italic","regular"]},"Pompiere":{"family":"Pompiere","category":"display","variants":["regular"]},"Pontano Sans":{"family":"Pontano Sans","category":"sans-serif","variants":["regular"]},"Poor Story":{"family":"Poor Story","category":"display","variants":["regular"]},"Poppins":{"family":"Poppins","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Port Lligat Sans":{"family":"Port Lligat Sans","category":"sans-serif","variants":["regular"]},"Port Lligat Slab":{"family":"Port Lligat Slab","category":"serif","variants":["regular"]},"Pragati Narrow":{"family":"Pragati Narrow","category":"sans-serif","variants":["700","regular"]},"Prata":{"family":"Prata","category":"serif","variants":["regular"]},"Preahvihear":{"family":"Preahvihear","category":"display","variants":["regular"]},"Press Start 2P":{"family":"Press Start 2P","category":"display","variants":["regular"]},"Pridi":{"family":"Pridi","category":"serif","variants":["200","300","500","600","700","regular"]},"Princess Sofia":{"family":"Princess Sofia","category":"handwriting","variants":["regular"]},"Prociono":{"family":"Prociono","category":"serif","variants":["regular"]},"Prompt":{"family":"Prompt","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Prosto One":{"family":"Prosto One","category":"display","variants":["regular"]},"Proza Libre":{"family":"Proza Libre","category":"sans-serif","variants":["500","500italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Puritan":{"family":"Puritan","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Purple Purse":{"family":"Purple Purse","category":"display","variants":["regular"]},"Quando":{"family":"Quando","category":"serif","variants":["regular"]},"Quantico":{"family":"Quantico","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Quattrocento":{"family":"Quattrocento","category":"serif","variants":["700","regular"]},"Quattrocento Sans":{"family":"Quattrocento Sans","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Questrial":{"family":"Questrial","category":"sans-serif","variants":["regular"]},"Quicksand":{"family":"Quicksand","category":"sans-serif","variants":["300","500","700","regular"]},"Quintessential":{"family":"Quintessential","category":"handwriting","variants":["regular"]},"Qwigley":{"family":"Qwigley","category":"handwriting","variants":["regular"]},"Racing Sans One":{"family":"Racing Sans One","category":"display","variants":["regular"]},"Radley":{"family":"Radley","category":"serif","variants":["italic","regular"]},"Rajdhani":{"family":"Rajdhani","category":"sans-serif","variants":["300","500","600","700","regular"]},"Rakkas":{"family":"Rakkas","category":"display","variants":["regular"]},"Raleway":{"family":"Raleway","category":"sans-serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Raleway Dots":{"family":"Raleway Dots","category":"display","variants":["regular"]},"Ramabhadra":{"family":"Ramabhadra","category":"sans-serif","variants":["regular"]},"Ramaraja":{"family":"Ramaraja","category":"serif","variants":["regular"]},"Rambla":{"family":"Rambla","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Rammetto One":{"family":"Rammetto One","category":"display","variants":["regular"]},"Ranchers":{"family":"Ranchers","category":"display","variants":["regular"]},"Rancho":{"family":"Rancho","category":"handwriting","variants":["regular"]},"Ranga":{"family":"Ranga","category":"display","variants":["700","regular"]},"Rasa":{"family":"Rasa","category":"serif","variants":["300","500","600","700","regular"]},"Rationale":{"family":"Rationale","category":"sans-serif","variants":["regular"]},"Ravi Prakash":{"family":"Ravi Prakash","category":"display","variants":["regular"]},"Redressed":{"family":"Redressed","category":"handwriting","variants":["regular"]},"Reem Kufi":{"family":"Reem Kufi","category":"sans-serif","variants":["regular"]},"Reenie Beanie":{"family":"Reenie Beanie","category":"handwriting","variants":["regular"]},"Revalia":{"family":"Revalia","category":"display","variants":["regular"]},"Rhodium Libre":{"family":"Rhodium Libre","category":"serif","variants":["regular"]},"Ribeye":{"family":"Ribeye","category":"display","variants":["regular"]},"Ribeye Marrow":{"family":"Ribeye Marrow","category":"display","variants":["regular"]},"Righteous":{"family":"Righteous","category":"display","variants":["regular"]},"Risque":{"family":"Risque","category":"display","variants":["regular"]},"Roboto":{"family":"Roboto","category":"sans-serif","variants":["100","100italic","300","300italic","500","500italic","700","700italic","900","900italic","italic","regular"]},"Roboto Condensed":{"family":"Roboto Condensed","category":"sans-serif","variants":["300","300italic","700","700italic","italic","regular"]},"Roboto Mono":{"family":"Roboto Mono","category":"monospace","variants":["100","100italic","300","300italic","500","500italic","700","700italic","italic","regular"]},"Roboto Slab":{"family":"Roboto Slab","category":"serif","variants":["100","300","700","regular"]},"Rochester":{"family":"Rochester","category":"handwriting","variants":["regular"]},"Rock Salt":{"family":"Rock Salt","category":"handwriting","variants":["regular"]},"Rokkitt":{"family":"Rokkitt","category":"serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Romanesco":{"family":"Romanesco","category":"handwriting","variants":["regular"]},"Ropa Sans":{"family":"Ropa Sans","category":"sans-serif","variants":["italic","regular"]},"Rosario":{"family":"Rosario","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Rosarivo":{"family":"Rosarivo","category":"serif","variants":["italic","regular"]},"Rouge Script":{"family":"Rouge Script","category":"handwriting","variants":["regular"]},"Rozha One":{"family":"Rozha One","category":"serif","variants":["regular"]},"Rubik":{"family":"Rubik","category":"sans-serif","variants":["300","300italic","500","500italic","700","700italic","900","900italic","italic","regular"]},"Rubik Mono One":{"family":"Rubik Mono One","category":"sans-serif","variants":["regular"]},"Ruda":{"family":"Ruda","category":"sans-serif","variants":["700","900","regular"]},"Rufina":{"family":"Rufina","category":"serif","variants":["700","regular"]},"Ruge Boogie":{"family":"Ruge Boogie","category":"handwriting","variants":["regular"]},"Ruluko":{"family":"Ruluko","category":"sans-serif","variants":["regular"]},"Rum Raisin":{"family":"Rum Raisin","category":"sans-serif","variants":["regular"]},"Ruslan Display":{"family":"Ruslan Display","category":"display","variants":["regular"]},"Russo One":{"family":"Russo One","category":"sans-serif","variants":["regular"]},"Ruthie":{"family":"Ruthie","category":"handwriting","variants":["regular"]},"Rye":{"family":"Rye","category":"display","variants":["regular"]},"Sacramento":{"family":"Sacramento","category":"handwriting","variants":["regular"]},"Sahitya":{"family":"Sahitya","category":"serif","variants":["700","regular"]},"Sail":{"family":"Sail","category":"display","variants":["regular"]},"Saira":{"family":"Saira","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Saira Condensed":{"family":"Saira Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Saira Extra Condensed":{"family":"Saira Extra Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Saira Semi Condensed":{"family":"Saira Semi Condensed","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Salsa":{"family":"Salsa","category":"display","variants":["regular"]},"Sanchez":{"family":"Sanchez","category":"serif","variants":["italic","regular"]},"Sancreek":{"family":"Sancreek","category":"display","variants":["regular"]},"Sansita":{"family":"Sansita","category":"sans-serif","variants":["700","700italic","800","800italic","900","900italic","italic","regular"]},"Sarala":{"family":"Sarala","category":"sans-serif","variants":["700","regular"]},"Sarina":{"family":"Sarina","category":"display","variants":["regular"]},"Sarpanch":{"family":"Sarpanch","category":"sans-serif","variants":["500","600","700","800","900","regular"]},"Satisfy":{"family":"Satisfy","category":"handwriting","variants":["regular"]},"Scada":{"family":"Scada","category":"sans-serif","variants":["700","700italic","italic","regular"]},"Scheherazade":{"family":"Scheherazade","category":"serif","variants":["700","regular"]},"Schoolbell":{"family":"Schoolbell","category":"handwriting","variants":["regular"]},"Scope One":{"family":"Scope One","category":"serif","variants":["regular"]},"Seaweed Script":{"family":"Seaweed Script","category":"display","variants":["regular"]},"Secular One":{"family":"Secular One","category":"sans-serif","variants":["regular"]},"Sedgwick Ave":{"family":"Sedgwick Ave","category":"handwriting","variants":["regular"]},"Sedgwick Ave Display":{"family":"Sedgwick Ave Display","category":"handwriting","variants":["regular"]},"Sevillana":{"family":"Sevillana","category":"display","variants":["regular"]},"Seymour One":{"family":"Seymour One","category":"sans-serif","variants":["regular"]},"Shadows Into Light":{"family":"Shadows Into Light","category":"handwriting","variants":["regular"]},"Shadows Into Light Two":{"family":"Shadows Into Light Two","category":"handwriting","variants":["regular"]},"Shanti":{"family":"Shanti","category":"sans-serif","variants":["regular"]},"Share":{"family":"Share","category":"display","variants":["700","700italic","italic","regular"]},"Share Tech":{"family":"Share Tech","category":"sans-serif","variants":["regular"]},"Share Tech Mono":{"family":"Share Tech Mono","category":"monospace","variants":["regular"]},"Shojumaru":{"family":"Shojumaru","category":"display","variants":["regular"]},"Short Stack":{"family":"Short Stack","category":"handwriting","variants":["regular"]},"Shrikhand":{"family":"Shrikhand","category":"display","variants":["regular"]},"Siemreap":{"family":"Siemreap","category":"display","variants":["regular"]},"Sigmar One":{"family":"Sigmar One","category":"display","variants":["regular"]},"Signika":{"family":"Signika","category":"sans-serif","variants":["300","600","700","regular"]},"Signika Negative":{"family":"Signika Negative","category":"sans-serif","variants":["300","600","700","regular"]},"Simonetta":{"family":"Simonetta","category":"display","variants":["900","900italic","italic","regular"]},"Sintony":{"family":"Sintony","category":"sans-serif","variants":["700","regular"]},"Sirin Stencil":{"family":"Sirin Stencil","category":"display","variants":["regular"]},"Six Caps":{"family":"Six Caps","category":"sans-serif","variants":["regular"]},"Skranji":{"family":"Skranji","category":"display","variants":["700","regular"]},"Slabo 13px":{"family":"Slabo 13px","category":"serif","variants":["regular"]},"Slabo 27px":{"family":"Slabo 27px","category":"serif","variants":["regular"]},"Slackey":{"family":"Slackey","category":"display","variants":["regular"]},"Smokum":{"family":"Smokum","category":"display","variants":["regular"]},"Smythe":{"family":"Smythe","category":"display","variants":["regular"]},"Sniglet":{"family":"Sniglet","category":"display","variants":["800","regular"]},"Snippet":{"family":"Snippet","category":"sans-serif","variants":["regular"]},"Snowburst One":{"family":"Snowburst One","category":"display","variants":["regular"]},"Sofadi One":{"family":"Sofadi One","category":"display","variants":["regular"]},"Sofia":{"family":"Sofia","category":"handwriting","variants":["regular"]},"Song Myung":{"family":"Song Myung","category":"serif","variants":["regular"]},"Sonsie One":{"family":"Sonsie One","category":"display","variants":["regular"]},"Sorts Mill Goudy":{"family":"Sorts Mill Goudy","category":"serif","variants":["italic","regular"]},"Source Code Pro":{"family":"Source Code Pro","category":"monospace","variants":["200","300","500","600","700","900","regular"]},"Source Sans Pro":{"family":"Source Sans Pro","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","900","900italic","italic","regular"]},"Source Serif Pro":{"family":"Source Serif Pro","category":"serif","variants":["600","700","regular"]},"Space Mono":{"family":"Space Mono","category":"monospace","variants":["700","700italic","italic","regular"]},"Special Elite":{"family":"Special Elite","category":"display","variants":["regular"]},"Spectral":{"family":"Spectral","category":"serif","variants":["200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Spectral SC":{"family":"Spectral SC","category":"serif","variants":["200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","italic","regular"]},"Spicy Rice":{"family":"Spicy Rice","category":"display","variants":["regular"]},"Spinnaker":{"family":"Spinnaker","category":"sans-serif","variants":["regular"]},"Spirax":{"family":"Spirax","category":"display","variants":["regular"]},"Squada One":{"family":"Squada One","category":"display","variants":["regular"]},"Sree Krushnadevaraya":{"family":"Sree Krushnadevaraya","category":"serif","variants":["regular"]},"Sriracha":{"family":"Sriracha","category":"handwriting","variants":["regular"]},"Stalemate":{"family":"Stalemate","category":"handwriting","variants":["regular"]},"Stalinist One":{"family":"Stalinist One","category":"display","variants":["regular"]},"Stardos Stencil":{"family":"Stardos Stencil","category":"display","variants":["700","regular"]},"Stint Ultra Condensed":{"family":"Stint Ultra Condensed","category":"display","variants":["regular"]},"Stint Ultra Expanded":{"family":"Stint Ultra Expanded","category":"display","variants":["regular"]},"Stoke":{"family":"Stoke","category":"serif","variants":["300","regular"]},"Strait":{"family":"Strait","category":"sans-serif","variants":["regular"]},"Stylish":{"family":"Stylish","category":"sans-serif","variants":["regular"]},"Sue Ellen Francisco":{"family":"Sue Ellen Francisco","category":"handwriting","variants":["regular"]},"Suez One":{"family":"Suez One","category":"serif","variants":["regular"]},"Sumana":{"family":"Sumana","category":"serif","variants":["700","regular"]},"Sunflower":{"family":"Sunflower","category":"sans-serif","variants":["300","500","700"]},"Sunshiney":{"family":"Sunshiney","category":"handwriting","variants":["regular"]},"Supermercado One":{"family":"Supermercado One","category":"display","variants":["regular"]},"Sura":{"family":"Sura","category":"serif","variants":["700","regular"]},"Suranna":{"family":"Suranna","category":"serif","variants":["regular"]},"Suravaram":{"family":"Suravaram","category":"serif","variants":["regular"]},"Suwannaphum":{"family":"Suwannaphum","category":"display","variants":["regular"]},"Swanky and Moo Moo":{"family":"Swanky and Moo Moo","category":"handwriting","variants":["regular"]},"Syncopate":{"family":"Syncopate","category":"sans-serif","variants":["700","regular"]},"Tajawal":{"family":"Tajawal","category":"sans-serif","variants":["200","300","500","700","800","900","regular"]},"Tangerine":{"family":"Tangerine","category":"handwriting","variants":["700","regular"]},"Taprom":{"family":"Taprom","category":"display","variants":["regular"]},"Tauri":{"family":"Tauri","category":"sans-serif","variants":["regular"]},"Taviraj":{"family":"Taviraj","category":"serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Teko":{"family":"Teko","category":"sans-serif","variants":["300","500","600","700","regular"]},"Telex":{"family":"Telex","category":"sans-serif","variants":["regular"]},"Tenali Ramakrishna":{"family":"Tenali Ramakrishna","category":"sans-serif","variants":["regular"]},"Tenor Sans":{"family":"Tenor Sans","category":"sans-serif","variants":["regular"]},"Text Me One":{"family":"Text Me One","category":"sans-serif","variants":["regular"]},"The Girl Next Door":{"family":"The Girl Next Door","category":"handwriting","variants":["regular"]},"Tienne":{"family":"Tienne","category":"serif","variants":["700","900","regular"]},"Tillana":{"family":"Tillana","category":"handwriting","variants":["500","600","700","800","regular"]},"Timmana":{"family":"Timmana","category":"sans-serif","variants":["regular"]},"Tinos":{"family":"Tinos","category":"serif","variants":["700","700italic","italic","regular"]},"Titan One":{"family":"Titan One","category":"display","variants":["regular"]},"Titillium Web":{"family":"Titillium Web","category":"sans-serif","variants":["200","200italic","300","300italic","600","600italic","700","700italic","900","italic","regular"]},"Trade Winds":{"family":"Trade Winds","category":"display","variants":["regular"]},"Trirong":{"family":"Trirong","category":"serif","variants":["100","100italic","200","200italic","300","300italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic","italic","regular"]},"Trocchi":{"family":"Trocchi","category":"serif","variants":["regular"]},"Trochut":{"family":"Trochut","category":"display","variants":["700","italic","regular"]},"Trykker":{"family":"Trykker","category":"serif","variants":["regular"]},"Tulpen One":{"family":"Tulpen One","category":"display","variants":["regular"]},"Ubuntu":{"family":"Ubuntu","category":"sans-serif","variants":["300","300italic","500","500italic","700","700italic","italic","regular"]},"Ubuntu Condensed":{"family":"Ubuntu Condensed","category":"sans-serif","variants":["regular"]},"Ubuntu Mono":{"family":"Ubuntu Mono","category":"monospace","variants":["700","700italic","italic","regular"]},"Ultra":{"family":"Ultra","category":"serif","variants":["regular"]},"Uncial Antiqua":{"family":"Uncial Antiqua","category":"display","variants":["regular"]},"Underdog":{"family":"Underdog","category":"display","variants":["regular"]},"Unica One":{"family":"Unica One","category":"display","variants":["regular"]},"UnifrakturCook":{"family":"UnifrakturCook","category":"display","variants":["700"]},"UnifrakturMaguntia":{"family":"UnifrakturMaguntia","category":"display","variants":["regular"]},"Unkempt":{"family":"Unkempt","category":"display","variants":["700","regular"]},"Unlock":{"family":"Unlock","category":"display","variants":["regular"]},"Unna":{"family":"Unna","category":"serif","variants":["700","700italic","italic","regular"]},"VT323":{"family":"VT323","category":"monospace","variants":["regular"]},"Vampiro One":{"family":"Vampiro One","category":"display","variants":["regular"]},"Varela":{"family":"Varela","category":"sans-serif","variants":["regular"]},"Varela Round":{"family":"Varela Round","category":"sans-serif","variants":["regular"]},"Vast Shadow":{"family":"Vast Shadow","category":"display","variants":["regular"]},"Vesper Libre":{"family":"Vesper Libre","category":"serif","variants":["500","700","900","regular"]},"Vibur":{"family":"Vibur","category":"handwriting","variants":["regular"]},"Vidaloka":{"family":"Vidaloka","category":"serif","variants":["regular"]},"Viga":{"family":"Viga","category":"sans-serif","variants":["regular"]},"Voces":{"family":"Voces","category":"display","variants":["regular"]},"Volkhov":{"family":"Volkhov","category":"serif","variants":["700","700italic","italic","regular"]},"Vollkorn":{"family":"Vollkorn","category":"serif","variants":["600","600italic","700","700italic","900","900italic","italic","regular"]},"Vollkorn SC":{"family":"Vollkorn SC","category":"serif","variants":["600","700","900","regular"]},"Voltaire":{"family":"Voltaire","category":"sans-serif","variants":["regular"]},"Waiting for the Sunrise":{"family":"Waiting for the Sunrise","category":"handwriting","variants":["regular"]},"Wallpoet":{"family":"Wallpoet","category":"display","variants":["regular"]},"Walter Turncoat":{"family":"Walter Turncoat","category":"handwriting","variants":["regular"]},"Warnes":{"family":"Warnes","category":"display","variants":["regular"]},"Wellfleet":{"family":"Wellfleet","category":"display","variants":["regular"]},"Wendy One":{"family":"Wendy One","category":"sans-serif","variants":["regular"]},"Wire One":{"family":"Wire One","category":"sans-serif","variants":["regular"]},"Work Sans":{"family":"Work Sans","category":"sans-serif","variants":["100","200","300","500","600","700","800","900","regular"]},"Yanone Kaffeesatz":{"family":"Yanone Kaffeesatz","category":"sans-serif","variants":["200","300","700","regular"]},"Yantramanav":{"family":"Yantramanav","category":"sans-serif","variants":["100","300","500","700","900","regular"]},"Yatra One":{"family":"Yatra One","category":"display","variants":["regular"]},"Yellowtail":{"family":"Yellowtail","category":"handwriting","variants":["regular"]},"Yeon Sung":{"family":"Yeon Sung","category":"display","variants":["regular"]},"Yeseva One":{"family":"Yeseva One","category":"display","variants":["regular"]},"Yesteryear":{"family":"Yesteryear","category":"handwriting","variants":["regular"]},"Yrsa":{"family":"Yrsa","category":"serif","variants":["300","500","600","700","regular"]},"Zeyada":{"family":"Zeyada","category":"handwriting","variants":["regular"]},"Zilla Slab":{"family":"Zilla Slab","category":"serif","variants":["300","300italic","500","500italic","600","600italic","700","700italic","italic","regular"]},"Zilla Slab Highlight":{"family":"Zilla Slab Highlight","category":"display","variants":["700","regular"]}},"order":{"popularity":["Roboto","Open Sans","Lato","Montserrat","Roboto Condensed","Oswald","Source Sans Pro","Slabo 27px","Raleway","PT Sans","Roboto Slab","Merriweather","Open Sans Condensed","Ubuntu","Playfair Display","Noto Sans","Poppins","Lora","Roboto Mono","PT Serif","Titillium Web","Arimo","Muli","PT Sans Narrow","Noto Serif","Fira Sans","Nunito","Inconsolata","Indie Flower","Anton","Dosis","Bitter","Crimson Text","Oxygen","Nanum Gothic","Cabin","Arvo","Fjalla One","Libre Baskerville","Work Sans","Quicksand","Josefin Sans","Exo 2","Hind","Lobster","Yanone Kaffeesatz","Rubik","Abel","Karla","Abril Fatface","Pacifico","Nunito Sans","Libre Franklin","Merriweather Sans","Varela Round","Ubuntu Condensed","Shadows Into Light","Asap","Exo","Cormorant Garamond","Gloria Hallelujah","Bree Serif","Dancing Script","Questrial","Signika","Source Serif Pro","Archivo Narrow","Source Code Pro","Play","Amatic SC","Acme","Kanit","Maven Pro","EB Garamond","Hind Siliguri","Rajdhani","Rokkitt","Francois One","Patua One","Comfortaa","Berkshire Swash","PT Sans Caption","Crete Round","Cuprum","Cairo","Cinzel","Shrikhand","Vollkorn","Catamaran","Ropa Sans","Heebo","Passion One","Righteous","Pathway Gothic One","Philosopher","Poiret One","Alegreya","Permanent Marker","Noticia Text","Satisfy","Yantramanav","Teko","Old Standard TT","Courgette","Great Vibes","Russo One","Prompt","ABeeZee","Archivo Black","Alegreya Sans","Monda","Domine","Orbitron","Cookie","Kaushan Script","Quattrocento Sans","News Cycle","Tinos","Lobster Two","Concert One","Istok Web","Josefin Slab","Assistant","Cardo","Alfa Slab One","Fredoka One","Gudea","Titan One","Handlee","Quattrocento","Economica","Fira Sans Condensed","Playfair Display SC","Didact Gothic","Pontano Sans","Sanchez","Kalam","Sacramento","Cabin Condensed","Caveat","Amiri","Marck Script","Hammersmith One","Arapey","Jura","BenchNine","Neuton","Khand","Nanum Myeongjo","Ruda","Tangerine","Volkhov","Monoton","Audiowide","Boogaloo","Armata","Fira Sans Extra Condensed","Shadows Into Light Two","VT323","Khula","Chivo","Cantarell","Antic","Aldrich","Hind Madurai","Glegoo","Architects Daughter","Pragati Narrow","Prosto One","Bangers","Gentium Basic","Hind Vadodara","Antic Slab","Unica One","Amaranth","Vidaloka","Enriqueta","Frank Ruhl Libre","Luckiest Guy","Patrick Hand","Bevan","Caveat Brush","Barlow Condensed","Forum","Ultra","PT Mono","Kreon","Sintony","Sorts Mill Goudy","Yrsa","Scada","Homemade Apple","Arsenal","Prata","Basic","Neucha","Covered By Your Grace","Merienda","Julius Sans One","Changa","Gentium Book Basic","Contrail One","Cabin Sketch","Actor","Yellowtail","Alegreya Sans SC","Alice","Sigmar One","Signika Negative","Rufina","Martel","Adamina","Magra","Fugaz One","Bad Script","Lusitana","Nothing You Could Do","Playball","Varela","Damion","Special Elite","Barlow","Overpass","Press Start 2P","Advent Pro","Alex Brush","Arbutus Slab","Paytone One","Arima Madurai","Barlow Semi Condensed","Chewy","Share","Rancho","Slabo 13px","Ubuntu Mono","Rock Salt","Coustard","Allura","Viga","Coda","Montserrat Alternates","Syncopate","Oleo Script","Rambla","Cantata One","PT Serif Caption","Cinzel Decorative","Sarala","Ovo","Gochi Hand","Spinnaker","Just Another Hand","Michroma","Marcellus","Overlock","Love Ya Like A Sister","Carter One","Electrolize","Cousine","Eczar","Lustria","Marmelad","Candal","Niconne","Coming Soon","Saira Condensed","Black Ops One","Molengo","Saira","Nobile","Carme","Squada One","Karma","Cormorant","Marcellus SC","Radley","Kameron","Ceviche One","Parisienne","Zilla Slab","Marvel","Copse","Oranienbaum","Reenie Beanie","Freckle Face","Saira Extra Condensed","Pinyon Script","Unna","Hind Guntur","Mr Dafoe","IM Fell DW Pica","Jockey One","Voltaire","Goudy Bookletter 1911","Leckerli One","Fauna One","Quantico","Alef","Itim","Telex","Lateef","Days One","Baloo","Allerta","Pridi","Average","Norican","Grand Hotel","Rochester","Italianno","Changa One","Saira Semi Condensed","Reem Kufi","Limelight","Carrois Gothic","Skranji","Halant","Nixie One","Fredericka the Great","Anonymous Pro","Spirax","Martel Sans","Palanquin","Space Mono","Alegreya SC","Taviraj","Nanum Gothic Coding","Bungee","Tauri","Rasa","Londrina Solid","Bubblegum Sans","El Messiri","Yesteryear","Aclonica","Archivo","Allerta Stencil","Puritan","Metrophobic","Annie Use Your Telescope","Kelly Slab","Caudex","Tenor Sans","Cutive","Fanwood Text","Bungee Inline","Homenaje","Doppio One","Rosario","Biryani","Calligraffitti","Kurale","Average Sans","Nanum Pen Script","Faster One","Inder","Nanum Brush Script","Share Tech Mono","Judson","Abhaya Libre","Jaldi","GFS Didot","Racing Sans One","Graduate","Rozha One","Convergence","Mukta Vaani","Lalezar","Sue Ellen Francisco","Petit Formal Script","Mada","Artifika","Schoolbell","Lilita One","Mukta","Aladin","Yeseva One","Miriam Libre","Six Caps","Gilda Display","Encode Sans Condensed","Mitr","Scheherazade","Happy Monkey","Gruppo","Andada","Delius","Give You Glory","Quando","Spectral","Trocchi","Herr Von Muellerhoff","Bowlby One SC","Trirong","The Girl Next Door","Allan","Pompiere","Belleza","Cambay","Gravitas One","Balthazar","Merienda One","Andika","Montez","Cambo","Fontdiner Swanky","Alike","Strait","Arizonia","Secular One","Lekton","Zeyada","Chelsea Market","Oxygen Mono","Mr De Haviland","Buenard","Fjord One","Mako","Hanuman","Capriola","Cutive Mono","Knewave","IM Fell Double Pica","Mate","Qwigley","Oregano","Wire One","Megrim","Anaheim","Vesper Libre","Walter Turncoat","Federo","Poly","La Belle Aurore","Averia Serif Libre","Short Stack","Belgrano","Carrois Gothic SC","Kristi","Proza Libre","Baloo Paaji","Bowlby One","Gafata","Chau Philomene One","Duru Sans","Vast Shadow","Mouse Memoirs","Baumans","Lemon","Stalemate","Seaweed Script","Gabriela","IM Fell English","Athiti","Fondamento","Maitree","Palanquin Dark","Fira Mono","Baloo Bhaina","Pangolin","Expletus Sans","Brawler","Waiting for the Sunrise","Orienta","Imprima","Emilys Candy","Rouge Script","UnifrakturMaguntia","Creepster","Oleo Script Swash Caps","Cherry Swash","Stardos Stencil","Crafty Girls","Amiko","Bilbo Swash Caps","Shojumaru","Voces","Podkova","Suez One","Rye","Yatra One","Meddon","Clicker Script","NTR","Denk One","Lemonada","Holtwood One SC","Patrick Hand SC","Pattaya","Rammetto One","Cedarville Cursive","Unkempt","Delius Swash Caps","Iceland","Gurajada","IM Fell English SC","Just Me Again Down Here","Lily Script One","Laila","Englebert","Wallpoet","Loved by the King","Crushed","Tulpen One","Rubik Mono One","Harmattan","Port Lligat Slab","Dawning of a New Day","Amethysta","Frijole","Encode Sans","Raleway Dots","Euphoria Script","Poller One","Ledger","Tienne","Asap Condensed","Bentham","Italiana","Krona One","Baloo Chettan","Mukta Malar","Salsa","Sansita","Battambang","Nova Mono","Suranna","Corben","Baloo Tamma","Sofia","Londrina Outline","Over the Rainbow","Metamorphous","Cherry Cream Soda","Headland One","Sriracha","Cormorant Infant","Sniglet","Geo","Vampiro One","Padauk","Prociono","Life Savers","Cantora One","Do Hyeon","Finger Paint","Share Tech","Ranchers","Kotta One","McLaren","Medula One","Arya","Aguafina Script","Codystar","David Libre","Gothic A1","Mirza","Engagement","Shanti","Cormorant SC","Nova Square","Sumana","Bungee Shade","Vibur","Sarpanch","Nosifer","Mallanna","Khmer","Scope One","Averia Sans Libre","Simonetta","Nova Slim","IBM Plex Sans","Dorsa","Princess Sofia","Amarante","Fenix","Ramabhadra","Coda Caption","Habibi","Flamenco","Bilbo","Slackey","Katibeh","Mogra","Port Lligat Sans","Koulen","Bubbler One","Stint Ultra Expanded","Pavanam","Dynalight","Mate SC","Donegal One","Sail","Mandali","Encode Sans Semi Condensed","Quintessential","Elsie","Averia Libre","League Script","Mountains of Christmas","Mystery Quest","Rosarivo","Kranky","Condiment","Rakkas","Kite One","Germania One","Mrs Saint Delafield","Miniver","Junge","Aref Ruqaa","Numans","Bellefair","Sarina","Alike Angular","Hi Melody","Maiden Orange","Dekko","Antic Didone","Delius Unicase","Kadwa","Ruslan Display","Milonga","Inika","Sura","Rhodium Libre","Stoke","Sancreek","Montserrat Subrayada","Pirata One","Kavoon","Wendy One","Rationale","Almendra","Fascinate Inline","Cagliostro","Chonburi","Trade Winds","Jim Nightshade","Ruluko","Peralta","Asul","Nova Round","IM Fell French Canon","Buda","IBM Plex Serif","Amita","Esteban","BioRhyme","Spectral SC","Ribeye","IM Fell DW Pica SC","Joti One","IBM Plex Sans Condensed","Paprika","Baloo Bhai","Overlock SC","Swanky and Moo Moo","Sonsie One","Text Me One","UnifrakturCook","Croissant One","Stint Ultra Condensed","Linden Hill","Baloo Thambi","Sedgwick Ave","Flavors","Fresca","IM Fell Great Primer","Angkor","Revalia","Montaga","Mina","New Rocker","Nova Flat","Ramaraja","Offside","Encode Sans Expanded","Glass Antiqua","Monsieur La Doulaise","Diplomata","Lovers Quarrel","Mukta Mahee","Timmana","Redressed","Griffy","Wellfleet","Tajawal","Risque","Julee","Content","Manuale","Sunshiney","Plaster","Asset","Galindo","Akronim","MedievalSharp","Atma","Marko One","Cormorant Upright","Eagle Lake","Averia Gruesa Libre","Snippet","Della Respira","Henny Penny","Gugi","Baloo Bhaijaan","Autour One","Lancelot","Ruthie","Bigshot One","Monofett","IBM Plex Mono","Sree Krushnadevaraya","Nokora","Purple Purse","Oldenburg","Snowburst One","Farsan","Inknut Antiqua","Spicy Rice","Jolly Lodger","Iceberg","Smythe","Petrona","Uncial Antiqua","Underdog","Cormorant Unicase","IM Fell Double Pica SC","Ewert","Goblin One","Irish Grover","Bayon","Chango","Macondo","Overpass Mono","Arbutus","Caesar Dressing","Trykker","Faustina","Margarine","Ravi Prakash","Metal Mania","Barrio","Butcherman","Elsie Swash Caps","Kantumruy","Coiny","Diplomata SC","Atomic Age","Molle","Mrs Sheppards","Eater","Meie Script","Miltonian Tattoo","Dr Sugiyama","Modern Antiqua","Rum Raisin","IM Fell French Canon SC","Original Surfer","Lakki Reddy","Galdeano","Jomhuria","Seymour One","Keania One","Astloch","Siemreap","Modak","Almendra SC","Zilla Slab Highlight","Galada","Piedra","Jacques Francois Shadow","Sahitya","Ribeye Marrow","Sirin Stencil","Chicle","Jacques Francois","Londrina Shadow","Ruge Boogie","Tillana","IM Fell Great Primer SC","Odor Mean Chey","Smokum","Felipa","Almendra Display","Kenia","Miltonian","Nova Oval","GFS Neohellenic","Devonshire","Warnes","Nova Script","Bokor","Meera Inimai","Geostar Fill","Freehand","Asar","Ranga","Fascinate","Bonbon","Passero One","Kavivanar","Metal","Suwannaphum","Combo","Romanesco","Encode Sans Semi Expanded","Black Han Sans","Trochut","Nova Cut","Fruktur","Kdam Thmor","Miss Fajardose","Bahiana","Londrina Sketch","Butterfly Kids","Chathura","Moul","Dangrek","Bigelow Rules","Libre Barcode 39 Text","Sedgwick Ave Display","Stalinist One","Baloo Da","Supermercado One","Vollkorn SC","Macondo Swash Caps","Sofadi One","Kumar One","Bungee Outline","Emblema One","Taprom","Sevillana","Federant","Erica One","Gorditas","Tenali Ramakrishna","Geostar","Aubrey","Hanalei","Hanalei Fill","Chela One","Chenla","Cute Font","Mr Bedfort","Baloo Tammudu","Gamja Flower","Gidugu","Unlock","Preahvihear","Peddana","Gaegu","Bungee Hairline","Libre Barcode 39 Extended Text","Moulpali","Fasthand","Jua","Libre Barcode 39 Extended","Dhurjati","Suravaram","BioRhyme Expanded","Libre Barcode 128 Text","Libre Barcode 39","Libre Barcode 128","Poor Story","Stylish","Black And White Picture","Song Myung","Kumar One Outline","Yeon Sung","East Sea Dokdo","Kirang Haerang","Dokdo","Sunflower"],"trending":["Gothic A1","Do Hyeon","Tajawal","Gugi","Black Han Sans","Titan One","Gamja Flower","Gaegu","Cute Font","IBM Plex Mono","IBM Plex Sans","Jua","Encode Sans Semi Expanded","Black And White Picture","IBM Plex Serif","Hi Melody","Eczar","Song Myung","Spirax","Sura","Mukta Malar","IM Fell DW Pica","Suez One","Unna","Koulen","Vesper Libre","Chivo","Skranji","Stylish","Cambay","VT323","Libre Barcode 39 Text","Englebert","Fjord One","Ranchers","BioRhyme","Yeon Sung","Dokdo","New Rocker","Gruppo","Cinzel Decorative","Saira Semi Condensed","Cormorant Unicase","Battambang","IBM Plex Sans Condensed","Kdam Thmor","Libre Barcode 128 Text","Siemreap","IM Fell French Canon SC","Mukta Vaani","Scope One","Creepster","Manuale","Miriam Libre","Norican","Laila","Kirang Haerang","East Sea Dokdo","Denk One","Gilda Display","Barrio","Poor Story","Pathway Gothic One","Khula","Carrois Gothic SC","Oxygen Mono","Antic","Bungee","Butterfly Kids","Jolly Lodger","Hind Madurai","Flavors","Secular One","Ramaraja","Eater","Khmer","Faster One","Goudy Bookletter 1911","Suravaram","Unlock","Aldrich","Sree Krushnadevaraya","Kantumruy","Oldenburg","Mukta","Rhodium Libre","Anaheim","Mada","Cormorant SC","Elsie Swash Caps","Prompt","Miniver","Saira Extra Condensed","Taprom","Love Ya Like A Sister","Encode Sans Condensed","Angkor","Artifika","Wallpoet","Bubbler One","Rajdhani","Lemon","Lancelot","Barlow Condensed","Exo 2","Warnes","Slabo 13px","Donegal One","Margarine","Encode Sans","Buenard","Moulpali","Athiti","Exo","Squada One","Saira","Federo","Barlow","Prosto One","Faustina","Shrikhand","Londrina Outline","Padauk","Monofett","Port Lligat Sans","Source Code Pro","Flamenco","Federant","Metamorphous","Hind Guntur","Keania One","Almendra","Yantramanav","Carter One","Wellfleet","Megrim","Nova Round","Milonga","Cormorant Garamond","Almendra Display","Cormorant Upright","Dhurjati","Allerta","Meera Inimai","Tenali Ramakrishna","Hind Siliguri","McLaren","Baloo Bhaina","Alef","Heebo","Nunito Sans","Proza Libre","Monda","Voces","Cormorant","Arbutus","Roboto Mono","Unkempt","Orienta","Oleo Script Swash Caps","Diplomata SC","Bungee Outline","Diplomata","Emblema One","Pavanam","Lusitana","Libre Barcode 39 Extended","Nokora","Rokkitt","Strait","Sansita","Timmana","Mr Dafoe","Devonshire","Allura","Fascinate","Teko","Sriracha","Sunshiney","Viga","Miltonian","GFS Neohellenic","Paprika","Geostar","Indie Flower","Dangrek","Yeseva One","Chango","Overlock","Copse","Freehand","Kavoon","Questrial","Nanum Myeongjo","Inconsolata","Jim Nightshade","Crushed","Martel","Peralta","Space Mono","Poppins","Allan","Bayon","Economica","Bevan","Smythe","Fauna One","Fira Sans","Libre Barcode 128","Share Tech Mono","Enriqueta","Galdeano","Cambo","Noto Serif","Miltonian Tattoo","Ewert","Mr Bedfort","Revalia","Biryani","Russo One","Nothing You Could Do","Cantora One","Bokor","Carrois Gothic","Snowburst One","Boogaloo","Philosopher","Metrophobic","Junge","Homemade Apple","Syncopate","Bigshot One","Fruktur","Swanky and Moo Moo","Pattaya","Peddana","Basic","Sail","Average Sans","Halant","Contrail One","Convergence","Pirata One","Shadows Into Light Two","Kelly Slab","Chathura","Piedra","Crafty Girls","Elsie","Overpass Mono","Italianno","Mate","PT Sans Narrow","Spicy Rice","Cabin Condensed","Dawning of a New Day","Palanquin Dark","Purple Purse","Ruda","Gentium Basic","Domine","Sigmar One","Bungee Inline","Assistant","Puritan","Gravitas One","Petit Formal Script","Stalemate","Stint Ultra Expanded","Combo","IM Fell French Canon","Alex Brush","Alegreya SC","Neuton","Asap","Stoke","Varela Round","Actor","Alegreya Sans SC","Satisfy","Gloria Hallelujah","Tinos","Source Serif Pro","Istok Web","Jomhuria","Open Sans Condensed","Coming Soon","Stalinist One","Tienne","Averia Libre","Nova Square","Playfair Display","Marck Script","Bentham","UnifrakturMaguntia","Advent Pro","Pompiere","Palanquin","Ubuntu Mono","Kite One","Snippet","Gidugu","Anton","Allerta Stencil","Baloo Tamma","Meddon","Kalam","Cinzel","Suranna","Karla","Nova Mono","Jacques Francois","Baloo Bhai","Nova Slim","Black Ops One","Lovers Quarrel","Fira Sans Condensed","Poiret One","Felipa","Alfa Slab One","Cherry Cream Soda","Metal","Spinnaker","Patrick Hand","IM Fell DW Pica SC","Emilys Candy","Nova Script","Architects Daughter","Asap Condensed","Schoolbell","Amiko","Almendra SC","Calligraffitti","Handlee","Amarante","Cantarell","Shojumaru","La Belle Aurore","Belleza","Titillium Web","Montserrat","Merriweather Sans","Delius","BenchNine","Aubrey","Rouge Script","Cabin","Rum Raisin","Rosario","Cousine","Source Sans Pro","Mrs Saint Delafield","Arizonia","Sedgwick Ave","Bitter","Overpass","Reenie Beanie","Happy Monkey","Berkshire Swash","Trochut","Nanum Gothic","Catamaran","Pontano Sans","Fontdiner Swanky","Sintony","Lato","Irish Grover","Noticia Text","Rock Salt","Ropa Sans","Jaldi","ABeeZee","Fondamento","Odor Mean Chey","Fasthand","Zeyada","Karma","Trirong","Encode Sans Expanded","Modern Antiqua","Amatic SC","Varela","Archivo","Glegoo","Play","Ruluko","Corben","Princess Sofia","Text Me One","Sofadi One","Sonsie One","Baumans","Ubuntu","Aclonica","Erica One","Sarala","Life Savers","Arsenal","Belgrano","IM Fell Great Primer SC","Goblin One","Brawler","Gurajada","Duru Sans","Nunito","Spectral","Habibi","Marvel","Sanchez","Fjalla One","Poly","Dekko","Prociono","Judson","Raleway","Dancing Script","Quattrocento Sans","Rubik","Forum","Supermercado One","Cutive","Cherry Swash","Voltaire","Herr Von Muellerhoff","Asar","Ledger","Work Sans","News Cycle","Marcellus","Nixie One","Unica One","Vollkorn SC","Sirin Stencil","Bungee Hairline","Ubuntu Condensed","Lateef","Smokum","Akronim","Medula One","Iceberg","Bungee Shade","Stint Ultra Condensed","Caveat","Croissant One","Alegreya Sans","Didact Gothic","Rambla","Antic Slab","Give You Glory","Yrsa","Paytone One","Comfortaa","Trocchi","Vollkorn","NTR","Headland One","Oleo Script","Content","Roboto Slab","Abril Fatface","Parisienne","Rancho","Kavivanar","Cuprum","Scada","Marmelad","Asul","Gentium Book Basic","Fira Mono","Barlow Semi Condensed","Muli","Merriweather","Fanwood Text","Dynalight","Fredoka One","Moul","EB Garamond","Racing Sans One","Michroma","Bangers","Abhaya Libre","IM Fell Great Primer","Trykker","Engagement","Coda","Oxygen","Passero One","Londrina Sketch","Tauri","Lora","Nova Cut","Quantico","Bree Serif","Monsieur La Doulaise","Maven Pro","Dr Sugiyama","Oranienbaum","Coiny","Molengo","Signika Negative","Geostar Fill","Kurale","Open Sans","Carme","Rasa","Mandali","Underdog","Slackey","Gochi Hand","Audiowide","Walter Turncoat","Trade Winds","Cormorant Infant","Arvo","Salsa","Cedarville Cursive","Hammersmith One","Bahiana","Libre Baskerville","Sarina","Port Lligat Slab","Vast Shadow","Doppio One","Atma","Galindo","Kreon","GFS Didot","Mako","Miss Fajardose","Inder","Permanent Marker","Astloch","Vampiro One","Mallanna","Mouse Memoirs","Share","Mina","Londrina Shadow","Asset","Hanuman","Italiana","Cabin Sketch","Anonymous Pro","Sue Ellen Francisco","Londrina Solid","IM Fell English","Fredericka the Great","PT Sans","Kristi","Crimson Text","Pridi","Righteous","Galada","Lakki Reddy","Metal Mania","Tillana","Playball","Abel","Finger Paint","Codystar","Waiting for the Sunrise","Covered By Your Grace","Roboto Condensed","Knewave","Nanum Pen Script","Just Me Again Down Here","Aguafina Script","Mr De Haviland","Gafata","Rationale","Armata","Rochester","PT Serif","Tangerine","Amita","Quattrocento","Amethysta","Alice","Capriola","Mogra","Qwigley","Suwannaphum","Bigelow Rules","PT Sans Caption","PT Mono","Damion","Lekton","Prata","Martel Sans","Redressed","Quicksand","Yellowtail","Buda","Kanit","Ruthie","Ruslan Display","Baloo Tammudu","Sedgwick Ave Display","Six Caps","Dosis","Inknut Antiqua","Zilla Slab Highlight","Fira Sans Extra Condensed","Zilla Slab","Short Stack","Monoton","Atomic Age","Nanum Gothic Coding","Candal","Rufina","Petrona","Lobster Two","Marko One","Sevillana","Scheherazade","Changa One","Electrolize","Julius Sans One","Magra","Amiri","Freckle Face","Noto Sans","Numans","Antic Didone","Nova Oval","Sniglet","Iceland","Euphoria Script","Bilbo Swash Caps","Delius Unicase","Chonburi","Averia Sans Libre","Arimo","Cantata One","Frank Ruhl Libre","Montez","Josefin Sans","Kameron","Telex","Over the Rainbow","Julee","Modak","Sarpanch","Alike","Alegreya","Bubblegum Sans","Condiment","IM Fell Double Pica SC","Orbitron","Kenia","Loved by the King","Oswald","Rosarivo","Patua One","Mate SC","Saira Condensed","Pinyon Script","League Script","Averia Serif Libre","IM Fell Double Pica","Roboto","Linden Hill","Tenor Sans","Bad Script","Seymour One","Yesteryear","Sumana","Leckerli One","Montserrat Subrayada","Kumar One Outline","Lilita One","Homenaje","Niconne","Just Another Hand","Clicker Script","Ribeye Marrow","Kranky","Jacques Francois Shadow","Griffy","Gorditas","Hanalei Fill","Mukta Mahee","Acme","Simonetta","Maiden Orange","Arapey","Dorsa","Geo","Stardos Stencil","Balthazar","Baloo Thambi","Holtwood One SC","Passion One","Slabo 27px","Sacramento","Arbutus Slab","Sofia","Hanalei","Hind Vadodara","Nobile","Lustria","Francois One","Volkhov","Taviraj","Pacifico","Wire One","Delius Swash Caps","Chelsea Market","Radley","Quintessential","Gabriela","Pragati Narrow","Ravi Prakash","Fenix","UnifrakturCook","Jura","Mountains of Christmas","Marcellus SC","Days One","PT Serif Caption","Eagle Lake","Esteban","IM Fell English SC","Vibur","Maitree","Caesar Dressing","Crete Round","Cookie","Sorts Mill Goudy","Imprima","Gudea","The Girl Next Door","Chenla","Chewy","Ultra","Reem Kufi","Shadows Into Light","Adamina","Andada","Libre Franklin","Andika","Encode Sans Semi Condensed","Fascinate Inline","Chela One","Playfair Display SC","Baloo Da","Bilbo","Cairo","Montaga","Hind","Changa","Lily Script One","Inika","Harmattan","Tulpen One","Rye","Fresca","Bonbon","Grand Hotel","Archivo Black","Oregano","Khand","Yanone Kaffeesatz","Neucha","Lemonada","Butcherman","Signika","Glass Antiqua","Spectral SC","Cardo","Old Standard TT","Aref Ruqaa","Montserrat Alternates","Patrick Hand SC","Sancreek","Kadwa","Josefin Slab","Merienda One","Ceviche One","Joti One","Ribeye","Podkova","Ruge Boogie","Fugaz One","Average","Alike Angular","Courgette","Autour One","Kotta One","Risque","Great Vibes","Nanum Brush Script","Della Respira","MedievalSharp","Archivo Narrow","Ramabhadra","Bellefair","Kaushan Script","Sunflower","Expletus Sans","Frijole","Seaweed Script","Wendy One","Sahitya","Raleway Dots","El Messiri","Quando","Caveat Brush","Mrs Sheppards","Uncial Antiqua","Coustard","Germania One","Averia Gruesa Libre","Farsan","Molle","Lobster","Jockey One","Shanti","Graduate","Baloo Paaji","Annie Use Your Telescope","Preahvihear","Luckiest Guy","Kumar One","Original Surfer","Romanesco","David Libre","Bowlby One SC","Arima Madurai","Caudex","Offside","Mirza","Limelight","Cagliostro","BioRhyme Expanded","Ovo","Katibeh","Mystery Quest","Vidaloka","Mitr","Plaster","Chicle","Rakkas","Nosifer","Macondo Swash Caps","Rozha One","Poller One","Concert One","Libre Barcode 39","Baloo Chettan","Special Elite","Yatra One","Overlock SC","Baloo Bhaijaan","Rubik Mono One","Lalezar","Krona One","Merienda","Coda Caption","Cutive Mono","Nova Flat","Pangolin","Aladin","Bowlby One","Henny Penny","Itim","Meie Script","Libre Barcode 39 Extended Text","Macondo","Baloo","Chau Philomene One","Amaranth","Arya","Ranga","Share Tech","Press Start 2P","Rammetto One"]}}
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Tags: customizer,options framework, theme, mods, toolkit
|
|
4 |
Donate link: https://aristath.github.io/donate
|
5 |
Requires at least: 4.9
|
6 |
Tested up to: 4.9.2
|
7 |
-
Stable tag: 3.0.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -33,6 +33,33 @@ If you want to integrate Kirki in your theme or plugin, please read the instruct
|
|
33 |
|
34 |
== Changelog ==
|
35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
= 3.0.25 =
|
37 |
|
38 |
January 23 2018, dev time: 1 hour.
|
4 |
Donate link: https://aristath.github.io/donate
|
5 |
Requires at least: 4.9
|
6 |
Tested up to: 4.9.2
|
7 |
+
Stable tag: 3.0.26
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
33 |
|
34 |
== Changelog ==
|
35 |
|
36 |
+
= 3.0.26
|
37 |
+
|
38 |
+
April 27 2018, dev time: 43 hours.
|
39 |
+
|
40 |
+
* Fix: Color Palette: material colors 'light-blue' doesn't work [#1783](https://github.com/aristath/kirki/issues/1783).
|
41 |
+
* Fix: Google Fonts switch error [#1791](https://github.com/aristath/kirki/issues/1791).
|
42 |
+
* Fix: FontAwesome JS is being loaded even if you don't need it on front end [#1786](https://github.com/aristath/kirki/issues/1786).
|
43 |
+
* Fix: Color Palette: Active color before section title [#1782](https://github.com/aristath/kirki/issues/1782).
|
44 |
+
* Fix: Removed version from the webfont script.
|
45 |
+
* Fix: Validation error for dimension fields.
|
46 |
+
* Fix: `button_label` argument for repeater fields (props @felipeelia).
|
47 |
+
* Fix: Allow html on radio-buttonset choices [#1818](https://github.com/aristath/kirki/issues/1818).
|
48 |
+
* Fix: `Kirki_Helper::compare_values` vs. `field-dependencies.js` boolean issue (props @CaptJiggly) [#1825](https://github.com/aristath/kirki/issues/1825).
|
49 |
+
* Fix: `active_callback` not working for checkboxes [#1809](https://github.com/aristath/kirki/issues/1809).
|
50 |
+
* Fix: Nested `active_callback` args not working properly (AND|OR relations) [#1809](https://github.com/aristath/kirki/issues/1809).
|
51 |
+
* Fix: Updated google-fonts.
|
52 |
+
* Fix: Display typography with no default values [#1797](https://github.com/aristath/kirki/issues/1797).
|
53 |
+
* Fix: Define "normal" as a valid css-value for sanitizations [#1814](https://github.com/aristath/kirki/issues/1814).
|
54 |
+
* Fix: `background` controls now output `background-color` as simply `background` if no `background-image` is defined in the value [#1808](https://github.com/aristath/kirki/issues/1808).
|
55 |
+
* Fix: @media-queries fix due to minimized CSS. [#1787](https://github.com/aristath/kirki/issues/1787).
|
56 |
+
* Fix: `Kirki_Helper::compare_values` contains/in PHP warning if value doesn't exist in array [#1828](https://github.com/aristath/kirki/issues/1828).
|
57 |
+
* Fix: Invalid Value in the Dimension control [#1844](https://github.com/aristath/kirki/issues/1844).
|
58 |
+
* Fix: Add `fr` to the array of valid units used in validations [
|
59 |
+
86adedb](https://github.com/aristath/kirki/pull/1784/commits/86adedb8cd4c06c7e6538c3087233a6840dee562)
|
60 |
+
* Fix: Updated webfonts.
|
61 |
+
* New: Migrated `number` control to new structure.
|
62 |
+
|
63 |
= 3.0.25 =
|
64 |
|
65 |
January 23 2018, dev time: 1 hour.
|