diff options
Diffstat (limited to 'lib/toaster/toastergui/static/js/base.js')
-rw-r--r-- | lib/toaster/toastergui/static/js/base.js | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/lib/toaster/toastergui/static/js/base.js b/lib/toaster/toastergui/static/js/base.js new file mode 100644 index 000000000..864130def --- /dev/null +++ b/lib/toaster/toastergui/static/js/base.js @@ -0,0 +1,125 @@ + + +function basePageInit (ctx) { + + var newBuildButton = $("#new-build-button"); + /* Hide the button if we're on the project,newproject or importlyaer page */ + if (ctx.currentUrl.search('newproject|project/\\d/$|importlayer/$') > 0){ + newBuildButton.hide(); + return; + } + + + newBuildButton.show().removeAttr("disabled"); + + _checkProjectBuildable() + _setupNewBuildButton(); + + + function _checkProjectBuildable(){ + libtoaster.getProjectInfo(ctx.projectInfoUrl, ctx.projectId, + function(data){ + if (data.machine.name == undefined || data.layers.length == 0) { + /* we can't build anything with out 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(); + } + }, null); + } + + function _setupNewBuildButton() { + /* Setup New build button */ + var newBuildProjectInput = $("#new-build-button #project-name-input"); + var newBuildTargetBuildBtn = $("#new-build-button #build-button"); + var newBuildTargetInput = $("#new-build-button #build-target-input"); + var newBuildProjectSaveBtn = $("#new-build-button #save-project-button"); + var selectedTarget; + var selectedProject; + + /* If we don't have a current project then present the set project + * form. + */ + if (ctx.projectId == undefined) { + $('#change-project-form').show(); + $('#project .icon-pencil').hide(); + } + + libtoaster.makeTypeahead(newBuildTargetInput, ctx.xhrDataTypeaheadUrl, { type : "targets", project_id: ctx.projectId }, function(item){ + /* successfully selected a target */ + selectedTarget = item; + }); + + + libtoaster.makeTypeahead(newBuildProjectInput, ctx.xhrDataTypeaheadUrl, { type : "projects" }, 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.keyup(function(event) { + if (event.keyCode == 13) + return; + newBuildProjectSaveBtn.attr("disabled", "disabled"); + }); + + newBuildTargetInput.keyup(function() { + if ($(this).val().length == 0) + newBuildTargetBuildBtn.attr("disabled", "disabled"); + else + newBuildTargetBuildBtn.removeAttr("disabled"); + }); + + newBuildTargetBuildBtn.click(function() { + if (!newBuildTargetInput.val()) + return; + + /* fire and forget */ + libtoaster.startABuild(ctx.projectBuildUrl, ctx.projectId, selectedTarget.name, null, null); + window.location.replace(ctx.projectPageUrl+ctx.projectId); + }); + + newBuildProjectSaveBtn.click(function() { + ctx.projectId = selectedProject.id + /* Update the typeahead project_id paramater */ + _checkProjectBuildable(); + newBuildTargetInput.data('typeahead').options.xhrParams.project_id = ctx.projectId; + newBuildTargetInput.val(""); + + $("#new-build-button #project a").text(selectedProject.name).attr('href', ctx.projectPageUrl+ctx.projectId); + $("#new-build-button .alert a").attr('href', ctx.projectPageUrl+ctx.projectId); + + + $("#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()); + $(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(); + }); + }; + +} |