1*4882a593Smuzhiyun<!-- 2*4882a593Smuzhiyunmodal dialog shown on the build dashboard, for editing an existing custom image; 3*4882a593Smuzhiyunonly shown if more than one custom image was built, so the user needs to 4*4882a593Smuzhiyunchoose which one to edit 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunrequired context: 7*4882a593Smuzhiyun build - a Build object 8*4882a593Smuzhiyun--> 9*4882a593Smuzhiyun<div class="modal fade" aria-hidden="false" id="edit-custom-image-modal"> 10*4882a593Smuzhiyun <div class="modal-dialog"> 11*4882a593Smuzhiyun <div class="modal-content"> 12*4882a593Smuzhiyun <div class="modal-header"> 13*4882a593Smuzhiyun <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 14*4882a593Smuzhiyun <h3>Which image do you want to edit?</h3> 15*4882a593Smuzhiyun </div> 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun <div class="modal-body"> 18*4882a593Smuzhiyun {% for recipe in build.get_custom_image_recipes %} 19*4882a593Smuzhiyun <div class="radio"> 20*4882a593Smuzhiyun <label> 21*4882a593Smuzhiyun <input type="radio" name="select-custom-image" 22*4882a593Smuzhiyun data-url="{% url 'customrecipe' build.project.id recipe.id %}"> 23*4882a593Smuzhiyun {{recipe.name}} 24*4882a593Smuzhiyun </label> 25*4882a593Smuzhiyun </div> 26*4882a593Smuzhiyun {% endfor %} 27*4882a593Smuzhiyun <span class="help-block text-danger" id="invalid-custom-image-help" style="display:none"> 28*4882a593Smuzhiyun Please select a custom image to edit. 29*4882a593Smuzhiyun </span> 30*4882a593Smuzhiyun </div> 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun <div class="modal-footer"> 33*4882a593Smuzhiyun <button class="btn btn-primary btn-lg" data-url="#" 34*4882a593Smuzhiyun data-action="edit-custom-image" disabled> 35*4882a593Smuzhiyun Edit custom image 36*4882a593Smuzhiyun </button> 37*4882a593Smuzhiyun </div> 38*4882a593Smuzhiyun </div> 39*4882a593Smuzhiyun </div> 40*4882a593Smuzhiyun</div> 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun<script> 43*4882a593Smuzhiyun$(document).ready(function () { 44*4882a593Smuzhiyun var editCustomImageButton = $('[data-action="edit-custom-image"]'); 45*4882a593Smuzhiyun var error = $('#invalid-custom-image-help'); 46*4882a593Smuzhiyun var radios = $('[name="select-custom-image"]'); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun // return custom image radio buttons which are selected 49*4882a593Smuzhiyun var getSelectedRadios = function () { 50*4882a593Smuzhiyun return $('[name="select-custom-image"]:checked'); 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun function enableSubmit() { 54*4882a593Smuzhiyun if (getSelectedRadios().length === 1) { 55*4882a593Smuzhiyun editCustomImageButton.removeAttr('disabled'); 56*4882a593Smuzhiyun error.hide(); 57*4882a593Smuzhiyun } 58*4882a593Smuzhiyun else { 59*4882a593Smuzhiyun editCustomImageButton.attr('disabled', 'disabled'); 60*4882a593Smuzhiyun error.show(); 61*4882a593Smuzhiyun } 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun $("#edit-custom-image-modal").on("shown.bs.modal", function() { 65*4882a593Smuzhiyun enableSubmit(); 66*4882a593Smuzhiyun }); 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun radios.change(function () { 69*4882a593Smuzhiyun enableSubmit(); 70*4882a593Smuzhiyun }); 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun editCustomImageButton.click(function () { 73*4882a593Smuzhiyun var selectedRadios = getSelectedRadios(); 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun if (selectedRadios.length === 1) { 76*4882a593Smuzhiyun document.location.href = selectedRadios.first().attr('data-url'); 77*4882a593Smuzhiyun } 78*4882a593Smuzhiyun else { 79*4882a593Smuzhiyun error.show(); 80*4882a593Smuzhiyun } 81*4882a593Smuzhiyun }); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun // Select the first custom image listed. Radio button groups 84*4882a593Smuzhiyun // should always have an option selected by default 85*4882a593Smuzhiyun $("input:radio:first").attr("checked", "checked"); 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun}); 88*4882a593Smuzhiyun</script> 89