Learning JavaScript
I know what you're thinking... Clearly, I should also be learning how to use software like Adobe Illustrator and not rely so heavily on MS Paint. But hey, I know it and have been using it for years, seems to do most things I need it to!
So this week I have been getting well stuck into developing this website. They gave me the task of creating a method of arranging thumbnails by date, views and type. This proved to be just the level of challenge I needed.
After sitting in front of my computer for nearly two days researching the things I could do using the JQuery library and vanilla JavaScript, I built a few functions to take care of the job.
php echo "var js_views_dates = [";
for ($i = 0; $i < sizeof($articles_info); $i++) {
echo " [ " . $articles_info[$i][6] . ", " . strtotime($articles_info[$i][7]) . "] ,";
}
echo "];";
?
First, I converted the existing array containing the views and dates I needed to know into a JavaScript array. I found a few ways to do this but they were all to complex for me at this level so I came up with this method on my own. Basically just writes the JS on the fly by echoing strings. Pretty simple, but effective.
I won't bore you with the event listeners. I used Jquery for those. Let's skip to the functions I called AFTER the document was ready...
//Get the elements.
parent = document.getElementById("article_box").children;
//Here, we combine the object in its original form along with the views and date gathered from the php.
//0 : views
//1 : dates
for (var i = 0; i < js_views_dates.length; i++){
js_article_info[i] = [parent[i], js_views_dates[i][0], js_views_dates[i][1]];
}
//This preserves the original order of the articles
original_order = js_article_info.slice();
So here I get the elements, attach them to the views and dates I got before and save the list as it currently is. I use this when the user chooses to reset from custom arrangements.
function setupOrder(original_array, order_by, high_low){
//This is a sort function that arranges the array by the first dimention, in numeric lowest to highest order
original_array.sort(function(a, b){
if (a[order_by] === b[order_by]) {
return 0;
} else {
return (a[order_by] < b[order_by]) ? -1 : 1;
}
});
if(high_low){
original_array.reverse();
}
So I learned what the sort() function did and how to get it to do my bidding. I feel like this is a function I may end up taking advantage of a lot. This is called when the user chooses the arrangement they want. It sets the order of the list based on an integer value representing their choice.
function updateArticles(order){
//This while loop simply removes the contents of the parent div by ID.
while (document.getElementById("article_box").hasChildNodes()) {
document.getElementById("article_box").removeChild(document.getElementById("article_box").lastChild);
}
//This for loop appends the objects from start to finish of the new array.
for (var i = 0; i < order.length; i++){
document.getElementById("article_box").appendChild(order[i][0]);
}
}
Finally, this function is called after setupOrder() to update the elements on the page based on the new information.
Once I had these functions built, the rest of the logic was only a line or two in the event listeners. I feel like it was efficient, although I'm sure there are many other methods and this is far from the most efficient.