http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/dtl.js.uncompressed.js ---------------------------------------------------------------------- diff --git a/components/camel-web/src/main/webapp/js/dojox/dtl.js.uncompressed.js b/components/camel-web/src/main/webapp/js/dojox/dtl.js.uncompressed.js deleted file mode 100644 index 2892842..0000000 --- a/components/camel-web/src/main/webapp/js/dojox/dtl.js.uncompressed.js +++ /dev/null @@ -1,2856 +0,0 @@ -/* - Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - -/* - This is a compiled version of Dojo, built for deployment and not for - development. To get an editable version, please visit: - - http://dojotoolkit.org - - for documentation and information on getting the source. -*/ - -if(!dojo._hasResource["dojox.string.Builder"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.string.Builder"] = true; -dojo.provide("dojox.string.Builder"); - -dojox.string.Builder = function(/*String?*/str){ - // summary: - // A fast buffer for creating large strings. - // - // length: Number - // The current length of the internal string. - - // N.B. the public nature of the internal buffer is no longer - // needed because the IE-specific fork is no longer needed--TRT. - var b = ""; - this.length = 0; - - this.append = function(/* String... */s){ - // summary: Append all arguments to the end of the buffer - if(arguments.length>1){ - /* - This is a loop unroll was designed specifically for Firefox; - it would seem that static index access on an Arguments - object is a LOT faster than doing dynamic index access. - Therefore, we create a buffer string and take advantage - of JS's switch fallthrough. The peformance of this method - comes very close to straight up string concatenation (+=). - - If the arguments object length is greater than 9, we fall - back to standard dynamic access. - - This optimization seems to have no real effect on either - Safari or Opera, so we just use it for all. - - It turns out also that this loop unroll can increase performance - significantly with Internet Explorer, particularly when - as many arguments are provided as possible. - - Loop unroll per suggestion from Kris Zyp, implemented by - Tom Trenka. - - Note: added empty string to force a string cast if needed. - */ - var tmp="", l=arguments.length; - switch(l){ - case 9: tmp=""+arguments[8]+tmp; - case 8: tmp=""+arguments[7]+tmp; - case 7: tmp=""+arguments[6]+tmp; - case 6: tmp=""+arguments[5]+tmp; - case 5: tmp=""+arguments[4]+tmp; - case 4: tmp=""+arguments[3]+tmp; - case 3: tmp=""+arguments[2]+tmp; - case 2: { - b+=""+arguments[0]+arguments[1]+tmp; - break; - } - default: { - var i=0; - while(i<arguments.length){ - tmp += arguments[i++]; - } - b += tmp; - } - } - } else { - b += s; - } - this.length = b.length; - return this; // dojox.string.Builder - }; - - this.concat = function(/*String...*/s){ - // summary: - // Alias for append. - return this.append.apply(this, arguments); // dojox.string.Builder - }; - - this.appendArray = function(/*Array*/strings) { - // summary: - // Append an array of items to the internal buffer. - - // Changed from String.prototype.concat.apply because of IE. - return this.append.apply(this, strings); // dojox.string.Builder - }; - - this.clear = function(){ - // summary: - // Remove all characters from the buffer. - b = ""; - this.length = 0; - return this; // dojox.string.Builder - }; - - this.replace = function(/* String */oldStr, /* String */ newStr){ - // summary: - // Replace instances of one string with another in the buffer. - b = b.replace(oldStr,newStr); - this.length = b.length; - return this; // dojox.string.Builder - }; - - this.remove = function(/* Number */start, /* Number? */len){ - // summary: - // Remove len characters starting at index start. If len - // is not provided, the end of the string is assumed. - if(len===undefined){ len = b.length; } - if(len == 0){ return this; } - b = b.substr(0, start) + b.substr(start+len); - this.length = b.length; - return this; // dojox.string.Builder - }; - - this.insert = function(/* Number */index, /* String */str){ - // summary: - // Insert string str starting at index. - if(index == 0){ - b = str + b; - }else{ - b = b.slice(0, index) + str + b.slice(index); - } - this.length = b.length; - return this; // dojox.string.Builder - }; - - this.toString = function(){ - // summary: - // Return the string representation of the internal buffer. - return b; // String - }; - - // initialize the buffer. - if(str){ this.append(str); } -}; - -} - -if(!dojo._hasResource["dojox.string.tokenize"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.string.tokenize"] = true; -dojo.provide("dojox.string.tokenize"); - -dojox.string.tokenize = function(/*String*/ str, /*RegExp*/ re, /*Function?*/ parseDelim, /*Object?*/ instance){ - // summary: - // Split a string by a regular expression with the ability to capture the delimeters - // parseDelim: - // Each group (excluding the 0 group) is passed as a parameter. If the function returns - // a value, it's added to the list of tokens. - // instance: - // Used as the "this" instance when calling parseDelim - var tokens = []; - var match, content, lastIndex = 0; - while(match = re.exec(str)){ - content = str.slice(lastIndex, re.lastIndex - match[0].length); - if(content.length){ - tokens.push(content); - } - if(parseDelim){ - if(dojo.isOpera){ - var copy = match.slice(0); - while(copy.length < match.length){ - copy.push(null); - } - match = copy; - } - var parsed = parseDelim.apply(instance, match.slice(1).concat(tokens.length)); - if(typeof parsed != "undefined"){ - tokens.push(parsed); - } - } - lastIndex = re.lastIndex; - } - content = str.slice(lastIndex); - if(content.length){ - tokens.push(content); - } - return tokens; -} - -} - -if(!dojo._hasResource["dojox.dtl._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl._base"] = true; -dojo.provide("dojox.dtl._base"); - - - - -dojo.experimental("dojox.dtl"); - -(function(){ - var dd = dojox.dtl; - - dd.TOKEN_BLOCK = -1; - dd.TOKEN_VAR = -2; - dd.TOKEN_COMMENT = -3; - dd.TOKEN_TEXT = 3; - - dd._Context = dojo.extend(function(dict){ - // summary: Pass one of these when rendering a template to tell the template what values to use. - dojo._mixin(this, dict || {}); - this._dicts = []; - }, - { - push: function(){ - var last = this; - var context = dojo.delegate(this); - context.pop = function(){ return last; } - return context; - }, - pop: function(){ - throw new Error("pop() called on empty Context"); - }, - get: function(key, otherwise){ - if(typeof this[key] != "undefined"){ - return this._normalize(this[key]); - } - - for(var i = 0, dict; dict = this._dicts[i]; i++){ - if(typeof dict[key] != "undefined"){ - return this._normalize(dict[key]); - } - } - - return otherwise; - }, - _normalize: function(value){ - if(value instanceof Date){ - value.year = value.getFullYear(); - value.month = value.getMonth() + 1; - value.day = value.getDate(); - value.date = value.year + "-" + ("0" + value.month).slice(-2) + "-" + ("0" + value.day).slice(-2); - value.hour = value.getHours(); - value.minute = value.getMinutes(); - value.second = value.getSeconds(); - value.microsecond = value.getMilliseconds(); - } - return value; - }, - update: function(dict){ - var context = this.push(); - if(dict){ - dojo._mixin(this, dict); - } - return context; - } - }); - - var smart_split_re = /("(?:[^"\\]*(?:\\.[^"\\]*)*)"|'(?:[^'\\]*(?:\\.[^'\\]*)*)'|[^\s]+)/g; - var split_re = /\s+/g; - var split = function(/*String|RegExp?*/ splitter, /*Integer?*/ limit){ - splitter = splitter || split_re; - if(!(splitter instanceof RegExp)){ - splitter = new RegExp(splitter, "g"); - } - if(!splitter.global){ - throw new Error("You must use a globally flagged RegExp with split " + splitter); - } - splitter.exec(""); // Reset the global - - var part, parts = [], lastIndex = 0, i = 0; - while(part = splitter.exec(this)){ - parts.push(this.slice(lastIndex, splitter.lastIndex - part[0].length)); - lastIndex = splitter.lastIndex; - if(limit && (++i > limit - 1)){ - break; - } - } - parts.push(this.slice(lastIndex)); - return parts; - } - - dd.Token = function(token_type, contents){ - this.token_type = token_type; - this.contents = new String(dojo.trim(contents)); - this.contents.split = split; - this.split = function(){ - return String.prototype.split.apply(this.contents, arguments); - } - } - dd.Token.prototype.split_contents = function(/*Integer?*/ limit){ - var bit, bits = [], i = 0; - limit = limit || 999; - while(i++ < limit && (bit = smart_split_re.exec(this.contents))){ - bit = bit[0]; - if(bit.charAt(0) == '"' && bit.slice(-1) == '"'){ - bits.push('"' + bit.slice(1, -1).replace('\\"', '"').replace('\\\\', '\\') + '"'); - }else if(bit.charAt(0) == "'" && bit.slice(-1) == "'"){ - bits.push("'" + bit.slice(1, -1).replace("\\'", "'").replace('\\\\', '\\') + "'"); - }else{ - bits.push(bit); - } - } - return bits; - } - - var ddt = dd.text = { - _get: function(module, name, errorless){ - // summary: Used to find both tags and filters - var params = dd.register.get(module, name.toLowerCase(), errorless); - if(!params){ - if(!errorless){ - throw new Error("No tag found for " + name); - } - return null; - } - - var fn = params[1]; - var require = params[2]; - - var parts; - if(fn.indexOf(":") != -1){ - parts = fn.split(":"); - fn = parts.pop(); - } - - dojo["require"](require); - - var parent = dojo.getObject(require); - - return parent[fn || name] || parent[name + "_"] || parent[fn + "_"]; - }, - getTag: function(name, errorless){ - return ddt._get("tag", name, errorless); - }, - getFilter: function(name, errorless){ - return ddt._get("filter", name, errorless); - }, - getTemplate: function(file){ - return new dd.Template(ddt.getTemplateString(file)); - }, - getTemplateString: function(file){ - return dojo._getText(file.toString()) || ""; - }, - _resolveLazy: function(location, sync, json){ - if(sync){ - if(json){ - return dojo.fromJson(dojo._getText(location)) || {}; - }else{ - return dd.text.getTemplateString(location); - } - }else{ - return dojo.xhrGet({ - handleAs: (json) ? "json" : "text", - url: location - }); - } - }, - _resolveTemplateArg: function(arg, sync){ - if(ddt._isTemplate(arg)){ - if(!sync){ - var d = new dojo.Deferred(); - d.callback(arg); - return d; - } - return arg; - } - return ddt._resolveLazy(arg, sync); - }, - _isTemplate: function(arg){ - return (typeof arg == "undefined") || (typeof arg == "string" && (arg.match(/^\s*[<{]/) || arg.indexOf(" ") != -1)); - }, - _resolveContextArg: function(arg, sync){ - if(arg.constructor == Object){ - if(!sync){ - var d = new dojo.Deferred; - d.callback(arg); - return d; - } - return arg; - } - return ddt._resolveLazy(arg, sync, true); - }, - _re: /(?:\{\{\s*(.+?)\s*\}\}|\{%\s*(load\s*)?(.+?)\s*%\})/g, - tokenize: function(str){ - return dojox.string.tokenize(str, ddt._re, ddt._parseDelims); - }, - _parseDelims: function(varr, load, tag){ - if(varr){ - return [dd.TOKEN_VAR, varr]; - }else if(load){ - var parts = dojo.trim(tag).split(/\s+/g); - for(var i = 0, part; part = parts[i]; i++){ - dojo["require"](part); - } - }else{ - return [dd.TOKEN_BLOCK, tag]; - } - } - } - - dd.Template = dojo.extend(function(/*String|dojo._Url*/ template, /*Boolean*/ isString){ - // template: - // The string or location of the string to - // use as a template - var str = isString ? template : ddt._resolveTemplateArg(template, true) || ""; - var tokens = ddt.tokenize(str); - var parser = new dd._Parser(tokens); - this.nodelist = parser.parse(); - }, - { - update: function(node, context){ - // node: DOMNode|String|dojo.NodeList - // A node reference or set of nodes - // context: dojo._Url|String|Object - // The context object or location - return ddt._resolveContextArg(context).addCallback(this, function(contextObject){ - var content = this.render(new dd._Context(contextObject)); - if(node.forEach){ - node.forEach(function(item){ - item.innerHTML = content; - }); - }else{ - dojo.byId(node).innerHTML = content; - } - return this; - }); - }, - render: function(context, /*concatenatable?*/ buffer){ - buffer = buffer || this.getBuffer(); - context = context || new dd._Context({}); - return this.nodelist.render(context, buffer) + ""; - }, - getBuffer: function(){ - - return new dojox.string.Builder(); - } - }); - - var qfRe = /\{\{\s*(.+?)\s*\}\}/g; - dd.quickFilter = function(str){ - if(!str){ - return new dd._NodeList(); - } - - if(str.indexOf("{%") == -1){ - return new dd._QuickNodeList(dojox.string.tokenize(str, qfRe, function(token){ - return new dd._Filter(token); - })); - } - } - - dd._QuickNodeList = dojo.extend(function(contents){ - this.contents = contents; - }, - { - render: function(context, buffer){ - for(var i=0, l=this.contents.length; i<l; i++){ - if(this.contents[i].resolve){ - buffer = buffer.concat(this.contents[i].resolve(context)); - }else{ - buffer = buffer.concat(this.contents[i]); - } - } - return buffer; - }, - dummyRender: function(context){ return this.render(context, dd.Template.prototype.getBuffer()).toString(); }, - clone: function(buffer){ return this; } - }); - - dd._Filter = dojo.extend(function(token){ - // summary: Uses a string to find (and manipulate) a variable - if(!token) throw new Error("Filter must be called with variable name"); - this.contents = token; - - var cache = this._cache[token]; - if(cache){ - this.key = cache[0]; - this.filters = cache[1]; - }else{ - this.filters = []; - dojox.string.tokenize(token, this._re, this._tokenize, this); - this._cache[token] = [this.key, this.filters]; - } - }, - { - _cache: {}, - _re: /(?:^_\("([^\\"]*(?:\\.[^\\"])*)"\)|^"([^\\"]*(?:\\.[^\\"]*)*)"|^([a-zA-Z0-9_.]+)|\|(\w+)(?::(?:_\("([^\\"]*(?:\\.[^\\"])*)"\)|"([^\\"]*(?:\\.[^\\"]*)*)"|([a-zA-Z0-9_.]+)|'([^\\']*(?:\\.[^\\']*)*)'))?|^'([^\\']*(?:\\.[^\\']*)*)')/g, - _values: { - 0: '"', // _("text") - 1: '"', // "text" - 2: "", // variable - 8: '"' // 'text' - }, - _args: { - 4: '"', // :_("text") - 5: '"', // :"text" - 6: "", // :variable - 7: "'"// :'text' - }, - _tokenize: function(){ - var pos, arg; - - for(var i = 0, has = []; i < arguments.length; i++){ - has[i] = (typeof arguments[i] != "undefined" && typeof arguments[i] == "string" && arguments[i]); - } - - if(!this.key){ - for(pos in this._values){ - if(has[pos]){ - this.key = this._values[pos] + arguments[pos] + this._values[pos]; - break; - } - } - }else{ - for(pos in this._args){ - if(has[pos]){ - var value = arguments[pos]; - if(this._args[pos] == "'"){ - value = value.replace(/\\'/g, "'"); - }else if(this._args[pos] == '"'){ - value = value.replace(/\\"/g, '"'); - } - arg = [!this._args[pos], value]; - break; - } - } - // Get a named filter - var fn = ddt.getFilter(arguments[3]); - if(!dojo.isFunction(fn)) throw new Error(arguments[3] + " is not registered as a filter"); - this.filters.push([fn, arg]); - } - }, - getExpression: function(){ - return this.contents; - }, - resolve: function(context){ - if(typeof this.key == "undefined"){ - return ""; - } - - var str = this.resolvePath(this.key, context); - - for(var i = 0, filter; filter = this.filters[i]; i++){ - // Each filter has the function in [0], a boolean in [1][0] of whether it's a variable or a string - // and [1][1] is either the variable name of the string content. - if(filter[1]){ - if(filter[1][0]){ - str = filter[0](str, this.resolvePath(filter[1][1], context)); - }else{ - str = filter[0](str, filter[1][1]); - } - }else{ - str = filter[0](str); - } - } - - return str; - }, - resolvePath: function(path, context){ - var current, parts; - var first = path.charAt(0); - var last = path.slice(-1); - if(!isNaN(parseInt(first))){ - current = (path.indexOf(".") == -1) ? parseInt(path) : parseFloat(path); - }else if(first == '"' && first == last){ - current = path.slice(1, -1); - }else{ - if(path == "true"){ return true; } - if(path == "false"){ return false; } - if(path == "null" || path == "None"){ return null; } - parts = path.split("."); - current = context.get(parts[0]); - - if(dojo.isFunction(current)){ - var self = context.getThis && context.getThis(); - if(current.alters_data){ - current = ""; - }else if(self){ - current = current.call(self); - }else{ - current = ""; - } - } - - for(var i = 1; i < parts.length; i++){ - var part = parts[i]; - if(current){ - var base = current; - if(dojo.isObject(current) && part == "items" && typeof current[part] == "undefined"){ - var items = []; - for(var key in current){ - items.push([key, current[key]]); - } - current = items; - continue; - } - - if(current.get && dojo.isFunction(current.get) && current.get.safe){ - current = current.get(part); - }else if(typeof current[part] == "undefined"){ - current = current[part]; - break; - }else{ - current = current[part]; - } - - if(dojo.isFunction(current)){ - if(current.alters_data){ - current = ""; - }else{ - current = current.call(base); - } - }else if(current instanceof Date){ - current = dd._Context.prototype._normalize(current); - } - }else{ - return ""; - } - } - } - return current; - } - }); - - dd._TextNode = dd._Node = dojo.extend(function(/*Object*/ obj){ - // summary: Basic catch-all node - this.contents = obj; - }, - { - set: function(data){ - this.contents = data; - return this; - }, - render: function(context, buffer){ - // summary: Adds content onto the buffer - return buffer.concat(this.contents); - }, - isEmpty: function(){ - return !dojo.trim(this.contents); - }, - clone: function(){ return this; } - }); - - dd._NodeList = dojo.extend(function(/*Node[]*/ nodes){ - // summary: Allows us to render a group of nodes - this.contents = nodes || []; - this.last = ""; - }, - { - push: function(node){ - // summary: Add a new node to the list - this.contents.push(node); - return this; - }, - concat: function(nodes){ - this.contents = this.contents.concat(nodes); - return this; - }, - render: function(context, buffer){ - // summary: Adds all content onto the buffer - for(var i = 0; i < this.contents.length; i++){ - buffer = this.contents[i].render(context, buffer); - if(!buffer) throw new Error("Template must return buffer"); - } - return buffer; - }, - dummyRender: function(context){ - return this.render(context, dd.Template.prototype.getBuffer()).toString(); - }, - unrender: function(){ return arguments[1]; }, - clone: function(){ return this; }, - rtrim: function(){ - while(1){ - i = this.contents.length - 1; - if(this.contents[i] instanceof dd._TextNode && this.contents[i].isEmpty()){ - this.contents.pop(); - }else{ - break; - } - } - - return this; - } - }); - - dd._VarNode = dojo.extend(function(str){ - // summary: A node to be processed as a variable - this.contents = new dd._Filter(str); - }, - { - render: function(context, buffer){ - var str = this.contents.resolve(context); - if(!str.safe){ - str = dd._base.escape("" + str); - } - return buffer.concat(str); - } - }); - - dd._noOpNode = new function(){ - // summary: Adds a no-op node. Useful in custom tags - this.render = this.unrender = function(){ return arguments[1]; } - this.clone = function(){ return this; } - } - - dd._Parser = dojo.extend(function(tokens){ - // summary: Parser used during initialization and for tag groups. - this.contents = tokens; - }, - { - i: 0, - parse: function(/*Array?*/ stop_at){ - // summary: Turns tokens into nodes - // description: Steps into tags are they're found. Blocks use the parse object - // to find their closing tag (the stop_at array). stop_at is inclusive, it - // returns the node that matched. - var terminators = {}; - stop_at = stop_at || []; - for(var i = 0; i < stop_at.length; i++){ - terminators[stop_at[i]] = true; - } - - var nodelist = new dd._NodeList(); - while(this.i < this.contents.length){ - token = this.contents[this.i++]; - if(typeof token == "string"){ - nodelist.push(new dd._TextNode(token)); - }else{ - var type = token[0]; - var text = token[1]; - if(type == dd.TOKEN_VAR){ - nodelist.push(new dd._VarNode(text)); - }else if(type == dd.TOKEN_BLOCK){ - if(terminators[text]){ - --this.i; - return nodelist; - } - var cmd = text.split(/\s+/g); - if(cmd.length){ - cmd = cmd[0]; - var fn = ddt.getTag(cmd); - if(fn){ - nodelist.push(fn(this, new dd.Token(type, text))); - } - } - } - } - } - - if(stop_at.length){ - throw new Error("Could not find closing tag(s): " + stop_at.toString()); - } - - this.contents.length = 0; - return nodelist; - }, - next_token: function(){ - // summary: Returns the next token in the list. - var token = this.contents[this.i++]; - return new dd.Token(token[0], token[1]); - }, - delete_first_token: function(){ - this.i++; - }, - skip_past: function(endtag){ - while(this.i < this.contents.length){ - var token = this.contents[this.i++]; - if(token[0] == dd.TOKEN_BLOCK && token[1] == endtag){ - return; - } - } - throw new Error("Unclosed tag found when looking for " + endtag); - }, - create_variable_node: function(expr){ - return new dd._VarNode(expr); - }, - create_text_node: function(expr){ - return new dd._TextNode(expr || ""); - }, - getTemplate: function(file){ - return new dd.Template(file); - } - }); - - dd.register = { - _registry: { - attributes: [], - tags: [], - filters: [] - }, - get: function(/*String*/ module, /*String*/ name){ - var registry = dd.register._registry[module + "s"]; - for(var i = 0, entry; entry = registry[i]; i++){ - if(typeof entry[0] == "string"){ - if(entry[0] == name){ - return entry; - } - }else if(name.match(entry[0])){ - return entry; - } - } - }, - getAttributeTags: function(){ - var tags = []; - var registry = dd.register._registry.attributes; - for(var i = 0, entry; entry = registry[i]; i++){ - if(entry.length == 3){ - tags.push(entry); - }else{ - var fn = dojo.getObject(entry[1]); - if(fn && dojo.isFunction(fn)){ - entry.push(fn); - tags.push(entry); - } - } - } - return tags; - }, - _any: function(type, base, locations){ - for(var path in locations){ - for(var i = 0, fn; fn = locations[path][i]; i++){ - var key = fn; - if(dojo.isArray(fn)){ - key = fn[0]; - fn = fn[1]; - } - if(typeof key == "string"){ - if(key.substr(0, 5) == "attr:"){ - var attr = fn.toLowerCase(); - if(attr.substr(0, 5) == "attr:"){ - attr = attr.slice(5); - } - dd.register._registry.attributes.push([attr, base + "." + path + "." + attr]); - } - key = key.toLowerCase(); - } - dd.register._registry[type].push([ - key, - fn, - base + "." + path - ]); - } - } - }, - tags: function(/*String*/ base, /*Object*/ locations){ - dd.register._any("tags", base, locations); - }, - filters: function(/*String*/ base, /*Object*/ locations){ - dd.register._any("filters", base, locations); - } - } - - var escapeamp = /&/g; - var escapelt = /</g; - var escapegt = />/g; - var escapeqt = /'/g; - var escapedblqt = /"/g; - dd._base.escape = function(value){ - // summary: Escapes a string's HTML - return dd.mark_safe(value.replace(escapeamp, '&').replace(escapelt, '<').replace(escapegt, '>').replace(escapedblqt, '"').replace(escapeqt, ''')); - } - - dd._base.safe = function(value){ - if(typeof value == "string"){ - value = new String(value); - } - if(typeof value == "object"){ - value.safe = true; - } - return value; - } - dd.mark_safe = dd._base.safe; - - dd.register.tags("dojox.dtl.tag", { - "date": ["now"], - "logic": ["if", "for", "ifequal", "ifnotequal"], - "loader": ["extends", "block", "include", "load", "ssi"], - "misc": ["comment", "debug", "filter", "firstof", "spaceless", "templatetag", "widthratio", "with"], - "loop": ["cycle", "ifchanged", "regroup"] - }); - dd.register.filters("dojox.dtl.filter", { - "dates": ["date", "time", "timesince", "timeuntil"], - "htmlstrings": ["linebreaks", "linebreaksbr", "removetags", "striptags"], - "integers": ["add", "get_digit"], - "lists": ["dictsort", "dictsortreversed", "first", "join", "length", "length_is", "random", "slice", "unordered_list"], - "logic": ["default", "default_if_none", "divisibleby", "yesno"], - "misc": ["filesizeformat", "pluralize", "phone2numeric", "pprint"], - "strings": ["addslashes", "capfirst", "center", "cut", "fix_ampersands", "floatformat", "iriencode", "linenumbers", "ljust", "lower", "make_list", "rjust", "slugify", "stringformat", "title", "truncatewords", "truncatewords_html", "upper", "urlencode", "urlize", "urlizetrunc", "wordcount", "wordwrap"] - }); - dd.register.filters("dojox.dtl", { - "_base": ["escape", "safe"] - }); -})(); - -} - -if(!dojo._hasResource["dojox.dtl"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl"] = true; -dojo.provide("dojox.dtl"); - - -} - -if(!dojo._hasResource["dojox.dtl.Context"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl.Context"] = true; -dojo.provide("dojox.dtl.Context"); - - -dojox.dtl.Context = dojo.extend(function(dict){ - this._this = {}; - dojox.dtl._Context.call(this, dict); -}, dojox.dtl._Context.prototype, -{ - getKeys: function(){ - var keys = []; - for(var key in this){ - if(this.hasOwnProperty(key) && key != "_dicts" && key != "_this"){ - keys.push(key); - } - } - return keys; - }, - extend: function(/*dojox.dtl.Context|Object*/ obj){ - // summary: Returns a clone of this context object, with the items from the - // passed objecct mixed in. - return dojo.delegate(this, obj); - }, - filter: function(/*dojox.dtl.Context|Object|String...*/ filter){ - // summary: Returns a clone of this context, only containing the items - // defined in the filter. - var context = new dojox.dtl.Context(); - var keys = []; - var i, arg; - if(filter instanceof dojox.dtl.Context){ - keys = filter.getKeys(); - }else if(typeof filter == "object"){ - for(var key in filter){ - keys.push(key); - } - }else{ - for(i = 0; arg = arguments[i]; i++){ - if(typeof arg == "string"){ - keys.push(arg); - } - } - } - - for(i = 0, key; key = keys[i]; i++){ - context[key] = this[key]; - } - - return context; - }, - setThis: function(/*Object*/ _this){ - this._this = _this; - }, - getThis: function(){ - return this._this; - }, - hasKey: function(key){ - if(typeof this[key] != "undefined"){ - return true; - } - - for(var i = 0, dict; dict = this._dicts[i]; i++){ - if(typeof dict[key] != "undefined"){ - return true; - } - } - - return false; - } -}); - -} - -if(!dojo._hasResource["dojox.dtl.tag.logic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl.tag.logic"] = true; -dojo.provide("dojox.dtl.tag.logic"); - - - -(function(){ - var dd = dojox.dtl; - var ddt = dd.text; - var ddtl = dd.tag.logic; - - ddtl.IfNode = dojo.extend(function(bools, trues, falses, type){ - this.bools = bools; - this.trues = trues; - this.falses = falses; - this.type = type; - }, - { - render: function(context, buffer){ - var i, bool, ifnot, filter, value; - if(this.type == "or"){ - for(i = 0; bool = this.bools[i]; i++){ - ifnot = bool[0]; - filter = bool[1]; - value = filter.resolve(context); - if((value && !ifnot) || (ifnot && !value)){ - if(this.falses){ - buffer = this.falses.unrender(context, buffer); - } - return (this.trues) ? this.trues.render(context, buffer, this) : buffer; - } - } - if(this.trues){ - buffer = this.trues.unrender(context, buffer); - } - return (this.falses) ? this.falses.render(context, buffer, this) : buffer; - }else{ - for(i = 0; bool = this.bools[i]; i++){ - ifnot = bool[0]; - filter = bool[1]; - value = filter.resolve(context); - // If we ever encounter a false value - if(value == ifnot){ - if(this.trues){ - buffer = this.trues.unrender(context, buffer); - } - return (this.falses) ? this.falses.render(context, buffer, this) : buffer; - } - } - if(this.falses){ - buffer = this.falses.unrender(context, buffer); - } - return (this.trues) ? this.trues.render(context, buffer, this) : buffer; - } - return buffer; - }, - unrender: function(context, buffer){ - buffer = (this.trues) ? this.trues.unrender(context, buffer) : buffer; - buffer = (this.falses) ? this.falses.unrender(context, buffer) : buffer; - return buffer; - }, - clone: function(buffer){ - var trues = (this.trues) ? this.trues.clone(buffer) : null; - var falses = (this.falses) ? this.falses.clone(buffer) : null; - return new this.constructor(this.bools, trues, falses, this.type); - } - }); - - ddtl.IfEqualNode = dojo.extend(function(var1, var2, trues, falses, negate){ - this.var1 = new dd._Filter(var1); - this.var2 = new dd._Filter(var2); - this.trues = trues; - this.falses = falses; - this.negate = negate; - }, - { - render: function(context, buffer){ - var var1 = this.var1.resolve(context); - var var2 = this.var2.resolve(context); - var1 = (typeof var1 != "undefined") ? var1 : ""; - var2 = (typeof var1 != "undefined") ? var2 : ""; - if((this.negate && var1 != var2) || (!this.negate && var1 == var2)){ - if(this.falses){ - buffer = this.falses.unrender(context, buffer, this); - } - return (this.trues) ? this.trues.render(context, buffer, this) : buffer; - } - if(this.trues){ - buffer = this.trues.unrender(context, buffer, this); - } - return (this.falses) ? this.falses.render(context, buffer, this) : buffer; - }, - unrender: function(context, buffer){ - return ddtl.IfNode.prototype.unrender.call(this, context, buffer); - }, - clone: function(buffer){ - var trues = this.trues ? this.trues.clone(buffer) : null; - var falses = this.falses ? this.falses.clone(buffer) : null; - return new this.constructor(this.var1.getExpression(), this.var2.getExpression(), trues, falses, this.negate); - } - }); - - ddtl.ForNode = dojo.extend(function(assign, loop, reversed, nodelist){ - this.assign = assign; - this.loop = new dd._Filter(loop); - this.reversed = reversed; - this.nodelist = nodelist; - this.pool = []; - }, - { - render: function(context, buffer){ - var i, j, k; - var dirty = false; - var assign = this.assign; - - for(k = 0; k < assign.length; k++){ - if(typeof context[assign[k]] != "undefined"){ - dirty = true; - context = context.push(); - break; - } - } - if(!dirty && context.forloop){ - dirty = true; - context = context.push(); - } - - var items = this.loop.resolve(context) || []; - for(i = items.length; i < this.pool.length; i++){ - this.pool[i].unrender(context, buffer, this); - } - if(this.reversed){ - items = items.slice(0).reverse(); - } - - var isObject = dojo.isObject(items) && !dojo.isArrayLike(items); - var arred = []; - if(isObject){ - for(var key in items){ - arred.push(items[key]); - } - }else{ - arred = items; - } - - var forloop = context.forloop = { - parentloop: context.get("forloop", {}) - }; - var j = 0; - for(i = 0; i < arred.length; i++){ - var item = arred[i]; - - forloop.counter0 = j; - forloop.counter = j + 1; - forloop.revcounter0 = arred.length - j - 1; - forloop.revcounter = arred.length - j; - forloop.first = !j; - forloop.last = (j == arred.length - 1); - - if(assign.length > 1 && dojo.isArrayLike(item)){ - if(!dirty){ - dirty = true; - context = context.push(); - } - var zipped = {}; - for(k = 0; k < item.length && k < assign.length; k++){ - zipped[assign[k]] = item[k]; - } - dojo.mixin(context, zipped); - }else{ - context[assign[0]] = item; - } - - if(j + 1 > this.pool.length){ - this.pool.push(this.nodelist.clone(buffer)); - } - buffer = this.pool[j++].render(context, buffer, this); - } - - delete context.forloop; - if(dirty){ - context = context.pop(); - }else{ - for(k = 0; k < assign.length; k++){ - delete context[assign[k]]; - } - } - return buffer; - }, - unrender: function(context, buffer){ - for(var i = 0, pool; pool = this.pool[i]; i++){ - buffer = pool.unrender(context, buffer); - } - return buffer; - }, - clone: function(buffer){ - return new this.constructor(this.assign, this.loop.getExpression(), this.reversed, this.nodelist.clone(buffer)); - } - }); - - dojo.mixin(ddtl, { - if_: function(parser, token){ - var i, part, type, bools = [], parts = token.contents.split(); - parts.shift(); - token = parts.join(" "); - parts = token.split(" and "); - if(parts.length == 1){ - type = "or"; - parts = token.split(" or "); - }else{ - type = "and"; - for(i = 0; i < parts.length; i++){ - if(parts[i].indexOf(" or ") != -1){ - // Note, since we split by and, this is the only place we need to error check - throw new Error("'if' tags can't mix 'and' and 'or'"); - } - } - } - for(i = 0; part = parts[i]; i++){ - var not = false; - if(part.indexOf("not ") == 0){ - part = part.slice(4); - not = true; - } - bools.push([not, new dd._Filter(part)]); - } - var trues = parser.parse(["else", "endif"]); - var falses = false; - var token = parser.next_token(); - if(token.contents == "else"){ - falses = parser.parse(["endif"]); - parser.next_token(); - } - return new ddtl.IfNode(bools, trues, falses, type); - }, - _ifequal: function(parser, token, negate){ - var parts = token.split_contents(); - if(parts.length != 3){ - throw new Error(parts[0] + " takes two arguments"); - } - var end = 'end' + parts[0]; - var trues = parser.parse(["else", end]); - var falses = false; - var token = parser.next_token(); - if(token.contents == "else"){ - falses = parser.parse([end]); - parser.next_token(); - } - return new ddtl.IfEqualNode(parts[1], parts[2], trues, falses, negate); - }, - ifequal: function(parser, token){ - return ddtl._ifequal(parser, token); - }, - ifnotequal: function(parser, token){ - return ddtl._ifequal(parser, token, true); - }, - for_: function(parser, token){ - var parts = token.contents.split(); - if(parts.length < 4){ - throw new Error("'for' statements should have at least four words: " + token.contents); - } - var reversed = parts[parts.length - 1] == "reversed"; - var index = (reversed) ? -3 : -2; - if(parts[parts.length + index] != "in"){ - throw new Error("'for' tag received an invalid argument: " + token.contents); - } - var loopvars = parts.slice(1, index).join(" ").split(/ *, */); - for(var i = 0; i < loopvars.length; i++){ - if(!loopvars[i] || loopvars[i].indexOf(" ") != -1){ - throw new Error("'for' tag received an invalid argument: " + token.contents); - } - } - var nodelist = parser.parse(["endfor"]); - parser.next_token(); - return new ddtl.ForNode(loopvars, parts[parts.length + index + 1], reversed, nodelist); - } - }); -})(); - -} - -if(!dojo._hasResource["dojox.dtl.tag.loop"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl.tag.loop"] = true; -dojo.provide("dojox.dtl.tag.loop"); - - - - -(function(){ - var dd = dojox.dtl; - var ddtl = dd.tag.loop; - - ddtl.CycleNode = dojo.extend(function(cyclevars, name, text, shared){ - this.cyclevars = cyclevars; - this.name = name; - this.contents = text; - this.shared = shared || {counter: -1, map: {}}; - }, - { - render: function(context, buffer){ - if(context.forloop && !context.forloop.counter0){ - this.shared.counter = -1; - } - - ++this.shared.counter; - var value = this.cyclevars[this.shared.counter % this.cyclevars.length]; - - var map = this.shared.map; - if(!map[value]){ - map[value] = new dd._Filter(value); - } - value = map[value].resolve(context, buffer); - - if(this.name){ - context[this.name] = value; - } - this.contents.set(value); - return this.contents.render(context, buffer); - }, - unrender: function(context, buffer){ - return this.contents.unrender(context, buffer); - }, - clone: function(buffer){ - return new this.constructor(this.cyclevars, this.name, this.contents.clone(buffer), this.shared); - } - }); - - ddtl.IfChangedNode = dojo.extend(function(nodes, vars, shared){ - this.nodes = nodes; - this._vars = vars; - this.shared = shared || {last: null, counter: 0}; - this.vars = dojo.map(vars, function(item){ - return new dojox.dtl._Filter(item); - }); - }, { - render: function(context, buffer){ - if(context.forloop){ - if(context.forloop.counter <= this.shared.counter){ - this.shared.last = null; - } - this.shared.counter = context.forloop.counter; - } - - var change; - if(this.vars.length){ - change = dojo.toJson(dojo.map(this.vars, function(item){ - return item.resolve(context); - })); - }else{ - change = this.nodes.dummyRender(context, buffer); - } - - if(change != this.shared.last){ - var firstloop = (this.shared.last === null); - this.shared.last = change; - context = context.push(); - context.ifchanged = {firstloop: firstloop}; - buffer = this.nodes.render(context, buffer); - context = context.pop(); - }else{ - buffer = this.nodes.unrender(context, buffer); - } - return buffer; - }, - unrender: function(context, buffer){ - return this.nodes.unrender(context, buffer); - }, - clone: function(buffer){ - return new this.constructor(this.nodes.clone(buffer), this._vars, this.shared); - } - }); - - ddtl.RegroupNode = dojo.extend(function(expression, key, alias){ - this._expression = expression; - this.expression = new dd._Filter(expression); - this.key = key; - this.alias = alias; - }, - { - _push: function(container, grouper, stack){ - if(stack.length){ - container.push({ grouper: grouper, list: stack }); - } - }, - render: function(context, buffer){ - context[this.alias] = []; - var list = this.expression.resolve(context); - if(list){ - var last = null; - var stack = []; - for(var i = 0; i < list.length; i++){ - var id = list[i][this.key]; - if(last !== id){ - this._push(context[this.alias], last, stack); - last = id; - stack = [list[i]]; - }else{ - stack.push(list[i]); - } - } - this._push(context[this.alias], last, stack); - } - return buffer; - }, - unrender: function(context, buffer){ - return buffer; - }, - clone: function(context, buffer){ - return this; - } - }); - - dojo.mixin(ddtl, { - cycle: function(parser, token){ - // summary: Cycle among the given strings each time this tag is encountered - var args = token.split_contents(); - - if(args.length < 2){ - throw new Error("'cycle' tag requires at least two arguments"); - } - - if(args[1].indexOf(",") != -1){ - var vars = args[1].split(","); - args = [args[0]]; - for(var i = 0; i < vars.length; i++){ - args.push('"' + vars[i] + '"'); - } - } - - if(args.length == 2){ - var name = args[args.length - 1]; - - if(!parser._namedCycleNodes){ - throw new Error("No named cycles in template: '" + name + "' is not defined"); - } - if(!parser._namedCycleNodes[name]){ - throw new Error("Named cycle '" + name + "' does not exist"); - } - - return parser._namedCycleNodes[name]; - } - - if(args.length > 4 && args[args.length - 2] == "as"){ - var name = args[args.length - 1]; - - var node = new ddtl.CycleNode(args.slice(1, args.length - 2), name, parser.create_text_node()); - - if(!parser._namedCycleNodes){ - parser._namedCycleNodes = {}; - } - parser._namedCycleNodes[name] = node; - }else{ - node = new ddtl.CycleNode(args.slice(1), null, parser.create_text_node()); - } - - return node; - }, - ifchanged: function(parser, token){ - var parts = token.contents.split(); - var nodes = parser.parse(["endifchanged"]); - parser.delete_first_token(); - return new ddtl.IfChangedNode(nodes, parts.slice(1)); - }, - regroup: function(parser, token){ - var tokens = dojox.string.tokenize(token.contents, /(\s+)/g, function(spaces){ - return spaces; - }); - if(tokens.length < 11 || tokens[tokens.length - 3] != "as" || tokens[tokens.length - 7] != "by"){ - throw new Error("Expected the format: regroup list by key as newList"); - } - var expression = tokens.slice(2, -8).join(""); - var key = tokens[tokens.length - 5]; - var alias = tokens[tokens.length - 1]; - return new ddtl.RegroupNode(expression, key, alias); - } - }); -})(); - -} - -if(!dojo._hasResource["dojo.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo.date"] = true; -dojo.provide("dojo.date"); - -/*===== -dojo.date = { - // summary: Date manipulation utilities -} -=====*/ - -dojo.date.getDaysInMonth = function(/*Date*/dateObject){ - // summary: - // Returns the number of days in the month used by dateObject - var month = dateObject.getMonth(); - var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - if(month == 1 && dojo.date.isLeapYear(dateObject)){ return 29; } // Number - return days[month]; // Number -} - -dojo.date.isLeapYear = function(/*Date*/dateObject){ - // summary: - // Determines if the year of the dateObject is a leap year - // description: - // Leap years are years with an additional day YYYY-02-29, where the - // year number is a multiple of four with the following exception: If - // a year is a multiple of 100, then it is only a leap year if it is - // also a multiple of 400. For example, 1900 was not a leap year, but - // 2000 is one. - - var year = dateObject.getFullYear(); - return !(year%400) || (!(year%4) && !!(year%100)); // Boolean -} - -// FIXME: This is not localized -dojo.date.getTimezoneName = function(/*Date*/dateObject){ - // summary: - // Get the user's time zone as provided by the browser - // dateObject: - // Needed because the timezone may vary with time (daylight savings) - // description: - // Try to get time zone info from toString or toLocaleString method of - // the Date object -- UTC offset is not a time zone. See - // http://www.twinsun.com/tz/tz-link.htm Note: results may be - // inconsistent across browsers. - - var str = dateObject.toString(); // Start looking in toString - var tz = ''; // The result -- return empty string if nothing found - var match; - - // First look for something in parentheses -- fast lookup, no regex - var pos = str.indexOf('('); - if(pos > -1){ - tz = str.substring(++pos, str.indexOf(')')); - }else{ - // If at first you don't succeed ... - // If IE knows about the TZ, it appears before the year - // Capital letters or slash before a 4-digit year - // at the end of string - var pat = /([A-Z\/]+) \d{4}$/; - if((match = str.match(pat))){ - tz = match[1]; - }else{ - // Some browsers (e.g. Safari) glue the TZ on the end - // of toLocaleString instead of putting it in toString - str = dateObject.toLocaleString(); - // Capital letters or slash -- end of string, - // after space - pat = / ([A-Z\/]+)$/; - if((match = str.match(pat))){ - tz = match[1]; - } - } - } - - // Make sure it doesn't somehow end up return AM or PM - return (tz == 'AM' || tz == 'PM') ? '' : tz; // String -} - -// Utility methods to do arithmetic calculations with Dates - -dojo.date.compare = function(/*Date*/date1, /*Date?*/date2, /*String?*/portion){ - // summary: - // Compare two date objects by date, time, or both. - // description: - // Returns 0 if equal, positive if a > b, else negative. - // date1: - // Date object - // date2: - // Date object. If not specified, the current Date is used. - // portion: - // A string indicating the "date" or "time" portion of a Date object. - // Compares both "date" and "time" by default. One of the following: - // "date", "time", "datetime" - - // Extra step required in copy for IE - see #3112 - date1 = new Date(Number(date1)); - date2 = new Date(Number(date2 || new Date())); - - if(portion !== "undefined"){ - if(portion == "date"){ - // Ignore times and compare dates. - date1.setHours(0, 0, 0, 0); - date2.setHours(0, 0, 0, 0); - }else if(portion == "time"){ - // Ignore dates and compare times. - date1.setFullYear(0, 0, 0); - date2.setFullYear(0, 0, 0); - } - } - - if(date1 > date2){ return 1; } // int - if(date1 < date2){ return -1; } // int - return 0; // int -}; - -dojo.date.add = function(/*Date*/date, /*String*/interval, /*int*/amount){ - // summary: - // Add to a Date in intervals of different size, from milliseconds to years - // date: Date - // Date object to start with - // interval: - // A string representing the interval. One of the following: - // "year", "month", "day", "hour", "minute", "second", - // "millisecond", "quarter", "week", "weekday" - // amount: - // How much to add to the date. - - var sum = new Date(Number(date)); // convert to Number before copying to accomodate IE (#3112) - var fixOvershoot = false; - var property = "Date"; - - switch(interval){ - case "day": - break; - case "weekday": - //i18n FIXME: assumes Saturday/Sunday weekend, but this is not always true. see dojo.cldr.supplemental - - // Divide the increment time span into weekspans plus leftover days - // e.g., 8 days is one 5-day weekspan / and two leftover days - // Can't have zero leftover days, so numbers divisible by 5 get - // a days value of 5, and the remaining days make up the number of weeks - var days, weeks; - var mod = amount % 5; - if(!mod){ - days = (amount > 0) ? 5 : -5; - weeks = (amount > 0) ? ((amount-5)/5) : ((amount+5)/5); - }else{ - days = mod; - weeks = parseInt(amount/5); - } - // Get weekday value for orig date param - var strt = date.getDay(); - // Orig date is Sat / positive incrementer - // Jump over Sun - var adj = 0; - if(strt == 6 && amount > 0){ - adj = 1; - }else if(strt == 0 && amount < 0){ - // Orig date is Sun / negative incrementer - // Jump back over Sat - adj = -1; - } - // Get weekday val for the new date - var trgt = strt + days; - // New date is on Sat or Sun - if(trgt == 0 || trgt == 6){ - adj = (amount > 0) ? 2 : -2; - } - // Increment by number of weeks plus leftover days plus - // weekend adjustments - amount = (7 * weeks) + days + adj; - break; - case "year": - property = "FullYear"; - // Keep increment/decrement from 2/29 out of March - fixOvershoot = true; - break; - case "week": - amount *= 7; - break; - case "quarter": - // Naive quarter is just three months - amount *= 3; - // fallthrough... - case "month": - // Reset to last day of month if you overshoot - fixOvershoot = true; - property = "Month"; - break; - case "hour": - case "minute": - case "second": - case "millisecond": - property = "UTC"+interval.charAt(0).toUpperCase() + interval.substring(1) + "s"; - } - - if(property){ - sum["set"+property](sum["get"+property]()+amount); - } - - if(fixOvershoot && (sum.getDate() < date.getDate())){ - sum.setDate(0); - } - - return sum; // Date -}; - -dojo.date.difference = function(/*Date*/date1, /*Date?*/date2, /*String?*/interval){ - // summary: - // Get the difference in a specific unit of time (e.g., number of - // months, weeks, days, etc.) between two dates, rounded to the - // nearest integer. - // date1: - // Date object - // date2: - // Date object. If not specified, the current Date is used. - // interval: - // A string representing the interval. One of the following: - // "year", "month", "day", "hour", "minute", "second", - // "millisecond", "quarter", "week", "weekday" - // Defaults to "day". - - date2 = date2 || new Date(); - interval = interval || "day"; - var yearDiff = date2.getFullYear() - date1.getFullYear(); - var delta = 1; // Integer return value - - switch(interval){ - case "quarter": - var m1 = date1.getMonth(); - var m2 = date2.getMonth(); - // Figure out which quarter the months are in - var q1 = Math.floor(m1/3) + 1; - var q2 = Math.floor(m2/3) + 1; - // Add quarters for any year difference between the dates - q2 += (yearDiff * 4); - delta = q2 - q1; - break; - case "weekday": - var days = Math.round(dojo.date.difference(date1, date2, "day")); - var weeks = parseInt(dojo.date.difference(date1, date2, "week")); - var mod = days % 7; - - // Even number of weeks - if(mod == 0){ - days = weeks*5; - }else{ - // Weeks plus spare change (< 7 days) - var adj = 0; - var aDay = date1.getDay(); - var bDay = date2.getDay(); - - weeks = parseInt(days/7); - mod = days % 7; - // Mark the date advanced by the number of - // round weeks (may be zero) - var dtMark = new Date(date1); - dtMark.setDate(dtMark.getDate()+(weeks*7)); - var dayMark = dtMark.getDay(); - - // Spare change days -- 6 or less - if(days > 0){ - switch(true){ - // Range starts on Sat - case aDay == 6: - adj = -1; - break; - // Range starts on Sun - case aDay == 0: - adj = 0; - break; - // Range ends on Sat - case bDay == 6: - adj = -1; - break; - // Range ends on Sun - case bDay == 0: - adj = -2; - break; - // Range contains weekend - case (dayMark + mod) > 5: - adj = -2; - } - }else if(days < 0){ - switch(true){ - // Range starts on Sat - case aDay == 6: - adj = 0; - break; - // Range starts on Sun - case aDay == 0: - adj = 1; - break; - // Range ends on Sat - case bDay == 6: - adj = 2; - break; - // Range ends on Sun - case bDay == 0: - adj = 1; - break; - // Range contains weekend - case (dayMark + mod) < 0: - adj = 2; - } - } - days += adj; - days -= (weeks*2); - } - delta = days; - break; - case "year": - delta = yearDiff; - break; - case "month": - delta = (date2.getMonth() - date1.getMonth()) + (yearDiff * 12); - break; - case "week": - // Truncate instead of rounding - // Don't use Math.floor -- value may be negative - delta = parseInt(dojo.date.difference(date1, date2, "day")/7); - break; - case "day": - delta /= 24; - // fallthrough - case "hour": - delta /= 60; - // fallthrough - case "minute": - delta /= 60; - // fallthrough - case "second": - delta /= 1000; - // fallthrough - case "millisecond": - delta *= date2.getTime() - date1.getTime(); - } - - // Round for fractional values and DST leaps - return Math.round(delta); // Number (integer) -}; - -} - -if(!dojo._hasResource["dojox.date.php"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.date.php"] = true; -dojo.provide("dojox.date.php"); - - - -dojox.date.php.format = function(/*Date*/ date, /*String*/ format){ - // summary: Get a formatted string for a given date object - var df = new dojox.date.php.DateFormat(format); - return df.format(date); -} - -dojox.date.php.DateFormat = function(/*String*/ format){ - // summary: Format the internal date object - if(!this.regex){ - var keys = []; - for(var key in this.constructor.prototype){ - if(dojo.isString(key) && key.length == 1 && dojo.isFunction(this[key])){ - keys.push(key); - } - } - this.constructor.prototype.regex = new RegExp("(?:(\\\\.)|([" + keys.join("") + "]))", "g"); - } - - var replacements = []; - - this.tokens = dojox.string.tokenize(format, this.regex, function(escape, token, i){ - if(token){ - replacements.push([i, token]); - return token; - } - if(escape){ - return escape.charAt(1); - } - }); - - this.replacements = replacements; -} -dojo.extend(dojox.date.php.DateFormat, { - weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - weekdays_3: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - months_3: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - monthdays: [31,28,31,30,31,30,31,31,30,31,30,31], - - format: function(/*Date*/ date){ - this.date = date; - for(var i = 0, replacement; replacement = this.replacements[i]; i++){ - this.tokens[replacement[0]] = this[replacement[1]](); - } - return this.tokens.join(""); - }, - - // Day - - d: function(){ - // summary: Day of the month, 2 digits with leading zeros - var j = this.j(); - return (j.length == 1) ? "0" + j : j; - }, - - D: function(){ - // summary: A textual representation of a day, three letters - return this.weekdays_3[this.date.getDay()]; - }, - - j: function(){ - // summary: Day of the month without leading zeros - return this.date.getDate() + ""; - }, - - l: function(){ - // summary: A full textual representation of the day of the week - return this.weekdays[this.date.getDay()]; - }, - - N: function(){ - // summary: ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0) - var w = this.w(); - return (!w) ? 7 : w; - }, - - S: function(){ - // summary: English ordinal suffix for the day of the month, 2 characters - switch(this.date.getDate()){ - case 11: case 12: case 13: return "th"; - case 1: case 21: case 31: return "st"; - case 2: case 22: return "nd"; - case 3: case 23: return "rd"; - default: return "th"; - } - }, - - w: function(){ - // summary: Numeric representation of the day of the week - return this.date.getDay() + ""; - }, - - z: function(){ - // summary: The day of the year (starting from 0) - var millis = this.date.getTime() - new Date(this.date.getFullYear(), 0, 1).getTime(); - return Math.floor(millis/86400000) + ""; - }, - - // Week - - W: function(){ - // summary: ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0) - var week; - var jan1_w = new Date(this.date.getFullYear(), 0, 1).getDay() + 1; - var w = this.date.getDay() + 1; - var z = parseInt(this.z()); - - if(z <= (8 - jan1_w) && jan1_w > 4){ - var last_year = new Date(this.date.getFullYear() - 1, this.date.getMonth(), this.date.getDate()); - if(jan1_w == 5 || (jan1_w == 6 && dojo.date.isLeapYear(last_year))){ - week = 53; - }else{ - week = 52; - } - }else{ - var i; - if(Boolean(this.L())){ - i = 366; - }else{ - i = 365; - } - if((i - z) < (4 - w)){ - week = 1; - }else{ - var j = z + (7 - w) + (jan1_w - 1); - week = Math.ceil(j / 7); - if(jan1_w > 4){ - --week; - } - } - } - - return week; - }, - - // Month - - F: function(){ - // summary: A full textual representation of a month, such as January or March - return this.months[this.date.getMonth()]; - }, - - m: function(){ - // summary: Numeric representation of a month, with leading zeros - var n = this.n(); - return (n.length == 1) ? "0" + n : n; - }, - - M: function(){ - // summary: A short textual representation of a month, three letters - return this.months_3[this.date.getMonth()]; - }, - - n: function(){ - // summary: Numeric representation of a month, without leading zeros - return this.date.getMonth() + 1 + ""; - }, - - t: function(){ - // summary: Number of days in the given month - return (Boolean(this.L()) && this.date.getMonth() == 1) ? 29 : this.monthdays[this.getMonth()]; - }, - - // Year - - L: function(){ - // summary: Whether it's a leap year - return (dojo.date.isLeapYear(this.date)) ? "1" : "0"; - }, - - o: function(){ - // summary: - // ISO-8601 year number. This has the same value as Y, except that if - // the ISO week number (W) belongs to the previous or next year, that year is used instead. (added in PHP 5.1.0) - // TODO: Figure out what this means - }, - - Y: function(){ - // summary: A full numeric representation of a year, 4 digits - return this.date.getFullYear() + ""; - }, - - y: function(){ - // summary: A two digit representation of a year - return this.Y().slice(-2); - }, - - // Time - - a: function(){ - // summary: Lowercase Ante meridiem and Post meridiem - return this.date.getHours() >= 12 ? "pm" : "am"; - }, - - b: function(){ - // summary: Uppercase Ante meridiem and Post meridiem - return this.a().toUpperCase(); - }, - - B: function(){ - // summary: - // Swatch Internet time - // A day is 1,000 beats. All time is measured from GMT + 1 - var off = this.date.getTimezoneOffset() + 60; - var secs = (this.date.getHours() * 3600) + (this.date.getMinutes() * 60) + this.getSeconds() + (off * 60); - var beat = Math.abs(Math.floor(secs / 86.4) % 1000) + ""; - while(beat.length < 2) beat = "0" + beat; - return beat; - }, - - g: function(){ - // summary: 12-hour format of an hour without leading zeros - return (this.date.getHours() > 12) ? this.date.getHours() - 12 + "" : this.date.getHours() + ""; - }, - - G: function(){ - // summary: 24-hour format of an hour without leading zeros - return this.date.getHours() + ""; - }, - - h: function(){ - // summary: 12-hour format of an hour with leading zeros - var g = this.g(); - return (g.length == 1) ? "0" + g : g; - }, - - H: function(){ - // summary: 24-hour format of an hour with leading zeros - var G = this.G(); - return (G.length == 1) ? "0" + G : G; - }, - - i: function(){ - // summary: Minutes with leading zeros - var mins = this.date.getMinutes() + ""; - return (mins.length == 1) ? "0" + mins : mins; - }, - - s: function(){ - // summary: Seconds, with leading zeros - var secs = this.date.getSeconds() + ""; - return (secs.length == 1) ? "0" + secs : secs; - }, - - // Timezone - - e: function(){ - // summary: Timezone identifier (added in PHP 5.1.0) - return dojo.date.getTimezoneName(this.date); - }, - - I: function(){ - // summary: Whether or not the date is in daylight saving time - // TODO: Can dojo.date do this? - }, - - O: function(){ - // summary: Difference to Greenwich time (GMT) in hours - var off = Math.abs(this.date.getTimezoneOffset()); - var hours = Math.floor(off / 60) + ""; - var mins = (off % 60) + ""; - if(hours.length == 1) hours = "0" + hours; - if(mins.length == 1) hours = "0" + mins; - return ((this.date.getTimezoneOffset() < 0) ? "+" : "-") + hours + mins; - }, - - P: function(){ - // summary: Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3) - var O = this.O(); - return O.substring(0, 2) + ":" + O.substring(2, 4); - }, - - T: function(){ - // summary: Timezone abbreviation - - // Guess... - return this.e().substring(0, 3); - }, - - Z: function(){ - // summary: - // Timezone offset in seconds. The offset for timezones west of UTC is always negative, - // and for those east of UTC is always positive. - return this.date.getTimezoneOffset() * -60; - }, - - // Full Date/Time - - c: function(){ - // summary: ISO 8601 date (added in PHP 5) - return this.Y() + "-" + this.m() + "-" + this.d() + "T" + this.h() + ":" + this.i() + ":" + this.s() + this.P(); - }, - - r: function(){ - // summary: RFC 2822 formatted date - return this.D() + ", " + this.d() + " " + this.M() + " " + this.Y() + " " + this.H() + ":" + this.i() + ":" + this.s() + " " + this.O(); - }, - - U: function(){ - // summary: Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) - return Math.floor(this.date.getTime() / 1000); - } - -}); - -} - -if(!dojo._hasResource["dojox.dtl.utils.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl.utils.date"] = true; -dojo.provide("dojox.dtl.utils.date"); - - - -dojox.dtl.utils.date.DateFormat = function(/*String*/ format){ - dojox.date.php.DateFormat.call(this, format); -} -dojo.extend(dojox.dtl.utils.date.DateFormat, dojox.date.php.DateFormat.prototype, { - f: function(){ - // summary: - // Time, in 12-hour hours and minutes, with minutes left off if they're zero. - // description: - // Examples: '1', '1:30', '2:05', '2' - // Proprietary extension. - return (!this.date.getMinutes()) ? this.g() : this.g() + ":" + this.i(); - }, - N: function(){ - // summary: Month abbreviation in Associated Press style. Proprietary extension. - return dojox.dtl.utils.date._months_ap[this.date.getMonth()]; - }, - P: function(){ - // summary: - // Time, in 12-hour hours, minutes and 'a.m.'/'p.m.', with minutes left off - // if they're zero and the strings 'midnight' and 'noon' if appropriate. - // description: - // Examples: '1 a.m.', '1:30 p.m.', 'midnight', 'noon', '12:30 p.m.' - // Proprietary extension. - if(!this.date.getMinutes() && !this.date.getHours()){ - return 'midnight'; - } - if(!this.date.getMinutes() && this.date.getHours() == 12){ - return 'noon'; - } - return this.f() + " " + this.a(); - } -}); - -dojo.mixin(dojox.dtl.utils.date, { - format: function(/*Date*/ date, /*String*/ format){ - var df = new dojox.dtl.utils.date.DateFormat(format); - return df.format(date); - }, - timesince: function(d, now){ - // summary: - // Takes two datetime objects and returns the time between then and now - // as a nicely formatted string, e.g "10 minutes" - // description: - // Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since - if(!(d instanceof Date)){ - d = new Date(d.year, d.month, d.day); - } - if(!now){ - now = new Date(); - } - - var delta = Math.abs(now.getTime() - d.getTime()); - for(var i = 0, chunk; chunk = dojox.dtl.utils.date._chunks[i]; i++){ - var count = Math.floor(delta / chunk[0]); - if(count) break; - } - return count + " " + chunk[1](count); - }, - _chunks: [ - [60 * 60 * 24 * 365 * 1000, function(n){ return (n == 1) ? 'year' : 'years'; }], - [60 * 60 * 24 * 30 * 1000, function(n){ return (n == 1) ? 'month' : 'months'; }], - [60 * 60 * 24 * 7 * 1000, function(n){ return (n == 1) ? 'week' : 'weeks'; }], - [60 * 60 * 24 * 1000, function(n){ return (n == 1) ? 'day' : 'days'; }], - [60 * 60 * 1000, function(n){ return (n == 1) ? 'hour' : 'hours'; }], - [60 * 1000, function(n){ return (n == 1) ? 'minute' : 'minutes'; }] - ], - _months_ap: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."] -}); - -} - -if(!dojo._hasResource["dojox.dtl.tag.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl.tag.date"] = true; -dojo.provide("dojox.dtl.tag.date"); - - - - -dojox.dtl.tag.date.NowNode = function(format, node){ - this._format = format; - this.format = new dojox.dtl.utils.date.DateFormat(format); - this.contents = node; -} -dojo.extend(dojox.dtl.tag.date.NowNode, { - render: function(context, buffer){ - this.contents.set(this.format.format(new Date())); - return this.contents.render(context, buffer); - }, - unrender: function(context, buffer){ - return this.contents.unrender(context, buffer); - }, - clone: function(buffer){ - return new this.constructor(this._format, this.contents.clone(buffer)); - } -}); - -dojox.dtl.tag.date.now = function(parser, token){ - // Split by either :" or :' - var parts = token.split_contents(); - if(parts.length != 2){ - throw new Error("'now' statement takes one argument"); - } - return new dojox.dtl.tag.date.NowNode(parts[1].slice(1, -1), parser.create_text_node()); -} - -} - -if(!dojo._hasResource["dojox.dtl.tag.loader"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl.tag.loader"] = true; -dojo.provide("dojox.dtl.tag.loader"); - - - -(function(){ - var dd = dojox.dtl; - var ddtl = dd.tag.loader; - - ddtl.BlockNode = dojo.extend(function(name, nodelist){ - this.name = name; - this.nodelist = nodelist; // Can be overridden - }, - { - "super": function(){ - if(this.parent){ - var html = this.parent.nodelist.dummyRender(this.context, null, true); - if(typeof html == "string"){ - html = new String(html); - } - html.safe = true; - return html; - } - return ''; - }, - render: function(context, buffer){ - var name = this.name; - var nodelist = this.nodelist; - var parent; - if(buffer.blocks){ - var block = buffer.blocks[name]; - if(block){ - parent = block.parent; - nodelist = block.nodelist; - block.used = true; - } - } - - this.rendered = nodelist; - - context = context.push(); - this.context = context; - this.parent = null; - if(nodelist != this.nodelist){ - this.parent = this; - } - context.block = this; - - if(buffer.getParent){ - var bufferParent = buffer.getParent(); - var setParent = dojo.connect(buffer, "onSetParent", function(node, up, root){ - if(up && root){ - buffer.setParent(bufferParent); - } - }); - } - buffer = nodelist.render(context, buffer, this); - setParent && dojo.disconnect(setParent); - context = context.pop(); - return buffer; - }, - unrender: function(context, buffer){ - return this.rendered.unrender(context, buffer); - }, - clone: function(buffer){ - return new this.constructor(this.name, this.nodelist.clone(buffer)); - }, - toString: function(){ return "dojox.dtl.tag.loader.BlockNode"; } - }); - - ddtl.ExtendsNode = dojo.extend(function(getTemplate, nodelist, shared, parent, key){ - this.getTemplate = getTemplate; - this.nodelist = nodelist; - this.shared = shared; - this.parent = parent; - this.key = key; - }, - { - parents: {}, - getParent: function(context){ - var parent = this.parent; - if(!parent){ - var string; - parent = this.parent = context.get(this.key, false); - if(!parent){ - throw new Error("extends tag used a variable that did not resolve"); - } - if(typeof parent == "object"){ - var url = parent.url || parent.templatePath; - if(parent.shared){ - this.shared = true; - } - if(url){ - parent = this.parent = url.toString(); - }else if(parent.templateString){ - // Allow the builder's string interning to work - string = parent.templateString; - parent = this.parent = " "; - }else{ - parent = this.parent = this.parent.toString(); - } - } - if(parent && parent.indexOf("shared:") === 0){ - this.shared = true; - parent = this.parent = parent.substring(7, parent.length); - } - } - if(!parent){ - throw new Error("Invalid template name in 'extends' tag."); - } - if(parent.render){ - return parent; - } - if(this.parents[parent]){ - return this.parents[parent]; - } - this.parent = this.getTemplate(string || dojox.dtl.text.getTemplateString(parent)); - if(this.shared){ - this.parents[parent] = this.parent; - } - return this.parent; - }, - render: function(context, buffer){ - var parent = this.getParent(context); - - parent.blocks = parent.blocks || {}; - buffer.blocks = buffer.blocks || {}; - - for(var i = 0, node; node = this.nodelist.contents[i]; i++){ - if(node instanceof dojox.dtl.tag.loader.BlockNode){ - var old = parent.blocks[node.name]; - if(old && old.nodelist != node.nodelist){ - // In a shared template, the individual blocks might change - buffer = old.nodelist.unrender(context, buffer); - } - parent.blocks[node.name] = buffer.blocks[node.name] = { - shared: this.shared, - nodelist: node.nodelist, - used: false - } - } - } - - this.rendered = parent; - return parent.nodelist.render(context, buffer, this); - }, - unrender: function(context, buffer){ - return this.rendered.unrender(context, buffer, this); - }, - toString: function(){ return "dojox.dtl.block.ExtendsNode"; } - }); - - ddtl.IncludeNode = dojo.extend(function(path, constant, getTemplate, text, parsed){ - this._path = path; - this.constant = constant; - this.path = (constant) ? path : new dd._Filter(path); - this.getTemplate = getTemplate; - this.text = text; - this.parsed = (arguments.length == 5) ? parsed : true; - }, - { - _cache: [{}, {}], - render: function(context, buffer){ - var location = ((this.constant) ? this.path : this.path.resolve(context)).toString(); - var parsed = Number(this.parsed); - var dirty = false; - if(location != this.last){ - dirty = true; - if(this.last){ - buffer = this.unrender(context, buffer); - } - this.last = location; - } - - var cache = this._cache[parsed]; - - if(parsed){ - if(!cache[location]){ - cache[location] = dd.text._resolveTemplateArg(location, true); - } - if(dirty){ - var template = this.getTemplate(cache[location]); - this.rendered = template.nodelist; - } - return this.rendered.render(context, buffer, this); - }else{ - if(this.text instanceof dd._TextNode){ - if(dirty){ - this.rendered = this.text; - this.rendered.set(dd.text._resolveTemplateArg(location, true)); - } - return this.rendered.render(context, buffer); - }else{ - if(!cache[location]){ - var nodelist = []; - var div = document.createElement("div"); - div.innerHTML = dd.text._resolveTemplateArg(location, true); - var children = div.childNodes; - while(children.length){ - var removed = div.removeChild(children[0]); - nodelist.push(removed); - } - cache[location] = nodelist; - } - if(dirty){ - this.nodelist = []; - var exists = true; - for(var i = 0, child; child = cache[location][i]; i++){ - this.nodelist.push(child.cloneNode(true)); - } - } - for(var i = 0, node; node = this.nodelist[i]; i++){ - buffer = buffer.concat(node); - } - } - } - return buffer; - }, - unrender: function(context, buffer){ - if(this.rendered){ - buffer = this.rendered.unrender(context, buffer); - } - if(this.nodelist){ - for(var i = 0, node; node = this.nodelist[i]; i++){ - buffer = buffer.remove(node); - } - } - return buffer; - }, - clone: function(buffer){ - return new this.constructor(this._path, this.constant, this.getTemplate, this.text.clone(buffer), this.parsed); - } - }); - - dojo.mixin(ddtl, { - block: function(parser, token){ - var parts = token.contents.split(); - var name = parts[1]; - - parser._blocks = parser._blocks || {}; - parser._blocks[name] = parser._blocks[name] || []; - parser._blocks[name].push(name); - - var nodelist = parser.parse(["endblock", "endblock " + name]).rtrim(); - parser.next_token(); - return new dojox.dtl.tag.loader.BlockNode(name, nodelist); - }, - extends_: function(parser, token){ - var parts = token.contents.split(); - var shared = false; - var parent = null; - var key = null; - if(parts[1].charAt(0) == '"' || parts[1].charAt(0) == "'"){ - parent = parts[1].substring(1, parts[1].length - 1); - }else{ - key = parts[1]; - } - if(parent && parent.indexOf("shared:") == 0){ - shared = true; - parent = parent.substring(7, parent.length); - } - var nodelist = parser.parse(); - return new dojox.dtl.tag.loader.ExtendsNode(parser.getTemplate, nodelist, shared, parent, key); - }, - include: function(parser, token){ - var parts = token.contents.split(); - if(parts.length != 2){ - throw new Error(parts[0] + " tag takes one argument: the name of the template to be included"); - } - var path = parts[1]; - var constant = false; - if((path.charAt(0) == '"' || path.slice(-1) == "'") && path.charAt(0) == path.slice(-1)){ - path = path.slice(1, -1); - constant = true; - } - return new ddtl.IncludeNode(path, constant, parser.getTemplate, parser.create_text_node()); - }, - ssi: function(parser, token){ - // We're going to treat things a little differently here. - // First of all, this tag is *not* portable, so I'm not - // concerned about it being a "drop in" replacement. - - // Instead, we'll just replicate the include tag, but with that - // optional "parsed" parameter. - var parts = token.contents.split(); - var parsed = false; - if(parts.length == 3){ - parsed = (parts.pop() == "parsed"); - if(!parsed){ - throw new Error("Second (optional) argument to ssi tag must be 'parsed'"); - } - } - var node = ddtl.include(parser, new dd.Token(token.token_type, parts.join(" "))); - node.parsed = parsed; - return node; - } - }); -})(); - -} - -if(!dojo._hasResource["dojox.dtl.tag.misc"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl.tag.misc"] = true; -dojo.provide("dojox.dtl.tag.misc"); - - -(function(){ - var dd = dojox.dtl; - var ddtm = dd.tag.misc; - - ddtm.DebugNode = dojo.extend(function(text){ - this.text = text; - }, - { - render: function(context, buffer){ - var keys = context.getKeys(); - var debug = []; - var only = {}; - for(var i = 0, key; key = keys[i]; i++){ - only[key] = context[key]; - debug += "[" + key + ": " + typeof context[key] + "]\n"; - } - - return this.text.set(debug).render(context, buffer, this); - }, - unrender: function(context, buffer){ - return buffer; - }, - clone: function(buffer){ - return new this.constructor(this.text.clone(buffer)); - }, - toString: function(){ return "ddtm.DebugNode"; } - }); - - ddtm.FilterNode = dojo.extend(function(varnode, nodelist){ - this._varnode = varnode; - this._nodelist = nodelist; - }, - { - render: function(context, buffer){ - // Doing this in HTML requires a different buffer with a fake root node - var output = this._nodelist.render(context, new dojox.string.Builder()); - context = context.update({ "var": output.toString() }); - var filtered = this._varnode.render(context, buffer); - context = context.pop(); - return buffer; - }, - unrender: function(context, buffer){ - return buffer; - }, - clone: function(buffer){ - return new this.constructor(this._expression, this._nodelist.clone(buffer)); - } - }); - - ddtm.FirstOfNode = dojo.extend(function(vars, text){ - this._vars = vars; - this.vars = dojo.map(vars, function(item){ - return new dojox.dtl._Filter(item); - }); - this.contents = text; - }, - { - render: function(context, buffer){ - for(var i = 0, item; item = this.vars[i]; i++){ - var resolved = item.resolve(context); - if(typeof resolved != "undefined"){ - if(resolved === null){ - resolved = "null"; - } - this.contents.set(resolved); - return this.contents.render(context, buffer); - } - } - return this.contents.unrender(context, buffer); - }, - unrender: function(context, buffer){ - return this.contents.unrender(context, buffer); - }, - clone: function(buffer){ - return new this.constructor(this._vars, this.contents.clone(buffer)); - } - }); - - ddtm.SpacelessNode = dojo.extend(function(nodelist, text){ - this.nodelist = nodelist; - this.contents = text; - }, - { - render: function(context, buffer){ - if(buffer.getParent){ - // Unfortunately, we have to branch here - var watch = [ - dojo.connect(buffer, "onAddNodeComplete", this, "_watch"), - dojo.connect(buffer, "onSetParent", this, "_watchParent") - ]; - buffer = this.nodelist.render(context, buffer); - dojo.disconnect(watch[0]); - dojo.disconnect(watch[1]); - }else{ - var value = this.nodelist.dummyRender(context); - this.contents.set(value.replace(/>\s+</g, '><')); - buffer = this.contents.render(context, buffer); - } - return buffer; - }, - unrender: function(context, buffer){ - return this.nodelist.unrender(context, buffer); - }, - clone: function(buffer){ - return new this.constructor(this.nodelist.clone(buffer), this.contents.clone(buffer)); - }, - _isEmpty: function(node){ - return (node.nodeType == 3 && !node.data.match(/[^\s\n]/)); - }, - _watch: function(node){ - if(this._isEmpty(node)){ - var remove = false; - if(node.parentNode.firstChild == node){ - node.parentNode.removeChild(node); - } - }else{ - var children = node.parentNode.childNodes; - if(node.nodeType == 1 && children.length > 2){ - for(var i = 2, child; child = children[i]; i++){ - if(children[i - 2].nodeType == 1 && this._isEmpty(children[i - 1])){ - node.parentNode.removeChild(children[i - 1]); - return; - } - } - } - } - }, - _watchParent: function(node){ - var children = node.childNodes; - if(children.length){ - while(node.childNodes.length){ - var last = node.childNodes[node.childNodes.length - 1]; - if(!this._isEmpty(last)){ - return; - } - node.removeChild(last); - } - } - } - }); - - ddtm.TemplateTagNode = dojo.extend(function(tag, text){ - this.tag = tag; - this.contents = text; - }, - { - mapping: { - openblock: "{%", - closeblock: "%}", - openvariable: "{{", - closevariable: "}}", - openbrace: "{", - closebrace: "}", - opencomment: "{#", - closecomment: "#}" - }, - render: function(context, buffer){ - this.contents.set(this.mapping[this.tag]); - return this.contents.render(context, buffer); - }, - unrender: function(context, buffer){ - return this.contents.unrender(context, buffer); - }, - clone: function(buffer){ - return new this.constructor(this.tag, this.contents.clone(buffer)); - } - }); - - ddtm.WidthRatioNode = dojo.extend(function(current, max, width, text){ - this.current = new dd._Filter(current); - this.max = new dd._Filter(max); - this.width = width; - this.contents = text; - }, - { - render: function(context, buffer){ - var current = +this.current.resolve(context); - var max = +this.max.resolve(context); - if(typeof current != "number" || typeof max != "number" || !max){ - this.contents.set(""); - }else{ - this.contents.set("" + Math.round((current / max) * this.width)); - } - return this.contents.render(context, buffer); - }, - unrender: function(context, buffer){ - return this.contents.unrender(context, buffer); - }, - clone: function(buffer){ - return new this.constructor(this.current.getExpression(), this.max.getExpression(), this.width, this.contents.clone(buffer)); - } - }); - - ddtm.WithNode = dojo.extend(function(target, alias, nodelist){ - this.target = new dd._Filter(target); - this.alias = alias; - this.nodelist = nodelist; - }, - { - render: function(context, buffer){ - var target = this.target.resolve(context); - context = context.push(); - context[this.alias] = target; - buffer = this.nodelist.render(context, buffer); - context = context.pop(); - return buffer; - }, - unrender: function(context, buffer){ - return buffer; - }, - clone: function(buffer){ - return new this.constructor(this.target.getExpression(), this.alias, this.nodelist.clone(buffer)); - } - }); - - dojo.mixin(ddtm, { - comment: function(parser, token){ - // summary: Ignore everything between {% comment %} and {% endcomment %} - parser.skip_past("endcomment"); - return dd._noOpNode; - }, - debug: function(parser, token){ - // summary: Output the current context, maybe add more stuff later. - return new ddtm.DebugNode(parser.create_text_node()); - }, - filter: function(parser, token){ - // summary: Filter the contents of the blog through variable filters. - var rest = token.contents.split(null, 1)[1]; - var varnode = parser.create_variable_node("var|" + rest); - var nodelist = parser.parse(["endfilter"]); - parser.next_token(); - return new ddtm.FilterNode(varnode, nodelist); - }, - firstof: function(parser, token){ - var parts = token.split_contents().slice(1); - if(!parts.length){ - throw new Error("'firstof' statement requires at least one argument"); - } - return new ddtm.FirstOfNode(parts, parser.create_text_node()); - }, - spaceless: function(parser, token){ - var nodelist = parser.parse(["endspaceless"]); - parser.delete_first_token(); - return new ddtm.SpacelessNode(nodelist, parser.create_text_node()); - }, - templatetag: function(parser, token){ - var parts = token.contents.split(); - if(parts.length != 2){ - throw new Error("'templatetag' statement takes one argument"); - } - var tag = parts[1]; - var mapping = ddtm.TemplateTagNode.prototype.mapping; - if(!mapping[tag]){ - var keys = []; - for(var key in mapping){ - keys.push(key); - } - throw new Error("Invalid templatetag argument: '" + tag + "'. Must be one of: " + keys.join(", ")); - } - return new ddtm.TemplateTagNode(tag, parser.create_text_node()); - }, - widthratio: function(parser, token){ - var parts = token.contents.split(); - if(parts.length != 4){ - throw new Error("widthratio takes three arguments"); - } - var width = +parts[3]; - if(typeof width != "number"){ - throw new Error("widthratio final argument must be an integer"); - } - return new ddtm.WidthRatioNode(parts[1], parts[2], width, parser.create_text_node()); - }, - with_: function(parser, token){ - var parts = token.split_contents(); - if(parts.length != 4 || parts[2] != "as"){ - throw new Error("do_width expected format as 'with value as name'"); - } - var nodelist = parser.parse(["endwith"]); - parser.next_token(); - return new ddtm.WithNode(parts[1], parts[3], nodelist); - } - }); -})(); - -} - -if(!dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.dtl.ext-dojo.NodeList"] = true; -dojo.provide("dojox.dtl.ext-dojo.NodeList"); - - -dojo.extend(dojo.NodeList, { - dtl: function(template, context){ - // template: dojox.dtl.__StringArgs|String - // The template string or location - // context: dojox.dtl.__ObjectArgs|Object - // The context object or location - var d = dojox.dtl; - - var self = this; - var render = function(template, context){ - var content = template.render(new d._Context(context)); - self.forEach(function(node){ - node.innerHTML = content; - }); - } - - d.text._resolveTemplateArg(template).addCallback(function(templateString){ - template = new d.Template(templateString); - d.text._resolveContextArg(context).addCallback(function(context){ - render(template, context); - }); - }); - - return this; - } -}); - -} -
http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/dtl/Context.js ---------------------------------------------------------------------- diff --git a/components/camel-web/src/main/webapp/js/dojox/dtl/Context.js b/components/camel-web/src/main/webapp/js/dojox/dtl/Context.js deleted file mode 100644 index 7086f55..0000000 --- a/components/camel-web/src/main/webapp/js/dojox/dtl/Context.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -if(!dojo._hasResource["dojox.dtl.Context"]){ -dojo._hasResource["dojox.dtl.Context"]=true; -dojo.provide("dojox.dtl.Context"); -dojo.require("dojox.dtl._base"); -dojox.dtl.Context=dojo.extend(function(_1){ -this._this={}; -dojox.dtl._Context.call(this,_1); -},dojox.dtl._Context.prototype,{getKeys:function(){ -var _2=[]; -for(var _3 in this){ -if(this.hasOwnProperty(_3)&&_3!="_dicts"&&_3!="_this"){ -_2.push(_3); -} -} -return _2; -},extend:function(_4){ -return dojo.delegate(this,_4); -},filter:function(_5){ -var _6=new dojox.dtl.Context(); -var _7=[]; -var i,_9; -if(_5 instanceof dojox.dtl.Context){ -_7=_5.getKeys(); -}else{ -if(typeof _5=="object"){ -for(var _a in _5){ -_7.push(_a); -} -}else{ -for(i=0;_9=arguments[i];i++){ -if(typeof _9=="string"){ -_7.push(_9); -} -} -} -} -for(i=0,_a;_a=_7[i];i++){ -_6[_a]=this[_a]; -} -return _6; -},setThis:function(_b){ -this._this=_b; -},getThis:function(){ -return this._this; -},hasKey:function(_c){ -if(typeof this[_c]!="undefined"){ -return true; -} -for(var i=0,_e;_e=this._dicts[i];i++){ -if(typeof _e[_c]!="undefined"){ -return true; -} -} -return false; -}}); -} http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/dtl/DomInline.js ---------------------------------------------------------------------- diff --git a/components/camel-web/src/main/webapp/js/dojox/dtl/DomInline.js b/components/camel-web/src/main/webapp/js/dojox/dtl/DomInline.js deleted file mode 100644 index 9765ac5..0000000 --- a/components/camel-web/src/main/webapp/js/dojox/dtl/DomInline.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -if(!dojo._hasResource["dojox.dtl.DomInline"]){ -dojo._hasResource["dojox.dtl.DomInline"]=true; -dojo.provide("dojox.dtl.DomInline"); -dojo.require("dojox.dtl.dom"); -dojo.require("dijit._Widget"); -dojox.dtl.DomInline=dojo.extend(function(_1,_2){ -this.create(_1,_2); -},dijit._Widget.prototype,{context:null,render:function(_3){ -this.context=_3||this.context; -this.postMixInProperties(); -var _4=this.template.render(this.context).getRootNode(); -if(_4!=this.containerNode){ -this.containerNode.parentNode.replaceChild(_4,this.containerNode); -this.containerNode=_4; -} -},declaredClass:"dojox.dtl.Inline",buildRendering:function(){ -var _5=this.domNode=document.createElement("div"); -this.containerNode=_5.appendChild(document.createElement("div")); -var _6=this.srcNodeRef; -if(_6.parentNode){ -_6.parentNode.replaceChild(_5,_6); -} -this.template=new dojox.dtl.DomTemplate(dojo.trim(_6.text),true); -this.render(); -},postMixInProperties:function(){ -this.context=(this.context.get===dojox.dtl._Context.prototype.get)?this.context:new dojox.dtl.Context(this.context); -}}); -} http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/dtl/HtmlInline.js ---------------------------------------------------------------------- diff --git a/components/camel-web/src/main/webapp/js/dojox/dtl/HtmlInline.js b/components/camel-web/src/main/webapp/js/dojox/dtl/HtmlInline.js deleted file mode 100644 index 106abbb..0000000 --- a/components/camel-web/src/main/webapp/js/dojox/dtl/HtmlInline.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. - Available via Academic Free License >= 2.1 OR the modified BSD license. - see: http://dojotoolkit.org/license for details -*/ - - -if(!dojo._hasResource["dojox.dtl.HtmlInline"]){ -dojo._hasResource["dojox.dtl.HtmlInline"]=true; -dojo.provide("dojox.dtl.HtmlInline"); -dojo.require("dojox.dtl.DomInline"); -dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom"); -dojox.dtl.HtmlInline=dojox.dtl.DomInline; -dojox.dtl.HtmlInline.prototype.declaredClass="dojox.dtl.HtmlInline"; -}