w3c.css.properties.css3.CssTouchAction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cssvalidator Show documentation
Show all versions of cssvalidator Show documentation
Backend for the W3C CSS Validation Service
// (c) COPYRIGHT MIT, ERCIM, Keio, Beihang, 2017.
// Please first read the full copyright statement at:
// https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
package org.w3c.css.properties.css3;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
import org.w3c.css.values.CssExpression;
import org.w3c.css.values.CssIdent;
import org.w3c.css.values.CssTypes;
import org.w3c.css.values.CssValue;
import org.w3c.css.values.CssValueList;
import java.util.ArrayList;
import static org.w3c.css.values.CssOperator.SPACE;
/**
* @spec https://www.w3.org/TR/2016/WD-pointerevents2-20160719/#the-touch-action-css-property
* @spec https://compat.spec.whatwg.org/#touch-action
*/
public class CssTouchAction extends org.w3c.css.properties.css.CssTouchAction {
public static final CssIdent[] allowed_vertical_values;
public static final CssIdent[] allowed_horizontal_values;
public static final CssIdent[] allowed_values;
public static final CssIdent pinch_zoom;
static {
String[] _allowed_vertical_values = {"pan-x", "pan-left", "pan-right"};
allowed_vertical_values = new CssIdent[_allowed_vertical_values.length];
int i = 0;
for (String s : _allowed_vertical_values) {
allowed_vertical_values[i++] = CssIdent.getIdent(s);
}
String[] _allowed_horizontal_values = {"pan-y", "pan-up", "pan-down"};
allowed_horizontal_values = new CssIdent[_allowed_horizontal_values.length];
i = 0;
for (String s : _allowed_horizontal_values) {
allowed_horizontal_values[i++] = CssIdent.getIdent(s);
}
String[] _allowed_values = {"auto", "none", "manipulation"};
allowed_values = new CssIdent[_allowed_values.length];
i = 0;
for (String s : _allowed_values) {
allowed_values[i++] = CssIdent.getIdent(s);
}
pinch_zoom = CssIdent.getIdent("pinch-zoom");
}
public static CssIdent getAllowedHorizontalIdent(CssIdent ident) {
for (CssIdent id : allowed_horizontal_values) {
if (id.equals(ident)) {
return id;
}
}
return null;
}
public static CssIdent getAllowedVerticalIdent(CssIdent ident) {
for (CssIdent id : allowed_vertical_values) {
if (id.equals(ident)) {
return id;
}
}
return null;
}
public static CssIdent getAllowedIdent(CssIdent ident) {
for (CssIdent id : allowed_values) {
if (id.equals(ident)) {
return id;
}
}
return null;
}
/**
* Create a new CssTouchAction
*/
public CssTouchAction() {
value = initial;
}
/**
* Create a new CssTouchAction
*
* @param expression The expression for this property
* @throws InvalidParamException Incorrect value
*/
public CssTouchAction(ApplContext ac, CssExpression expression,
boolean check) throws InvalidParamException {
CssValue val;
char op;
CssIdent id, ident;
boolean got_vertical = false;
boolean got_horizontal = false;
boolean got_pinch_zoom = false;
setByUser();
if (check && expression.getCount() > 3) {
throw new InvalidParamException("unrecognize", ac);
}
ArrayList values = new ArrayList<>();
while (!expression.end()) {
val = expression.getValue();
op = expression.getOperator();
if (op != SPACE) {
throw new InvalidParamException("operator", op,
getPropertyName(), ac);
}
if (val.getType() != CssTypes.CSS_IDENT) {
throw new InvalidParamException("value",
val.toString(),
getPropertyName(), ac);
}
id = (CssIdent) val;
if (id.equals(inherit)) {
if (expression.getCount() > 1) {
throw new InvalidParamException("value",
expression.getValue(),
getPropertyName(), ac);
}
values.add(inherit);
expression.next();
continue;
}
// check for single values first.
ident = getAllowedIdent(id);
if (ident != null) {
if (expression.getCount() > 1) {
throw new InvalidParamException("value",
expression.getValue(),
getPropertyName(), ac);
}
values.add(ident);
expression.next();
continue;
}
// then for the possible double values
ident = getAllowedHorizontalIdent(id);
if (ident != null) {
if (got_horizontal) {
// we already got one
throw new InvalidParamException("value",
expression.getValue(),
getPropertyName(), ac);
}
got_horizontal = true;
values.add(ident);
expression.next();
continue;
}
ident = getAllowedVerticalIdent(id);
if (ident != null) {
if (got_vertical) {
// we already got one
throw new InvalidParamException("value",
expression.getValue(),
getPropertyName(), ac);
}
got_vertical = true;
values.add(ident);
expression.next();
continue;
}
if (pinch_zoom.equals(id)) {
if (got_pinch_zoom) {
// we already got one
throw new InvalidParamException("value",
expression.getValue(),
getPropertyName(), ac);
}
got_pinch_zoom = true;
values.add(pinch_zoom);
expression.next();
continue;
}
throw new InvalidParamException("value", val.toString(),
getPropertyName(), ac);
}
// no need to check for single values as it was done earlier.
value = (values.size() == 1) ? values.get(0) : new CssValueList(values);
}
public CssTouchAction(ApplContext ac, CssExpression expression)
throws InvalidParamException {
this(ac, expression, false);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy