ATLAS-1848: update UI to remove json2.js dependency

Signed-off-by: Madhan Neethiraj <madhan@apache.org>
diff --git a/LICENSE b/LICENSE
index 55494a2..9722907 100755
--- a/LICENSE
+++ b/LICENSE
@@ -233,9 +233,6 @@
 This product bundles require-handlebars-plugin 0.4.0, which is available under
 WTFPL License.  For details, see 3party-licenses/require-handlebars-plugin-LICENSE
 
-This product bundles json2.js (https://github.com/douglascrockford/JSON-js -
-Public Domain license) by Douglas Crockford
-
 This product bundles jQuery-ui.js, which is available under
 MIT License. For details, see 3party-licenses/jQuery-ui-LICENSE
 
@@ -256,4 +253,4 @@
 
 This product bundles Google Fonts, which are available under
 Open Font License.  For details, see 3party-licenses/google-fonts-LICENSE
-=======================================================================
\ No newline at end of file
+=======================================================================
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
index 4aa054c..9d7ae0a 100644
--- a/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/hbs.js
+++ b/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/hbs.js
@@ -11,11 +11,11 @@
 define: false, process: false, window: false */
 define([
     //>>excludeStart('excludeHbs', pragmas.excludeHbs)
-    'handlebars', 'underscore', 'i18nprecompile', 'json2'
+    'handlebars', 'underscore', 'i18nprecompile'
     //>>excludeEnd('excludeHbs')
 ], function(
     //>>excludeStart('excludeHbs', pragmas.excludeHbs)
-    Handlebars, _, precompile, JSON
+    Handlebars, _, precompile
     //>>excludeEnd('excludeHbs')
 ) {
     //>>excludeStart('excludeHbs', pragmas.excludeHbs)
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
deleted file mode 100644
index c740001..0000000
--- a/dashboardv2/public/js/external_lib/require-handlebars-plugin/js/json2.js
+++ /dev/null
@@ -1,351 +0,0 @@
-//>>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')
diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js
index c339a47..3b40451 100644
--- a/dashboardv2/public/js/main.js
+++ b/dashboardv2/public/js/main.js
@@ -130,7 +130,6 @@
         'tmpl': 'templates',
         'requirejs.text': 'libs/requirejs-text/text',
         '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',