<!-- Used in OSGi manifests --> | <!-- Used in OSGi manifests --> | ||||
<javax.validation.version>2.0.1.Final</javax.validation.version> | <javax.validation.version>2.0.1.Final</javax.validation.version> | ||||
<jsoup.version>1.11.2</jsoup.version> | |||||
<jsoup.version>1.14.2</jsoup.version> | |||||
<javax.portlet.version>2.0</javax.portlet.version> | <javax.portlet.version>2.0</javax.portlet.version> | ||||
<vaadin.sass.version>0.9.13</vaadin.sass.version> | <vaadin.sass.version>0.9.13</vaadin.sass.version> | ||||
<!-- Note that this should be kept in sync with the class Constants --> | <!-- Note that this should be kept in sync with the class Constants --> |
private static Document createHtml(DesignContext designContext) { | private static Document createHtml(DesignContext designContext) { | ||||
// Create the html tree skeleton. | // Create the html tree skeleton. | ||||
Document doc = new Document(""); | Document doc = new Document(""); | ||||
DocumentType docType = new DocumentType("html", "", "", ""); | |||||
DocumentType docType = new DocumentType("html", "", ""); | |||||
doc.appendChild(docType); | doc.appendChild(docType); | ||||
Element html = doc.createElement("html"); | Element html = doc.createElement("html"); | ||||
doc.appendChild(html); | doc.appendChild(html); |
import java.io.ByteArrayInputStream; | import java.io.ByteArrayInputStream; | ||||
import java.io.ByteArrayOutputStream; | import java.io.ByteArrayOutputStream; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Arrays; | |||||
import java.util.Collection; | import java.util.Collection; | ||||
import java.util.Collections; | import java.util.Collections; | ||||
import java.util.HashSet; | import java.util.HashSet; | ||||
import org.jsoup.Jsoup; | import org.jsoup.Jsoup; | ||||
import org.jsoup.nodes.Attribute; | import org.jsoup.nodes.Attribute; | ||||
import org.jsoup.nodes.BooleanAttribute; | |||||
import org.jsoup.nodes.Element; | import org.jsoup.nodes.Element; | ||||
import org.jsoup.nodes.Node; | import org.jsoup.nodes.Node; | ||||
import org.jsoup.nodes.TextNode; | import org.jsoup.nodes.TextNode; | ||||
import com.vaadin.ui.declarative.ShouldWriteDataDelegate; | import com.vaadin.ui.declarative.ShouldWriteDataDelegate; | ||||
public abstract class DeclarativeTestBaseBase<T extends Component> { | public abstract class DeclarativeTestBaseBase<T extends Component> { | ||||
private static final String[] booleanAttributes = { "allowfullscreen", | |||||
"async", "autofocus", "checked", "compact", "declare", "default", | |||||
"defer", "disabled", "formnovalidate", "hidden", "inert", "ismap", | |||||
"itemscope", "multiple", "muted", "nohref", "noresize", "noshade", | |||||
"novalidate", "nowrap", "open", "readonly", "required", "reversed", | |||||
"seamless", "selected", "sortable", "truespeed", "typemustmatch" }; | |||||
private static final class AlwaysWriteDelegate | private static final class AlwaysWriteDelegate | ||||
implements ShouldWriteDataDelegate { | implements ShouldWriteDataDelegate { | ||||
private static final long serialVersionUID = -6345914431997793599L; | private static final long serialVersionUID = -6345914431997793599L; | ||||
List<String> names = new ArrayList<>(); | List<String> names = new ArrayList<>(); | ||||
for (Attribute a : producedElem.attributes().asList()) { | for (Attribute a : producedElem.attributes().asList()) { | ||||
names.add(a.getKey()); | names.add(a.getKey()); | ||||
if (a instanceof BooleanAttribute) { | |||||
if (isBooleanAttribute(a.getKey())) { | |||||
booleanAttributes.add(a.getKey()); | booleanAttributes.add(a.getKey()); | ||||
} | } | ||||
} | } | ||||
return sb.toString(); | return sb.toString(); | ||||
} | } | ||||
/** | |||||
* Checks if this attribute name is defined as a boolean attribute in HTML5 | |||||
*/ | |||||
protected static boolean isBooleanAttribute(final String key) { | |||||
return Arrays.binarySearch(booleanAttributes, key) >= 0; | |||||
} | |||||
protected String stripOptionTags(String design) { | protected String stripOptionTags(String design) { | ||||
return design.replaceAll("[ \n]*<option(.*)</option>[ \n]*", ""); | return design.replaceAll("[ \n]*<option(.*)</option>[ \n]*", ""); | ||||
private Document componentToDoc(DesignContext dc) { | private Document componentToDoc(DesignContext dc) { | ||||
// Create the html tree skeleton. | // Create the html tree skeleton. | ||||
Document doc = new Document(""); | Document doc = new Document(""); | ||||
DocumentType docType = new DocumentType("html", "", "", ""); | |||||
DocumentType docType = new DocumentType("html", "", ""); | |||||
doc.appendChild(docType); | doc.appendChild(docType); | ||||
Element html = doc.createElement("html"); | Element html = doc.createElement("html"); | ||||
doc.appendChild(html); | doc.appendChild(html); | ||||
public void testParsing() { | public void testParsing() { | ||||
// create an html document | // create an html document | ||||
Document doc = new Document(""); | Document doc = new Document(""); | ||||
DocumentType docType = new DocumentType("html", "", "", ""); | |||||
DocumentType docType = new DocumentType("html", "", ""); | |||||
doc.appendChild(docType); | doc.appendChild(docType); | ||||
Element html = doc.createElement("html"); | Element html = doc.createElement("html"); | ||||
doc.appendChild(html); | doc.appendChild(html); |
private Document createDesign() { | private Document createDesign() { | ||||
Document doc = new Document(""); | Document doc = new Document(""); | ||||
DocumentType docType = new DocumentType("html", "", "", ""); | |||||
DocumentType docType = new DocumentType("html", "", ""); | |||||
doc.appendChild(docType); | doc.appendChild(docType); | ||||
Element html = doc.createElement("html"); | Element html = doc.createElement("html"); | ||||
doc.appendChild(html); | doc.appendChild(html); |
@Override | @Override | ||||
public void modifyBootstrapPage(BootstrapPageResponse response) { | public void modifyBootstrapPage(BootstrapPageResponse response) { | ||||
response.getDocument().body() | response.getDocument().body() | ||||
.appendChild(new Comment("Powered by Vaadin!", "")); | |||||
.appendChild(new Comment("Powered by Vaadin!")); | |||||
response.setHeader("X-Powered-By", "Vaadin 7"); | response.setHeader("X-Powered-By", "Vaadin 7"); | ||||
} | } | ||||