/* $Id: vcsrevisions.js 84885 2020-06-21 01:35:38Z vboxsync $ */ /** @file * Common JavaScript functions */ /* * Copyright (C) 2012-2020 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; * you can redistribute it and/or modify it under the terms of the GNU * General Public License (GPL) as published by the Free Software * Foundation, in version 2 as it comes in the "COPYING" file of the * VirtualBox OSE distribution. VirtualBox OSE is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. * * The contents of this file may alternatively be used under the terms * of the Common Development and Distribution License Version 1.0 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the * VirtualBox OSE 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. */ /** * @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(); }