@gregoriusrippenstein/node-red-contrib-introspection 0.5.8 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,6 @@
1
1
  module.exports = function(RED) {
2
+ let UglifyJS = require('uglify-js')
3
+
2
4
  function ClientCodeFunctionality(config) {
3
5
  RED.nodes.createNode(this,config);
4
6
 
@@ -26,27 +28,26 @@ module.exports = function(RED) {
26
28
  RED.nodes.registerType("ClientCode", ClientCodeFunctionality);
27
29
 
28
30
  RED.httpAdmin.post("/ClientCode/:id",
29
- RED.auth.needsPermission("ClientCode.write"),
30
- (req,res) => {
31
- var node = RED.nodes.getNode(req.params.id);
32
- if (node != null) {
33
- try {
34
- if (req.body && node.type == "ClientCode" ) {
35
- node.send(req.body);
36
- res.sendStatus(200);
37
- } else {
38
- res.sendStatus(404);
39
- }
40
- } catch(err) {
41
- res.sendStatus(500);
42
- node.error("ClientCode: Submission failed: " +
43
- err.toString())
44
- }
45
- } else {
46
- res.sendStatus(404);
47
- }
48
- });
49
-
31
+ RED.auth.needsPermission("ClientCode.write"),
32
+ (req,res) => {
33
+ var node = RED.nodes.getNode(req.params.id);
34
+ if (node != null) {
35
+ try {
36
+ if (req.body && node.type == "ClientCode" ) {
37
+ node.send(req.body);
38
+ res.sendStatus(200);
39
+ } else {
40
+ res.sendStatus(404);
41
+ }
42
+ } catch(err) {
43
+ res.sendStatus(500);
44
+ node.error("ClientCode: Submission failed: " +
45
+ err.toString())
46
+ }
47
+ } else {
48
+ res.sendStatus(404);
49
+ }
50
+ });
50
51
 
51
52
  RED.httpAdmin.post("/ClientCode/:id/status",
52
53
  RED.auth.needsPermission("ClientCode.write"),
@@ -70,4 +71,43 @@ module.exports = function(RED) {
70
71
  }
71
72
  });
72
73
 
74
+ RED.httpAdmin.post("/ClientCode/:id/ugify",
75
+ RED.auth.needsPermission("ClientCode.write"),
76
+ (req, res) => {
77
+ var node = RED.nodes.getNode(req.params.id);
78
+ if (node != null) {
79
+ try {
80
+ if (req.body ) {
81
+ req.body.nodes.forEach( n => {
82
+
83
+ if ( n.format == "javascript") {
84
+ /* this handles PkgFile nodes and template nodes */
85
+ let result = UglifyJS.minify(n.template, req.body.cfg)
86
+ if ( result.code && !result.error) {
87
+ n.template = result.code
88
+ }
89
+ }
90
+
91
+ if (n.type == "function") {
92
+ let result = UglifyJS.minify(n.func, req.body.cfg)
93
+ if (result.code && !result.error) {
94
+ n.func = result.code
95
+ }
96
+ }
97
+ })
98
+ res.status(200).send(req.body.nodes);
99
+ } else {
100
+ res.sendStatus(404);
101
+ }
102
+ } catch (err) {
103
+ res.sendStatus(500);
104
+ node.error("ClientCode: Submission failed: " +
105
+ err.toString())
106
+ }
107
+ } else {
108
+ res.sendStatus(404);
109
+ }
110
+ });
111
+
112
+
73
113
  }
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@gregoriusrippenstein/node-red-contrib-introspection",
3
- "version": "0.5.8",
3
+ "version": "0.6.0",
4
4
  "dependencies": {
5
- "got": "^13"
5
+ "got": "^13",
6
+ "uglify-js": "^3.17.4"
6
7
  },
7
8
 
