var blames = null; var codeHeight = 0; window.onMouseDown = function(obj) { if(!obj.target.position) return; showBlameAndRelation(obj.target.position.lineNumber); } window.getRevision = function(blames, line) { let blame = blames[line]; if(!blame) return false; let p_line = parseInt(line); while(!blame.revision) { p_line--; blame = blames[p_line]; } return blame; } /** * 显示关联信息弹窗。 * Show blame info and relations. * * @param int line * @access public * @return void */ function showBlameAndRelation(line) { if(!blames) return; if(pageType == 'diff') line = diffContent.line.new[line -1]; const blame = window.getRevision(blames, line); if(!blame) return; if($('#log').data('line') == line) return; var time = blame.time != 'unknown' ? blame.time : ''; var user = blame.committer != 'unknown' ? blame.committer : ''; var version = blame.revision.toString().substring(0, 10); var content = blameTmpl.replace('%line', line).replace('%time', time).replace('%name', user).replace('%version', version).replace('%comment', blame.message); $('.history').html(content); $('#log').data('line', line); $('#log').css('display', 'flex'); getRelation(blame.revision); } /** * 获取关联信息。 * Get relation by commit. * * @param string $commit * @access public * @return void */ window.getRelation = function(commit) { $('.table-empty-tip').show(); $('#codeContainer').css('height', codeHeight / 5 * 3); var relatedHeight = codeHeight / 5 * 2 - $('#log').height() - 10; $('#related').css('height', relatedHeight); setTimeout(() => { var tabsHeight = $('#relationTabs .nav-tabs').height(); if(!tabsHeight) tabsHeight = 32; $('#relationTabs .tab-content').css('height', relatedHeight - tabsHeight - 8); }, 500); $('#relationTabs ul li').remove(); $('#relationTabs .tab-content .tab-pane').remove(); $.post($.createLink('repo', 'ajaxGetCommitRelation', 'repoID=' + repoID + '&commit=' + commit), function(data) { var titleList = JSON.parse(data).titleList; $.each(titleList, function(i, titleObj) { openTab(titleObj); }); if(titleList.length > 0) { $('.table-empty-tip').hide(); $('#related button').show(); $('#relationTabs ul li a').first().trigger('click'); } else { if(!canLinkStory && !canLinkBug && !canLinkTask) $('#related button').hide(); } arrowTabs('relationTabs', 1); }); globalCommit = commit; var linkStory = $.createLink('repo', 'linkStory', 'repoID=' + repoID + '&commit=' + commit, '', true); var linkBug = $.createLink('repo', 'linkBug', 'repoID=' + repoID + '&commit=' + commit, '', true); var linkTask = $.createLink('repo', 'linkTask', 'repoID=' + repoID + '&commit=' + commit, '', true); $('#linkStory').data('link', linkStory); $('#linkBug').data('link', linkBug); $('#linkTask').data('link', linkTask); $('#related').show(); } /** * 打开关联信息tab。 * Open tab. * * @param object $titleObj * @access public * @return void */ function openTab(titleObj) { var tabTemplate = ``; var eleId = titleObj.type + '-' + titleObj.id; var prefixIcon = titleObj.type == 'story' ? 'lightbulb' : (titleObj.type == 'task' ? 'check-sign' : 'bug'); var unlinkHref = canUnlinkObject ? $.createLink('repo', 'unlink', 'repoID=' + repoID + '&commit=' + globalCommit + '&objectID=' + titleObj.type + '&objectType=' + titleObj.id) : ''; var tabHtml = tabTemplate.replace('{title}', titleObj.title) .replace('{unlinkHref}', unlinkHref) .replace('{unlinkTitle}', unlinkTitle) .replace('{href}', '#related-' + eleId) .replace('{prefixIcon}', prefixIcon); $('#relationTabs > .tabs-header > ul').append(tabHtml); var height = getRelationTabHeight(); $('#relationTabs .tab-content').append("") } /** * 获取关联信息弹窗高度。 * Get relation tab height. * * @param object $titleObj * @access public * @return void */ function getRelationTabHeight() { var relatedHeight = $('#related').height(); relatedHeight = parseInt(relatedHeight) ? parseInt(relatedHeight) : 0; return relatedHeight - 52; } /** * 修改比对差异方式。 * Update diff editor inline style. * * @param bool display * @access public * @return void */ window.updateEditorInline = function(display) { modifiedEditor.updateOptions({renderSideBySide: display}); } /** * 获取提交信息。 * Show commit info. * * @access public * @return void */ function showCommitInfo() { var link = $.createLink('repo', 'ajaxGetCommitInfo'); var data = { repoID : repoID, entry : encodePath, revision : revision, sourceRevision: sourceRevision, line : 0, returnType : 'json' }; $.post(link, data, function(res) { res = JSON.parse(res); blames = res.blames; }) } /** * 初始化页面。 * Init page. * * @access public * @return void */ /* 初始化数据 */ function initPage() { codeHeight = $.cookie.get('codeContainerHeight'); $('#codeContainer').css('height', $.cookie.get('codeContainerHeight')); $('.btn-left').on('click', function() {arrowTabs('relationTabs', 1);}); $('.btn-right').on('click', function() {arrowTabs('relationTabs', -2);}); $('#linkStory, #linkBug, #linkTask').on('click', function() { var link = $(this).data('link'); parent.loadLinkPage(link); }); $('#relationTabs').off('click', '.unlinks').on('click', '.unlinks', function() { var link = $(this).data('link'); $.post(link, function(data) { data = JSON.parse(data); if(data.result) { getRelation(data.revision); } else { alert(data.message); } }) }) $('#relationTabs').on('onOpen', function(event, tab) { $('#tab-nav-item-' + tab.id).attr('title', tab.title); var relatedHeight = codeHeight / 5 * 2 - $('#log').height() - 45; $('#relationTabs iframe').css('height', relatedHeight); }); /* Get file commits. */ showCommitInfo(); } $(function() { setTimeout(() => { initPage(); }, 200); }); window.downloadCode = function() { var url = $(this).data('link'); window.open(url, '_self'); }