@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.
- package/nodes/60-client-code.js +61 -21
- package/package.json +3 -2
- package/plugins/sidebar.html +56 -16
package/nodes/60-client-code.js
CHANGED
|
@@ -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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
package/plugins/sidebar.html
CHANGED
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
(function() {
|
|
3
3
|
var globalRefToSvgData;
|
|
4
4
|
|
|
5
|
-
|
|
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){
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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-
|
|
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
|
-
|
|
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>
|