![JAR search and dependency download from the Maven repository](/logo.png)
org.apache.wicket.StyleAttributeModifier Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.wicket;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.regex.Pattern;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.util.string.Strings;
/**
* An AttributeModifier specialized in managing the CSS style
* attribute
*/
public abstract class StyleAttributeModifier extends AttributeAppender
{
private static final Pattern STYLES_SPLITTER = Pattern.compile("\\s*;\\s*");
private static final Pattern KEY_VALUE_SPLITTER = Pattern.compile("\\s*:\\s*");
/**
* Constructor.
*/
public StyleAttributeModifier()
{
super("style", null, ";");
}
@Override
protected Serializable newValue(String currentValue, String appendValue)
{
String[] styles;
if (Strings.isEmpty(currentValue))
{
styles = new String[0];
}
else
{
styles = STYLES_SPLITTER.split(currentValue.trim());
}
Map oldStyles = new LinkedHashMap<>();
for (String style : styles)
{
String[] keyValue = KEY_VALUE_SPLITTER.split(style, 2);
oldStyles.put(keyValue[0], keyValue[1]);
}
Map newStyles = update(oldStyles);
String separator = getSeparator();
StringBuilder result = new StringBuilder();
for (Map.Entry entry : newStyles.entrySet())
{
result
.append(entry.getKey())
.append(':')
.append(entry.getValue())
.append(separator);
}
return result.length() > 0 ? result.toString() : VALUELESS_ATTRIBUTE_REMOVE;
}
/**
* Callback to update the CSS class values for a tag.
*
* @param oldStyles
* A map with the old style key/values
* @return A map with the new style key/values
*/
protected abstract Map update(Map oldStyles);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy