mirror of
https://github.com/processwire/processwire.git
synced 2025-08-10 16:54:44 +02:00
Add support in MarkupRegions for removing class names by wildcard. For instance, <div id="content" class="-uk-width-*" pw-append></div>
would remove all class names from #content div starting with "uk-width-". Regex patterns are also supported when pattern is identifed by /
, i.e. <div id="content" class="-/^uk-(text|width).+$/" pw-append></div>
would remove all class names from $content starting with "uk-text" or "uk-width".
This commit is contained in:
@@ -956,14 +956,38 @@ class WireMarkupRegions extends Wire {
|
||||
$classes = explode(' ', $value);
|
||||
$classes = array_merge($tagInfo['classes'], $classes);
|
||||
$classes = array_unique($classes);
|
||||
// identify remove classes
|
||||
$forceAddClasses = [];
|
||||
$removeMatchClasses = [];
|
||||
// identify force add and remove classes
|
||||
foreach($classes as $key => $class) {
|
||||
if(strpos($class, '-') !== 0) continue;
|
||||
$removeClass = ltrim($class, '-');
|
||||
if(strpos($class, '+') === 0){
|
||||
$class = ltrim($class, '+');
|
||||
$forceAddClasses[$class] = $class;
|
||||
unset($classes[$key]);
|
||||
} else if(strpos($class, '-') === 0) {
|
||||
$removeClass = substr($class, 1);
|
||||
if(strpos($removeClass, '*') !== false) $removeMatchClasses[] = $removeClass;
|
||||
unset($classes[$key]);
|
||||
while(false !== ($k = array_search($removeClass, $classes))) unset($classes[$k]);
|
||||
}
|
||||
$attrs['class'] = implode(' ', $classes);
|
||||
}
|
||||
if(count($classes) && count($removeMatchClasses)) {
|
||||
foreach($removeMatchClasses as $removeClass) {
|
||||
if(strpos($removeClass, '/') === 0) {
|
||||
// already a regex
|
||||
if(strrpos($removeClass, '/') === 0) $removeClass .= '/';
|
||||
} else {
|
||||
// convert wildcard to regex
|
||||
$removeClass = '/^' . str_replace('\\*', '.+', preg_quote($removeClass, '/')) . '$/';
|
||||
}
|
||||
foreach($classes as $key => $class) {
|
||||
if(preg_match($removeClass, $class)) {
|
||||
unset($classes[$key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$attrs['class'] = implode(' ', array_merge($forceAddClasses, $classes));
|
||||
} else {
|
||||
// replace
|
||||
$attrs[$name] = $value;
|
||||
|
Reference in New Issue
Block a user