All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nu.validator.localentities.files.script.js Maven / Gradle / Ivy

/*
 * Copyright (c) 2005-2007 Henri Sivonen
 * Copyright (c) 2007-2010 Mozilla Foundation
 * Copyright (c) 2007 Simon Pieters
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */
var hasDuplicateMessages = false
var currentOl = null
var ungroupedOl = null
var groupedOl = null
var urlInput = null
var fileInput = null
var textarea = null
var textareaHidden = null
var dynamicStyle = null
var prevHash = null
var hasTextContent = (createHtmlElement('code').textContent != undefined)

var linePattern = /^#l-?[0-9]+$/
var rangePattern = /^#l-?[0-9]+c[0-9]+$/
var exactPattern = /^#cl-?[0-9]+c[0-9]+$/

function boot() {
	schemaChanged()
	parserChanged()
	installHandlers()
}

function reboot() {
	boot()
	initFieldHolders()
	installDynamicStyle()
	updateFragmentIdHilite()
	window.setInterval(emulateHashChanged, 50)
	initGrouping()
}

function installDynamicStyle() {
	dynamicStyle = createHtmlElement('style')
	document.documentElement.firstChild.appendChild(dynamicStyle)
}

function installHandlers() {
	if (document.forms && document.forms.length) {
		document.forms[0].onsubmit = formSubmission
	}
	var schema = document.getElementById("schema")
	if (schema) {
		schema.onchange = schemaChanged
	}
	var preset = document.getElementById("preset")
	if (preset) {
		preset.onchange = presetChanged
	}
	var parser = document.getElementById("parser")
	if (parser) {
		parser.onchange = parserChanged
	}
}

