ACP quick actions (#6374)
* ACP quick actions - Moved restart, build & restart, and logout into separate buttons - Moved buttons on mobile into the side menu - Added version and upgrade alert to header / mobile menu - Moved version checking to server-side with a cache for rate limiting - Changed "reload" translations to "rebuild and restart" * Change info alert to black-on-white to match focused search bar * Fix tests * Fallback for failed fetch of latest versionv1.18.x
parent
81e085bb9d
commit
eaae5b52cd
@ -0,0 +1,55 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var semver = require('semver');
|
||||||
|
var request = require('request');
|
||||||
|
|
||||||
|
var meta = require('../meta');
|
||||||
|
|
||||||
|
var versionCache = '';
|
||||||
|
var versionCacheLastModified = '';
|
||||||
|
|
||||||
|
var isPrerelease = /^v?\d+\.\d+\.\d+-.+$/;
|
||||||
|
|
||||||
|
function getLatestVersion(callback) {
|
||||||
|
var headers = {
|
||||||
|
Accept: 'application/vnd.github.v3+json',
|
||||||
|
'User-Agent': 'NodeBB Admin Control Panel/' + meta.config.title,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (versionCacheLastModified) {
|
||||||
|
headers['If-Modified-Since'] = versionCacheLastModified;
|
||||||
|
}
|
||||||
|
|
||||||
|
request('https://api.github.com/repos/NodeBB/NodeBB/tags', {
|
||||||
|
json: true,
|
||||||
|
headers: headers,
|
||||||
|
}, function (err, res, releases) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res.statusCode === 304) {
|
||||||
|
return callback(null, versionCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res.statusCode !== 200) {
|
||||||
|
return callback(Error(res.statusMessage));
|
||||||
|
}
|
||||||
|
|
||||||
|
releases = releases.filter(function (version) {
|
||||||
|
return !isPrerelease.test(version.name); // filter out automated prerelease versions
|
||||||
|
}).map(function (version) {
|
||||||
|
return version.name.replace(/^v/, '');
|
||||||
|
}).sort(function (a, b) {
|
||||||
|
return semver.lt(a, b) ? 1 : -1;
|
||||||
|
});
|
||||||
|
|
||||||
|
versionCache = releases[0];
|
||||||
|
versionCacheLastModified = res.headers['last-modified'];
|
||||||
|
|
||||||
|
callback(null, versionCache);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getLatestVersion = getLatestVersion;
|
||||||
|
exports.isPrerelease = isPrerelease;
|
@ -0,0 +1,10 @@
|
|||||||
|
<div class="alert <!-- IF upgradeAvailable -->alert-warning<!-- ELSE -->alert-info<!-- END --> well-sm">
|
||||||
|
<span>[[admin/menu:alerts.version, {version}]]</span>
|
||||||
|
<!-- IF upgradeAvailable -->
|
||||||
|
<span style="margin-left: 10px">
|
||||||
|
<a href="https://docs.nodebb.org/configuring/upgrade/" target="_blank">
|
||||||
|
<u>[[admin/menu:alerts.upgrade, {latestVersion}]]</u>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<!-- END -->
|
||||||
|
</div>
|
@ -0,0 +1,21 @@
|
|||||||
|
<li component="logout">
|
||||||
|
<a href="#" title="[[admin/menu:logout]]" data-placement="bottom" data-toggle="tooltip">
|
||||||
|
<i class="fa fw-fw fa-sign-out"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#" class="restart" data-toggle="tooltip" data-placement="bottom" title="[[admin/menu:restart-forum]]">
|
||||||
|
<i class="fa fa-fw fa-repeat"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#" class="reload" data-toggle="tooltip" data-placement="bottom" title="[[admin/menu:reload-forum]]">
|
||||||
|
<i class="fa fa-fw fa-refresh"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="{config.relative_path}/" data-toggle="tooltip" data-placement="bottom" title="[[admin/menu:view-forum]]">
|
||||||
|
<i class="fa fa-fw fa-home"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
Loading…
Reference in New Issue