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 = explode(' ', $value);
|
||||||
$classes = array_merge($tagInfo['classes'], $classes);
|
$classes = array_merge($tagInfo['classes'], $classes);
|
||||||
$classes = array_unique($classes);
|
$classes = array_unique($classes);
|
||||||
// identify remove classes
|
$forceAddClasses = [];
|
||||||
|
$removeMatchClasses = [];
|
||||||
|
// identify force add and remove classes
|
||||||
foreach($classes as $key => $class) {
|
foreach($classes as $key => $class) {
|
||||||
if(strpos($class, '-') !== 0) continue;
|
if(strpos($class, '+') === 0){
|
||||||
$removeClass = ltrim($class, '-');
|
$class = ltrim($class, '+');
|
||||||
unset($classes[$key]);
|
$forceAddClasses[$class] = $class;
|
||||||
while(false !== ($k = array_search($removeClass, $classes))) unset($classes[$k]);
|
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 {
|
} else {
|
||||||
// replace
|
// replace
|
||||||
$attrs[$name] = $value;
|
$attrs[$name] = $value;
|
||||||
|
Reference in New Issue
Block a user