%PDF- %PDF-
| Direktori : /var/www/projetos/hindi.ongrace.com/wp-content/themes/flash/inc/kirki/controls/js/src/ |
| Current File : /var/www/projetos/hindi.ongrace.com/wp-content/themes/flash/inc/kirki/controls/js/src/kirki.util.js |
/* global ajaxurl */
var kirki = kirki || {};
kirki = jQuery.extend( kirki, {
/**
* A collection of utility methods.
*
* @since 3.0.17
*/
util: {
/**
* A collection of utility methods for webfonts.
*
* @since 3.0.17
*/
webfonts: {
/**
* Google-fonts related methods.
*
* @since 3.0.17
*/
google: {
/**
* An object containing all Google fonts.
*
* to set this call this.setFonts();
*
* @since 3.0.17
*/
fonts: {},
/**
* Init for google-fonts.
*
* @since 3.0.17
* @returns {null}
*/
initialize: function() {
var self = this;
self.setFonts();
},
/**
* Set fonts in this.fonts
*
* @since 3.0.17
* @returns {null}
*/
setFonts: function() {
var self = this;
// No need to run if we already have the fonts.
if ( ! _.isEmpty( self.fonts ) ) {
return;
}
// Make an AJAX call to set the fonts object (alpha).
jQuery.post( ajaxurl, { 'action': 'kirki_fonts_google_all_get' }, function( response ) {
// Get fonts from the JSON array.
self.fonts = JSON.parse( response );
} );
},
/**
* Gets all properties of a font-family.
*
* @since 3.0.17
* @param {string} family - The font-family we're interested in.
* @returns {Object}
*/
getFont: function( family ) {
var self = this,
fonts = self.getFonts();
if ( 'undefined' === typeof fonts[ family ] ) {
return false;
}
return fonts[ family ];
},
/**
* Gets all properties of a font-family.
*
* @since 3.0.17
* @param {string} order - How to order the fonts (alpha|popularity|trending).
* @param {int} number - How many to get. 0 for all.
* @returns {Object}
*/
getFonts: function( order, category, number ) {
var self = this,
ordered = {},
categorized = {},
plucked = {};
// Make sure order is correct.
order = order || 'alpha';
order = ( 'alpha' !== order && 'popularity' !== order && 'trending' !== order ) ? 'alpha' : order;
// Make sure number is correct.
number = number || 0;
number = parseInt( number, 10 );
// Order fonts by the 'order' argument.
if ( 'alpha' === order ) {
ordered = jQuery.extend( {}, self.fonts.items );
} else {
_.each( self.fonts.order[ order ], function( family ) {
ordered[ family ] = self.fonts.items[ family ];
} );
}
// If we have a category defined get only the fonts in that category.
if ( '' === category || ! category ) {
categorized = ordered;
} else {
_.each( ordered, function( font, family ) {
if ( category === font.category ) {
categorized[ family ] = font;
}
} );
}
// If we only want a number of font-families get the 1st items from the results.
if ( 0 < number ) {
_.each( _.first( _.keys( categorized ), number ), function( family ) {
plucked[ family ] = categorized[ family ];
} );
return plucked;
}
return categorized;
},
/**
* Gets the variants for a font-family.
*
* @since 3.0.17
* @param {string} family - The font-family we're interested in.
* @returns {Array}
*/
getVariants: function( family ) {
var self = this,
font = self.getFont( family );
// Early exit if font was not found.
if ( ! font ) {
return false;
}
// Early exit if font doesn't have variants.
if ( _.isUndefined( font.variants ) ) {
return false;
}
// Return the variants.
return font.variants;
}
},
/**
* Standard fonts related methods.
*
* @since 3.0.17
*/
standard: {
/**
* An object containing all Standard fonts.
*
* to set this call this.setFonts();
*
* @since 3.0.17
*/
fonts: {},
/**
* Init for google-fonts.
*
* @since 3.0.17
* @returns {null}
*/
initialize: function() {
var self = this;
self.setFonts();
},
/**
* Set fonts in this.fonts
*
* @since 3.0.17
* @returns {null}
*/
setFonts: function() {
var self = this;
// No need to run if we already have the fonts.
if ( ! _.isEmpty( self.fonts ) ) {
return;
}
// Make an AJAX call to set the fonts object.
jQuery.post( ajaxurl, { 'action': 'kirki_fonts_standard_all_get' }, function( response ) {
// Get fonts from the JSON array.
self.fonts = JSON.parse( response );
} );
},
/**
* Gets the variants for a font-family.
*
* @since 3.0.17
* @returns {Array}
*/
getVariants: function() {
return [ 'regular', 'italic', '700', '700italic' ];
}
},
/**
* Figure out what this font-family is (google/standard)
*
* @since 3.0.20
* @param {string} family - The font-family.
* @returns {string|false} - Returns string if found (google|standard)
* and false in case the font-family is an arbitrary value
* not found anywhere in our font definitions.
*/
getFontType: function( family ) {
var self = this;
// Check for standard fonts first.
if (
'undefined' !== typeof self.standard.fonts[ family ] || (
'undefined' !== typeof self.standard.fonts.stack &&
'undefined' !== typeof self.standard.fonts.stack[ family ]
)
) {
return 'standard';
}
// Check in googlefonts.
if ( 'undefined' !== typeof self.google.fonts.items[ family ] ) {
return 'google';
}
return false;
}
},
validate: {
cssValue: function( value ) {
var validUnits = [ 'fr', 'rem', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vh', 'vw', 'vmin', 'vmax' ],
numericValue,
unit;
// Early exit if value is not a string or a number.
if ( 'string' !== typeof value || 'number' !== typeof value ) {
return true;
}
// Whitelist values.
if ( 0 === value || '0' === value || 'auto' === value || 'inherit' === value || 'initial' === value ) {
return true;
}
// Skip checking if calc().
if ( 0 <= value.indexOf( 'calc(' ) && 0 <= value.indexOf( ')' ) ) {
return true;
}
// Get the numeric value.
numericValue = parseFloat( value );
// Get the unit
unit = value.replace( numericValue, '' );
// Allow unitless.
if ( ! value ) {
return;
}
// Check the validity of the numeric value and units.
return ( ! isNaN( numericValue ) && -1 < jQuery.inArray( unit, validUnits ) );
}
},
/**
* Parses HTML Entities.
*
* @since 3.0.34
* @param {string} str - The string we want to parse.
* @returns {string}
*/
parseHtmlEntities: function( str ) {
var parser = new DOMParser,
dom = parser.parseFromString(
'<!doctype html><body>' + str, 'text/html'
);
return dom.body.textContent;
}
}
} );