zentaopms/module/repo/js/monaco.js
2023-05-16 10:47:08 +08:00

144 lines
4.3 KiB
JavaScript

/**
* Create file tab.
*
* @param string filename
* @param string filepath
* @access public
* @return object
*/
function createTab(filename, filepath)
{
$('[data-path="' + decodeURIComponent(filepath) + '"]').closest('li').addClass('selected');
/* encode twice for resolving chinese character. */
var tabID = Base64.encode(Base64.encode(filepath).replaceAll('=', '-')).replaceAll('=', '-');
return {
id: tabID,
url: createLink('repo', 'ajaxGetEditorContent', urlParams.replace('%s', Base64.encode(encodeURIComponent(filepath)))),
type: 'iframe',
title: filename,
forbidClose: isonlybody
};
}
$(function()
{
$('.btn-left').click(function() {arrowTabs('fileTabs', 1);});
$('.btn-right').click(function() {arrowTabs('fileTabs', -2);});
$('#fileTabs').tabs({tabs: [createTab(file['basename'], entry)]});
if(isonlybody) $('#fileTabs .tab-nav-item .tab-nav-close').hide();
/**
* Set pane height.
*
* @access public
* @return void
*/
function setHeight()
{
var paneHeight = $(window).height() - 120;
if(isonlybody) paneHeight = 500;
$('#fileTabs .tab-pane').css('height', paneHeight + 'px')
$('#filesTree').css('height', paneHeight + 35)
}
setHeight();
$(window).resize(setHeight);
$(document).on('click', '.repoFileName', function()
{
var path = $(this).data('path');
var name = $(this).text();
var $tabs = $('#fileTabs').data('zui.tabs');
if(openedFiles.indexOf(path) == -1) openedFiles.push(path);
$tabs.open(createTab(name, path));
setHeight();
arrowTabs('fileTabs', -1);
});
/* Remove file path for opened files. */
$('#fileTabs').on('onClose', function(event, tab) {
/* encode twice for resolving chinese character. */
var filepath = decodeURIComponent(Base64.decode(Base64.decode(tab.id.replaceAll('-', '=')).replaceAll('-', '=')));
var index = openedFiles.indexOf(filepath);
if(index > -1)
{
openedFiles.splice(index, 1)
$('[data-path="' + filepath + '"]').closest('li').removeClass('selected');
}
if(index == openedFiles.length) arrowTabs('fileTabs', -2);
});
/* Append file path into the title. */
$('#fileTabs').on('onLoad', function(event, tab) {
var filepath = Base64.decode(tab.id.replaceAll('-', '='));
$('#tab-nav-item-' + tab.id).attr('title', decodeURIComponent(filepath));
});
if(['Git', 'Gitlab', 'Gogs', 'Gitea'].indexOf(repo.SCM) != -1)
{
var link = createLink('repo', 'ajaxGetBranchesAndTags', 'repoID=' + repoID + '&oldRevision=' + branchID);
$.get(link, function(data)
{
var result = $.parseJSON(data);
$('#branchList').empty();
$('#branchList').append(result.sourceHtml);
$('#branchList #branchesAndTags').tree({initialState: 'expand'});
});
}
else
{
$('#sourceSwapper').hide();
}
/**
* Refresh files tree.
*
* @param string branchOrTag
* @access public
* @return void
*/
function refreshFiles(branchOrTag)
{
var link = createLink('repo', 'ajaxGetFileTree', 'repoID=' + repoID + '&branch=' + Base64.encode(branchOrTag));
$.get(link, function(data)
{
$('#modules').remove();
$('#filesTree').append(data);
$('#modules').tree();
$('#filesTree').removeClass('loading');
});
}
$(document).on('click', '.branch-or-tag', function()
{
var branchOrTag = $(this).text();
if(branchOrTag != $.cookie('repoBranch'))
{
$('#filesTree').addClass('loading');
$.cookie('repoBranch', branchOrTag);
$('#fileTabs').data('zui.tabs').closeAll();
refreshFiles(branchOrTag);
$('.branch-or-tag').removeClass('selected');
$(this).addClass('selected');
$('.repo-select').attr('title', branchOrTag);
$('.repo-select .version-name').text(branchOrTag);
}
})
});
/**
* Load link object page.
*
* @param string $link
* @access public
* @return void
*/
function loadLinkPage(link)
{
$('#linkObject').attr('href', link);
$('#linkObject').click()
}