<!-- Check a GUID has been provided in the URL --> {% if request.params.id.size == 36 %} <!-- Retrieve the track record by GUID --> {% assign track_record = entities['musdyn_track'][request.params.id] %} {% if track_record %} <!-- Include the Portal Web API Wrapper web template to get an authentication token --> {% include 'Portal Web API Wrapper' %} <div class="container"> <div class="col-md-6 col-sm-12"> <!-- This div is shown by default but will be hidden if the upload succeeds --> <div class="hideOnSuccess"> <h1>Existing Artwork</h1> <!-- If the artwork field is not populated, show the placeholder / not found image --> {% unless track_record.musdyn_artworkid %} <img id="existing-artwork" src="/artwork-not-found.svg" style="width:300px; height: auto;" /> {% else %} <img id="existing-artwork" style="width:300px; height: auto;" /> {% endunless %} </div> <!-- This div is hidden by default but will be shown if the upload succeeds --> <div class="showOnSuccess" style="display:none;"> <h1>Your New Artwork</h1> <img id="uploaded-artwork" style="width:300px; height: auto;" /> </div> </div> <div class="col-md-6 col-sm-12"> <h1>Upload Artwork</h1> <!-- A form to upload to images, retricted to accept only JPGs, GIF, TIFFs or PNGs --> <form id="image-upload"> <input id="artworkDocumentbody" accept="image/jpg,image/jpeg,image/gif,image/tif,image/tiff,image/png" type="file"> <a class="btn btn-default" id="submitArtwork" href="#">Upload</a> </form> <!-- This bootstrap alert is hidden by default but will be shown if an error is encountered with the upload --> <div class="alert alert-danger showOnError" role="alert" style="display:none;"><span class="glyphicon glyphicon-warning-sign" aria-hidden="true"></span> Upload failed. Please try again</div> </div> </div> <!-- If the track record has existing artwork --> {% if track_record.musdyn_artworkid %} <script> // When the page loads, get the existing artwork for this Track record $( document ).ready(function() { webapi.safeAjax({ type: "GET", url: "/_api/musdyn_tracks({{request.params.id}})/musdyn_artwork", contentType:"application/json", success: function(res) { // If successful, set the source of the existing artwork image to the retrieved file $('img#existing-artwork').attr('src','data:image/png;base64,' + res.value); }, error: function(xhr, status, error){ // If error, log to the console var errorMessage = xhr.status + ': ' + xhr.statusText; console.log(errorMessage); } }); }); </script> {% endif %} <script> // When the submitArtwork link is clicked $( '#submitArtwork' ).click(function(e) { // Run the getImageFileContents function getImageFileContents(); // Don't perform the default behaviour for the link i.e. navigation e.preventDefault(); }); function getImageFileContents() { // Get the content of the selected file var file = document.getElementById('artworkDocumentbody').files[0]; // If the user has selected a file if (file) { // Read the file var reader = new FileReader(); reader.readAsDataURL(file); // The browser has finished reading the file, we can now do something with it... reader.onload = function(e) { // The browser has finished reading the file, we can now do something with it... var artworkDocumentbodyContents = e.target.result; // Split the string at the first comma (removing the base64 prefix) artworkDocumentbodyContents = artworkDocumentbodyContents.substring(artworkDocumentbodyContents.indexOf(',')+1); // Run the function to upload to the Portal Web API, passing the file's contents as an input uploadToImageColumn(artworkDocumentbodyContents); }; } } function uploadToImageColumn(artworkDocumentbodyContents) { // Provide visual feedback that the upload function has started (changing the button text) $('#submitArtwork').html('Uploading...'); webapi.safeAjax({ type: "PUT", url: "/_api/musdyn_tracks({{request.params.id}})/musdyn_artwork", contentType:"application/json", data: JSON.stringify({ "value":artworkDocumentbodyContents }), // On success success: function() { // Provide visual feedback that the upload function has started (changing the button text to a tick / check mark) $('#submitArtwork').html('<span class="glyphicon glyphicon-ok"></span>'); // Show the new artwork by setting the source of the 'uploaded artwork' image $('img#uploaded-artwork').attr('src','data:image/jpeg;base64,' + artworkDocumentbodyContents); // Hide any elements with the 'hideOnSuccess' class $('div.hideOnSuccess').slideToggle(); // Show any elements with the 'showOnSuccess' class $('div.showOnSuccess').slideToggle(); // Hide any elements with the 'showOnError' class $('.showOnError').hide(); }, // On error error: function(xhr, status, error){ // Change the text on the upload link back from 'Uploading...' to 'Upload' $('#submitArtwork').html('Upload'); // Hide any elements with the 'hideOnError' class $('.showOnError').show(); // Log the error detais to the console var errorMessage = xhr.status + ': ' + xhr.statusText; console.log(errorMessage); } }); } </script> {% endif %} {% else %} <!-- if the track record is not found, display a bootstrap alert --> <div class="container"> <div class="alert alert-danger" role="alert"> <span class="glyphicon glyphicon-warning-sign" aria-hidden="true"></span> Track record not found / no unique identifier provided in the URL. I don't know which track to upload artwork to </div> </div> {% endif %}