blob: ed22a4ebc17ef7b626b74e86d2d2c1d0313f5d21 [file] [log] [blame]
'use strict';
function basePageInit(ctx) {
var newBuildButton = $("#new-build-button");
var newBuildTargetInput;
var newBuildTargetBuildBtn;
var projectNameForm = $("#project-name-change-form");
var projectNameContainer = $("#project-name-container");
var projectName = $("#project-name");
var projectNameFormToggle = $("#project-change-form-toggle");
var projectNameChangeCancel = $("#project-name-change-cancel");
/* initially the current project is used unless overridden by the new build
* button in top right nav
*/
var selectedProject = libtoaster.ctx;
var selectedTarget;
var newBuildProjectInput = $("#new-build-button #project-name-input");
var newBuildProjectSaveBtn = $("#new-build-button #save-project-button");
/* Project name change functionality */
projectNameFormToggle.click(function(e){
e.preventDefault();
projectNameContainer.hide();
projectNameForm.fadeIn();
});
projectNameChangeCancel.click(function(e){
e.preventDefault();
projectNameForm.hide();
projectNameContainer.fadeIn();
});
$("#project-name-change-btn").click(function(e){
var newProjectName = $("#project-name-change-input").val();
libtoaster.editCurrentProject({ projectName: newProjectName }, function (){
projectName.html(newProjectName);
libtoaster.ctx.projectName = newProjectName;
projectNameChangeCancel.click();
});
});
_checkProjectBuildable();
$("#project-topbar .nav li a").each(function(){
if (window.location.pathname === $(this).attr('href'))
$(this).parent().addClass('active');
else
$(this).parent().removeClass('active');
});
if ($(".total-builds").length !== 0){
libtoaster.getProjectInfo(libtoaster.ctx.projectPageUrl, function(prjInfo){
if (prjInfo.completedbuilds)
$(".total-builds").text(prjInfo.completedbuilds.length);
});
}
/* Hide the button if we're on the project,newproject or importlyaer page
* or if there are no projects yet defined
* only show if there isn't already a build-target-input already
*/
if (ctx.numProjects > 0 &&
ctx.currentUrl.search('newproject') < 0 &&
$(".build-target-input").length === 1) {
newBuildTargetInput = $("#new-build-button .build-target-input");
newBuildTargetBuildBtn = $("#new-build-button").find(".build-button");
_setupNewBuildButton();
newBuildButton.show();
} else if ($(".build-target-input").length > 0) {
newBuildTargetInput = $("#project-topbar .build-target-input");
newBuildTargetBuildBtn = $("#project-topbar .build-button");
} else {
return;
}
/* Hide the change project icon when there is only one project */
if (ctx.numProjects === 1) {
$('#project .icon-pencil').hide();
}
/* If we have a project setup the typeahead */
if (selectedProject.recipesTypeAheadUrl){
libtoaster.makeTypeahead(newBuildTargetInput, selectedProject.recipesTypeAheadUrl, { format: "json" }, function (item) {
selectedTarget = item;
newBuildTargetBuildBtn.removeAttr("disabled");
});
}
newBuildTargetInput.on('input', function () {
if ($(this).val().length === 0) {
newBuildTargetBuildBtn.attr("disabled", "disabled");
} else {
newBuildTargetBuildBtn.removeAttr("disabled");
}
});
newBuildTargetBuildBtn.click(function (e) {
e.preventDefault();
if (!newBuildTargetInput.val()) {
return;
}
/* We use the value of the input field so as to maintain any command also
* added e.g. core-image-minimal:clean
*/
selectedTarget = { name: newBuildTargetInput.val() };
/* Fire off the build */
libtoaster.startABuild(selectedProject.projectBuildsUrl,
selectedProject.projectId, selectedTarget.name, function(){
window.location.replace(selectedProject.projectBuildsUrl);
}, null);
});
function _checkProjectBuildable() {
if (selectedProject.projectId === undefined || selectedProject.projectIsDefault) {
return;
}
libtoaster.getProjectInfo(selectedProject.projectPageUrl,
function (data) {
if (data.machine === null || data.machine.name === undefined || data.layers.length === 0) {
/* we can't build anything without a machine and some layers */
$("#new-build-button #targets-form").hide();
$("#new-build-button .alert").show();
} else {
$("#new-build-button #targets-form").show();
$("#new-build-button .alert").hide();
/* we can build this project; enable input fields */
newBuildTargetInput.removeAttr("disabled");
}
}, null);
}
/* Setup New build button in the top nav bar */
function _setupNewBuildButton() {
/* If we don't have a current project then present the set project
* form.
*/
if (selectedProject.projectId === undefined || selectedProject.projectIsDefault) {
$('#change-project-form').show();
$('#project .icon-pencil').hide();
}
libtoaster.makeTypeahead(newBuildProjectInput, selectedProject.projectsTypeAheadUrl, { format : "json" }, function (item) {
/* successfully selected a project */
newBuildProjectSaveBtn.removeAttr("disabled");
selectedProject = item;
});
/* Any typing in the input apart from enter key is going to invalidate
* the value that has been set by selecting a suggestion from the typeahead
*/
newBuildProjectInput.on('input', function (event) {
if (event.keyCode === 13) {
return;
}
newBuildProjectSaveBtn.attr("disabled", "disabled");
});
newBuildProjectSaveBtn.click(function () {
selectedProject.projectId = selectedProject.id;
/* Update the typeahead project_id paramater */
_checkProjectBuildable();
newBuildTargetInput.removeAttr("disabled");
/* We've got a new project so now we need to update the
* target urls. We can get this from the new project's info
*/
$.getJSON(selectedProject.projectPageUrl, { format: "json" },
function(projectInfo){
/* Update the typeahead to use the new selectedProject */
selectedProject = projectInfo;
libtoaster.makeTypeahead(newBuildTargetInput, selectedProject.recipesTypeAheadUrl, { format: "json" }, function (item) {
/* successfully selected a target */
selectedTarget = item;
newBuildTargetBuildBtn.removeAttr("disabled");
});
});
newBuildTargetInput.val("");
/* set up new form aspect */
$("#new-build-button #project a").text(selectedProject.name).attr('href', selectedProject.projectPageUrl);
$("#new-build-button .alert a").attr('href', selectedProject.projectPageUrl);
$("#project .icon-pencil").show();
$("#change-project-form").slideUp({ 'complete' : function () {
$("#new-build-button #project").show();
}});
});
$('#new-build-button #project .icon-pencil').click(function () {
newBuildProjectSaveBtn.attr("disabled", "disabled");
newBuildProjectInput.val($("#new-build-button #project a").text());
$("#cancel-change-project").show();
$(this).parent().hide();
$("#change-project-form").slideDown();
});
$("#new-build-button #cancel-change-project").click(function () {
$("#change-project-form").hide(function () {
$('#new-build-button #project').show();
});
newBuildProjectInput.val("");
newBuildProjectSaveBtn.attr("disabled", "disabled");
});
/* Keep the dropdown open even unless we click outside the dropdown area */
$(".new-build").click (function (event) {
event.stopPropagation();
});
};
}