public boolean isShowReportWindow() { for (SAXParseException error : parseErrors) { if (configuration.mustShowWindowForError(error)) return true; } return false; }
@Override public AppendingStringBuffer filter(AppendingStringBuffer responseBuffer) { if(enabled) { return super.filter(responseBuffer); } else { return responseBuffer; } }
private void generateLines(StringBuilder sb) { Tag td = new Tag("td"); Tag pre = new Tag("pre").attr("class", "lines", "prettyprint"); sb.append(td.getOpenTag()); sb.append(pre.getOpenTag()); for (int i = 1; i <= lines.length; i++) { String line = lines[i - 1]; if (hasError(i)) { generateErrorLine(sb, line, i); } else { generateCodeLine(sb, line, i); } } sb.append(pre.getCloseTag()); sb.append(td.getCloseTag()); sb.append("\n"); }
private void generateErrorLine(StringBuilder sb, String line, int i) { SAXParseException error = getError(i); Tag code = new Tag("code"); if (hasError(i)) { code.attr("class", "error"); code.attr("title", Strings.escapeMarkup(error.getMessage())); } else { code.attr("class", "language-xml"); } if (Strings.isEmpty(line)) code.setBody(" "); else code.setBody(Strings.escapeMarkup(line)); sb.append(code.toString()); }
public String getBodyMarkup() { StringBuilder sb = new StringBuilder(); sb.append("<div id=\"validationreportwindow\" class=\"validation-report\"" + (isShowReportWindow() ? "" : " style=\"display:none\"") + ">"); sb.append("<div class=\"validation-header\">\n"); sb.append("<button class=\"close\" onclick=\"document.getElementById('validationreportwindow').style.display='none';\">×</button>\n"); if (isValid()) sb.append("<h3>Generated document is valid " + doctype + "</h3>\n"); else sb.append("<h3>Markup errors found in generated document</h3>\n"); sb.append("</div>\n"); sb.append("<div class=\"validation-content\">\n"); generateSourceView(sb); sb.append("</div>\n"); sb.append("<div class=\"validation-footer\">\n"); generateFooter(sb); sb.append("</div>\n"); sb.append("</div>"); sb.append("<a class=\"validationreportbadge\" href=\"#\" onclick=\"document.getElementById('validationreportwindow').style.display='block';\" title=\"Content is " + (isValid() ? "valid" : "invalid") + " " + doctype + "\">"); sb.append(imgFor("HTML5_Badge_32.png").toString()); sb.append("</a>"); return sb.toString(); }
/** * Called when the validated markup does not contain any errors. * * @param responseBuffer * the validated response markup * @param report * the validation report */ protected void onValidMarkup(AppendingStringBuffer responseBuffer, ValidationReport report) { IRequestablePage responsePage = getResponsePage(); DocType doctype = getDocType(responseBuffer); log.info("Markup for {} is valid {}", responsePage != null ? responsePage.getClass().getName() : "<unable to determine page class>", doctype.name()); String head = report.getHeadMarkup(); String body = report.getBodyMarkup(); int indexOfHeadClose = responseBuffer.lastIndexOf("</head>"); responseBuffer.insert(indexOfHeadClose, head); int indexOfBodyClose = responseBuffer.lastIndexOf("</body>"); responseBuffer.insert(indexOfBodyClose, body); }
@Override public String toString() { if ("img|link".contains(name)) return getOpenCloseTag(); if (Strings.isEmpty(body)) return getOpenTag() + getCloseTag(); return getOpenTag() + body + getCloseTag(); }
public String getHeadMarkup() { StringBuilder sb = new StringBuilder(); sb.append("\t" + cssFor("prettify/prettify.css") + "\n"); sb.append("\t" + cssFor("validator.css") + "\n"); sb.append("\t" + jsFor("prettify/prettify.js") + "\n"); sb.append("\t" + "<script>\n"); sb.append("\t\t" + "if(window.addEventListener) {\n"); sb.append("\t\t\twindow.addEventListener('load',function (event) { prettyPrint() },false);\n"); sb.append("\t\t" + "} else {\n"); sb.append("\t\t\twindow.attachEvent('onload',function (event) { prettyPrint() });\n"); sb.append("\t\t" + "}\n"); sb.append("\t" + "</script>\n"); return sb.toString(); }
/** * Gets the DOCTYPE from the response. Returns {@code null} when the DOCTYPE * is not detected, or unknown. See {@link DocType} for supported DOCTYPEs. */ protected DocType getDocType(AppendingStringBuffer response) { String contentSoFar = getFirstCharacters(response, 128); Matcher matcher = DOCTYPE_PATTERN.matcher(contentSoFar); if (!matcher.find()) return null; String docTypeStr = matcher.group(); if (Strings.isEmpty(docTypeStr)) return null; DocType docType = DocType.getDocType(docTypeStr); return docType; }
/** * Called when the validated markup contains errors. * * @param responseBuffer * the validated response markup * @param report * the validation report containing the errors */ protected void onInvalidMarkup(AppendingStringBuffer responseBuffer, ValidationReport report) { String head = report.getHeadMarkup(); String body = report.getBodyMarkup(); int indexOfHeadClose = responseBuffer.lastIndexOf("</head>"); responseBuffer.insert(indexOfHeadClose, head); int indexOfBodyClose = responseBuffer.lastIndexOf("</body>"); responseBuffer.insert(indexOfBodyClose, body); }
@Override public void init(WebApplication webApplication) { if (RuntimeConfigurationType.DEVELOPMENT == webApplication.getConfigurationType()) { webApplication.getMarkupSettings().setStripWicketTags(true); webApplication.getRequestCycleSettings().addResponseFilter(new HtmlValidationResponseFilter()); } }
/** * Constructs the validator using the default configuration object. You can * access and modify configuration through {@link #getConfiguration()}. */ public HtmlValidationResponseFilter() { this(new HtmlValidationConfiguration()); }
public Tag attr(String name, CharSequence... values) { this.attributes.add(new Attribute(name, values)); return this; }
private void generateErrorList(StringBuilder sb) { sb.append("<div class=\"markup-errors\">\n"); for (SAXParseException curError : parseErrors) { generateErrorItem(sb, curError); } sb.append("</div>\n"); }
private void setMetaData(String msg) { IRequestablePage responsePage = getResponsePage(); if (responsePage instanceof Page) { ((Page) responsePage).setMetaData(HtmlValidationResultKey.KEY, msg); } }
@Override public void init(WebApplication webApplication) { if (RuntimeConfigurationType.DEVELOPMENT == webApplication.getConfigurationType()) { webApplication.getMarkupSettings().setStripWicketTags(true); webApplication.getRequestCycleSettings().addResponseFilter(new HtmlValidationResponseFilter()); } }