Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/modules.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ async function getLatestVersion (name, knownVersion) {
const tarballUrl = info.versions[latest].dist.tarball
const tarfile = path.join(nodePath, path.basename(tarballUrl))

info.deprecated = info.versions[latest].deprecated || false

const packagePath = path.join(nodePath, 'package')
async function completeUpdate () {
console.log(name, 'completeUpgrade done')
Expand Down
23 changes: 22 additions & 1 deletion public/css/library.css
Original file line number Diff line number Diff line change
Expand Up @@ -1362,7 +1362,8 @@ body.flowviewer-share {
border-bottom-left-radius: 15px;

}
#report-node-dialog textarea {
#report-node-dialog textarea,
#edit-node-deprecation textarea {
border: 1px solid #999;
font-size: 14px;
width: 100%;
Expand Down Expand Up @@ -1713,3 +1714,23 @@ span.username {
top: 12px;

}

.deprecated-notice {
display: block;
border: 2px solid #eec0c0;
background: #eec0c0;
padding: 8px;
border-bottom-left-radius: 8px;
border-top-right-radius: 8px;
margin-bottom: 30px;
}
.deprecated-notice h1 {
margin: 10px 0;
font-size: 22px;
}
.deprecated-notice code {
display: block;
padding: 8px;
border-top-right-radius: 8px;
border-bottom-left-radius: 8px;
}
30 changes: 30 additions & 0 deletions routes/nodes.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ async function getNode (id, scope, collection, req, res) {
node.csrfToken = req.csrfToken()
node.pageTitle = req.params.id + ' (node)'

if (node.deprecated && typeof node.deprecated === 'string') {
node.deprecatedMessage = node.deprecated
}

prepareScorecard(node)

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

app.post('/node/:scope(@[^\\/]{1,})?/:id([^@][^\\/]{1,})/deprecate', appUtils.csrfProtection(), async function (req, res) {
let id = req.params.id
if (req.params.scope) {
id = req.params.scope + '/' + id
}
const isValid = validatePackage(id)
if (!isValid.validForNewPackages && !isValid.validForOldPackages) {
res.status(404).send()
return
}
if (req.session.user?.isAdmin || req.session.user?.isModerator) {
let deprecated = false
if (req.body.deprecated == 'on') {
deprecated = true
if (req.body.message?.trim().length > 0) {
deprecated = req.body.message.trim()
}
}
await npmNodes.update(id, { deprecated })
}
res.writeHead(303, {
Location: '/node/' + id
})
res.end()
})

app.get('/add/node', appUtils.csrfProtection(), function (req, res) {
const context = {}
context.sessionuser = req.session.user
Expand Down
6 changes: 4 additions & 2 deletions tasks/generate_catalog.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ const viewster = require('../lib/view')
keywords: 1,
types: 1,
categories: 1,
downloads: 1
downloads: 1,
deprecated: 1
})
const modules = things.map(function (t) {
return {
Expand All @@ -25,7 +26,8 @@ const viewster = require('../lib/view')
keywords: t.keywords,
categories: t.categories,
url: 'https://flows.nodered.org/node/' + t._id,
downloads: t.downloads
downloads: t.downloads,
deprecated: t.deprecated || undefined
}
})

Expand Down
26 changes: 26 additions & 0 deletions template/node.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
}
</script>
{{/message}}
{{#deprecated}}
<div class="deprecated-notice">
<h1>This module has been deprecated.</h1>
{{ #deprecatedMessage }}<code>{{ deprecatedMessage }}</code>{{/deprecatedMessage}}
</div>
{{/deprecated}}
<h1 class="flow-title" style="margin-bottom: 10px;">{{ name }} <span class="flow-version">{{ versions.latest.version }}</span></h1>
<p class="flow-description">{{ description }}</p>
<p class="flowmeta flow-install">
Expand Down Expand Up @@ -77,6 +83,7 @@ <h4>Actions</h4>
{{#isAdmin}}
<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>
<div id="remove-node-error" class="dialog-warning" style="position:relative"></div>
<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>
{{/isAdmin}}
</div>
{{/sessionuser}}
Expand Down Expand Up @@ -155,6 +162,20 @@ <h4>Update node categories</h4>
</form>
</div>
</div>

<div class="dialog-shade dialog-fixed" id="edit-node-deprecation-shade">
<div class="dialog" id="edit-node-deprecation">
<form action="/node/{{_id}}/deprecate" method="POST">
<input name="_csrf" type="hidden" value="{{csrfToken}}">
<h4>Update deprecation details</h4>
<p><input id="node-deprecated-cb" type="checkbox" name="deprecated" {{#deprecated}}checked{{/deprecated}}><label for="node-deprecated-cb">Mark as deprecated</label></p>
<p><textarea name="message" id="message">{{ deprecatedMessage }}</textarea></p>
<div class="dialog-buttons">
<button type="button" onclick="return closeDialog();">Cancel</button> <button type="submit">Update</button>
</div>
</form>
</div>
</div>
{{/isAdmin}}


Expand All @@ -173,6 +194,11 @@ <h4>Update node categories</h4>
e.preventDefault();
$("#edit-node-category-shade").show();
});
$("#deprecated-button").click(function(e) {
$("body").css({height:"100%",overflow:"hidden"});
e.preventDefault();
$("#edit-node-deprecation-shade").show();
});
{{/isAdmin}}

var refreshSubmitted = false;
Expand Down