Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/modules/git-info.js')
-rw-r--r--js/src/modules/git-info.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/js/src/modules/git-info.js b/js/src/modules/git-info.js
new file mode 100644
index 0000000000..792053a5e9
--- /dev/null
+++ b/js/src/modules/git-info.js
@@ -0,0 +1,146 @@
+import $ from 'jquery';
+
+const GitInfo = {
+ /**
+ * Version string to integer conversion.
+ * @param {string} str
+ * @return {number | false}
+ */
+ parseVersionString: 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].startsWith('rc')) {
+ add = - 20 - parseInt(state[1].substring(2), 10);
+ } else if (state[1].startsWith('beta')) {
+ add = - 40 - parseInt(state[1].substring(4), 10);
+ } else if (state[1].startsWith('alpha')) {
+ add = - 60 - parseInt(state[1].substring(5), 10);
+ } else if (state[1].startsWith('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: 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(window.Messages.strLatestAvailable + ' ');
+ versionInformationMessage.appendChild(prefixMessage);
+ versionInformationMessage.appendChild(versionInformationMessageLink);
+ if (latest > current) {
+ const message = Functions.sprintf(
+ window.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(' (' + window.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: () => {
+ $('#is_git_revision').remove();
+ $('#li_pma_version_git').remove();
+ $.get(
+ 'index.php?route=/git-revision',
+ {
+ 'server': window.CommonParams.get('server'),
+ 'ajax_request': true,
+ 'no_debug': true
+ },
+ data => {
+ if (typeof data !== 'undefined' && data.success === true) {
+ $(data.message).insertAfter('#li_pma_version');
+ }
+ }
+ );
+ },
+
+ /**
+ * Load version information asynchronously.
+ */
+ loadVersion: () => {
+ if ($('li.jsversioncheck').length === 0) {
+ return;
+ }
+
+ $.ajax({
+ dataType: 'json',
+ url: 'index.php?route=/version-check',
+ method: 'POST',
+ data: {
+ 'server': window.CommonParams.get('server')
+ },
+ success: GitInfo.currentVersion
+ });
+ }
+};
+
+export function showGitVersion () {
+ GitInfo.loadVersion();
+ if ($('#is_git_revision').length === 0) {
+ return;
+ }
+
+ setTimeout(GitInfo.displayGitRevision, 10);
+}