Kirki - Version 2.3.0

Version Description

Download this release

Release Info

Developer aristath
Plugin Icon 128x128 Kirki
Version 2.3.0
Comparing to
See all releases

Code changes from version 2.2.10 to 2.3.0

Files changed (139) hide show
  1. .jscsrc +7 -0
  2. .jshintignore +3 -0
  3. .jshintrc +38 -0
  4. Gruntfile.js +0 -119
  5. README.md +18 -1
  6. assets/css/customizer.css +53 -43
  7. assets/css/customizer.css.map +1 -1
  8. assets/css/customizer.min.css +0 -1
  9. assets/js/branding.js +10 -5
  10. assets/js/controls/checkbox.js +6 -3
  11. assets/js/controls/code.js +4 -3
  12. assets/js/controls/color-alpha.js +6 -3
  13. assets/js/controls/dimension.js +11 -2
  14. assets/js/controls/editor.js +2 -2
  15. assets/js/controls/multicheck.js +3 -3
  16. assets/js/controls/multicolor.js +22 -12
  17. assets/js/controls/number.js +1 -1
  18. assets/js/controls/preset.js +9 -8
  19. assets/js/controls/repeater.js +164 -136
  20. assets/js/controls/select.js +10 -5
  21. assets/js/controls/slider.js +13 -12
  22. assets/js/controls/sortable.js +19 -14
  23. assets/js/controls/spacing.js +18 -9
  24. assets/js/controls/switch.js +4 -4
  25. assets/js/controls/toggle.js +3 -3
  26. assets/js/controls/typography.js +139 -100
  27. assets/js/functions/array-to-object.js +4 -4
  28. assets/js/functions/object-to-array.js +4 -4
  29. assets/js/functions/set-value.js +76 -26
  30. assets/js/functions/validate-css-value.js +18 -8
  31. assets/js/postmessage.js +59 -41
  32. assets/js/reset.js +12 -14
  33. assets/js/tooltip.js +1 -2
  34. codesniffer.ruleset.xml +19 -0
  35. composer.json +0 -26
  36. includes/class-kirki-active-callback.php +21 -11
  37. includes/class-kirki-config.php +38 -21
  38. includes/class-kirki-control.php +29 -19
  39. includes/class-kirki-customize-control.php +58 -8
  40. includes/class-kirki-enqueue.php +29 -28
  41. includes/class-kirki-explode-background-field.php +26 -10
  42. includes/class-kirki-field.php +151 -63
  43. includes/class-kirki-fonts-google.php +113 -48
  44. includes/class-kirki-fonts.php +74 -7
  45. includes/class-kirki-helper.php +359 -47
  46. includes/class-kirki-init.php +12 -15
  47. includes/class-kirki-l10n.php +40 -6
  48. includes/class-kirki-panel.php +24 -10
  49. includes/class-kirki-sanitize-values.php +68 -29
  50. includes/class-kirki-scripts-registry.php +35 -7
  51. includes/class-kirki-section.php +31 -6
  52. includes/class-kirki-selective-refresh.php +19 -21
  53. includes/class-kirki-settings.php +36 -22
  54. includes/class-kirki-toolkit.php +11 -7
  55. includes/class-kirki-values.php +59 -62
  56. includes/class-kirki.php +86 -21
  57. includes/controls/class-kirki-controls-checkbox-control.php +33 -7
  58. includes/controls/class-kirki-controls-code-control.php +39 -10
  59. includes/controls/class-kirki-controls-color-alpha-control.php +42 -17
  60. includes/controls/class-kirki-controls-color-palette-control.php +37 -8
  61. includes/controls/class-kirki-controls-custom-control.php +25 -5
  62. includes/controls/class-kirki-controls-dashicons-control.php +34 -6
  63. includes/controls/class-kirki-controls-date-control.php +31 -6
  64. includes/controls/class-kirki-controls-dimension-control.php +31 -6
  65. includes/controls/class-kirki-controls-dropdown-pages-control.php +65 -33
  66. includes/controls/class-kirki-controls-editor-control.php +42 -19
  67. includes/controls/class-kirki-controls-generic-control.php +43 -7
  68. includes/controls/class-kirki-controls-multicheck-control.php +31 -7
  69. includes/controls/class-kirki-controls-multicolor-control.php +41 -19
  70. includes/controls/class-kirki-controls-number-control.php +27 -5
  71. includes/controls/class-kirki-controls-palette-control.php +30 -4
  72. includes/controls/class-kirki-controls-preset-control.php +31 -8
  73. includes/controls/class-kirki-controls-radio-buttonset-control.php +31 -6
  74. includes/controls/class-kirki-controls-radio-control.php +30 -5
  75. includes/controls/class-kirki-controls-radio-image-control.php +30 -5
  76. includes/controls/class-kirki-controls-repeater-control.php +242 -166
  77. includes/controls/class-kirki-controls-select-control.php +41 -7
  78. includes/controls/class-kirki-controls-slider-control.php +34 -7
  79. includes/controls/class-kirki-controls-sortable-control.php +46 -10
  80. includes/controls/class-kirki-controls-spacing-control.php +36 -7
  81. includes/controls/class-kirki-controls-switch-control.php +34 -6
  82. includes/controls/class-kirki-controls-toggle-control.php +30 -4
  83. includes/controls/class-kirki-controls-typography-control.php +49 -14
  84. includes/deprecated.php +6 -2
  85. includes/dynamic-css.php +15 -9
  86. includes/field/class-kirki-field-checkbox.php +12 -3
  87. includes/field/class-kirki-field-code.php +12 -2
  88. includes/field/class-kirki-field-color-alpha.php +12 -2
  89. includes/field/class-kirki-field-color.php +12 -3
  90. includes/field/class-kirki-field-custom.php +12 -2
  91. includes/field/class-kirki-field-dashicons.php +12 -2
  92. includes/field/class-kirki-field-date.php +12 -2
  93. includes/field/class-kirki-field-dropdown-pages.php +12 -2
  94. includes/field/class-kirki-field-editor.php +12 -1
  95. includes/field/class-kirki-field-group-title.php +9 -0
  96. includes/field/class-kirki-field-image.php +12 -0
  97. includes/field/class-kirki-field-kirki-generic.php +12 -2
  98. includes/field/class-kirki-field-multicheck.php +14 -2
  99. includes/field/class-kirki-field-multicolor.php +34 -10
  100. includes/field/class-kirki-field-number.php +12 -2
  101. includes/field/class-kirki-field-palette.php +12 -2
  102. includes/field/class-kirki-field-preset.php +12 -2
  103. includes/field/class-kirki-field-radio-buttonset.php +12 -2
  104. includes/field/class-kirki-field-radio-image.php +12 -2
  105. includes/field/class-kirki-field-radio.php +12 -2
  106. includes/field/class-kirki-field-select.php +14 -3
  107. includes/field/class-kirki-field-select2-multiple.php +9 -2
  108. includes/field/class-kirki-field-select2.php +9 -0
  109. includes/field/class-kirki-field-slider.php +12 -2
  110. includes/field/class-kirki-field-switch.php +12 -2
  111. includes/field/class-kirki-field-text.php +12 -2
  112. includes/field/class-kirki-field-textarea.php +12 -2
  113. includes/field/class-kirki-field-toggle.php +12 -2
  114. includes/field/class-kirki-field-typography.php +34 -14
  115. includes/field/class-kirki-field-upload.php +12 -1
  116. includes/lib/class-aricolor.php +2 -2
  117. includes/lib/class-kirki-color.php +104 -56
  118. includes/output/class-kirki-output.php +183 -155
  119. includes/output/field/class-kirki-output-field-multicolor.php +51 -31
  120. includes/output/field/class-kirki-output-field-spacing.php +35 -13
  121. includes/output/field/class-kirki-output-field-typography.php +81 -52
  122. includes/output/property/class-kirki-output-property-background-image.php +26 -8
  123. includes/output/property/class-kirki-output-property-background-position.php +62 -39
  124. includes/output/property/class-kirki-output-property-font-family.php +47 -30
  125. includes/output/property/class-kirki-output-property.php +58 -13
  126. includes/panels/class-kirki-panels-default-panel.php +24 -2
  127. includes/panels/class-kirki-panels-expanded-panel.php +58 -21
  128. includes/scripts/class-kirki-scripts-icons.php +21 -10
  129. includes/scripts/class-kirki-scripts-loading.php +38 -11
  130. includes/scripts/class-kirki-scripts-tooltips.php +17 -11
  131. includes/sections/class-kirki-sections-default-section.php +62 -44
  132. includes/sections/class-kirki-sections-expanded-section.php +49 -20
  133. includes/sections/class-kirki-sections-hover-section.php +59 -30
  134. includes/settings/class-kirki-settings-default-setting.php +12 -0
  135. includes/settings/class-kirki-settings-repeater-setting.php +28 -11
  136. includes/styles/class-kirki-styles-customizer.php +111 -25
  137. includes/styles/class-kirki-styles-frontend.php +74 -29
  138. includes/styles/class-kirki-styles-output-css.php +102 -32
  139. includes/webfonts.php +1 -1
.jscsrc ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ {
2
+ "preset": "wordpress",
3
+ "fileExtensions": [ ".js" ],
4
+ "excludeFiles": [
5
+ "js/**.min.js"
6
+ ]
7
+ }
.jshintignore ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ **/**.min.js
2
+ assets/js/vendor/
3
+ Gruntfile.js
.jshintrc ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "boss": true,
3
+ "curly": true,
4
+ "eqeqeq": true,
5
+ "eqnull": true,
6
+ "es3": true,
7
+ "expr": true,
8
+ "immed": true,
9
+ "noarg": true,
10
+ "nonbsp": true,
11
+ "onevar": true,
12
+ "quotmark": "single",
13
+ "trailing": true,
14
+ "undef": true,
15
+ "unused": false,
16
+
17
+ "browser": true,
18
+
19
+ "globals": {
20
+ "_": false,
21
+ "Backbone": false,
22
+ "jQuery": false,
23
+ "JSON": false,
24
+ "wp": false,
25
+
26
+ "kirkiBranding":false,
27
+ "jsvars":false,
28
+ "kirkiSetValue":false,
29
+ "kirkiValidateCSSValue":false,
30
+ "kirkiArrayToObject":false,
31
+ "kirkiObjectToArray":false,
32
+ "CodeMirror":false,
33
+ "tinyMCE":false,
34
+ "unserialize":false,
35
+ "serialize":false,
36
+ "kirkiAllFonts":false
37
+ }
38
+ }
Gruntfile.js DELETED
@@ -1,119 +0,0 @@
1
- 'use strict';
2
- module.exports = function(grunt) {
3
-
4
- grunt.initConfig({
5
- // Get json file from the google-fonts API
6
- curl: {
7
- 'google-fonts-source': {
8
- src: 'https://www.googleapis.com/webfonts/v1/webfonts?sort=alpha&key=AIzaSyCDiOc36EIOmwdwspLG3LYwCg9avqC5YLs',
9
- dest: 'includes/webfonts.json'
10
- }
11
- },
12
- // Compile CSS
13
- sass: {
14
- dist: {
15
- files: { 'assets/css/customizer.css' : 'assets/scss/customizer.scss' }
16
- }
17
- },
18
- // Combine JS files
19
- // concat: {
20
- // options: {
21
- // separator: '',
22
- // },
23
- // dist: {
24
- // src: [
25
- // 'assets/js/functions/*.js',
26
- // 'assets/js/controls/*.js',
27
- // 'assets/js/reset.js'
28
- // ],
29
- // dest: 'assets/js/customizer.js',
30
- // },
31
- // },
32
- // Minify JS
33
- // uglify: {
34
- // options: {
35
- // compress: {},
36
- // mangle: true,
37
- // sourceMap: true
38
- // },
39
- // target: {
40
- // src: 'assets/js/customizer.js',
41
- // dest: 'assets/js/customizer.min.js'
42
- // }
43
- // },
44
- // Minify CSS
45
- cssmin: {
46
- options: {
47
- shorthandCompacting: false,
48
- roundingPrecision: -1
49
- },
50
- target: {
51
- files: {
52
- 'assets/css/customizer.min.css': 'assets/css/customizer.css'
53
- }
54
- }
55
- },
56
- // Generate translation file
57
- makepot: {
58
- target: {
59
- options: {
60
- type: 'wp-plugin',
61
- domainPath: 'languages',
62
- exclude: [
63
- 'tests/.*'
64
- ]
65
- }
66
- }
67
- },
68
- // Convert readme.txt to readme.md
69
- wp_readme_to_markdown: {
70
- your_target: {
71
- files: {
72
- 'README.md': 'readme.txt'
73
- },
74
- },
75
- },
76
- // Convert json array to PHP array
77
- json2php: {
78
- convert: {
79
- expand: true,
80
- ext: '.php',
81
- src: ['includes/webfonts.json']
82
- }
83
- },
84
- // Delete the json array
85
- clean: [
86
- 'includes/webfonts.json'
87
- ],
88
- // Watch task (run with "grunt watch")
89
- watch: {
90
- css: {
91
- files: 'assets/**/*.scss',
92
- tasks: ['sass', 'cssmin'],
93
- },
94
- // scripts: {
95
- // files: 'assets/**/*.js',
96
- // tasks: ['concat', 'uglify'],
97
- // },
98
- readme: {
99
- files: 'readme.txt',
100
- tasks: ['wp_readme_to_markdown'],
101
- }
102
- }
103
- });
104
-
105
- grunt.loadNpmTasks('grunt-contrib-sass');
106
- grunt.loadNpmTasks('grunt-contrib-concat');
107
- grunt.loadNpmTasks('grunt-contrib-uglify');
108
- grunt.loadNpmTasks('grunt-contrib-cssmin');
109
- grunt.loadNpmTasks('grunt-wp-i18n');
110
- grunt.loadNpmTasks('grunt-contrib-watch');
111
- grunt.loadNpmTasks('grunt-curl');
112
- grunt.loadNpmTasks('grunt-wp-readme-to-markdown');
113
- grunt.loadNpmTasks('grunt-json2php');
114
- grunt.loadNpmTasks('grunt-contrib-clean');
115
-
116
- grunt.registerTask('default', ['sass', 'cssmin', 'makepot', 'wp_readme_to_markdown']);
117
- grunt.registerTask('googlefonts', ['curl:google-fonts-source', 'json2php', 'clean']);
118
-
119
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -4,7 +4,7 @@
4
  **Donate link:** http://kirki.org/
5
  **Requires at least:** 4.4
6
  **Tested up to:** 4.5
7
- **Stable tag:** 2.2.10
8
  **License:** GPLv2 or later
9
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -37,6 +37,23 @@ If you want to integrate Kirki in your theme or plugin, please read the instruct
37
 
38
  ## Changelog ##
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  ### 2.2.10 ###
41
 
42
  * FIX: Issue with URLs when using Kirki embedded in a theme and not installed as a plugin.
4
  **Donate link:** http://kirki.org/
5
  **Requires at least:** 4.4
6
  **Tested up to:** 4.5
7
+ **Stable tag:** 2.3.0
8
  **License:** GPLv2 or later
9
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
10
 
37
 
38
  ## Changelog ##
39
 
40
+ ### 2.3 ###
41
+
42
+ Kirki is now 100% WordPress Coding Standards compliant.
43
+
44
+ * FIX: Escaping google-font URLs when possible.
45
+ * FIX: Only enqueue the tooltips script if needed.
46
+ * FIX: WordPress Coding Standards.
47
+ * FIX: undefined sub-controls were still being saved in typography fields
48
+ * FIX: Javascript Console Errors: "wp.customize" object undefined when Kirki fields were added in `customize_register`
49
+ * FIX: markup in editor fields - props @manuelmoreale.
50
+ * FIX: multiple styles in head when using js_vars
51
+ * FIX: Sanitization for rem units
52
+ * FIX: CSS output for multicolor controls
53
+ * NEW: Repeater labels are now dynamic - props @guillaumemolter.
54
+ * NEW: The entire header on repeaters is now draggable - props @guillaumemolter.
55
+ * TWEAK: More efficient JS code for the typography control
56
+
57
  ### 2.2.10 ###
58
 
59
  * FIX: Issue with URLs when using Kirki embedded in a theme and not installed as a plugin.
assets/css/customizer.css CHANGED
@@ -901,12 +901,17 @@ span.CodeMirror-selectedtext {
901
  height: 100%; }
902
 
903
  .customize-control-repeater .repeater-fields .repeater-row {
904
- padding: .5rem;
905
  border: 1px solid #999;
906
  margin-top: .5rem;
907
  background: #eee;
908
- position: relative;
909
- padding-top: 48px; }
 
 
 
 
 
 
910
  .customize-control-repeater .repeater-fields .repeater-row label {
911
  margin-bottom: 12px;
912
  clear: both; }
@@ -918,17 +923,29 @@ span.CodeMirror-selectedtext {
918
  -webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25);
919
  box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25);
920
  border: 1px solid #3498DB; }
 
 
 
921
  .customize-control-repeater button.repeater-add {
922
  margin-top: 1rem; }
 
 
923
  .customize-control-repeater .repeater-field {
924
  margin-bottom: 12px;
925
  width: 100%;
926
  clear: both;
927
  padding-bottom: 12px;
928
  border-bottom: 1px dotted #CCC; }
929
- .customize-control-repeater .repeater-row .repeater-field:last-child {
930
- border-bottom: none;
931
- padding-bottom: 0; }
 
 
 
 
 
 
 
932
  .customize-control-repeater .repeater-field-select select {
933
  margin-left: 0; }
934
  .customize-control-repeater .repeater-field-checkbox label {
@@ -941,51 +958,44 @@ span.CodeMirror-selectedtext {
941
  resize: vertical; }
942
  .customize-control-repeater .repeater-row-header {
943
  background: white;
944
- position: absolute;
945
- top: 0;
946
- left: 0;
947
- right: 0;
948
- height: 36px;
949
- color: #555;
950
- border-bottom: 1px solid #999;
951
- line-height: 36px;
952
- font-size: 15px; }
953
- .customize-control-repeater .repeater-row-number {
954
- border-right: 1px solid #ddd;
955
- display: inline-block;
956
- width: 35px;
957
- text-align: center; }
958
- .customize-control-repeater .repeater-row-remove,
959
- .customize-control-repeater .repeater-row-move,
960
- .customize-control-repeater .repeater-row-minimize {
961
- display: inline-block;
962
- float: right;
963
- border-left: 1px solid #ddd;
964
- width: 35px;
965
- height: 36px;
966
- text-align: center; }
967
- .customize-control-repeater .repeater-row-remove:hover,
968
- .customize-control-repeater .repeater-row-move:hover,
969
- .customize-control-repeater .repeater-row-minimize:hover {
970
- background: #ddd;
971
- cursor: pointer; }
972
- .customize-control-repeater .repeater-row-move:hover {
973
- cursor: move; }
974
- .customize-control-repeater .repeater-remove,
975
- .customize-control-repeater .repeater-move,
976
  .customize-control-repeater .repeater-minimize {
977
  line-height: 36px; }
978
- .customize-control-repeater .repeater-row.minimized {
979
- padding: 0;
980
- height: 36px;
981
- overflow: hidden; }
982
  .customize-control-repeater .remove-button, .customize-control-repeater .upload-button {
983
  width: 48%; }
984
 
985
  .kirki-image-attachment {
986
  margin: 0;
987
  text-align: center;
988
- margin-bottom: 25px; }
989
  .kirki-image-attachment img {
990
  display: inline-block; }
991
 
901
  height: 100%; }
902
 
903
  .customize-control-repeater .repeater-fields .repeater-row {
 
904
  border: 1px solid #999;
905
  margin-top: .5rem;
906
  background: #eee;
907
+ position: relative; }
908
+ .customize-control-repeater .repeater-fields .repeater-row.minimized {
909
+ border: 1px solid #dfdfdf;
910
+ padding: 0; }
911
+ .customize-control-repeater .repeater-fields .repeater-row.minimized:hover {
912
+ border: 1px solid #999; }
913
+ .customize-control-repeater .repeater-fields .repeater-row.minimized .repeater-row-content {
914
+ display: none; }
915
  .customize-control-repeater .repeater-fields .repeater-row label {
916
  margin-bottom: 12px;
917
  clear: both; }
923
  -webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25);
924
  box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25);
925
  border: 1px solid #3498DB; }
926
+ .customize-control-repeater .repeater-fields .repeater-row .repeater-field:last-child {
927
+ border-bottom: none;
928
+ padding-bottom: 0; }
929
  .customize-control-repeater button.repeater-add {
930
  margin-top: 1rem; }
931
+ .customize-control-repeater .repeater-row-content {
932
+ padding: 10px 15px; }
933
  .customize-control-repeater .repeater-field {
934
  margin-bottom: 12px;
935
  width: 100%;
936
  clear: both;
937
  padding-bottom: 12px;
938
  border-bottom: 1px dotted #CCC; }
939
+ .customize-control-repeater .repeater-field .customize-control-title {
940
+ font-size: 13px;
941
+ line-height: initial; }
942
+ .customize-control-repeater .repeater-field .customize-control-description {
943
+ font-size: 13px;
944
+ line-height: initial; }
945
+ .customize-control-repeater .repeater-field.repeater-field-hidden {
946
+ margin: 0;
947
+ padding: 0;
948
+ border: 0; }
949
  .customize-control-repeater .repeater-field-select select {
950
  margin-left: 0; }
951
  .customize-control-repeater .repeater-field-checkbox label {
958
  resize: vertical; }
959
  .customize-control-repeater .repeater-row-header {
960
  background: white;
961
+ border: 1px solid #dfdfdf;
962
+ position: relative;
963
+ padding: 10px 15px;
964
+ height: auto;
965
+ min-height: 20px;
966
+ line-height: 30px;
967
+ overflow: hidden;
968
+ word-wrap: break-word; }
969
+ .customize-control-repeater .repeater-row-header:hover {
970
+ cursor: move; }
971
+ .customize-control-repeater .repeater-row-header .dashicons {
972
+ font-size: 18px;
973
+ position: absolute;
974
+ right: 12px;
975
+ top: 2px;
976
+ color: #a0a5aa; }
977
+ .customize-control-repeater .repeater-row-label {
978
+ font-size: 13px;
979
+ font-weight: 600;
980
+ line-height: 20px;
981
+ display: block;
982
+ text-transform: capitalize;
983
+ width: 90%;
984
+ overflow: hidden;
985
+ height: 18px; }
986
+ .customize-control-repeater .repeater-row-remove {
987
+ color: #a00; }
988
+ .customize-control-repeater .repeater-row-remove:hover {
989
+ color: #f00; }
 
 
 
990
  .customize-control-repeater .repeater-minimize {
991
  line-height: 36px; }
 
 
 
 
992
  .customize-control-repeater .remove-button, .customize-control-repeater .upload-button {
993
  width: 48%; }
994
 
995
  .kirki-image-attachment {
996
  margin: 0;
997
  text-align: center;
998
+ margin-bottom: 10px; }
999
  .kirki-image-attachment img {
1000
  display: inline-block; }
1001
 
assets/css/customizer.css.map CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "version": 3,
3
- "mappings": "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",
4
  "sources": ["../scss/global.scss","../scss/panels/expanded.scss","../scss/sections/expanded.scss","../scss/sections/hover.scss","../scss/controls/checkbox.scss","../scss/controls/code.scss","../scss/controls/color.scss","../scss/controls/multicolor.scss","../scss/controls/color-palette.scss","../scss/controls/date.scss","../scss/controls/dashicons.scss","../scss/controls/dimension.scss","../scss/controls/number.scss","../scss/controls/palette.scss","../scss/controls/radio.scss","../scss/controls/radio-buttonset.scss","../scss/controls/radio-image.scss","../scss/controls/repeater.scss","../scss/controls/select.scss","../scss/controls/slider.scss","../scss/controls/sortable.scss","../scss/controls/spacing.scss","../scss/controls/switch.scss","../scss/controls/generic.scss","../scss/controls/toggle.scss","../scss/controls/typography.scss"],
5
  "names": [],
6
  "file": "customizer.css"
1
  {
2
  "version": 3,
3
+ "mappings": "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",
4
  "sources": ["../scss/global.scss","../scss/panels/expanded.scss","../scss/sections/expanded.scss","../scss/sections/hover.scss","../scss/controls/checkbox.scss","../scss/controls/code.scss","../scss/controls/color.scss","../scss/controls/multicolor.scss","../scss/controls/color-palette.scss","../scss/controls/date.scss","../scss/controls/dashicons.scss","../scss/controls/dimension.scss","../scss/controls/number.scss","../scss/controls/palette.scss","../scss/controls/radio.scss","../scss/controls/radio-buttonset.scss","../scss/controls/radio-image.scss","../scss/controls/repeater.scss","../scss/controls/select.scss","../scss/controls/slider.scss","../scss/controls/sortable.scss","../scss/controls/spacing.scss","../scss/controls/switch.scss","../scss/controls/generic.scss","../scss/controls/toggle.scss","../scss/controls/typography.scss"],
5
  "names": [],
6
  "file": "customizer.css"
assets/css/customizer.min.css DELETED
@@ -1 +0,0 @@
1
- #customize-controls #customize-info .accordion-section-title{border-bottom:1px solid rgba(0,0,0,.3)}#customize-controls #customize-theme-controls .accordion-section>.accordion-section-title{border-bottom:1px solid rgba(0,0,0,.1)}#customize-controls #customize-theme-controls .accordion-section>.accordion-section-title:after{border-color:transparent!important}.hint,[data-hint]{position:relative;display:inline-block}.hint:after,.hint:before,[data-hint]:after,[data-hint]:before{position:absolute;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:hidden;opacity:0;z-index:998;pointer-events:none;transition:.3s ease;transition-delay:250ms}.hint:focus:after,.hint:focus:before,.hint:hover:after,.hint:hover:before,[data-hint]:focus:after,[data-hint]:focus:before,[data-hint]:hover:after,[data-hint]:hover:before{visibility:visible;opacity:1}.hint:hover:after,.hint:hover:before,[data-hint]:hover:after,[data-hint]:hover:before{transition-delay:0}.hint:before,[data-hint]:before{content:'';position:absolute;background:0 0;border:none;z-index:999;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #333;left:-5px;top:5px}.hint:after,[data-hint]:after{content:attr(data-hint);background:#333;color:#fff;padding:5px 10px;font-size:12px;line-height:14px;height:auto;margin-bottom:-14px;width:170px;max-width:170px;display:block;white-space:normal;text-align:right;position:relative;top:-22px;left:-195px}li.customize-control{position:relative}li.customize-control a.tooltip.hint--left{display:block;position:absolute;top:5px;right:-10px;border-radius:50%;color:#999;border:none;line-height:8px;width:20px;height:20px;z-index:10}.rtl li.customize-control a.tooltip.hint--left{right:auto;left:0}.rtl .hint:before,.rtl [data-hint]:before{left:20px;border-left:none;border-right:5px solid #333}.rtl .hint:after,.rtl [data-hint]:after{left:195px}customize-control-upload .current .container{border:1px solid rgba(0,0,0,.05)}#customize-controls .description{font-style:normal;font-weight:300;font-size:.9em}input{font-size:16px}input[type=text]{border:1px solid rgba(0,0,0,.1);background-image:none;background-position:0 0;background-repeat:repeat;border-radius:3px;padding:.5em}.wp-full-overlay.expanded #customize-footer-actions .kirki-footer-thanks{position:fixed;bottom:8px;left:150px;padding:0;width:90px;height:25px;background-image:url(../images/kirki-bottom.png);background-repeat:no-repeat;background-position:center center}.kirki-reset-section{position:absolute;top:10px;right:10px;background:#BDBDBD;opacity:.5;color:#fff;font-size:.8rem;border-radius:3px;padding:0 5px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;font-weight:700}.kirki-reset-section .dashicons{font-size:.8rem;width:.8rem;height:.8rem;line-height:.8rem;vertical-align:baseline}.kirki-reset-section:active,.kirki-reset-section:hover{background:#F44336;color:#fff;font-weight:700;opacity:1}.kirki-reset-section:focus{opacity:1;-webkit-box-shadow:0 0 0 1px #F44336,0 0 2px 1px rgba(200,50,30,.8);box-shadow:0 0 0 1px #F44336,0 0 2px 1px rgba(200,50,30,.8)}#customize-theme-controls .control-panel.control-panel-kirki-expanded>ul.control-panel-content{position:relative;left:0;display:block!important;margin-top:0!important}#customize-theme-controls .control-panel.control-panel-kirki-expanded>ul.control-panel-content .accordion-section-title{margin-left:0}#customize-theme-controls .control-panel.control-panel-kirki-expanded>ul.control-panel-content>li.customize-info{margin-bottom:0;border-top:none}#customize-theme-controls .control-panel.control-panel-kirki-expanded>ul.control-panel-content>li.customize-info .accordion-section-title{border-bottom:none!important}#customize-theme-controls .control-section.control-section-kirki-expanded>ul.accordion-section-content{position:relative;left:0;display:block;margin-top:0!important}#customize-theme-controls .control-section.control-section-kirki-hover:active:not(.open)>ul.accordion-section-content,#customize-theme-controls .control-section.control-section-kirki-hover:focus:not(.open)>ul.accordion-section-content,#customize-theme-controls .control-section.control-section-kirki-hover:hover:not(.open)>ul.accordion-section-content{position:fixed;left:300px;width:300px;background:#eee;display:block;height:100%;max-height:100vh;overflow-y:scroll}#customize-theme-controls .control-section.control-section-kirki-hover:active:not(.open) .customize-section-title,#customize-theme-controls .control-section.control-section-kirki-hover:focus:not(.open) .customize-section-title,#customize-theme-controls .control-section.control-section-kirki-hover:hover:not(.open) .customize-section-title{display:none}.customize-control-kirki-checkbox input[type=checkbox],.customize-control-multicheck input[type=checkbox],.customize-control-repeater input[type=checkbox]{position:relative;margin:0 1rem 0 0;cursor:pointer;margin-bottom:5px;width:22px;height:22px;border-radius:3px;-webkit-border-radius:3px}.customize-control-kirki-checkbox input[type=checkbox]:before,.customize-control-multicheck input[type=checkbox]:before,.customize-control-repeater input[type=checkbox]:before{content:"";position:absolute;left:0;z-index:1;width:100%;height:100%;border:none}.customize-control-kirki-checkbox input[type=checkbox]:after,.customize-control-multicheck input[type=checkbox]:after,.customize-control-repeater input[type=checkbox]:after{content:"";position:absolute;left:0;top:0;width:100%;height:100%;background:#f2f2f2;cursor:pointer;border-radius:3px;-webkit-border-radius:3px}.customize-control-kirki-checkbox input[type=checkbox]:checked:before,.customize-control-multicheck input[type=checkbox]:checked:before,.customize-control-repeater input[type=checkbox]:checked:before{content:"\f147";font-family:dashicons;font-size:25px;left:0;top:2px}.customize-control-kirki-checkbox input[type=checkbox]:checked:after,.customize-control-multicheck input[type=checkbox]:checked:after,.customize-control-repeater input[type=checkbox]:checked:after{background:#fff}.CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected,.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.customize-control-color-alpha .wp-picker-container{width:100%}.customize-control-color-alpha .wp-picker-container a.wp-color-result{width:auto;display:block;border:none;padding-left:40px}.customize-control-multicolor .multicolor-group-wrapper .multicolor-single-color-wrapper,.customize-control-multicolor .multicolor-group-wrapper .wp-picker-container{width:100%}.customize-control-color-alpha .wp-picker-container a.wp-color-result:after{background:rgba(0,0,0,.25);color:#fff;border:none;-webkit-box-shadow:none;box-shadow:none}.customize-control-color-alpha .wp-picker-container a.wp-color-result:focus:after,.customize-control-color-alpha .wp-picker-container a.wp-color-result:hover:after{color:#fff}.customize-control-multicolor .multicolor-group-wrapper{display:flex}.customize-control-multicolor .multicolor-group-wrapper .multicolor-single-color-wrapper label{display:block;text-align:center;padding:3px}.customize-control-multicolor .multicolor-group-wrapper .wp-picker-container a.wp-color-result{width:100%;height:30px;padding-left:0;border-radius:0;border:none;margin-right:0}.customize-control-multicolor .multicolor-group-wrapper .wp-picker-container a.wp-color-result>span{border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.customize-control-multicolor .multicolor-group-wrapper .wp-picker-container a.wp-color-result:after{display:none}.customize-control-color-palette label{position:relative;display:inline-block;padding:2px 0}.customize-control-color-palette .color-palette-color{color:transparent;display:block;width:42px;height:42px;overflow:hidden;border-radius:50%;-webkit-box-shadow:inset 3px 3px 13px 2px rgba(0,0,0,.22);box-shadow:inset 3px 3px 13px 2px rgba(0,0,0,.22);border:1px solid rgba(0,0,0,.2)}.customize-control-color-palette .colors-wrapper{max-height:300px;overflow-y:auto;padding:10px}.customize-control-color-palette .colors-wrapper input{display:none}.customize-control-color-palette .colors-wrapper input:checked+label .color-palette-color{-webkit-box-shadow:1px 1px 10px 1px #333;box-shadow:1px 1px 10px 1px #333;border:1px solid rgba(0,0,0,.3)}.wp-customizer div.ui-datepicker{z-index:500001!important;width:255px;background:#fff;border:1px solid #dedede}.wp-customizer div.ui-datepicker .ui-datepicker-header{padding:10px;background:#e5e5e5;border-bottom:1px solid #fff}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-next,.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-prev{display:block;position:absolute;width:1em;overflow:hidden}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-next:after,.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-next:before,.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-prev:after,.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-prev:before{font-family:dashicons}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-next:after:hover,.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-next:before:hover,.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-prev:after:hover,.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-prev:before:hover{cursor:pointer}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-next .ui-icon,.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-prev .ui-icon{display:none}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-prev{left:10px}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-prev:before{content:"\f341"}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-next{right:10px}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-next:after{content:"\f345"}.wp-customizer div.ui-datepicker .ui-datepicker-header .ui-datepicker-title{text-align:center}.wp-customizer div.ui-datepicker .ui-datepicker-calendar{border-collapse:collapse;width:100%}.wp-customizer div.ui-datepicker .ui-datepicker-calendar thead{background:#e5e5e5;padding:5px}.wp-customizer div.ui-datepicker .ui-datepicker-calendar tr td{text-align:center}.wp-customizer div.ui-datepicker .ui-datepicker-calendar tr td a{display:block;padding:5px;color:#333;text-decoration:none}.wp-customizer div.ui-datepicker .ui-datepicker-calendar tr td a.ui-state-active,.wp-customizer div.ui-datepicker .ui-datepicker-calendar tr td a:hover{color:#fff;background-color:#0073aa}.wp-customizer div.ui-datepicker .ui-datepicker-calendar tr td.ui-state-disabled .ui-state-default a,.wp-customizer div.ui-datepicker .ui-datepicker-calendar tr td.ui-state-disabled a{color:#999}.customize-control-dashicons label{position:relative;display:inline-block}.customize-control-dashicons .icons-wrapper{max-height:300px;overflow-y:scroll}.customize-control-dashicons .icons-wrapper h4{font-weight:300;margin:.7em 0}.customize-control-dashicons .icons-wrapper .dashicons{padding:3px;font-size:25px;width:25px;height:25px;border:1px solid transparent}.customize-control-dashicons .icons-wrapper input{display:none}.customize-control-dashicons .icons-wrapper input:checked+label .dashicons{border:1px solid #3498DB;color:#000}.customize-control-dimension .input-wrapper .invalid-value{display:none;background:#D32F2F;font-size:.85em;color:#fff;float:left;padding:2px 0;border-radius:3px}.customize-control-dimension .input-wrapper.invalid .invalid-value{display:block;width:98%;text-align:center}.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button .ui-button-text,.customize-control-palette input[type=radio]{display:none}.customize-control-dimension .input-wrapper.invalid input[type=text]:focus{border-color:#D32F2F}.customize-control-number .ui-spinner.ui-widget-content{position:relative}.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button{position:absolute;right:0;color:rgba(0,0,0,.3);border:none;padding:0 5px;width:20px;height:calc(50% + .5em);border-radius:0;-webkit-border-radius:0;box-shadow:none;-webkit-box-shadow:none;background:0 0;margin:0}.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button.ui-spinner-down:before,.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button.ui-spinner-up:before{font-family:dashicons;position:absolute;left:0}.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button.ui-spinner-up{top:-50%}.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button.ui-spinner-up:before{content:"\f343"}.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button.ui-spinner-down{top:50%}.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button.ui-spinner-down:before{content:"\f347"}.customize-control-number .ui-spinner.ui-widget-content .ui-spinner-button:hover{color:rgba(0,0,0,.7)}.customize-control-palette input[type=radio]:checked+label{border:3px solid rgba(0,0,0,.4)}.customize-control-palette label{background:0 0;padding:0;border-top:3px solid transparent;border-bottom:3px solid transparent;margin-bottom:5px;display:flex}.customize-control-palette label span{padding:10px 0;flex-grow:1;font-size:0;line-height:10px;color:transparent;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(0,0,0,.1)}.customize-control-palette label span:first-child{border-left:1px solid rgba(0,0,0,.1)}.customize-control-palette label span:last-child{border-right:1px solid rgba(0,0,0,.1)}.customize-control-palette label span:hover{padding:10px;flex-grow:3;min-width:60px;font-size:10px;line-height:10px;color:#000}.customize-control-kirki-radio input[type=radio]{width:18px;height:18px}.customize-control-kirki-radio input[type=radio]:checked:before{width:10px;height:10px;margin:3px}.customize-control-kirki-radio label{display:list-item;margin-bottom:7px}.customize-control-kirki-radio label .option-description{display:block;color:rgba(0,0,0,.35);font-size:.9em;padding-left:25px}.customize-control-radio-buttonset .buttonset .switch-label{background:rgba(0,0,0,.05);color:#555;border-right:1px solid rgba(0,0,0,.2);padding:4px 7px;margin:0;font-size:12px}.customize-control-radio-buttonset .buttonset .switch-label:last-child{border-right:none}.customize-control-radio-buttonset .buttonset .switch-input{display:none}.customize-control-radio-buttonset .buttonset .switch-input:checked+.switch-label{background-color:#3498DB;color:#fff}.customize-control-radio-image label{position:relative;display:inline-block}.customize-control-radio-image input,.customize-control-repeater .repeater-fields .repeater-row .repeater-field.repeater-field-radio-image input{display:none}.customize-control-radio-image input img{border:1px solid transparent}.customize-control-radio-image input:checked+label img{-webkit-box-shadow:0 0 5px 2px rgba(0,0,0,.25);box-shadow:0 0 5px 2px rgba(0,0,0,.25);border:1px solid #3498DB}.customize-control-radio-image input+label .image-clickable{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%}.customize-control-repeater .repeater-fields .repeater-row{padding:.5rem;border:1px solid #999;margin-top:.5rem;background:#eee;position:relative;padding-top:48px}.customize-control-repeater .repeater-fields .repeater-row label{margin-bottom:12px;clear:both}.customize-control-repeater .repeater-fields .repeater-row .repeater-field.repeater-field-radio-image input img{border:1px solid transparent}.customize-control-repeater .repeater-fields .repeater-row .repeater-field.repeater-field-radio-image input:checked+label img{-webkit-box-shadow:0 0 5px 2px rgba(0,0,0,.25);box-shadow:0 0 5px 2px rgba(0,0,0,.25);border:1px solid #3498DB}.customize-control-repeater button.repeater-add{margin-top:1rem}.customize-control-repeater .repeater-field{margin-bottom:12px;width:100%;clear:both;padding-bottom:12px;border-bottom:1px dotted #CCC}.customize-control-repeater .repeater-row .repeater-field:last-child{border-bottom:none;padding-bottom:0}.customize-control-repeater .repeater-field-select select{margin-left:0}.customize-control-repeater .repeater-field-checkbox label{line-height:28px}.customize-control-repeater .repeater-field-checkbox input{line-height:28px;margin-right:5px}.customize-control-repeater .repeater-field-textarea textarea{width:100%;resize:vertical}.customize-control-repeater .repeater-row-header{background:#fff;position:absolute;top:0;left:0;right:0;height:36px;color:#555;border-bottom:1px solid #999;line-height:36px;font-size:15px}.customize-control-repeater .repeater-row-number{border-right:1px solid #ddd;display:inline-block;width:35px;text-align:center}.customize-control-repeater .repeater-row-minimize,.customize-control-repeater .repeater-row-move,.customize-control-repeater .repeater-row-remove{display:inline-block;float:right;border-left:1px solid #ddd;width:35px;height:36px;text-align:center}.customize-control-repeater .repeater-row-minimize:hover,.customize-control-repeater .repeater-row-move:hover,.customize-control-repeater .repeater-row-remove:hover{background:#ddd;cursor:pointer}.customize-control-repeater .repeater-row-move:hover{cursor:move}.customize-control-repeater .repeater-minimize,.customize-control-repeater .repeater-move,.customize-control-repeater .repeater-remove{line-height:36px}.customize-control-repeater .repeater-row.minimized{padding:0;height:36px;overflow:hidden}.customize-control-repeater .remove-button,.customize-control-repeater .upload-button{width:48%}.kirki-image-attachment{margin:0;text-align:center;margin-bottom:25px}.kirki-image-attachment img{display:inline-block}.limit{padding:3px;border-radius:3px}.limit.highlight{background:#D32F2F;color:#fff}.selectize-control{position:relative}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:"\f347";display:block;position:absolute;top:0;right:0;margin-top:0;width:12px;height:36px;font-family:dashicons;border-left:1px solid rgba(0,0,0,.06);line-height:36px;padding:0 3px}.selectize-control.single .selectize-input.dropdown-active:after{content:"\f343";border-left:1px solid rgba(0,0,0,.1)}.selectize-control.single .selectize-input.disabled{opacity:.5;background-color:#fafafa}.selectize-control.single.rtl .selectize-input:after{left:15px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px!important}.selectize-control .plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{visibility:visible!important;background:#f2f2f2!important;background:rgba(0,0,0,.06)!important;border:0!important;-webkit-box-shadow:inset 0 0 12px 4px #fff;box-shadow:inset 0 0 12px 4px #fff}.selectize-control .plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control .plugin-drag_drop .ui-sortable-helper{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.2);box-shadow:0 2px 5px rgba(0,0,0,.2)}.selectize-control .plugin-remove_button [data-value]{position:relative;padding-right:24px!important}.selectize-control .plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:700;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:2px 0 0;border-left:1px solid #d0d0d0;-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-control .plugin-remove_button .remove:hover{background:rgba(0,0,0,.05)}.selectize-control .plugin-remove_button.active .remove{border-left-color:#cacaca}.selectize-control .plugin .disabled [data-value] .remove:hover{background:0 0}.selectize-control .plugin .disabled [data-value] .remove{border-left-color:#fff}.selectize-control.multi .selectize-input{min-height:36px}.selectize-control.multi .selectize-input.has-items{padding:6px 8px 3px}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;background:#f2f2f2;color:#303030;border:0 solid #d0d0d0}.selectize-control.multi .selectize-input>div.active{background:#e8e8e8;color:#303030;border:0 solid #cacaca}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:#7d7d7d;background:#fff;border:0 solid #fff}.selectize-dropdown{position:relative;top:-4px!important;border:1px solid #d0d0d0;background:#fff;margin:-1px 0 0;border-top:0 none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;z-index:999}.selectize-dropdown-header{position:relative;padding:5px 8px;border-bottom:1px solid #d0d0d0;background:#f8f8f8;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-dropdown-header-close{position:absolute;right:8px;top:50%;color:#303030;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.selectize-dropdown-header-close:hover{color:#000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-dropdown,.selectize-input,.selectize-input input{color:#303030;font-family:inherit;font-size:13px;line-height:18px;-webkit-font-smoothing:inherit}.selectize-control.single .selectize-input.input-active,.selectize-input{background:#fff;cursor:text;display:inline-block}.selectize-input{border:1px solid rgba(0,0,0,.1);padding:8px;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.selectize-input.full{background-color:#fff}.selectize-input.disabled,.selectize-input.disabled *{cursor:default!important}.selectize-input.focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.15)}.selectize-input.dropdown-active{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-input>*{vertical-align:baseline;display:-moz-inline-stack;display:inline-block;zoom:1}.selectize-input>input{display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0 2px 0 0!important;text-indent:0!important;border:0!important;background:0 0!important;line-height:inherit!important;-webkit-user-select:auto!important;-webkit-box-shadow:none!important;box-shadow:none!important}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:0!important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#f0f0f0;height:1px;bottom:0;left:0;right:0}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(125,168,208,.2);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.selectize-dropdown .optgroup-header,.selectize-dropdown [data-selectable]{padding:5px 8px}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#303030;background:#fff;cursor:default}.selectize-dropdown .active{background-color:#f5fafd;color:#495c68}.selectize-dropdown .active.create{color:#495c68}.selectize-dropdown .create{color:rgba(48,48,48,.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px}.customize-control-slider input[type=range]{-webkit-appearance:none;-webkit-transition:background .3s;-moz-transition:background .3s;transition:background .3s;background-color:rgba(0,0,0,.1);height:5px;width:calc(100% - 70px);padding:0}.customize-control-slider input[type=range]:focus{box-shadow:none;outline:0}.customize-control-slider input[type=range]:hover{background-color:rgba(0,0,0,.25)}.customize-control-slider input[type=range]::-webkit-slider-thumb{-webkit-border-radius:50%;-webkit-appearance:none;width:15px;height:15px;border:none;border-radius:50%;background-color:#3498D9}.customize-control-slider input[type=range]::-moz-range-thumb{width:15px;height:15px;border:none;border-radius:50%;background-color:#3498D9}.customize-control-slider input[type=range]::-ms-thumb{width:15px;height:15px;border-radius:50%;border:0;background-color:#3498D9}.customize-control-slider input[type=range]::-moz-range-track{border:inherit;background:0 0}.customize-control-slider input[type=range]::-ms-track{border:inherit;color:transparent;background:0 0}.customize-control-slider input[type=range]::-ms-fill-lower,.customize-control-slider input[type=range]::-ms-fill-upper{background:0 0}.customize-control-slider input[type=range]::-ms-tooltip{display:none}.customize-control-slider .kirki_range_value{display:inline-block;font-size:14px;padding:0 5px;font-weight:400;position:relative;top:2px}.customize-control-slider .kirki-slider-reset{color:rgba(0,0,0,.2);float:right;-webkit-transition:color .5s ease-in;-moz-transition:color .5s ease-in;-ms-transition:color .5s ease-in;-o-transition:color .5s ease-in;transition:color .5s ease-in}.customize-control-slider .kirki-slider-reset span{font-size:16px;line-height:22px}.customize-control-slider .kirki-slider-reset:hover{color:red}.customize-control-sortable ul.ui-sortable li{padding:5px 10px;border:1px solid #333;background:#fff}.customize-control-sortable ul.ui-sortable li .dashicons.dashicons-menu{float:right}.customize-control-sortable ul.ui-sortable li .dashicons.visibility{margin-right:10px}.customize-control-sortable ul.ui-sortable li.invisible{color:#aaa;border:1px dashed #aaa}.customize-control-sortable ul.ui-sortable li.invisible .dashicons.visibility{color:#aaa}.customize-control-spacing .wrapper{-webkit-box-shadow:inset 0 0 5px 2px rgba(0,0,0,.1);box-shadow:inset 0 0 5px 2px rgba(0,0,0,.1);width:96%;padding:3%}.customize-control-spacing .wrapper .control{display:flex;flex-wrap:wrap;justify-content:space-between}.customize-control-spacing .wrapper .control>div{width:48%}.customize-control-spacing .wrapper .control>div h5{margin:10px 0 7px}.customize-control-spacing .wrapper .control>div .inner{display:flex}.customize-control-spacing .wrapper .control>div .inner input[type=number]{width:50%;height:36px}.customize-control-spacing .wrapper .control>div .inner .selectize-control.single{width:50%}.customize-control-spacing .wrapper .control>div .inner .selectize-control.single>.selectize-input{height:36px}.customize-control-spacing .wrapper .input-wrapper .invalid-value{display:none;background:#D32F2F;font-size:.85em;color:#fff;float:left;padding:2px 0;border-radius:3px}.customize-control-spacing .wrapper .input-wrapper.invalid .invalid-value{display:block;width:98%;text-align:center}.customize-control-spacing .wrapper .input-wrapper.invalid input[type=text]:focus{border-color:#D32F2F}.customize-control-switch input[type=checkbox]{display:none}.customize-control-switch .switch{border:none;margin-bottom:1.5rem;outline:0;padding:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.customize-control-switch .switch label{background:rgba(0,0,0,.2);color:transparent;cursor:pointer;display:block;margin-bottom:1rem;position:relative;transition:left .15s ease-out;height:2rem;width:4rem;font-family:Monaco,"Lucida Sans Typewriter","Lucida Typewriter","Courier New",Courier,monospace}.customize-control-switch .switch label:after{background:#FFF;content:"";display:block;height:1.5rem;left:.25rem;position:absolute;top:.25rem;width:1.5rem;-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-ms-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.customize-control-switch .switch input{left:10px;opacity:0;padding:0;position:absolute;top:9px}.customize-control-switch .switch input+label{margin-left:0;margin-right:0}.customize-control-switch .switch input:checked+label{background:#3498DB}.customize-control-switch .switch input:checked+label:after{left:2.25rem;background:#fff}.customize-control-switch .switch.round{border-radius:1000px}.customize-control-switch .switch.round label,.customize-control-switch .switch.round label:after{border-radius:2rem}.customize-control-switch .switch-off,.customize-control-switch .switch-on{line-height:32px;font-weight:700;padding:0 10px}.customize-control-switch .switch-on{color:#fff;padding-right:5px}.customize-control-switch .switch-off{color:#777;padding-left:5px}.customize-control-kirki-generic textarea{width:100%;border:1px solid rgba(0,0,0,.1);-webkit-box-shadow:none;box-shadow:none}.customize-control-toggle label{display:flex;flex-wrap:wrap}.customize-control-toggle label .customize-control-title{width:calc(100% - 55px)}.customize-control-toggle label .description{order:99}.customize-control-toggle input[type=checkbox]{display:none}.customize-control-toggle .switch{border:1px solid rgba(0,0,0,.1);display:inline-block;width:35px;height:12px;border-radius:8px;background:#ccc;vertical-align:middle;position:relative;cursor:pointer;user-select:none;transition:background 350ms ease}.customize-control-toggle .switch:after,.customize-control-toggle .switch:before{content:"";display:block;width:20px;height:20px;border-radius:50%;position:absolute;top:50%;left:-3px;transition:all 350ms cubic-bezier(0,.95,.38,.98),background 150ms ease}.customize-control-toggle .switch:before{background:rgba(0,0,0,.2);transform:translate3d(0,-50%,0) scale(0)}.customize-control-toggle .switch:after{background:#999;border:1px solid rgba(0,0,0,.1);transform:translate3d(0,-50%,0)}.customize-control-toggle .switch:active:before{transform:translate3d(0,-50%,0) scale(3)}.customize-control-toggle input:checked+.switch{background:rgba(52,152,222,.3)}.customize-control-toggle input:checked+.switch:before{background:rgba(52,152,222,.075);transform:translate3d(100%,-50%,0) scale(1)}.customize-control-toggle input:checked+.switch:after{background:#3498DE;transform:translate3d(100%,-50%,0)}.customize-control-toggle input:checked+.switch:active:before{background:rgba(52,152,222,.075);transform:translate3d(100%,-50%,0) scale(3)}.customize-control-typography .wrapper{-webkit-box-shadow:inset 0 0 10px 0 rgba(0,0,0,.1);box-shadow:inset 0 0 10px 0 rgba(0,0,0,.1);padding:10px;border-radius:3px;display:flex;flex-wrap:wrap;justify-content:space-between}.customize-control-typography .wrapper .color,.customize-control-typography .wrapper .font-family,.customize-control-typography .wrapper .font-size,.customize-control-typography .wrapper .letter-spacing,.customize-control-typography .wrapper .line-height,.customize-control-typography .wrapper .subset,.customize-control-typography .wrapper .text-transform,.customize-control-typography .wrapper .variant{width:100%;float:none;clear:both}.customize-control-typography .wrapper .color h5,.customize-control-typography .wrapper .font-family h5,.customize-control-typography .wrapper .font-size h5,.customize-control-typography .wrapper .letter-spacing h5,.customize-control-typography .wrapper .line-height h5,.customize-control-typography .wrapper .subset h5,.customize-control-typography .wrapper .text-transform h5,.customize-control-typography .wrapper .variant h5{margin:.67em 0 0}.customize-control-typography .wrapper .font-size,.customize-control-typography .wrapper .letter-spacing,.customize-control-typography .wrapper .line-height{width:50%}.customize-control-typography .wrapper .text-align{width:100%}.customize-control-typography .wrapper .text-align .dashicons{padding:3px;font-size:25px;width:25px;height:25px;border:1px solid transparent}.customize-control-typography .wrapper .text-align input{display:none}.customize-control-typography .wrapper .text-align input:checked+label .dashicons{border:1px solid #3498DB;color:#000}.customize-control-typography .wrapper .text-transform{padding-top:10px}.customize-control-typography .wrapper .color{width:auto}
 
assets/js/branding.js CHANGED
@@ -1,8 +1,13 @@
1
- jQuery(document).ready(function($) { "use strict";
2
- if ( '' != kirkiBranding.logoImage ) {
3
- jQuery( "div#customize-info .preview-notice" ).replaceWith( '<img src="' + kirkiBranding.logoImage + '">' );
 
 
 
4
  }
5
- if ( '' != kirkiBranding.description ) {
6
- jQuery( "div#customize-info > .customize-panel-description" ).replaceWith( '<div class="customize-panel-description">' + kirkiBranding.description + '</div>' );
 
7
  }
 
8
  });
1
+ jQuery( document ).ready( function() {
2
+
3
+ 'use strict';
4
+
5
+ if ( '' !== kirkiBranding.logoImage ) {
6
+ jQuery( 'div#customize-info .preview-notice' ).replaceWith( '<img src="' + kirkiBranding.logoImage + '">' );
7
  }
8
+
9
+ if ( '' !== kirkiBranding.description ) {
10
+ jQuery( 'div#customize-info > .customize-panel-description' ).replaceWith( '<div class="customize-panel-description">' + kirkiBranding.description + '</div>' );
11
  }
12
+
13
  });
assets/js/controls/checkbox.js CHANGED
@@ -9,14 +9,17 @@ wp.customize.controlConstructor['kirki-checkbox'] = wp.customize.Control.extend(
9
  var control = this;
10
 
11
  // Get the initial value
12
- var checkbox_value = control.setting._value;
13
 
14
  // Change the value
15
  this.container.on( 'change', 'input', function() {
 
16
  // Get the checkbox status
17
- checkbox_value = ( jQuery( this ).is( ':checked' ) ) ? true : false;
 
18
  // Set the value in the WordPress API
19
- control.setting.set( checkbox_value );
 
20
  });
21
 
22
  }
9
  var control = this;
10
 
11
  // Get the initial value
12
+ var value = control.setting._value;
13
 
14
  // Change the value
15
  this.container.on( 'change', 'input', function() {
16
+
17
  // Get the checkbox status
18
+ value = ( jQuery( this ).is( ':checked' ) ) ? true : false;
19
+
20
  // Set the value in the WordPress API
21
+ control.setting.set( value );
22
+
23
  });
24
 
25
  }
assets/js/controls/code.js CHANGED
@@ -8,14 +8,15 @@ wp.customize.controlConstructor.code = wp.customize.Control.extend({
8
 
9
  var control = this,
10
  element = control.container.find( '#kirki-codemirror-editor-' + control.id ),
11
- language = control.params.choices.language;
 
12
 
13
  // HTML mode requires a small hack because CodeMirror uses 'htmlmixed'.
14
  if ( 'html' === control.params.choices.language ) {
15
  language = { name: 'htmlmixed' };
16
  }
17
 
18
- var editor = CodeMirror.fromTextArea( element[0], {
19
  value: control.setting._value,
20
  mode: language,
21
  lineNumbers: true,
@@ -29,7 +30,7 @@ wp.customize.controlConstructor.code = wp.customize.Control.extend({
29
  });
30
 
31
  // Hack to refresh the editor when we open a section
32
- element.parents( '.accordion-section' ).on( 'click', function(){
33
  editor.refresh();
34
  });
35
 
8
 
9
  var control = this,
10
  element = control.container.find( '#kirki-codemirror-editor-' + control.id ),
11
+ language = control.params.choices.language,
12
+ editor;
13
 
14
  // HTML mode requires a small hack because CodeMirror uses 'htmlmixed'.
15
  if ( 'html' === control.params.choices.language ) {
16
  language = { name: 'htmlmixed' };
17
  }
18
 
19
+ editor = CodeMirror.fromTextArea( element[0], {
20
  value: control.setting._value,
21
  mode: language,
22
  lineNumbers: true,
30
  });
31
 
32
  // Hack to refresh the editor when we open a section
33
+ element.parents( '.accordion-section' ).on( 'click', function() {
34
  editor.refresh();
35
  });
36
 
assets/js/controls/color-alpha.js CHANGED
@@ -6,8 +6,8 @@ wp.customize.controlConstructor['color-alpha'] = wp.customize.Control.extend({
6
  // When we're finished loading continue processing
7
  ready: function() {
8
 
9
- var control = this,
10
- picker = this.container.find( '.kirki-color-control' );
11
 
12
  // If we have defined any extra choices, make sure they are passed-on to Iris.
13
  if ( undefined !== control.params.choices ) {
@@ -17,11 +17,14 @@ wp.customize.controlConstructor['color-alpha'] = wp.customize.Control.extend({
17
  // Saves our settings to the WP API
18
  picker.wpColorPicker({
19
  change: function( event, ui ) {
 
20
  // Small hack: the picker needs a small delay
21
  setTimeout( function() {
22
  control.setting.set( picker.val() );
23
  }, 100 );
24
- },
 
 
25
  });
26
 
27
  }
6
  // When we're finished loading continue processing
7
  ready: function() {
8
 
9
+ var control = this,
10
+ picker = this.container.find( '.kirki-color-control' );
11
 
12
  // If we have defined any extra choices, make sure they are passed-on to Iris.
13
  if ( undefined !== control.params.choices ) {
17
  // Saves our settings to the WP API
18
  picker.wpColorPicker({
19
  change: function( event, ui ) {
20
+
21
  // Small hack: the picker needs a small delay
22
  setTimeout( function() {
23
  control.setting.set( picker.val() );
24
  }, 100 );
25
+
26
+ }
27
+
28
  });
29
 
30
  }
assets/js/controls/dimension.js CHANGED
@@ -6,7 +6,8 @@ wp.customize.controlConstructor.dimension = wp.customize.Control.extend({
6
  // When we're finished loading continue processing
7
  ready: function() {
8
 
9
- var control = this;
 
10
 
11
  // Validate the value and show a warning if it's invalid
12
  if ( false === kirkiValidateCSSValue( control.setting._value ) ) {
@@ -17,18 +18,26 @@ wp.customize.controlConstructor.dimension = wp.customize.Control.extend({
17
 
18
  // Save the value
19
  this.container.on( 'change keyup paste', 'input', function() {
20
- var value = jQuery( this ).val();
 
 
21
  // Validate the value and show a warning if it's invalid.
22
  // We did this once when initializing the field, but we need to re-evaluate
23
  // every time the value changes.
24
  if ( false === kirkiValidateCSSValue( value ) ) {
 
25
  jQuery( control.selector + ' .input-wrapper' ).addClass( 'invalid' );
 
26
  } else {
 
27
  jQuery( control.selector + ' .input-wrapper' ).removeClass( 'invalid' );
 
28
  // Set the value to the customizer.
29
  // We're only saving VALID values.
30
  control.setting.set( value );
 
31
  }
 
32
  });
33
 
34
  }
6
  // When we're finished loading continue processing
7
  ready: function() {
8
 
9
+ var control = this,
10
+ value;
11
 
12
  // Validate the value and show a warning if it's invalid
13
  if ( false === kirkiValidateCSSValue( control.setting._value ) ) {
18
 
19
  // Save the value
20
  this.container.on( 'change keyup paste', 'input', function() {
21
+
22
+ value = jQuery( this ).val();
23
+
24
  // Validate the value and show a warning if it's invalid.
25
  // We did this once when initializing the field, but we need to re-evaluate
26
  // every time the value changes.
27
  if ( false === kirkiValidateCSSValue( value ) ) {
28
+
29
  jQuery( control.selector + ' .input-wrapper' ).addClass( 'invalid' );
30
+
31
  } else {
32
+
33
  jQuery( control.selector + ' .input-wrapper' ).removeClass( 'invalid' );
34
+
35
  // Set the value to the customizer.
36
  // We're only saving VALID values.
37
  control.setting.set( value );
38
+
39
  }
40
+
41
  });
42
 
43
  }
assets/js/controls/editor.js CHANGED
@@ -13,7 +13,7 @@
13
  content;
14
 
15
  if ( editor ) {
16
- editor.onChange.add( function(ed, e) {
17
  ed.save();
18
  content = editor.getContent();
19
  clearTimeout( setChange );
@@ -23,7 +23,7 @@
23
  });
24
  }
25
 
26
- tArea.css({ visibility: 'visible' }).on('keyup', function() {
27
  content = tArea.val();
28
  clearTimeout( setChange );
29
  setChange = setTimeout( function() {
13
  content;
14
 
15
  if ( editor ) {
16
+ editor.onChange.add( function( ed, e ) {
17
  ed.save();
18
  content = editor.getContent();
19
  clearTimeout( setChange );
23
  });
24
  }
25
 
26
+ tArea.css({ visibility: 'visible' }).on( 'keyup', function() {
27
  content = tArea.val();
28
  clearTimeout( setChange );
29
  setChange = setTimeout( function() {
assets/js/controls/multicheck.js CHANGED
@@ -3,7 +3,7 @@
3
  */
4
  wp.customize.controlConstructor.multicheck = wp.customize.Control.extend({
5
 
6
- // When we're finished loading continue processing
7
  ready: function() {
8
  var control = this;
9
 
@@ -12,7 +12,7 @@ wp.customize.controlConstructor.multicheck = wp.customize.Control.extend({
12
  var value = [],
13
  i = 0;
14
 
15
- // build the value as an object using the sub-values from individual checkboxes.
16
  jQuery.each( control.params.choices, function( key, subValue ) {
17
  if ( control.container.find( 'input[value="' + key + '"]' ).is( ':checked' ) ) {
18
  value[ i ] = key;
@@ -20,7 +20,7 @@ wp.customize.controlConstructor.multicheck = wp.customize.Control.extend({
20
  }
21
  });
22
 
23
- // Update the value in the customizer
24
  control.setting.set( value );
25
 
26
  });
3
  */
4
  wp.customize.controlConstructor.multicheck = wp.customize.Control.extend({
5
 
6
+ // When we're finished loading continue processing.
7
  ready: function() {
8
  var control = this;
9
 
12
  var value = [],
13
  i = 0;
14
 
15
+ // Build the value as an object using the sub-values from individual checkboxes.
16
  jQuery.each( control.params.choices, function( key, subValue ) {
17
  if ( control.container.find( 'input[value="' + key + '"]' ).is( ':checked' ) ) {
18
  value[ i ] = key;
20
  }
21
  });
22
 
23
+ // Update the value in the customizer.
24
  control.setting.set( value );
25
 
26
  });
assets/js/controls/multicolor.js CHANGED
@@ -9,27 +9,34 @@ wp.customize.controlConstructor.multicolor = wp.customize.Control.extend({
9
  colors = control.params.choices,
10
  keys = Object.keys( colors ),
11
  value = this.params.value,
12
- target = control.container.find( '.iris-target' );
13
- i = 0;
 
 
14
 
15
  // Proxy function that handles changing the individual colors
16
- function kirkiMulticolorChangeHandler( control, value, sub_setting ) {
17
 
18
- var picker = control.container.find( '.multicolor-index-' + sub_setting );
19
 
20
- // did we change the value?
21
  picker.wpColorPicker({
22
  target: target[0],
23
  change: function( event, ui ) {
 
24
  // Color controls require a small delay
25
  setTimeout( function() {
26
- value[ sub_setting ] = picker.val();
 
27
  // Set the value
28
  control.setting.set( value );
 
29
  // Trigger the change
30
- control.container.find( '.multicolor-index-' + sub_setting ).trigger( 'change' );
31
  }, 100 );
32
- },
 
 
33
  });
34
 
35
  }
@@ -37,14 +44,14 @@ wp.customize.controlConstructor.multicolor = wp.customize.Control.extend({
37
  // The hidden field that keeps the data saved (though we never update it)
38
  this.settingField = this.container.find( '[data-customize-setting-link]' ).first();
39
 
40
- // colors loop
41
  while ( i < Object.keys( colors ).length ) {
42
 
43
  kirkiMulticolorChangeHandler( this, value, keys[ i ] );
44
 
45
  // Move colorpicker to the 'iris-target' container div
46
- var irisInput = control.container.find( '.wp-picker-container .wp-picker-input-wrap' ),
47
- irisPicker = control.container.find( '.wp-picker-container .wp-picker-holder' );
48
  jQuery( irisInput[0] ).detach().appendTo( target[0] );
49
  jQuery( irisPicker[0] ).detach().appendTo( target[0] );
50
 
@@ -64,10 +71,13 @@ wp.customize.controlConstructor.multicolor = wp.customize.Control.extend({
64
  this.setting.set( newValue );
65
 
66
  if ( refresh ) {
 
67
  // Trigger the change event on the hidden field so
68
  // previewer refresh the website on Customizer
69
  this.settingField.trigger( 'change' );
 
70
  }
71
- },
 
72
 
73
  });
9
  colors = control.params.choices,
10
  keys = Object.keys( colors ),
11
  value = this.params.value,
12
+ target = control.container.find( '.iris-target' ),
13
+ i = 0,
14
+ irisInput,
15
+ irisPicker;
16
 
17
  // Proxy function that handles changing the individual colors
18
+ function kirkiMulticolorChangeHandler( control, value, subSetting ) {
19
 
20
+ var picker = control.container.find( '.multicolor-index-' + subSetting );
21
 
22
+ // Did we change the value?
23
  picker.wpColorPicker({
24
  target: target[0],
25
  change: function( event, ui ) {
26
+
27
  // Color controls require a small delay
28
  setTimeout( function() {
29
+ value[ subSetting ] = picker.val();
30
+
31
  // Set the value
32
  control.setting.set( value );
33
+
34
  // Trigger the change
35
+ control.container.find( '.multicolor-index-' + subSetting ).trigger( 'change' );
36
  }, 100 );
37
+
38
+ }
39
+
40
  });
41
 
42
  }
44
  // The hidden field that keeps the data saved (though we never update it)
45
  this.settingField = this.container.find( '[data-customize-setting-link]' ).first();
46
 
47
+ // Colors loop
48
  while ( i < Object.keys( colors ).length ) {
49
 
50
  kirkiMulticolorChangeHandler( this, value, keys[ i ] );
51
 
52
  // Move colorpicker to the 'iris-target' container div
53
+ irisInput = control.container.find( '.wp-picker-container .wp-picker-input-wrap' ),
54
+ irisPicker = control.container.find( '.wp-picker-container .wp-picker-holder' );
55
  jQuery( irisInput[0] ).detach().appendTo( target[0] );
56
  jQuery( irisPicker[0] ).detach().appendTo( target[0] );
57
 
71
  this.setting.set( newValue );
72
 
73
  if ( refresh ) {
74
+
75
  // Trigger the change event on the hidden field so
76
  // previewer refresh the website on Customizer
77
  this.settingField.trigger( 'change' );
78
+
79
  }
80
+
81
+ }
82
 
83
  });
assets/js/controls/number.js CHANGED
@@ -12,7 +12,7 @@ wp.customize.controlConstructor.number = wp.customize.Control.extend({
12
 
13
  if ( undefined !== typeof control.params.choices.min && undefined !== typeof control.params.choices.max && undefined !== typeof control.params.choices.step ) {
14
 
15
- // set minimum value
16
  jQuery( element ).spinner( 'option', 'min', control.params.choices.min );
17
 
18
  // Set maximum value
12
 
13
  if ( undefined !== typeof control.params.choices.min && undefined !== typeof control.params.choices.max && undefined !== typeof control.params.choices.step ) {
14
 
15
+ // Set minimum value
16
  jQuery( element ).spinner( 'option', 'min', control.params.choices.min );
17
 
18
  // Set maximum value
assets/js/controls/preset.js CHANGED
@@ -7,19 +7,20 @@ wp.customize.controlConstructor.preset = wp.customize.Control.extend({
7
  ready: function() {
8
 
9
  var control = this,
10
- element = this.container.find( 'select' );
 
11
 
12
- // init selectize
13
  jQuery( element ).selectize();
14
 
15
  // Trigger a change
16
  this.container.on( 'change', 'select', function() {
17
 
18
- // get the control's value
19
- var select_value = jQuery( this ).val();
20
 
21
  // Update the value using the customizer API and trigger the "save" button
22
- control.setting.set( select_value );
23
 
24
  // We have to get the choices of this control
25
  // and then start parsing them to see what we have to do for each of the choices.
@@ -27,12 +28,12 @@ wp.customize.controlConstructor.preset = wp.customize.Control.extend({
27
 
28
  // If the current value of the control is the key of the choice,
29
  // then we can continue processing, Otherwise there's no reason to do anything.
30
- if ( select_value === key ) {
31
 
32
  // Each choice has an array of settings defined in it.
33
  // We'll have to loop through them all and apply the changes needed to them.
34
- jQuery.each( value.settings, function( preset_setting, preset_setting_value ) {
35
- kirkiSetValue( preset_setting, preset_setting_value );
36
  });
37
 
38
  }
7
  ready: function() {
8
 
9
  var control = this,
10
+ element = this.container.find( 'select' ),
11
+ selectValue;
12
 
13
+ // Init selectize
14
  jQuery( element ).selectize();
15
 
16
  // Trigger a change
17
  this.container.on( 'change', 'select', function() {
18
 
19
+ // Get the control's value
20
+ selectValue = jQuery( this ).val();
21
 
22
  // Update the value using the customizer API and trigger the "save" button
23
+ control.setting.set( selectValue );
24
 
25
  // We have to get the choices of this control
26
  // and then start parsing them to see what we have to do for each of the choices.
28
 
29
  // If the current value of the control is the key of the choice,
30
  // then we can continue processing, Otherwise there's no reason to do anything.
31
+ if ( selectValue === key ) {
32
 
33
  // Each choice has an array of settings defined in it.
34
  // We'll have to loop through them all and apply the changes needed to them.
35
+ jQuery.each( value.settings, function( presetSetting, presetSettingValue ) {
36
+ kirkiSetValue( presetSetting, presetSettingValue );
37
  });
38
 
39
  }
assets/js/controls/repeater.js CHANGED
@@ -1,92 +1,78 @@
 
1
  /**
2
  * KIRKI CONTROL: REPEATER
3
  */
4
- function RepeaterRow( rowIndex, element ) {
5
- this.rowIndex = rowIndex;
6
- this.rowNumber = rowIndex + 1;
7
- this.$el = element;
8
- this.$dragger = this.$el.find( '.repeater-row-move' );
9
- this.$minimizer = this.$el.find( '.repeater-row-minimize' );
10
- this.$remover = this.$el.find( '.repeater-row-remove' );
11
- this.$number = this.$el.find( '.repeater-row-number' );
12
- this.$fields = this.$el.find( 'input,select,textarea' );
13
 
14
- var self = this;
 
 
 
 
 
 
15
 
16
- this.$minimizer.on( 'click', function() {
17
  self.toggleMinimize();
18
  });
19
 
20
- this.$remover.on( 'click', function() {
21
  self.remove();
22
  });
23
 
24
- this.$dragger.on( 'mousedown', function() {
25
- self.$el.trigger( 'row:start-dragging' );
26
  });
27
 
28
-
29
- this.$el.on( 'keyup change', 'input, select, textarea', function( e ) {
30
- self.$el.trigger( 'row:update', [ self.getRowIndex(), jQuery( e.target ).data( 'field' ), e.target ] );
31
  });
32
 
33
- this.renderNumber();
34
-
35
- }
36
-
37
- RepeaterRow.prototype.getRowIndex = function() {
38
- return this.rowIndex;
39
- };
40
-
41
- RepeaterRow.prototype.getRowNumber = function() {
42
- return this.rowNumber;
43
- };
44
-
45
- RepeaterRow.prototype.setRowNumber = function( rowNumber ) {
46
- this.rowNumber = rowNumber;
47
- this.renderNumber();
48
- };
49
-
50
- RepeaterRow.prototype.getElement = function() {
51
- return this.$el;
52
- };
53
 
54
- RepeaterRow.prototype.setRowIndex = function( rowIndex ) {
55
- this.rowIndex = rowIndex;
56
- this.$el.attr( 'data-row', rowIndex );
57
- this.$el.data( 'row', rowIndex );
58
- };
59
 
60
- RepeaterRow.prototype.toggleMinimize = function() {
61
- // Store the previous state
62
- this.$el.toggleClass( 'minimized' );
63
- this.$minimizer.find( '.repeater-minimize' ).toggleClass( 'dashicons-arrow-up' );
64
- this.$minimizer.find( '.repeater-minimize').toggleClass( 'dashicons-arrow-down' );
65
- };
66
 
67
- RepeaterRow.prototype.minimize = function() {
68
- this.$el.addClass( 'minimized' );
69
- this.$minimizer.find( '.repeater-minimize' ).removeClass( 'dashicons-arrow-up' );
70
- this.$minimizer.find( '.repeater-minimize').addClass( 'dashicons-arrow-down' );
71
- };
72
-
73
- RepeaterRow.prototype.remove = function() {
74
- // TODO: make this translatable
75
- if ( confirm( "Are you sure?" ) ) {
76
- this.$el.slideUp( 300, function() {
77
  jQuery( this ).detach();
78
  });
79
- this.$el.trigger( 'row:remove', [ this.getRowIndex() ] );
80
- }
81
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
- RepeaterRow.prototype.renderNumber = function() {
84
- this.$number.text( this.getRowNumber() );
85
  };
86
 
87
  wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
88
  ready: function() {
89
- var control = this;
 
 
90
 
91
  // The current value set in Control Class (set in Kirki_Customize_Repeater_Control::to_json() function)
92
  var settingValue = this.params.value;
@@ -107,16 +93,16 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
107
  this.rows = [];
108
 
109
  // Default limit choice
110
- var limit = false;
111
  if ( undefined !== this.params.choices.limit ) {
112
- var limit = ( 0 >= this.params.choices.limit ) ? false : parseInt(this.params.choices.limit);
113
  }
114
 
115
  this.container.on( 'click', 'button.repeater-add', function( e ) {
116
  e.preventDefault();
117
  if ( ! limit || control.currentIndex < limit ) {
118
- control.addRow();
119
- jQuery( control.selector + ' .repeater-row' ).last().toggleClass( 'minimized' );
120
  } else {
121
  jQuery( control.selector + ' .limit' ).addClass( 'highlight' );
122
  }
@@ -129,16 +115,16 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
129
  }
130
  });
131
 
132
- this.container.on( 'click keypress', '.repeater-field-image .upload-button,.repeater-field-cropped_image .upload-button', function ( e ) {
133
  e.preventDefault();
134
  control.$thisButton = jQuery( this );
135
  control.openFrame( e );
136
  });
137
 
138
- this.container.on( 'click keypress', '.repeater-field-image .remove-button,.repeater-field-cropped_image .remove-button', function ( e ) {
139
  e.preventDefault();
140
- control.$thisButton = jQuery(this);
141
- control.removeImage(e);
142
  });
143
 
144
  /**
@@ -168,13 +154,16 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
168
  // When we load the control, the fields have not been filled up
169
  // This is the first time that we create all the rows
170
  if ( settingValue.length ) {
171
- for ( var i = 0; i < settingValue.length; i++ ) {
172
- control.addRow( settingValue[ i ] );
173
- }
174
  }
175
 
 
 
 
176
  this.repeaterFieldsContainer.sortable({
177
- handle: ".repeater-row-move",
178
  update: function( e, ui ) {
179
  control.sort();
180
  }
@@ -200,7 +189,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
200
  this.frame.open();
201
  },
202
 
203
- initFrame : function() {
204
 
205
  this.frame = wp.media({
206
  states: [
@@ -219,24 +208,28 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
219
  * Create a media modal select frame, and store it so the instance can be reused when needed.
220
  * This is mostly a copy/paste of Core api.CroppedImageControl in /wp-admin/js/customize-control.js
221
  */
222
- initCropperFrame : function() {
223
 
224
  // We get the field id from which this was called
225
- var currentFieldId = this.$thisButton.siblings( 'input.hidden-field' ).attr( 'data-field' );
 
 
226
  // Make sure we got it
227
  if ( 'string' === typeof currentFieldId && '' !== currentFieldId ) {
 
228
  // Make fields is defined and only do the hack for cropped_image
229
  if ( 'object' === typeof this.params.fields[ currentFieldId ] && 'cropped_image' === this.params.fields[ currentFieldId ].type ) {
230
- // A list of attributes to look for
231
- var attrs = [ 'width' , 'height' , 'flex_width' , 'flex_height' ];
232
  //Iterate over the list of attributes
233
- attrs.forEach( function( el , index ) {
 
234
  // If the attribute exists in the field
235
  if ( 'undefined' !== typeof this.params.fields[ currentFieldId ][ el ] ) {
 
236
  // Set the attribute in the main object
237
  this.params[ el ] = this.params.fields[ currentFieldId ][ el ];
238
  }
239
- }.bind(this));
240
  }
241
  }
242
 
@@ -266,7 +259,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
266
 
267
  },
268
 
269
- onSelect : function() {
270
  var attachment = this.frame.state().get( 'selection' ).first().toJSON();
271
 
272
  this.setImageInReaperField( attachment );
@@ -409,7 +402,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
409
  setImageInReaperField: function( attachment ) {
410
  var $targetDiv = this.$thisButton.closest( '.repeater-field-image,.repeater-field-cropped_image' );
411
 
412
- $targetDiv.find( '.kirki-image-attachment' ).html( '<img src="'+ attachment.url +'">' ).hide().slideDown( 'slow' );
413
 
414
  $targetDiv.find( '.hidden-field' ).val( attachment.id );
415
  this.$thisButton.text( this.$thisButton.data( 'alt-label' ) );
@@ -420,16 +413,19 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
420
  this.frame.close();
421
  },
422
 
423
- removeImage : function( event ) {
 
 
 
424
  if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
425
  return;
426
  }
427
 
428
- var $targetDiv = this.$thisButton.closest( '.repeater-field-image' );
429
- var $uploadButton = $targetDiv.find( '.upload-button' );
430
 
431
  $targetDiv.find( '.kirki-image-attachment' ).slideUp( 'fast', function() {
432
- jQuery(this).show().html( jQuery(this).data( 'placeholder' ) );
433
  });
434
  $targetDiv.find( '.hidden-field' ).val( '' );
435
  $uploadButton.text( $uploadButton.data( 'label' ) );
@@ -444,8 +440,10 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
444
  * @return Object
445
  */
446
  getValue: function() {
 
447
  // The setting is saved in JSON
448
  return JSON.parse( decodeURI( this.setting.get() ) );
 
449
  },
450
 
451
  /**
@@ -454,14 +452,37 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
454
  * @param newValue Object
455
  * @param refresh If we want to refresh the previewer or not
456
  */
457
- setValue: function( newValue, refresh ) {
458
- this.setting.set( encodeURI( JSON.stringify( newValue ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
459
 
460
  if ( refresh ) {
 
461
  // Trigger the change event on the hidden field so
462
  // previewer refresh the website on Customizer
463
- this.settingField.trigger('change');
 
464
  }
 
465
  },
466
 
467
  /**
@@ -472,14 +493,11 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
472
  addRow: function( data ) {
473
  var control = this,
474
  i,
475
- // The template for the new row (defined on Kirki_Customize_Repeater_Control::render_content() )
476
- template = control.repeaterTemplate(),
477
- // Get the current setting value
478
- settingValue = this.getValue(),
479
- // Saves the new setting data
480
- newRowSetting = {},
481
- // Data to pass to the template
482
- templateData;
483
 
484
  if ( template ) {
485
 
@@ -492,38 +510,30 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
492
  if ( data ) {
493
  for ( i in data ) {
494
  if ( data.hasOwnProperty( i ) && templateData.hasOwnProperty( i ) ) {
495
- templateData[ i ].default = data[ i ];
496
  }
497
  }
498
  }
499
 
500
  templateData.index = this.currentIndex;
501
- templateData.ControlId = this.id;
502
 
503
  // Append the template content
504
  template = template( templateData );
505
 
506
  // Create a new row object and append the element
507
- var newRow = new RepeaterRow(
508
  control.currentIndex,
509
- jQuery( template ).appendTo( control.repeaterFieldsContainer )
 
510
  );
511
 
512
- newRow.getElement().one( 'row:remove', function( e, rowIndex ) {
513
  control.deleteRow( rowIndex );
514
  });
515
 
516
- newRow.getElement().on( 'row:update', function( e, rowIndex, fieldName, element ) {
517
  control.updateField.call( control, e, rowIndex, fieldName, element );
518
- });
519
-
520
- newRow.getElement().on( 'row:start-dragging', function() {
521
- // Minimize all rows
522
- for ( i in control.rows ) {
523
- if ( control.rows.hasOwnProperty( i ) && control.rows[ i ] ) {
524
- control.rows[ i ].minimize();
525
- }
526
- }
527
  });
528
 
529
  // Add the row to rows collection
@@ -531,7 +541,7 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
531
 
532
  for ( i in templateData ) {
533
  if ( templateData.hasOwnProperty( i ) ) {
534
- newRowSetting[ i ] = templateData[ i ].default;
535
  }
536
  }
537
 
@@ -540,26 +550,27 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
540
 
541
  this.currentIndex++;
542
 
 
 
543
  }
544
 
545
  },
546
 
547
  sort: function() {
548
- var control = this;
549
- var $rows = this.repeaterFieldsContainer.find( '.repeater-row' );
550
- var newOrder = [];
 
 
 
551
 
552
  $rows.each( function( i, element ) {
553
  newOrder.push( jQuery( element ).data( 'row' ) );
554
  });
555
 
556
- var settings = control.getValue();
557
- var newRows = [];
558
- var newSettings = [];
559
  jQuery.each( newOrder, function( newPosition, oldPosition ) {
560
  newRows[ newPosition ] = control.rows[ oldPosition ];
561
  newRows[ newPosition ].setRowIndex( newPosition );
562
- newRows[ newPosition ].setRowNumber( newPosition + 1 );
563
 
564
  newSettings[ newPosition ] = settings[ oldPosition ];
565
  });
@@ -574,12 +585,17 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
574
  * @param index Position of the row in the complete Setting Array
575
  */
576
  deleteRow: function( index ) {
577
- var currentSettings = this.getValue();
 
 
 
578
 
579
  if ( currentSettings[ index ] ) {
 
580
  // Find the row
581
- var row = this.rows[ index ];
582
  if ( row ) {
 
583
  // The row exists, let's delete it
584
 
585
  // Remove the row settings
@@ -590,14 +606,16 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
590
 
591
  // Update the new setting values
592
  this.setValue( currentSettings, true );
 
593
  }
 
594
  }
595
 
596
  // Remap the row numbers
597
- var i = 1;
598
- for ( var prop in this.rows ) {
599
  if ( this.rows.hasOwnProperty( prop ) && this.rows[ prop ] ) {
600
- this.rows[ prop ].setRowNumber( i );
601
  i++;
602
  }
603
  }
@@ -610,27 +628,37 @@ wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
610
  * @param e Event Object
611
  */
612
  updateField: function( e, rowIndex, fieldId, element ) {
613
- if ( ! this.rows[ rowIndex ] )
 
 
 
 
614
  return;
 
615
 
616
- if ( ! this.params.fields[ fieldId ] )
617
  return;
 
618
 
619
- var type = this.params.fields[ fieldId].type;
620
- var row = this.rows[ rowIndex ];
621
- var currentSettings = this.getValue();
622
 
623
  element = jQuery( element );
624
 
625
- if ( undefined === typeof currentSettings[ row.getRowIndex() ][ fieldId ] ) {
626
  return;
627
  }
628
 
629
  if ( 'checkbox' === type ) {
630
- currentSettings[ row.getRowIndex() ][ fieldId ] = element.is( ':checked' );
 
 
631
  } else {
 
632
  // Update the settings
633
- currentSettings[ row.getRowIndex() ][ fieldId ] = element.val();
 
634
  }
635
 
636
  this.setValue( currentSettings, true );
1
+ /*jshint -W065 */
2
  /**
3
  * KIRKI CONTROL: REPEATER
4
  */
 
 
 
 
 
 
 
 
 
5
 
6
+ var RepeaterRow = function( rowIndex, container, label ) {
7
+ var self = this;
8
+
9
+ this.rowIndex = rowIndex;
10
+ this.container = container;
11
+ this.label = label;
12
+ this.header = this.container.find( '.repeater-row-header' ),
13
 
14
+ this.header.on( 'click', function() {
15
  self.toggleMinimize();
16
  });
17
 
18
+ this.container.on( 'click', '.repeater-row-remove', function() {
19
  self.remove();
20
  });
21
 
22
+ this.header.on( 'mousedown', function() {
23
+ self.container.trigger( 'row:start-dragging' );
24
  });
25
 
26
+ this.container.on( 'keyup change', 'input, select, textarea', function( e ) {
27
+ self.container.trigger( 'row:update', [ self.rowIndex, jQuery( e.target ).data( 'field' ), e.target ] );
 
28
  });
29
 
30
+ this.setRowIndex = function( rowIndex ) {
31
+ this.rowIndex = rowIndex;
32
+ this.container.attr( 'data-row', rowIndex );
33
+ this.container.data( 'row', rowIndex );
34
+ this.updateLabel();
35
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
+ this.toggleMinimize = function() {
 
 
 
 
38
 
39
+ // Store the previous state.
40
+ this.container.toggleClass( 'minimized' );
41
+ this.header.find( '.dashicons' ).toggleClass( 'dashicons-arrow-up' ).toggleClass( 'dashicons-arrow-down' );
42
+ };
 
 
43
 
44
+ this.remove = function() {
45
+ this.container.slideUp( 300, function() {
 
 
 
 
 
 
 
 
46
  jQuery( this ).detach();
47
  });
48
+ this.container.trigger( 'row:remove', [ this.rowIndex ] );
49
+ };
50
+
51
+ this.updateLabel = function() {
52
+ var rowLabelField,
53
+ rowLabel;
54
+
55
+ if ( 'field' === this.label.type ) {
56
+ rowLabelField = this.container.find( '.repeater-field [data-field="' + this.label.field + '"]' );
57
+ if ( 'function' === typeof rowLabelField.val ) {
58
+ rowLabel = rowLabelField.val();
59
+ if ( '' !== rowLabel ) {
60
+ this.header.find( '.repeater-row-label' ).text( rowLabel );
61
+ return;
62
+ }
63
+ }
64
+ }
65
+ this.header.find( '.repeater-row-label' ).text( this.label.value + ' ' + ( this.rowIndex + 1 ) );
66
+ };
67
 
68
+ this.updateLabel();
 
69
  };
70
 
71
  wp.customize.controlConstructor.repeater = wp.customize.Control.extend({
72
  ready: function() {
73
+ var control = this,
74
+ limit,
75
+ theNewRow;
76
 
77
  // The current value set in Control Class (set in Kirki_Customize_Repeater_Control::to_json() function)
78
  var settingValue = this.params.value;
93
  this.rows = [];
94
 
95
  // Default limit choice
96
+ limit = false;
97
  if ( undefined !== this.params.choices.limit ) {
98
+ limit = ( 0 >= this.params.choices.limit ) ? false : parseInt( this.params.choices.limit );
99
  }
100
 
101
  this.container.on( 'click', 'button.repeater-add', function( e ) {
102
  e.preventDefault();
103
  if ( ! limit || control.currentIndex < limit ) {
104
+ theNewRow = control.addRow();
105
+ theNewRow.toggleMinimize();
106
  } else {
107
  jQuery( control.selector + ' .limit' ).addClass( 'highlight' );
108
  }
115
  }
116
  });
117
 
118
+ this.container.on( 'click keypress', '.repeater-field-image .upload-button,.repeater-field-cropped_image .upload-button', function( e ) {
119
  e.preventDefault();
120
  control.$thisButton = jQuery( this );
121
  control.openFrame( e );
122
  });
123
 
124
+ this.container.on( 'click keypress', '.repeater-field-image .remove-button,.repeater-field-cropped_image .remove-button', function( e ) {
125
  e.preventDefault();
126
+ control.$thisButton = jQuery( this );
127
+ control.removeImage( e );
128
  });
129
 
130
  /**
154
  // When we load the control, the fields have not been filled up
155
  // This is the first time that we create all the rows
156
  if ( settingValue.length ) {
157
+ _.each( settingValue, function( subValue ) {
158
+ control.addRow( subValue );
159
+ });
160
  }
161
 
162
+ // Once we have displayed the rows, we cleanup the values
163
+ this.setValue( settingValue, true, true );
164
+
165
  this.repeaterFieldsContainer.sortable({
166
+ handle: '.repeater-row-header',
167
  update: function( e, ui ) {
168
  control.sort();
169
  }
189
  this.frame.open();
190
  },
191
 
192
+ initFrame: function() {
193
 
194
  this.frame = wp.media({
195
  states: [
208
  * Create a media modal select frame, and store it so the instance can be reused when needed.
209
  * This is mostly a copy/paste of Core api.CroppedImageControl in /wp-admin/js/customize-control.js
210
  */
211
+ initCropperFrame: function() {
212
 
213
  // We get the field id from which this was called
214
+ var currentFieldId = this.$thisButton.siblings( 'input.hidden-field' ).attr( 'data-field' ),
215
+ attrs = [ 'width', 'height', 'flex_width', 'flex_height' ]; // A list of attributes to look for
216
+
217
  // Make sure we got it
218
  if ( 'string' === typeof currentFieldId && '' !== currentFieldId ) {
219
+
220
  // Make fields is defined and only do the hack for cropped_image
221
  if ( 'object' === typeof this.params.fields[ currentFieldId ] && 'cropped_image' === this.params.fields[ currentFieldId ].type ) {
222
+
 
223
  //Iterate over the list of attributes
224
+ attrs.forEach( function( el, index ) {
225
+
226
  // If the attribute exists in the field
227
  if ( 'undefined' !== typeof this.params.fields[ currentFieldId ][ el ] ) {
228
+
229
  // Set the attribute in the main object
230
  this.params[ el ] = this.params.fields[ currentFieldId ][ el ];
231
  }
232
+ }.bind( this ) );
233
  }
234
  }
235
 
259
 
260
  },
261
 
262
+ onSelect: function() {
263
  var attachment = this.frame.state().get( 'selection' ).first().toJSON();
264
 
265
  this.setImageInReaperField( attachment );
402
  setImageInReaperField: function( attachment ) {
403
  var $targetDiv = this.$thisButton.closest( '.repeater-field-image,.repeater-field-cropped_image' );
404
 
405
+ $targetDiv.find( '.kirki-image-attachment' ).html( '<img src="' + attachment.url + '">' ).hide().slideDown( 'slow' );
406
 
407
  $targetDiv.find( '.hidden-field' ).val( attachment.id );
408
  this.$thisButton.text( this.$thisButton.data( 'alt-label' ) );
413
  this.frame.close();
414
  },
415
 
416
+ removeImage: function( event ) {
417
+ var $targetDiv,
418
+ $uploadButton;
419
+
420
  if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {
421
  return;
422
  }
423
 
424
+ $targetDiv = this.$thisButton.closest( '.repeater-field-image' );
425
+ $uploadButton = $targetDiv.find( '.upload-button' );
426
 
427
  $targetDiv.find( '.kirki-image-attachment' ).slideUp( 'fast', function() {
428
+ jQuery( this ).show().html( jQuery( this ).data( 'placeholder' ) );
429
  });
430
  $targetDiv.find( '.hidden-field' ).val( '' );
431
  $uploadButton.text( $uploadButton.data( 'label' ) );
440
  * @return Object
441
  */
442
  getValue: function() {
443
+
444
  // The setting is saved in JSON
445
  return JSON.parse( decodeURI( this.setting.get() ) );
446
+
447
  },
448
 
449
  /**
452
  * @param newValue Object
453
  * @param refresh If we want to refresh the previewer or not
454
  */
455
+ setValue: function( newValue, refresh, filtering ) {
456
+
457
+ // 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
458
+ var filteredValue = newValue;
459
+ var filter = [];
460
+
461
+ if ( filtering ) {
462
+ jQuery.each( this.params.fields, function( index, value ) {
463
+ if ( 'image' === value.type || 'cropped_image' === value.type ) {
464
+ filter.push( index );
465
+ }
466
+ });
467
+ jQuery.each( newValue, function( index, value ) {
468
+ jQuery.each( filter, function( ind, field ) {
469
+ if ( 'undefined' !== typeof value[field] && 'undefined' !== typeof value[field].id ) {
470
+ filteredValue[index][field] = value[field].id;
471
+ }
472
+ });
473
+ });
474
+ }
475
+
476
+ this.setting.set( encodeURI( JSON.stringify( filteredValue ) ) );
477
 
478
  if ( refresh ) {
479
+
480
  // Trigger the change event on the hidden field so
481
  // previewer refresh the website on Customizer
482
+ this.settingField.trigger( 'change' );
483
+
484
  }
485
+
486
  },
487
 
488
  /**
493
  addRow: function( data ) {
494
  var control = this,
495
  i,
496
+ template = control.repeaterTemplate(), // The template for the new row (defined on Kirki_Customize_Repeater_Control::render_content() ).
497
+ settingValue = this.getValue(), // Get the current setting value.
498
+ newRowSetting = {}, // Saves the new setting data.
499
+ templateData, // Data to pass to the template
500
+ newRow;
 
 
 
501
 
502
  if ( template ) {
503
 
510
  if ( data ) {
511
  for ( i in data ) {
512
  if ( data.hasOwnProperty( i ) && templateData.hasOwnProperty( i ) ) {
513
+ templateData[ i ]['default'] = data[ i ];
514
  }
515
  }
516
  }
517
 
518
  templateData.index = this.currentIndex;
 
519
 
520
  // Append the template content
521
  template = template( templateData );
522
 
523
  // Create a new row object and append the element
524
+ newRow = new RepeaterRow(
525
  control.currentIndex,
526
+ jQuery( template ).appendTo( control.repeaterFieldsContainer ),
527
+ control.params.row_label
528
  );
529
 
530
+ newRow.container.on( 'row:remove', function( e, rowIndex ) {
531
  control.deleteRow( rowIndex );
532
  });
533
 
534
+ newRow.container.on( 'row:update', function( e, rowIndex, fieldName, element ) {
535
  control.updateField.call( control, e, rowIndex, fieldName, element );
536
+ newRow.updateLabel();
 
 
 
 
 
 
 
 
537
  });
538
 
539
  // Add the row to rows collection
541
 
542
  for ( i in templateData ) {
543
  if ( templateData.hasOwnProperty( i ) ) {
544
+ newRowSetting[ i ] = templateData[ i ]['default'];
545
  }
546
  }
547
 
550
 
551
  this.currentIndex++;
552
 
553
+ return newRow;
554
+
555
  }
556
 
557
  },
558
 
559
  sort: function() {
560
+ var control = this,
561
+ $rows = this.repeaterFieldsContainer.find( '.repeater-row' ),
562
+ newOrder = [],
563
+ settings = control.getValue(),
564
+ newRows = [],
565
+ newSettings = [];
566
 
567
  $rows.each( function( i, element ) {
568
  newOrder.push( jQuery( element ).data( 'row' ) );
569
  });
570
 
 
 
 
571
  jQuery.each( newOrder, function( newPosition, oldPosition ) {
572
  newRows[ newPosition ] = control.rows[ oldPosition ];
573
  newRows[ newPosition ].setRowIndex( newPosition );
 
574
 
575
  newSettings[ newPosition ] = settings[ oldPosition ];
576
  });
585
  * @param index Position of the row in the complete Setting Array
586
  */
587
  deleteRow: function( index ) {
588
+ var currentSettings = this.getValue(),
589
+ row,
590
+ i,
591
+ prop;
592
 
593
  if ( currentSettings[ index ] ) {
594
+
595
  // Find the row
596
+ row = this.rows[ index ];
597
  if ( row ) {
598
+
599
  // The row exists, let's delete it
600
 
601
  // Remove the row settings
606
 
607
  // Update the new setting values
608
  this.setValue( currentSettings, true );
609
+
610
  }
611
+
612
  }
613
 
614
  // Remap the row numbers
615
+ i = 1;
616
+ for ( prop in this.rows ) {
617
  if ( this.rows.hasOwnProperty( prop ) && this.rows[ prop ] ) {
618
+ this.rows[ prop ].updateLabel();
619
  i++;
620
  }
621
  }
628
  * @param e Event Object
629
  */
630
  updateField: function( e, rowIndex, fieldId, element ) {
631
+ var type,
632
+ row,
633
+ currentSettings;
634
+
635
+ if ( ! this.rows[ rowIndex ] ) {
636
  return;
637
+ }
638
 
639
+ if ( ! this.params.fields[ fieldId ] ) {
640
  return;
641
+ }
642
 
643
+ type = this.params.fields[ fieldId].type;
644
+ row = this.rows[ rowIndex ];
645
+ currentSettings = this.getValue();
646
 
647
  element = jQuery( element );
648
 
649
+ if ( undefined === typeof currentSettings[ row.rowIndex ][ fieldId ] ) {
650
  return;
651
  }
652
 
653
  if ( 'checkbox' === type ) {
654
+
655
+ currentSettings[ row.rowIndex ][ fieldId ] = element.is( ':checked' );
656
+
657
  } else {
658
+
659
  // Update the settings
660
+ currentSettings[ row.rowIndex ][ fieldId ] = element.val();
661
+
662
  }
663
 
664
  this.setValue( currentSettings, true );
assets/js/controls/select.js CHANGED
@@ -1,3 +1,4 @@
 
1
  /**
2
  * KIRKI CONTROL: KIRKI-SELECT
3
  */
@@ -7,7 +8,8 @@ wp.customize.controlConstructor['kirki-select'] = wp.customize.Control.extend({
7
 
8
  var control = this,
9
  element = this.container.find( 'select' ),
10
- multiple = parseInt( element.data( 'multiple' ) );
 
11
 
12
  // If this is a multi-select control,
13
  // then we'll need to initialize selectize using the appropriate arguments.
@@ -23,13 +25,16 @@ wp.customize.controlConstructor['kirki-select'] = wp.customize.Control.extend({
23
 
24
  // Change value
25
  this.container.on( 'change', 'select', function() {
 
 
 
26
  // If this is a multi-select, then we need to convert the value to an object.
27
  if ( multiple > 1 ) {
28
- var select_value = kirkiArrayToObject( jQuery( this ).val() );
29
- } else {
30
- var select_value = jQuery( this ).val();
31
  }
32
- control.setting.set( select_value );
 
 
33
  });
34
 
35
  }
1
+ /*jshint -W065 */
2
  /**
3
  * KIRKI CONTROL: KIRKI-SELECT
4
  */
8
 
9
  var control = this,
10
  element = this.container.find( 'select' ),
11
+ multiple = parseInt( element.data( 'multiple' ) ),
12
+ selectValue;
13
 
14
  // If this is a multi-select control,
15
  // then we'll need to initialize selectize using the appropriate arguments.
25
 
26
  // Change value
27
  this.container.on( 'change', 'select', function() {
28
+
29
+ selectValue = jQuery( this ).val();
30
+
31
  // If this is a multi-select, then we need to convert the value to an object.
32
  if ( multiple > 1 ) {
33
+ selectValue = kirkiArrayToObject( jQuery( this ).val() );
 
 
34
  }
35
+
36
+ control.setting.set( selectValue );
37
+
38
  });
39
 
40
  }
assets/js/controls/slider.js CHANGED
@@ -1,28 +1,29 @@
1
  /**
2
  * KIRKI CONTROL: SLIDER
3
  */
4
- jQuery(document).ready(function($) {
5
 
6
  // Update the text value
7
- $( 'input[type=range]' ).on( 'mousedown', function() {
8
 
9
- value = $( this ).attr( 'value' );
10
- $( this ).mousemove(function() {
11
- value = $( this ).attr( 'value' );
12
- $( this ).closest( 'label' ).find( '.kirki_range_value .value' ).text( value );
 
13
  });
14
 
15
  });
16
 
17
  // Handle the reset button
18
- $( '.kirki-slider-reset' ).click( function () {
19
 
20
- var $this_input = $( this ).closest( 'label' ).find( 'input' ),
21
- input_default = $this_input.data( 'reset_value' );
22
 
23
- $this_input.val( input_default );
24
- $this_input.change();
25
- $( this ).closest( 'label' ).find( '.kirki_range_value .value' ).text( input_default );
26
 
27
  });
28
 
1
  /**
2
  * KIRKI CONTROL: SLIDER
3
  */
4
+ jQuery( document ).ready(function() {
5
 
6
  // Update the text value
7
+ jQuery( 'input[type=range]' ).on( 'mousedown', function() {
8
 
9
+ var value = jQuery( this ).attr( 'value' );
10
+
11
+ jQuery( this ).mousemove(function() {
12
+ value = jQuery( this ).attr( 'value' );
13
+ jQuery( this ).closest( 'label' ).find( '.kirki_range_value .value' ).text( value );
14
  });
15
 
16
  });
17
 
18
  // Handle the reset button
19
+ jQuery( '.kirki-slider-reset' ).click( function() {
20
 
21
+ var thisInput = jQuery( this ).closest( 'label' ).find( 'input' ),
22
+ inputDefault = thisInput.data( 'reset_value' );
23
 
24
+ thisInput.val( inputDefault );
25
+ thisInput.change();
26
+ jQuery( this ).closest( 'label' ).find( '.kirki_range_value .value' ).text( inputDefault );
27
 
28
  });
29
 
assets/js/controls/sortable.js CHANGED
@@ -7,27 +7,26 @@ wp.customize.controlConstructor.sortable = wp.customize.Control.extend({
7
  var control = this;
8
 
9
  // The hidden field that keeps the data saved
10
- this.settingField = this.container.find('[data-customize-setting-link]').first();
11
 
12
  // The sortable container
13
- this.sortableContainer = this.container.find( 'ul.sortable').first();
14
 
15
  // Set the field value for the first time
16
  this.setValue( this.setting.get(), false );
17
 
18
-
19
  // Init the sortable container
20
  this.sortableContainer.sortable()
21
  .disableSelection()
22
- .on("sortstop", function(event, ui) {
23
  control.sort();
24
  })
25
- .find('li').each(function() {
26
- jQuery(this).find('i.visibility').click(function() {
27
- jQuery(this).toggleClass('dashicons-visibility-faint').parents('li:eq(0)').toggleClass('invisible');
28
  });
29
  })
30
- .click(function() {
31
  control.sort();
32
  });
33
  },
@@ -38,9 +37,9 @@ wp.customize.controlConstructor.sortable = wp.customize.Control.extend({
38
  sort: function() {
39
  var newValue = [];
40
  this.sortableContainer.find( 'li' ).each( function() {
41
- var $this = jQuery(this);
42
  if ( ! $this.is( '.invisible' ) ) {
43
- newValue.push( $this.data('value' ) );
44
  }
45
  });
46
 
@@ -53,8 +52,10 @@ wp.customize.controlConstructor.sortable = wp.customize.Control.extend({
53
  * @return Object
54
  */
55
  getValue: function() {
 
56
  // The setting is saved in PHP serialized format
57
  return unserialize( this.setting.get() );
 
58
  },
59
 
60
  /**
@@ -64,17 +65,21 @@ wp.customize.controlConstructor.sortable = wp.customize.Control.extend({
64
  * @param refresh If we want to refresh the previewer or not
65
  */
66
  setValue: function( newValue, refresh ) {
67
- newValue = serialize( newValue );
68
- this.setting.set( newValue );
 
69
 
70
  // Update the hidden field
71
- this.settingField.val( newValue );
72
 
73
  if ( refresh ) {
 
74
  // Trigger the change event on the hidden field so
75
  // previewer refresh the website on Customizer
76
- this.settingField.trigger('change');
 
77
  }
 
78
  }
79
 
80
  });
7
  var control = this;
8
 
9
  // The hidden field that keeps the data saved
10
+ this.settingField = this.container.find( '[data-customize-setting-link]' ).first();
11
 
12
  // The sortable container
13
+ this.sortableContainer = this.container.find( 'ul.sortable' ).first();
14
 
15
  // Set the field value for the first time
16
  this.setValue( this.setting.get(), false );
17
 
 
18
  // Init the sortable container
19
  this.sortableContainer.sortable()
20
  .disableSelection()
21
+ .on( 'sortstop', function( event, ui ) {
22
  control.sort();
23
  })
24
+ .find( 'li' ).each(function() {
25
+ jQuery( this ).find( 'i.visibility' ).click( function() {
26
+ jQuery( this ).toggleClass( 'dashicons-visibility-faint' ).parents( 'li:eq(0)' ).toggleClass( 'invisible' );
27
  });
28
  })
29
+ .click( function() {
30
  control.sort();
31
  });
32
  },
37
  sort: function() {
38
  var newValue = [];
39
  this.sortableContainer.find( 'li' ).each( function() {
40
+ var $this = jQuery( this );
41
  if ( ! $this.is( '.invisible' ) ) {
42
+ newValue.push( $this.data( 'value' ) );
43
  }
44
  });
45
 
52
  * @return Object
53
  */
54
  getValue: function() {
55
+
56
  // The setting is saved in PHP serialized format
57
  return unserialize( this.setting.get() );
58
+
59
  },
60
 
61
  /**
65
  * @param refresh If we want to refresh the previewer or not
66
  */
67
  setValue: function( newValue, refresh ) {
68
+
69
+ var newValueSerialized = serialize( newValue );
70
+ this.setting.set( newValueSerialized );
71
 
72
  // Update the hidden field
73
+ this.settingField.val( newValueSerialized );
74
 
75
  if ( refresh ) {
76
+
77
  // Trigger the change event on the hidden field so
78
  // previewer refresh the website on Customizer
79
+ this.settingField.trigger( 'change' );
80
+
81
  }
82
+
83
  }
84
 
85
  });
assets/js/controls/spacing.js CHANGED
@@ -6,34 +6,43 @@ wp.customize.controlConstructor.spacing = wp.customize.Control.extend({
6
  ready: function() {
7
 
8
  var control = this,
9
- compiled_value = {};
10
 
11
  jQuery.each( ['top', 'bottom', 'left', 'right'], function( index, dimension ) {
12
 
13
- // get initial values and pre-populate the object
14
  if ( control.container.has( '.' + dimension ).size() ) {
15
- compiled_value[ dimension ] = control.setting._value[ dimension ];
16
- // Validate the value and show a warning if it's invalid
 
 
17
  jQuery( control.selector + ' .' + dimension + '.input-wrapper' ).removeClass( 'invalid' );
18
  if ( false === kirkiValidateCSSValue( control.setting._value[ dimension ] ) ) {
19
  jQuery( control.selector + ' .' + dimension + '.input-wrapper' ).addClass( 'invalid' );
20
  }
 
21
  }
22
 
23
  if ( control.container.has( '.' + dimension ).size() ) {
24
 
25
  control.container.on( 'change keyup paste', '.' + dimension + ' input', function() {
26
 
27
- subValue = jQuery( this ).val();
28
- // Validate the value and show a warning if it's invalid
 
29
  if ( false === kirkiValidateCSSValue( subValue ) ) {
 
30
  jQuery( control.selector + ' .' + dimension + '.input-wrapper' ).addClass( 'invalid' );
 
31
  } else {
 
32
  jQuery( control.selector + ' .' + dimension + '.input-wrapper' ).removeClass( 'invalid' );
33
- // only proceed if value is valid
34
- compiled_value[ dimension ] = subValue;
35
- control.setting.set( compiled_value );
 
36
  wp.customize.previewer.refresh();
 
37
  }
38
 
39
  });
6
  ready: function() {
7
 
8
  var control = this,
9
+ compiledValue = {};
10
 
11
  jQuery.each( ['top', 'bottom', 'left', 'right'], function( index, dimension ) {
12
 
13
+ // Get initial values and pre-populate the object.
14
  if ( control.container.has( '.' + dimension ).size() ) {
15
+
16
+ compiledValue[ dimension ] = control.setting._value[ dimension ];
17
+
18
+ // Validate the value and show a warning if it's invalid.
19
  jQuery( control.selector + ' .' + dimension + '.input-wrapper' ).removeClass( 'invalid' );
20
  if ( false === kirkiValidateCSSValue( control.setting._value[ dimension ] ) ) {
21
  jQuery( control.selector + ' .' + dimension + '.input-wrapper' ).addClass( 'invalid' );
22
  }
23
+
24
  }
25
 
26
  if ( control.container.has( '.' + dimension ).size() ) {
27
 
28
  control.container.on( 'change keyup paste', '.' + dimension + ' input', function() {
29
 
30
+ var subValue = jQuery( this ).val();
31
+
32
+ // Validate the value and show a warning if it's invalid.
33
  if ( false === kirkiValidateCSSValue( subValue ) ) {
34
+
35
  jQuery( control.selector + ' .' + dimension + '.input-wrapper' ).addClass( 'invalid' );
36
+
37
  } else {
38
+
39
  jQuery( control.selector + ' .' + dimension + '.input-wrapper' ).removeClass( 'invalid' );
40
+
41
+ // Only proceed if value is valid.
42
+ compiledValue[ dimension ] = subValue;
43
+ control.setting.set( compiledValue );
44
  wp.customize.previewer.refresh();
45
+
46
  }
47
 
48
  });
assets/js/controls/switch.js CHANGED
@@ -1,19 +1,19 @@
1
  /**
2
  * KIRKI CONTROL: SWITCH
3
  */
4
- wp.customize.controlConstructor.switch = wp.customize.Control.extend({
5
 
6
  ready: function() {
7
 
8
  var control = this;
9
 
10
  // Get the initial value
11
- var checkbox_value = control.setting._value;
12
 
13
  // Save the value
14
  this.container.on( 'change', 'input', function() {
15
- checkbox_value = ( jQuery( this ).is( ':checked' ) ) ? true : false;
16
- control.setting.set( checkbox_value );
17
  });
18
 
19
  }
1
  /**
2
  * KIRKI CONTROL: SWITCH
3
  */
4
+ wp.customize.controlConstructor['switch'] = wp.customize.Control.extend({
5
 
6
  ready: function() {
7
 
8
  var control = this;
9
 
10
  // Get the initial value
11
+ var checkboxValue = control.setting._value;
12
 
13
  // Save the value
14
  this.container.on( 'change', 'input', function() {
15
+ checkboxValue = ( jQuery( this ).is( ':checked' ) ) ? true : false;
16
+ control.setting.set( checkboxValue );
17
  });
18
 
19
  }
assets/js/controls/toggle.js CHANGED
@@ -8,12 +8,12 @@ wp.customize.controlConstructor.toggle = wp.customize.Control.extend({
8
  var control = this;
9
 
10
  // Get the initial value
11
- var checkbox_value = control.setting._value;
12
 
13
  // Save the value
14
  this.container.on( 'change', 'input', function() {
15
- checkbox_value = ( jQuery( this ).is( ':checked' ) ) ? true : false;
16
- control.setting.set( checkbox_value );
17
  });
18
 
19
  }
8
  var control = this;
9
 
10
  // Get the initial value
11
+ var checkboxValue = control.setting._value;
12
 
13
  // Save the value
14
  this.container.on( 'change', 'input', function() {
15
+ checkboxValue = ( jQuery( this ).is( ':checked' ) ) ? true : false;
16
+ control.setting.set( checkboxValue );
17
  });
18
 
19
  }
assets/js/controls/typography.js CHANGED
@@ -13,88 +13,100 @@ wp.customize.controlConstructor.typography = wp.customize.Control.extend({
13
  hasDefault = false,
14
  firstAvailable = false,
15
  activeItem,
16
- value = {};
 
 
17
 
18
  // Make sure everything we're going to need exists.
19
- value['font-family'] = ( undefined !== control.setting._value['font-family'] ) ? control.setting._value['font-family'] : '';
20
- value['font-size'] = ( undefined !== control.setting._value['font-size'] ) ? control.setting._value['font-size'] : '';
21
- value.variant = ( undefined !== control.setting._value.variant ) ? control.setting._value.variant : '';
22
- value.subset = ( undefined !== control.setting._value.subset ) ? control.setting._value.subset : '';
23
- value['line-height'] = ( undefined !== control.setting._value['line-height'] ) ? control.setting._value['line-height'] : '';
24
- value['letter-spacing'] = ( undefined !== control.setting._value['letter-spacing'] ) ? control.setting._value['letter-spacing'] : '';
25
- value.color = ( undefined !== control.setting._value.color ) ? control.setting._value.color : '';
26
- value['text-align'] = ( undefined !== control.setting._value['text-align'] ) ? control.setting._value['text-align'] : 'inherit';
27
- value['text-transform'] = ( undefined !== control.setting._value['text-transform'] ) ? control.setting._value['text-transform'] : 'inherit';
28
-
29
- // renders and refreshes selectize sub-controls
30
- var renderSubControl = function( fontFamily, sub, startValue ) {
31
 
32
- subSelector = ( 'variant' === sub ) ? variantSelector : subsetSelector;
 
33
 
34
- var is_standard = false,
35
- subList = {};
 
 
 
 
 
36
 
37
- // destroy the selectize instance
38
  if ( undefined !== jQuery( subSelector ).selectize()[0] ) {
39
  jQuery( subSelector ).selectize()[0].selectize.destroy();
40
  }
41
 
42
- // Get all items in the sub-list for the active font-family
43
- for ( var i = 0, len = kirkiAllFonts.length; i < len; i++ ) {
 
44
  // Find the font-family we've selected in the global array of fonts.
45
- if ( fontFamily === kirkiAllFonts[ i ].family ) {
 
46
  // Check if this is a standard font or a google-font.
47
- if ( undefined !== kirkiAllFonts[ i ].is_standard && true === kirkiAllFonts[ i ].is_standard ) {
48
- is_standard = true;
49
  }
50
 
51
- subList = kirkiAllFonts[ i ][ sub + 's' ]; // the 's' is for plural (variant/variants, subset/subsets)
52
 
53
  }
54
 
55
- }
56
 
57
  // This is a googlefont, or we're talking subsets.
58
- if ( false === is_standard || 'subset' !== sub ) {
 
59
  // Determine the initial value we have to use
60
  if ( null === startValue ) {
61
- if ( 'variant' === sub ) { // the context here is variants
62
- // loop the variants.
63
- for ( var i = 0, len = subList.length; i < len; i++ ) {
64
 
65
- if ( undefined !== subList[ i ].id ) {
 
 
 
 
 
 
 
 
66
  activeItem = value.variant;
 
67
  } else {
68
- var defaultValue = 'regular';
69
- if ( defaultValue === subList[ i ].id ) {
 
 
70
  hasDefault = true;
71
  } else if ( false === firstAvailable ) {
72
- firstAvailable = subList[ i ].id;
73
  }
 
74
  }
75
 
76
- }
77
 
78
  } else if ( 'subset' === sub ) { // The context here is subsets
79
 
80
- var subsetValues = {};
81
-
82
- for ( var i = 0, len = subList.length; i < len; i++ ) {
83
 
 
84
  if ( null !== value.subset ) {
85
- for ( var s = 0, len = value.subset.length; s < len; s++ ) {
86
- if ( undefined !== subList[ i ] && value.subset[ s ] === subList[ i ].id ) {
87
- subsetValues[ value.subset[ s ] ] = value.subset[ s ];
88
  }
89
- }
90
  }
 
91
 
92
- }
93
-
94
- if ( 0 === subsetValues.length ) {
95
- activeItem = ['latin'];
96
- } else {
97
- var subsetValuesArray = jQuery.map( subsetValues, function(value, index) {
98
  return [value];
99
  });
100
  activeItem = subsetValuesArray;
@@ -113,8 +125,7 @@ wp.customize.controlConstructor.typography = wp.customize.Control.extend({
113
 
114
  }
115
 
116
- // create
117
- var subSelectize;
118
  subSelectize = jQuery( subSelector ).selectize({
119
  maxItems: ( 'variant' === sub ) ? 1 : null,
120
  valueField: 'id',
@@ -125,39 +136,33 @@ wp.customize.controlConstructor.typography = wp.customize.Control.extend({
125
  create: false,
126
  plugins: ( 'variant' === sub ) ? '' : ['remove_button'],
127
  render: {
128
- item: function( item, escape ) { return '<div>' + escape( item.label ) + '</div>'; },
129
- option: function( item, escape ) { return '<div>' + escape( item.label ) + '</div>'; }
130
- },
 
 
 
 
131
  }).data( 'selectize' );
132
 
133
  }
134
 
 
135
 
136
- // If only 1 option is available then there's no reason to show this.
137
- if ( 'variant' === sub ) {
138
-
139
- if ( 1 >= subList.length ) {
140
- control.container.find( '.kirki-variant-wrapper' ).css( 'display', 'none' );
141
- } else {
142
- control.container.find( '.kirki-variant-wrapper' ).css( 'display', 'block' );
143
- }
144
 
145
- } else if ( 'subset' === sub ) {
146
 
147
- if ( 1 > subList.length ) {
148
- control.container.find( '.kirki-subset-wrapper' ).css( 'display', 'none' );
149
  } else {
150
- control.container.find( '.kirki-subset-wrapper' ).css( 'display', 'block' );
151
  }
152
 
153
  }
154
 
155
- if ( true === is_standard ) {
156
- control.container.find( '.hide-on-standard-fonts' ).css( 'display', 'none' );
157
- } else {
158
- control.container.find( '.hide-on-standard-fonts' ).css( 'display', 'block' );
159
- }
160
-
161
  };
162
 
163
  // Render the font-family
@@ -171,9 +176,13 @@ wp.customize.controlConstructor.typography = wp.customize.Control.extend({
171
  searchField: ['family', 'label', 'subsets'],
172
  create: false,
173
  render: {
174
- item: function( item, escape ) { return '<div>' + escape( item.label ) + '</div>'; },
175
- option: function( item, escape ) { return '<div>' + escape( item.label ) + '</div>'; }
176
- },
 
 
 
 
177
  });
178
 
179
  // Render the variants
@@ -187,88 +196,118 @@ wp.customize.controlConstructor.typography = wp.customize.Control.extend({
187
  renderSubControl( value['font-family'], 'subset', value.subset );
188
 
189
  this.container.on( 'change', '.font-family select', function() {
190
- // add the value to the array and set the setting's value
 
191
  value['font-family'] = jQuery( this ).val();
192
  control.setting.set( value );
193
- // trigger changes to variants & subsets
 
194
  renderSubControl( jQuery( this ).val(), 'variant', null );
195
  renderSubControl( jQuery( this ).val(), 'subset', null );
196
- // refresh the preview
 
197
  wp.customize.previewer.refresh();
 
198
  });
199
 
200
  this.container.on( 'change', '.variant select', function() {
201
- // add the value to the array and set the setting's value
 
202
  value.variant = jQuery( this ).val();
203
  control.setting.set( value );
204
- // refresh the preview
 
205
  wp.customize.previewer.refresh();
 
206
  });
207
 
208
  this.container.on( 'change', '.subset select', function() {
209
- // add the value to the array and set the setting's value.
 
210
  value.subset = jQuery( this ).val();
211
  control.setting.set( value );
212
- // refresh the preview
 
213
  wp.customize.previewer.refresh();
 
214
  });
215
 
216
  this.container.on( 'change keyup paste', '.font-size input', function() {
217
- // add the value to the array and set the setting's value
 
218
  value['font-size'] = jQuery( this ).val();
219
  control.setting.set( value );
220
- // refresh the preview
 
221
  wp.customize.previewer.refresh();
 
222
  });
223
 
224
  this.container.on( 'change keyup paste', '.line-height input', function() {
225
- // add the value to the array and set the setting's value
 
226
  value['line-height'] = jQuery( this ).val();
227
  control.setting.set( value );
228
- // refresh the preview
 
229
  wp.customize.previewer.refresh();
 
230
  });
231
 
232
  this.container.on( 'change keyup paste', '.letter-spacing input', function() {
233
- // add the value to the array and set the setting's value
 
234
  value['letter-spacing'] = jQuery( this ).val();
235
  control.setting.set( value );
236
- // refresh the preview
 
237
  wp.customize.previewer.refresh();
 
238
  });
239
 
240
  this.container.on( 'change', '.text-align input', function() {
241
- // add the value to the array and set the setting's value.
 
242
  value['text-align'] = jQuery( this ).val();
243
  control.setting.set( value );
244
- // refresh the preview
 
245
  wp.customize.previewer.refresh();
 
246
  });
247
 
248
- // text-transform
249
  jQuery( textTransformSelector ).selectize();
250
  this.container.on( 'change', '.text-transform select', function() {
251
- // add the value to the array and set the setting's value.
 
252
  value['text-transform'] = jQuery( this ).val();
253
  control.setting.set( value );
254
- // refresh the preview
 
255
  wp.customize.previewer.refresh();
256
- });
257
 
 
258
 
 
259
 
260
- var picker = this.container.find ( '.kirki-color-control' );
261
- // change color
262
- picker.wpColorPicker ({
263
  change: function() {
264
- setTimeout ( function() {
265
- // add the value to the array and set the setting's value
266
- value.color = picker.val ();
267
- control.setting.set ( value );
268
- // refresh the preview
269
- wp.customize.previewer.refresh ();
 
 
 
 
270
  }, 100 );
 
271
  }
 
272
  });
273
 
274
  }
13
  hasDefault = false,
14
  firstAvailable = false,
15
  activeItem,
16
+ value = {},
17
+ renderSubControl,
18
+ picker;
19
 
20
  // Make sure everything we're going to need exists.
21
+ _.each( control.params['default'], function( defaultParamValue, param ) {
22
+ if ( false !== defaultParamValue ) {
23
+ value[ param ] = defaultParamValue;
24
+ if ( undefined !== control.setting._value[ param ] ) {
25
+ value[ param ] = control.setting._value[ param ];
26
+ }
27
+ }
28
+ });
 
 
 
 
29
 
30
+ // Renders and refreshes selectize sub-controls.
31
+ renderSubControl = function( fontFamily, sub, startValue ) {
32
 
33
+ var subSelector = ( 'variant' === sub ) ? variantSelector : subsetSelector,
34
+ isStandard = false,
35
+ subList = {},
36
+ subValue,
37
+ subsetValues,
38
+ subsetValuesArray,
39
+ subSelectize;
40
 
41
+ // Destroy the selectize instance.
42
  if ( undefined !== jQuery( subSelector ).selectize()[0] ) {
43
  jQuery( subSelector ).selectize()[0].selectize.destroy();
44
  }
45
 
46
+ // Get all items in the sub-list for the active font-family.
47
+ _.each( kirkiAllFonts, function( font, i ) {
48
+
49
  // Find the font-family we've selected in the global array of fonts.
50
+ if ( fontFamily === font.family ) {
51
+
52
  // Check if this is a standard font or a google-font.
53
+ if ( undefined !== font.isStandard && true === font.isStandard ) {
54
+ isStandard = true;
55
  }
56
 
57
+ subList = font[ sub + 's' ]; // The 's' is for plural (variant/variants, subset/subsets)
58
 
59
  }
60
 
61
+ });
62
 
63
  // This is a googlefont, or we're talking subsets.
64
+ if ( false === isStandard || 'subset' !== sub ) {
65
+
66
  // Determine the initial value we have to use
67
  if ( null === startValue ) {
 
 
 
68
 
69
+ if ( 'variant' === sub ) { // The context here is variants
70
+
71
+ // Loop the variants.
72
+ _.each( subList, function( variant ) {
73
+
74
+ var defaultValue;
75
+
76
+ if ( undefined !== variant.id ) {
77
+
78
  activeItem = value.variant;
79
+
80
  } else {
81
+
82
+ defaultValue = 'regular';
83
+
84
+ if ( defaultValue === variant.id ) {
85
  hasDefault = true;
86
  } else if ( false === firstAvailable ) {
87
+ firstAvailable = variant.id;
88
  }
89
+
90
  }
91
 
92
+ });
93
 
94
  } else if ( 'subset' === sub ) { // The context here is subsets
95
 
96
+ subsetValues = {};
 
 
97
 
98
+ _.each( subList, function( subSet ) {
99
  if ( null !== value.subset ) {
100
+ _.each( value.subset, function( item ) {
101
+ if ( undefined !== subSet && item === subSet.id ) {
102
+ subsetValues[ item ] = item;
103
  }
104
+ });
105
  }
106
+ });
107
 
108
+ if ( 0 !== subsetValues.length ) {
109
+ subsetValuesArray = jQuery.map( subsetValues, function( value, index ) {
 
 
 
 
110
  return [value];
111
  });
112
  activeItem = subsetValuesArray;
125
 
126
  }
127
 
128
+ // Create
 
129
  subSelectize = jQuery( subSelector ).selectize({
130
  maxItems: ( 'variant' === sub ) ? 1 : null,
131
  valueField: 'id',
136
  create: false,
137
  plugins: ( 'variant' === sub ) ? '' : ['remove_button'],
138
  render: {
139
+ item: function( item, escape ) {
140
+ return '<div>' + escape( item.label ) + '</div>';
141
+ },
142
+ option: function( item, escape ) {
143
+ return '<div>' + escape( item.label ) + '</div>';
144
+ }
145
+ }
146
  }).data( 'selectize' );
147
 
148
  }
149
 
150
+ if ( true === isStandard ) {
151
 
152
+ // Hide unrelated fields on standard fonts.
153
+ control.container.find( '.hide-on-standard-fonts' ).css( 'display', 'none' );
154
+ } else {
 
 
 
 
 
155
 
156
+ if ( 2 > subList.length ) {
157
 
158
+ // If only 1 option is available then there's no reason to show this.
159
+ control.container.find( '.kirki-' + sub + '-wrapper' ).css( 'display', 'none' );
160
  } else {
161
+ control.container.find( '.kirki-' + sub + '-wrapper' ).css( 'display', 'block' );
162
  }
163
 
164
  }
165
 
 
 
 
 
 
 
166
  };
167
 
168
  // Render the font-family
176
  searchField: ['family', 'label', 'subsets'],
177
  create: false,
178
  render: {
179
+ item: function( item, escape ) {
180
+ return '<div>' + escape( item.label ) + '</div>';
181
+ },
182
+ option: function( item, escape ) {
183
+ return '<div>' + escape( item.label ) + '</div>';
184
+ }
185
+ }
186
  });
187
 
188
  // Render the variants
196
  renderSubControl( value['font-family'], 'subset', value.subset );
197
 
198
  this.container.on( 'change', '.font-family select', function() {
199
+
200
+ // Add the value to the array and set the setting's value
201
  value['font-family'] = jQuery( this ).val();
202
  control.setting.set( value );
203
+
204
+ // Trigger changes to variants & subsets
205
  renderSubControl( jQuery( this ).val(), 'variant', null );
206
  renderSubControl( jQuery( this ).val(), 'subset', null );
207
+
208
+ // Refresh the preview
209
  wp.customize.previewer.refresh();
210
+
211
  });
212
 
213
  this.container.on( 'change', '.variant select', function() {
214
+
215
+ // Add the value to the array and set the setting's value
216
  value.variant = jQuery( this ).val();
217
  control.setting.set( value );
218
+
219
+ // Refresh the preview
220
  wp.customize.previewer.refresh();
221
+
222
  });
223
 
224
  this.container.on( 'change', '.subset select', function() {
225
+
226
+ // Add the value to the array and set the setting's value.
227
  value.subset = jQuery( this ).val();
228
  control.setting.set( value );
229
+
230
+ // Refresh the preview
231
  wp.customize.previewer.refresh();
232
+
233
  });
234
 
235
  this.container.on( 'change keyup paste', '.font-size input', function() {
236
+
237
+ // Add the value to the array and set the setting's value
238
  value['font-size'] = jQuery( this ).val();
239
  control.setting.set( value );
240
+
241
+ // Refresh the preview
242
  wp.customize.previewer.refresh();
243
+
244
  });
245
 
246
  this.container.on( 'change keyup paste', '.line-height input', function() {
247
+
248
+ // Add the value to the array and set the setting's value
249
  value['line-height'] = jQuery( this ).val();
250
  control.setting.set( value );
251
+
252
+ // Refresh the preview
253
  wp.customize.previewer.refresh();
254
+
255
  });
256
 
257
  this.container.on( 'change keyup paste', '.letter-spacing input', function() {
258
+
259
+ // Add the value to the array and set the setting's value
260
  value['letter-spacing'] = jQuery( this ).val();
261
  control.setting.set( value );
262
+
263
+ // Refresh the preview
264
  wp.customize.previewer.refresh();
265
+
266
  });
267
 
268
  this.container.on( 'change', '.text-align input', function() {
269
+
270
+ // Add the value to the array and set the setting's value.
271
  value['text-align'] = jQuery( this ).val();
272
  control.setting.set( value );
273
+
274
+ // Refresh the preview
275
  wp.customize.previewer.refresh();
276
+
277
  });
278
 
279
+ // Text-transform
280
  jQuery( textTransformSelector ).selectize();
281
  this.container.on( 'change', '.text-transform select', function() {
282
+
283
+ // Add the value to the array and set the setting's value.
284
  value['text-transform'] = jQuery( this ).val();
285
  control.setting.set( value );
286
+
287
+ // Refresh the preview
288
  wp.customize.previewer.refresh();
 
289
 
290
+ });
291
 
292
+ picker = this.container.find( '.kirki-color-control' );
293
 
294
+ // Change color
295
+ picker.wpColorPicker({
 
296
  change: function() {
297
+
298
+ setTimeout( function() {
299
+
300
+ // Add the value to the array and set the setting's value
301
+ value.color = picker.val();
302
+ control.setting.set( value );
303
+
304
+ // Refresh the preview
305
+ wp.customize.previewer.refresh();
306
+
307
  }, 100 );
308
+
309
  }
310
+
311
  });
312
 
313
  }
assets/js/functions/array-to-object.js CHANGED
@@ -1,11 +1,11 @@
1
  function kirkiArrayToObject( arr ) {
2
  var obj = {};
3
  if ( null !== arr ) {
4
- for ( var i = 0; i < arr.length; ++i ) {
5
- if ( undefined !== arr[ i ] ) {
6
- obj[ i ] = arr[ i ];
7
  }
8
- }
9
  }
10
  return obj;
11
  }
1
  function kirkiArrayToObject( arr ) {
2
  var obj = {};
3
  if ( null !== arr ) {
4
+ _.each( arr, function( item, i ) {
5
+ if ( undefined !== item ) {
6
+ obj.i = item;
7
  }
8
+ });
9
  }
10
  return obj;
11
  }
assets/js/functions/object-to-array.js CHANGED
@@ -1,11 +1,11 @@
1
  function kirkiObjectToArray( obj ) {
2
  var arr = [];
3
  if ( null !== obj ) {
4
- for ( var i = 0; i < obj.length; ++i ) {
5
- if ( undefined !== obj[ i ] ) {
6
- arr.push( obj[ i ] );
7
  }
8
- }
9
  }
10
  return arr;
11
  }
1
  function kirkiObjectToArray( obj ) {
2
  var arr = [];
3
  if ( null !== obj ) {
4
+ _.each( obj, function( value ) {
5
+ if ( undefined !== value ) {
6
+ arr.push( value );
7
  }
8
+ });
9
  }
10
  return arr;
11
  }
assets/js/functions/set-value.js CHANGED
@@ -4,12 +4,17 @@ function kirkiSetValue( setting, value ) {
4
  * This will be used to get properties we need from that control,
5
  * and determine if we need to do any further work based on those.
6
  */
7
- var sub_control = wp.customize.settings.controls[ setting ];
 
 
 
 
 
8
  /**
9
  * Check if the control we want to affect actually exists.
10
  * If not then skip the item,
11
  */
12
- if ( typeof sub_control === undefined ) {
13
  return true;
14
  }
15
 
@@ -18,7 +23,7 @@ function kirkiSetValue( setting, value ) {
18
  * We want the value to live-update on the controls themselves,
19
  * so depending on the control's type we'll need to do different things.
20
  */
21
- var control_type = sub_control.type;
22
 
23
  /**
24
  * Below we're starting to check the control tyype and depending on what that is,
@@ -32,18 +37,24 @@ function kirkiSetValue( setting, value ) {
32
  * toggle
33
  * kirki-checkbox
34
  */
35
- if ( 'checkbox' == control_type || 'switch' == control_type || 'toggle' == control_type || 'kirki-checkbox' == control_type ) {
 
 
36
 
37
- if ( 1 == value ) {
38
  // Update the value visually in the control
39
  jQuery( wp.customize.control( setting ).container.find( 'input' ) ).prop( 'checked', true );
 
40
  // Update the value in the customizer object
41
  wp.customize.instance( setting ).set( true );
 
42
  } else {
 
43
  // Update the value visually in the control
44
  jQuery( wp.customize.control( setting ).container.find( 'input' ) ).prop( 'checked', false );
 
45
  // Update the value in the customizer object
46
  wp.customize.instance( setting ).set( false );
 
47
  }
48
 
49
  }
@@ -54,38 +65,44 @@ function kirkiSetValue( setting, value ) {
54
  * select2-multiple
55
  * kirki-select
56
  */
57
- else if ( 'select' == control_type || 'select2' == control_type || 'select2-multiple' == control_type || 'kirki-select' == control_type || 'preset' == control_type ) {
58
 
59
  // Update the value visually in the control
60
- var $select = jQuery( wp.customize.control( setting ).container.find( 'select' ) ).selectize();
61
- var selectize = $select[0].selectize;
62
  selectize.setValue( value, true );
 
63
  // Update the value in the customizer object
64
  wp.customize.instance( setting ).set( value );
65
 
66
  }
 
67
  /**
68
  * Control types:
69
  * slider
70
  */
71
- else if ( 'slider' == control_type ) {
72
 
73
  // Update the value visually in the control (slider)
74
  jQuery( wp.customize.control( setting ).container.find( 'input' ) ).prop( 'value', value );
 
75
  // Update the value visually in the control (number)
76
  jQuery( wp.customize.control( setting ).container.find( '.kirki_range_value .value' ) ).html( value );
 
77
  // Update the value in the customizer object
78
  wp.customize.instance( setting ).set( value );
79
 
80
  }
 
81
  /**
82
  * Control types:
83
  * textarea
84
  */
85
- else if ( 'kirki-generic' == control_type && undefined !== sub_control.choices && undefined !== sub_control.choices.element && 'textarea' == sub_control.choices.element ) {
86
 
87
  // Update the value visually in the control
88
  jQuery( wp.customize.control( setting ).container.find( 'textarea' ) ).prop( 'value', value );
 
89
  // Update the value in the customizer object
90
  wp.customize( setting ).set( value );
91
 
@@ -96,10 +113,10 @@ function kirkiSetValue( setting, value ) {
96
  * kirki-color
97
  * color-alpha
98
  */
99
- else if ( 'color-alpha' == control_type || 'kirki-color' == control_type || 'color' == control_type ) {
100
 
101
  // Update the value visually in the control
102
- var alphaColorControl = wp.customize.control( setting ).container.find( '.kirki-color-control' );
103
 
104
  alphaColorControl
105
  .attr( 'data-default-color', value )
@@ -114,10 +131,11 @@ function kirkiSetValue( setting, value ) {
114
  * Control types:
115
  * multicheck
116
  */
117
- else if ( 'multicheck' == control_type ) {
118
 
119
  // Update the value in the customizer object
120
  wp.customize.instance( setting ).set( value );
 
121
  /**
122
  * Update the value visually in the control.
123
  * This value is an array so we'll have to go through each one of the items
@@ -130,11 +148,12 @@ function kirkiSetValue( setting, value ) {
130
  jQuery( this ).prop( 'checked', false );
131
  });
132
 
133
- for ( index = 0; index < value.length; index++ ) {
134
- jQuery( wp.customize.control( setting ).container.find( 'input[value="' + value[ index ] + '"]' ) ).prop( 'checked', true );
135
- }
136
 
137
  }
 
138
  /**
139
  * Control types:
140
  * radio-buttonset
@@ -145,68 +164,98 @@ function kirkiSetValue( setting, value ) {
145
  * color-pallette
146
  * palette
147
  */
148
- else if ( 'radio-buttonset' == control_type || 'radio-image' == control_type || 'radio' == control_type || 'kirki-radio' == control_type || 'dashicons' == control_type || 'color-palette' == control_type || 'palette' == control_type ) {
149
 
150
  // Update the value visually in the control
151
  jQuery( wp.customize.control( setting ).container.find( 'input[value="' + value + '"]' ) ).prop( 'checked', true );
 
152
  // Update the value in the customizer object
153
  wp.customize.instance( setting ).set( value );
154
 
155
  }
 
156
  /**
157
  * Control types:
158
  * typography
159
  */
160
- else if ( 'typography' == control_type ) {
 
161
  if ( undefined !== value['font-family'] ) {
162
- var $select = jQuery( wp.customize.control( setting ).container.find( '.font-family select' ) ).selectize(),
163
- selectize = $select[0].selectize;
 
 
164
  // Update the value visually in the control
165
  selectize.setValue( value['font-family'], true );
 
166
  }
 
167
  if ( undefined !== value.variant ) {
168
- var $select = jQuery( wp.customize.control( setting ).container.find( '.variant select' ) ).selectize(),
169
- selectize = $select[0].selectize;
 
 
170
  // Update the value visually in the control
171
  selectize.setValue( value.variant, true );
 
172
  }
 
173
  if ( undefined !== value.subset ) {
174
- var $select = jQuery( wp.customize.control( setting ).container.find( '.subset select' ) ).selectize(),
175
- selectize = $select[0].selectize;
 
 
176
  // Update the value visually in the control
177
  selectize.setValue( value.subset, true );
 
178
  }
 
179
  if ( undefined !== value['font-size'] ) {
 
180
  // Update the value visually in the control
181
  jQuery( wp.customize.control( setting ).container.find( '.font-size input' ) ).prop( 'value', value['font-size'] );
 
182
  }
 
183
  if ( undefined !== value['line-height'] ) {
 
184
  // Update the value visually in the control
185
  jQuery( wp.customize.control( setting ).container.find( '.line-height input' ) ).prop( 'value', value['line-height'] );
 
186
  }
 
187
  if ( undefined !== value['letter-spacing'] ) {
 
188
  // Update the value visually in the control
189
  jQuery( wp.customize.control( setting ).container.find( '.letter-spacing input' ) ).prop( 'value', value['letter-spacing'] );
 
190
  }
 
191
  if ( undefined !== value.color ) {
 
192
  // Update the value visually in the control
193
- var typographyColor = wp.customize.control( setting ).container.find( '.kirki-color-control' );
194
 
195
  typographyColor
196
  .attr( 'data-default-color', value )
197
  .data( 'default-color', value )
198
  .wpColorPicker( 'color', value );
199
  }
 
200
  // Update the value in the customizer object
201
  wp.customize.instance( setting ).set( value );
 
202
  }
 
203
  /**
204
  * Control types:
205
  * repeater
206
  */
207
- else if ( 'repeater' == control_type ) {
 
208
  // Do nothing
209
  }
 
210
  /**
211
  * Fallback for all other controls.
212
  */
@@ -214,6 +263,7 @@ function kirkiSetValue( setting, value ) {
214
 
215
  // Update the value visually in the control
216
  jQuery( wp.customize.control( setting ).container.find( 'input' ) ).prop( 'value', value );
 
217
  // Update the value in the customizer object
218
  wp.customize.instance( setting ).set( value );
219
 
4
  * This will be used to get properties we need from that control,
5
  * and determine if we need to do any further work based on those.
6
  */
7
+ var subControl = wp.customize.settings.controls[ setting ],
8
+ $select,
9
+ selectize,
10
+ controlType,
11
+ alphaColorControl,
12
+ typographyColor;
13
  /**
14
  * Check if the control we want to affect actually exists.
15
  * If not then skip the item,
16
  */
17
+ if ( undefined === typeof subControl ) {
18
  return true;
19
  }
20
 
23
  * We want the value to live-update on the controls themselves,
24
  * so depending on the control's type we'll need to do different things.
25
  */
26
+ controlType = subControl.type;
27
 
28
  /**
29
  * Below we're starting to check the control tyype and depending on what that is,
37
  * toggle
38
  * kirki-checkbox
39
  */
40
+ if ( 'checkbox' === controlType || 'switch' === controlType || 'toggle' === controlType || 'kirki-checkbox' === controlType ) {
41
+
42
+ if ( 1 === value || '1' === value || true === value ) {
43
 
 
44
  // Update the value visually in the control
45
  jQuery( wp.customize.control( setting ).container.find( 'input' ) ).prop( 'checked', true );
46
+
47
  // Update the value in the customizer object
48
  wp.customize.instance( setting ).set( true );
49
+
50
  } else {
51
+
52
  // Update the value visually in the control
53
  jQuery( wp.customize.control( setting ).container.find( 'input' ) ).prop( 'checked', false );
54
+
55
  // Update the value in the customizer object
56
  wp.customize.instance( setting ).set( false );
57
+
58
  }
59
 
60
  }
65
  * select2-multiple
66
  * kirki-select
67
  */
68
+ else if ( 'select' === controlType || 'select2' === controlType || 'select2-multiple' === controlType || 'kirki-select' === controlType || 'preset' === controlType ) {
69
 
70
  // Update the value visually in the control
71
+ $select = jQuery( wp.customize.control( setting ).container.find( 'select' ) ).selectize();
72
+ selectize = $select[0].selectize;
73
  selectize.setValue( value, true );
74
+
75
  // Update the value in the customizer object
76
  wp.customize.instance( setting ).set( value );
77
 
78
  }
79
+
80
  /**
81
  * Control types:
82
  * slider
83
  */
84
+ else if ( 'slider' === controlType ) {
85
 
86
  // Update the value visually in the control (slider)
87
  jQuery( wp.customize.control( setting ).container.find( 'input' ) ).prop( 'value', value );
88
+
89
  // Update the value visually in the control (number)
90
  jQuery( wp.customize.control( setting ).container.find( '.kirki_range_value .value' ) ).html( value );
91
+
92
  // Update the value in the customizer object
93
  wp.customize.instance( setting ).set( value );
94
 
95
  }
96
+
97
  /**
98
  * Control types:
99
  * textarea
100
  */
101
+ else if ( 'kirki-generic' === controlType && undefined !== subControl.choices && undefined !== subControl.choices.element && 'textarea' === subControl.choices.element ) {
102
 
103
  // Update the value visually in the control
104
  jQuery( wp.customize.control( setting ).container.find( 'textarea' ) ).prop( 'value', value );
105
+
106
  // Update the value in the customizer object
107
  wp.customize( setting ).set( value );
108
 
113
  * kirki-color
114
  * color-alpha
115
  */
116
+ else if ( 'color-alpha' === controlType || 'kirki-color' === controlType || 'color' === controlType ) {
117
 
118
  // Update the value visually in the control
119
+ alphaColorControl = wp.customize.control( setting ).container.find( '.kirki-color-control' );
120
 
121
  alphaColorControl
122
  .attr( 'data-default-color', value )
131
  * Control types:
132
  * multicheck
133
  */
134
+ else if ( 'multicheck' === controlType ) {
135
 
136
  // Update the value in the customizer object
137
  wp.customize.instance( setting ).set( value );
138
+
139
  /**
140
  * Update the value visually in the control.
141
  * This value is an array so we'll have to go through each one of the items
148
  jQuery( this ).prop( 'checked', false );
149
  });
150
 
151
+ _.each( value, function( subValue, i ) {
152
+ jQuery( wp.customize.control( setting ).container.find( 'input[value="' + value[ i ] + '"]' ) ).prop( 'checked', true );
153
+ });
154
 
155
  }
156
+
157
  /**
158
  * Control types:
159
  * radio-buttonset
164
  * color-pallette
165
  * palette
166
  */
167
+ else if ( 'radio-buttonset' === controlType || 'radio-image' === controlType || 'radio' === controlType || 'kirki-radio' === controlType || 'dashicons' === controlType || 'color-palette' === controlType || 'palette' === controlType ) {
168
 
169
  // Update the value visually in the control
170
  jQuery( wp.customize.control( setting ).container.find( 'input[value="' + value + '"]' ) ).prop( 'checked', true );
171
+
172
  // Update the value in the customizer object
173
  wp.customize.instance( setting ).set( value );
174
 
175
  }
176
+
177
  /**
178
  * Control types:
179
  * typography
180
  */
181
+ else if ( 'typography' === controlType ) {
182
+
183
  if ( undefined !== value['font-family'] ) {
184
+
185
+ $select = jQuery( wp.customize.control( setting ).container.find( '.font-family select' ) ).selectize();
186
+ selectize = $select[0].selectize;
187
+
188
  // Update the value visually in the control
189
  selectize.setValue( value['font-family'], true );
190
+
191
  }
192
+
193
  if ( undefined !== value.variant ) {
194
+
195
+ $select = jQuery( wp.customize.control( setting ).container.find( '.variant select' ) ).selectize();
196
+ selectize = $select[0].selectize;
197
+
198
  // Update the value visually in the control
199
  selectize.setValue( value.variant, true );
200
+
201
  }
202
+
203
  if ( undefined !== value.subset ) {
204
+
205
+ $select = jQuery( wp.customize.control( setting ).container.find( '.subset select' ) ).selectize();
206
+ selectize = $select[0].selectize;
207
+
208
  // Update the value visually in the control
209
  selectize.setValue( value.subset, true );
210
+
211
  }
212
+
213
  if ( undefined !== value['font-size'] ) {
214
+
215
  // Update the value visually in the control
216
  jQuery( wp.customize.control( setting ).container.find( '.font-size input' ) ).prop( 'value', value['font-size'] );
217
+
218
  }
219
+
220
  if ( undefined !== value['line-height'] ) {
221
+
222
  // Update the value visually in the control
223
  jQuery( wp.customize.control( setting ).container.find( '.line-height input' ) ).prop( 'value', value['line-height'] );
224
+
225
  }
226
+
227
  if ( undefined !== value['letter-spacing'] ) {
228
+
229
  // Update the value visually in the control
230
  jQuery( wp.customize.control( setting ).container.find( '.letter-spacing input' ) ).prop( 'value', value['letter-spacing'] );
231
+
232
  }
233
+
234
  if ( undefined !== value.color ) {
235
+
236
  // Update the value visually in the control
237
+ typographyColor = wp.customize.control( setting ).container.find( '.kirki-color-control' );
238
 
239
  typographyColor
240
  .attr( 'data-default-color', value )
241
  .data( 'default-color', value )
242
  .wpColorPicker( 'color', value );
243
  }
244
+
245
  // Update the value in the customizer object
246
  wp.customize.instance( setting ).set( value );
247
+
248
  }
249
+
250
  /**
251
  * Control types:
252
  * repeater
253
  */
254
+ else if ( 'repeater' === controlType ) {
255
+
256
  // Do nothing
257
  }
258
+
259
  /**
260
  * Fallback for all other controls.
261
  */
263
 
264
  // Update the value visually in the control
265
  jQuery( wp.customize.control( setting ).container.find( 'input' ) ).prop( 'value', value );
266
+
267
  // Update the value in the customizer object
268
  wp.customize.instance( setting ).set( value );
269
 
assets/js/functions/validate-css-value.js CHANGED
@@ -1,25 +1,35 @@
1
  function kirkiValidateCSSValue( value ) {
 
 
 
 
 
2
  // 0 is always a valid value
3
- if ( '0' == value ) {
4
  return true;
5
  }
6
- // if we're using calc() just return true.
 
7
  if ( 0 <= value.indexOf( 'calc(' ) && 0 <= value.indexOf( ')' ) ) {
8
  return true;
9
  }
10
 
11
- var validUnits = ['rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax'];
12
- // Get the numeric value
13
- var numericValue = parseFloat( value );
14
  // Get the unit
15
- var unit = value.replace( numericValue, '' );
16
- // Check the validity of the numeric value
 
17
  if ( isNaN( numericValue ) ) {
18
  return false;
19
  }
20
- // Check the validity of the units
 
21
  if ( -1 === jQuery.inArray( unit, validUnits ) ) {
22
  return false;
23
  }
 
24
  return true;
 
25
  }
1
  function kirkiValidateCSSValue( value ) {
2
+
3
+ var validUnits = ['rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax'],
4
+ numericValue,
5
+ unit;
6
+
7
  // 0 is always a valid value
8
+ if ( '0' === value ) {
9
  return true;
10
  }
11
+
12
+ // If we're using calc() just return true.
13
  if ( 0 <= value.indexOf( 'calc(' ) && 0 <= value.indexOf( ')' ) ) {
14
  return true;
15
  }
16
 
17
+ // Get the numeric value.
18
+ numericValue = parseFloat( value );
19
+
20
  // Get the unit
21
+ unit = value.replace( numericValue, '' );
22
+
23
+ // Check the validity of the numeric value.
24
  if ( isNaN( numericValue ) ) {
25
  return false;
26
  }
27
+
28
+ // Check the validity of the units.
29
  if ( -1 === jQuery.inArray( unit, validUnits ) ) {
30
  return false;
31
  }
32
+
33
  return true;
34
+
35
  }
assets/js/postmessage.js CHANGED
@@ -1,7 +1,7 @@
1
- ( function( $ ) {
2
  var api = wp.customize;
3
 
4
- $.each( js_vars, function( setting, jsVars ) {
5
 
6
  var css = '',
7
  cssArray = {};
@@ -12,95 +12,113 @@
12
 
13
  if ( undefined !== jsVars && 0 < jsVars.length ) {
14
 
15
- $.each( jsVars, function( i, js_var ) {
 
 
16
 
17
  // Make sure element is defined.
18
- if ( undefined === jsVars[ i ]['element'] ) {
19
- jsVars[ i ]['element'] = '';
20
  }
 
21
  // Make sure property is defined.
22
- if ( undefined === jsVars[ i ]['property'] ) {
23
- jsVars[ i ]['property'] = '';
24
  }
 
25
  // Use empty prefix if undefined
26
- if ( undefined === jsVars[ i ]['prefix'] ) {
27
- jsVars[ i ]['prefix'] = '';
28
  }
 
29
  // Use empty suffix if undefined
30
- if ( undefined === jsVars[ i ]['suffix'] ) {
31
- jsVars[ i ]['suffix'] = '';
32
  }
 
33
  // Use empty units if undefined
34
- if ( undefined === jsVars[ i ]['units'] ) {
35
- jsVars[ i ]['units'] = '';
36
  }
 
37
  // Use css if method is undefined
38
- if ( undefined === jsVars[ i ]['function'] ) {
39
- jsVars[ i ]['function'] = 'css';
40
  }
 
41
  // Use $ (just the value) if value_pattern is undefined
42
- if ( undefined === jsVars[ i ]['value_pattern'] ) {
43
- jsVars[ i ]['value_pattern'] = '$';
44
  }
45
 
46
- $.each( jsVars, function( i, args ) {
47
 
48
  // Value is a string
49
- if ( 'string' == typeof newval ) {
 
50
  // Process the value pattern
51
- if ( undefined !== jsVars[ i ]['value_pattern'] ) {
52
- var val = jsVars[ i ]['value_pattern'].replace( /\$/g, newval );
53
- } else {
54
- var val = newval;
55
  }
 
56
  // Inject HTML
57
- if ( 'html' === args.function ) {
58
- $( args.element ).html( args.prefix + val + args.units + args.suffix );
 
59
  // Add CSS
60
  } else {
61
- // if we have new value, replace style contents with custom css
62
- if ( val !== '' ) {
63
- cssArray[ i ] = args.element + '{' + args.property + ':' + args.prefix + val + args.units + args.suffix + ';}';
 
64
  }
65
- // else let's clear it out
 
66
  else {
67
- cssArray[ i ] = '';
68
  }
69
 
70
  }
71
 
72
  // Value is an object
73
- } else if ( 'object' == typeof newval ) {
74
- cssArray[ i ] = '';
75
- $.each( newval, function( subValueKey, subValueValue ) {
 
76
  if ( undefined !== args.choice ) {
77
- if ( args.choice == subValueKey ) {
78
- cssArray[ i ] += args.element + '{' + args.property + ':' + args.prefix + subValueValue + args.units + args.suffix + ';}';
79
  }
80
  } else {
81
- cssArray[ i ] += args.element + '{' + args.property + ':' + args.prefix + subValueValue + args.units + args.suffix + ';}';
82
  }
83
  });
 
84
  }
 
85
  });
86
 
87
  });
88
 
89
- $.each( cssArray, function( i, singleCSS ) {
 
 
90
 
91
  setTimeout( function() {
92
 
93
  if ( '' !== singleCSS ) {
94
  css += singleCSS;
95
  }
 
96
  // Attach to <head>
97
  if ( '' !== css ) {
98
- // make sure we have a stylesheet with the defined ID.
 
99
  // If we don't then add it.
100
- if ( ! $( '#kirki-customizer-postmessage' + setting ).size() ) {
101
- $( 'head' ).append( '<style id="kirki-customizer-postmessage' + setting + '"></style>' );
102
  }
103
- $( '#kirki-customizer-postmessage' + setting ).text( css );
104
  }
105
 
106
  }, 300 );
1
+ ( function() {
2
  var api = wp.customize;
3
 
4
+ _.each( jsvars, function( jsVars, setting ) {
5
 
6
  var css = '',
7
  cssArray = {};
12
 
13
  if ( undefined !== jsVars && 0 < jsVars.length ) {
14
 
15
+ _.each( jsVars, function( jsVar ) {
16
+
17
+ var val = newval;
18
 
19
  // Make sure element is defined.
20
+ if ( undefined === jsVar.element ) {
21
+ jsVar.element = '';
22
  }
23
+
24
  // Make sure property is defined.
25
+ if ( undefined === jsVar.property ) {
26
+ jsVar.property = '';
27
  }
28
+
29
  // Use empty prefix if undefined
30
+ if ( undefined === jsVar.prefix ) {
31
+ jsVar.prefix = '';
32
  }
33
+
34
  // Use empty suffix if undefined
35
+ if ( undefined === jsVar.suffix ) {
36
+ jsVar.suffix = '';
37
  }
38
+
39
  // Use empty units if undefined
40
+ if ( undefined === jsVar.units ) {
41
+ jsVar.units = '';
42
  }
43
+
44
  // Use css if method is undefined
45
+ if ( undefined === jsVar['function'] ) {
46
+ jsVar['function'] = 'css';
47
  }
48
+
49
  // Use $ (just the value) if value_pattern is undefined
50
+ if ( undefined === jsVar.value_pattern ) {
51
+ jsVar.value_pattern = '$';
52
  }
53
 
54
+ _.each( jsVars, function( args, i ) {
55
 
56
  // Value is a string
57
+ if ( 'string' === typeof newval ) {
58
+
59
  // Process the value pattern
60
+ if ( undefined !== jsVar.value_pattern ) {
61
+ val = jsVar.value_pattern.replace( /\$/g, newval );
 
 
62
  }
63
+
64
  // Inject HTML
65
+ if ( 'html' === args['function'] ) {
66
+ jQuery( args.element ).html( args.prefix + val + args.units + args.suffix );
67
+
68
  // Add CSS
69
  } else {
70
+
71
+ // If we have new value, replace style contents with custom css
72
+ if ( '' !== val ) {
73
+ cssArray.i = args.element + '{' + args.property + ':' + args.prefix + val + args.units + args.suffix + ';}';
74
  }
75
+
76
+ // Else let's clear it out
77
  else {
78
+ cssArray.i = '';
79
  }
80
 
81
  }
82
 
83
  // Value is an object
84
+ } else if ( 'object' === typeof newval ) {
85
+
86
+ cssArray.i = '';
87
+ _.each( newval, function( subValueValue, subValueKey ) {
88
  if ( undefined !== args.choice ) {
89
+ if ( args.choice === subValueKey ) {
90
+ cssArray.i += args.element + '{' + args.property + ':' + args.prefix + subValueValue + args.units + args.suffix + ';}';
91
  }
92
  } else {
93
+ cssArray.i += args.element + '{' + args.property + ':' + args.prefix + subValueValue + args.units + args.suffix + ';}';
94
  }
95
  });
96
+
97
  }
98
+
99
  });
100
 
101
  });
102
 
103
+ _.each( cssArray, function( singleCSS ) {
104
+
105
+ css = '';
106
 
107
  setTimeout( function() {
108
 
109
  if ( '' !== singleCSS ) {
110
  css += singleCSS;
111
  }
112
+
113
  // Attach to <head>
114
  if ( '' !== css ) {
115
+
116
+ // Make sure we have a stylesheet with the defined ID.
117
  // If we don't then add it.
118
+ if ( ! jQuery( '#kirki-customizer-postmessage' + setting ).size() ) {
119
+ jQuery( 'head' ).append( '<style id="kirki-customizer-postmessage' + setting + '"></style>' );
120
  }
121
+ jQuery( '#kirki-customizer-postmessage' + setting ).text( css );
122
  }
123
 
124
  }, 300 );
assets/js/reset.js CHANGED
@@ -1,22 +1,20 @@
1
- jQuery(document).ready(function($) { "use strict";
 
 
2
 
3
  jQuery( 'a.kirki-reset-section' ).on( 'click', function() {
4
- // var reset = confirm( "Reset all settings in section" );
5
- // if ( reset == true ) {
6
 
7
- // Get the section ID
8
- var id = jQuery( this ).data( 'reset-section-id' );
9
- // Get controls inside the section
10
- var controls = wp.customize.section( id ).controls();
11
- // Loop controls
12
- for ( var i = 0, len = controls.length; i < len; i++ ) {
13
- // set value to default
14
- kirkiSetValue( controls[ i ].id, controls[ i ].params.default );
15
- }
16
 
17
- // }
 
18
 
19
- });
 
20
 
 
 
 
21
 
22
  });
1
+ jQuery( document ).ready( function() {
2
+
3
+ 'use strict';
4
 
5
  jQuery( 'a.kirki-reset-section' ).on( 'click', function() {
 
 
6
 
7
+ var id = jQuery( this ).data( 'reset-section-id' ),
8
+ controls = wp.customize.section( id ).controls();
 
 
 
 
 
 
 
9
 
10
+ // Loop controls
11
+ _.each( controls, function( control, i ) {
12
 
13
+ // Set value to default
14
+ kirkiSetValue( controls[ i ].id, control.params['default'] );
15
 
16
+ });
17
+
18
+ });
19
 
20
  });
assets/js/tooltip.js CHANGED
@@ -1,4 +1,3 @@
1
- /** Fire up jQuery - let's dance! */
2
  jQuery( document ).ready( function( $ ) {
3
- $( 'a.tooltip').tooltip();
4
  });
 
1
  jQuery( document ).ready( function( $ ) {
2
+ $( 'a.tooltip' ).tooltip();
3
  });
codesniffer.ruleset.xml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <ruleset name="WordPress Coding Standards">
3
+ <!-- See https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml -->
4
+ <!-- See https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/blob/develop/WordPress-Core/ruleset.xml -->
5
+
6
+ <!-- Set a description for this ruleset. -->
7
+ <description>A custom set of code standard rules to check for WordPress themes and plugins.</description>
8
+
9
+ <!-- Include the WordPress ruleset, with exclusions. -->
10
+ <rule ref="WordPress">
11
+ <exclude name="Generic.WhiteSpace.ScopeIndent.IncorrectExact" />
12
+ <exclude name="Generic.WhiteSpace.ScopeIndent.Incorrect" />
13
+ <exclude name="WordPress.VIP.RestrictedFunctions.user_meta" />
14
+ <exclude name="WordPress.VIP.RestrictedFunctions.url_to_postid" />
15
+ </rule>
16
+
17
+ <!-- Include sniffs for PHP cross-version compatibility. -->
18
+ <rule ref="PHPCompatibility"/>
19
+ </ruleset>
composer.json DELETED
@@ -1,26 +0,0 @@
1
- {
2
- "name": "aristath/kirki",
3
- "type": "wordpress-plugin",
4
- "description": "Extending the WordPress customizer",
5
- "homepage": "http://kirki.org",
6
- "license": "GPLv2 or later",
7
- "authors": [
8
- {
9
- "name" : "aristath",
10
- "email" : "aristath@gmail.com",
11
- "homepage" : "http://aristeides.com"
12
- },
13
- {
14
- "name" : "fovoc",
15
- "email" : "kalliris.d@gmail.com",
16
- "homepage" : "https://github.com/fovoc"
17
- }
18
- ],
19
- "require": {
20
- "php": ">=5.2",
21
- "composer/installers": "~1.0"
22
- },
23
- "require-dev": {
24
- "phpunit/phpunit": "~4.0"
25
- }
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-kirki-active-callback.php CHANGED
@@ -1,18 +1,30 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Active_Callback' ) ) {
4
 
 
 
 
5
  class Kirki_Active_Callback {
6
 
7
  /**
8
  * Figure out whether the current object should be displayed or not.
9
  *
10
- * @param $object the current field
11
  * @return boolean
12
  */
13
  public static function evaluate( $object ) {
14
 
15
- // Get all fields
16
  $fields = Kirki::$fields;
17
 
18
  // Make sure the current object matches a registered field.
@@ -29,7 +41,7 @@ if ( ! class_exists( 'Kirki_Active_Callback' ) ) {
29
  return true;
30
  }
31
 
32
- if ( isset( $current_object['option_name'] ) && '' != $current_object['option_name'] ) {
33
  if ( false === strpos( $requirement['setting'], '[' ) ) {
34
  $requirement['setting'] = $current_object['option_name'] . '[' . $requirement['setting'] . ']';
35
  }
@@ -66,9 +78,7 @@ if ( ! class_exists( 'Kirki_Active_Callback' ) ) {
66
  $current_setting->value(),
67
  $requirement['operator']
68
  );
69
-
70
  }
71
-
72
  }
73
 
74
  return ( isset( $show ) && ( false === $show ) ) ? false : true;
@@ -76,10 +86,12 @@ if ( ! class_exists( 'Kirki_Active_Callback' ) ) {
76
  }
77
 
78
  /**
79
- * @param mixed $value1 the 1st value in the comparison
80
- * @param mixed $value2 the 2nd value in the comparison
81
- * @param string $operator the operator we'll use for the comparison.
82
- * @return boolean whether the comparison has succeded (true) or failed (false).
 
 
83
  */
84
  public static function compare( $value1, $value2, $operator ) {
85
  switch ( $operator ) {
@@ -147,7 +159,5 @@ if ( ! class_exists( 'Kirki_Active_Callback' ) ) {
147
 
148
  return true;
149
  }
150
-
151
  }
152
-
153
  }
1
  <?php
2
+ /**
3
+ * Active callback used with the "required" argument in fields
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Active_Callback' ) ) {
13
 
14
+ /**
15
+ * Callback class for use with the "required" argument
16
+ */
17
  class Kirki_Active_Callback {
18
 
19
  /**
20
  * Figure out whether the current object should be displayed or not.
21
  *
22
+ * @param WP_Customize_Setting $object The current field.
23
  * @return boolean
24
  */
25
  public static function evaluate( $object ) {
26
 
27
+ // Get all fields.
28
  $fields = Kirki::$fields;
29
 
30
  // Make sure the current object matches a registered field.
41
  return true;
42
  }
43
 
44
+ if ( isset( $current_object['option_name'] ) && '' !== $current_object['option_name'] ) {
45
  if ( false === strpos( $requirement['setting'], '[' ) ) {
46
  $requirement['setting'] = $current_object['option_name'] . '[' . $requirement['setting'] . ']';
47
  }
78
  $current_setting->value(),
79
  $requirement['operator']
80
  );
 
81
  }
 
82
  }
83
 
84
  return ( isset( $show ) && ( false === $show ) ) ? false : true;
86
  }
87
 
88
  /**
89
+ * Compares the 2 values given the condition
90
+ *
91
+ * @param mixed $value1 The 1st value in the comparison.
92
+ * @param mixed $value2 The 2nd value in the comparison.
93
+ * @param string $operator The operator we'll use for the comparison.
94
+ * @return boolean whether The comparison has succeded (true) or failed (false).
95
  */
96
  public static function compare( $value1, $value2, $operator ) {
97
  switch ( $operator ) {
159
 
160
  return true;
161
  }
 
162
  }
 
163
  }
includes/class-kirki-config.php CHANGED
@@ -1,10 +1,24 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Config' ) ) {
4
 
 
 
 
5
  final class Kirki_Config {
6
 
7
  /**
 
 
8
  * @static
9
  * @access private
10
  * @var array
@@ -12,75 +26,83 @@ if ( ! class_exists( 'Kirki_Config' ) ) {
12
  private static $instances = array();
13
 
14
  /**
 
 
15
  * @access protected
16
  * @var array
17
  */
18
  protected $config_final = array();
19
 
20
  /**
 
 
21
  * @access protected
22
  * @var string
23
  */
24
  protected $id = 'global';
25
 
26
  /**
 
 
27
  * @access protected
28
  * @var string
29
  */
30
  protected $capability = 'edit_theme_options';
31
 
32
  /**
 
 
33
  * @access protected
34
  * @var string
35
  */
36
  protected $option_type = 'theme_mod';
37
 
38
  /**
 
 
39
  * @access protected
40
  * @var string
41
  */
42
  protected $option_name = '';
43
 
44
  /**
 
 
45
  * @access protected
46
  * @var array
47
  */
48
  protected $compiler = array();
49
 
50
  /**
 
 
51
  * @access protected
52
  * @var bool
53
  */
54
  protected $disable_output = false;
55
 
56
- /**
57
- * @access protected
58
- * @var bool
59
- */
60
- protected $postMessage = '';
61
-
62
  /**
63
  * The class constructor.
64
  * Use the get_instance() static method to get the instance you need.
65
  *
66
  * @access private
67
  *
68
- * @param string $id @see Kirki_Config::get_instance()
69
- * @param array $args @see Kirki_Config::get_instance()
70
  */
71
  private function __construct( $id = 'global', $args = array() ) {
72
 
73
- // Get defaults from the class
74
  $defaults = get_class_vars( __CLASS__ );
75
- // skip the what we don't need in this context
76
  unset( $defaults['config_final'] );
77
  unset( $defaults['instances'] );
78
  // Apply any kirki/config global filters.
79
  $defaults = apply_filters( 'kirki/config', $defaults );
80
- // Merge our args with the defaults
81
  $args = wp_parse_args( $args, $defaults );
82
 
83
- // Modify default values with the defined ones
84
  foreach ( $args as $key => $value ) {
85
  // Is this property whitelisted?
86
  if ( property_exists( $this, $key ) ) {
@@ -99,9 +121,9 @@ if ( ! class_exists( 'Kirki_Config' ) ) {
99
  *
100
  * @static
101
  * @access public
102
- * @param string $id Config ID
103
- * @param array $args {
104
- * Optional. Arguments to override config defaults.
105
  *
106
  * @type string $capability @see https://codex.wordpress.org/Roles_and_Capabilities
107
  * @type string $option_type theme_mod or option.
@@ -111,7 +133,6 @@ if ( ! class_exists( 'Kirki_Config' ) ) {
111
  * @type array $compiler Not yet fully implemented
112
  * @type bool $disable_output If set to true, no CSS will be generated
113
  * from fields using this configuration.
114
- * @type string $postMessage
115
  * }
116
  *
117
  * @return Kirki_Config
@@ -119,7 +140,7 @@ if ( ! class_exists( 'Kirki_Config' ) ) {
119
  public static function get_instance( $id = 'global', $args = array() ) {
120
 
121
  $id = trim( esc_attr( $id ) );
122
- $id = ( '' == $id ) ? 'global' : $id;
123
 
124
  $id_md5 = md5( $id );
125
  if ( ! isset( self::$instances[ $id_md5 ] ) ) {
@@ -129,8 +150,6 @@ if ( ! class_exists( 'Kirki_Config' ) ) {
129
 
130
  }
131
 
132
-
133
-
134
  /**
135
  * Returns the $config_final property
136
  *
@@ -143,7 +162,5 @@ if ( ! class_exists( 'Kirki_Config' ) ) {
143
  return $this->config_final;
144
 
145
  }
146
-
147
  }
148
-
149
  }
1
  <?php
2
+ /**
3
+ * Processes configurations.
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Config' ) ) {
13
 
14
+ /**
15
+ * The Kirki_Config object
16
+ */
17
  final class Kirki_Config {
18
 
19
  /**
20
+ * Each instance is stored separately in this array.
21
+ *
22
  * @static
23
  * @access private
24
  * @var array
26
  private static $instances = array();
27
 
28
  /**
29
+ * The finalized configuration array.
30
+ *
31
  * @access protected
32
  * @var array
33
  */
34
  protected $config_final = array();
35
 
36
  /**
37
+ * The configuration ID.
38
+ *
39
  * @access protected
40
  * @var string
41
  */
42
  protected $id = 'global';
43
 
44
  /**
45
+ * Capability (fields will inherit this).
46
+ *
47
  * @access protected
48
  * @var string
49
  */
50
  protected $capability = 'edit_theme_options';
51
 
52
  /**
53
+ * The data-type we'll be using.
54
+ *
55
  * @access protected
56
  * @var string
57
  */
58
  protected $option_type = 'theme_mod';
59
 
60
  /**
61
+ * If we're using serialized options, then this is the global option name.
62
+ *
63
  * @access protected
64
  * @var string
65
  */
66
  protected $option_name = '';
67
 
68
  /**
69
+ * The compiler.
70
+ *
71
  * @access protected
72
  * @var array
73
  */
74
  protected $compiler = array();
75
 
76
  /**
77
+ * Set to true if you want to completely disable any Kirki-generated CSS.
78
+ *
79
  * @access protected
80
  * @var bool
81
  */
82
  protected $disable_output = false;
83
 
 
 
 
 
 
 
84
  /**
85
  * The class constructor.
86
  * Use the get_instance() static method to get the instance you need.
87
  *
88
  * @access private
89
  *
90
+ * @param string $id @see Kirki_Config::get_instance().
91
+ * @param array $args @see Kirki_Config::get_instance().
92
  */
93
  private function __construct( $id = 'global', $args = array() ) {
94
 
95
+ // Get defaults from the class.
96
  $defaults = get_class_vars( __CLASS__ );
97
+ // Skip the what we don't need in this context.
98
  unset( $defaults['config_final'] );
99
  unset( $defaults['instances'] );
100
  // Apply any kirki/config global filters.
101
  $defaults = apply_filters( 'kirki/config', $defaults );
102
+ // Merge our args with the defaults.
103
  $args = wp_parse_args( $args, $defaults );
104
 
105
+ // Modify default values with the defined ones.
106
  foreach ( $args as $key => $value ) {
107
  // Is this property whitelisted?
108
  if ( property_exists( $this, $key ) ) {
121
  *
122
  * @static
123
  * @access public
124
+ * @param string $id Config ID.
125
+ * @param array $args {
126
+ * Optional. Arguments to override config defaults.
127
  *
128
  * @type string $capability @see https://codex.wordpress.org/Roles_and_Capabilities
129
  * @type string $option_type theme_mod or option.
133
  * @type array $compiler Not yet fully implemented
134
  * @type bool $disable_output If set to true, no CSS will be generated
135
  * from fields using this configuration.
 
136
  * }
137
  *
138
  * @return Kirki_Config
140
  public static function get_instance( $id = 'global', $args = array() ) {
141
 
142
  $id = trim( esc_attr( $id ) );
143
+ $id = ( '' === $id ) ? 'global' : $id;
144
 
145
  $id_md5 = md5( $id );
146
  if ( ! isset( self::$instances[ $id_md5 ] ) ) {
150
 
151
  }
152
 
 
 
153
  /**
154
  * Returns the $config_final property
155
  *
162
  return $this->config_final;
163
 
164
  }
 
165
  }
 
166
  }
includes/class-kirki-control.php CHANGED
@@ -1,16 +1,32 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Control' ) ) {
4
 
 
 
 
5
  class Kirki_Control {
6
 
7
  /**
 
 
8
  * @access protected
9
  * @var WP_Customize_Manager
10
  */
11
  protected $wp_customize;
12
 
13
  /**
 
 
14
  * @access protected
15
  * @var array
16
  */
@@ -21,20 +37,20 @@ if ( ! class_exists( 'Kirki_Control' ) ) {
21
  * Creates the actual controls in the customizer.
22
  *
23
  * @access public
24
- * @param $args array the field definition as sanitized in Kirki_Field
25
  */
26
  public function __construct( $args ) {
27
 
28
- // Set the $wp_customize property
29
  global $wp_customize;
30
  if ( ! $wp_customize ) {
31
  return;
32
  }
33
  $this->wp_customize = $wp_customize;
34
 
35
- // Set the control types
36
  $this->set_control_types();
37
- // Add the control
38
  $this->add_control( $args );
39
 
40
  }
@@ -43,15 +59,15 @@ if ( ! class_exists( 'Kirki_Control' ) ) {
43
  * Get the class name of the class needed to create tis control.
44
  *
45
  * @access private
46
- * @param $args array the field definition as sanitized in Kirki_Field
47
  *
48
- * @return string the name of the class that will be used to create this control
49
  */
50
  final private function get_control_class_name( $args ) {
51
 
52
- // Set a default class name
53
  $class_name = 'WP_Customize_Control';
54
- // Get the classname from the array of control classnames
55
  if ( array_key_exists( $args['type'], $this->control_types ) ) {
56
  $class_name = $this->control_types[ $args['type'] ];
57
  }
@@ -63,15 +79,13 @@ if ( ! class_exists( 'Kirki_Control' ) ) {
63
  * Adds the control.
64
  *
65
  * @access protected
66
- * @param $args array the field definition as sanitized in Kirki_Field
67
- *
68
- * @return void
69
  */
70
  final protected function add_control( $args ) {
71
 
72
- // Get the name of the class we're going to use
73
  $class_name = $this->get_control_class_name( $args );
74
- // Add the control
75
  $this->wp_customize->add_control( new $class_name( $this->wp_customize, $args['settings'], $args ) );
76
 
77
  }
@@ -114,20 +128,16 @@ if ( ! class_exists( 'Kirki_Control' ) ) {
114
  'image' => 'WP_Customize_Image_Control',
115
  'cropped_image' => 'WP_Customize_Cropped_Image_Control',
116
  'upload' => 'WP_Customize_Upload_Control',
117
- 'dropdown-pages' => 'Kirki_Controls_Dropdown_Pages_Control'
118
  ) );
119
 
120
- // Make sure the defined classes actually exist
121
  foreach ( $this->control_types as $key => $classname ) {
122
 
123
  if ( ! class_exists( $classname ) ) {
124
  unset( $this->control_types[ $key ] );
125
  }
126
-
127
  }
128
-
129
  }
130
-
131
  }
132
-
133
  }
1
  <?php
2
+ /**
3
+ * Controls handler
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Control' ) ) {
13
 
14
+ /**
15
+ * Our main Kirki_Control object
16
+ */
17
  class Kirki_Control {
18
 
19
  /**
20
+ * The $wp_customize WordPress global.
21
+ *
22
  * @access protected
23
  * @var WP_Customize_Manager
24
  */
25
  protected $wp_customize;
26
 
27
  /**
28
+ * An array of all available control types.
29
+ *
30
  * @access protected
31
  * @var array
32
  */
37
  * Creates the actual controls in the customizer.
38
  *
39
  * @access public
40
+ * @param array $args The field definition as sanitized in Kirki_Field.
41
  */
42
  public function __construct( $args ) {
43
 
44
+ // Set the $wp_customize property.
45
  global $wp_customize;
46
  if ( ! $wp_customize ) {
47
  return;
48
  }
49
  $this->wp_customize = $wp_customize;
50
 
51
+ // Set the control types.
52
  $this->set_control_types();
53
+ // Add the control.
54
  $this->add_control( $args );
55
 
56
  }
59
  * Get the class name of the class needed to create tis control.
60
  *
61
  * @access private
62
+ * @param array $args The field definition as sanitized in Kirki_Field.
63
  *
64
+ * @return string the name of the class that will be used to create this control.
65
  */
66
  final private function get_control_class_name( $args ) {
67
 
68
+ // Set a default class name.
69
  $class_name = 'WP_Customize_Control';
70
+ // Get the classname from the array of control classnames.
71
  if ( array_key_exists( $args['type'], $this->control_types ) ) {
72
  $class_name = $this->control_types[ $args['type'] ];
73
  }
79
  * Adds the control.
80
  *
81
  * @access protected
82
+ * @param array $args The field definition as sanitized in Kirki_Field.
 
 
83
  */
84
  final protected function add_control( $args ) {
85
 
86
+ // Get the name of the class we're going to use.
87
  $class_name = $this->get_control_class_name( $args );
88
+ // Add the control.
89
  $this->wp_customize->add_control( new $class_name( $this->wp_customize, $args['settings'], $args ) );
90
 
91
  }
128
  'image' => 'WP_Customize_Image_Control',
129
  'cropped_image' => 'WP_Customize_Cropped_Image_Control',
130
  'upload' => 'WP_Customize_Upload_Control',
131
+ 'dropdown-pages' => 'Kirki_Controls_Dropdown_Pages_Control',
132
  ) );
133
 
134
+ // Make sure the defined classes actually exist.
135
  foreach ( $this->control_types as $key => $classname ) {
136
 
137
  if ( ! class_exists( $classname ) ) {
138
  unset( $this->control_types[ $key ] );
139
  }
 
140
  }
 
141
  }
 
142
  }
 
143
  }
includes/class-kirki-customize-control.php CHANGED
@@ -1,27 +1,74 @@
1
  <?php
2
  /**
 
 
 
 
3
  * @package Kirki
4
  * @subpackage Controls
5
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
6
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
7
  * @since 1.0
8
  */
9
 
10
- // Exit if accessed directly
11
  if ( ! defined( 'ABSPATH' ) ) {
12
  exit;
13
  }
14
 
15
  if ( ! class_exists( 'Kirki_Customize_Control' ) ) {
16
 
 
 
 
 
17
  class Kirki_Customize_Control extends WP_Customize_Control {
18
 
19
- public $tooltip = '';
20
- public $js_vars = array();
21
- public $output = array();
22
- public $option_type = 'theme_mod';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  public $kirki_config = 'global';
24
 
 
 
 
 
 
25
  public function to_json() {
26
  parent::to_json();
27
 
@@ -44,8 +91,11 @@ if ( ! class_exists( 'Kirki_Customize_Control' ) ) {
44
  }
45
  }
46
 
 
 
 
 
 
47
  protected function render_content() {}
48
-
49
  }
50
-
51
  }
1
  <?php
2
  /**
3
+ * A wrapper class for WP_Customize_Control.
4
+ * We'll be using this to define things that all Kirki fields must inherit.
5
+ * Helps us keep a cleaner codebase and avoid code duplication.
6
+ *
7
  * @package Kirki
8
  * @subpackage Controls
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
11
  * @since 1.0
12
  */
13
 
14
+ // Exit if accessed directly.
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Customize_Control' ) ) {
20
 
21
+ /**
22
+ * The parent class for all Kirki controls.
23
+ * Other controls should extend this object.
24
+ */
25
  class Kirki_Customize_Control extends WP_Customize_Control {
26
 
27
+ /**
28
+ * Tooltips content.
29
+ *
30
+ * @access public
31
+ * @var string
32
+ */
33
+ public $tooltip = '';
34
+
35
+ /**
36
+ * Used to automatically generate all postMessage scripts.
37
+ *
38
+ * @access public
39
+ * @var array
40
+ */
41
+ public $js_vars = array();
42
+
43
+ /**
44
+ * Used to automatically generate all CSS output.
45
+ *
46
+ * @access public
47
+ * @var array
48
+ */
49
+ public $output = array();
50
+
51
+ /**
52
+ * Data type
53
+ *
54
+ * @access public
55
+ * @var string
56
+ */
57
+ public $option_type = 'theme_mod';
58
+
59
+ /**
60
+ * The kirki_config we're using for this control
61
+ *
62
+ * @access public
63
+ * @var string
64
+ */
65
  public $kirki_config = 'global';
66
 
67
+ /**
68
+ * Refresh the parameters passed to the JavaScript via JSON.
69
+ *
70
+ * @see WP_Customize_Control::to_json()
71
+ */
72
  public function to_json() {
73
  parent::to_json();
74
 
91
  }
92
  }
93
 
94
+ /**
95
+ * Render the control's content.
96
+ *
97
+ * @see WP_Customize_Control::render_content()
98
+ */
99
  protected function render_content() {}
 
100
  }
 
101
  }
includes/class-kirki-enqueue.php CHANGED
@@ -18,6 +18,7 @@ if ( ! defined( 'ABSPATH' ) ) {
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Enqueue' ) ) {
 
21
  /**
22
  * Enqueues JS & CSS assets
23
  */
@@ -76,7 +77,7 @@ if ( ! class_exists( 'Kirki_Enqueue' ) ) {
76
 
77
  // Register the color-alpha picker.
78
  wp_enqueue_style( 'wp-color-picker' );
79
- wp_register_script( 'wp-color-picker-alpha', trailingslashit( Kirki::$url ) . 'assets/js/vendor/wp-color-picker-alpha.js', array( 'wp-color-picker' ), '1.2' );
80
 
81
  // Register the jquery-ui-spinner.
82
  wp_register_script( 'jquery-ui-spinner', trailingslashit( Kirki::$url ) . 'assets/js/vendor/jquery-ui-spinner', array( 'jquery', 'jquery-ui-core', 'jquery-ui-button' ) );
@@ -89,35 +90,35 @@ if ( ! class_exists( 'Kirki_Enqueue' ) ) {
89
 
90
  // An array of control scripts and their dependencies.
91
  $controls_scripts = array(
92
- 'checkbox' => array( 'jquery' ),
93
- 'code' => array( 'jquery', 'codemirror' ),
94
- 'color-alpha' => array( 'jquery', 'wp-color-picker-alpha' ),
95
- 'color-palette' => array( 'jquery', 'jquery-ui-button' ),
96
- 'dashicons' => array( 'jquery' ),
97
- 'date' => array( 'jquery', 'jquery-ui', 'jquery-ui-datepicker' ),
98
- 'dimension' => array( 'jquery', 'kirki-validate-css-value' ),
99
- 'dropdown-pages' => array( 'jquery', 'selectize' ),
100
- 'editor' => array( 'jquery' ),
101
- 'generic' => array( 'jquery' ),
102
- 'multicheck' => array( 'jquery' ),
103
- 'multicolor' => array( 'jquery', 'wp-color-picker-alpha' ),
104
- 'number' => array( 'jquery', 'jquery-ui-spinner' ),
105
- 'palette' => array( 'jquery', 'jquery-ui-button' ),
106
- 'preset' => array( 'jquery', 'selectize', 'kirki-set-value' ),
107
- 'radio-buttonset' => array( 'jquery' ),
108
- 'radio-image' => array( 'jquery' ),
109
- 'radio' => array( 'jquery' ),
110
  'repeater' => array( 'jquery', 'customize-base', 'jquery-ui-core', 'jquery-ui-sortable' ),
111
- 'select' => array( 'jquery', 'selectize', 'kirki-array-to-object' ),
112
- 'slider' => array( 'jquery' ),
113
- 'sortable' => array( 'jquery', 'jquery-ui-core', 'jquery-ui-sortable', 'serialize-js' ),
114
- 'spacing' => array( 'jquery' ),
115
- 'switch' => array( 'jquery' ),
116
- 'toggle' => array( 'jquery' ),
117
- 'typography' => array( 'jquery', 'selectize', 'wp-color-picker-alpha' ),
118
  );
119
  foreach ( $controls_scripts as $id => $dependencies ) {
120
- wp_register_script( 'kirki-' . $id, trailingslashit( Kirki::$url ) . 'assets/js/controls/' . $id . '.js', $dependencies, false );
121
  }
122
 
123
  $google_fonts = Kirki_Fonts::get_google_fonts();
@@ -224,7 +225,7 @@ if ( ! class_exists( 'Kirki_Enqueue' ) ) {
224
  $js_vars_fields[ $field['settings'] ] = $field['js_vars'];
225
  }
226
  }
227
- wp_localize_script( 'kirki_auto_postmessage', 'js_vars', $js_vars_fields );
228
  }
229
  }
230
  }
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Enqueue' ) ) {
21
+
22
  /**
23
  * Enqueues JS & CSS assets
24
  */
77
 
78
  // Register the color-alpha picker.
79
  wp_enqueue_style( 'wp-color-picker' );
80
+ wp_register_script( 'wp-color-picker-alpha', trailingslashit( Kirki::$url ) . 'assets/js/vendor/wp-color-picker-alpha.js', array( 'wp-color-picker' ), '1.2', true );
81
 
82
  // Register the jquery-ui-spinner.
83
  wp_register_script( 'jquery-ui-spinner', trailingslashit( Kirki::$url ) . 'assets/js/vendor/jquery-ui-spinner', array( 'jquery', 'jquery-ui-core', 'jquery-ui-button' ) );
90
 
91
  // An array of control scripts and their dependencies.
92
  $controls_scripts = array(
93
+ 'checkbox' => array( 'jquery', 'customize-base' ),
94
+ 'code' => array( 'jquery', 'customize-base', 'codemirror' ),
95
+ 'color-alpha' => array( 'jquery', 'customize-base', 'wp-color-picker-alpha' ),
96
+ 'color-palette' => array( 'jquery', 'customize-base', 'jquery-ui-button' ),
97
+ 'dashicons' => array( 'jquery', 'customize-base' ),
98
+ 'date' => array( 'jquery', 'customize-base', 'jquery-ui', 'jquery-ui-datepicker' ),
99
+ 'dimension' => array( 'jquery', 'customize-base', 'kirki-validate-css-value' ),
100
+ 'dropdown-pages' => array( 'jquery', 'customize-base', 'selectize' ),
101
+ 'editor' => array( 'jquery', 'customize-base' ),
102
+ 'generic' => array( 'jquery', 'customize-base' ),
103
+ 'multicheck' => array( 'jquery', 'customize-base' ),
104
+ 'multicolor' => array( 'jquery', 'customize-base', 'wp-color-picker-alpha' ),
105
+ 'number' => array( 'jquery', 'customize-base', 'jquery-ui-spinner' ),
106
+ 'palette' => array( 'jquery', 'customize-base', 'jquery-ui-button' ),
107
+ 'preset' => array( 'jquery', 'customize-base', 'selectize', 'kirki-set-value' ),
108
+ 'radio-buttonset' => array( 'jquery', 'customize-base' ),
109
+ 'radio-image' => array( 'jquery', 'customize-base' ),
110
+ 'radio' => array( 'jquery', 'customize-base' ),
111
  'repeater' => array( 'jquery', 'customize-base', 'jquery-ui-core', 'jquery-ui-sortable' ),
112
+ 'select' => array( 'jquery', 'customize-base', 'selectize', 'kirki-array-to-object' ),
113
+ 'slider' => array( 'jquery', 'customize-base' ),
114
+ 'sortable' => array( 'jquery', 'customize-base', 'jquery-ui-core', 'jquery-ui-sortable', 'serialize-js' ),
115
+ 'spacing' => array( 'jquery', 'customize-base' ),
116
+ 'switch' => array( 'jquery', 'customize-base' ),
117
+ 'toggle' => array( 'jquery', 'customize-base' ),
118
+ 'typography' => array( 'jquery', 'customize-base', 'selectize', 'wp-color-picker-alpha' ),
119
  );
120
  foreach ( $controls_scripts as $id => $dependencies ) {
121
+ wp_register_script( 'kirki-' . $id, trailingslashit( Kirki::$url ) . 'assets/js/controls/' . $id . '.js', $dependencies, false, true );
122
  }
123
 
124
  $google_fonts = Kirki_Fonts::get_google_fonts();
225
  $js_vars_fields[ $field['settings'] ] = $field['js_vars'];
226
  }
227
  }
228
+ wp_localize_script( 'kirki_auto_postmessage', 'jsvars', $js_vars_fields );
229
  }
230
  }
231
  }
includes/class-kirki-explode-background-field.php CHANGED
@@ -1,12 +1,29 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
 
 
 
 
4
  class Kirki_Explode_Background_Field {
 
5
  /**
6
  * Build the background fields.
7
  * Takes a single field with type = background and explodes it to multiple controls.
8
  *
9
- * @param array
10
  * @return null|array
11
  */
12
  public static function explode( $field ) {
@@ -14,7 +31,7 @@ if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
14
  $choices = self::background_choices();
15
 
16
  // Early exit if this is not a background field.
17
- if ( 'background' != $field['type'] ) {
18
  return;
19
  }
20
 
@@ -29,7 +46,7 @@ if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
29
  foreach ( $field['default'] as $key => $value ) {
30
 
31
  // No need to process the opacity, it is factored in the color control.
32
- if ( 'opacity' == $key ) {
33
  continue;
34
  }
35
 
@@ -44,8 +61,7 @@ if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
44
 
45
  switch ( $key ) {
46
  case 'color':
47
- // Use 'color-alpha' instead of 'color' if default is an rgba value
48
- // or if 'opacity' is set.
49
  $type = ( false !== strpos( $field['default']['color'], 'rgba' ) ) ? 'color-alpha' : 'color';
50
  $type = ( isset( $field['default']['opacity'] ) ) ? 'color-alpha' : $type;
51
  if ( isset( $field['default']['opacity'] ) && false === strpos( $value, 'rgb' ) ) {
@@ -68,14 +84,14 @@ if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
68
  }
69
 
70
  // If we're using options & option_name is set, then we need to modify the setting.
71
- if ( ( isset( $field['option_type'] ) && 'option' == $field['option_type'] && isset( $field['option_name'] ) ) && ! empty( $field['option_name'] ) ) {
72
  $property_setting = str_replace( ']', '', str_replace( $field['option_name'] . '[', '', $field['settings'] ) );
73
  $property_setting = esc_attr( $field['option_name'] ) . '[' . esc_attr( $property_setting ) . '_' . $setting . ']';
74
  } else {
75
  $property_setting = esc_attr( $field['settings'] ) . '_' . $setting;
76
  }
77
 
78
- // Build the field's output element
79
  $output_element = $field['output'];
80
  if ( ! empty( $field['output'] ) ) {
81
  if ( is_array( $field['output'] ) ) {
@@ -121,7 +137,7 @@ if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
121
  /**
122
  * Parse all fields and add the new background fields
123
  *
124
- * @param array
125
  * @return array
126
  */
127
  public static function process_fields( $fields ) {
@@ -130,7 +146,7 @@ if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
130
  /**
131
  * Make sure background fields are exploded
132
  */
133
- if ( isset( $field['type'] ) && 'background' == $field['type'] ) {
134
  $explode = self::explode( $field );
135
  $fields = array_merge( $fields, $explode );
136
  }
@@ -143,6 +159,7 @@ if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
143
 
144
  /**
145
  * The background choices.
 
146
  * @return array<string,array>
147
  */
148
  public static function background_choices() {
@@ -181,6 +198,5 @@ if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
181
  );
182
 
183
  }
184
-
185
  }
186
  }
1
  <?php
2
+ /**
3
+ * Background fields are just lots of sub-fields combined.
4
+ * We have to actually separate the field to its sub-parts
5
+ * and register each one of them separately.
6
+ *
7
+ * @package Kirki
8
+ * @category Core
9
+ * @author Aristeides Stathopoulos
10
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
12
+ * @since 1.0
13
+ */
14
 
15
  if ( ! class_exists( 'Kirki_Explode_Background_Field' ) ) {
16
+
17
+ /**
18
+ * Explodes background fields and creates sub-fields for it.
19
+ */
20
  class Kirki_Explode_Background_Field {
21
+
22
  /**
23
  * Build the background fields.
24
  * Takes a single field with type = background and explodes it to multiple controls.
25
  *
26
+ * @param array $field The field arguments.
27
  * @return null|array
28
  */
29
  public static function explode( $field ) {
31
  $choices = self::background_choices();
32
 
33
  // Early exit if this is not a background field.
34
+ if ( 'background' !== $field['type'] ) {
35
  return;
36
  }
37
 
46
  foreach ( $field['default'] as $key => $value ) {
47
 
48
  // No need to process the opacity, it is factored in the color control.
49
+ if ( 'opacity' === $key ) {
50
  continue;
51
  }
52
 
61
 
62
  switch ( $key ) {
63
  case 'color':
64
+ // Use 'color-alpha' instead of 'color' if default is an rgba value or if 'opacity' is set.
 
65
  $type = ( false !== strpos( $field['default']['color'], 'rgba' ) ) ? 'color-alpha' : 'color';
66
  $type = ( isset( $field['default']['opacity'] ) ) ? 'color-alpha' : $type;
67
  if ( isset( $field['default']['opacity'] ) && false === strpos( $value, 'rgb' ) ) {
84
  }
85
 
86
  // If we're using options & option_name is set, then we need to modify the setting.
87
+ if ( ( isset( $field['option_type'] ) && 'option' === $field['option_type'] && isset( $field['option_name'] ) ) && ! empty( $field['option_name'] ) ) {
88
  $property_setting = str_replace( ']', '', str_replace( $field['option_name'] . '[', '', $field['settings'] ) );
89
  $property_setting = esc_attr( $field['option_name'] ) . '[' . esc_attr( $property_setting ) . '_' . $setting . ']';
90
  } else {
91
  $property_setting = esc_attr( $field['settings'] ) . '_' . $setting;
92
  }
93
 
94
+ // Build the field's output element.
95
  $output_element = $field['output'];
96
  if ( ! empty( $field['output'] ) ) {
97
  if ( is_array( $field['output'] ) ) {
137
  /**
138
  * Parse all fields and add the new background fields
139
  *
140
+ * @param array $fields An array of all the generated fields.
141
  * @return array
142
  */
143
  public static function process_fields( $fields ) {
146
  /**
147
  * Make sure background fields are exploded
148
  */
149
+ if ( isset( $field['type'] ) && 'background' === $field['type'] ) {
150
  $explode = self::explode( $field );
151
  $fields = array_merge( $fields, $explode );
152
  }
159
 
160
  /**
161
  * The background choices.
162
+ *
163
  * @return array<string,array>
164
  */
165
  public static function background_choices() {
198
  );
199
 
200
  }
 
201
  }
202
  }
includes/class-kirki-field.php CHANGED
@@ -1,99 +1,159 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field' ) ) {
 
 
 
 
 
4
  class Kirki_Field {
5
 
6
  /**
 
 
 
7
  * @access protected
8
  * @var string
9
  */
10
  protected $kirki_config = 'global';
11
 
12
  /**
 
 
13
  * @access protected
14
  * @var string
15
  */
16
  protected $capability = 'edit_theme_options';
17
 
18
  /**
 
 
 
 
19
  * @access protected
20
  * @var string
21
  */
22
  protected $option_name = '';
23
 
24
  /**
 
 
25
  * @access protected
26
  * @var string
27
  */
28
  protected $option_type = 'theme_mod';
29
 
30
  /**
 
 
31
  * @access protected
32
  * @var string|array
33
  */
34
  protected $settings = '';
35
 
36
  /**
 
 
37
  * @access protected
38
  * @var bool
39
  */
40
  protected $disable_output = false;
41
 
42
  /**
 
 
43
  * @access protected
44
  * @var string
45
  */
46
  protected $type = 'kirki-generic';
47
 
48
  /**
 
 
 
 
49
  * @access protected
50
  * @var array
51
  */
52
  protected $choices = array();
53
 
54
  /**
 
 
 
55
  * @access protected
56
  * @var string
57
  */
58
  protected $section = '';
59
 
60
  /**
 
 
61
  * @access protected
62
  * @var string|array
63
  */
64
  protected $default = '';
65
 
66
  /**
 
 
 
67
  * @access protected
68
  * @var int
69
  */
70
  protected $priority = 10;
71
 
72
  /**
 
 
 
73
  * @access protected
74
  * @var string
75
  */
76
  protected $id = '';
77
 
78
  /**
 
 
 
79
  * @access protected
80
  * @var array
81
  */
82
  protected $output = array();
83
 
84
  /**
 
 
 
 
 
85
  * @access protected
86
  * @var array
87
  */
88
  protected $js_vars = array();
89
 
90
  /**
 
 
 
91
  * @access protected
92
  * @var array
93
  */
94
  protected $variables = array();
95
 
96
  /**
 
 
97
  * @access protected
98
  * @var string
99
  */
@@ -116,30 +176,44 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
116
  protected $mode = '';
117
 
118
  /**
 
 
119
  * @access protected
120
  * @var string|array
121
  */
122
  protected $active_callback = '__return_true';
123
 
124
  /**
 
 
125
  * @access protected
126
  * @var string|array
127
  */
128
  protected $sanitize_callback = '';
129
 
130
  /**
 
 
 
131
  * @access protected
132
  * @var string
133
  */
134
  protected $transport = 'refresh';
135
 
136
  /**
 
 
137
  * @access protected
138
  * @var array
139
  */
140
  protected $required = array();
141
 
142
  /**
 
 
 
 
 
143
  * @access protected
144
  * @var int
145
  */
@@ -177,16 +251,24 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
177
  */
178
  protected $flex_height = false;
179
 
 
 
 
 
 
 
 
 
180
  /**
181
  * The class constructor.
182
  * Parses and sanitizes all field arguments.
183
- * Then it adds the field to Kirki::$fields
184
  *
185
  * @access public
186
- * @param $config_id string The ID of the config we want to use.
187
- * Defaults to "global".
188
- * Configs are handled by the Kirki_Config class.
189
- * @param $args array The arguments of the field.
190
  */
191
  public function __construct( $config_id = 'global', $args = array() ) {
192
 
@@ -199,21 +281,24 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
199
  if ( is_string( $config_id ) ) {
200
  $args['kirki_config'] = $config_id;
201
  }
 
202
  // In case the user only provides 1 argument,
203
- // assume that the provided argument is $args and set $config_id = 'global'
204
  if ( is_array( $config_id ) && empty( $args ) ) {
205
  $args = $config_id;
206
  $this->kirki_config = 'global';
207
  }
208
  $this->kirki_config = trim( esc_attr( $config_id ) );
209
- if ( '' == $config_id ) {
210
  $this->kirki_config = 'global';
211
  }
212
- // Get defaults from the class
 
213
  $defaults = get_class_vars( __CLASS__ );
214
- // Get the config arguments, and merge them with the defaults
 
215
  $config_defaults = ( isset( Kirki::$config['global'] ) ) ? Kirki::$config['global'] : array();
216
- if ( 'global' != $this->kirki_config && isset( Kirki::$config[ $this->kirki_config ] ) ) {
217
  $config_defaults = Kirki::$config[ $this->kirki_config ];
218
  }
219
  $config_defaults = ( is_array( $config_defaults ) ) ? $config_defaults : array();
@@ -224,29 +309,38 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
224
  }
225
  }
226
  }
227
- // Merge our args with the defaults
 
228
  $args = wp_parse_args( $args, $defaults );
229
- // Set the class properties using the parsed args
 
230
  foreach ( $args as $key => $value ) {
231
  $this->$key = $value;
232
  }
 
233
  // An array of whitelisted properties that don't need to be sanitized here.
234
- // format: $key => $default_value
235
  $whitelisted = apply_filters( 'kirki/' . $this->kirki_config . '/fields/properties_whitelist', array(
236
- 'label' => '', // this is sanitized later in the controls themselves
237
- 'description' => '', // this is sanitized later in the controls themselves
238
- 'mode' => '', // only used for backwards-compatibility reasons
239
- 'fields' => array(), // Used in repeater fields
 
240
  ) );
241
 
242
  $this->set_field( $whitelisted );
243
 
244
  }
245
 
 
 
 
 
 
246
  protected function set_field( $whitelisted_properties = array() ) {
247
 
248
  $properties = get_class_vars( __CLASS__ );
249
- // remove any whitelisted properties from above
250
  // These will get a free pass, completely unfiltered.
251
  foreach ( $whitelisted_properties as $key => $default_value ) {
252
  if ( isset( $properties[ $key ] ) ) {
@@ -268,9 +362,9 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
268
  }
269
  }
270
 
271
- // Sanitize the properties, skipping the ones run from the $priorities
272
  foreach ( $properties as $property => $value ) {
273
- if ( in_array( $property, $priorities ) ) {
274
  continue;
275
  }
276
  if ( method_exists( $this, 'set_' . $property ) ) {
@@ -279,13 +373,13 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
279
  }
280
  }
281
 
282
- // Get all arguments with their values
283
  $args = get_class_vars( __CLASS__ );
284
  foreach ( $args as $key => $default_value ) {
285
  $args[ $key ] = $this->$key;
286
  }
287
 
288
- // add the whitelisted properties through the back door
289
  foreach ( $whitelisted_properties as $key => $default_value ) {
290
  if ( ! isset( $this->$key ) ) {
291
  $this->$key = $default_value;
@@ -293,11 +387,11 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
293
  $args[ $key ] = $this->$key;
294
  }
295
 
296
- // Add the field to the static $fields variable properly indexed
297
  Kirki::$fields[ $this->settings ] = $args;
298
 
299
- if ( 'background' == $this->type ) {
300
- // Build the background fields
301
  Kirki::$fields = Kirki_Explode_Background_Field::process_fields( Kirki::$fields );
302
  }
303
 
@@ -307,14 +401,12 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
307
  * This allows us to process this on a field-basis
308
  * by using sub-classes which can override this method.
309
  *
310
- * $default
311
- *
312
  * @access protected
313
  */
314
  protected function set_default() {}
315
 
316
  /**
317
- * escape $kirki_config
318
  *
319
  * @access protected
320
  */
@@ -325,7 +417,7 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
325
  }
326
 
327
  /**
328
- * escape $option_name
329
  *
330
  * @access protected
331
  */
@@ -337,7 +429,7 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
337
 
338
 
339
  /**
340
- * escape the $section
341
  *
342
  * @access protected
343
  */
@@ -354,11 +446,11 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
354
  * @access protected
355
  */
356
  protected function set_capability() {
357
- // early exit if we're using 'edit_theme_options'.
358
- if ( 'edit_theme_options' == $this->capability ) {
359
  return;
360
  }
361
- // escape & trim the capability
362
  $this->capability = trim( esc_attr( $this->capability ) );
363
  }
364
 
@@ -369,17 +461,16 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
369
  */
370
  protected function set_option_type() {
371
 
372
- // If we have an option_name
373
- // then make sure we're using options and not theme_mods
374
- if ( '' != $this->option_name ) {
375
  $this->option_type = 'option';
376
  }
377
- // Take care of common typos
378
- if ( 'options' == $this->option_type ) {
379
  $this->option_type = 'option';
380
  }
381
- // Take care of common typos
382
- if ( 'theme_mods' == $this->option_type ) {
383
  $this->option_type = 'theme_mod';
384
  }
385
  }
@@ -402,8 +493,8 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
402
  $settings = array();
403
  foreach ( $this->settings as $setting_key => $setting_value ) {
404
  $settings[ sanitize_key( $setting_key ) ] = esc_attr( $setting_value );
405
- // If we're using serialized options then we need to spice this up
406
- if ( 'option' == $this->option_type && '' != $this->option_name && ( false === strpos( $setting_key, '[' ) ) ) {
407
  $settings[ sanitize_key( $setting_key ) ] = esc_attr( $this->option_name ) . '[' . esc_attr( $setting_value ).']';
408
  }
409
  }
@@ -415,13 +506,13 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
415
  }
416
 
417
  /**
418
- * escapes the tooltip messages
419
  *
420
  * @access protected
421
  */
422
  protected function set_tooltip() {
423
 
424
- if ( '' != $this->tooltip ) {
425
  $this->tooltip = wp_strip_all_tags( $this->tooltip );
426
  return;
427
  }
@@ -441,11 +532,11 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
441
  $this->active_callback = array( 'Kirki_Active_Callback', 'evaluate' );
442
  return;
443
  }
444
- // No need to proceed any further if we're using the default value
445
- if ( '__return_true' == $this->active_callback ) {
446
  return;
447
  }
448
- // Make sure the function is callable, otherwise fallback to __return_true
449
  if ( ! is_callable( $this->active_callback ) ) {
450
  $this->active_callback = '__return_true';
451
  }
@@ -459,7 +550,7 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
459
  */
460
  protected function set_type() {
461
 
462
- // escape the control type (it doesn't hurt to be sure)
463
  $this->type = esc_attr( $this->type );
464
 
465
  }
@@ -504,7 +595,7 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
504
  }
505
 
506
  /**
507
- * Sets the $choices
508
  *
509
  * @access protected
510
  */
@@ -517,7 +608,7 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
517
  }
518
 
519
  /**
520
- * escapes the $disable_output
521
  *
522
  * @access protected
523
  */
@@ -540,7 +631,7 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
540
  if ( ! empty( $this->output ) && ! is_array( $this->output ) ) {
541
  $this->output = array( array( 'element' => $this->output ) );
542
  }
543
- // Convert to array of arrays if needed
544
  if ( isset( $this->output['element'] ) ) {
545
  $this->output = array( $this->output );
546
  }
@@ -549,13 +640,13 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
549
  if ( ! isset( $output['element'] ) ) {
550
  continue;
551
  }
552
- if ( ! isset( $output['property'] ) && ! in_array( $this->type, array( 'typography', 'background' ) ) ) {
553
  continue;
554
  }
555
  if ( ! isset( $output['sanitize_callback'] ) && isset( $output['callback'] ) ) {
556
  $output['sanitize_callback'] = $output['callback'];
557
  }
558
- // Convert element arrays to strings
559
  if ( is_array( $output['element'] ) ) {
560
  $output['element'] = array_unique( $output['element'] );
561
  sort( $output['element'] );
@@ -590,18 +681,18 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
590
  * Check if transport is set to auto.
591
  * If not, then skip the auto-calculations and exit early.
592
  */
593
- if ( 'auto' != $this->transport ) {
594
  return;
595
  }
596
 
597
  // Set transport to refresh initially.
598
- // Serves as a fallback in case we failt to auto-calculate js_vars
599
  $this->transport = 'refresh';
600
  $js_vars = array();
601
  // Try to auto-generate js_vars.
602
  // First we need to check if js_vars are empty, and that output is not empty.
603
  if ( empty( $this->js_vars ) && ! empty( $this->output ) ) {
604
- // start going through each item in the $output array
605
  foreach ( $this->output as $output ) {
606
  $output['function'] = 'css';
607
  // If 'element' or 'property' are not defined, skip this.
@@ -619,13 +710,12 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
619
  continue;
620
  }
621
  // If we got this far, it's safe to add this.
622
-
623
  $js_vars[] = $output;
624
  }
625
 
626
  // Did we manage to get all the items from 'output'?
627
  // If not, then we're missing something so don't add this.
628
- if ( count( $js_vars ) != count( $this->output ) ) {
629
  return;
630
  }
631
  $this->js_vars = $js_vars;
@@ -656,10 +746,10 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
656
  */
657
  protected function set_help() {
658
 
659
- if ( '' != $this->tooltip ) {
660
  return;
661
  }
662
- if ( '' != $this->help ) {
663
  $this->tooltip = wp_strip_all_tags( $this->help );
664
  // $help has been deprecated
665
  $this->help = '';
@@ -675,7 +765,7 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
675
  */
676
  protected function set_transport() {
677
 
678
- if ( 'postmessage' == trim( strtolower( $this->transport ) ) ) {
679
  $this->transport = 'postMessage';
680
  }
681
 
@@ -715,7 +805,5 @@ if ( ! class_exists( 'Kirki_Field' ) ) {
715
  $this->priority = absint( $this->priority );
716
 
717
  }
718
-
719
  }
720
-
721
  }
1
  <?php
2
+ /**
3
+ * Creates and validates field parameters.
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 1.0
11
+ */
12
 
13
  if ( ! class_exists( 'Kirki_Field' ) ) {
14
+
15
+ /**
16
+ * Please do not use this class directly.
17
+ * You should instead extend it per-field-type.
18
+ */
19
  class Kirki_Field {
20
 
21
  /**
22
+ * The ID of the kirki_config we're using.
23
+ *
24
+ * @see Kirki_Config
25
  * @access protected
26
  * @var string
27
  */
28
  protected $kirki_config = 'global';
29
 
30
  /**
31
+ * Thje capability required so that users can edit this field.
32
+ *
33
  * @access protected
34
  * @var string
35
  */
36
  protected $capability = 'edit_theme_options';
37
 
38
  /**
39
+ * If we're using options instead of theme_mods
40
+ * and we want them serialized, this is the option that
41
+ * will saved in the db.
42
+ *
43
  * @access protected
44
  * @var string
45
  */
46
  protected $option_name = '';
47
 
48
  /**
49
+ * Use "theme_mod" or "option".
50
+ *
51
  * @access protected
52
  * @var string
53
  */
54
  protected $option_type = 'theme_mod';
55
 
56
  /**
57
+ * The name of this setting (id for the db).
58
+ *
59
  * @access protected
60
  * @var string|array
61
  */
62
  protected $settings = '';
63
 
64
  /**
65
+ * Set to true if you want to disable all CSS output for this field.
66
+ *
67
  * @access protected
68
  * @var bool
69
  */
70
  protected $disable_output = false;
71
 
72
  /**
73
+ * The field type.
74
+ *
75
  * @access protected
76
  * @var string
77
  */
78
  protected $type = 'kirki-generic';
79
 
80
  /**
81
+ * Some fields require options to be set.
82
+ * We're whitelisting the property here
83
+ * and suggest you validate this in a child class.
84
+ *
85
  * @access protected
86
  * @var array
87
  */
88
  protected $choices = array();
89
 
90
  /**
91
+ * Assign this field to a section.
92
+ * Fields not assigned to a section will not be displayed in the customizer.
93
+ *
94
  * @access protected
95
  * @var string
96
  */
97
  protected $section = '';
98
 
99
  /**
100
+ * The default value for this field.
101
+ *
102
  * @access protected
103
  * @var string|array
104
  */
105
  protected $default = '';
106
 
107
  /**
108
+ * Priority determines the position of a control inside a section.
109
+ * Lower priority numbers move the control to the top.
110
+ *
111
  * @access protected
112
  * @var int
113
  */
114
  protected $priority = 10;
115
 
116
  /**
117
+ * Unique ID for this field.
118
+ * This is auto-calculated from the $settings argument.
119
+ *
120
  * @access protected
121
  * @var string
122
  */
123
  protected $id = '';
124
 
125
  /**
126
+ * Use if you want to automatically generate CSS from this field's value.
127
+ *
128
+ * @see https://kirki.org/docs/arguments/output
129
  * @access protected
130
  * @var array
131
  */
132
  protected $output = array();
133
 
134
  /**
135
+ * Use to automatically generate postMessage scripts.
136
+ * Not necessary to use if you use 'transport' => 'auto'
137
+ * and have already set an array for the 'output' argument.
138
+ *
139
+ * @see https://kirki.org/docs/arguments/js_vars
140
  * @access protected
141
  * @var array
142
  */
143
  protected $js_vars = array();
144
 
145
  /**
146
+ * If you want to use a CSS compiler, then use this to set the variable names.
147
+ *
148
+ * @see https://kirki.org/docs/arguments/variables
149
  * @access protected
150
  * @var array
151
  */
152
  protected $variables = array();
153
 
154
  /**
155
+ * Text that will be used in a tooltip to provide extra info for this field.
156
+ *
157
  * @access protected
158
  * @var string
159
  */
176
  protected $mode = '';
177
 
178
  /**
179
+ * A custom callback to determine if the field should be visible or not.
180
+ *
181
  * @access protected
182
  * @var string|array
183
  */
184
  protected $active_callback = '__return_true';
185
 
186
  /**
187
+ * A custom sanitize callback that will be used to properly save the values.
188
+ *
189
  * @access protected
190
  * @var string|array
191
  */
192
  protected $sanitize_callback = '';
193
 
194
  /**
195
+ * Use 'refresh', 'postMessage' or 'auto'.
196
+ * 'auto' will automatically geberate any 'js_vars' from the 'output' argument.
197
+ *
198
  * @access protected
199
  * @var string
200
  */
201
  protected $transport = 'refresh';
202
 
203
  /**
204
+ * Define dependencies to show/hide this field based on the values of other fields.
205
+ *
206
  * @access protected
207
  * @var array
208
  */
209
  protected $required = array();
210
 
211
  /**
212
+ * Use only on select controls.
213
+ * Defines if this is a multi-select or not.
214
+ * If value is > 1, then the maximum number of selectable options
215
+ * is the number defined here.
216
+ *
217
  * @access protected
218
  * @var int
219
  */
251
  */
252
  protected $flex_height = false;
253
 
254
+ /**
255
+ * Contain the settings for the repeater rows labels
256
+ *
257
+ * @access protected
258
+ * @var array
259
+ */
260
+ protected $row_label = array();
261
+
262
  /**
263
  * The class constructor.
264
  * Parses and sanitizes all field arguments.
265
+ * Then it adds the field to Kirki::$fields.
266
  *
267
  * @access public
268
+ * @param string $config_id The ID of the config we want to use.
269
+ * Defaults to "global".
270
+ * Configs are handled by the Kirki_Config class.
271
+ * @param array $args The arguments of the field.
272
  */
273
  public function __construct( $config_id = 'global', $args = array() ) {
274
 
281
  if ( is_string( $config_id ) ) {
282
  $args['kirki_config'] = $config_id;
283
  }
284
+
285
  // In case the user only provides 1 argument,
286
+ // assume that the provided argument is $args and set $config_id = 'global'.
287
  if ( is_array( $config_id ) && empty( $args ) ) {
288
  $args = $config_id;
289
  $this->kirki_config = 'global';
290
  }
291
  $this->kirki_config = trim( esc_attr( $config_id ) );
292
+ if ( '' === $config_id ) {
293
  $this->kirki_config = 'global';
294
  }
295
+
296
+ // Get defaults from the class.
297
  $defaults = get_class_vars( __CLASS__ );
298
+
299
+ // Get the config arguments, and merge them with the defaults.
300
  $config_defaults = ( isset( Kirki::$config['global'] ) ) ? Kirki::$config['global'] : array();
301
+ if ( 'global' !== $this->kirki_config && isset( Kirki::$config[ $this->kirki_config ] ) ) {
302
  $config_defaults = Kirki::$config[ $this->kirki_config ];
303
  }
304
  $config_defaults = ( is_array( $config_defaults ) ) ? $config_defaults : array();
309
  }
310
  }
311
  }
312
+
313
+ // Merge our args with the defaults.
314
  $args = wp_parse_args( $args, $defaults );
315
+
316
+ // Set the class properties using the parsed args.
317
  foreach ( $args as $key => $value ) {
318
  $this->$key = $value;
319
  }
320
+
321
  // An array of whitelisted properties that don't need to be sanitized here.
322
+ // Format: $key => $default_value.
323
  $whitelisted = apply_filters( 'kirki/' . $this->kirki_config . '/fields/properties_whitelist', array(
324
+ 'label' => '', // This is sanitized later in the controls themselves.
325
+ 'description' => '', // This is sanitized later in the controls themselves.
326
+ 'mode' => '', // Only used for backwards-compatibility reasons.
327
+ 'fields' => array(), // Used in repeater fields.
328
+ 'row_label' => array(), // Used in repeater fields.
329
  ) );
330
 
331
  $this->set_field( $whitelisted );
332
 
333
  }
334
 
335
+ /**
336
+ * Processes the field arguments
337
+ *
338
+ * @param array $whitelisted_properties Defines an array of arguments that will skip validation at this point.
339
+ */
340
  protected function set_field( $whitelisted_properties = array() ) {
341
 
342
  $properties = get_class_vars( __CLASS__ );
343
+ // Remove any whitelisted properties from above.
344
  // These will get a free pass, completely unfiltered.
345
  foreach ( $whitelisted_properties as $key => $default_value ) {
346
  if ( isset( $properties[ $key ] ) ) {
362
  }
363
  }
364
 
365
+ // Sanitize the properties, skipping the ones run from the $priorities.
366
  foreach ( $properties as $property => $value ) {
367
+ if ( in_array( $property, $priorities, true ) ) {
368
  continue;
369
  }
370
  if ( method_exists( $this, 'set_' . $property ) ) {
373
  }
374
  }
375
 
376
+ // Get all arguments with their values.
377
  $args = get_class_vars( __CLASS__ );
378
  foreach ( $args as $key => $default_value ) {
379
  $args[ $key ] = $this->$key;
380
  }
381
 
382
+ // Add the whitelisted properties through the back door.
383
  foreach ( $whitelisted_properties as $key => $default_value ) {
384
  if ( ! isset( $this->$key ) ) {
385
  $this->$key = $default_value;
387
  $args[ $key ] = $this->$key;
388
  }
389
 
390
+ // Add the field to the static $fields variable properly indexed.
391
  Kirki::$fields[ $this->settings ] = $args;
392
 
393
+ if ( 'background' === $this->type ) {
394
+ // Build the background fields.
395
  Kirki::$fields = Kirki_Explode_Background_Field::process_fields( Kirki::$fields );
396
  }
397
 
401
  * This allows us to process this on a field-basis
402
  * by using sub-classes which can override this method.
403
  *
 
 
404
  * @access protected
405
  */
406
  protected function set_default() {}
407
 
408
  /**
409
+ * Escape $kirki_config.
410
  *
411
  * @access protected
412
  */
417
  }
418
 
419
  /**
420
+ * Escape $option_name.
421
  *
422
  * @access protected
423
  */
429
 
430
 
431
  /**
432
+ * Escape the $section.
433
  *
434
  * @access protected
435
  */
446
  * @access protected
447
  */
448
  protected function set_capability() {
449
+ // Early exit if we're using 'edit_theme_options'.
450
+ if ( 'edit_theme_options' === $this->capability ) {
451
  return;
452
  }
453
+ // Escape & trim the capability.
454
  $this->capability = trim( esc_attr( $this->capability ) );
455
  }
456
 
461
  */
462
  protected function set_option_type() {
463
 
464
+ // If we have an option_name then make sure we're using options and not theme_mods.
465
+ if ( '' !== $this->option_name ) {
 
466
  $this->option_type = 'option';
467
  }
468
+ // Take care of common typos.
469
+ if ( 'options' === $this->option_type ) {
470
  $this->option_type = 'option';
471
  }
472
+ // Take care of common typos.
473
+ if ( 'theme_mods' === $this->option_type ) {
474
  $this->option_type = 'theme_mod';
475
  }
476
  }
493
  $settings = array();
494
  foreach ( $this->settings as $setting_key => $setting_value ) {
495
  $settings[ sanitize_key( $setting_key ) ] = esc_attr( $setting_value );
496
+ // If we're using serialized options then we need to spice this up.
497
+ if ( 'option' === $this->option_type && '' !== $this->option_name && ( false === strpos( $setting_key, '[' ) ) ) {
498
  $settings[ sanitize_key( $setting_key ) ] = esc_attr( $this->option_name ) . '[' . esc_attr( $setting_value ).']';
499
  }
500
  }
506
  }
507
 
508
  /**
509
+ * Escapes the tooltip messages.
510
  *
511
  * @access protected
512
  */
513
  protected function set_tooltip() {
514
 
515
+ if ( '' !== $this->tooltip ) {
516
  $this->tooltip = wp_strip_all_tags( $this->tooltip );
517
  return;
518
  }
532
  $this->active_callback = array( 'Kirki_Active_Callback', 'evaluate' );
533
  return;
534
  }
535
+ // No need to proceed any further if we're using the default value.
536
+ if ( '__return_true' === $this->active_callback ) {
537
  return;
538
  }
539
+ // Make sure the function is callable, otherwise fallback to __return_true.
540
  if ( ! is_callable( $this->active_callback ) ) {
541
  $this->active_callback = '__return_true';
542
  }
550
  */
551
  protected function set_type() {
552
 
553
+ // Escape the control type (it doesn't hurt to be sure).
554
  $this->type = esc_attr( $this->type );
555
 
556
  }
595
  }
596
 
597
  /**
598
+ * Sets the $choices.
599
  *
600
  * @access protected
601
  */
608
  }
609
 
610
  /**
611
+ * Escapes the $disable_output.
612
  *
613
  * @access protected
614
  */
631
  if ( ! empty( $this->output ) && ! is_array( $this->output ) ) {
632
  $this->output = array( array( 'element' => $this->output ) );
633
  }
634
+ // Convert to array of arrays if needed.
635
  if ( isset( $this->output['element'] ) ) {
636
  $this->output = array( $this->output );
637
  }
640
  if ( ! isset( $output['element'] ) ) {
641
  continue;
642
  }
643
+ if ( ! isset( $output['property'] ) && ! in_array( $this->type, array( 'typography', 'background' ), true ) ) {
644
  continue;
645
  }
646
  if ( ! isset( $output['sanitize_callback'] ) && isset( $output['callback'] ) ) {
647
  $output['sanitize_callback'] = $output['callback'];
648
  }
649
+ // Convert element arrays to strings.
650
  if ( is_array( $output['element'] ) ) {
651
  $output['element'] = array_unique( $output['element'] );
652
  sort( $output['element'] );
681
  * Check if transport is set to auto.
682
  * If not, then skip the auto-calculations and exit early.
683
  */
684
+ if ( 'auto' !== $this->transport ) {
685
  return;
686
  }
687
 
688
  // Set transport to refresh initially.
689
+ // Serves as a fallback in case we failt to auto-calculate js_vars.
690
  $this->transport = 'refresh';
691
  $js_vars = array();
692
  // Try to auto-generate js_vars.
693
  // First we need to check if js_vars are empty, and that output is not empty.
694
  if ( empty( $this->js_vars ) && ! empty( $this->output ) ) {
695
+ // Start going through each item in the $output array.
696
  foreach ( $this->output as $output ) {
697
  $output['function'] = 'css';
698
  // If 'element' or 'property' are not defined, skip this.
710
  continue;
711
  }
712
  // If we got this far, it's safe to add this.
 
713
  $js_vars[] = $output;
714
  }
715
 
716
  // Did we manage to get all the items from 'output'?
717
  // If not, then we're missing something so don't add this.
718
+ if ( count( $js_vars ) !== count( $this->output ) ) {
719
  return;
720
  }
721
  $this->js_vars = $js_vars;
746
  */
747
  protected function set_help() {
748
 
749
+ if ( '' !== $this->tooltip ) {
750
  return;
751
  }
752
+ if ( '' !== $this->help ) {
753
  $this->tooltip = wp_strip_all_tags( $this->help );
754
  // $help has been deprecated
755
  $this->help = '';
765
  */
766
  protected function set_transport() {
767
 
768
+ if ( 'postmessage' === trim( strtolower( $this->transport ) ) ) {
769
  $this->transport = 'postMessage';
770
  }
771
 
805
  $this->priority = absint( $this->priority );
806
 
807
  }
 
808
  }
 
809
  }
includes/class-kirki-fonts-google.php CHANGED
@@ -1,29 +1,70 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Fonts_Google' ) ) {
 
4
  /**
5
  * Manages the way Google Fonts are enqueued.
6
  */
7
  final class Kirki_Fonts_Google {
8
 
 
 
 
 
 
 
 
 
9
  private static $instance = null;
10
 
 
 
 
 
 
 
11
  private $fonts = array();
 
 
 
 
 
 
 
12
  private $subsets = array();
 
 
 
 
 
 
 
13
  private $link = '';
14
 
15
  /**
16
- * The class constructor
17
  */
18
  private function __construct() {
19
 
20
  $config = apply_filters( 'kirki/config', array() );
21
- // If we have set $config['disable_google_fonts'] to true
22
- // then do not proceed any further.
23
- if ( isset( $config['disable_google_fonts'] ) && true == $config['disable_google_fonts'] ) {
24
  return;
25
  }
26
- // enqueue link
 
27
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ), 105 );
28
 
29
  }
@@ -45,14 +86,18 @@ if ( ! class_exists( 'Kirki_Fonts_Google' ) ) {
45
  * Calls all the other necessary methods to populate and create the link.
46
  */
47
  public function enqueue() {
48
- // go through our fields and populate $this->fonts
 
49
  $this->loop_fields();
 
50
  // Goes through $this->fonts and adds or removes things as needed.
51
  $this->process_fonts();
52
- // Go through $this->fonts and populate $this->link
 
53
  $this->create_link();
 
54
  // If $this->link is not empty then enqueue it.
55
- if ( '' != $this->link ) {
56
  wp_enqueue_style( 'kirki_google_fonts', $this->link, array(), null );
57
  }
58
  }
@@ -66,29 +111,39 @@ if ( ! class_exists( 'Kirki_Fonts_Google' ) ) {
66
  }
67
  }
68
 
 
 
 
 
 
 
 
69
  private function generate_google_font( $args ) {
70
- /**
71
- * Process typography fields
72
- */
73
- if ( isset( $args['type'] ) && 'typography' == $args['type'] ) {
74
- // Get the value
75
  $value = Kirki_Values::get_sanitized_field_value( $args );
 
76
  // If we don't have a font-family then we can skip this.
77
  if ( ! isset( $value['font-family'] ) ) {
78
  return;
79
  }
 
80
  // Add support for older formats of the typography control.
81
  // We used to have font-weight instead of variant.
82
  if ( isset( $value['font-weight'] ) && ( ! isset( $value['variant'] ) || empty( $value['variant'] ) ) ) {
83
  $value['variant'] = $value['font-weight'];
84
  }
85
- // Set a default value for variants
 
86
  if ( ! isset( $value['variant'] ) ) {
87
  $value['variant'] = 'regular';
88
  }
89
  if ( isset( $value['subset'] ) ) {
90
- // Add the subset directly to the array of subsets
91
- // in the Kirki_GoogleFonts_Manager object.
92
  // Subsets must be applied to ALL fonts if possible.
93
  if ( ! is_array( $value['subset'] ) ) {
94
  $this->subsets[] = $value['subset'];
@@ -98,51 +153,46 @@ if ( ! class_exists( 'Kirki_Fonts_Google' ) ) {
98
  }
99
  }
100
  }
101
- // Add the requested google-font
 
102
  if ( ! isset( $this->fonts[ $value['font-family'] ] ) ) {
103
  $this->fonts[ $value['font-family'] ] = array();
104
  }
105
- if ( ! in_array( $value['variant'], $this->fonts[ $value['font-family'] ] ) ) {
106
  $this->fonts[ $value['font-family'] ][] = $value['variant'];
107
  }
108
- }
109
 
110
- /**
111
- * Process non-typography fields
112
- */
113
- else {
114
  if ( isset( $args['output'] ) && is_array( $args['output'] ) ) {
115
  foreach ( $args['output'] as $output ) {
 
116
  // If we don't have a typography-related output argument we can skip this.
117
- if ( ! isset( $output['property'] ) || ! in_array( $output['property'], array( 'font-family', 'font-weight', 'font-subset', 'subset' ) ) ) {
118
  continue;
119
  }
120
- // Get the value
 
121
  $value = Kirki_Values::get_sanitized_field_value( $args );
122
 
123
- // font-family
124
- if ( 'font-family' == $output['property'] ) {
125
  if ( ! array_key_exists( $value, $this->fonts ) ) {
126
  $this->fonts[ $value ] = array();
127
  }
128
- }
129
- // font-weight
130
- elseif ( 'font-weight' == $output['property'] ) {
131
  foreach ( $this->fonts as $font => $variants ) {
132
- if ( ! in_array( $value, $variants ) ) {
133
  $this->fonts[ $font ][] = $value;
134
  }
135
  }
136
- }
137
- // subsets
138
- elseif ( 'font-subset' == $output['property'] || 'subset' == $output['property'] ) {
139
  if ( ! is_array( $value ) ) {
140
- if ( ! in_array( $value, $this->subsets ) ) {
141
  $this->subsets[] = $value;
142
  }
143
  } else {
144
  foreach ( $value as $subset ) {
145
- if ( ! in_array( $subset, $this->subsets ) ) {
146
  $this->subsets[] = $subset;
147
  }
148
  }
@@ -151,44 +201,54 @@ if ( ! class_exists( 'Kirki_Fonts_Google' ) ) {
151
  }
152
  }
153
  }
154
-
155
  }
156
 
 
 
 
 
 
157
  private function process_fonts() {
158
- // Early exit if font-family is empty
 
159
  if ( empty( $this->fonts ) ) {
160
  return;
161
  }
162
- // Get an array of all available google fonts
 
163
  $google_fonts = Kirki_Fonts::get_google_fonts();
164
 
165
  $valid_subsets = array();
166
  foreach ( $this->fonts as $font => $variants ) {
 
167
  // Determine if this is indeed a google font or not.
168
  // If it's not, then just remove it from the array.
169
  if ( ! array_key_exists( $font, $google_fonts ) ) {
170
  unset( $this->fonts[ $font ] );
171
  continue;
172
  }
173
- // Get all valid font variants for this font
 
174
  $font_variants = array();
175
  if ( isset( $google_fonts[ $font ]['variants'] ) ) {
176
  $font_variants = $google_fonts[ $font ]['variants'];
177
  }
178
  foreach ( $variants as $variant ) {
 
179
  // If this is not a valid variant for this font-family
180
  // then unset it and move on to the next one.
181
- if ( ! in_array( $variant, $font_variants ) ) {
182
  $variant_key = array_search( $variant, $this->fonts[ $font ] );
183
  unset( $this->fonts[ $font ][ $variant_key ] );
184
  continue;
185
  }
186
  }
 
187
  // Check if the selected subsets exist, even in one of the selected fonts.
188
  // If they don't, then they have to be removed otherwise the link will fail.
189
  if ( isset( $google_fonts[ $font ]['subsets'] ) ) {
190
  foreach ( $this->subsets as $subset ) {
191
- if ( in_array( $subset, $google_fonts[ $font ]['subsets'] ) ) {
192
  $valid_subsets[] = $subset;
193
  }
194
  }
@@ -197,12 +257,17 @@ if ( ! class_exists( 'Kirki_Fonts_Google' ) ) {
197
  $this->subsets = $valid_subsets;
198
  }
199
 
 
 
 
200
  private function create_link() {
 
201
  // If we don't have any fonts then we can exit.
202
  if ( empty( $this->fonts ) ) {
203
  return;
204
  }
205
- // Get font-family + subsets
 
206
  $link_fonts = array();
207
  foreach ( $this->fonts as $font => $variants ) {
208
  $variants = implode( ',', $variants );
@@ -213,16 +278,16 @@ if ( ! class_exists( 'Kirki_Fonts_Google' ) ) {
213
  }
214
  $link_fonts[] = $link_font;
215
  }
216
- $this->link = 'https://fonts.googleapis.com/css?family=';
217
- $this->link .= implode( '|', $link_fonts );
218
 
219
  if ( ! empty( $this->subsets ) ) {
220
  $this->subsets = array_unique( $this->subsets );
221
- $this->link .= '&subset=' . implode( ',', $this->subsets );
222
  }
223
 
224
- }
 
 
 
225
 
 
226
  }
227
-
228
  }
1
  <?php
2
+ /**
3
+ * Processes typography-related fields
4
+ * and generates the google-font link.
5
+ *
6
+ * @package Kirki
7
+ * @category Core
8
+ * @author Aristeides Stathopoulos
9
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
11
+ * @since 1.0
12
+ */
13
 
14
  if ( ! class_exists( 'Kirki_Fonts_Google' ) ) {
15
+
16
  /**
17
  * Manages the way Google Fonts are enqueued.
18
  */
19
  final class Kirki_Fonts_Google {
20
 
21
+ /**
22
+ * The Kirki_Fonts_Google instance.
23
+ * We use the singleton pattern here to avoid loading the google-font array multiple times.
24
+ * This is mostly a performance tweak.
25
+ *
26
+ * @access private
27
+ * @var null|object
28
+ */
29
  private static $instance = null;
30
 
31
+ /**
32
+ * The array of fonts
33
+ *
34
+ * @access private
35
+ * @var array
36
+ */
37
  private $fonts = array();
38
+
39
+ /**
40
+ * The array of subsets
41
+ *
42
+ * @access private
43
+ * @var array
44
+ */
45
  private $subsets = array();
46
+
47
+ /**
48
+ * The google link
49
+ *
50
+ * @access private
51
+ * @var string
52
+ */
53
  private $link = '';
54
 
55
  /**
56
+ * The class constructor.
57
  */
58
  private function __construct() {
59
 
60
  $config = apply_filters( 'kirki/config', array() );
61
+
62
+ // If we have set $config['disable_google_fonts'] to true then do not proceed any further.
63
+ if ( isset( $config['disable_google_fonts'] ) && true === $config['disable_google_fonts'] ) {
64
  return;
65
  }
66
+
67
+ // Enqueue link.
68
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ), 105 );
69
 
70
  }
86
  * Calls all the other necessary methods to populate and create the link.
87
  */
88
  public function enqueue() {
89
+
90
+ // Go through our fields and populate $this->fonts.
91
  $this->loop_fields();
92
+
93
  // Goes through $this->fonts and adds or removes things as needed.
94
  $this->process_fonts();
95
+
96
+ // Go through $this->fonts and populate $this->link.
97
  $this->create_link();
98
+
99
  // If $this->link is not empty then enqueue it.
100
+ if ( '' !== $this->link ) {
101
  wp_enqueue_style( 'kirki_google_fonts', $this->link, array(), null );
102
  }
103
  }
111
  }
112
  }
113
 
114
+ /**
115
+ * Processes the arguments of a field
116
+ * determines if it's a typography field
117
+ * and if it is, then takes appropriate actions.
118
+ *
119
+ * @param array $args The field arguments.
120
+ */
121
  private function generate_google_font( $args ) {
122
+
123
+ // Process typography fields.
124
+ if ( isset( $args['type'] ) && 'typography' === $args['type'] ) {
125
+
126
+ // Get the value.
127
  $value = Kirki_Values::get_sanitized_field_value( $args );
128
+
129
  // If we don't have a font-family then we can skip this.
130
  if ( ! isset( $value['font-family'] ) ) {
131
  return;
132
  }
133
+
134
  // Add support for older formats of the typography control.
135
  // We used to have font-weight instead of variant.
136
  if ( isset( $value['font-weight'] ) && ( ! isset( $value['variant'] ) || empty( $value['variant'] ) ) ) {
137
  $value['variant'] = $value['font-weight'];
138
  }
139
+
140
+ // Set a default value for variants.
141
  if ( ! isset( $value['variant'] ) ) {
142
  $value['variant'] = 'regular';
143
  }
144
  if ( isset( $value['subset'] ) ) {
145
+
146
+ // Add the subset directly to the array of subsets in the Kirki_GoogleFonts_Manager object.
147
  // Subsets must be applied to ALL fonts if possible.
148
  if ( ! is_array( $value['subset'] ) ) {
149
  $this->subsets[] = $value['subset'];
153
  }
154
  }
155
  }
156
+
157
+ // Add the requested google-font.
158
  if ( ! isset( $this->fonts[ $value['font-family'] ] ) ) {
159
  $this->fonts[ $value['font-family'] ] = array();
160
  }
161
+ if ( ! in_array( $value['variant'], $this->fonts[ $value['font-family'] ], true ) ) {
162
  $this->fonts[ $value['font-family'] ][] = $value['variant'];
163
  }
164
+ } else {
165
 
166
+ // Process non-typography fields.
 
 
 
167
  if ( isset( $args['output'] ) && is_array( $args['output'] ) ) {
168
  foreach ( $args['output'] as $output ) {
169
+
170
  // If we don't have a typography-related output argument we can skip this.
171
+ if ( ! isset( $output['property'] ) || ! in_array( $output['property'], array( 'font-family', 'font-weight', 'font-subset', 'subset' ), true ) ) {
172
  continue;
173
  }
174
+
175
+ // Get the value.
176
  $value = Kirki_Values::get_sanitized_field_value( $args );
177
 
178
+ if ( 'font-family' === $output['property'] ) {
 
179
  if ( ! array_key_exists( $value, $this->fonts ) ) {
180
  $this->fonts[ $value ] = array();
181
  }
182
+ } elseif ( 'font-weight' === $output['property'] ) {
 
 
183
  foreach ( $this->fonts as $font => $variants ) {
184
+ if ( ! in_array( $value, $variants, true ) ) {
185
  $this->fonts[ $font ][] = $value;
186
  }
187
  }
188
+ } elseif ( 'font-subset' === $output['property'] || 'subset' === $output['property'] ) {
 
 
189
  if ( ! is_array( $value ) ) {
190
+ if ( ! in_array( $value, $this->subsets, true ) ) {
191
  $this->subsets[] = $value;
192
  }
193
  } else {
194
  foreach ( $value as $subset ) {
195
+ if ( ! in_array( $subset, $this->subsets, true ) ) {
196
  $this->subsets[] = $subset;
197
  }
198
  }
201
  }
202
  }
203
  }
 
204
  }
205
 
206
+ /**
207
+ * Determines the vbalidity of the selected font as well as its properties.
208
+ * This is vital to make sure that the google-font script that we'll generate later
209
+ * does not contain any invalid options.
210
+ */
211
  private function process_fonts() {
212
+
213
+ // Early exit if font-family is empty.
214
  if ( empty( $this->fonts ) ) {
215
  return;
216
  }
217
+
218
+ // Get an array of all available google fonts.
219
  $google_fonts = Kirki_Fonts::get_google_fonts();
220
 
221
  $valid_subsets = array();
222
  foreach ( $this->fonts as $font => $variants ) {
223
+
224
  // Determine if this is indeed a google font or not.
225
  // If it's not, then just remove it from the array.
226
  if ( ! array_key_exists( $font, $google_fonts ) ) {
227
  unset( $this->fonts[ $font ] );
228
  continue;
229
  }
230
+
231
+ // Get all valid font variants for this font.
232
  $font_variants = array();
233
  if ( isset( $google_fonts[ $font ]['variants'] ) ) {
234
  $font_variants = $google_fonts[ $font ]['variants'];
235
  }
236
  foreach ( $variants as $variant ) {
237
+
238
  // If this is not a valid variant for this font-family
239
  // then unset it and move on to the next one.
240
+ if ( ! in_array( $variant, $font_variants, true ) ) {
241
  $variant_key = array_search( $variant, $this->fonts[ $font ] );
242
  unset( $this->fonts[ $font ][ $variant_key ] );
243
  continue;
244
  }
245
  }
246
+
247
  // Check if the selected subsets exist, even in one of the selected fonts.
248
  // If they don't, then they have to be removed otherwise the link will fail.
249
  if ( isset( $google_fonts[ $font ]['subsets'] ) ) {
250
  foreach ( $this->subsets as $subset ) {
251
+ if ( in_array( $subset, $google_fonts[ $font ]['subsets'], true ) ) {
252
  $valid_subsets[] = $subset;
253
  }
254
  }
257
  $this->subsets = $valid_subsets;
258
  }
259
 
260
+ /**
261
+ * Creates the google-fonts link.
262
+ */
263
  private function create_link() {
264
+
265
  // If we don't have any fonts then we can exit.
266
  if ( empty( $this->fonts ) ) {
267
  return;
268
  }
269
+
270
+ // Get font-family + subsets.
271
  $link_fonts = array();
272
  foreach ( $this->fonts as $font => $variants ) {
273
  $variants = implode( ',', $variants );
278
  }
279
  $link_fonts[] = $link_font;
280
  }
 
 
281
 
282
  if ( ! empty( $this->subsets ) ) {
283
  $this->subsets = array_unique( $this->subsets );
 
284
  }
285
 
286
+ $this->link = add_query_arg( array(
287
+ 'family' => str_replace( '%2B', '+', urlencode( implode( '|', $link_fonts ) ) ),
288
+ 'subset' => urlencode( implode( ',', $this->subsets ) ),
289
+ ), 'https://fonts.googleapis.com/css' );
290
 
291
+ }
292
  }
 
293
  }
includes/class-kirki-fonts.php CHANGED
@@ -1,15 +1,54 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Fonts' ) ) {
4
 
 
 
 
5
  final class Kirki_Fonts {
6
 
 
 
 
 
 
 
 
 
 
7
  public static $mode = 'link';
8
 
 
 
 
 
 
 
 
9
  private static $instance = null;
10
 
 
 
 
 
 
 
 
11
  public static $google_fonts = null;
12
 
 
 
 
13
  private function __construct() {}
14
 
15
  /**
@@ -44,8 +83,8 @@ if ( ! class_exists( 'Kirki_Fonts' ) ) {
44
  */
45
  public static function get_standard_fonts() {
46
  $i18n = Kirki_l10n::get_strings();
47
- return apply_filters( 'kirki/fonts/standard_fonts', array(
48
- 'serif' => array(
49
  'label' => $i18n['serif'],
50
  'stack' => 'Georgia,Times,"Times New Roman",serif',
51
  ),
@@ -57,7 +96,8 @@ if ( ! class_exists( 'Kirki_Fonts' ) ) {
57
  'label' => $i18n['monospace'],
58
  'stack' => 'Monaco,"Lucida Sans Typewriter","Lucida Typewriter","Courier New",Courier,monospace',
59
  ),
60
- ) );
 
61
  }
62
 
63
  /**
@@ -108,11 +148,21 @@ if ( ! class_exists( 'Kirki_Fonts' ) ) {
108
  }
109
 
110
  /**
111
- * dummy function to avoid issues with backwards-compatibility.
112
  * This is not functional, but it will prevent PHP Fatal errors.
 
 
 
113
  */
114
  public static function get_google_font_uri() {}
115
 
 
 
 
 
 
 
 
116
  public static function get_google_font_subsets() {
117
  $i18n = Kirki_l10n::get_strings();
118
  return array(
@@ -136,6 +186,13 @@ if ( ! class_exists( 'Kirki_Fonts' ) ) {
136
  );
137
  }
138
 
 
 
 
 
 
 
 
139
  public static function get_all_variants() {
140
  $i18n = Kirki_l10n::get_strings();
141
  return array(
@@ -161,12 +218,24 @@ if ( ! class_exists( 'Kirki_Fonts' ) ) {
161
  }
162
 
163
  /**
164
- * @param string $fontname
 
 
 
 
 
165
  */
166
  public static function is_google_font( $fontname ) {
167
  return ( array_key_exists( $fontname, self::$google_fonts ) );
168
  }
169
 
 
 
 
 
 
 
 
170
  public static function get_font_choices() {
171
  $fonts = self::get_all_fonts();
172
  $fonts_array = array();
@@ -175,7 +244,5 @@ if ( ! class_exists( 'Kirki_Fonts' ) ) {
175
  }
176
  return $fonts_array;
177
  }
178
-
179
  }
180
-
181
  }
1
  <?php
2
+ /**
3
+ * A simple object containing properties for fonts.
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 1.0
11
+ */
12
 
13
  if ( ! class_exists( 'Kirki_Fonts' ) ) {
14
 
15
+ /**
16
+ * The Kirki_Fonts object.
17
+ */
18
  final class Kirki_Fonts {
19
 
20
+ /**
21
+ * The mode we'll be using to add google fonts.
22
+ * This is a todo item, not yet functional.
23
+ *
24
+ * @static
25
+ * @todo
26
+ * @access public
27
+ * @var string
28
+ */
29
  public static $mode = 'link';
30
 
31
+ /**
32
+ * Holds a single instance of this object.
33
+ *
34
+ * @static
35
+ * @access private
36
+ * @var null|object
37
+ */
38
  private static $instance = null;
39
 
40
+ /**
41
+ * An array of our google fonts.
42
+ *
43
+ * @static
44
+ * @access public
45
+ * @var null|object
46
+ */
47
  public static $google_fonts = null;
48
 
49
+ /**
50
+ * The class constructor.
51
+ */
52
  private function __construct() {}
53
 
54
  /**
83
  */
84
  public static function get_standard_fonts() {
85
  $i18n = Kirki_l10n::get_strings();
86
+ $standard_fonts = array(
87
+ 'serif' => array(
88
  'label' => $i18n['serif'],
89
  'stack' => 'Georgia,Times,"Times New Roman",serif',
90
  ),
96
  'label' => $i18n['monospace'],
97
  'stack' => 'Monaco,"Lucida Sans Typewriter","Lucida Typewriter","Courier New",Courier,monospace',
98
  ),
99
+ );
100
+ return apply_filters( 'kirki/fonts/standard_fonts', $standard_fonts );
101
  }
102
 
103
  /**
148
  }
149
 
150
  /**
151
+ * Dummy function to avoid issues with backwards-compatibility.
152
  * This is not functional, but it will prevent PHP Fatal errors.
153
+ *
154
+ * @static
155
+ * @access public
156
  */
157
  public static function get_google_font_uri() {}
158
 
159
+ /**
160
+ * Returns an array of all available subsets.
161
+ *
162
+ * @static
163
+ * @access public
164
+ * @return array
165
+ */
166
  public static function get_google_font_subsets() {
167
  $i18n = Kirki_l10n::get_strings();
168
  return array(
186
  );
187
  }
188
 
189
+ /**
190
+ * Returns an array of all available variants.
191
+ *
192
+ * @static
193
+ * @access public
194
+ * @return array
195
+ */
196
  public static function get_all_variants() {
197
  $i18n = Kirki_l10n::get_strings();
198
  return array(
218
  }
219
 
220
  /**
221
+ * Determine if a font-name is a valid google font or not.
222
+ *
223
+ * @static
224
+ * @access public
225
+ * @param string $fontname The name of the font we want to check.
226
+ * @return bool
227
  */
228
  public static function is_google_font( $fontname ) {
229
  return ( array_key_exists( $fontname, self::$google_fonts ) );
230
  }
231
 
232
+ /**
233
+ * Gets available options for a font.
234
+ *
235
+ * @static
236
+ * @access public
237
+ * @return array
238
+ */
239
  public static function get_font_choices() {
240
  $fonts = self::get_all_fonts();
241
  $fonts_array = array();
244
  }
245
  return $fonts_array;
246
  }
 
247
  }
 
248
  }
includes/class-kirki-helper.php CHANGED
@@ -6,31 +6,37 @@
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
  * @since 1.0
11
  */
12
 
13
- // Exit if accessed directly
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Helper' ) ) {
 
 
 
 
19
  class Kirki_Helper {
20
 
21
  /**
22
  * Recursive replace in arrays.
23
  *
24
- * @param $array array
25
- * @param $array1 array
26
- *
 
27
  * @return mixed
28
  */
29
  public static function array_replace_recursive( $array, $array1 ) {
30
  if ( function_exists( 'array_replace_recursive' ) ) {
31
  return array_replace_recursive( $array, $array1 );
32
  }
33
- // handle the arguments, merge one by one
 
34
  $args = func_get_args();
35
  $array = $args[0];
36
  if ( ! is_array( $array ) ) {
@@ -46,16 +52,22 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
46
  }
47
 
48
  /**
 
 
 
 
 
 
49
  * @return array
50
  */
51
  public static function recurse( $array, $array1 ) {
52
  foreach ( $array1 as $key => $value ) {
53
- // create new key in $array, if it is empty or not an array
54
  if ( ! isset( $array[ $key ] ) || ( isset( $array[ $key ] ) && ! is_array( $array[ $key ] ) ) ) {
55
  $array[ $key ] = array();
56
  }
57
 
58
- // overwrite the value in the base array
59
  if ( is_array( $value ) ) {
60
  $value = self::recurse( $array[ $key ], $value );
61
  }
@@ -78,8 +90,8 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
78
  /**
79
  * Returns the attachment object
80
  *
81
- * @var string URL to the image
82
- * @return string numeric ID of the attachement.
83
  */
84
  public static function get_image_id( $url ) {
85
  return url_to_postid( $url );
@@ -88,8 +100,8 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
88
  /**
89
  * Returns an array of the attachment's properties.
90
  *
91
- * @var string URL to the image
92
- * @return array array()
93
  */
94
  public static function get_image_from_url( $url ) {
95
 
@@ -106,14 +118,19 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
106
  }
107
 
108
  /**
109
- * Helper function that gets posts and fomats them in a way so they can be used in select fields etc.
 
 
 
 
 
110
  */
111
  public static function get_posts( $args ) {
112
 
113
- // Get the posts
114
  $posts = get_posts( $args );
115
 
116
- // properly format the array.
117
  $items = array();
118
  foreach ( $posts as $post ) {
119
  $items[ $post->ID ] = $post->post_title;
@@ -123,13 +140,21 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
123
 
124
  }
125
 
 
 
 
 
 
 
 
126
  public static function get_taxonomies() {
127
 
128
  $items = array();
129
 
130
- // Get the taxonomies
131
  $taxonomies = get_taxonomies( array( 'public' => true ) );
132
- // Build the array
 
133
  foreach ( $taxonomies as $taxonomy ) {
134
  $id = $taxonomy;
135
  $taxonomy = get_taxonomy( $taxonomy );
@@ -140,13 +165,21 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
140
 
141
  }
142
 
 
 
 
 
 
 
 
143
  public static function get_post_types() {
144
 
145
  $items = array();
146
 
147
- // Get the post types
148
  $post_types = get_post_types( array( 'public' => true ), 'objects' );
149
- // Build the array
 
150
  foreach ( $post_types as $post_type ) {
151
  $items[ $post_type->name ] = $post_type->labels->name;
152
  }
@@ -155,13 +188,22 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
155
 
156
  }
157
 
 
 
 
 
 
 
 
 
158
  public static function get_terms( $taxonomies ) {
159
 
160
  $items = array();
161
 
162
- // Get the post types
163
  $terms = get_terms( $taxonomies );
164
- // Build the array
 
165
  foreach ( $terms as $term ) {
166
  $items[ $term->term_id ] = $term->name;
167
  }
@@ -170,68 +212,333 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
170
 
171
  }
172
 
 
 
 
 
 
 
 
 
173
  public static function get_material_design_colors( $context = false ) {
174
 
175
  $colors = array(
176
  'primary' => array(
177
- '#FFFFFF', '#000000', '#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#03A9F4', '#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722', '#795548', '#9E9E9E', '#607D8B',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  ),
179
  'red' => array(
180
- '#FFEBEE', '#FFCDD2', '#EF9A9A', '#E57373', '#EF5350', '#F44336', '#E53935', '#D32F2F', '#C62828', '#B71C1C', '#FF8A80', '#FF5252', '#FF1744', '#D50000',
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  ),
182
  'pink' => array(
183
- '#FCE4EC', '#F8BBD0', '#F48FB1', '#F06292', '#EC407A', '#E91E63', '#D81B60', '#C2185B', '#AD1457', '#880E4F', '#FF80AB', '#FF4081', '#F50057', '#C51162',
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  ),
185
  'purple' => array(
186
- '#F3E5F5', '#E1BEE7', '#CE93D8', '#BA68C8', '#AB47BC', '#9C27B0', '#8E24AA', '#7B1FA2', '#6A1B9A', '#4A148C', '#EA80FC', '#E040FB', '#D500F9', '#AA00FF',
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  ),
188
  'deep-purple' => array(
189
- '#EDE7F6', '#D1C4E9', '#B39DDB', '#9575CD', '#7E57C2', '#673AB7', '#5E35B1', '#512DA8', '#4527A0', '#311B92', '#B388FF', '#7C4DFF', '#651FFF', '#6200EA',
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  ),
191
  'indigo' => array(
192
- '#E8EAF6', '#C5CAE9', '#9FA8DA', '#7986CB', '#5C6BC0', '#3F51B5', '#3949AB', '#303F9F', '#283593', '#1A237E', '#8C9EFF', '#536DFE', '#3D5AFE', '#304FFE',
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  ),
194
  'blue' => array(
195
- '#E3F2FD', '#BBDEFB', '#90CAF9', '#64B5F6', '#42A5F5', '#2196F3', '#1E88E5', '#1976D2', '#1565C0', '#0D47A1', '#82B1FF', '#448AFF', '#2979FF', '#2962FF',
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  ),
197
  'light_blue' => array(
198
- '#E1F5FE', '#B3E5FC', '#81D4fA', '#4fC3F7', '#29B6FC', '#03A9F4', '#039BE5', '#0288D1', '#0277BD', '#01579B', '#80D8FF', '#40C4FF', '#00B0FF', '#0091EA',
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  ),
200
  'cyan' => array(
201
- '#E0F7FA', '#B2EBF2', '#80DEEA', '#4DD0E1', '#26C6DA', '#00BCD4', '#00ACC1', '#0097A7', '#00838F', '#006064', '#84FFFF', '#18FFFF', '#00E5FF', '#00B8D4',
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  ),
203
  'teal' => array(
204
- '#E0F2F1', '#B2DFDB', '#80CBC4', '#4DB6AC', '#26A69A', '#009688', '#00897B', '#00796B', '#00695C', '#004D40', '#A7FFEB', '#64FFDA', '#1DE9B6', '#00BFA5',
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  ),
206
  'green' => array(
207
- '#E8F5E9', '#C8E6C9', '#A5D6A7', '#81C784', '#66BB6A', '#4CAF50', '#43A047', '#388E3C', '#2E7D32', '#1B5E20', '#B9F6CA', '#69F0AE', '#00E676', '#00C853',
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  ),
209
  'light-green' => array(
210
- '#F1F8E9', '#DCEDC8', '#C5E1A5', '#AED581', '#9CCC65', '#8BC34A', '#7CB342', '#689F38', '#558B2F', '#33691E', '#CCFF90', '#B2FF59', '#76FF03', '#64DD17',
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  ),
212
  'lime' => array(
213
- '#F9FBE7', '#F0F4C3', '#E6EE9C', '#DCE775', '#D4E157', '#CDDC39', '#C0CA33', '#A4B42B', '#9E9D24', '#827717', '#F4FF81', '#EEFF41', '#C6FF00', '#AEEA00',
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  ),
215
  'yellow' => array(
216
- '#FFFDE7', '#FFF9C4', '#FFF590', '#FFF176', '#FFEE58', '#FFEB3B', '#FDD835', '#FBC02D', '#F9A825', '#F57F17', '#FFFF82', '#FFFF00', '#FFEA00', '#FFD600',
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  ),
218
  'amber' => array(
219
- '#FFF8E1', '#FFECB3', '#FFE082', '#FFD54F', '#FFCA28', '#FFC107', '#FFB300', '#FFA000', '#FF8F00', '#FF6F00', '#FFE57F', '#FFD740', '#FFC400', '#FFAB00',
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  ),
221
  'orange' => array(
222
- '#FFF3E0', '#FFE0B2', '#FFCC80', '#FFB74D', '#FFA726', '#FF9800', '#FB8C00', '#F57C00', '#EF6C00', '#E65100', '#FFD180', '#FFAB40', '#FF9100', '#FF6D00',
 
 
 
 
 
 
 
 
 
 
 
 
 
223
  ),
224
  'deep-orange' => array(
225
- '#FBE9A7', '#FFCCBC', '#FFAB91', '#FF8A65', '#FF7043', '#FF5722', '#F4511E', '#E64A19', '#D84315', '#BF360C', '#FF9E80', '#FF6E40', '#FF3D00', '#DD2600',
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  ),
227
  'brown' => array(
228
- '#EFEBE9', '#D7CCC8', '#BCAAA4', '#A1887F', '#8D6E63', '#795548', '#6D4C41', '#5D4037', '#4E342E', '#3E2723',
 
 
 
 
 
 
 
 
 
229
  ),
230
  'grey' => array(
231
- '#FAFAFA', '#F5F5F5', '#EEEEEE', '#E0E0E0', '#BDBDBD', '#9E9E9E', '#757575', '#616161', '#424242', '#212121', '#000000', '#ffffff',
 
 
 
 
 
 
 
 
 
 
 
232
  ),
233
  'blue-grey' => array(
234
- '#ECEFF1', '#CFD8DC', '#B0BBC5', '#90A4AE', '#78909C', '#607D8B', '#546E7A', '#455A64', '#37474F', '#263238',
 
 
 
 
 
 
 
 
 
235
  ),
236
  );
237
 
@@ -251,16 +558,16 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
251
  case 'A200':
252
  case 'A400':
253
  case 'A700':
254
- if ( 'A100' == $context ) {
255
  $key = 10;
256
  unset( $colors['grey'] );
257
- } elseif ( 'A200' == $context ) {
258
  $key = 11;
259
  unset( $colors['grey'] );
260
- } elseif ( 'A400' == $context ) {
261
  $key = 12;
262
  unset( $colors['grey'] );
263
- } elseif ( 'A700' == $context ) {
264
  $key = 13;
265
  unset( $colors['grey'] );
266
  } else {
@@ -293,6 +600,13 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
293
  }
294
  }
295
 
 
 
 
 
 
 
 
296
  public static function get_dashicons() {
297
 
298
  $admin_menu = array(
@@ -589,7 +903,5 @@ if ( ! class_exists( 'Kirki_Helper' ) ) {
589
  );
590
 
591
  }
592
-
593
  }
594
-
595
  }
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
  * @since 1.0
11
  */
12
 
13
+ // Exit if accessed directly.
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Helper' ) ) {
19
+
20
+ /**
21
+ * A simple object containing static methods.
22
+ */
23
  class Kirki_Helper {
24
 
25
  /**
26
  * Recursive replace in arrays.
27
  *
28
+ * @static
29
+ * @access public
30
+ * @param array $array The first array.
31
+ * @param array $array1 The second array.
32
  * @return mixed
33
  */
34
  public static function array_replace_recursive( $array, $array1 ) {
35
  if ( function_exists( 'array_replace_recursive' ) ) {
36
  return array_replace_recursive( $array, $array1 );
37
  }
38
+
39
+ // Handle the arguments, merge one by one.
40
  $args = func_get_args();
41
  $array = $args[0];
42
  if ( ! is_array( $array ) ) {
52
  }
53
 
54
  /**
55
+ * Helper method to be used from the array_replace_recursive method.
56
+ *
57
+ * @static
58
+ * @access public
59
+ * @param array $array The first array.
60
+ * @param array $array1 The second array.
61
  * @return array
62
  */
63
  public static function recurse( $array, $array1 ) {
64
  foreach ( $array1 as $key => $value ) {
65
+ // Create new key in $array, if it is empty or not an array.
66
  if ( ! isset( $array[ $key ] ) || ( isset( $array[ $key ] ) && ! is_array( $array[ $key ] ) ) ) {
67
  $array[ $key ] = array();
68
  }
69
 
70
+ // Overwrite the value in the base array.
71
  if ( is_array( $value ) ) {
72
  $value = self::recurse( $array[ $key ], $value );
73
  }
90
  /**
91
  * Returns the attachment object
92
  *
93
+ * @param string $url URL to the image.
94
+ * @return int|string Numeric ID of the attachement.
95
  */
96
  public static function get_image_id( $url ) {
97
  return url_to_postid( $url );
100
  /**
101
  * Returns an array of the attachment's properties.
102
  *
103
+ * @param string $url URL to the image.
104
+ * @return array
105
  */
106
  public static function get_image_from_url( $url ) {
107
 
118
  }
119
 
120
  /**
121
+ * Get an array of posts.
122
+ *
123
+ * @static
124
+ * @access public
125
+ * @param array $args Define arguments for the get_posts function.
126
+ * @return array
127
  */
128
  public static function get_posts( $args ) {
129
 
130
+ // Get the posts.
131
  $posts = get_posts( $args );
132
 
133
+ // Properly format the array.
134
  $items = array();
135
  foreach ( $posts as $post ) {
136
  $items[ $post->ID ] = $post->post_title;
140
 
141
  }
142
 
143
+ /**
144
+ * Get an array of publicly-querable taxonomies.
145
+ *
146
+ * @static
147
+ * @access public
148
+ * @return array
149
+ */
150
  public static function get_taxonomies() {
151
 
152
  $items = array();
153
 
154
+ // Get the taxonomies.
155
  $taxonomies = get_taxonomies( array( 'public' => true ) );
156
+
157
+ // Build the array.
158
  foreach ( $taxonomies as $taxonomy ) {
159
  $id = $taxonomy;
160
  $taxonomy = get_taxonomy( $taxonomy );
165
 
166
  }
167
 
168
+ /**
169
+ * Get an array of publicly-querable post-types.
170
+ *
171
+ * @static
172
+ * @access public
173
+ * @return array
174
+ */
175
  public static function get_post_types() {
176
 
177
  $items = array();
178
 
179
+ // Get the post types.
180
  $post_types = get_post_types( array( 'public' => true ), 'objects' );
181
+
182
+ // Build the array.
183
  foreach ( $post_types as $post_type ) {
184
  $items[ $post_type->name ] = $post_type->labels->name;
185
  }
188
 
189
  }
190
 
191
+ /**
192
+ * Get an array of terms from a taxonomy
193
+ *
194
+ * @static
195
+ * @access public
196
+ * @param string|array $taxonomies See https://developer.wordpress.org/reference/functions/get_terms/ for details.
197
+ * @return array
198
+ */
199
  public static function get_terms( $taxonomies ) {
200
 
201
  $items = array();
202
 
203
+ // Get the post types.
204
  $terms = get_terms( $taxonomies );
205
+
206
+ // Build the array.
207
  foreach ( $terms as $term ) {
208
  $items[ $term->term_id ] = $term->name;
209
  }
212
 
213
  }
214
 
215
+ /**
216
+ * Gets an array of material-design colors.
217
+ *
218
+ * @static
219
+ * @access public
220
+ * @param false|string $context Allows us to get subsets of the palette.
221
+ * @return array
222
+ */
223
  public static function get_material_design_colors( $context = false ) {
224
 
225
  $colors = array(
226
  'primary' => array(
227
+ '#FFFFFF',
228
+ '#000000',
229
+ '#F44336',
230
+ '#E91E63',
231
+ '#9C27B0',
232
+ '#673AB7',
233
+ '#3F51B5',
234
+ '#2196F3',
235
+ '#03A9F4',
236
+ '#00BCD4',
237
+ '#009688',
238
+ '#4CAF50',
239
+ '#8BC34A',
240
+ '#CDDC39',
241
+ '#FFEB3B',
242
+ '#FFC107',
243
+ '#FF9800',
244
+ '#FF5722',
245
+ '#795548',
246
+ '#9E9E9E',
247
+ '#607D8B',
248
  ),
249
  'red' => array(
250
+ '#FFEBEE',
251
+ '#FFCDD2',
252
+ '#EF9A9A',
253
+ '#E57373',
254
+ '#EF5350',
255
+ '#F44336',
256
+ '#E53935',
257
+ '#D32F2F',
258
+ '#C62828',
259
+ '#B71C1C',
260
+ '#FF8A80',
261
+ '#FF5252',
262
+ '#FF1744',
263
+ '#D50000',
264
  ),
265
  'pink' => array(
266
+ '#FCE4EC',
267
+ '#F8BBD0',
268
+ '#F48FB1',
269
+ '#F06292',
270
+ '#EC407A',
271
+ '#E91E63',
272
+ '#D81B60',
273
+ '#C2185B',
274
+ '#AD1457',
275
+ '#880E4F',
276
+ '#FF80AB',
277
+ '#FF4081',
278
+ '#F50057',
279
+ '#C51162',
280
  ),
281
  'purple' => array(
282
+ '#F3E5F5',
283
+ '#E1BEE7',
284
+ '#CE93D8',
285
+ '#BA68C8',
286
+ '#AB47BC',
287
+ '#9C27B0',
288
+ '#8E24AA',
289
+ '#7B1FA2',
290
+ '#6A1B9A',
291
+ '#4A148C',
292
+ '#EA80FC',
293
+ '#E040FB',
294
+ '#D500F9',
295
+ '#AA00FF',
296
  ),
297
  'deep-purple' => array(
298
+ '#EDE7F6',
299
+ '#D1C4E9',
300
+ '#B39DDB',
301
+ '#9575CD',
302
+ '#7E57C2',
303
+ '#673AB7',
304
+ '#5E35B1',
305
+ '#512DA8',
306
+ '#4527A0',
307
+ '#311B92',
308
+ '#B388FF',
309
+ '#7C4DFF',
310
+ '#651FFF',
311
+ '#6200EA',
312
  ),
313
  'indigo' => array(
314
+ '#E8EAF6',
315
+ '#C5CAE9',
316
+ '#9FA8DA',
317
+ '#7986CB',
318
+ '#5C6BC0',
319
+ '#3F51B5',
320
+ '#3949AB',
321
+ '#303F9F',
322
+ '#283593',
323
+ '#1A237E',
324
+ '#8C9EFF',
325
+ '#536DFE',
326
+ '#3D5AFE',
327
+ '#304FFE',
328
  ),
329
  'blue' => array(
330
+ '#E3F2FD',
331
+ '#BBDEFB',
332
+ '#90CAF9',
333
+ '#64B5F6',
334
+ '#42A5F5',
335
+ '#2196F3',
336
+ '#1E88E5',
337
+ '#1976D2',
338
+ '#1565C0',
339
+ '#0D47A1',
340
+ '#82B1FF',
341
+ '#448AFF',
342
+ '#2979FF',
343
+ '#2962FF',
344
  ),
345
  'light_blue' => array(
346
+ '#E1F5FE',
347
+ '#B3E5FC',
348
+ '#81D4fA',
349
+ '#4fC3F7',
350
+ '#29B6FC',
351
+ '#03A9F4',
352
+ '#039BE5',
353
+ '#0288D1',
354
+ '#0277BD',
355
+ '#01579B',
356
+ '#80D8FF',
357
+ '#40C4FF',
358
+ '#00B0FF',
359
+ '#0091EA',
360
  ),
361
  'cyan' => array(
362
+ '#E0F7FA',
363
+ '#B2EBF2',
364
+ '#80DEEA',
365
+ '#4DD0E1',
366
+ '#26C6DA',
367
+ '#00BCD4',
368
+ '#00ACC1',
369
+ '#0097A7',
370
+ '#00838F',
371
+ '#006064',
372
+ '#84FFFF',
373
+ '#18FFFF',
374
+ '#00E5FF',
375
+ '#00B8D4',
376
  ),
377
  'teal' => array(
378
+ '#E0F2F1',
379
+ '#B2DFDB',
380
+ '#80CBC4',
381
+ '#4DB6AC',
382
+ '#26A69A',
383
+ '#009688',
384
+ '#00897B',
385
+ '#00796B',
386
+ '#00695C',
387
+ '#004D40',
388
+ '#A7FFEB',
389
+ '#64FFDA',
390
+ '#1DE9B6',
391
+ '#00BFA5',
392
  ),
393
  'green' => array(
394
+ '#E8F5E9',
395
+ '#C8E6C9',
396
+ '#A5D6A7',
397
+ '#81C784',
398
+ '#66BB6A',
399
+ '#4CAF50',
400
+ '#43A047',
401
+ '#388E3C',
402
+ '#2E7D32',
403
+ '#1B5E20',
404
+ '#B9F6CA',
405
+ '#69F0AE',
406
+ '#00E676',
407
+ '#00C853',
408
  ),
409
  'light-green' => array(
410
+ '#F1F8E9',
411
+ '#DCEDC8',
412
+ '#C5E1A5',
413
+ '#AED581',
414
+ '#9CCC65',
415
+ '#8BC34A',
416
+ '#7CB342',
417
+ '#689F38',
418
+ '#558B2F',
419
+ '#33691E',
420
+ '#CCFF90',
421
+ '#B2FF59',
422
+ '#76FF03',
423
+ '#64DD17',
424
  ),
425
  'lime' => array(
426
+ '#F9FBE7',
427
+ '#F0F4C3',
428
+ '#E6EE9C',
429
+ '#DCE775',
430
+ '#D4E157',
431
+ '#CDDC39',
432
+ '#C0CA33',
433
+ '#A4B42B',
434
+ '#9E9D24',
435
+ '#827717',
436
+ '#F4FF81',
437
+ '#EEFF41',
438
+ '#C6FF00',
439
+ '#AEEA00',
440
  ),
441
  'yellow' => array(
442
+ '#FFFDE7',
443
+ '#FFF9C4',
444
+ '#FFF590',
445
+ '#FFF176',
446
+ '#FFEE58',
447
+ '#FFEB3B',
448
+ '#FDD835',
449
+ '#FBC02D',
450
+ '#F9A825',
451
+ '#F57F17',
452
+ '#FFFF82',
453
+ '#FFFF00',
454
+ '#FFEA00',
455
+ '#FFD600',
456
  ),
457
  'amber' => array(
458
+ '#FFF8E1',
459
+ '#FFECB3',
460
+ '#FFE082',
461
+ '#FFD54F',
462
+ '#FFCA28',
463
+ '#FFC107',
464
+ '#FFB300',
465
+ '#FFA000',
466
+ '#FF8F00',
467
+ '#FF6F00',
468
+ '#FFE57F',
469
+ '#FFD740',
470
+ '#FFC400',
471
+ '#FFAB00',
472
  ),
473
  'orange' => array(
474
+ '#FFF3E0',
475
+ '#FFE0B2',
476
+ '#FFCC80',
477
+ '#FFB74D',
478
+ '#FFA726',
479
+ '#FF9800',
480
+ '#FB8C00',
481
+ '#F57C00',
482
+ '#EF6C00',
483
+ '#E65100',
484
+ '#FFD180',
485
+ '#FFAB40',
486
+ '#FF9100',
487
+ '#FF6D00',
488
  ),
489
  'deep-orange' => array(
490
+ '#FBE9A7',
491
+ '#FFCCBC',
492
+ '#FFAB91',
493
+ '#FF8A65',
494
+ '#FF7043',
495
+ '#FF5722',
496
+ '#F4511E',
497
+ '#E64A19',
498
+ '#D84315',
499
+ '#BF360C',
500
+ '#FF9E80',
501
+ '#FF6E40',
502
+ '#FF3D00',
503
+ '#DD2600',
504
  ),
505
  'brown' => array(
506
+ '#EFEBE9',
507
+ '#D7CCC8',
508
+ '#BCAAA4',
509
+ '#A1887F',
510
+ '#8D6E63',
511
+ '#795548',
512
+ '#6D4C41',
513
+ '#5D4037',
514
+ '#4E342E',
515
+ '#3E2723',
516
  ),
517
  'grey' => array(
518
+ '#FAFAFA',
519
+ '#F5F5F5',
520
+ '#EEEEEE',
521
+ '#E0E0E0',
522
+ '#BDBDBD',
523
+ '#9E9E9E',
524
+ '#757575',
525
+ '#616161',
526
+ '#424242',
527
+ '#212121',
528
+ '#000000',
529
+ '#ffffff',
530
  ),
531
  'blue-grey' => array(
532
+ '#ECEFF1',
533
+ '#CFD8DC',
534
+ '#B0BBC5',
535
+ '#90A4AE',
536
+ '#78909C',
537
+ '#607D8B',
538
+ '#546E7A',
539
+ '#455A64',
540
+ '#37474F',
541
+ '#263238',
542
  ),
543
  );
544
 
558
  case 'A200':
559
  case 'A400':
560
  case 'A700':
561
+ if ( 'A100' === $context ) {
562
  $key = 10;
563
  unset( $colors['grey'] );
564
+ } elseif ( 'A200' === $context ) {
565
  $key = 11;
566
  unset( $colors['grey'] );
567
+ } elseif ( 'A400' === $context ) {
568
  $key = 12;
569
  unset( $colors['grey'] );
570
+ } elseif ( 'A700' === $context ) {
571
  $key = 13;
572
  unset( $colors['grey'] );
573
  } else {
600
  }
601
  }
602
 
603
+ /**
604
+ * Get an array of all available dashicons.
605
+ *
606
+ * @static
607
+ * @access public
608
+ * @return array
609
+ */
610
  public static function get_dashicons() {
611
 
612
  $admin_menu = array(
903
  );
904
 
905
  }
 
906
  }
 
907
  }
includes/class-kirki-init.php CHANGED
@@ -11,6 +11,7 @@
11
  */
12
 
13
  if ( ! class_exists( 'Kirki_Init' ) ) {
 
14
  /**
15
  * Initialize Kirki
16
  */
@@ -101,6 +102,7 @@ if ( ! class_exists( 'Kirki_Init' ) ) {
101
  $wp_customize->register_control_type( 'Kirki_Controls_Date_Control' );
102
  $wp_customize->register_control_type( 'Kirki_Controls_Dashicons_Control' );
103
  $wp_customize->register_control_type( 'Kirki_Controls_Dimension_Control' );
 
104
  $wp_customize->register_control_type( 'Kirki_Controls_Number_Control' );
105
  $wp_customize->register_control_type( 'Kirki_Controls_Radio_Control' );
106
  $wp_customize->register_control_type( 'Kirki_Controls_Radio_Buttonset_Control' );
@@ -159,24 +161,19 @@ if ( ! class_exists( 'Kirki_Init' ) ) {
159
  if ( isset( $args['type'] ) && 'background' === $args['type'] ) {
160
  continue;
161
  }
162
- /**
163
- * Create the settings.
164
- */
165
  new Kirki_Settings( $args );
166
- /**
167
- * Check if we're on the customizer.
168
- * If we are, then we will create the controls,
169
- * add the scripts needed for the customizer
170
- * and any other tweaks that this field may require.
171
- */
172
  if ( $wp_customize ) {
173
- /**
174
- * Create the control
175
- */
176
  new Kirki_Control( $args );
177
- /**
178
- * Create the scripts for tooltips.
179
- */
180
  Kirki_Scripts_Tooltips::generate_script( $args );
181
  }
182
  }
11
  */
12
 
13
  if ( ! class_exists( 'Kirki_Init' ) ) {
14
+
15
  /**
16
  * Initialize Kirki
17
  */
102
  $wp_customize->register_control_type( 'Kirki_Controls_Date_Control' );
103
  $wp_customize->register_control_type( 'Kirki_Controls_Dashicons_Control' );
104
  $wp_customize->register_control_type( 'Kirki_Controls_Dimension_Control' );
105
+ $wp_customize->register_control_type( 'Kirki_Controls_Dropdown_Pages_Control' );
106
  $wp_customize->register_control_type( 'Kirki_Controls_Number_Control' );
107
  $wp_customize->register_control_type( 'Kirki_Controls_Radio_Control' );
108
  $wp_customize->register_control_type( 'Kirki_Controls_Radio_Buttonset_Control' );
161
  if ( isset( $args['type'] ) && 'background' === $args['type'] ) {
162
  continue;
163
  }
164
+
165
+ // Create the settings.
 
166
  new Kirki_Settings( $args );
167
+
168
+ // Check if we're on the customizer.
169
+ // If we are, then we will create the controls, add the scripts needed for the customizer
170
+ // and any other tweaks that this field may require.
 
 
171
  if ( $wp_customize ) {
172
+
173
+ // Create the control.
 
174
  new Kirki_Control( $args );
175
+
176
+ // Create the scripts for tooltips.
 
177
  Kirki_Scripts_Tooltips::generate_script( $args );
178
  }
179
  }
includes/class-kirki-l10n.php CHANGED
@@ -1,18 +1,47 @@
1
  <?php
2
-
 
 
 
 
 
 
 
 
 
3
 
4
  if ( ! class_exists( 'Kirki_l10n' ) ) {
5
 
 
 
 
6
  class Kirki_l10n {
7
 
 
 
 
 
 
 
8
  protected $textdomain = 'kirki';
9
 
 
 
 
 
 
 
10
  public function __construct() {
11
 
12
  add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
13
 
14
  }
15
 
 
 
 
 
 
16
  public function load_textdomain() {
17
 
18
  if ( null !== $this->get_path() ) {
@@ -23,7 +52,10 @@ if ( ! class_exists( 'Kirki_l10n' ) ) {
23
  }
24
 
25
  /**
26
- * @return string
 
 
 
27
  */
28
  protected function get_path() {
29
  $path_found = false;
@@ -44,6 +76,9 @@ if ( ! class_exists( 'Kirki_l10n' ) ) {
44
  }
45
 
46
  /**
 
 
 
47
  * @return array
48
  */
49
  protected function get_paths() {
@@ -60,7 +95,7 @@ if ( ! class_exists( 'Kirki_l10n' ) ) {
60
  *
61
  * @static
62
  * @access public
63
- *
64
  * @return array
65
  */
66
  public static function get_strings( $config_id = 'global' ) {
@@ -155,7 +190,8 @@ if ( ! class_exists( 'Kirki_l10n' ) ) {
155
  'ultra-bold' => esc_attr__( 'Ultra-Bold 900', 'kirki' ),
156
  'ultra-bold-italic' => esc_attr__( 'Ultra-Bold 900 Italic', 'kirki' ),
157
  'invalid-value' => esc_attr__( 'Invalid Value', 'kirki' ),
158
- 'add-new-row' => esc_attr__( 'Add new row', 'kirki' ),
 
159
  'limit-rows' => esc_attr__( 'Limit: %s rows', 'kirki' ),
160
  'open-section' => esc_attr__( 'Press return or enter to open this section', 'kirki' ),
161
  'back' => esc_attr__( 'Back', 'kirki' ),
@@ -179,7 +215,5 @@ if ( ! class_exists( 'Kirki_l10n' ) ) {
179
  return apply_filters( 'kirki/' . $config_id . '/l10n', $translation_strings );
180
 
181
  }
182
-
183
  }
184
-
185
  }
1
  <?php
2
+ /**
3
+ * Internationalization helper.
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 1.0
11
+ */
12
 
13
  if ( ! class_exists( 'Kirki_l10n' ) ) {
14
 
15
+ /**
16
+ * Handles translations
17
+ */
18
  class Kirki_l10n {
19
 
20
+ /**
21
+ * The plugin textdomain
22
+ *
23
+ * @access protected
24
+ * @var string
25
+ */
26
  protected $textdomain = 'kirki';
27
 
28
+ /**
29
+ * The class constructor.
30
+ * Adds actions & filters to handle the rest of the methods.
31
+ *
32
+ * @access public
33
+ */
34
  public function __construct() {
35
 
36
  add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
37
 
38
  }
39
 
40
+ /**
41
+ * Load the plugin textdomain
42
+ *
43
+ * @access public
44
+ */
45
  public function load_textdomain() {
46
 
47
  if ( null !== $this->get_path() ) {
52
  }
53
 
54
  /**
55
+ * Gets the path to a translation file.
56
+ *
57
+ * @access protected
58
+ * @return string Absolute path to the translation file.
59
  */
60
  protected function get_path() {
61
  $path_found = false;
76
  }
77
 
78
  /**
79
+ * Returns an array of paths where translation files may be located.
80
+ *
81
+ * @access protected
82
  * @return array
83
  */
84
  protected function get_paths() {
95
  *
96
  * @static
97
  * @access public
98
+ * @param string $config_id The config ID. See Kirki_Config.
99
  * @return array
100
  */
101
  public static function get_strings( $config_id = 'global' ) {
190
  'ultra-bold' => esc_attr__( 'Ultra-Bold 900', 'kirki' ),
191
  'ultra-bold-italic' => esc_attr__( 'Ultra-Bold 900 Italic', 'kirki' ),
192
  'invalid-value' => esc_attr__( 'Invalid Value', 'kirki' ),
193
+ 'add-new' => esc_attr__( 'Add new', 'kirki' ),
194
+ 'row' => esc_attr__( 'row', 'kirki' ),
195
  'limit-rows' => esc_attr__( 'Limit: %s rows', 'kirki' ),
196
  'open-section' => esc_attr__( 'Press return or enter to open this section', 'kirki' ),
197
  'back' => esc_attr__( 'Back', 'kirki' ),
215
  return apply_filters( 'kirki/' . $config_id . '/l10n', $translation_strings );
216
 
217
  }
 
218
  }
 
219
  }
includes/class-kirki-panel.php CHANGED
@@ -1,11 +1,27 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Panel' ) ) {
4
 
 
 
 
5
  class Kirki_Panel {
6
 
7
  /**
8
- * An array of our panel types
 
 
 
9
  */
10
  private $panel_types = array(
11
  'default' => 'Kirki_Panels_Default_Panel',
@@ -13,9 +29,10 @@ if ( ! class_exists( 'Kirki_Panel' ) ) {
13
  );
14
 
15
  /**
16
- * The class constructor
17
  *
18
- * @var $args the panel arguments
 
19
  */
20
  public function __construct( $args ) {
21
 
@@ -25,9 +42,9 @@ if ( ! class_exists( 'Kirki_Panel' ) ) {
25
  }
26
 
27
  /**
28
- * Add the panel using the Customizer API
29
  *
30
- * @var $args the panel arguments
31
  */
32
  public function add_panel( $args ) {
33
  global $wp_customize;
@@ -38,9 +55,9 @@ if ( ! class_exists( 'Kirki_Panel' ) ) {
38
  $panel_classname = $this->panel_types[ $args['type'] ];
39
 
40
  $wp_customize->add_panel( new $panel_classname( $wp_customize, sanitize_key( $args['id'] ), array(
41
- 'title' => $args['title'], // already escaped in WP Core
42
  'priority' => absint( $args['priority'] ),
43
- 'description' => $args['description'], // already escaped in WP Core
44
  'active_callback' => $args['active_callback'],
45
  ) ) );
46
 
@@ -49,9 +66,6 @@ if ( ! class_exists( 'Kirki_Panel' ) ) {
49
  $args['context'] = 'panel';
50
  Kirki_Scripts_Icons::generate_script( $args );
51
  }
52
-
53
  }
54
-
55
  }
56
-
57
  }
1
  <?php
2
+ /**
3
+ * Handles panels added via the Kirki API.
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 1.0
11
+ */
12
 
13
  if ( ! class_exists( 'Kirki_Panel' ) ) {
14
 
15
+ /**
16
+ * Each panel is a separate instance of the Kirki_Panel object.
17
+ */
18
  class Kirki_Panel {
19
 
20
  /**
21
+ * An array of our panel types.
22
+ *
23
+ * @access private
24
+ * @var array
25
  */
26
  private $panel_types = array(
27
  'default' => 'Kirki_Panels_Default_Panel',
29
  );
30
 
31
  /**
32
+ * The class constructor.
33
  *
34
+ * @access public
35
+ * @param array $args The panel arguments.
36
  */
37
  public function __construct( $args ) {
38
 
42
  }
43
 
44
  /**
45
+ * Add the panel using the Customizer API.
46
  *
47
+ * @param array $args The panel arguments.
48
  */
49
  public function add_panel( $args ) {
50
  global $wp_customize;
55
  $panel_classname = $this->panel_types[ $args['type'] ];
56
 
57
  $wp_customize->add_panel( new $panel_classname( $wp_customize, sanitize_key( $args['id'] ), array(
58
+ 'title' => $args['title'], // Already escaped in WP Core.
59
  'priority' => absint( $args['priority'] ),
60
+ 'description' => $args['description'], // Already escaped in WP Core.
61
  'active_callback' => $args['active_callback'],
62
  ) ) );
63
 
66
  $args['context'] = 'panel';
67
  Kirki_Scripts_Icons::generate_script( $args );
68
  }
 
69
  }
 
70
  }
 
71
  }
includes/class-kirki-sanitize-values.php CHANGED
@@ -7,24 +7,34 @@
7
  * @category Core
8
  * @author Aristeides Stathopoulos
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
11
  * @since 1.0
12
  */
13
 
14
- // Exit if accessed directly
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Sanitize_Values' ) ) {
20
 
 
 
 
21
  class Kirki_Sanitize_Values {
22
 
23
  /**
24
  * Fallback for non-existing methods.
 
 
 
 
 
 
25
  */
26
  public static function __callStatic( $name, $arguments ) {
27
  error_log( "Kirki_Sanitize_Values::$name does not exist" );
 
28
  }
29
 
30
  /**
@@ -37,13 +47,17 @@ if ( ! class_exists( 'Kirki_Sanitize_Values' ) ) {
37
  * @return bool Whether the checkbox is checked.
38
  */
39
  public static function checkbox( $checked ) {
40
- return ( ( isset( $checked ) && ( true == $checked || 'on' == $checked ) ) ? true : false );
41
  }
42
 
43
  /**
44
- * Sanitize number options
45
  *
 
 
46
  * @since 0.5
 
 
47
  */
48
  public static function number( $value ) {
49
  return ( is_numeric( $value ) ) ? $value : intval( $value );
@@ -70,41 +84,52 @@ if ( ! class_exists( 'Kirki_Sanitize_Values' ) ) {
70
  $page_id = absint( $page_id );
71
 
72
  // If $page_id is an ID of a published page, return it; otherwise, return the default.
73
- return ( 'publish' == get_post_status( $page_id ) ? $page_id : $setting->default );
74
  }
75
 
76
  /**
77
- * Sanitizes css dimensions
78
  *
 
 
79
  * @since 2.2.0
 
80
  * @return string
81
  */
82
  public static function css_dimension( $value ) {
83
- // trim it
 
84
  $value = trim( $value );
85
- // if round, return 50%
86
- if ( 'round' == $value ) {
 
87
  $value = '50%';
88
  }
89
- // if empty, return empty
90
- if ( '' == $value ) {
 
91
  return '';
92
  }
93
- // If auto, return auto
94
- if ( 'auto' == $value ) {
 
95
  return 'auto';
96
  }
 
97
  // Return empty if there are no numbers in the value.
98
  if ( ! preg_match( '#[0-9]#' , $value ) ) {
99
  return '';
100
  }
101
- // If we're using calc() then return the value
 
102
  if ( false !== strpos( $value, 'calc(' ) ) {
103
  return $value;
104
  }
105
- // The raw value without the units
 
106
  $raw_value = self::filter_number( $value );
107
  $unit_used = '';
 
108
  // An array of all valid CSS units. Their order was carefully chosen for this evaluation, don't mix it up!!!
109
  $units = array( 'rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax' );
110
  foreach ( $units as $unit ) {
@@ -112,11 +137,22 @@ if ( ! class_exists( 'Kirki_Sanitize_Values' ) ) {
112
  $unit_used = $unit;
113
  }
114
  }
 
 
 
 
 
 
115
  return $raw_value . $unit_used;
116
  }
117
 
118
  /**
119
- * @param string $value
 
 
 
 
 
120
  */
121
  public static function filter_number( $value ) {
122
  return filter_var( $value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION );
@@ -125,9 +161,10 @@ if ( ! class_exists( 'Kirki_Sanitize_Values' ) ) {
125
  /**
126
  * Sanitize sortable controls
127
  *
 
128
  * @since 0.8.3
129
- *
130
- * @return mixed
131
  */
132
  public static function sortable( $value ) {
133
  if ( is_serialized( $value ) ) {
@@ -140,8 +177,9 @@ if ( ! class_exists( 'Kirki_Sanitize_Values' ) ) {
140
  /**
141
  * Sanitize RGBA colors
142
  *
 
143
  * @since 0.8.5
144
- *
145
  * @return string
146
  */
147
  public static function rgba( $value ) {
@@ -152,35 +190,36 @@ if ( ! class_exists( 'Kirki_Sanitize_Values' ) ) {
152
  /**
153
  * Sanitize colors.
154
  *
 
155
  * @since 0.8.5
 
156
  * @return string
157
  */
158
  public static function color( $value ) {
159
- // If empty, return empty
160
- if ( '' == $value ) {
161
  return '';
162
  }
163
- // If transparent, return 'transparent'
164
- if ( is_string( $value ) && 'transparent' == trim( $value ) ) {
165
  return 'transparent';
166
  }
167
- // Instantiate the object
168
  $color = ariColor::newColor( $value );
169
- // Return a CSS value, using the auto-detected mode
170
  return $color->toCSS( $color->mode );
171
  }
172
 
173
  /**
174
  * DOES NOT SANITIZE ANYTHING.
175
  *
 
176
  * @since 0.5
177
- *
178
- * @return mixed
179
  */
180
  public static function unfiltered( $value ) {
181
  return $value;
182
  }
183
-
184
  }
185
-
186
  }
7
  * @category Core
8
  * @author Aristeides Stathopoulos
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
11
  * @since 1.0
12
  */
13
 
14
+ // Exit if accessed directly.
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Sanitize_Values' ) ) {
20
 
21
+ /**
22
+ * A simple wrapper class for static methods.
23
+ */
24
  class Kirki_Sanitize_Values {
25
 
26
  /**
27
  * Fallback for non-existing methods.
28
+ *
29
+ * @static
30
+ * @access public
31
+ * @param string $name The method we're trying to access.
32
+ * @param mixed $arguments The arguments the method we're trying to call accepts.
33
+ * @return mixed The $arguments provided.
34
  */
35
  public static function __callStatic( $name, $arguments ) {
36
  error_log( "Kirki_Sanitize_Values::$name does not exist" );
37
+ return $arguments;
38
  }
39
 
40
  /**
47
  * @return bool Whether the checkbox is checked.
48
  */
49
  public static function checkbox( $checked ) {
50
+ return ( ( isset( $checked ) && ( true == $checked || 'on' === $checked ) ) ? true : false );
51
  }
52
 
53
  /**
54
+ * Sanitize number options.
55
  *
56
+ * @static
57
+ * @access public
58
  * @since 0.5
59
+ * @param int|float|double|string $value The value to be sanitized.
60
+ * @return int|float|double
61
  */
62
  public static function number( $value ) {
63
  return ( is_numeric( $value ) ) ? $value : intval( $value );
84
  $page_id = absint( $page_id );
85
 
86
  // If $page_id is an ID of a published page, return it; otherwise, return the default.
87
+ return ( 'publish' === get_post_status( $page_id ) ? $page_id : $setting->default );
88
  }
89
 
90
  /**
91
+ * Sanitizes css dimensions.
92
  *
93
+ * @static
94
+ * @access public
95
  * @since 2.2.0
96
+ * @param string $value The value to be sanitized.
97
  * @return string
98
  */
99
  public static function css_dimension( $value ) {
100
+
101
+ // Trim it.
102
  $value = trim( $value );
103
+
104
+ // If the value is round, then return 50%.
105
+ if ( 'round' === $value ) {
106
  $value = '50%';
107
  }
108
+
109
+ // If the value is empty, return empty.
110
+ if ( '' === $value ) {
111
  return '';
112
  }
113
+
114
+ // If auto, return auto.
115
+ if ( 'auto' === $value ) {
116
  return 'auto';
117
  }
118
+
119
  // Return empty if there are no numbers in the value.
120
  if ( ! preg_match( '#[0-9]#' , $value ) ) {
121
  return '';
122
  }
123
+
124
+ // If we're using calc() then return the value.
125
  if ( false !== strpos( $value, 'calc(' ) ) {
126
  return $value;
127
  }
128
+
129
+ // The raw value without the units.
130
  $raw_value = self::filter_number( $value );
131
  $unit_used = '';
132
+
133
  // An array of all valid CSS units. Their order was carefully chosen for this evaluation, don't mix it up!!!
134
  $units = array( 'rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax' );
135
  foreach ( $units as $unit ) {
137
  $unit_used = $unit;
138
  }
139
  }
140
+
141
+ // Hack for rem values.
142
+ if ( 'em' === $unit_used && false !== strpos( $value, 'rem' ) ) {
143
+ $unit_used = 'rem';
144
+ }
145
+
146
  return $raw_value . $unit_used;
147
  }
148
 
149
  /**
150
+ * Filters numeric values.
151
+ *
152
+ * @static
153
+ * @access public
154
+ * @param string $value The value to be sanitized.
155
+ * @return int|float
156
  */
157
  public static function filter_number( $value ) {
158
  return filter_var( $value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION );
161
  /**
162
  * Sanitize sortable controls
163
  *
164
+ * @static
165
  * @since 0.8.3
166
+ * @param string|array $value The value to be sanitized.
167
+ * @return string
168
  */
169
  public static function sortable( $value ) {
170
  if ( is_serialized( $value ) ) {
177
  /**
178
  * Sanitize RGBA colors
179
  *
180
+ * @static
181
  * @since 0.8.5
182
+ * @param string $value The value to be sanitized.
183
  * @return string
184
  */
185
  public static function rgba( $value ) {
190
  /**
191
  * Sanitize colors.
192
  *
193
+ * @static
194
  * @since 0.8.5
195
+ * @param string $value The value to be sanitized.
196
  * @return string
197
  */
198
  public static function color( $value ) {
199
+ // If the value is empty, then return empty.
200
+ if ( '' === $value ) {
201
  return '';
202
  }
203
+ // If transparent, then return 'transparent'.
204
+ if ( is_string( $value ) && 'transparent' === trim( $value ) ) {
205
  return 'transparent';
206
  }
207
+ // Instantiate the object.
208
  $color = ariColor::newColor( $value );
209
+ // Return a CSS value, using the auto-detected mode.
210
  return $color->toCSS( $color->mode );
211
  }
212
 
213
  /**
214
  * DOES NOT SANITIZE ANYTHING.
215
  *
216
+ * @static
217
  * @since 0.5
218
+ * @param int|string|array $value The value to be sanitized.
219
+ * @return int|string|array
220
  */
221
  public static function unfiltered( $value ) {
222
  return $value;
223
  }
 
224
  }
 
225
  }
includes/class-kirki-scripts-registry.php CHANGED
@@ -6,25 +6,50 @@
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
  * @since 1.0
11
  */
12
 
13
- // Exit if accessed directly
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Scripts_Registry' ) ) {
 
 
 
 
19
  class Kirki_Scripts_Registry {
20
 
 
 
 
 
 
 
21
  public $dependencies;
22
- public $branding;
23
- public $postmessage;
 
 
 
 
 
24
  public $tooltips;
25
- public $googlefonts;
 
 
 
 
 
 
26
  public $icons;
27
 
 
 
 
 
28
  public function __construct() {
29
 
30
  $this->dependencies = new Kirki_Enqueue();
@@ -34,11 +59,14 @@ if ( ! class_exists( 'Kirki_Scripts_Registry' ) ) {
34
  }
35
 
36
  /**
37
- * @param string $script
 
 
 
 
38
  */
39
  public static function prepare( $script ) {
40
  return '<script>jQuery(document).ready(function($) { "use strict"; ' . $script . '});</script>';
41
  }
42
-
43
  }
44
  }
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
  * @since 1.0
11
  */
12
 
13
+ // Exit if accessed directly.
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Scripts_Registry' ) ) {
19
+
20
+ /**
21
+ * Instantiates dependent classes
22
+ */
23
  class Kirki_Scripts_Registry {
24
 
25
+ /**
26
+ * Dependencies
27
+ *
28
+ * @access public
29
+ * @var object Kirki_Enqueue.
30
+ */
31
  public $dependencies;
32
+
33
+ /**
34
+ * Tooltips
35
+ *
36
+ * @access public
37
+ * @var object Kirki_Scripts_Tooltips.
38
+ */
39
  public $tooltips;
40
+
41
+ /**
42
+ * Icons
43
+ *
44
+ * @access public
45
+ * @var object Kirki_Scripts_Icons.
46
+ */
47
  public $icons;
48
 
49
+ /**
50
+ * The main class constructor.
51
+ * Instantiates secondary classes.
52
+ */
53
  public function __construct() {
54
 
55
  $this->dependencies = new Kirki_Enqueue();
59
  }
60
 
61
  /**
62
+ * Prepares a script for echoing.
63
+ * Wraps it in <script> and jQuery.
64
+ *
65
+ * @param string $script The contents of the script.
66
+ * @return string
67
  */
68
  public static function prepare( $script ) {
69
  return '<script>jQuery(document).ready(function($) { "use strict"; ' . $script . '});</script>';
70
  }
 
71
  }
72
  }
includes/class-kirki-section.php CHANGED
@@ -1,11 +1,27 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Section' ) ) {
4
 
 
 
 
5
  class Kirki_Section {
6
 
7
  /**
8
- * An array of our section types
 
 
 
9
  */
10
  private $section_types = array(
11
  'default' => 'Kirki_Sections_Default_Section',
@@ -13,6 +29,12 @@ if ( ! class_exists( 'Kirki_Section' ) ) {
13
  'hover' => 'Kirki_Sections_Hover_Section',
14
  );
15
 
 
 
 
 
 
 
16
  public function __construct( $args ) {
17
 
18
  $this->section_types = apply_filters( 'kirki/section_types', $this->section_types );
@@ -20,6 +42,12 @@ if ( ! class_exists( 'Kirki_Section' ) ) {
20
 
21
  }
22
 
 
 
 
 
 
 
23
  public function add_section( $args ) {
24
 
25
  global $wp_customize;
@@ -30,10 +58,10 @@ if ( ! class_exists( 'Kirki_Section' ) ) {
30
  $section_classname = $this->section_types[ $args['type'] ];
31
 
32
  $wp_customize->add_section( new $section_classname( $wp_customize, sanitize_key( $args['id'] ), array(
33
- 'title' => $args['title'], // already escaped in WP Core
34
  'priority' => absint( $args['priority'] ),
35
  'panel' => sanitize_key( $args['panel'] ),
36
- 'description' => $args['description'], // already escaped in WP Core
37
  'active_callback' => $args['active_callback'],
38
  ) ) );
39
 
@@ -41,9 +69,6 @@ if ( ! class_exists( 'Kirki_Section' ) ) {
41
  $args['context'] = 'section';
42
  Kirki_Scripts_Icons::generate_script( $args );
43
  }
44
-
45
  }
46
-
47
  }
48
-
49
  }
1
  <?php
2
+ /**
3
+ * Handles sections created via the Kirki API.
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 1.0
11
+ */
12
 
13
  if ( ! class_exists( 'Kirki_Section' ) ) {
14
 
15
+ /**
16
+ * Each section is a separate instrance of the Kirki_Section object.
17
+ */
18
  class Kirki_Section {
19
 
20
  /**
21
+ * An array of our section types.
22
+ *
23
+ * @access private
24
+ * @var array
25
  */
26
  private $section_types = array(
27
  'default' => 'Kirki_Sections_Default_Section',
29
  'hover' => 'Kirki_Sections_Hover_Section',
30
  );
31
 
32
+ /**
33
+ * The object constructor.
34
+ *
35
+ * @access public
36
+ * @param array $args The section parameters.
37
+ */
38
  public function __construct( $args ) {
39
 
40
  $this->section_types = apply_filters( 'kirki/section_types', $this->section_types );
42
 
43
  }
44
 
45
+ /**
46
+ * Adds the section using the WordPress Customizer API.
47
+ *
48
+ * @access public
49
+ * @param array $args The section parameters.
50
+ */
51
  public function add_section( $args ) {
52
 
53
  global $wp_customize;
58
  $section_classname = $this->section_types[ $args['type'] ];
59
 
60
  $wp_customize->add_section( new $section_classname( $wp_customize, sanitize_key( $args['id'] ), array(
61
+ 'title' => $args['title'], // Already escaped in WP Core.
62
  'priority' => absint( $args['priority'] ),
63
  'panel' => sanitize_key( $args['panel'] ),
64
+ 'description' => $args['description'], // Already escaped in WP Core.
65
  'active_callback' => $args['active_callback'],
66
  ) ) );
67
 
69
  $args['context'] = 'section';
70
  Kirki_Scripts_Icons::generate_script( $args );
71
  }
 
72
  }
 
73
  }
 
74
  }
includes/class-kirki-selective-refresh.php CHANGED
@@ -1,25 +1,23 @@
1
  <?php
2
-
3
  /**
4
- * Field "partial_refresh" argument format:
5
-
6
- 'transport' => 'postMessage',
7
- 'partial_refresh' => array(
8
- 'header_site_title' => array(
9
- 'selector' => '.site-title a',
10
- 'render_callback' => function() {
11
- return get_bloginfo( 'name', 'display' );
12
- },
13
- ),
14
- 'document_title' => array(
15
- 'selector' => 'head > title',
16
- 'render_callback' => 'wp_get_document_title',
17
- ),
18
- ),
19
  *
 
 
 
 
 
 
 
 
 
 
20
  */
21
  class Kirki_Selective_Refresh {
22
 
 
 
 
23
  public function __construct() {
24
  add_action( 'customize_register', array( $this, 'register_partials' ), 99 );
25
  }
@@ -29,22 +27,22 @@ class Kirki_Selective_Refresh {
29
  * If that argument is found, then it starts parsing the array of arguments.
30
  * Registers a selective_refresh in the customizer for each one of them.
31
  *
32
- * @param $wp_customize WP_Customize_Manager
33
  */
34
- public function register_partials( WP_Customize_Manager $wp_customize ) {
35
 
36
  // Abort if selective refresh is not available.
37
  if ( ! isset( $wp_customize->selective_refresh ) ) {
38
  return;
39
  }
40
 
41
- // Get an array of all fields
42
  $fields = Kirki::$fields;
43
 
44
- // Start parsing the fields
45
  foreach ( $fields as $field_id => $args ) {
46
  if ( isset( $args['partial_refresh'] ) ) {
47
- // Start going through each item in the array of partial refreshes
48
  foreach ( $args['partial_refresh'] as $partial_refresh => $partial_refresh_args ) {
49
  // If we have all we need, create the selective refresh call.
50
  if ( isset( $partial_refresh_args['render_callback'] ) && isset( $partial_refresh_args['selector'] ) ) {
1
  <?php
 
2
  /**
3
+ * Handles sections created via the Kirki API.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 1.0
11
+ */
12
+
13
+ /**
14
+ * Handle selective refreshes introduced in WordPress 4.5.
15
  */
16
  class Kirki_Selective_Refresh {
17
 
18
+ /**
19
+ * Adds any necessary actions & filters.
20
+ */
21
  public function __construct() {
22
  add_action( 'customize_register', array( $this, 'register_partials' ), 99 );
23
  }
27
  * If that argument is found, then it starts parsing the array of arguments.
28
  * Registers a selective_refresh in the customizer for each one of them.
29
  *
30
+ * @param object $wp_customize WP_Customize_Manager.
31
  */
32
+ public function register_partials( $wp_customize ) {
33
 
34
  // Abort if selective refresh is not available.
35
  if ( ! isset( $wp_customize->selective_refresh ) ) {
36
  return;
37
  }
38
 
39
+ // Get an array of all fields.
40
  $fields = Kirki::$fields;
41
 
42
+ // Start parsing the fields.
43
  foreach ( $fields as $field_id => $args ) {
44
  if ( isset( $args['partial_refresh'] ) ) {
45
+ // Start going through each item in the array of partial refreshes.
46
  foreach ( $args['partial_refresh'] as $partial_refresh => $partial_refresh_args ) {
47
  // If we have all we need, create the selective refresh call.
48
  if ( isset( $partial_refresh_args['render_callback'] ) && isset( $partial_refresh_args['selector'] ) ) {
includes/class-kirki-settings.php CHANGED
@@ -1,16 +1,33 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Settings' ) ) {
4
 
 
 
 
5
  class Kirki_Settings {
6
 
7
  /**
 
 
8
  * @access protected
9
  * @var WP_Customize_Manager
10
  */
11
  protected $wp_customize;
12
 
13
  /**
 
 
14
  * @access protected
15
  * @var array
16
  */
@@ -21,20 +38,20 @@ if ( ! class_exists( 'Kirki_Settings' ) ) {
21
  * Class constructor.
22
  *
23
  * @access public
24
- * @param $args array the field definition as sanitized in Kirki_Field
25
  */
26
  public function __construct( $args = array() ) {
27
 
28
- // Set the $wp_customize property
29
  global $wp_customize;
30
  if ( ! $wp_customize ) {
31
  return;
32
  }
33
  $this->wp_customize = $wp_customize;
34
 
35
- // Set the setting_types
36
  $this->set_setting_types();
37
- // Add the settings
38
  $this->add_settings( $args );
39
 
40
  }
@@ -46,11 +63,11 @@ if ( ! class_exists( 'Kirki_Settings' ) ) {
46
  * If not an array, then it just calls add_setting
47
  *
48
  * @access private
49
- * @param $args array the field definition as sanitized in Kirki_Field
50
  */
51
  final private function add_settings( $args = array() ) {
52
 
53
- // Get the classname we'll be using to create our setting(s)
54
  if ( ! isset( $args['type'] ) || ! array_key_exists( $args['type'], $this->setting_types ) ) {
55
  $args['type'] = 'default';
56
  }
@@ -59,7 +76,8 @@ if ( ! class_exists( 'Kirki_Settings' ) ) {
59
  // If settings are defined as an array, then we need to go through them
60
  // and call add_setting for each one of them separately.
61
  if ( isset( $args['settings'] ) && is_array( $args['settings'] ) ) {
62
- // Make sure defaults have been defined
 
63
  if ( ! isset( $args['default'] ) || ! is_array( $args['default'] ) ) {
64
  $args['default'] = array();
65
  }
@@ -75,15 +93,15 @@ if ( ! class_exists( 'Kirki_Settings' ) ) {
75
  * This is where we're finally adding the setting to the Customizer.
76
  *
77
  * @access private
78
- * @param $classname string the name of the class that will be used to create this setting.
79
- * We're getting this from $this->setting_types
80
- * @param $setting string the setting-name
81
- * If settings is an array, then this method is called per-setting.
82
- * @param $default string|array default value for this setting
83
- * @param $type string theme_mod|option
84
- * @param $capability string @see https://codex.wordpress.org/Roles_and_Capabilities
85
- * @param $transport string refresh|postMessage
86
- * @param $sanitize_callback string|array a callable sanitization function or method.
87
  */
88
  final private function add_setting( $classname, $setting, $default, $type, $capability, $transport, $sanitize_callback ) {
89
 
@@ -105,23 +123,19 @@ if ( ! class_exists( 'Kirki_Settings' ) ) {
105
  */
106
  final private function set_setting_types() {
107
 
108
- // Apply the kirki/setting_types filter
109
  $this->setting_types = apply_filters( 'kirki/setting_types', array(
110
  'default' => 'Kirki_Settings_Default_Setting',
111
  'repeater' => 'Kirki_Settings_Repeater_Setting',
112
  ) );
113
 
114
- // Make sure the defined classes actually exist
115
  foreach ( $this->setting_types as $key => $classname ) {
116
 
117
  if ( ! class_exists( $classname ) ) {
118
  unset( $this->setting_types[ $key ] );
119
  }
120
-
121
  }
122
-
123
  }
124
-
125
  }
126
-
127
  }
1
  <?php
2
+ /**
3
+ * Handles sections created via the Kirki API.
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 1.0
11
+ */
12
 
13
  if ( ! class_exists( 'Kirki_Settings' ) ) {
14
 
15
+ /**
16
+ * Each setting is a separate instance
17
+ */
18
  class Kirki_Settings {
19
 
20
  /**
21
+ * TYhe global $wp_customize object.
22
+ *
23
  * @access protected
24
  * @var WP_Customize_Manager
25
  */
26
  protected $wp_customize;
27
 
28
  /**
29
+ * The setting-stypes we're using.
30
+ *
31
  * @access protected
32
  * @var array
33
  */
38
  * Class constructor.
39
  *
40
  * @access public
41
+ * @param array $args The field definition as sanitized in Kirki_Field.
42
  */
43
  public function __construct( $args = array() ) {
44
 
45
+ // Set the $wp_customize property.
46
  global $wp_customize;
47
  if ( ! $wp_customize ) {
48
  return;
49
  }
50
  $this->wp_customize = $wp_customize;
51
 
52
+ // Set the setting_types.
53
  $this->set_setting_types();
54
+ // Add the settings.
55
  $this->add_settings( $args );
56
 
57
  }
63
  * If not an array, then it just calls add_setting
64
  *
65
  * @access private
66
+ * @param array $args The field definition as sanitized in Kirki_Field.
67
  */
68
  final private function add_settings( $args = array() ) {
69
 
70
+ // Get the classname we'll be using to create our setting(s).
71
  if ( ! isset( $args['type'] ) || ! array_key_exists( $args['type'], $this->setting_types ) ) {
72
  $args['type'] = 'default';
73
  }
76
  // If settings are defined as an array, then we need to go through them
77
  // and call add_setting for each one of them separately.
78
  if ( isset( $args['settings'] ) && is_array( $args['settings'] ) ) {
79
+
80
+ // Make sure defaults have been defined.
81
  if ( ! isset( $args['default'] ) || ! is_array( $args['default'] ) ) {
82
  $args['default'] = array();
83
  }
93
  * This is where we're finally adding the setting to the Customizer.
94
  *
95
  * @access private
96
+ * @param string $classname The name of the class that will be used to create this setting.
97
+ * We're getting this from $this->setting_types.
98
+ * @param string $setting The setting-name.
99
+ * If settings is an array, then this method is called per-setting.
100
+ * @param string|array $default Default value for this setting.
101
+ * @param string $type The data type we're using. Valid options: theme_mod|option.
102
+ * @param string $capability @see https://codex.wordpress.org/Roles_and_Capabilities.
103
+ * @param string $transport Use refresh|postMessage.
104
+ * @param string|array $sanitize_callback A callable sanitization function or method.
105
  */
106
  final private function add_setting( $classname, $setting, $default, $type, $capability, $transport, $sanitize_callback ) {
107
 
123
  */
124
  final private function set_setting_types() {
125
 
126
+ // Apply the kirki/setting_types filter.
127
  $this->setting_types = apply_filters( 'kirki/setting_types', array(
128
  'default' => 'Kirki_Settings_Default_Setting',
129
  'repeater' => 'Kirki_Settings_Repeater_Setting',
130
  ) );
131
 
132
+ // Make sure the defined classes actually exist.
133
  foreach ( $this->setting_types as $key => $classname ) {
134
 
135
  if ( ! class_exists( $classname ) ) {
136
  unset( $this->setting_types[ $key ] );
137
  }
 
138
  }
 
139
  }
 
140
  }
 
141
  }
includes/class-kirki-toolkit.php CHANGED
@@ -6,19 +6,25 @@
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
  * @since 1.0
11
  */
12
 
13
- // Exit if accessed directly
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Toolkit' ) ) {
 
 
 
 
19
  final class Kirki_Toolkit {
20
 
21
  /**
 
 
22
  * @static
23
  * @access protected
24
  * @var object
@@ -26,19 +32,17 @@ if ( ! class_exists( 'Kirki_Toolkit' ) ) {
26
  protected static $instance = null;
27
 
28
  /**
29
- * Access the single instance of this class
30
  *
31
  * @static
32
  * @access public
33
- * @return Kirki_Toolkit
34
  */
35
  public static function get_instance() {
36
- if ( null == self::$instance ) {
37
  self::$instance = new self();
38
  }
39
  return self::$instance;
40
  }
41
-
42
  }
43
-
44
  }
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
  * @since 1.0
11
  */
12
 
13
+ // Exit if accessed directly.
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Toolkit' ) ) {
19
+
20
+ /**
21
+ * Singleton class
22
+ */
23
  final class Kirki_Toolkit {
24
 
25
  /**
26
+ * Holds the one, true instance of this object.
27
+ *
28
  * @static
29
  * @access protected
30
  * @var object
32
  protected static $instance = null;
33
 
34
  /**
35
+ * Access the single instance of this class.
36
  *
37
  * @static
38
  * @access public
39
+ * @return object Kirki_Toolkit.
40
  */
41
  public static function get_instance() {
42
+ if ( null === self::$instance ) {
43
  self::$instance = new self();
44
  }
45
  return self::$instance;
46
  }
 
47
  }
 
48
  }
includes/class-kirki-values.php CHANGED
@@ -1,75 +1,81 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Values' ) ) {
 
 
 
 
4
  class Kirki_Values {
5
 
6
  /**
7
- * @param $config_id string
8
- * @param $field_id string
9
  *
 
 
 
 
10
  * @return string|array
11
  */
12
  public static function get_value( $config_id = '', $field_id = '' ) {
13
- /**
14
- * Make sure value is defined
15
- */
16
  $value = '';
17
 
18
- /**
19
- * This allows us to skip the $config_id argument.
20
- * If we skip adding a $config_id, use the 'global' configuration.
21
- */
22
- if ( ( '' == $field_id ) && '' != $config_id ) {
23
  $field_id = $config_id;
24
  $config_id = 'global';
25
  }
26
 
27
- /**
28
- * If $config_id is empty, set it to 'global'.
29
- */
30
- $config_id = ( '' == $config_id ) ? 'global' : $config_id;
31
 
32
- /**
33
- * fallback to 'global' if $config_id is not found
34
- */
35
  if ( ! isset( Kirki::$config[ $config_id ] ) ) {
36
  $config_id = 'global';
37
  }
38
 
39
- if ( 'theme_mod' == Kirki::$config[ $config_id ]['option_type'] ) {
40
- /**
41
- * We're using theme_mods.
42
- * so just get the value using get_theme_mod
43
- */
44
  $default_value = null;
45
  if ( isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ $field_id ]['default'] ) ) {
46
  $default_value = Kirki::$fields[ $field_id ]['default'];
47
  }
48
  $value = get_theme_mod( $field_id, $default_value );
49
 
50
- /**
51
- * If the field is a background field, then get the sub-fields
52
- * and return an array of the values.
53
- */
54
- if ( isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ $field_id ]['type'] ) && 'background' == Kirki::$fields[ $field_id ]['type'] ) {
55
  $value = array();
56
- if ( null == $default_value ) {
57
  $default_value = array();
58
  }
59
  foreach ( $default_value as $property_key => $property_default ) {
60
  $value[ $property_key ] = get_theme_mod( $field_id . '_' . $property_key, $property_default );
61
  }
62
  }
 
63
 
64
- } elseif ( 'option' == Kirki::$config[ $config_id ]['option_type'] ) {
65
- /**
66
- * We're using options.
67
- */
68
- if ( '' != Kirki::$config[ $config_id ]['option_name'] ) {
69
- /**
70
- * Options are serialized as a single option in the db.
71
- * We'll have to get the option and then get the item from the array.
72
- */
73
  $options = get_option( Kirki::$config[ $config_id ]['option_name'] );
74
 
75
  if ( ! isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ Kirki::$config[ $config_id ]['option_name'] . '[' . $field_id . ']' ] ) ) {
@@ -77,10 +83,8 @@ if ( ! class_exists( 'Kirki_Values' ) ) {
77
  }
78
  $setting_modified = str_replace( ']', '', str_replace( Kirki::$config[ $config_id ]['option_name'] . '[', '', $field_id ) );
79
 
80
- /**
81
- * If this is a background field, get the individual sub-fields and return an array.
82
- */
83
- if ( 'background' == Kirki::$fields[ $field_id ]['type'] ) {
84
  $value = array();
85
 
86
  foreach ( Kirki::$fields[ $field_id ]['default'] as $property => $property_default ) {
@@ -92,32 +96,25 @@ if ( ! class_exists( 'Kirki_Values' ) ) {
92
  }
93
  }
94
  } else {
95
- /**
96
- * This is not a background field so continue and get the value.
97
- */
98
  $value = ( isset( $options[ $setting_modified ] ) ) ? $options[ $setting_modified ] : Kirki::$fields[ $field_id ]['default'];
99
  $value = maybe_unserialize( $value );
100
  }
101
-
102
  } else {
103
- /**
104
- * Each option separately saved in the db
105
- */
106
  $value = get_option( $field_id, Kirki::$fields[ $field_id ]['default'] );
107
 
108
- /**
109
- * If the field is a background field, then get the sub-fields
110
- * and return an array of the values.
111
- */
112
- if ( 'background' == Kirki::$fields[ $field_id ]['type'] ) {
113
  $value = array();
114
  foreach ( Kirki::$fields[ $field_id ]['default'] as $property_key => $property_default ) {
115
  $value[ $property_key ] = get_option( $field_id . '_' . $property_key, $property_default );
116
  }
117
  }
118
-
119
  }
120
-
121
  }
122
 
123
  return apply_filters( 'kirki/values/get_value', $value, $field_id );
@@ -125,19 +122,19 @@ if ( ! class_exists( 'Kirki_Values' ) ) {
125
  }
126
 
127
  /**
128
- * @param $field array
129
  *
 
 
 
130
  * @return string|array
131
  */
132
  public static function get_sanitized_field_value( $field ) {
133
- /**
134
- * Get the value of this field
135
- */
136
  $value = $field['default'];
137
- if ( isset( $field['option_type'] ) && 'theme_mod' == $field['option_type'] ) {
138
  $value = get_theme_mod( $field['settings'], $field['default'] );
139
- } else if ( isset( $field['option_type'] ) && 'option' == $field['option_type'] ) {
140
- if ( isset( $field['option_name'] ) && '' != $field['option_name'] ) {
141
  $all_values = get_option( $field['option_name'], array() );
142
  $sub_setting_id = str_replace( array( ']', $field['option_name'] . '[' ), '', $field['settings'] );
143
  if ( isset( $all_values[ $sub_setting_id ] ) ) {
1
  <?php
2
+ /**
3
+ * Hekoers to get the values of a field.
4
+ * WARNING: PLEASE DO NOT USE THESE.
5
+ * we only have these for backwards-compatibility purposes.
6
+ * please use get_option() & get_theme_mod() instead.
7
+ *
8
+ * @package Kirki
9
+ * @category Core
10
+ * @author Aristeides Stathopoulos
11
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
12
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
13
+ * @since 1.0
14
+ */
15
 
16
  if ( ! class_exists( 'Kirki_Values' ) ) {
17
+
18
+ /**
19
+ * Wrapper class for static methods.
20
+ */
21
  class Kirki_Values {
22
 
23
  /**
24
+ * Get the value of a field.
 
25
  *
26
+ * @static
27
+ * @access public
28
+ * @param string $config_id The configuration ID. @see Kirki_Config.
29
+ * @param string $field_id The field ID.
30
  * @return string|array
31
  */
32
  public static function get_value( $config_id = '', $field_id = '' ) {
33
+
34
+ // Make sure value is defined.
 
35
  $value = '';
36
 
37
+ // This allows us to skip the $config_id argument.
38
+ // If we skip adding a $config_id, use the 'global' configuration.
39
+ if ( ( '' === $field_id ) && '' !== $config_id ) {
 
 
40
  $field_id = $config_id;
41
  $config_id = 'global';
42
  }
43
 
44
+ // If $config_id is empty, set it to 'global'.
45
+ $config_id = ( '' === $config_id ) ? 'global' : $config_id;
 
 
46
 
47
+ // Fallback to 'global' if $config_id is not found.
 
 
48
  if ( ! isset( Kirki::$config[ $config_id ] ) ) {
49
  $config_id = 'global';
50
  }
51
 
52
+ if ( 'theme_mod' === Kirki::$config[ $config_id ]['option_type'] ) {
53
+
54
+ // We're using theme_mods so just get the value using get_theme_mod.
 
 
55
  $default_value = null;
56
  if ( isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ $field_id ]['default'] ) ) {
57
  $default_value = Kirki::$fields[ $field_id ]['default'];
58
  }
59
  $value = get_theme_mod( $field_id, $default_value );
60
 
61
+ // If the field is a background field, then get the sub-fields
62
+ // and return an array of the values.
63
+ if ( isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ $field_id ]['type'] ) && 'background' === Kirki::$fields[ $field_id ]['type'] ) {
 
 
64
  $value = array();
65
+ if ( null === $default_value ) {
66
  $default_value = array();
67
  }
68
  foreach ( $default_value as $property_key => $property_default ) {
69
  $value[ $property_key ] = get_theme_mod( $field_id . '_' . $property_key, $property_default );
70
  }
71
  }
72
+ } elseif ( 'option' === Kirki::$config[ $config_id ]['option_type'] ) {
73
 
74
+ // We're using options.
75
+ if ( '' !== Kirki::$config[ $config_id ]['option_name'] ) {
76
+
77
+ // Options are serialized as a single option in the db.
78
+ // We'll have to get the option and then get the item from the array.
 
 
 
 
79
  $options = get_option( Kirki::$config[ $config_id ]['option_name'] );
80
 
81
  if ( ! isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ Kirki::$config[ $config_id ]['option_name'] . '[' . $field_id . ']' ] ) ) {
83
  }
84
  $setting_modified = str_replace( ']', '', str_replace( Kirki::$config[ $config_id ]['option_name'] . '[', '', $field_id ) );
85
 
86
+ // If this is a background field, get the individual sub-fields and return an array.
87
+ if ( 'background' === Kirki::$fields[ $field_id ]['type'] ) {
 
 
88
  $value = array();
89
 
90
  foreach ( Kirki::$fields[ $field_id ]['default'] as $property => $property_default ) {
96
  }
97
  }
98
  } else {
99
+
100
+ // This is not a background field so continue and get the value.
 
101
  $value = ( isset( $options[ $setting_modified ] ) ) ? $options[ $setting_modified ] : Kirki::$fields[ $field_id ]['default'];
102
  $value = maybe_unserialize( $value );
103
  }
 
104
  } else {
105
+
106
+ // Each option separately saved in the db.
 
107
  $value = get_option( $field_id, Kirki::$fields[ $field_id ]['default'] );
108
 
109
+ // If the field is a background field, then get the sub-fields.
110
+ // and return an array of the values.
111
+ if ( 'background' === Kirki::$fields[ $field_id ]['type'] ) {
 
 
112
  $value = array();
113
  foreach ( Kirki::$fields[ $field_id ]['default'] as $property_key => $property_default ) {
114
  $value[ $property_key ] = get_option( $field_id . '_' . $property_key, $property_default );
115
  }
116
  }
 
117
  }
 
118
  }
119
 
120
  return apply_filters( 'kirki/values/get_value', $value, $field_id );
122
  }
123
 
124
  /**
125
+ * Gets the value or fallsback to default.
126
  *
127
+ * @static
128
+ * @access public
129
+ * @param array $field The field aruments.
130
  * @return string|array
131
  */
132
  public static function get_sanitized_field_value( $field ) {
 
 
 
133
  $value = $field['default'];
134
+ if ( isset( $field['option_type'] ) && 'theme_mod' === $field['option_type'] ) {
135
  $value = get_theme_mod( $field['settings'], $field['default'] );
136
+ } else if ( isset( $field['option_type'] ) && 'option' === $field['option_type'] ) {
137
+ if ( isset( $field['option_name'] ) && '' !== $field['option_name'] ) {
138
  $all_values = get_option( $field['option_name'], array() );
139
  $sub_setting_id = str_replace( array( ']', $field['option_name'] . '[' ), '', $field['settings'] );
140
  if ( isset( $all_values[ $sub_setting_id ] ) ) {
includes/class-kirki.php CHANGED
@@ -8,57 +8,117 @@
8
  * @category Core
9
  * @author Aristeides Stathopoulos
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
12
  * @since 1.0
13
  */
14
 
15
- // Exit if accessed directly
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki' ) ) {
 
 
 
 
 
 
 
21
  class Kirki extends Kirki_Init {
22
 
 
 
 
 
 
 
 
23
  public static $path;
 
 
 
 
 
 
 
 
24
  public static $url;
25
 
 
 
 
 
 
 
 
26
  public static $config = array();
 
 
 
 
 
 
 
 
27
  public static $fields = array();
 
 
 
 
 
 
 
 
28
  public static $panels = array();
 
 
 
 
 
 
 
 
29
  public static $sections = array();
30
 
31
  /**
32
  * Get the value of an option from the db.
33
  *
34
- * @var string the ID of the configuration corresponding to this field
35
- * @var string the field_id (defined as 'settings' in the field arguments)
36
- *
37
- * @return mixed the saved value of the field.
38
- *
39
  */
40
  public static function get_option( $config_id = '', $field_id = '' ) {
 
41
  return Kirki_Values::get_value( $config_id, $field_id );
 
42
  }
43
 
44
  /**
45
  * Sets the configuration options.
46
  *
47
- * @var string the configuration ID.
48
- * @var array the configuration options.
49
- * @param string $config_id
 
50
  */
51
  public static function add_config( $config_id, $args = array() ) {
 
52
  $config = Kirki_Config::get_instance( $config_id, $args );
53
  $config_args = $config->get_config();
54
  self::$config[ $config_args['id'] ] = $config_args;
 
55
  }
56
 
57
  /**
58
- * Create a new panel
59
  *
60
- * @var string the ID for this panel
61
- * @var array the panel arguments
 
 
62
  */
63
  public static function add_panel( $id = '', $args = array() ) {
64
 
@@ -75,11 +135,12 @@ if ( ! class_exists( 'Kirki' ) ) {
75
  }
76
 
77
  /**
78
- * Create a new section
79
  *
80
- * @var string the ID for this section
81
- * @var array the section arguments
82
- * @param string $id
 
83
  */
84
  public static function add_section( $id, $args ) {
85
 
@@ -97,12 +158,15 @@ if ( ! class_exists( 'Kirki' ) ) {
97
  }
98
 
99
  /**
100
- * Create a new field
101
  *
102
- * @var string the configuration ID for this field
103
- * @var array the field arguments
 
 
104
  */
105
  public static function add_field( $config_id, $args ) {
 
106
  if ( isset( $args['type'] ) ) {
107
  $str = str_replace( array( '-', '_' ), ' ', $args['type'] );
108
  $classname = 'Kirki_Field_' . str_replace( ' ', '_', ucwords( $str ) );
@@ -111,8 +175,9 @@ if ( ! class_exists( 'Kirki' ) ) {
111
  return;
112
  }
113
  }
 
114
  new Kirki_Field( $config_id, $args );
115
- }
116
 
 
117
  }
118
  }
8
  * @category Core
9
  * @author Aristeides Stathopoulos
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
12
  * @since 1.0
13
  */
14
 
15
+ // Exit if accessed directly.
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki' ) ) {
21
+
22
+ /**
23
+ * This class acts as an interface.
24
+ * Developers may use this object to add configurations, fields, panels and sections.
25
+ * You can also access all available configurations, fields, panels and sections
26
+ * by accessing the object's static properties.
27
+ */
28
  class Kirki extends Kirki_Init {
29
 
30
+ /**
31
+ * Absolute path to the Kirki folder.
32
+ *
33
+ * @static
34
+ * @access public
35
+ * @var string
36
+ */
37
  public static $path;
38
+
39
+ /**
40
+ * URL to the Kirki folder.
41
+ *
42
+ * @static
43
+ * @access public
44
+ * @var string
45
+ */
46
  public static $url;
47
 
48
+ /**
49
+ * An array containing all configurations.
50
+ *
51
+ * @static
52
+ * @access public
53
+ * @var array
54
+ */
55
  public static $config = array();
56
+
57
+ /**
58
+ * An array containing all fields.
59
+ *
60
+ * @static
61
+ * @access public
62
+ * @var array
63
+ */
64
  public static $fields = array();
65
+
66
+ /**
67
+ * An array containing all panels.
68
+ *
69
+ * @static
70
+ * @access public
71
+ * @var array
72
+ */
73
  public static $panels = array();
74
+
75
+ /**
76
+ * An array containing all sections.
77
+ *
78
+ * @static
79
+ * @access public
80
+ * @var array
81
+ */
82
  public static $sections = array();
83
 
84
  /**
85
  * Get the value of an option from the db.
86
  *
87
+ * @static
88
+ * @access public
89
+ * @param string $config_id The ID of the configuration corresponding to this field.
90
+ * @param string $field_id The field_id (defined as 'settings' in the field arguments).
91
+ * @return mixed The saved value of the field.
92
  */
93
  public static function get_option( $config_id = '', $field_id = '' ) {
94
+
95
  return Kirki_Values::get_value( $config_id, $field_id );
96
+
97
  }
98
 
99
  /**
100
  * Sets the configuration options.
101
  *
102
+ * @static
103
+ * @access public
104
+ * @param string $config_id The configuration ID.
105
+ * @param array $args The configuration options.
106
  */
107
  public static function add_config( $config_id, $args = array() ) {
108
+
109
  $config = Kirki_Config::get_instance( $config_id, $args );
110
  $config_args = $config->get_config();
111
  self::$config[ $config_args['id'] ] = $config_args;
112
+
113
  }
114
 
115
  /**
116
+ * Create a new panel.
117
  *
118
+ * @static
119
+ * @access public
120
+ * @param string $id The ID for this panel.
121
+ * @param array $args The panel arguments.
122
  */
123
  public static function add_panel( $id = '', $args = array() ) {
124
 
135
  }
136
 
137
  /**
138
+ * Create a new section.
139
  *
140
+ * @static
141
+ * @access public
142
+ * @param string $id The ID for this section.
143
+ * @param array $args The section arguments.
144
  */
145
  public static function add_section( $id, $args ) {
146
 
158
  }
159
 
160
  /**
161
+ * Create a new field.
162
  *
163
+ * @static
164
+ * @access public
165
+ * @param string $config_id The configuration ID for this field.
166
+ * @param array $args The field arguments.
167
  */
168
  public static function add_field( $config_id, $args ) {
169
+
170
  if ( isset( $args['type'] ) ) {
171
  $str = str_replace( array( '-', '_' ), ' ', $args['type'] );
172
  $classname = 'Kirki_Field_' . str_replace( ' ', '_', ucwords( $str ) );
175
  return;
176
  }
177
  }
178
+
179
  new Kirki_Field( $config_id, $args );
 
180
 
181
+ }
182
  }
183
  }
includes/controls/class-kirki-controls-checkbox-control.php CHANGED
@@ -1,35 +1,62 @@
1
  <?php
2
  /**
3
- * Checkbox Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
- // Early exit if the class already exists
18
  if ( ! class_exists( 'Kirki_Controls_Checkbox_Control' ) ) {
 
 
 
 
 
 
19
  class Kirki_Controls_Checkbox_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'kirki-checkbox';
22
 
 
 
 
 
 
23
  public function enqueue() {
24
  wp_enqueue_script( 'kirki-checkbox' );
25
  }
26
 
27
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
28
  <# if ( data.tooltip ) { #>
29
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
30
  <# } #>
31
  <label>
32
- <input type="checkbox" value="{{ data.value }}" {{{ data.link }}}<# if ( data.value ) { #> checked<# } #> />
33
  {{ data.label }}
34
  <# if ( data.description ) { #>
35
  <span class="description customize-control-description">{{{ data.description }}}</span>
@@ -37,6 +64,5 @@ if ( ! class_exists( 'Kirki_Controls_Checkbox_Control' ) ) {
37
  </label>
38
  <?php
39
  }
40
-
41
  }
42
  }
1
  <?php
2
  /**
3
+ * Customizer Control: kirki-checkbox.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
 
17
  if ( ! class_exists( 'Kirki_Controls_Checkbox_Control' ) ) {
18
+
19
+ /**
20
+ * Creates a checkbox control in the customizer.
21
+ * This is an almost verbatim copy of WordPress core's implementation
22
+ * but we converted the template to use Underscore.js, and added the tooltip.
23
+ */
24
  class Kirki_Controls_Checkbox_Control extends Kirki_Customize_Control {
25
 
26
+ /**
27
+ * The control type.
28
+ *
29
+ * @access public
30
+ * @var string
31
+ */
32
  public $type = 'kirki-checkbox';
33
 
34
+ /**
35
+ * Enqueue control related scripts/styles.
36
+ *
37
+ * @access public
38
+ */
39
  public function enqueue() {
40
  wp_enqueue_script( 'kirki-checkbox' );
41
  }
42
 
43
+ /**
44
+ * An Underscore (JS) template for this control's content (but not its container).
45
+ *
46
+ * Class variables for this control class are available in the `data` JS object;
47
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
48
+ *
49
+ * @see WP_Customize_Control::print_template()
50
+ *
51
+ * @access protected
52
+ */
53
+ protected function content_template() {
54
+ ?>
55
  <# if ( data.tooltip ) { #>
56
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
57
  <# } #>
58
  <label>
59
+ <input type="checkbox" value="{{ data.value }}" {{{ data.link }}}<# if ( data.value ) { #> checked<# } #> />
60
  {{ data.label }}
61
  <# if ( data.description ) { #>
62
  <span class="description customize-control-description">{{{ data.description }}}</span>
64
  </label>
65
  <?php
66
  }
 
67
  }
68
  }
includes/controls/class-kirki-controls-code-control.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * code Customizer Control.
4
  *
5
  * Creates a new custom control.
6
  * Custom controls accept raw HTML/JS.
@@ -8,21 +8,35 @@
8
  * @package Kirki
9
  * @subpackage Controls
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
12
  * @since 1.0
13
  */
14
 
15
- // Exit if accessed directly
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Controls_Code_Control' ) ) {
21
 
 
 
 
22
  class Kirki_Controls_Code_Control extends Kirki_Customize_Control {
23
 
 
 
 
 
 
 
24
  public $type = 'code';
25
 
 
 
 
 
 
26
  public function to_json() {
27
  parent::to_json();
28
  if ( ! isset( $this->choices['language'] ) ) {
@@ -36,23 +50,28 @@ if ( ! class_exists( 'Kirki_Controls_Code_Control' ) ) {
36
  }
37
  }
38
 
 
 
 
 
 
39
  public function enqueue() {
40
 
41
  wp_enqueue_script( 'kirki-code' );
42
 
43
- // Get the language
44
  $lang_file = '/assets/js/vendor/codemirror/mode/' . $this->choices['language'] . '/' . $this->choices['language'] . '.js';
45
  $language = 'css';
46
  if ( file_exists( Kirki::$path . $lang_file ) || ! file_exists( Kirki::$path . str_replace( '/', DIRECTORY_SEPARATOR, $lang_file ) ) ) {
47
  $language = $this->choices['language'];
48
  }
49
 
50
- // hack for 'html' mode.
51
  if ( 'html' == $language ) {
52
  $language = 'htmlmixed';
53
  }
54
 
55
- // Get the theme
56
  $theme_file = '/assets/js/vendor/codemirror/theme/' . $this->choices['theme'] . '.css';
57
  $theme = 'monokai';
58
  if ( file_exists( Kirki::$path . $theme_file ) || file_exists( Kirki::$path . str_replace( '/', DIRECTORY_SEPARATOR, $theme_file ) ) ) {
@@ -69,16 +88,27 @@ if ( ! class_exists( 'Kirki_Controls_Code_Control' ) ) {
69
  wp_enqueue_script( 'codemirror-language-css', trailingslashit( Kirki::$url ) . 'assets/js/vendor/codemirror/mode/css/css.js', array( 'jquery', 'codemirror' ) );
70
  wp_enqueue_script( 'codemirror-language-htmlmixed', trailingslashit( Kirki::$url ) . 'assets/js/vendor/codemirror/mode/htmlmixed/htmlmixed.js', array( 'jquery', 'codemirror', 'codemirror-multiplex', 'codemirror-language-xml', 'codemirror-language-javascript', 'codemirror-language-css' ) );
71
  } else {
72
- // Add language script
73
  wp_enqueue_script( 'codemirror-language-' . $language, trailingslashit( Kirki::$url ) . 'assets/js/vendor/codemirror/mode/' . $language . '/' . $language . '.js', array( 'jquery', 'codemirror' ) );
74
  }
75
 
76
- // Add theme styles
77
  wp_enqueue_style( 'codemirror-theme-' . $theme, trailingslashit( Kirki::$url ) . 'assets/js/vendor/codemirror/theme/' . $theme . '.css' );
78
 
79
  }
80
 
81
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
82
  <# if ( data.tooltip ) { #>
83
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
84
  <# } #>
@@ -93,6 +123,5 @@ if ( ! class_exists( 'Kirki_Controls_Code_Control' ) ) {
93
  </label>
94
  <?php
95
  }
96
-
97
  }
98
  }
1
  <?php
2
  /**
3
+ * Customizer Control: code.
4
  *
5
  * Creates a new custom control.
6
  * Custom controls accept raw HTML/JS.
8
  * @package Kirki
9
  * @subpackage Controls
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
12
  * @since 1.0
13
  */
14
 
15
+ // Exit if accessed directly.
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Controls_Code_Control' ) ) {
21
 
22
+ /**
23
+ * Adds a "code" control, using CodeMirror.
24
+ */
25
  class Kirki_Controls_Code_Control extends Kirki_Customize_Control {
26
 
27
+ /**
28
+ * The control type.
29
+ *
30
+ * @access public
31
+ * @var string
32
+ */
33
  public $type = 'code';
34
 
35
+ /**
36
+ * Refresh the parameters passed to the JavaScript via JSON.
37
+ *
38
+ * @access public
39
+ */
40
  public function to_json() {
41
  parent::to_json();
42
  if ( ! isset( $this->choices['language'] ) ) {
50
  }
51
  }
52
 
53
+ /**
54
+ * Enqueue control related scripts/styles.
55
+ *
56
+ * @access public
57
+ */
58
  public function enqueue() {
59
 
60
  wp_enqueue_script( 'kirki-code' );
61
 
62
+ // Get the language.
63
  $lang_file = '/assets/js/vendor/codemirror/mode/' . $this->choices['language'] . '/' . $this->choices['language'] . '.js';
64
  $language = 'css';
65
  if ( file_exists( Kirki::$path . $lang_file ) || ! file_exists( Kirki::$path . str_replace( '/', DIRECTORY_SEPARATOR, $lang_file ) ) ) {
66
  $language = $this->choices['language'];
67
  }
68
 
69
+ // Hack for 'html' mode.
70
  if ( 'html' == $language ) {
71
  $language = 'htmlmixed';
72
  }
73
 
74
+ // Get the theme.
75
  $theme_file = '/assets/js/vendor/codemirror/theme/' . $this->choices['theme'] . '.css';
76
  $theme = 'monokai';
77
  if ( file_exists( Kirki::$path . $theme_file ) || file_exists( Kirki::$path . str_replace( '/', DIRECTORY_SEPARATOR, $theme_file ) ) ) {
88
  wp_enqueue_script( 'codemirror-language-css', trailingslashit( Kirki::$url ) . 'assets/js/vendor/codemirror/mode/css/css.js', array( 'jquery', 'codemirror' ) );
89
  wp_enqueue_script( 'codemirror-language-htmlmixed', trailingslashit( Kirki::$url ) . 'assets/js/vendor/codemirror/mode/htmlmixed/htmlmixed.js', array( 'jquery', 'codemirror', 'codemirror-multiplex', 'codemirror-language-xml', 'codemirror-language-javascript', 'codemirror-language-css' ) );
90
  } else {
91
+ // Add language script.
92
  wp_enqueue_script( 'codemirror-language-' . $language, trailingslashit( Kirki::$url ) . 'assets/js/vendor/codemirror/mode/' . $language . '/' . $language . '.js', array( 'jquery', 'codemirror' ) );
93
  }
94
 
95
+ // Add theme styles.
96
  wp_enqueue_style( 'codemirror-theme-' . $theme, trailingslashit( Kirki::$url ) . 'assets/js/vendor/codemirror/theme/' . $theme . '.css' );
97
 
98
  }
99
 
100
+ /**
101
+ * An Underscore (JS) template for this control's content (but not its container).
102
+ *
103
+ * Class variables for this control class are available in the `data` JS object;
104
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
105
+ *
106
+ * @see WP_Customize_Control::print_template()
107
+ *
108
+ * @access protected
109
+ */
110
+ protected function content_template() {
111
+ ?>
112
  <# if ( data.tooltip ) { #>
113
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
114
  <# } #>
123
  </label>
124
  <?php
125
  }
 
126
  }
127
  }
includes/controls/class-kirki-controls-color-alpha-control.php CHANGED
@@ -1,50 +1,77 @@
1
  <?php
2
  /**
3
- * color-alpha Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Color_Alpha_Control' ) ) {
18
 
 
 
 
 
 
19
  class Kirki_Controls_Color_Alpha_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'color-alpha';
22
 
 
 
 
 
 
 
23
  public $palette = true;
24
 
25
- public $default = '#FFFFFF';
26
 
 
 
 
 
 
27
  public function to_json() {
28
  parent::to_json();
29
  $this->json['palette'] = $this->palette;
30
  $this->choices['alpha'] = ( isset( $this->choices['alpha'] ) && $this->choices['alpha'] ) ? 'true' : 'false';
31
  }
32
 
 
 
 
 
 
33
  public function enqueue() {
34
  wp_enqueue_script( 'kirki-color-alpha' );
35
  }
36
 
37
- protected function render() {
38
- $id = 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) );
39
- $class = 'customize-control customize-control-' . $this->type; ?>
40
- <li id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>">
41
- <?php $this->render_content(); ?>
42
- </li>
43
- <?php }
44
-
45
- public function render_content() {}
46
-
47
- public function content_template() { ?>
 
48
  <# if ( data.tooltip ) { #>
49
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
50
  <# } #>
@@ -59,7 +86,5 @@ if ( ! class_exists( 'Kirki_Controls_Color_Alpha_Control' ) ) {
59
  </label>
60
  <?php
61
  }
62
-
63
  }
64
-
65
  }
1
  <?php
2
  /**
3
+ * Customizer Control: color-alpha.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Color_Alpha_Control' ) ) {
18
 
19
+ /**
20
+ * Adds a color & color-alpha control
21
+ *
22
+ * @see https://github.com/23r9i0/wp-color-picker-alpha
23
+ */
24
  class Kirki_Controls_Color_Alpha_Control extends Kirki_Customize_Control {
25
 
26
+ /**
27
+ * The control type.
28
+ *
29
+ * @access public
30
+ * @var string
31
+ */
32
  public $type = 'color-alpha';
33
 
34
+ /**
35
+ * Colorpicker palette
36
+ *
37
+ * @access public
38
+ * @var bool
39
+ */
40
  public $palette = true;
41
 
 
42
 
43
+ /**
44
+ * Refresh the parameters passed to the JavaScript via JSON.
45
+ *
46
+ * @access public
47
+ */
48
  public function to_json() {
49
  parent::to_json();
50
  $this->json['palette'] = $this->palette;
51
  $this->choices['alpha'] = ( isset( $this->choices['alpha'] ) && $this->choices['alpha'] ) ? 'true' : 'false';
52
  }
53
 
54
+ /**
55
+ * Enqueue control related scripts/styles.
56
+ *
57
+ * @access public
58
+ */
59
  public function enqueue() {
60
  wp_enqueue_script( 'kirki-color-alpha' );
61
  }
62
 
63
+ /**
64
+ * An Underscore (JS) template for this control's content (but not its container).
65
+ *
66
+ * Class variables for this control class are available in the `data` JS object;
67
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
68
+ *
69
+ * @see WP_Customize_Control::print_template()
70
+ *
71
+ * @access protected
72
+ */
73
+ protected function content_template() {
74
+ ?>
75
  <# if ( data.tooltip ) { #>
76
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
77
  <# } #>
86
  </label>
87
  <?php
88
  }
 
89
  }
 
90
  }
includes/controls/class-kirki-controls-color-palette-control.php CHANGED
@@ -1,32 +1,52 @@
1
  <?php
2
  /**
3
- * palette Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Color_Palette_Control' ) ) {
18
 
 
 
 
 
19
  class Kirki_Controls_Color_Palette_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'color-palette';
22
 
 
 
 
 
 
23
  public function enqueue() {
24
  wp_enqueue_script( 'kirki-color-palette' );
25
  }
26
 
 
 
 
 
 
27
  public function to_json() {
28
  parent::to_json();
29
- // If no palette has been defined, use Material Design Palette
30
  if ( ! isset( $this->json['choices']['colors'] ) || empty( $this->json['choices']['colors'] ) ) {
31
  $this->json['choices']['colors'] = Kirki_Helper::get_material_design_colors( 'primary' );
32
  }
@@ -35,7 +55,18 @@ if ( ! class_exists( 'Kirki_Controls_Color_Palette_Control' ) ) {
35
  }
36
  }
37
 
38
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
39
  <# if ( data.tooltip ) { #>
40
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
41
  <# } #>
@@ -57,7 +88,5 @@ if ( ! class_exists( 'Kirki_Controls_Color_Palette_Control' ) ) {
57
  </div>
58
  <?php
59
  }
60
-
61
  }
62
-
63
  }
1
  <?php
2
  /**
3
+ * Customizer Control: color-palette.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.6
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Color_Palette_Control' ) ) {
18
 
19
+ /**
20
+ * Adds a color-palette control.
21
+ * This is essentially a radio control, styled as a palette.
22
+ */
23
  class Kirki_Controls_Color_Palette_Control extends Kirki_Customize_Control {
24
 
25
+ /**
26
+ * The control type.
27
+ *
28
+ * @access public
29
+ * @var string
30
+ */
31
  public $type = 'color-palette';
32
 
33
+ /**
34
+ * Enqueue control related scripts/styles.
35
+ *
36
+ * @access public
37
+ */
38
  public function enqueue() {
39
  wp_enqueue_script( 'kirki-color-palette' );
40
  }
41
 
42
+ /**
43
+ * Refresh the parameters passed to the JavaScript via JSON.
44
+ *
45
+ * @access public
46
+ */
47
  public function to_json() {
48
  parent::to_json();
49
+ // If no palette has been defined, use Material Design Palette.
50
  if ( ! isset( $this->json['choices']['colors'] ) || empty( $this->json['choices']['colors'] ) ) {
51
  $this->json['choices']['colors'] = Kirki_Helper::get_material_design_colors( 'primary' );
52
  }
55
  }
56
  }
57
 
58
+ /**
59
+ * An Underscore (JS) template for this control's content (but not its container).
60
+ *
61
+ * Class variables for this control class are available in the `data` JS object;
62
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
63
+ *
64
+ * @see WP_Customize_Control::print_template()
65
+ *
66
+ * @access protected
67
+ */
68
+ protected function content_template() {
69
+ ?>
70
  <# if ( data.tooltip ) { #>
71
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
72
  <# } #>
88
  </div>
89
  <?php
90
  }
 
91
  }
 
92
  }
includes/controls/class-kirki-controls-custom-control.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * custom Customizer Control.
4
  *
5
  * Creates a new custom control.
6
  * Custom controls accept raw HTML/JS.
@@ -8,21 +8,42 @@
8
  * @package Kirki
9
  * @subpackage Controls
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
12
  * @since 1.0
13
  */
14
 
15
- // Exit if accessed directly
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Controls_Custom_Control' ) ) {
 
 
 
 
21
  class Kirki_Controls_Custom_Control extends Kirki_Customize_Control {
22
 
 
 
 
 
 
 
23
  public $type = 'custom';
24
 
25
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
26
  <# if ( data.tooltip ) { #>
27
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
28
  <# } #>
@@ -47,6 +68,5 @@ if ( ! class_exists( 'Kirki_Controls_Custom_Control' ) ) {
47
  <?php
48
 
49
  }
50
-
51
  }
52
  }
1
  <?php
2
  /**
3
+ * Customizer Control: custom.
4
  *
5
  * Creates a new custom control.
6
  * Custom controls accept raw HTML/JS.
8
  * @package Kirki
9
  * @subpackage Controls
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
12
  * @since 1.0
13
  */
14
 
15
+ // Exit if accessed directly.
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Controls_Custom_Control' ) ) {
21
+
22
+ /**
23
+ * The "custom" control allows you to add any raw HTML.
24
+ */
25
  class Kirki_Controls_Custom_Control extends Kirki_Customize_Control {
26
 
27
+ /**
28
+ * The control type.
29
+ *
30
+ * @access public
31
+ * @var string
32
+ */
33
  public $type = 'custom';
34
 
35
+ /**
36
+ * An Underscore (JS) template for this control's content (but not its container).
37
+ *
38
+ * Class variables for this control class are available in the `data` JS object;
39
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
40
+ *
41
+ * @see WP_Customize_Control::print_template()
42
+ *
43
+ * @access protected
44
+ */
45
+ protected function content_template() {
46
+ ?>
47
  <# if ( data.tooltip ) { #>
48
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
49
  <# } #>
68
  <?php
69
 
70
  }
 
71
  }
72
  }
includes/controls/class-kirki-controls-dashicons-control.php CHANGED
@@ -1,35 +1,65 @@
1
  <?php
2
  /**
3
- * Dashicons Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 2.2.4
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Dashicons_Control' ) ) {
18
 
 
 
 
19
  class Kirki_Controls_Dashicons_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'dashicons';
22
 
 
 
 
 
 
23
  public function to_json() {
24
  parent::to_json();
25
  $this->json['icons'] = Kirki_Helper::get_dashicons();
26
  }
27
 
 
 
 
 
 
28
  public function enqueue() {
29
  wp_enqueue_script( 'kirki-dashicons' );
30
  }
31
 
32
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
33
  <# if ( data.tooltip ) { #>
34
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
35
  <# } #>
@@ -163,7 +193,5 @@ if ( ! class_exists( 'Kirki_Controls_Dashicons_Control' ) ) {
163
  </div>
164
  <?php
165
  }
166
-
167
  }
168
-
169
  }
1
  <?php
2
  /**
3
+ * Customizer Control: dashicons.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 2.2.4
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Dashicons_Control' ) ) {
18
 
19
+ /**
20
+ * Dashicons control (modified radio).
21
+ */
22
  class Kirki_Controls_Dashicons_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'dashicons';
31
 
32
+ /**
33
+ * Refresh the parameters passed to the JavaScript via JSON.
34
+ *
35
+ * @access public
36
+ */
37
  public function to_json() {
38
  parent::to_json();
39
  $this->json['icons'] = Kirki_Helper::get_dashicons();
40
  }
41
 
42
+ /**
43
+ * Enqueue control related scripts/styles.
44
+ *
45
+ * @access public
46
+ */
47
  public function enqueue() {
48
  wp_enqueue_script( 'kirki-dashicons' );
49
  }
50
 
51
+ /**
52
+ * An Underscore (JS) template for this control's content (but not its container).
53
+ *
54
+ * Class variables for this control class are available in the `data` JS object;
55
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
56
+ *
57
+ * @see WP_Customize_Control::print_template()
58
+ *
59
+ * @access protected
60
+ */
61
+ protected function content_template() {
62
+ ?>
63
  <# if ( data.tooltip ) { #>
64
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
65
  <# } #>
193
  </div>
194
  <?php
195
  }
 
196
  }
 
197
  }
includes/controls/class-kirki-controls-date-control.php CHANGED
@@ -1,29 +1,55 @@
1
  <?php
2
  /**
3
- * Date Field Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 2.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Date_Control' ) ) {
 
 
 
 
18
  class Kirki_Controls_Date_Control extends Kirki_Customize_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'kirki-date';
21
 
 
 
 
 
 
22
  public function enqueue() {
23
  wp_enqueue_script( 'kirki-dashicons' );
24
  }
25
 
26
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
27
  <# if ( data.tooltip ) { #>
28
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
29
  <# } #>
@@ -40,6 +66,5 @@ if ( ! class_exists( 'Kirki_Controls_Date_Control' ) ) {
40
  </label>
41
  <?php
42
  }
43
-
44
  }
45
  }
1
  <?php
2
  /**
3
+ * Customizer Control: kirki-date.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Date_Control' ) ) {
18
+
19
+ /**
20
+ * A simple date control, using jQuery UI.
21
+ */
22
  class Kirki_Controls_Date_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'kirki-date';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-dashicons' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( data.tooltip ) { #>
54
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
55
  <# } #>
66
  </label>
67
  <?php
68
  }
 
69
  }
70
  }
includes/controls/class-kirki-controls-dimension-control.php CHANGED
@@ -1,29 +1,55 @@
1
  <?php
2
  /**
3
- * dimension Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Dimension_Control' ) ) {
 
 
 
 
18
  class Kirki_Controls_Dimension_Control extends Kirki_Customize_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'dimension';
21
 
 
 
 
 
 
22
  public function enqueue() {
23
  wp_enqueue_script( 'kirki-dimension' );
24
  }
25
 
26
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
27
  <# if ( data.tooltip ) { #>
28
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
29
  <# } #>
@@ -41,6 +67,5 @@ if ( ! class_exists( 'Kirki_Controls_Dimension_Control' ) ) {
41
  </label>
42
  <?php
43
  }
44
-
45
  }
46
  }
1
  <?php
2
  /**
3
+ * Customizer Control: dimension
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Dimension_Control' ) ) {
18
+
19
+ /**
20
+ * A text control with validation for CSS units.
21
+ */
22
  class Kirki_Controls_Dimension_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'dimension';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-dimension' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( data.tooltip ) { #>
54
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
55
  <# } #>
67
  </label>
68
  <?php
69
  }
 
70
  }
71
  }
includes/controls/class-kirki-controls-dropdown-pages-control.php CHANGED
@@ -1,62 +1,94 @@
1
  <?php
2
  /**
3
- * Dropdown Pages Control
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 2.2.8
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Dropdown_Pages_Control' ) ) {
18
 
 
 
 
 
 
19
  class Kirki_Controls_Dropdown_Pages_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'dropdown-pages';
22
 
 
 
 
 
 
23
  public function enqueue() {
24
  wp_enqueue_script( 'kirki-dropdown-pages' );
25
  }
26
 
27
- protected function render_content() { ?>
28
- <?php if ( '' != $this->tooltip ) : ?>
29
- <a href="#" class="tooltip hint--left" data-hint="<?php echo esc_html( $this->tooltip ); ?>"><span class='dashicons dashicons-info'></span></a>
30
- <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  <label>
32
- <?php if ( ! empty( $this->label ) ) : ?>
33
- <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
34
- <?php endif;
35
- if ( ! empty( $this->description ) ) : ?>
36
- <span class="description customize-control-description"><?php echo $this->description; ?></span>
37
- <?php endif; ?>
38
-
39
- <?php
40
- $l10n = Kirki_l10n::get_strings();
41
- $dropdown = wp_dropdown_pages(
42
- array(
43
- 'name' => '_customize-dropdown-pages-' . $this->id,
44
- 'echo' => 0,
45
- 'show_option_none' => $l10n['select-page'],
46
- 'option_none_value' => '0',
47
- 'selected' => $this->value(),
48
- )
49
- );
50
-
51
- // Hackily add in the data link parameter.
52
- $dropdown = str_replace( '<select', '<select ' . $this->get_link(), $dropdown );
53
- echo $dropdown;
54
- ?>
55
  </label>
56
  <?php
57
-
58
  }
59
-
60
  }
61
-
62
  }
1
  <?php
2
  /**
3
+ * Customizer Control: dropdown-pages.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 2.2.8
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Dropdown_Pages_Control' ) ) {
18
 
19
+ /**
20
+ * A copy of WordPress core's "dropdown-pages" control.
21
+ * The template has been converted to use Underscore.js
22
+ * and we added a tooltip.
23
+ */
24
  class Kirki_Controls_Dropdown_Pages_Control extends Kirki_Customize_Control {
25
 
26
+ /**
27
+ * The control type.
28
+ *
29
+ * @access public
30
+ * @var string
31
+ */
32
  public $type = 'dropdown-pages';
33
 
34
+ /**
35
+ * Enqueue control related scripts/styles.
36
+ *
37
+ * @access public
38
+ */
39
  public function enqueue() {
40
  wp_enqueue_script( 'kirki-dropdown-pages' );
41
  }
42
 
43
+ /**
44
+ * Refresh the parameters passed to the JavaScript via JSON.
45
+ *
46
+ * @access public
47
+ */
48
+ public function to_json() {
49
+ parent::to_json();
50
+ $l10n = Kirki_l10n::get_strings();
51
+ $dropdown = wp_dropdown_pages(
52
+ array(
53
+ 'name' => '_customize-dropdown-pages-' . esc_attr( $this->id ),
54
+ 'echo' => 0,
55
+ 'show_option_none' => esc_attr( $l10n['select-page'] ),
56
+ 'option_none_value' => '0',
57
+ 'selected' => esc_attr( $this->value() ),
58
+ )
59
+ );
60
+
61
+ // Hackily add in the data link parameter.
62
+ $dropdown = str_replace( '<select', '<select ' . $this->get_link(), $dropdown );
63
+
64
+ $this->json['dropdown'] = $dropdown;
65
+ }
66
+
67
+ /**
68
+ * An Underscore (JS) template for this control's content (but not its container).
69
+ *
70
+ * Class variables for this control class are available in the `data` JS object;
71
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
72
+ *
73
+ * @see WP_Customize_Control::print_template()
74
+ *
75
+ * @access protected
76
+ */
77
+ protected function content_template() {
78
+ ?>
79
+ <# if ( data.tooltip ) { #>
80
+ <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
81
+ <# } #>
82
  <label>
83
+ <# if ( data.label ) { #>
84
+ <span class="customize-control-title">{{{ data.label }}}</span>
85
+ <# } #>
86
+ <# if ( data.description ) { #>
87
+ <span class="description customize-control-description">{{{ data.description }}}</span>
88
+ <# } #>
89
+ <div class="customize-control-content">{{{ data.dropdown }}}</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  </label>
91
  <?php
 
92
  }
 
93
  }
 
94
  }
includes/controls/class-kirki-controls-editor-control.php CHANGED
@@ -1,31 +1,53 @@
1
  <?php
2
  /**
3
- * editor Customizer Control.
4
  *
5
  * Creates a TinyMCE textarea.
6
  *
7
  * @package Kirki
8
  * @subpackage Controls
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
11
  * @since 1.0
12
  */
13
 
14
- // Exit if accessed directly
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Controls_Editor_Control' ) ) {
 
 
 
 
20
  class Kirki_Controls_Editor_Control extends Kirki_Customize_Control {
21
 
 
 
 
 
 
 
22
  public $type = 'editor';
23
 
 
 
 
 
 
24
  public function enqueue() {
25
  wp_enqueue_script( 'kirki-editor' );
26
  }
27
 
28
- public function render_content() { ?>
 
 
 
 
 
 
 
29
  <?php if ( '' != $this->tooltip ) : ?>
30
  <a href="#" class="tooltip hint--left" data-hint="<?php echo esc_html( $this->tooltip ); ?>"><span class='dashicons dashicons-info'></span></a>
31
  <?php endif; ?>
@@ -34,30 +56,31 @@ if ( ! class_exists( 'Kirki_Controls_Editor_Control' ) ) {
34
  <span class="customize-control-title">
35
  <?php echo esc_html( $this->label ); ?>
36
  </span>
37
- <?php if ( ! empty( $this->description ) ) : ?>
38
- <span class="description customize-control-description"><?php echo $this->description; ?></span>
39
- <?php endif; ?>
40
- <?php
41
- $settings = array(
42
- 'textarea_name' => $this->id,
43
- 'teeny' => true,
44
- );
45
- add_filter( 'the_editor', array( $this, 'filter_editor_setting_link' ) );
46
- wp_editor( html_entity_decode( wp_kses_post( $this->value() ) ), $this->id, $settings );
47
-
48
- do_action( 'admin_footer' );
49
- do_action( 'admin_print_footer_scripts' );
50
- ?>
51
  </label>
 
 
 
52
  <?php
 
 
 
 
 
 
 
 
 
53
  }
54
 
55
  /**
 
 
 
 
56
  * @return string
57
  */
58
  public function filter_editor_setting_link( $output ) {
59
  return preg_replace( '/<textarea/', '<textarea ' . $this->get_link(), $output, 1 );
60
  }
61
-
62
  }
63
  }
1
  <?php
2
  /**
3
+ * Customizer Control: editor.
4
  *
5
  * Creates a TinyMCE textarea.
6
  *
7
  * @package Kirki
8
  * @subpackage Controls
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
11
  * @since 1.0
12
  */
13
 
14
+ // Exit if accessed directly.
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Controls_Editor_Control' ) ) {
20
+
21
+ /**
22
+ * A TinyMCE control.
23
+ */
24
  class Kirki_Controls_Editor_Control extends Kirki_Customize_Control {
25
 
26
+ /**
27
+ * The control type.
28
+ *
29
+ * @access public
30
+ * @var string
31
+ */
32
  public $type = 'editor';
33
 
34
+ /**
35
+ * Enqueue control related scripts/styles.
36
+ *
37
+ * @access public
38
+ */
39
  public function enqueue() {
40
  wp_enqueue_script( 'kirki-editor' );
41
  }
42
 
43
+ /**
44
+ * Render the control's content.
45
+ * Allows the content to be overriden without having to rewrite the wrapper in $this->render().
46
+ *
47
+ * @access protected
48
+ */
49
+ protected function render_content() {
50
+ ?>
51
  <?php if ( '' != $this->tooltip ) : ?>
52
  <a href="#" class="tooltip hint--left" data-hint="<?php echo esc_html( $this->tooltip ); ?>"><span class='dashicons dashicons-info'></span></a>
53
  <?php endif; ?>
56
  <span class="customize-control-title">
57
  <?php echo esc_html( $this->label ); ?>
58
  </span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  </label>
60
+ <?php if ( ! empty( $this->description ) ) : ?>
61
+ <span class="description customize-control-description"><?php echo wp_kses_post( $this->description ); ?></span>
62
+ <?php endif; ?>
63
  <?php
64
+ $settings = array(
65
+ 'textarea_name' => $this->id,
66
+ 'teeny' => true,
67
+ );
68
+ add_filter( 'the_editor', array( $this, 'filter_editor_setting_link' ) );
69
+ wp_editor( html_entity_decode( wp_kses_post( $this->value() ) ), $this->id, $settings );
70
+
71
+ do_action( 'admin_footer' );
72
+ do_action( 'admin_print_footer_scripts' );
73
  }
74
 
75
  /**
76
+ * Used to add a unique ID to the textarea
77
+ *
78
+ * @access public
79
+ * @param string $output Used to filter the textarea and add the link.
80
  * @return string
81
  */
82
  public function filter_editor_setting_link( $output ) {
83
  return preg_replace( '/<textarea/', '<textarea ' . $this->get_link(), $output, 1 );
84
  }
 
85
  }
86
  }
includes/controls/class-kirki-controls-generic-control.php CHANGED
@@ -1,29 +1,56 @@
1
  <?php
2
  /**
3
- * Generic Field Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 2.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Generic_Control' ) ) {
 
 
 
 
 
18
  class Kirki_Controls_Generic_Control extends Kirki_Customize_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'kirki-generic';
21
 
 
 
 
 
 
22
  public function enqueue() {
23
  wp_enqueue_script( 'kirki-generic' );
24
  }
25
 
26
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
27
  <# if ( data.tooltip ) { #>
28
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
29
  <# } #>
@@ -38,13 +65,22 @@ if ( ! class_exists( 'Kirki_Controls_Generic_Control' ) ) {
38
  <# if ( 'textarea' == data.choices['element'] ) { #>
39
  <textarea {{{ data.link }}} <# for ( key in data.choices ) { #> {{ key }}="{{ data.choices[ key ] }}"<# } #>>{{ data.value }}</textarea>
40
  <# } else { #>
41
- <# var element = ( data.choices['element'] ) ? data.choices['element'] : 'input'; #>
42
- <{{ element }} value="{{ data.value }}" {{{ data.link }}} <# for ( key in data.choices ) { #> {{ key }}="{{ data.choices[ key ] }}"<# } #> />
 
 
 
 
 
 
 
 
 
 
43
  <# } #>
44
  </div>
45
  </label>
46
  <?php
47
  }
48
-
49
  }
50
  }
1
  <?php
2
  /**
3
+ * Customizer Control: kirki-generic.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 2.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Generic_Control' ) ) {
18
+
19
+ /**
20
+ * A generic and pretty abstract control.
21
+ * Allows for great manipulation using the field's "choices" argumnent.
22
+ */
23
  class Kirki_Controls_Generic_Control extends Kirki_Customize_Control {
24
 
25
+ /**
26
+ * The control type.
27
+ *
28
+ * @access public
29
+ * @var string
30
+ */
31
  public $type = 'kirki-generic';
32
 
33
+ /**
34
+ * Enqueue control related scripts/styles.
35
+ *
36
+ * @access public
37
+ */
38
  public function enqueue() {
39
  wp_enqueue_script( 'kirki-generic' );
40
  }
41
 
42
+ /**
43
+ * An Underscore (JS) template for this control's content (but not its container).
44
+ *
45
+ * Class variables for this control class are available in the `data` JS object;
46
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
47
+ *
48
+ * @see WP_Customize_Control::print_template()
49
+ *
50
+ * @access protected
51
+ */
52
+ protected function content_template() {
53
+ ?>
54
  <# if ( data.tooltip ) { #>
55
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
56
  <# } #>
65
  <# if ( 'textarea' == data.choices['element'] ) { #>
66
  <textarea {{{ data.link }}} <# for ( key in data.choices ) { #> {{ key }}="{{ data.choices[ key ] }}"<# } #>>{{ data.value }}</textarea>
67
  <# } else { #>
68
+ <# var element = ( data.choices.element ) ? data.choices.element : 'input'; #>
69
+ <{{ element }}
70
+ value="{{ data.value }}"
71
+ {{{ data.link }}}
72
+ <# for ( key in data.choices ) { #>
73
+ {{ key }}="{{ data.choices[ key ] }}"
74
+ <# } #>
75
+ <# if ( data.choices.content ) { #>
76
+ >{{{ data.choices.content }}}</{{ element }}>
77
+ <# } else { #>
78
+ />
79
+ <# } #>
80
  <# } #>
81
  </div>
82
  </label>
83
  <?php
84
  }
 
85
  }
86
  }
includes/controls/class-kirki-controls-multicheck-control.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * editor Customizer Control.
4
  *
5
  * Multiple checkbox customize control class.
6
  * Props @ Justin Tadlock: http://justintadlock.com/archives/2015/05/26/multiple-checkbox-customizer-control
@@ -8,26 +8,51 @@
8
  * @package Kirki
9
  * @subpackage Controls
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
12
  * @since 1.0
13
  */
14
 
15
- // Exit if accessed directly
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Controls_MultiCheck_Control' ) ) {
21
 
 
 
 
22
  class Kirki_Controls_MultiCheck_Control extends Kirki_Customize_Control {
23
 
 
 
 
 
 
 
24
  public $type = 'multicheck';
25
 
 
 
 
 
 
26
  public function enqueue() {
27
  wp_enqueue_script( 'kirki-multicheck' );
28
  }
29
 
30
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  <# if ( ! data.choices ) { return; } #>
33
 
@@ -53,8 +78,7 @@ if ( ! class_exists( 'Kirki_Controls_MultiCheck_Control' ) ) {
53
  </li>
54
  <# } #>
55
  </ul>
56
- <?php }
57
-
58
  }
59
-
60
  }
1
  <?php
2
  /**
3
+ * Customizer Control: multicheck.
4
  *
5
  * Multiple checkbox customize control class.
6
  * Props @ Justin Tadlock: http://justintadlock.com/archives/2015/05/26/multiple-checkbox-customizer-control
8
  * @package Kirki
9
  * @subpackage Controls
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
12
  * @since 1.0
13
  */
14
 
15
+ // Exit if accessed directly.
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Controls_MultiCheck_Control' ) ) {
21
 
22
+ /**
23
+ * Adds a multicheck control.
24
+ */
25
  class Kirki_Controls_MultiCheck_Control extends Kirki_Customize_Control {
26
 
27
+ /**
28
+ * The control type.
29
+ *
30
+ * @access public
31
+ * @var string
32
+ */
33
  public $type = 'multicheck';
34
 
35
+ /**
36
+ * Enqueue control related scripts/styles.
37
+ *
38
+ * @access public
39
+ */
40
  public function enqueue() {
41
  wp_enqueue_script( 'kirki-multicheck' );
42
  }
43
 
44
+ /**
45
+ * An Underscore (JS) template for this control's content (but not its container).
46
+ *
47
+ * Class variables for this control class are available in the `data` JS object;
48
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
49
+ *
50
+ * @see WP_Customize_Control::print_template()
51
+ *
52
+ * @access protected
53
+ */
54
+ protected function content_template() {
55
+ ?>
56
 
57
  <# if ( ! data.choices ) { return; } #>
58
 
78
  </li>
79
  <# } #>
80
  </ul>
81
+ <?php
82
+ }
83
  }
 
84
  }
includes/controls/class-kirki-controls-multicolor-control.php CHANGED
@@ -1,49 +1,73 @@
1
  <?php
2
  /**
3
- * multicolor Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Multicolor_Control' ) ) {
18
 
 
 
 
19
  class Kirki_Controls_Multicolor_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'multicolor';
22
 
 
 
 
 
 
 
23
  public $palette = true;
24
 
25
- public $default = '#FFFFFF';
26
-
 
 
 
27
  public function to_json() {
28
  parent::to_json();
29
  $this->json['palette'] = $this->palette;
30
  }
31
 
 
 
 
 
 
32
  public function enqueue() {
33
  wp_enqueue_script( 'kirki-multicolor' );
34
  }
35
 
36
- protected function render() {
37
- $id = 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) );
38
- $class = 'customize-control customize-control-' . $this->type; ?>
39
- <li id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>">
40
- <?php $this->render_content(); ?>
41
- </li>
42
- <?php }
43
-
44
- public function render_content() {}
45
-
46
- public function content_template() { ?>
 
47
  <# if ( data.tooltip ) { #>
48
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
49
  <# } #>
@@ -67,7 +91,5 @@ if ( ! class_exists( 'Kirki_Controls_Multicolor_Control' ) ) {
67
  <input type="hidden" value="" {{{ data.link }}} />
68
  <?php
69
  }
70
-
71
  }
72
-
73
  }
1
  <?php
2
  /**
3
+ * Customizer Control: multicolor.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Multicolor_Control' ) ) {
18
 
19
+ /**
20
+ * Multicolor control.
21
+ */
22
  class Kirki_Controls_Multicolor_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'multicolor';
31
 
32
+ /**
33
+ * Color Palette.
34
+ *
35
+ * @access public
36
+ * @var bool
37
+ */
38
  public $palette = true;
39
 
40
+ /**
41
+ * Refresh the parameters passed to the JavaScript via JSON.
42
+ *
43
+ * @access public
44
+ */
45
  public function to_json() {
46
  parent::to_json();
47
  $this->json['palette'] = $this->palette;
48
  }
49
 
50
+ /**
51
+ * Enqueue control related scripts/styles.
52
+ *
53
+ * @access public
54
+ */
55
  public function enqueue() {
56
  wp_enqueue_script( 'kirki-multicolor' );
57
  }
58
 
59
+ /**
60
+ * An Underscore (JS) template for this control's content (but not its container).
61
+ *
62
+ * Class variables for this control class are available in the `data` JS object;
63
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
64
+ *
65
+ * @see WP_Customize_Control::print_template()
66
+ *
67
+ * @access protected
68
+ */
69
+ protected function content_template() {
70
+ ?>
71
  <# if ( data.tooltip ) { #>
72
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
73
  <# } #>
91
  <input type="hidden" value="" {{{ data.link }}} />
92
  <?php
93
  }
 
94
  }
 
95
  }
includes/controls/class-kirki-controls-number-control.php CHANGED
@@ -1,32 +1,55 @@
1
  <?php
2
  /**
3
- * number Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2015, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Number_Control' ) ) {
 
18
  /**
19
  * Create a simple number control
20
  */
21
  class Kirki_Controls_Number_Control extends Kirki_Customize_Control {
22
 
 
 
 
 
 
 
23
  public $type = 'number';
24
 
 
 
 
 
 
25
  public function enqueue() {
26
  wp_enqueue_script( 'kirki-number' );
27
  }
28
 
29
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
30
  <# if ( data.tooltip ) { #>
31
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
32
  <# } #>
@@ -43,6 +66,5 @@ if ( ! class_exists( 'Kirki_Controls_Number_Control' ) ) {
43
  </label>
44
  <?php
45
  }
46
-
47
  }
48
  }
1
  <?php
2
  /**
3
+ * Customizer Control: number.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2015, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Number_Control' ) ) {
18
+
19
  /**
20
  * Create a simple number control
21
  */
22
  class Kirki_Controls_Number_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'number';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-number' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( data.tooltip ) { #>
54
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
55
  <# } #>
66
  </label>
67
  <?php
68
  }
 
69
  }
70
  }
includes/controls/class-kirki-controls-palette-control.php CHANGED
@@ -1,29 +1,55 @@
1
  <?php
2
  /**
3
- * palette Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Palette_Control' ) ) {
 
 
 
 
18
  class Kirki_Controls_Palette_Control extends Kirki_Customize_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'palette';
21
 
 
 
 
 
 
22
  public function enqueue() {
23
  wp_enqueue_script( 'kirki-palette' );
24
  }
25
 
26
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
27
  <# if ( data.tooltip ) { #>
28
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
29
  <# } #>
1
  <?php
2
  /**
3
+ * Customizer Control: palette.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Palette_Control' ) ) {
18
+
19
+ /**
20
+ * Palette control (modified radio).
21
+ */
22
  class Kirki_Controls_Palette_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'palette';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-palette' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( data.tooltip ) { #>
54
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
55
  <# } #>
includes/controls/class-kirki-controls-preset-control.php CHANGED
@@ -1,32 +1,55 @@
1
  <?php
2
  /**
3
- * select2 Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Preset_Control' ) ) {
 
 
 
 
18
  class Kirki_Controls_Preset_Control extends Kirki_Customize_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'preset';
21
 
22
- public $multiple = 1;
23
-
 
 
 
24
  public function enqueue() {
25
  wp_enqueue_script( 'kirki-preset' );
26
  }
27
 
28
- protected function content_template() { ?>
29
-
 
 
 
 
 
 
 
 
 
 
30
  <# if ( ! data.choices ) return; #>
31
  <label>
32
  <# if ( data.label ) { #>
1
  <?php
2
  /**
3
+ * Customizer Control: preset.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Preset_Control' ) ) {
18
+
19
+ /**
20
+ * Preset control (modified select).
21
+ */
22
  class Kirki_Controls_Preset_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'preset';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-preset' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( ! data.choices ) return; #>
54
  <label>
55
  <# if ( data.label ) { #>
includes/controls/class-kirki-controls-radio-buttonset-control.php CHANGED
@@ -1,29 +1,55 @@
1
  <?php
2
  /**
3
- * radio-buttonset Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Radio_Buttonset_Control' ) ) {
 
 
 
 
18
  class Kirki_Controls_Radio_Buttonset_Control extends Kirki_Customize_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'radio-buttonset';
21
 
 
 
 
 
 
22
  public function enqueue() {
23
  wp_enqueue_script( 'kirki-radio-buttonset' );
24
  }
25
 
26
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
27
  <# if ( data.tooltip ) { #>
28
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
29
  <# } #>
@@ -33,7 +59,7 @@ if ( ! class_exists( 'Kirki_Controls_Radio_Buttonset_Control' ) ) {
33
  <# if ( data.description ) { #>
34
  <span class="description customize-control-description">{{{ data.description }}}</span>
35
  <# } #>
36
- <div id="input_<?php echo $this->id; ?>" class="buttonset">
37
  <# for ( key in data.choices ) { #>
38
  <input class="switch-input" type="radio" value="{{ key }}" name="_customize-radio-{{{ data.id }}}" id="{{ data.id }}{{ key }}" {{{ data.link }}}<# if ( key === data.value ) { #> checked="checked" <# } #>>
39
  <label class="switch-label switch-label-<# if ( key === data.value ) { #>on <# } else { #>off<# } #>" for="{{ data.id }}{{ key }}">
@@ -44,6 +70,5 @@ if ( ! class_exists( 'Kirki_Controls_Radio_Buttonset_Control' ) ) {
44
  </div>
45
  <?php
46
  }
47
-
48
  }
49
  }
1
  <?php
2
  /**
3
+ * Customizer Control: radio-buttonset.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Radio_Buttonset_Control' ) ) {
18
+
19
+ /**
20
+ * Radio Buttonset control (modified radio)
21
+ */
22
  class Kirki_Controls_Radio_Buttonset_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'radio-buttonset';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-radio-buttonset' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( data.tooltip ) { #>
54
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
55
  <# } #>
59
  <# if ( data.description ) { #>
60
  <span class="description customize-control-description">{{{ data.description }}}</span>
61
  <# } #>
62
+ <div id="input_{{ data.id }}" class="buttonset">
63
  <# for ( key in data.choices ) { #>
64
  <input class="switch-input" type="radio" value="{{ key }}" name="_customize-radio-{{{ data.id }}}" id="{{ data.id }}{{ key }}" {{{ data.link }}}<# if ( key === data.value ) { #> checked="checked" <# } #>>
65
  <label class="switch-label switch-label-<# if ( key === data.value ) { #>on <# } else { #>off<# } #>" for="{{ data.id }}{{ key }}">
70
  </div>
71
  <?php
72
  }
 
73
  }
74
  }
includes/controls/class-kirki-controls-radio-control.php CHANGED
@@ -1,29 +1,55 @@
1
  <?php
2
  /**
3
- * select2 Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Radio_Control' ) ) {
 
 
 
 
18
  class Kirki_Controls_Radio_Control extends Kirki_Customize_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'kirki-radio';
21
 
 
 
 
 
 
22
  public function enqueue() {
23
  wp_enqueue_script( 'kirki-radio' );
24
  }
25
 
26
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
27
  <# if ( ! data.choices ) { return; } #>
28
 
29
  <# if ( data.tooltip ) { #>
@@ -48,6 +74,5 @@ if ( ! class_exists( 'Kirki_Controls_Radio_Control' ) ) {
48
  <# } #>
49
  <?php
50
  }
51
-
52
  }
53
  }
1
  <?php
2
  /**
3
+ * Customizer Control: kirki-radio.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Radio_Control' ) ) {
18
+
19
+ /**
20
+ * Radio control
21
+ */
22
  class Kirki_Controls_Radio_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'kirki-radio';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-radio' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( ! data.choices ) { return; } #>
54
 
55
  <# if ( data.tooltip ) { #>
74
  <# } #>
75
  <?php
76
  }
 
77
  }
78
  }
includes/controls/class-kirki-controls-radio-image-control.php CHANGED
@@ -1,29 +1,55 @@
1
  <?php
2
  /**
3
- * radio-image Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Radio_Image_Control' ) ) {
 
 
 
 
18
  class Kirki_Controls_Radio_Image_Control extends Kirki_Customize_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'radio-image';
21
 
 
 
 
 
 
22
  public function enqueue() {
23
  wp_enqueue_script( 'kirki-radio-image' );
24
  }
25
 
26
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
27
  <# if ( data.tooltip ) { #>
28
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
29
  <# } #>
@@ -47,6 +73,5 @@ if ( ! class_exists( 'Kirki_Controls_Radio_Image_Control' ) ) {
47
  </div>
48
  <?php
49
  }
50
-
51
  }
52
  }
1
  <?php
2
  /**
3
+ * Customizer Control: radio-image.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Radio_Image_Control' ) ) {
18
+
19
+ /**
20
+ * Radio Image control (modified radio).
21
+ */
22
  class Kirki_Controls_Radio_Image_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'radio-image';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-radio-image' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( data.tooltip ) { #>
54
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
55
  <# } #>
73
  </div>
74
  <?php
75
  }
 
76
  }
77
  }
includes/controls/class-kirki-controls-repeater-control.php CHANGED
@@ -1,48 +1,112 @@
1
  <?php
2
  /**
3
- * Repeater Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Repeater_Control' ) ) {
18
 
 
 
 
19
  class Kirki_Controls_Repeater_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'repeater';
22
 
 
 
 
 
 
 
23
  public $fields = array();
24
 
25
- // will store a filtered version of value for advenced fields (like images..)
 
 
 
 
 
26
  protected $filtered_value = array();
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  public function __construct( $manager, $id, $args = array() ) {
29
- parent::__construct( $manager, $id, $args );
30
 
31
  $l10n = Kirki_l10n::get_strings();
32
- if ( empty( $this->button_label ) ) {
33
- $this->button_label = $l10n['add-new-row'];
34
- }
35
- if ( isset( $this->choices['labels'] ) ) {
36
- if ( isset( $this->choices['labels']['add-new-row'] ) ) {
37
- $this->button_label = $this->choices['labels']['add-new-row'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  }
40
 
41
  if ( empty( $args['fields'] ) || ! is_array( $args['fields'] ) ) {
42
  $args['fields'] = array();
43
  }
44
 
45
- //An array to store keys of fields that need to be filtered
46
  $image_fields_to_filter = array();
47
 
48
  foreach ( $args['fields'] as $key => $value ) {
@@ -55,48 +119,51 @@ if ( ! class_exists( 'Kirki_Controls_Repeater_Control' ) ) {
55
  }
56
  $args['fields'][ $key ]['id'] = $key;
57
 
58
- // we check if the filed is an image or a cropped_image
59
- if ( isset( $value['type'] ) && ( 'image' === $value['type'] || 'cropped_image' === $value["type"] ) ) {
60
- // we add it to the list of fields that need some extra filtering/processing
 
61
  $image_fields_to_filter[ $key ] = true;
62
  }
63
  }
64
 
65
  $this->fields = $args['fields'];
66
 
67
- // Now we are going to filter the fields
68
-
69
- // First we create a copy of the value that would be used otherwise
70
  $this->filtered_value = $this->value();
71
 
72
  if ( is_array( $this->filtered_value ) && ! empty( $this->filtered_value ) ) {
73
 
74
- // We iterate over the list of fields
75
  foreach ( $this->filtered_value as &$filtered_value_field ) {
76
 
77
  if ( is_array( $filtered_value_field ) && ! empty( $filtered_value_field ) ) {
78
 
79
- // We iterate over the list of properties for this field
80
  foreach ( $filtered_value_field as $key => &$value ) {
81
 
82
- // We check if this field was marked as requiring extra filtering (in this case image,cropped_images)
83
- if ( array_key_exists ( $key , $image_fields_to_filter ) ) {
84
 
85
- // What follows was made this way to preserve backward compatibility
86
- // The repeater control use to store the URL for images instead of the attachment ID
87
-
88
- // We check if the value look like an ID (otherwise it's probably a URL so don't filter it)
89
  if ( is_numeric( $value ) ) {
90
- // "sanitize" the value
 
91
  $attachment_id = (int) $value;
92
- //try to get the attachment_url
 
93
  $url = wp_get_attachment_url( $attachment_id );
94
- // if we got a URL
 
95
  if ( $url ) {
96
- //id is needed for form hidden value, URL is needed to display the image
97
- $value = array (
 
98
  'id' => $attachment_id,
99
- 'url' => $url
100
  );
101
  }
102
  }
@@ -107,39 +174,43 @@ if ( ! class_exists( 'Kirki_Controls_Repeater_Control' ) ) {
107
  }
108
  }
109
 
 
 
 
 
 
110
  public function to_json() {
111
  parent::to_json();
112
 
113
  $fields = $this->fields;
114
  $i18n = Kirki_l10n::get_strings();
115
- $default_image_button_labels = array(
116
- 'default' => $i18n['add-image'],
117
- 'remove' => $i18n['remove'],
118
- 'change' => $i18n['change-image'],
119
- 'placeholder' => $i18n['no-image-selected'],
120
- );
121
-
122
- foreach ( $fields as $key => $field ) {
123
- if ( 'image' != $field['type'] && 'cropped_image' != $field['type'] ) {
124
- continue;
125
- }
126
-
127
- $fields[ $key ]['buttonLabels'] = $default_image_button_labels;
128
- }
129
 
130
  $this->json['fields'] = $fields;
 
131
 
132
- // if filtered_value has been set and is not empty we use it instead of the actual value
133
  if ( is_array( $this->filtered_value ) && ! empty( $this->filtered_value ) ) {
134
  $this->json['value'] = $this->filtered_value;
135
  }
136
  }
137
 
 
 
 
 
 
138
  public function enqueue() {
139
  wp_enqueue_script( 'kirki-repeater' );
140
  }
141
 
142
- public function render_content() { ?>
 
 
 
 
 
 
 
143
  <?php $l10n = Kirki_l10n::get_strings(); ?>
144
  <?php if ( '' != $this->tooltip ) : ?>
145
  <a href="#" class="tooltip hint--left" data-hint="<?php echo esc_html( $this->tooltip ); ?>"><span class='dashicons dashicons-info'></span></a>
@@ -149,15 +220,15 @@ if ( ! class_exists( 'Kirki_Controls_Repeater_Control' ) ) {
149
  <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
150
  <?php endif; ?>
151
  <?php if ( ! empty( $this->description ) ) : ?>
152
- <span class="description customize-control-description"><?php echo $this->description; ?></span>
153
  <?php endif; ?>
154
- <input type="hidden" <?php $this->input_attrs(); ?> value="" <?php echo $this->get_link(); ?> />
155
  </label>
156
 
157
  <ul class="repeater-fields"></ul>
158
 
159
  <?php if ( isset( $this->choices['limit'] ) ) : ?>
160
- <p class="limit"><?php printf( $l10n['limit-rows'], $this->choices['limit'] ); ?></p>
161
  <?php endif; ?>
162
  <button class="button-secondary repeater-add"><?php echo esc_html( $this->button_label ); ?></button>
163
 
@@ -167,8 +238,15 @@ if ( ! class_exists( 'Kirki_Controls_Repeater_Control' ) ) {
167
 
168
  }
169
 
 
 
 
 
 
 
170
  public function repeater_js_template() {
171
  ?>
 
172
  <script type="text/html" class="customize-control-repeater-content">
173
  <# var field; var index = data['index']; #>
174
 
@@ -176,160 +254,158 @@ if ( ! class_exists( 'Kirki_Controls_Repeater_Control' ) ) {
176
  <li class="repeater-row minimized" data-row="{{{ index }}}">
177
 
178
  <div class="repeater-row-header">
179
- <span class="repeater-row-number"></span>
180
- <span class="repeater-row-remove"><i class="dashicons dashicons-no-alt repeater-remove"></i></span>
181
- <span class="repeater-row-minimize"><i class="dashicons dashicons-arrow-up repeater-minimize"></i></span>
182
- <span class="repeater-row-move"><i class="dashicons dashicons-sort repeater-move"></i></span>
183
  </div>
 
 
 
 
 
184
 
185
- <# for ( i in data ) { #>
186
- <# if ( ! data.hasOwnProperty( i ) ) continue; #>
187
- <# field = data[i]; #>
188
- <# if ( ! field.type ) continue; #>
189
 
190
- <div class="repeater-field repeater-field-{{{ field.type }}}">
191
 
192
- <# if ( field.type === 'text' || field.type === 'url' || field.type === 'email' || field.type === 'tel' || field.type === 'date' ) { #>
193
-
194
- <label>
195
- <# if ( field.label ) { #>
196
- <span class="customize-control-title">{{ field.label }}</span>
197
- <# } #>
198
- <# if ( field.description ) { #>
199
- <span class="description customize-control-description">{{ field.description }}</span>
200
- <# } #>
201
- <input type="{{field.type}}" name="" value="{{{ field.default }}}" data-field="{{{ field.id }}}">
202
- </label>
203
 
204
  <# } else if ( field.type === 'hidden' ) { #>
205
 
206
  <input type="hidden" data-field="{{{ field.id }}}" <# if ( field.default ) { #> value="{{{ field.default }}}" <# } #> />
207
 
208
- <# } else if ( field.type === 'checkbox' ) { #>
209
-
210
- <label>
211
- <input type="checkbox" value="true" data-field="{{{ field.id }}}" <# if ( field.default ) { #> checked="checked" <# } #> />
212
- <# if ( field.description ) { #>
213
- {{ field.description }}
214
- <# } #>
215
- </label>
216
-
217
- <# } else if ( field.type === 'select' ) { #>
218
 
219
- <label>
220
- <# if ( field.label ) { #>
221
- <span class="customize-control-title">{{ field.label }}</span>
222
- <# } #>
223
- <# if ( field.description ) { #>
224
- <span class="description customize-control-description">{{ field.description }}</span>
225
- <# } #>
226
- <select data-field="{{{ field.id }}}">
227
- <# for ( i in field.choices ) { #>
228
- <# if ( field.choices.hasOwnProperty( i ) ) { #>
229
- <option value="{{{ i }}}" <# if ( field.default == i ) { #> selected="selected" <# } #>>{{ field.choices[i] }}</option>
230
- <# } #>
231
  <# } #>
232
- </select>
233
- </label>
234
-
235
- <# } else if ( field.type === 'radio' ) { #>
236
 
237
- <label>
238
- <# if ( field.label ) { #>
239
- <span class="customize-control-title">{{ field.label }}</span>
240
- <# } #>
241
- <# if ( field.description ) { #>
242
- <span class="description customize-control-description">{{ field.description }}</span>
243
- <# } #>
244
 
245
- <# for ( i in field.choices ) { #>
246
- <# if ( field.choices.hasOwnProperty( i ) ) { #>
247
- <label>
248
- <input type="radio" name="{{{ field.id }}}" data-field="{{{ field.id }}}" value="{{{ i }}}" <# if ( field.default == i ) { #> checked="checked" <# } #>> {{ field.choices[i] }} <br/>
249
- </label>
250
  <# } #>
251
- <# } #>
252
- </label>
 
 
 
 
 
 
 
 
 
253
 
254
- <# } else if ( field.type == 'radio-image' ) { #>
255
 
256
- <label>
257
- <# if ( field.label ) { #>
258
- <span class="customize-control-title">{{ field.label }}</span>
259
- <# } #>
260
- <# if ( field.description ) { #>
261
- <span class="description customize-control-description">{{ field.description }}</span>
262
- <# } #>
263
 
264
- <# for ( i in field.choices ) { #>
265
- <# if ( field.choices.hasOwnProperty( i ) ) { #>
266
- <input type="radio" id="{{{ field.id }}}_{{ index }}_{{{ i }}}" name="{{{ field.id }}}{{ index }}" data-field="{{{ field.id }}}" value="{{{ i }}}" <# if ( field.default == i ) { #> checked="checked" <# } #>>
267
- <label for="{{{ field.id }}}_{{ index }}_{{{ i }}}">
268
- <img src="{{ field.choices[i] }}">
269
  </label>
270
- </input>
271
  <# } #>
272
- <# } #>
273
- </label>
274
 
275
- <# } else if ( field.type == 'textarea' ) { #>
276
 
277
- <# if ( field.label ) { #>
278
- <span class="customize-control-title">{{ field.label }}</span>
279
- <# } #>
280
- <# if ( field.description ) { #>
281
- <span class="description customize-control-description">{{ field.description }}</span>
282
- <# } #>
283
- <textarea rows="5" data-field="{{{ field.id }}}">{{ field.default }}</textarea>
284
 
285
- <# } else if ( field.type === 'image' || field.type === 'cropped_image' ) { #>
 
 
 
 
 
 
 
 
 
 
 
286
 
287
- <label>
288
  <# if ( field.label ) { #>
289
  <span class="customize-control-title">{{ field.label }}</span>
290
  <# } #>
291
  <# if ( field.description ) { #>
292
  <span class="description customize-control-description">{{ field.description }}</span>
293
  <# } #>
294
- </label>
295
 
296
- <figure class="kirki-image-attachment" data-placeholder="{{ field.buttonLabels.placeholder }}" >
297
- <# if ( field.default ) { #>
298
- <# if ( field.default.url ) { #>
299
- <img src="{{{ field.default.url }}}">
300
- <# } else { #>
301
- <img src="{{{ field.default }}}">
302
  <# } #>
303
- <# } else { #>
304
- {{ field.buttonLabels.placeholder }}
305
- <# } #>
306
- </figure>
307
 
308
- <div class="actions">
309
- <button type="button" class="button remove-button<# if ( ! field.default ) { #> hidden<# } #>">{{ field.buttonLabels.remove }}</button>
310
- <button type="button" class="button upload-button" data-label="{{{ field.buttonLabels.default }}}" data-alt-label="{{{ field.buttonLabels.change }}}" >
311
  <# if ( field.default ) { #>
312
- {{ field.buttonLabels.change }}
 
 
 
 
313
  <# } else { #>
314
- {{ field.buttonLabels.default }}
315
  <# } #>
316
- </button>
317
- <# if ( field.default.id ) { #>
318
- <input type="hidden" class="hidden-field" value="{{{ field.default.id }}}" data-field="{{{ field.id }}}" >
319
- <# } else { #>
320
- <input type="hidden" class="hidden-field" value="{{{ field.default }}}" data-field="{{{ field.id }}}" >
321
- <# } #>
322
- </div>
 
 
 
 
 
 
 
 
 
 
323
 
324
- <# } #>
325
 
326
- </div>
327
- <# } #>
 
 
328
  </li>
329
  </script>
330
  <?php
331
  }
332
-
333
  }
334
-
335
  }
1
  <?php
2
  /**
3
+ * Customizer Control: repeater.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Repeater_Control' ) ) {
18
 
19
+ /**
20
+ * Repeater control
21
+ */
22
  class Kirki_Controls_Repeater_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'repeater';
31
 
32
+ /**
33
+ * The fields that each container row will contain.
34
+ *
35
+ * @access public
36
+ * @var array
37
+ */
38
  public $fields = array();
39
 
40
+ /**
41
+ * Will store a filtered version of value for advenced fields (like images).
42
+ *
43
+ * @access protected
44
+ * @var array
45
+ */
46
  protected $filtered_value = array();
47
 
48
+ /**
49
+ * The row label
50
+ *
51
+ * @access public
52
+ * @var array
53
+ */
54
+ public $row_label = array();
55
+
56
+ /**
57
+ * Constructor.
58
+ * Supplied `$args` override class property defaults.
59
+ * If `$args['settings']` is not defined, use the $id as the setting ID.
60
+ *
61
+ * @param WP_Customize_Manager $manager Customizer bootstrap instance.
62
+ * @param string $id Control ID.
63
+ * @param array $args {@see WP_Customize_Control::__construct}.
64
+ */
65
  public function __construct( $manager, $id, $args = array() ) {
 
66
 
67
  $l10n = Kirki_l10n::get_strings();
68
+
69
+ parent::__construct( $manager, $id, $args );
70
+
71
+ // Set up defaults for row labels.
72
+ $this->row_label = array(
73
+ 'type' => 'text',
74
+ 'value' => $l10n['row'],
75
+ 'field' => false,
76
+ );
77
+
78
+ // Validating args for row labels.
79
+ if ( isset( $args['row_label'] ) && is_array( $args['row_label'] ) && ! empty( $args['row_label'] ) ) {
80
+
81
+ // Validating row label type.
82
+ if ( isset( $args['row_label']['type'] ) && ( 'text' === $args['row_label']['type'] || 'field' === $args['row_label']['type'] ) ) {
83
+ $this->row_label['type'] = $args['row_label']['type'];
84
+ }
85
+
86
+ // Validating row label type.
87
+ if ( isset( $args['row_label']['value'] ) && ! empty( $args['row_label']['value'] ) ) {
88
+ $this->row_label['value'] = esc_attr( $args['row_label']['value'] );
89
  }
90
+
91
+ // Validating row label field.
92
+ if ( isset( $args['row_label']['field'] ) && ! empty( $args['row_label']['field'] ) && isset( $args['fields'][ esc_attr( $args['row_label']['field'] ) ] ) ) {
93
+ $this->row_label['field'] = esc_attr( $args['row_label']['field'] );
94
+ } else {
95
+
96
+ // If from field is not set correctly, making sure standard is set as the type.
97
+ $this->row_label['type'] = 'text';
98
+ }
99
+ }
100
+
101
+ if ( empty( $this->button_label ) ) {
102
+ $this->button_label = $l10n['add-new'].' '.$this->row_label['value'];
103
  }
104
 
105
  if ( empty( $args['fields'] ) || ! is_array( $args['fields'] ) ) {
106
  $args['fields'] = array();
107
  }
108
 
109
+ // An array to store keys of fields that need to be filtered.
110
  $image_fields_to_filter = array();
111
 
112
  foreach ( $args['fields'] as $key => $value ) {
119
  }
120
  $args['fields'][ $key ]['id'] = $key;
121
 
122
+ // We check if the filed is an image or a cropped_image.
123
+ if ( isset( $value['type'] ) && ( 'image' === $value['type'] || 'cropped_image' === $value['type'] ) ) {
124
+
125
+ // We add it to the list of fields that need some extra filtering/processing.
126
  $image_fields_to_filter[ $key ] = true;
127
  }
128
  }
129
 
130
  $this->fields = $args['fields'];
131
 
132
+ // Now we are going to filter the fields.
133
+ // First we create a copy of the value that would be used otherwise.
 
134
  $this->filtered_value = $this->value();
135
 
136
  if ( is_array( $this->filtered_value ) && ! empty( $this->filtered_value ) ) {
137
 
138
+ // We iterate over the list of fields.
139
  foreach ( $this->filtered_value as &$filtered_value_field ) {
140
 
141
  if ( is_array( $filtered_value_field ) && ! empty( $filtered_value_field ) ) {
142
 
143
+ // We iterate over the list of properties for this field.
144
  foreach ( $filtered_value_field as $key => &$value ) {
145
 
146
+ // We check if this field was marked as requiring extra filtering (in this case image, cropped_images).
147
+ if ( array_key_exists( $key, $image_fields_to_filter ) ) {
148
 
149
+ // What follows was made this way to preserve backward compatibility.
150
+ // The repeater control use to store the URL for images instead of the attachment ID.
151
+ // We check if the value look like an ID (otherwise it's probably a URL so don't filter it).
 
152
  if ( is_numeric( $value ) ) {
153
+
154
+ // "sanitize" the value.
155
  $attachment_id = (int) $value;
156
+
157
+ // Try to get the attachment_url.
158
  $url = wp_get_attachment_url( $attachment_id );
159
+
160
+ // If we got a URL.
161
  if ( $url ) {
162
+
163
+ // 'id' is needed for form hidden value, URL is needed to display the image.
164
+ $value = array(
165
  'id' => $attachment_id,
166
+ 'url' => $url,
167
  );
168
  }
169
  }
174
  }
175
  }
176
 
177
+ /**
178
+ * Refresh the parameters passed to the JavaScript via JSON.
179
+ *
180
+ * @access public
181
+ */
182
  public function to_json() {
183
  parent::to_json();
184
 
185
  $fields = $this->fields;
186
  $i18n = Kirki_l10n::get_strings();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
 
188
  $this->json['fields'] = $fields;
189
+ $this->json['row_label'] = $this->row_label;
190
 
191
+ // If filtered_value has been set and is not empty we use it instead of the actual value.
192
  if ( is_array( $this->filtered_value ) && ! empty( $this->filtered_value ) ) {
193
  $this->json['value'] = $this->filtered_value;
194
  }
195
  }
196
 
197
+ /**
198
+ * Enqueue control related scripts/styles.
199
+ *
200
+ * @access public
201
+ */
202
  public function enqueue() {
203
  wp_enqueue_script( 'kirki-repeater' );
204
  }
205
 
206
+ /**
207
+ * Render the control's content.
208
+ * Allows the content to be overriden without having to rewrite the wrapper in $this->render().
209
+ *
210
+ * @access protected
211
+ */
212
+ protected function render_content() {
213
+ ?>
214
  <?php $l10n = Kirki_l10n::get_strings(); ?>
215
  <?php if ( '' != $this->tooltip ) : ?>
216
  <a href="#" class="tooltip hint--left" data-hint="<?php echo esc_html( $this->tooltip ); ?>"><span class='dashicons dashicons-info'></span></a>
220
  <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
221
  <?php endif; ?>
222
  <?php if ( ! empty( $this->description ) ) : ?>
223
+ <span class="description customize-control-description"><?php echo wp_kses_post( $this->description ); ?></span>
224
  <?php endif; ?>
225
+ <input type="hidden" <?php $this->input_attrs(); ?> value="" <?php echo wp_kses_post( $this->get_link() ); ?> />
226
  </label>
227
 
228
  <ul class="repeater-fields"></ul>
229
 
230
  <?php if ( isset( $this->choices['limit'] ) ) : ?>
231
+ <p class="limit"><?php printf( esc_html( $l10n['limit-rows'] ), esc_html( $this->choices['limit'] ) ); ?></p>
232
  <?php endif; ?>
233
  <button class="button-secondary repeater-add"><?php echo esc_html( $this->button_label ); ?></button>
234
 
238
 
239
  }
240
 
241
+ /**
242
+ * An Underscore (JS) template for this control's content (but not its container).
243
+ * Class variables for this control class are available in the `data` JS object.
244
+ *
245
+ * @access public
246
+ */
247
  public function repeater_js_template() {
248
  ?>
249
+ <?php $l10n = Kirki_l10n::get_strings(); ?>
250
  <script type="text/html" class="customize-control-repeater-content">
251
  <# var field; var index = data['index']; #>
252
 
254
  <li class="repeater-row minimized" data-row="{{{ index }}}">
255
 
256
  <div class="repeater-row-header">
257
+ <span class="repeater-row-label"></span>
258
+ <i class="dashicons dashicons-arrow-down repeater-minimize"></i>
 
 
259
  </div>
260
+ <div class="repeater-row-content">
261
+ <# for ( i in data ) { #>
262
+ <# if ( ! data.hasOwnProperty( i ) ) continue; #>
263
+ <# field = data[i]; #>
264
+ <# if ( ! field.type ) continue; #>
265
 
266
+ <div class="repeater-field repeater-field-{{{ field.type }}}">
 
 
 
267
 
268
+ <# if ( field.type === 'text' || field.type === 'url' || field.type === 'email' || field.type === 'tel' || field.type === 'date' ) { #>
269
 
270
+ <label>
271
+ <# if ( field.label ) { #>
272
+ <span class="customize-control-title">{{ field.label }}</span>
273
+ <# } #>
274
+ <# if ( field.description ) { #>
275
+ <span class="description customize-control-description">{{ field.description }}</span>
276
+ <# } #>
277
+ <input type="{{field.type}}" name="" value="{{{ field.default }}}" data-field="{{{ field.id }}}">
278
+ </label>
 
 
279
 
280
  <# } else if ( field.type === 'hidden' ) { #>
281
 
282
  <input type="hidden" data-field="{{{ field.id }}}" <# if ( field.default ) { #> value="{{{ field.default }}}" <# } #> />
283
 
284
+ <# } else if ( field.type === 'checkbox' ) { #>
 
 
 
 
 
 
 
 
 
285
 
286
+ <label>
287
+ <input type="checkbox" value="true" data-field="{{{ field.id }}}" <# if ( field.default ) { #> checked="checked" <# } #> />
288
+ <# if ( field.description ) { #>
289
+ {{ field.description }}
 
 
 
 
 
 
 
 
290
  <# } #>
291
+ </label>
 
 
 
292
 
293
+ <# } else if ( field.type === 'select' ) { #>
 
 
 
 
 
 
294
 
295
+ <label>
296
+ <# if ( field.label ) { #>
297
+ <span class="customize-control-title">{{ field.label }}</span>
 
 
298
  <# } #>
299
+ <# if ( field.description ) { #>
300
+ <span class="description customize-control-description">{{ field.description }}</span>
301
+ <# } #>
302
+ <select data-field="{{{ field.id }}}">
303
+ <# for ( i in field.choices ) { #>
304
+ <# if ( field.choices.hasOwnProperty( i ) ) { #>
305
+ <option value="{{{ i }}}" <# if ( field.default == i ) { #> selected="selected" <# } #>>{{ field.choices[i] }}</option>
306
+ <# } #>
307
+ <# } #>
308
+ </select>
309
+ </label>
310
 
311
+ <# } else if ( field.type === 'radio' ) { #>
312
 
313
+ <label>
314
+ <# if ( field.label ) { #>
315
+ <span class="customize-control-title">{{ field.label }}</span>
316
+ <# } #>
317
+ <# if ( field.description ) { #>
318
+ <span class="description customize-control-description">{{ field.description }}</span>
319
+ <# } #>
320
 
321
+ <# for ( i in field.choices ) { #>
322
+ <# if ( field.choices.hasOwnProperty( i ) ) { #>
323
+ <label>
324
+ <input type="radio" name="{{{ field.id }}}" data-field="{{{ field.id }}}" value="{{{ i }}}" <# if ( field.default == i ) { #> checked="checked" <# } #>> {{ field.choices[i] }} <br/>
 
325
  </label>
326
+ <# } #>
327
  <# } #>
328
+ </label>
 
329
 
330
+ <# } else if ( field.type == 'radio-image' ) { #>
331
 
332
+ <label>
333
+ <# if ( field.label ) { #>
334
+ <span class="customize-control-title">{{ field.label }}</span>
335
+ <# } #>
336
+ <# if ( field.description ) { #>
337
+ <span class="description customize-control-description">{{ field.description }}</span>
338
+ <# } #>
339
 
340
+ <# for ( i in field.choices ) { #>
341
+ <# if ( field.choices.hasOwnProperty( i ) ) { #>
342
+ <input type="radio" id="{{{ field.id }}}_{{ index }}_{{{ i }}}" name="{{{ field.id }}}{{ index }}" data-field="{{{ field.id }}}" value="{{{ i }}}" <# if ( field.default == i ) { #> checked="checked" <# } #>>
343
+ <label for="{{{ field.id }}}_{{ index }}_{{{ i }}}">
344
+ <img src="{{ field.choices[i] }}">
345
+ </label>
346
+ </input>
347
+ <# } #>
348
+ <# } #>
349
+ </label>
350
+
351
+ <# } else if ( field.type == 'textarea' ) { #>
352
 
 
353
  <# if ( field.label ) { #>
354
  <span class="customize-control-title">{{ field.label }}</span>
355
  <# } #>
356
  <# if ( field.description ) { #>
357
  <span class="description customize-control-description">{{ field.description }}</span>
358
  <# } #>
359
+ <textarea rows="5" data-field="{{{ field.id }}}">{{ field.default }}</textarea>
360
 
361
+ <# } else if ( field.type === 'image' || field.type === 'cropped_image' ) { #>
362
+
363
+ <label>
364
+ <# if ( field.label ) { #>
365
+ <span class="customize-control-title">{{ field.label }}</span>
 
366
  <# } #>
367
+ <# if ( field.description ) { #>
368
+ <span class="description customize-control-description">{{ field.description }}</span>
369
+ <# } #>
370
+ </label>
371
 
372
+ <figure class="kirki-image-attachment" data-placeholder="<?php esc_attr_e( $l10n['no-image-selected'] ); ?>" >
 
 
373
  <# if ( field.default ) { #>
374
+ <# if ( field.default.url ) { #>
375
+ <img src="{{{ field.default.url }}}">
376
+ <# } else { #>
377
+ <img src="{{{ field.default }}}">
378
+ <# } #>
379
  <# } else { #>
380
+ <?php esc_attr_e( $l10n['no-image-selected'] ); ?>
381
  <# } #>
382
+ </figure>
383
+
384
+ <div class="actions">
385
+ <button type="button" class="button remove-button<# if ( ! field.default ) { #> hidden<# } #>"><?php esc_attr_e( $l10n['remove'] ); ?></button>
386
+ <button type="button" class="button upload-button" data-label="<?php esc_attr_e( $l10n['add-image'] ); ?>" data-alt-label="<?php esc_attr_e( $l10n['change-image'] ); ?>" >
387
+ <# if ( field.default ) { #>
388
+ <?php esc_attr_e( $l10n['change-image'] ); ?>
389
+ <# } else { #>
390
+ <?php esc_attr_e( $l10n['add-image'] ); ?>
391
+ <# } #>
392
+ </button>
393
+ <# if ( field.default.id ) { #>
394
+ <input type="hidden" class="hidden-field" value="{{{ field.default.id }}}" data-field="{{{ field.id }}}" >
395
+ <# } else { #>
396
+ <input type="hidden" class="hidden-field" value="{{{ field.default }}}" data-field="{{{ field.id }}}" >
397
+ <# } #>
398
+ </div>
399
 
400
+ <# } #>
401
 
402
+ </div>
403
+ <# } #>
404
+ <button type="button" class="button-link repeater-row-remove"><?php esc_attr_e( $l10n['remove'] ); ?></button>
405
+ </div>
406
  </li>
407
  </script>
408
  <?php
409
  }
 
410
  }
 
411
  }
includes/controls/class-kirki-controls-select-control.php CHANGED
@@ -1,38 +1,74 @@
1
  <?php
2
  /**
3
- * select2 Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Select_Control' ) ) {
18
 
 
 
 
19
  class Kirki_Controls_Select_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'kirki-select';
22
 
 
 
 
 
 
 
 
23
  public $multiple = 1;
24
 
 
 
 
 
 
25
  public function to_json() {
26
  parent::to_json();
27
  $this->json['multiple'] = $this->multiple;
28
  }
29
 
 
 
 
 
 
30
  public function enqueue() {
31
  wp_enqueue_script( 'kirki-select' );
32
  }
33
 
34
- protected function content_template() { ?>
35
-
 
 
 
 
 
 
 
 
 
 
36
  <# if ( ! data.choices ) return; #>
37
  <# if ( data.tooltip ) { #>
38
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
@@ -64,7 +100,5 @@ if ( ! class_exists( 'Kirki_Controls_Select_Control' ) ) {
64
  </label>
65
  <?php
66
  }
67
-
68
  }
69
-
70
  }
1
  <?php
2
  /**
3
+ * Customizer Control: kirki-select.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Select_Control' ) ) {
18
 
19
+ /**
20
+ * Select control.
21
+ */
22
  class Kirki_Controls_Select_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'kirki-select';
31
 
32
+ /**
33
+ * Maximum number of options the user will be able to select.
34
+ * Set to 1 for single-select.
35
+ *
36
+ * @access public
37
+ * @var int
38
+ */
39
  public $multiple = 1;
40
 
41
+ /**
42
+ * Refresh the parameters passed to the JavaScript via JSON.
43
+ *
44
+ * @access public
45
+ */
46
  public function to_json() {
47
  parent::to_json();
48
  $this->json['multiple'] = $this->multiple;
49
  }
50
 
51
+ /**
52
+ * Enqueue control related scripts/styles.
53
+ *
54
+ * @access public
55
+ */
56
  public function enqueue() {
57
  wp_enqueue_script( 'kirki-select' );
58
  }
59
 
60
+ /**
61
+ * An Underscore (JS) template for this control's content (but not its container).
62
+ *
63
+ * Class variables for this control class are available in the `data` JS object;
64
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
65
+ *
66
+ * @see WP_Customize_Control::print_template()
67
+ *
68
+ * @access protected
69
+ */
70
+ protected function content_template() {
71
+ ?>
72
  <# if ( ! data.choices ) return; #>
73
  <# if ( data.tooltip ) { #>
74
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
100
  </label>
101
  <?php
102
  }
 
103
  }
 
104
  }
includes/controls/class-kirki-controls-slider-control.php CHANGED
@@ -1,27 +1,41 @@
1
  <?php
2
  /**
3
- * slider Customizer Control.
4
  *
5
  * Creates a jQuery slider control.
6
  *
7
  * @package Kirki
8
  * @subpackage Controls
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
11
  * @since 1.0
12
  */
13
 
14
- // Exit if accessed directly
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Controls_Slider_Control' ) ) {
20
 
 
 
 
21
  class Kirki_Controls_Slider_Control extends Kirki_Customize_Control {
22
 
 
 
 
 
 
 
23
  public $type = 'slider';
24
 
 
 
 
 
 
25
  public function to_json() {
26
  parent::to_json();
27
  $this->json['choices']['min'] = ( isset( $this->choices['min'] ) ) ? $this->choices['min'] : '0';
@@ -29,11 +43,27 @@ if ( ! class_exists( 'Kirki_Controls_Slider_Control' ) ) {
29
  $this->json['choices']['step'] = ( isset( $this->choices['step'] ) ) ? $this->choices['step'] : '1';
30
  }
31
 
 
 
 
 
 
32
  public function enqueue() {
33
  wp_enqueue_script( 'kirki-slider' );
34
  }
35
 
36
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
37
  <# if ( data.tooltip ) { #>
38
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
39
  <# } #>
@@ -58,9 +88,6 @@ if ( ! class_exists( 'Kirki_Controls_Slider_Control' ) ) {
58
  </div>
59
  </label>
60
  <?php
61
-
62
  }
63
-
64
  }
65
-
66
  }
1
  <?php
2
  /**
3
+ * Customizer Control: slider.
4
  *
5
  * Creates a jQuery slider control.
6
  *
7
  * @package Kirki
8
  * @subpackage Controls
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
11
  * @since 1.0
12
  */
13
 
14
+ // Exit if accessed directly.
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Controls_Slider_Control' ) ) {
20
 
21
+ /**
22
+ * Slider control (range).
23
+ */
24
  class Kirki_Controls_Slider_Control extends Kirki_Customize_Control {
25
 
26
+ /**
27
+ * The control type.
28
+ *
29
+ * @access public
30
+ * @var string
31
+ */
32
  public $type = 'slider';
33
 
34
+ /**
35
+ * Refresh the parameters passed to the JavaScript via JSON.
36
+ *
37
+ * @access public
38
+ */
39
  public function to_json() {
40
  parent::to_json();
41
  $this->json['choices']['min'] = ( isset( $this->choices['min'] ) ) ? $this->choices['min'] : '0';
43
  $this->json['choices']['step'] = ( isset( $this->choices['step'] ) ) ? $this->choices['step'] : '1';
44
  }
45
 
46
+ /**
47
+ * Enqueue control related scripts/styles.
48
+ *
49
+ * @access public
50
+ */
51
  public function enqueue() {
52
  wp_enqueue_script( 'kirki-slider' );
53
  }
54
 
55
+ /**
56
+ * An Underscore (JS) template for this control's content (but not its container).
57
+ *
58
+ * Class variables for this control class are available in the `data` JS object;
59
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
60
+ *
61
+ * @see WP_Customize_Control::print_template()
62
+ *
63
+ * @access protected
64
+ */
65
+ protected function content_template() {
66
+ ?>
67
  <# if ( data.tooltip ) { #>
68
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
69
  <# } #>
88
  </div>
89
  </label>
90
  <?php
 
91
  }
 
92
  }
 
93
  }
includes/controls/class-kirki-controls-sortable-control.php CHANGED
@@ -1,46 +1,73 @@
1
  <?php
2
  /**
3
- * sortable Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Sortable_Control' ) ) {
18
 
 
 
 
19
  class Kirki_Controls_Sortable_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'sortable';
22
 
 
 
 
 
 
 
 
 
 
23
  public function __construct( $manager, $id, $args = array() ) {
24
  parent::__construct( $manager, $id, $args );
25
  add_filter( 'customize_sanitize_' . $id, array( $this, 'customize_sanitize' ) );
26
  }
27
 
28
  /**
29
- * Unserialize the setting before saving on DB
30
- *
31
- * @param $value Serialized settings
32
  *
33
- * @return Array
 
34
  */
35
  public function customize_sanitize( $value ) {
36
  $value = maybe_unserialize( $value );
37
  return $value;
38
  }
39
 
 
 
 
 
 
40
  public function enqueue() {
41
  wp_enqueue_script( 'kirki-sortable' );
42
  }
43
 
 
 
 
 
 
44
  public function to_json() {
45
  parent::to_json();
46
 
@@ -67,7 +94,18 @@ if ( ! class_exists( 'Kirki_Controls_Sortable_Control' ) ) {
67
 
68
  }
69
 
70
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
71
  <# if ( ! data.choicesLength ) return; #>
72
 
73
  <# if ( data.tooltip ) { #>
@@ -110,7 +148,5 @@ if ( ! class_exists( 'Kirki_Controls_Sortable_Control' ) ) {
110
 
111
  <?php
112
  }
113
-
114
  }
115
-
116
  }
1
  <?php
2
  /**
3
+ * Customizer Control: sortable.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Sortable_Control' ) ) {
18
 
19
+ /**
20
+ * Sortable control (uses checkboxes).
21
+ */
22
  class Kirki_Controls_Sortable_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'sortable';
31
 
32
+ /**
33
+ * Constructor.
34
+ * Supplied `$args` override class property defaults.
35
+ * If `$args['settings']` is not defined, use the $id as the setting ID.
36
+ *
37
+ * @param WP_Customize_Manager $manager Customizer bootstrap instance.
38
+ * @param string $id Control ID.
39
+ * @param array $args {@see WP_Customize_Control::__construct}.
40
+ */
41
  public function __construct( $manager, $id, $args = array() ) {
42
  parent::__construct( $manager, $id, $args );
43
  add_filter( 'customize_sanitize_' . $id, array( $this, 'customize_sanitize' ) );
44
  }
45
 
46
  /**
47
+ * Unserialize the setting before saving on DB.
 
 
48
  *
49
+ * @param string $value Serialized settings.
50
+ * @return array
51
  */
52
  public function customize_sanitize( $value ) {
53
  $value = maybe_unserialize( $value );
54
  return $value;
55
  }
56
 
57
+ /**
58
+ * Enqueue control related scripts/styles.
59
+ *
60
+ * @access public
61
+ */
62
  public function enqueue() {
63
  wp_enqueue_script( 'kirki-sortable' );
64
  }
65
 
66
+ /**
67
+ * Refresh the parameters passed to the JavaScript via JSON.
68
+ *
69
+ * @access public
70
+ */
71
  public function to_json() {
72
  parent::to_json();
73
 
94
 
95
  }
96
 
97
+ /**
98
+ * An Underscore (JS) template for this control's content (but not its container).
99
+ *
100
+ * Class variables for this control class are available in the `data` JS object;
101
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
102
+ *
103
+ * @see WP_Customize_Control::print_template()
104
+ *
105
+ * @access protected
106
+ */
107
+ protected function content_template() {
108
+ ?>
109
  <# if ( ! data.choicesLength ) return; #>
110
 
111
  <# if ( data.tooltip ) { #>
148
 
149
  <?php
150
  }
 
151
  }
 
152
  }
includes/controls/class-kirki-controls-spacing-control.php CHANGED
@@ -1,25 +1,40 @@
1
  <?php
2
  /**
3
- * spacing Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 1.1
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Spacing_Control' ) ) {
18
 
 
 
 
 
19
  class Kirki_Controls_Spacing_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'spacing';
22
 
 
 
 
 
 
23
  public function to_json() {
24
  parent::to_json();
25
  $this->json['choices'] = array();
@@ -40,11 +55,27 @@ if ( ! class_exists( 'Kirki_Controls_Spacing_Control' ) ) {
40
  }
41
  }
42
 
 
 
 
 
 
43
  public function enqueue() {
44
  wp_enqueue_script( 'kirki-spacing' );
45
  }
46
 
47
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
48
  <# if ( data.tooltip ) { #>
49
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
50
  <# } #>
@@ -71,7 +102,5 @@ if ( ! class_exists( 'Kirki_Controls_Spacing_Control' ) ) {
71
  </label>
72
  <?php
73
  }
74
-
75
  }
76
-
77
  }
1
  <?php
2
  /**
3
+ * Customizer Control: spacing.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.1
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Spacing_Control' ) ) {
18
 
19
+ /**
20
+ * Spacing control.
21
+ * multiple checkboxes with CSS units validation.
22
+ */
23
  class Kirki_Controls_Spacing_Control extends Kirki_Customize_Control {
24
 
25
+ /**
26
+ * The control type.
27
+ *
28
+ * @access public
29
+ * @var string
30
+ */
31
  public $type = 'spacing';
32
 
33
+ /**
34
+ * Refresh the parameters passed to the JavaScript via JSON.
35
+ *
36
+ * @access public
37
+ */
38
  public function to_json() {
39
  parent::to_json();
40
  $this->json['choices'] = array();
55
  }
56
  }
57
 
58
+ /**
59
+ * Enqueue control related scripts/styles.
60
+ *
61
+ * @access public
62
+ */
63
  public function enqueue() {
64
  wp_enqueue_script( 'kirki-spacing' );
65
  }
66
 
67
+ /**
68
+ * An Underscore (JS) template for this control's content (but not its container).
69
+ *
70
+ * Class variables for this control class are available in the `data` JS object;
71
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
72
+ *
73
+ * @see WP_Customize_Control::print_template()
74
+ *
75
+ * @access protected
76
+ */
77
+ protected function content_template() {
78
+ ?>
79
  <# if ( data.tooltip ) { #>
80
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
81
  <# } #>
102
  </label>
103
  <?php
104
  }
 
105
  }
 
106
  }
includes/controls/class-kirki-controls-switch-control.php CHANGED
@@ -1,25 +1,39 @@
1
  <?php
2
  /**
3
- * switch Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Switch_Control' ) ) {
18
 
 
 
 
19
  class Kirki_Controls_Switch_Control extends Kirki_Controls_Checkbox_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'switch';
22
 
 
 
 
 
 
23
  public function to_json() {
24
  parent::to_json();
25
  $i18n = Kirki_l10n::get_strings();
@@ -29,11 +43,27 @@ if ( ! class_exists( 'Kirki_Controls_Switch_Control' ) ) {
29
  $this->json['choices']['round'] = ( isset( $this->choices['round'] ) ) ? $this->choices['round'] : false;
30
  }
31
 
 
 
 
 
 
32
  public function enqueue() {
33
  wp_enqueue_script( 'kirki-switch' );
34
  }
35
 
36
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
37
  <# if ( data.tooltip ) { #>
38
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
39
  <# } #>
@@ -64,7 +94,5 @@ if ( ! class_exists( 'Kirki_Controls_Switch_Control' ) ) {
64
  </div>
65
  <?php
66
  }
67
-
68
  }
69
-
70
  }
1
  <?php
2
  /**
3
+ * Customizer Control: switch.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Switch_Control' ) ) {
18
 
19
+ /**
20
+ * Switch control (modified checkbox).
21
+ */
22
  class Kirki_Controls_Switch_Control extends Kirki_Controls_Checkbox_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'switch';
31
 
32
+ /**
33
+ * Refresh the parameters passed to the JavaScript via JSON.
34
+ *
35
+ * @access public
36
+ */
37
  public function to_json() {
38
  parent::to_json();
39
  $i18n = Kirki_l10n::get_strings();
43
  $this->json['choices']['round'] = ( isset( $this->choices['round'] ) ) ? $this->choices['round'] : false;
44
  }
45
 
46
+ /**
47
+ * Enqueue control related scripts/styles.
48
+ *
49
+ * @access public
50
+ */
51
  public function enqueue() {
52
  wp_enqueue_script( 'kirki-switch' );
53
  }
54
 
55
+ /**
56
+ * An Underscore (JS) template for this control's content (but not its container).
57
+ *
58
+ * Class variables for this control class are available in the `data` JS object;
59
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
60
+ *
61
+ * @see WP_Customize_Control::print_template()
62
+ *
63
+ * @access protected
64
+ */
65
+ protected function content_template() {
66
+ ?>
67
  <# if ( data.tooltip ) { #>
68
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
69
  <# } #>
94
  </div>
95
  <?php
96
  }
 
97
  }
 
98
  }
includes/controls/class-kirki-controls-toggle-control.php CHANGED
@@ -1,29 +1,55 @@
1
  <?php
2
  /**
3
- * toggle Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
  * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Toggle_Control' ) ) {
 
 
 
 
18
  class Kirki_Controls_Toggle_Control extends Kirki_Controls_Checkbox_Control {
19
 
 
 
 
 
 
 
20
  public $type = 'toggle';
21
 
 
 
 
 
 
22
  public function enqueue() {
23
  wp_enqueue_script( 'kirki-toggle' );
24
  }
25
 
26
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
 
 
27
  <# if ( data.tooltip ) { #>
28
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
29
  <# } #>
1
  <?php
2
  /**
3
+ * Customizer Control: toggle.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
  * @since 1.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Toggle_Control' ) ) {
18
+
19
+ /**
20
+ * Toggle control (modified checkbox).
21
+ */
22
  class Kirki_Controls_Toggle_Control extends Kirki_Controls_Checkbox_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'toggle';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-toggle' );
39
  }
40
 
41
+ /**
42
+ * An Underscore (JS) template for this control's content (but not its container).
43
+ *
44
+ * Class variables for this control class are available in the `data` JS object;
45
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
46
+ *
47
+ * @see WP_Customize_Control::print_template()
48
+ *
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
  <# if ( data.tooltip ) { #>
54
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
55
  <# } #>
includes/controls/class-kirki-controls-typography-control.php CHANGED
@@ -1,29 +1,48 @@
1
  <?php
2
  /**
3
- * typography Customizer Control.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 1.1
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Typography_Control' ) ) {
18
 
 
 
 
19
  class Kirki_Controls_Typography_Control extends Kirki_Customize_Control {
20
 
 
 
 
 
 
 
21
  public $type = 'typography';
22
 
 
 
 
 
 
23
  public function enqueue() {
24
  wp_enqueue_script( 'kirki-typography' );
25
  }
26
 
 
 
 
 
 
27
  public function to_json() {
28
  parent::to_json();
29
  $this->add_values_backwards_compatibility();
@@ -40,9 +59,18 @@ if ( ! class_exists( 'Kirki_Controls_Typography_Control' ) ) {
40
  $this->json['default'] = wp_parse_args( $this->json['default'], $defaults );
41
  }
42
 
43
- public function render_content() {}
44
-
45
- protected function content_template() { ?>
 
 
 
 
 
 
 
 
 
46
  <# if ( data.tooltip ) { #>
47
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
48
  <# } #>
@@ -64,7 +92,7 @@ if ( ! class_exists( 'Kirki_Controls_Typography_Control' ) ) {
64
  <h5>{{ data.l10n['font-family'] }}</h5>
65
  <select id="kirki-typography-font-family-{{{ data.id }}}" placeholder="{{ data.i18n['select-font-family'] }}"></select>
66
  </div>
67
- <div class="variant kirki-variant-wrapper">
68
  <h5>{{ data.l10n['variant'] }}</h5>
69
  <select class="variant" id="kirki-typography-variant-{{{ data.id }}}"></select>
70
  </div>
@@ -155,6 +183,13 @@ if ( ! class_exists( 'Kirki_Controls_Typography_Control' ) ) {
155
  <?php
156
  }
157
 
 
 
 
 
 
 
 
158
  protected function add_values_backwards_compatibility() {
159
  $value = $this->value();
160
  $old_values = array(
@@ -165,18 +200,18 @@ if ( ! class_exists( 'Kirki_Controls_Typography_Control' ) ) {
165
  'letter-spacing' => '',
166
  'color' => '',
167
  );
168
- // font-weight is now variant.
169
- // All values are the same with the exception of 400 (becomes regular)
 
170
  if ( '400' == $old_values['variant'] ) {
171
  $old_values['variant'] = 'regular';
172
  }
173
- // letter spacing was in px, now it requires units.
174
- if ( isset( $value['letter-spacing'] ) && $value['letter-spacing'] == intval( $value['letter-spacing'] ) ) {
 
175
  $value['letter-spacing'] .= 'px';
176
  }
177
  $this->json['value'] = wp_parse_args( $value, $old_values );
178
  }
179
-
180
  }
181
-
182
  }
1
  <?php
2
  /**
3
+ * Customizer Control: typography.
4
  *
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Controls_Typography_Control' ) ) {
18
 
19
+ /**
20
+ * Typography control.
21
+ */
22
  class Kirki_Controls_Typography_Control extends Kirki_Customize_Control {
23
 
24
+ /**
25
+ * The control type.
26
+ *
27
+ * @access public
28
+ * @var string
29
+ */
30
  public $type = 'typography';
31
 
32
+ /**
33
+ * Enqueue control related scripts/styles.
34
+ *
35
+ * @access public
36
+ */
37
  public function enqueue() {
38
  wp_enqueue_script( 'kirki-typography' );
39
  }
40
 
41
+ /**
42
+ * Refresh the parameters passed to the JavaScript via JSON.
43
+ *
44
+ * @access public
45
+ */
46
  public function to_json() {
47
  parent::to_json();
48
  $this->add_values_backwards_compatibility();
59
  $this->json['default'] = wp_parse_args( $this->json['default'], $defaults );
60
  }
61
 
62
+ /**
63
+ * An Underscore (JS) template for this control's content (but not its container).
64
+ *
65
+ * Class variables for this control class are available in the `data` JS object;
66
+ * export custom variables by overriding {@see Kirki_Customize_Control::to_json()}.
67
+ *
68
+ * @see WP_Customize_Control::print_template()
69
+ *
70
+ * @access protected
71
+ */
72
+ protected function content_template() {
73
+ ?>
74
  <# if ( data.tooltip ) { #>
75
  <a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
76
  <# } #>
92
  <h5>{{ data.l10n['font-family'] }}</h5>
93
  <select id="kirki-typography-font-family-{{{ data.id }}}" placeholder="{{ data.i18n['select-font-family'] }}"></select>
94
  </div>
95
+ <div class="variant hide-on-standard-fonts kirki-variant-wrapper">
96
  <h5>{{ data.l10n['variant'] }}</h5>
97
  <select class="variant" id="kirki-typography-variant-{{{ data.id }}}"></select>
98
  </div>
183
  <?php
184
  }
185
 
186
+ /**
187
+ * Adds backwards-compatibility for values.
188
+ * Converts font-weight to variant
189
+ * Adds units to letter-spacing
190
+ *
191
+ * @access protected
192
+ */
193
  protected function add_values_backwards_compatibility() {
194
  $value = $this->value();
195
  $old_values = array(
200
  'letter-spacing' => '',
201
  'color' => '',
202
  );
203
+
204
+ // Font-weight is now variant.
205
+ // All values are the same with the exception of 400 (becomes regular).
206
  if ( '400' == $old_values['variant'] ) {
207
  $old_values['variant'] = 'regular';
208
  }
209
+
210
+ // Letter spacing was in px, now it requires units.
211
+ if ( isset( $value['letter-spacing'] ) && is_numeric( $value['letter-spacing'] ) && $value['letter-spacing'] ) {
212
  $value['letter-spacing'] .= 'px';
213
  }
214
  $this->json['value'] = wp_parse_args( $value, $old_values );
215
  }
 
216
  }
 
217
  }
includes/deprecated.php CHANGED
@@ -7,11 +7,11 @@
7
  * @category Core
8
  * @author Aristeides Stathopoulos
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
11
  * @since 1.0
12
  */
13
 
14
- // Exit if accessed directly
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
@@ -56,9 +56,13 @@ if ( ! function_exists( 'kirki_get_brightness' ) ) {
56
 
57
  /**
58
  * Class was deprecated in 2.2.7
 
59
  * @see https://github.com/aristath/kirki/commit/101805fd689fa8828920b789347f13efc378b4a7
60
  */
61
  if ( ! class_exists( 'Kirki_Colourlovers' ) ) {
 
 
 
62
  class Kirki_Colourlovers {
63
  public static function get_palettes( $palettes_nr = 5 ) {
64
  return array();
7
  * @category Core
8
  * @author Aristeides Stathopoulos
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
11
  * @since 1.0
12
  */
13
 
14
+ // Exit if accessed directly.
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
56
 
57
  /**
58
  * Class was deprecated in 2.2.7
59
+ *
60
  * @see https://github.com/aristath/kirki/commit/101805fd689fa8828920b789347f13efc378b4a7
61
  */
62
  if ( ! class_exists( 'Kirki_Colourlovers' ) ) {
63
+ /**
64
+ * Deprecated.
65
+ */
66
  class Kirki_Colourlovers {
67
  public static function get_palettes( $palettes_nr = 5 ) {
68
  return array();
includes/dynamic-css.php CHANGED
@@ -1,18 +1,23 @@
1
  <?php
2
-
3
  /**
4
- * Do not allow directly accessing this file.
 
 
 
 
 
 
5
  */
 
 
6
  if ( ! class_exists( 'Kirki' ) ) {
7
  die( 'File can\'t be accessed directly' );
8
  }
9
- /**
10
- * Make sure we set the correct MIME type
11
- */
12
  header( 'Content-Type: text/css' );
13
- /**
14
- * Echo the styles
15
- */
16
  $configs = Kirki::$config;
17
  foreach ( $configs as $config_id => $args ) {
18
  if ( true === $args['disable_output'] ) {
@@ -20,5 +25,6 @@ foreach ( $configs as $config_id => $args ) {
20
  }
21
 
22
  $styles = Kirki_Styles_Frontend::loop_controls( $config_id );
23
- echo apply_filters( 'kirki/' . $config_id . '/dynamic_css', $styles );
 
24
  }
1
  <?php
 
2
  /**
3
+ * Generates & echo the styles when using the AJAx method.
4
+ *
5
+ * @package Kirki
6
+ * @category Core
7
+ * @author Aristeides Stathopoulos
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
  */
11
+
12
+ // Do not allow directly accessing this file.
13
  if ( ! class_exists( 'Kirki' ) ) {
14
  die( 'File can\'t be accessed directly' );
15
  }
16
+
17
+ // Make sure we set the correct MIME type.
 
18
  header( 'Content-Type: text/css' );
19
+
20
+ // Echo the styles.
 
21
  $configs = Kirki::$config;
22
  foreach ( $configs as $config_id => $args ) {
23
  if ( true === $args['disable_output'] ) {
25
  }
26
 
27
  $styles = Kirki_Styles_Frontend::loop_controls( $config_id );
28
+ $filtered_styles = apply_filters( 'kirki/' . $config_id . '/dynamic_css', $styles );
29
+ echo wp_kses_post( $filtered_styles );
30
  }
includes/field/class-kirki-field-checkbox.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Checkbox' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Checkbox extends Kirki_Field {
6
 
7
  /**
@@ -45,9 +57,6 @@ if ( ! class_exists( 'Kirki_Field_Checkbox' ) ) {
45
  if ( true === $this->default || 1 === $this->default ) {
46
  $this->default = '1';
47
  }
48
-
49
  }
50
-
51
  }
52
-
53
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Checkbox' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Checkbox extends Kirki_Field {
18
 
19
  /**
57
  if ( true === $this->default || 1 === $this->default ) {
58
  $this->default = '1';
59
  }
 
60
  }
 
61
  }
 
62
  }
includes/field/class-kirki-field-code.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Code' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Code extends Kirki_Field {
6
 
7
  /**
@@ -33,7 +45,5 @@ if ( ! class_exists( 'Kirki_Field_Code' ) ) {
33
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'unfiltered' );
34
 
35
  }
36
-
37
  }
38
-
39
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Code' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Code extends Kirki_Field {
18
 
19
  /**
45
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'unfiltered' );
46
 
47
  }
 
48
  }
 
49
  }
includes/field/class-kirki-field-color-alpha.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Color_Alpha' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Color_Alpha extends Kirki_Field {
6
 
7
  /**
@@ -44,7 +56,5 @@ if ( ! class_exists( 'Kirki_Field_Color_Alpha' ) ) {
44
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'color' );
45
 
46
  }
47
-
48
  }
49
-
50
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Color_Alpha' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Color_Alpha extends Kirki_Field {
18
 
19
  /**
56
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'color' );
57
 
58
  }
 
59
  }
 
60
  }
includes/field/class-kirki-field-color.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Color' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Color extends Kirki_Field_Color_Alpha {
6
 
7
  /**
@@ -19,9 +31,6 @@ if ( ! class_exists( 'Kirki_Field_Color' ) ) {
19
  if ( false !== strpos( $this->default, 'rgba' ) ) {
20
  $this->choices['alpha'] = true;
21
  }
22
-
23
  }
24
-
25
  }
26
-
27
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Color' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Color extends Kirki_Field_Color_Alpha {
18
 
19
  /**
31
  if ( false !== strpos( $this->default, 'rgba' ) ) {
32
  $this->choices['alpha'] = true;
33
  }
 
34
  }
 
35
  }
 
36
  }
includes/field/class-kirki-field-custom.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Custom' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Custom extends Kirki_Field {
6
 
7
  /**
@@ -32,7 +44,5 @@ if ( ! class_exists( 'Kirki_Field_Custom' ) ) {
32
  $this->sanitize_callback = '__return_true';
33
 
34
  }
35
-
36
  }
37
-
38
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Custom' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Custom extends Kirki_Field {
18
 
19
  /**
44
  $this->sanitize_callback = '__return_true';
45
 
46
  }
 
47
  }
 
48
  }
includes/field/class-kirki-field-dashicons.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Dashicons' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Dashicons extends Kirki_Field {
6
 
7
  /**
@@ -32,7 +44,5 @@ if ( ! class_exists( 'Kirki_Field_Dashicons' ) ) {
32
  $this->sanitize_callback = 'esc_attr';
33
 
34
  }
35
-
36
  }
37
-
38
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Dashicons' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Dashicons extends Kirki_Field {
18
 
19
  /**
44
  $this->sanitize_callback = 'esc_attr';
45
 
46
  }
 
47
  }
 
48
  }
includes/field/class-kirki-field-date.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Date' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Date extends Kirki_Field {
6
 
7
  /**
@@ -30,7 +42,5 @@ if ( ! class_exists( 'Kirki_Field_Date' ) ) {
30
  $this->sanitize_callback = 'esc_textarea';
31
 
32
  }
33
-
34
  }
35
-
36
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Date' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Date extends Kirki_Field {
18
 
19
  /**
42
  $this->sanitize_callback = 'esc_textarea';
43
 
44
  }
 
45
  }
 
46
  }
includes/field/class-kirki-field-dropdown-pages.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Dropdown_Pages' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Dropdown_Pages extends Kirki_Field {
6
 
7
  /**
@@ -30,7 +42,5 @@ if ( ! class_exists( 'Kirki_Field_Dropdown_Pages' ) ) {
30
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'dropdown_pages' );
31
 
32
  }
33
-
34
  }
35
-
36
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Dropdown_Pages' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Dropdown_Pages extends Kirki_Field {
18
 
19
  /**
42
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'dropdown_pages' );
43
 
44
  }
 
45
  }
 
46
  }
includes/field/class-kirki-field-editor.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Editor' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Editor extends Kirki_Field {
6
 
7
  /**
@@ -30,6 +42,5 @@ if ( ! class_exists( 'Kirki_Field_Editor' ) ) {
30
  $this->sanitize_callback = 'wp_kses_post';
31
 
32
  }
33
-
34
  }
35
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Editor' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Editor extends Kirki_Field {
18
 
19
  /**
42
  $this->sanitize_callback = 'wp_kses_post';
43
 
44
  }
 
45
  }
46
  }
includes/field/class-kirki-field-group-title.php CHANGED
@@ -1,4 +1,13 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Group_Title' ) ) {
4
 
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Group_Title' ) ) {
13
 
includes/field/class-kirki-field-image.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Image' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Image extends Kirki_Field_Upload {}
6
 
7
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Image' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Image extends Kirki_Field_Upload {}
18
 
19
  }
includes/field/class-kirki-field-kirki-generic.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Kirki_Generic' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Kirki_Generic extends Kirki_Field {
6
 
7
  /**
@@ -47,7 +59,5 @@ if ( ! class_exists( 'Kirki_Field_Kirki_Generic' ) ) {
47
  $this->sanitize_callback = 'wp_kses_post';
48
 
49
  }
50
-
51
  }
52
-
53
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Kirki_Generic' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Kirki_Generic extends Kirki_Field {
18
 
19
  /**
59
  $this->sanitize_callback = 'wp_kses_post';
60
 
61
  }
 
62
  }
 
63
  }
includes/field/class-kirki-field-multicheck.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Multicheck' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Multicheck extends Kirki_Field {
6
 
7
  /**
@@ -33,6 +45,8 @@ if ( ! class_exists( 'Kirki_Field_Multicheck' ) ) {
33
 
34
  /**
35
  * The sanitize method that will be used as a falback
 
 
36
  */
37
  public function sanitize( $value ) {
38
 
@@ -40,7 +54,5 @@ if ( ! class_exists( 'Kirki_Field_Multicheck' ) ) {
40
  return ( ! empty( $value ) ) ? array_map( 'sanitize_text_field', $value ) : array();
41
 
42
  }
43
-
44
  }
45
-
46
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Multicheck' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Multicheck extends Kirki_Field {
18
 
19
  /**
45
 
46
  /**
47
  * The sanitize method that will be used as a falback
48
+ *
49
+ * @param string|array $value The control's value.
50
  */
51
  public function sanitize( $value ) {
52
 
54
  return ( ! empty( $value ) ) ? array_map( 'sanitize_text_field', $value ) : array();
55
 
56
  }
 
57
  }
 
58
  }
includes/field/class-kirki-field-multicolor.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Color_Alpha' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Color_Alpha extends Kirki_Field {
6
 
7
  /**
@@ -22,15 +34,17 @@ if ( ! class_exists( 'Kirki_Field_Color_Alpha' ) ) {
22
  */
23
  protected function set_choices() {
24
 
25
- // Make sure choices are defined as an array
26
  if ( ! is_array( $this->choices ) ) {
27
  $this->choices = array();
28
  }
29
- // Properly format the 'alpha' choice as a boolean
 
30
  if ( ! isset( $this->choices['alpha'] ) ) {
31
  $this->choices['alpha'] = true;
32
  }
33
  $this->choices['alpha'] = (bool) $this->choices['alpha'];
 
34
  // Make sure we have more than 2 colors, and we're using an integer.
35
  if ( ! isset( $this->choices['colors'] ) ) {
36
  $this->choices['colors'] = 2;
@@ -62,29 +76,39 @@ if ( ! class_exists( 'Kirki_Field_Color_Alpha' ) ) {
62
  * @access protected
63
  */
64
  protected function set_default() {
65
- // make sure we've already processed the set_choices() method.
66
- // This way we know how many colors we're dealing with
 
67
  $this->set_choices();
68
- // Define a default array using #FFFFFF
 
69
  $defaults = array_fill( 0, $this->choices['colors'], '#FFFFFF' );
70
- // If we're using rgba, define default as rgba(255,255,255,0)
 
71
  if ( $this->choices['colors'] ) {
72
  $defaults = array_fill( 0, $this->choices['colors'], 'rgba(255,255,255,0)' );
73
  }
74
- // Make sure defaults are defined as an array
 
75
  if ( ! is_array( $this->default ) ) {
76
  $this->default = array();
77
  }
78
- // Merge our arrays
 
79
  $this->default = wp_parse_args( $this->default, $defaults );
 
80
  }
81
 
 
 
 
 
 
 
82
  public function sanitize( $value ) {
83
 
84
  return $value;
85
 
86
  }
87
-
88
  }
89
-
90
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Color_Alpha' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Color_Alpha extends Kirki_Field {
18
 
19
  /**
34
  */
35
  protected function set_choices() {
36
 
37
+ // Make sure choices are defined as an array.
38
  if ( ! is_array( $this->choices ) ) {
39
  $this->choices = array();
40
  }
41
+
42
+ // Properly format the 'alpha' choice as a boolean.
43
  if ( ! isset( $this->choices['alpha'] ) ) {
44
  $this->choices['alpha'] = true;
45
  }
46
  $this->choices['alpha'] = (bool) $this->choices['alpha'];
47
+
48
  // Make sure we have more than 2 colors, and we're using an integer.
49
  if ( ! isset( $this->choices['colors'] ) ) {
50
  $this->choices['colors'] = 2;
76
  * @access protected
77
  */
78
  protected function set_default() {
79
+
80
+ // Make sure we've already processed the set_choices() method.
81
+ // This way we know how many colors we're dealing with.
82
  $this->set_choices();
83
+
84
+ // Define a default array using #FFFFFF.
85
  $defaults = array_fill( 0, $this->choices['colors'], '#FFFFFF' );
86
+
87
+ // If we're using rgba, define default as rgba(255,255,255,0).
88
  if ( $this->choices['colors'] ) {
89
  $defaults = array_fill( 0, $this->choices['colors'], 'rgba(255,255,255,0)' );
90
  }
91
+
92
+ // Make sure defaults are defined as an array.
93
  if ( ! is_array( $this->default ) ) {
94
  $this->default = array();
95
  }
96
+
97
+ // Merge our arrays.
98
  $this->default = wp_parse_args( $this->default, $defaults );
99
+
100
  }
101
 
102
+ /**
103
+ * The method that will be used as a `sanitize_callback`.
104
+ *
105
+ * @param array $value The value to be sanitized.
106
+ * @return array The value.
107
+ */
108
  public function sanitize( $value ) {
109
 
110
  return $value;
111
 
112
  }
 
113
  }
 
114
  }
includes/field/class-kirki-field-number.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Number' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Number extends Kirki_Field {
6
 
7
  /**
@@ -30,7 +42,5 @@ if ( ! class_exists( 'Kirki_Field_Number' ) ) {
30
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'number' );
31
 
32
  }
33
-
34
  }
35
-
36
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Number' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Number extends Kirki_Field {
18
 
19
  /**
42
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'number' );
43
 
44
  }
 
45
  }
 
46
  }
includes/field/class-kirki-field-palette.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Palette' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Palette extends Kirki_Field_Radio {
6
 
7
  /**
@@ -14,7 +26,5 @@ if ( ! class_exists( 'Kirki_Field_Palette' ) ) {
14
  $this->type = 'palette';
15
 
16
  }
17
-
18
  }
19
-
20
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Palette' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Palette extends Kirki_Field_Radio {
18
 
19
  /**
26
  $this->type = 'palette';
27
 
28
  }
 
29
  }
 
30
  }
includes/field/class-kirki-field-preset.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Preset' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Preset extends Kirki_Field_Select {
6
 
7
  /**
@@ -25,7 +37,5 @@ if ( ! class_exists( 'Kirki_Field_Preset' ) ) {
25
  $this->multiple = '1';
26
 
27
  }
28
-
29
  }
30
-
31
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Preset' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Preset extends Kirki_Field_Select {
18
 
19
  /**
37
  $this->multiple = '1';
38
 
39
  }
 
40
  }
 
41
  }
includes/field/class-kirki-field-radio-buttonset.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Radio_Image' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Radio_Buttonset extends Kirki_Field_Radio {
6
 
7
  /**
@@ -14,7 +26,5 @@ if ( ! class_exists( 'Kirki_Field_Radio_Image' ) ) {
14
  $this->type = 'radio-buttonset';
15
 
16
  }
17
-
18
  }
19
-
20
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Radio_Image' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Radio_Buttonset extends Kirki_Field_Radio {
18
 
19
  /**
26
  $this->type = 'radio-buttonset';
27
 
28
  }
 
29
  }
 
30
  }
includes/field/class-kirki-field-radio-image.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Radio_Image' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Radio_Image extends Kirki_Field_Radio {
6
 
7
  /**
@@ -14,7 +26,5 @@ if ( ! class_exists( 'Kirki_Field_Radio_Image' ) ) {
14
  $this->type = 'radio-image';
15
 
16
  }
17
-
18
  }
19
-
20
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Radio_Image' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Radio_Image extends Kirki_Field_Radio {
18
 
19
  /**
26
  $this->type = 'radio-image';
27
 
28
  }
 
29
  }
 
30
  }
includes/field/class-kirki-field-radio.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Radio' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Radio extends Kirki_Field {
6
 
7
  /**
@@ -35,7 +47,5 @@ if ( ! class_exists( 'Kirki_Field_Radio' ) ) {
35
  $this->sanitize_callback = 'esc_attr';
36
 
37
  }
38
-
39
  }
40
-
41
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Radio' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Radio extends Kirki_Field {
18
 
19
  /**
47
  $this->sanitize_callback = 'esc_attr';
48
 
49
  }
 
50
  }
 
51
  }
includes/field/class-kirki-field-select.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Select' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Select extends Kirki_Field {
6
 
7
  /**
@@ -43,10 +55,11 @@ if ( ! class_exists( 'Kirki_Field_Select' ) ) {
43
  }
44
 
45
  /**
46
- * Sanitizes select control values
47
  *
48
  * @since 2.2.8
49
  * @access public
 
50
  * @return string|array
51
  */
52
  public function sanitize( $value ) {
@@ -60,7 +73,5 @@ if ( ! class_exists( 'Kirki_Field_Select' ) ) {
60
  return esc_attr( $value );
61
 
62
  }
63
-
64
  }
65
-
66
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Select' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Select extends Kirki_Field {
18
 
19
  /**
55
  }
56
 
57
  /**
58
+ * Sanitizes select control values.
59
  *
60
  * @since 2.2.8
61
  * @access public
62
+ * @param array $value The value.
63
  * @return string|array
64
  */
65
  public function sanitize( $value ) {
73
  return esc_attr( $value );
74
 
75
  }
 
76
  }
 
77
  }
includes/field/class-kirki-field-select2-multiple.php CHANGED
@@ -1,4 +1,13 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Select2_Multiple' ) ) {
4
 
@@ -19,7 +28,5 @@ if ( ! class_exists( 'Kirki_Field_Select2_Multiple' ) ) {
19
  $this->multiple = 999;
20
 
21
  }
22
-
23
  }
24
-
25
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Select2_Multiple' ) ) {
13
 
28
  $this->multiple = 999;
29
 
30
  }
 
31
  }
 
32
  }
includes/field/class-kirki-field-select2.php CHANGED
@@ -1,4 +1,13 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Select2' ) ) {
4
  /**
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Select2' ) ) {
13
  /**
includes/field/class-kirki-field-slider.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Slider' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Slider extends Kirki_Field_Number {
6
 
7
  /**
@@ -30,7 +42,5 @@ if ( ! class_exists( 'Kirki_Field_Slider' ) ) {
30
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'number' );
31
 
32
  }
33
-
34
  }
35
-
36
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Slider' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Slider extends Kirki_Field_Number {
18
 
19
  /**
42
  $this->sanitize_callback = array( 'Kirki_Sanitize_Values', 'number' );
43
 
44
  }
 
45
  }
 
46
  }
includes/field/class-kirki-field-switch.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Switch' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Switch extends Kirki_Field_Checkbox {
6
 
7
  /**
@@ -14,7 +26,5 @@ if ( ! class_exists( 'Kirki_Field_Switch' ) ) {
14
  $this->type = 'switch';
15
 
16
  }
17
-
18
  }
19
-
20
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Switch' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Switch extends Kirki_Field_Checkbox {
18
 
19
  /**
26
  $this->type = 'switch';
27
 
28
  }
 
29
  }
 
30
  }
includes/field/class-kirki-field-text.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Text' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Text extends Kirki_Field_Kirki_Generic {
6
 
7
  /**
@@ -34,7 +46,5 @@ if ( ! class_exists( 'Kirki_Field_Text' ) ) {
34
  $this->sanitize_callback = 'esc_textarea';
35
 
36
  }
37
-
38
  }
39
-
40
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Text' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Text extends Kirki_Field_Kirki_Generic {
18
 
19
  /**
46
  $this->sanitize_callback = 'esc_textarea';
47
 
48
  }
 
49
  }
 
50
  }
includes/field/class-kirki-field-textarea.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Textarea' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Textarea extends Kirki_Field_Kirki_Generic {
6
 
7
  /**
@@ -18,7 +30,5 @@ if ( ! class_exists( 'Kirki_Field_Textarea' ) ) {
18
  $this->choices['rows'] = '5';
19
 
20
  }
21
-
22
  }
23
-
24
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Textarea' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Textarea extends Kirki_Field_Kirki_Generic {
18
 
19
  /**
30
  $this->choices['rows'] = '5';
31
 
32
  }
 
33
  }
 
34
  }
includes/field/class-kirki-field-toggle.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Toggle' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Toggle extends Kirki_Field_Checkbox {
6
 
7
  /**
@@ -14,7 +26,5 @@ if ( ! class_exists( 'Kirki_Field_Toggle' ) ) {
14
  $this->type = 'toggle';
15
 
16
  }
17
-
18
  }
19
-
20
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Toggle' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Toggle extends Kirki_Field_Checkbox {
18
 
19
  /**
26
  $this->type = 'toggle';
27
 
28
  }
 
29
  }
 
30
  }
includes/field/class-kirki-field-typography.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Typography' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Typography extends Kirki_Field {
6
 
7
  /**
@@ -35,17 +47,21 @@ if ( ! class_exists( 'Kirki_Field_Typography' ) ) {
35
  * Sanitizes typography controls
36
  *
37
  * @since 2.2.0
 
38
  * @return array
39
  */
40
  public static function sanitize( $value ) {
 
41
  if ( ! is_array( $value ) ) {
42
  return array();
43
  }
44
- // escape the font-family
 
45
  if ( isset( $value['font-family'] ) ) {
46
  $value['font-family'] = esc_attr( $value['font-family'] );
47
  }
48
- // make sure we're using a valid variant.
 
49
  // We're adding checks for font-weight as well for backwards-compatibility
50
  // Versions 2.0 - 2.2 were using an integer font-weight.
51
  if ( isset( $value['variant'] ) || isset( $value['font-weight'] ) ) {
@@ -59,7 +75,8 @@ if ( ! class_exists( 'Kirki_Field_Typography' ) ) {
59
  $value['variant'] = 'regular';
60
  }
61
  }
62
- // Make sure we're using a valid subset
 
63
  if ( isset( $value['subset'] ) ) {
64
  $valid_subsets = Kirki_Fonts::get_google_font_subsets();
65
  $subsets_ok = array();
@@ -72,37 +89,43 @@ if ( ! class_exists( 'Kirki_Field_Typography' ) ) {
72
  $value['subsets'] = $subsets_ok;
73
  }
74
  }
75
- // Sanitize the font-size
 
76
  if ( isset( $value['font-size'] ) && ! empty( $value['font-size'] ) ) {
77
  $value['font-size'] = Kirki_Sanitize_Values::css_dimension( $value['font-size'] );
78
- if ( $value['font-size'] == Kirki_Sanitize_Values::filter_number( $value['font-size'] ) ) {
79
  $value['font-size'] .= 'px';
80
  }
81
  }
82
- // Sanitize the line-height
 
83
  if ( isset( $value['line-height'] ) && ! empty( $value['line-height'] ) ) {
84
  $value['line-height'] = Kirki_Sanitize_Values::css_dimension( $value['line-height'] );
85
  }
86
- // Sanitize the letter-spacing
 
87
  if ( isset( $value['letter-spacing'] ) && ! empty( $value['letter-spacing'] ) ) {
88
  $value['letter-spacing'] = Kirki_Sanitize_Values::css_dimension( $value['letter-spacing'] );
89
- if ( $value['letter-spacing'] == Kirki_Sanitize_Values::filter_number( $value['letter-spacing'] ) ) {
90
  $value['letter-spacing'] .= 'px';
91
  }
92
  }
93
- // Sanitize the text-align
 
94
  if ( isset( $value['text-align'] ) && ! empty( $value['text-align'] ) ) {
95
  if ( ! in_array( $value['text-align'], array( 'inherit', 'left', 'center', 'right', 'justify' ) ) ) {
96
  $value['text-align'] = 'inherit';
97
  }
98
  }
99
- // Sanitize the text-transform
 
100
  if ( isset( $value['text-transform'] ) && ! empty( $value['text-transform'] ) ) {
101
  if ( ! in_array( $value['text-transform'], array( 'none', 'capitalize', 'uppercase', 'lowercase', 'initial', 'inherit' ) ) ) {
102
  $value['text-transform'] = 'none';
103
  }
104
  }
105
- // Sanitize the color
 
106
  if ( isset( $value['color'] ) && ! empty( $value['color'] ) ) {
107
  $color = ariColor::newColor( $value['color'] );
108
  $value['color'] = $color->toCSS( 'hex' );
@@ -111,8 +134,5 @@ if ( ! class_exists( 'Kirki_Field_Typography' ) ) {
111
  return $value;
112
 
113
  }
114
-
115
-
116
  }
117
-
118
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Typography' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Typography extends Kirki_Field {
18
 
19
  /**
47
  * Sanitizes typography controls
48
  *
49
  * @since 2.2.0
50
+ * @param array $value The value.
51
  * @return array
52
  */
53
  public static function sanitize( $value ) {
54
+
55
  if ( ! is_array( $value ) ) {
56
  return array();
57
  }
58
+
59
+ // Escape the font-family.
60
  if ( isset( $value['font-family'] ) ) {
61
  $value['font-family'] = esc_attr( $value['font-family'] );
62
  }
63
+
64
+ // Make sure we're using a valid variant.
65
  // We're adding checks for font-weight as well for backwards-compatibility
66
  // Versions 2.0 - 2.2 were using an integer font-weight.
67
  if ( isset( $value['variant'] ) || isset( $value['font-weight'] ) ) {
75
  $value['variant'] = 'regular';
76
  }
77
  }
78
+
79
+ // Make sure we're using a valid subset.
80
  if ( isset( $value['subset'] ) ) {
81
  $valid_subsets = Kirki_Fonts::get_google_font_subsets();
82
  $subsets_ok = array();
89
  $value['subsets'] = $subsets_ok;
90
  }
91
  }
92
+
93
+ // Sanitize the font-size.
94
  if ( isset( $value['font-size'] ) && ! empty( $value['font-size'] ) ) {
95
  $value['font-size'] = Kirki_Sanitize_Values::css_dimension( $value['font-size'] );
96
+ if ( is_numeric( $value['font-size'] ) ) {
97
  $value['font-size'] .= 'px';
98
  }
99
  }
100
+
101
+ // Sanitize the line-height.
102
  if ( isset( $value['line-height'] ) && ! empty( $value['line-height'] ) ) {
103
  $value['line-height'] = Kirki_Sanitize_Values::css_dimension( $value['line-height'] );
104
  }
105
+
106
+ // Sanitize the letter-spacing.
107
  if ( isset( $value['letter-spacing'] ) && ! empty( $value['letter-spacing'] ) ) {
108
  $value['letter-spacing'] = Kirki_Sanitize_Values::css_dimension( $value['letter-spacing'] );
109
+ if ( is_numeric( $value['letter-spacing'] ) ) {
110
  $value['letter-spacing'] .= 'px';
111
  }
112
  }
113
+
114
+ // Sanitize the text-align.
115
  if ( isset( $value['text-align'] ) && ! empty( $value['text-align'] ) ) {
116
  if ( ! in_array( $value['text-align'], array( 'inherit', 'left', 'center', 'right', 'justify' ) ) ) {
117
  $value['text-align'] = 'inherit';
118
  }
119
  }
120
+
121
+ // Sanitize the text-transform.
122
  if ( isset( $value['text-transform'] ) && ! empty( $value['text-transform'] ) ) {
123
  if ( ! in_array( $value['text-transform'], array( 'none', 'capitalize', 'uppercase', 'lowercase', 'initial', 'inherit' ) ) ) {
124
  $value['text-transform'] = 'none';
125
  }
126
  }
127
+
128
+ // Sanitize the color.
129
  if ( isset( $value['color'] ) && ! empty( $value['color'] ) ) {
130
  $color = ariColor::newColor( $value['color'] );
131
  $value['color'] = $color->toCSS( 'hex' );
134
  return $value;
135
 
136
  }
 
 
137
  }
 
138
  }
includes/field/class-kirki-field-upload.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Field_Upload' ) ) {
4
 
 
 
 
5
  class Kirki_Field_Upload extends Kirki_Field {
6
 
7
  /**
@@ -30,6 +42,5 @@ if ( ! class_exists( 'Kirki_Field_Upload' ) ) {
30
  $this->sanitize_callback = 'esc_url_raw';
31
 
32
  }
33
-
34
  }
35
  }
1
  <?php
2
+ /**
3
+ * Override field methods
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.7
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Field_Upload' ) ) {
13
 
14
+ /**
15
+ * Field overrides.
16
+ */
17
  class Kirki_Field_Upload extends Kirki_Field {
18
 
19
  /**
42
  $this->sanitize_callback = 'esc_url_raw';
43
 
44
  }
 
45
  }
46
  }
includes/lib/class-aricolor.php CHANGED
@@ -16,11 +16,11 @@
16
  * @category Core
17
  * @author Aristeides Stathopoulos
18
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
19
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
20
  * @since 1.0
21
  */
22
 
23
- // Exit if accessed directly
24
  if ( ! defined( 'ABSPATH' ) ) {
25
  exit;
26
  }
16
  * @category Core
17
  * @author Aristeides Stathopoulos
18
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
19
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
20
  * @since 1.0
21
  */
22
 
23
+ // Exit if accessed directly.
24
  if ( ! defined( 'ABSPATH' ) ) {
25
  exit;
26
  }
includes/lib/class-kirki-color.php CHANGED
@@ -7,25 +7,28 @@
7
  * @category Core
8
  * @author Aristeides Stathopoulos
9
  * @copyright Copyright (c) 2015, Aristeides Stathopoulos
10
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
11
  * @since 1.0
12
  */
13
 
14
- // Exit if accessed directly
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Color' ) ) {
 
 
 
 
20
  final class Kirki_Color extends ariColor {
21
 
22
  /**
23
  * A proxy for the sanitize_color method.
24
  *
25
- * @param mixed The color
26
- * @param boolean Whether we want to include a hash (#) at the beginning or not
27
- *
28
- * @return string The sanitized hex color.
29
  */
30
  public static function sanitize_hex( $color = '#FFFFFF', $hash = true ) {
31
  if ( ! $hash ) {
@@ -37,8 +40,9 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
37
  /**
38
  * A proxy the sanitize_color method.
39
  *
40
- * @param $color
41
- *
 
42
  * @return string
43
  */
44
  public static function sanitize_rgba( $color ) {
@@ -49,10 +53,11 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
49
  * Sanitize colors.
50
  * Determine if the current value is a hex or an rgba color and call the appropriate method.
51
  *
 
 
52
  * @since 0.8.5
53
- *
54
- * @param $color mixed
55
- *
56
  * @return string
57
  */
58
  public static function sanitize_color( $color = '', $mode = 'auto' ) {
@@ -69,10 +74,11 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
69
  /**
70
  * Gets the rgb value of a color.
71
  *
72
- * @param string The color
73
- * @param boolean Whether we want to implode the values or not
74
- *
75
- * @return mixed array|string
 
76
  */
77
  public static function get_rgb( $color, $implode = false ) {
78
  $obj = ariColor::newColor( $color );
@@ -83,22 +89,24 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
83
  }
84
 
85
  /**
86
- * A proxy for the sanitize_color method
87
- *
88
- * @param mixed
89
  *
90
- * @return string The hex value of the color.
 
 
 
91
  */
92
  public static function rgba2hex( $color ) {
93
  return self::sanitize_color( $color, 'hex' );
94
  }
95
 
96
  /**
97
- * Get the alpha channel from an rgba color
98
  *
99
- * @param string The rgba color formatted like rgba(r,g,b,a)
100
- *
101
- * @return int|float The alpha value of the color.
 
102
  */
103
  public static function get_alpha_from_rgba( $color ) {
104
  $obj = ariColor::newColor( $color );
@@ -108,10 +116,11 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
108
  /**
109
  * Gets the rgba value of the $color.
110
  *
111
- * @param string The hex value of a color
112
- * @param int Opacity level (0-1)
113
- *
114
- * @return string
 
115
  */
116
  public static function get_rgba( $color = '#fff', $alpha = 1 ) {
117
  $obj = ariColor::newColor( $color );
@@ -119,14 +128,14 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
119
  return $obj->toCSS( 'rgba' );
120
  }
121
  // Make sure that opacity is properly formatted.
122
- // Converts 1-100 values to 0-1
123
  if ( $alpha > 1 || $alpha < -1 ) {
124
- // divide by 100
125
  $alpha /= 100;
126
  }
127
- // get absolute value
128
  $alpha = abs( $alpha );
129
- // max 1
130
  if ( 1 < $alpha ) {
131
  $alpha = 1;
132
  }
@@ -137,9 +146,10 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
137
  /**
138
  * Strips the alpha value from an RGBA color string.
139
  *
140
- * @param string $color The RGBA color string.
141
- *
142
- * @return string The corresponding RGB string.
 
143
  */
144
  public static function rgba_to_rgb( $color ) {
145
  $obj = ariColor::newColor( $color );
@@ -149,42 +159,53 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
149
  /**
150
  * Gets the brightness of the $hex color.
151
  *
152
- * @var string The hex value of a color
153
- * @return int value between 0 and 255
 
 
154
  */
155
  public static function get_brightness( $hex ) {
156
  $hex = self::sanitize_hex( $hex, false );
157
- // returns brightness value from 0 to 255
 
158
  return intval( ( ( hexdec( substr( $hex, 0, 2 ) ) * 299 ) + ( hexdec( substr( $hex, 2, 2 ) ) * 587 ) + ( hexdec( substr( $hex, 4, 2 ) ) * 114 ) ) / 1000 );
159
  }
 
160
  /**
161
  * Adjusts brightness of the $hex color.
162
  *
163
- * @param string $hex The hex value of a color
164
- * @param integer $steps should be between -255 and 255. Negative = darker, positive = lighter
165
- * @return string returns hex color
 
 
166
  */
167
  public static function adjust_brightness( $hex, $steps ) {
168
  $hex = self::sanitize_hex( $hex, false );
169
  $steps = max( -255, min( 255, $steps ) );
170
- // Adjust number of steps and keep it inside 0 to 255
 
171
  $red = max( 0, min( 255, hexdec( substr( $hex, 0, 2 ) ) + $steps ) );
172
  $green = max( 0, min( 255, hexdec( substr( $hex, 2, 2 ) ) + $steps ) );
173
  $blue = max( 0, min( 255, hexdec( substr( $hex, 4, 2 ) ) + $steps ) );
 
174
  $red_hex = str_pad( dechex( $red ), 2, '0', STR_PAD_LEFT );
175
  $green_hex = str_pad( dechex( $green ), 2, '0', STR_PAD_LEFT );
176
  $blue_hex = str_pad( dechex( $blue ), 2, '0', STR_PAD_LEFT );
177
  return self::sanitize_hex( $red_hex . $green_hex . $blue_hex );
178
  }
 
179
  /**
180
  * Mixes 2 hex colors.
181
- * the "percentage" variable is the percent of the first color
182
- * to be used it the mix. default is 50 (equal mix)
183
  *
184
- * @param string|false $hex1
185
- * @param string|false $hex2
186
- * @param integer $percentage a value between 0 and 100
187
- * @return string returns hex color
 
 
188
  */
189
  public static function mix_colors( $hex1, $hex2, $percentage ) {
190
  $hex1 = self::sanitize_hex( $hex1, false );
@@ -197,21 +218,27 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
197
  $blue_hex = str_pad( dechex( $blue ), 2, '0', STR_PAD_LEFT );
198
  return self::sanitize_hex( $red_hex . $green_hex . $blue_hex );
199
  }
 
200
  /**
201
- * Convert hex color to hsv
202
  *
203
- * @var string The hex value of color 1
204
- * @return array returns array( 'h', 's', 'v' )
 
 
205
  */
206
  public static function hex_to_hsv( $hex ) {
207
  $rgb = (array) (array) self::get_rgb( self::sanitize_hex( $hex, false ) );
208
  return self::rgb_to_hsv( $rgb );
209
  }
 
210
  /**
211
- * Convert hex color to hsv
212
  *
213
- * @var array The rgb color to conver array( 'r', 'g', 'b' )
214
- * @return array returns array( 'h', 's', 'v' )
 
 
215
  */
216
  public static function rgb_to_hsv( $color = array() ) {
217
  $var_r = ( $color[0] / 255 );
@@ -244,9 +271,16 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
244
  }
245
  return array( 'h' => round( $h, 2 ), 's' => round( $s, 2 ), 'v' => round( $v, 2 ) );
246
  }
247
- /*
 
248
  * This is a very simple algorithm that works by summing up the differences between the three color components red, green and blue.
249
  * A value higher than 500 is recommended for good readability.
 
 
 
 
 
 
250
  */
251
  public static function color_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
252
  $color_1 = self::sanitize_hex( $color_1, false );
@@ -259,10 +293,17 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
259
  $color_diff = $r_diff + $g_diff + $b_diff;
260
  return $color_diff;
261
  }
262
- /*
 
263
  * This function tries to compare the brightness of the colors.
264
  * A return value of more than 125 is recommended.
265
  * Combining it with the color_difference function above might make sense.
 
 
 
 
 
 
266
  */
267
  public static function brightness_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
268
  $color_1 = self::sanitize_hex( $color_1, false );
@@ -273,9 +314,16 @@ if ( ! class_exists( 'Kirki_Color' ) ) {
273
  $br_2 = ( 299 * $color_2_rgb[0] + 587 * $color_2_rgb[1] + 114 * $color_2_rgb[2] ) / 1000;
274
  return intval( abs( $br_1 - $br_2 ) );
275
  }
276
- /*
 
277
  * Uses the luminosity to calculate the difference between the given colors.
278
  * The returned value should be bigger than 5 for best readability.
 
 
 
 
 
 
279
  */
280
  public static function lumosity_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
281
  $color_1 = self::sanitize_hex( $color_1, false );
7
  * @category Core
8
  * @author Aristeides Stathopoulos
9
  * @copyright Copyright (c) 2015, Aristeides Stathopoulos
10
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
11
  * @since 1.0
12
  */
13
 
14
+ // Exit if accessed directly.
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Color' ) ) {
20
+
21
+ /**
22
+ * Helper class for color manipulation.
23
+ */
24
  final class Kirki_Color extends ariColor {
25
 
26
  /**
27
  * A proxy for the sanitize_color method.
28
  *
29
+ * @param string|array $color The color.
30
+ * @param bool $hash Whether we want to include a hash (#) at the beginning or not.
31
+ * @return string The sanitized hex color.
 
32
  */
33
  public static function sanitize_hex( $color = '#FFFFFF', $hash = true ) {
34
  if ( ! $hash ) {
40
  /**
41
  * A proxy the sanitize_color method.
42
  *
43
+ * @static
44
+ * @access public
45
+ * @param string $color The color.
46
  * @return string
47
  */
48
  public static function sanitize_rgba( $color ) {
53
  * Sanitize colors.
54
  * Determine if the current value is a hex or an rgba color and call the appropriate method.
55
  *
56
+ * @static
57
+ * @access public
58
  * @since 0.8.5
59
+ * @param string|array $color The color.
60
+ * @param string $mode The mode to be used.
 
61
  * @return string
62
  */
63
  public static function sanitize_color( $color = '', $mode = 'auto' ) {
74
  /**
75
  * Gets the rgb value of a color.
76
  *
77
+ * @static
78
+ * @access public
79
+ * @param string $color The color.
80
+ * @param boolean $implode Whether we want to implode the values or not.
81
+ * @return array|string
82
  */
83
  public static function get_rgb( $color, $implode = false ) {
84
  $obj = ariColor::newColor( $color );
89
  }
90
 
91
  /**
92
+ * A proxy for the sanitize_color method.
 
 
93
  *
94
+ * @static
95
+ * @access public
96
+ * @param string|array $color The color to convert.
97
+ * @return string The hex value of the color.
98
  */
99
  public static function rgba2hex( $color ) {
100
  return self::sanitize_color( $color, 'hex' );
101
  }
102
 
103
  /**
104
+ * Get the alpha channel from an rgba color.
105
  *
106
+ * @static
107
+ * @access public
108
+ * @param string $color The rgba color formatted like rgba(r,g,b,a).
109
+ * @return int|float The alpha value of the color.
110
  */
111
  public static function get_alpha_from_rgba( $color ) {
112
  $obj = ariColor::newColor( $color );
116
  /**
117
  * Gets the rgba value of the $color.
118
  *
119
+ * @static
120
+ * @access public
121
+ * @param string $color The hex value of a color.
122
+ * @param int|float $alpha Opacity level (0-1).
123
+ * @return string
124
  */
125
  public static function get_rgba( $color = '#fff', $alpha = 1 ) {
126
  $obj = ariColor::newColor( $color );
128
  return $obj->toCSS( 'rgba' );
129
  }
130
  // Make sure that opacity is properly formatted.
131
+ // Converts 1-100 values to 0-1.
132
  if ( $alpha > 1 || $alpha < -1 ) {
133
+ // Divide by 100.
134
  $alpha /= 100;
135
  }
136
+ // Get absolute value.
137
  $alpha = abs( $alpha );
138
+ // Max 1.
139
  if ( 1 < $alpha ) {
140
  $alpha = 1;
141
  }
146
  /**
147
  * Strips the alpha value from an RGBA color string.
148
  *
149
+ * @static
150
+ * @access public
151
+ * @param string $color The RGBA color string.
152
+ * @return string The corresponding RGB string.
153
  */
154
  public static function rgba_to_rgb( $color ) {
155
  $obj = ariColor::newColor( $color );
159
  /**
160
  * Gets the brightness of the $hex color.
161
  *
162
+ * @static
163
+ * @access public
164
+ * @param string $hex The hex value of a color.
165
+ * @return int Value between 0 and 255.
166
  */
167
  public static function get_brightness( $hex ) {
168
  $hex = self::sanitize_hex( $hex, false );
169
+
170
+ // Returns brightness value from 0 to 255.
171
  return intval( ( ( hexdec( substr( $hex, 0, 2 ) ) * 299 ) + ( hexdec( substr( $hex, 2, 2 ) ) * 587 ) + ( hexdec( substr( $hex, 4, 2 ) ) * 114 ) ) / 1000 );
172
  }
173
+
174
  /**
175
  * Adjusts brightness of the $hex color.
176
  *
177
+ * @static
178
+ * @access public
179
+ * @param string $hex The hex value of a color.
180
+ * @param integer $steps Should be between -255 and 255. Negative = darker, positive = lighter.
181
+ * @return string Returns hex color.
182
  */
183
  public static function adjust_brightness( $hex, $steps ) {
184
  $hex = self::sanitize_hex( $hex, false );
185
  $steps = max( -255, min( 255, $steps ) );
186
+
187
+ // Adjust number of steps and keep it inside 0 to 255.
188
  $red = max( 0, min( 255, hexdec( substr( $hex, 0, 2 ) ) + $steps ) );
189
  $green = max( 0, min( 255, hexdec( substr( $hex, 2, 2 ) ) + $steps ) );
190
  $blue = max( 0, min( 255, hexdec( substr( $hex, 4, 2 ) ) + $steps ) );
191
+
192
  $red_hex = str_pad( dechex( $red ), 2, '0', STR_PAD_LEFT );
193
  $green_hex = str_pad( dechex( $green ), 2, '0', STR_PAD_LEFT );
194
  $blue_hex = str_pad( dechex( $blue ), 2, '0', STR_PAD_LEFT );
195
  return self::sanitize_hex( $red_hex . $green_hex . $blue_hex );
196
  }
197
+
198
  /**
199
  * Mixes 2 hex colors.
200
+ * The "percentage" variable is the percent of the first color.
201
+ * to be used it the mix. default is 50 (equal mix).
202
  *
203
+ * @static
204
+ * @access public
205
+ * @param string|false $hex1 Color.
206
+ * @param string|false $hex2 Color.
207
+ * @param int $percentage A value between 0 and 100.
208
+ * @return string Returns hex color.
209
  */
210
  public static function mix_colors( $hex1, $hex2, $percentage ) {
211
  $hex1 = self::sanitize_hex( $hex1, false );
218
  $blue_hex = str_pad( dechex( $blue ), 2, '0', STR_PAD_LEFT );
219
  return self::sanitize_hex( $red_hex . $green_hex . $blue_hex );
220
  }
221
+
222
  /**
223
+ * Convert hex color to hsv.
224
  *
225
+ * @static
226
+ * @access public
227
+ * @param string $hex The hex value of color 1.
228
+ * @return array Returns array( 'h', 's', 'v' ).
229
  */
230
  public static function hex_to_hsv( $hex ) {
231
  $rgb = (array) (array) self::get_rgb( self::sanitize_hex( $hex, false ) );
232
  return self::rgb_to_hsv( $rgb );
233
  }
234
+
235
  /**
236
+ * Convert hex color to hsv.
237
  *
238
+ * @static
239
+ * @access public
240
+ * @param string $color The rgb color to convert array( 'r', 'g', 'b' ).
241
+ * @return array Returns array( 'h', 's', 'v' ).
242
  */
243
  public static function rgb_to_hsv( $color = array() ) {
244
  $var_r = ( $color[0] / 255 );
271
  }
272
  return array( 'h' => round( $h, 2 ), 's' => round( $s, 2 ), 'v' => round( $v, 2 ) );
273
  }
274
+
275
+ /**
276
  * This is a very simple algorithm that works by summing up the differences between the three color components red, green and blue.
277
  * A value higher than 500 is recommended for good readability.
278
+ *
279
+ * @static
280
+ * @access public
281
+ * @param string $color_1 The 1st color.
282
+ * @param string $color_2 The 2nd color.
283
+ * @return string
284
  */
285
  public static function color_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
286
  $color_1 = self::sanitize_hex( $color_1, false );
293
  $color_diff = $r_diff + $g_diff + $b_diff;
294
  return $color_diff;
295
  }
296
+
297
+ /**
298
  * This function tries to compare the brightness of the colors.
299
  * A return value of more than 125 is recommended.
300
  * Combining it with the color_difference function above might make sense.
301
+ *
302
+ * @static
303
+ * @access public
304
+ * @param string $color_1 The 1st color.
305
+ * @param string $color_2 The 2nd color.
306
+ * @return string
307
  */
308
  public static function brightness_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
309
  $color_1 = self::sanitize_hex( $color_1, false );
314
  $br_2 = ( 299 * $color_2_rgb[0] + 587 * $color_2_rgb[1] + 114 * $color_2_rgb[2] ) / 1000;
315
  return intval( abs( $br_1 - $br_2 ) );
316
  }
317
+
318
+ /**
319
  * Uses the luminosity to calculate the difference between the given colors.
320
  * The returned value should be bigger than 5 for best readability.
321
+ *
322
+ * @static
323
+ * @access public
324
+ * @param string $color_1 The 1st color.
325
+ * @param string $color_2 The 2nd color.
326
+ * @return string
327
  */
328
  public static function lumosity_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) {
329
  $color_1 = self::sanitize_hex( $color_1, false );
includes/output/class-kirki-output.php CHANGED
@@ -1,179 +1,207 @@
1
  <?php
2
-
3
- class Kirki_Output {
4
-
5
- /**
6
- * @access protected
7
- * @var string
8
- */
9
- protected $config_id = 'global';
10
-
11
- /**
12
- * @access protected
13
- * @var array
14
- */
15
- protected $output = array();
16
-
17
- /**
18
- * @access protected
19
- * @var array
20
- */
21
- protected $styles = array();
22
-
23
- /**
24
- * @access protected
25
- * @var string|array
26
- */
27
- protected $value;
28
 
29
  /**
30
- * The class constructor
31
- *
32
- * @access public
33
- * @param $config_id string
34
- * @param $output array
35
- * @param $value string|array
36
  */
37
- public function __construct( $config_id, $output, $value ) {
38
-
39
- $this->config_id = $config_id;
40
- $this->value = $value;
41
- $this->output = $output;
42
-
43
- $this->parse_output();
44
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
- /**
47
- * If we have a sanitize_callback defined,
48
- * apply it to the value
49
- *
50
- * @param $output array the output args
51
- * @param $value string|array the value
52
- *
53
- * @return string|array
54
- */
55
- protected function apply_sanitize_callback( $output, $value ) {
56
- if ( isset( $output['sanitize_callback'] ) && null !== $output['sanitize_callback'] ) {
57
- // If the sanitize_callback is invalid, return the value
58
- if ( ! is_callable( $output['sanitize_callback'] ) ) {
59
- return $value;
 
 
 
60
  }
61
- return call_user_func( $output['sanitize_callback'], $this->value );
62
- }
63
- if ( isset( $output['value_pattern'] ) && ! empty( $output['value_pattern'] ) ) {
64
- if ( is_string( $output['value_pattern'] ) ) {
65
- return str_replace( '$', $value, $output['value_pattern'] );
66
  }
67
- }
68
 
69
- return $value;
70
- }
71
 
72
- /**
73
- * Parses the output arguments
74
- * Calls the process_output method for each of them.
75
- *
76
- * @access protected
77
- */
78
- protected function parse_output() {
79
- foreach ( $this->output as $output ) {
80
- $skip = false;
81
- // Apply any sanitization callbacks defined
82
- $value = $this->apply_sanitize_callback( $output, $this->value );
83
- // No need to proceed this if the current value is the same as in the "exclude" value.
84
- if ( isset( $output['exclude'] ) && false !== $output['exclude'] && is_array( $output['exclude'] ) ) {
85
- foreach ( $output['exclude'] as $exclude ) {
86
- if ( $skip ) {
87
- continue;
88
- }
89
- // Skip for empty values, or if value is defined as excluded.
90
- if ( empty( $value ) || $exclude == $value ) {
91
- $skip = true;
 
 
 
 
 
 
92
  }
93
  }
 
 
 
 
 
 
 
 
 
 
 
 
94
  }
95
- if ( $skip ) {
96
- continue;
97
- }
98
 
99
- if ( isset( $output['element'] ) && is_array( $output['element'] ) ) {
100
- $output['element'] = array_unique( $output['element'] );
101
- sort( $output['element'] );
102
- $output['element'] = implode( ',', $output['element'] );
 
 
 
 
 
 
 
 
103
  }
 
 
 
 
104
 
105
- $value = $this->process_value( $value, $output );
106
- $this->process_output( $output, $value );
107
  }
108
- }
109
 
110
- /**
111
- * Parses an output and creates the styles array for it
112
- *
113
- * @access protected
114
- * @param $output array
115
- * @param $value string
116
- *
117
- * @return void
118
- */
119
- protected function process_output( $output, $value ) {
120
- if ( ! isset( $output['element'] ) || ! isset( $output['property'] ) ) {
121
- return;
 
 
 
 
 
 
 
 
 
 
122
  }
123
- $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
124
- $output['prefix'] = ( isset( $output['prefix'] ) ) ? $output['prefix'] : '';
125
- $output['units'] = ( isset( $output['units'] ) ) ? $output['units'] : '';
126
- $output['suffix'] = ( isset( $output['suffix'] ) ) ? $output['suffix'] : '';
127
 
128
- $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $output['prefix'] . $value . $output['units'] . $output['suffix'];
129
- }
130
-
131
- /**
132
- * Some CSS properties are unique.
133
- * We need to tweak the value to make everything works as expected.
134
- *
135
- * @access protected
136
- * @param $property string the CSS property
137
- * @param $value string the value
138
- *
139
- * @return array
140
- */
141
- protected function process_property_value( $property, $value ) {
142
- $properties = apply_filters( 'kirki/' . $this->config_id . '/output/property-classnames', array(
143
- 'font-family' => 'Kirki_Output_Property_Font_Family',
144
- 'background-image' => 'Kirki_Output_Property_Background_Image',
145
- 'background-position' => 'Kirki_Output_Property_Background_Position',
146
- ) );
147
- if ( array_key_exists( $property, $properties ) ) {
148
- $classname = $properties[ $property ];
149
- $obj = new $classname( $property, $value );
150
- return $obj->get_value();
151
  }
152
- return $value;
153
- }
154
 
155
- /**
156
- * Returns the value
157
- *
158
- * @access protected
159
- * @param string|array
160
- *
161
- * @return string|array
162
- */
163
- protected function process_value( $value, $output ) {
164
- if ( isset( $output['property'] ) ) {
165
- return $this->process_property_value( $output['property'], $value );
166
  }
167
- return $value;
168
- }
169
-
170
- /**
171
- * Exploses the private $styles property to the world
172
- *
173
- * @access protected
174
- * @return array
175
- */
176
- public function get_styles() {
177
- return $this->styles;
178
  }
179
  }
1
  <?php
2
+ /**
3
+ * Handles CSS output for fields.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
+
12
+ if ( ! class_exists( 'Kirki_Output' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
  /**
15
+ * Handles field CSS output.
 
 
 
 
 
16
  */
17
+ class Kirki_Output {
18
+
19
+ /**
20
+ * The Kirki configuration used in the field.
21
+ *
22
+ * @access protected
23
+ * @var string
24
+ */
25
+ protected $config_id = 'global';
26
+
27
+ /**
28
+ * The field's `output` argument.
29
+ *
30
+ * @access protected
31
+ * @var array
32
+ */
33
+ protected $output = array();
34
+
35
+ /**
36
+ * An array of the generated styles.
37
+ *
38
+ * @access protected
39
+ * @var array
40
+ */
41
+ protected $styles = array();
42
+
43
+ /**
44
+ * The value.
45
+ *
46
+ * @access protected
47
+ * @var string|array
48
+ */
49
+ protected $value;
50
+
51
+ /**
52
+ * The class constructor.
53
+ *
54
+ * @access public
55
+ * @param string $config_id The config ID.
56
+ * @param array $output The output argument.
57
+ * @param string|array $value The value.
58
+ */
59
+ public function __construct( $config_id, $output, $value ) {
60
+
61
+ $this->config_id = $config_id;
62
+ $this->value = $value;
63
+ $this->output = $output;
64
+
65
+ $this->parse_output();
66
+ }
67
 
68
+ /**
69
+ * If we have a sanitize_callback defined, apply it to the value.
70
+ *
71
+ * @param array $output The output args.
72
+ * @param string|array $value The value.
73
+ *
74
+ * @return string|array
75
+ */
76
+ protected function apply_sanitize_callback( $output, $value ) {
77
+
78
+ if ( isset( $output['sanitize_callback'] ) && null !== $output['sanitize_callback'] ) {
79
+
80
+ // If the sanitize_callback is invalid, return the value.
81
+ if ( ! is_callable( $output['sanitize_callback'] ) ) {
82
+ return $value;
83
+ }
84
+ return call_user_func( $output['sanitize_callback'], $this->value );
85
  }
86
+ if ( isset( $output['value_pattern'] ) && ! empty( $output['value_pattern'] ) ) {
87
+ if ( is_string( $output['value_pattern'] ) ) {
88
+ return str_replace( '$', $value, $output['value_pattern'] );
89
+ }
 
90
  }
 
91
 
92
+ return $value;
 
93
 
94
+ }
95
+
96
+ /**
97
+ * Parses the output arguments.
98
+ * Calls the process_output method for each of them.
99
+ *
100
+ * @access protected
101
+ */
102
+ protected function parse_output() {
103
+ foreach ( $this->output as $output ) {
104
+ $skip = false;
105
+
106
+ // Apply any sanitization callbacks defined.
107
+ $value = $this->apply_sanitize_callback( $output, $this->value );
108
+
109
+ // No need to proceed this if the current value is the same as in the "exclude" value.
110
+ if ( isset( $output['exclude'] ) && false !== $output['exclude'] && is_array( $output['exclude'] ) ) {
111
+ foreach ( $output['exclude'] as $exclude ) {
112
+ if ( $skip ) {
113
+ continue;
114
+ }
115
+
116
+ // Skip for empty values, or if value is defined as excluded.
117
+ if ( empty( $value ) || $exclude == $value ) {
118
+ $skip = true;
119
+ }
120
  }
121
  }
122
+ if ( $skip ) {
123
+ continue;
124
+ }
125
+
126
+ if ( isset( $output['element'] ) && is_array( $output['element'] ) ) {
127
+ $output['element'] = array_unique( $output['element'] );
128
+ sort( $output['element'] );
129
+ $output['element'] = implode( ',', $output['element'] );
130
+ }
131
+
132
+ $value = $this->process_value( $value, $output );
133
+ $this->process_output( $output, $value );
134
  }
135
+ }
 
 
136
 
137
+ /**
138
+ * Parses an output and creates the styles array for it.
139
+ *
140
+ * @access protected
141
+ * @param array $output The field output.
142
+ * @param string $value The value.
143
+ *
144
+ * @return void
145
+ */
146
+ protected function process_output( $output, $value ) {
147
+ if ( ! isset( $output['element'] ) || ! isset( $output['property'] ) ) {
148
+ return;
149
  }
150
+ $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
151
+ $output['prefix'] = ( isset( $output['prefix'] ) ) ? $output['prefix'] : '';
152
+ $output['units'] = ( isset( $output['units'] ) ) ? $output['units'] : '';
153
+ $output['suffix'] = ( isset( $output['suffix'] ) ) ? $output['suffix'] : '';
154
 
155
+ $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $output['prefix'] . $value . $output['units'] . $output['suffix'];
 
156
  }
 
157
 
158
+ /**
159
+ * Some CSS properties are unique.
160
+ * We need to tweak the value to make everything works as expected.
161
+ *
162
+ * @access protected
163
+ * @param string $property The CSS property.
164
+ * @param string $value The value.
165
+ *
166
+ * @return array
167
+ */
168
+ protected function process_property_value( $property, $value ) {
169
+ $properties = apply_filters( 'kirki/' . $this->config_id . '/output/property-classnames', array(
170
+ 'font-family' => 'Kirki_Output_Property_Font_Family',
171
+ 'background-image' => 'Kirki_Output_Property_Background_Image',
172
+ 'background-position' => 'Kirki_Output_Property_Background_Position',
173
+ ) );
174
+ if ( array_key_exists( $property, $properties ) ) {
175
+ $classname = $properties[ $property ];
176
+ $obj = new $classname( $property, $value );
177
+ return $obj->get_value();
178
+ }
179
+ return $value;
180
  }
 
 
 
 
181
 
182
+ /**
183
+ * Returns the value.
184
+ *
185
+ * @access protected
186
+ * @param string|array $value The value.
187
+ * @param array $output The field "output".
188
+ * @return string|array
189
+ */
190
+ protected function process_value( $value, $output ) {
191
+ if ( isset( $output['property'] ) ) {
192
+ return $this->process_property_value( $output['property'], $value );
193
+ }
194
+ return $value;
 
 
 
 
 
 
 
 
 
 
195
  }
 
 
196
 
197
+ /**
198
+ * Exploses the private $styles property to the world
199
+ *
200
+ * @access protected
201
+ * @return array
202
+ */
203
+ public function get_styles() {
204
+ return $this->styles;
 
 
 
205
  }
 
 
 
 
 
 
 
 
 
 
 
206
  }
207
  }
includes/output/field/class-kirki-output-field-multicolor.php CHANGED
@@ -1,37 +1,57 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Output_Field_Multicolor extends Kirki_Output {
4
-
5
- protected function process_output( $output, $value ) {
6
-
7
- foreach ( $value as $key => $sub_value ) {
8
-
9
- // If "choice" is not defined, there's no reason to continue
10
- if ( ! isset( $output['choice'] ) ) {
11
- return;
12
- }
13
-
14
- // If "element" is not defined, there's no reason to continue
15
- if ( ! isset( $output['element'] ) ) {
16
- return;
17
- }
18
-
19
- // If the "choice" is not the same as the $key in our loop, there's no reason to proceed.
20
- if ( $key != $output['choice'] ) {
21
- return;
22
  }
23
-
24
- // If "property" is not defined, fallback to "color".
25
- $output['property'] = ( ! isset( $output['property'] ) || empty( $output['property'] ) ) ? 'color' : $output['property'] = 'color';
26
-
27
- // If "media_query" is not defined, use "global".
28
- $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
29
-
30
- // Create the styles
31
- $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $sub_value;
32
-
33
  }
34
-
35
  }
36
-
37
  }
1
  <?php
2
+ /**
3
+ * Handles CSS output for multicolor fields.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
+
12
+ if ( ! class_exists( 'Kirki_Output_Field_Multicolor' ) ) {
13
+
14
+ /**
15
+ * Output overrides.
16
+ */
17
+ class Kirki_Output_Field_Multicolor extends Kirki_Output {
18
+
19
+ /**
20
+ * Processes a single item from the `output` array.
21
+ *
22
+ * @access protected
23
+ * @param array $output The `output` item.
24
+ * @param array $value The field's value.
25
+ */
26
+ protected function process_output( $output, $value ) {
27
+
28
+ foreach ( $value as $key => $sub_value ) {
29
+
30
+ // If "choice" is not defined, there's no reason to continue.
31
+ if ( ! isset( $output['choice'] ) ) {
32
+ continue;
33
+ }
34
+
35
+ // If "element" is not defined, there's no reason to continue.
36
+ if ( ! isset( $output['element'] ) ) {
37
+ continue;
38
+ }
39
+
40
+ // If the "choice" is not the same as the $key in our loop, there's no reason to proceed.
41
+ if ( $key != $output['choice'] ) {
42
+ continue;
43
+ }
44
+
45
+ // If "property" is not defined, fallback to "color".
46
+ $output['property'] = ( ! isset( $output['property'] ) || empty( $output['property'] ) ) ? 'color' : $output['property'] = 'color';
47
+
48
+ // If "media_query" is not defined, use "global".
49
+ $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
50
+
51
+ // Create the styles.
52
+ $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $sub_value;
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  }
 
 
 
 
 
 
 
 
 
 
55
  }
 
56
  }
 
57
  }
includes/output/field/class-kirki-output-field-spacing.php CHANGED
@@ -1,21 +1,43 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Output_Field_Spacing extends Kirki_Output {
4
 
5
- protected function process_output( $output, $value ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
- foreach ( $value as $key => $sub_value ) {
8
- if ( ! isset( $output['property'] ) || empty( $output['property'] ) ) {
9
- $property = $key;
10
- } elseif ( false !== strpos( $output['property'], '%%' ) ) {
11
- $property = str_replace( '%%', $key, $output['property'] );
12
- } else {
13
- $property = $output['property'] . '-' . $key;
14
  }
15
- $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
16
- $this->styles[ $output['media_query'] ][ $output['element'] ][ $property ] = $sub_value;
17
  }
18
-
19
  }
20
-
21
  }
1
  <?php
2
+ /**
3
+ * Handles CSS output for spacing fields.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Output_Field_Spacing' ) ) {
13
 
14
+ /**
15
+ * Output overrides.
16
+ */
17
+ class Kirki_Output_Field_Spacing extends Kirki_Output {
18
+
19
+ /**
20
+ * Processes a single item from the `output` array.
21
+ *
22
+ * @access protected
23
+ * @param array $output The `output` item.
24
+ * @param array $value The field's value.
25
+ */
26
+ protected function process_output( $output, $value ) {
27
+
28
+ foreach ( $value as $key => $sub_value ) {
29
+
30
+ if ( ! isset( $output['property'] ) || empty( $output['property'] ) ) {
31
+ $property = $key;
32
+ } elseif ( false !== strpos( $output['property'], '%%' ) ) {
33
+ $property = str_replace( '%%', $key, $output['property'] );
34
+ } else {
35
+ $property = $output['property'] . '-' . $key;
36
+ }
37
+ $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
38
+ $this->styles[ $output['media_query'] ][ $output['element'] ][ $property ] = $sub_value;
39
 
 
 
 
 
 
 
 
40
  }
 
 
41
  }
 
42
  }
 
43
  }
includes/output/field/class-kirki-output-field-typography.php CHANGED
@@ -1,61 +1,90 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Output_Field_Typography extends Kirki_Output {
4
 
5
- protected function process_output( $output, $value ) {
6
- $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
7
- $output['element'] = ( isset( $output['element'] ) ) ? $output['element'] : 'body';
 
8
 
9
- // Take care of font-families
10
- if ( isset( $value['font-family'] ) && ! empty( $value['font-family'] ) ) {
 
 
 
 
 
 
11
  $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
12
- $this->styles[ $output['media_query'] ][ $output['element'] ]['font-family'] = $this->process_property_value( 'font-family', $value['font-family'] );
13
- }
14
- // Add support for the older font-weight parameter.
15
- // This has been deprecated so the code below is just
16
- // to add some backwards-compatibility.
17
- // Once a user visits their customizer
18
- // and make changes to their typography,
19
- // new values are saved and this one is no longer used.
20
- if ( isset( $value['font-weight'] ) && ! empty( $value['font-weight'] ) ) {
21
- $this->styles[ $output['media_query'] ][ $output['element'] ]['font-weight'] = $value['font-weight'];
22
- }
23
- // Take care of variants
24
- if ( isset( $value['variant'] ) && ! empty( $value['variant'] ) ) {
25
- // Get the font_weight
26
- $font_weight = str_replace( 'italic', '', $value['variant'] );
27
- $font_weight = ( in_array( $font_weight, array( '', 'regular' ) ) ) ? '400' : $font_weight;
28
- // Is this italic?
29
- $is_italic = ( false !== strpos( $value['variant'], 'italic' ) );
30
- $this->styles[ $output['media_query'] ][ $output['element'] ]['font-weight'] = $font_weight;
31
- if ( $is_italic ) {
32
- $this->styles[ $output['media_query'] ][ $output['element'] ]['font-style'] = 'italic';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  }
34
- }
35
- // Take care of font-size
36
- if ( isset( $value['font-size'] ) && ! empty( $value['font-size'] ) ) {
37
- $this->styles[ $output['media_query'] ][ $output['element'] ]['font-size'] = $value['font-size'];
38
- }
39
- // Take care of line-height
40
- if ( isset( $value['line-height'] ) && ! empty( $value['line-height'] ) ) {
41
- $this->styles[ $output['media_query'] ][ $output['element'] ]['line-height'] = $value['line-height'];
42
- }
43
- // Take care of letter-spacing
44
- if ( isset( $value['letter-spacing'] ) && ! empty( $value['letter-spacing'] ) ) {
45
- $this->styles[ $output['media_query'] ][ $output['element'] ]['letter-spacing'] = $value['letter-spacing'];
46
- }
47
- // Take care of text-align
48
- if ( isset( $value['text-align'] ) && ! empty( $value['text-align'] ) ) {
49
- $this->styles[ $output['media_query'] ][ $output['element'] ]['text-align'] = $value['text-align'];
50
- }
51
- // Take care of text-transform
52
- if ( isset( $value['text-transform'] ) && ! empty( $value['text-transform'] ) ) {
53
- $this->styles[ $output['media_query'] ][ $output['element'] ]['text-transform'] = $value['text-transform'];
54
- }
55
- // Take care of color
56
- if ( isset( $value['color'] ) && ! empty( $value['color'] ) ) {
57
- $this->styles[ $output['media_query'] ][ $output['element'] ]['color'] = $value['color'];
58
  }
59
  }
60
-
61
  }
1
  <?php
2
+ /**
3
+ * Handles CSS output for typography fields.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Output_Field_Typography' ) ) {
13
 
14
+ /**
15
+ * Output overrides.
16
+ */
17
+ class Kirki_Output_Field_Typography extends Kirki_Output {
18
 
19
+ /**
20
+ * Processes a single item from the `output` array.
21
+ *
22
+ * @access protected
23
+ * @param array $output The `output` item.
24
+ * @param array $value The field's value.
25
+ */
26
+ protected function process_output( $output, $value ) {
27
  $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
28
+ $output['element'] = ( isset( $output['element'] ) ) ? $output['element'] : 'body';
29
+
30
+ // Take care of font-families.
31
+ if ( isset( $value['font-family'] ) && ! empty( $value['font-family'] ) ) {
32
+ $output['media_query'] = ( isset( $output['media_query'] ) ) ? $output['media_query'] : 'global';
33
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['font-family'] = $this->process_property_value( 'font-family', $value['font-family'] );
34
+ }
35
+
36
+ // Add support for the older font-weight parameter.
37
+ // This has been deprecated so the code below is just to add some backwards-compatibility.
38
+ // Once a user visits their customizer and make changes to their typography,
39
+ // new values are saved and this one is no longer used.
40
+ if ( isset( $value['font-weight'] ) && ! empty( $value['font-weight'] ) ) {
41
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['font-weight'] = $value['font-weight'];
42
+ }
43
+
44
+ // Take care of variants.
45
+ if ( isset( $value['variant'] ) && ! empty( $value['variant'] ) ) {
46
+
47
+ // Get the font_weight.
48
+ $font_weight = str_replace( 'italic', '', $value['variant'] );
49
+ $font_weight = ( in_array( $font_weight, array( '', 'regular' ) ) ) ? '400' : $font_weight;
50
+
51
+ // Is this italic?
52
+ $is_italic = ( false !== strpos( $value['variant'], 'italic' ) );
53
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['font-weight'] = $font_weight;
54
+ if ( $is_italic ) {
55
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['font-style'] = 'italic';
56
+ }
57
+ }
58
+
59
+ // Take care of font-size.
60
+ if ( isset( $value['font-size'] ) && ! empty( $value['font-size'] ) ) {
61
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['font-size'] = $value['font-size'];
62
+ }
63
+
64
+ // Take care of line-height.
65
+ if ( isset( $value['line-height'] ) && ! empty( $value['line-height'] ) ) {
66
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['line-height'] = $value['line-height'];
67
+ }
68
+
69
+ // Take care of letter-spacing.
70
+ if ( isset( $value['letter-spacing'] ) && ! empty( $value['letter-spacing'] ) ) {
71
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['letter-spacing'] = $value['letter-spacing'];
72
+ }
73
+
74
+ // Take care of text-align.
75
+ if ( isset( $value['text-align'] ) && ! empty( $value['text-align'] ) ) {
76
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['text-align'] = $value['text-align'];
77
+ }
78
+
79
+ // Take care of text-transform.
80
+ if ( isset( $value['text-transform'] ) && ! empty( $value['text-transform'] ) ) {
81
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['text-transform'] = $value['text-transform'];
82
+ }
83
+
84
+ // Take care of color.
85
+ if ( isset( $value['color'] ) && ! empty( $value['color'] ) ) {
86
+ $this->styles[ $output['media_query'] ][ $output['element'] ]['color'] = $value['color'];
87
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
89
  }
 
90
  }
includes/output/property/class-kirki-output-property-background-image.php CHANGED
@@ -1,16 +1,34 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Output_Property_Background_Image extends Kirki_Output_Property {
4
 
5
- protected function process_value() {
 
 
 
6
 
7
- if ( false === strrpos( $this->value, 'url(' ) ) {
8
- if ( empty( $this->value ) ) {
9
- return;
 
 
 
 
 
 
 
 
 
10
  }
11
- $this->value = 'url("' . $this->value . '")';
12
  }
13
-
14
  }
15
-
16
  }
1
  <?php
2
+ /**
3
+ * Handles CSS output for background-image.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Output_Property_Background_Image' ) ) {
13
 
14
+ /**
15
+ * Output overrides.
16
+ */
17
+ class Kirki_Output_Property_Background_Image extends Kirki_Output_Property {
18
 
19
+ /**
20
+ * Modifies the value.
21
+ *
22
+ * @access protected
23
+ */
24
+ protected function process_value() {
25
+
26
+ if ( false === strrpos( $this->value, 'url(' ) ) {
27
+ if ( empty( $this->value ) ) {
28
+ return;
29
+ }
30
+ $this->value = 'url("' . $this->value . '")';
31
  }
 
32
  }
 
33
  }
 
34
  }
includes/output/property/class-kirki-output-property-background-position.php CHANGED
@@ -1,52 +1,75 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Output_Property_Background_Position extends Kirki_Output_Property {
4
 
5
- protected function process_value() {
6
- $this->value = trim( $this->value );
7
- // If you use calc() there, I suppose you know what you're doing.
8
- // No need to process this any further, just exit.
9
- if ( false !== strpos( $this->value, 'calc' ) ) {
10
- return;
11
- }
12
- // If the value is initial or inherit, we don't need to do anything.
13
- // Just exit.
14
- if ( 'initial' == $this->value || 'inherit' == $this->value ) {
15
- return;
16
- }
17
 
18
- $x_dimensions = array( 'left', 'center', 'right' );
19
- $y_dimensions = array( 'top', 'center', 'bottom' );
20
- // If there's a space, we have an X and a Y value.
21
- if ( false !== strpos( $this->value, ' ' ) ) {
22
- $xy = explode( ' ', $this->value );
 
23
 
24
- $x = trim( $xy[0] );
25
- $y = trim( $xy[1] );
26
 
27
- // If x is not left/center/right, we need to sanitize it.
28
- if ( ! in_array( $x, $x_dimensions ) ) {
29
- $x = Kirki_Sanitize_Values::css_dimension( $x );
 
30
  }
31
- if ( ! in_array( $y, $y_dimensions ) ) {
32
- $y = Kirki_Sanitize_Values::css_dimension( $y );
 
 
 
33
  }
34
- $this->value = $x . ' ' . $y;
35
- return;
36
- }
37
- $x = 'center';
38
- foreach ( $x_dimensions as $x_dimension ) {
39
- if ( false !== strpos( $this->value, $x_dimension ) ) {
40
- $x = $x_dimension;
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  }
42
- }
43
- $y = 'center';
44
- foreach ( $y_dimensions as $y_dimension ) {
45
- if ( false !== strpos( $this->value, $y_dimension ) ) {
46
- $y = $y_dimension;
47
  }
 
 
 
 
 
 
 
48
  }
49
- $this->value = $x . ' ' . $y;
50
  }
51
-
52
  }
1
  <?php
2
+ /**
3
+ * Handles CSS output for background-position.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Output_Property_Background_Position' ) ) {
13
 
14
+ /**
15
+ * Output overrides.
16
+ */
17
+ class Kirki_Output_Property_Background_Position extends Kirki_Output_Property {
 
 
 
 
 
 
 
 
18
 
19
+ /**
20
+ * Modifies the value.
21
+ *
22
+ * @access protected
23
+ */
24
+ protected function process_value() {
25
 
26
+ $this->value = trim( $this->value );
 
27
 
28
+ // If you use calc() there, I suppose you know what you're doing.
29
+ // No need to process this any further, just exit.
30
+ if ( false !== strpos( $this->value, 'calc' ) ) {
31
+ return;
32
  }
33
+
34
+ // If the value is initial or inherit, we don't need to do anything.
35
+ // Just exit.
36
+ if ( 'initial' == $this->value || 'inherit' == $this->value ) {
37
+ return;
38
  }
39
+
40
+ $x_dimensions = array( 'left', 'center', 'right' );
41
+ $y_dimensions = array( 'top', 'center', 'bottom' );
42
+
43
+ // If there's a space, we have an X and a Y value.
44
+ if ( false !== strpos( $this->value, ' ' ) ) {
45
+ $xy = explode( ' ', $this->value );
46
+
47
+ $x = trim( $xy[0] );
48
+ $y = trim( $xy[1] );
49
+
50
+ // If x is not left/center/right, we need to sanitize it.
51
+ if ( ! in_array( $x, $x_dimensions ) ) {
52
+ $x = Kirki_Sanitize_Values::css_dimension( $x );
53
+ }
54
+ if ( ! in_array( $y, $y_dimensions ) ) {
55
+ $y = Kirki_Sanitize_Values::css_dimension( $y );
56
+ }
57
+ $this->value = $x . ' ' . $y;
58
+ return;
59
  }
60
+ $x = 'center';
61
+ foreach ( $x_dimensions as $x_dimension ) {
62
+ if ( false !== strpos( $this->value, $x_dimension ) ) {
63
+ $x = $x_dimension;
64
+ }
65
  }
66
+ $y = 'center';
67
+ foreach ( $y_dimensions as $y_dimension ) {
68
+ if ( false !== strpos( $this->value, $y_dimension ) ) {
69
+ $y = $y_dimension;
70
+ }
71
+ }
72
+ $this->value = $x . ' ' . $y;
73
  }
 
74
  }
 
75
  }
includes/output/property/class-kirki-output-property-font-family.php CHANGED
@@ -1,38 +1,55 @@
1
  <?php
2
-
3
- class Kirki_Output_Property_Font_Family extends Kirki_Output_Property {
4
-
5
- protected function process_value() {
6
-
7
- $google_fonts_array = Kirki_Fonts::get_google_fonts();
8
- $backup_fonts = Kirki_Fonts::get_backup_fonts();
9
-
10
- // hack for standard fonts
11
- $this->value = str_replace( '&quot;', '"', $this->value );
12
-
13
- // Add backup font
14
- if ( Kirki_Fonts::is_google_font( $this->value ) ) {
15
-
16
- if ( isset( $google_fonts_array[ $this->value ] ) && isset( $google_fonts_array[ $this->value ]['category'] ) ) {
17
- if ( isset( $backup_fonts[ $google_fonts_array[ $this->value ]['category'] ] ) ) {
18
- // add double quotes if needed
19
- if ( false !== strpos( $this->value, ' ' ) && false === strpos( $this->value, '"' ) ) {
20
- $this->value = '"' . $this->value . '", ' . $backup_fonts[ $google_fonts_array[ $this->value ]['category'] ];
21
- } else {
22
- $this->value .= ', ' . $backup_fonts[ $google_fonts_array[ $this->value ]['category'] ];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  }
24
  }
25
- }
26
-
27
- } else {
28
 
29
- // add double quotes if needed
30
- if ( false !== strpos( $this->value, ' ' ) && false === strpos( $this->value, '"' ) ) {
31
- $this->value = '"' . $this->value . '"';
 
32
  }
33
-
34
  }
35
-
36
  }
37
-
38
  }
1
  <?php
2
+ /**
3
+ * Handles CSS output for font-family.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
+
12
+ if ( ! class_exists( 'Kirki_Output_Property_Font_Family' ) ) {
13
+
14
+ /**
15
+ * Output overrides.
16
+ */
17
+ class Kirki_Output_Property_Font_Family extends Kirki_Output_Property {
18
+
19
+ /**
20
+ * Modifies the value.
21
+ *
22
+ * @access protected
23
+ */
24
+ protected function process_value() {
25
+
26
+ $google_fonts_array = Kirki_Fonts::get_google_fonts();
27
+ $backup_fonts = Kirki_Fonts::get_backup_fonts();
28
+
29
+ // Hack for standard fonts.
30
+ $this->value = str_replace( '&quot;', '"', $this->value );
31
+
32
+ // Add backup font.
33
+ if ( Kirki_Fonts::is_google_font( $this->value ) ) {
34
+
35
+ if ( isset( $google_fonts_array[ $this->value ] ) && isset( $google_fonts_array[ $this->value ]['category'] ) ) {
36
+ if ( isset( $backup_fonts[ $google_fonts_array[ $this->value ]['category'] ] ) ) {
37
+
38
+ // Add double quotes if needed.
39
+ if ( false !== strpos( $this->value, ' ' ) && false === strpos( $this->value, '"' ) ) {
40
+ $this->value = '"' . $this->value . '", ' . $backup_fonts[ $google_fonts_array[ $this->value ]['category'] ];
41
+ } else {
42
+ $this->value .= ', ' . $backup_fonts[ $google_fonts_array[ $this->value ]['category'] ];
43
+ }
44
  }
45
  }
46
+ } else {
 
 
47
 
48
+ // Add double quotes if needed.
49
+ if ( false !== strpos( $this->value, ' ' ) && false === strpos( $this->value, '"' ) ) {
50
+ $this->value = '"' . $this->value . '"';
51
+ }
52
  }
 
53
  }
 
54
  }
 
55
  }
includes/output/property/class-kirki-output-property.php CHANGED
@@ -1,22 +1,67 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Output_Property {
4
 
5
- protected $property;
6
- protected $value;
 
 
7
 
8
- public function __construct( $property, $value ) {
9
- $this->property = $property;
10
- $this->value = $value;
11
- $this->process_value();
12
- }
 
 
13
 
14
- protected function process_value() {
 
 
 
 
 
 
15
 
16
- }
 
 
 
 
 
 
 
 
 
 
 
17
 
18
- public function get_value() {
19
- return $this->value;
20
- }
 
 
 
21
 
 
 
 
 
 
 
 
 
 
 
 
22
  }
1
  <?php
2
+ /**
3
+ * Handles CSS properties.
4
+ * Extend this class in order to handle exceptions.
5
+ *
6
+ * @package Kirki
7
+ * @subpackage Controls
8
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 2.2.0
11
+ */
12
 
13
+ if ( ! class_exists( 'Kirki_Output_Property' ) ) {
14
 
15
+ /**
16
+ * Output for CSS properties.
17
+ */
18
+ class Kirki_Output_Property {
19
 
20
+ /**
21
+ * The property we're modifying.
22
+ *
23
+ * @access protected
24
+ * @var string
25
+ */
26
+ protected $property;
27
 
28
+ /**
29
+ * The value
30
+ *
31
+ * @access protected
32
+ * @var string|array
33
+ */
34
+ protected $value;
35
 
36
+ /**
37
+ * Constructor.
38
+ *
39
+ * @access public
40
+ * @param string $property The CSS property we're modifying.
41
+ * @param mixed $value The value.
42
+ */
43
+ public function __construct( $property, $value ) {
44
+ $this->property = $property;
45
+ $this->value = $value;
46
+ $this->process_value();
47
+ }
48
 
49
+ /**
50
+ * Modifies the value.
51
+ *
52
+ * @access protected
53
+ */
54
+ protected function process_value() {
55
 
56
+ }
57
+
58
+ /**
59
+ * Gets the value.
60
+ *
61
+ * @access protected
62
+ */
63
+ public function get_value() {
64
+ return $this->value;
65
+ }
66
+ }
67
  }
includes/panels/class-kirki-panels-default-panel.php CHANGED
@@ -1,7 +1,29 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Panels_Default_Panel extends WP_Customize_Panel {
4
 
5
- public $type = 'kirki-default';
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  }
1
  <?php
2
+ /**
3
+ * The default panel.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Panels_Default_Panel' ) ) {
13
 
14
+ /**
15
+ * Default Panel.
16
+ */
17
+ class Kirki_Panels_Default_Panel extends WP_Customize_Panel {
18
+
19
+ /**
20
+ * The panel type.
21
+ *
22
+ * @access public
23
+ * @var string
24
+ */
25
+ public $type = 'kirki-default';
26
+
27
+ }
28
 
29
  }
includes/panels/class-kirki-panels-expanded-panel.php CHANGED
@@ -1,29 +1,66 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Panels_Expanded_Panel extends WP_Customize_Panel {
4
 
5
- public $type = 'kirki-expanded';
 
 
 
6
 
7
- protected function render_template() {
8
- ?>
9
- <li id="accordion-panel-{{ data.id }}" class="control-section control-panel control-panel-{{ data.type }}">
10
- <ul class="accordion-sub-container control-panel-content"></ul>
11
- </li>
12
- <?php
13
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
- protected function content_template() {
16
- ?>
17
- <li class="panel-meta customize-info accordion-section <# if ( ! data.description ) { #> cannot-expand<# } #>">
18
- <div class="accordion-section-title">
19
- <strong class="panel-title">{{ data.title }}</strong>
20
- </div>
21
- <# if ( data.description ) { #>
22
- <div class="description customize-panel-description">
23
- {{{ data.description }}}
 
 
 
 
24
  </div>
25
- <# } #>
26
- </li>
27
- <?php
 
 
 
 
 
28
  }
29
  }
1
  <?php
2
+ /**
3
+ * An expanded panel.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Panels_Expanded_Panel' ) ) {
13
 
14
+ /**
15
+ * Expanded Panel.
16
+ */
17
+ class Kirki_Panels_Expanded_Panel extends WP_Customize_Panel {
18
 
19
+ /**
20
+ * The panel type.
21
+ *
22
+ * @access public
23
+ * @var string
24
+ */
25
+ public $type = 'kirki-expanded';
26
+
27
+ /**
28
+ * An Underscore (JS) template for rendering this panel's container.
29
+ * Class variables for this panel class are available in the `data` JS object;
30
+ * export custom variables by overriding WP_Customize_Panel::json().
31
+ *
32
+ * @see WP_Customize_Panel::print_template()
33
+ * @access protected
34
+ */
35
+ protected function render_template() {
36
+ ?>
37
+ <li id="accordion-panel-{{ data.id }}" class="control-section control-panel control-panel-{{ data.type }}">
38
+ <ul class="accordion-sub-container control-panel-content"></ul>
39
+ </li>
40
+ <?php
41
+ }
42
 
43
+ /**
44
+ * An Underscore (JS) template for this panel's content (but not its container).
45
+ * Class variables for this panel class are available in the `data` JS object;
46
+ * export custom variables by overriding WP_Customize_Panel::json().
47
+ *
48
+ * @see WP_Customize_Panel::print_template()
49
+ * @access protected
50
+ */
51
+ protected function content_template() {
52
+ ?>
53
+ <li class="panel-meta customize-info accordion-section <# if ( ! data.description ) { #> cannot-expand<# } #>">
54
+ <div class="accordion-section-title">
55
+ <strong class="panel-title">{{ data.title }}</strong>
56
  </div>
57
+ <# if ( data.description ) { #>
58
+ <div class="description customize-panel-description">
59
+ {{{ data.description }}}
60
+ </div>
61
+ <# } #>
62
+ </li>
63
+ <?php
64
+ }
65
  }
66
  }
includes/scripts/class-kirki-scripts-icons.php CHANGED
@@ -6,27 +6,37 @@
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
- * @since 1.0
11
  */
12
 
13
- // Exit if accessed directly
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Scripts_Icons' ) ) {
19
 
 
 
 
20
  class Kirki_Scripts_Icons {
21
 
22
  /**
23
- * string.
24
  * The script generated for ALL fields
 
 
 
 
25
  */
26
  public static $icons_script = '';
 
27
  /**
28
- * boolean.
29
  * Whether the script has already been added to the customizer or not.
 
 
 
 
30
  */
31
  public static $script_added = false;
32
 
@@ -41,7 +51,9 @@ if ( ! class_exists( 'Kirki_Scripts_Icons' ) ) {
41
  * This works on a per-field basis.
42
  * Once created, the script is added to the $icons_script property.
43
  *
44
- * @param array the field definition
 
 
45
  * @return void
46
  */
47
  public static function generate_script( $args = array() ) {
@@ -53,6 +65,7 @@ if ( ! class_exists( 'Kirki_Scripts_Icons' ) ) {
53
  if ( ! isset( $args['icon'] ) || '' == $args['icon'] ) {
54
  return;
55
  }
 
56
  /**
57
  * If this is not a panel or section
58
  * then no need to proceed.
@@ -60,6 +73,7 @@ if ( ! class_exists( 'Kirki_Scripts_Icons' ) ) {
60
  if ( ! isset( $args['context'] ) || ! in_array( $args['context'], array( 'panel', 'section' ) ) ) {
61
  return;
62
  }
 
63
  /**
64
  * If the panel or section ID is not defined
65
  * then early exit.
@@ -83,15 +97,12 @@ if ( ! class_exists( 'Kirki_Scripts_Icons' ) ) {
83
 
84
  /**
85
  * Format the script in a way that will be compatible with WordPress.
86
- *
87
- * @return void (echoes the script)
88
  */
89
  public function enqueue_script() {
90
  if ( ! self::$script_added && '' != self::$icons_script ) {
91
  self::$script_added = true;
92
- echo '<script>jQuery(document).ready(function($) { "use strict"; ' . self::$icons_script . '});</script>';
93
  }
94
  }
95
-
96
  }
97
  }
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 2.0
11
  */
12
 
13
+ // Exit if accessed directly.
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Scripts_Icons' ) ) {
19
 
20
+ /**
21
+ * Adds scripts for icons in sections & panels.
22
+ */
23
  class Kirki_Scripts_Icons {
24
 
25
  /**
 
26
  * The script generated for ALL fields
27
+ *
28
+ * @static
29
+ * @access public
30
+ * @var string
31
  */
32
  public static $icons_script = '';
33
+
34
  /**
 
35
  * Whether the script has already been added to the customizer or not.
36
+ *
37
+ * @static
38
+ * @access public
39
+ * @var bool
40
  */
41
  public static $script_added = false;
42
 
51
  * This works on a per-field basis.
52
  * Once created, the script is added to the $icons_script property.
53
  *
54
+ * @static
55
+ * @access public
56
+ * @param array $args The field definition.
57
  * @return void
58
  */
59
  public static function generate_script( $args = array() ) {
65
  if ( ! isset( $args['icon'] ) || '' == $args['icon'] ) {
66
  return;
67
  }
68
+
69
  /**
70
  * If this is not a panel or section
71
  * then no need to proceed.
73
  if ( ! isset( $args['context'] ) || ! in_array( $args['context'], array( 'panel', 'section' ) ) ) {
74
  return;
75
  }
76
+
77
  /**
78
  * If the panel or section ID is not defined
79
  * then early exit.
97
 
98
  /**
99
  * Format the script in a way that will be compatible with WordPress.
 
 
100
  */
101
  public function enqueue_script() {
102
  if ( ! self::$script_added && '' != self::$icons_script ) {
103
  self::$script_added = true;
104
+ echo '<script>jQuery(document).ready(function($) { "use strict"; ' . wp_kses_post( self::$icons_script ) . '});</script>';
105
  }
106
  }
 
107
  }
108
  }
includes/scripts/class-kirki-scripts-loading.php CHANGED
@@ -1,24 +1,39 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Scripts_Loading' ) ) {
4
 
 
 
 
5
  class Kirki_Scripts_Loading {
6
 
 
 
 
 
 
7
  public function __construct() {
8
  global $wp_customize;
9
  if ( ! $wp_customize ) {
10
  return;
11
  }
12
- /**
13
- * Allow disabling the custom loader using the kirki/config filter
14
- */
15
  $config = apply_filters( 'kirki/config', array() );
16
  if ( isset( $config['disable_loader'] ) && true === $config['disable_loader'] ) {
17
  return;
18
  }
19
- /**
20
- * Add the "loading" icon
21
- */
22
  add_action( 'wp_footer', array( $this, 'add_loader_to_footer' ) );
23
  add_action( 'wp_head', array( $this, 'add_loader_styles_to_header' ), 99 );
24
  $this->remove_default_loading_styles();
@@ -26,15 +41,24 @@ if ( ! class_exists( 'Kirki_Scripts_Loading' ) ) {
26
 
27
  /**
28
  * Adds a custom "loading" div $ its styles when changes are made to the customizer.
 
 
29
  */
30
- public function add_loader_to_footer() { ?>
 
31
  <div class="kirki-customizer-loading-wrapper">
32
  <span class="kirki-customizer-loading"></span>
33
  </div>
34
  <?php
35
  }
36
 
37
- public function add_loader_styles_to_header() { ?>
 
 
 
 
 
 
38
  <style>
39
  body.wp-customizer-unloading {
40
  opacity: 1;
@@ -57,7 +81,7 @@ if ( ! class_exists( 'Kirki_Scripts_Loading' ) ) {
57
  opacity: 0;
58
  -webkit-transition: opacity 0.5s;
59
  transition: opacity 0.5s;
60
- background-image: url("<?php echo Kirki::$url; ?>/assets/images/kirki-logo.svg");
61
  background-repeat: no-repeat;
62
  background-position: center center;
63
  }
@@ -99,11 +123,14 @@ if ( ! class_exists( 'Kirki_Scripts_Loading' ) ) {
99
  <?php
100
  }
101
 
 
 
 
 
 
102
  public function remove_default_loading_styles() {
103
  global $wp_customize;
104
  remove_action( 'wp_head', array( $wp_customize, 'customize_preview_loading_style' ) );
105
  }
106
-
107
  }
108
-
109
  }
1
  <?php
2
+ /**
3
+ * Adds a custom loading icon when the previewer refreshes.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Scripts_Loading' ) ) {
13
 
14
+ /**
15
+ * Modifies the loading overlay.
16
+ */
17
  class Kirki_Scripts_Loading {
18
 
19
+ /**
20
+ * Constructor.
21
+ *
22
+ * @access public
23
+ */
24
  public function __construct() {
25
  global $wp_customize;
26
  if ( ! $wp_customize ) {
27
  return;
28
  }
29
+
30
+ // Allow disabling the custom loader using the kirki/config filter.
 
31
  $config = apply_filters( 'kirki/config', array() );
32
  if ( isset( $config['disable_loader'] ) && true === $config['disable_loader'] ) {
33
  return;
34
  }
35
+
36
+ // Add the "loading" icon.
 
37
  add_action( 'wp_footer', array( $this, 'add_loader_to_footer' ) );
38
  add_action( 'wp_head', array( $this, 'add_loader_styles_to_header' ), 99 );
39
  $this->remove_default_loading_styles();
41
 
42
  /**
43
  * Adds a custom "loading" div $ its styles when changes are made to the customizer.
44
+ *
45
+ * @access public
46
  */
47
+ public function add_loader_to_footer() {
48
+ ?>
49
  <div class="kirki-customizer-loading-wrapper">
50
  <span class="kirki-customizer-loading"></span>
51
  </div>
52
  <?php
53
  }
54
 
55
+ /**
56
+ * Adds the loader CSS to our `<head>`.
57
+ *
58
+ * @access public
59
+ */
60
+ public function add_loader_styles_to_header() {
61
+ ?>
62
  <style>
63
  body.wp-customizer-unloading {
64
  opacity: 1;
81
  opacity: 0;
82
  -webkit-transition: opacity 0.5s;
83
  transition: opacity 0.5s;
84
+ background-image: url("<?php echo esc_url_raw( Kirki::$url ); ?>/assets/images/kirki-logo.svg");
85
  background-repeat: no-repeat;
86
  background-position: center center;
87
  }
123
  <?php
124
  }
125
 
126
+ /**
127
+ * Removes the default loader styles from WP Core.
128
+ *
129
+ * @access public
130
+ */
131
  public function remove_default_loading_styles() {
132
  global $wp_customize;
133
  remove_action( 'wp_head', array( $wp_customize, 'customize_preview_loading_style' ) );
134
  }
 
135
  }
 
136
  }
includes/scripts/class-kirki-scripts-tooltips.php CHANGED
@@ -6,27 +6,37 @@
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
10
- * @since 1.0
11
  */
12
 
13
- // Exit if accessed directly
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Scripts_Tooltips' ) ) {
19
 
 
 
 
20
  class Kirki_Scripts_Tooltips {
21
 
22
  /**
23
- * string.
24
  * The script generated for ALL fields
 
 
 
 
25
  */
26
  public static $tooltip_script = '';
 
27
  /**
28
- * boolean.
29
  * Whether the script has already been added to the customizer or not.
 
 
 
 
30
  */
31
  public static $script_added = false;
32
 
@@ -42,7 +52,7 @@ if ( ! class_exists( 'Kirki_Scripts_Tooltips' ) ) {
42
  * This works on a per-field basis.
43
  * Once created, the script is added to the $tooltip_script property.
44
  *
45
- * @param array the field definition
46
  * @return void
47
  */
48
  public static function generate_script( $args = array() ) {
@@ -101,16 +111,12 @@ if ( ! class_exists( 'Kirki_Scripts_Tooltips' ) ) {
101
 
102
  /**
103
  * Format the script in a way that will be compatible with WordPress.
104
- *
105
- * @return void (echoes the script)
106
  */
107
  public function enqueue_script() {
108
  if ( ! self::$script_added && '' != self::$tooltip_script ) {
109
  self::$script_added = true;
110
- echo '<script>jQuery(document).ready(function($) { "use strict"; ' . self::$tooltip_script . '});</script>';
111
  }
112
  }
113
-
114
  }
115
-
116
  }
6
  * @category Core
7
  * @author Aristeides Stathopoulos
8
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
9
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
10
+ * @since 2.0
11
  */
12
 
13
+ // Exit if accessed directly.
14
  if ( ! defined( 'ABSPATH' ) ) {
15
  exit;
16
  }
17
 
18
  if ( ! class_exists( 'Kirki_Scripts_Tooltips' ) ) {
19
 
20
+ /**
21
+ * Adds script for tooltips.
22
+ */
23
  class Kirki_Scripts_Tooltips {
24
 
25
  /**
 
26
  * The script generated for ALL fields
27
+ *
28
+ * @static
29
+ * @access public
30
+ * @var string
31
  */
32
  public static $tooltip_script = '';
33
+
34
  /**
 
35
  * Whether the script has already been added to the customizer or not.
36
+ *
37
+ * @static
38
+ * @access public
39
+ * @var bool
40
  */
41
  public static $script_added = false;
42
 
52
  * This works on a per-field basis.
53
  * Once created, the script is added to the $tooltip_script property.
54
  *
55
+ * @param array $args The field definition.
56
  * @return void
57
  */
58
  public static function generate_script( $args = array() ) {
111
 
112
  /**
113
  * Format the script in a way that will be compatible with WordPress.
 
 
114
  */
115
  public function enqueue_script() {
116
  if ( ! self::$script_added && '' != self::$tooltip_script ) {
117
  self::$script_added = true;
118
+ echo '<script>jQuery(document).ready(function($) { "use strict"; ' . wp_kses_post( self::$tooltip_script ) . '});</script>';
119
  }
120
  }
 
121
  }
 
122
  }
includes/sections/class-kirki-sections-default-section.php CHANGED
@@ -1,52 +1,70 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Sections_Default_Section extends WP_Customize_Section {
4
-
5
- public $type = 'kirki-default';
6
 
7
  /**
8
- * An Underscore (JS) template for rendering this section.
9
- *
10
- * Class variables for this section class are available in the `data` JS object;
11
- * export custom variables by overriding WP_Customize_Section::json().
12
- *
13
- * @since 4.3.0
14
- * @access protected
15
- *
16
- * @see WP_Customize_Section::print_template()
17
  */
18
- protected function render_template() {
19
- $l10n = Kirki_l10n::get_strings();
20
- ?>
21
- <li id="accordion-section-{{ data.id }}" class="accordion-section control-section control-section-{{ data.type }}">
22
- <h3 class="accordion-section-title" tabindex="0">
23
- {{ data.title }}
24
- <span class="screen-reader-text"><?php echo $l10n['open-section']; ?></span>
25
- </h3>
26
- <ul class="accordion-section-content">
27
- <li class="customize-section-description-container">
28
- <div class="customize-section-title">
29
- <button class="customize-section-back" tabindex="-1">
30
- <span class="screen-reader-text"><?php echo $l10n['back'] ?></span>
31
- </button>
32
- <h3>
33
- <span class="customize-action">
34
- {{{ data.customizeAction }}}
35
- </span>
36
- {{ data.title }}
37
- <a href="#" class="kirki-reset-section" data-reset-section-id="{{ data.id }}">
38
- <?php echo $l10n['reset-with-icon']; ?>
39
- </a>
40
- </h3>
41
- </div>
42
- <# if ( data.description ) { #>
43
- <div class="description customize-section-description">
44
- {{{ data.description }}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  </div>
46
- <# } #>
47
- </li>
48
- </ul>
49
- </li>
50
- <?php
 
 
 
 
 
51
  }
52
  }
1
  <?php
2
+ /**
3
+ * The default section.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Sections_Default_Section' ) ) {
 
 
13
 
14
  /**
15
+ * Default Section.
 
 
 
 
 
 
 
 
16
  */
17
+ class Kirki_Sections_Default_Section extends WP_Customize_Section {
18
+
19
+ /**
20
+ * The section type.
21
+ *
22
+ * @access public
23
+ * @var string
24
+ */
25
+ public $type = 'kirki-default';
26
+
27
+ /**
28
+ * An Underscore (JS) template for rendering this section.
29
+ *
30
+ * Class variables for this section class are available in the `data` JS object;
31
+ * export custom variables by overriding WP_Customize_Section::json().
32
+ *
33
+ * @access protected
34
+ */
35
+ protected function render_template() {
36
+ $l10n = Kirki_l10n::get_strings();
37
+ ?>
38
+ <li id="accordion-section-{{ data.id }}" class="accordion-section control-section control-section-{{ data.type }}">
39
+ <h3 class="accordion-section-title" tabindex="0">
40
+ {{ data.title }}
41
+ <span class="screen-reader-text"><?php echo esc_html( $l10n['open-section'] ); ?></span>
42
+ </h3>
43
+ <ul class="accordion-section-content">
44
+ <li class="customize-section-description-container">
45
+ <div class="customize-section-title">
46
+ <button class="customize-section-back" tabindex="-1">
47
+ <span class="screen-reader-text"><?php echo esc_html( $l10n['back'] ); ?></span>
48
+ </button>
49
+ <h3>
50
+ <span class="customize-action">
51
+ {{{ data.customizeAction }}}
52
+ </span>
53
+ {{ data.title }}
54
+ <a href="#" class="kirki-reset-section" data-reset-section-id="{{ data.id }}">
55
+ <?php echo wp_kses_post( $l10n['reset-with-icon'] ); ?>
56
+ </a>
57
+ </h3>
58
  </div>
59
+ <# if ( data.description ) { #>
60
+ <div class="description customize-section-description">
61
+ {{{ data.description }}}
62
+ </div>
63
+ <# } #>
64
+ </li>
65
+ </ul>
66
+ </li>
67
+ <?php
68
+ }
69
  }
70
  }
includes/sections/class-kirki-sections-expanded-section.php CHANGED
@@ -1,27 +1,56 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Sections_Expanded_Section extends WP_Customize_Section {
4
 
5
- public $type = 'kirki-expanded';
 
 
 
6
 
7
- protected function render_template() {
8
- ?>
9
- <li id="accordion-section-{{ data.id }}" class="accordion-section control-section control-section-{{ data.type }}">
10
- <ul class="accordion-section-content">
11
- <li class="customize-section-description-container">
12
- <div class="customize-section-title">
13
- <h3>
14
- {{ data.title }}
15
- </h3>
16
- </div>
17
- <# if ( data.description ) { #>
18
- <div class="description customize-section-description">
19
- {{{ data.description }}}
 
 
 
 
 
 
 
 
 
 
 
 
20
  </div>
21
- <# } #>
22
- </li>
23
- </ul>
24
- </li>
25
- <?php
 
 
 
 
 
26
  }
27
  }
1
  <?php
2
+ /**
3
+ * An expanded section.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Sections_Expanded_Section' ) ) {
13
 
14
+ /**
15
+ * Expanded Section.
16
+ */
17
+ class Kirki_Sections_Expanded_Section extends WP_Customize_Section {
18
 
19
+ /**
20
+ * The section type.
21
+ *
22
+ * @access public
23
+ * @var string
24
+ */
25
+ public $type = 'kirki-expanded';
26
+
27
+ /**
28
+ * An Underscore (JS) template for rendering this section.
29
+ *
30
+ * Class variables for this section class are available in the `data` JS object;
31
+ * export custom variables by overriding WP_Customize_Section::json().
32
+ *
33
+ * @access protected
34
+ */
35
+ protected function render_template() {
36
+ ?>
37
+ <li id="accordion-section-{{ data.id }}" class="accordion-section control-section control-section-{{ data.type }}">
38
+ <ul class="accordion-section-content">
39
+ <li class="customize-section-description-container">
40
+ <div class="customize-section-title">
41
+ <h3>
42
+ {{ data.title }}
43
+ </h3>
44
  </div>
45
+ <# if ( data.description ) { #>
46
+ <div class="description customize-section-description">
47
+ {{{ data.description }}}
48
+ </div>
49
+ <# } #>
50
+ </li>
51
+ </ul>
52
+ </li>
53
+ <?php
54
+ }
55
  }
56
  }
includes/sections/class-kirki-sections-hover-section.php CHANGED
@@ -1,37 +1,66 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
- class Kirki_Sections_Hover_Section extends WP_Customize_Section {
4
 
5
- public $type = 'kirki-hover';
 
 
 
6
 
7
- protected function render_template() {
8
- ?>
9
- <li id="accordion-section-{{ data.id }}" class="accordion-section control-section control-section-{{ data.type }}">
10
- <h3 class="accordion-section-title" tabindex="0">
11
- {{ data.title }}
12
- <span class="screen-reader-text"><?php _e( 'Press return or enter to open this section', 'kirki' ); ?></span>
13
- </h3>
14
- <ul class="accordion-section-content">
15
- <li class="customize-section-description-container">
16
- <div class="customize-section-title">
17
- <button class="customize-section-back" tabindex="-1">
18
- <span class="screen-reader-text"><?php _e( 'Back', 'kirki' ); ?></span>
19
- </button>
20
- <h3>
21
- <span class="customize-action">
22
- {{{ data.customizeAction }}}
23
- </span>
24
- {{ data.title }}
25
- </h3>
26
- </div>
27
- <# if ( data.description ) { #>
28
- <div class="description customize-section-description">
29
- {{{ data.description }}}
 
 
 
 
 
 
 
 
 
 
 
 
30
  </div>
31
- <# } #>
32
- </li>
33
- </ul>
34
- </li>
35
- <?php
 
 
 
 
 
36
  }
37
  }
1
  <?php
2
+ /**
3
+ * Hover sections.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.2.0
10
+ */
11
 
12
+ if ( ! class_exists( 'Kirki_Sections_Hover_Section' ) ) {
13
 
14
+ /**
15
+ * Hover Section.
16
+ */
17
+ class Kirki_Sections_Hover_Section extends WP_Customize_Section {
18
 
19
+ /**
20
+ * The section type.
21
+ *
22
+ * @access public
23
+ * @var string
24
+ */
25
+ public $type = 'kirki-hover';
26
+
27
+ /**
28
+ * An Underscore (JS) template for rendering this section.
29
+ *
30
+ * Class variables for this section class are available in the `data` JS object;
31
+ * export custom variables by overriding WP_Customize_Section::json().
32
+ *
33
+ * @access protected
34
+ */
35
+ protected function render_template() {
36
+ ?>
37
+ <li id="accordion-section-{{ data.id }}" class="accordion-section control-section control-section-{{ data.type }}">
38
+ <h3 class="accordion-section-title" tabindex="0">
39
+ {{ data.title }}
40
+ <span class="screen-reader-text"><?php esc_html_e( 'Press return or enter to open this section', 'kirki' ); ?></span>
41
+ </h3>
42
+ <ul class="accordion-section-content">
43
+ <li class="customize-section-description-container">
44
+ <div class="customize-section-title">
45
+ <button class="customize-section-back" tabindex="-1">
46
+ <span class="screen-reader-text"><?php esc_html_e( 'Back', 'kirki' ); ?></span>
47
+ </button>
48
+ <h3>
49
+ <span class="customize-action">
50
+ {{{ data.customizeAction }}}
51
+ </span>
52
+ {{ data.title }}
53
+ </h3>
54
  </div>
55
+ <# if ( data.description ) { #>
56
+ <div class="description customize-section-description">
57
+ {{{ data.description }}}
58
+ </div>
59
+ <# } #>
60
+ </li>
61
+ </ul>
62
+ </li>
63
+ <?php
64
+ }
65
  }
66
  }
includes/settings/class-kirki-settings-default-setting.php CHANGED
@@ -1,7 +1,19 @@
1
  <?php
 
 
 
 
 
 
 
 
 
2
 
3
  if ( ! class_exists( 'Kirki_Settings_Default_Setting' ) ) {
4
 
 
 
 
5
  class Kirki_Settings_Default_Setting extends WP_Customize_Setting {}
6
 
7
  }
1
  <?php
2
+ /**
3
+ * Default settings class.
4
+ *
5
+ * @package Kirki
6
+ * @subpackage Controls
7
+ * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.0
10
+ */
11
 
12
  if ( ! class_exists( 'Kirki_Settings_Default_Setting' ) ) {
13
 
14
+ /**
15
+ * Default Settings
16
+ */
17
  class Kirki_Settings_Default_Setting extends WP_Customize_Setting {}
18
 
19
  }
includes/settings/class-kirki-settings-repeater-setting.php CHANGED
@@ -5,26 +5,45 @@
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9
- * @since 1.0
10
  */
11
 
12
- // Exit if accessed directly
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Settings_Repeater_Setting' ) ) {
18
 
 
 
 
19
  class Kirki_Settings_Repeater_Setting extends WP_Customize_Setting {
20
 
 
 
 
 
 
 
 
 
 
 
21
  public function __construct( $manager, $id, $args = array() ) {
22
  parent::__construct( $manager, $id, $args );
23
 
24
- // Will onvert the setting from JSON to array. Must be triggered very soon
25
  add_filter( "customize_sanitize_{$this->id}", array( $this, 'sanitize_repeater_setting' ), 10, 1 );
26
  }
27
 
 
 
 
 
 
 
28
  public function value() {
29
  $value = parent::value();
30
  if ( ! is_array( $value ) ) {
@@ -35,10 +54,10 @@ if ( ! class_exists( 'Kirki_Settings_Repeater_Setting' ) ) {
35
  }
36
 
37
  /**
38
- * Convert the JSON encoded setting coming from Customizer to an Array
39
- *
40
- * @param $value URL Encoded JSON Value
41
  *
 
 
42
  * @return array
43
  */
44
  public function sanitize_repeater_setting( $value ) {
@@ -48,7 +67,7 @@ if ( ! class_exists( 'Kirki_Settings_Repeater_Setting' ) ) {
48
  }
49
  $sanitized = ( empty( $value ) || ! is_array( $value ) ) ? array() : $value;
50
 
51
- // Make sure that every row is an array, not an object
52
  foreach ( $sanitized as $key => $_value ) {
53
  if ( empty( $_value ) ) {
54
  unset( $sanitized[ $key ] );
@@ -57,13 +76,11 @@ if ( ! class_exists( 'Kirki_Settings_Repeater_Setting' ) ) {
57
  }
58
  }
59
 
60
- // Reindex array
61
  $sanitized = array_values( $sanitized );
62
 
63
  return $sanitized;
64
 
65
  }
66
-
67
  }
68
-
69
  }
5
  * @package Kirki
6
  * @subpackage Controls
7
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
8
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
9
+ * @since 2.0
10
  */
11
 
12
+ // Exit if accessed directly.
13
  if ( ! defined( 'ABSPATH' ) ) {
14
  exit;
15
  }
16
 
17
  if ( ! class_exists( 'Kirki_Settings_Repeater_Setting' ) ) {
18
 
19
+ /**
20
+ * Repeater Settings.
21
+ */
22
  class Kirki_Settings_Repeater_Setting extends WP_Customize_Setting {
23
 
24
+ /**
25
+ * Constructor.
26
+ *
27
+ * Any supplied $args override class property defaults.
28
+ *
29
+ * @access public
30
+ * @param WP_Customize_Manager $manager The WordPress WP_Customize_Manager object.
31
+ * @param string $id A specific ID of the setting. Can be a theme mod or option name.
32
+ * @param array $args Setting arguments.
33
+ */
34
  public function __construct( $manager, $id, $args = array() ) {
35
  parent::__construct( $manager, $id, $args );
36
 
37
+ // Will onvert the setting from JSON to array. Must be triggered very soon.
38
  add_filter( "customize_sanitize_{$this->id}", array( $this, 'sanitize_repeater_setting' ), 10, 1 );
39
  }
40
 
41
+ /**
42
+ * Fetch the value of the setting.
43
+ *
44
+ * @access public
45
+ * @return mixed The value.
46
+ */
47
  public function value() {
48
  $value = parent::value();
49
  if ( ! is_array( $value ) ) {
54
  }
55
 
56
  /**
57
+ * Convert the JSON encoded setting coming from Customizer to an Array.
 
 
58
  *
59
+ * @access public
60
+ * @param string $value URL Encoded JSON Value.
61
  * @return array
62
  */
63
  public function sanitize_repeater_setting( $value ) {
67
  }
68
  $sanitized = ( empty( $value ) || ! is_array( $value ) ) ? array() : $value;
69
 
70
+ // Make sure that every row is an array, not an object.
71
  foreach ( $sanitized as $key => $_value ) {
72
  if ( empty( $_value ) ) {
73
  unset( $sanitized[ $key ] );
76
  }
77
  }
78
 
79
+ // Reindex array.
80
  $sanitized = array_values( $sanitized );
81
 
82
  return $sanitized;
83
 
84
  }
 
85
  }
 
86
  }
includes/styles/class-kirki-styles-customizer.php CHANGED
@@ -9,62 +9,146 @@
9
  * @category Core
10
  * @author Aristeides Stathopoulos
11
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
12
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
13
  * @since 1.0
14
  */
15
 
16
- // Exit if accessed directly
17
  if ( ! defined( 'ABSPATH' ) ) {
18
  exit;
19
  }
20
 
21
  if ( ! class_exists( 'Kirki_Styles_Customizer' ) ) {
22
 
 
 
 
23
  class Kirki_Styles_Customizer {
24
 
 
 
 
 
 
 
25
  public $color_back = false;
 
 
 
 
 
 
 
26
  public $color_font = false;
 
 
 
 
 
 
 
27
  public $color_accent;
 
 
 
 
 
 
 
28
  public $border_color;
 
 
 
 
 
 
 
29
  public $buttons_color;
 
 
 
 
 
 
 
30
  public $controls_color;
 
 
 
 
 
 
 
31
  public $arrows_color;
 
 
 
 
 
 
 
32
  public $color_accent_text;
 
 
 
 
 
 
 
33
  public $section_background_color;
34
 
 
 
 
 
 
 
35
  public $process = false;
36
 
 
 
 
 
 
37
  public function __construct() {
38
  add_action( 'customize_controls_print_styles', array( $this, 'customizer_styles' ), 99 );
39
  }
40
 
41
  /**
42
  * Enqueue the stylesheets required.
 
 
43
  */
44
  public function customizer_styles() {
45
  wp_enqueue_style( 'kirki-customizer-css', trailingslashit( Kirki::$url ) . 'assets/css/customizer.css', null );
46
  wp_add_inline_style( 'kirki-customizer-css', $this->custom_css() );
47
  }
48
 
 
 
 
 
 
 
49
  public function get_colors() {
50
 
51
  $config = apply_filters( 'kirki/config', array() );
52
 
53
- // No need to proceed if we haven't set any colors
54
  if ( ! isset( $config['color_back'] ) && ! isset( $config['color_accent'] ) ) {
55
  return;
56
  }
57
  if ( ! $config['color_back'] && ! $config['color_accent'] ) {
58
  return;
59
  }
60
- // set the $process to true.
61
  $this->process = true;
62
- // Calculate the accent color
63
  if ( isset( $config['color_accent'] ) ) {
64
  $this->color_accent = Kirki_Color::sanitize_hex( $config['color_accent'] );
65
  }
66
 
67
- // Calculate the background & font colors
68
  if ( isset( $config['color_back'] ) ) {
69
  $this->color_back = Kirki_Color::sanitize_hex( $config['color_back'] );
70
  $this->color_font = ( 170 > Kirki_Color::get_brightness( $this->color_back ) ) ? '#f2f2f2' : '#222';
@@ -83,7 +167,9 @@ if ( ! class_exists( 'Kirki_Styles_Customizer' ) ) {
83
 
84
 
85
  /**
86
- * Add custom CSS rules to the head, applying our custom styles
 
 
87
  */
88
  public function custom_css() {
89
 
@@ -99,12 +185,15 @@ if ( ! class_exists( 'Kirki_Styles_Customizer' ) ) {
99
  }
100
 
101
  /**
102
- * @param string $styles
 
 
 
 
103
  */
104
  public function replace_placeholders( $styles ) {
105
- /**
106
- * replace CSS placeholders with actual values
107
- */
108
  $replacements = array(
109
  'COLOR_BACK' => $this->color_back,
110
  'COLOR_ACCENT_TEXT' => $this->color_accent_text,
@@ -124,41 +213,38 @@ if ( ! class_exists( 'Kirki_Styles_Customizer' ) ) {
124
 
125
  }
126
 
 
 
 
 
 
 
127
  public function include_stylesheets() {
128
 
129
  $config = apply_filters( 'kirki/config', array() );
130
  $styles = '';
131
 
132
- /**
133
- * Include the width CSS if necessary
134
- */
135
  if ( isset( $config['width'] ) ) {
136
  $path = wp_normalize_path( Kirki::$path . '/assets/css/customizer-dynamic-css-width.php' );
137
  $styles .= include $path;
138
- /**
139
- * Replace width placeholder with actual value
140
- */
141
  $styles = str_replace( 'WIDTH', $config['width'], $styles );
142
  }
143
 
144
- /**
145
- * Include the color modifications CSS if necessary
146
- */
147
  if ( false !== $this->color_back && false !== $this->color_font ) {
148
  $path = wp_normalize_path( Kirki::$path . '/assets/css/customizer-dynamic-css-colors.php' );
149
  $styles .= include $path;
150
  }
151
 
152
- /**
153
- * Include generic CSS for controls
154
- */
155
  $path = wp_normalize_path( Kirki::$path . '/assets/css/customizer-dynamic-css.php' );
156
  $styles .= include $path;
157
 
158
  return $styles;
159
 
160
  }
161
-
162
  }
163
-
164
  }
9
  * @category Core
10
  * @author Aristeides Stathopoulos
11
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
12
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
13
  * @since 1.0
14
  */
15
 
16
+ // Exit if accessed directly.
17
  if ( ! defined( 'ABSPATH' ) ) {
18
  exit;
19
  }
20
 
21
  if ( ! class_exists( 'Kirki_Styles_Customizer' ) ) {
22
 
23
+ /**
24
+ * Adds styles to the customizer.
25
+ */
26
  class Kirki_Styles_Customizer {
27
 
28
+ /**
29
+ * Background Color.
30
+ *
31
+ * @access public
32
+ * @var string
33
+ */
34
  public $color_back = false;
35
+
36
+ /**
37
+ * Font Color.
38
+ *
39
+ * @access public
40
+ * @var string
41
+ */
42
  public $color_font = false;
43
+
44
+ /**
45
+ * Accent Color.
46
+ *
47
+ * @access public
48
+ * @var string
49
+ */
50
  public $color_accent;
51
+
52
+ /**
53
+ * Border Color.
54
+ *
55
+ * @access public
56
+ * @var string
57
+ */
58
  public $border_color;
59
+
60
+ /**
61
+ * Buttons Color.
62
+ *
63
+ * @access public
64
+ * @var string
65
+ */
66
  public $buttons_color;
67
+
68
+ /**
69
+ * Controls Color.
70
+ *
71
+ * @access public
72
+ * @var string
73
+ */
74
  public $controls_color;
75
+
76
+ /**
77
+ * Arrows Color.
78
+ *
79
+ * @access public
80
+ * @var string
81
+ */
82
  public $arrows_color;
83
+
84
+ /**
85
+ * Accent text Color.
86
+ *
87
+ * @access public
88
+ * @var string
89
+ */
90
  public $color_accent_text;
91
+
92
+ /**
93
+ * Section Background Color.
94
+ *
95
+ * @access public
96
+ * @var string
97
+ */
98
  public $section_background_color;
99
 
100
+ /**
101
+ * Have we already processed styling?
102
+ *
103
+ * @access public
104
+ * @var bool
105
+ */
106
  public $process = false;
107
 
108
+ /**
109
+ * Constructor.
110
+ *
111
+ * @access public
112
+ */
113
  public function __construct() {
114
  add_action( 'customize_controls_print_styles', array( $this, 'customizer_styles' ), 99 );
115
  }
116
 
117
  /**
118
  * Enqueue the stylesheets required.
119
+ *
120
+ * @access public
121
  */
122
  public function customizer_styles() {
123
  wp_enqueue_style( 'kirki-customizer-css', trailingslashit( Kirki::$url ) . 'assets/css/customizer.css', null );
124
  wp_add_inline_style( 'kirki-customizer-css', $this->custom_css() );
125
  }
126
 
127
+ /**
128
+ * Gets the colors used.
129
+ *
130
+ * @access public
131
+ * @return null|void
132
+ */
133
  public function get_colors() {
134
 
135
  $config = apply_filters( 'kirki/config', array() );
136
 
137
+ // No need to proceed if we haven't set any colors.
138
  if ( ! isset( $config['color_back'] ) && ! isset( $config['color_accent'] ) ) {
139
  return;
140
  }
141
  if ( ! $config['color_back'] && ! $config['color_accent'] ) {
142
  return;
143
  }
144
+ // Set the $process to true.
145
  $this->process = true;
146
+ // Calculate the accent color.
147
  if ( isset( $config['color_accent'] ) ) {
148
  $this->color_accent = Kirki_Color::sanitize_hex( $config['color_accent'] );
149
  }
150
 
151
+ // Calculate the background & font colors.
152
  if ( isset( $config['color_back'] ) ) {
153
  $this->color_back = Kirki_Color::sanitize_hex( $config['color_back'] );
154
  $this->color_font = ( 170 > Kirki_Color::get_brightness( $this->color_back ) ) ? '#f2f2f2' : '#222';
167
 
168
 
169
  /**
170
+ * Add custom CSS rules to the head, applying our custom styles.
171
+ *
172
+ * @access public
173
  */
174
  public function custom_css() {
175
 
185
  }
186
 
187
  /**
188
+ * Replaces CSS placefolders with our settings.
189
+ *
190
+ * @access public
191
+ * @param string $styles The CSS.
192
+ * @return string
193
  */
194
  public function replace_placeholders( $styles ) {
195
+
196
+ // Replace CSS placeholders with actual values.
 
197
  $replacements = array(
198
  'COLOR_BACK' => $this->color_back,
199
  'COLOR_ACCENT_TEXT' => $this->color_accent_text,
213
 
214
  }
215
 
216
+ /**
217
+ * Get the stylesheets.
218
+ *
219
+ * @access public
220
+ * @return string
221
+ */
222
  public function include_stylesheets() {
223
 
224
  $config = apply_filters( 'kirki/config', array() );
225
  $styles = '';
226
 
227
+ // Include the width CSS if necessary.
 
 
228
  if ( isset( $config['width'] ) ) {
229
  $path = wp_normalize_path( Kirki::$path . '/assets/css/customizer-dynamic-css-width.php' );
230
  $styles .= include $path;
231
+
232
+ // Replace width placeholder with actual value.
 
233
  $styles = str_replace( 'WIDTH', $config['width'], $styles );
234
  }
235
 
236
+ // Include the color modifications CSS if necessary.
 
 
237
  if ( false !== $this->color_back && false !== $this->color_font ) {
238
  $path = wp_normalize_path( Kirki::$path . '/assets/css/customizer-dynamic-css-colors.php' );
239
  $styles .= include $path;
240
  }
241
 
242
+ // Include generic CSS for controls.
 
 
243
  $path = wp_normalize_path( Kirki::$path . '/assets/css/customizer-dynamic-css.php' );
244
  $styles .= include $path;
245
 
246
  return $styles;
247
 
248
  }
 
249
  }
 
250
  }
includes/styles/class-kirki-styles-frontend.php CHANGED
@@ -8,22 +8,43 @@
8
  * @category Core
9
  * @author Aristeides Stathopoulos
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
12
  * @since 1.0
13
  */
14
 
15
- // Exit if accessed directly
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Styles_Frontend' ) ) {
 
 
 
 
21
  class Kirki_Styles_Frontend {
22
 
 
 
 
 
 
 
23
  public $processed = false;
24
 
 
 
 
 
 
 
25
  public static $css_array = array();
26
 
 
 
 
 
 
27
  public function __construct() {
28
 
29
  Kirki_Fonts_Google::get_instance();
@@ -37,21 +58,15 @@ if ( ! class_exists( 'Kirki_Styles_Frontend' ) ) {
37
  return;
38
  }
39
 
40
- // /**
41
- // * If we are in the customizer, load CSS using inline-styles.
42
- // * If we are in the frontend AND $config['inline_css'] == false
43
- // * Then load dynamic CSS using AJAX.
44
- // */
45
- // if ( ! $wp_customize && ( isset( $config['inline_css'] ) && false == $config['inline_css'] ) ) {
46
- // add_action( 'wp_enqueue_scripts', array( $this, 'frontend_styles' ), $priority );
47
- // add_action( 'wp_ajax_kirki_dynamic_css', array( $this, 'ajax_dynamic_css' ) );
48
- // add_action( 'wp_ajax_nopriv_kirki_dynamic_css', array( $this, 'ajax_dynamic_css' ) );
49
- // } else {
50
- add_action( 'wp_enqueue_scripts', array( $this, 'inline_dynamic_css' ), $priority );
51
- // }
52
 
53
  }
54
 
 
 
 
 
 
55
  public function inline_dynamic_css() {
56
  $configs = Kirki::$config;
57
  if ( ! $this->processed ) {
@@ -70,17 +85,31 @@ if ( ! class_exists( 'Kirki_Styles_Frontend' ) ) {
70
  }
71
  }
72
 
73
- // public function ajax_dynamic_css() {
74
- // require( Kirki::$path . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'dynamic-css.php' );
75
- // exit;
76
- // }
77
- //
78
- // public function frontend_styles() {
79
- // wp_enqueue_style( 'kirki-styles-php', admin_url( 'admin-ajax.php' ) . '?action=kirki_dynamic_css', null, null );
80
- // }
 
 
 
 
 
 
 
 
 
 
81
 
82
  /**
83
- * loop through all fields and create an array of style definitions
 
 
 
 
84
  */
85
  public static function loop_controls( $config_id ) {
86
 
@@ -98,21 +127,38 @@ if ( ! class_exists( 'Kirki_Styles_Frontend' ) ) {
98
 
99
  foreach ( $fields as $field ) {
100
 
101
- // Only process fields that belong to $config_id
102
  if ( $config_id != $field['kirki_config'] ) {
103
  continue;
104
  }
105
 
106
- // Only continue if $field['output'] is set
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  if ( isset( $field['output'] ) && ! empty( $field['output'] ) && 'background' != $field['type'] ) {
108
  $css = Kirki_Helper::array_replace_recursive( $css, Kirki_Styles_Output_CSS::css( $field ) );
109
- // Add the globals
 
110
  if ( isset( self::$css_array[ $config_id ] ) && ! empty( self::$css_array[ $config_id ] ) ) {
111
  Kirki_Helper::array_replace_recursive( $css, self::$css_array[ $config_id ] );
112
  }
113
-
114
  }
115
-
116
  }
117
 
118
  if ( is_array( $css ) ) {
@@ -122,6 +168,5 @@ if ( ! class_exists( 'Kirki_Styles_Frontend' ) ) {
122
  return;
123
 
124
  }
125
-
126
  }
127
  }
8
  * @category Core
9
  * @author Aristeides Stathopoulos
10
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
11
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
12
  * @since 1.0
13
  */
14
 
15
+ // Exit if accessed directly.
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
  if ( ! class_exists( 'Kirki_Styles_Frontend' ) ) {
21
+
22
+ /**
23
+ * Applies field-generated styles to the frontend.
24
+ */
25
  class Kirki_Styles_Frontend {
26
 
27
+ /**
28
+ * Whether we've already processed this or not.
29
+ *
30
+ * @access public
31
+ * @var bool
32
+ */
33
  public $processed = false;
34
 
35
+ /**
36
+ * The CSS array
37
+ *
38
+ * @access public
39
+ * @var array
40
+ */
41
  public static $css_array = array();
42
 
43
+ /**
44
+ * Constructor
45
+ *
46
+ * @access public
47
+ */
48
  public function __construct() {
49
 
50
  Kirki_Fonts_Google::get_instance();
58
  return;
59
  }
60
 
61
+ add_action( 'wp_enqueue_scripts', array( $this, 'inline_dynamic_css' ), $priority );
 
 
 
 
 
 
 
 
 
 
 
62
 
63
  }
64
 
65
+ /**
66
+ * Adds inline styles.
67
+ *
68
+ * @access public
69
+ */
70
  public function inline_dynamic_css() {
71
  $configs = Kirki::$config;
72
  if ( ! $this->processed ) {
85
  }
86
  }
87
 
88
+ /**
89
+ * Get the dynamic-css.php file
90
+ *
91
+ * @access public
92
+ */
93
+ public function ajax_dynamic_css() {
94
+ require( Kirki::$path . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'dynamic-css.php' );
95
+ exit;
96
+ }
97
+
98
+ /**
99
+ * Enqueues the ajax stylesheet.
100
+ *
101
+ * @access public
102
+ */
103
+ public function frontend_styles() {
104
+ wp_enqueue_style( 'kirki-styles-php', admin_url( 'admin-ajax.php' ) . '?action=kirki_dynamic_css', null, null );
105
+ }
106
 
107
  /**
108
+ * Loop through all fields and create an array of style definitions.
109
+ *
110
+ * @static
111
+ * @access public
112
+ * @param string $config_id The configuration ID.
113
  */
114
  public static function loop_controls( $config_id ) {
115
 
127
 
128
  foreach ( $fields as $field ) {
129
 
130
+ // Only process fields that belong to $config_id.
131
  if ( $config_id != $field['kirki_config'] ) {
132
  continue;
133
  }
134
 
135
+ // Only continue if field dependencies are met.
136
+ if ( ! empty( $field['required'] ) ) {
137
+ $valid = true;
138
+
139
+ foreach ( $field['required'] as $requirement ) {
140
+ if ( isset( $requirement['setting'] ) && isset( $requirement['value'] ) && isset( $requirement['operator'] ) ) {
141
+ $controller_value = Kirki::get_option( $requirement['setting'] );
142
+ if ( ! Kirki_Active_Callback::compare( $controller_value, $requirement['value'], $requirement['operator'] ) ) {
143
+ $valid = false;
144
+ }
145
+ }
146
+ }
147
+
148
+ if ( ! $valid ) {
149
+ continue;
150
+ }
151
+ }
152
+
153
+ // Only continue if $field['output'] is set.
154
  if ( isset( $field['output'] ) && ! empty( $field['output'] ) && 'background' != $field['type'] ) {
155
  $css = Kirki_Helper::array_replace_recursive( $css, Kirki_Styles_Output_CSS::css( $field ) );
156
+
157
+ // Add the globals.
158
  if ( isset( self::$css_array[ $config_id ] ) && ! empty( self::$css_array[ $config_id ] ) ) {
159
  Kirki_Helper::array_replace_recursive( $css, self::$css_array[ $config_id ] );
160
  }
 
161
  }
 
162
  }
163
 
164
  if ( is_array( $css ) ) {
168
  return;
169
 
170
  }
 
171
  }
172
  }
includes/styles/class-kirki-styles-output-css.php CHANGED
@@ -7,31 +7,110 @@
7
  * @category Core
8
  * @author Aristeides Stathopoulos
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
11
  * @since 1.0
12
  */
13
 
14
- // Exit if accessed directly
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
 
 
 
 
20
  final class Kirki_Styles_Output_CSS {
21
 
 
 
 
 
 
 
 
22
  public static $instance = null;
23
 
 
 
 
 
 
 
 
24
  public static $settings = null;
 
 
 
 
 
 
 
 
25
  public static $output = array();
 
 
 
 
 
 
 
 
26
  public static $callback = null;
 
 
 
 
 
 
 
 
27
  public static $option_name = null;
 
 
 
 
 
 
 
 
28
  public static $field_type = null;
29
 
 
 
 
 
 
 
 
30
  public static $google_fonts = null;
 
 
 
 
 
 
 
 
31
  public static $backup_fonts = null;
32
 
 
 
 
 
 
 
 
33
  public static $css;
34
 
 
 
 
 
 
 
 
35
  public static $value = null;
36
 
37
  /**
@@ -59,19 +138,16 @@ if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
59
  }
60
 
61
  /**
62
- * get the CSS for a field
63
- *
64
- * @var string the setting ID.
65
- * @var string theme_mod / option
66
- * @var array an array of arrays of the output arguments.
67
- * @var mixed a callable function.
68
  *
 
 
 
69
  * @return array
70
  */
71
  public static function css( $field ) {
72
- /**
73
- * Set class vars
74
- */
75
  self::$settings = $field['settings'];
76
  self::$callback = $field['sanitize_callback'];
77
  self::$field_type = $field['type'];
@@ -84,14 +160,11 @@ if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
84
  ),
85
  );
86
  }
87
- /**
88
- * Get the value of this field
89
- */
90
  self::$value = Kirki_Values::get_sanitized_field_value( $field );
91
 
92
- /**
93
- * Find the class that will handle the outpout for this field
94
- */
95
  $classname = 'Kirki_Output';
96
  $field_output_classes = apply_filters( 'kirki/' . $field['kirki_config'] . '/output/control-classnames', array(
97
  'spacing' => 'Kirki_Output_Field_Spacing',
@@ -107,16 +180,16 @@ if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
107
  }
108
 
109
  /**
110
- * Gets the array of generated styles and creates the minimized, inline CSS
111
  *
112
- * @param array
113
- * @return string the generated CSS.
 
 
114
  */
115
  public static function styles_parse( $css = array() ) {
116
 
117
- /**
118
- * Process the array of CSS properties and produce the final CSS
119
- */
120
  $final_css = '';
121
  if ( ! is_array( $css ) || empty( $css ) ) {
122
  return '';
@@ -139,8 +212,8 @@ if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
139
  /**
140
  * Add prefixes if necessary.
141
  *
142
- * @param $css array
143
- * @return array
144
  */
145
  public static function add_prefixes( $css ) {
146
 
@@ -148,9 +221,8 @@ if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
148
  foreach ( $css as $media_query => $elements ) {
149
  foreach ( $elements as $element => $style_array ) {
150
  foreach ( $style_array as $property => $value ) {
151
- /**
152
- * Add -webkit-* and -mod-*
153
- */
154
  if ( is_string( $property ) && in_array( $property, array(
155
  'border-radius',
156
  'box-shadow',
@@ -164,9 +236,8 @@ if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
164
  $css[ $media_query ][ $element ][ '-webkit-' . $property ] = $value;
165
  $css[ $media_query ][ $element ][ '-moz-' . $property ] = $value;
166
  }
167
- /**
168
- * Add -ms-* and -o-*
169
- */
170
  if ( is_string( $property ) && in_array( $property, array(
171
  'transform',
172
  'background-size',
@@ -184,6 +255,5 @@ if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
184
  return $css;
185
 
186
  }
187
-
188
  }
189
  }
7
  * @category Core
8
  * @author Aristeides Stathopoulos
9
  * @copyright Copyright (c) 2016, Aristeides Stathopoulos
10
+ * @license http://opensource.org/licenses/https://opensource.org/licenses/MIT
11
  * @since 1.0
12
  */
13
 
14
+ // Exit if accessed directly.
15
  if ( ! defined( 'ABSPATH' ) ) {
16
  exit;
17
  }
18
 
19
  if ( ! class_exists( 'Kirki_Styles_Output_CSS' ) ) {
20
+
21
+ /**
22
+ * Handles CSS output.
23
+ */
24
  final class Kirki_Styles_Output_CSS {
25
 
26
+ /**
27
+ * The instance of this class (singleton pattern).
28
+ *
29
+ * @static
30
+ * @access public
31
+ * @var null|object
32
+ */
33
  public static $instance = null;
34
 
35
+ /**
36
+ * Settings.
37
+ *
38
+ * @static
39
+ * @access public
40
+ * @var null|string|array
41
+ */
42
  public static $settings = null;
43
+
44
+ /**
45
+ * Output.
46
+ *
47
+ * @static
48
+ * @access public
49
+ * @var array
50
+ */
51
  public static $output = array();
52
+
53
+ /**
54
+ * Callback.
55
+ *
56
+ * @static
57
+ * @access public
58
+ * @var null|string|array
59
+ */
60
  public static $callback = null;
61
+
62
+ /**
63
+ * Option Name.
64
+ *
65
+ * @static
66
+ * @access public
67
+ * @var null|string
68
+ */
69
  public static $option_name = null;
70
+
71
+ /**
72
+ * Field Type.
73
+ *
74
+ * @static
75
+ * @access public
76
+ * @var string
77
+ */
78
  public static $field_type = null;
79
 
80
+ /**
81
+ * Google Fonts
82
+ *
83
+ * @static
84
+ * @access public
85
+ * @var array
86
+ */
87
  public static $google_fonts = null;
88
+
89
+ /**
90
+ * Standard Fonts
91
+ *
92
+ * @static
93
+ * @access public
94
+ * @var array
95
+ */
96
  public static $backup_fonts = null;
97
 
98
+ /**
99
+ * CSS
100
+ *
101
+ * @static
102
+ * @access public
103
+ * @var string
104
+ */
105
  public static $css;
106
 
107
+ /**
108
+ * Value
109
+ *
110
+ * @static
111
+ * @access public
112
+ * @var mixed
113
+ */
114
  public static $value = null;
115
 
116
  /**
138
  }
139
 
140
  /**
141
+ * Get the CSS for a field.
 
 
 
 
 
142
  *
143
+ * @static
144
+ * @access public
145
+ * @param array $field The field.
146
  * @return array
147
  */
148
  public static function css( $field ) {
149
+
150
+ // Set class vars.
 
151
  self::$settings = $field['settings'];
152
  self::$callback = $field['sanitize_callback'];
153
  self::$field_type = $field['type'];
160
  ),
161
  );
162
  }
163
+
164
+ // Get the value of this field.
 
165
  self::$value = Kirki_Values::get_sanitized_field_value( $field );
166
 
167
+ // Find the class that will handle the outpout for this field.
 
 
168
  $classname = 'Kirki_Output';
169
  $field_output_classes = apply_filters( 'kirki/' . $field['kirki_config'] . '/output/control-classnames', array(
170
  'spacing' => 'Kirki_Output_Field_Spacing',
180
  }
181
 
182
  /**
183
+ * Gets the array of generated styles and creates the minimized, inline CSS.
184
  *
185
+ * @static
186
+ * @access public
187
+ * @param array $css The CSS definitions array.
188
+ * @return string The generated CSS.
189
  */
190
  public static function styles_parse( $css = array() ) {
191
 
192
+ // Process the array of CSS properties and produce the final CSS.
 
 
193
  $final_css = '';
194
  if ( ! is_array( $css ) || empty( $css ) ) {
195
  return '';
212
  /**
213
  * Add prefixes if necessary.
214
  *
215
+ * @param array $css The CSS definitions array.
216
+ * @return array
217
  */
218
  public static function add_prefixes( $css ) {
219
 
221
  foreach ( $css as $media_query => $elements ) {
222
  foreach ( $elements as $element => $style_array ) {
223
  foreach ( $style_array as $property => $value ) {
224
+
225
+ // Add -webkit-* and -mod-*.
 
226
  if ( is_string( $property ) && in_array( $property, array(
227
  'border-radius',
228
  'box-shadow',
236
  $css[ $media_query ][ $element ][ '-webkit-' . $property ] = $value;
237
  $css[ $media_query ][ $element ][ '-moz-' . $property ] = $value;
238
  }
239
+
240
+ // Add -ms-* and -o-*.
 
241
  if ( is_string( $property ) && in_array( $property, array(
242
  'transform',
243
  'background-size',
255
  return $css;
256
 
257
  }
 
258
  }
259
  }
includes/webfonts.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
 
3
- return array("kind" => "webfonts#webfontList", "items" => array(array("kind" => "webfonts#webfont", "family" => "ABeeZee", "category" => "sans-serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/abeezee/v9/mE5BOuZKGln_Ex0uYKpIaw.ttf", "italic" => "http://fonts.gstatic.com/s/abeezee/v9/kpplLynmYgP0YtlJA3atRw.ttf")), array("kind" => "webfonts#webfont", "family" => "Abel", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/abel/v6/RpUKfqNxoyNe_ka23bzQ2A.ttf")), array("kind" => "webfonts#webfont", "family" => "Abril Fatface", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/abrilfatface/v8/X1g_KwGeBV3ajZIXQ9VnDojjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Aclonica", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aclonica/v6/M6pHZMPwK3DiBSlo3jwAKQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Acme", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/acme/v5/-J6XNtAHPZBEbsifCdBt-g.ttf")), array("kind" => "webfonts#webfont", "family" => "Actor", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/actor/v6/ugMf40CrRK6Jf6Yz_xNSmQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Adamina", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/adamina/v8/RUQfOodOMiVVYqFZcSlT9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Advent Pro", "category" => "sans-serif", "variants" => array("100", "200", "300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "latin", "greek"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/adventpro/v4/87-JOpSUecTG50PBYK4ysi3USBnSvpkopQaUR-2r7iU.ttf", "200" => "http://fonts.gstatic.com/s/adventpro/v4/URTSSjIp0Wr-GrjxFdFWnGeudeTO44zf-ht3k-KNzwg.ttf", "300" => "http://fonts.gstatic.com/s/adventpro/v4/sJaBfJYSFgoB80OL1_66m0eOrDcLawS7-ssYqLr2Xp4.ttf", "500" => "http://fonts.gstatic.com/s/adventpro/v4/7kBth2-rT8tP40RmMMXMLJp-63r6doWhTEbsfBIRJ7A.ttf", "600" => "http://fonts.gstatic.com/s/adventpro/v4/3Jo-2maCzv2QLzQBzaKHV_pTEJqju4Hz1txDWij77d4.ttf", "700" => "http://fonts.gstatic.com/s/adventpro/v4/M4I6QiICt-ey_wZTpR2gKwJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/adventpro/v4/1NxMBeKVcNNH2H46AUR3wfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Aguafina Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aguafinascript/v5/65g7cgMtMGnNlNyq_Z6CvMxLhO8OSNnfAp53LK1_iRs.ttf")), array("kind" => "webfonts#webfont", "family" => "Akronim", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/akronim/v5/qA0L2CSArk3tuOWE1AR1DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Aladin", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aladin/v5/PyuJ5cVHkduO0j5fAMKvAA.ttf")), array("kind" => "webfonts#webfont", "family" => "Aldrich", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aldrich/v6/kMMW1S56gFx7RP_mW1g-Eg.ttf")), array("kind" => "webfonts#webfont", "family" => "Alef", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("hebrew", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/alef/v6/VDgZJhEwudtOzOFQpZ8MEA.ttf", "regular" => "http://fonts.gstatic.com/s/alef/v6/ENvZ_P0HBDQxNZYCQO0lUA.ttf")), array("kind" => "webfonts#webfont", "family" => "Alegreya", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/alegreya/v7/5oZtdI5-wQwgAFrd9erCsaCWcynf_cDxXwCLxiixG1c.ttf", "900" => "http://fonts.gstatic.com/s/alegreya/v7/oQeMxX-vxGImzDgX6nxA7KCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/alegreya/v7/62J3atXd6bvMU4qO_ca-eA.ttf", "italic" => "http://fonts.gstatic.com/s/alegreya/v7/cbshnQGxwmlHBjUil7DaIfesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/alegreya/v7/IWi8e5bpnqhMRsZKTcTUWgJKKGfqHaYFsRG-T3ceEVo.ttf", "900italic" => "http://fonts.gstatic.com/s/alegreya/v7/-L71QLH_XqgYWaI1GbOVhp0EAVxt0G0biEntp43Qt6E.ttf")), array("kind" => "webfonts#webfont", "family" => "Alegreya SC", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/alegreyasc/v6/M9OIREoxDkvynwTpBAYUq3e1Pd76Vl7zRpE7NLJQ7XU.ttf", "900" => "http://fonts.gstatic.com/s/alegreyasc/v6/M9OIREoxDkvynwTpBAYUqyenaqEuufTBk9XMKnKmgDA.ttf", "regular" => "http://fonts.gstatic.com/s/alegreyasc/v6/3ozeFnTbygMK6PfHh8B-iqCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/alegreyasc/v6/GOqmv3FLsJ2r6ZALMZVBmkeOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/alegreyasc/v6/5PCoU7IUfCicpKBJtBmP6c_zJjSACmk0BRPxQqhnNLU.ttf", "900italic" => "http://fonts.gstatic.com/s/alegreyasc/v6/5PCoU7IUfCicpKBJtBmP6U_yTOUGsoC54csJe1b-IRw.ttf")), array("kind" => "webfonts#webfont", "family" => "Alegreya Sans", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("vietnamese", "latin-ext", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/alegreyasans/v3/TKyx_-JJ6MdpQruNk-t-PJFGFO4uyVFMfB6LZsii7kI.ttf", "300" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9acB1LjARzAvdqa1uQC32v70.ttf", "500" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9aQqQmZ7VjhwksfpNVG0pqGc.ttf", "700" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9aVCbmAUID8LN-q3pJpOk3Ys.ttf", "800" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9acxnD5BewVtRRHHljCwR2bM.ttf", "900" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9aW42xlVP-j5dagE7-AU2zwg.ttf", "100italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/gRkSP2lBpqoMTVxg7DmVn2cDnjsrnI9_xJ-5gnBaHsE.ttf", "300italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9CnfqlVoxTUFFx1C8tBqmbcg.ttf", "regular" => "http://fonts.gstatic.com/s/alegreyasans/v3/KYNzioYhDai7mTMnx_gDgn8f0n03UdmQgF_CLvNR2vg.ttf", "italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/TKyx_-JJ6MdpQruNk-t-PD4G9C9ttb0Oz5Cvf0qOitE.ttf", "500italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9Cs7DCVO6wo6i5LKIyZDzK40.ttf", "700italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9CpF66r9C4AnxxlBlGd7xY4g.ttf", "800italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9CicOAJ_9MkLPbDmrtXDPbIU.ttf", "900italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9ChRaDUI9aE8-k7PrIG2iiuo.ttf")), array("kind" => "webfonts#webfont", "family" => "Alegreya Sans SC", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("vietnamese", "latin-ext", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/trwFkDJLOJf6hqM93944kVnzStfdnFU-MXbO84aBs_M.ttf", "300" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR46-1IqtfxJspFjzJp0SaQRcI.ttf", "500" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR46_hHTluI57wqxl55RvSYo3s.ttf", "700" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR4600aId5t1FC-xZ8nmpa_XLk.ttf", "800" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR46wQgSHD3Lo1Mif2Wkk5swWA.ttf", "900" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR461Rf9EWUSEX_PR1d_gLKfpM.ttf", "100italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/qG3gA9iy5RpXMH4crZboqqakMVR0XlJhO7VdJ8yYvA4.ttf", "300italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0CnTKaH808trtzttbEg4yVA.ttf", "regular" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/6kgb6ZvOagoVIRZyl8XV-EklWX-XdLVn1WTiuGuvKIU.ttf", "italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/trwFkDJLOJf6hqM93944kTfqo69HNOlCNZvbwAmUtiA.ttf", "500italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0NqVvxKdFVwqwzilqfVd39U.ttf", "700italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0IBYn3VD6xMEnodOh8pnFw4.ttf", "800italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0HStmCm6Rs90XeztCALm0H8.ttf", "900italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0IvtwEfTCJoOJugANj-jWDI.ttf")), array("kind" => "webfonts#webfont", "family" => "Alex Brush", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alexbrush/v6/ooh3KJFbKJSUoIRWfiu8o_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Alfa Slab One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alfaslabone/v5/Qx6FPcitRwTC_k88tLPc-Yjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Alice", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alice/v7/wZTAfivekBqIg-rk63nFvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Alike", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alike/v8/Ho8YpRKNk_202fwDiGNIyw.ttf")), array("kind" => "webfonts#webfont", "family" => "Alike Angular", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alikeangular/v6/OpeCu4xxI3qO1C7CZcJtPT3XH2uEnVI__ynTBvNyki8.ttf")), array("kind" => "webfonts#webfont", "family" => "Allan", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/allan/v7/zSxQiwo7wgnr7KkMXhSiag.ttf", "regular" => "http://fonts.gstatic.com/s/allan/v7/T3lemhgZmLQkQI2Qc2bQHA.ttf")), array("kind" => "webfonts#webfont", "family" => "Allerta", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/allerta/v7/s9FOEuiJFTNbMe06ifzV8g.ttf")), array("kind" => "webfonts#webfont", "family" => "Allerta Stencil", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/allertastencil/v7/CdSZfRtHbQrBohqmzSdDYFf2eT4jUldwg_9fgfY_tHc.ttf")), array("kind" => "webfonts#webfont", "family" => "Allura", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/allura/v4/4hcqgZanyuJ2gMYWffIR6A.ttf")), array("kind" => "webfonts#webfont", "family" => "Almendra", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/almendra/v8/ZpLdQMj7Q2AFio4nNO6A76CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/almendra/v8/PDpbB-ZF7deXAAEYPkQOeg.ttf", "italic" => "http://fonts.gstatic.com/s/almendra/v8/CNWLyiDucqVKVgr4EMidi_esZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/almendra/v8/-tXHKMcnn6FqrhJV3l1e3QJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "Almendra Display", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/almendradisplay/v6/2Zuu97WJ_ez-87yz5Ai8fF6uyC_qD11hrFQ6EGgTJWI.ttf")), array("kind" => "webfonts#webfont", "family" => "Almendra SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/almendrasc/v6/IuiLd8Fm9I6raSalxMoWeaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Amarante", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/amarante/v4/2dQHjIBWSpydit5zkJZnOw.ttf")), array("kind" => "webfonts#webfont", "family" => "Amaranth", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/amaranth/v6/j5OFHqadfxyLnQRxFeox6qCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/amaranth/v6/7VcBog22JBHsHXHdnnycTA.ttf", "italic" => "http://fonts.gstatic.com/s/amaranth/v6/UrJlRY9LcVERJSvggsdBqPesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/amaranth/v6/BHyuYFj9nqLFNvOvGh0xTwJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "Amatic SC", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/amaticsc/v8/IDnkRTPGcrSVo50UyYNK7y3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/amaticsc/v8/MldbRWLFytvqxU1y81xSVg.ttf")), array("kind" => "webfonts#webfont", "family" => "Amethysta", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/amethysta/v4/1jEo9tOFIJDolAUpBnWbnA.ttf")), array("kind" => "webfonts#webfont", "family" => "Amiri", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "arabic"), "version" => "v7", "lastModified" => "2015-04-07", "files" => array("700" => "http://fonts.gstatic.com/s/amiri/v7/WQsR_moz-FNqVwGYgptqiA.ttf", "regular" => "http://fonts.gstatic.com/s/amiri/v7/ATARrPmSew75SlpOw2YABQ.ttf", "italic" => "http://fonts.gstatic.com/s/amiri/v7/3t1yTQlLUXBw8htrqlXBrw.ttf", "700italic" => "http://fonts.gstatic.com/s/amiri/v7/uF8aNEyD0bxMeTBg9bFDSPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Amita", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-06-03", "files" => array("700" => "http://fonts.gstatic.com/s/amita/v1/cIYA2Lzp7l2pcGsqpUidBg.ttf", "regular" => "http://fonts.gstatic.com/s/amita/v1/RhdhGBXSJqkHo6g7miTEcQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Anaheim", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/anaheim/v4/t-z8aXHMpgI2gjN_rIflKA.ttf")), array("kind" => "webfonts#webfont", "family" => "Andada", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/andada/v7/rSFaDqNNQBRw3y19MB5Y4w.ttf")), array("kind" => "webfonts#webfont", "family" => "Andika", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/andika/v7/oe-ag1G0lcqZ3IXfeEgaGg.ttf")), array("kind" => "webfonts#webfont", "family" => "Angkor", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/angkor/v8/DLpLgIS-8F10ecwKqCm95Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Annie Use Your Telescope", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/annieuseyourtelescope/v6/2cuiO5VmaR09C8SLGEQjGqbp7mtG8sPlcZvOaO8HBak.ttf")), array("kind" => "webfonts#webfont", "family" => "Anonymous Pro", "category" => "monospace", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "latin", "greek"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/anonymouspro/v8/WDf5lZYgdmmKhO8E1AQud--Cz_5MeePnXDAcLNWyBME.ttf", "regular" => "http://fonts.gstatic.com/s/anonymouspro/v8/Zhfjj_gat3waL4JSju74E-V_5zh5b-_HiooIRUBwn1A.ttf", "italic" => "http://fonts.gstatic.com/s/anonymouspro/v8/q0u6LFHwttnT_69euiDbWKwIsuKDCXG0NQm7BvAgx-c.ttf", "700italic" => "http://fonts.gstatic.com/s/anonymouspro/v8/_fVr_XGln-cetWSUc-JpfA1LL9bfs7wyIp6F8OC9RxA.ttf")), array("kind" => "webfonts#webfont", "family" => "Antic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/antic/v7/hEa8XCNM7tXGzD0Uk0AipA.ttf")), array("kind" => "webfonts#webfont", "family" => "Antic Didone", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/anticdidone/v4/r3nJcTDuOluOL6LGDV1vRy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Antic Slab", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/anticslab/v4/PSbJCTKkAS7skPdkd7AKEvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Anton", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/anton/v7/XIbCenm-W0IRHWYIh7CGUQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Arapey", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/arapey/v5/dqu823lrSYn8T2gApTdslA.ttf", "italic" => "http://fonts.gstatic.com/s/arapey/v5/pY-Xi5JNBpaWxy2tZhEm5A.ttf")), array("kind" => "webfonts#webfont", "family" => "Arbutus", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/arbutus/v5/Go_hurxoUsn5MnqNVQgodQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Arbutus Slab", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/arbutusslab/v4/6k3Yp6iS9l4jRIpynA8qMy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Architects Daughter", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/architectsdaughter/v6/RXTgOOQ9AAtaVOHxx0IUBMCy0EhZjHzu-y0e6uLf4Fg.ttf")), array("kind" => "webfonts#webfont", "family" => "Archivo Black", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/archivoblack/v4/WoAoVT7K3k7hHfxKbvB6B51XQG8isOYYJhPIYAyrESQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Archivo Narrow", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/archivonarrow/v5/M__Wu4PAmHf4YZvQM8tWsMLtdzs3iyjn_YuT226ZsLU.ttf", "regular" => "http://fonts.gstatic.com/s/archivonarrow/v5/DsLzC9scoPnrGiwYYMQXppTvAuddT2xDMbdz0mdLyZY.ttf", "italic" => "http://fonts.gstatic.com/s/archivonarrow/v5/vqsrtPCpTU3tJlKfuXP5zUpmlyBQEFfdE6dERLXdQGQ.ttf", "700italic" => "http://fonts.gstatic.com/s/archivonarrow/v5/wG6O733y5zHl4EKCOh8rSTg5KB8MNJ4uPAETq9naQO8.ttf")), array("kind" => "webfonts#webfont", "family" => "Arimo", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("vietnamese", "cyrillic", "hebrew", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/arimo/v9/ZItXugREyvV9LnbY_gxAmw.ttf", "regular" => "http://fonts.gstatic.com/s/arimo/v9/Gpeo80g-5ji2CcyXWnzh7g.ttf", "italic" => "http://fonts.gstatic.com/s/arimo/v9/_OdGbnX2-qQ96C4OjhyuPw.ttf", "700italic" => "http://fonts.gstatic.com/s/arimo/v9/__nOLWqmeXdhfr0g7GaFePesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Arizonia", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/arizonia/v6/yzJqkHZqryZBTM7RKYV9Wg.ttf")), array("kind" => "webfonts#webfont", "family" => "Armata", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/armata/v6/1H8FwGgIRrbYtxSfXhOHlQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Artifika", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/artifika/v6/Ekfp4H4QG7D-WsABDOyj8g.ttf")), array("kind" => "webfonts#webfont", "family" => "Arvo", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/arvo/v9/OB3FDST7U38u3OjPK_vvRQ.ttf", "regular" => "http://fonts.gstatic.com/s/arvo/v9/vvWPwz-PlZEwjOOIKqoZzA.ttf", "italic" => "http://fonts.gstatic.com/s/arvo/v9/id5a4BCjbenl5Gkqonw_Rw.ttf", "700italic" => "http://fonts.gstatic.com/s/arvo/v9/Hvl2MuWoXLaCy2v6MD4Yvw.ttf")), array("kind" => "webfonts#webfont", "family" => "Arya", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-05-21", "files" => array("700" => "http://fonts.gstatic.com/s/arya/v1/N13tgOvG7VTXawiI-fJiQA.ttf", "regular" => "http://fonts.gstatic.com/s/arya/v1/xEVqtU3v8QLospHKpDaYEw.ttf")), array("kind" => "webfonts#webfont", "family" => "Asap", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/asap/v4/o5RUA7SsJ80M8oDFBnrDbg.ttf", "regular" => "http://fonts.gstatic.com/s/asap/v4/2lf-1MDR8tsTpEtvJmr2hA.ttf", "italic" => "http://fonts.gstatic.com/s/asap/v4/mwxNHf8QS8gNWCAMwkJNIg.ttf", "700italic" => "http://fonts.gstatic.com/s/asap/v4/_rZz9y2oXc09jT5T6BexLQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Asar", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("regular" => "http://fonts.gstatic.com/s/asar/v1/mSmn3H5CcMA84CZ586X7WQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Asset", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/asset/v6/hfPmqY-JzuR1lULlQf9iTg.ttf")), array("kind" => "webfonts#webfont", "family" => "Astloch", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/astloch/v6/aPkhM2tL-tz1jX6aX2rvo_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/astloch/v6/fmbitVmHYLQP7MGPuFgpag.ttf")), array("kind" => "webfonts#webfont", "family" => "Asul", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/asul/v5/uO8uNmxaq87-DdPmkEg5Gg.ttf", "regular" => "http://fonts.gstatic.com/s/asul/v5/9qpsNR_OOwyOYyo2N0IbBw.ttf")), array("kind" => "webfonts#webfont", "family" => "Atomic Age", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/atomicage/v7/WvBMe4FxANIKpo6Oi0mVJ_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Aubrey", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aubrey/v8/zo9w8klO8bmOQIMajQ2aTA.ttf")), array("kind" => "webfonts#webfont", "family" => "Audiowide", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/audiowide/v4/yGcwRZB6VmoYhPUYT-mEow.ttf")), array("kind" => "webfonts#webfont", "family" => "Autour One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/autourone/v4/2xmQBcg7FN72jaQRFZPIDvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Average", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/average/v4/aHUibBqdDbVYl5FM48pxyQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Average Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/averagesans/v4/dnU3R-5A_43y5bIyLztPsS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Averia Gruesa Libre", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/averiagruesalibre/v4/10vbZTOoN6T8D-nvDzwRFyXcKHuZXlCN8VkWHpkUzKM.ttf")), array("kind" => "webfonts#webfont", "family" => "Averia Libre", "category" => "display", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/averialibre/v4/r6hGL8sSLm4dTzOPXgx5XacQoVhARpoaILP7amxE_8g.ttf", "700" => "http://fonts.gstatic.com/s/averialibre/v4/r6hGL8sSLm4dTzOPXgx5XUD2ttfZwueP-QU272T9-k4.ttf", "300italic" => "http://fonts.gstatic.com/s/averialibre/v4/I6wAYuAvOgT7el2ePj2nkina0FLWfcB-J_SAYmcAXaI.ttf", "regular" => "http://fonts.gstatic.com/s/averialibre/v4/rYVgHZZQICWnhjguGsBspC3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/averialibre/v4/1etzuoNxVHR8F533EkD1WfMZXuCXbOrAvx5R0IT5Oyo.ttf", "700italic" => "http://fonts.gstatic.com/s/averialibre/v4/I6wAYuAvOgT7el2ePj2nkvAs9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Averia Sans Libre", "category" => "display", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/averiasanslibre/v4/_9-jTfQjaBsWAF_yp5z-V4CP_KG_g80s1KXiBtJHoNc.ttf", "700" => "http://fonts.gstatic.com/s/averiasanslibre/v4/_9-jTfQjaBsWAF_yp5z-V8QwVOrz1y5GihpZmtKLhlI.ttf", "300italic" => "http://fonts.gstatic.com/s/averiasanslibre/v4/o7BEIK-fG3Ykc5Rzteh88YuyGu4JqttndUh4gRKxic0.ttf", "regular" => "http://fonts.gstatic.com/s/averiasanslibre/v4/yRJpjT39KxACO9F31mj_LqV8_KRn4epKAjTFK1s1fsg.ttf", "italic" => "http://fonts.gstatic.com/s/averiasanslibre/v4/COEzR_NPBSUOl3pFwPbPoCZU2HnUZT1xVKaIrHDioao.ttf", "700italic" => "http://fonts.gstatic.com/s/averiasanslibre/v4/o7BEIK-fG3Ykc5Rzteh88bXy1DXgmJcVtKjM5UWamMs.ttf")), array("kind" => "webfonts#webfont", "family" => "Averia Serif Libre", "category" => "display", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/yvITAdr5D1nlsdFswJAb8SmC4gFJ2PHmfdVKEd_5S9M.ttf", "700" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/yvITAdr5D1nlsdFswJAb8Q50KV5TaOVolur4zV2iZsg.ttf", "300italic" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/YOLFXyye4sZt6AZk1QybCG2okl0bU63CauowU4iApig.ttf", "regular" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/fdtF30xa_Erw0zAzOoG4BZqY66i8AUyI16fGqw0iAew.ttf", "italic" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/o9qhvK9iT5iDWfyhQUe-6Ru_b0bTq5iipbJ9hhgHJ6U.ttf", "700italic" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/YOLFXyye4sZt6AZk1QybCNxohRXP4tNDqG3X4Hqn21k.ttf")), array("kind" => "webfonts#webfont", "family" => "Bad Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("cyrillic", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/badscript/v5/cRyUs0nJ2eMQFHwBsZNRXfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Balthazar", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/balthazar/v5/WgbaSIs6dJAGXJ0qbz2xlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Bangers", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bangers/v8/WAffdge5w99Xif-DLeqmcA.ttf")), array("kind" => "webfonts#webfont", "family" => "Basic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/basic/v6/hNII2mS5Dxw5C0u_m3mXgA.ttf")), array("kind" => "webfonts#webfont", "family" => "Battambang", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("700" => "http://fonts.gstatic.com/s/battambang/v9/dezbRtMzfzAA99DmrCYRMgJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/battambang/v9/MzrUfQLefYum5vVGM3EZVPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Baumans", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/baumans/v5/o0bFdPW1H5kd5saqqOcoVg.ttf")), array("kind" => "webfonts#webfont", "family" => "Bayon", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/bayon/v8/yTubusjTnpNRZwA4_50iVw.ttf")), array("kind" => "webfonts#webfont", "family" => "Belgrano", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/belgrano/v6/iq8DUa2s7g6WRCeMiFrmtQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Belleza", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/belleza/v4/wchA3BWJlVqvIcSeNZyXew.ttf")), array("kind" => "webfonts#webfont", "family" => "BenchNine", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/benchnine/v4/ah9xtUy9wLQ3qnWa2p-piS3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/benchnine/v4/qZpi6ZVZg3L2RL_xoBLxWS3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/benchnine/v4/h3OAlYqU3aOeNkuXgH2Q2w.ttf")), array("kind" => "webfonts#webfont", "family" => "Bentham", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bentham/v6/5-Mo8Fe7yg5tzV0GlQIuzQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Berkshire Swash", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/berkshireswash/v4/4RZJjVRPjYnC2939hKCAimKfbtsIjCZP_edQljX9gR0.ttf")), array("kind" => "webfonts#webfont", "family" => "Bevan", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bevan/v7/Rtg3zDsCeQiaJ_Qno22OJA.ttf")), array("kind" => "webfonts#webfont", "family" => "Bigelow Rules", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bigelowrules/v4/FEJCPLwo07FS-6SK6Al50X8f0n03UdmQgF_CLvNR2vg.ttf")), array("kind" => "webfonts#webfont", "family" => "Bigshot One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bigshotone/v6/wSyZjBNTWDQHnvWE2jt6j6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Bilbo", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bilbo/v6/-ty-lPs5H7OIucWbnpFrkA.ttf")), array("kind" => "webfonts#webfont", "family" => "Bilbo Swash Caps", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bilboswashcaps/v7/UB_-crLvhx-PwGKW1oosDmYeFSdnSpRYv5h9gpdlD1g.ttf")), array("kind" => "webfonts#webfont", "family" => "Biryani", "category" => "sans-serif", "variants" => array("200", "300", "regular", "600", "700", "800", "900"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-04-22", "files" => array("200" => "http://fonts.gstatic.com/s/biryani/v1/Xx38YzyTFF8n6mRS1Yd88vesZW2xOQ-xsNqO47m55DA.ttf", "300" => "http://fonts.gstatic.com/s/biryani/v1/u-bneRbizmFMd0VQp5Ze6vesZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/biryani/v1/1EdcPCVxBR2txgjrza6_YPesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/biryani/v1/qN2MTZ0j1sKSCtfXLB2dR_esZW2xOQ-xsNqO47m55DA.ttf", "800" => "http://fonts.gstatic.com/s/biryani/v1/DJyziS7FEy441v22InYdevesZW2xOQ-xsNqO47m55DA.ttf", "900" => "http://fonts.gstatic.com/s/biryani/v1/trcLkrIut0lM_PPSyQfAMPesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/biryani/v1/W7bfR8-IY76Xz0QoB8L2xw.ttf")), array("kind" => "webfonts#webfont", "family" => "Bitter", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/bitter/v7/4dUtr_4BvHuoRU35suyOAg.ttf", "regular" => "http://fonts.gstatic.com/s/bitter/v7/w_BNdJvVZDRmqy5aSfB2kQ.ttf", "italic" => "http://fonts.gstatic.com/s/bitter/v7/TC0FZEVzXQIGgzmRfKPZbA.ttf")), array("kind" => "webfonts#webfont", "family" => "Black Ops One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/blackopsone/v7/2XW-DmDsGbDLE372KrMW1Yjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Bokor", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/bokor/v8/uAKdo0A85WW23Gs6mcbw7A.ttf")), array("kind" => "webfonts#webfont", "family" => "Bonbon", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bonbon/v7/IW3u1yzG1knyW5oz0s9_6Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Boogaloo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/boogaloo/v6/4Wu1tvFMoB80fSu8qLgQfQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Bowlby One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bowlbyone/v7/eKpHjHfjoxM2bX36YNucefesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Bowlby One SC", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bowlbyonesc/v8/8ZkeXftTuzKBtmxOYXoRedDkZCMxWJecxjvKm2f8MJw.ttf")), array("kind" => "webfonts#webfont", "family" => "Brawler", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/brawler/v6/3gfSw6imxQnQxweVITqUrg.ttf")), array("kind" => "webfonts#webfont", "family" => "Bree Serif", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/breeserif/v5/5h9crBVIrvZqgf34FHcnEfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Bubblegum Sans", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bubblegumsans/v5/Y9iTUUNz6lbl6TrvV4iwsytnKWgpfO2iSkLzTz-AABg.ttf")), array("kind" => "webfonts#webfont", "family" => "Bubbler One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bubblerone/v4/e8S0qevkZAFaBybtt_SU4qCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Buda", "category" => "display", "variants" => array("300"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/buda/v6/hLtAmNUmEMJH2yx7NGUjnA.ttf")), array("kind" => "webfonts#webfont", "family" => "Buenard", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/buenard/v7/yUlGE115dGr7O9w9FlP3UvesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/buenard/v7/NSpMPGKAUgrLrlstYVvIXQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Butcherman", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/butcherman/v7/bxiJmD567sPBVpJsT0XR0vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Butterfly Kids", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/butterflykids/v4/J4NTF5M25htqeTffYImtlUZaDk62iwTBnbnvwSjZciA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cabin", "category" => "sans-serif", "variants" => array("regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/cabin/v8/HgsCQ-k3_Z_uQ86aFolNBg.ttf", "600" => "http://fonts.gstatic.com/s/cabin/v8/eUDAvKhBtmTCkeVBsFk34A.ttf", "700" => "http://fonts.gstatic.com/s/cabin/v8/4EKhProuY1hq_WCAomq9Dg.ttf", "regular" => "http://fonts.gstatic.com/s/cabin/v8/XeuAFYo2xAPHxZGBbQtHhA.ttf", "italic" => "http://fonts.gstatic.com/s/cabin/v8/0tJ9k3DI5xC4GBgs1E_Jxw.ttf", "500italic" => "http://fonts.gstatic.com/s/cabin/v8/50sjhrGE0njyO-7mGDhGP_esZW2xOQ-xsNqO47m55DA.ttf", "600italic" => "http://fonts.gstatic.com/s/cabin/v8/sFQpQDBd3G2om0Nl5dD2CvesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/cabin/v8/K83QKi8MOKLEqj6bgZ7LrfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cabin Condensed", "category" => "sans-serif", "variants" => array("regular", "500", "600", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/cabincondensed/v7/Ez4zJbsGr2BgXcNUWBVgEARL_-ABKXdjsJSPT0lc2Bk.ttf", "600" => "http://fonts.gstatic.com/s/cabincondensed/v7/Ez4zJbsGr2BgXcNUWBVgELS5sSASxc8z4EQTQj7DCAI.ttf", "700" => "http://fonts.gstatic.com/s/cabincondensed/v7/Ez4zJbsGr2BgXcNUWBVgEMAWgzcA047xWLixhLCofl8.ttf", "regular" => "http://fonts.gstatic.com/s/cabincondensed/v7/B0txb0blf2N29WdYPJjMSiQPsWWoiv__AzYJ9Zzn9II.ttf")), array("kind" => "webfonts#webfont", "family" => "Cabin Sketch", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cabinsketch/v8/ki3SSN5HMOO0-IOLOj069ED2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/cabinsketch/v8/d9fijO34zQajqQvl3YHRCS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Caesar Dressing", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/caesardressing/v5/2T_WzBgE2Xz3FsyJMq34T9gR43u4FvCuJwIfF5Zxl6Y.ttf")), array("kind" => "webfonts#webfont", "family" => "Cagliostro", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cagliostro/v5/i85oXbtdSatNEzss99bpj_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Calligraffitti", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/calligraffitti/v7/vLVN2Y-z65rVu1R7lWdvyDXz_orj3gX0_NzfmYulrko.ttf")), array("kind" => "webfonts#webfont", "family" => "Cambay", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cambay/v1/jw9niBxa04eEhnSwTWCEgw.ttf", "regular" => "http://fonts.gstatic.com/s/cambay/v1/etU9Bab4VuhzS-OKsb1VXg.ttf", "italic" => "http://fonts.gstatic.com/s/cambay/v1/ZEz9yNqpEOgejaw1rBhugQ.ttf", "700italic" => "http://fonts.gstatic.com/s/cambay/v1/j-5v_uUr0NXTumWN0siOiaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Cambo", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cambo/v5/PnwpRuTdkYCf8qk4ajmNRA.ttf")), array("kind" => "webfonts#webfont", "family" => "Candal", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/candal/v6/x44dDW28zK7GR1gGDBmj9g.ttf")), array("kind" => "webfonts#webfont", "family" => "Cantarell", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cantarell/v6/Yir4ZDsCn4g1kWopdg-ehC3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/cantarell/v6/p5ydP_uWQ5lsFzcP_XVMEw.ttf", "italic" => "http://fonts.gstatic.com/s/cantarell/v6/DTCLtOSqP-7dgM-V_xKUjqCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/cantarell/v6/weehrwMeZBXb0QyrWnRwFXe1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Cantata One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-03-22", "files" => array("regular" => "http://fonts.gstatic.com/s/cantataone/v6/-a5FDvnBqaBMDaGgZYnEfqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Cantora One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cantoraone/v5/oI-DS62RbHI8ZREjp73ehqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Capriola", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/capriola/v4/JxXPlkdzWwF9Cwelbvi9jA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cardo", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin-ext", "greek-ext", "latin", "greek"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cardo/v8/lQN30weILimrKvp8rZhF1w.ttf", "regular" => "http://fonts.gstatic.com/s/cardo/v8/jbkF2_R0FKUEZTq5dwSknQ.ttf", "italic" => "http://fonts.gstatic.com/s/cardo/v8/pcv4Np9tUkq0YREYUcEEJQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Carme", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/carme/v7/08E0NP1eRBEyFRUadmMfgA.ttf")), array("kind" => "webfonts#webfont", "family" => "Carrois Gothic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/carroisgothic/v4/GCgb7bssGpwp7V5ynxmWy2x3d0cwUleGuRTmCYfCUaM.ttf")), array("kind" => "webfonts#webfont", "family" => "Carrois Gothic SC", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/carroisgothicsc/v4/bVp4nhwFIXU-r3LqUR8DSJTdPW1ioadGi2uRiKgJVCY.ttf")), array("kind" => "webfonts#webfont", "family" => "Carter One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/carterone/v8/5X_LFvdbcB7OBG7hBgZ7fPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Catamaran", "category" => "sans-serif", "variants" => array("100", "200", "300", "regular", "500", "600", "700", "800", "900"), "subsets" => array("latin-ext", "tamil", "latin"), "version" => "v1", "lastModified" => "2015-08-06", "files" => array("100" => "http://fonts.gstatic.com/s/catamaran/v1/ilWHBiy0krUPdlmYxDuqC6CWcynf_cDxXwCLxiixG1c.ttf", "200" => "http://fonts.gstatic.com/s/catamaran/v1/hFc-HKSsGk6M-psujei1MC3USBnSvpkopQaUR-2r7iU.ttf", "300" => "http://fonts.gstatic.com/s/catamaran/v1/Aaag4ccR7Oh_4eai-jbrYC3USBnSvpkopQaUR-2r7iU.ttf", "500" => "http://fonts.gstatic.com/s/catamaran/v1/83WSX3F86qsvj1Z4EI0tQi3USBnSvpkopQaUR-2r7iU.ttf", "600" => "http://fonts.gstatic.com/s/catamaran/v1/a9PlHHnuBWiGGk0TwuFKTi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/catamaran/v1/PpgVtUHUdnBZYNpnzGbScy3USBnSvpkopQaUR-2r7iU.ttf", "800" => "http://fonts.gstatic.com/s/catamaran/v1/6VjB_uSfn3DZ93IQv58CmC3USBnSvpkopQaUR-2r7iU.ttf", "900" => "http://fonts.gstatic.com/s/catamaran/v1/5ys9TqpQc9Q6gHqbSox6py3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/catamaran/v1/MdNkM-DU8f6R-25Nxpr_XA.ttf")), array("kind" => "webfonts#webfont", "family" => "Caudex", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "greek-ext", "latin", "greek"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/caudex/v6/PetCI4GyQ5Q3LiOzUu_mMg.ttf", "regular" => "http://fonts.gstatic.com/s/caudex/v6/PWEexiHLDmQbn2b1OPZWfg.ttf", "italic" => "http://fonts.gstatic.com/s/caudex/v6/XjMZF6XCisvV3qapD4oJdw.ttf", "700italic" => "http://fonts.gstatic.com/s/caudex/v6/yT8YeHLjaJvQXlUEYOA8gqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Caveat", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v1", "lastModified" => "2015-10-05", "files" => array("700" => "http://fonts.gstatic.com/s/caveat/v1/LkaFtQENGJry2eUMwGRTeA.ttf", "regular" => "http://fonts.gstatic.com/s/caveat/v1/8I23b6N-6rRVbh-C_Vx3yA.ttf")), array("kind" => "webfonts#webfont", "family" => "Caveat Brush", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v1", "lastModified" => "2015-10-05", "files" => array("regular" => "http://fonts.gstatic.com/s/caveatbrush/v1/_d7bgsk3hfC4DXnUEeYKsy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Cedarville Cursive", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cedarvillecursive/v7/cuCe6HrkcqrWTWTUE7dw-41zwq9-z_Lf44CzRAA0d0Y.ttf")), array("kind" => "webfonts#webfont", "family" => "Ceviche One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/cevicheone/v7/WOaXIMBD4VYMy39MsobJhKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Changa One", "category" => "display", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/changaone/v9/dr4qjce4W3kxFrZRkVD87fesZW2xOQ-xsNqO47m55DA.ttf", "italic" => "http://fonts.gstatic.com/s/changaone/v9/wJVQlUs1lAZel-WdTo2U9y3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Chango", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chango/v5/3W3AeMMtRTH08t5qLOjBmg.ttf")), array("kind" => "webfonts#webfont", "family" => "Chau Philomene One", "category" => "sans-serif", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chauphilomeneone/v4/KKc5egCL-a2fFVoOA2x6tBFi5dxgSTdxqnMJgWkBJcg.ttf", "italic" => "http://fonts.gstatic.com/s/chauphilomeneone/v4/eJj1PY_iN4KiIuyOvtMHJP6uyLkxyiC4WcYA74sfquE.ttf")), array("kind" => "webfonts#webfont", "family" => "Chela One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/chelaone/v5/h5O0dEnpnIq6jQnWxZybrA.ttf")), array("kind" => "webfonts#webfont", "family" => "Chelsea Market", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chelseamarket/v4/qSdzwh2A4BbNemy78sJLfAAI1i8fIftCBXsBF2v9UMI.ttf")), array("kind" => "webfonts#webfont", "family" => "Chenla", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/chenla/v9/aLNpdAUDq2MZbWz2U1a16g.ttf")), array("kind" => "webfonts#webfont", "family" => "Cherry Cream Soda", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cherrycreamsoda/v6/OrD-AUnFcZeeKa6F_c0_WxOiHiuAPYA9ry3O1RG2XIU.ttf")), array("kind" => "webfonts#webfont", "family" => "Cherry Swash", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cherryswash/v4/-CfyMyQqfucZPQNB0nvYyED2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/cherryswash/v4/HqOk7C7J1TZ5i3L-ejF0vi3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Chewy", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chewy/v7/hcDN5cvQdIu6Bx4mg_TSyw.ttf")), array("kind" => "webfonts#webfont", "family" => "Chicle", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chicle/v5/xg4q57Ut9ZmyFwLp51JLgg.ttf")), array("kind" => "webfonts#webfont", "family" => "Chivo", "category" => "sans-serif", "variants" => array("regular", "italic", "900", "900italic"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/chivo/v7/JAdkiWd46QCW4vOsj3dzTA.ttf", "regular" => "http://fonts.gstatic.com/s/chivo/v7/L88PEuzS9eRfHRZhAPhZyw.ttf", "italic" => "http://fonts.gstatic.com/s/chivo/v7/Oe3-Q-a2kBzPnhHck_baMg.ttf", "900italic" => "http://fonts.gstatic.com/s/chivo/v7/LoszYnE86q2wJEOjCigBQ_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Chonburi", "category" => "display", "variants" => array("regular"), "subsets" => array("vietnamese", "thai", "latin-ext", "latin"), "version" => "v1", "lastModified" => "2015-08-06", "files" => array("regular" => "http://fonts.gstatic.com/s/chonburi/v1/jd9PfbW0x_8Myt_XeUxvSQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Cinzel", "category" => "serif", "variants" => array("regular", "700", "900"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cinzel/v4/nYcFQ6_3pf_6YDrOFjBR8Q.ttf", "900" => "http://fonts.gstatic.com/s/cinzel/v4/FTBj72ozM2cEOSxiVsRb3A.ttf", "regular" => "http://fonts.gstatic.com/s/cinzel/v4/GF7dy_Nc-a6EaHYSyGd-EA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cinzel Decorative", "category" => "display", "variants" => array("regular", "700", "900"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cinzeldecorative/v4/pXhIVnhFtL_B9Vb1wq2F95-YYVDmZkJErg0zgx9XuZI.ttf", "900" => "http://fonts.gstatic.com/s/cinzeldecorative/v4/pXhIVnhFtL_B9Vb1wq2F97Khqbv0zQZa0g-9HOXAalU.ttf", "regular" => "http://fonts.gstatic.com/s/cinzeldecorative/v4/fmgK7oaJJIXAkhd9798yQgT5USbJx2F82lQbogPy2bY.ttf")), array("kind" => "webfonts#webfont", "family" => "Clicker Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/clickerscript/v4/Zupmk8XwADjufGxWB9KThBnpV0hQCek3EmWnCPrvGRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Coda", "category" => "display", "variants" => array("regular", "800"), "subsets" => array("latin-ext", "latin"), "version" => "v11", "lastModified" => "2016-02-23", "files" => array("800" => "http://fonts.gstatic.com/s/coda/v11/6ZIw0sbALY0KTMWllZB3hQ.ttf", "regular" => "http://fonts.gstatic.com/s/coda/v11/yHDvulhg-P-p2KRgRrnUYw.ttf")), array("kind" => "webfonts#webfont", "family" => "Coda Caption", "category" => "sans-serif", "variants" => array("800"), "subsets" => array("latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("800" => "http://fonts.gstatic.com/s/codacaption/v9/YDl6urZh-DUFhiMBTgAnz_qsay_1ZmRGmC8pVRdIfAg.ttf")), array("kind" => "webfonts#webfont", "family" => "Codystar", "category" => "display", "variants" => array("300", "regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/codystar/v4/EVaUzfJkcb8Zqx9kzQLXqqCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/codystar/v4/EN-CPFKYowSI7SuR7-0cZA.ttf")), array("kind" => "webfonts#webfont", "family" => "Combo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/combo/v5/Nab98KjR3JZSSPGtzLyXNw.ttf")), array("kind" => "webfonts#webfont", "family" => "Comfortaa", "category" => "display", "variants" => array("300", "regular", "700"), "subsets" => array("cyrillic", "latin-ext", "latin", "greek", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/comfortaa/v7/r_tUZNl0G8xCoOmp_JkSCi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/comfortaa/v7/fND5XPYKrF2tQDwwfWZJIy3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/comfortaa/v7/lZx6C1VViPgSOhCBUP7hXA.ttf")), array("kind" => "webfonts#webfont", "family" => "Coming Soon", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/comingsoon/v6/Yz2z3IAe2HSQAOWsSG8COKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Concert One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/concertone/v7/N5IWCIGhUNdPZn_efTxKN6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Condiment", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/condiment/v4/CstmdiPpgFSV0FUNL5LrJA.ttf")), array("kind" => "webfonts#webfont", "family" => "Content", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("700" => "http://fonts.gstatic.com/s/content/v8/7PivP8Zvs2qn6F6aNbSQe_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/content/v8/l8qaLjygvOkDEU2G6-cjfQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Contrail One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/contrailone/v6/b41KxjgiyqX-hkggANDU6C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Convergence", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/convergence/v5/eykrGz1NN_YpQmkAZjW-qKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Cookie", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cookie/v7/HxeUC62y_YdDbiFlze357A.ttf")), array("kind" => "webfonts#webfont", "family" => "Copse", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/copse/v6/wikLrtPGjZDvZ5w2i5HLWg.ttf")), array("kind" => "webfonts#webfont", "family" => "Corben", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/corben/v9/lirJaFSQWdGQuV--fksg5g.ttf", "regular" => "http://fonts.gstatic.com/s/corben/v9/tTysMZkt-j8Y5yhkgsoajQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Courgette", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/courgette/v4/2YO0EYtyE9HUPLZprahpZA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cousine", "category" => "monospace", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("vietnamese", "cyrillic", "hebrew", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cousine/v10/FXEOnNUcCzhdtoBxiq-lovesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/cousine/v10/GYX4bPXObJNJo63QJEUnLg.ttf", "italic" => "http://fonts.gstatic.com/s/cousine/v10/1WtIuajLoo8vjVwsrZ3eOg.ttf", "700italic" => "http://fonts.gstatic.com/s/cousine/v10/y_AZ5Sz-FwL1lux2xLSTZS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Coustard", "category" => "serif", "variants" => array("regular", "900"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/coustard/v6/W02OCWO6OfMUHz6aVyegQ6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/coustard/v6/iO2Rs5PmqAEAXoU3SkMVBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Covered By Your Grace", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/coveredbyyourgrace/v6/6ozZp4BPlrbDRWPe3EBGA6CVUMdvnk-GcAiZQrX9Gek.ttf")), array("kind" => "webfonts#webfont", "family" => "Crafty Girls", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/craftygirls/v5/0Sv8UWFFdhQmesHL32H8oy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Creepster", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/creepster/v5/0vdr5kWJ6aJlOg5JvxnXzQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Crete Round", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/creteround/v5/B8EwN421qqOCCT8vOH4wJ6CWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/creteround/v5/5xAt7XK2vkUdjhGtt98unUeOrDcLawS7-ssYqLr2Xp4.ttf")), array("kind" => "webfonts#webfont", "family" => "Crimson Text", "category" => "serif", "variants" => array("regular", "italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("600" => "http://fonts.gstatic.com/s/crimsontext/v6/rEy5tGc5HdXy56Xvd4f3I2v8CylhIUtwUiYO7Z2wXbE.ttf", "700" => "http://fonts.gstatic.com/s/crimsontext/v6/rEy5tGc5HdXy56Xvd4f3I0D2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/crimsontext/v6/3IFMwfRa07i-auYR-B-zNS3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/crimsontext/v6/a5QZnvmn5amyNI-t2BMkWPMZXuCXbOrAvx5R0IT5Oyo.ttf", "600italic" => "http://fonts.gstatic.com/s/crimsontext/v6/4j4TR-EfnvCt43InYpUNDIR-5-urNOGAobhAyctHvW8.ttf", "700italic" => "http://fonts.gstatic.com/s/crimsontext/v6/4j4TR-EfnvCt43InYpUNDPAs9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Croissant One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/croissantone/v4/mPjsOObnC77fp1cvZlOfIYjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Crushed", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/crushed/v6/aHwSejs3Kt0Lg95u7j32jA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cuprum", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cuprum/v7/6tl3_FkDeXSD72oEHuJh4w.ttf", "regular" => "http://fonts.gstatic.com/s/cuprum/v7/JgXs0F_UiaEdAS74msmFNg.ttf", "italic" => "http://fonts.gstatic.com/s/cuprum/v7/cLEz0KV6OxInnktSzpk58g.ttf", "700italic" => "http://fonts.gstatic.com/s/cuprum/v7/bnkXaBfoYvaJ75axRPSwVKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Cutive", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cutive/v8/G2bW-ImyOCwKxBkLyz39YQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Cutive Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cutivemono/v4/ncWQtFVKcSs8OW798v30k6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Damion", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/damion/v6/13XtECwKxhD_VrOqXL4SiA.ttf")), array("kind" => "webfonts#webfont", "family" => "Dancing Script", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/dancingscript/v6/KGBfwabt0ZRLA5W1ywjowb_dAmXiKjTPGCuO6G2MbfA.ttf", "regular" => "http://fonts.gstatic.com/s/dancingscript/v6/DK0eTGXiZjN6yA8zAEyM2RnpV0hQCek3EmWnCPrvGRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Dangrek", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/dangrek/v8/LOaFhBT-EHNxZjV8DAW_ew.ttf")), array("kind" => "webfonts#webfont", "family" => "Dawning of a New Day", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dawningofanewday/v7/JiDsRhiKZt8uz3NJ5xA06gXLnohmOYWQZqo_sW8GLTk.ttf")), array("kind" => "webfonts#webfont", "family" => "Days One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/daysone/v6/kzwZjNhc1iabMsrc_hKBIA.ttf")), array("kind" => "webfonts#webfont", "family" => "Dekko", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v2", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/dekko/v2/AKtgABKC1rUxgIgS-bpojw.ttf")), array("kind" => "webfonts#webfont", "family" => "Delius", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/delius/v6/TQA163qafki2-gV-B6F_ag.ttf")), array("kind" => "webfonts#webfont", "family" => "Delius Swash Caps", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/deliusswashcaps/v8/uXyrEUnoWApxIOICunRq7yIrxb5zDVgU2N3VzXm7zq4.ttf")), array("kind" => "webfonts#webfont", "family" => "Delius Unicase", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/deliusunicase/v9/7FTMTITcb4dxUp99FAdTqNy5weKXdcrx-wE0cgECMq8.ttf", "regular" => "http://fonts.gstatic.com/s/deliusunicase/v9/b2sKujV3Q48RV2PQ0k1vqu6rPKfVZo7L2bERcf0BDns.ttf")), array("kind" => "webfonts#webfont", "family" => "Della Respira", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dellarespira/v4/F4E6Lo_IZ6L9AJCcbqtDVeDcg5akpSnIcsPhLOFv7l8.ttf")), array("kind" => "webfonts#webfont", "family" => "Denk One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/denkone/v4/TdXOeA4eA_hEx4W8Sh9wPw.ttf")), array("kind" => "webfonts#webfont", "family" => "Devonshire", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/devonshire/v5/I3ct_2t12SYizP8ZC-KFi_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Dhurjati", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dhurjati/v4/uV6jO5e2iFMbGB0z79Cy5g.ttf")), array("kind" => "webfonts#webfont", "family" => "Didact Gothic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/didactgothic/v7/v8_72sD3DYMKyM0dn3LtWotBLojGU5Qdl8-5NL4v70w.ttf")), array("kind" => "webfonts#webfont", "family" => "Diplomata", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-03-23", "files" => array("regular" => "http://fonts.gstatic.com/s/diplomata/v8/u-ByBiKgN6rTMA36H3kcKg.ttf")), array("kind" => "webfonts#webfont", "family" => "Diplomata SC", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/diplomatasc/v5/JdVwAwfE1a_pahXjk5qpNi3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Domine", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/domine/v4/phBcG1ZbQFxUIt18hPVxnw.ttf", "regular" => "http://fonts.gstatic.com/s/domine/v4/wfVIgamVFjMNQAEWurCiHA.ttf")), array("kind" => "webfonts#webfont", "family" => "Donegal One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/donegalone/v4/6kN4-fDxz7T9s5U61HwfF6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Doppio One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/doppioone/v4/WHZ3HJQotpk_4aSMNBo_t_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Dorsa", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dorsa/v7/wCc3cUe6XrmG2LQE6GlIrw.ttf")), array("kind" => "webfonts#webfont", "family" => "Dosis", "category" => "sans-serif", "variants" => array("200", "300", "regular", "500", "600", "700", "800"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/dosis/v4/ztftab0r6hcd7AeurUGrSQ.ttf", "300" => "http://fonts.gstatic.com/s/dosis/v4/awIB6L0h5mb0plIKorXmuA.ttf", "500" => "http://fonts.gstatic.com/s/dosis/v4/ruEXDOFMxDPGnjCBKRqdAQ.ttf", "600" => "http://fonts.gstatic.com/s/dosis/v4/KNAswRNwm3tfONddYyidxg.ttf", "700" => "http://fonts.gstatic.com/s/dosis/v4/AEEAj0ONidK8NQQMBBlSig.ttf", "800" => "http://fonts.gstatic.com/s/dosis/v4/nlrKd8E69vvUU39XGsvR7Q.ttf", "regular" => "http://fonts.gstatic.com/s/dosis/v4/rJRlixu-w0JZ1MyhJpao_Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Dr Sugiyama", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/drsugiyama/v5/S5Yx3MIckgoyHhhS4C9Tv6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Droid Sans", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/droidsans/v6/EFpQQyG9GqCrobXxL-KRMQJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/droidsans/v6/rS9BT6-asrfjpkcV3DXf__esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Droid Sans Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/droidsansmono/v7/ns-m2xQYezAtqh7ai59hJcwD6PD0c3_abh9zHKQtbGU.ttf")), array("kind" => "webfonts#webfont", "family" => "Droid Serif", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/droidserif/v6/QQt14e8dY39u-eYBZmppwXe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/droidserif/v6/DgAtPy6rIVa2Zx3Xh9KaNaCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/droidserif/v6/cj2hUnSRBhwmSPr9kS5890eOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/droidserif/v6/c92rD_x0V1LslSFt3-QEps_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Duru Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/durusans/v9/xn7iYH8xwmSyTvEV_HOxTw.ttf")), array("kind" => "webfonts#webfont", "family" => "Dynalight", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dynalight/v5/-CWsIe8OUDWTIHjSAh41kA.ttf")), array("kind" => "webfonts#webfont", "family" => "EB Garamond", "category" => "serif", "variants" => array("regular"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ebgaramond/v7/CDR0kuiFK7I1OZ2hSdR7G6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Eagle Lake", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/eaglelake/v4/ZKlYin7caemhx9eSg6RvPfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Eater", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/eater/v5/gm6f3OmYEdbs3lPQtUfBkA.ttf")), array("kind" => "webfonts#webfont", "family" => "Economica", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/economica/v4/UK4l2VEpwjv3gdcwbwXE9C3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/economica/v4/G4rJRujzZbq9Nxngu9l3hg.ttf", "italic" => "http://fonts.gstatic.com/s/economica/v4/p5O9AVeUqx_n35xQRinNYaCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/economica/v4/ac5dlUsedQ03RqGOeay-3Xe1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Eczar", "category" => "serif", "variants" => array("regular", "500", "600", "700", "800"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v4", "lastModified" => "2016-02-24", "files" => array("500" => "http://fonts.gstatic.com/s/eczar/v4/Ooe4KaPp2594tF8TbMfdlQ.ttf", "600" => "http://fonts.gstatic.com/s/eczar/v4/IjQsWW0bmgkZ6lnN72cnTQ.ttf", "700" => "http://fonts.gstatic.com/s/eczar/v4/ELC8RVXfBMb3VuuHtMwBOA.ttf", "800" => "http://fonts.gstatic.com/s/eczar/v4/9Uyt6nTZLx_Qj5_WRah-iQ.ttf", "regular" => "http://fonts.gstatic.com/s/eczar/v4/uKZcAQ5JBBs1UbeXFRbBRg.ttf")), array("kind" => "webfonts#webfont", "family" => "Ek Mukta", "category" => "sans-serif", "variants" => array("200", "300", "regular", "500", "600", "700", "800"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/ekmukta/v7/crtkNHh5JcM3VJKG0E-B36CWcynf_cDxXwCLxiixG1c.ttf", "300" => "http://fonts.gstatic.com/s/ekmukta/v7/mpaAv7CIyk0VnZlqSneVxKCWcynf_cDxXwCLxiixG1c.ttf", "500" => "http://fonts.gstatic.com/s/ekmukta/v7/PZ1y2MstFczWvBlFSgzMyaCWcynf_cDxXwCLxiixG1c.ttf", "600" => "http://fonts.gstatic.com/s/ekmukta/v7/Z5Mfzeu6M3emakcJO2QeTqCWcynf_cDxXwCLxiixG1c.ttf", "700" => "http://fonts.gstatic.com/s/ekmukta/v7/4ugcOGR28Jn-oBIn0-qLYaCWcynf_cDxXwCLxiixG1c.ttf", "800" => "http://fonts.gstatic.com/s/ekmukta/v7/O68TH5OjEhVmn9_gIrcfS6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/ekmukta/v7/aFcjXdC5jyJ1p8w54wIIrg.ttf")), array("kind" => "webfonts#webfont", "family" => "Electrolize", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/electrolize/v5/yFVu5iokC-nt4B1Cyfxb9aCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Elsie", "category" => "display", "variants" => array("regular", "900"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/elsie/v5/1t-9f0N2NFYwAgN7oaISqg.ttf", "regular" => "http://fonts.gstatic.com/s/elsie/v5/gwspePauE45BJu6Ok1QrfQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Elsie Swash Caps", "category" => "display", "variants" => array("regular", "900"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/elsieswashcaps/v4/iZnus9qif0tR5pGaDv5zdKoKBWBozTtxi30NfZDOXXU.ttf", "regular" => "http://fonts.gstatic.com/s/elsieswashcaps/v4/9L3hIJMPCf6sxCltnxd6X2YeFSdnSpRYv5h9gpdlD1g.ttf")), array("kind" => "webfonts#webfont", "family" => "Emblema One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/emblemaone/v5/7IlBUjBWPIiw7cr_O2IfSaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Emilys Candy", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/emilyscandy/v4/PofLVm6v1SwZGOzC8s-I3S3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Engagement", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/engagement/v5/4Uz0Jii7oVPcaFRYmbpU6vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Englebert", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/englebert/v4/sll38iOvOuarDTYBchlP3Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Enriqueta", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/enriqueta/v5/I27Pb-wEGH2ajLYP0QrtSC3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/enriqueta/v5/_p90TrIwR1SC-vDKtmrv6A.ttf")), array("kind" => "webfonts#webfont", "family" => "Erica One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/ericaone/v7/cIBnH2VAqQMIGYAcE4ufvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Esteban", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/esteban/v4/ESyhLgqDDyK5JcFPp2svDw.ttf")), array("kind" => "webfonts#webfont", "family" => "Euphoria Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/euphoriascript/v4/c4XB4Iijj_NvSsCF4I0O2MxLhO8OSNnfAp53LK1_iRs.ttf")), array("kind" => "webfonts#webfont", "family" => "Ewert", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ewert/v4/Em8hrzuzSbfHcTVqMjbAQg.ttf")), array("kind" => "webfonts#webfont", "family" => "Exo", "category" => "sans-serif", "variants" => array("100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/exo/v4/RI7A9uwjRmPbVp0n8e-Jvg.ttf", "200" => "http://fonts.gstatic.com/s/exo/v4/F8OfC_swrRRxpFt-tlXZQg.ttf", "300" => "http://fonts.gstatic.com/s/exo/v4/SBrN7TKUqgGUvfxqHqsnNw.ttf", "500" => "http://fonts.gstatic.com/s/exo/v4/jCg6DmGGXt_OVyp5ofQHPw.ttf", "600" => "http://fonts.gstatic.com/s/exo/v4/q_SG5kXUmOcIvFpgtdZnlw.ttf", "700" => "http://fonts.gstatic.com/s/exo/v4/3_jwsL4v9uHjl5Q37G57mw.ttf", "800" => "http://fonts.gstatic.com/s/exo/v4/yLPuxBuV0lzqibRJyooOJg.ttf", "900" => "http://fonts.gstatic.com/s/exo/v4/97d0nd6Yv4-SA_X92xAuZA.ttf", "100italic" => "http://fonts.gstatic.com/s/exo/v4/qtGyZZlWb2EEvby3ZPosxw.ttf", "200italic" => "http://fonts.gstatic.com/s/exo/v4/fr4HBfXHYiIngW2_bhlgRw.ttf", "300italic" => "http://fonts.gstatic.com/s/exo/v4/3gmiLjBegIfcDLISjTGA1g.ttf", "regular" => "http://fonts.gstatic.com/s/exo/v4/eUEzTFueNXRVhbt4PEB8kQ.ttf", "italic" => "http://fonts.gstatic.com/s/exo/v4/cfgolWisMSURhpQeVHl_NA.ttf", "500italic" => "http://fonts.gstatic.com/s/exo/v4/lo5eTdCNJZQVN08p8RnzAQ.ttf", "600italic" => "http://fonts.gstatic.com/s/exo/v4/0cExa8K_pxS2lTuMr68XUA.ttf", "700italic" => "http://fonts.gstatic.com/s/exo/v4/0me55yJIxd5vyQ9bF7SsiA.ttf", "800italic" => "http://fonts.gstatic.com/s/exo/v4/n3LejeKVj_8gtZq5fIgNYw.ttf", "900italic" => "http://fonts.gstatic.com/s/exo/v4/JHTkQVhzyLtkY13Ye95TJQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Exo 2", "category" => "sans-serif", "variants" => array("100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/exo2/v3/oVOtQy53isv97g4UhBUDqg.ttf", "200" => "http://fonts.gstatic.com/s/exo2/v3/qa-Ci2pBwJdCxciE1ErifQ.ttf", "300" => "http://fonts.gstatic.com/s/exo2/v3/nLUBdz_lHHoVIPor05Byhw.ttf", "500" => "http://fonts.gstatic.com/s/exo2/v3/oM0rzUuPqVJpW-VEIpuW5w.ttf", "600" => "http://fonts.gstatic.com/s/exo2/v3/YnSn3HsyvyI1feGSdRMYqA.ttf", "700" => "http://fonts.gstatic.com/s/exo2/v3/2DiK4XkdTckfTk6we73-bQ.ttf", "800" => "http://fonts.gstatic.com/s/exo2/v3/IVYl_7dJruOg8zKRpC8Hrw.ttf", "900" => "http://fonts.gstatic.com/s/exo2/v3/e8csG8Wnu87AF6uCndkFRQ.ttf", "100italic" => "http://fonts.gstatic.com/s/exo2/v3/LNYVgsJcaCxoKFHmd4AZcg.ttf", "200italic" => "http://fonts.gstatic.com/s/exo2/v3/DCrVxDVvS69n50O-5erZVvesZW2xOQ-xsNqO47m55DA.ttf", "300italic" => "http://fonts.gstatic.com/s/exo2/v3/iSy9VTeUTiqiurQg2ywtu_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/exo2/v3/Pf_kZuIH5c5WKVkQUaeSWQ.ttf", "italic" => "http://fonts.gstatic.com/s/exo2/v3/xxA5ZscX9sTU6U0lZJUlYA.ttf", "500italic" => "http://fonts.gstatic.com/s/exo2/v3/amzRVCB-gipwdihZZ2LtT_esZW2xOQ-xsNqO47m55DA.ttf", "600italic" => "http://fonts.gstatic.com/s/exo2/v3/Vmo58BiptGwfVFb0teU5gPesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/exo2/v3/Sdo-zW-4_--pDkTg6bYrY_esZW2xOQ-xsNqO47m55DA.ttf", "800italic" => "http://fonts.gstatic.com/s/exo2/v3/p0TA6KeOz1o4rySEbvUxI_esZW2xOQ-xsNqO47m55DA.ttf", "900italic" => "http://fonts.gstatic.com/s/exo2/v3/KPhsGCoT2-7Uj6pMlRscH_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Expletus Sans", "category" => "display", "variants" => array("regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/expletussans/v9/cl6rhMY77Ilk8lB_uYRRwAqQmZ7VjhwksfpNVG0pqGc.ttf", "600" => "http://fonts.gstatic.com/s/expletussans/v9/cl6rhMY77Ilk8lB_uYRRwCvj1tU7IJMS3CS9kCx2B3U.ttf", "700" => "http://fonts.gstatic.com/s/expletussans/v9/cl6rhMY77Ilk8lB_uYRRwFCbmAUID8LN-q3pJpOk3Ys.ttf", "regular" => "http://fonts.gstatic.com/s/expletussans/v9/gegTSDBDs5le3g6uxU1ZsX8f0n03UdmQgF_CLvNR2vg.ttf", "italic" => "http://fonts.gstatic.com/s/expletussans/v9/Y-erXmY0b6DU_i2Qu0hTJj4G9C9ttb0Oz5Cvf0qOitE.ttf", "500italic" => "http://fonts.gstatic.com/s/expletussans/v9/sRBNtc46w65uJE451UYmW87DCVO6wo6i5LKIyZDzK40.ttf", "600italic" => "http://fonts.gstatic.com/s/expletussans/v9/sRBNtc46w65uJE451UYmW8yKH23ZS6zCKOFHG0e_4JE.ttf", "700italic" => "http://fonts.gstatic.com/s/expletussans/v9/sRBNtc46w65uJE451UYmW5F66r9C4AnxxlBlGd7xY4g.ttf")), array("kind" => "webfonts#webfont", "family" => "Fanwood Text", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fanwoodtext/v6/hDNDHUlsSb8bgnEmDp4T_i3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/fanwoodtext/v6/0J3SBbkMZqBV-3iGxs5E9_MZXuCXbOrAvx5R0IT5Oyo.ttf")), array("kind" => "webfonts#webfont", "family" => "Fascinate", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fascinate/v5/ZE0637WWkBPKt1AmFaqD3Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Fascinate Inline", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fascinateinline/v6/lRguYfMfWArflkm5aOQ5QJmp8DTZ6iHear7UV05iykg.ttf")), array("kind" => "webfonts#webfont", "family" => "Faster One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fasterone/v6/YxTOW2sf56uxD1T7byP5K_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Fasthand", "category" => "serif", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v7", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/fasthand/v7/6XAagHH_KmpZL67wTvsETQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Fauna One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/faunaone/v4/8kL-wpAPofcAMELI_5NRnQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Federant", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/federant/v8/tddZFSiGvxICNOGra0i5aA.ttf")), array("kind" => "webfonts#webfont", "family" => "Federo", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/federo/v8/JPhe1S2tujeyaR79gXBLeQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Felipa", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/felipa/v4/SeyfyFZY7abAQXGrOIYnYg.ttf")), array("kind" => "webfonts#webfont", "family" => "Fenix", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fenix/v4/Ak8wR3VSlAN7VN_eMeJj7Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Finger Paint", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fingerpaint/v4/m_ZRbiY-aPb13R3DWPBGXy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Fira Mono", "category" => "monospace", "variants" => array("regular", "700"), "subsets" => array("cyrillic", "latin-ext", "latin", "greek", "cyrillic-ext"), "version" => "v3", "lastModified" => "2015-04-06", "files" => array("700" => "http://fonts.gstatic.com/s/firamono/v3/l24Wph3FsyKAbJ8dfExTZy3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/firamono/v3/WQOm1D4RO-yvA9q9trJc8g.ttf")), array("kind" => "webfonts#webfont", "family" => "Fira Sans", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "latin", "greek", "cyrillic-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/firasans/v5/VTBnrK42EiOBncVyQXZ7jy3USBnSvpkopQaUR-2r7iU.ttf", "500" => "http://fonts.gstatic.com/s/firasans/v5/zM2u8V3CuPVwAAXFQcDi4C3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/firasans/v5/DugPdSljmOTocZOR2CItOi3USBnSvpkopQaUR-2r7iU.ttf", "300italic" => "http://fonts.gstatic.com/s/firasans/v5/6s0YCA9oCTF6hM60YM-qTS9-WlPSxbfiI49GsXo3q0g.ttf", "regular" => "http://fonts.gstatic.com/s/firasans/v5/nsT0isDy56OkSX99sFQbXw.ttf", "italic" => "http://fonts.gstatic.com/s/firasans/v5/cPT_2ddmoxsUuMtQqa8zGqCWcynf_cDxXwCLxiixG1c.ttf", "500italic" => "http://fonts.gstatic.com/s/firasans/v5/6s0YCA9oCTF6hM60YM-qTcCNfqCYlB_eIx7H1TVXe60.ttf", "700italic" => "http://fonts.gstatic.com/s/firasans/v5/6s0YCA9oCTF6hM60YM-qTXe1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Fjalla One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fjallaone/v4/3b7vWCfOZsU53vMa8LWsf_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Fjord One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fjordone/v5/R_YHK8au2uFPw5tNu5N7zw.ttf")), array("kind" => "webfonts#webfont", "family" => "Flamenco", "category" => "display", "variants" => array("300", "regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/flamenco/v6/x9iI5CogvuZVCGoRHwXuo6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/flamenco/v6/HC0ugfLLgt26I5_BWD1PZA.ttf")), array("kind" => "webfonts#webfont", "family" => "Flavors", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/flavors/v5/SPJi5QclATvon8ExcKGRvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Fondamento", "category" => "handwriting", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fondamento/v5/6LWXcjT1B7bnWluAOSNfMPesZW2xOQ-xsNqO47m55DA.ttf", "italic" => "http://fonts.gstatic.com/s/fondamento/v5/y6TmwhSbZ8rYq7OTFyo7OS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Fontdiner Swanky", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fontdinerswanky/v6/8_GxIO5ixMtn5P6COsF3TlBjMPLzPAFJwRBn-s1U7kA.ttf")), array("kind" => "webfonts#webfont", "family" => "Forum", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/forum/v7/MZUpsq1VfLrqv8eSDcbrrQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Francois One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/francoisone/v9/bYbkq2nU2TSx4SwFbz5sCC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Freckle Face", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/freckleface/v4/7-B8j9BPJgazdHIGqPNv8y3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Fredericka the Great", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/frederickathegreat/v5/7Es8Lxoku-e5eOZWpxw18nrnet6gXN1McwdQxS1dVrI.ttf")), array("kind" => "webfonts#webfont", "family" => "Fredoka One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fredokaone/v4/QKfwXi-z-KtJAlnO2ethYqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Freehand", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/freehand/v8/uEBQxvA0lnn_BrD6krlxMw.ttf")), array("kind" => "webfonts#webfont", "family" => "Fresca", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fresca/v5/2q7Qm9sCo1tWvVgSDVWNIw.ttf")), array("kind" => "webfonts#webfont", "family" => "Frijole", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/frijole/v5/L2MfZse-2gCascuD-nLhWg.ttf")), array("kind" => "webfonts#webfont", "family" => "Fruktur", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fruktur/v8/PnQvfEi1LssAvhJsCwH__w.ttf")), array("kind" => "webfonts#webfont", "family" => "Fugaz One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fugazone/v6/5tteVDCwxsr8-5RuSiRWOw.ttf")), array("kind" => "webfonts#webfont", "family" => "GFS Didot", "category" => "serif", "variants" => array("regular"), "subsets" => array("greek"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gfsdidot/v6/jQKxZy2RU-h9tkPZcRVluA.ttf")), array("kind" => "webfonts#webfont", "family" => "GFS Neohellenic", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gfsneohellenic/v7/7HwjPQa7qNiOsnUce2h4448_BwCLZY3eDSV6kppAwI8.ttf", "regular" => "http://fonts.gstatic.com/s/gfsneohellenic/v7/B4xRqbn-tANVqVgamMsSDiayCZa0z7CpFzlkqoCHztc.ttf", "italic" => "http://fonts.gstatic.com/s/gfsneohellenic/v7/KnaWrO4awITAqigQIIYXKkCTdomiyJpIzPbEbIES3rU.ttf", "700italic" => "http://fonts.gstatic.com/s/gfsneohellenic/v7/FwWjoX6XqT-szJFyqsu_GYFF0fM4h-krcpQk7emtCpE.ttf")), array("kind" => "webfonts#webfont", "family" => "Gabriela", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gabriela/v4/B-2ZfbAO3HDrxqV6lR5tdA.ttf")), array("kind" => "webfonts#webfont", "family" => "Gafata", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gafata/v5/aTFqlki_3Dc3geo-FxHTvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Galdeano", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/galdeano/v6/ZKFMQI6HxEG1jOT0UGSZUg.ttf")), array("kind" => "webfonts#webfont", "family" => "Galindo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/galindo/v4/2lafAS_ZEfB33OJryhXDUg.ttf")), array("kind" => "webfonts#webfont", "family" => "Gentium Basic", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gentiumbasic/v8/2qL6yulgGf0wwgOp-UqGyLNuTeOOLg3nUymsEEGmdO0.ttf", "regular" => "http://fonts.gstatic.com/s/gentiumbasic/v8/KCktj43blvLkhOTolFn-MYtBLojGU5Qdl8-5NL4v70w.ttf", "italic" => "http://fonts.gstatic.com/s/gentiumbasic/v8/qoFz4NSMaYC2UmsMAG3lyTj3mvXnCeAk09uTtmkJGRc.ttf", "700italic" => "http://fonts.gstatic.com/s/gentiumbasic/v8/8N9-c_aQDJ8LbI1NGVMrwtswO1vWwP9exiF8s0wqW10.ttf")), array("kind" => "webfonts#webfont", "family" => "Gentium Book Basic", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gentiumbookbasic/v7/T2vUYmWzlqUtgLYdlemGnaWESMHIjnSjm9UUxYtEOko.ttf", "regular" => "http://fonts.gstatic.com/s/gentiumbookbasic/v7/IRFxB2matTxrjZt6a3FUnrWDjKAyldGEr6eEi2MBNeY.ttf", "italic" => "http://fonts.gstatic.com/s/gentiumbookbasic/v7/qHqW2lwKO8-uTfIkh8FsUfXfjMwrYnmPVsQth2IcAPY.ttf", "700italic" => "http://fonts.gstatic.com/s/gentiumbookbasic/v7/632u7TMIoFDWQYUaHFUp5PA2A9KyRZEkn4TZVuhsWRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Geo", "category" => "sans-serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/geo/v8/mJuJYk5Pww84B4uHAQ1XaA.ttf", "italic" => "http://fonts.gstatic.com/s/geo/v8/8_r1wToF7nPdDuX1qxel6Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Geostar", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/geostar/v6/A8WQbhQbpYx3GWWaShJ9GA.ttf")), array("kind" => "webfonts#webfont", "family" => "Geostar Fill", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/geostarfill/v6/Y5ovXPPOHYTfQzK2aM-hui3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Germania One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/germaniaone/v4/3_6AyUql_-FbDi1e68jHdC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Gidugu", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gidugu/v3/Ey6Eq3hrT6MM58iFItFcgw.ttf")), array("kind" => "webfonts#webfont", "family" => "Gilda Display", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gildadisplay/v4/8yAVUZLLZ3wb7dSsjix0CADHmap7fRWINAsw8-RaxNg.ttf")), array("kind" => "webfonts#webfont", "family" => "Give You Glory", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/giveyouglory/v6/DFEWZFgGmfseyIdGRJAxuBwwkpSPZdvjnMtysdqprfI.ttf")), array("kind" => "webfonts#webfont", "family" => "Glass Antiqua", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/glassantiqua/v4/0yLrXKplgdUDIMz5TnCHNODcg5akpSnIcsPhLOFv7l8.ttf")), array("kind" => "webfonts#webfont", "family" => "Glegoo", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/glegoo/v5/TlLolbauH0-0Aiz1LUH5og.ttf", "regular" => "http://fonts.gstatic.com/s/glegoo/v5/2tf-h3n2A_SNYXEO0C8bKw.ttf")), array("kind" => "webfonts#webfont", "family" => "Gloria Hallelujah", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gloriahallelujah/v8/CA1k7SlXcY5kvI81M_R28Q3RdPdyebSUyJECJouPsvA.ttf")), array("kind" => "webfonts#webfont", "family" => "Goblin One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/goblinone/v6/331XtzoXgpVEvNTVcBJ_C_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Gochi Hand", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gochihand/v7/KT1-WxgHsittJ34_20IfAPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Gorditas", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gorditas/v4/6-XCeknmxaon8AUqVkMnHaCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/gorditas/v4/uMgZhXUyH6qNGF3QsjQT5Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Goudy Bookletter 1911", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/goudybookletter1911/v6/l5lwlGTN3pEY5Bf-rQEuIIjNDsyURsIKu4GSfvSE4mA.ttf")), array("kind" => "webfonts#webfont", "family" => "Graduate", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/graduate/v4/JpAmYLHqcIh9_Ff35HHwiA.ttf")), array("kind" => "webfonts#webfont", "family" => "Grand Hotel", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/grandhotel/v4/C_A8HiFZjXPpnMt38XnK7qCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Gravitas One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gravitasone/v6/nBHdBv6zVNU8MtP6w9FwTS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Great Vibes", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/greatvibes/v4/4Mi5RG_9LjQYrTU55GN_L6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Griffy", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/griffy/v4/vWkyYGBSyE5xjnShNtJtzw.ttf")), array("kind" => "webfonts#webfont", "family" => "Gruppo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gruppo/v7/pS_JM0cK_piBZve-lfUq9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Gudea", "category" => "sans-serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gudea/v4/lsip4aiWhJ9bx172Y9FN_w.ttf", "regular" => "http://fonts.gstatic.com/s/gudea/v4/S-4QqBlkMPiiA3jNeCR5yw.ttf", "italic" => "http://fonts.gstatic.com/s/gudea/v4/7mNgsGw_vfS-uUgRVXNDSw.ttf")), array("kind" => "webfonts#webfont", "family" => "Gurajada", "category" => "serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gurajada/v4/6Adfkl4PCRyq6XTENACEyA.ttf")), array("kind" => "webfonts#webfont", "family" => "Habibi", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/habibi/v5/YYyqXF6pWpL7kmKgS_2iUA.ttf")), array("kind" => "webfonts#webfont", "family" => "Halant", "category" => "serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v2", "lastModified" => "2016-03-14", "files" => array("300" => "http://fonts.gstatic.com/s/halant/v2/dM3ItAOWNNod_Cf3MnLlEg.ttf", "500" => "http://fonts.gstatic.com/s/halant/v2/tlsNj3K-hJKtiirTDtUbkQ.ttf", "600" => "http://fonts.gstatic.com/s/halant/v2/zNR2WvI_V8o652vIZp3X4Q.ttf", "700" => "http://fonts.gstatic.com/s/halant/v2/D9FN7OH89AuCmZDLHbPQfA.ttf", "regular" => "http://fonts.gstatic.com/s/halant/v2/rEs7Jk3SVyt3cTx6DoTu1w.ttf")), array("kind" => "webfonts#webfont", "family" => "Hammersmith One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/hammersmithone/v7/FWNn6ITYqL6or7ZTmBxRhjjVlsJB_M_Q_LtZxsoxvlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Hanalei", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/hanalei/v6/Sx8vVMBnXSQyK6Cn0CBJ3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Hanalei Fill", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/hanaleifill/v5/5uPeWLnaDdtm4UBG26Ds6C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Handlee", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/handlee/v5/6OfkXkyC0E5NZN80ED8u3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Hanuman", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/hanuman/v9/lzzXZ2l84x88giDrbfq76vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/hanuman/v9/hRhwOGGmElJSl6KSPvEnOQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Happy Monkey", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/happymonkey/v5/c2o0ps8nkBmaOYctqBq1rS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Headland One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/headlandone/v4/iGmBeOvQGfq9DSbjJ8jDVy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Henny Penny", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/hennypenny/v4/XRgo3ogXyi3tpsFfjImRF6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Herr Von Muellerhoff", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/herrvonmuellerhoff/v6/mmy24EUmk4tjm4gAEjUd7NLGIYrUsBdh-JWHYgiDiMU.ttf")), array("kind" => "webfonts#webfont", "family" => "Hind", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/hind/v5/qa346Adgv9kPDXoD1my4kA.ttf", "500" => "http://fonts.gstatic.com/s/hind/v5/2cs8RCVcYtiv4iNDH1UsQQ.ttf", "600" => "http://fonts.gstatic.com/s/hind/v5/TUKUmFMXSoxloBP1ni08oA.ttf", "700" => "http://fonts.gstatic.com/s/hind/v5/cXJJavLdUbCfjxlsA6DqTw.ttf", "regular" => "http://fonts.gstatic.com/s/hind/v5/mktFHh5Z5P9YjGKSslSUtA.ttf")), array("kind" => "webfonts#webfont", "family" => "Hind Siliguri", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("bengali", "latin-ext", "latin"), "version" => "v1", "lastModified" => "2015-09-09", "files" => array("300" => "http://fonts.gstatic.com/s/hindsiliguri/v1/fBpmjMpv5Rh6S25yVfWJnzoJ52uD-1fmXmi8u0n_zsc.ttf", "500" => "http://fonts.gstatic.com/s/hindsiliguri/v1/fBpmjMpv5Rh6S25yVfWJn__2zpxNHQ3utWt_82o9dAo.ttf", "600" => "http://fonts.gstatic.com/s/hindsiliguri/v1/fBpmjMpv5Rh6S25yVfWJn-x91FDzFvnud68bXrNkpDA.ttf", "700" => "http://fonts.gstatic.com/s/hindsiliguri/v1/fBpmjMpv5Rh6S25yVfWJn6iiXuG_rGcOxkuidirlnJE.ttf", "regular" => "http://fonts.gstatic.com/s/hindsiliguri/v1/f2eEi2pbIa8eBfNwpUl0Am_MnNA9OgK8I1F23mNWOpE.ttf")), array("kind" => "webfonts#webfont", "family" => "Hind Vadodara", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "latin", "gujarati"), "version" => "v1", "lastModified" => "2015-09-09", "files" => array("300" => "http://fonts.gstatic.com/s/hindvadodara/v1/KrZ6f_YevRawHvh0qDBkTbDwfZ__Dotj_J8NiWv76DQ.ttf", "500" => "http://fonts.gstatic.com/s/hindvadodara/v1/KrZ6f_YevRawHvh0qDBkTZzEKvFIU9WyojfbAkhDb6c.ttf", "600" => "http://fonts.gstatic.com/s/hindvadodara/v1/KrZ6f_YevRawHvh0qDBkTfgXs2VXrZsRiQ1c96pXZKI.ttf", "700" => "http://fonts.gstatic.com/s/hindvadodara/v1/KrZ6f_YevRawHvh0qDBkTYGjoH95IEFGA7BjhXnx_eg.ttf", "regular" => "http://fonts.gstatic.com/s/hindvadodara/v1/9c6KKeibr6NtFqknnNxZB-Dcg5akpSnIcsPhLOFv7l8.ttf")), array("kind" => "webfonts#webfont", "family" => "Holtwood One SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/holtwoodonesc/v7/sToOq3cIxbfnhbEkgYNuBbAgSRh1LpJXlLfl8IbsmHg.ttf")), array("kind" => "webfonts#webfont", "family" => "Homemade Apple", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/homemadeapple/v6/yg3UMEsefgZ8IHz_ryz86BiPOmFWYV1WlrJkRafc4c0.ttf")), array("kind" => "webfonts#webfont", "family" => "Homenaje", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/homenaje/v5/v0YBU0iBRrGdVjDNQILxtA.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell DW Pica", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfelldwpica/v6/W81bfaWiUicLSPbJhW-ATsA5qm663gJGVdtpamafG5A.ttf", "italic" => "http://fonts.gstatic.com/s/imfelldwpica/v6/alQJ8SK5aSOZVaelYoyT4PL2asmh5DlYQYCosKo6yQs.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell DW Pica SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfelldwpicasc/v6/xBKKJV4z2KsrtQnmjGO17JZ9RBdEL0H9o5qzT1Rtof4.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell Double Pica", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfelldoublepica/v6/yN1wY_01BkQnO0LYAhXdUol14jEdVOhEmvtCMCVwYak.ttf", "italic" => "http://fonts.gstatic.com/s/imfelldoublepica/v6/64odUh2hAw8D9dkFKTlWYq0AWwkgdQfsRHec8TYi4mI.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell Double Pica SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfelldoublepicasc/v6/jkrUtrLFpMw4ZazhfkKsGwc4LoC4OJUqLw9omnT3VOU.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell English", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellenglish/v6/xwIisCqGFi8pff-oa9uSVHGNmx1fDm-u2eBJHQkdrmk.ttf", "italic" => "http://fonts.gstatic.com/s/imfellenglish/v6/Z3cnIAI_L3XTRfz4JuZKbuewladMPCWTthtMv9cPS-c.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell English SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellenglishsc/v6/h3Tn6yWfw4b5qaLD1RWvz5ATixNthKRRR1XVH3rJNiw.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell French Canon", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellfrenchcanon/v6/iKB0WL1BagSpNPz3NLMdsJ3V2FNpBrlLSvqUnERhBP8.ttf", "italic" => "http://fonts.gstatic.com/s/imfellfrenchcanon/v6/owCuNQkLLFW7TBBPJbMnhRa-QL94KdW80H29tcyld2A.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell French Canon SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellfrenchcanonsc/v6/kA3bS19-tQbeT_iG32EZmaiyyzHwYrAbmNulTz423iM.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell Great Primer", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellgreatprimer/v6/AL8ALGNthei20f9Cu3e93rgeX3ROgtTz44CitKAxzKI.ttf", "italic" => "http://fonts.gstatic.com/s/imfellgreatprimer/v6/1a-artkXMVg682r7TTxVY1_YG2SFv8Ma7CxRl1S3o7g.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell Great Primer SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellgreatprimersc/v6/A313vRj97hMMGFjt6rgSJtRg-ciw1Y27JeXb2Zv4lZQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Iceberg", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/iceberg/v4/p2XVm4M-N0AOEEOymFKC5w.ttf")), array("kind" => "webfonts#webfont", "family" => "Iceland", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/iceland/v5/kq3uTMGgvzWGNi39B_WxGA.ttf")), array("kind" => "webfonts#webfont", "family" => "Imprima", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imprima/v4/eRjquWLjwLGnTEhLH7u3kA.ttf")), array("kind" => "webfonts#webfont", "family" => "Inconsolata", "category" => "monospace", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v12", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/inconsolata/v12/AIed271kqQlcIRSOnQH0yXe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/inconsolata/v12/7bMKuoy6Nh0ft0SHnIGMuaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Inder", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/inder/v5/C38TwecLTfKxIHDc_Adcrw.ttf")), array("kind" => "webfonts#webfont", "family" => "Indie Flower", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/indieflower/v8/10JVD_humAd5zP2yrFqw6i3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Inika", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/inika/v4/bl3ZoTyrWsFun2zYbsgJrA.ttf", "regular" => "http://fonts.gstatic.com/s/inika/v4/eZCrULQGaIxkrRoGz_DjhQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Inknut Antiqua", "category" => "serif", "variants" => array("300", "regular", "500", "600", "700", "800", "900"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIg6hmPNSXwHGnJQCeQHKUMo.ttf", "500" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIiYCDvi1XFzRnTV7qUFsNgk.ttf", "600" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIjLEgY6PI0GrY6L00mykcEQ.ttf", "700" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIlRhfXn9P4_QueZ7VkUHUNc.ttf", "800" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVInARjXVu2t2krcNTHiCb1qY.ttf", "900" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIrTsNy1JrFNT1qKy8j7W3CU.ttf", "regular" => "http://fonts.gstatic.com/s/inknutantiqua/v1/VlmmTfOrxr3HfcnhMueX9arFJ4O13IHVxZbM6yoslpo.ttf")), array("kind" => "webfonts#webfont", "family" => "Irish Grover", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/irishgrover/v6/kUp7uUPooL-KsLGzeVJbBC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Istok Web", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/istokweb/v10/2koEo4AKFSvK4B52O_Mwai3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/istokweb/v10/RYLSjEXQ0nNtLLc4n7--dQ.ttf", "italic" => "http://fonts.gstatic.com/s/istokweb/v10/kvcT2SlTjmGbC3YlZxmrl6CWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/istokweb/v10/ycQ3g52ELrh3o_HYCNNUw3e1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Italiana", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/italiana/v4/dt95fkCSTOF-c6QNjwSycA.ttf")), array("kind" => "webfonts#webfont", "family" => "Italianno", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/italianno/v6/HsyHnLpKf8uP7aMpDQHZmg.ttf")), array("kind" => "webfonts#webfont", "family" => "Itim", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("vietnamese", "thai", "latin-ext", "latin"), "version" => "v1", "lastModified" => "2015-08-06", "files" => array("regular" => "http://fonts.gstatic.com/s/itim/v1/HHV9WK2x5lUkc5bxMXG8Tw.ttf")), array("kind" => "webfonts#webfont", "family" => "Jacques Francois", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jacquesfrancois/v4/_-0XWPQIW6tOzTHg4KaJ_M13D_4KM32Q4UmTSjpuNGQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Jacques Francois Shadow", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jacquesfrancoisshadow/v4/V14y0H3vq56fY9SV4OL_FASt0D_oLVawA8L8b9iKjbs.ttf")), array("kind" => "webfonts#webfont", "family" => "Jaldi", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v2", "lastModified" => "2015-06-10", "files" => array("700" => "http://fonts.gstatic.com/s/jaldi/v2/OIbtgjjEp3aVWtjF6WY8mA.ttf", "regular" => "http://fonts.gstatic.com/s/jaldi/v2/x1vR-bPW9a1EB-BUVqttCw.ttf")), array("kind" => "webfonts#webfont", "family" => "Jim Nightshade", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jimnightshade/v4/_n43lYHXVWNgXegdYRIK9CF1W_bo0EdycfH0kHciIic.ttf")), array("kind" => "webfonts#webfont", "family" => "Jockey One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jockeyone/v6/cAucnOZLvFo07w2AbufBCfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Jolly Lodger", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jollylodger/v4/RX8HnkBgaEKQSHQyP9itiS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Josefin Sans", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/josefinsans/v9/q9w3H4aeBxj0hZ8Osfi3d8SVQ0giZ-l_NELu3lgGyYw.ttf", "300" => "http://fonts.gstatic.com/s/josefinsans/v9/C6HYlRF50SGJq1XyXj04z6cQoVhARpoaILP7amxE_8g.ttf", "600" => "http://fonts.gstatic.com/s/josefinsans/v9/C6HYlRF50SGJq1XyXj04z2v8CylhIUtwUiYO7Z2wXbE.ttf", "700" => "http://fonts.gstatic.com/s/josefinsans/v9/C6HYlRF50SGJq1XyXj04z0D2ttfZwueP-QU272T9-k4.ttf", "100italic" => "http://fonts.gstatic.com/s/josefinsans/v9/s7-P1gqRNRNn-YWdOYnAOXXcj1rQwlNLIS625o-SrL0.ttf", "300italic" => "http://fonts.gstatic.com/s/josefinsans/v9/ppse0J9fKSaoxCIIJb33Gyna0FLWfcB-J_SAYmcAXaI.ttf", "regular" => "http://fonts.gstatic.com/s/josefinsans/v9/xgzbb53t8j-Mo-vYa23n5i3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/josefinsans/v9/q9w3H4aeBxj0hZ8Osfi3d_MZXuCXbOrAvx5R0IT5Oyo.ttf", "600italic" => "http://fonts.gstatic.com/s/josefinsans/v9/ppse0J9fKSaoxCIIJb33G4R-5-urNOGAobhAyctHvW8.ttf", "700italic" => "http://fonts.gstatic.com/s/josefinsans/v9/ppse0J9fKSaoxCIIJb33G_As9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Josefin Slab", "category" => "serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/josefinslab/v6/etsUjZYO8lTLU85lDhZwUsSVQ0giZ-l_NELu3lgGyYw.ttf", "300" => "http://fonts.gstatic.com/s/josefinslab/v6/NbE6ykYuM2IyEwxQxOIi2KcQoVhARpoaILP7amxE_8g.ttf", "600" => "http://fonts.gstatic.com/s/josefinslab/v6/NbE6ykYuM2IyEwxQxOIi2Gv8CylhIUtwUiYO7Z2wXbE.ttf", "700" => "http://fonts.gstatic.com/s/josefinslab/v6/NbE6ykYuM2IyEwxQxOIi2ED2ttfZwueP-QU272T9-k4.ttf", "100italic" => "http://fonts.gstatic.com/s/josefinslab/v6/8BjDChqLgBF3RJKfwHIYh3Xcj1rQwlNLIS625o-SrL0.ttf", "300italic" => "http://fonts.gstatic.com/s/josefinslab/v6/af9sBoKGPbGO0r21xJulyyna0FLWfcB-J_SAYmcAXaI.ttf", "regular" => "http://fonts.gstatic.com/s/josefinslab/v6/46aYWdgz-1oFX11flmyEfS3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/josefinslab/v6/etsUjZYO8lTLU85lDhZwUvMZXuCXbOrAvx5R0IT5Oyo.ttf", "600italic" => "http://fonts.gstatic.com/s/josefinslab/v6/af9sBoKGPbGO0r21xJuly4R-5-urNOGAobhAyctHvW8.ttf", "700italic" => "http://fonts.gstatic.com/s/josefinslab/v6/af9sBoKGPbGO0r21xJuly_As9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Joti One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jotione/v4/P3r_Th0ESHJdzunsvWgUfQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Judson", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("vietnamese", "latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/judson/v9/he4a2LwiPJc7r8x0oKCKiA.ttf", "regular" => "http://fonts.gstatic.com/s/judson/v9/znM1AAs0eytUaJzf1CrYZQ.ttf", "italic" => "http://fonts.gstatic.com/s/judson/v9/GVqQW9P52ygW-ySq-CLwAA.ttf")), array("kind" => "webfonts#webfont", "family" => "Julee", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/julee/v6/CAib-jsUsSO8SvVRnE9fHA.ttf")), array("kind" => "webfonts#webfont", "family" => "Julius Sans One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/juliussansone/v5/iU65JP9acQHPDLkdalCF7jjVlsJB_M_Q_LtZxsoxvlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Junge", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/junge/v4/j4IXCXtxrw9qIBheercp3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Jura", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600"), "subsets" => array("cyrillic", "latin-ext", "latin", "greek", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/jura/v7/Rqx_xy1UnN0C7wD3FUSyPQ.ttf", "500" => "http://fonts.gstatic.com/s/jura/v7/16xhfjHCiaLj3tsqqgmtGg.ttf", "600" => "http://fonts.gstatic.com/s/jura/v7/iwseduOwJSdY8wQ1Y6CJdA.ttf", "regular" => "http://fonts.gstatic.com/s/jura/v7/YAWMwF3sN0KCbynMq-Yr_Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Just Another Hand", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/justanotherhand/v7/fKV8XYuRNNagXr38eqbRf99BnJIEGrvoojniP57E51c.ttf")), array("kind" => "webfonts#webfont", "family" => "Just Me Again Down Here", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/justmeagaindownhere/v8/sN06iTc9ITubLTgXoG-kc3M9eVLpVTSK6TqZTIgBrWQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Kadwa", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("devanagari", "latin"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("700" => "http://fonts.gstatic.com/s/kadwa/v1/NFPZaBfekj_Io-7vUMz4Ww.ttf", "regular" => "http://fonts.gstatic.com/s/kadwa/v1/VwEN8oKGqaa0ug9kRpvSSg.ttf")), array("kind" => "webfonts#webfont", "family" => "Kalam", "category" => "handwriting", "variants" => array("300", "regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/kalam/v7/MgQQlk1SgPEHdlkWMNh7Jg.ttf", "700" => "http://fonts.gstatic.com/s/kalam/v7/95nLItUGyWtNLZjSckluLQ.ttf", "regular" => "http://fonts.gstatic.com/s/kalam/v7/hNEJkp2K-aql7e5WQish4Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Kameron", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/kameron/v7/rabVVbzlflqvmXJUFlKnu_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/kameron/v7/9r8HYhqDSwcq9WMjupL82A.ttf")), array("kind" => "webfonts#webfont", "family" => "Kanit", "category" => "sans-serif", "variants" => array("100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("vietnamese", "thai", "latin-ext", "latin"), "version" => "v1", "lastModified" => "2015-12-10", "files" => array("100" => "http://fonts.gstatic.com/s/kanit/v1/CYl4qOK-NWwZp3iTKW1eIA.ttf", "200" => "http://fonts.gstatic.com/s/kanit/v1/wfLWkj1C4tYl7MoiFWS3bA.ttf", "300" => "http://fonts.gstatic.com/s/kanit/v1/SM5qHynYGdOmMKEwGUFIPA.ttf", "500" => "http://fonts.gstatic.com/s/kanit/v1/GxoU_USIJyIy8WIcYSUO2g.ttf", "600" => "http://fonts.gstatic.com/s/kanit/v1/n_qoIVxojeQY0D1pvoNDhA.ttf", "700" => "http://fonts.gstatic.com/s/kanit/v1/kEGmYvO8My36j5ILmbUPRg.ttf", "800" => "http://fonts.gstatic.com/s/kanit/v1/YTp-zAuKXxwnA1YnJIF1rg.ttf", "900" => "http://fonts.gstatic.com/s/kanit/v1/1NIEkusi3bG3GgO9Hor3fQ.ttf", "100italic" => "http://fonts.gstatic.com/s/kanit/v1/NLNtc56MpXmHl1yOrop8oQ.ttf", "200italic" => "http://fonts.gstatic.com/s/kanit/v1/D8gkrAAM2bvNJ-1i4ot-1_esZW2xOQ-xsNqO47m55DA.ttf", "300italic" => "http://fonts.gstatic.com/s/kanit/v1/IePislKOKy3Bqfpb9V5VM_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/kanit/v1/L6VKvM17ZmevDynOiw7H9w.ttf", "italic" => "http://fonts.gstatic.com/s/kanit/v1/sHLq5U0-T0oSMTnwTKgv-A.ttf", "500italic" => "http://fonts.gstatic.com/s/kanit/v1/hrCiWCaNv9AaF0mDY1F2zPesZW2xOQ-xsNqO47m55DA.ttf", "600italic" => "http://fonts.gstatic.com/s/kanit/v1/9BkP85yRDoVayTWQwdGLqPesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/kanit/v1/WNo3ZZ9xtOZJknNlvHAFWfesZW2xOQ-xsNqO47m55DA.ttf", "800italic" => "http://fonts.gstatic.com/s/kanit/v1/qiTGrW5sCa9UQp841fWjc_esZW2xOQ-xsNqO47m55DA.ttf", "900italic" => "http://fonts.gstatic.com/s/kanit/v1/ogN5dFD1r4BfxNV4Nb-TXfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Kantumruy", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("khmer"), "version" => "v3", "lastModified" => "2015-04-03", "files" => array("300" => "http://fonts.gstatic.com/s/kantumruy/v3/ERRwQE0WG5uanaZWmOFXNi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/kantumruy/v3/gie_zErpGf_rNzs920C2Ji3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/kantumruy/v3/kQfXNYElQxr5dS8FyjD39Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Karla", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/karla/v5/JS501sZLxZ4zraLQdncOUA.ttf", "regular" => "http://fonts.gstatic.com/s/karla/v5/78UgGRwJFkhqaoFimqoKpQ.ttf", "italic" => "http://fonts.gstatic.com/s/karla/v5/51UBKly9RQOnOkj95ZwEFw.ttf", "700italic" => "http://fonts.gstatic.com/s/karla/v5/3YDyi09gQjCRh-5-SVhTTvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Karma", "category" => "serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/karma/v5/lH6ijJnguWR2Sz7tEl6MQQ.ttf", "500" => "http://fonts.gstatic.com/s/karma/v5/9YGjxi6Hcvz2Kh-rzO_cAw.ttf", "600" => "http://fonts.gstatic.com/s/karma/v5/h_CVzXXtqSxjfS2sIwaejA.ttf", "700" => "http://fonts.gstatic.com/s/karma/v5/smuSM08oApsQPPVYbHd1CA.ttf", "regular" => "http://fonts.gstatic.com/s/karma/v5/wvqTxAGBUrTqU0urTEoPIw.ttf")), array("kind" => "webfonts#webfont", "family" => "Kaushan Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kaushanscript/v4/qx1LSqts-NtiKcLw4N03IBnpV0hQCek3EmWnCPrvGRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Kavoon", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/kavoon/v5/382m-6baKXqJFQjEgobt6Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Kdam Thmor", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v3", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/kdamthmor/v3/otCdP6UU-VBIrBfVDWBQJ_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Keania One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/keaniaone/v4/PACrDKZWngXzgo-ucl6buvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Kelly Slab", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kellyslab/v6/F_2oS1e9XdYx1MAi8XEVefesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Kenia", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kenia/v8/OLM9-XfITK9PsTLKbGBrwg.ttf")), array("kind" => "webfonts#webfont", "family" => "Khand", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/khand/v4/072zRl4OU9Pinjjkg174LA.ttf", "500" => "http://fonts.gstatic.com/s/khand/v4/46_p-SqtuMe56nxQdteWxg.ttf", "600" => "http://fonts.gstatic.com/s/khand/v4/zggGWYIiPJyMTgkfxP_kaA.ttf", "700" => "http://fonts.gstatic.com/s/khand/v4/0I0UWaN-X5QBmfexpXKhqg.ttf", "regular" => "http://fonts.gstatic.com/s/khand/v4/HdLdTNFqNIDGJZl1ZEj84w.ttf")), array("kind" => "webfonts#webfont", "family" => "Khmer", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/khmer/v9/vWaBJIbaQuBNz02ALIKJ3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Khula", "category" => "sans-serif", "variants" => array("300", "regular", "600", "700", "800"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/khula/v1/_1LySU5Upq-sc4OZ1b_GIw.ttf", "600" => "http://fonts.gstatic.com/s/khula/v1/4ZH86Hce-aeFDaedTnbkbg.ttf", "700" => "http://fonts.gstatic.com/s/khula/v1/UGVExGl-Jjs-YPpGv-MZ6w.ttf", "800" => "http://fonts.gstatic.com/s/khula/v1/Sccp_oOo8FWgbx5smie7xQ.ttf", "regular" => "http://fonts.gstatic.com/s/khula/v1/izcPIFyCSd16XI1Ak_Wk7Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Kite One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kiteone/v4/8ojWmgUc97m0f_i6sTqLoQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Knewave", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/knewave/v5/KGHM4XWr4iKnBMqzZLkPBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Kotta One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kottaone/v4/AB2Q7hVw6niJYDgLvFXu5w.ttf")), array("kind" => "webfonts#webfont", "family" => "Koulen", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v10", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/koulen/v10/AAYOK8RSRO7FTskTzFuzNw.ttf")), array("kind" => "webfonts#webfont", "family" => "Kranky", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kranky/v6/C8dxxTS99-fZ84vWk8SDrg.ttf")), array("kind" => "webfonts#webfont", "family" => "Kreon", "category" => "serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/kreon/v9/HKtJRiq5C2zbq5N1IX32sA.ttf", "700" => "http://fonts.gstatic.com/s/kreon/v9/jh0dSmaPodjxISiblIUTkw.ttf", "regular" => "http://fonts.gstatic.com/s/kreon/v9/zA_IZt0u0S3cvHJu-n1oEg.ttf")), array("kind" => "webfonts#webfont", "family" => "Kristi", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kristi/v7/aRsgBQrkQkMlu4UPSnJyOQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Krona One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kronaone/v4/zcQj4ljqTo166AdourlF9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Kurale", "category" => "serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-05-14", "files" => array("regular" => "http://fonts.gstatic.com/s/kurale/v1/rxeyIcvQlT4XAWwNbXFCfw.ttf")), array("kind" => "webfonts#webfont", "family" => "La Belle Aurore", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/labelleaurore/v7/Irdbc4ASuUoWDjd_Wc3md123K2iuuhwZgaKapkyRTY8.ttf")), array("kind" => "webfonts#webfont", "family" => "Laila", "category" => "serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v2", "lastModified" => "2016-03-14", "files" => array("300" => "http://fonts.gstatic.com/s/laila/v2/bLbIVEZF3IWSZ-in72GJvA.ttf", "500" => "http://fonts.gstatic.com/s/laila/v2/tkf8VtFvW9g3VsxQCA6WOQ.ttf", "600" => "http://fonts.gstatic.com/s/laila/v2/3EMP2L6JRQ4GaHIxCldCeA.ttf", "700" => "http://fonts.gstatic.com/s/laila/v2/R7P4z1xjcjecmjZ9GyhqHQ.ttf", "regular" => "http://fonts.gstatic.com/s/laila/v2/6iYor3edprH7360qtBGoag.ttf")), array("kind" => "webfonts#webfont", "family" => "Lakki Reddy", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lakkireddy/v3/Q5EpFa91FjW37t0FCnedaKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Lancelot", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lancelot/v6/XMT7T_oo_MQUGAnU2v-sdA.ttf")), array("kind" => "webfonts#webfont", "family" => "Lateef", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "arabic"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lateef/v10/PAsKCgi1qc7XPwvzo_I-DQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Lato", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin-ext", "latin"), "version" => "v11", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/lato/v11/Upp-ka9rLQmHYCsFgwL-eg.ttf", "300" => "http://fonts.gstatic.com/s/lato/v11/Ja02qOppOVq9jeRjWekbHg.ttf", "700" => "http://fonts.gstatic.com/s/lato/v11/iX_QxBBZLhNj5JHlTzHQzg.ttf", "900" => "http://fonts.gstatic.com/s/lato/v11/8TPEV6NbYWZlNsXjbYVv7w.ttf", "100italic" => "http://fonts.gstatic.com/s/lato/v11/zLegi10uS_9-fnUDISl0KA.ttf", "300italic" => "http://fonts.gstatic.com/s/lato/v11/dVebFcn7EV7wAKwgYestUg.ttf", "regular" => "http://fonts.gstatic.com/s/lato/v11/h7rISIcQapZBpei-sXwIwg.ttf", "italic" => "http://fonts.gstatic.com/s/lato/v11/P_dJOFJylV3A870UIOtr0w.ttf", "700italic" => "http://fonts.gstatic.com/s/lato/v11/WFcZakHrrCKeUJxHA4T_gw.ttf", "900italic" => "http://fonts.gstatic.com/s/lato/v11/draWperrI7n2xi35Cl08fA.ttf")), array("kind" => "webfonts#webfont", "family" => "League Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/leaguescript/v7/wnRFLvfabWK_DauqppD6vSeUSrabuTpOsMEiRLtKwk0.ttf")), array("kind" => "webfonts#webfont", "family" => "Leckerli One", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/leckerlione/v7/S2Y_iLrItTu8kIJTkS7DrC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Ledger", "category" => "serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ledger/v4/G432jp-tahOfWHbCYkI0jw.ttf")), array("kind" => "webfonts#webfont", "family" => "Lekton", "category" => "sans-serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lekton/v7/WZw-uL8WTkx3SBVfTlevXQ.ttf", "regular" => "http://fonts.gstatic.com/s/lekton/v7/r483JYmxf5PjIm4jVAm8Yg.ttf", "italic" => "http://fonts.gstatic.com/s/lekton/v7/_UbDIPBA1wDqSbhp-OED7A.ttf")), array("kind" => "webfonts#webfont", "family" => "Lemon", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lemon/v5/wed1nNu4LNSu-3RoRVUhUw.ttf")), array("kind" => "webfonts#webfont", "family" => "Libre Baskerville", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/librebaskerville/v4/kH7K4InNTm7mmOXXjrA5v-xuswJKUVpBRfYFpz0W3Iw.ttf", "regular" => "http://fonts.gstatic.com/s/librebaskerville/v4/pR0sBQVcY0JZc_ciXjFsKyyZRYCSvpCzQKuMWnP5NDY.ttf", "italic" => "http://fonts.gstatic.com/s/librebaskerville/v4/QHIOz1iKF3bIEzRdDFaf5QnhapNS5Oi8FPrBRDLbsW4.ttf")), array("kind" => "webfonts#webfont", "family" => "Life Savers", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lifesavers/v6/THQKqChyYUm97rNPVFdGGXe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/lifesavers/v6/g49cUDk4Y1P0G5NMkMAm7qCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Lilita One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lilitaone/v4/vTxJQjbNV6BCBHx8sGDCVvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Lily Script One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lilyscriptone/v4/uPWsLVW8uiXqIBnE8ZwGPDjVlsJB_M_Q_LtZxsoxvlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Limelight", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/limelight/v7/5dTfN6igsXjLjOy8QQShcg.ttf")), array("kind" => "webfonts#webfont", "family" => "Linden Hill", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lindenhill/v6/UgsC0txqd-E1yjvjutwm_KCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/lindenhill/v6/OcS3bZcu8vJvIDH8Zic83keOrDcLawS7-ssYqLr2Xp4.ttf")), array("kind" => "webfonts#webfont", "family" => "Lobster", "category" => "display", "variants" => array("regular"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "latin"), "version" => "v16", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lobster/v16/9LpJGtNuM1D8FAZ2BkJH2Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Lobster Two", "category" => "display", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lobstertwo/v8/bmdxOflBqMqjEC0-kGsIiHe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/lobstertwo/v8/xb9aY4w9ceh8JRzobID1naCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/lobstertwo/v8/Ul_16MSbfayQv1I4QhLEoEeOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/lobstertwo/v8/LEkN2_no_6kFvRfiBZ8xpM_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Londrina Outline", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/londrinaoutline/v5/lls08GOa1eT74p072l1AWJmp8DTZ6iHear7UV05iykg.ttf")), array("kind" => "webfonts#webfont", "family" => "Londrina Shadow", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/londrinashadow/v4/dNYuzPS_7eYgXFJBzMoKdbw6Z3rVA5KDSi7aQxS92Nk.ttf")), array("kind" => "webfonts#webfont", "family" => "Londrina Sketch", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/londrinasketch/v4/p7Ai06aT1Ycp_D2fyE3z69d6z_uhFGnpCOifUY1fJQo.ttf")), array("kind" => "webfonts#webfont", "family" => "Londrina Solid", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/londrinasolid/v4/yysorIEiYSBb0ylZjg791MR125CwGqh8XBqkBzea0LA.ttf")), array("kind" => "webfonts#webfont", "family" => "Lora", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lora/v9/enKND5SfzQKkggBA_VnT1A.ttf", "regular" => "http://fonts.gstatic.com/s/lora/v9/aXJ7KVIGcejEy1abawZazg.ttf", "italic" => "http://fonts.gstatic.com/s/lora/v9/AN2EZaj2tFRpyveuNn9BOg.ttf", "700italic" => "http://fonts.gstatic.com/s/lora/v9/ivs9j3kYU65pR9QD9YFdzQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Love Ya Like A Sister", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/loveyalikeasister/v7/LzkxWS-af0Br2Sk_YgSJY-ad1xEP8DQfgfY8MH9aBUg.ttf")), array("kind" => "webfonts#webfont", "family" => "Loved by the King", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lovedbytheking/v6/wg03xD4cWigj4YDufLBSr8io2AFEwwMpu7y5KyiyAJc.ttf")), array("kind" => "webfonts#webfont", "family" => "Lovers Quarrel", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/loversquarrel/v4/gipdZ8b7pKb89MzQLAtJHLHLxci2ElvNEmOB303HLk0.ttf")), array("kind" => "webfonts#webfont", "family" => "Luckiest Guy", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/luckiestguy/v6/5718gH8nDy3hFVihOpkY5C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Lusitana", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lusitana/v4/GWtZyUsONxgkdl3Mc1P7FKCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/lusitana/v4/l1h9VDomkwbdzbPdmLcUIw.ttf")), array("kind" => "webfonts#webfont", "family" => "Lustria", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lustria/v4/gXAk0s4ai0X-TAOhYzZd1w.ttf")), array("kind" => "webfonts#webfont", "family" => "Macondo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/macondo/v5/G6yPNUscRPQ8ufBXs_8yRQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Macondo Swash Caps", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/macondoswashcaps/v4/SsSR706z-MlvEH7_LS6JAPkkgYRHs6GSG949m-K6x2k.ttf")), array("kind" => "webfonts#webfont", "family" => "Magra", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/magra/v4/6fOM5sq5cIn8D0RjX8Lztw.ttf", "regular" => "http://fonts.gstatic.com/s/magra/v4/hoZ13bwCXBxuGZqAudgc5A.ttf")), array("kind" => "webfonts#webfont", "family" => "Maiden Orange", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/maidenorange/v6/ZhKIA2SPisEwdhW7g0RUWojjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Mako", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mako/v7/z5zSLmfPlv1uTVAdmJBLXg.ttf")), array("kind" => "webfonts#webfont", "family" => "Mallanna", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mallanna/v4/krCTa-CfMbtxqF0689CbuQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Mandali", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mandali/v4/0lF8yJ7fkyjXuqtSi5bWbQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Marcellus", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/marcellus/v4/UjiLZzumxWC9whJ86UtaYw.ttf")), array("kind" => "webfonts#webfont", "family" => "Marcellus SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/marcellussc/v4/_jugwxhkkynrvsfrxVx8gS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Marck Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/marckscript/v7/O_D1NAZVOFOobLbVtW3bci3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Margarine", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/margarine/v5/DJnJwIrcO_cGkjSzY3MERw.ttf")), array("kind" => "webfonts#webfont", "family" => "Marko One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/markoone/v6/hpP7j861sOAco43iDc4n4w.ttf")), array("kind" => "webfonts#webfont", "family" => "Marmelad", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/marmelad/v6/jI0_FBlSOIRLL0ePWOhOwQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Martel", "category" => "serif", "variants" => array("200", "300", "regular", "600", "700", "800", "900"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-04-22", "files" => array("200" => "http://fonts.gstatic.com/s/martel/v1/_wfGdswZbat7P4tupHLA1w.ttf", "300" => "http://fonts.gstatic.com/s/martel/v1/SghoV2F2VPdVU3P0a4fa9w.ttf", "600" => "http://fonts.gstatic.com/s/martel/v1/Kt9uPhH1PvUwuZ5Y6zuAMQ.ttf", "700" => "http://fonts.gstatic.com/s/martel/v1/4OzIiKB5wE36xXL2U0vzWQ.ttf", "800" => "http://fonts.gstatic.com/s/martel/v1/RVF8drcQoRkRL7l_ZkpTlQ.ttf", "900" => "http://fonts.gstatic.com/s/martel/v1/iS0YUpFJoiLRlnyl40rpEA.ttf", "regular" => "http://fonts.gstatic.com/s/martel/v1/9ALu5czkaaf5zsYk6GJEnQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Martel Sans", "category" => "sans-serif", "variants" => array("200", "300", "regular", "600", "700", "800", "900"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v2", "lastModified" => "2015-12-08", "files" => array("200" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQEnzyIngrzGjGh22wPb6cGM.ttf", "300" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQC9-WlPSxbfiI49GsXo3q0g.ttf", "600" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQJZ7xm-Bj30Bj2KNdXDzSZg.ttf", "700" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQHe1Pd76Vl7zRpE7NLJQ7XU.ttf", "800" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQA89PwPrYLaRFJ-HNCU9NbA.ttf", "900" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQCenaqEuufTBk9XMKnKmgDA.ttf", "regular" => "http://fonts.gstatic.com/s/martelsans/v2/91c8DPDZncMc0RFfhmc2RqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Marvel", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/marvel/v6/WrHDBL1RupWGo2UcdgxB3Q.ttf", "regular" => "http://fonts.gstatic.com/s/marvel/v6/Fg1dO8tWVb-MlyqhsbXEkg.ttf", "italic" => "http://fonts.gstatic.com/s/marvel/v6/HzyjFB-oR5usrc7Lxz9g8w.ttf", "700italic" => "http://fonts.gstatic.com/s/marvel/v6/Gzf5NT09Y6xskdQRj2kz1qCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Mate", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mate/v5/ooFviPcJ6hZP5bAE71Cawg.ttf", "italic" => "http://fonts.gstatic.com/s/mate/v5/5XwW6_cbisGvCX5qmNiqfA.ttf")), array("kind" => "webfonts#webfont", "family" => "Mate SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/matesc/v5/-YkIT2TZoPZF6pawKzDpWw.ttf")), array("kind" => "webfonts#webfont", "family" => "Maven Pro", "category" => "sans-serif", "variants" => array("regular", "500", "700", "900"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/mavenpro/v7/SQVfzoJBbj9t3aVcmbspRi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/mavenpro/v7/uDssvmXgp7Nj3i336k_dSi3USBnSvpkopQaUR-2r7iU.ttf", "900" => "http://fonts.gstatic.com/s/mavenpro/v7/-91TwiFzqeL1F7Kh91APwS3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/mavenpro/v7/sqPJIFG4gqsjl-0q_46Gbw.ttf")), array("kind" => "webfonts#webfont", "family" => "McLaren", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mclaren/v4/OprvTGxaiINBKW_1_U0eoQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Meddon", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2015-08-12", "files" => array("regular" => "http://fonts.gstatic.com/s/meddon/v9/f8zJO98uu2EtSj9p7ci9RA.ttf")), array("kind" => "webfonts#webfont", "family" => "MedievalSharp", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/medievalsharp/v8/85X_PjV6tftJ0-rX7KYQkOe45sJkivqprK7VkUlzfg0.ttf")), array("kind" => "webfonts#webfont", "family" => "Medula One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/medulaone/v6/AasPgDQak81dsTGQHc5zUPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Megrim", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/megrim/v7/e-9jVUC9lv1zxaFQARuftw.ttf")), array("kind" => "webfonts#webfont", "family" => "Meie Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/meiescript/v4/oTIWE5MmPye-rCyVp_6KEqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Merienda", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/merienda/v4/GlwcvRLlgiVE2MBFQ4r0sKCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/merienda/v4/MYY6Og1qZlOQtPW2G95Y3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Merienda One", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/meriendaone/v7/bCA-uDdUx6nTO8SjzCLXvS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Merriweather", "category" => "serif", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v11", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/merriweather/v11/ZvcMqxEwPfh2qDWBPxn6nqcQoVhARpoaILP7amxE_8g.ttf", "700" => "http://fonts.gstatic.com/s/merriweather/v11/ZvcMqxEwPfh2qDWBPxn6nkD2ttfZwueP-QU272T9-k4.ttf", "900" => "http://fonts.gstatic.com/s/merriweather/v11/ZvcMqxEwPfh2qDWBPxn6nqObDOjC3UL77puoeHsE3fw.ttf", "300italic" => "http://fonts.gstatic.com/s/merriweather/v11/EYh7Vl4ywhowqULgRdYwICna0FLWfcB-J_SAYmcAXaI.ttf", "regular" => "http://fonts.gstatic.com/s/merriweather/v11/RFda8w1V0eDZheqfcyQ4EC3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/merriweather/v11/So5lHxHT37p2SS4-t60SlPMZXuCXbOrAvx5R0IT5Oyo.ttf", "700italic" => "http://fonts.gstatic.com/s/merriweather/v11/EYh7Vl4ywhowqULgRdYwIPAs9-1nE9qOqhChW0m4nDE.ttf", "900italic" => "http://fonts.gstatic.com/s/merriweather/v11/EYh7Vl4ywhowqULgRdYwIBd0_s6jQr9r5s5OZYvtzBY.ttf")), array("kind" => "webfonts#webfont", "family" => "Merriweather Sans", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic", "800", "800italic"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/merriweathersans/v7/6LmGj5dOJopQKEkt88Gowan5N8K-_DP0e9e_v51obXQ.ttf", "700" => "http://fonts.gstatic.com/s/merriweathersans/v7/6LmGj5dOJopQKEkt88GowbqxG25nQNOioCZSK4sU-CA.ttf", "800" => "http://fonts.gstatic.com/s/merriweathersans/v7/6LmGj5dOJopQKEkt88GowYufzO2zUYSj5LqoJ3UGkco.ttf", "300italic" => "http://fonts.gstatic.com/s/merriweathersans/v7/nAqt4hiqwq3tzCecpgPmVdytE4nGXk2hYD5nJ740tBw.ttf", "regular" => "http://fonts.gstatic.com/s/merriweathersans/v7/AKu1CjQ4qnV8MUltkAX3sOAj_ty82iuwwDTNEYXGiyQ.ttf", "italic" => "http://fonts.gstatic.com/s/merriweathersans/v7/3Mz4hOHzs2npRMG3B1ascZ32VBCoA_HLsn85tSWZmdo.ttf", "700italic" => "http://fonts.gstatic.com/s/merriweathersans/v7/nAqt4hiqwq3tzCecpgPmVbuqAJxizi8Dk_SK5et7kMg.ttf", "800italic" => "http://fonts.gstatic.com/s/merriweathersans/v7/nAqt4hiqwq3tzCecpgPmVdDmPrYMy3aZO4LmnZsxTQw.ttf")), array("kind" => "webfonts#webfont", "family" => "Metal", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/metal/v9/zA3UOP13ooQcxjv04BZX5g.ttf")), array("kind" => "webfonts#webfont", "family" => "Metal Mania", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/metalmania/v6/isriV_rAUgj6bPWPN6l9QKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Metamorphous", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/metamorphous/v6/wGqUKXRinIYggz-BTRU9ei3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Metrophobic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/metrophobic/v6/SaglWZWCrrv_D17u1i4v_aCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Michroma", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/michroma/v7/0c2XrW81_QsiKV8T9thumA.ttf")), array("kind" => "webfonts#webfont", "family" => "Milonga", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/milonga/v4/dzNdIUSTGFmy2ahovDRcWg.ttf")), array("kind" => "webfonts#webfont", "family" => "Miltonian", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/miltonian/v9/Z4HrYZyqm0BnNNzcCUfzoQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Miltonian Tattoo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/miltoniantattoo/v10/1oU_8OGYwW46eh02YHydn2uk0YtI6thZkz1Hmh-odwg.ttf")), array("kind" => "webfonts#webfont", "family" => "Miniver", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/miniver/v5/4yTQohOH_cWKRS5laRFhYg.ttf")), array("kind" => "webfonts#webfont", "family" => "Miss Fajardose", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/missfajardose/v6/WcXjlQPKn6nBfr8LY3ktNu6rPKfVZo7L2bERcf0BDns.ttf")), array("kind" => "webfonts#webfont", "family" => "Modak", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/modak/v1/lMsN0QIKid-pCPvL0hH4nw.ttf")), array("kind" => "webfonts#webfont", "family" => "Modern Antiqua", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/modernantiqua/v6/8qX_tr6Xzy4t9fvZDXPkh6rFJ4O13IHVxZbM6yoslpo.ttf")), array("kind" => "webfonts#webfont", "family" => "Molengo", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/molengo/v7/jcjgeGuzv83I55AzOTpXNQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Molle", "category" => "handwriting", "variants" => array("italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("italic" => "http://fonts.gstatic.com/s/molle/v4/9XTdCsjPXifLqo5et-YoGA.ttf")), array("kind" => "webfonts#webfont", "family" => "Monda", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/monda/v4/EVOzZUyc_j1w2GuTgTAW1g.ttf", "regular" => "http://fonts.gstatic.com/s/monda/v4/qFMHZ9zvR6B_gnoIgosPrw.ttf")), array("kind" => "webfonts#webfont", "family" => "Monofett", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/monofett/v6/C6K5L799Rgxzg2brgOaqAw.ttf")), array("kind" => "webfonts#webfont", "family" => "Monoton", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/monoton/v6/aCz8ja_bE4dg-7agSvExdw.ttf")), array("kind" => "webfonts#webfont", "family" => "Monsieur La Doulaise", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/monsieurladoulaise/v5/IMAdMj6Eq9jZ46CPctFtMKP61oAqTJXlx5ZVOBmcPdM.ttf")), array("kind" => "webfonts#webfont", "family" => "Montaga", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/montaga/v4/PwTwUboiD-M4-mFjZfJs2A.ttf")), array("kind" => "webfonts#webfont", "family" => "Montez", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/montez/v6/kx58rLOWQQLGFM4pDHv5Ng.ttf")), array("kind" => "webfonts#webfont", "family" => "Montserrat", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/montserrat/v6/IQHow_FEYlDC4Gzy_m8fcgJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/montserrat/v6/Kqy6-utIpx_30Xzecmeo8_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Montserrat Alternates", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/montserratalternates/v4/YENqOGAVzwIHjYNjmKuAZpeqBKvsAhm-s2I4RVSXFfc.ttf", "regular" => "http://fonts.gstatic.com/s/montserratalternates/v4/z2n1Sjxk9souK3HCtdHuklPuEVRGaG9GCQnmM16YWq0.ttf")), array("kind" => "webfonts#webfont", "family" => "Montserrat Subrayada", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/montserratsubrayada/v4/wf-IKpsHcfm0C9uaz9IeGJvEcF1LWArDbGWgKZSH9go.ttf", "regular" => "http://fonts.gstatic.com/s/montserratsubrayada/v4/nzoCWCz0e9c7Mr2Gl8bbgrJymm6ilkk9f0nDA_sC_qk.ttf")), array("kind" => "webfonts#webfont", "family" => "Moul", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/moul/v8/Kb0ALQnfyXawP1a_P_gpTQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Moulpali", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/moulpali/v9/diD74BprGhmVkJoerKmrKA.ttf")), array("kind" => "webfonts#webfont", "family" => "Mountains of Christmas", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/mountainsofchristmas/v8/PymufKtHszoLrY0uiAYKNM9cPTbSBTrQyTa5TWAe3vE.ttf", "regular" => "http://fonts.gstatic.com/s/mountainsofchristmas/v8/dVGBFPwd6G44IWDbQtPew2Auds3jz1Fxb61CgfaGDr4.ttf")), array("kind" => "webfonts#webfont", "family" => "Mouse Memoirs", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mousememoirs/v4/NBFaaJFux_j0AQbAsW3QeH8f0n03UdmQgF_CLvNR2vg.ttf")), array("kind" => "webfonts#webfont", "family" => "Mr Bedfort", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrbedfort/v5/81bGgHTRikLs_puEGshl7_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Mr Dafoe", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrdafoe/v5/s32Q1S6ZkT7EaX53mUirvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Mr De Haviland", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrdehaviland/v5/fD8y4L6PJ4vqDk7z8Y8e27v4lrhng1lzu7-weKO6cw8.ttf")), array("kind" => "webfonts#webfont", "family" => "Mrs Saint Delafield", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrssaintdelafield/v4/vuWagfFT7bj9lFtZOFBwmjHMBelqWf3tJeGyts2SmKU.ttf")), array("kind" => "webfonts#webfont", "family" => "Mrs Sheppards", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrssheppards/v5/2WFsWMV3VUeCz6UVH7UjCn8f0n03UdmQgF_CLvNR2vg.ttf")), array("kind" => "webfonts#webfont", "family" => "Muli", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/muli/v7/VJw4F3ZHRAZ7Hmg3nQu5YQ.ttf", "300italic" => "http://fonts.gstatic.com/s/muli/v7/s-NKMCru8HiyjEt0ZDoBoA.ttf", "regular" => "http://fonts.gstatic.com/s/muli/v7/KJiP6KznxbALQgfJcDdPAw.ttf", "italic" => "http://fonts.gstatic.com/s/muli/v7/Cg0K_IWANs9xkNoxV7H1_w.ttf")), array("kind" => "webfonts#webfont", "family" => "Mystery Quest", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mysteryquest/v4/467jJvg0c7HgucvBB9PLDyeUSrabuTpOsMEiRLtKwk0.ttf")), array("kind" => "webfonts#webfont", "family" => "NTR", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ntr/v4/e7H4ZLtGfVOYyOupo6T12g.ttf")), array("kind" => "webfonts#webfont", "family" => "Neucha", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("cyrillic", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/neucha/v8/bijdhB-TzQdtpl0ykhGh4Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Neuton", "category" => "serif", "variants" => array("200", "300", "regular", "italic", "700", "800"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/neuton/v8/DA3Mkew3XqSkPpi1f4tJow.ttf", "300" => "http://fonts.gstatic.com/s/neuton/v8/xrc_aZ2hx-gdeV0mlY8Vww.ttf", "700" => "http://fonts.gstatic.com/s/neuton/v8/gnWpkWY7DirkKiovncYrfg.ttf", "800" => "http://fonts.gstatic.com/s/neuton/v8/XPzBQV4lY6enLxQG9cF1jw.ttf", "regular" => "http://fonts.gstatic.com/s/neuton/v8/9R-MGIOQUdjAVeB6nE6PcQ.ttf", "italic" => "http://fonts.gstatic.com/s/neuton/v8/uVMT3JOB5BNFi3lgPp6kEg.ttf")), array("kind" => "webfonts#webfont", "family" => "New Rocker", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/newrocker/v5/EFUWzHJedEkpW399zYOHofesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "News Cycle", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v13", "lastModified" => "2015-04-16", "files" => array("700" => "http://fonts.gstatic.com/s/newscycle/v13/G28Ny31cr5orMqEQy6ljtwJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/newscycle/v13/xyMAr8VfiUzIOvS1abHJO_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Niconne", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/niconne/v6/ZA-mFw2QNXodx5y7kfELBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Nixie One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/nixieone/v7/h6kQfmzm0Shdnp3eswRaqQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Nobile", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/nobile/v7/9p6M-Yrg_r_QPmSD1skrOg.ttf", "regular" => "http://fonts.gstatic.com/s/nobile/v7/lC_lPi1ddtN38iXTCRh6ow.ttf", "italic" => "http://fonts.gstatic.com/s/nobile/v7/vGmrpKzWQQSrb-PR6FWBIA.ttf", "700italic" => "http://fonts.gstatic.com/s/nobile/v7/oQ1eYPaXV638N03KvsNvyKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Nokora", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("700" => "http://fonts.gstatic.com/s/nokora/v9/QMqqa4QEOhQpiig3cAPmbQ.ttf", "regular" => "http://fonts.gstatic.com/s/nokora/v9/dRyz1JfnyKPNaRcBNX9F9A.ttf")), array("kind" => "webfonts#webfont", "family" => "Norican", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/norican/v4/SHnSqhYAWG5sZTWcPzEHig.ttf")), array("kind" => "webfonts#webfont", "family" => "Nosifer", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/nosifer/v5/7eJGoIuHRrtcG00j6CptSA.ttf")), array("kind" => "webfonts#webfont", "family" => "Nothing You Could Do", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/nothingyoucoulddo/v6/jpk1K3jbJoyoK0XKaSyQAf-TpkXjXYGWiJZAEtBRjPU.ttf")), array("kind" => "webfonts#webfont", "family" => "Noticia Text", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("vietnamese", "latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/noticiatext/v6/pEko-RqEtp45bE2P80AAKUD2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/noticiatext/v6/wdyV6x3eKpdeUPQ7BJ5uUC3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/noticiatext/v6/dAuxVpkYE_Q_IwIm6elsKPMZXuCXbOrAvx5R0IT5Oyo.ttf", "700italic" => "http://fonts.gstatic.com/s/noticiatext/v6/-rQ7V8ARjf28_b7kRa0JuvAs9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Noto Sans", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "greek-ext", "devanagari", "latin", "greek", "cyrillic-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/notosans/v6/PIbvSEyHEdL91QLOQRnZ1y3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/notosans/v6/0Ue9FiUJwVhi4NGfHJS5uA.ttf", "italic" => "http://fonts.gstatic.com/s/notosans/v6/dLcNKMgJ1H5RVoZFraDz0qCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/notosans/v6/9Z3uUWMRR7crzm1TjRicDne1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Noto Serif", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/notoserif/v4/lJAvZoKA5NttpPc9yc6lPQJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/notoserif/v4/zW6mc7bC1CWw8dH0yxY8JfesZW2xOQ-xsNqO47m55DA.ttf", "italic" => "http://fonts.gstatic.com/s/notoserif/v4/HQXBIwLHsOJCNEQeX9kNzy3USBnSvpkopQaUR-2r7iU.ttf", "700italic" => "http://fonts.gstatic.com/s/notoserif/v4/Wreg0Be4tcFGM2t6VWytvED2ttfZwueP-QU272T9-k4.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Cut", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novacut/v8/6q12jWcBvj0KO2cMRP97tA.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Flat", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novaflat/v8/pK7a0CoGzI684qe_XSHBqQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin", "greek"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novamono/v7/6-SChr5ZIaaasJFBkgrLNw.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Oval", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novaoval/v8/VuukVpKP8BwUf8o9W5LYQQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Round", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novaround/v8/7-cK3Ari_8XYYFgVMxVhDvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Script", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novascript/v8/dEvxQDLgx1M1TKY-NmBWYaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Slim", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novaslim/v8/rPYXC81_VL2EW-4CzBX65g.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Square", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novasquare/v8/BcBzXoaDzYX78rquGXVuSqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Numans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/numans/v6/g5snI2p6OEjjTNmTHyBdiQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Nunito", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/nunito/v7/zXQvrWBJqUooM7Xv98MrQw.ttf", "700" => "http://fonts.gstatic.com/s/nunito/v7/aEdlqgMuYbpe4U3TnqOQMA.ttf", "regular" => "http://fonts.gstatic.com/s/nunito/v7/ySZTeT3IuzJj0GK6uGpbBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Odor Mean Chey", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/odormeanchey/v8/GK3E7EjPoBkeZhYshGFo0eVKG8sq4NyGgdteJLvqLDs.ttf")), array("kind" => "webfonts#webfont", "family" => "Offside", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/offside/v4/v0C913SB8wqQUvcu1faUqw.ttf")), array("kind" => "webfonts#webfont", "family" => "Old Standard TT", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/oldstandardtt/v7/5Ywdce7XEbTSbxs__4X1_HJqbZqK7TdZ58X80Q_Lw8Y.ttf", "regular" => "http://fonts.gstatic.com/s/oldstandardtt/v7/n6RTCDcIPWSE8UNBa4k-DLcB5jyhm1VsHs65c3QNDr0.ttf", "italic" => "http://fonts.gstatic.com/s/oldstandardtt/v7/QQT_AUSp4AV4dpJfIN7U5PWrQzeMtsHf8QsWQ2cZg3c.ttf")), array("kind" => "webfonts#webfont", "family" => "Oldenburg", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/oldenburg/v4/dqA_M_uoCVXZbCO-oKBTnQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Oleo Script", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/oleoscript/v5/hudNQFKFl98JdNnlo363fne1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/oleoscript/v5/21stZcmPyzbQVXtmGegyqKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Oleo Script Swash Caps", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/oleoscriptswashcaps/v4/HMO3ftxA9AU5floml9c755reFYaXZ4zuJXJ8fr8OO1g.ttf", "regular" => "http://fonts.gstatic.com/s/oleoscriptswashcaps/v4/vdWhGqsBUAP-FF3NOYTe4iMF4kXAPemmyaDpMXQ31P0.ttf")), array("kind" => "webfonts#webfont", "family" => "Open Sans", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "800", "800italic"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v13", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTS3USBnSvpkopQaUR-2r7iU.ttf", "600" => "http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzC3USBnSvpkopQaUR-2r7iU.ttf", "800" => "http://fonts.gstatic.com/s/opensans/v13/EInbV5DfGHOiMmvb1Xr-hi3USBnSvpkopQaUR-2r7iU.ttf", "300italic" => "http://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxi9-WlPSxbfiI49GsXo3q0g.ttf", "regular" => "http://fonts.gstatic.com/s/opensans/v13/IgZJs4-7SA1XX_edsoXWog.ttf", "italic" => "http://fonts.gstatic.com/s/opensans/v13/O4NhV7_qs9r9seTo7fnsVKCWcynf_cDxXwCLxiixG1c.ttf", "600italic" => "http://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxpZ7xm-Bj30Bj2KNdXDzSZg.ttf", "700italic" => "http://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxne1Pd76Vl7zRpE7NLJQ7XU.ttf", "800italic" => "http://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxg89PwPrYLaRFJ-HNCU9NbA.ttf")), array("kind" => "webfonts#webfont", "family" => "Open Sans Condensed", "category" => "sans-serif", "variants" => array("300", "300italic", "700"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/opensanscondensed/v10/gk5FxslNkTTHtojXrkp-xEMwSSh38KQVJx4ABtsZTnA.ttf", "700" => "http://fonts.gstatic.com/s/opensanscondensed/v10/gk5FxslNkTTHtojXrkp-xBEM87DM3yorPOrvA-vB930.ttf", "300italic" => "http://fonts.gstatic.com/s/opensanscondensed/v10/jIXlqT1WKafUSwj6s9AzV4_LkTZ_uhAwfmGJ084hlvM.ttf")), array("kind" => "webfonts#webfont", "family" => "Oranienbaum", "category" => "serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/oranienbaum/v5/M98jYwCSn0PaFhXXgviCoaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Orbitron", "category" => "sans-serif", "variants" => array("regular", "500", "700", "900"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/orbitron/v7/p-y_ffzMdo5JN_7ia0vYEqCWcynf_cDxXwCLxiixG1c.ttf", "700" => "http://fonts.gstatic.com/s/orbitron/v7/PS9_6SLkY1Y6OgPO3APr6qCWcynf_cDxXwCLxiixG1c.ttf", "900" => "http://fonts.gstatic.com/s/orbitron/v7/2I3-8i9hT294TE_pyjy9SaCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/orbitron/v7/DY8swouAZjR3RaUPRf0HDQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Oregano", "category" => "display", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/oregano/v4/UiLhqNixVv2EpjRoBG6axA.ttf", "italic" => "http://fonts.gstatic.com/s/oregano/v4/_iwqGEht6XsAuEaCbYG64Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Orienta", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/orienta/v4/_NKSk93mMs0xsqtfjCsB3Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Original Surfer", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/originalsurfer/v5/gdHw6HpSIN4D6Xt7pi1-qIkEz33TDwAZczo_6fY7eg0.ttf")), array("kind" => "webfonts#webfont", "family" => "Oswald", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/oswald/v10/y3tZpCdiRD4oNRRYFcAR5Q.ttf", "700" => "http://fonts.gstatic.com/s/oswald/v10/7wj8ldV_5Ti37rHa0m1DDw.ttf", "regular" => "http://fonts.gstatic.com/s/oswald/v10/uLEd2g2vJglLPfsBF91DCg.ttf")), array("kind" => "webfonts#webfont", "family" => "Over the Rainbow", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/overtherainbow/v7/6gp-gkpI2kie2dHQQLM2jQBdxkZd83xOSx-PAQ2QmiI.ttf")), array("kind" => "webfonts#webfont", "family" => "Overlock", "category" => "display", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/overlock/v5/Fexr8SqXM8Bm_gEVUA7AKaCWcynf_cDxXwCLxiixG1c.ttf", "900" => "http://fonts.gstatic.com/s/overlock/v5/YPJCVTT8ZbG3899l_-KIGqCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/overlock/v5/Z8oYsGi88-E1cUB8YBFMAg.ttf", "italic" => "http://fonts.gstatic.com/s/overlock/v5/rq6EacukHROOBrFrK_zF6_esZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/overlock/v5/wFWnYgeXKYBks6gEUwYnfAJKKGfqHaYFsRG-T3ceEVo.ttf", "900italic" => "http://fonts.gstatic.com/s/overlock/v5/iOZhxT2zlg7W5ij_lb-oDp0EAVxt0G0biEntp43Qt6E.ttf")), array("kind" => "webfonts#webfont", "family" => "Overlock SC", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/overlocksc/v5/8D7HYDsvS_g1GhBnlHzgzaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Ovo", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ovo/v7/mFg27dimu3s9t09qjCwB1g.ttf")), array("kind" => "webfonts#webfont", "family" => "Oxygen", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/oxygen/v5/lZ31r0bR1Bzt_DfGZu1S8A.ttf", "700" => "http://fonts.gstatic.com/s/oxygen/v5/yLqkmDwuNtt5pSqsJmhyrg.ttf", "regular" => "http://fonts.gstatic.com/s/oxygen/v5/uhoyAE7XlQL22abzQieHjw.ttf")), array("kind" => "webfonts#webfont", "family" => "Oxygen Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/oxygenmono/v4/DigTu7k4b7OmM8ubt1Qza6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ptmono/v4/QUbM8H9yJK5NhpQ0REO6Wg.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Sans", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ptsans/v8/F51BEgHuR0tYHxF0bD4vwvesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/ptsans/v8/UFoEz2uiuMypUGZL1NKoeg.ttf", "italic" => "http://fonts.gstatic.com/s/ptsans/v8/yls9EYWOd496wiu7qzfgNg.ttf", "700italic" => "http://fonts.gstatic.com/s/ptsans/v8/lILlYDvubYemzYzN7GbLkC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Sans Caption", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ptsanscaption/v9/Q-gJrFokeE7JydPpxASt25tc0eyfI4QDEsobEEpk_hA.ttf", "regular" => "http://fonts.gstatic.com/s/ptsanscaption/v9/OXYTDOzBcXU8MTNBvBHeSW8by34Z3mUMtM-o4y-SHCY.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Sans Narrow", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ptsansnarrow/v7/Q_pTky3Sc3ubRibGToTAYsLtdzs3iyjn_YuT226ZsLU.ttf", "regular" => "http://fonts.gstatic.com/s/ptsansnarrow/v7/UyYrYy3ltEffJV9QueSi4ZTvAuddT2xDMbdz0mdLyZY.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Serif", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ptserif/v8/kyZw18tqQ5if-_wpmxxOeKCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/ptserif/v8/sAo427rn3-QL9sWCbMZXhA.ttf", "italic" => "http://fonts.gstatic.com/s/ptserif/v8/9khWhKzhpkH0OkNnBKS3n_esZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/ptserif/v8/Foydq9xJp--nfYIx2TBz9QJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Serif Caption", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("cyrillic", "latin-ext", "latin", "cyrillic-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ptserifcaption/v8/7xkFOeTxxO1GMC1suOUYWVsRioCqs5fohhaYel24W3k.ttf", "italic" => "http://fonts.gstatic.com/s/ptserifcaption/v8/0kfPsmrmTSgiec7u_Wa0DB1mqvzPHelJwRcF_s_EUM0.ttf")), array("kind" => "webfonts#webfont", "family" => "Pacifico", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pacifico/v7/GIrpeRY1r5CzbfL8r182lw.ttf")), array("kind" => "webfonts#webfont", "family" => "Palanquin", "category" => "sans-serif", "variants" => array("100", "200", "300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/palanquin/v1/Hu0eGDVGK_g4saUFu6AK3KCWcynf_cDxXwCLxiixG1c.ttf", "200" => "http://fonts.gstatic.com/s/palanquin/v1/pqXYXD7-VI5ezTjeqQOcyC3USBnSvpkopQaUR-2r7iU.ttf", "300" => "http://fonts.gstatic.com/s/palanquin/v1/c0-J5OCAagpFCKkKraz-Ey3USBnSvpkopQaUR-2r7iU.ttf", "500" => "http://fonts.gstatic.com/s/palanquin/v1/wLvvkEcZMKy95afLWh2EfC3USBnSvpkopQaUR-2r7iU.ttf", "600" => "http://fonts.gstatic.com/s/palanquin/v1/405UIAv95_yZkCECrH6y-i3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/palanquin/v1/-UtkePo3NFvxEN3rGCtTvi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/palanquin/v1/xCwBUoAEV0kzCDwerAZ0Aw.ttf")), array("kind" => "webfonts#webfont", "family" => "Palanquin Dark", "category" => "sans-serif", "variants" => array("regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/palanquindark/v1/iXyBGf5UbFUu6BG8hOY-maMZTo-EwKMRQt3RWHocLi0.ttf", "600" => "http://fonts.gstatic.com/s/palanquindark/v1/iXyBGf5UbFUu6BG8hOY-mVNxaunw8i4Gywrk2SigRnk.ttf", "700" => "http://fonts.gstatic.com/s/palanquindark/v1/iXyBGf5UbFUu6BG8hOY-mWToair6W0TEE44XrlfKbiM.ttf", "regular" => "http://fonts.gstatic.com/s/palanquindark/v1/PamTqrrgbBh_M3702w39rOfChn3JSg5yz_Q_xmrKQN0.ttf")), array("kind" => "webfonts#webfont", "family" => "Paprika", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/paprika/v4/b-VpyoRSieBdB5BPJVF8HQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Parisienne", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/parisienne/v4/TW74B5QISJNx9moxGlmJfvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Passero One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/passeroone/v8/Yc-7nH5deCCv9Ed0MMnAQqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Passion One", "category" => "display", "variants" => array("regular", "700", "900"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/passionone/v6/feOcYDy2R-f3Ysy72PYJ2ne1Pd76Vl7zRpE7NLJQ7XU.ttf", "900" => "http://fonts.gstatic.com/s/passionone/v6/feOcYDy2R-f3Ysy72PYJ2ienaqEuufTBk9XMKnKmgDA.ttf", "regular" => "http://fonts.gstatic.com/s/passionone/v6/1UIK1tg3bKJ4J3o35M4heqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Pathway Gothic One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pathwaygothicone/v4/Lqv9ztoTUV8Q0FmQZzPqaA6A6xIYD7vYcYDop1i-K-c.ttf")), array("kind" => "webfonts#webfont", "family" => "Patrick Hand", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("vietnamese", "latin-ext", "latin"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/patrickhand/v10/9BG3JJgt_HlF3NpEUehL0C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Patrick Hand SC", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("vietnamese", "latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/patrickhandsc/v4/OYFWCgfCR-7uHIovjUZXsbAgSRh1LpJXlLfl8IbsmHg.ttf")), array("kind" => "webfonts#webfont", "family" => "Patua One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/patuaone/v6/njZwotTYjswR4qdhsW-kJw.ttf")), array("kind" => "webfonts#webfont", "family" => "Paytone One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/paytoneone/v8/3WCxC7JAJjQHQVoIE0ZwvqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Peddana", "category" => "serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/peddana/v4/zaSZuj_GhmC8AOTugOROnA.ttf")), array("kind" => "webfonts#webfont", "family" => "Peralta", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/peralta/v4/cTJX5KEuc0GKRU9NXSm-8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Permanent Marker", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/permanentmarker/v5/9vYsg5VgPHKK8SXYbf3sMol14xj5tdg9OHF8w4E7StQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Petit Formal Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/petitformalscript/v4/OEZwr2-ovBsq2n3ACCKoEvVPl2Gjtxj0D6F7QLy1VQc.ttf")), array("kind" => "webfonts#webfont", "family" => "Petrona", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/petrona/v5/nnQwxlP6dhrGovYEFtemTg.ttf")), array("kind" => "webfonts#webfont", "family" => "Philosopher", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/philosopher/v7/napvkewXG9Gqby5vwGHICHe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/philosopher/v7/oZLTrB9jmJsyV0u_T0TKEaCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/philosopher/v7/_9Hnc_gz9k7Qq6uKaeHKmUeOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/philosopher/v7/PuKlryTcvTj7-qZWfLCFIM_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Piedra", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/piedra/v5/owf-AvEEyAj9LJ2tVZ_3Mw.ttf")), array("kind" => "webfonts#webfont", "family" => "Pinyon Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pinyonscript/v6/TzghnhfCn7TuE73f-CBQ0CeUSrabuTpOsMEiRLtKwk0.ttf")), array("kind" => "webfonts#webfont", "family" => "Pirata One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pirataone/v4/WnbD86B4vB2ckYcL7oxuhvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Plaster", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/plaster/v7/O4QG9Z5116CXyfJdR9zxLw.ttf")), array("kind" => "webfonts#webfont", "family" => "Play", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("cyrillic", "latin-ext", "latin", "greek", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/play/v7/crPhg6I0alLI-MpB3vW-zw.ttf", "regular" => "http://fonts.gstatic.com/s/play/v7/GWvfObW8LhtsOX333MCpBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Playball", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/playball/v6/3hOFiQm_EUzycTpcN9uz4w.ttf")), array("kind" => "webfonts#webfont", "family" => "Playfair Display", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/playfairdisplay/v10/UC3ZEjagJi85gF9qFaBgICsv6SrURqJprbhH_C1Mw8w.ttf", "900" => "http://fonts.gstatic.com/s/playfairdisplay/v10/UC3ZEjagJi85gF9qFaBgIKqwMe2wjvZrAR44M0BJZ48.ttf", "regular" => "http://fonts.gstatic.com/s/playfairdisplay/v10/2NBgzUtEeyB-Xtpr9bm1CV6uyC_qD11hrFQ6EGgTJWI.ttf", "italic" => "http://fonts.gstatic.com/s/playfairdisplay/v10/9MkijrV-dEJ0-_NWV7E6NzMsbnvDNEBX25F5HWk9AhI.ttf", "700italic" => "http://fonts.gstatic.com/s/playfairdisplay/v10/n7G4PqJvFP2Kubl0VBLDECsYW3XoOVcYyYdp9NzzS9E.ttf", "900italic" => "http://fonts.gstatic.com/s/playfairdisplay/v10/n7G4PqJvFP2Kubl0VBLDEC0JfJ4xmm7j1kL6D7mPxrA.ttf")), array("kind" => "webfonts#webfont", "family" => "Playfair Display SC", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/5ggqGkvWJU_TtW2W8cEubA-Amcyomnuy4WsCiPxGHjw.ttf", "900" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/5ggqGkvWJU_TtW2W8cEubKXL3C32k275YmX_AcBPZ7w.ttf", "regular" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/G0-tvBxd4eQRdwFKB8dRkcpjYTDWIvcAwAccqeW9uNM.ttf", "italic" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/myuYiFR-4NTrUT4w6TKls2klJsJYggW8rlNoTOTuau0.ttf", "700italic" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/6X0OQrQhEEnPo56RalREX4krgPi80XvBcbTwmz-rgmU.ttf", "900italic" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/6X0OQrQhEEnPo56RalREX8Zag2q3ssKz8uH1RU4a9gs.ttf")), array("kind" => "webfonts#webfont", "family" => "Podkova", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/podkova/v8/SqW4aa8m_KVrOgYSydQ33vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/podkova/v8/eylljyGVfB8ZUQjYY3WZRQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Poiret One", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/poiretone/v4/dWcYed048E5gHGDIt8i1CPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Poller One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pollerone/v6/dkctmDlTPcZ6boC8662RA_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Poly", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/poly/v7/bcMAuiacS2qkd54BcwW6_Q.ttf", "italic" => "http://fonts.gstatic.com/s/poly/v7/Zkx-eIlZSjKUrPGYhV5PeA.ttf")), array("kind" => "webfonts#webfont", "family" => "Pompiere", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pompiere/v6/o_va2p9CD5JfmFohAkGZIA.ttf")), array("kind" => "webfonts#webfont", "family" => "Pontano Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pontanosans/v4/gTHiwyxi6S7iiHpqAoiE3C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Poppins", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/poppins/v1/VIeViZ2fPtYBt3B2fQZplvesZW2xOQ-xsNqO47m55DA.ttf", "500" => "http://fonts.gstatic.com/s/poppins/v1/4WGKlFyjcmCFVl8pRsgZ9vesZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/poppins/v1/-zOABrCWORC3lyDh-ajNnPesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/poppins/v1/8JitanEsk5aDh7mDYs-fYfesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/poppins/v1/hlvAxH6aIdOjWlLzgm0jqg.ttf")), array("kind" => "webfonts#webfont", "family" => "Port Lligat Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/portlligatsans/v5/CUEdhRk7oC7up0p6t0g4P6mASEpx5X0ZpsuJOuvfOGA.ttf")), array("kind" => "webfonts#webfont", "family" => "Port Lligat Slab", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/portlligatslab/v5/CUEdhRk7oC7up0p6t0g4PxLSPACXvawUYCBEnHsOe30.ttf")), array("kind" => "webfonts#webfont", "family" => "Pragati Narrow", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v2", "lastModified" => "2015-06-10", "files" => array("700" => "http://fonts.gstatic.com/s/pragatinarrow/v2/DnSI1zRkc0CY-hI5SC3q3MLtdzs3iyjn_YuT226ZsLU.ttf", "regular" => "http://fonts.gstatic.com/s/pragatinarrow/v2/HzG2TfC862qPNsZsV_djPpTvAuddT2xDMbdz0mdLyZY.ttf")), array("kind" => "webfonts#webfont", "family" => "Prata", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/prata/v6/3gmx8r842loRRm9iQkCDGg.ttf")), array("kind" => "webfonts#webfont", "family" => "Preahvihear", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/preahvihear/v8/82tDI-xTc53CxxOzEG4hDaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Press Start 2P", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin", "greek"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pressstart2p/v4/8Lg6LX8-ntOHUQnvQ0E7o1jfl3W46Sz5gOkEVhcFWF4.ttf")), array("kind" => "webfonts#webfont", "family" => "Princess Sofia", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/princesssofia/v4/8g5l8r9BM0t1QsXLTajDe-wjmA7ie-lFcByzHGRhCIg.ttf")), array("kind" => "webfonts#webfont", "family" => "Prociono", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/prociono/v6/43ZYDHWogdFeNBWTl6ksmw.ttf")), array("kind" => "webfonts#webfont", "family" => "Prosto One", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/prostoone/v5/bsqnAElAqk9kX7eABTRFJPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Puritan", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/puritan/v8/pJS2SdwI0SCiVnO0iQSFT_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/puritan/v8/wv_RtgVBSCn-or2MC0n4Kg.ttf", "italic" => "http://fonts.gstatic.com/s/puritan/v8/BqZX8Tp200LeMv1KlzXgLQ.ttf", "700italic" => "http://fonts.gstatic.com/s/puritan/v8/rFG3XkMJL75nUNZwCEIJqC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Purple Purse", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/purplepurse/v5/Q5heFUrdmei9axbMITxxxS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Quando", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-03-22", "files" => array("regular" => "http://fonts.gstatic.com/s/quando/v5/03nDiEZuO2-h3xvtG6UmHg.ttf")), array("kind" => "webfonts#webfont", "family" => "Quantico", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/quantico/v5/OVZZzjcZ3Hkq2ojVcUtDjaCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/quantico/v5/pwSnP8Xpaix2rIz99HrSlQ.ttf", "italic" => "http://fonts.gstatic.com/s/quantico/v5/KQhDd2OsZi6HiITUeFQ2U_esZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/quantico/v5/HeCYRcZbdRso3ZUu01ELbQJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "Quattrocento", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/quattrocento/v7/Uvi-cRwyvqFpl9j3oT2mqkD2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/quattrocento/v7/WZDISdyil4HsmirlOdBRFC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Quattrocento Sans", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/quattrocentosans/v8/tXSgPxDl7Lk8Zr_5qX8FIbqxG25nQNOioCZSK4sU-CA.ttf", "regular" => "http://fonts.gstatic.com/s/quattrocentosans/v8/efd6FGWWGX5Z3ztwLBrG9eAj_ty82iuwwDTNEYXGiyQ.ttf", "italic" => "http://fonts.gstatic.com/s/quattrocentosans/v8/8PXYbvM__bjl0rBnKiByg532VBCoA_HLsn85tSWZmdo.ttf", "700italic" => "http://fonts.gstatic.com/s/quattrocentosans/v8/8N1PdXpbG6RtFvTjl-5E7buqAJxizi8Dk_SK5et7kMg.ttf")), array("kind" => "webfonts#webfont", "family" => "Questrial", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/questrial/v6/MoHHaw_WwNs_hd9ob1zTVw.ttf")), array("kind" => "webfonts#webfont", "family" => "Quicksand", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/quicksand/v5/qhfoJiLu10kFjChCCTvGlC3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/quicksand/v5/32nyIRHyCu6iqEka_hbKsi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/quicksand/v5/Ngv3fIJjKB7sD-bTUGIFCA.ttf")), array("kind" => "webfonts#webfont", "family" => "Quintessential", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/quintessential/v4/mmk6ioesnTrEky_Zb92E5s02lXbtMOtZWfuxKeMZO8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Qwigley", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/qwigley/v6/aDqxws-KubFID85TZHFouw.ttf")), array("kind" => "webfonts#webfont", "family" => "Racing Sans One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/racingsansone/v4/1r3DpWaCiT7y3PD4KgkNyDjVlsJB_M_Q_LtZxsoxvlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Radley", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/radley/v9/FgE9di09a-mXGzAIyI6Q9Q.ttf", "italic" => "http://fonts.gstatic.com/s/radley/v9/Z_JcACuPAOO2f9kzQcGRug.ttf")), array("kind" => "webfonts#webfont", "family" => "Rajdhani", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/rajdhani/v5/9pItuEhQZVGdq8spnHTku6CWcynf_cDxXwCLxiixG1c.ttf", "500" => "http://fonts.gstatic.com/s/rajdhani/v5/nd_5ZpVwm710HcLual0fBqCWcynf_cDxXwCLxiixG1c.ttf", "600" => "http://fonts.gstatic.com/s/rajdhani/v5/5fnmZahByDeTtgxIiqbJSaCWcynf_cDxXwCLxiixG1c.ttf", "700" => "http://fonts.gstatic.com/s/rajdhani/v5/UBK6d2Hg7X7wYLlF92aXW6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/rajdhani/v5/Wfy5zp4PGFAFS7-Wetehzw.ttf")), array("kind" => "webfonts#webfont", "family" => "Raleway", "category" => "sans-serif", "variants" => array("100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("latin-ext", "latin"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/raleway/v10/UDfD6oxBaBnmFJwQ7XAFNw.ttf", "200" => "http://fonts.gstatic.com/s/raleway/v10/LAQwev4hdCtYkOYX4Oc7nPesZW2xOQ-xsNqO47m55DA.ttf", "300" => "http://fonts.gstatic.com/s/raleway/v10/2VvSZU2kb4DZwFfRM4fLQPesZW2xOQ-xsNqO47m55DA.ttf", "500" => "http://fonts.gstatic.com/s/raleway/v10/348gn6PEmbLDWlHbbV15d_esZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/raleway/v10/M7no6oPkwKYJkedjB1wqEvesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/raleway/v10/VGEV9-DrblisWOWLbK-1XPesZW2xOQ-xsNqO47m55DA.ttf", "800" => "http://fonts.gstatic.com/s/raleway/v10/mMh0JrsYMXcLO69jgJwpUvesZW2xOQ-xsNqO47m55DA.ttf", "900" => "http://fonts.gstatic.com/s/raleway/v10/ajQQGcDBLcyLpaUfD76UuPesZW2xOQ-xsNqO47m55DA.ttf", "100italic" => "http://fonts.gstatic.com/s/raleway/v10/hUpHtml6IPNuUR-FwVi2UKCWcynf_cDxXwCLxiixG1c.ttf", "200italic" => "http://fonts.gstatic.com/s/raleway/v10/N2DIbZG4399cPGfifZUEQi3USBnSvpkopQaUR-2r7iU.ttf", "300italic" => "http://fonts.gstatic.com/s/raleway/v10/TVSB8ogXDKMcnAAJ5CqrUi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/raleway/v10/_dCzxpXzIS3sL-gdJWAP8A.ttf", "italic" => "http://fonts.gstatic.com/s/raleway/v10/utU2m1gdZSfuQpArSy5Dbw.ttf", "500italic" => "http://fonts.gstatic.com/s/raleway/v10/S7vGLZZ40c85SJgiptJGVy3USBnSvpkopQaUR-2r7iU.ttf", "600italic" => "http://fonts.gstatic.com/s/raleway/v10/OY22yoG8EJ3IN_muVWm29C3USBnSvpkopQaUR-2r7iU.ttf", "700italic" => "http://fonts.gstatic.com/s/raleway/v10/lFxvRPuGFG5ktd7P0WRwKi3USBnSvpkopQaUR-2r7iU.ttf", "800italic" => "http://fonts.gstatic.com/s/raleway/v10/us4LjTCmlYgh3W8CKujEJi3USBnSvpkopQaUR-2r7iU.ttf", "900italic" => "http://fonts.gstatic.com/s/raleway/v10/oY2RadnkHfshu5f0FLsgVS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Raleway Dots", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ralewaydots/v4/lhLgmWCRcyz-QXo8LCzTfC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Ramabhadra", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ramabhadra/v5/JyhxLXRVQChLDGADS_c5MPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Ramaraja", "category" => "serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ramaraja/v1/XIqzxFapVczstBedHdQTiw.ttf")), array("kind" => "webfonts#webfont", "family" => "Rambla", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/rambla/v4/C5VZH8BxQKmnBuoC00UPpw.ttf", "regular" => "http://fonts.gstatic.com/s/rambla/v4/YaTmpvm5gFg_ShJKTQmdzg.ttf", "italic" => "http://fonts.gstatic.com/s/rambla/v4/mhUgsKmp0qw3uATdDDAuwA.ttf", "700italic" => "http://fonts.gstatic.com/s/rambla/v4/ziMzUZya6QahrKONSI1TzqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Rammetto One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rammettoone/v5/mh0uQ1tV8QgSx9v_KyEYPC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Ranchers", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ranchers/v4/9ya8CZYhqT66VERfjQ7eLA.ttf")), array("kind" => "webfonts#webfont", "family" => "Rancho", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rancho/v6/ekp3-4QykC4--6KaslRgHA.ttf")), array("kind" => "webfonts#webfont", "family" => "Ranga", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ranga/v1/h8G_gEUH7vHKH-NkjAs34A.ttf", "regular" => "http://fonts.gstatic.com/s/ranga/v1/xpW6zFTNzY1JykoBIqE1Zg.ttf")), array("kind" => "webfonts#webfont", "family" => "Rationale", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rationale/v7/7M2eN-di0NGLQse7HzJRfg.ttf")), array("kind" => "webfonts#webfont", "family" => "Ravi Prakash", "category" => "display", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/raviprakash/v3/8EzbM7Rymjk25jWeHxbO6C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Redressed", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/redressed/v6/3aZ5sTBppH3oSm5SabegtA.ttf")), array("kind" => "webfonts#webfont", "family" => "Reenie Beanie", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/reeniebeanie/v7/ljpKc6CdXusL1cnGUSamX4jjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Revalia", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/revalia/v4/1TKw66fF5_poiL0Ktgo4_A.ttf")), array("kind" => "webfonts#webfont", "family" => "Rhodium Libre", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-06-03", "files" => array("regular" => "http://fonts.gstatic.com/s/rhodiumlibre/v1/Vxr7A4-xE2zsBDDI8BcseIjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Ribeye", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ribeye/v5/e5w3VE8HnWBln4Ll6lUj3Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Ribeye Marrow", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ribeyemarrow/v6/q7cBSA-4ErAXBCDFPrhlY0cTNmV93fYG7UKgsLQNQWs.ttf")), array("kind" => "webfonts#webfont", "family" => "Righteous", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/righteous/v5/0nRRWM_gCGCt2S-BCfN8WQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Risque", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/risque/v4/92RnElGnl8yHP97-KV3Fyg.ttf")), array("kind" => "webfonts#webfont", "family" => "Roboto", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "900", "900italic"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v15", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/roboto/v15/7MygqTe2zs9YkP0adA9QQQ.ttf", "300" => "http://fonts.gstatic.com/s/roboto/v15/dtpHsbgPEm2lVWciJZ0P-A.ttf", "500" => "http://fonts.gstatic.com/s/roboto/v15/Uxzkqj-MIMWle-XP2pDNAA.ttf", "700" => "http://fonts.gstatic.com/s/roboto/v15/bdHGHleUa-ndQCOrdpfxfw.ttf", "900" => "http://fonts.gstatic.com/s/roboto/v15/H1vB34nOKWXqzKotq25pcg.ttf", "100italic" => "http://fonts.gstatic.com/s/roboto/v15/T1xnudodhcgwXCmZQ490TPesZW2xOQ-xsNqO47m55DA.ttf", "300italic" => "http://fonts.gstatic.com/s/roboto/v15/iE8HhaRzdhPxC93dOdA056CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/roboto/v15/W5F8_SL0XFawnjxHGsZjJA.ttf", "italic" => "http://fonts.gstatic.com/s/roboto/v15/hcKoSgxdnKlbH5dlTwKbow.ttf", "500italic" => "http://fonts.gstatic.com/s/roboto/v15/daIfzbEw-lbjMyv4rMUUTqCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/roboto/v15/owYYXKukxFDFjr0ZO8NXh6CWcynf_cDxXwCLxiixG1c.ttf", "900italic" => "http://fonts.gstatic.com/s/roboto/v15/b9PWBSMHrT2zM5FgUdtu0aCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Roboto Condensed", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v13", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/robotocondensed/v13/b9QBgL0iMZfDSpmcXcE8nJRhFVcex_hajThhFkHyhYk.ttf", "700" => "http://fonts.gstatic.com/s/robotocondensed/v13/b9QBgL0iMZfDSpmcXcE8nPOYkGiSOYDq_T7HbIOV1hA.ttf", "300italic" => "http://fonts.gstatic.com/s/robotocondensed/v13/mg0cGfGRUERshzBlvqxeAPYa9bgCHecWXGgisnodcS0.ttf", "regular" => "http://fonts.gstatic.com/s/robotocondensed/v13/Zd2E9abXLFGSr9G3YK2MsKDbm6fPDOZJsR8PmdG62gY.ttf", "italic" => "http://fonts.gstatic.com/s/robotocondensed/v13/BP5K8ZAJv9qEbmuFp8RpJY_eiqgTfYGaH0bJiUDZ5GA.ttf", "700italic" => "http://fonts.gstatic.com/s/robotocondensed/v13/mg0cGfGRUERshzBlvqxeAE2zk2RGRC3SlyyLLQfjS_8.ttf")), array("kind" => "webfonts#webfont", "family" => "Roboto Mono", "category" => "monospace", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v4", "lastModified" => "2015-05-28", "files" => array("100" => "http://fonts.gstatic.com/s/robotomono/v4/aOIeRp72J9_Hp_8KwQ9M-YAWxXGWZ3yJw6KhWS7MxOk.ttf", "300" => "http://fonts.gstatic.com/s/robotomono/v4/N4duVc9C58uwPiY8_59Fzy9-WlPSxbfiI49GsXo3q0g.ttf", "500" => "http://fonts.gstatic.com/s/robotomono/v4/N4duVc9C58uwPiY8_59Fz8CNfqCYlB_eIx7H1TVXe60.ttf", "700" => "http://fonts.gstatic.com/s/robotomono/v4/N4duVc9C58uwPiY8_59Fz3e1Pd76Vl7zRpE7NLJQ7XU.ttf", "100italic" => "http://fonts.gstatic.com/s/robotomono/v4/rqQ1zSE-ZGCKVZgew-A9dgyDtfpXZi-8rXUZYR4dumU.ttf", "300italic" => "http://fonts.gstatic.com/s/robotomono/v4/1OsMuiiO6FCF2x67vzDKA2o9eWDfYYxG3A176Zl7aIg.ttf", "regular" => "http://fonts.gstatic.com/s/robotomono/v4/eJ4cxQe85Lo39t-LVoKa26CWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/robotomono/v4/mE0EPT_93c7f86_WQexR3EeOrDcLawS7-ssYqLr2Xp4.ttf", "500italic" => "http://fonts.gstatic.com/s/robotomono/v4/1OsMuiiO6FCF2x67vzDKA2nWRcJAYo5PSCx8UfGMHCI.ttf", "700italic" => "http://fonts.gstatic.com/s/robotomono/v4/1OsMuiiO6FCF2x67vzDKA8_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Roboto Slab", "category" => "serif", "variants" => array("100", "300", "regular", "700"), "subsets" => array("vietnamese", "cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/robotoslab/v6/MEz38VLIFL-t46JUtkIEgIAWxXGWZ3yJw6KhWS7MxOk.ttf", "300" => "http://fonts.gstatic.com/s/robotoslab/v6/dazS1PrQQuCxC3iOAJFEJS9-WlPSxbfiI49GsXo3q0g.ttf", "700" => "http://fonts.gstatic.com/s/robotoslab/v6/dazS1PrQQuCxC3iOAJFEJXe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/robotoslab/v6/3__ulTNA7unv0UtplybPiqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Rochester", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rochester/v6/bnj8tmQBiOkdji_G_yvypg.ttf")), array("kind" => "webfonts#webfont", "family" => "Rock Salt", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rocksalt/v6/Zy7JF9h9WbhD9V3SFMQ1UQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Rokkitt", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v10", "lastModified" => "2016-02-24", "files" => array("700" => "http://fonts.gstatic.com/s/rokkitt/v10/gxlo-sr3rPmvgSixYog_ofesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/rokkitt/v10/GMA7Z_ToF8uSvpZAgnp_VQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Romanesco", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/romanesco/v5/2udIjUrpK_CPzYSxRVzD4Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Ropa Sans", "category" => "sans-serif", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ropasans/v5/Gba7ZzVBuhg6nX_AoSwlkQ.ttf", "italic" => "http://fonts.gstatic.com/s/ropasans/v5/V1zbhZQscNrh63dy5Jk2nqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Rosario", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v11", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/rosario/v11/nrS6PJvDWN42RP4TFWccd_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/rosario/v11/bL-cEh8dXtDupB2WccA2LA.ttf", "italic" => "http://fonts.gstatic.com/s/rosario/v11/pkflNy18HEuVVx4EOjeb_Q.ttf", "700italic" => "http://fonts.gstatic.com/s/rosario/v11/EOgFX2Va5VGrkhn_eDpIRS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Rosarivo", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rosarivo/v4/EmPiINK0qyqc7KSsNjJamA.ttf", "italic" => "http://fonts.gstatic.com/s/rosarivo/v4/u3VuWsWQlX1pDqsbz4paNPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Rouge Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rougescript/v5/AgXDSqZJmy12qS0ixjs6Vy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Rozha One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v2", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rozhaone/v2/PyrMHQ6lucEIxwKmhqsX8A.ttf")), array("kind" => "webfonts#webfont", "family" => "Rubik", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "900", "900italic"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v1", "lastModified" => "2015-07-22", "files" => array("300" => "http://fonts.gstatic.com/s/rubik/v1/o1vXYO8YwDpErHEAPAxpOg.ttf", "500" => "http://fonts.gstatic.com/s/rubik/v1/D4HihERG27s-BJrQ4dvkbw.ttf", "700" => "http://fonts.gstatic.com/s/rubik/v1/m1GGHcpLe6Mb0_sAyjXE4g.ttf", "900" => "http://fonts.gstatic.com/s/rubik/v1/mOHfPRl5uP4vw7-5-dbnng.ttf", "300italic" => "http://fonts.gstatic.com/s/rubik/v1/NyXDvUhvZLSWiVfGa5KM-vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/rubik/v1/4sMyW_teKWHB3K8Hm-Il6A.ttf", "italic" => "http://fonts.gstatic.com/s/rubik/v1/elD65ddI0qvNcCh42b1Iqg.ttf", "500italic" => "http://fonts.gstatic.com/s/rubik/v1/0hcxMdoMbXtHiEM1ebdN6PesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/rubik/v1/R4g_rs714cUXVZcdnRdHw_esZW2xOQ-xsNqO47m55DA.ttf", "900italic" => "http://fonts.gstatic.com/s/rubik/v1/HH1b7kBbwInqlw8OQxRE5vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Rubik Mono One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rubikmonoone/v5/e_cupPtD4BrZzotubJD7UbAREgn5xbW23GEXXnhMQ5Y.ttf")), array("kind" => "webfonts#webfont", "family" => "Rubik One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rubikone/v4/Zs6TtctNRSIR8T5PO018rQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruda", "category" => "sans-serif", "variants" => array("regular", "700", "900"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ruda/v7/JABOu1SYOHcGXVejUq4w6g.ttf", "900" => "http://fonts.gstatic.com/s/ruda/v7/Uzusv-enCjoIrznlJJaBRw.ttf", "regular" => "http://fonts.gstatic.com/s/ruda/v7/jPEIPB7DM2DNK_uBGv2HGw.ttf")), array("kind" => "webfonts#webfont", "family" => "Rufina", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/rufina/v4/D0RUjXFr55y4MVZY2Ww_RA.ttf", "regular" => "http://fonts.gstatic.com/s/rufina/v4/s9IFr_fIemiohfZS-ZRDbQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruge Boogie", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rugeboogie/v7/U-TTmltL8aENLVIqYbI5QaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruluko", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ruluko/v4/lv4cMwJtrx_dzmlK5SDc1g.ttf")), array("kind" => "webfonts#webfont", "family" => "Rum Raisin", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rumraisin/v4/kDiL-ntDOEq26B7kYM7cx_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruslan Display", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ruslandisplay/v7/SREdhlyLNUfU1VssRBfs3rgH88D3l9N4auRNHrNS708.ttf")), array("kind" => "webfonts#webfont", "family" => "Russo One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/russoone/v5/zfwxZ--UhUc7FVfgT21PRQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruthie", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ruthie/v6/vJ2LorukHSbWYoEs5juivg.ttf")), array("kind" => "webfonts#webfont", "family" => "Rye", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rye/v4/VUrJlpPpSZxspl3w_yNOrQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Sacramento", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sacramento/v4/_kv-qycSHMNdhjiv0Kj7BvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sahitya", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("devanagari", "latin"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("700" => "http://fonts.gstatic.com/s/sahitya/v1/Zm5hNvMwUyN3tC4GMkH1l_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/sahitya/v1/wQWULcDbZqljdTfjOUtDvw.ttf")), array("kind" => "webfonts#webfont", "family" => "Sail", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/sail/v7/iuEoG6kt-bePGvtdpL0GUQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Salsa", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/salsa/v6/BnpUCBmYdvggScEPs5JbpA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sanchez", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sanchez/v4/BEL8ao-E2LJ5eHPLB2UAiw.ttf", "italic" => "http://fonts.gstatic.com/s/sanchez/v4/iSrhkWLexUZzDeNxNEHtzA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sancreek", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sancreek/v7/8ZacBMraWMvHly4IJI3esw.ttf")), array("kind" => "webfonts#webfont", "family" => "Sansita One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sansitaone/v6/xWqf68oB50JXqGIRR0h2hqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Sarala", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("700" => "http://fonts.gstatic.com/s/sarala/v1/hpc9cz8KYsazwq2In_oJYw.ttf", "regular" => "http://fonts.gstatic.com/s/sarala/v1/ohip9lixCHoBab7hTtgLnw.ttf")), array("kind" => "webfonts#webfont", "family" => "Sarina", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sarina/v5/XYtRfaSknHIU3NHdfTdXoQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Sarpanch", "category" => "sans-serif", "variants" => array("regular", "500", "600", "700", "800", "900"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/sarpanch/v1/Ov7BxSrFSZYrfuJxL1LzQaCWcynf_cDxXwCLxiixG1c.ttf", "600" => "http://fonts.gstatic.com/s/sarpanch/v1/WTnP2wnc0qSbUaaDG-2OQ6CWcynf_cDxXwCLxiixG1c.ttf", "700" => "http://fonts.gstatic.com/s/sarpanch/v1/57kYsSpovYmFaEt2hsZhv6CWcynf_cDxXwCLxiixG1c.ttf", "800" => "http://fonts.gstatic.com/s/sarpanch/v1/OKyqPLjdnuVghR-1TV6RzaCWcynf_cDxXwCLxiixG1c.ttf", "900" => "http://fonts.gstatic.com/s/sarpanch/v1/JhYc2cr6kqWTo_P0vfvJR6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/sarpanch/v1/YMBZdT27b6O5a1DADbAGSg.ttf")), array("kind" => "webfonts#webfont", "family" => "Satisfy", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/satisfy/v6/PRlyepkd-JCGHiN8e9WV2w.ttf")), array("kind" => "webfonts#webfont", "family" => "Scada", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/scada/v4/t6XNWdMdVWUz93EuRVmifQ.ttf", "regular" => "http://fonts.gstatic.com/s/scada/v4/iZNC3ZEYwe3je6H-28d5Ug.ttf", "italic" => "http://fonts.gstatic.com/s/scada/v4/PCGyLT1qNawkOUQ3uHFhBw.ttf", "700italic" => "http://fonts.gstatic.com/s/scada/v4/kLrBIf7V4mDMwcd_Yw7-D_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Scheherazade", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "arabic"), "version" => "v11", "lastModified" => "2015-08-26", "files" => array("700" => "http://fonts.gstatic.com/s/scheherazade/v11/C1wtT46acJkQxc6mPHwvHED2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/scheherazade/v11/AuKlqGWzUC-8XqMOmsqXiy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Schoolbell", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/schoolbell/v6/95-3djEuubb3cJx-6E7j4vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Seaweed Script", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/seaweedscript/v4/eorWAPpOvvWrPw5IHwE60BnpV0hQCek3EmWnCPrvGRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Sevillana", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sevillana/v4/6m1Nh35oP7YEt00U80Smiw.ttf")), array("kind" => "webfonts#webfont", "family" => "Seymour One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/seymourone/v4/HrdG2AEG_870Xb7xBVv6C6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Shadows Into Light", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shadowsintolight/v6/clhLqOv7MXn459PTh0gXYAW_5bEze-iLRNvGrRpJsfM.ttf")), array("kind" => "webfonts#webfont", "family" => "Shadows Into Light Two", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shadowsintolighttwo/v4/gDxHeefcXIo-lOuZFCn2xVQrZk-Pga5KeEE_oZjkQjQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Shanti", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shanti/v8/lc4nG_JG6Q-2FQSOMMhb_w.ttf")), array("kind" => "webfonts#webfont", "family" => "Share", "category" => "display", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/share/v5/XrU8e7a1YKurguyY2azk1Q.ttf", "regular" => "http://fonts.gstatic.com/s/share/v5/1ytD7zSb_-g9I2GG67vmVw.ttf", "italic" => "http://fonts.gstatic.com/s/share/v5/a9YGdQWFRlNJ0zClJVaY3Q.ttf", "700italic" => "http://fonts.gstatic.com/s/share/v5/A992-bLVYwAflKu6iaznufesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Share Tech", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sharetech/v4/Dq3DuZ5_0SW3oEfAWFpen_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Share Tech Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sharetechmono/v5/RQxK-3RA0Lnf3gnnnNrAscwD6PD0c3_abh9zHKQtbGU.ttf")), array("kind" => "webfonts#webfont", "family" => "Shojumaru", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shojumaru/v4/WP8cxonzQQVAoI3RJQ2wug.ttf")), array("kind" => "webfonts#webfont", "family" => "Short Stack", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shortstack/v6/v4dXPI0Rm8XN9gk4SDdqlqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Siemreap", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/siemreap/v9/JSK-mOIsXwxo-zE9XDDl_g.ttf")), array("kind" => "webfonts#webfont", "family" => "Sigmar One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sigmarone/v6/oh_5NxD5JBZksdo2EntKefesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Signika", "category" => "sans-serif", "variants" => array("300", "regular", "600", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/signika/v6/0wDPonOzsYeEo-1KO78w4fesZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/signika/v6/lQMOF6NUN2ooR7WvB7tADvesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/signika/v6/lEcnfPBICWJPv5BbVNnFJPesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/signika/v6/WvDswbww0oAtvBg2l1L-9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Signika Negative", "category" => "sans-serif", "variants" => array("300", "regular", "600", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/signikanegative/v5/q5TOjIw4CenPw6C-TW06FjYFXpUPtCmIEFDvjUnLLaI.ttf", "600" => "http://fonts.gstatic.com/s/signikanegative/v5/q5TOjIw4CenPw6C-TW06FrKLaDJM01OezSVA2R_O3qI.ttf", "700" => "http://fonts.gstatic.com/s/signikanegative/v5/q5TOjIw4CenPw6C-TW06FpYzPxtVvobH1w3hEppR8WI.ttf", "regular" => "http://fonts.gstatic.com/s/signikanegative/v5/Z-Q1hzbY8uAo3TpTyPFMXVM1lnCWMnren5_v6047e5A.ttf")), array("kind" => "webfonts#webfont", "family" => "Simonetta", "category" => "display", "variants" => array("regular", "italic", "900", "900italic"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/simonetta/v5/22EwvvJ2r1VwVCxit5LcVi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/simonetta/v5/fN8puNuahBo4EYMQgp12Yg.ttf", "italic" => "http://fonts.gstatic.com/s/simonetta/v5/ynxQ3FqfF_Nziwy3T9ZwL6CWcynf_cDxXwCLxiixG1c.ttf", "900italic" => "http://fonts.gstatic.com/s/simonetta/v5/WUXOpCgBZaRPrWtMCpeKoienaqEuufTBk9XMKnKmgDA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sintony", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/sintony/v4/zVXQB1wqJn6PE4dWXoYpvPesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/sintony/v4/IDhCijoIMev2L6Lg5QsduQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Sirin Stencil", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sirinstencil/v5/pRpLdo0SawzO7MoBpvowsImg74kgS1F7KeR8rWhYwkU.ttf")), array("kind" => "webfonts#webfont", "family" => "Six Caps", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sixcaps/v7/_XeDnO0HOV8Er9u97If1tQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Skranji", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/skranji/v4/Lcrhg-fviVkxiEgoadsI1vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/skranji/v4/jnOLPS0iZmDL7dfWnW3nIw.ttf")), array("kind" => "webfonts#webfont", "family" => "Slabo 13px", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/slabo13px/v3/jPGWFTjRXfCSzy0qd1nqdvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Slabo 27px", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/slabo27px/v3/gC0o8B9eU21EafNkXlRAfPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Slackey", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/slackey/v6/evRIMNhGVCRJvCPv4kteeA.ttf")), array("kind" => "webfonts#webfont", "family" => "Smokum", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/smokum/v6/8YP4BuAcy97X8WfdKfxVRw.ttf")), array("kind" => "webfonts#webfont", "family" => "Smythe", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/smythe/v7/yACD1gy_MpbB9Ft42fUvYw.ttf")), array("kind" => "webfonts#webfont", "family" => "Sniglet", "category" => "display", "variants" => array("regular", "800"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("800" => "http://fonts.gstatic.com/s/sniglet/v7/NLF91nBmcEfkBgcEWbHFa_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/sniglet/v7/XWhyQLHH4SpCVsHRPRgu9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Snippet", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/snippet/v6/eUcYMLq2GtHZovLlQH_9kA.ttf")), array("kind" => "webfonts#webfont", "family" => "Snowburst One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/snowburstone/v4/zSQzKOPukXRux2oTqfYJjIjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Sofadi One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sofadione/v4/nirf4G12IcJ6KI8Eoj119fesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sofia", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sofia/v5/Imnvx0Ag9r6iDBFUY5_RaQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Sonsie One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sonsieone/v5/KSP7xT1OSy0q2ob6RQOTWPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sorts Mill Goudy", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sortsmillgoudy/v6/JzRrPKdwEnE8F1TDmDLMUlIL2Qjg-Xlsg_fhGbe2P5U.ttf", "italic" => "http://fonts.gstatic.com/s/sortsmillgoudy/v6/UUu1lKiy4hRmBWk599VL1TYNkCNSzLyoucKmbTguvr0.ttf")), array("kind" => "webfonts#webfont", "family" => "Source Code Pro", "category" => "monospace", "variants" => array("200", "300", "regular", "500", "600", "700", "900"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqaXvKVW_haheDNrHjziJZVk.ttf", "300" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqVP7R5lD_au4SZC6Ks_vyWs.ttf", "500" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqX63uKwMO11Of4rJWV582wg.ttf", "600" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqeiMeWyi5E_-XkTgB5psiDg.ttf", "700" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqfgXsetDviZcdR5OzC1KPcw.ttf", "900" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqRA_awHl7mXRjE_LQVochcU.ttf", "regular" => "http://fonts.gstatic.com/s/sourcecodepro/v6/mrl8jkM18OlOQN8JLgasD9Rl0pGnog23EMYRrBmUzJQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Source Sans Pro", "category" => "sans-serif", "variants" => array("200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "900", "900italic"), "subsets" => array("vietnamese", "latin-ext", "latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGKXvKVW_haheDNrHjziJZVk.ttf", "300" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGFP7R5lD_au4SZC6Ks_vyWs.ttf", "600" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGOiMeWyi5E_-XkTgB5psiDg.ttf", "700" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGPgXsetDviZcdR5OzC1KPcw.ttf", "900" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGBA_awHl7mXRjE_LQVochcU.ttf", "200italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6OptKU7UIBg2hLM7eMTU8bI.ttf", "300italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6DUpNKoQAsDux-Todp8f29w.ttf", "regular" => "http://fonts.gstatic.com/s/sourcesanspro/v9/ODelI1aHBYDBqgeIAH2zlNRl0pGnog23EMYRrBmUzJQ.ttf", "italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/M2Jd71oPJhLKp0zdtTvoMwRX4TIfMQQEXLu74GftruE.ttf", "600italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6Pp6lGoTTgjlW0sC4r900Co.ttf", "700italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6LVT4locI09aamSzFGQlDMY.ttf", "900italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6A0NcF6HPGWR298uWIdxWv0.ttf")), array("kind" => "webfonts#webfont", "family" => "Source Serif Pro", "category" => "serif", "variants" => array("regular", "600", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("600" => "http://fonts.gstatic.com/s/sourceserifpro/v4/yd5lDMt8Sva2PE17yiLarGi4cQnvCGV11m1KlXh97aQ.ttf", "700" => "http://fonts.gstatic.com/s/sourceserifpro/v4/yd5lDMt8Sva2PE17yiLarEkpYHRvxGNSCrR82n_RDNk.ttf", "regular" => "http://fonts.gstatic.com/s/sourceserifpro/v4/CeUM4np2c42DV49nanp55YGL0S0YDpKs5GpLtZIQ0m4.ttf")), array("kind" => "webfonts#webfont", "family" => "Special Elite", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/specialelite/v6/9-wW4zu3WNoD5Fjka35Jm4jjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Spicy Rice", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/spicyrice/v5/WGCtz7cLoggXARPi9OGD6_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Spinnaker", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/spinnaker/v8/MQdIXivKITpjROUdiN6Jgg.ttf")), array("kind" => "webfonts#webfont", "family" => "Spirax", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/spirax/v5/IOKqhk-Ccl7y31yDsePPkw.ttf")), array("kind" => "webfonts#webfont", "family" => "Squada One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/squadaone/v5/3tzGuaJdD65cZVgfQzN8uvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sree Krushnadevaraya", "category" => "serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sreekrushnadevaraya/v4/CdsXmnHyEqVl1ahzOh5qnzjDZVem5Eb4d0dXjXa0F_Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Stalemate", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/stalemate/v4/wQLCnG0qB6mOu2Wit2dt_w.ttf")), array("kind" => "webfonts#webfont", "family" => "Stalinist One", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/stalinistone/v8/MQpS-WezM9W4Dd7D3B7I-UT7eZ8.ttf")), array("kind" => "webfonts#webfont", "family" => "Stardos Stencil", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/stardosstencil/v6/h4ExtgvoXhPtv9Ieqd-XC81wDCbBgmIo8UyjIhmkeSM.ttf", "regular" => "http://fonts.gstatic.com/s/stardosstencil/v6/ygEOyTW9a6u4fi4OXEZeTFf2eT4jUldwg_9fgfY_tHc.ttf")), array("kind" => "webfonts#webfont", "family" => "Stint Ultra Condensed", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/stintultracondensed/v5/8DqLK6-YSClFZt3u3EgOUYelbRYnLTTQA1Z5cVLnsI4.ttf")), array("kind" => "webfonts#webfont", "family" => "Stint Ultra Expanded", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/stintultraexpanded/v4/FeigX-wDDgHMCKuhekhedQ7dxr0N5HY0cZKknTIL6n4.ttf")), array("kind" => "webfonts#webfont", "family" => "Stoke", "category" => "serif", "variants" => array("300", "regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/stoke/v6/Sell9475FOS8jUqQsfFsUQ.ttf", "regular" => "http://fonts.gstatic.com/s/stoke/v6/A7qJNoqOm2d6o1E6e0yUFg.ttf")), array("kind" => "webfonts#webfont", "family" => "Strait", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/strait/v4/m4W73ViNmProETY2ybc-Bg.ttf")), array("kind" => "webfonts#webfont", "family" => "Sue Ellen Francisco", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sueellenfrancisco/v7/TwHX4vSxMUnJUdEz1JIgrhzazJzPVbGl8jnf1tisRz4.ttf")), array("kind" => "webfonts#webfont", "family" => "Sumana", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-05-04", "files" => array("700" => "http://fonts.gstatic.com/s/sumana/v1/8AcM-KAproitONSBBHj3sQ.ttf", "regular" => "http://fonts.gstatic.com/s/sumana/v1/wgdl__wAK7pzliiWs0Nlog.ttf")), array("kind" => "webfonts#webfont", "family" => "Sunshiney", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sunshiney/v6/kaWOb4pGbwNijM7CkxK1sQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Supermercado One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/supermercadoone/v6/kMGPVTNFiFEp1U274uBMb4mm5hmSKNFf3C5YoMa-lrM.ttf")), array("kind" => "webfonts#webfont", "family" => "Sura", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("700" => "http://fonts.gstatic.com/s/sura/v1/Z5bXQaFGmoWicN1WlcncxA.ttf", "regular" => "http://fonts.gstatic.com/s/sura/v1/jznKrhTH5NezYxb0-Q5zzA.ttf")), array("kind" => "webfonts#webfont", "family" => "Suranna", "category" => "serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/suranna/v4/PYmfr6TQeTqZ-r8HnPM-kA.ttf")), array("kind" => "webfonts#webfont", "family" => "Suravaram", "category" => "serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/suravaram/v3/G4dPee4pel_w2HqzavW4MA.ttf")), array("kind" => "webfonts#webfont", "family" => "Suwannaphum", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/suwannaphum/v9/1jIPOyXied3T79GCnSlCN6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Swanky and Moo Moo", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/swankyandmoomoo/v6/orVNZ9kDeE3lWp3U3YELu9DVLKqNC3_XMNHhr8S94FU.ttf")), array("kind" => "webfonts#webfont", "family" => "Syncopate", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/syncopate/v7/S5z8ixiOoC4WJ1im6jAlYC3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/syncopate/v7/RQVwO52fAH6MI764EcaYtw.ttf")), array("kind" => "webfonts#webfont", "family" => "Tangerine", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/tangerine/v7/UkFsr-RwJB_d2l9fIWsx3i3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/tangerine/v7/DTPeM3IROhnkz7aYG2a9sA.ttf")), array("kind" => "webfonts#webfont", "family" => "Taprom", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/taprom/v8/-KByU3BaUsyIvQs79qFObg.ttf")), array("kind" => "webfonts#webfont", "family" => "Tauri", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tauri/v4/XIWeYJDXNqiVNej0zEqtGg.ttf")), array("kind" => "webfonts#webfont", "family" => "Teko", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/teko/v5/OobFGE9eo24rcBpN6zXDaQ.ttf", "500" => "http://fonts.gstatic.com/s/teko/v5/FQ0duU7gWM4cSaImOfAjBA.ttf", "600" => "http://fonts.gstatic.com/s/teko/v5/QDx_i8H-TZ1IK1JEVrqwEQ.ttf", "700" => "http://fonts.gstatic.com/s/teko/v5/xKfTxe_SWpH4xU75vmvylA.ttf", "regular" => "http://fonts.gstatic.com/s/teko/v5/UtekqODEqZXSN2L-njejpA.ttf")), array("kind" => "webfonts#webfont", "family" => "Telex", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/telex/v4/24-3xP9ywYeHOcFU3iGk8A.ttf")), array("kind" => "webfonts#webfont", "family" => "Tenali Ramakrishna", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tenaliramakrishna/v3/M0nTmDqv2M7AGoGh-c946BZak5pSBHqWX6uyVMiMFoA.ttf")), array("kind" => "webfonts#webfont", "family" => "Tenor Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tenorsans/v7/dUBulmjNJJInvK5vL7O9yfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Text Me One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/textmeone/v4/9em_3ckd_P5PQkP4aDyDLqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "The Girl Next Door", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/thegirlnextdoor/v7/cWRA4JVGeEcHGcPl5hmX7kzo0nFFoM60ux_D9BUymX4.ttf")), array("kind" => "webfonts#webfont", "family" => "Tienne", "category" => "serif", "variants" => array("regular", "700", "900"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/tienne/v8/JvoCDOlyOSEyYGRwCyfs3g.ttf", "900" => "http://fonts.gstatic.com/s/tienne/v8/FBano5T521OWexj2iRYLMw.ttf", "regular" => "http://fonts.gstatic.com/s/tienne/v8/-IIfDl701C0z7-fy2kmGvA.ttf")), array("kind" => "webfonts#webfont", "family" => "Tillana", "category" => "handwriting", "variants" => array("regular", "500", "600", "700", "800"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/tillana/v1/gqdUngSIcY9tSla5eCZky_esZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/tillana/v1/fqon6-r15hy8M1cyiYfQBvesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/tillana/v1/jGARMTxLrMerzTCpGBpMffesZW2xOQ-xsNqO47m55DA.ttf", "800" => "http://fonts.gstatic.com/s/tillana/v1/pmTtNH_Ibktj5Cyc1XrP6vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/tillana/v1/zN0D-jDPsr1HzU3VRFLY5g.ttf")), array("kind" => "webfonts#webfont", "family" => "Timmana", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("telugu", "latin"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/timmana/v1/T25SicsJUJkc2s2sbBsDnA.ttf")), array("kind" => "webfonts#webfont", "family" => "Tinos", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("vietnamese", "cyrillic", "hebrew", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/tinos/v9/vHXfhX8jZuQruowfon93yQ.ttf", "regular" => "http://fonts.gstatic.com/s/tinos/v9/EqpUbkVmutfwZ0PjpoGwCg.ttf", "italic" => "http://fonts.gstatic.com/s/tinos/v9/slfyzlasCr9vTsaP4lUh9A.ttf", "700italic" => "http://fonts.gstatic.com/s/tinos/v9/M6kfzvDMM0CdxdraoFpG6vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Titan One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/titanone/v4/FbvpRvzfV_oipS0De3iAZg.ttf")), array("kind" => "webfonts#webfont", "family" => "Titillium Web", "category" => "sans-serif", "variants" => array("200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "900"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wprzOdCrLccoxq42eaxM802O0.ttf", "300" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr9ZAkYT8DuUZELiKLwMGWAo.ttf", "600" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr28K9dEd5Ue-HTQrlA7E2xQ.ttf", "700" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr2-6tpSbB9YhmWtmd1_gi_U.ttf", "900" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr7L0GmZLri-m-nfoo0Vul4Y.ttf", "200italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/RZunN20OBmkvrU7sA4GPPj4N98U-66ThNJvtgddRfBE.ttf", "300italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/RZunN20OBmkvrU7sA4GPPrfzCkqg7ORZlRf2cc4mXu8.ttf", "regular" => "http://fonts.gstatic.com/s/titilliumweb/v4/7XUFZ5tgS-tD6QamInJTcTyagQBwYgYywpS70xNq8SQ.ttf", "italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/r9OmwyQxrgzUAhaLET_KO-ixohbIP6lHkU-1Mgq95cY.ttf", "600italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/RZunN20OBmkvrU7sA4GPPgOhzTSndyK8UWja2yJjKLc.ttf", "700italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/RZunN20OBmkvrU7sA4GPPio3LEw-4MM8Ao2j9wPOfpw.ttf")), array("kind" => "webfonts#webfont", "family" => "Trade Winds", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tradewinds/v5/sDOCVgAxw6PEUi2xdMsoDaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Trocchi", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/trocchi/v4/uldNPaKrUGVeGCVsmacLwA.ttf")), array("kind" => "webfonts#webfont", "family" => "Trochut", "category" => "display", "variants" => array("regular", "italic", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/trochut/v4/lWqNOv6ISR8ehNzGLFLnJ_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/trochut/v4/6Y65B0x-2JsnYt16OH5omw.ttf", "italic" => "http://fonts.gstatic.com/s/trochut/v4/pczUwr4ZFvC79TgNO5cZng.ttf")), array("kind" => "webfonts#webfont", "family" => "Trykker", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/trykker/v5/YiVrVJpBFN7I1l_CWk6yYQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Tulpen One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tulpenone/v6/lwcTfVIEVxpZLZlWzR5baPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Ubuntu", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/ubuntu/v9/7-wH0j2QCTHKgp7vLh9-sQ.ttf", "500" => "http://fonts.gstatic.com/s/ubuntu/v9/bMbHEMwSUmkzcK2x_74QbA.ttf", "700" => "http://fonts.gstatic.com/s/ubuntu/v9/B7BtHjNYwAp3HgLNagENOQ.ttf", "300italic" => "http://fonts.gstatic.com/s/ubuntu/v9/j-TYDdXcC_eQzhhp386SjaCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/ubuntu/v9/lhhB5ZCwEkBRbHMSnYuKyA.ttf", "italic" => "http://fonts.gstatic.com/s/ubuntu/v9/b9hP8wd30SygxZjGGk4DCQ.ttf", "500italic" => "http://fonts.gstatic.com/s/ubuntu/v9/NWdMogIO7U6AtEM4dDdf_aCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/ubuntu/v9/pqisLQoeO9YTDCNnlQ9bf6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Ubuntu Condensed", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ubuntucondensed/v7/DBCt-NXN57MTAFjitYxdrKDbm6fPDOZJsR8PmdG62gY.ttf")), array("kind" => "webfonts#webfont", "family" => "Ubuntu Mono", "category" => "monospace", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("cyrillic", "latin-ext", "greek-ext", "latin", "greek", "cyrillic-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ubuntumono/v6/ceqTZGKHipo8pJj4molytne1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/ubuntumono/v6/EgeuS9OtEmA0y_JRo03MQaCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/ubuntumono/v6/KAKuHXAHZOeECOWAHsRKA0eOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/ubuntumono/v6/n_d8tv_JOIiYyMXR4eaV9c_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Ultra", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ultra/v8/OW8uXkOstRADuhEmGOFQLA.ttf")), array("kind" => "webfonts#webfont", "family" => "Uncial Antiqua", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/uncialantiqua/v4/F-leefDiFwQXsyd6eaSllqrFJ4O13IHVxZbM6yoslpo.ttf")), array("kind" => "webfonts#webfont", "family" => "Underdog", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/underdog/v5/gBv9yjez_-5PnTprHWq0ig.ttf")), array("kind" => "webfonts#webfont", "family" => "Unica One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/unicaone/v4/KbYKlhWMDpatWViqDkNQgA.ttf")), array("kind" => "webfonts#webfont", "family" => "UnifrakturCook", "category" => "display", "variants" => array("700"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/unifrakturcook/v8/ASwh69ykD8iaoYijVEU6RrWZkcsCTHKV51zmcUsafQ0.ttf")), array("kind" => "webfonts#webfont", "family" => "UnifrakturMaguntia", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/unifrakturmaguntia/v7/7KWy3ymCVR_xfAvvcIXm3-kdNg30GQauG_DE-tMYtWk.ttf")), array("kind" => "webfonts#webfont", "family" => "Unkempt", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/unkempt/v7/V7H-GCl9bgwGwqFqTTgDHvesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/unkempt/v7/NLLBeNSspr0RGs71R5LHWA.ttf")), array("kind" => "webfonts#webfont", "family" => "Unlock", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/unlock/v6/rXEQzK7uIAlhoyoAEiMy1w.ttf")), array("kind" => "webfonts#webfont", "family" => "Unna", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/unna/v8/UAS0AM7AmbdCNY_80xyAZQ.ttf")), array("kind" => "webfonts#webfont", "family" => "VT323", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vt323/v7/ITU2YQfM073o1iYK3nSOmQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Vampiro One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vampiroone/v7/OVDs4gY4WpS5u3Qd1gXRW6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Varela", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/varela/v7/ON7qs0cKUUixhhDFXlZUjw.ttf")), array("kind" => "webfonts#webfont", "family" => "Varela Round", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/varelaround/v6/APH4jr0uSos5wiut5cpjri3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Vast Shadow", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vastshadow/v6/io4hqKX3ibiqQQjYfW0-h6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Vesper Libre", "category" => "serif", "variants" => array("regular", "500", "700", "900"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v7", "lastModified" => "2015-06-03", "files" => array("500" => "http://fonts.gstatic.com/s/vesperlibre/v7/0liLgNkygqH6EOtsVjZDsZMQuUSAwdHsY8ov_6tk1oA.ttf", "700" => "http://fonts.gstatic.com/s/vesperlibre/v7/0liLgNkygqH6EOtsVjZDsUD2ttfZwueP-QU272T9-k4.ttf", "900" => "http://fonts.gstatic.com/s/vesperlibre/v7/0liLgNkygqH6EOtsVjZDsaObDOjC3UL77puoeHsE3fw.ttf", "regular" => "http://fonts.gstatic.com/s/vesperlibre/v7/Cg-TeZFsqV8BaOcoVwzu2C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Vibur", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vibur/v7/xB9aKsUbJo68XP0bAg2iLw.ttf")), array("kind" => "webfonts#webfont", "family" => "Vidaloka", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vidaloka/v8/C6Nul0ogKUWkx356rrt9RA.ttf")), array("kind" => "webfonts#webfont", "family" => "Viga", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/viga/v5/uD87gDbhS7frHLX4uL6agg.ttf")), array("kind" => "webfonts#webfont", "family" => "Voces", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/voces/v5/QoBH6g6yKgNIgvL8A2aE2Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Volkhov", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/volkhov/v8/L8PbKS-kEoLHm7nP--NCzPesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/volkhov/v8/MDIZAofe1T_J3un5Kgo8zg.ttf", "italic" => "http://fonts.gstatic.com/s/volkhov/v8/1rTjmztKEpbkKH06JwF8Yw.ttf", "700italic" => "http://fonts.gstatic.com/s/volkhov/v8/W6oG0QDDjCgj0gmsHE520C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Vollkorn", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/vollkorn/v6/gOwQjJVGXlDOONC12hVoBqCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/vollkorn/v6/IiexqYAeh8uII223thYx3w.ttf", "italic" => "http://fonts.gstatic.com/s/vollkorn/v6/UuIzosgR1ovBhJFdwVp3fvesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/vollkorn/v6/KNiAlx6phRqXCwnZZG51JAJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "Voltaire", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/voltaire/v6/WvqBzaGEBbRV-hrahwO2cA.ttf")), array("kind" => "webfonts#webfont", "family" => "Waiting for the Sunrise", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/waitingforthesunrise/v7/eNfH7kLpF1PZWpsetF-ha9TChrNgrDiT3Zy6yGf3FnM.ttf")), array("kind" => "webfonts#webfont", "family" => "Wallpoet", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/wallpoet/v8/hmum4WuBN4A0Z_7367NDIg.ttf")), array("kind" => "webfonts#webfont", "family" => "Walter Turncoat", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/walterturncoat/v6/sG9su5g4GXy1KP73cU3hvQplL2YwNeota48DxFlGDUo.ttf")), array("kind" => "webfonts#webfont", "family" => "Warnes", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/warnes/v6/MXG7_Phj4YpzAXxKGItuBw.ttf")), array("kind" => "webfonts#webfont", "family" => "Wellfleet", "category" => "display", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/wellfleet/v4/J5tOx72iFRPgHYpbK9J4XQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Wendy One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin-ext", "latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/wendyone/v4/R8CJT2oDXdMk_ZtuHTxoxw.ttf")), array("kind" => "webfonts#webfont", "family" => "Wire One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/wireone/v7/sRLhaQOQpWnvXwIx0CycQw.ttf")), array("kind" => "webfonts#webfont", "family" => "Work Sans", "category" => "sans-serif", "variants" => array("100", "200", "300", "regular", "500", "600", "700", "800", "900"), "subsets" => array("latin-ext", "latin"), "version" => "v2", "lastModified" => "2015-12-08", "files" => array("100" => "http://fonts.gstatic.com/s/worksans/v2/ZAhtNqLaAViKjGLajtuwWaCWcynf_cDxXwCLxiixG1c.ttf", "200" => "http://fonts.gstatic.com/s/worksans/v2/u_mYNr_qYP37m7vgvmIYZy3USBnSvpkopQaUR-2r7iU.ttf", "300" => "http://fonts.gstatic.com/s/worksans/v2/FD_Udbezj8EHXbdsqLUply3USBnSvpkopQaUR-2r7iU.ttf", "500" => "http://fonts.gstatic.com/s/worksans/v2/Nbre-U_bp6Xktt8cpgwaJC3USBnSvpkopQaUR-2r7iU.ttf", "600" => "http://fonts.gstatic.com/s/worksans/v2/z9rX03Xuz9ZNHTMg1_ghGS3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/worksans/v2/4udXuXg54JlPEP5iKO5AmS3USBnSvpkopQaUR-2r7iU.ttf", "800" => "http://fonts.gstatic.com/s/worksans/v2/IQh-ap2Uqs7kl1YINeeEGi3USBnSvpkopQaUR-2r7iU.ttf", "900" => "http://fonts.gstatic.com/s/worksans/v2/Hjn0acvjHfjY_vAK9Uc6gi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/worksans/v2/zVvigUiMvx7JVEnrJgc-5Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Yanone Kaffeesatz", "category" => "sans-serif", "variants" => array("200", "300", "regular", "700"), "subsets" => array("latin-ext", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/yanonekaffeesatz/v7/We_iSDqttE3etzfdfhuPRbq92v6XxU4pSv06GI0NsGc.ttf", "300" => "http://fonts.gstatic.com/s/yanonekaffeesatz/v7/We_iSDqttE3etzfdfhuPRZlIwXPiNoNT_wxzJ2t3mTE.ttf", "700" => "http://fonts.gstatic.com/s/yanonekaffeesatz/v7/We_iSDqttE3etzfdfhuPRf2R4S6PlKaGXWPfWpHpcl0.ttf", "regular" => "http://fonts.gstatic.com/s/yanonekaffeesatz/v7/YDAoLskQQ5MOAgvHUQCcLdXn3cHbFGWU4T2HrSN6JF4.ttf")), array("kind" => "webfonts#webfont", "family" => "Yantramanav", "category" => "sans-serif", "variants" => array("100", "300", "regular", "500", "700", "900"), "subsets" => array("latin-ext", "devanagari", "latin"), "version" => "v1", "lastModified" => "2015-06-03", "files" => array("100" => "http://fonts.gstatic.com/s/yantramanav/v1/Rs1I2PF4Z8GAb6qjgvr8wIAWxXGWZ3yJw6KhWS7MxOk.ttf", "300" => "http://fonts.gstatic.com/s/yantramanav/v1/HSfbC4Z8I8BZ00wiXeA5bC9-WlPSxbfiI49GsXo3q0g.ttf", "500" => "http://fonts.gstatic.com/s/yantramanav/v1/HSfbC4Z8I8BZ00wiXeA5bMCNfqCYlB_eIx7H1TVXe60.ttf", "700" => "http://fonts.gstatic.com/s/yantramanav/v1/HSfbC4Z8I8BZ00wiXeA5bHe1Pd76Vl7zRpE7NLJQ7XU.ttf", "900" => "http://fonts.gstatic.com/s/yantramanav/v1/HSfbC4Z8I8BZ00wiXeA5bCenaqEuufTBk9XMKnKmgDA.ttf", "regular" => "http://fonts.gstatic.com/s/yantramanav/v1/FwdziO-qWAO8pZg8e376kaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Yellowtail", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/yellowtail/v6/HLrU6lhCTjXfLZ7X60LcB_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Yeseva One", "category" => "display", "variants" => array("regular"), "subsets" => array("cyrillic", "latin-ext", "latin"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/yesevaone/v10/eenQQxvpzSA80JmisGcgX_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Yesteryear", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/yesteryear/v5/dv09hP_ZrdjVOfZQXKXuZvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Zeyada", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/zeyada/v6/hmonmGYYFwqTZQfG2nRswQ.ttf"))));
1
  <?php
2
 
3
+ return array("kind" => "webfonts#webfontList", "items" => array(array("kind" => "webfonts#webfont", "family" => "ABeeZee", "category" => "sans-serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/abeezee/v9/mE5BOuZKGln_Ex0uYKpIaw.ttf", "italic" => "http://fonts.gstatic.com/s/abeezee/v9/kpplLynmYgP0YtlJA3atRw.ttf")), array("kind" => "webfonts#webfont", "family" => "Abel", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/abel/v6/RpUKfqNxoyNe_ka23bzQ2A.ttf")), array("kind" => "webfonts#webfont", "family" => "Abril Fatface", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/abrilfatface/v8/X1g_KwGeBV3ajZIXQ9VnDojjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Aclonica", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aclonica/v6/M6pHZMPwK3DiBSlo3jwAKQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Acme", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/acme/v5/-J6XNtAHPZBEbsifCdBt-g.ttf")), array("kind" => "webfonts#webfont", "family" => "Actor", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/actor/v6/ugMf40CrRK6Jf6Yz_xNSmQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Adamina", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/adamina/v8/RUQfOodOMiVVYqFZcSlT9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Advent Pro", "category" => "sans-serif", "variants" => array("100", "200", "300", "regular", "500", "600", "700"), "subsets" => array("greek", "latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/adventpro/v4/87-JOpSUecTG50PBYK4ysi3USBnSvpkopQaUR-2r7iU.ttf", "200" => "http://fonts.gstatic.com/s/adventpro/v4/URTSSjIp0Wr-GrjxFdFWnGeudeTO44zf-ht3k-KNzwg.ttf", "300" => "http://fonts.gstatic.com/s/adventpro/v4/sJaBfJYSFgoB80OL1_66m0eOrDcLawS7-ssYqLr2Xp4.ttf", "500" => "http://fonts.gstatic.com/s/adventpro/v4/7kBth2-rT8tP40RmMMXMLJp-63r6doWhTEbsfBIRJ7A.ttf", "600" => "http://fonts.gstatic.com/s/adventpro/v4/3Jo-2maCzv2QLzQBzaKHV_pTEJqju4Hz1txDWij77d4.ttf", "700" => "http://fonts.gstatic.com/s/adventpro/v4/M4I6QiICt-ey_wZTpR2gKwJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/adventpro/v4/1NxMBeKVcNNH2H46AUR3wfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Aguafina Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aguafinascript/v5/65g7cgMtMGnNlNyq_Z6CvMxLhO8OSNnfAp53LK1_iRs.ttf")), array("kind" => "webfonts#webfont", "family" => "Akronim", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/akronim/v5/qA0L2CSArk3tuOWE1AR1DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Aladin", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aladin/v5/PyuJ5cVHkduO0j5fAMKvAA.ttf")), array("kind" => "webfonts#webfont", "family" => "Aldrich", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aldrich/v6/kMMW1S56gFx7RP_mW1g-Eg.ttf")), array("kind" => "webfonts#webfont", "family" => "Alef", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "hebrew"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/alef/v6/VDgZJhEwudtOzOFQpZ8MEA.ttf", "regular" => "http://fonts.gstatic.com/s/alef/v6/ENvZ_P0HBDQxNZYCQO0lUA.ttf")), array("kind" => "webfonts#webfont", "family" => "Alegreya", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/alegreya/v7/5oZtdI5-wQwgAFrd9erCsaCWcynf_cDxXwCLxiixG1c.ttf", "900" => "http://fonts.gstatic.com/s/alegreya/v7/oQeMxX-vxGImzDgX6nxA7KCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/alegreya/v7/62J3atXd6bvMU4qO_ca-eA.ttf", "italic" => "http://fonts.gstatic.com/s/alegreya/v7/cbshnQGxwmlHBjUil7DaIfesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/alegreya/v7/IWi8e5bpnqhMRsZKTcTUWgJKKGfqHaYFsRG-T3ceEVo.ttf", "900italic" => "http://fonts.gstatic.com/s/alegreya/v7/-L71QLH_XqgYWaI1GbOVhp0EAVxt0G0biEntp43Qt6E.ttf")), array("kind" => "webfonts#webfont", "family" => "Alegreya SC", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/alegreyasc/v6/M9OIREoxDkvynwTpBAYUq3e1Pd76Vl7zRpE7NLJQ7XU.ttf", "900" => "http://fonts.gstatic.com/s/alegreyasc/v6/M9OIREoxDkvynwTpBAYUqyenaqEuufTBk9XMKnKmgDA.ttf", "regular" => "http://fonts.gstatic.com/s/alegreyasc/v6/3ozeFnTbygMK6PfHh8B-iqCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/alegreyasc/v6/GOqmv3FLsJ2r6ZALMZVBmkeOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/alegreyasc/v6/5PCoU7IUfCicpKBJtBmP6c_zJjSACmk0BRPxQqhnNLU.ttf", "900italic" => "http://fonts.gstatic.com/s/alegreyasc/v6/5PCoU7IUfCicpKBJtBmP6U_yTOUGsoC54csJe1b-IRw.ttf")), array("kind" => "webfonts#webfont", "family" => "Alegreya Sans", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("latin", "latin-ext", "vietnamese"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/alegreyasans/v3/TKyx_-JJ6MdpQruNk-t-PJFGFO4uyVFMfB6LZsii7kI.ttf", "300" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9acB1LjARzAvdqa1uQC32v70.ttf", "500" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9aQqQmZ7VjhwksfpNVG0pqGc.ttf", "700" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9aVCbmAUID8LN-q3pJpOk3Ys.ttf", "800" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9acxnD5BewVtRRHHljCwR2bM.ttf", "900" => "http://fonts.gstatic.com/s/alegreyasans/v3/11EDm-lum6tskJMBbdy9aW42xlVP-j5dagE7-AU2zwg.ttf", "100italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/gRkSP2lBpqoMTVxg7DmVn2cDnjsrnI9_xJ-5gnBaHsE.ttf", "300italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9CnfqlVoxTUFFx1C8tBqmbcg.ttf", "regular" => "http://fonts.gstatic.com/s/alegreyasans/v3/KYNzioYhDai7mTMnx_gDgn8f0n03UdmQgF_CLvNR2vg.ttf", "italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/TKyx_-JJ6MdpQruNk-t-PD4G9C9ttb0Oz5Cvf0qOitE.ttf", "500italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9Cs7DCVO6wo6i5LKIyZDzK40.ttf", "700italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9CpF66r9C4AnxxlBlGd7xY4g.ttf", "800italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9CicOAJ_9MkLPbDmrtXDPbIU.ttf", "900italic" => "http://fonts.gstatic.com/s/alegreyasans/v3/WfiXipsmjqRqsDBQ1bA9ChRaDUI9aE8-k7PrIG2iiuo.ttf")), array("kind" => "webfonts#webfont", "family" => "Alegreya Sans SC", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("latin", "latin-ext", "vietnamese"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/trwFkDJLOJf6hqM93944kVnzStfdnFU-MXbO84aBs_M.ttf", "300" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR46-1IqtfxJspFjzJp0SaQRcI.ttf", "500" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR46_hHTluI57wqxl55RvSYo3s.ttf", "700" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR4600aId5t1FC-xZ8nmpa_XLk.ttf", "800" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR46wQgSHD3Lo1Mif2Wkk5swWA.ttf", "900" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/AjAmkoP1y0Vaad0UPPR461Rf9EWUSEX_PR1d_gLKfpM.ttf", "100italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/qG3gA9iy5RpXMH4crZboqqakMVR0XlJhO7VdJ8yYvA4.ttf", "300italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0CnTKaH808trtzttbEg4yVA.ttf", "regular" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/6kgb6ZvOagoVIRZyl8XV-EklWX-XdLVn1WTiuGuvKIU.ttf", "italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/trwFkDJLOJf6hqM93944kTfqo69HNOlCNZvbwAmUtiA.ttf", "500italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0NqVvxKdFVwqwzilqfVd39U.ttf", "700italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0IBYn3VD6xMEnodOh8pnFw4.ttf", "800italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0HStmCm6Rs90XeztCALm0H8.ttf", "900italic" => "http://fonts.gstatic.com/s/alegreyasanssc/v3/0VweK-TO3aQgazdxg8fs0IvtwEfTCJoOJugANj-jWDI.ttf")), array("kind" => "webfonts#webfont", "family" => "Alex Brush", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alexbrush/v6/ooh3KJFbKJSUoIRWfiu8o_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Alfa Slab One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alfaslabone/v5/Qx6FPcitRwTC_k88tLPc-Yjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Alice", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alice/v7/wZTAfivekBqIg-rk63nFvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Alike", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alike/v8/Ho8YpRKNk_202fwDiGNIyw.ttf")), array("kind" => "webfonts#webfont", "family" => "Alike Angular", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/alikeangular/v6/OpeCu4xxI3qO1C7CZcJtPT3XH2uEnVI__ynTBvNyki8.ttf")), array("kind" => "webfonts#webfont", "family" => "Allan", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/allan/v7/zSxQiwo7wgnr7KkMXhSiag.ttf", "regular" => "http://fonts.gstatic.com/s/allan/v7/T3lemhgZmLQkQI2Qc2bQHA.ttf")), array("kind" => "webfonts#webfont", "family" => "Allerta", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/allerta/v7/s9FOEuiJFTNbMe06ifzV8g.ttf")), array("kind" => "webfonts#webfont", "family" => "Allerta Stencil", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/allertastencil/v7/CdSZfRtHbQrBohqmzSdDYFf2eT4jUldwg_9fgfY_tHc.ttf")), array("kind" => "webfonts#webfont", "family" => "Allura", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/allura/v4/4hcqgZanyuJ2gMYWffIR6A.ttf")), array("kind" => "webfonts#webfont", "family" => "Almendra", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/almendra/v8/ZpLdQMj7Q2AFio4nNO6A76CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/almendra/v8/PDpbB-ZF7deXAAEYPkQOeg.ttf", "italic" => "http://fonts.gstatic.com/s/almendra/v8/CNWLyiDucqVKVgr4EMidi_esZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/almendra/v8/-tXHKMcnn6FqrhJV3l1e3QJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "Almendra Display", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/almendradisplay/v6/2Zuu97WJ_ez-87yz5Ai8fF6uyC_qD11hrFQ6EGgTJWI.ttf")), array("kind" => "webfonts#webfont", "family" => "Almendra SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/almendrasc/v6/IuiLd8Fm9I6raSalxMoWeaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Amarante", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/amarante/v4/2dQHjIBWSpydit5zkJZnOw.ttf")), array("kind" => "webfonts#webfont", "family" => "Amaranth", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/amaranth/v6/j5OFHqadfxyLnQRxFeox6qCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/amaranth/v6/7VcBog22JBHsHXHdnnycTA.ttf", "italic" => "http://fonts.gstatic.com/s/amaranth/v6/UrJlRY9LcVERJSvggsdBqPesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/amaranth/v6/BHyuYFj9nqLFNvOvGh0xTwJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "Amatic SC", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/amaticsc/v8/IDnkRTPGcrSVo50UyYNK7y3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/amaticsc/v8/MldbRWLFytvqxU1y81xSVg.ttf")), array("kind" => "webfonts#webfont", "family" => "Amethysta", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/amethysta/v4/1jEo9tOFIJDolAUpBnWbnA.ttf")), array("kind" => "webfonts#webfont", "family" => "Amiri", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "arabic"), "version" => "v7", "lastModified" => "2015-04-07", "files" => array("700" => "http://fonts.gstatic.com/s/amiri/v7/WQsR_moz-FNqVwGYgptqiA.ttf", "regular" => "http://fonts.gstatic.com/s/amiri/v7/ATARrPmSew75SlpOw2YABQ.ttf", "italic" => "http://fonts.gstatic.com/s/amiri/v7/3t1yTQlLUXBw8htrqlXBrw.ttf", "700italic" => "http://fonts.gstatic.com/s/amiri/v7/uF8aNEyD0bxMeTBg9bFDSPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Amita", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-06-03", "files" => array("700" => "http://fonts.gstatic.com/s/amita/v1/cIYA2Lzp7l2pcGsqpUidBg.ttf", "regular" => "http://fonts.gstatic.com/s/amita/v1/RhdhGBXSJqkHo6g7miTEcQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Anaheim", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/anaheim/v4/t-z8aXHMpgI2gjN_rIflKA.ttf")), array("kind" => "webfonts#webfont", "family" => "Andada", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/andada/v7/rSFaDqNNQBRw3y19MB5Y4w.ttf")), array("kind" => "webfonts#webfont", "family" => "Andika", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic", "vietnamese"), "version" => "v7", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/andika/v7/oe-ag1G0lcqZ3IXfeEgaGg.ttf")), array("kind" => "webfonts#webfont", "family" => "Angkor", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/angkor/v8/DLpLgIS-8F10ecwKqCm95Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Annie Use Your Telescope", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/annieuseyourtelescope/v6/2cuiO5VmaR09C8SLGEQjGqbp7mtG8sPlcZvOaO8HBak.ttf")), array("kind" => "webfonts#webfont", "family" => "Anonymous Pro", "category" => "monospace", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "latin-ext", "cyrillic"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/anonymouspro/v8/WDf5lZYgdmmKhO8E1AQud--Cz_5MeePnXDAcLNWyBME.ttf", "regular" => "http://fonts.gstatic.com/s/anonymouspro/v8/Zhfjj_gat3waL4JSju74E-V_5zh5b-_HiooIRUBwn1A.ttf", "italic" => "http://fonts.gstatic.com/s/anonymouspro/v8/q0u6LFHwttnT_69euiDbWKwIsuKDCXG0NQm7BvAgx-c.ttf", "700italic" => "http://fonts.gstatic.com/s/anonymouspro/v8/_fVr_XGln-cetWSUc-JpfA1LL9bfs7wyIp6F8OC9RxA.ttf")), array("kind" => "webfonts#webfont", "family" => "Antic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/antic/v7/hEa8XCNM7tXGzD0Uk0AipA.ttf")), array("kind" => "webfonts#webfont", "family" => "Antic Didone", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/anticdidone/v4/r3nJcTDuOluOL6LGDV1vRy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Antic Slab", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/anticslab/v4/PSbJCTKkAS7skPdkd7AKEvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Anton", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/anton/v7/XIbCenm-W0IRHWYIh7CGUQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Arapey", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/arapey/v5/dqu823lrSYn8T2gApTdslA.ttf", "italic" => "http://fonts.gstatic.com/s/arapey/v5/pY-Xi5JNBpaWxy2tZhEm5A.ttf")), array("kind" => "webfonts#webfont", "family" => "Arbutus", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/arbutus/v5/Go_hurxoUsn5MnqNVQgodQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Arbutus Slab", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/arbutusslab/v4/6k3Yp6iS9l4jRIpynA8qMy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Architects Daughter", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/architectsdaughter/v6/RXTgOOQ9AAtaVOHxx0IUBMCy0EhZjHzu-y0e6uLf4Fg.ttf")), array("kind" => "webfonts#webfont", "family" => "Archivo Black", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/archivoblack/v4/WoAoVT7K3k7hHfxKbvB6B51XQG8isOYYJhPIYAyrESQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Archivo Narrow", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/archivonarrow/v5/M__Wu4PAmHf4YZvQM8tWsMLtdzs3iyjn_YuT226ZsLU.ttf", "regular" => "http://fonts.gstatic.com/s/archivonarrow/v5/DsLzC9scoPnrGiwYYMQXppTvAuddT2xDMbdz0mdLyZY.ttf", "italic" => "http://fonts.gstatic.com/s/archivonarrow/v5/vqsrtPCpTU3tJlKfuXP5zUpmlyBQEFfdE6dERLXdQGQ.ttf", "700italic" => "http://fonts.gstatic.com/s/archivonarrow/v5/wG6O733y5zHl4EKCOh8rSTg5KB8MNJ4uPAETq9naQO8.ttf")), array("kind" => "webfonts#webfont", "family" => "Arimo", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "hebrew", "greek-ext", "vietnamese"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/arimo/v9/ZItXugREyvV9LnbY_gxAmw.ttf", "regular" => "http://fonts.gstatic.com/s/arimo/v9/Gpeo80g-5ji2CcyXWnzh7g.ttf", "italic" => "http://fonts.gstatic.com/s/arimo/v9/_OdGbnX2-qQ96C4OjhyuPw.ttf", "700italic" => "http://fonts.gstatic.com/s/arimo/v9/__nOLWqmeXdhfr0g7GaFePesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Arizonia", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/arizonia/v6/yzJqkHZqryZBTM7RKYV9Wg.ttf")), array("kind" => "webfonts#webfont", "family" => "Armata", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/armata/v6/1H8FwGgIRrbYtxSfXhOHlQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Artifika", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/artifika/v6/Ekfp4H4QG7D-WsABDOyj8g.ttf")), array("kind" => "webfonts#webfont", "family" => "Arvo", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/arvo/v9/OB3FDST7U38u3OjPK_vvRQ.ttf", "regular" => "http://fonts.gstatic.com/s/arvo/v9/vvWPwz-PlZEwjOOIKqoZzA.ttf", "italic" => "http://fonts.gstatic.com/s/arvo/v9/id5a4BCjbenl5Gkqonw_Rw.ttf", "700italic" => "http://fonts.gstatic.com/s/arvo/v9/Hvl2MuWoXLaCy2v6MD4Yvw.ttf")), array("kind" => "webfonts#webfont", "family" => "Arya", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-05-21", "files" => array("700" => "http://fonts.gstatic.com/s/arya/v1/N13tgOvG7VTXawiI-fJiQA.ttf", "regular" => "http://fonts.gstatic.com/s/arya/v1/xEVqtU3v8QLospHKpDaYEw.ttf")), array("kind" => "webfonts#webfont", "family" => "Asap", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/asap/v4/o5RUA7SsJ80M8oDFBnrDbg.ttf", "regular" => "http://fonts.gstatic.com/s/asap/v4/2lf-1MDR8tsTpEtvJmr2hA.ttf", "italic" => "http://fonts.gstatic.com/s/asap/v4/mwxNHf8QS8gNWCAMwkJNIg.ttf", "700italic" => "http://fonts.gstatic.com/s/asap/v4/_rZz9y2oXc09jT5T6BexLQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Asar", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("regular" => "http://fonts.gstatic.com/s/asar/v1/mSmn3H5CcMA84CZ586X7WQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Asset", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/asset/v6/hfPmqY-JzuR1lULlQf9iTg.ttf")), array("kind" => "webfonts#webfont", "family" => "Astloch", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/astloch/v6/aPkhM2tL-tz1jX6aX2rvo_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/astloch/v6/fmbitVmHYLQP7MGPuFgpag.ttf")), array("kind" => "webfonts#webfont", "family" => "Asul", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/asul/v5/uO8uNmxaq87-DdPmkEg5Gg.ttf", "regular" => "http://fonts.gstatic.com/s/asul/v5/9qpsNR_OOwyOYyo2N0IbBw.ttf")), array("kind" => "webfonts#webfont", "family" => "Atomic Age", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/atomicage/v7/WvBMe4FxANIKpo6Oi0mVJ_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Aubrey", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/aubrey/v8/zo9w8klO8bmOQIMajQ2aTA.ttf")), array("kind" => "webfonts#webfont", "family" => "Audiowide", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/audiowide/v4/yGcwRZB6VmoYhPUYT-mEow.ttf")), array("kind" => "webfonts#webfont", "family" => "Autour One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/autourone/v4/2xmQBcg7FN72jaQRFZPIDvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Average", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/average/v4/aHUibBqdDbVYl5FM48pxyQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Average Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/averagesans/v4/dnU3R-5A_43y5bIyLztPsS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Averia Gruesa Libre", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/averiagruesalibre/v4/10vbZTOoN6T8D-nvDzwRFyXcKHuZXlCN8VkWHpkUzKM.ttf")), array("kind" => "webfonts#webfont", "family" => "Averia Libre", "category" => "display", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/averialibre/v4/r6hGL8sSLm4dTzOPXgx5XacQoVhARpoaILP7amxE_8g.ttf", "700" => "http://fonts.gstatic.com/s/averialibre/v4/r6hGL8sSLm4dTzOPXgx5XUD2ttfZwueP-QU272T9-k4.ttf", "300italic" => "http://fonts.gstatic.com/s/averialibre/v4/I6wAYuAvOgT7el2ePj2nkina0FLWfcB-J_SAYmcAXaI.ttf", "regular" => "http://fonts.gstatic.com/s/averialibre/v4/rYVgHZZQICWnhjguGsBspC3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/averialibre/v4/1etzuoNxVHR8F533EkD1WfMZXuCXbOrAvx5R0IT5Oyo.ttf", "700italic" => "http://fonts.gstatic.com/s/averialibre/v4/I6wAYuAvOgT7el2ePj2nkvAs9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Averia Sans Libre", "category" => "display", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/averiasanslibre/v4/_9-jTfQjaBsWAF_yp5z-V4CP_KG_g80s1KXiBtJHoNc.ttf", "700" => "http://fonts.gstatic.com/s/averiasanslibre/v4/_9-jTfQjaBsWAF_yp5z-V8QwVOrz1y5GihpZmtKLhlI.ttf", "300italic" => "http://fonts.gstatic.com/s/averiasanslibre/v4/o7BEIK-fG3Ykc5Rzteh88YuyGu4JqttndUh4gRKxic0.ttf", "regular" => "http://fonts.gstatic.com/s/averiasanslibre/v4/yRJpjT39KxACO9F31mj_LqV8_KRn4epKAjTFK1s1fsg.ttf", "italic" => "http://fonts.gstatic.com/s/averiasanslibre/v4/COEzR_NPBSUOl3pFwPbPoCZU2HnUZT1xVKaIrHDioao.ttf", "700italic" => "http://fonts.gstatic.com/s/averiasanslibre/v4/o7BEIK-fG3Ykc5Rzteh88bXy1DXgmJcVtKjM5UWamMs.ttf")), array("kind" => "webfonts#webfont", "family" => "Averia Serif Libre", "category" => "display", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/yvITAdr5D1nlsdFswJAb8SmC4gFJ2PHmfdVKEd_5S9M.ttf", "700" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/yvITAdr5D1nlsdFswJAb8Q50KV5TaOVolur4zV2iZsg.ttf", "300italic" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/YOLFXyye4sZt6AZk1QybCG2okl0bU63CauowU4iApig.ttf", "regular" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/fdtF30xa_Erw0zAzOoG4BZqY66i8AUyI16fGqw0iAew.ttf", "italic" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/o9qhvK9iT5iDWfyhQUe-6Ru_b0bTq5iipbJ9hhgHJ6U.ttf", "700italic" => "http://fonts.gstatic.com/s/averiaseriflibre/v5/YOLFXyye4sZt6AZk1QybCNxohRXP4tNDqG3X4Hqn21k.ttf")), array("kind" => "webfonts#webfont", "family" => "Bad Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "cyrillic"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/badscript/v5/cRyUs0nJ2eMQFHwBsZNRXfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Balthazar", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/balthazar/v5/WgbaSIs6dJAGXJ0qbz2xlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Bangers", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bangers/v8/WAffdge5w99Xif-DLeqmcA.ttf")), array("kind" => "webfonts#webfont", "family" => "Basic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/basic/v6/hNII2mS5Dxw5C0u_m3mXgA.ttf")), array("kind" => "webfonts#webfont", "family" => "Battambang", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("700" => "http://fonts.gstatic.com/s/battambang/v9/dezbRtMzfzAA99DmrCYRMgJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/battambang/v9/MzrUfQLefYum5vVGM3EZVPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Baumans", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/baumans/v5/o0bFdPW1H5kd5saqqOcoVg.ttf")), array("kind" => "webfonts#webfont", "family" => "Bayon", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/bayon/v8/yTubusjTnpNRZwA4_50iVw.ttf")), array("kind" => "webfonts#webfont", "family" => "Belgrano", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/belgrano/v6/iq8DUa2s7g6WRCeMiFrmtQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Belleza", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/belleza/v4/wchA3BWJlVqvIcSeNZyXew.ttf")), array("kind" => "webfonts#webfont", "family" => "BenchNine", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/benchnine/v4/ah9xtUy9wLQ3qnWa2p-piS3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/benchnine/v4/qZpi6ZVZg3L2RL_xoBLxWS3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/benchnine/v4/h3OAlYqU3aOeNkuXgH2Q2w.ttf")), array("kind" => "webfonts#webfont", "family" => "Bentham", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bentham/v6/5-Mo8Fe7yg5tzV0GlQIuzQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Berkshire Swash", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/berkshireswash/v4/4RZJjVRPjYnC2939hKCAimKfbtsIjCZP_edQljX9gR0.ttf")), array("kind" => "webfonts#webfont", "family" => "Bevan", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bevan/v7/Rtg3zDsCeQiaJ_Qno22OJA.ttf")), array("kind" => "webfonts#webfont", "family" => "Bigelow Rules", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bigelowrules/v4/FEJCPLwo07FS-6SK6Al50X8f0n03UdmQgF_CLvNR2vg.ttf")), array("kind" => "webfonts#webfont", "family" => "Bigshot One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bigshotone/v6/wSyZjBNTWDQHnvWE2jt6j6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Bilbo", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bilbo/v6/-ty-lPs5H7OIucWbnpFrkA.ttf")), array("kind" => "webfonts#webfont", "family" => "Bilbo Swash Caps", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bilboswashcaps/v7/UB_-crLvhx-PwGKW1oosDmYeFSdnSpRYv5h9gpdlD1g.ttf")), array("kind" => "webfonts#webfont", "family" => "Biryani", "category" => "sans-serif", "variants" => array("200", "300", "regular", "600", "700", "800", "900"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-04-22", "files" => array("200" => "http://fonts.gstatic.com/s/biryani/v1/Xx38YzyTFF8n6mRS1Yd88vesZW2xOQ-xsNqO47m55DA.ttf", "300" => "http://fonts.gstatic.com/s/biryani/v1/u-bneRbizmFMd0VQp5Ze6vesZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/biryani/v1/1EdcPCVxBR2txgjrza6_YPesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/biryani/v1/qN2MTZ0j1sKSCtfXLB2dR_esZW2xOQ-xsNqO47m55DA.ttf", "800" => "http://fonts.gstatic.com/s/biryani/v1/DJyziS7FEy441v22InYdevesZW2xOQ-xsNqO47m55DA.ttf", "900" => "http://fonts.gstatic.com/s/biryani/v1/trcLkrIut0lM_PPSyQfAMPesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/biryani/v1/W7bfR8-IY76Xz0QoB8L2xw.ttf")), array("kind" => "webfonts#webfont", "family" => "Bitter", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/bitter/v7/4dUtr_4BvHuoRU35suyOAg.ttf", "regular" => "http://fonts.gstatic.com/s/bitter/v7/w_BNdJvVZDRmqy5aSfB2kQ.ttf", "italic" => "http://fonts.gstatic.com/s/bitter/v7/TC0FZEVzXQIGgzmRfKPZbA.ttf")), array("kind" => "webfonts#webfont", "family" => "Black Ops One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/blackopsone/v7/2XW-DmDsGbDLE372KrMW1Yjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Bokor", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/bokor/v8/uAKdo0A85WW23Gs6mcbw7A.ttf")), array("kind" => "webfonts#webfont", "family" => "Bonbon", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bonbon/v7/IW3u1yzG1knyW5oz0s9_6Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Boogaloo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/boogaloo/v6/4Wu1tvFMoB80fSu8qLgQfQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Bowlby One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bowlbyone/v7/eKpHjHfjoxM2bX36YNucefesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Bowlby One SC", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bowlbyonesc/v8/8ZkeXftTuzKBtmxOYXoRedDkZCMxWJecxjvKm2f8MJw.ttf")), array("kind" => "webfonts#webfont", "family" => "Brawler", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/brawler/v6/3gfSw6imxQnQxweVITqUrg.ttf")), array("kind" => "webfonts#webfont", "family" => "Bree Serif", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/breeserif/v5/5h9crBVIrvZqgf34FHcnEfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Bubblegum Sans", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bubblegumsans/v5/Y9iTUUNz6lbl6TrvV4iwsytnKWgpfO2iSkLzTz-AABg.ttf")), array("kind" => "webfonts#webfont", "family" => "Bubbler One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/bubblerone/v4/e8S0qevkZAFaBybtt_SU4qCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Buda", "category" => "display", "variants" => array("300"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/buda/v6/hLtAmNUmEMJH2yx7NGUjnA.ttf")), array("kind" => "webfonts#webfont", "family" => "Buenard", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/buenard/v7/yUlGE115dGr7O9w9FlP3UvesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/buenard/v7/NSpMPGKAUgrLrlstYVvIXQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Butcherman", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/butcherman/v7/bxiJmD567sPBVpJsT0XR0vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Butterfly Kids", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/butterflykids/v4/J4NTF5M25htqeTffYImtlUZaDk62iwTBnbnvwSjZciA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cabin", "category" => "sans-serif", "variants" => array("regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/cabin/v8/HgsCQ-k3_Z_uQ86aFolNBg.ttf", "600" => "http://fonts.gstatic.com/s/cabin/v8/eUDAvKhBtmTCkeVBsFk34A.ttf", "700" => "http://fonts.gstatic.com/s/cabin/v8/4EKhProuY1hq_WCAomq9Dg.ttf", "regular" => "http://fonts.gstatic.com/s/cabin/v8/XeuAFYo2xAPHxZGBbQtHhA.ttf", "italic" => "http://fonts.gstatic.com/s/cabin/v8/0tJ9k3DI5xC4GBgs1E_Jxw.ttf", "500italic" => "http://fonts.gstatic.com/s/cabin/v8/50sjhrGE0njyO-7mGDhGP_esZW2xOQ-xsNqO47m55DA.ttf", "600italic" => "http://fonts.gstatic.com/s/cabin/v8/sFQpQDBd3G2om0Nl5dD2CvesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/cabin/v8/K83QKi8MOKLEqj6bgZ7LrfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cabin Condensed", "category" => "sans-serif", "variants" => array("regular", "500", "600", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/cabincondensed/v7/Ez4zJbsGr2BgXcNUWBVgEARL_-ABKXdjsJSPT0lc2Bk.ttf", "600" => "http://fonts.gstatic.com/s/cabincondensed/v7/Ez4zJbsGr2BgXcNUWBVgELS5sSASxc8z4EQTQj7DCAI.ttf", "700" => "http://fonts.gstatic.com/s/cabincondensed/v7/Ez4zJbsGr2BgXcNUWBVgEMAWgzcA047xWLixhLCofl8.ttf", "regular" => "http://fonts.gstatic.com/s/cabincondensed/v7/B0txb0blf2N29WdYPJjMSiQPsWWoiv__AzYJ9Zzn9II.ttf")), array("kind" => "webfonts#webfont", "family" => "Cabin Sketch", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cabinsketch/v8/ki3SSN5HMOO0-IOLOj069ED2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/cabinsketch/v8/d9fijO34zQajqQvl3YHRCS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Caesar Dressing", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/caesardressing/v5/2T_WzBgE2Xz3FsyJMq34T9gR43u4FvCuJwIfF5Zxl6Y.ttf")), array("kind" => "webfonts#webfont", "family" => "Cagliostro", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cagliostro/v5/i85oXbtdSatNEzss99bpj_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Calligraffitti", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/calligraffitti/v7/vLVN2Y-z65rVu1R7lWdvyDXz_orj3gX0_NzfmYulrko.ttf")), array("kind" => "webfonts#webfont", "family" => "Cambay", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cambay/v1/jw9niBxa04eEhnSwTWCEgw.ttf", "regular" => "http://fonts.gstatic.com/s/cambay/v1/etU9Bab4VuhzS-OKsb1VXg.ttf", "italic" => "http://fonts.gstatic.com/s/cambay/v1/ZEz9yNqpEOgejaw1rBhugQ.ttf", "700italic" => "http://fonts.gstatic.com/s/cambay/v1/j-5v_uUr0NXTumWN0siOiaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Cambo", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cambo/v5/PnwpRuTdkYCf8qk4ajmNRA.ttf")), array("kind" => "webfonts#webfont", "family" => "Candal", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/candal/v6/x44dDW28zK7GR1gGDBmj9g.ttf")), array("kind" => "webfonts#webfont", "family" => "Cantarell", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cantarell/v6/Yir4ZDsCn4g1kWopdg-ehC3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/cantarell/v6/p5ydP_uWQ5lsFzcP_XVMEw.ttf", "italic" => "http://fonts.gstatic.com/s/cantarell/v6/DTCLtOSqP-7dgM-V_xKUjqCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/cantarell/v6/weehrwMeZBXb0QyrWnRwFXe1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Cantata One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-03-22", "files" => array("regular" => "http://fonts.gstatic.com/s/cantataone/v6/-a5FDvnBqaBMDaGgZYnEfqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Cantora One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cantoraone/v5/oI-DS62RbHI8ZREjp73ehqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Capriola", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/capriola/v4/JxXPlkdzWwF9Cwelbvi9jA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cardo", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("greek", "latin", "latin-ext", "greek-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cardo/v8/lQN30weILimrKvp8rZhF1w.ttf", "regular" => "http://fonts.gstatic.com/s/cardo/v8/jbkF2_R0FKUEZTq5dwSknQ.ttf", "italic" => "http://fonts.gstatic.com/s/cardo/v8/pcv4Np9tUkq0YREYUcEEJQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Carme", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/carme/v7/08E0NP1eRBEyFRUadmMfgA.ttf")), array("kind" => "webfonts#webfont", "family" => "Carrois Gothic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/carroisgothic/v4/GCgb7bssGpwp7V5ynxmWy2x3d0cwUleGuRTmCYfCUaM.ttf")), array("kind" => "webfonts#webfont", "family" => "Carrois Gothic SC", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/carroisgothicsc/v4/bVp4nhwFIXU-r3LqUR8DSJTdPW1ioadGi2uRiKgJVCY.ttf")), array("kind" => "webfonts#webfont", "family" => "Carter One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/carterone/v8/5X_LFvdbcB7OBG7hBgZ7fPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Catamaran", "category" => "sans-serif", "variants" => array("100", "200", "300", "regular", "500", "600", "700", "800", "900"), "subsets" => array("latin", "tamil", "latin-ext"), "version" => "v1", "lastModified" => "2015-08-06", "files" => array("100" => "http://fonts.gstatic.com/s/catamaran/v1/ilWHBiy0krUPdlmYxDuqC6CWcynf_cDxXwCLxiixG1c.ttf", "200" => "http://fonts.gstatic.com/s/catamaran/v1/hFc-HKSsGk6M-psujei1MC3USBnSvpkopQaUR-2r7iU.ttf", "300" => "http://fonts.gstatic.com/s/catamaran/v1/Aaag4ccR7Oh_4eai-jbrYC3USBnSvpkopQaUR-2r7iU.ttf", "500" => "http://fonts.gstatic.com/s/catamaran/v1/83WSX3F86qsvj1Z4EI0tQi3USBnSvpkopQaUR-2r7iU.ttf", "600" => "http://fonts.gstatic.com/s/catamaran/v1/a9PlHHnuBWiGGk0TwuFKTi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/catamaran/v1/PpgVtUHUdnBZYNpnzGbScy3USBnSvpkopQaUR-2r7iU.ttf", "800" => "http://fonts.gstatic.com/s/catamaran/v1/6VjB_uSfn3DZ93IQv58CmC3USBnSvpkopQaUR-2r7iU.ttf", "900" => "http://fonts.gstatic.com/s/catamaran/v1/5ys9TqpQc9Q6gHqbSox6py3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/catamaran/v1/MdNkM-DU8f6R-25Nxpr_XA.ttf")), array("kind" => "webfonts#webfont", "family" => "Caudex", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "latin-ext", "greek-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/caudex/v6/PetCI4GyQ5Q3LiOzUu_mMg.ttf", "regular" => "http://fonts.gstatic.com/s/caudex/v6/PWEexiHLDmQbn2b1OPZWfg.ttf", "italic" => "http://fonts.gstatic.com/s/caudex/v6/XjMZF6XCisvV3qapD4oJdw.ttf", "700italic" => "http://fonts.gstatic.com/s/caudex/v6/yT8YeHLjaJvQXlUEYOA8gqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Caveat", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v1", "lastModified" => "2015-10-05", "files" => array("700" => "http://fonts.gstatic.com/s/caveat/v1/LkaFtQENGJry2eUMwGRTeA.ttf", "regular" => "http://fonts.gstatic.com/s/caveat/v1/8I23b6N-6rRVbh-C_Vx3yA.ttf")), array("kind" => "webfonts#webfont", "family" => "Caveat Brush", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v1", "lastModified" => "2015-10-05", "files" => array("regular" => "http://fonts.gstatic.com/s/caveatbrush/v1/_d7bgsk3hfC4DXnUEeYKsy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Cedarville Cursive", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cedarvillecursive/v7/cuCe6HrkcqrWTWTUE7dw-41zwq9-z_Lf44CzRAA0d0Y.ttf")), array("kind" => "webfonts#webfont", "family" => "Ceviche One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/cevicheone/v7/WOaXIMBD4VYMy39MsobJhKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Changa One", "category" => "display", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/changaone/v9/dr4qjce4W3kxFrZRkVD87fesZW2xOQ-xsNqO47m55DA.ttf", "italic" => "http://fonts.gstatic.com/s/changaone/v9/wJVQlUs1lAZel-WdTo2U9y3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Chango", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chango/v5/3W3AeMMtRTH08t5qLOjBmg.ttf")), array("kind" => "webfonts#webfont", "family" => "Chau Philomene One", "category" => "sans-serif", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chauphilomeneone/v4/KKc5egCL-a2fFVoOA2x6tBFi5dxgSTdxqnMJgWkBJcg.ttf", "italic" => "http://fonts.gstatic.com/s/chauphilomeneone/v4/eJj1PY_iN4KiIuyOvtMHJP6uyLkxyiC4WcYA74sfquE.ttf")), array("kind" => "webfonts#webfont", "family" => "Chela One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/chelaone/v5/h5O0dEnpnIq6jQnWxZybrA.ttf")), array("kind" => "webfonts#webfont", "family" => "Chelsea Market", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chelseamarket/v4/qSdzwh2A4BbNemy78sJLfAAI1i8fIftCBXsBF2v9UMI.ttf")), array("kind" => "webfonts#webfont", "family" => "Chenla", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/chenla/v9/aLNpdAUDq2MZbWz2U1a16g.ttf")), array("kind" => "webfonts#webfont", "family" => "Cherry Cream Soda", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cherrycreamsoda/v6/OrD-AUnFcZeeKa6F_c0_WxOiHiuAPYA9ry3O1RG2XIU.ttf")), array("kind" => "webfonts#webfont", "family" => "Cherry Swash", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cherryswash/v4/-CfyMyQqfucZPQNB0nvYyED2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/cherryswash/v4/HqOk7C7J1TZ5i3L-ejF0vi3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Chewy", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chewy/v7/hcDN5cvQdIu6Bx4mg_TSyw.ttf")), array("kind" => "webfonts#webfont", "family" => "Chicle", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/chicle/v5/xg4q57Ut9ZmyFwLp51JLgg.ttf")), array("kind" => "webfonts#webfont", "family" => "Chivo", "category" => "sans-serif", "variants" => array("regular", "italic", "900", "900italic"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/chivo/v7/JAdkiWd46QCW4vOsj3dzTA.ttf", "regular" => "http://fonts.gstatic.com/s/chivo/v7/L88PEuzS9eRfHRZhAPhZyw.ttf", "italic" => "http://fonts.gstatic.com/s/chivo/v7/Oe3-Q-a2kBzPnhHck_baMg.ttf", "900italic" => "http://fonts.gstatic.com/s/chivo/v7/LoszYnE86q2wJEOjCigBQ_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Chonburi", "category" => "display", "variants" => array("regular"), "subsets" => array("thai", "latin", "latin-ext", "vietnamese"), "version" => "v1", "lastModified" => "2015-08-06", "files" => array("regular" => "http://fonts.gstatic.com/s/chonburi/v1/jd9PfbW0x_8Myt_XeUxvSQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Cinzel", "category" => "serif", "variants" => array("regular", "700", "900"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cinzel/v4/nYcFQ6_3pf_6YDrOFjBR8Q.ttf", "900" => "http://fonts.gstatic.com/s/cinzel/v4/FTBj72ozM2cEOSxiVsRb3A.ttf", "regular" => "http://fonts.gstatic.com/s/cinzel/v4/GF7dy_Nc-a6EaHYSyGd-EA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cinzel Decorative", "category" => "display", "variants" => array("regular", "700", "900"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cinzeldecorative/v4/pXhIVnhFtL_B9Vb1wq2F95-YYVDmZkJErg0zgx9XuZI.ttf", "900" => "http://fonts.gstatic.com/s/cinzeldecorative/v4/pXhIVnhFtL_B9Vb1wq2F97Khqbv0zQZa0g-9HOXAalU.ttf", "regular" => "http://fonts.gstatic.com/s/cinzeldecorative/v4/fmgK7oaJJIXAkhd9798yQgT5USbJx2F82lQbogPy2bY.ttf")), array("kind" => "webfonts#webfont", "family" => "Clicker Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/clickerscript/v4/Zupmk8XwADjufGxWB9KThBnpV0hQCek3EmWnCPrvGRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Coda", "category" => "display", "variants" => array("regular", "800"), "subsets" => array("latin", "latin-ext"), "version" => "v11", "lastModified" => "2016-02-23", "files" => array("800" => "http://fonts.gstatic.com/s/coda/v11/6ZIw0sbALY0KTMWllZB3hQ.ttf", "regular" => "http://fonts.gstatic.com/s/coda/v11/yHDvulhg-P-p2KRgRrnUYw.ttf")), array("kind" => "webfonts#webfont", "family" => "Coda Caption", "category" => "sans-serif", "variants" => array("800"), "subsets" => array("latin", "latin-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("800" => "http://fonts.gstatic.com/s/codacaption/v9/YDl6urZh-DUFhiMBTgAnz_qsay_1ZmRGmC8pVRdIfAg.ttf")), array("kind" => "webfonts#webfont", "family" => "Codystar", "category" => "display", "variants" => array("300", "regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/codystar/v4/EVaUzfJkcb8Zqx9kzQLXqqCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/codystar/v4/EN-CPFKYowSI7SuR7-0cZA.ttf")), array("kind" => "webfonts#webfont", "family" => "Combo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/combo/v5/Nab98KjR3JZSSPGtzLyXNw.ttf")), array("kind" => "webfonts#webfont", "family" => "Comfortaa", "category" => "display", "variants" => array("300", "regular", "700"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/comfortaa/v7/r_tUZNl0G8xCoOmp_JkSCi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/comfortaa/v7/fND5XPYKrF2tQDwwfWZJIy3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/comfortaa/v7/lZx6C1VViPgSOhCBUP7hXA.ttf")), array("kind" => "webfonts#webfont", "family" => "Coming Soon", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/comingsoon/v6/Yz2z3IAe2HSQAOWsSG8COKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Concert One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/concertone/v7/N5IWCIGhUNdPZn_efTxKN6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Condiment", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/condiment/v4/CstmdiPpgFSV0FUNL5LrJA.ttf")), array("kind" => "webfonts#webfont", "family" => "Content", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("700" => "http://fonts.gstatic.com/s/content/v8/7PivP8Zvs2qn6F6aNbSQe_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/content/v8/l8qaLjygvOkDEU2G6-cjfQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Contrail One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/contrailone/v6/b41KxjgiyqX-hkggANDU6C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Convergence", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/convergence/v5/eykrGz1NN_YpQmkAZjW-qKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Cookie", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cookie/v7/HxeUC62y_YdDbiFlze357A.ttf")), array("kind" => "webfonts#webfont", "family" => "Copse", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/copse/v6/wikLrtPGjZDvZ5w2i5HLWg.ttf")), array("kind" => "webfonts#webfont", "family" => "Corben", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/corben/v9/lirJaFSQWdGQuV--fksg5g.ttf", "regular" => "http://fonts.gstatic.com/s/corben/v9/tTysMZkt-j8Y5yhkgsoajQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Courgette", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/courgette/v4/2YO0EYtyE9HUPLZprahpZA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cousine", "category" => "monospace", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "hebrew", "greek-ext", "vietnamese"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cousine/v10/FXEOnNUcCzhdtoBxiq-lovesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/cousine/v10/GYX4bPXObJNJo63QJEUnLg.ttf", "italic" => "http://fonts.gstatic.com/s/cousine/v10/1WtIuajLoo8vjVwsrZ3eOg.ttf", "700italic" => "http://fonts.gstatic.com/s/cousine/v10/y_AZ5Sz-FwL1lux2xLSTZS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Coustard", "category" => "serif", "variants" => array("regular", "900"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/coustard/v6/W02OCWO6OfMUHz6aVyegQ6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/coustard/v6/iO2Rs5PmqAEAXoU3SkMVBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Covered By Your Grace", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/coveredbyyourgrace/v6/6ozZp4BPlrbDRWPe3EBGA6CVUMdvnk-GcAiZQrX9Gek.ttf")), array("kind" => "webfonts#webfont", "family" => "Crafty Girls", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/craftygirls/v5/0Sv8UWFFdhQmesHL32H8oy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Creepster", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/creepster/v5/0vdr5kWJ6aJlOg5JvxnXzQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Crete Round", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/creteround/v5/B8EwN421qqOCCT8vOH4wJ6CWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/creteround/v5/5xAt7XK2vkUdjhGtt98unUeOrDcLawS7-ssYqLr2Xp4.ttf")), array("kind" => "webfonts#webfont", "family" => "Crimson Text", "category" => "serif", "variants" => array("regular", "italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("600" => "http://fonts.gstatic.com/s/crimsontext/v6/rEy5tGc5HdXy56Xvd4f3I2v8CylhIUtwUiYO7Z2wXbE.ttf", "700" => "http://fonts.gstatic.com/s/crimsontext/v6/rEy5tGc5HdXy56Xvd4f3I0D2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/crimsontext/v6/3IFMwfRa07i-auYR-B-zNS3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/crimsontext/v6/a5QZnvmn5amyNI-t2BMkWPMZXuCXbOrAvx5R0IT5Oyo.ttf", "600italic" => "http://fonts.gstatic.com/s/crimsontext/v6/4j4TR-EfnvCt43InYpUNDIR-5-urNOGAobhAyctHvW8.ttf", "700italic" => "http://fonts.gstatic.com/s/crimsontext/v6/4j4TR-EfnvCt43InYpUNDPAs9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Croissant One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/croissantone/v4/mPjsOObnC77fp1cvZlOfIYjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Crushed", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/crushed/v6/aHwSejs3Kt0Lg95u7j32jA.ttf")), array("kind" => "webfonts#webfont", "family" => "Cuprum", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/cuprum/v7/6tl3_FkDeXSD72oEHuJh4w.ttf", "regular" => "http://fonts.gstatic.com/s/cuprum/v7/JgXs0F_UiaEdAS74msmFNg.ttf", "italic" => "http://fonts.gstatic.com/s/cuprum/v7/cLEz0KV6OxInnktSzpk58g.ttf", "700italic" => "http://fonts.gstatic.com/s/cuprum/v7/bnkXaBfoYvaJ75axRPSwVKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Cutive", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cutive/v8/G2bW-ImyOCwKxBkLyz39YQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Cutive Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/cutivemono/v4/ncWQtFVKcSs8OW798v30k6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Damion", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/damion/v6/13XtECwKxhD_VrOqXL4SiA.ttf")), array("kind" => "webfonts#webfont", "family" => "Dancing Script", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/dancingscript/v6/KGBfwabt0ZRLA5W1ywjowb_dAmXiKjTPGCuO6G2MbfA.ttf", "regular" => "http://fonts.gstatic.com/s/dancingscript/v6/DK0eTGXiZjN6yA8zAEyM2RnpV0hQCek3EmWnCPrvGRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Dangrek", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/dangrek/v8/LOaFhBT-EHNxZjV8DAW_ew.ttf")), array("kind" => "webfonts#webfont", "family" => "Dawning of a New Day", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dawningofanewday/v7/JiDsRhiKZt8uz3NJ5xA06gXLnohmOYWQZqo_sW8GLTk.ttf")), array("kind" => "webfonts#webfont", "family" => "Days One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/daysone/v6/kzwZjNhc1iabMsrc_hKBIA.ttf")), array("kind" => "webfonts#webfont", "family" => "Dekko", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v2", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/dekko/v2/AKtgABKC1rUxgIgS-bpojw.ttf")), array("kind" => "webfonts#webfont", "family" => "Delius", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/delius/v6/TQA163qafki2-gV-B6F_ag.ttf")), array("kind" => "webfonts#webfont", "family" => "Delius Swash Caps", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/deliusswashcaps/v8/uXyrEUnoWApxIOICunRq7yIrxb5zDVgU2N3VzXm7zq4.ttf")), array("kind" => "webfonts#webfont", "family" => "Delius Unicase", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/deliusunicase/v9/7FTMTITcb4dxUp99FAdTqNy5weKXdcrx-wE0cgECMq8.ttf", "regular" => "http://fonts.gstatic.com/s/deliusunicase/v9/b2sKujV3Q48RV2PQ0k1vqu6rPKfVZo7L2bERcf0BDns.ttf")), array("kind" => "webfonts#webfont", "family" => "Della Respira", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dellarespira/v4/F4E6Lo_IZ6L9AJCcbqtDVeDcg5akpSnIcsPhLOFv7l8.ttf")), array("kind" => "webfonts#webfont", "family" => "Denk One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/denkone/v4/TdXOeA4eA_hEx4W8Sh9wPw.ttf")), array("kind" => "webfonts#webfont", "family" => "Devonshire", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/devonshire/v5/I3ct_2t12SYizP8ZC-KFi_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Dhurjati", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dhurjati/v4/uV6jO5e2iFMbGB0z79Cy5g.ttf")), array("kind" => "webfonts#webfont", "family" => "Didact Gothic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/didactgothic/v7/v8_72sD3DYMKyM0dn3LtWotBLojGU5Qdl8-5NL4v70w.ttf")), array("kind" => "webfonts#webfont", "family" => "Diplomata", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-03-23", "files" => array("regular" => "http://fonts.gstatic.com/s/diplomata/v8/u-ByBiKgN6rTMA36H3kcKg.ttf")), array("kind" => "webfonts#webfont", "family" => "Diplomata SC", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/diplomatasc/v5/JdVwAwfE1a_pahXjk5qpNi3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Domine", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/domine/v4/phBcG1ZbQFxUIt18hPVxnw.ttf", "regular" => "http://fonts.gstatic.com/s/domine/v4/wfVIgamVFjMNQAEWurCiHA.ttf")), array("kind" => "webfonts#webfont", "family" => "Donegal One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/donegalone/v4/6kN4-fDxz7T9s5U61HwfF6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Doppio One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/doppioone/v4/WHZ3HJQotpk_4aSMNBo_t_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Dorsa", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dorsa/v7/wCc3cUe6XrmG2LQE6GlIrw.ttf")), array("kind" => "webfonts#webfont", "family" => "Dosis", "category" => "sans-serif", "variants" => array("200", "300", "regular", "500", "600", "700", "800"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/dosis/v4/ztftab0r6hcd7AeurUGrSQ.ttf", "300" => "http://fonts.gstatic.com/s/dosis/v4/awIB6L0h5mb0plIKorXmuA.ttf", "500" => "http://fonts.gstatic.com/s/dosis/v4/ruEXDOFMxDPGnjCBKRqdAQ.ttf", "600" => "http://fonts.gstatic.com/s/dosis/v4/KNAswRNwm3tfONddYyidxg.ttf", "700" => "http://fonts.gstatic.com/s/dosis/v4/AEEAj0ONidK8NQQMBBlSig.ttf", "800" => "http://fonts.gstatic.com/s/dosis/v4/nlrKd8E69vvUU39XGsvR7Q.ttf", "regular" => "http://fonts.gstatic.com/s/dosis/v4/rJRlixu-w0JZ1MyhJpao_Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Dr Sugiyama", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/drsugiyama/v5/S5Yx3MIckgoyHhhS4C9Tv6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Droid Sans", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/droidsans/v6/EFpQQyG9GqCrobXxL-KRMQJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/droidsans/v6/rS9BT6-asrfjpkcV3DXf__esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Droid Sans Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/droidsansmono/v7/ns-m2xQYezAtqh7ai59hJcwD6PD0c3_abh9zHKQtbGU.ttf")), array("kind" => "webfonts#webfont", "family" => "Droid Serif", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/droidserif/v6/QQt14e8dY39u-eYBZmppwXe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/droidserif/v6/DgAtPy6rIVa2Zx3Xh9KaNaCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/droidserif/v6/cj2hUnSRBhwmSPr9kS5890eOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/droidserif/v6/c92rD_x0V1LslSFt3-QEps_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Duru Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/durusans/v9/xn7iYH8xwmSyTvEV_HOxTw.ttf")), array("kind" => "webfonts#webfont", "family" => "Dynalight", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/dynalight/v5/-CWsIe8OUDWTIHjSAh41kA.ttf")), array("kind" => "webfonts#webfont", "family" => "EB Garamond", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic", "vietnamese"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ebgaramond/v7/CDR0kuiFK7I1OZ2hSdR7G6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Eagle Lake", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/eaglelake/v4/ZKlYin7caemhx9eSg6RvPfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Eater", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/eater/v5/gm6f3OmYEdbs3lPQtUfBkA.ttf")), array("kind" => "webfonts#webfont", "family" => "Economica", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/economica/v4/UK4l2VEpwjv3gdcwbwXE9C3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/economica/v4/G4rJRujzZbq9Nxngu9l3hg.ttf", "italic" => "http://fonts.gstatic.com/s/economica/v4/p5O9AVeUqx_n35xQRinNYaCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/economica/v4/ac5dlUsedQ03RqGOeay-3Xe1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Eczar", "category" => "serif", "variants" => array("regular", "500", "600", "700", "800"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-24", "files" => array("500" => "http://fonts.gstatic.com/s/eczar/v4/Ooe4KaPp2594tF8TbMfdlQ.ttf", "600" => "http://fonts.gstatic.com/s/eczar/v4/IjQsWW0bmgkZ6lnN72cnTQ.ttf", "700" => "http://fonts.gstatic.com/s/eczar/v4/ELC8RVXfBMb3VuuHtMwBOA.ttf", "800" => "http://fonts.gstatic.com/s/eczar/v4/9Uyt6nTZLx_Qj5_WRah-iQ.ttf", "regular" => "http://fonts.gstatic.com/s/eczar/v4/uKZcAQ5JBBs1UbeXFRbBRg.ttf")), array("kind" => "webfonts#webfont", "family" => "Ek Mukta", "category" => "sans-serif", "variants" => array("200", "300", "regular", "500", "600", "700", "800"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/ekmukta/v7/crtkNHh5JcM3VJKG0E-B36CWcynf_cDxXwCLxiixG1c.ttf", "300" => "http://fonts.gstatic.com/s/ekmukta/v7/mpaAv7CIyk0VnZlqSneVxKCWcynf_cDxXwCLxiixG1c.ttf", "500" => "http://fonts.gstatic.com/s/ekmukta/v7/PZ1y2MstFczWvBlFSgzMyaCWcynf_cDxXwCLxiixG1c.ttf", "600" => "http://fonts.gstatic.com/s/ekmukta/v7/Z5Mfzeu6M3emakcJO2QeTqCWcynf_cDxXwCLxiixG1c.ttf", "700" => "http://fonts.gstatic.com/s/ekmukta/v7/4ugcOGR28Jn-oBIn0-qLYaCWcynf_cDxXwCLxiixG1c.ttf", "800" => "http://fonts.gstatic.com/s/ekmukta/v7/O68TH5OjEhVmn9_gIrcfS6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/ekmukta/v7/aFcjXdC5jyJ1p8w54wIIrg.ttf")), array("kind" => "webfonts#webfont", "family" => "Electrolize", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/electrolize/v5/yFVu5iokC-nt4B1Cyfxb9aCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Elsie", "category" => "display", "variants" => array("regular", "900"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/elsie/v5/1t-9f0N2NFYwAgN7oaISqg.ttf", "regular" => "http://fonts.gstatic.com/s/elsie/v5/gwspePauE45BJu6Ok1QrfQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Elsie Swash Caps", "category" => "display", "variants" => array("regular", "900"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/elsieswashcaps/v4/iZnus9qif0tR5pGaDv5zdKoKBWBozTtxi30NfZDOXXU.ttf", "regular" => "http://fonts.gstatic.com/s/elsieswashcaps/v4/9L3hIJMPCf6sxCltnxd6X2YeFSdnSpRYv5h9gpdlD1g.ttf")), array("kind" => "webfonts#webfont", "family" => "Emblema One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/emblemaone/v5/7IlBUjBWPIiw7cr_O2IfSaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Emilys Candy", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/emilyscandy/v4/PofLVm6v1SwZGOzC8s-I3S3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Engagement", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/engagement/v5/4Uz0Jii7oVPcaFRYmbpU6vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Englebert", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/englebert/v4/sll38iOvOuarDTYBchlP3Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Enriqueta", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/enriqueta/v5/I27Pb-wEGH2ajLYP0QrtSC3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/enriqueta/v5/_p90TrIwR1SC-vDKtmrv6A.ttf")), array("kind" => "webfonts#webfont", "family" => "Erica One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/ericaone/v7/cIBnH2VAqQMIGYAcE4ufvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Esteban", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/esteban/v4/ESyhLgqDDyK5JcFPp2svDw.ttf")), array("kind" => "webfonts#webfont", "family" => "Euphoria Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/euphoriascript/v4/c4XB4Iijj_NvSsCF4I0O2MxLhO8OSNnfAp53LK1_iRs.ttf")), array("kind" => "webfonts#webfont", "family" => "Ewert", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ewert/v4/Em8hrzuzSbfHcTVqMjbAQg.ttf")), array("kind" => "webfonts#webfont", "family" => "Exo", "category" => "sans-serif", "variants" => array("100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/exo/v4/RI7A9uwjRmPbVp0n8e-Jvg.ttf", "200" => "http://fonts.gstatic.com/s/exo/v4/F8OfC_swrRRxpFt-tlXZQg.ttf", "300" => "http://fonts.gstatic.com/s/exo/v4/SBrN7TKUqgGUvfxqHqsnNw.ttf", "500" => "http://fonts.gstatic.com/s/exo/v4/jCg6DmGGXt_OVyp5ofQHPw.ttf", "600" => "http://fonts.gstatic.com/s/exo/v4/q_SG5kXUmOcIvFpgtdZnlw.ttf", "700" => "http://fonts.gstatic.com/s/exo/v4/3_jwsL4v9uHjl5Q37G57mw.ttf", "800" => "http://fonts.gstatic.com/s/exo/v4/yLPuxBuV0lzqibRJyooOJg.ttf", "900" => "http://fonts.gstatic.com/s/exo/v4/97d0nd6Yv4-SA_X92xAuZA.ttf", "100italic" => "http://fonts.gstatic.com/s/exo/v4/qtGyZZlWb2EEvby3ZPosxw.ttf", "200italic" => "http://fonts.gstatic.com/s/exo/v4/fr4HBfXHYiIngW2_bhlgRw.ttf", "300italic" => "http://fonts.gstatic.com/s/exo/v4/3gmiLjBegIfcDLISjTGA1g.ttf", "regular" => "http://fonts.gstatic.com/s/exo/v4/eUEzTFueNXRVhbt4PEB8kQ.ttf", "italic" => "http://fonts.gstatic.com/s/exo/v4/cfgolWisMSURhpQeVHl_NA.ttf", "500italic" => "http://fonts.gstatic.com/s/exo/v4/lo5eTdCNJZQVN08p8RnzAQ.ttf", "600italic" => "http://fonts.gstatic.com/s/exo/v4/0cExa8K_pxS2lTuMr68XUA.ttf", "700italic" => "http://fonts.gstatic.com/s/exo/v4/0me55yJIxd5vyQ9bF7SsiA.ttf", "800italic" => "http://fonts.gstatic.com/s/exo/v4/n3LejeKVj_8gtZq5fIgNYw.ttf", "900italic" => "http://fonts.gstatic.com/s/exo/v4/JHTkQVhzyLtkY13Ye95TJQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Exo 2", "category" => "sans-serif", "variants" => array("100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/exo2/v3/oVOtQy53isv97g4UhBUDqg.ttf", "200" => "http://fonts.gstatic.com/s/exo2/v3/qa-Ci2pBwJdCxciE1ErifQ.ttf", "300" => "http://fonts.gstatic.com/s/exo2/v3/nLUBdz_lHHoVIPor05Byhw.ttf", "500" => "http://fonts.gstatic.com/s/exo2/v3/oM0rzUuPqVJpW-VEIpuW5w.ttf", "600" => "http://fonts.gstatic.com/s/exo2/v3/YnSn3HsyvyI1feGSdRMYqA.ttf", "700" => "http://fonts.gstatic.com/s/exo2/v3/2DiK4XkdTckfTk6we73-bQ.ttf", "800" => "http://fonts.gstatic.com/s/exo2/v3/IVYl_7dJruOg8zKRpC8Hrw.ttf", "900" => "http://fonts.gstatic.com/s/exo2/v3/e8csG8Wnu87AF6uCndkFRQ.ttf", "100italic" => "http://fonts.gstatic.com/s/exo2/v3/LNYVgsJcaCxoKFHmd4AZcg.ttf", "200italic" => "http://fonts.gstatic.com/s/exo2/v3/DCrVxDVvS69n50O-5erZVvesZW2xOQ-xsNqO47m55DA.ttf", "300italic" => "http://fonts.gstatic.com/s/exo2/v3/iSy9VTeUTiqiurQg2ywtu_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/exo2/v3/Pf_kZuIH5c5WKVkQUaeSWQ.ttf", "italic" => "http://fonts.gstatic.com/s/exo2/v3/xxA5ZscX9sTU6U0lZJUlYA.ttf", "500italic" => "http://fonts.gstatic.com/s/exo2/v3/amzRVCB-gipwdihZZ2LtT_esZW2xOQ-xsNqO47m55DA.ttf", "600italic" => "http://fonts.gstatic.com/s/exo2/v3/Vmo58BiptGwfVFb0teU5gPesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/exo2/v3/Sdo-zW-4_--pDkTg6bYrY_esZW2xOQ-xsNqO47m55DA.ttf", "800italic" => "http://fonts.gstatic.com/s/exo2/v3/p0TA6KeOz1o4rySEbvUxI_esZW2xOQ-xsNqO47m55DA.ttf", "900italic" => "http://fonts.gstatic.com/s/exo2/v3/KPhsGCoT2-7Uj6pMlRscH_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Expletus Sans", "category" => "display", "variants" => array("regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/expletussans/v9/cl6rhMY77Ilk8lB_uYRRwAqQmZ7VjhwksfpNVG0pqGc.ttf", "600" => "http://fonts.gstatic.com/s/expletussans/v9/cl6rhMY77Ilk8lB_uYRRwCvj1tU7IJMS3CS9kCx2B3U.ttf", "700" => "http://fonts.gstatic.com/s/expletussans/v9/cl6rhMY77Ilk8lB_uYRRwFCbmAUID8LN-q3pJpOk3Ys.ttf", "regular" => "http://fonts.gstatic.com/s/expletussans/v9/gegTSDBDs5le3g6uxU1ZsX8f0n03UdmQgF_CLvNR2vg.ttf", "italic" => "http://fonts.gstatic.com/s/expletussans/v9/Y-erXmY0b6DU_i2Qu0hTJj4G9C9ttb0Oz5Cvf0qOitE.ttf", "500italic" => "http://fonts.gstatic.com/s/expletussans/v9/sRBNtc46w65uJE451UYmW87DCVO6wo6i5LKIyZDzK40.ttf", "600italic" => "http://fonts.gstatic.com/s/expletussans/v9/sRBNtc46w65uJE451UYmW8yKH23ZS6zCKOFHG0e_4JE.ttf", "700italic" => "http://fonts.gstatic.com/s/expletussans/v9/sRBNtc46w65uJE451UYmW5F66r9C4AnxxlBlGd7xY4g.ttf")), array("kind" => "webfonts#webfont", "family" => "Fanwood Text", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fanwoodtext/v6/hDNDHUlsSb8bgnEmDp4T_i3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/fanwoodtext/v6/0J3SBbkMZqBV-3iGxs5E9_MZXuCXbOrAvx5R0IT5Oyo.ttf")), array("kind" => "webfonts#webfont", "family" => "Fascinate", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fascinate/v5/ZE0637WWkBPKt1AmFaqD3Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Fascinate Inline", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fascinateinline/v6/lRguYfMfWArflkm5aOQ5QJmp8DTZ6iHear7UV05iykg.ttf")), array("kind" => "webfonts#webfont", "family" => "Faster One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fasterone/v6/YxTOW2sf56uxD1T7byP5K_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Fasthand", "category" => "serif", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v7", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/fasthand/v7/6XAagHH_KmpZL67wTvsETQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Fauna One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/faunaone/v4/8kL-wpAPofcAMELI_5NRnQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Federant", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/federant/v8/tddZFSiGvxICNOGra0i5aA.ttf")), array("kind" => "webfonts#webfont", "family" => "Federo", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/federo/v8/JPhe1S2tujeyaR79gXBLeQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Felipa", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/felipa/v4/SeyfyFZY7abAQXGrOIYnYg.ttf")), array("kind" => "webfonts#webfont", "family" => "Fenix", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fenix/v4/Ak8wR3VSlAN7VN_eMeJj7Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Finger Paint", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fingerpaint/v4/m_ZRbiY-aPb13R3DWPBGXy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Fira Mono", "category" => "monospace", "variants" => array("regular", "700"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v3", "lastModified" => "2015-04-06", "files" => array("700" => "http://fonts.gstatic.com/s/firamono/v3/l24Wph3FsyKAbJ8dfExTZy3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/firamono/v3/WQOm1D4RO-yvA9q9trJc8g.ttf")), array("kind" => "webfonts#webfont", "family" => "Fira Sans", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/firasans/v5/VTBnrK42EiOBncVyQXZ7jy3USBnSvpkopQaUR-2r7iU.ttf", "500" => "http://fonts.gstatic.com/s/firasans/v5/zM2u8V3CuPVwAAXFQcDi4C3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/firasans/v5/DugPdSljmOTocZOR2CItOi3USBnSvpkopQaUR-2r7iU.ttf", "300italic" => "http://fonts.gstatic.com/s/firasans/v5/6s0YCA9oCTF6hM60YM-qTS9-WlPSxbfiI49GsXo3q0g.ttf", "regular" => "http://fonts.gstatic.com/s/firasans/v5/nsT0isDy56OkSX99sFQbXw.ttf", "italic" => "http://fonts.gstatic.com/s/firasans/v5/cPT_2ddmoxsUuMtQqa8zGqCWcynf_cDxXwCLxiixG1c.ttf", "500italic" => "http://fonts.gstatic.com/s/firasans/v5/6s0YCA9oCTF6hM60YM-qTcCNfqCYlB_eIx7H1TVXe60.ttf", "700italic" => "http://fonts.gstatic.com/s/firasans/v5/6s0YCA9oCTF6hM60YM-qTXe1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Fjalla One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fjallaone/v4/3b7vWCfOZsU53vMa8LWsf_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Fjord One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fjordone/v5/R_YHK8au2uFPw5tNu5N7zw.ttf")), array("kind" => "webfonts#webfont", "family" => "Flamenco", "category" => "display", "variants" => array("300", "regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/flamenco/v6/x9iI5CogvuZVCGoRHwXuo6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/flamenco/v6/HC0ugfLLgt26I5_BWD1PZA.ttf")), array("kind" => "webfonts#webfont", "family" => "Flavors", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/flavors/v5/SPJi5QclATvon8ExcKGRvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Fondamento", "category" => "handwriting", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fondamento/v5/6LWXcjT1B7bnWluAOSNfMPesZW2xOQ-xsNqO47m55DA.ttf", "italic" => "http://fonts.gstatic.com/s/fondamento/v5/y6TmwhSbZ8rYq7OTFyo7OS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Fontdiner Swanky", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fontdinerswanky/v6/8_GxIO5ixMtn5P6COsF3TlBjMPLzPAFJwRBn-s1U7kA.ttf")), array("kind" => "webfonts#webfont", "family" => "Forum", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/forum/v7/MZUpsq1VfLrqv8eSDcbrrQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Francois One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/francoisone/v9/bYbkq2nU2TSx4SwFbz5sCC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Freckle Face", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/freckleface/v4/7-B8j9BPJgazdHIGqPNv8y3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Fredericka the Great", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/frederickathegreat/v5/7Es8Lxoku-e5eOZWpxw18nrnet6gXN1McwdQxS1dVrI.ttf")), array("kind" => "webfonts#webfont", "family" => "Fredoka One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fredokaone/v4/QKfwXi-z-KtJAlnO2ethYqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Freehand", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/freehand/v8/uEBQxvA0lnn_BrD6krlxMw.ttf")), array("kind" => "webfonts#webfont", "family" => "Fresca", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fresca/v5/2q7Qm9sCo1tWvVgSDVWNIw.ttf")), array("kind" => "webfonts#webfont", "family" => "Frijole", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/frijole/v5/L2MfZse-2gCascuD-nLhWg.ttf")), array("kind" => "webfonts#webfont", "family" => "Fruktur", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fruktur/v8/PnQvfEi1LssAvhJsCwH__w.ttf")), array("kind" => "webfonts#webfont", "family" => "Fugaz One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/fugazone/v6/5tteVDCwxsr8-5RuSiRWOw.ttf")), array("kind" => "webfonts#webfont", "family" => "GFS Didot", "category" => "serif", "variants" => array("regular"), "subsets" => array("greek"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gfsdidot/v6/jQKxZy2RU-h9tkPZcRVluA.ttf")), array("kind" => "webfonts#webfont", "family" => "GFS Neohellenic", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gfsneohellenic/v7/7HwjPQa7qNiOsnUce2h4448_BwCLZY3eDSV6kppAwI8.ttf", "regular" => "http://fonts.gstatic.com/s/gfsneohellenic/v7/B4xRqbn-tANVqVgamMsSDiayCZa0z7CpFzlkqoCHztc.ttf", "italic" => "http://fonts.gstatic.com/s/gfsneohellenic/v7/KnaWrO4awITAqigQIIYXKkCTdomiyJpIzPbEbIES3rU.ttf", "700italic" => "http://fonts.gstatic.com/s/gfsneohellenic/v7/FwWjoX6XqT-szJFyqsu_GYFF0fM4h-krcpQk7emtCpE.ttf")), array("kind" => "webfonts#webfont", "family" => "Gabriela", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gabriela/v4/B-2ZfbAO3HDrxqV6lR5tdA.ttf")), array("kind" => "webfonts#webfont", "family" => "Gafata", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gafata/v5/aTFqlki_3Dc3geo-FxHTvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Galdeano", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/galdeano/v6/ZKFMQI6HxEG1jOT0UGSZUg.ttf")), array("kind" => "webfonts#webfont", "family" => "Galindo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/galindo/v4/2lafAS_ZEfB33OJryhXDUg.ttf")), array("kind" => "webfonts#webfont", "family" => "Gentium Basic", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gentiumbasic/v8/2qL6yulgGf0wwgOp-UqGyLNuTeOOLg3nUymsEEGmdO0.ttf", "regular" => "http://fonts.gstatic.com/s/gentiumbasic/v8/KCktj43blvLkhOTolFn-MYtBLojGU5Qdl8-5NL4v70w.ttf", "italic" => "http://fonts.gstatic.com/s/gentiumbasic/v8/qoFz4NSMaYC2UmsMAG3lyTj3mvXnCeAk09uTtmkJGRc.ttf", "700italic" => "http://fonts.gstatic.com/s/gentiumbasic/v8/8N9-c_aQDJ8LbI1NGVMrwtswO1vWwP9exiF8s0wqW10.ttf")), array("kind" => "webfonts#webfont", "family" => "Gentium Book Basic", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gentiumbookbasic/v7/T2vUYmWzlqUtgLYdlemGnaWESMHIjnSjm9UUxYtEOko.ttf", "regular" => "http://fonts.gstatic.com/s/gentiumbookbasic/v7/IRFxB2matTxrjZt6a3FUnrWDjKAyldGEr6eEi2MBNeY.ttf", "italic" => "http://fonts.gstatic.com/s/gentiumbookbasic/v7/qHqW2lwKO8-uTfIkh8FsUfXfjMwrYnmPVsQth2IcAPY.ttf", "700italic" => "http://fonts.gstatic.com/s/gentiumbookbasic/v7/632u7TMIoFDWQYUaHFUp5PA2A9KyRZEkn4TZVuhsWRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Geo", "category" => "sans-serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/geo/v8/mJuJYk5Pww84B4uHAQ1XaA.ttf", "italic" => "http://fonts.gstatic.com/s/geo/v8/8_r1wToF7nPdDuX1qxel6Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Geostar", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/geostar/v6/A8WQbhQbpYx3GWWaShJ9GA.ttf")), array("kind" => "webfonts#webfont", "family" => "Geostar Fill", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/geostarfill/v6/Y5ovXPPOHYTfQzK2aM-hui3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Germania One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/germaniaone/v4/3_6AyUql_-FbDi1e68jHdC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Gidugu", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gidugu/v3/Ey6Eq3hrT6MM58iFItFcgw.ttf")), array("kind" => "webfonts#webfont", "family" => "Gilda Display", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gildadisplay/v4/8yAVUZLLZ3wb7dSsjix0CADHmap7fRWINAsw8-RaxNg.ttf")), array("kind" => "webfonts#webfont", "family" => "Give You Glory", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/giveyouglory/v6/DFEWZFgGmfseyIdGRJAxuBwwkpSPZdvjnMtysdqprfI.ttf")), array("kind" => "webfonts#webfont", "family" => "Glass Antiqua", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/glassantiqua/v4/0yLrXKplgdUDIMz5TnCHNODcg5akpSnIcsPhLOFv7l8.ttf")), array("kind" => "webfonts#webfont", "family" => "Glegoo", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/glegoo/v5/TlLolbauH0-0Aiz1LUH5og.ttf", "regular" => "http://fonts.gstatic.com/s/glegoo/v5/2tf-h3n2A_SNYXEO0C8bKw.ttf")), array("kind" => "webfonts#webfont", "family" => "Gloria Hallelujah", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gloriahallelujah/v8/CA1k7SlXcY5kvI81M_R28Q3RdPdyebSUyJECJouPsvA.ttf")), array("kind" => "webfonts#webfont", "family" => "Goblin One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/goblinone/v6/331XtzoXgpVEvNTVcBJ_C_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Gochi Hand", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gochihand/v7/KT1-WxgHsittJ34_20IfAPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Gorditas", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gorditas/v4/6-XCeknmxaon8AUqVkMnHaCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/gorditas/v4/uMgZhXUyH6qNGF3QsjQT5Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Goudy Bookletter 1911", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/goudybookletter1911/v6/l5lwlGTN3pEY5Bf-rQEuIIjNDsyURsIKu4GSfvSE4mA.ttf")), array("kind" => "webfonts#webfont", "family" => "Graduate", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/graduate/v4/JpAmYLHqcIh9_Ff35HHwiA.ttf")), array("kind" => "webfonts#webfont", "family" => "Grand Hotel", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/grandhotel/v4/C_A8HiFZjXPpnMt38XnK7qCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Gravitas One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gravitasone/v6/nBHdBv6zVNU8MtP6w9FwTS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Great Vibes", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/greatvibes/v4/4Mi5RG_9LjQYrTU55GN_L6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Griffy", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/griffy/v4/vWkyYGBSyE5xjnShNtJtzw.ttf")), array("kind" => "webfonts#webfont", "family" => "Gruppo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gruppo/v7/pS_JM0cK_piBZve-lfUq9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Gudea", "category" => "sans-serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/gudea/v4/lsip4aiWhJ9bx172Y9FN_w.ttf", "regular" => "http://fonts.gstatic.com/s/gudea/v4/S-4QqBlkMPiiA3jNeCR5yw.ttf", "italic" => "http://fonts.gstatic.com/s/gudea/v4/7mNgsGw_vfS-uUgRVXNDSw.ttf")), array("kind" => "webfonts#webfont", "family" => "Gurajada", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/gurajada/v4/6Adfkl4PCRyq6XTENACEyA.ttf")), array("kind" => "webfonts#webfont", "family" => "Habibi", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/habibi/v5/YYyqXF6pWpL7kmKgS_2iUA.ttf")), array("kind" => "webfonts#webfont", "family" => "Halant", "category" => "serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v2", "lastModified" => "2016-03-14", "files" => array("300" => "http://fonts.gstatic.com/s/halant/v2/dM3ItAOWNNod_Cf3MnLlEg.ttf", "500" => "http://fonts.gstatic.com/s/halant/v2/tlsNj3K-hJKtiirTDtUbkQ.ttf", "600" => "http://fonts.gstatic.com/s/halant/v2/zNR2WvI_V8o652vIZp3X4Q.ttf", "700" => "http://fonts.gstatic.com/s/halant/v2/D9FN7OH89AuCmZDLHbPQfA.ttf", "regular" => "http://fonts.gstatic.com/s/halant/v2/rEs7Jk3SVyt3cTx6DoTu1w.ttf")), array("kind" => "webfonts#webfont", "family" => "Hammersmith One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/hammersmithone/v7/FWNn6ITYqL6or7ZTmBxRhjjVlsJB_M_Q_LtZxsoxvlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Hanalei", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/hanalei/v6/Sx8vVMBnXSQyK6Cn0CBJ3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Hanalei Fill", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/hanaleifill/v5/5uPeWLnaDdtm4UBG26Ds6C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Handlee", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/handlee/v5/6OfkXkyC0E5NZN80ED8u3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Hanuman", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/hanuman/v9/lzzXZ2l84x88giDrbfq76vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/hanuman/v9/hRhwOGGmElJSl6KSPvEnOQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Happy Monkey", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/happymonkey/v5/c2o0ps8nkBmaOYctqBq1rS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Headland One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/headlandone/v4/iGmBeOvQGfq9DSbjJ8jDVy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Henny Penny", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/hennypenny/v4/XRgo3ogXyi3tpsFfjImRF6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Herr Von Muellerhoff", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/herrvonmuellerhoff/v6/mmy24EUmk4tjm4gAEjUd7NLGIYrUsBdh-JWHYgiDiMU.ttf")), array("kind" => "webfonts#webfont", "family" => "Hind", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/hind/v5/qa346Adgv9kPDXoD1my4kA.ttf", "500" => "http://fonts.gstatic.com/s/hind/v5/2cs8RCVcYtiv4iNDH1UsQQ.ttf", "600" => "http://fonts.gstatic.com/s/hind/v5/TUKUmFMXSoxloBP1ni08oA.ttf", "700" => "http://fonts.gstatic.com/s/hind/v5/cXJJavLdUbCfjxlsA6DqTw.ttf", "regular" => "http://fonts.gstatic.com/s/hind/v5/mktFHh5Z5P9YjGKSslSUtA.ttf")), array("kind" => "webfonts#webfont", "family" => "Hind Siliguri", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("bengali", "latin", "latin-ext"), "version" => "v1", "lastModified" => "2015-09-09", "files" => array("300" => "http://fonts.gstatic.com/s/hindsiliguri/v1/fBpmjMpv5Rh6S25yVfWJnzoJ52uD-1fmXmi8u0n_zsc.ttf", "500" => "http://fonts.gstatic.com/s/hindsiliguri/v1/fBpmjMpv5Rh6S25yVfWJn__2zpxNHQ3utWt_82o9dAo.ttf", "600" => "http://fonts.gstatic.com/s/hindsiliguri/v1/fBpmjMpv5Rh6S25yVfWJn-x91FDzFvnud68bXrNkpDA.ttf", "700" => "http://fonts.gstatic.com/s/hindsiliguri/v1/fBpmjMpv5Rh6S25yVfWJn6iiXuG_rGcOxkuidirlnJE.ttf", "regular" => "http://fonts.gstatic.com/s/hindsiliguri/v1/f2eEi2pbIa8eBfNwpUl0Am_MnNA9OgK8I1F23mNWOpE.ttf")), array("kind" => "webfonts#webfont", "family" => "Hind Vadodara", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("gujarati", "latin", "latin-ext"), "version" => "v1", "lastModified" => "2015-09-09", "files" => array("300" => "http://fonts.gstatic.com/s/hindvadodara/v1/KrZ6f_YevRawHvh0qDBkTbDwfZ__Dotj_J8NiWv76DQ.ttf", "500" => "http://fonts.gstatic.com/s/hindvadodara/v1/KrZ6f_YevRawHvh0qDBkTZzEKvFIU9WyojfbAkhDb6c.ttf", "600" => "http://fonts.gstatic.com/s/hindvadodara/v1/KrZ6f_YevRawHvh0qDBkTfgXs2VXrZsRiQ1c96pXZKI.ttf", "700" => "http://fonts.gstatic.com/s/hindvadodara/v1/KrZ6f_YevRawHvh0qDBkTYGjoH95IEFGA7BjhXnx_eg.ttf", "regular" => "http://fonts.gstatic.com/s/hindvadodara/v1/9c6KKeibr6NtFqknnNxZB-Dcg5akpSnIcsPhLOFv7l8.ttf")), array("kind" => "webfonts#webfont", "family" => "Holtwood One SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/holtwoodonesc/v7/sToOq3cIxbfnhbEkgYNuBbAgSRh1LpJXlLfl8IbsmHg.ttf")), array("kind" => "webfonts#webfont", "family" => "Homemade Apple", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/homemadeapple/v6/yg3UMEsefgZ8IHz_ryz86BiPOmFWYV1WlrJkRafc4c0.ttf")), array("kind" => "webfonts#webfont", "family" => "Homenaje", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/homenaje/v5/v0YBU0iBRrGdVjDNQILxtA.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell DW Pica", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfelldwpica/v6/W81bfaWiUicLSPbJhW-ATsA5qm663gJGVdtpamafG5A.ttf", "italic" => "http://fonts.gstatic.com/s/imfelldwpica/v6/alQJ8SK5aSOZVaelYoyT4PL2asmh5DlYQYCosKo6yQs.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell DW Pica SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfelldwpicasc/v6/xBKKJV4z2KsrtQnmjGO17JZ9RBdEL0H9o5qzT1Rtof4.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell Double Pica", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfelldoublepica/v6/yN1wY_01BkQnO0LYAhXdUol14jEdVOhEmvtCMCVwYak.ttf", "italic" => "http://fonts.gstatic.com/s/imfelldoublepica/v6/64odUh2hAw8D9dkFKTlWYq0AWwkgdQfsRHec8TYi4mI.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell Double Pica SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfelldoublepicasc/v6/jkrUtrLFpMw4ZazhfkKsGwc4LoC4OJUqLw9omnT3VOU.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell English", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellenglish/v6/xwIisCqGFi8pff-oa9uSVHGNmx1fDm-u2eBJHQkdrmk.ttf", "italic" => "http://fonts.gstatic.com/s/imfellenglish/v6/Z3cnIAI_L3XTRfz4JuZKbuewladMPCWTthtMv9cPS-c.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell English SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellenglishsc/v6/h3Tn6yWfw4b5qaLD1RWvz5ATixNthKRRR1XVH3rJNiw.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell French Canon", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellfrenchcanon/v6/iKB0WL1BagSpNPz3NLMdsJ3V2FNpBrlLSvqUnERhBP8.ttf", "italic" => "http://fonts.gstatic.com/s/imfellfrenchcanon/v6/owCuNQkLLFW7TBBPJbMnhRa-QL94KdW80H29tcyld2A.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell French Canon SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellfrenchcanonsc/v6/kA3bS19-tQbeT_iG32EZmaiyyzHwYrAbmNulTz423iM.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell Great Primer", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellgreatprimer/v6/AL8ALGNthei20f9Cu3e93rgeX3ROgtTz44CitKAxzKI.ttf", "italic" => "http://fonts.gstatic.com/s/imfellgreatprimer/v6/1a-artkXMVg682r7TTxVY1_YG2SFv8Ma7CxRl1S3o7g.ttf")), array("kind" => "webfonts#webfont", "family" => "IM Fell Great Primer SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imfellgreatprimersc/v6/A313vRj97hMMGFjt6rgSJtRg-ciw1Y27JeXb2Zv4lZQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Iceberg", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/iceberg/v4/p2XVm4M-N0AOEEOymFKC5w.ttf")), array("kind" => "webfonts#webfont", "family" => "Iceland", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/iceland/v5/kq3uTMGgvzWGNi39B_WxGA.ttf")), array("kind" => "webfonts#webfont", "family" => "Imprima", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/imprima/v4/eRjquWLjwLGnTEhLH7u3kA.ttf")), array("kind" => "webfonts#webfont", "family" => "Inconsolata", "category" => "monospace", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v12", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/inconsolata/v12/AIed271kqQlcIRSOnQH0yXe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/inconsolata/v12/7bMKuoy6Nh0ft0SHnIGMuaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Inder", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/inder/v5/C38TwecLTfKxIHDc_Adcrw.ttf")), array("kind" => "webfonts#webfont", "family" => "Indie Flower", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/indieflower/v8/10JVD_humAd5zP2yrFqw6i3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Inika", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/inika/v4/bl3ZoTyrWsFun2zYbsgJrA.ttf", "regular" => "http://fonts.gstatic.com/s/inika/v4/eZCrULQGaIxkrRoGz_DjhQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Inknut Antiqua", "category" => "serif", "variants" => array("300", "regular", "500", "600", "700", "800", "900"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIg6hmPNSXwHGnJQCeQHKUMo.ttf", "500" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIiYCDvi1XFzRnTV7qUFsNgk.ttf", "600" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIjLEgY6PI0GrY6L00mykcEQ.ttf", "700" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIlRhfXn9P4_QueZ7VkUHUNc.ttf", "800" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVInARjXVu2t2krcNTHiCb1qY.ttf", "900" => "http://fonts.gstatic.com/s/inknutantiqua/v1/CagoW52rBcslcXzHh6tVIrTsNy1JrFNT1qKy8j7W3CU.ttf", "regular" => "http://fonts.gstatic.com/s/inknutantiqua/v1/VlmmTfOrxr3HfcnhMueX9arFJ4O13IHVxZbM6yoslpo.ttf")), array("kind" => "webfonts#webfont", "family" => "Irish Grover", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/irishgrover/v6/kUp7uUPooL-KsLGzeVJbBC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Istok Web", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/istokweb/v10/2koEo4AKFSvK4B52O_Mwai3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/istokweb/v10/RYLSjEXQ0nNtLLc4n7--dQ.ttf", "italic" => "http://fonts.gstatic.com/s/istokweb/v10/kvcT2SlTjmGbC3YlZxmrl6CWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/istokweb/v10/ycQ3g52ELrh3o_HYCNNUw3e1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Italiana", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/italiana/v4/dt95fkCSTOF-c6QNjwSycA.ttf")), array("kind" => "webfonts#webfont", "family" => "Italianno", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/italianno/v6/HsyHnLpKf8uP7aMpDQHZmg.ttf")), array("kind" => "webfonts#webfont", "family" => "Itim", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("thai", "latin", "latin-ext", "vietnamese"), "version" => "v1", "lastModified" => "2015-08-06", "files" => array("regular" => "http://fonts.gstatic.com/s/itim/v1/HHV9WK2x5lUkc5bxMXG8Tw.ttf")), array("kind" => "webfonts#webfont", "family" => "Jacques Francois", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jacquesfrancois/v4/_-0XWPQIW6tOzTHg4KaJ_M13D_4KM32Q4UmTSjpuNGQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Jacques Francois Shadow", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jacquesfrancoisshadow/v4/V14y0H3vq56fY9SV4OL_FASt0D_oLVawA8L8b9iKjbs.ttf")), array("kind" => "webfonts#webfont", "family" => "Jaldi", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v2", "lastModified" => "2015-06-10", "files" => array("700" => "http://fonts.gstatic.com/s/jaldi/v2/OIbtgjjEp3aVWtjF6WY8mA.ttf", "regular" => "http://fonts.gstatic.com/s/jaldi/v2/x1vR-bPW9a1EB-BUVqttCw.ttf")), array("kind" => "webfonts#webfont", "family" => "Jim Nightshade", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jimnightshade/v4/_n43lYHXVWNgXegdYRIK9CF1W_bo0EdycfH0kHciIic.ttf")), array("kind" => "webfonts#webfont", "family" => "Jockey One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jockeyone/v6/cAucnOZLvFo07w2AbufBCfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Jolly Lodger", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jollylodger/v4/RX8HnkBgaEKQSHQyP9itiS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Josefin Sans", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/josefinsans/v9/q9w3H4aeBxj0hZ8Osfi3d8SVQ0giZ-l_NELu3lgGyYw.ttf", "300" => "http://fonts.gstatic.com/s/josefinsans/v9/C6HYlRF50SGJq1XyXj04z6cQoVhARpoaILP7amxE_8g.ttf", "600" => "http://fonts.gstatic.com/s/josefinsans/v9/C6HYlRF50SGJq1XyXj04z2v8CylhIUtwUiYO7Z2wXbE.ttf", "700" => "http://fonts.gstatic.com/s/josefinsans/v9/C6HYlRF50SGJq1XyXj04z0D2ttfZwueP-QU272T9-k4.ttf", "100italic" => "http://fonts.gstatic.com/s/josefinsans/v9/s7-P1gqRNRNn-YWdOYnAOXXcj1rQwlNLIS625o-SrL0.ttf", "300italic" => "http://fonts.gstatic.com/s/josefinsans/v9/ppse0J9fKSaoxCIIJb33Gyna0FLWfcB-J_SAYmcAXaI.ttf", "regular" => "http://fonts.gstatic.com/s/josefinsans/v9/xgzbb53t8j-Mo-vYa23n5i3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/josefinsans/v9/q9w3H4aeBxj0hZ8Osfi3d_MZXuCXbOrAvx5R0IT5Oyo.ttf", "600italic" => "http://fonts.gstatic.com/s/josefinsans/v9/ppse0J9fKSaoxCIIJb33G4R-5-urNOGAobhAyctHvW8.ttf", "700italic" => "http://fonts.gstatic.com/s/josefinsans/v9/ppse0J9fKSaoxCIIJb33G_As9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Josefin Slab", "category" => "serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/josefinslab/v6/etsUjZYO8lTLU85lDhZwUsSVQ0giZ-l_NELu3lgGyYw.ttf", "300" => "http://fonts.gstatic.com/s/josefinslab/v6/NbE6ykYuM2IyEwxQxOIi2KcQoVhARpoaILP7amxE_8g.ttf", "600" => "http://fonts.gstatic.com/s/josefinslab/v6/NbE6ykYuM2IyEwxQxOIi2Gv8CylhIUtwUiYO7Z2wXbE.ttf", "700" => "http://fonts.gstatic.com/s/josefinslab/v6/NbE6ykYuM2IyEwxQxOIi2ED2ttfZwueP-QU272T9-k4.ttf", "100italic" => "http://fonts.gstatic.com/s/josefinslab/v6/8BjDChqLgBF3RJKfwHIYh3Xcj1rQwlNLIS625o-SrL0.ttf", "300italic" => "http://fonts.gstatic.com/s/josefinslab/v6/af9sBoKGPbGO0r21xJulyyna0FLWfcB-J_SAYmcAXaI.ttf", "regular" => "http://fonts.gstatic.com/s/josefinslab/v6/46aYWdgz-1oFX11flmyEfS3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/josefinslab/v6/etsUjZYO8lTLU85lDhZwUvMZXuCXbOrAvx5R0IT5Oyo.ttf", "600italic" => "http://fonts.gstatic.com/s/josefinslab/v6/af9sBoKGPbGO0r21xJuly4R-5-urNOGAobhAyctHvW8.ttf", "700italic" => "http://fonts.gstatic.com/s/josefinslab/v6/af9sBoKGPbGO0r21xJuly_As9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Joti One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/jotione/v4/P3r_Th0ESHJdzunsvWgUfQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Judson", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin", "latin-ext", "vietnamese"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/judson/v9/he4a2LwiPJc7r8x0oKCKiA.ttf", "regular" => "http://fonts.gstatic.com/s/judson/v9/znM1AAs0eytUaJzf1CrYZQ.ttf", "italic" => "http://fonts.gstatic.com/s/judson/v9/GVqQW9P52ygW-ySq-CLwAA.ttf")), array("kind" => "webfonts#webfont", "family" => "Julee", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/julee/v6/CAib-jsUsSO8SvVRnE9fHA.ttf")), array("kind" => "webfonts#webfont", "family" => "Julius Sans One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/juliussansone/v5/iU65JP9acQHPDLkdalCF7jjVlsJB_M_Q_LtZxsoxvlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Junge", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/junge/v4/j4IXCXtxrw9qIBheercp3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Jura", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/jura/v7/Rqx_xy1UnN0C7wD3FUSyPQ.ttf", "500" => "http://fonts.gstatic.com/s/jura/v7/16xhfjHCiaLj3tsqqgmtGg.ttf", "600" => "http://fonts.gstatic.com/s/jura/v7/iwseduOwJSdY8wQ1Y6CJdA.ttf", "regular" => "http://fonts.gstatic.com/s/jura/v7/YAWMwF3sN0KCbynMq-Yr_Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Just Another Hand", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/justanotherhand/v7/fKV8XYuRNNagXr38eqbRf99BnJIEGrvoojniP57E51c.ttf")), array("kind" => "webfonts#webfont", "family" => "Just Me Again Down Here", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/justmeagaindownhere/v8/sN06iTc9ITubLTgXoG-kc3M9eVLpVTSK6TqZTIgBrWQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Kadwa", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("700" => "http://fonts.gstatic.com/s/kadwa/v1/NFPZaBfekj_Io-7vUMz4Ww.ttf", "regular" => "http://fonts.gstatic.com/s/kadwa/v1/VwEN8oKGqaa0ug9kRpvSSg.ttf")), array("kind" => "webfonts#webfont", "family" => "Kalam", "category" => "handwriting", "variants" => array("300", "regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/kalam/v7/MgQQlk1SgPEHdlkWMNh7Jg.ttf", "700" => "http://fonts.gstatic.com/s/kalam/v7/95nLItUGyWtNLZjSckluLQ.ttf", "regular" => "http://fonts.gstatic.com/s/kalam/v7/hNEJkp2K-aql7e5WQish4Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Kameron", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/kameron/v7/rabVVbzlflqvmXJUFlKnu_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/kameron/v7/9r8HYhqDSwcq9WMjupL82A.ttf")), array("kind" => "webfonts#webfont", "family" => "Kanit", "category" => "sans-serif", "variants" => array("100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("thai", "latin", "latin-ext", "vietnamese"), "version" => "v1", "lastModified" => "2015-12-10", "files" => array("100" => "http://fonts.gstatic.com/s/kanit/v1/CYl4qOK-NWwZp3iTKW1eIA.ttf", "200" => "http://fonts.gstatic.com/s/kanit/v1/wfLWkj1C4tYl7MoiFWS3bA.ttf", "300" => "http://fonts.gstatic.com/s/kanit/v1/SM5qHynYGdOmMKEwGUFIPA.ttf", "500" => "http://fonts.gstatic.com/s/kanit/v1/GxoU_USIJyIy8WIcYSUO2g.ttf", "600" => "http://fonts.gstatic.com/s/kanit/v1/n_qoIVxojeQY0D1pvoNDhA.ttf", "700" => "http://fonts.gstatic.com/s/kanit/v1/kEGmYvO8My36j5ILmbUPRg.ttf", "800" => "http://fonts.gstatic.com/s/kanit/v1/YTp-zAuKXxwnA1YnJIF1rg.ttf", "900" => "http://fonts.gstatic.com/s/kanit/v1/1NIEkusi3bG3GgO9Hor3fQ.ttf", "100italic" => "http://fonts.gstatic.com/s/kanit/v1/NLNtc56MpXmHl1yOrop8oQ.ttf", "200italic" => "http://fonts.gstatic.com/s/kanit/v1/D8gkrAAM2bvNJ-1i4ot-1_esZW2xOQ-xsNqO47m55DA.ttf", "300italic" => "http://fonts.gstatic.com/s/kanit/v1/IePislKOKy3Bqfpb9V5VM_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/kanit/v1/L6VKvM17ZmevDynOiw7H9w.ttf", "italic" => "http://fonts.gstatic.com/s/kanit/v1/sHLq5U0-T0oSMTnwTKgv-A.ttf", "500italic" => "http://fonts.gstatic.com/s/kanit/v1/hrCiWCaNv9AaF0mDY1F2zPesZW2xOQ-xsNqO47m55DA.ttf", "600italic" => "http://fonts.gstatic.com/s/kanit/v1/9BkP85yRDoVayTWQwdGLqPesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/kanit/v1/WNo3ZZ9xtOZJknNlvHAFWfesZW2xOQ-xsNqO47m55DA.ttf", "800italic" => "http://fonts.gstatic.com/s/kanit/v1/qiTGrW5sCa9UQp841fWjc_esZW2xOQ-xsNqO47m55DA.ttf", "900italic" => "http://fonts.gstatic.com/s/kanit/v1/ogN5dFD1r4BfxNV4Nb-TXfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Kantumruy", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("khmer"), "version" => "v3", "lastModified" => "2015-04-03", "files" => array("300" => "http://fonts.gstatic.com/s/kantumruy/v3/ERRwQE0WG5uanaZWmOFXNi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/kantumruy/v3/gie_zErpGf_rNzs920C2Ji3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/kantumruy/v3/kQfXNYElQxr5dS8FyjD39Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Karla", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/karla/v5/JS501sZLxZ4zraLQdncOUA.ttf", "regular" => "http://fonts.gstatic.com/s/karla/v5/78UgGRwJFkhqaoFimqoKpQ.ttf", "italic" => "http://fonts.gstatic.com/s/karla/v5/51UBKly9RQOnOkj95ZwEFw.ttf", "700italic" => "http://fonts.gstatic.com/s/karla/v5/3YDyi09gQjCRh-5-SVhTTvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Karma", "category" => "serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/karma/v5/lH6ijJnguWR2Sz7tEl6MQQ.ttf", "500" => "http://fonts.gstatic.com/s/karma/v5/9YGjxi6Hcvz2Kh-rzO_cAw.ttf", "600" => "http://fonts.gstatic.com/s/karma/v5/h_CVzXXtqSxjfS2sIwaejA.ttf", "700" => "http://fonts.gstatic.com/s/karma/v5/smuSM08oApsQPPVYbHd1CA.ttf", "regular" => "http://fonts.gstatic.com/s/karma/v5/wvqTxAGBUrTqU0urTEoPIw.ttf")), array("kind" => "webfonts#webfont", "family" => "Kaushan Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kaushanscript/v4/qx1LSqts-NtiKcLw4N03IBnpV0hQCek3EmWnCPrvGRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Kavoon", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/kavoon/v5/382m-6baKXqJFQjEgobt6Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Kdam Thmor", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v3", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/kdamthmor/v3/otCdP6UU-VBIrBfVDWBQJ_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Keania One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/keaniaone/v4/PACrDKZWngXzgo-ucl6buvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Kelly Slab", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kellyslab/v6/F_2oS1e9XdYx1MAi8XEVefesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Kenia", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kenia/v8/OLM9-XfITK9PsTLKbGBrwg.ttf")), array("kind" => "webfonts#webfont", "family" => "Khand", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/khand/v4/072zRl4OU9Pinjjkg174LA.ttf", "500" => "http://fonts.gstatic.com/s/khand/v4/46_p-SqtuMe56nxQdteWxg.ttf", "600" => "http://fonts.gstatic.com/s/khand/v4/zggGWYIiPJyMTgkfxP_kaA.ttf", "700" => "http://fonts.gstatic.com/s/khand/v4/0I0UWaN-X5QBmfexpXKhqg.ttf", "regular" => "http://fonts.gstatic.com/s/khand/v4/HdLdTNFqNIDGJZl1ZEj84w.ttf")), array("kind" => "webfonts#webfont", "family" => "Khmer", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/khmer/v9/vWaBJIbaQuBNz02ALIKJ3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Khula", "category" => "sans-serif", "variants" => array("300", "regular", "600", "700", "800"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/khula/v1/_1LySU5Upq-sc4OZ1b_GIw.ttf", "600" => "http://fonts.gstatic.com/s/khula/v1/4ZH86Hce-aeFDaedTnbkbg.ttf", "700" => "http://fonts.gstatic.com/s/khula/v1/UGVExGl-Jjs-YPpGv-MZ6w.ttf", "800" => "http://fonts.gstatic.com/s/khula/v1/Sccp_oOo8FWgbx5smie7xQ.ttf", "regular" => "http://fonts.gstatic.com/s/khula/v1/izcPIFyCSd16XI1Ak_Wk7Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Kite One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kiteone/v4/8ojWmgUc97m0f_i6sTqLoQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Knewave", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/knewave/v5/KGHM4XWr4iKnBMqzZLkPBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Kotta One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kottaone/v4/AB2Q7hVw6niJYDgLvFXu5w.ttf")), array("kind" => "webfonts#webfont", "family" => "Koulen", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v10", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/koulen/v10/AAYOK8RSRO7FTskTzFuzNw.ttf")), array("kind" => "webfonts#webfont", "family" => "Kranky", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kranky/v6/C8dxxTS99-fZ84vWk8SDrg.ttf")), array("kind" => "webfonts#webfont", "family" => "Kreon", "category" => "serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/kreon/v9/HKtJRiq5C2zbq5N1IX32sA.ttf", "700" => "http://fonts.gstatic.com/s/kreon/v9/jh0dSmaPodjxISiblIUTkw.ttf", "regular" => "http://fonts.gstatic.com/s/kreon/v9/zA_IZt0u0S3cvHJu-n1oEg.ttf")), array("kind" => "webfonts#webfont", "family" => "Kristi", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kristi/v7/aRsgBQrkQkMlu4UPSnJyOQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Krona One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/kronaone/v4/zcQj4ljqTo166AdourlF9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Kurale", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "devanagari", "latin-ext", "cyrillic"), "version" => "v1", "lastModified" => "2015-05-14", "files" => array("regular" => "http://fonts.gstatic.com/s/kurale/v1/rxeyIcvQlT4XAWwNbXFCfw.ttf")), array("kind" => "webfonts#webfont", "family" => "La Belle Aurore", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/labelleaurore/v7/Irdbc4ASuUoWDjd_Wc3md123K2iuuhwZgaKapkyRTY8.ttf")), array("kind" => "webfonts#webfont", "family" => "Laila", "category" => "serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v2", "lastModified" => "2016-03-14", "files" => array("300" => "http://fonts.gstatic.com/s/laila/v2/bLbIVEZF3IWSZ-in72GJvA.ttf", "500" => "http://fonts.gstatic.com/s/laila/v2/tkf8VtFvW9g3VsxQCA6WOQ.ttf", "600" => "http://fonts.gstatic.com/s/laila/v2/3EMP2L6JRQ4GaHIxCldCeA.ttf", "700" => "http://fonts.gstatic.com/s/laila/v2/R7P4z1xjcjecmjZ9GyhqHQ.ttf", "regular" => "http://fonts.gstatic.com/s/laila/v2/6iYor3edprH7360qtBGoag.ttf")), array("kind" => "webfonts#webfont", "family" => "Lakki Reddy", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lakkireddy/v3/Q5EpFa91FjW37t0FCnedaKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Lancelot", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lancelot/v6/XMT7T_oo_MQUGAnU2v-sdA.ttf")), array("kind" => "webfonts#webfont", "family" => "Lateef", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "arabic"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lateef/v10/PAsKCgi1qc7XPwvzo_I-DQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Lato", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "latin-ext"), "version" => "v11", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/lato/v11/Upp-ka9rLQmHYCsFgwL-eg.ttf", "300" => "http://fonts.gstatic.com/s/lato/v11/Ja02qOppOVq9jeRjWekbHg.ttf", "700" => "http://fonts.gstatic.com/s/lato/v11/iX_QxBBZLhNj5JHlTzHQzg.ttf", "900" => "http://fonts.gstatic.com/s/lato/v11/8TPEV6NbYWZlNsXjbYVv7w.ttf", "100italic" => "http://fonts.gstatic.com/s/lato/v11/zLegi10uS_9-fnUDISl0KA.ttf", "300italic" => "http://fonts.gstatic.com/s/lato/v11/dVebFcn7EV7wAKwgYestUg.ttf", "regular" => "http://fonts.gstatic.com/s/lato/v11/h7rISIcQapZBpei-sXwIwg.ttf", "italic" => "http://fonts.gstatic.com/s/lato/v11/P_dJOFJylV3A870UIOtr0w.ttf", "700italic" => "http://fonts.gstatic.com/s/lato/v11/WFcZakHrrCKeUJxHA4T_gw.ttf", "900italic" => "http://fonts.gstatic.com/s/lato/v11/draWperrI7n2xi35Cl08fA.ttf")), array("kind" => "webfonts#webfont", "family" => "League Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/leaguescript/v7/wnRFLvfabWK_DauqppD6vSeUSrabuTpOsMEiRLtKwk0.ttf")), array("kind" => "webfonts#webfont", "family" => "Leckerli One", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/leckerlione/v7/S2Y_iLrItTu8kIJTkS7DrC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Ledger", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ledger/v4/G432jp-tahOfWHbCYkI0jw.ttf")), array("kind" => "webfonts#webfont", "family" => "Lekton", "category" => "sans-serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lekton/v7/WZw-uL8WTkx3SBVfTlevXQ.ttf", "regular" => "http://fonts.gstatic.com/s/lekton/v7/r483JYmxf5PjIm4jVAm8Yg.ttf", "italic" => "http://fonts.gstatic.com/s/lekton/v7/_UbDIPBA1wDqSbhp-OED7A.ttf")), array("kind" => "webfonts#webfont", "family" => "Lemon", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lemon/v5/wed1nNu4LNSu-3RoRVUhUw.ttf")), array("kind" => "webfonts#webfont", "family" => "Libre Baskerville", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/librebaskerville/v4/kH7K4InNTm7mmOXXjrA5v-xuswJKUVpBRfYFpz0W3Iw.ttf", "regular" => "http://fonts.gstatic.com/s/librebaskerville/v4/pR0sBQVcY0JZc_ciXjFsKyyZRYCSvpCzQKuMWnP5NDY.ttf", "italic" => "http://fonts.gstatic.com/s/librebaskerville/v4/QHIOz1iKF3bIEzRdDFaf5QnhapNS5Oi8FPrBRDLbsW4.ttf")), array("kind" => "webfonts#webfont", "family" => "Life Savers", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lifesavers/v6/THQKqChyYUm97rNPVFdGGXe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/lifesavers/v6/g49cUDk4Y1P0G5NMkMAm7qCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Lilita One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lilitaone/v4/vTxJQjbNV6BCBHx8sGDCVvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Lily Script One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lilyscriptone/v4/uPWsLVW8uiXqIBnE8ZwGPDjVlsJB_M_Q_LtZxsoxvlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Limelight", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/limelight/v7/5dTfN6igsXjLjOy8QQShcg.ttf")), array("kind" => "webfonts#webfont", "family" => "Linden Hill", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lindenhill/v6/UgsC0txqd-E1yjvjutwm_KCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/lindenhill/v6/OcS3bZcu8vJvIDH8Zic83keOrDcLawS7-ssYqLr2Xp4.ttf")), array("kind" => "webfonts#webfont", "family" => "Lobster", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic", "vietnamese"), "version" => "v16", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lobster/v16/9LpJGtNuM1D8FAZ2BkJH2Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Lobster Two", "category" => "display", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lobstertwo/v8/bmdxOflBqMqjEC0-kGsIiHe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/lobstertwo/v8/xb9aY4w9ceh8JRzobID1naCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/lobstertwo/v8/Ul_16MSbfayQv1I4QhLEoEeOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/lobstertwo/v8/LEkN2_no_6kFvRfiBZ8xpM_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Londrina Outline", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/londrinaoutline/v5/lls08GOa1eT74p072l1AWJmp8DTZ6iHear7UV05iykg.ttf")), array("kind" => "webfonts#webfont", "family" => "Londrina Shadow", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/londrinashadow/v4/dNYuzPS_7eYgXFJBzMoKdbw6Z3rVA5KDSi7aQxS92Nk.ttf")), array("kind" => "webfonts#webfont", "family" => "Londrina Sketch", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/londrinasketch/v4/p7Ai06aT1Ycp_D2fyE3z69d6z_uhFGnpCOifUY1fJQo.ttf")), array("kind" => "webfonts#webfont", "family" => "Londrina Solid", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/londrinasolid/v4/yysorIEiYSBb0ylZjg791MR125CwGqh8XBqkBzea0LA.ttf")), array("kind" => "webfonts#webfont", "family" => "Lora", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lora/v9/enKND5SfzQKkggBA_VnT1A.ttf", "regular" => "http://fonts.gstatic.com/s/lora/v9/aXJ7KVIGcejEy1abawZazg.ttf", "italic" => "http://fonts.gstatic.com/s/lora/v9/AN2EZaj2tFRpyveuNn9BOg.ttf", "700italic" => "http://fonts.gstatic.com/s/lora/v9/ivs9j3kYU65pR9QD9YFdzQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Love Ya Like A Sister", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/loveyalikeasister/v7/LzkxWS-af0Br2Sk_YgSJY-ad1xEP8DQfgfY8MH9aBUg.ttf")), array("kind" => "webfonts#webfont", "family" => "Loved by the King", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lovedbytheking/v6/wg03xD4cWigj4YDufLBSr8io2AFEwwMpu7y5KyiyAJc.ttf")), array("kind" => "webfonts#webfont", "family" => "Lovers Quarrel", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/loversquarrel/v4/gipdZ8b7pKb89MzQLAtJHLHLxci2ElvNEmOB303HLk0.ttf")), array("kind" => "webfonts#webfont", "family" => "Luckiest Guy", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/luckiestguy/v6/5718gH8nDy3hFVihOpkY5C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Lusitana", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/lusitana/v4/GWtZyUsONxgkdl3Mc1P7FKCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/lusitana/v4/l1h9VDomkwbdzbPdmLcUIw.ttf")), array("kind" => "webfonts#webfont", "family" => "Lustria", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/lustria/v4/gXAk0s4ai0X-TAOhYzZd1w.ttf")), array("kind" => "webfonts#webfont", "family" => "Macondo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/macondo/v5/G6yPNUscRPQ8ufBXs_8yRQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Macondo Swash Caps", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/macondoswashcaps/v4/SsSR706z-MlvEH7_LS6JAPkkgYRHs6GSG949m-K6x2k.ttf")), array("kind" => "webfonts#webfont", "family" => "Magra", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/magra/v4/6fOM5sq5cIn8D0RjX8Lztw.ttf", "regular" => "http://fonts.gstatic.com/s/magra/v4/hoZ13bwCXBxuGZqAudgc5A.ttf")), array("kind" => "webfonts#webfont", "family" => "Maiden Orange", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/maidenorange/v6/ZhKIA2SPisEwdhW7g0RUWojjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Mako", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mako/v7/z5zSLmfPlv1uTVAdmJBLXg.ttf")), array("kind" => "webfonts#webfont", "family" => "Mallanna", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mallanna/v4/krCTa-CfMbtxqF0689CbuQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Mandali", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mandali/v4/0lF8yJ7fkyjXuqtSi5bWbQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Marcellus", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/marcellus/v4/UjiLZzumxWC9whJ86UtaYw.ttf")), array("kind" => "webfonts#webfont", "family" => "Marcellus SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/marcellussc/v4/_jugwxhkkynrvsfrxVx8gS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Marck Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/marckscript/v7/O_D1NAZVOFOobLbVtW3bci3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Margarine", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/margarine/v5/DJnJwIrcO_cGkjSzY3MERw.ttf")), array("kind" => "webfonts#webfont", "family" => "Marko One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/markoone/v6/hpP7j861sOAco43iDc4n4w.ttf")), array("kind" => "webfonts#webfont", "family" => "Marmelad", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/marmelad/v6/jI0_FBlSOIRLL0ePWOhOwQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Martel", "category" => "serif", "variants" => array("200", "300", "regular", "600", "700", "800", "900"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-04-22", "files" => array("200" => "http://fonts.gstatic.com/s/martel/v1/_wfGdswZbat7P4tupHLA1w.ttf", "300" => "http://fonts.gstatic.com/s/martel/v1/SghoV2F2VPdVU3P0a4fa9w.ttf", "600" => "http://fonts.gstatic.com/s/martel/v1/Kt9uPhH1PvUwuZ5Y6zuAMQ.ttf", "700" => "http://fonts.gstatic.com/s/martel/v1/4OzIiKB5wE36xXL2U0vzWQ.ttf", "800" => "http://fonts.gstatic.com/s/martel/v1/RVF8drcQoRkRL7l_ZkpTlQ.ttf", "900" => "http://fonts.gstatic.com/s/martel/v1/iS0YUpFJoiLRlnyl40rpEA.ttf", "regular" => "http://fonts.gstatic.com/s/martel/v1/9ALu5czkaaf5zsYk6GJEnQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Martel Sans", "category" => "sans-serif", "variants" => array("200", "300", "regular", "600", "700", "800", "900"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v2", "lastModified" => "2015-12-08", "files" => array("200" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQEnzyIngrzGjGh22wPb6cGM.ttf", "300" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQC9-WlPSxbfiI49GsXo3q0g.ttf", "600" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQJZ7xm-Bj30Bj2KNdXDzSZg.ttf", "700" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQHe1Pd76Vl7zRpE7NLJQ7XU.ttf", "800" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQA89PwPrYLaRFJ-HNCU9NbA.ttf", "900" => "http://fonts.gstatic.com/s/martelsans/v2/7ajme85aKKx_SCWF59ImQCenaqEuufTBk9XMKnKmgDA.ttf", "regular" => "http://fonts.gstatic.com/s/martelsans/v2/91c8DPDZncMc0RFfhmc2RqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Marvel", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/marvel/v6/WrHDBL1RupWGo2UcdgxB3Q.ttf", "regular" => "http://fonts.gstatic.com/s/marvel/v6/Fg1dO8tWVb-MlyqhsbXEkg.ttf", "italic" => "http://fonts.gstatic.com/s/marvel/v6/HzyjFB-oR5usrc7Lxz9g8w.ttf", "700italic" => "http://fonts.gstatic.com/s/marvel/v6/Gzf5NT09Y6xskdQRj2kz1qCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Mate", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mate/v5/ooFviPcJ6hZP5bAE71Cawg.ttf", "italic" => "http://fonts.gstatic.com/s/mate/v5/5XwW6_cbisGvCX5qmNiqfA.ttf")), array("kind" => "webfonts#webfont", "family" => "Mate SC", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/matesc/v5/-YkIT2TZoPZF6pawKzDpWw.ttf")), array("kind" => "webfonts#webfont", "family" => "Maven Pro", "category" => "sans-serif", "variants" => array("regular", "500", "700", "900"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/mavenpro/v7/SQVfzoJBbj9t3aVcmbspRi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/mavenpro/v7/uDssvmXgp7Nj3i336k_dSi3USBnSvpkopQaUR-2r7iU.ttf", "900" => "http://fonts.gstatic.com/s/mavenpro/v7/-91TwiFzqeL1F7Kh91APwS3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/mavenpro/v7/sqPJIFG4gqsjl-0q_46Gbw.ttf")), array("kind" => "webfonts#webfont", "family" => "McLaren", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mclaren/v4/OprvTGxaiINBKW_1_U0eoQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Meddon", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2015-08-12", "files" => array("regular" => "http://fonts.gstatic.com/s/meddon/v9/f8zJO98uu2EtSj9p7ci9RA.ttf")), array("kind" => "webfonts#webfont", "family" => "MedievalSharp", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/medievalsharp/v8/85X_PjV6tftJ0-rX7KYQkOe45sJkivqprK7VkUlzfg0.ttf")), array("kind" => "webfonts#webfont", "family" => "Medula One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/medulaone/v6/AasPgDQak81dsTGQHc5zUPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Megrim", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/megrim/v7/e-9jVUC9lv1zxaFQARuftw.ttf")), array("kind" => "webfonts#webfont", "family" => "Meie Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/meiescript/v4/oTIWE5MmPye-rCyVp_6KEqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Merienda", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/merienda/v4/GlwcvRLlgiVE2MBFQ4r0sKCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/merienda/v4/MYY6Og1qZlOQtPW2G95Y3A.ttf")), array("kind" => "webfonts#webfont", "family" => "Merienda One", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/meriendaone/v7/bCA-uDdUx6nTO8SjzCLXvS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Merriweather", "category" => "serif", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v11", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/merriweather/v11/ZvcMqxEwPfh2qDWBPxn6nqcQoVhARpoaILP7amxE_8g.ttf", "700" => "http://fonts.gstatic.com/s/merriweather/v11/ZvcMqxEwPfh2qDWBPxn6nkD2ttfZwueP-QU272T9-k4.ttf", "900" => "http://fonts.gstatic.com/s/merriweather/v11/ZvcMqxEwPfh2qDWBPxn6nqObDOjC3UL77puoeHsE3fw.ttf", "300italic" => "http://fonts.gstatic.com/s/merriweather/v11/EYh7Vl4ywhowqULgRdYwICna0FLWfcB-J_SAYmcAXaI.ttf", "regular" => "http://fonts.gstatic.com/s/merriweather/v11/RFda8w1V0eDZheqfcyQ4EC3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/merriweather/v11/So5lHxHT37p2SS4-t60SlPMZXuCXbOrAvx5R0IT5Oyo.ttf", "700italic" => "http://fonts.gstatic.com/s/merriweather/v11/EYh7Vl4ywhowqULgRdYwIPAs9-1nE9qOqhChW0m4nDE.ttf", "900italic" => "http://fonts.gstatic.com/s/merriweather/v11/EYh7Vl4ywhowqULgRdYwIBd0_s6jQr9r5s5OZYvtzBY.ttf")), array("kind" => "webfonts#webfont", "family" => "Merriweather Sans", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic", "800", "800italic"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/merriweathersans/v7/6LmGj5dOJopQKEkt88Gowan5N8K-_DP0e9e_v51obXQ.ttf", "700" => "http://fonts.gstatic.com/s/merriweathersans/v7/6LmGj5dOJopQKEkt88GowbqxG25nQNOioCZSK4sU-CA.ttf", "800" => "http://fonts.gstatic.com/s/merriweathersans/v7/6LmGj5dOJopQKEkt88GowYufzO2zUYSj5LqoJ3UGkco.ttf", "300italic" => "http://fonts.gstatic.com/s/merriweathersans/v7/nAqt4hiqwq3tzCecpgPmVdytE4nGXk2hYD5nJ740tBw.ttf", "regular" => "http://fonts.gstatic.com/s/merriweathersans/v7/AKu1CjQ4qnV8MUltkAX3sOAj_ty82iuwwDTNEYXGiyQ.ttf", "italic" => "http://fonts.gstatic.com/s/merriweathersans/v7/3Mz4hOHzs2npRMG3B1ascZ32VBCoA_HLsn85tSWZmdo.ttf", "700italic" => "http://fonts.gstatic.com/s/merriweathersans/v7/nAqt4hiqwq3tzCecpgPmVbuqAJxizi8Dk_SK5et7kMg.ttf", "800italic" => "http://fonts.gstatic.com/s/merriweathersans/v7/nAqt4hiqwq3tzCecpgPmVdDmPrYMy3aZO4LmnZsxTQw.ttf")), array("kind" => "webfonts#webfont", "family" => "Metal", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/metal/v9/zA3UOP13ooQcxjv04BZX5g.ttf")), array("kind" => "webfonts#webfont", "family" => "Metal Mania", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/metalmania/v6/isriV_rAUgj6bPWPN6l9QKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Metamorphous", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/metamorphous/v6/wGqUKXRinIYggz-BTRU9ei3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Metrophobic", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/metrophobic/v6/SaglWZWCrrv_D17u1i4v_aCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Michroma", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/michroma/v7/0c2XrW81_QsiKV8T9thumA.ttf")), array("kind" => "webfonts#webfont", "family" => "Milonga", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/milonga/v4/dzNdIUSTGFmy2ahovDRcWg.ttf")), array("kind" => "webfonts#webfont", "family" => "Miltonian", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/miltonian/v9/Z4HrYZyqm0BnNNzcCUfzoQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Miltonian Tattoo", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/miltoniantattoo/v10/1oU_8OGYwW46eh02YHydn2uk0YtI6thZkz1Hmh-odwg.ttf")), array("kind" => "webfonts#webfont", "family" => "Miniver", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/miniver/v5/4yTQohOH_cWKRS5laRFhYg.ttf")), array("kind" => "webfonts#webfont", "family" => "Miss Fajardose", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/missfajardose/v6/WcXjlQPKn6nBfr8LY3ktNu6rPKfVZo7L2bERcf0BDns.ttf")), array("kind" => "webfonts#webfont", "family" => "Modak", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/modak/v1/lMsN0QIKid-pCPvL0hH4nw.ttf")), array("kind" => "webfonts#webfont", "family" => "Modern Antiqua", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/modernantiqua/v6/8qX_tr6Xzy4t9fvZDXPkh6rFJ4O13IHVxZbM6yoslpo.ttf")), array("kind" => "webfonts#webfont", "family" => "Molengo", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/molengo/v7/jcjgeGuzv83I55AzOTpXNQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Molle", "category" => "handwriting", "variants" => array("italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("italic" => "http://fonts.gstatic.com/s/molle/v4/9XTdCsjPXifLqo5et-YoGA.ttf")), array("kind" => "webfonts#webfont", "family" => "Monda", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/monda/v4/EVOzZUyc_j1w2GuTgTAW1g.ttf", "regular" => "http://fonts.gstatic.com/s/monda/v4/qFMHZ9zvR6B_gnoIgosPrw.ttf")), array("kind" => "webfonts#webfont", "family" => "Monofett", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/monofett/v6/C6K5L799Rgxzg2brgOaqAw.ttf")), array("kind" => "webfonts#webfont", "family" => "Monoton", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/monoton/v6/aCz8ja_bE4dg-7agSvExdw.ttf")), array("kind" => "webfonts#webfont", "family" => "Monsieur La Doulaise", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/monsieurladoulaise/v5/IMAdMj6Eq9jZ46CPctFtMKP61oAqTJXlx5ZVOBmcPdM.ttf")), array("kind" => "webfonts#webfont", "family" => "Montaga", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/montaga/v4/PwTwUboiD-M4-mFjZfJs2A.ttf")), array("kind" => "webfonts#webfont", "family" => "Montez", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/montez/v6/kx58rLOWQQLGFM4pDHv5Ng.ttf")), array("kind" => "webfonts#webfont", "family" => "Montserrat", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/montserrat/v6/IQHow_FEYlDC4Gzy_m8fcgJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/montserrat/v6/Kqy6-utIpx_30Xzecmeo8_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Montserrat Alternates", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/montserratalternates/v4/YENqOGAVzwIHjYNjmKuAZpeqBKvsAhm-s2I4RVSXFfc.ttf", "regular" => "http://fonts.gstatic.com/s/montserratalternates/v4/z2n1Sjxk9souK3HCtdHuklPuEVRGaG9GCQnmM16YWq0.ttf")), array("kind" => "webfonts#webfont", "family" => "Montserrat Subrayada", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/montserratsubrayada/v4/wf-IKpsHcfm0C9uaz9IeGJvEcF1LWArDbGWgKZSH9go.ttf", "regular" => "http://fonts.gstatic.com/s/montserratsubrayada/v4/nzoCWCz0e9c7Mr2Gl8bbgrJymm6ilkk9f0nDA_sC_qk.ttf")), array("kind" => "webfonts#webfont", "family" => "Moul", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/moul/v8/Kb0ALQnfyXawP1a_P_gpTQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Moulpali", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/moulpali/v9/diD74BprGhmVkJoerKmrKA.ttf")), array("kind" => "webfonts#webfont", "family" => "Mountains of Christmas", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/mountainsofchristmas/v8/PymufKtHszoLrY0uiAYKNM9cPTbSBTrQyTa5TWAe3vE.ttf", "regular" => "http://fonts.gstatic.com/s/mountainsofchristmas/v8/dVGBFPwd6G44IWDbQtPew2Auds3jz1Fxb61CgfaGDr4.ttf")), array("kind" => "webfonts#webfont", "family" => "Mouse Memoirs", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mousememoirs/v4/NBFaaJFux_j0AQbAsW3QeH8f0n03UdmQgF_CLvNR2vg.ttf")), array("kind" => "webfonts#webfont", "family" => "Mr Bedfort", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrbedfort/v5/81bGgHTRikLs_puEGshl7_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Mr Dafoe", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrdafoe/v5/s32Q1S6ZkT7EaX53mUirvQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Mr De Haviland", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrdehaviland/v5/fD8y4L6PJ4vqDk7z8Y8e27v4lrhng1lzu7-weKO6cw8.ttf")), array("kind" => "webfonts#webfont", "family" => "Mrs Saint Delafield", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrssaintdelafield/v4/vuWagfFT7bj9lFtZOFBwmjHMBelqWf3tJeGyts2SmKU.ttf")), array("kind" => "webfonts#webfont", "family" => "Mrs Sheppards", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mrssheppards/v5/2WFsWMV3VUeCz6UVH7UjCn8f0n03UdmQgF_CLvNR2vg.ttf")), array("kind" => "webfonts#webfont", "family" => "Muli", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/muli/v7/VJw4F3ZHRAZ7Hmg3nQu5YQ.ttf", "300italic" => "http://fonts.gstatic.com/s/muli/v7/s-NKMCru8HiyjEt0ZDoBoA.ttf", "regular" => "http://fonts.gstatic.com/s/muli/v7/KJiP6KznxbALQgfJcDdPAw.ttf", "italic" => "http://fonts.gstatic.com/s/muli/v7/Cg0K_IWANs9xkNoxV7H1_w.ttf")), array("kind" => "webfonts#webfont", "family" => "Mystery Quest", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/mysteryquest/v4/467jJvg0c7HgucvBB9PLDyeUSrabuTpOsMEiRLtKwk0.ttf")), array("kind" => "webfonts#webfont", "family" => "NTR", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ntr/v4/e7H4ZLtGfVOYyOupo6T12g.ttf")), array("kind" => "webfonts#webfont", "family" => "Neucha", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "cyrillic"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/neucha/v8/bijdhB-TzQdtpl0ykhGh4Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Neuton", "category" => "serif", "variants" => array("200", "300", "regular", "italic", "700", "800"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/neuton/v8/DA3Mkew3XqSkPpi1f4tJow.ttf", "300" => "http://fonts.gstatic.com/s/neuton/v8/xrc_aZ2hx-gdeV0mlY8Vww.ttf", "700" => "http://fonts.gstatic.com/s/neuton/v8/gnWpkWY7DirkKiovncYrfg.ttf", "800" => "http://fonts.gstatic.com/s/neuton/v8/XPzBQV4lY6enLxQG9cF1jw.ttf", "regular" => "http://fonts.gstatic.com/s/neuton/v8/9R-MGIOQUdjAVeB6nE6PcQ.ttf", "italic" => "http://fonts.gstatic.com/s/neuton/v8/uVMT3JOB5BNFi3lgPp6kEg.ttf")), array("kind" => "webfonts#webfont", "family" => "New Rocker", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/newrocker/v5/EFUWzHJedEkpW399zYOHofesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "News Cycle", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v13", "lastModified" => "2015-04-16", "files" => array("700" => "http://fonts.gstatic.com/s/newscycle/v13/G28Ny31cr5orMqEQy6ljtwJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/newscycle/v13/xyMAr8VfiUzIOvS1abHJO_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Niconne", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/niconne/v6/ZA-mFw2QNXodx5y7kfELBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Nixie One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/nixieone/v7/h6kQfmzm0Shdnp3eswRaqQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Nobile", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/nobile/v7/9p6M-Yrg_r_QPmSD1skrOg.ttf", "regular" => "http://fonts.gstatic.com/s/nobile/v7/lC_lPi1ddtN38iXTCRh6ow.ttf", "italic" => "http://fonts.gstatic.com/s/nobile/v7/vGmrpKzWQQSrb-PR6FWBIA.ttf", "700italic" => "http://fonts.gstatic.com/s/nobile/v7/oQ1eYPaXV638N03KvsNvyKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Nokora", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("700" => "http://fonts.gstatic.com/s/nokora/v9/QMqqa4QEOhQpiig3cAPmbQ.ttf", "regular" => "http://fonts.gstatic.com/s/nokora/v9/dRyz1JfnyKPNaRcBNX9F9A.ttf")), array("kind" => "webfonts#webfont", "family" => "Norican", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/norican/v4/SHnSqhYAWG5sZTWcPzEHig.ttf")), array("kind" => "webfonts#webfont", "family" => "Nosifer", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/nosifer/v5/7eJGoIuHRrtcG00j6CptSA.ttf")), array("kind" => "webfonts#webfont", "family" => "Nothing You Could Do", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/nothingyoucoulddo/v6/jpk1K3jbJoyoK0XKaSyQAf-TpkXjXYGWiJZAEtBRjPU.ttf")), array("kind" => "webfonts#webfont", "family" => "Noticia Text", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext", "vietnamese"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/noticiatext/v6/pEko-RqEtp45bE2P80AAKUD2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/noticiatext/v6/wdyV6x3eKpdeUPQ7BJ5uUC3USBnSvpkopQaUR-2r7iU.ttf", "italic" => "http://fonts.gstatic.com/s/noticiatext/v6/dAuxVpkYE_Q_IwIm6elsKPMZXuCXbOrAvx5R0IT5Oyo.ttf", "700italic" => "http://fonts.gstatic.com/s/noticiatext/v6/-rQ7V8ARjf28_b7kRa0JuvAs9-1nE9qOqhChW0m4nDE.ttf")), array("kind" => "webfonts#webfont", "family" => "Noto Sans", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "devanagari", "latin-ext", "cyrillic", "greek-ext", "vietnamese"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/notosans/v6/PIbvSEyHEdL91QLOQRnZ1y3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/notosans/v6/0Ue9FiUJwVhi4NGfHJS5uA.ttf", "italic" => "http://fonts.gstatic.com/s/notosans/v6/dLcNKMgJ1H5RVoZFraDz0qCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/notosans/v6/9Z3uUWMRR7crzm1TjRicDne1Pd76Vl7zRpE7NLJQ7XU.ttf")), array("kind" => "webfonts#webfont", "family" => "Noto Serif", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext", "vietnamese"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/notoserif/v4/lJAvZoKA5NttpPc9yc6lPQJKKGfqHaYFsRG-T3ceEVo.ttf", "regular" => "http://fonts.gstatic.com/s/notoserif/v4/zW6mc7bC1CWw8dH0yxY8JfesZW2xOQ-xsNqO47m55DA.ttf", "italic" => "http://fonts.gstatic.com/s/notoserif/v4/HQXBIwLHsOJCNEQeX9kNzy3USBnSvpkopQaUR-2r7iU.ttf", "700italic" => "http://fonts.gstatic.com/s/notoserif/v4/Wreg0Be4tcFGM2t6VWytvED2ttfZwueP-QU272T9-k4.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Cut", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novacut/v8/6q12jWcBvj0KO2cMRP97tA.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Flat", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novaflat/v8/pK7a0CoGzI684qe_XSHBqQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("greek", "latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novamono/v7/6-SChr5ZIaaasJFBkgrLNw.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Oval", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novaoval/v8/VuukVpKP8BwUf8o9W5LYQQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Round", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novaround/v8/7-cK3Ari_8XYYFgVMxVhDvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Script", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novascript/v8/dEvxQDLgx1M1TKY-NmBWYaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Slim", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novaslim/v8/rPYXC81_VL2EW-4CzBX65g.ttf")), array("kind" => "webfonts#webfont", "family" => "Nova Square", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/novasquare/v8/BcBzXoaDzYX78rquGXVuSqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Numans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/numans/v6/g5snI2p6OEjjTNmTHyBdiQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Nunito", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/nunito/v7/zXQvrWBJqUooM7Xv98MrQw.ttf", "700" => "http://fonts.gstatic.com/s/nunito/v7/aEdlqgMuYbpe4U3TnqOQMA.ttf", "regular" => "http://fonts.gstatic.com/s/nunito/v7/ySZTeT3IuzJj0GK6uGpbBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Odor Mean Chey", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/odormeanchey/v8/GK3E7EjPoBkeZhYshGFo0eVKG8sq4NyGgdteJLvqLDs.ttf")), array("kind" => "webfonts#webfont", "family" => "Offside", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/offside/v4/v0C913SB8wqQUvcu1faUqw.ttf")), array("kind" => "webfonts#webfont", "family" => "Old Standard TT", "category" => "serif", "variants" => array("regular", "italic", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/oldstandardtt/v7/5Ywdce7XEbTSbxs__4X1_HJqbZqK7TdZ58X80Q_Lw8Y.ttf", "regular" => "http://fonts.gstatic.com/s/oldstandardtt/v7/n6RTCDcIPWSE8UNBa4k-DLcB5jyhm1VsHs65c3QNDr0.ttf", "italic" => "http://fonts.gstatic.com/s/oldstandardtt/v7/QQT_AUSp4AV4dpJfIN7U5PWrQzeMtsHf8QsWQ2cZg3c.ttf")), array("kind" => "webfonts#webfont", "family" => "Oldenburg", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/oldenburg/v4/dqA_M_uoCVXZbCO-oKBTnQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Oleo Script", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/oleoscript/v5/hudNQFKFl98JdNnlo363fne1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/oleoscript/v5/21stZcmPyzbQVXtmGegyqKCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Oleo Script Swash Caps", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/oleoscriptswashcaps/v4/HMO3ftxA9AU5floml9c755reFYaXZ4zuJXJ8fr8OO1g.ttf", "regular" => "http://fonts.gstatic.com/s/oleoscriptswashcaps/v4/vdWhGqsBUAP-FF3NOYTe4iMF4kXAPemmyaDpMXQ31P0.ttf")), array("kind" => "webfonts#webfont", "family" => "Open Sans", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "800", "800italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext", "vietnamese"), "version" => "v13", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTS3USBnSvpkopQaUR-2r7iU.ttf", "600" => "http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSi3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzC3USBnSvpkopQaUR-2r7iU.ttf", "800" => "http://fonts.gstatic.com/s/opensans/v13/EInbV5DfGHOiMmvb1Xr-hi3USBnSvpkopQaUR-2r7iU.ttf", "300italic" => "http://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxi9-WlPSxbfiI49GsXo3q0g.ttf", "regular" => "http://fonts.gstatic.com/s/opensans/v13/IgZJs4-7SA1XX_edsoXWog.ttf", "italic" => "http://fonts.gstatic.com/s/opensans/v13/O4NhV7_qs9r9seTo7fnsVKCWcynf_cDxXwCLxiixG1c.ttf", "600italic" => "http://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxpZ7xm-Bj30Bj2KNdXDzSZg.ttf", "700italic" => "http://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxne1Pd76Vl7zRpE7NLJQ7XU.ttf", "800italic" => "http://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxg89PwPrYLaRFJ-HNCU9NbA.ttf")), array("kind" => "webfonts#webfont", "family" => "Open Sans Condensed", "category" => "sans-serif", "variants" => array("300", "300italic", "700"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext", "vietnamese"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/opensanscondensed/v10/gk5FxslNkTTHtojXrkp-xEMwSSh38KQVJx4ABtsZTnA.ttf", "700" => "http://fonts.gstatic.com/s/opensanscondensed/v10/gk5FxslNkTTHtojXrkp-xBEM87DM3yorPOrvA-vB930.ttf", "300italic" => "http://fonts.gstatic.com/s/opensanscondensed/v10/jIXlqT1WKafUSwj6s9AzV4_LkTZ_uhAwfmGJ084hlvM.ttf")), array("kind" => "webfonts#webfont", "family" => "Oranienbaum", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/oranienbaum/v5/M98jYwCSn0PaFhXXgviCoaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Orbitron", "category" => "sans-serif", "variants" => array("regular", "500", "700", "900"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/orbitron/v7/p-y_ffzMdo5JN_7ia0vYEqCWcynf_cDxXwCLxiixG1c.ttf", "700" => "http://fonts.gstatic.com/s/orbitron/v7/PS9_6SLkY1Y6OgPO3APr6qCWcynf_cDxXwCLxiixG1c.ttf", "900" => "http://fonts.gstatic.com/s/orbitron/v7/2I3-8i9hT294TE_pyjy9SaCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/orbitron/v7/DY8swouAZjR3RaUPRf0HDQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Oregano", "category" => "display", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/oregano/v4/UiLhqNixVv2EpjRoBG6axA.ttf", "italic" => "http://fonts.gstatic.com/s/oregano/v4/_iwqGEht6XsAuEaCbYG64Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Orienta", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/orienta/v4/_NKSk93mMs0xsqtfjCsB3Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Original Surfer", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/originalsurfer/v5/gdHw6HpSIN4D6Xt7pi1-qIkEz33TDwAZczo_6fY7eg0.ttf")), array("kind" => "webfonts#webfont", "family" => "Oswald", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/oswald/v10/y3tZpCdiRD4oNRRYFcAR5Q.ttf", "700" => "http://fonts.gstatic.com/s/oswald/v10/7wj8ldV_5Ti37rHa0m1DDw.ttf", "regular" => "http://fonts.gstatic.com/s/oswald/v10/uLEd2g2vJglLPfsBF91DCg.ttf")), array("kind" => "webfonts#webfont", "family" => "Over the Rainbow", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/overtherainbow/v7/6gp-gkpI2kie2dHQQLM2jQBdxkZd83xOSx-PAQ2QmiI.ttf")), array("kind" => "webfonts#webfont", "family" => "Overlock", "category" => "display", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/overlock/v5/Fexr8SqXM8Bm_gEVUA7AKaCWcynf_cDxXwCLxiixG1c.ttf", "900" => "http://fonts.gstatic.com/s/overlock/v5/YPJCVTT8ZbG3899l_-KIGqCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/overlock/v5/Z8oYsGi88-E1cUB8YBFMAg.ttf", "italic" => "http://fonts.gstatic.com/s/overlock/v5/rq6EacukHROOBrFrK_zF6_esZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/overlock/v5/wFWnYgeXKYBks6gEUwYnfAJKKGfqHaYFsRG-T3ceEVo.ttf", "900italic" => "http://fonts.gstatic.com/s/overlock/v5/iOZhxT2zlg7W5ij_lb-oDp0EAVxt0G0biEntp43Qt6E.ttf")), array("kind" => "webfonts#webfont", "family" => "Overlock SC", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/overlocksc/v5/8D7HYDsvS_g1GhBnlHzgzaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Ovo", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ovo/v7/mFg27dimu3s9t09qjCwB1g.ttf")), array("kind" => "webfonts#webfont", "family" => "Oxygen", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/oxygen/v5/lZ31r0bR1Bzt_DfGZu1S8A.ttf", "700" => "http://fonts.gstatic.com/s/oxygen/v5/yLqkmDwuNtt5pSqsJmhyrg.ttf", "regular" => "http://fonts.gstatic.com/s/oxygen/v5/uhoyAE7XlQL22abzQieHjw.ttf")), array("kind" => "webfonts#webfont", "family" => "Oxygen Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/oxygenmono/v4/DigTu7k4b7OmM8ubt1Qza6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ptmono/v4/QUbM8H9yJK5NhpQ0REO6Wg.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Sans", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ptsans/v8/F51BEgHuR0tYHxF0bD4vwvesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/ptsans/v8/UFoEz2uiuMypUGZL1NKoeg.ttf", "italic" => "http://fonts.gstatic.com/s/ptsans/v8/yls9EYWOd496wiu7qzfgNg.ttf", "700italic" => "http://fonts.gstatic.com/s/ptsans/v8/lILlYDvubYemzYzN7GbLkC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Sans Caption", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ptsanscaption/v9/Q-gJrFokeE7JydPpxASt25tc0eyfI4QDEsobEEpk_hA.ttf", "regular" => "http://fonts.gstatic.com/s/ptsanscaption/v9/OXYTDOzBcXU8MTNBvBHeSW8by34Z3mUMtM-o4y-SHCY.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Sans Narrow", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ptsansnarrow/v7/Q_pTky3Sc3ubRibGToTAYsLtdzs3iyjn_YuT226ZsLU.ttf", "regular" => "http://fonts.gstatic.com/s/ptsansnarrow/v7/UyYrYy3ltEffJV9QueSi4ZTvAuddT2xDMbdz0mdLyZY.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Serif", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ptserif/v8/kyZw18tqQ5if-_wpmxxOeKCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/ptserif/v8/sAo427rn3-QL9sWCbMZXhA.ttf", "italic" => "http://fonts.gstatic.com/s/ptserif/v8/9khWhKzhpkH0OkNnBKS3n_esZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/ptserif/v8/Foydq9xJp--nfYIx2TBz9QJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "PT Serif Caption", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ptserifcaption/v8/7xkFOeTxxO1GMC1suOUYWVsRioCqs5fohhaYel24W3k.ttf", "italic" => "http://fonts.gstatic.com/s/ptserifcaption/v8/0kfPsmrmTSgiec7u_Wa0DB1mqvzPHelJwRcF_s_EUM0.ttf")), array("kind" => "webfonts#webfont", "family" => "Pacifico", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pacifico/v7/GIrpeRY1r5CzbfL8r182lw.ttf")), array("kind" => "webfonts#webfont", "family" => "Palanquin", "category" => "sans-serif", "variants" => array("100", "200", "300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/palanquin/v1/Hu0eGDVGK_g4saUFu6AK3KCWcynf_cDxXwCLxiixG1c.ttf", "200" => "http://fonts.gstatic.com/s/palanquin/v1/pqXYXD7-VI5ezTjeqQOcyC3USBnSvpkopQaUR-2r7iU.ttf", "300" => "http://fonts.gstatic.com/s/palanquin/v1/c0-J5OCAagpFCKkKraz-Ey3USBnSvpkopQaUR-2r7iU.ttf", "500" => "http://fonts.gstatic.com/s/palanquin/v1/wLvvkEcZMKy95afLWh2EfC3USBnSvpkopQaUR-2r7iU.ttf", "600" => "http://fonts.gstatic.com/s/palanquin/v1/405UIAv95_yZkCECrH6y-i3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/palanquin/v1/-UtkePo3NFvxEN3rGCtTvi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/palanquin/v1/xCwBUoAEV0kzCDwerAZ0Aw.ttf")), array("kind" => "webfonts#webfont", "family" => "Palanquin Dark", "category" => "sans-serif", "variants" => array("regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/palanquindark/v1/iXyBGf5UbFUu6BG8hOY-maMZTo-EwKMRQt3RWHocLi0.ttf", "600" => "http://fonts.gstatic.com/s/palanquindark/v1/iXyBGf5UbFUu6BG8hOY-mVNxaunw8i4Gywrk2SigRnk.ttf", "700" => "http://fonts.gstatic.com/s/palanquindark/v1/iXyBGf5UbFUu6BG8hOY-mWToair6W0TEE44XrlfKbiM.ttf", "regular" => "http://fonts.gstatic.com/s/palanquindark/v1/PamTqrrgbBh_M3702w39rOfChn3JSg5yz_Q_xmrKQN0.ttf")), array("kind" => "webfonts#webfont", "family" => "Paprika", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/paprika/v4/b-VpyoRSieBdB5BPJVF8HQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Parisienne", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/parisienne/v4/TW74B5QISJNx9moxGlmJfvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Passero One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/passeroone/v8/Yc-7nH5deCCv9Ed0MMnAQqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Passion One", "category" => "display", "variants" => array("regular", "700", "900"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/passionone/v6/feOcYDy2R-f3Ysy72PYJ2ne1Pd76Vl7zRpE7NLJQ7XU.ttf", "900" => "http://fonts.gstatic.com/s/passionone/v6/feOcYDy2R-f3Ysy72PYJ2ienaqEuufTBk9XMKnKmgDA.ttf", "regular" => "http://fonts.gstatic.com/s/passionone/v6/1UIK1tg3bKJ4J3o35M4heqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Pathway Gothic One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pathwaygothicone/v4/Lqv9ztoTUV8Q0FmQZzPqaA6A6xIYD7vYcYDop1i-K-c.ttf")), array("kind" => "webfonts#webfont", "family" => "Patrick Hand", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "vietnamese"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/patrickhand/v10/9BG3JJgt_HlF3NpEUehL0C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Patrick Hand SC", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "vietnamese"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/patrickhandsc/v4/OYFWCgfCR-7uHIovjUZXsbAgSRh1LpJXlLfl8IbsmHg.ttf")), array("kind" => "webfonts#webfont", "family" => "Patua One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/patuaone/v6/njZwotTYjswR4qdhsW-kJw.ttf")), array("kind" => "webfonts#webfont", "family" => "Paytone One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/paytoneone/v8/3WCxC7JAJjQHQVoIE0ZwvqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Peddana", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/peddana/v4/zaSZuj_GhmC8AOTugOROnA.ttf")), array("kind" => "webfonts#webfont", "family" => "Peralta", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/peralta/v4/cTJX5KEuc0GKRU9NXSm-8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Permanent Marker", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/permanentmarker/v5/9vYsg5VgPHKK8SXYbf3sMol14xj5tdg9OHF8w4E7StQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Petit Formal Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/petitformalscript/v4/OEZwr2-ovBsq2n3ACCKoEvVPl2Gjtxj0D6F7QLy1VQc.ttf")), array("kind" => "webfonts#webfont", "family" => "Petrona", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/petrona/v5/nnQwxlP6dhrGovYEFtemTg.ttf")), array("kind" => "webfonts#webfont", "family" => "Philosopher", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/philosopher/v7/napvkewXG9Gqby5vwGHICHe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/philosopher/v7/oZLTrB9jmJsyV0u_T0TKEaCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/philosopher/v7/_9Hnc_gz9k7Qq6uKaeHKmUeOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/philosopher/v7/PuKlryTcvTj7-qZWfLCFIM_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Piedra", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/piedra/v5/owf-AvEEyAj9LJ2tVZ_3Mw.ttf")), array("kind" => "webfonts#webfont", "family" => "Pinyon Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pinyonscript/v6/TzghnhfCn7TuE73f-CBQ0CeUSrabuTpOsMEiRLtKwk0.ttf")), array("kind" => "webfonts#webfont", "family" => "Pirata One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pirataone/v4/WnbD86B4vB2ckYcL7oxuhvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Plaster", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/plaster/v7/O4QG9Z5116CXyfJdR9zxLw.ttf")), array("kind" => "webfonts#webfont", "family" => "Play", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/play/v7/crPhg6I0alLI-MpB3vW-zw.ttf", "regular" => "http://fonts.gstatic.com/s/play/v7/GWvfObW8LhtsOX333MCpBg.ttf")), array("kind" => "webfonts#webfont", "family" => "Playball", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/playball/v6/3hOFiQm_EUzycTpcN9uz4w.ttf")), array("kind" => "webfonts#webfont", "family" => "Playfair Display", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/playfairdisplay/v10/UC3ZEjagJi85gF9qFaBgICsv6SrURqJprbhH_C1Mw8w.ttf", "900" => "http://fonts.gstatic.com/s/playfairdisplay/v10/UC3ZEjagJi85gF9qFaBgIKqwMe2wjvZrAR44M0BJZ48.ttf", "regular" => "http://fonts.gstatic.com/s/playfairdisplay/v10/2NBgzUtEeyB-Xtpr9bm1CV6uyC_qD11hrFQ6EGgTJWI.ttf", "italic" => "http://fonts.gstatic.com/s/playfairdisplay/v10/9MkijrV-dEJ0-_NWV7E6NzMsbnvDNEBX25F5HWk9AhI.ttf", "700italic" => "http://fonts.gstatic.com/s/playfairdisplay/v10/n7G4PqJvFP2Kubl0VBLDECsYW3XoOVcYyYdp9NzzS9E.ttf", "900italic" => "http://fonts.gstatic.com/s/playfairdisplay/v10/n7G4PqJvFP2Kubl0VBLDEC0JfJ4xmm7j1kL6D7mPxrA.ttf")), array("kind" => "webfonts#webfont", "family" => "Playfair Display SC", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/5ggqGkvWJU_TtW2W8cEubA-Amcyomnuy4WsCiPxGHjw.ttf", "900" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/5ggqGkvWJU_TtW2W8cEubKXL3C32k275YmX_AcBPZ7w.ttf", "regular" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/G0-tvBxd4eQRdwFKB8dRkcpjYTDWIvcAwAccqeW9uNM.ttf", "italic" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/myuYiFR-4NTrUT4w6TKls2klJsJYggW8rlNoTOTuau0.ttf", "700italic" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/6X0OQrQhEEnPo56RalREX4krgPi80XvBcbTwmz-rgmU.ttf", "900italic" => "http://fonts.gstatic.com/s/playfairdisplaysc/v5/6X0OQrQhEEnPo56RalREX8Zag2q3ssKz8uH1RU4a9gs.ttf")), array("kind" => "webfonts#webfont", "family" => "Podkova", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/podkova/v8/SqW4aa8m_KVrOgYSydQ33vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/podkova/v8/eylljyGVfB8ZUQjYY3WZRQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Poiret One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/poiretone/v4/dWcYed048E5gHGDIt8i1CPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Poller One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pollerone/v6/dkctmDlTPcZ6boC8662RA_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Poly", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/poly/v7/bcMAuiacS2qkd54BcwW6_Q.ttf", "italic" => "http://fonts.gstatic.com/s/poly/v7/Zkx-eIlZSjKUrPGYhV5PeA.ttf")), array("kind" => "webfonts#webfont", "family" => "Pompiere", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pompiere/v6/o_va2p9CD5JfmFohAkGZIA.ttf")), array("kind" => "webfonts#webfont", "family" => "Pontano Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pontanosans/v4/gTHiwyxi6S7iiHpqAoiE3C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Poppins", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/poppins/v1/VIeViZ2fPtYBt3B2fQZplvesZW2xOQ-xsNqO47m55DA.ttf", "500" => "http://fonts.gstatic.com/s/poppins/v1/4WGKlFyjcmCFVl8pRsgZ9vesZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/poppins/v1/-zOABrCWORC3lyDh-ajNnPesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/poppins/v1/8JitanEsk5aDh7mDYs-fYfesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/poppins/v1/hlvAxH6aIdOjWlLzgm0jqg.ttf")), array("kind" => "webfonts#webfont", "family" => "Port Lligat Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/portlligatsans/v5/CUEdhRk7oC7up0p6t0g4P6mASEpx5X0ZpsuJOuvfOGA.ttf")), array("kind" => "webfonts#webfont", "family" => "Port Lligat Slab", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/portlligatslab/v5/CUEdhRk7oC7up0p6t0g4PxLSPACXvawUYCBEnHsOe30.ttf")), array("kind" => "webfonts#webfont", "family" => "Pragati Narrow", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v2", "lastModified" => "2015-06-10", "files" => array("700" => "http://fonts.gstatic.com/s/pragatinarrow/v2/DnSI1zRkc0CY-hI5SC3q3MLtdzs3iyjn_YuT226ZsLU.ttf", "regular" => "http://fonts.gstatic.com/s/pragatinarrow/v2/HzG2TfC862qPNsZsV_djPpTvAuddT2xDMbdz0mdLyZY.ttf")), array("kind" => "webfonts#webfont", "family" => "Prata", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/prata/v6/3gmx8r842loRRm9iQkCDGg.ttf")), array("kind" => "webfonts#webfont", "family" => "Preahvihear", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/preahvihear/v8/82tDI-xTc53CxxOzEG4hDaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Press Start 2P", "category" => "display", "variants" => array("regular"), "subsets" => array("greek", "latin", "latin-ext", "cyrillic"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/pressstart2p/v4/8Lg6LX8-ntOHUQnvQ0E7o1jfl3W46Sz5gOkEVhcFWF4.ttf")), array("kind" => "webfonts#webfont", "family" => "Princess Sofia", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/princesssofia/v4/8g5l8r9BM0t1QsXLTajDe-wjmA7ie-lFcByzHGRhCIg.ttf")), array("kind" => "webfonts#webfont", "family" => "Prociono", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/prociono/v6/43ZYDHWogdFeNBWTl6ksmw.ttf")), array("kind" => "webfonts#webfont", "family" => "Prosto One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/prostoone/v5/bsqnAElAqk9kX7eABTRFJPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Puritan", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/puritan/v8/pJS2SdwI0SCiVnO0iQSFT_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/puritan/v8/wv_RtgVBSCn-or2MC0n4Kg.ttf", "italic" => "http://fonts.gstatic.com/s/puritan/v8/BqZX8Tp200LeMv1KlzXgLQ.ttf", "700italic" => "http://fonts.gstatic.com/s/puritan/v8/rFG3XkMJL75nUNZwCEIJqC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Purple Purse", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/purplepurse/v5/Q5heFUrdmei9axbMITxxxS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Quando", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-03-22", "files" => array("regular" => "http://fonts.gstatic.com/s/quando/v5/03nDiEZuO2-h3xvtG6UmHg.ttf")), array("kind" => "webfonts#webfont", "family" => "Quantico", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/quantico/v5/OVZZzjcZ3Hkq2ojVcUtDjaCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/quantico/v5/pwSnP8Xpaix2rIz99HrSlQ.ttf", "italic" => "http://fonts.gstatic.com/s/quantico/v5/KQhDd2OsZi6HiITUeFQ2U_esZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/quantico/v5/HeCYRcZbdRso3ZUu01ELbQJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "Quattrocento", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/quattrocento/v7/Uvi-cRwyvqFpl9j3oT2mqkD2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/quattrocento/v7/WZDISdyil4HsmirlOdBRFC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Quattrocento Sans", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/quattrocentosans/v8/tXSgPxDl7Lk8Zr_5qX8FIbqxG25nQNOioCZSK4sU-CA.ttf", "regular" => "http://fonts.gstatic.com/s/quattrocentosans/v8/efd6FGWWGX5Z3ztwLBrG9eAj_ty82iuwwDTNEYXGiyQ.ttf", "italic" => "http://fonts.gstatic.com/s/quattrocentosans/v8/8PXYbvM__bjl0rBnKiByg532VBCoA_HLsn85tSWZmdo.ttf", "700italic" => "http://fonts.gstatic.com/s/quattrocentosans/v8/8N1PdXpbG6RtFvTjl-5E7buqAJxizi8Dk_SK5et7kMg.ttf")), array("kind" => "webfonts#webfont", "family" => "Questrial", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/questrial/v6/MoHHaw_WwNs_hd9ob1zTVw.ttf")), array("kind" => "webfonts#webfont", "family" => "Quicksand", "category" => "sans-serif", "variants" => array("300", "regular", "700"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/quicksand/v5/qhfoJiLu10kFjChCCTvGlC3USBnSvpkopQaUR-2r7iU.ttf", "700" => "http://fonts.gstatic.com/s/quicksand/v5/32nyIRHyCu6iqEka_hbKsi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/quicksand/v5/Ngv3fIJjKB7sD-bTUGIFCA.ttf")), array("kind" => "webfonts#webfont", "family" => "Quintessential", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/quintessential/v4/mmk6ioesnTrEky_Zb92E5s02lXbtMOtZWfuxKeMZO8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Qwigley", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/qwigley/v6/aDqxws-KubFID85TZHFouw.ttf")), array("kind" => "webfonts#webfont", "family" => "Racing Sans One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/racingsansone/v4/1r3DpWaCiT7y3PD4KgkNyDjVlsJB_M_Q_LtZxsoxvlw.ttf")), array("kind" => "webfonts#webfont", "family" => "Radley", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/radley/v9/FgE9di09a-mXGzAIyI6Q9Q.ttf", "italic" => "http://fonts.gstatic.com/s/radley/v9/Z_JcACuPAOO2f9kzQcGRug.ttf")), array("kind" => "webfonts#webfont", "family" => "Rajdhani", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/rajdhani/v5/9pItuEhQZVGdq8spnHTku6CWcynf_cDxXwCLxiixG1c.ttf", "500" => "http://fonts.gstatic.com/s/rajdhani/v5/nd_5ZpVwm710HcLual0fBqCWcynf_cDxXwCLxiixG1c.ttf", "600" => "http://fonts.gstatic.com/s/rajdhani/v5/5fnmZahByDeTtgxIiqbJSaCWcynf_cDxXwCLxiixG1c.ttf", "700" => "http://fonts.gstatic.com/s/rajdhani/v5/UBK6d2Hg7X7wYLlF92aXW6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/rajdhani/v5/Wfy5zp4PGFAFS7-Wetehzw.ttf")), array("kind" => "webfonts#webfont", "family" => "Raleway", "category" => "sans-serif", "variants" => array("100", "100italic", "200", "200italic", "300", "300italic", "regular", "italic", "500", "500italic", "600", "600italic", "700", "700italic", "800", "800italic", "900", "900italic"), "subsets" => array("latin", "latin-ext"), "version" => "v10", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/raleway/v10/UDfD6oxBaBnmFJwQ7XAFNw.ttf", "200" => "http://fonts.gstatic.com/s/raleway/v10/LAQwev4hdCtYkOYX4Oc7nPesZW2xOQ-xsNqO47m55DA.ttf", "300" => "http://fonts.gstatic.com/s/raleway/v10/2VvSZU2kb4DZwFfRM4fLQPesZW2xOQ-xsNqO47m55DA.ttf", "500" => "http://fonts.gstatic.com/s/raleway/v10/348gn6PEmbLDWlHbbV15d_esZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/raleway/v10/M7no6oPkwKYJkedjB1wqEvesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/raleway/v10/VGEV9-DrblisWOWLbK-1XPesZW2xOQ-xsNqO47m55DA.ttf", "800" => "http://fonts.gstatic.com/s/raleway/v10/mMh0JrsYMXcLO69jgJwpUvesZW2xOQ-xsNqO47m55DA.ttf", "900" => "http://fonts.gstatic.com/s/raleway/v10/ajQQGcDBLcyLpaUfD76UuPesZW2xOQ-xsNqO47m55DA.ttf", "100italic" => "http://fonts.gstatic.com/s/raleway/v10/hUpHtml6IPNuUR-FwVi2UKCWcynf_cDxXwCLxiixG1c.ttf", "200italic" => "http://fonts.gstatic.com/s/raleway/v10/N2DIbZG4399cPGfifZUEQi3USBnSvpkopQaUR-2r7iU.ttf", "300italic" => "http://fonts.gstatic.com/s/raleway/v10/TVSB8ogXDKMcnAAJ5CqrUi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/raleway/v10/_dCzxpXzIS3sL-gdJWAP8A.ttf", "italic" => "http://fonts.gstatic.com/s/raleway/v10/utU2m1gdZSfuQpArSy5Dbw.ttf", "500italic" => "http://fonts.gstatic.com/s/raleway/v10/S7vGLZZ40c85SJgiptJGVy3USBnSvpkopQaUR-2r7iU.ttf", "600italic" => "http://fonts.gstatic.com/s/raleway/v10/OY22yoG8EJ3IN_muVWm29C3USBnSvpkopQaUR-2r7iU.ttf", "700italic" => "http://fonts.gstatic.com/s/raleway/v10/lFxvRPuGFG5ktd7P0WRwKi3USBnSvpkopQaUR-2r7iU.ttf", "800italic" => "http://fonts.gstatic.com/s/raleway/v10/us4LjTCmlYgh3W8CKujEJi3USBnSvpkopQaUR-2r7iU.ttf", "900italic" => "http://fonts.gstatic.com/s/raleway/v10/oY2RadnkHfshu5f0FLsgVS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Raleway Dots", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ralewaydots/v4/lhLgmWCRcyz-QXo8LCzTfC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Ramabhadra", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ramabhadra/v5/JyhxLXRVQChLDGADS_c5MPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Ramaraja", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ramaraja/v1/XIqzxFapVczstBedHdQTiw.ttf")), array("kind" => "webfonts#webfont", "family" => "Rambla", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/rambla/v4/C5VZH8BxQKmnBuoC00UPpw.ttf", "regular" => "http://fonts.gstatic.com/s/rambla/v4/YaTmpvm5gFg_ShJKTQmdzg.ttf", "italic" => "http://fonts.gstatic.com/s/rambla/v4/mhUgsKmp0qw3uATdDDAuwA.ttf", "700italic" => "http://fonts.gstatic.com/s/rambla/v4/ziMzUZya6QahrKONSI1TzqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Rammetto One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rammettoone/v5/mh0uQ1tV8QgSx9v_KyEYPC3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Ranchers", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ranchers/v4/9ya8CZYhqT66VERfjQ7eLA.ttf")), array("kind" => "webfonts#webfont", "family" => "Rancho", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rancho/v6/ekp3-4QykC4--6KaslRgHA.ttf")), array("kind" => "webfonts#webfont", "family" => "Ranga", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ranga/v1/h8G_gEUH7vHKH-NkjAs34A.ttf", "regular" => "http://fonts.gstatic.com/s/ranga/v1/xpW6zFTNzY1JykoBIqE1Zg.ttf")), array("kind" => "webfonts#webfont", "family" => "Rationale", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rationale/v7/7M2eN-di0NGLQse7HzJRfg.ttf")), array("kind" => "webfonts#webfont", "family" => "Ravi Prakash", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/raviprakash/v3/8EzbM7Rymjk25jWeHxbO6C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Redressed", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/redressed/v6/3aZ5sTBppH3oSm5SabegtA.ttf")), array("kind" => "webfonts#webfont", "family" => "Reenie Beanie", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/reeniebeanie/v7/ljpKc6CdXusL1cnGUSamX4jjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Revalia", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/revalia/v4/1TKw66fF5_poiL0Ktgo4_A.ttf")), array("kind" => "webfonts#webfont", "family" => "Rhodium Libre", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-06-03", "files" => array("regular" => "http://fonts.gstatic.com/s/rhodiumlibre/v1/Vxr7A4-xE2zsBDDI8BcseIjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Ribeye", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ribeye/v5/e5w3VE8HnWBln4Ll6lUj3Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Ribeye Marrow", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ribeyemarrow/v6/q7cBSA-4ErAXBCDFPrhlY0cTNmV93fYG7UKgsLQNQWs.ttf")), array("kind" => "webfonts#webfont", "family" => "Righteous", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/righteous/v5/0nRRWM_gCGCt2S-BCfN8WQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Risque", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/risque/v4/92RnElGnl8yHP97-KV3Fyg.ttf")), array("kind" => "webfonts#webfont", "family" => "Roboto", "category" => "sans-serif", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "900", "900italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext", "vietnamese"), "version" => "v15", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/roboto/v15/7MygqTe2zs9YkP0adA9QQQ.ttf", "300" => "http://fonts.gstatic.com/s/roboto/v15/dtpHsbgPEm2lVWciJZ0P-A.ttf", "500" => "http://fonts.gstatic.com/s/roboto/v15/Uxzkqj-MIMWle-XP2pDNAA.ttf", "700" => "http://fonts.gstatic.com/s/roboto/v15/bdHGHleUa-ndQCOrdpfxfw.ttf", "900" => "http://fonts.gstatic.com/s/roboto/v15/H1vB34nOKWXqzKotq25pcg.ttf", "100italic" => "http://fonts.gstatic.com/s/roboto/v15/T1xnudodhcgwXCmZQ490TPesZW2xOQ-xsNqO47m55DA.ttf", "300italic" => "http://fonts.gstatic.com/s/roboto/v15/iE8HhaRzdhPxC93dOdA056CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/roboto/v15/W5F8_SL0XFawnjxHGsZjJA.ttf", "italic" => "http://fonts.gstatic.com/s/roboto/v15/hcKoSgxdnKlbH5dlTwKbow.ttf", "500italic" => "http://fonts.gstatic.com/s/roboto/v15/daIfzbEw-lbjMyv4rMUUTqCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/roboto/v15/owYYXKukxFDFjr0ZO8NXh6CWcynf_cDxXwCLxiixG1c.ttf", "900italic" => "http://fonts.gstatic.com/s/roboto/v15/b9PWBSMHrT2zM5FgUdtu0aCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Roboto Condensed", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext", "vietnamese"), "version" => "v13", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/robotocondensed/v13/b9QBgL0iMZfDSpmcXcE8nJRhFVcex_hajThhFkHyhYk.ttf", "700" => "http://fonts.gstatic.com/s/robotocondensed/v13/b9QBgL0iMZfDSpmcXcE8nPOYkGiSOYDq_T7HbIOV1hA.ttf", "300italic" => "http://fonts.gstatic.com/s/robotocondensed/v13/mg0cGfGRUERshzBlvqxeAPYa9bgCHecWXGgisnodcS0.ttf", "regular" => "http://fonts.gstatic.com/s/robotocondensed/v13/Zd2E9abXLFGSr9G3YK2MsKDbm6fPDOZJsR8PmdG62gY.ttf", "italic" => "http://fonts.gstatic.com/s/robotocondensed/v13/BP5K8ZAJv9qEbmuFp8RpJY_eiqgTfYGaH0bJiUDZ5GA.ttf", "700italic" => "http://fonts.gstatic.com/s/robotocondensed/v13/mg0cGfGRUERshzBlvqxeAE2zk2RGRC3SlyyLLQfjS_8.ttf")), array("kind" => "webfonts#webfont", "family" => "Roboto Mono", "category" => "monospace", "variants" => array("100", "100italic", "300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext", "vietnamese"), "version" => "v4", "lastModified" => "2015-05-28", "files" => array("100" => "http://fonts.gstatic.com/s/robotomono/v4/aOIeRp72J9_Hp_8KwQ9M-YAWxXGWZ3yJw6KhWS7MxOk.ttf", "300" => "http://fonts.gstatic.com/s/robotomono/v4/N4duVc9C58uwPiY8_59Fzy9-WlPSxbfiI49GsXo3q0g.ttf", "500" => "http://fonts.gstatic.com/s/robotomono/v4/N4duVc9C58uwPiY8_59Fz8CNfqCYlB_eIx7H1TVXe60.ttf", "700" => "http://fonts.gstatic.com/s/robotomono/v4/N4duVc9C58uwPiY8_59Fz3e1Pd76Vl7zRpE7NLJQ7XU.ttf", "100italic" => "http://fonts.gstatic.com/s/robotomono/v4/rqQ1zSE-ZGCKVZgew-A9dgyDtfpXZi-8rXUZYR4dumU.ttf", "300italic" => "http://fonts.gstatic.com/s/robotomono/v4/1OsMuiiO6FCF2x67vzDKA2o9eWDfYYxG3A176Zl7aIg.ttf", "regular" => "http://fonts.gstatic.com/s/robotomono/v4/eJ4cxQe85Lo39t-LVoKa26CWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/robotomono/v4/mE0EPT_93c7f86_WQexR3EeOrDcLawS7-ssYqLr2Xp4.ttf", "500italic" => "http://fonts.gstatic.com/s/robotomono/v4/1OsMuiiO6FCF2x67vzDKA2nWRcJAYo5PSCx8UfGMHCI.ttf", "700italic" => "http://fonts.gstatic.com/s/robotomono/v4/1OsMuiiO6FCF2x67vzDKA8_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Roboto Slab", "category" => "serif", "variants" => array("100", "300", "regular", "700"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext", "vietnamese"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("100" => "http://fonts.gstatic.com/s/robotoslab/v6/MEz38VLIFL-t46JUtkIEgIAWxXGWZ3yJw6KhWS7MxOk.ttf", "300" => "http://fonts.gstatic.com/s/robotoslab/v6/dazS1PrQQuCxC3iOAJFEJS9-WlPSxbfiI49GsXo3q0g.ttf", "700" => "http://fonts.gstatic.com/s/robotoslab/v6/dazS1PrQQuCxC3iOAJFEJXe1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/robotoslab/v6/3__ulTNA7unv0UtplybPiqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Rochester", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rochester/v6/bnj8tmQBiOkdji_G_yvypg.ttf")), array("kind" => "webfonts#webfont", "family" => "Rock Salt", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rocksalt/v6/Zy7JF9h9WbhD9V3SFMQ1UQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Rokkitt", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v10", "lastModified" => "2016-02-24", "files" => array("700" => "http://fonts.gstatic.com/s/rokkitt/v10/gxlo-sr3rPmvgSixYog_ofesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/rokkitt/v10/GMA7Z_ToF8uSvpZAgnp_VQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Romanesco", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/romanesco/v5/2udIjUrpK_CPzYSxRVzD4Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Ropa Sans", "category" => "sans-serif", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ropasans/v5/Gba7ZzVBuhg6nX_AoSwlkQ.ttf", "italic" => "http://fonts.gstatic.com/s/ropasans/v5/V1zbhZQscNrh63dy5Jk2nqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Rosario", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v11", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/rosario/v11/nrS6PJvDWN42RP4TFWccd_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/rosario/v11/bL-cEh8dXtDupB2WccA2LA.ttf", "italic" => "http://fonts.gstatic.com/s/rosario/v11/pkflNy18HEuVVx4EOjeb_Q.ttf", "700italic" => "http://fonts.gstatic.com/s/rosario/v11/EOgFX2Va5VGrkhn_eDpIRS3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Rosarivo", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rosarivo/v4/EmPiINK0qyqc7KSsNjJamA.ttf", "italic" => "http://fonts.gstatic.com/s/rosarivo/v4/u3VuWsWQlX1pDqsbz4paNPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Rouge Script", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rougescript/v5/AgXDSqZJmy12qS0ixjs6Vy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Rozha One", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v2", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rozhaone/v2/PyrMHQ6lucEIxwKmhqsX8A.ttf")), array("kind" => "webfonts#webfont", "family" => "Rubik", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v1", "lastModified" => "2015-07-22", "files" => array("300" => "http://fonts.gstatic.com/s/rubik/v1/o1vXYO8YwDpErHEAPAxpOg.ttf", "500" => "http://fonts.gstatic.com/s/rubik/v1/D4HihERG27s-BJrQ4dvkbw.ttf", "700" => "http://fonts.gstatic.com/s/rubik/v1/m1GGHcpLe6Mb0_sAyjXE4g.ttf", "900" => "http://fonts.gstatic.com/s/rubik/v1/mOHfPRl5uP4vw7-5-dbnng.ttf", "300italic" => "http://fonts.gstatic.com/s/rubik/v1/NyXDvUhvZLSWiVfGa5KM-vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/rubik/v1/4sMyW_teKWHB3K8Hm-Il6A.ttf", "italic" => "http://fonts.gstatic.com/s/rubik/v1/elD65ddI0qvNcCh42b1Iqg.ttf", "500italic" => "http://fonts.gstatic.com/s/rubik/v1/0hcxMdoMbXtHiEM1ebdN6PesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/rubik/v1/R4g_rs714cUXVZcdnRdHw_esZW2xOQ-xsNqO47m55DA.ttf", "900italic" => "http://fonts.gstatic.com/s/rubik/v1/HH1b7kBbwInqlw8OQxRE5vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Rubik Mono One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rubikmonoone/v5/e_cupPtD4BrZzotubJD7UbAREgn5xbW23GEXXnhMQ5Y.ttf")), array("kind" => "webfonts#webfont", "family" => "Rubik One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rubikone/v4/Zs6TtctNRSIR8T5PO018rQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruda", "category" => "sans-serif", "variants" => array("regular", "700", "900"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ruda/v7/JABOu1SYOHcGXVejUq4w6g.ttf", "900" => "http://fonts.gstatic.com/s/ruda/v7/Uzusv-enCjoIrznlJJaBRw.ttf", "regular" => "http://fonts.gstatic.com/s/ruda/v7/jPEIPB7DM2DNK_uBGv2HGw.ttf")), array("kind" => "webfonts#webfont", "family" => "Rufina", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/rufina/v4/D0RUjXFr55y4MVZY2Ww_RA.ttf", "regular" => "http://fonts.gstatic.com/s/rufina/v4/s9IFr_fIemiohfZS-ZRDbQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruge Boogie", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rugeboogie/v7/U-TTmltL8aENLVIqYbI5QaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruluko", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ruluko/v4/lv4cMwJtrx_dzmlK5SDc1g.ttf")), array("kind" => "webfonts#webfont", "family" => "Rum Raisin", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rumraisin/v4/kDiL-ntDOEq26B7kYM7cx_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruslan Display", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ruslandisplay/v7/SREdhlyLNUfU1VssRBfs3rgH88D3l9N4auRNHrNS708.ttf")), array("kind" => "webfonts#webfont", "family" => "Russo One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/russoone/v5/zfwxZ--UhUc7FVfgT21PRQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Ruthie", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ruthie/v6/vJ2LorukHSbWYoEs5juivg.ttf")), array("kind" => "webfonts#webfont", "family" => "Rye", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/rye/v4/VUrJlpPpSZxspl3w_yNOrQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Sacramento", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sacramento/v4/_kv-qycSHMNdhjiv0Kj7BvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sahitya", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("700" => "http://fonts.gstatic.com/s/sahitya/v1/Zm5hNvMwUyN3tC4GMkH1l_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/sahitya/v1/wQWULcDbZqljdTfjOUtDvw.ttf")), array("kind" => "webfonts#webfont", "family" => "Sail", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-24", "files" => array("regular" => "http://fonts.gstatic.com/s/sail/v7/iuEoG6kt-bePGvtdpL0GUQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Salsa", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/salsa/v6/BnpUCBmYdvggScEPs5JbpA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sanchez", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sanchez/v4/BEL8ao-E2LJ5eHPLB2UAiw.ttf", "italic" => "http://fonts.gstatic.com/s/sanchez/v4/iSrhkWLexUZzDeNxNEHtzA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sancreek", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sancreek/v7/8ZacBMraWMvHly4IJI3esw.ttf")), array("kind" => "webfonts#webfont", "family" => "Sansita One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sansitaone/v6/xWqf68oB50JXqGIRR0h2hqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Sarala", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("700" => "http://fonts.gstatic.com/s/sarala/v1/hpc9cz8KYsazwq2In_oJYw.ttf", "regular" => "http://fonts.gstatic.com/s/sarala/v1/ohip9lixCHoBab7hTtgLnw.ttf")), array("kind" => "webfonts#webfont", "family" => "Sarina", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sarina/v5/XYtRfaSknHIU3NHdfTdXoQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Sarpanch", "category" => "sans-serif", "variants" => array("regular", "500", "600", "700", "800", "900"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/sarpanch/v1/Ov7BxSrFSZYrfuJxL1LzQaCWcynf_cDxXwCLxiixG1c.ttf", "600" => "http://fonts.gstatic.com/s/sarpanch/v1/WTnP2wnc0qSbUaaDG-2OQ6CWcynf_cDxXwCLxiixG1c.ttf", "700" => "http://fonts.gstatic.com/s/sarpanch/v1/57kYsSpovYmFaEt2hsZhv6CWcynf_cDxXwCLxiixG1c.ttf", "800" => "http://fonts.gstatic.com/s/sarpanch/v1/OKyqPLjdnuVghR-1TV6RzaCWcynf_cDxXwCLxiixG1c.ttf", "900" => "http://fonts.gstatic.com/s/sarpanch/v1/JhYc2cr6kqWTo_P0vfvJR6CWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/sarpanch/v1/YMBZdT27b6O5a1DADbAGSg.ttf")), array("kind" => "webfonts#webfont", "family" => "Satisfy", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/satisfy/v6/PRlyepkd-JCGHiN8e9WV2w.ttf")), array("kind" => "webfonts#webfont", "family" => "Scada", "category" => "sans-serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/scada/v4/t6XNWdMdVWUz93EuRVmifQ.ttf", "regular" => "http://fonts.gstatic.com/s/scada/v4/iZNC3ZEYwe3je6H-28d5Ug.ttf", "italic" => "http://fonts.gstatic.com/s/scada/v4/PCGyLT1qNawkOUQ3uHFhBw.ttf", "700italic" => "http://fonts.gstatic.com/s/scada/v4/kLrBIf7V4mDMwcd_Yw7-D_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Scheherazade", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "arabic"), "version" => "v11", "lastModified" => "2015-08-26", "files" => array("700" => "http://fonts.gstatic.com/s/scheherazade/v11/C1wtT46acJkQxc6mPHwvHED2ttfZwueP-QU272T9-k4.ttf", "regular" => "http://fonts.gstatic.com/s/scheherazade/v11/AuKlqGWzUC-8XqMOmsqXiy3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Schoolbell", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/schoolbell/v6/95-3djEuubb3cJx-6E7j4vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Seaweed Script", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/seaweedscript/v4/eorWAPpOvvWrPw5IHwE60BnpV0hQCek3EmWnCPrvGRM.ttf")), array("kind" => "webfonts#webfont", "family" => "Sevillana", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sevillana/v4/6m1Nh35oP7YEt00U80Smiw.ttf")), array("kind" => "webfonts#webfont", "family" => "Seymour One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/seymourone/v4/HrdG2AEG_870Xb7xBVv6C6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Shadows Into Light", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shadowsintolight/v6/clhLqOv7MXn459PTh0gXYAW_5bEze-iLRNvGrRpJsfM.ttf")), array("kind" => "webfonts#webfont", "family" => "Shadows Into Light Two", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shadowsintolighttwo/v4/gDxHeefcXIo-lOuZFCn2xVQrZk-Pga5KeEE_oZjkQjQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Shanti", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shanti/v8/lc4nG_JG6Q-2FQSOMMhb_w.ttf")), array("kind" => "webfonts#webfont", "family" => "Share", "category" => "display", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/share/v5/XrU8e7a1YKurguyY2azk1Q.ttf", "regular" => "http://fonts.gstatic.com/s/share/v5/1ytD7zSb_-g9I2GG67vmVw.ttf", "italic" => "http://fonts.gstatic.com/s/share/v5/a9YGdQWFRlNJ0zClJVaY3Q.ttf", "700italic" => "http://fonts.gstatic.com/s/share/v5/A992-bLVYwAflKu6iaznufesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Share Tech", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sharetech/v4/Dq3DuZ5_0SW3oEfAWFpen_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Share Tech Mono", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sharetechmono/v5/RQxK-3RA0Lnf3gnnnNrAscwD6PD0c3_abh9zHKQtbGU.ttf")), array("kind" => "webfonts#webfont", "family" => "Shojumaru", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shojumaru/v4/WP8cxonzQQVAoI3RJQ2wug.ttf")), array("kind" => "webfonts#webfont", "family" => "Short Stack", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/shortstack/v6/v4dXPI0Rm8XN9gk4SDdqlqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Siemreap", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/siemreap/v9/JSK-mOIsXwxo-zE9XDDl_g.ttf")), array("kind" => "webfonts#webfont", "family" => "Sigmar One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sigmarone/v6/oh_5NxD5JBZksdo2EntKefesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Signika", "category" => "sans-serif", "variants" => array("300", "regular", "600", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/signika/v6/0wDPonOzsYeEo-1KO78w4fesZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/signika/v6/lQMOF6NUN2ooR7WvB7tADvesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/signika/v6/lEcnfPBICWJPv5BbVNnFJPesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/signika/v6/WvDswbww0oAtvBg2l1L-9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Signika Negative", "category" => "sans-serif", "variants" => array("300", "regular", "600", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/signikanegative/v5/q5TOjIw4CenPw6C-TW06FjYFXpUPtCmIEFDvjUnLLaI.ttf", "600" => "http://fonts.gstatic.com/s/signikanegative/v5/q5TOjIw4CenPw6C-TW06FrKLaDJM01OezSVA2R_O3qI.ttf", "700" => "http://fonts.gstatic.com/s/signikanegative/v5/q5TOjIw4CenPw6C-TW06FpYzPxtVvobH1w3hEppR8WI.ttf", "regular" => "http://fonts.gstatic.com/s/signikanegative/v5/Z-Q1hzbY8uAo3TpTyPFMXVM1lnCWMnren5_v6047e5A.ttf")), array("kind" => "webfonts#webfont", "family" => "Simonetta", "category" => "display", "variants" => array("regular", "italic", "900", "900italic"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("900" => "http://fonts.gstatic.com/s/simonetta/v5/22EwvvJ2r1VwVCxit5LcVi3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/simonetta/v5/fN8puNuahBo4EYMQgp12Yg.ttf", "italic" => "http://fonts.gstatic.com/s/simonetta/v5/ynxQ3FqfF_Nziwy3T9ZwL6CWcynf_cDxXwCLxiixG1c.ttf", "900italic" => "http://fonts.gstatic.com/s/simonetta/v5/WUXOpCgBZaRPrWtMCpeKoienaqEuufTBk9XMKnKmgDA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sintony", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/sintony/v4/zVXQB1wqJn6PE4dWXoYpvPesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/sintony/v4/IDhCijoIMev2L6Lg5QsduQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Sirin Stencil", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sirinstencil/v5/pRpLdo0SawzO7MoBpvowsImg74kgS1F7KeR8rWhYwkU.ttf")), array("kind" => "webfonts#webfont", "family" => "Six Caps", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sixcaps/v7/_XeDnO0HOV8Er9u97If1tQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Skranji", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/skranji/v4/Lcrhg-fviVkxiEgoadsI1vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/skranji/v4/jnOLPS0iZmDL7dfWnW3nIw.ttf")), array("kind" => "webfonts#webfont", "family" => "Slabo 13px", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/slabo13px/v3/jPGWFTjRXfCSzy0qd1nqdvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Slabo 27px", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/slabo27px/v3/gC0o8B9eU21EafNkXlRAfPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Slackey", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/slackey/v6/evRIMNhGVCRJvCPv4kteeA.ttf")), array("kind" => "webfonts#webfont", "family" => "Smokum", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/smokum/v6/8YP4BuAcy97X8WfdKfxVRw.ttf")), array("kind" => "webfonts#webfont", "family" => "Smythe", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/smythe/v7/yACD1gy_MpbB9Ft42fUvYw.ttf")), array("kind" => "webfonts#webfont", "family" => "Sniglet", "category" => "display", "variants" => array("regular", "800"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("800" => "http://fonts.gstatic.com/s/sniglet/v7/NLF91nBmcEfkBgcEWbHFa_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/sniglet/v7/XWhyQLHH4SpCVsHRPRgu9w.ttf")), array("kind" => "webfonts#webfont", "family" => "Snippet", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/snippet/v6/eUcYMLq2GtHZovLlQH_9kA.ttf")), array("kind" => "webfonts#webfont", "family" => "Snowburst One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/snowburstone/v4/zSQzKOPukXRux2oTqfYJjIjjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Sofadi One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sofadione/v4/nirf4G12IcJ6KI8Eoj119fesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sofia", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sofia/v5/Imnvx0Ag9r6iDBFUY5_RaQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Sonsie One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sonsieone/v5/KSP7xT1OSy0q2ob6RQOTWPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sorts Mill Goudy", "category" => "serif", "variants" => array("regular", "italic"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sortsmillgoudy/v6/JzRrPKdwEnE8F1TDmDLMUlIL2Qjg-Xlsg_fhGbe2P5U.ttf", "italic" => "http://fonts.gstatic.com/s/sortsmillgoudy/v6/UUu1lKiy4hRmBWk599VL1TYNkCNSzLyoucKmbTguvr0.ttf")), array("kind" => "webfonts#webfont", "family" => "Source Code Pro", "category" => "monospace", "variants" => array("200", "300", "regular", "500", "600", "700", "900"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqaXvKVW_haheDNrHjziJZVk.ttf", "300" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqVP7R5lD_au4SZC6Ks_vyWs.ttf", "500" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqX63uKwMO11Of4rJWV582wg.ttf", "600" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqeiMeWyi5E_-XkTgB5psiDg.ttf", "700" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqfgXsetDviZcdR5OzC1KPcw.ttf", "900" => "http://fonts.gstatic.com/s/sourcecodepro/v6/leqv3v-yTsJNC7nFznSMqRA_awHl7mXRjE_LQVochcU.ttf", "regular" => "http://fonts.gstatic.com/s/sourcecodepro/v6/mrl8jkM18OlOQN8JLgasD9Rl0pGnog23EMYRrBmUzJQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Source Sans Pro", "category" => "sans-serif", "variants" => array("200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "900", "900italic"), "subsets" => array("latin", "latin-ext", "vietnamese"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGKXvKVW_haheDNrHjziJZVk.ttf", "300" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGFP7R5lD_au4SZC6Ks_vyWs.ttf", "600" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGOiMeWyi5E_-XkTgB5psiDg.ttf", "700" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGPgXsetDviZcdR5OzC1KPcw.ttf", "900" => "http://fonts.gstatic.com/s/sourcesanspro/v9/toadOcfmlt9b38dHJxOBGBA_awHl7mXRjE_LQVochcU.ttf", "200italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6OptKU7UIBg2hLM7eMTU8bI.ttf", "300italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6DUpNKoQAsDux-Todp8f29w.ttf", "regular" => "http://fonts.gstatic.com/s/sourcesanspro/v9/ODelI1aHBYDBqgeIAH2zlNRl0pGnog23EMYRrBmUzJQ.ttf", "italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/M2Jd71oPJhLKp0zdtTvoMwRX4TIfMQQEXLu74GftruE.ttf", "600italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6Pp6lGoTTgjlW0sC4r900Co.ttf", "700italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6LVT4locI09aamSzFGQlDMY.ttf", "900italic" => "http://fonts.gstatic.com/s/sourcesanspro/v9/fpTVHK8qsXbIeTHTrnQH6A0NcF6HPGWR298uWIdxWv0.ttf")), array("kind" => "webfonts#webfont", "family" => "Source Serif Pro", "category" => "serif", "variants" => array("regular", "600", "700"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("600" => "http://fonts.gstatic.com/s/sourceserifpro/v4/yd5lDMt8Sva2PE17yiLarGi4cQnvCGV11m1KlXh97aQ.ttf", "700" => "http://fonts.gstatic.com/s/sourceserifpro/v4/yd5lDMt8Sva2PE17yiLarEkpYHRvxGNSCrR82n_RDNk.ttf", "regular" => "http://fonts.gstatic.com/s/sourceserifpro/v4/CeUM4np2c42DV49nanp55YGL0S0YDpKs5GpLtZIQ0m4.ttf")), array("kind" => "webfonts#webfont", "family" => "Special Elite", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/specialelite/v6/9-wW4zu3WNoD5Fjka35Jm4jjx0o0jr6fNXxPgYh_a8Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Spicy Rice", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/spicyrice/v5/WGCtz7cLoggXARPi9OGD6_esZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Spinnaker", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/spinnaker/v8/MQdIXivKITpjROUdiN6Jgg.ttf")), array("kind" => "webfonts#webfont", "family" => "Spirax", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/spirax/v5/IOKqhk-Ccl7y31yDsePPkw.ttf")), array("kind" => "webfonts#webfont", "family" => "Squada One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/squadaone/v5/3tzGuaJdD65cZVgfQzN8uvesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Sree Krushnadevaraya", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sreekrushnadevaraya/v4/CdsXmnHyEqVl1ahzOh5qnzjDZVem5Eb4d0dXjXa0F_Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Stalemate", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/stalemate/v4/wQLCnG0qB6mOu2Wit2dt_w.ttf")), array("kind" => "webfonts#webfont", "family" => "Stalinist One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/stalinistone/v8/MQpS-WezM9W4Dd7D3B7I-UT7eZ8.ttf")), array("kind" => "webfonts#webfont", "family" => "Stardos Stencil", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/stardosstencil/v6/h4ExtgvoXhPtv9Ieqd-XC81wDCbBgmIo8UyjIhmkeSM.ttf", "regular" => "http://fonts.gstatic.com/s/stardosstencil/v6/ygEOyTW9a6u4fi4OXEZeTFf2eT4jUldwg_9fgfY_tHc.ttf")), array("kind" => "webfonts#webfont", "family" => "Stint Ultra Condensed", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/stintultracondensed/v5/8DqLK6-YSClFZt3u3EgOUYelbRYnLTTQA1Z5cVLnsI4.ttf")), array("kind" => "webfonts#webfont", "family" => "Stint Ultra Expanded", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/stintultraexpanded/v4/FeigX-wDDgHMCKuhekhedQ7dxr0N5HY0cZKknTIL6n4.ttf")), array("kind" => "webfonts#webfont", "family" => "Stoke", "category" => "serif", "variants" => array("300", "regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/stoke/v6/Sell9475FOS8jUqQsfFsUQ.ttf", "regular" => "http://fonts.gstatic.com/s/stoke/v6/A7qJNoqOm2d6o1E6e0yUFg.ttf")), array("kind" => "webfonts#webfont", "family" => "Strait", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/strait/v4/m4W73ViNmProETY2ybc-Bg.ttf")), array("kind" => "webfonts#webfont", "family" => "Sue Ellen Francisco", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sueellenfrancisco/v7/TwHX4vSxMUnJUdEz1JIgrhzazJzPVbGl8jnf1tisRz4.ttf")), array("kind" => "webfonts#webfont", "family" => "Sumana", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-05-04", "files" => array("700" => "http://fonts.gstatic.com/s/sumana/v1/8AcM-KAproitONSBBHj3sQ.ttf", "regular" => "http://fonts.gstatic.com/s/sumana/v1/wgdl__wAK7pzliiWs0Nlog.ttf")), array("kind" => "webfonts#webfont", "family" => "Sunshiney", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/sunshiney/v6/kaWOb4pGbwNijM7CkxK1sQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Supermercado One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/supermercadoone/v6/kMGPVTNFiFEp1U274uBMb4mm5hmSKNFf3C5YoMa-lrM.ttf")), array("kind" => "webfonts#webfont", "family" => "Sura", "category" => "serif", "variants" => array("regular", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2015-06-17", "files" => array("700" => "http://fonts.gstatic.com/s/sura/v1/Z5bXQaFGmoWicN1WlcncxA.ttf", "regular" => "http://fonts.gstatic.com/s/sura/v1/jznKrhTH5NezYxb0-Q5zzA.ttf")), array("kind" => "webfonts#webfont", "family" => "Suranna", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/suranna/v4/PYmfr6TQeTqZ-r8HnPM-kA.ttf")), array("kind" => "webfonts#webfont", "family" => "Suravaram", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/suravaram/v3/G4dPee4pel_w2HqzavW4MA.ttf")), array("kind" => "webfonts#webfont", "family" => "Suwannaphum", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v9", "lastModified" => "2015-04-06", "files" => array("regular" => "http://fonts.gstatic.com/s/suwannaphum/v9/1jIPOyXied3T79GCnSlCN6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Swanky and Moo Moo", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/swankyandmoomoo/v6/orVNZ9kDeE3lWp3U3YELu9DVLKqNC3_XMNHhr8S94FU.ttf")), array("kind" => "webfonts#webfont", "family" => "Syncopate", "category" => "sans-serif", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/syncopate/v7/S5z8ixiOoC4WJ1im6jAlYC3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/syncopate/v7/RQVwO52fAH6MI764EcaYtw.ttf")), array("kind" => "webfonts#webfont", "family" => "Tangerine", "category" => "handwriting", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/tangerine/v7/UkFsr-RwJB_d2l9fIWsx3i3USBnSvpkopQaUR-2r7iU.ttf", "regular" => "http://fonts.gstatic.com/s/tangerine/v7/DTPeM3IROhnkz7aYG2a9sA.ttf")), array("kind" => "webfonts#webfont", "family" => "Taprom", "category" => "display", "variants" => array("regular"), "subsets" => array("khmer"), "version" => "v8", "lastModified" => "2015-04-03", "files" => array("regular" => "http://fonts.gstatic.com/s/taprom/v8/-KByU3BaUsyIvQs79qFObg.ttf")), array("kind" => "webfonts#webfont", "family" => "Tauri", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tauri/v4/XIWeYJDXNqiVNej0zEqtGg.ttf")), array("kind" => "webfonts#webfont", "family" => "Teko", "category" => "sans-serif", "variants" => array("300", "regular", "500", "600", "700"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/teko/v5/OobFGE9eo24rcBpN6zXDaQ.ttf", "500" => "http://fonts.gstatic.com/s/teko/v5/FQ0duU7gWM4cSaImOfAjBA.ttf", "600" => "http://fonts.gstatic.com/s/teko/v5/QDx_i8H-TZ1IK1JEVrqwEQ.ttf", "700" => "http://fonts.gstatic.com/s/teko/v5/xKfTxe_SWpH4xU75vmvylA.ttf", "regular" => "http://fonts.gstatic.com/s/teko/v5/UtekqODEqZXSN2L-njejpA.ttf")), array("kind" => "webfonts#webfont", "family" => "Telex", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/telex/v4/24-3xP9ywYeHOcFU3iGk8A.ttf")), array("kind" => "webfonts#webfont", "family" => "Tenali Ramakrishna", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v3", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tenaliramakrishna/v3/M0nTmDqv2M7AGoGh-c946BZak5pSBHqWX6uyVMiMFoA.ttf")), array("kind" => "webfonts#webfont", "family" => "Tenor Sans", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tenorsans/v7/dUBulmjNJJInvK5vL7O9yfesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Text Me One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/textmeone/v4/9em_3ckd_P5PQkP4aDyDLqCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "The Girl Next Door", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/thegirlnextdoor/v7/cWRA4JVGeEcHGcPl5hmX7kzo0nFFoM60ux_D9BUymX4.ttf")), array("kind" => "webfonts#webfont", "family" => "Tienne", "category" => "serif", "variants" => array("regular", "700", "900"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/tienne/v8/JvoCDOlyOSEyYGRwCyfs3g.ttf", "900" => "http://fonts.gstatic.com/s/tienne/v8/FBano5T521OWexj2iRYLMw.ttf", "regular" => "http://fonts.gstatic.com/s/tienne/v8/-IIfDl701C0z7-fy2kmGvA.ttf")), array("kind" => "webfonts#webfont", "family" => "Tillana", "category" => "handwriting", "variants" => array("regular", "500", "600", "700", "800"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("500" => "http://fonts.gstatic.com/s/tillana/v1/gqdUngSIcY9tSla5eCZky_esZW2xOQ-xsNqO47m55DA.ttf", "600" => "http://fonts.gstatic.com/s/tillana/v1/fqon6-r15hy8M1cyiYfQBvesZW2xOQ-xsNqO47m55DA.ttf", "700" => "http://fonts.gstatic.com/s/tillana/v1/jGARMTxLrMerzTCpGBpMffesZW2xOQ-xsNqO47m55DA.ttf", "800" => "http://fonts.gstatic.com/s/tillana/v1/pmTtNH_Ibktj5Cyc1XrP6vesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/tillana/v1/zN0D-jDPsr1HzU3VRFLY5g.ttf")), array("kind" => "webfonts#webfont", "family" => "Timmana", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "telugu"), "version" => "v1", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/timmana/v1/T25SicsJUJkc2s2sbBsDnA.ttf")), array("kind" => "webfonts#webfont", "family" => "Tinos", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "hebrew", "greek-ext", "vietnamese"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/tinos/v9/vHXfhX8jZuQruowfon93yQ.ttf", "regular" => "http://fonts.gstatic.com/s/tinos/v9/EqpUbkVmutfwZ0PjpoGwCg.ttf", "italic" => "http://fonts.gstatic.com/s/tinos/v9/slfyzlasCr9vTsaP4lUh9A.ttf", "700italic" => "http://fonts.gstatic.com/s/tinos/v9/M6kfzvDMM0CdxdraoFpG6vesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Titan One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/titanone/v4/FbvpRvzfV_oipS0De3iAZg.ttf")), array("kind" => "webfonts#webfont", "family" => "Titillium Web", "category" => "sans-serif", "variants" => array("200", "200italic", "300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "900"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("200" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wprzOdCrLccoxq42eaxM802O0.ttf", "300" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr9ZAkYT8DuUZELiKLwMGWAo.ttf", "600" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr28K9dEd5Ue-HTQrlA7E2xQ.ttf", "700" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr2-6tpSbB9YhmWtmd1_gi_U.ttf", "900" => "http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr7L0GmZLri-m-nfoo0Vul4Y.ttf", "200italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/RZunN20OBmkvrU7sA4GPPj4N98U-66ThNJvtgddRfBE.ttf", "300italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/RZunN20OBmkvrU7sA4GPPrfzCkqg7ORZlRf2cc4mXu8.ttf", "regular" => "http://fonts.gstatic.com/s/titilliumweb/v4/7XUFZ5tgS-tD6QamInJTcTyagQBwYgYywpS70xNq8SQ.ttf", "italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/r9OmwyQxrgzUAhaLET_KO-ixohbIP6lHkU-1Mgq95cY.ttf", "600italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/RZunN20OBmkvrU7sA4GPPgOhzTSndyK8UWja2yJjKLc.ttf", "700italic" => "http://fonts.gstatic.com/s/titilliumweb/v4/RZunN20OBmkvrU7sA4GPPio3LEw-4MM8Ao2j9wPOfpw.ttf")), array("kind" => "webfonts#webfont", "family" => "Trade Winds", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tradewinds/v5/sDOCVgAxw6PEUi2xdMsoDaCWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Trocchi", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/trocchi/v4/uldNPaKrUGVeGCVsmacLwA.ttf")), array("kind" => "webfonts#webfont", "family" => "Trochut", "category" => "display", "variants" => array("regular", "italic", "700"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/trochut/v4/lWqNOv6ISR8ehNzGLFLnJ_esZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/trochut/v4/6Y65B0x-2JsnYt16OH5omw.ttf", "italic" => "http://fonts.gstatic.com/s/trochut/v4/pczUwr4ZFvC79TgNO5cZng.ttf")), array("kind" => "webfonts#webfont", "family" => "Trykker", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/trykker/v5/YiVrVJpBFN7I1l_CWk6yYQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Tulpen One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/tulpenone/v6/lwcTfVIEVxpZLZlWzR5baPesZW2xOQ-xsNqO47m55DA.ttf")), array("kind" => "webfonts#webfont", "family" => "Ubuntu", "category" => "sans-serif", "variants" => array("300", "300italic", "regular", "italic", "500", "500italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext"), "version" => "v9", "lastModified" => "2016-02-23", "files" => array("300" => "http://fonts.gstatic.com/s/ubuntu/v9/7-wH0j2QCTHKgp7vLh9-sQ.ttf", "500" => "http://fonts.gstatic.com/s/ubuntu/v9/bMbHEMwSUmkzcK2x_74QbA.ttf", "700" => "http://fonts.gstatic.com/s/ubuntu/v9/B7BtHjNYwAp3HgLNagENOQ.ttf", "300italic" => "http://fonts.gstatic.com/s/ubuntu/v9/j-TYDdXcC_eQzhhp386SjaCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/ubuntu/v9/lhhB5ZCwEkBRbHMSnYuKyA.ttf", "italic" => "http://fonts.gstatic.com/s/ubuntu/v9/b9hP8wd30SygxZjGGk4DCQ.ttf", "500italic" => "http://fonts.gstatic.com/s/ubuntu/v9/NWdMogIO7U6AtEM4dDdf_aCWcynf_cDxXwCLxiixG1c.ttf", "700italic" => "http://fonts.gstatic.com/s/ubuntu/v9/pqisLQoeO9YTDCNnlQ9bf6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Ubuntu Condensed", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ubuntucondensed/v7/DBCt-NXN57MTAFjitYxdrKDbm6fPDOZJsR8PmdG62gY.ttf")), array("kind" => "webfonts#webfont", "family" => "Ubuntu Mono", "category" => "monospace", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("greek", "latin", "cyrillic-ext", "latin-ext", "cyrillic", "greek-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/ubuntumono/v6/ceqTZGKHipo8pJj4molytne1Pd76Vl7zRpE7NLJQ7XU.ttf", "regular" => "http://fonts.gstatic.com/s/ubuntumono/v6/EgeuS9OtEmA0y_JRo03MQaCWcynf_cDxXwCLxiixG1c.ttf", "italic" => "http://fonts.gstatic.com/s/ubuntumono/v6/KAKuHXAHZOeECOWAHsRKA0eOrDcLawS7-ssYqLr2Xp4.ttf", "700italic" => "http://fonts.gstatic.com/s/ubuntumono/v6/n_d8tv_JOIiYyMXR4eaV9c_zJjSACmk0BRPxQqhnNLU.ttf")), array("kind" => "webfonts#webfont", "family" => "Ultra", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/ultra/v8/OW8uXkOstRADuhEmGOFQLA.ttf")), array("kind" => "webfonts#webfont", "family" => "Uncial Antiqua", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/uncialantiqua/v4/F-leefDiFwQXsyd6eaSllqrFJ4O13IHVxZbM6yoslpo.ttf")), array("kind" => "webfonts#webfont", "family" => "Underdog", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext", "cyrillic"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/underdog/v5/gBv9yjez_-5PnTprHWq0ig.ttf")), array("kind" => "webfonts#webfont", "family" => "Unica One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/unicaone/v4/KbYKlhWMDpatWViqDkNQgA.ttf")), array("kind" => "webfonts#webfont", "family" => "UnifrakturCook", "category" => "display", "variants" => array("700"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/unifrakturcook/v8/ASwh69ykD8iaoYijVEU6RrWZkcsCTHKV51zmcUsafQ0.ttf")), array("kind" => "webfonts#webfont", "family" => "UnifrakturMaguntia", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/unifrakturmaguntia/v7/7KWy3ymCVR_xfAvvcIXm3-kdNg30GQauG_DE-tMYtWk.ttf")), array("kind" => "webfonts#webfont", "family" => "Unkempt", "category" => "display", "variants" => array("regular", "700"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/unkempt/v7/V7H-GCl9bgwGwqFqTTgDHvesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/unkempt/v7/NLLBeNSspr0RGs71R5LHWA.ttf")), array("kind" => "webfonts#webfont", "family" => "Unlock", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/unlock/v6/rXEQzK7uIAlhoyoAEiMy1w.ttf")), array("kind" => "webfonts#webfont", "family" => "Unna", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/unna/v8/UAS0AM7AmbdCNY_80xyAZQ.ttf")), array("kind" => "webfonts#webfont", "family" => "VT323", "category" => "monospace", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vt323/v7/ITU2YQfM073o1iYK3nSOmQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Vampiro One", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vampiroone/v7/OVDs4gY4WpS5u3Qd1gXRW6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Varela", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/varela/v7/ON7qs0cKUUixhhDFXlZUjw.ttf")), array("kind" => "webfonts#webfont", "family" => "Varela Round", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/varelaround/v6/APH4jr0uSos5wiut5cpjri3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Vast Shadow", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vastshadow/v6/io4hqKX3ibiqQQjYfW0-h6CWcynf_cDxXwCLxiixG1c.ttf")), array("kind" => "webfonts#webfont", "family" => "Vesper Libre", "category" => "serif", "variants" => array("regular", "500", "700", "900"), "subsets" => array("latin", "devanagari", "latin-ext"), "version" => "v7", "lastModified" => "2015-06-03", "files" => array("500" => "http://fonts.gstatic.com/s/vesperlibre/v7/0liLgNkygqH6EOtsVjZDsZMQuUSAwdHsY8ov_6tk1oA.ttf", "700" => "http://fonts.gstatic.com/s/vesperlibre/v7/0liLgNkygqH6EOtsVjZDsUD2ttfZwueP-QU272T9-k4.ttf", "900" => "http://fonts.gstatic.com/s/vesperlibre/v7/0liLgNkygqH6EOtsVjZDsaObDOjC3UL77puoeHsE3fw.ttf", "regular" => "http://fonts.gstatic.com/s/vesperlibre/v7/Cg-TeZFsqV8BaOcoVwzu2C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Vibur", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vibur/v7/xB9aKsUbJo68XP0bAg2iLw.ttf")), array("kind" => "webfonts#webfont", "family" => "Vidaloka", "category" => "serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/vidaloka/v8/C6Nul0ogKUWkx356rrt9RA.ttf")), array("kind" => "webfonts#webfont", "family" => "Viga", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/viga/v5/uD87gDbhS7frHLX4uL6agg.ttf")), array("kind" => "webfonts#webfont", "family" => "Voces", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v5", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/voces/v5/QoBH6g6yKgNIgvL8A2aE2Q.ttf")), array("kind" => "webfonts#webfont", "family" => "Volkhov", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/volkhov/v8/L8PbKS-kEoLHm7nP--NCzPesZW2xOQ-xsNqO47m55DA.ttf", "regular" => "http://fonts.gstatic.com/s/volkhov/v8/MDIZAofe1T_J3un5Kgo8zg.ttf", "italic" => "http://fonts.gstatic.com/s/volkhov/v8/1rTjmztKEpbkKH06JwF8Yw.ttf", "700italic" => "http://fonts.gstatic.com/s/volkhov/v8/W6oG0QDDjCgj0gmsHE520C3USBnSvpkopQaUR-2r7iU.ttf")), array("kind" => "webfonts#webfont", "family" => "Vollkorn", "category" => "serif", "variants" => array("regular", "italic", "700", "700italic"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("700" => "http://fonts.gstatic.com/s/vollkorn/v6/gOwQjJVGXlDOONC12hVoBqCWcynf_cDxXwCLxiixG1c.ttf", "regular" => "http://fonts.gstatic.com/s/vollkorn/v6/IiexqYAeh8uII223thYx3w.ttf", "italic" => "http://fonts.gstatic.com/s/vollkorn/v6/UuIzosgR1ovBhJFdwVp3fvesZW2xOQ-xsNqO47m55DA.ttf", "700italic" => "http://fonts.gstatic.com/s/vollkorn/v6/KNiAlx6phRqXCwnZZG51JAJKKGfqHaYFsRG-T3ceEVo.ttf")), array("kind" => "webfonts#webfont", "family" => "Voltaire", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/voltaire/v6/WvqBzaGEBbRV-hrahwO2cA.ttf")), array("kind" => "webfonts#webfont", "family" => "Waiting for the Sunrise", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/waitingforthesunrise/v7/eNfH7kLpF1PZWpsetF-ha9TChrNgrDiT3Zy6yGf3FnM.ttf")), array("kind" => "webfonts#webfont", "family" => "Wallpoet", "category" => "display", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v8", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/wallpoet/v8/hmum4WuBN4A0Z_7367NDIg.ttf")), array("kind" => "webfonts#webfont", "family" => "Walter Turncoat", "category" => "handwriting", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/walterturncoat/v6/sG9su5g4GXy1KP73cU3hvQplL2YwNeota48DxFlGDUo.ttf")), array("kind" => "webfonts#webfont", "family" => "Warnes", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v6", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/warnes/v6/MXG7_Phj4YpzAXxKGItuBw.ttf")), array("kind" => "webfonts#webfont", "family" => "Wellfleet", "category" => "display", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/wellfleet/v4/J5tOx72iFRPgHYpbK9J4XQ.ttf")), array("kind" => "webfonts#webfont", "family" => "Wendy One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin", "latin-ext"), "version" => "v4", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/wendyone/v4/R8CJT2oDXdMk_ZtuHTxoxw.ttf")), array("kind" => "webfonts#webfont", "family" => "Wire One", "category" => "sans-serif", "variants" => array("regular"), "subsets" => array("latin"), "version" => "v7", "lastModified" => "2016-02-23", "files" => array("regular" => "http://fonts.gstatic.com/s/wireone/v7/sRLhaQOQpWnvXwIx0CycQw.ttf")), array("kind" => "webfonts#webfont", "family" => "Work Sans", "category" => "sans-serif", "variants" => array("100", "200", "300", "regular", "500", "600", "700", "800", "900"), "subsets" => array("latin", "latin-ext"), "version" => "v2", "lastModified" => "2015-12-08", "files" => array("100" => "http://fonts.gstatic.com/s/worksans/v2/ZAhtNqLaAViKjGLajtuwWaCWcynf_cDxXwCLxiixG1c.ttf", "200" =>