Jump to content

Recommended Posts

Posted

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());

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...