8
9
  "keywords": [
@@ -2,12 +2,14 @@
2
2
  (function() {
3
3
  var globalRefToSvgData;
4
4
 
5
- function getFlowDataFromCurrentWorkspace(e){var e=e||RED.workspaces.active(),o=RED.nodes.groups(e),e=(o=(o=o.concat(RED.nodes.junctions(e))).concat(RED.nodes.filterNodes({z:e})),RED.nodes.eachConfig(function(e){e.z===RED.workspaces.active()&&!1===e._def.hasUsers&&o.push(e)}),RED.nodes.workspace(e)||RED.nodes.subflow(e));return o.unshift(e),RED.nodes.createExportableNodeSet(o)}function openImportDialog(e){RED.clipboard.import();let o=e;setTimeout(()=>{$("#red-ui-clipboard-dialog-import-text").val(JSON.stringify(o)).trigger("paste")},300)}
5
+ let obfuscateHelpers={getFlowDataFromCurrentWorkspace:e=>{var e=e||RED.workspaces.active(),o=RED.nodes.groups(e),e=(o=(o=o.concat(RED.nodes.junctions(e))).concat(RED.nodes.filterNodes({z:e})),RED.nodes.eachConfig(function(e){e.z===RED.workspaces.active()&&!1===e._def.hasUsers&&o.push(e)}),RED.nodes.workspace(e)||RED.nodes.subflow(e));return o.unshift(e),RED.nodes.createExportableNodeSet(o)},openImportDialog:e=>{RED.clipboard.import();let o=e;setTimeout(()=>{$("#red-ui-clipboard-dialog-import-text").val(JSON.stringify(o)).trigger("paste")},300)}};function obfuscatieCurrentFlow(o){let t=obfuscateHelpers.getFlowDataFromCurrentWorkspace();t=t.filter(e=>"group"!=e.type);let r={},a=[];console.log("CFG",o),t.forEach(e=>{r[e.id]=e,o.name&&(e.name=e.id),o.info&&(e.info=""),o.position&&(e.x=150,e.y=150),!o.javascript||"javascript"!=e.format&&"function"!=e.type||a.push(e)}),0<a.length?$.ajax({url:"ClientCode/"+a[0].id+"/ugify",type:"POST",contentType:"application/json; charset=utf-8",data:JSON.stringify({nodes:a,cfg:{parse:{},compress:{},mangle:{reserved:["$","export","require"]},output:null,sourceMap:null,nameCache:null,toplevel:!1,warnings:!1}}),success:function(e){e.forEach(e=>{var o=r[e.id];"function"==o.type?o.func=e.func:"javascript"==o.format&&(o.template=e.template)}),obfuscateHelpers.openImportDialog(t)},error:function(e,o,t){RED.notify("ClientCode Communcation Failure: "+n.id+": "+o,{type:"error",timeout:3e3})}}):obfuscateHelpers.openImportDialog(t)}
6
6
 
7
- function setupTreelist(){var e=collectOrphans();if(0==e.length){RED.notify("No Orphans Found",{type:"warning",timeout:2e3});try{$("#node-input-orphan-target-container-div").treeList("empty")}catch(e){}}else{try{$("#node-input-orphan-target-container-div").treeList("empty")}catch(e){$("#node-input-orphan-target-container-div").css({width:"100%",height:"calc(100%)"}).treeList({multi:!1}).on("treelistitemmouseover",function(e,t){t.node&&t.node.z==RED.workspaces.active()&&(RED.view.reveal(t.node.id,!0),RED.view.redraw())}).on("treelistitemmouseout",function(e,t){}).on("treelistselect",function(e,t){t.node&&(RED.workspaces.show(t.node.z,!1,!1,!0),RED.view.reveal(t.node.id,!0),RED.view.redraw())}).on("treelistconfirm",function(e,t){var n;t.node&&(n=t.node.id,setTimeout(()=>{var e=RED.nodes.node(n);e&&(RED.view.reveal(e.id),RED.view.select(e.id),RED.editor.edit(e)),n==RED.workspaces.active()&&RED.workspaces.edit()},50))}),$("#node-input-orphan-target-filter").show();var n=$("#node-input-orphan-target-filter").searchBox({style:"compact",delay:300,change:function(){var e,t=$(this).val().trim().toLowerCase();""===t?($("#node-input-orphan-target-container-div").treeList("filter",null),n.searchBox("count","")):(e=$("#node-input-orphan-target-container-div").treeList("filter",function(e){return-1<e.label.toLowerCase().indexOf(t)||-1<e.node.type.toLowerCase().indexOf(t)}),n.searchBox("count",e+" / "+$("#node-input-orphan-target-container-div").treeList("data").length))}})}$("#node-input-orphan-target-container-div").treeList("data",e.sort((e,t)=>e.node.z>t.node.z))}}function collectOrphans(){const t=new Set;var n=[],i=(RED.nodes.eachLink(e=>{t.add(e.source),t.add(e.target)}),RED.nodes.eachNode(e=>{t.has(e)||n.push(e)}),[]),r={};return n.forEach(function(e){var t=RED.nodes.getType(e.type);if(t){var n=t.label,n=("function"==typeof n?n.call(e):n)||"",o=e.type;if(0===o.indexOf("subflow:"))return}t&&n||(n=e.type),r[e.id]={node:e,label:n,sublabel:o,selected:!1,checkbox:!1},i.push(r[e.id])}),i}
7
+ function setupTreelist(){var e=collectOrphans();if(0==e.length){RED.notify("No Orphans Found",{type:"warning",timeout:2e3});try{$("#node-input-orphan-target-container-div").treeList("empty")}catch(e){}}else{try{$("#node-input-orphan-target-container-div").treeList("empty")}catch(e){$("#node-input-orphan-target-container-div").css({width:"100%",height:"calc(100%)"}).treeList({multi:!1}).on("treelistitemmouseover",function(e,t){}).on("treelistitemmouseout",function(e,t){}).on("treelistselect",function(e,t){t.node&&(RED.workspaces.show(t.node.z,!1,!1,!0),RED.view.reveal(t.node.id,!0),RED.view.redraw())}).on("treelistconfirm",function(e,t){var n;t.node&&(n=t.node.id,setTimeout(()=>{var e=RED.nodes.node(n);e&&(RED.view.reveal(e.id),RED.view.select(e.id),RED.editor.edit(e)),n==RED.workspaces.active()&&RED.workspaces.edit()},50))}),$("#node-input-orphan-target-filter").show();var n=$("#node-input-orphan-target-filter").searchBox({style:"compact",delay:300,change:function(){var e,t=$(this).val().trim().toLowerCase();""===t?($("#node-input-orphan-target-container-div").treeList("filter",null),n.searchBox("count","")):(e=$("#node-input-orphan-target-container-div").treeList("filter",function(e){return-1<e.label.toLowerCase().indexOf(t)||-1<e.node.type.toLowerCase().indexOf(t)}),n.searchBox("count",e+" / "+$("#node-input-orphan-target-container-div").treeList("data").length))}})}$("#node-input-orphan-target-container-div").treeList("data",e.sort((e,t)=>e.node.z>t.node.z))}}function collectOrphans(){const t=new Set;var n=[],i=(RED.nodes.eachLink(e=>{t.add(e.source),t.add(e.target)}),RED.nodes.eachNode(e=>{t.has(e)||n.push(e)}),[]),r={};return n.forEach(function(e){var t=RED.nodes.getType(e.type);if(t){var n=t.label,n=("function"==typeof n?n.call(e):n)||"",o=e.type;if(0===o.indexOf("subflow:"))return}t&&n||(n=e.type),r[e.id]={node:e,label:n,sublabel:o,selected:!1,checkbox:!1},i.push(r[e.id])}),i}
8
8
 
9
9
  function nr_intro_generate_svg_3_1(r){return e=>{try{handleSvgObject($($("svg[width=8000]")[0]),e)}catch(t){var n="Error Generating SVG: "+JSON.stringify(t);r.notify(n,{type:"error"}),e('<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="1000" height="1000" viewBox="0 0 1000 1000" pointer-events="all" style="cursor: crosshair; touch-action: none;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>.small { font: bold 20px sans-serif; fill: red;}</style><text x="10" y="30" class="small">'+n+"</text></svg>")}}}function nr_intro_generate_svg_3_0(r){return e=>{try{handleSvgObject($($("svg")[0]),e)}catch(t){var n="Error Generating SVG: "+JSON.stringify(t);r.notify(n,{type:"error"}),e('<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="1000" height="1000" viewBox="0 0 1000 1000" pointer-events="all" style="cursor: crosshair; touch-action: none;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>.small { font: bold 20px sans-serif; fill: red;}</style><text x="10" y="30" class="small">'+n+"</text></svg>")}}}function handleSvgObject(o,e){var t=o.clone();t.find("foreignObject").remove(),t.find("svg.__screenshot").remove();function a(t,e){for(var n=0;n<t.length;n++){var s=t.item(n),i=e[n];["stroke-width","fill-opacity","stroke-opacity","opacity","stroke-dasharray"].forEach(function(t){s.setAttribute(t,$(i).attr(t)||$(i).css(t))}),["fill","stroke"].forEach(function(t){var e,n,r=(e=$(i).attr(t)||$(i).css(t))&&null!==e&&"none"!=e?(n=e.match(/^#(.)(.)(.)$/))?"#"+n[1]+n[1]+n[2]+n[2]+n[3]+n[3]:(n=e.match(/^#......$/))?e:null===(n=e.match(/^rgb\(([0-9]+),\s+([0-9]+),\s+([0-9]+)/))?(r=e.match(/^rgba\(([0-9]+),\s+([0-9]+),\s+([0-9]+),\s+([0-9]+)/))?{clr:"#"+("0"+parseInt(r[1],10).toString(16)).slice(-2)+("0"+parseInt(r[2],10).toString(16)).slice(-2)+("0"+parseInt(r[3],10).toString(16)).slice(-2),opa:r[4]}:(console.log("Screenshot node: returned unknown color: "+e),e):"#"+("0"+parseInt(n[1],10).toString(16)).slice(-2)+("0"+parseInt(n[2],10).toString(16)).slice(-2)+("0"+parseInt(n[3],10).toString(16)).slice(-2):"none";"object"==typeof r?(s.setAttribute(t+"-opacity",r.opa),s.setAttribute(t,r.clr)):s.setAttribute(t,r)}),$(i).hasClass("hide")&&("g"==s.tagName&&s.setAttribute("opacity","0"),s.setAttribute("visibility","hidden"))}}var n='<?xml version="1.0" standalone="no"?>\r\n<svg '+('width="'+o.attr("width")+'" height="'+o.attr("height")+'"')+' pointer-events="all" style="cursor: crosshair; touch-action: none;" xmlns="http://www.w3.org/2000/svg" class="__screenshot" xmlns:xlink="http://www.w3.org/1999/xlink">\r\n',t=t.html(),l=(new DOMParser).parseFromString(n+t+"\r\n</svg>","image/svg+xml"),r=e=>(["g","rect","line","path","circle","image","text"].forEach(t=>{$(e.getElementsByTagName(t)).each((t,e)=>{e.setAttribute("class",""),e.setAttribute("id","")})}),e),s=(["g","rect","line","path","circle","image"].forEach(function(t){a(l.getElementsByTagName(t),o.find(t))}),["text"].forEach(function(t){a(l.getElementsByTagName(t),o.find(t));for(var e=l.getElementsByTagName(t),n=o.find(t),r=0;r<e.length;r++){var s=e.item(r),i=n[r];["font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","text-anchor","dominant-baseline"].forEach(function(t){s.setAttribute(t,$(i).attr(t)||$(i).css(t))})}}),l.getElementsByTagName("image")),g={},i=(n,r,s)=>{var i=n.getAttribute("xlink:href"),o=i.substr(-4,4).toLowerCase(),a={".jpg":"jpeg",jpeg:"jpeg",".png":"png",".svg":"svg+xml"};if(g[i])return n.setAttribute("xlink:href","data:image/"+a[o]+";base64,"+g[i]),s(r-1);switch(o){case".jpg":case"jpeg":case".png":var l=new XMLHttpRequest;l.open("GET",i,!0),l.responseType="arraybuffer";l.onload=function(t){var e=l.response;e&&(e=(t=>{for(var e="",n=new Uint8Array(t),r=n.byteLength,s=0;s<r;s++)e+=String.fromCharCode(n[s]);return window.btoa(e)})(e),g[i]=e,n.setAttribute("xlink:href","data:image/"+a[o]+";base64,"+e)),s(r-1)},l.send(null);break;case".svg":$.get(i,function(t){var e=new XMLSerializer,e=btoa(e.serializeToString(t));g[i]=e,n.setAttribute("xlink:href","data:image/svg+xml;base64,"+e),s(r-1)})}},c=t=>{t<0?e((new XMLSerializer).serializeToString(r(l))):i(s.item(t),t,c)};0<s.length?i(s.item(s.length-1),s.length-1,c):e((new XMLSerializer).serializeToString(r(l)))}function generatorFunctionForVersion(t){var n,e=t.settings.version.split("."),r=e[0],e=e[1];if("3"==r){if("0"==e)return nr_intro_generate_svg_3_0(t);if("1"==e)return nr_intro_generate_svg_3_1(t)}return n=t,t=>{var e="Node-RED version ("+n.settings.version+") not supported";n.notify(e,{type:"error"}),t&&t('<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="1000" height="1000" viewBox="0 0 1000 1000" pointer-events="all" style="cursor: crosshair; touch-action: none;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>.small { font: bold 20px sans-serif; fill: red;}</style><text x="10" y="30" class="small">'+e+"</text></svg>")}}function addPanZoom(){var t=d3.select("#node-input-screenshot-svgcontainer svg"),e=(t.html("<g>"+t.html()+"</g>"),t.select("g")),n=d3.behavior.zoom().scaleExtent([.2,100]).on("zoom",function(t){e.attr({transform:"translate("+n.translate()+") scale("+n.scale()+")"})});t.call(n)}
10
10
 
11
+ function setupTreelistInfoness(){var e=collectUndocumentedNodes();if(0==e.length){RED.notify("All nodes documented",{type:"success",timeout:2e3});try{$("#node-input-orphan-target-container-div").treeList("empty")}catch(e){}}else{try{$("#node-input-orphan-target-container-div").treeList("empty")}catch(e){$("#node-input-orphan-target-container-div").css({width:"100%",height:"calc(100%)"}).treeList({multi:!1}).on("treelistitemmouseover",function(e,t){}).on("treelistitemmouseout",function(e,t){}).on("treelistselect",function(e,t){t.node&&(RED.workspaces.show(t.node.z,!1,!1,!0),RED.view.reveal(t.node.id,!0),RED.view.redraw())}).on("treelistconfirm",function(e,t){var n;t.node&&(n=t.node.id,setTimeout(()=>{var e=RED.nodes.node(n);e&&(RED.view.reveal(e.id),RED.view.select(e.id),RED.editor.edit(e,"editor-tab-description")),n==RED.workspaces.active()&&RED.workspaces.edit()},50))}),$("#node-input-orphan-target-filter").show();var n=$("#node-input-orphan-target-filter").searchBox({style:"compact",delay:300,change:function(){var e,t=$(this).val().trim().toLowerCase();""===t?($("#node-input-orphan-target-container-div").treeList("filter",null),n.searchBox("count","")):(e=$("#node-input-orphan-target-container-div").treeList("filter",function(e){return-1<e.label.toLowerCase().indexOf(t)||-1<e.node.type.toLowerCase().indexOf(t)}),n.searchBox("count",e+" / "+$("#node-input-orphan-target-container-div").treeList("data").length))}})}$("#node-input-orphan-target-container-div").treeList("data",e.sort((e,t)=>e.node.z>t.node.z))}}function collectUndocumentedNodes(){let o=[];RED.nodes.eachNode(e=>{var t,n;$("#"+e.id).find(".red-ui-info-available-indicator").remove(),e.info&&e.info.trim()?((t=document.createElementNS("http://www.w3.org/2000/svg","g")).setAttribute("class","red-ui-info-available-indicator"),(n=document.createElementNS("http://www.w3.org/2000/svg","circle")).setAttribute("cx","5"),n.setAttribute("cy","5"),n.setAttribute("r","5"),n.setAttribute("fill","yellow"),t.append(n),$(t).insertBefore($("#"+e.id).find(".red-ui-flow-node-changed"))):e.z==RED.workspaces.active()&&o.push(e)});var i=[],r={};return o.forEach(function(e){var t=RED.nodes.getType(e.type);if(t){var n,o=t.label,o=("function"==typeof o?o.call(e):o)||"";if(0===(n=e.type).indexOf("subflow:"))return}t&&o||(o=e.type),r[e.id]={node:e,label:o,sublabel:n,selected:!1,checkbox:!1},i.push(r[e.id])}),i}
12
+
11
13
  // Add your plugin as a new tabsheet in the right sidebar AFTER the flow editor is completely started
12
14
  var initialiseConfigNodeOnce = () => {
13
15
  RED.events.off('runtime-state', initialiseConfigNodeOnce);
@@ -57,19 +59,13 @@
57
59
 
58
60
  $('#node-input-obfuscation-generate-btn').on("click", function (e) {
59
61
  if ( e ) { e.preventDefault() }
60
-
61
- let nodes = getFlowDataFromCurrentWorkspace()
62
-
63
- nodes.forEach( (n) => {
64
- n.name = n.id;
65
- n.info = ""
66
- n.x = 150
67
- n.y = 150
68
- })
69
62
 
70
- nodes = nodes.filter( n => { return n.type != "group"})
71
-
72
- openImportDialog(nodes)
63
+ obfuscatieCurrentFlow({
64
+ name: $('#node-input-obfuscate-name').is(":checked"),
65
+ info: $('#node-input-obfuscate-info').is(":checked"),
66
+ position: $('#node-input-obfuscate-position').is(":checked"),
67
+ javascript: $('#node-input-obfuscate-javascript').is(":checked"),
68
+ })
73
69
  })
74
70
 
75
71
  $('#node-screenshot-capture-btn').on("click", function (e) {
@@ -111,6 +107,11 @@
111
107
  if ( e ) { e.preventDefault() }
112
108
  setupTreelist();
113
109
  })
110
+
111
+ $('#node-input-documentation-find-btn').on('click', (e) => {
112
+ if ( e ) { e.preventDefault() }
113
+ setupTreelistInfoness();
114
+ })
114
115
  };
115
116
  RED.events.on('runtime-state', initialiseConfigNodeOnce);
116
117
  })();
@@ -124,6 +125,10 @@
124
125
  .col-100.no-label .red-ui-typedInput-container {
125
126
  width: 100% !important;
126
127
  }
128
+ .w-30 {
129
+ width: 30% !important;
130
+ margin-left: 10px;
131
+ }
127
132
  </style>
128
133
 
129
134
  <!-- The html for the right sidebar plugin screen -->
@@ -160,7 +165,9 @@
160
165
  <div class="col-100">
161
166
  <div class="form-row node-input-target-row" style="margin-left: 10px; margin-top: 30px">
162
167
  <button id="node-input-orphan-find-btn"
163
- class="red-ui-button"><i class="fa fa-rotate-right"></i> Refresh</button>
168
+ class="red-ui-button"><i class="fa fa-life-ring"></i> Unconnected</button>
169
+ <button id="node-input-documentation-find-btn"
170
+ class="red-ui-button"><i class="fa fa-cc"></i> Undocumented</button>
164
171
  </div>
165
172
 
166
173
  <div class="form-row node-input-target-row node-input-target-list-row"
@@ -175,6 +182,7 @@
175
182
  </div>
176
183
 
177
184
  <div id="func-introspection-tab-obfuscation" style="display:none; min-height: calc(100%);">
185
+
178
186
  <div class="form-row">
179
187
  <div class="col-100">
180
188
  <div class="form-row node-input-target-row" style="margin-left: 10px; margin-top: 30px">
@@ -183,7 +191,39 @@
183
191
  </div>
184
192
  </div>
185
193
  </div>
186
- </div>
194
+
195
+ <div class="form-row col-100">
196
+ <label for="node-input-obfuscate-name" class="w-30">
197
+ <i class="fa fa-tag"></i>
198
+ <span>Obfuscate Name?</span>
199
+ </label>
200
+ <input type="checkbox" checked=checked id="node-input-obfuscate-name"
201
+ style="display:inline-block; width:15px; vertical-align:baseline;">
202
+ </div>
203
+ <div class="form-row">
204
+ <label for="node-input-obfuscate-position" class="w-30">
205
+ <i class="fa fa-map-pin"></i>
206
+ <span>Obfuscate Position?</span>
207
+ </label>
208
+ <input type="checkbox" checked=checked id="node-input-obfuscate-position"
209
+ style="display:inline-block; width:15px; vertical-align:baseline;">
210
+ </div>
211
+ <div class="form-row">
212
+ <label for="node-input-obfuscate-info" class="w-30">
213
+ <i class="fa fa-info"></i>
214
+ <span>Obfuscate Info?</span>
215
+ </label>
216
+ <input type="checkbox" checked=checked id="node-input-obfuscate-info"
217
+ style="display:inline-block; width:15px; vertical-align:baseline;">
218
+ </div>
219
+ <div class="form-row">
220
+ <label for="node-input-obfuscate-javascript" class="w-30">
221
+ <i class="fa fa-code"></i>
222
+ <span>Obfuscate Javascript?</span>
223
+ </label>
224
+ <input type="checkbox" checked=checked id="node-input-obfuscate-javascript"
225
+ style="display:inline-block; width:15px; vertical-align:baseline;">
226
+ </div>
187
227
  </div>
188
228
 
189
229
  </script>