@gregoriusrippenstein/node-red-contrib-nodedev 0.6.0 → 0.6.2
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.
|
@@ -158,12 +158,12 @@
|
|
|
158
158
|
|
|
159
159
|
// anything that requires the config node goes here.
|
|
160
160
|
let fillInSidebarForm = () => {
|
|
161
|
-
RED.events.off('
|
|
161
|
+
RED.events.off('flows:loaded', fillInSidebarForm )
|
|
162
162
|
|
|
163
163
|
// At startup load your config node data into the plugin sidebar html elements
|
|
164
164
|
$("#node-input-data").val(globalYourConfigNode.data);
|
|
165
165
|
}
|
|
166
|
-
RED.events.on('
|
|
166
|
+
RED.events.on('flows:loaded', fillInSidebarForm )
|
|
167
167
|
};
|
|
168
168
|
|
|
169
169
|
RED.plugins.registerPlugin("{{ node.name }}-sidebar-plugin", { onadd: registerPluginOnAdd });
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script type="text/javascript">
|
|
2
|
-
(function() {
|
|
2
|
+
(function() {
|
|
3
3
|
var globalYourConfigNode = null;
|
|
4
4
|
|
|
5
5
|
function doGenerateOTP(cfgnode, cb) {
|
|
@@ -326,7 +326,7 @@
|
|
|
326
326
|
})
|
|
327
327
|
|
|
328
328
|
let fillInSiderBarForm = () => {
|
|
329
|
-
RED.events.off('
|
|
329
|
+
RED.events.off('flows:loaded', fillInSiderBarForm);
|
|
330
330
|
ensureYourConfigNodeExists();
|
|
331
331
|
|
|
332
332
|
$("#node-input-nodefactorysidebar-package-registry").val(globalYourConfigNode.pkgregistry);
|
|
@@ -343,8 +343,101 @@
|
|
|
343
343
|
$('#node-input-nodedev-sidebar-otp-counter').val(globalYourConfigNode.counter || globalYourConfigNode._def.defaults.counter.value)
|
|
344
344
|
|
|
345
345
|
$("#node-input-nodefactorysidebar-package-version").val(globalYourConfigNode.pkgversion);
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
function addTargetToExternalLinks(el) {
|
|
349
|
+
$(el).find("a").each(function (el) {
|
|
350
|
+
const href = $(this).attr('href');
|
|
351
|
+
if (/^https?:/.test(href)) {
|
|
352
|
+
$(this).attr('target', '_blank');
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
return el;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// Adds `text` to `target` with the following additions:
|
|
359
|
+
// - wraps text in a div with class `red-ui-help`
|
|
360
|
+
// - wraps text in a span with class `red-ui-text-bidi-aware` and sets the `dir` attribute to the base text direction of the text
|
|
361
|
+
// - wraps any text nodes in a span
|
|
362
|
+
// - wraps any H3 elements in an anchor with class `red-ui-help-info-header` and adds a click handler to toggle the visibility of the following elements until the next H3
|
|
363
|
+
// - ensures any <a> links to external sites open in a new tab
|
|
364
|
+
function renderInfoText(text, target, options) {
|
|
365
|
+
const info = addTargetToExternalLinks($('<div class="red-ui-help"><span class="red-ui-text-bidi-aware" dir=\"' + RED.text.bidi.resolveBaseTextDir(text) + '">' + text + '</span></div>')).appendTo(target);
|
|
366
|
+
info.find(".red-ui-text-bidi-aware").contents().filter(function () { return this.nodeType === 3 && this.textContent.trim() !== "" }).wrap("<span></span>");
|
|
367
|
+
if (options?.collapseSections !== false) {
|
|
368
|
+
const foldingHeader = "H3";
|
|
369
|
+
const breakHeader = ["H1", "H2", "H3"];
|
|
370
|
+
info.find(foldingHeader).wrapInner('<a class="red-ui-help-info-header expanded" href="#"></a>')
|
|
371
|
+
.find("a").prepend('<i class="fa fa-angle-right">').on("click", function (e) {
|
|
372
|
+
e.preventDefault();
|
|
373
|
+
const isExpanded = $(this).hasClass('expanded');
|
|
374
|
+
let el = $(this).parent().next();
|
|
375
|
+
while (el.length === 1 && breakHeader.indexOf(el[0].nodeName) === -1) {
|
|
376
|
+
el.toggle(!isExpanded);
|
|
377
|
+
el = el.next();
|
|
378
|
+
}
|
|
379
|
+
$(this).toggleClass('expanded', !isExpanded);
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// this adds the badge to the top of the PkgFile node.
|
|
385
|
+
RED.view.annotations.register("pkgfile-node-info-docs", {
|
|
386
|
+
type: "badge",
|
|
387
|
+
class: "red-ui-flow-node-docs",
|
|
388
|
+
element: function (node) {
|
|
389
|
+
const docsBadge = document.createElementNS("http://www.w3.org/2000/svg", "g")
|
|
390
|
+
|
|
391
|
+
const pageOutline = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
|
392
|
+
pageOutline.setAttribute("x", 0);
|
|
393
|
+
pageOutline.setAttribute("y", 0);
|
|
394
|
+
pageOutline.setAttribute("rx", 2);
|
|
395
|
+
pageOutline.setAttribute("width", 7);
|
|
396
|
+
pageOutline.setAttribute("height", 10);
|
|
397
|
+
docsBadge.appendChild(pageOutline)
|
|
398
|
+
|
|
399
|
+
const pageLines = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
400
|
+
pageLines.setAttribute("d", "M 7 3 h -3 v -3 M 2 8 h 3 M 2 6 h 3 M 2 4 h 2")
|
|
401
|
+
docsBadge.appendChild(pageLines)
|
|
402
|
+
return docsBadge;
|
|
403
|
+
},
|
|
404
|
+
show: function (n) { return n.type == "PkgFile" },
|
|
405
|
+
popover: {
|
|
406
|
+
content: function (n, popoverInstance) {
|
|
407
|
+
const section = $('<div class="red-ui-sidebar-section red-ui-flow-annotation-popover-section"></div>')
|
|
408
|
+
const banner = $('<div class="red-ui-sidebar-banner"></div>').appendTo(section)
|
|
409
|
+
$('<div class="red-ui-sidebar-banner-icon"><i class="fa fa-info"></i></div>').appendTo(banner)
|
|
410
|
+
$('<div class="red-ui-sidebar-banner-label" data-i18n="sidebar.info.name"></div>').appendTo(banner)
|
|
411
|
+
const tools = $('<div class="red-ui-sidebar-banner-tools"></div>').appendTo(banner)
|
|
412
|
+
const canEdit = RED.user.hasPermission('flows.write') && !RED.workspaces.isLocked()
|
|
413
|
+
if (canEdit) {
|
|
414
|
+
const editButton = $('<button type="button" data-i18n="[title]common.label.edit"><i class="fa fa-pencil"></i></button>').appendTo(tools)
|
|
415
|
+
editButton.on('click', function (evt) {
|
|
416
|
+
evt.preventDefault()
|
|
417
|
+
evt.stopPropagation()
|
|
418
|
+
if (popoverInstance) { popoverInstance.close() }
|
|
419
|
+
RED.editor.edit(n)
|
|
420
|
+
})
|
|
421
|
+
}
|
|
422
|
+
const body = $('<div class="red-ui-flow-annotation-popover-body contact-node-popover-content"></div>').appendTo(section)
|
|
423
|
+
renderInfoText(RED.utils.renderMarkdown(n._def.info.call(n)), body, { collapseSections: false });
|
|
424
|
+
|
|
425
|
+
// Resolve data-i18n attributes on content
|
|
426
|
+
section.i18n()
|
|
427
|
+
|
|
428
|
+
// On the next tick, render any unrendered mermaid diagrams
|
|
429
|
+
// (Already-rendered diagrams will be skipped via the `mermaid-processed` attribute)
|
|
430
|
+
setTimeout(function () {
|
|
431
|
+
RED.editor.mermaid.render()
|
|
432
|
+
}, 0)
|
|
433
|
+
|
|
434
|
+
return section
|
|
435
|
+
},
|
|
436
|
+
width: 400
|
|
437
|
+
}
|
|
438
|
+
})
|
|
346
439
|
}
|
|
347
|
-
RED.events.on('
|
|
440
|
+
RED.events.on('flows:loaded', fillInSiderBarForm);
|
|
348
441
|
};
|
|
349
442
|
|
|
350
443
|
RED.plugins.registerPlugin("nodedev-sidebar-plugin", { onadd: initialiseSideBarForm });
|
|
@@ -353,7 +446,7 @@
|
|
|
353
446
|
|
|
354
447
|
<!-- The html for the right sidebar plugin screen -->
|
|
355
448
|
<script type="text/x-red" data-template-name="NodeFactorySidebar">
|
|
356
|
-
<div style="position: relative; height: 100%; overflow-y: auto;">
|
|
449
|
+
<div style="position: relative; height: 100%; overflow-y: auto;">
|
|
357
450
|
<div class="form-row func-nodedev-pkgimporter-tabs-row">
|
|
358
451
|
<ul style="min-width: 600px; margin-bottom: 20px;" id="func-nodedev-pkgimporter-tabs"></ul>
|
|
359
452
|
</div>
|
|
@@ -484,4 +577,4 @@
|
|
|
484
577
|
</div>
|
|
485
578
|
</div>
|
|
486
579
|
</div>
|
|
487
|
-
</script>
|
|
580
|
+
</script>
|