Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8"/>
- <title>Contentstack Developer Widget</title>
- <style>
- body { margin: 0; }
- </style>
- <link rel="stylesheet" type="text/css" href="https://www.contentstack.com/sdks/contentstack-ui-extensions/dist/latest/ui-extension-sdk.css">
- <link href="https://assets.contentstack.io/v3/assets/blt30b41f7b9a5d7467/bltb6bb4f7db098181f/5b39e605fda2af4e7866b92c/jsoneditor.min.css" rel="stylesheet" type="text/css">
- <script src="https://www.contentstack.com/sdks/contentstack-ui-extensions/dist/latest/ui-extension-sdk.js"></script>
- <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script>
- <script src="https://assets.contentstack.io/v3/assets/blt30b41f7b9a5d7467/blte7fe106cc93cf2bf/5b33888fcfc846f95726af6f/jsoneditor.min.js"></script>
- </head>
- <body>
- <div>
- <ul>
- <li>Edit Content Type: <a id="ctlink" href="" target="_blank">Edit Content Type</a></li>
- <li>Visit: <a id="cthref" href="" target="_blank"></a></li>
- </ul>
- </div>
- <div id="jsoneditor"></div>
- <script>
- // shouldn't mess with prototype, but...
- Object.prototype.getTypeName = function()
- {
- var funcNameRegex = /function (.{1,})\(/;
- var results = (funcNameRegex).exec((this).constructor.toString());
- return (results && results.length > 1) ? results[1] : "";
- };
- window.extensionField = {};
- var jsoneditorElement = document.getElementById("jsoneditor");
- var jsonEditor = {};
- ContentstackUIExtension.init().then(function(extension)
- {
- extensionField = extension;
- console.log("Entry JSON:");
- console.log(extension.entry._data);
- // recurse("extension.entry", extension.entry);
- recurse("extension", extension);
- var value = extensionField.entry._data;
- var options = {
- modes: ['text', 'code', 'tree', 'form', 'view'],
- mode: 'code',
- ace: ace,
- };
- jsonEditor = new JSONEditor(jsoneditorElement, options);
- jsonEditor.set(value);
- document.getElementById("ctlink").href = "/#!/stack/" + extensionField.stack["_data"]["api_key"]
- + "/content-type/" + extensionField.entry.content_type["uid"] + "/content-type-builder";
- document.getElementById("ctlink").target = "ctedit" + extensionField.entry.content_type["uid"];
- document.getElementById("ctlink").innerHTML = extensionField.entry.content_type["uid"];
- var url = extensionField.entry._data["url"];
- if (!(typeof url === 'undefined'))
- {
- var baseurl = extensionField.config["preview"]["baseurl"];
- if (!(typeof baseurl === 'undefined'))
- {
- url = baseurl + url;
- }
- document.getElementById("cthref").href = url;
- document.getElementById("cthref").target = "ctvisit" + extensionField.entry.uid;
- document.getElementById("cthref").innerHTML = url;
- }
- });
- // log object elements, recursively
- function recurse(name, obj, spaces = '')
- {
- // don't show function bodies
- if (typeof(obj) != "function")
- {
- value = " : " + obj;
- }
- // log the object
- // var msg = spaces + name + " : " + typeof(obj) + value
- var msg = spaces + name + " : " + obj.getTypeName() + value
- console.log(msg);
- // log methods of the object
- for (const [method, body] of Object.entries(getMethods(obj)))
- {
- var msg = spaces + " " + name + "." + method + "()" + " : method" /* + body*/;
- console.log(msg);
- }
- // log values in the object
- var lastKey;
- try
- {
- // store most recently attempted key in case of error
- var lastKey;
- for (const [key, value] of Object.entries(obj))
- {
- lastKey = key;
- // recurse descendants of object
- if (typeof(value) == "object")
- {
- recurse(name + "." + key, value, spaces + " ");
- }
- else
- {
- output = "";
- // don't render method bodies
- if (typeof(value) != "function")
- {
- output = " : " + value;
- }
- // var msg = " " + spaces + '' + name + "['" + key + "'] : " + typeof(value) + output;
- var msg = " " + spaces + '' + name + "['" + key + "'] : " + value.getTypeName() + output;
- console.log(msg);
- }
- }
- }
- catch(error)
- {
- var msg = "ERROR accessing " + name + "[" + lastKey + "]" + " " + error
- console.log(msg);
- }
- }
- // get the methods in the object and its base prototypes(s)
- function getMethods(obj)
- {
- var methods = {};
- var currentObj = obj;
- var type;
- do
- {
- for(const key of Object.getOwnPropertyNames(currentObj))
- {
- // try to limit methods shown for object/array/string/etc
- if (typeof(obj[key]) === "function"
- && key != "toLocaleString"
- && key != "valueOf"
- && key != "getTypeName"
- && key != "hasOwnProperty"
- && key != "isPrototypeOf"
- && key != "propertyIsEnumerable"
- && key != "toString"
- && key != "constructor"
- && !key.startsWith("__"))
- // && key != "concat"
- // && key != "copyWithin"
- // && key != "fill"
- // && key != "find"
- // && key != "findIndex"
- // && key != "lastIndexOf"
- // && key != "pop"
- // && key != "push"
- // && key != "reverse"
- // && key != "shift"
- // && key != "unshift"
- // && key != "slice"
- // && key != "sort"
- // && key != "splice"
- // && key != "includes"
- // && key != "indexOf"
- // && key != "join"
- // && key != "keys"
- // && key != "entries"
- // && key != "values"
- // && key != "forEach"
- // && key != "filter"
- // && key != "flat"
- // && key != "flatMap"
- // && key != "map"
- // && key != "every"
- // && key != "some"
- // && key != "map"
- // && key != "reduce"
- // && key != "reduceRight"
- {
- methods[key] = obj[key].toString();
- }
- }
- currentObj = Object.getPrototypeOf(currentObj);
- if (currentObj != null)
- {
- var type = currentObj.getTypeName();
- if (type == "Array")
- {
- currentObj = null;
- }
- }
- } while (currentObj != null);
- return methods;
- }
- </script>
- </body>
- </html>
Add Comment
Please, Sign In to add comment