Skip to content

Commit 6593232

Browse files
authored
Merge pull request #118 from node-red/support-deprecation
Support marking module as deprecated
2 parents 6897487 + 7ba63ea commit 6593232

File tree

5 files changed

+84
-3
lines changed

5 files changed

+84
-3
lines changed

lib/modules.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ async function getLatestVersion (name, knownVersion) {
9797
const tarballUrl = info.versions[latest].dist.tarball
9898
const tarfile = path.join(nodePath, path.basename(tarballUrl))
9999

100+
info.deprecated = info.versions[latest].deprecated || false
101+
100102
const packagePath = path.join(nodePath, 'package')
101103
async function completeUpdate () {
102104
console.log(name, 'completeUpgrade done')

public/css/library.css

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1362,7 +1362,8 @@ body.flowviewer-share {
13621362
border-bottom-left-radius: 15px;
13631363

13641364
}
1365-
#report-node-dialog textarea {
1365+
#report-node-dialog textarea,
1366+
#edit-node-deprecation textarea {
13661367
border: 1px solid #999;
13671368
font-size: 14px;
13681369
width: 100%;
@@ -1713,3 +1714,23 @@ span.username {
17131714
top: 12px;
17141715

17151716
}
1717+
1718+
.deprecated-notice {
1719+
display: block;
1720+
border: 2px solid #eec0c0;
1721+
background: #eec0c0;
1722+
padding: 8px;
1723+
border-bottom-left-radius: 8px;
1724+
border-top-right-radius: 8px;
1725+
margin-bottom: 30px;
1726+
}
1727+
.deprecated-notice h1 {
1728+
margin: 10px 0;
1729+
font-size: 22px;
1730+
}
1731+
.deprecated-notice code {
1732+
display: block;
1733+
padding: 8px;
1734+
border-top-right-radius: 8px;
1735+
border-bottom-left-radius: 8px;
1736+
}

routes/nodes.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ async function getNode (id, scope, collection, req, res) {
6262
node.csrfToken = req.csrfToken()
6363
node.pageTitle = req.params.id + ' (node)'
6464

65+
if (node.deprecated && typeof node.deprecated === 'string') {
66+
node.deprecatedMessage = node.deprecated
67+
}
68+
6569
prepareScorecard(node)
6670

6771
if (req.query.m) {
@@ -328,6 +332,32 @@ app.post('/node/:scope(@[^\\/]{1,})?/:id([^@][^\\/]{1,})/category', appUtils.csr
328332
res.end()
329333
})
330334

335+
app.post('/node/:scope(@[^\\/]{1,})?/:id([^@][^\\/]{1,})/deprecate', appUtils.csrfProtection(), async function (req, res) {
336+
let id = req.params.id
337+
if (req.params.scope) {
338+
id = req.params.scope + '/' + id
339+
}
340+
const isValid = validatePackage(id)
341+
if (!isValid.validForNewPackages && !isValid.validForOldPackages) {
342+
res.status(404).send()
343+
return
344+
}
345+
if (req.session.user?.isAdmin || req.session.user?.isModerator) {
346+
let deprecated = false
347+
if (req.body.deprecated == 'on') {
348+
deprecated = true
349+
if (req.body.message?.trim().length > 0) {
350+
deprecated = req.body.message.trim()
351+
}
352+
}
353+
await npmNodes.update(id, { deprecated })
354+
}
355+
res.writeHead(303, {
356+
Location: '/node/' + id
357+
})
358+
res.end()
359+
})
360+
331361
app.get('/add/node', appUtils.csrfProtection(), function (req, res) {
332362
const context = {}
333363
context.sessionuser = req.session.user

tasks/generate_catalog.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ const viewster = require('../lib/view')
1313
keywords: 1,
1414
types: 1,
1515
categories: 1,
16-
downloads: 1
16+
downloads: 1,
17+
deprecated: 1
1718
})
1819
const modules = things.map(function (t) {
1920
return {
@@ -25,7 +26,8 @@ const viewster = require('../lib/view')
2526
keywords: t.keywords,
2627
categories: t.categories,
2728
url: 'https://flows.nodered.org/node/' + t._id,
28-
downloads: t.downloads
29+
downloads: t.downloads,
30+
deprecated: t.deprecated || undefined
2931
}
3032
})
3133

template/node.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212
}
1313
</script>
1414
{{/message}}
15+
{{#deprecated}}
16+
<div class="deprecated-notice">
17+
<h1>This module has been deprecated.</h1>
18+
{{ #deprecatedMessage }}<code>{{ deprecatedMessage }}</code>{{/deprecatedMessage}}
19+
</div>
20+
{{/deprecated}}
1521
<h1 class="flow-title" style="margin-bottom: 10px;">{{ name }} <span class="flow-version">{{ versions.latest.version }}</span></h1>
1622
<p class="flow-description">{{ description }}</p>
1723
<p class="flowmeta flow-install">
@@ -77,6 +83,7 @@ <h4>Actions</h4>
7783
{{#isAdmin}}
7884
<button id="remove-button" type="submit" class="user-profile-action" style="background: none; color: #aa6767"><span id="remove-node-label">remove from library</span><img id="remove-node-loader" class="loader" src="/images/loader.gif" /></button>
7985
<div id="remove-node-error" class="dialog-warning" style="position:relative"></div>
86+
<button id="deprecated-button" type="submit" class="user-profile-action" style="background: none; color: #aa6767"><span id="deprecate-node-label">deprecate module</span><img id="deprecate-node-loader" class="loader" src="/images/loader.gif" /></button>
8087
{{/isAdmin}}
8188
</div>
8289
{{/sessionuser}}
@@ -155,6 +162,20 @@ <h4>Update node categories</h4>
155162
</form>
156163
</div>
157164
</div>
165+
166+
<div class="dialog-shade dialog-fixed" id="edit-node-deprecation-shade">
167+
<div class="dialog" id="edit-node-deprecation">
168+
<form action="/node/{{_id}}/deprecate" method="POST">
169+
<input name="_csrf" type="hidden" value="{{csrfToken}}">
170+
<h4>Update deprecation details</h4>
171+
<p><input id="node-deprecated-cb" type="checkbox" name="deprecated" {{#deprecated}}checked{{/deprecated}}><label for="node-deprecated-cb">Mark as deprecated</label></p>
172+
<p><textarea name="message" id="message">{{ deprecatedMessage }}</textarea></p>
173+
<div class="dialog-buttons">
174+
<button type="button" onclick="return closeDialog();">Cancel</button> <button type="submit">Update</button>
175+
</div>
176+
</form>
177+
</div>
178+
</div>
158179
{{/isAdmin}}
159180

160181

@@ -173,6 +194,11 @@ <h4>Update node categories</h4>
173194
e.preventDefault();
174195
$("#edit-node-category-shade").show();
175196
});
197+
$("#deprecated-button").click(function(e) {
198+
$("body").css({height:"100%",overflow:"hidden"});
199+
e.preventDefault();
200+
$("#edit-node-deprecation-shade").show();
201+
});
176202
{{/isAdmin}}
177203

178204
var refreshSubmitted = false;

0 commit comments

Comments
 (0)