Recently I have been working on a VA for a client and I noticed im using quite a bit of jquery.
Maintaining this code can be a bit of a headache so ive decided to create a boilerplate to maintain ALL my jQuery in one place.
Before I began I done a quick search and was unable to find exactly what I wanted, there was a similar method used by studioforty9.com, however it relied on a body class produced by in their case magento e-commerce.
This would not work in phpvms's case as it does not apply a class to the body for each page(controller) so here is my work-around for a global scope.
The method:
init Loads any code used cross domain
initSiteSection Loads the correct code for certain controllers
Firstly we catch the window.location.pathname
Next we need to slice off anything before the last /{forward slash}
Regex would work for this but I found lastIndexOf to be faster, then a substr and remove the last /{forward slash with +1}
Finally we evaluate the code{when a controller is loaded, we pick it up and then apply the correct initFunction to that controller}
Our code is now easy to maintain ....
(function($){
var Iphpvms = {
sections: {
'profile' : 'this.initProfile()',
'pilots' : 'this.initPilots()',
'pireps' : 'this.initPireps()',
'downloads' : 'this.initDownloads()',
'schedules' : 'this.initSchedules()',
'finances' : 'this.initFinances()'
},
/*
init ###################################################################
*/
init: function(){
//Common functionlaity across your site
},
/*
initSiteSection #########################################################
*/
initSiteSection: function(section){
var path = window.location.pathname;
var index = path.lastIndexOf("/");
var section = path.substr(index +1);
eval(this.sections[section]);
/**
* If a class is applied to the <body> for each page(controller)
* you can use this method instead!
* Source: studioforty9.com
*
initSiteSection: function(section){
var section = $('body').attr('class').split(' ')[1];
eval(this.sections[section]);
},
**/
},
/*
initProfile #########################################################
*/
initProfile: function(){
//De-buggin ONLY console.log($('body').attr('class', 'profile'));
},
initPilots: function(){
//De-buggin ONLY console.log($('body').attr('class', 'pilot'));
},
/*
initPireps #########################################################
*/
initPireps: function(){
//De-buggin ONLY console.log($('body').attr('class', 'pireps'));
},
/*
initDownloads #########################################################
*/
initDownloads: function(){
//De-buggin ONLY console.log($('body').attr('class', 'downloads'));
},
/*
initSchedules #########################################################
*/
initSchedules: function(){
//De-buggin ONLY console.log($('body').attr('class', 'schedules'));
},
/*
initFinances #########################################################
*/
initFinances: function(){
//De-buggin ONLY console.log($('body').attr('class', 'finances'));
},
}
/*
Ready? Invoke#########################################################
*/
$(function() {
Iphpvms.init();
Iphpvms.initSiteSection();
});
// use jQuery.noConflict() so we can use with other frameworks
})(jQuery.noConflict());