You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
5.2 KiB
148 lines
5.2 KiB
2 years ago
|
const GitInfo = {
|
||
|
/**
|
||
|
* Version string to integer conversion.
|
||
|
* @param {string} str
|
||
|
* @return {number | false}
|
||
|
*/
|
||
|
parseVersionString: function (str) {
|
||
|
if (typeof str !== 'string') {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
let add = 0; // Parse possible alpha/beta/rc/
|
||
|
|
||
|
const state = str.split('-');
|
||
|
|
||
|
if (state.length >= 2) {
|
||
|
if (state[1].substr(0, 2) === 'rc') {
|
||
|
add = -20 - parseInt(state[1].substr(2), 10);
|
||
|
} else if (state[1].substr(0, 4) === 'beta') {
|
||
|
add = -40 - parseInt(state[1].substr(4), 10);
|
||
|
} else if (state[1].substr(0, 5) === 'alpha') {
|
||
|
add = -60 - parseInt(state[1].substr(5), 10);
|
||
|
} else if (state[1].substr(0, 3) === 'dev') {
|
||
|
/* We don't handle dev, it's git snapshot */
|
||
|
add = 0;
|
||
|
}
|
||
|
} // Parse version
|
||
|
|
||
|
|
||
|
const x = str.split('.'); // Use 0 for non existing parts
|
||
|
|
||
|
const maj = parseInt(x[0], 10) || 0;
|
||
|
const min = parseInt(x[1], 10) || 0;
|
||
|
const pat = parseInt(x[2], 10) || 0;
|
||
|
const hotfix = parseInt(x[3], 10) || 0;
|
||
|
return maj * 100000000 + min * 1000000 + pat * 10000 + hotfix * 100 + add;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Indicates current available version on main page.
|
||
|
* @param {object} data
|
||
|
*/
|
||
|
currentVersion: function (data) {
|
||
|
if (data && data.version && data.date) {
|
||
|
const current = GitInfo.parseVersionString($('span.version').text());
|
||
|
const latest = GitInfo.parseVersionString(data.version);
|
||
|
const url = './url.php?url=https://www.phpmyadmin.net/files/' + Functions.escapeHtml(encodeURIComponent(data.version)) + '/';
|
||
|
let versionInformationMessage = document.createElement('span');
|
||
|
versionInformationMessage.className = 'latest';
|
||
|
const versionInformationMessageLink = document.createElement('a');
|
||
|
versionInformationMessageLink.href = url;
|
||
|
versionInformationMessageLink.className = 'disableAjax';
|
||
|
versionInformationMessageLink.target = '_blank';
|
||
|
versionInformationMessageLink.rel = 'noopener noreferrer';
|
||
|
const versionInformationMessageLinkText = document.createTextNode(data.version);
|
||
|
versionInformationMessageLink.appendChild(versionInformationMessageLinkText);
|
||
|
const prefixMessage = document.createTextNode(Messages.strLatestAvailable + ' ');
|
||
|
versionInformationMessage.appendChild(prefixMessage);
|
||
|
versionInformationMessage.appendChild(versionInformationMessageLink);
|
||
|
|
||
|
if (latest > current) {
|
||
|
const message = Functions.sprintf(Messages.strNewerVersion, Functions.escapeHtml(data.version), Functions.escapeHtml(data.date));
|
||
|
let htmlClass = 'alert alert-primary';
|
||
|
|
||
|
if (Math.floor(latest / 10000) === Math.floor(current / 10000)) {
|
||
|
/* Security update */
|
||
|
htmlClass = 'alert alert-danger';
|
||
|
}
|
||
|
|
||
|
$('#newer_version_notice').remove();
|
||
|
const mainContainerDiv = document.createElement('div');
|
||
|
mainContainerDiv.id = 'newer_version_notice';
|
||
|
mainContainerDiv.className = htmlClass;
|
||
|
const mainContainerDivLink = document.createElement('a');
|
||
|
mainContainerDivLink.href = url;
|
||
|
mainContainerDivLink.className = 'disableAjax';
|
||
|
mainContainerDivLink.target = '_blank';
|
||
|
mainContainerDivLink.rel = 'noopener noreferrer';
|
||
|
const mainContainerDivLinkText = document.createTextNode(message);
|
||
|
mainContainerDivLink.appendChild(mainContainerDivLinkText);
|
||
|
mainContainerDiv.appendChild(mainContainerDivLink);
|
||
|
$('#maincontainer').append($(mainContainerDiv));
|
||
|
}
|
||
|
|
||
|
if (latest === current) {
|
||
|
versionInformationMessage = document.createTextNode(' (' + Messages.strUpToDate + ')');
|
||
|
}
|
||
|
/* Remove extra whitespace */
|
||
|
|
||
|
|
||
|
const versionInfo = $('#li_pma_version').contents().get(2);
|
||
|
|
||
|
if (typeof versionInfo !== 'undefined') {
|
||
|
versionInfo.textContent = versionInfo.textContent.trim();
|
||
|
}
|
||
|
|
||
|
const $liPmaVersion = $('#li_pma_version');
|
||
|
$liPmaVersion.find('span.latest').remove();
|
||
|
$liPmaVersion.append($(versionInformationMessage));
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Loads Git revision data from ajax for index.php
|
||
|
*/
|
||
|
displayGitRevision: function () {
|
||
|
$('#is_git_revision').remove();
|
||
|
$('#li_pma_version_git').remove();
|
||
|
$.get('index.php?route=/git-revision', {
|
||
|
'server': CommonParams.get('server'),
|
||
|
'ajax_request': true,
|
||
|
'no_debug': true
|
||
|
}, function (data) {
|
||
|
if (typeof data !== 'undefined' && data.success === true) {
|
||
|
$(data.message).insertAfter('#li_pma_version');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
AJAX.registerTeardown('home.js', function () {
|
||
|
$('#themesModal').off('show.bs.modal');
|
||
|
});
|
||
|
AJAX.registerOnload('home.js', function () {
|
||
|
$('#themesModal').on('show.bs.modal', function () {
|
||
|
$.get('index.php?route=/themes', function (data) {
|
||
|
$('#themesModal .modal-body').html(data.themes);
|
||
|
});
|
||
|
});
|
||
|
/**
|
||
|
* Load version information asynchronously.
|
||
|
*/
|
||
|
|
||
|
if ($('li.jsversioncheck').length > 0) {
|
||
|
$.ajax({
|
||
|
dataType: 'json',
|
||
|
url: 'index.php?route=/version-check',
|
||
|
method: 'POST',
|
||
|
data: {
|
||
|
'server': CommonParams.get('server')
|
||
|
},
|
||
|
success: GitInfo.currentVersion
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if ($('#is_git_revision').length > 0) {
|
||
|
setTimeout(GitInfo.displayGitRevision, 10);
|
||
|
}
|
||
|
});
|