/* $Id: vcsrevisions.js $ */ /** @file * Common JavaScript functions */ /* * Copyright (C) 2012-2023 Oracle and/or its affiliates. * * This file is part of VirtualBox base platform packages, as * available from https://www.virtualbox.org. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, in version 3 of the * License. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * The contents of this file may alternatively be used under the terms * of the Common Development and Distribution License Version 1.0 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included * in the VirtualBox distribution, in which case the provisions of the * CDDL are applicable instead of those of the GPL. * * You may elect to license modified versions of this file under the * terms and conditions of either the GPL or the CDDL or both. * * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0 */ /** * @internal. */ function vcsRevisionFormatDate(tsDate) { /*return tsDate.toLocaleDateString();*/ return tsDate.toISOString().split('T')[0]; } /** * @internal. */ function vcsRevisionFormatTime(tsDate) { return formatTimeHHMM(tsDate, true /*fNbsp*/); } /** * Called 'onclick' for the link/button used to show the detailed VCS * revisions. * @internal. */ function vcsRevisionShowDetails(oElmSource) { document.getElementById('vcsrevisions-detailed').style.display = 'block'; document.getElementById('vcsrevisions-brief').style.display = 'none'; oElmSource.style.display = 'none'; return false; } /** * Called when we've got the revision data. * @internal */ function vcsRevisionsRender(sTestMgr, oElmDst, sBugTracker, oRestReq, sUrl) { console.log('vcsRevisionsRender: status=' + oRestReq.status + ' readyState=' + oRestReq.readyState + ' url=' + sUrl); if (oRestReq.readyState != oRestReq.DONE) { oElmDst.innerHTML = '

' + oRestReq.readyState + '

'; return true; } /* * Check the result and translate it to a javascript object (oResp). */ var oResp = null; var sHtml; if (oRestReq.status != 200) { /** @todo figure why this doesn't work (sPath to something random). */ var sMsg = oRestReq.getResponseHeader('tm-error-message'); console.log('vcsRevisionsRender: status=' + oRestReq.status + ' readyState=' + oRestReq.readyState + ' url=' + sUrl + ' msg=' + sMsg); sHtml = '

error: status=' + oRestReq.status + 'readyState=' + oRestReq.readyState + ' url=' + sUrl; if (sMsg) sHtml += ' msg=' + sMsg; sHtml += '

'; } else { try { oResp = JSON.parse(oRestReq.responseText); } catch (oEx) { console.log('JSON.parse threw: ' + oEx.toString()); console.log(oRestReq.responseText); sHtml = '

error: JSON.parse threw: ' + oEx.toString() + '

'; } } /* * Do the rendering. */ if (oResp) { if (oResp.cCommits == 0) { sHtml = '

None.

'; } else { var aoCommits = oResp.aoCommits; var cCommits = oResp.aoCommits.length; var i; sHtml = ''; /*sHtml = 'Show full VCS details...\n';*/ /*sHtml = '\n';*/ /* Brief view (the default): */ sHtml += '

'; for (i = 0; i < cCommits; i++) { var oCommit = aoCommits[i]; var sUrl = oResp.sTracChangesetUrlFmt.replace('%(sRepository)s', oCommit.sRepository).replace('%(iRevision)s', oCommit.iRevision.toString()); var sTitle = oCommit.sAuthor + ': ' + oCommit.sMessage; sHtml += ' r' + oCommit.iRevision + ' \n'; } sHtml += '

'; sHtml += 'Show full VCS details...\n'; /* Details view: */ sHtml += '\n'; } } oElmDst.innerHTML = sHtml; } /** Called by the xtracker bugdetails page. */ function VcsRevisionsLoad(sTestMgr, oElmDst, sBugTracker, lBugNo) { oElmDst.innerHTML = '

Loading VCS revisions...

'; var sUrl = sTestMgr + 'rest.py?sPath=vcs/bugreferences/' + sBugTracker + '/' + lBugNo; var oRestReq = new XMLHttpRequest(); oRestReq.onreadystatechange = function() { vcsRevisionsRender(sTestMgr, oElmDst, sBugTracker, this, sUrl); } oRestReq.open('GET', sUrl); oRestReq.withCredentials = true; /*oRestReq.setRequestHeader('Content-type', 'application/json'); - Causes CORS trouble. */ oRestReq.send(); }