55 lines
1.3 KiB
React
55 lines
1.3 KiB
React
/**
|
|
* WordPress dependencies
|
|
*/
|
|
const TokenList = wp.tokenList;
|
|
|
|
/**
|
|
* Returns the active style from the given className.
|
|
*
|
|
* @param {string} className Class name
|
|
* @param {string} namespace The replacing class namespace.
|
|
*
|
|
* @return {string} The active style.
|
|
*/
|
|
export function getActiveClass( className, namespace ) {
|
|
const list = new TokenList( className );
|
|
|
|
for ( const activeClass of list.values() ) {
|
|
if ( activeClass.indexOf( `${ namespace }-` ) === -1 ) {
|
|
continue;
|
|
}
|
|
|
|
return activeClass;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Replaces the active class with namespace in the className.
|
|
*
|
|
* @param {string} className Class name.
|
|
* @param {string} namespace The replacing class namespace.
|
|
* @param {string} newClass The replacing class.
|
|
*
|
|
* @return {string} The updated className.
|
|
*/
|
|
export function replaceClass( className, namespace, newClass ) {
|
|
const list = new TokenList( className );
|
|
const namespaceRegExp = new RegExp( `${ namespace }-` );
|
|
|
|
// remove classes with the same namespace.
|
|
for ( const activeClass of list.values() ) {
|
|
if ( namespaceRegExp.test( activeClass ) ) {
|
|
list.remove( activeClass );
|
|
}
|
|
}
|
|
|
|
// add new class.
|
|
if ( newClass ) {
|
|
list.add( `${ namespace }-${ newClass }` );
|
|
}
|
|
|
|
return list.value;
|
|
}
|