📄 _base.js
字号:
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.require("dojox.string.Builder");dojo.require("dojox.string.tokenize");(function(){ var dd = dojox.dtl; 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 dict = {}; var keys = this.getKeys(); for(var i = 0, key; key = keys[i]; i++){ dict[key] = this[key]; delete this[key]; } this._dicts.unshift(dict); }, pop: function(){ if(!this._dicts.length){ throw new Error("pop() called on empty Context"); } var dict = this._dicts.shift(); dojo.mixin(this, dict); }, getKeys: function(){ var keys = []; for(var key in this){ if(this.hasOwnProperty(key) && key != "_dicts" && key != "_this"){ keys.push(key); } } return keys; }, 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){ this.push(); if(dict){ dojo.mixin(this, dict); } } }); var ddt = dd.text = { types: {tag: -1, varr: -2, text: 3}, pySplit: function(str){ // summary: Split a string according to Python's split function str = dojo.trim(str); return (!str.length) ? [] : str.split(/\s+/g); }, _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 + "_"]; }, 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(dd.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") || (dojo.isString(arg) && (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){ var types = ddt.types; if(varr){ return [types.varr, varr]; }else if(load){ var parts = dd.text.pySplit(tag); for(var i = 0, part; part = parts[i]; i++){ dojo["require"](part); } }else{ return [types.tag, tag]; } } } dd.Template = dojo.extend(function(/*String|dojo._Url*/ template){ // template: // The string or location of the string to // use as a template var str = 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(){ dojo.require("dojox.string.Builder"); return new dojox.string.Builder(); } }); 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" && dojo.isString(arguments[i]) && 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){ 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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -