diff -r 7fcb9d12e181 -r 0c3e6e66881f server/src/main/webapp/static/js/thymol.js --- a/server/src/main/webapp/static/js/thymol.js Wed Jun 25 15:37:02 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,376 +0,0 @@ -/*-------------------- Thymol - the flavour of Thymeleaf --------------------* - - Thymol version 0.1.2 Copyright 2012 James J. Benson. - jjbenson .AT. users.sf.net - - Licensed 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 expressed or implied. - See the License for the specific language governing permissions and - limitations under the License. - - *---------------------------------------------------------------------------*/ - -var thURL = "http://www.thymeleaf.org"; -var thPrefix = "th"; -var thProtocol = "file:///"; -var thCache = new Object; - -$(function() { - thymol(); -}); - -var thymol = function() { - - var urlParams = {}; - (function() { - var e, a = /\+/g, r = /([^&=]+)=?([^&]*)/g, d = function(s) { - return decodeURIComponent(s.replace(a, " ")); - }, f = function(s) { - return new Param(d(s)); - }, q = window.location.search.substring(1); - while (e = r.exec(q)) { - urlParams[d(e[1])] = f(e[2]); - } - })(); - - var debug = getThParam("thDebug",true,false); - var root = getThParam("thRoot",false,true); - var path = getThParam("thPath",false,true); - - $.ajaxSetup({ - async : false, - isLocal : true - }); - - (function() { - var htmlTag = $("html")[0]; - $(htmlTag.attributes).each(function() { - if (thURL == this.value) { - var nsspec = this.localName.split(":"); - if (nsspec.length > 0) { - thPrefix = nsspec[nsspec.length - 1]; - return; - } - } - }); - })(); - - var thIncl = new ThObj("include"); - var thSubs = new ThObj("substituteby"); - var thIf = new ThObj("if"); - var thUnless = new ThObj("unless"); - var thSwitch = new ThObj("switch"); - var thCase = new ThObj("case"); - - var thFragEscp = "[" + thPrefix + "\\:fragment='"; - var base = new ThNode(document, false, null, null, null, document.nodeName, "::", false, document); - process(base); - return; - - function process(base) { - var n = base; - while (n.thDoc) { - getChildren(n); - if (n.firstChild && n.firstChild.thDoc && !n.visited) { - n.visited = true; - n = n.firstChild; - } - else { - doReplace(n.isNode, n.element, n.thDoc); - if (n.nextSibling && n.nextSibling.thDoc) { - n = n.nextSibling; - } - else { - if (n == base) - break; - else { - n = n.parentDoc; - } - } - } - } - } - - function getChildren(base) { - var thIfSpecs = $(thIf.escp, base.thDoc); - var thUnlessSpecs = $(thUnless.escp, base.thDoc); - var thSwitchSpecs = $(thSwitch.escp, base.thDoc); - var ths = $(thIfSpecs).add(thUnlessSpecs).add(thSwitchSpecs); - ths.each(function() { - var element = this; - $(element.attributes).each(function() { - var thAttr = this; - if (thIf.name == thAttr.name || thUnless.name == thAttr.name || thSwitch.name == thAttr.name) { - processConditional(element, base, thAttr); - } - }); - }); - var thInclSpecs = $(thIncl.escp, base.thDoc); - var thSubsSpecs = $(thSubs.escp, base.thDoc); - ths = $(thInclSpecs).add(thSubsSpecs); - var count = 0; - var last = null; - ths.each(function() { - var element = this; - $(element.attributes).each(function() { - var thAttr = this; - if (thIncl.name == thAttr.name || thSubs.name == thAttr.name) { - var child = processImport(element, base, thAttr); - if( child != null ) { - if (count == 0) { - base.firstChild = child; - } - else { - last.nextSibling = child; - } - last = child; - count++; - } - } - }); - }); - } - - function processConditional(element, base, attr) { - var args = attr.value.match(/[$\*#]{(!?.*)}/); - var processed = false; - if (args.length > 0) { - var param = args[1]; - if (thSwitch.name == attr.name) { - processed = processSwitch(element, base, attr, param); - } - else { - var negate = false; - if (args[1].charAt(0) == '!') { - negate = true; - param = args[1].substring(1); - } - if ((!negate && isTrue(param)) || (negate && !isTrue(param))) { - if (thUnless.name == attr.name) { // true for "if" and - // false for "unless" - element.innerHTML = ""; - } - processed = true; - } - else { - if (thIf.name == attr.name) { // false for "if", true for - // "unless" - element.innerHTML = ""; - } - processed = true; - } - - } - } - if (!processed && debug) { - window.alert("thymol.processConditional cannot process: " + attr.name + "=\"" + attr.value + "\"\n" + element.innerHTML); - } - element.removeAttribute(attr.name); - } - - function processSwitch(element, base, attr, param) { - var matched = false; - var haveDefault = false; - var thCaseSpecs = $(thCase.escp, element); - thCaseSpecs.each(function() { - var caseClause = this; - var remove = true; - $(caseClause.attributes).each(function() { - var ccAttr = this; - if (thCase.name == ccAttr.name) { - if (!matched) { - var s = urlParams[param]; - if (ccAttr.value == "*" || (s && (s.getStringValue() == ccAttr.value))) { - matched = true; - remove = false; - } - } - caseClause.removeAttribute(ccAttr.name); - } - }); - if (remove) { - caseClause.innerHTML = ""; - } - }); - return matched; - } - - function processImport(element, base, attr) { - var importNode = null; - var filePart = null; - var fragmentPart = "::"; - if (attr.value.indexOf("::") < 0) { - filePart = getFilePart(attr.value); - } - else { - var names = attr.value.split("::"); - filePart = getFilePart(names[0].trim()); - fragmentPart = substitute(names[1].trim()); - } - var isNode = (thSubs.name == attr.localName); - if (thCache[filePart] != null && thCache[filePart][fragmentPart] != null) { - isNode = ((thSubs.name == attr.localName) || (fragmentPart == "::")); - importNode = new ThNode(thCache[filePart][fragmentPart], false, base, null, null, filePart, fragmentPart, isNode, element); - } - else { - var fileName = filePart + ".html"; - $.get(fileName, function(content, status) { - if ("success" == status) { - if (thCache[filePart] == null) { - thCache[filePart] = new Object; - } - if (fragmentPart == "::") { - var htmlContent = $("html", content)[0]; - thCache[filePart][fragmentPart] = htmlContent; - } - else { - var fragSpec = thFragEscp + fragmentPart + "']"; - var fragArray = $(fragSpec, content); - $(fragArray).each(function() { - thCache[filePart][fragmentPart] = this; - }); - } - importNode = new ThNode(thCache[filePart][fragmentPart], false, base, null, null, filePart, fragmentPart, isNode, element); - } - else if (debug) { - window.alert("file read failed: " + filePart + " fragment: " + fragmentPart); - } - }, "xml"); - if (importNode == null && debug) { - window.alert("fragment import failed: " + filePart + " fragment: " + fragmentPart); - } - } - element.removeAttribute(attr.name); - return importNode; - } - - function getFilePart(part) { - var result = substitute(part); - if( result.charAt(0) != '.' ) { // Initial period character indicates a relative path - if( result.indexOf('/') >= 0 ) { // If it doesn't start with a '.', and there are no path separators, it's also treated as relative - result = thProtocol + root + path + result; - } - } - return result; - } - - function doReplace(isNode, element, content) { - if (isNode) { - element.parentNode.replaceChild(content.cloneNode(true), element); - } - else { - try { - element.innerHTML = content.innerHTML; - } - catch (err) { // Work-around for IE - while (element.firstChild != null) { - element.removeChild(element.firstChild); - } - for (i = 0; i < content.childNodes.length; i++) { - element.appendChild(content.childNodes[i].cloneNode(true)); - } - } - } - } - - function ThNode(thDoc, visited, parentDoc, firstChild, nextSibling, fileName, fragName, isNode, element) { - this.thDoc = thDoc; - this.visited = visited; - this.parentDoc = parentDoc; - this.firstChild = firstChild; - this.nextSibling = nextSibling; - this.fileName = fileName; - this.fragName = fragName; - this.isNode = isNode; - this.element = element; - } - - function ThObj(suffix) { - this.name = thPrefix + ":" + suffix; - this.escp = "[" + thPrefix + "\\:" + suffix + "]"; - } - - function Param(valueArg) { - this.value = valueArg; - this.getBooleanValue = function() { - return !(this.value == "false" || this.value == "off" || this.value == "no"); - }; - this.getStringValue = function() { - return this.value; - }; - this.getNumericValue = function() { - return Number(this.value); - }; - } - - function isTrue(arg) { - var p = urlParams[arg]; - if (p) { - return p.getBooleanValue(); - } - return false; - } - - function substitute(argValue) { - var result = argValue; - var args = argValue.match(/[$\*#]{(!?.*)}/); - if (args != null && args.length > 0) { - var param = args[1]; - if(param) { - var paramValue = urlParams[param]; - if (paramValue) { - result = paramValue.value; - } - } - } - return result; - } - - function getThParam(paramName,isBoolean,isPath) { - var localValue; - if( isBoolean ) { - localValue = false; - } - else { - localValue = ""; - } - var theParam = urlParams[paramName]; - if (isBoolean && theParam) { - localValue = theParam.getBooleanValue(); - } - else { - var paramValue; - try { - paramValue = eval(paramName); - if( !(typeof paramValue === "undefined") ) { - if( paramValue != null ) { - if ( isBoolean ) { - localValue = (paramValue==true); - } - else { - localValue = paramValue; - } - } - } - } - catch (err) { - if (err instanceof ReferenceError) { - } - if (err instanceof EvalError) { - } - } - } - if( !isBoolean && isPath && localValue.length > 0 && localValue.charAt(localValue.length-1) != '/' ) { - localValue = localValue + '/'; - } - return localValue; - } - -}; \ No newline at end of file