1*4882a593Smuzhiyun'use strict'; 2*4882a593Smuzhiyun 3*4882a593Smuzhiyunfunction projectTopBarInit(ctx) { 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun var projectNameForm = $("#project-name-change-form"); 6*4882a593Smuzhiyun var projectNameContainer = $("#project-name-container"); 7*4882a593Smuzhiyun var projectName = $(".project-name"); 8*4882a593Smuzhiyun var projectNameFormToggle = $("#project-change-form-toggle"); 9*4882a593Smuzhiyun var projectNameChangeCancel = $("#project-name-change-cancel"); 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun // this doesn't exist for command-line builds 12*4882a593Smuzhiyun var newBuildTargetInput = $("#build-input"); 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun var newBuildTargetBuildBtn = $("#build-button"); 15*4882a593Smuzhiyun var selectedTarget; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun var updateProjectBtn = $("#update-project-button"); 18*4882a593Smuzhiyun var cancelProjectBtn = $("#cancel-project-button"); 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /* Project name change functionality */ 21*4882a593Smuzhiyun projectNameFormToggle.click(function(e){ 22*4882a593Smuzhiyun e.preventDefault(); 23*4882a593Smuzhiyun projectNameContainer.hide(); 24*4882a593Smuzhiyun projectNameForm.fadeIn(); 25*4882a593Smuzhiyun }); 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun projectNameChangeCancel.click(function(e){ 28*4882a593Smuzhiyun e.preventDefault(); 29*4882a593Smuzhiyun projectNameForm.hide(); 30*4882a593Smuzhiyun projectNameContainer.fadeIn(); 31*4882a593Smuzhiyun $("#project-name-change-input").val(projectName.first().text()); 32*4882a593Smuzhiyun }); 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun $("#project-name-change-btn").click(function(){ 35*4882a593Smuzhiyun var newProjectName = $("#project-name-change-input").val(); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun libtoaster.editCurrentProject({ projectName: newProjectName }, function (){ 38*4882a593Smuzhiyun projectName.text(newProjectName); 39*4882a593Smuzhiyun libtoaster.ctx.projectName = newProjectName; 40*4882a593Smuzhiyun projectNameChangeCancel.click(); 41*4882a593Smuzhiyun }); 42*4882a593Smuzhiyun }); 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun /* Nav bar activate state switcher */ 45*4882a593Smuzhiyun $("#project-topbar .nav li a").each(function(){ 46*4882a593Smuzhiyun if (window.location.pathname === $(this).attr('href')) 47*4882a593Smuzhiyun $(this).parent().addClass('active'); 48*4882a593Smuzhiyun else 49*4882a593Smuzhiyun $(this).parent().removeClass('active'); 50*4882a593Smuzhiyun }); 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun if (!newBuildTargetInput.length) { 53*4882a593Smuzhiyun return; 54*4882a593Smuzhiyun } 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /* the following only applies for non-command-line projects */ 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /* Recipe build input functionality */ 59*4882a593Smuzhiyun if (ctx.numProjectLayers > 0 && ctx.machine){ 60*4882a593Smuzhiyun newBuildTargetInput.removeAttr("disabled"); 61*4882a593Smuzhiyun } 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun libtoaster.makeTypeahead(newBuildTargetInput, 64*4882a593Smuzhiyun libtoaster.ctx.recipesTypeAheadUrl, {}, function (item) { 65*4882a593Smuzhiyun selectedTarget = item; 66*4882a593Smuzhiyun newBuildTargetBuildBtn.removeAttr("disabled"); 67*4882a593Smuzhiyun }); 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun newBuildTargetInput.on('input', function () { 70*4882a593Smuzhiyun if ($(this).val().length === 0) { 71*4882a593Smuzhiyun newBuildTargetBuildBtn.attr("disabled", "disabled"); 72*4882a593Smuzhiyun } else { 73*4882a593Smuzhiyun newBuildTargetBuildBtn.removeAttr("disabled"); 74*4882a593Smuzhiyun } 75*4882a593Smuzhiyun }); 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun newBuildTargetBuildBtn.click(function (e) { 78*4882a593Smuzhiyun e.preventDefault(); 79*4882a593Smuzhiyun if (!newBuildTargetInput.val().trim()) { 80*4882a593Smuzhiyun return; 81*4882a593Smuzhiyun } 82*4882a593Smuzhiyun /* We use the value of the input field so as to maintain any command also 83*4882a593Smuzhiyun * added e.g. core-image-minimal:clean and because we can build targets 84*4882a593Smuzhiyun * that toaster doesn't yet know about 85*4882a593Smuzhiyun */ 86*4882a593Smuzhiyun selectedTarget = { name: newBuildTargetInput.val().trim() }; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /* Fire off the build */ 89*4882a593Smuzhiyun libtoaster.startABuild(null, selectedTarget.name, 90*4882a593Smuzhiyun function(){ 91*4882a593Smuzhiyun window.location.replace(libtoaster.ctx.projectBuildsUrl); 92*4882a593Smuzhiyun }, null); 93*4882a593Smuzhiyun }); 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun updateProjectBtn.click(function (e) { 96*4882a593Smuzhiyun e.preventDefault(); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun selectedTarget = { name: "_PROJECT_PREPARE_" }; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* Save current default build image, fire off the build */ 101*4882a593Smuzhiyun libtoaster.updateProject(null, selectedTarget.name, newBuildTargetInput.val().trim(), 102*4882a593Smuzhiyun function(){ 103*4882a593Smuzhiyun window.location.replace(libtoaster.ctx.projectSpecificPageUrl); 104*4882a593Smuzhiyun }, null); 105*4882a593Smuzhiyun }); 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun cancelProjectBtn.click(function (e) { 108*4882a593Smuzhiyun e.preventDefault(); 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun /* redirect to 'done/canceled' landing page */ 111*4882a593Smuzhiyun window.location.replace(libtoaster.ctx.landingSpecificCancelURL); 112*4882a593Smuzhiyun }); 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun /* Call makeProjectNameValidation function */ 115*4882a593Smuzhiyun libtoaster.makeProjectNameValidation($("#project-name-change-input"), 116*4882a593Smuzhiyun $("#hint-error-project-name"), $("#validate-project-name"), 117*4882a593Smuzhiyun $("#project-name-change-btn")); 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun} 120