Allow committer details to be set per-user

This commit is contained in:
Nick O'Leary
2017-12-04 11:42:44 +00:00
parent 14c48253f6
commit 94eeaeb8d3
16 changed files with 639 additions and 366 deletions

View File

@@ -68,7 +68,7 @@
console.log(msg);
var project = RED.projects.getActiveProject();
var message = {
"change-branch":"Change to local branch '"+project.branches.local+"'",
"change-branch":"Change to local branch '"+project.git.branches.local+"'",
"abort-merge":"Git merge aborted",
"loaded":"Project '"+msg.project+"' loaded",
"updated":"Project '"+msg.project+"' updated",

View File

@@ -75,7 +75,7 @@
addLabel = 'add';
}
}
$('<a href="#" class="editor-button editor-button-small" style="margin-top: 4px;"><i class="fa fa-plus"></i> '+addLabel+'</a>')
$('<a href="#" class="editor-button editor-button-small red-ui-editableList-addButton" style="margin-top: 4px;"><i class="fa fa-plus"></i> '+addLabel+'</a>')
.appendTo(this.topContainer)
.click(function(evt) {
evt.preventDefault();

View File

@@ -60,6 +60,7 @@ RED.projects.settings = (function() {
},
open: function(tray) {
var project = RED.projects.getActiveProject();
var trayBody = tray.find('.editor-tray-body');
var settingsContent = $('<div></div>').appendTo(trayBody);
var tabContainer = $('<div></div>',{id:"user-settings-tabs-container"}).appendTo(settingsContent);
@@ -148,7 +149,12 @@ RED.projects.settings = (function() {
}
function updateProjectDescription(activeProject, container) {
container.empty();
var desc = marked(activeProject.description||"");
var desc;
if (activeProject.description) {
desc = marked(activeProject.description);
} else {
desc = '<span class="node-info-none">'+'No description available'+'</span>';
}
var description = addTargetToExternalLinks($('<span class="bidiAware" dir=\"'+RED.text.bidi.resolveBaseTextDir(desc)+'">'+desc+'</span>')).appendTo(container);
description.find(".bidiAware").contents().filter(function() { return this.nodeType === 3 && this.textContent.trim() !== "" }).wrap( "<span></span>" );
}
@@ -280,7 +286,7 @@ RED.projects.settings = (function() {
}
}
if (unknownCount > 0) {
depsList.editableList('addItem',{index:1, label:"Unknown Dependencies"}); // TODO: nls
depsList.editableList('addItem',{index:1, label:"Unlisted dependencies"}); // TODO: nls
}
if (unusedCount > 0) {
depsList.editableList('addItem',{index:3, label:"Unused dependencies"}); // TODO: nls
@@ -418,15 +424,18 @@ RED.projects.settings = (function() {
}
function showProjectFileListing(row,activeProject,current,done) {
function showProjectFileListing(row,activeProject,current,filter,done) {
var dialog;
var dialogBody;
var filesList;
var selected;
var container = $('<div class="project-file-listing-container"></div>',{style:"position: relative; min-height: 175px; height: 175px;"}).hide().appendTo(row);
var spinner = utils.addSpinnerOverlay(container);
$.getJSON("/projects/"+activeProject.name+"/files",function(result) {
$.getJSON("projects/"+activeProject.name+"/files",function(result) {
var fileNames = Object.keys(result);
fileNames = fileNames.filter(function(fn) {
return !result[fn].status || !/D/.test(result[fn].status);
})
var files = {};
fileNames.sort();
fileNames.forEach(function(file) {
@@ -459,13 +468,13 @@ RED.projects.settings = (function() {
return result;
}
var files = sortFiles("",files,"");
createFileSubList(container,files.children,current,done,"height: 175px");
createFileSubList(container,files.children,current,filter,done,"height: 175px");
spinner.remove();
});
return container;
}
function createFileSubList(container, files, current, onselect, style) {
function createFileSubList(container, files, current, filter, onselect, style) {
style = style || "";
var list = $('<ol>',{class:"projects-dialog-file-list", style:style}).appendTo(container).editableList({
addButton: false,
@@ -481,7 +490,7 @@ RED.projects.settings = (function() {
} else {
children.hide();
}
createFileSubList(children,entry.children,current,onselect);
createFileSubList(children,entry.children,current,filter,onselect);
header.addClass("selectable");
header.click(function(e) {
if ($(this).hasClass("expanded")) {
@@ -507,19 +516,23 @@ RED.projects.settings = (function() {
header.addClass("projects-dialog-file-list-entry-file-type-git");
}
$('<span class="projects-dialog-file-list-entry-file"> <i class="fa '+fileIcon+'"></i></span>').appendTo(header);
header.addClass("selectable");
if (entry.path === current) {
header.addClass("selected");
if (filter.test(entry.name)) {
header.addClass("selectable");
if (entry.path === current) {
header.addClass("selected");
}
header.click(function(e) {
$(".projects-dialog-file-list-entry.selected").removeClass("selected");
$(this).addClass("selected");
onselect(entry.path);
})
header.dblclick(function(e) {
e.preventDefault();
onselect(entry.path,true);
})
} else {
header.addClass("unselectable");
}
header.click(function(e) {
$(".projects-dialog-file-list-entry.selected").removeClass("selected");
$(this).addClass("selected");
onselect(entry.path);
})
header.dblclick(function(e) {
e.preventDefault();
onselect(entry.path,true);
})
}
$('<span class="projects-dialog-file-list-entry-name" style=""></span>').text(entry.name).appendTo(header);
}
@@ -657,7 +670,7 @@ RED.projects.settings = (function() {
} else {
$(this).addClass('selected');
flowFileLabel.css('color','inherit');
var fileList = showProjectFileListing(flowFileLabel,activeProject,flowFileInput.val(),function(result,isDblClick) {
var fileList = showProjectFileListing(flowFileLabel,activeProject,flowFileInput.val(), /.*\.json$/,function(result,isDblClick) {
if (result) {
flowFileInput.val(result);
}
@@ -887,7 +900,6 @@ RED.projects.settings = (function() {
},
200: function(data) {
activeProject = data;
console.log("updating form");
updateForm();
done();
},
@@ -935,191 +947,218 @@ RED.projects.settings = (function() {
updateForm();
}
function createLocalRepositorySection(activeProject,pane) {
var title = $('<h3></h3>').text("Local Repository").appendTo(pane);
var repoContainer = $('<div class="user-settings-section"></div>').appendTo(pane);
var editRepoButton = $('<button class="editor-button editor-button-small" style="float: right;">edit</button>')
.appendTo(title)
.click(function(evt) {
editRepoButton.hide();
localRepoSearch.show();
formButtons.show();
});
var row = $('<div class="user-settings-row"></div>').appendTo(repoContainer);
$('<label for=""></label>').text('Branch').appendTo(row);
var localRepoLabel = $('<div class="uneditable-input" style="padding:0">').appendTo(row);
var hideLocalRepoBranchList = function() {
localRepoSearch.removeClass('selected');
localRepoLabel.css('height','');
localRepoBranchListRow.slideUp(100);
}
var localRepoText = $('<span style="display:inline-block; padding: 6px">').text(activeProject.branches.local).appendTo(localRepoLabel);
var localRepoSearch = $('<button class="editor-button" style="border-top-right-radius: 4px; border-bottom-right-radius: 4px; width: 36px; height: 34px; position: absolute; top: -1px; right: -1px;"><i class="fa fa-code-fork"></i></button>')
.hide()
.appendTo(localRepoLabel)
.click(function(e) {
e.preventDefault();
if ($(this).hasClass('selected')) {
hideLocalRepoBranchList();
} else {
$(this).addClass('selected');
localRepoLabel.css('height','auto');
localRepoBranchListRow.slideDown(100);
localRepoBranchList.refresh("/projects/"+activeProject.name+"/branches");
localRepoBranchList.focus();
}
});
var localRepoBranchListRow = $('<div>').hide().appendTo(localRepoLabel);
var localRepoBranchList = utils.createBranchList({
current: function() {
return activeProject.branches.local
},
placeholder: "Find or create a branch",
container: localRepoBranchListRow,
onselect: function(body) {
localRepoText.text(body.name);
hideLocalRepoBranchList();
}
})
var hideEditForm = function() {
editRepoButton.show();
localRepoSearch.hide();
formButtons.hide();
localRepoBranchListRow.slideUp(100);
localRepoSearch.removeClass('selected');
}
var formButtons = $('<span class="button-group" style="position: relative; float: right; margin-right:0;"></span>').hide().appendTo(repoContainer);
$('<button class="editor-button">Cancel</button>')
.appendTo(formButtons)
.click(function(evt) {
evt.preventDefault();
hideEditForm();
});
var saveButton = $('<button class="editor-button">Save</button>')
.appendTo(formButtons)
.click(function(evt) {
evt.preventDefault();
hideEditForm();
});
var updateForm = function() {
// if (activeProject.settings.credentialSecretInvalid) {
// credentialStateLabel.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-warning");
// credentialStateLabel.find(".user-settings-credentials-state").text("Invalid encryption key");
// } else if (activeProject.settings.credentialsEncrypted) {
// credentialStateLabel.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-lock");
// credentialStateLabel.find(".user-settings-credentials-state").text("Encryption enabled");
// } else {
// credentialStateLabel.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-unlock");
// credentialStateLabel.find(".user-settings-credentials-state").text("Encryption disabled");
// }
// credentialSecretResetButton.toggleClass('disabled',!activeProject.settings.credentialsEncrypted);
// credentialSecretResetButton.prop('disabled',!activeProject.settings.credentialsEncrypted);
}
}
function createRemoteRepositorySection(activeProject,pane) {
var title = $('<h3></h3>').text("Git Remotes").appendTo(pane);
var repoContainer = $('<div class="user-settings-section"></div>').appendTo(pane);
var title = $('<h3></h3>').text("Version Control").appendTo(pane);
var editRepoButton = $('<button class="editor-button editor-button-small" style="float: right;">edit</button>')
.appendTo(title)
.click(function(evt) {
editRepoButton.hide();
formButtons.show();
$('.projects-dialog-remote-list-entry-delete').show();
remoteListAddButton.show();
gitUsernameLabel.hide();
gitUsernameInput.show();
gitEmailLabel.hide();
gitEmailInput.show();
});
var repoContainer = $('<div class="user-settings-section"></div>').appendTo(pane);
var subtitle = $('<h4></h4>').text("Committer Details").appendTo(repoContainer);
$('<div style="display: inline-block; margin-left: 20px;"><small style="color:#aaa;"></small></div>').appendTo(subtitle).find('small').text("Leave blank to use system default");
var row = $('<div class="user-settings-row"></div>').appendTo(repoContainer);
$('<label for=""></label>').text('Username').appendTo(row);
var gitUsernameLabel = $('<div class="uneditable-input">').appendTo(row);
var gitUsernameInput = $('<input type="text">').hide().appendTo(row);
row = $('<div class="user-settings-row"></div>').appendTo(repoContainer);
$('<label for=""></label>').text('Email').appendTo(row);
var gitEmailLabel = $('<div class="uneditable-input">').appendTo(row);
var gitEmailInput = $('<input type="text">').hide().appendTo(row);
if (activeProject.git.user) {
gitUsernameLabel.text(activeProject.git.user.name);
gitUsernameInput.val(activeProject.git.user.name);
gitEmailLabel.text(activeProject.git.user.email);
gitEmailInput.val(activeProject.git.user.email);
}
var remotesList = $("<ol>",{style:"height: 320px"}).appendTo(row);
var grTitle = $('<h4></h4>').text("Git remotes").appendTo(repoContainer);
row = $('<div class="user-settings-row projects-dialog-remote-list"></div>').appendTo(repoContainer);
var remotesList = $('<ol>').appendTo(row);
remotesList.editableList({
addButton: "remote",
addButton: 'add remote repository',
height: 'auto',
addItem: function(outer,index,entry) {
var row = $('<div class="user-settings-row"></div>').appendTo(outer);
$('<label for=""></label>').text('Name').appendTo(row);
$('<div class="uneditable-input">').text(entry.name).appendTo(row);
row = $('<div class="user-settings-row"></div>').appendTo(outer);
$('<label for=""></label>').text('Fetch URL').appendTo(row);
$('<div class="uneditable-input">').text(entry.urls.fetch).appendTo(row);
row = $('<div class="user-settings-row"></div>').appendTo(outer);
$('<label for=""></label>').text('Push URL').appendTo(row);
$('<div class="uneditable-input">').text(entry.urls.push).appendTo(row);
var header = $('<div class="projects-dialog-remote-list-entry-header"></div>').appendTo(outer);
entry.header = $('<span>').text(entry.name||"Add new remote").appendTo(header);
var body = $('<div>').appendTo(outer);
entry.body = body;
if (entry.name) {
entry.removeButton = $('<button class="editor-button editor-button-small projects-dialog-remote-list-entry-delete">remove</button>')
.hide()
.appendTo(header)
.click(function(e) {
entry.removed = true;
body.fadeOut(100);
entry.header.css("text-decoration","line-through")
entry.header.css("font-style","italic")
$(this).hide();
});
if (entry.urls.fetch === entry.urls.push) {
row = $('<div class="user-settings-row"></div>').appendTo(body);
$('<label for=""></label>').text('URL').appendTo(row);
$('<div class="uneditable-input">').text(entry.urls.fetch).appendTo(row);
} else {
row = $('<div class="user-settings-row"></div>').appendTo(body);
$('<label for=""></label>').text('Fetch URL').appendTo(row);
$('<div class="uneditable-input">').text(entry.urls.fetch).appendTo(row);
row = $('<div class="user-settings-row"></div>').appendTo(body);
$('<label for=""></label>').text('Push URL').appendTo(row);
$('<div class="uneditable-input">').text(entry.urls.push).appendTo(row);
}
} else {
row = $('<div class="user-settings-row"></div>').appendTo(body);
$('<label for=""></label>').text('Remote name').appendTo(row);
entry.nameInput = $('<input type="text">').appendTo(row);
row = $('<div class="user-settings-row"></div>').appendTo(body);
var fetchLabel = $('<label for=""></label>').text('URL').appendTo(row);
entry.urlInput = $('<input type="text">').appendTo(row);
}
}
});
if (activeProject.hasOwnProperty('remotes')) {
for (var name in activeProject.remotes) {
if (activeProject.remotes.hasOwnProperty(name)) {
remotesList.editableList('addItem',{name:name,urls:activeProject.remotes[name]});
}
}
}
// row = $('<div class="user-settings-row"></div>').appendTo(repoContainer);
// if (activeProject.hasOwnProperty('remotes')) {
// $('<label for=""></label>').text('URL').appendTo(row);
// for (var name in activeProject.remotes) {
// if (activeProject.remotes.hasOwnProperty(name)) {
// var repos = activeProject.remotes[name];
// if (repos.fetch === repos.push) {
// $('<div class="uneditable-input">').text(repos.fetch).appendTo(row);
// $('<div class="projects-edit-form-sublabel"><small></small></div>').appendTo(row).find('small').text(name+" fetch/push");
// } else {
// $('<div class="uneditable-input">').text(repos.fetch).appendTo(row);
// $('<div class="projects-edit-form-sublabel"><small></small></div>').appendTo(row).find('small').text(name+" fetch");
// $('<label for=""></label>').appendTo(row);
// $('<div class="uneditable-input">').text(repos.push).appendTo(row);
// $('<div class="projects-edit-form-sublabel"><small></small></div>').appendTo(row).find('small').text(name+" push");
// // $('<span>').text(repos.fetch+" (fetch)").appendTo(repoRow);
// // $('<span>').text(repos.push+" (push)").appendTo(repoRow);
// }
// }
// }
// if (activeProject.branches.hasOwnProperty('remote')) {
// row = $('<div class="user-settings-row"></div>').appendTo(repoContainer);
// $('<label for="" style="text-align: right;box-sizing: border-box; padding-right: 25px;">Branch</label>').appendTo(row);
// $('<div class="uneditable-input">').text(activeProject.branches.remote).appendTo(row);
//
// row = $('<div class="user-settings-row"></div>').appendTo(repoContainer);
// $('<label for="" style="text-align: right;box-sizing: border-box; padding-right: 25px;">Username</label>').appendTo(row);
// $('<div class="uneditable-input">').appendTo(row);
//
// row = $('<div class="user-settings-row"></div>').appendTo(repoContainer);
// $('<label for="" style="text-align: right;box-sizing: border-box; padding-right: 25px;">Password</label>').appendTo(row);
// $('<div class="uneditable-input">').html("&bull; &bull; &bull; &bull; &bull; &bull; &bull; &bull;").appendTo(row);
// }
// } else {
//
//
// }
var remoteListAddButton = row.find(".red-ui-editableList-addButton").hide();
var hideEditForm = function() {
editRepoButton.show();
formButtons.hide();
$('.projects-dialog-remote-list-entry-delete').hide();
remoteListAddButton.hide();
gitUsernameLabel.show();
gitUsernameInput.hide();
gitEmailLabel.show();
gitEmailInput.hide();
}
var formButtons = $('<span class="button-group" style="position: relative; float: right; margin-right:0;"></span>').hide().appendTo(repoContainer);
var formButtons = $('<span class="button-group" style="position: relative; float: right; margin-right:0;"></span>')
.hide().appendTo(repoContainer);
$('<button class="editor-button">Cancel</button>')
.appendTo(formButtons)
.click(function(evt) {
evt.preventDefault();
var items = remotesList.editableList('items');
items.each(function() {
var data = $(this).data('data');
if (!data.name) {
remotesList.editableList('removeItem',data);
} else if (data.removed) {
delete data.removed;
data.body.show();
data.header.css("text-decoration","");
data.header.css("font-style","");
}
})
hideEditForm();
});
var saveButton = $('<button class="editor-button">Save</button>')
.appendTo(formButtons)
.click(function(evt) {
evt.preventDefault();
hideEditForm();
var spinner = utils.addSpinnerOverlay(repoContainer);
var body = {
user: {
name: gitUsernameInput.val(),
email: gitEmailInput.val()
},
remotes: {}
}
var items = remotesList.editableList('items');
items.each(function() {
var data = $(this).data('data');
if (!data.name) {
body.remotes[data.nameInput.val()] = {
url: data.urlInput.val()
};
remotesList.editableList('removeItem',data);
} else if (data.removed) {
body.remotes[data.name] = {
removed: true
};
delete data.removed;
data.body.show();
data.header.css("text-decoration","");
data.header.css("font-style","");
}
})
var done = function(err) {
spinner.remove();
if (err) {
console.log(err);
return;
}
hideEditForm();
}
var payload = { git: body };
// console.log(JSON.stringify(payload,null,4));
RED.deploy.setDeployInflight(true);
utils.sendRequest({
url: "projects/"+activeProject.name,
type: "PUT",
responses: {
0: function(error) {
done(error);
},
200: function(data) {
activeProject.git.remotes = data.git.remotes;
activeProject.git.user = data.git.user;
if (activeProject.git.user) {
gitUsernameLabel.text(activeProject.git.user.name);
gitUsernameInput.val(activeProject.git.user.name);
gitEmailLabel.text(activeProject.git.user.email);
gitEmailInput.val(activeProject.git.user.email);
}
updateForm();
done();
},
400: {
'unexpected_error': function(error) {
console.log(error);
done(error);
}
},
}
},payload);
});
var updateForm = function() { }
var updateForm = function() {
remotesList.editableList('empty');
if (activeProject.git.hasOwnProperty('remotes')) {
for (var name in activeProject.git.remotes) {
if (activeProject.git.remotes.hasOwnProperty(name)) {
remotesList.editableList('addItem',{name:name,urls:activeProject.git.remotes[name]});
}
}
}
}
updateForm();
}

View File

@@ -397,12 +397,14 @@ RED.projects = (function() {
projectData.copy = copyProject.name;
} else if (projectType === 'clone') {
// projectData.credentialSecret = projectSecretInput.val();
projectData.remote = {
// name: projectRepoRemoteName.val()||'origin',
// branch: projectRepoBranch.val()||'master',
url: projectRepoInput.val(),
username: projectRepoUserInput.val(),
password: projectRepoPasswordInput.val()
projectData.git = {
remotes: {
'origin': {
url: projectRepoInput.val(),
username: projectRepoUserInput.val(),
password: projectRepoPasswordInput.val()
}
}
}
}
@@ -632,7 +634,7 @@ RED.projects = (function() {
function sendRequest(options,body) {
// dialogBody.hide();
console.log(options.url);
console.log(options.url,body);
if (options.requireCleanWorkspace && RED.nodes.dirty()) {
var message = 'You have undeployed changes that will be lost. Do you want to continue?';
@@ -698,7 +700,7 @@ RED.projects = (function() {
resultCallbackArgs = {error:responses.statusText};
return;
} else if (options.handleAuthFail !== false && xhr.responseJSON.error === 'git_auth_failed') {
var url = activeProject.remotes.origin.fetch;
var url = activeProject.git.remotes.origin.fetch;
var message = $('<div>'+
'<div class="form-row">Authentication required for repository:</div>'+
'<div class="form-row"><div style="margin-left: 20px;">'+url+'</div></div>'+
@@ -723,6 +725,11 @@ RED.projects = (function() {
var username = $('#projects-user-auth-username').val();
var password = $('#projects-user-auth-password').val();
body = body || {};
var authBody = {git:{remotes:{}}};
authBody.git.remotes[options.remote||'origin'] = {
username: username,
password: password
};
var done = function(err) {
if (err) {
console.log("Failed to update auth");
@@ -749,14 +756,7 @@ RED.projects = (function() {
}
},
}
},{
remote: {
origin: {
username: username,
password: password
}
}
});
},authBody);
}
}
]
@@ -858,7 +858,17 @@ RED.projects = (function() {
},
filter: function(data) {
var isCreateEntry = (typeof data !=="string");
return (isCreateEntry && (branchFilterTerm !== "" && branches.indexOf(branchPrefix+branchFilterTerm) === -1) ) || (!isCreateEntry && data.indexOf(branchPrefix+branchFilterTerm) !== -1);
return (
isCreateEntry &&
(
branchFilterTerm !== "" &&
branches.indexOf(branchPrefix+branchFilterTerm) === -1
)
) ||
(
!isCreateEntry &&
data.indexOf(branchFilterTerm) !== -1
);
}
});
return {

View File

@@ -226,7 +226,7 @@ RED.sidebar.versionControl = (function() {
stagedChangesList.editableList('empty');
unmergedChangesList.editableList('empty');
$.getJSON("/projects/"+activeProject.name+"/status",function(result) {
$.getJSON("projects/"+activeProject.name+"/status",function(result) {
refreshFiles(result);
});
}
@@ -471,7 +471,7 @@ RED.sidebar.versionControl = (function() {
localCommitListShade.show();
$(this).addClass('selected');
var activeProject = RED.projects.getActiveProject();
localBranchList.refresh("/projects/"+activeProject.name+"/branches");
localBranchList.refresh("projects/"+activeProject.name+"/branches");
localBranchBox.show();
setTimeout(function() {
localBranchBox.css("height","215px");
@@ -523,7 +523,7 @@ RED.sidebar.versionControl = (function() {
row.click(function(e) {
var activeProject = RED.projects.getActiveProject();
if (activeProject) {
$.getJSON("/projects/"+activeProject.name+"/commits/"+entry.sha,function(result) {
$.getJSON("projects/"+activeProject.name+"/commits/"+entry.sha,function(result) {
result.project = activeProject;
result.parents = entry.parents;
result.oldRev = entry.sha+"~1";
@@ -572,7 +572,7 @@ RED.sidebar.versionControl = (function() {
var localBranchList = utils.createBranchList({
current: function() {
return RED.projects.getActiveProject().branches.local
return RED.projects.getActiveProject().git.branches.local
},
placeholder: "Find or create a branch",
container: localBranchBox,
@@ -653,7 +653,7 @@ RED.sidebar.versionControl = (function() {
} else {
$(this).addClass('selected');
var activeProject = RED.projects.getActiveProject();
remoteBranchList.refresh("/projects/"+activeProject.name+"/branches/remote");
remoteBranchList.refresh("projects/"+activeProject.name+"/branches/remote");
remoteBranchSubRow.show();
setTimeout(function() {
remoteBranchSubRow.height(180);
@@ -676,7 +676,7 @@ RED.sidebar.versionControl = (function() {
var activeProject = RED.projects.getActiveProject();
var spinner = utils.addSpinnerOverlay(remoteBox).addClass("projects-dialog-spinner-contain");
utils.sendRequest({
url: "/projects/"+activeProject.name+"/branches/remote",
url: "projects/"+activeProject.name+"/branches/remote",
type: "GET",
responses: {
0: function(error) {
@@ -706,13 +706,13 @@ RED.sidebar.versionControl = (function() {
var remoteBranchSubRow = $('<div style="height: 0;overflow:hidden; transition: height 0.2s ease-in-out;"></div>').hide().appendTo(remoteBranchRow);
var remoteBranchList = utils.createBranchList({
current: function() {
return RED.projects.getActiveProject().branches.remote
return RED.projects.getActiveProject().git.branches.remote
},
placeholder: "Find or create a remote branch",
currentLabel: "upstream",
remote: function() {
var project = RED.projects.getActiveProject();
var remotes = Object.keys(project.remotes);
var remotes = Object.keys(project.git.remotes);
return remotes[0];
},
container: remoteBranchSubRow,
@@ -721,12 +721,12 @@ RED.sidebar.versionControl = (function() {
$("#sidebar-version-control-repo-toolbar-set-upstream").prop('disabled',false);
$("#sidebar-version-control-remote-branch").text(body.name+(body.create?" *":""));
var activeProject = RED.projects.getActiveProject();
if (activeProject.branches.remote === body.name) {
delete activeProject.branches.remoteAlt;
if (activeProject.git.branches.remote === body.name) {
delete activeProject.git.branches.remoteAlt;
} else {
activeProject.branches.remoteAlt = body.name;
activeProject.git.branches.remoteAlt = body.name;
}
$("#sidebar-version-control-repo-toolbar-set-upstream-row").toggle(!!activeProject.branches.remoteAlt);
$("#sidebar-version-control-repo-toolbar-set-upstream-row").toggle(!!activeProject.git.branches.remoteAlt);
closeRemoteBranchBox(function() {
if (!body.create) {
var start = Date.now();
@@ -738,7 +738,7 @@ RED.sidebar.versionControl = (function() {
},Math.max(400-(Date.now() - start),0));
})
} else {
if (!activeProject.branches.remote) {
if (!activeProject.git.branches.remote) {
$('#sidebar-version-control-repo-toolbar-message').text("The created branch will be set as the tracked upstream branch.");
$("#sidebar-version-control-repo-toolbar-set-upstream").prop('checked',true);
$("#sidebar-version-control-repo-toolbar-set-upstream").prop('disabled',true);
@@ -762,8 +762,8 @@ RED.sidebar.versionControl = (function() {
var spinner = utils.addSpinnerOverlay(remoteBox).addClass("projects-dialog-spinner-contain");
var activeProject = RED.projects.getActiveProject();
var url = "projects/"+activeProject.name+"/push";
if (activeProject.branches.remoteAlt) {
url+="/"+activeProject.branches.remoteAlt;
if (activeProject.git.branches.remoteAlt) {
url+="/"+activeProject.git.branches.remoteAlt;
}
if ($("#sidebar-version-control-repo-toolbar-set-upstream").prop('checked')) {
url+="?u=true"
@@ -803,8 +803,8 @@ RED.sidebar.versionControl = (function() {
var spinner = utils.addSpinnerOverlay(remoteBox).addClass("projects-dialog-spinner-contain");
var activeProject = RED.projects.getActiveProject();
var url = "projects/"+activeProject.name+"/pull";
if (activeProject.branches.remoteAlt) {
url+="/"+activeProject.branches.remoteAlt;
if (activeProject.git.branches.remoteAlt) {
url+="/"+activeProject.git.branches.remoteAlt;
}
if ($("#sidebar-version-control-repo-toolbar-set-upstream").prop('checked')) {
url+="?u=true"
@@ -965,7 +965,7 @@ RED.sidebar.versionControl = (function() {
localCommitList.editableList('empty');
var activeProject = RED.projects.getActiveProject();
if (activeProject) {
getCommits("/projects/"+activeProject.name+"/commits",localCommitList,localCommitList.parent());
getCommits("projects/"+activeProject.name+"/commits",localCommitList,localCommitList.parent());
}
}
// function refreshRemoteCommits() {
@@ -973,7 +973,7 @@ RED.sidebar.versionControl = (function() {
// var spinner = utils.addSpinnerOverlay(remoteCommitList);
// var activeProject = RED.projects.getActiveProject();
// if (activeProject) {
// getCommits("/projects/"+activeProject.name+"/commits/origin",remoteCommitList,remoteCommitList.parent());
// getCommits("projects/"+activeProject.name+"/commits/origin",remoteCommitList,remoteCommitList.parent());
// }
// }
@@ -1127,7 +1127,7 @@ RED.sidebar.versionControl = (function() {
var activeProject = RED.projects.getActiveProject();
if (activeProject) {
$.getJSON("/projects/"+activeProject.name+"/status",function(result) {
$.getJSON("projects/"+activeProject.name+"/status",function(result) {
refreshFiles(result);
$('#sidebar-version-control-local-branch').text(result.branches.local);
@@ -1136,7 +1136,7 @@ RED.sidebar.versionControl = (function() {
var commitsAhead = result.commits.ahead || 0;
var commitsBehind = result.commits.behind || 0;
if (activeProject.hasOwnProperty('remotes')) {
if (activeProject.git.hasOwnProperty('remotes')) {
if (result.branches.hasOwnProperty("remoteError")) {
$("#sidebar-version-control-repo-status-auth-issue").show();
$("#sidebar-version-control-repo-status-stats").hide();

View File

@@ -2766,7 +2766,7 @@ RED.view = (function() {
if (v === undefined) {
return gridSize;
} else {
gridSize = v;
gridSize = Math.max(5,v);
updateGrid();
}
}

View File

@@ -79,6 +79,7 @@
font-size: 14px;
padding: 6px 14px;
margin-right: 8px;
border-radius: 2px;
color: $editor-button-color;
background: $editor-button-background;

View File

@@ -180,7 +180,6 @@
border-right-color: #aaa;
}
}
i {
color: #ccc;
font-size: 2em;
@@ -592,6 +591,9 @@
border-right-color:#999;
}
}
&.unselectable {
color: #ccc;
}
i {
color: #999;
@@ -627,3 +629,47 @@
}
}
.projects-dialog-file-list-entry-file-type-git { color: #999 }
.projects-dialog-remote-list {
.red-ui-editableList-container {
padding: 0;
li {
padding: 0;
border: none;
border-radius: 4px;
overflow: hidden;
}
}
}
.projects-dialog-remote-list-entry-header {
padding: 8px 10px;
background: #f6f6f6;
margin-bottom: 8px;
}
.projects-dialog-remote-list-entry-delete {
float: right;
}
/*
.expandable-list-entry {
.exandable-list-entry-header {
padding: 15px 0;
cursor: pointer;
&:hover {
background: #f3f3f3;
}
i {
width: 16px;
text-align: center;
}
.fa-angle-right {
color: #333;
transition: all 0.2s ease-in-out;
}
}
&.expanded .fa-angle-right {
transform: rotate(90deg);
}
}
*/

View File

@@ -54,6 +54,10 @@
input[type='number'] {
width: 60px;
}
h4 {
margin-top: 20px;
margin-bottom: 10px;
}
}
#user-settings-tab-view {