Adding Preview Support to BadgeYay!
In an issue it was requested to add a Preview support for BadgeYay, i.e. Badges could be seen before they were generated.
Why Preview Support?
It is a nice question. But Preview support was needed in a badge generator like BadgeYay.
This can be easily answered by an example. Let us suppose that I want to generate hundreds-thousands of badges for a meetup/event that I have organized. But I am confused as to what will look the best on and as badges. So I can just try them all in the Preview section and then choose the one that I like and generate it.
How to add Preview Support?
Adding Preview Support was not an easy task. Although coding it was not the hard part, but thinking of a way that uses less of the server’s support was a thing to take care of.
I had two options to choose from.
Implement Preview Section from backend
This was the idea that first came to my mind when i thought of implementing something like preview section.
It included of generating badges everytime the user wanted a preview and then using the same SVGs generated to show as the preview of badges.
Problems it had
Using Backend to generate badges for every instance would result to a lot of load to the server prior to the actual badge generation. And making it faster and creating less load on server was the main problem to tackle. So I came up with another idea of using frontend to generate Preview(s).
Implementing Preview Section from frontend
This method of generating preview is far more faster and less load heaving to the server.
It uses technologies such as HTML, CSS and Javascript to generate preview for badges.
The Pull Request for the same is : here
Changes in index.html
- Adding a button to view preview
<button type=”button” disabled=”disabled” class=”btn btn-block btn-warning” id=”preview-btn”>Preview</button>
|
- Adding the text areas for badge
Adding appropriate HTML for text areas.
- Adding Appropriate CSS
.preview-image{ height: 250px; width: 180px; margin-left: 80px; background-size: cover; padding: 140px 0 0 5px; text-align: center; margin-top: 20px; } .preview-image-li{ list-style: none; color: white; font-size: 15px; } #preview-btn{ font-size: 18px; } |
- Adding Javascript code for functionality
function readURL(input){ if(input.files && input.files[0]){ var reader = new FileReader(); reader.onload = function(e){ $(‘#preview’).css(‘background-image’,’url(‘ + e.target.result + ‘)’); $(‘#preview’).css(background-size’,’cover’); $(‘#preview-btn’).prop(“disabled”,false); }; reader.readAsDataURL(input.files[0]); } } |
The above snippet of code adds the image to the background of the preview div and stretches it to occupy full space.
var textValues = $(‘#textArea’).val(); textValues = textValues.split(“/n”)[0].strip(‘,’); $(‘#preview-li-1’).text(textValue[0]); $(‘#preview-li-2’).text(textValue[1]); $(‘#preview-li-3’).text(textValue[2]); $(‘#preview-li-4’).text(textValue[3]); |
The above snippet of code adds the input from the textArea to the appropriate place on the preview badge.
Further Improvements
Adding a real-time preview feature that allows user to see the changes in real-time therefore making the application more flexible and enhancing user experience.
Resources
- BadgeYay Repository: https://github.com/fossasia/badgeyay
- Pull Request for the same: https://github.com/fossasia/badgeyay/pull//432
- Issue for the same : https://github.com/fossasia/badgeyay/issues/353
- Intro to jQuery : https://www.w3schools.com/jquery/
- jQuery FileReader : https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
- More Information on split() : https://www.w3schools.com/jsref/jsref_split.asp
You must be logged in to post a comment.