function initFieldHolders() {
	urlInput = document.getElementById('doc')
	urlInput.setAttribute('aria-labelledby', 'docselect')
	
	textareaHidden = createHtmlElement('input')
	textarea = createHtmlElement('textarea')
	if (textarea && textareaHidden) {
		textareaHidden.type = 'hidden'
		textareaHidden.name = 'content'
		textarea.cols = 72
		textarea.rows = 15
		textarea.id = 'doc'
		textarea.setAttribute('aria-labelledby', 'docselect')
		copySourceIntoTextArea()
		if (textarea.value == '') {
			textarea.value = '\n\n\nTest\n\n\n

\n\n' } } fileInput = createHtmlElement('input') if (fileInput) { fileInput.type = 'file' fileInput.id = 'doc' fileInput.name = 'file' fileInput.setAttribute('aria-labelledby', 'docselect') } var td = urlInput.parentNode if (td) { var th = td.previousSibling var label = th.firstChild var modeSelect = createHtmlElement("select") modeSelect.id = 'docselect' modeSelect.appendChild(createOption('Address', '')) modeSelect.appendChild(createOption('File Upload', 'file')) modeSelect.appendChild(createOption('Text Field', 'textarea')) modeSelect.onchange = function() { if (this.value == 'file') { installFileUpload() } else if (this.value == 'textarea') { installTextarea() } else { installUrlInput() } } th.replaceChild(modeSelect, label) } if (urlInput.className == 'file') { installFileUpload() modeSelect.value = 'file' } else if (urlInput.className == 'textarea') { installTextarea() modeSelect.value = 'textarea' } } function createOption(text, value) { var rv = createHtmlElement('option') rv.value = value var tn = document.createTextNode(text) rv.appendChild(tn) return rv } function schemaChanged() { var input = document.getElementById("schema") var select = document.getElementById("preset") if (input) { var value = input.value if (select) { if (select.firstChild) { for (var n = select.firstChild; n != null; n = n.nextSibling) { if (n.value == value) { n.selected = true toggleParsers(value) return } } select.firstChild.selected = true toggleParsers("") } } } } function presetChanged() { var input = document.getElementById("schema") var select = document.getElementById("preset") if (input && select) { input.value = select.value } toggleParsers(select.value) } function toggleParsers(newValue) { var preset = document.getElementById("preset") if (preset) { if (isHtmlCompatiblePreset(newValue)) { var select = document.getElementById("parser") if (select) { if (select.firstChild) { for (var n = select.firstChild; n != null; n = n.nextSibling) { n.disabled = false } if (document.getElementById('doc').name == 'content') { // text area case if (select.firstChild.selected) { select.firstChild.nextSibling.nextSibling.nextSibling.selected = true disableById('nsfilter') } select.firstChild.disabled = true } } } } else { var select = document.getElementById("parser") if (select) { if (select.firstChild) { if (select.firstChild.selected) { select.firstChild.nextSibling.selected = true } for (var n = select.firstChild; n != null; n = n.nextSibling) { n.disabled = (n.value == "" || isHtmlParserValue(n.value)) } } } } } } function isHtmlParserValue(parser) { return (parser.indexOf("html") == 0) } function isHtmlCompatiblePreset(preset) { return (preset == "" || preset.indexOf("http://s.validator.nu/xhtml10/xhtml-basic.rnc") == 0 || preset.indexOf("http://s.validator.nu/xhtml10/xhtml-frameset.rnc") == 0 || preset.indexOf("http://s.validator.nu/xhtml10/xhtml-strict.rnc") == 0 || preset.indexOf("http://s.validator.nu/xhtml10/xhtml-transitional.rnc") == 0 || preset.indexOf("http://s.validator.nu/html5.rnc") == 0 || preset.indexOf("http://s.validator.nu/html5-its.rnc") == 0 || preset.indexOf("http://s.validator.nu/html5-rdfalite.rnc") == 0) } function parserChanged() { var parser = document.getElementById("parser") if (parser) { if (isHtmlParserValue(parser.value)) { var select = document.getElementById("preset") if (select) { if (select.firstChild) { for (var n = select.firstChild; n != null; n = n.nextSibling) { n.disabled = !isHtmlCompatiblePreset(n.value) } } } var nsfilter = document.getElementById("nsfilter") if (nsfilter) { nsfilter.disabled = true } } else { var select = document.getElementById("preset") if (select) { if (select.firstChild) { for (var n = select.firstChild; n != null; n = n.nextSibling) { n.disabled = false } } } var nsfilter = document.getElementById("nsfilter") if (nsfilter) { nsfilter.disabled = false } } } } function formSubmission() { if (document.getElementsByTagName) { var form = document.getElementsByTagName("form")[0] if (form.checkValidity) { if (!form.checkValidity()) { return true } } } // disableById("submit") disableById("preset") disableByIdIfEmptyString("doc") disableByIdIfEmptyString("parser") disableByIdIfEmptyString("schema") disableByIdIfEmptyString("charset") disableByIdIfEmptyString("profile") disableByIdIfEmptyString("nsfilter") maybeMoveDocumentRowDown() if (textareaHidden && textarea) { textareaHidden.value = textarea.value } return true } function undoFormSubmission() { // enableById("submit") enableById("preset") enableById("doc") enableById("parser") enableById("schema") enableById("charset") enableById("profile") enableById("nsfilter") maybeMoveDocumentRowUp() schemaChanged() parserChanged() return true } function maybeMoveDocumentRowDown() { var field = document.getElementById('doc') if (field && field.name == 'file') { var td = field.parentNode if (td) { var tr = td.parentNode var tbody = tr.parentNode tbody.appendChild(tr) } } } function maybeMoveDocumentRowUp() { var field = document.getElementById('doc') if (field) { var td = field.parentNode if (td) { var tr = td.parentNode if (tr && tr.previousSibling) { var tbody = tr.parentNode tbody.insertBefore(tr, tbody.firstChild) } } } } function disableById(id) { var field = document.getElementById(id) if (field) { field.disabled = true } } function disableByIdIfEmptyString(id) { var field = document.getElementById(id) if (field) { if ("" == field.value) { field.disabled = true } } } function enableById(id) { var field = document.getElementById(id) if (field) { field.disabled = false } } function createHtmlElement(tagName) { return document.createElementNS ? document.createElementNS("http://www.w3.org/1999/xhtml", tagName) : document.createElement(tagName) } function installGroupingToggle() { var para = createHtmlElement('p') var button = createHtmlElement('input') button.type = 'button' button.value = 'Group Messages' para.appendChild(button) if (hasDuplicateMessages) { button.onclick = function() { if (currentOl == ungroupedOl) { currentOl.parentNode.replaceChild(groupedOl, currentOl) currentOl = groupedOl this.value = 'Ungroup Messages' } else { currentOl.parentNode.replaceChild(ungroupedOl, currentOl) currentOl = ungroupedOl this.value = 'Group Messages' } } } else { button.disabled = true } currentOl.parentNode.insertBefore(para, currentOl) } function initGrouping() { var n = document.documentElement.lastChild.firstChild while (n) { // The line below protects IE users from a crash if (n instanceof HTMLOListElement && n.className != 'source') { // deliberately IE-incompatible // if (n.start) { // cross-browser compatible currentOl = n break } n = n.nextSibling } if (!currentOl) { return } ungroupedOl = currentOl groupedOl = buildGrouped(ungroupedOl) installGroupingToggle() } function buildGrouped(ol) { var locListByMsg = {} var rv = createHtmlElement('ol') var li = ol.firstChild var i = 1 while (li) { var msgPara = li.firstChild var locExtract = createHtmlElement('li') locExtract.value = i var loc = msgPara.nextSibling var elaboration = null if (loc && loc.className && loc.className == 'location') { locExtract.appendChild(loc.cloneNode(true)) var extract = loc.nextSibling if (extract && extract.className && extract.className == 'extract') { locExtract.appendChild(extract.cloneNode(true)) elaboration = extract.nextSibling } else { elaboration = extract } } else { elaboration = loc var noLoc = createHtmlElement('p') noLoc.appendChild(document.createTextNode("(No location)")) locExtract.appendChild(noLoc) } var locList = null var msgText = msgPara.innerHTML locList = locListByMsg[msgText] if (locList) { hasDuplicateMessages = true } else { locList = createHtmlElement('ol') locListByMsg[msgText] = locList var msgItem = createHtmlElement('li') msgItem.className = li.className msgItem.appendChild(msgPara.cloneNode(true)) if (elaboration) { msgItem.appendChild(elaboration.cloneNode(true)) } msgItem.appendChild(locList) rv.appendChild(msgItem) } locList.appendChild(locExtract) li = li.nextSibling i++ } return rv } function reflow(element) { if (element.offsetHeight) { var reflow = element.offsetHeight } } function installTextarea() { var input = document.getElementById('doc') if (input && textarea) { var form = document.forms[0] if (form) { form.method = 'post' form.enctype = 'multipart/form-data' input.parentNode.replaceChild(textarea, input) reflow(textarea) disableById('charset') schemaChanged() } } if (textareaHidden) { var submit = document.getElementById("submit") if (submit) { submit.parentNode.appendChild(textareaHidden) } } var showSource = document.getElementById("showsource") if (showSource) { showSource.checked = true } } function installFileUpload() { var input = document.getElementById('doc') if (input && fileInput) { var form = document.forms[0] if (form) { form.method = 'post' form.enctype = 'multipart/form-data' input.parentNode.replaceChild(fileInput, input) reflow(fileInput) enableById('charset') schemaChanged() } } if (textareaHidden && textareaHidden.parentNode) { textareaHidden.parentNode.removeChild(textareaHidden) } } function installUrlInput() { var input = document.getElementById('doc') if (input && urlInput) { var form = document.forms[0] if (form) { form.method = 'get' form.enctype = '' input.parentNode.replaceChild(urlInput, input) reflow(urlInput) enableById('charset') schemaChanged() } } if (textareaHidden && textareaHidden.parentNode) { textareaHidden.parentNode.removeChild(textareaHidden) } } function copySourceIntoTextArea() { var strings = [] var source = null var n = document.documentElement.lastChild.firstChild while (n) { if (n.className == 'source') { source = n break } n = n.nextSibling } if (source && textarea) { var li = source.firstChild while (li) { var code = li.firstChild if (hasTextContent) { strings.push(code.textContent) } else { strings.push(code.innerText) } li = li.nextSibling } textarea.value = strings.join('\n') } } function updateFragmentIdHilite() { var fragment = window.location.hash var selector = null if (linePattern.exec(fragment)) { selector = fragment + " *" } else if (exactPattern.exec(fragment)) { selector = fragment } else if (rangePattern.exec(fragment)) { selector = "html b." + fragment.substring(1) } var rule = '' if (selector) { rule = selector + " { background-color: #FF6666; font-weight: bold; }" } var newStyle = createHtmlElement('style') var ex try { newStyle.appendChild(document.createTextNode(rule)) } catch (ex) { if (ex.number == -0x7FFF0001) { newStyle.styleSheet.cssText = rule } else { throw ex } } dynamicStyle.parentNode.replaceChild(newStyle, dynamicStyle) dynamicStyle = newStyle } function emulateHashChanged() { var hash = window.location.hash if (prevHash != hash) { updateFragmentIdHilite() prevHash = hash } } if (document.getElementById) { window.onload = reboot if (document.addEventListener) { document.addEventListener("DOMContentLoaded", function() { window.onload = undefined reboot() }, false) } window.onunload = undoFormSubmission window.onabort = undoFormSubmission boot() }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy