http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7bb2709d/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/hbs.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/hbs.js b/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/hbs.js new file mode 100644 index 0000000..4aa054c --- /dev/null +++ b/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/hbs.js @@ -0,0 +1,490 @@ +/** + * @license Handlebars hbs 0.4.0 - Alex Sexton, but Handlebars has it's own licensing junk + * + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/require-cs for details on the plugin this was based off of + */ + +/* Yes, deliciously evil. */ +/*jslint evil: true, strict: false, plusplus: false, regexp: false */ +/*global require: false, XMLHttpRequest: false, ActiveXObject: false, +define: false, process: false, window: false */ +define([ + //>>excludeStart('excludeHbs', pragmas.excludeHbs) + 'handlebars', 'underscore', 'i18nprecompile', 'json2' + //>>excludeEnd('excludeHbs') +], function( + //>>excludeStart('excludeHbs', pragmas.excludeHbs) + Handlebars, _, precompile, JSON + //>>excludeEnd('excludeHbs') +) { + //>>excludeStart('excludeHbs', pragmas.excludeHbs) + var fs, getXhr, + progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], + fetchText = function() { + throw new Error('Environment unsupported.'); + }, + buildMap = [], + filecode = "w+", + templateExtension = "hbs", + customNameExtension = "@hbs", + devStyleDirectory = "/styles/", + buildStyleDirectory = "/demo-build/styles/", + helperDirectory = "template/helpers/", + i18nDirectory = "template/i18n/", + buildCSSFileName = "screen.build.css"; + + Handlebars.registerHelper('$', function() { + //placeholder for translation helper + }); + + if (typeof window !== "undefined" && window.navigator && window.document && !window.navigator.userAgent.match(/Node.js/)) { + // Browser action + getXhr = function() { + //Would love to dump the ActiveX crap in here. Need IE 6 to die first. + var xhr, i, progId; + if (typeof XMLHttpRequest !== "undefined") { + return new XMLHttpRequest(); + } else { + for (i = 0; i < 3; i++) { + progId = progIds[i]; + try { + xhr = new ActiveXObject(progId); + } catch (e) {} + + if (xhr) { + progIds = [progId]; // so faster next time + break; + } + } + } + + if (!xhr) { + throw new Error("getXhr(): XMLHttpRequest not available"); + } + + return xhr; + }; + + fetchText = function(url, callback) { + var prependComment = "<!--START: " + url + "--> == <!--END: " + url + "-->"; + var xhr = getXhr(); + xhr.open('GET', url, true); + xhr.onreadystatechange = function(evt) { + //Do not explicitly handle errors, those should be + //visible via console output in the browser. + if (xhr.readyState === 4) { + callback(xhr.responseText); + //TODO FIXME Gautam:Not working with backbone-forms when it does this : $($.trim(this.template(_.result(this, 'templateData')))); + // callback(prependComment.replace('==',xhr.responseText)); + } + }; + xhr.send(null); + }; + + } else if (typeof process !== "undefined" && + process.versions && + !!process.versions.node) { + //Using special require.nodeRequire, something added by r.js. + fs = require.nodeRequire('fs'); + fetchText = function(path, callback) { + var body = fs.readFileSync(path, 'utf8') || ""; + // we need to remove BOM stuff from the file content + body = body.replace(/^\uFEFF/, ''); + callback(body); + }; + } else if (typeof java !== "undefined" && typeof java.io !== "undefined") { + fetchText = function(path, callback) { + var f = new java.io.File(path); + var is = new java.io.FileReader(f); + var reader = new java.io.BufferedReader(is); + var line; + var text = ""; + while ((line = reader.readLine()) !== null) { + text += new String(line) + "\n"; + } + reader.close(); + callback(text); + }; + } + + var cache = {}; + var fetchOrGetCached = function(path, callback) { + if (cache[path]) { + callback(cache[path]); + } else { + fetchText(path, function(data) { + cache[path] = data; + callback.call(this, data); + }); + } + }; + var styleList = [], + styleMap = {}; + //>>excludeEnd('excludeHbs') + + return { + + get: function() { + return Handlebars; + }, + + write: function(pluginName, name, write) { + + if ((name + customNameExtension) in buildMap) { + var text = buildMap[name + customNameExtension]; + write.asModule(pluginName + "!" + name, text); + } + }, + + version: '0.4.0', + + load: function(name, parentRequire, load, config) { + //>>excludeStart('excludeHbs', pragmas.excludeHbs) + + var compiledName = name + customNameExtension, + disableI18n = (config.hbs && config.hbs.disableI18n), + partialDeps = []; + + function recursiveNodeSearch(statements, res) { + _(statements).forEach(function(statement) { + if (statement && statement.type && statement.type === 'partial') { + res.push(statement.partialName.name); + } + if (statement && statement.program && statement.program.statements) { + recursiveNodeSearch(statement.program.statements, res); + } + if (statement && statement.program && statement.program.inverse && statement.program.inverse.statements) { + recursiveNodeSearch(statement.program.inverse.statements, res); + } + }); + return res; + } + + // TODO :: use the parser to do this! + function findPartialDeps(nodes) { + var res = []; + if (nodes && nodes.statements) { + res = recursiveNodeSearch(nodes.statements, []); + } + return _(res).unique(); + } + + // See if the first item is a comment that's json + function getMetaData(nodes) { + var statement, res, test; + if (nodes && nodes.statements) { + statement = nodes.statements[0]; + if (statement && statement.type === "comment") { + try { + res = (statement.comment).replace(new RegExp('^[\\s]+|[\\s]+$', 'g'), ''); + test = JSON.parse(res); + return res; + } catch (e) { + return "{}"; + } + } + } + return "{}"; + } + + function composeParts(parts) { + if (!parts) { + return []; + } + var res = [parts[0]], + cur = parts[0], + i; + + for (i = 1; i < parts.length; ++i) { + if (parts.hasOwnProperty(i)) { + cur += "." + parts[i]; + res.push(cur); + } + } + return res; + } + + function recursiveVarSearch(statements, res, prefix, helpersres) { + prefix = prefix ? prefix + "." : ""; + + var newprefix = "", + flag = false; + + // loop through each statement + _(statements).forEach(function(statement) { + var parts, part, sideways; + + // if it's a mustache block + if (statement && statement.type && statement.type === 'mustache') { + + // If it has params, the first part is a helper or something + if (!statement.params || !statement.params.length) { + parts = composeParts(statement.id.parts); + for (part in parts) { + if (parts[part]) { + newprefix = parts[part] || newprefix; + res.push(prefix + parts[part]); + } + } + res.push(prefix + statement.id.string); + } + + var paramsWithoutParts = ['this', '.', '..', './..', '../..', '../../..']; + + // grab the params + if (statement.params && typeof Handlebars.helpers[statement.id.string] === 'undefined') { + _(statement.params).forEach(function(param) { + if (_(paramsWithoutParts).contains(param.original) || param instanceof Handlebars.AST.StringNode || param instanceof Handlebars.AST.IntegerNode || param instanceof Handlebars.AST.BooleanNode) { + helpersres.push(statement.id.string); + } + + parts = composeParts(param.parts); + + for (var part in parts) { + if (parts[part]) { + newprefix = parts[part] || newprefix; + helpersres.push(statement.id.string); + res.push(prefix + parts[part]); + } + } + }); + } + } + + // If it's a meta block + if (statement && statement.mustache) { + recursiveVarSearch([statement.mustache], res, prefix + newprefix, helpersres); + } + + // if it's a whole new program + if (statement && statement.program && statement.program.statements) { + sideways = recursiveVarSearch([statement.mustache], [], "", helpersres)[0] || ""; + if (statement.program.inverse && statement.program.inverse.statements) { + recursiveVarSearch(statement.program.inverse.statements, res, prefix + newprefix + (sideways ? (prefix + newprefix) ? "." + sideways : sideways : ""), helpersres); + } + recursiveVarSearch(statement.program.statements, res, prefix + newprefix + (sideways ? (prefix + newprefix) ? "." + sideways : sideways : ""), helpersres); + } + }); + return res; + } + + // This finds the Helper dependencies since it's soooo similar + function getExternalDeps(nodes) { + var res = []; + var helpersres = []; + + if (nodes && nodes.statements) { + res = recursiveVarSearch(nodes.statements, [], undefined, helpersres); + } + + var defaultHelpers = ["helperMissing", "blockHelperMissing", "each", "if", "unless", "with"]; + + return { + vars: _(res).chain().unique().map(function(e) { + if (e === "") { + return '.'; + } + if (e.length && e[e.length - 1] === '.') { + return e.substr(0, e.length - 1) + '[]'; + } + return e; + }).value(), + helpers: _(helpersres).chain().unique().map(function(e) { + if (_(defaultHelpers).contains(e)) { + return undefined; + } + return e; + }).compact().value() + }; + } + + function fetchAndRegister(langMap) { + fetchText(path, function(text) { + // for some reason it doesn't include hbs _first_ when i don't add it here... + var nodes = Handlebars.parse(text), + deps = findPartialDeps(nodes), + meta = getMetaData(nodes), + extDeps = getExternalDeps(nodes), + vars = extDeps.vars, + helps = extDeps.helpers || [], + depStr = deps.join("', 'hbs!").replace(/_/g, '/'), + helpDepStr = config.hbs && config.hbs.disableHelpers ? + "" : (function() { + var i, paths = [], + pathGetter = config.hbs && config.hbs.helperPathCallback ? config.hbs.helperPathCallback : function(name) { + return (config.hbs && config.hbs.helperDirectory ? config.hbs.helperDirectory : helperDirectory) + name; + }; + + for (i = 0; i < helps.length; i++) { + paths[i] = "'" + pathGetter(helps[i], path) + "'" + } + return paths; + })().join(','), + debugOutputStart = "", + debugOutputEnd = "", + debugProperties = "", + metaObj, head, linkElem; + + if (depStr) { + depStr = ",'hbs!" + depStr + "'"; + } + if (helpDepStr) { + helpDepStr = "," + helpDepStr; + } + + if (meta !== "{}") { + try { + metaObj = JSON.parse(meta); + if (metaObj && metaObj.styles) { + styleList = _.union(styleList, metaObj.styles); + + // In dev mode in the browser + if (require.isBrowser && !config.isBuild) { + head = document.head || document.getElementsByTagName('head')[0]; + _(metaObj.styles).forEach(function(style) { + if (!styleMap[style]) { + linkElem = document.createElement('link'); + linkElem.href = config.baseUrl + devStyleDirectory + style + '.css'; + linkElem.media = 'all'; + linkElem.rel = 'stylesheet'; + linkElem.type = 'text/css'; + head.appendChild(linkElem); + styleMap[style] = linkElem; + } + }); + } else if (config.isBuild) { + (function() { + var fs = require.nodeRequire('fs'), + str = _(metaObj.styles).map(function(style) { + if (!styleMap[style]) { + styleMap[style] = true; + return "@import url(" + style + ".css);\n"; + } + return ""; + }).join("\n"); + + // I write out my import statements to a file in order to help me build stuff. + // Then I use a tool to inline my import statements afterwards. (you can run r.js on it too) + fs.open(__dirname + buildStyleDirectory + buildCSSFileName, filecode, '0666', function(e, id) { + fs.writeSync(id, str, null, encoding = 'utf8'); + fs.close(id); + }); + filecode = "a"; + })(); + } + } + } catch (e) { + console.log('error injecting styles'); + } + } + + if (!config.isBuild && !config.serverRender) { + debugOutputStart = "<!-- START - " + name + " -->"; + debugOutputEnd = "<!-- END - " + name + " -->"; + debugProperties = "t.meta = " + meta + ";\n" + + "t.helpers = " + JSON.stringify(helps) + ";\n" + + "t.deps = " + JSON.stringify(deps) + ";\n" + + "t.vars = " + JSON.stringify(vars) + ";\n"; + } + + var mapping = disableI18n ? false : _.extend(langMap, config.localeMapping), + configHbs = config.hbs || {}, + options = _.extend(configHbs.compileOptions || {}, { + originalKeyFallback: configHbs.originalKeyFallback + }), + prec = precompile(text, mapping, options); + + text = "/* START_TEMPLATE */\n" + + "define(['hbs','handlebars'" + depStr + helpDepStr + "], function( hbs, Handlebars ){ \n" + + "var t = Handlebars.template(" + prec + ");\n" + + "Handlebars.registerPartial('" + name.replace(/\//g, '_') + "', t);\n" + + debugProperties + + "return t;\n" + + "});\n" + + "/* END_TEMPLATE */\n"; + + //Hold on to the transformed text if a build. + if (config.isBuild) { + buildMap[compiledName] = text; + } + + //IE with conditional comments on cannot handle the + //sourceURL trick, so skip it if enabled. + /*@if (@_jscript) @else @*/ + if (!config.isBuild) { + text += "\r\n//@ sourceURL=" + path; + } + /*@end@*/ + + for (var i in deps) { + if (deps.hasOwnProperty(i)) { + deps[i] = 'hbs!' + deps[i].replace(/_/g, '/'); + } + } + + if (!config.isBuild) { + require(deps, function() { + load.fromText(text); + + //Give result to load. Need to wait until the module + //is fully parse, which will happen after this + //execution. + parentRequire([name], function(value) { + load(value); + }); + }); + } else { + load.fromText(name, text); + + //Give result to load. Need to wait until the module + //is fully parse, which will happen after this + //execution. + parentRequire([name], function(value) { + load(value); + }); + } + + if (config.removeCombined) { + fs.unlinkSync(path); + } + }); + } + + var path, + omitExtension = config.hbs && config.hbs.templateExtension === false; + if (omitExtension) { + path = parentRequire.toUrl(name); + } else { + path = parentRequire.toUrl(name + '.' + (config.hbs && config.hbs.templateExtension ? config.hbs.templateExtension : templateExtension)); + } + + if (disableI18n) { + fetchAndRegister(false); + } else { + // Workaround until jam is able to pass config info or we move i18n to a separate module. + // This logs a warning and disables i18n if there's an error loading the language file + var langMapPath = (config.hbs && config.hbs.i18nDirectory ? config.hbs.i18nDirectory : i18nDirectory) + (config.locale || "en_us") + '.json'; + try { + fetchOrGetCached(parentRequire.toUrl(langMapPath), function(langMap) { + fetchAndRegister(JSON.parse(langMap)); + }); + } catch (er) { + // if there's no configuration at all, log a warning and disable i18n for this and subsequent templates + if (!config.hbs) { + console.warn('hbs: Error reading ' + langMapPath + ', disabling i18n. Ignore this if you\'re using jam, otherwise check your i18n configuration.\n'); + config.hbs = { + disableI18n: true + }; + fetchAndRegister(false); + } else { + throw er; + + } + } + } + //>>excludeEnd('excludeHbs') + } + }; +}); +/* END_hbs_PLUGIN */
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7bb2709d/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/i18nprecompile.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/i18nprecompile.js b/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/i18nprecompile.js new file mode 100644 index 0000000..925ac39 --- /dev/null +++ b/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/i18nprecompile.js @@ -0,0 +1,57 @@ +//>>excludeStart('excludeAfterBuild', pragmas.excludeAfterBuild) +define(['handlebars', "underscore"], function(Handlebars, _) { + + function replaceLocaleStrings(ast, mapping, options) { + options = options || {}; + mapping = mapping || {}; + // Base set of things + if (ast && ast.type === "program" && ast.statements) { + _(ast.statements).forEach(function(statement, i) { + var newString = "<!-- i18n error -->"; + // If it's a translation node + if (statement.type === "mustache" && statement.id && statement.id.original === "$") { + + if (statement.params.length && statement.params[0].string) { + var key = statement.params[0].string; + newString = mapping[key] || (options.originalKeyFallback ? key : newString); + } + ast.statements[i] = new Handlebars.AST.ContentNode(newString); + } + // If we need to recurse + else if (statement.program) { + statement.program = replaceLocaleStrings(statement.program, mapping, options); + } + }); + // Also cover the else blocks + if (ast.inverse) { + replaceLocaleStrings(ast.inverse, mapping, options); + } + } + return ast; + } + + return function precompile(string, mapping, options) { + var ast, environment; + + options = options || {}; + + if (!('data' in options)) { + options.data = true; + } + + if (options.compat) { + options.useDepths = true; + } + + ast = Handlebars.parse(string); + + // avoid replacing locale if mapping is `false` + if (mapping !== false) { + ast = replaceLocaleStrings(ast, mapping, options); + } + + environment = new Handlebars.Compiler().compile(ast, options); + return new Handlebars.JavaScriptCompiler().compile(environment, options); + }; +}); +//>>excludeEnd('excludeAfterBuild') http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7bb2709d/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/json2.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/json2.js b/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/json2.js new file mode 100644 index 0000000..c740001 --- /dev/null +++ b/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/json2.js @@ -0,0 +1,351 @@ +//>>excludeStart('excludeAfterBuild', pragmas.excludeAfterBuild) +/* + http://www.JSON.org/json2.js + 2011-10-19 + + Public Domain. + + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + + See http://www.JSON.org/js.html + + + This code should be minified before deployment. + See http://javascript.crockford.com/jsmin.html + + USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + NOT CONTROL. +*/ + +/*jslint evil: true, regexp: true */ + +/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, + call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf +*/ + +(function(window) { + + // Create a JSON object only if one does not already exist. We create the + // methods in a closure to avoid creating global variables. + + // Return the window JSON element if it exists; + var JSON = window.JSON || {}; + + (function() { + 'use strict'; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + if (typeof Date.prototype.toJSON !== 'function') { + + Date.prototype.toJSON = function(key) { + + return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z' : null; + }; + + String.prototype.toJSON = + Number.prototype.toJSON = + Boolean.prototype.toJSON = function(key) { + return this.valueOf(); + }; + } + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"': '\\"', + '\\': '\\\\' + }, + rep; + + function quote(string) { + + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function(a) { + var c = meta[a]; + return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + function str(key, holder) { + + // Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + + // If the value has a toJSON method, call it to obtain a replacement value. + + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + // If we were called with a replacer function, then call the replacer to + // obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + + // What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + + // JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + + // If the value is a boolean or null, convert it to a string. Note: + // typeof null does not produce 'null'. The case is included here in + // the remote chance that this gets fixed someday. + + return String(value); + + // If the type is 'object', we might be dealing with an object or an array or + // null. + + case 'object': + + // Due to a specification blunder in ECMAScript, typeof null is 'object', + // so watch out for that case. + + if (!value) { + return 'null'; + } + + // Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + + // Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + + // The value is an array. Stringify every element. Use null as a placeholder + // for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + + // Join all of the elements together, separated with commas, and wrap them in + // brackets. + + v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + + // If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + + // Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + + // Join all of the member texts together, separated with commas, + // and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + + // If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== 'function') { + JSON.stringify = function(value, replacer, space) { + + // The stringify method takes a value and an optional replacer, and an optional + // space parameter, and returns a JSON text. The replacer can be a function + // that can replace values, or an array of strings that will select the keys. + // A default replacer method can be provided. Use of the space parameter can + // produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + + // If the space parameter is a number, make an indent string containing that + // many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + + // If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + + // If there is a replacer, it must be a function or an array. + // Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + + // Make a fake root object containing our value under the key of ''. + // Return the result of stringifying the value. + + return str('', { + '': value + }); + }; + } + + // If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== 'function') { + JSON.parse = function(text, reviver) { + + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function(a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with '()' and 'new' + // because they can cause invocation, and '=' because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we + // replace all simple value tokens with ']' characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or ']' or + // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The '{' operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' ? walk({ + '': j + }, '') : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + } + }()); + + define(function() { + return JSON; + }); + // otherwise just leave it alone + +}).call(this, this); +//>>excludeEnd('excludeAfterBuild') http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7bb2709d/dashboardv2/public/js/main.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js index a1a9ae1..63dd71e 100644 --- a/dashboardv2/public/js/main.js +++ b/dashboardv2/public/js/main.js @@ -48,6 +48,9 @@ require.config({ deps: ['underscore', 'jquery'], exports: 'Backbone' }, + 'jquery-ui': { + deps: ['jquery'], + }, asBreadcrumbs: { deps: ['jquery'], exports: 'asBreadcrumbs' @@ -120,13 +123,14 @@ require.config({ 'tmpl': 'templates', 'noty': 'libs/noty/js/jquery.noty.packaged.min', 'requirejs.text': 'libs/requirejs-text/text', - 'handlebars': 'require-handlebars-plugin/js/handlebars', - 'json2': 'require-handlebars-plugin/js/json2', - 'hbs': 'require-handlebars-plugin/js/hbs', - 'i18nprecompile': 'require-handlebars-plugin/js/i18nprecompile', + 'handlebars': 'external_lib/require-handlebars-plugin/js/handlebars', + 'json2': 'external_lib/require-handlebars-plugin/js/json2', + 'hbs': 'external_lib/require-handlebars-plugin/js/hbs', + 'i18nprecompile': 'external_lib/require-handlebars-plugin/js/i18nprecompile', 'dagreD3': 'libs/dagre-d3/dagre-d3.min', 'select2': 'libs/select2/select2.min', - 'backgrid-select-all': 'libs/backgrid-select-all/backgrid-select-all.min' + 'backgrid-select-all': 'libs/backgrid-select-all/backgrid-select-all.min', + 'jquery-ui': 'external_lib/jquery-ui/jquery-ui.min', }, /**