Instantly share code, notes, and snippets.
Created
December 2, 2012 10:52
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save rw1/4188166 to your computer and use it in GitHub Desktop.
mpf_script_multipage-no_button_text
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function($) { | |
var curpage = 1; | |
var id = null; | |
var settings = null; | |
jQuery.fn.transitionPage = function(from,to) { | |
if (settings.transitionFunction) { | |
settings.transitionFunction(from,to); | |
} else { | |
$(from).hide(); | |
$(to).show(); | |
} | |
$(id + ' fieldset').removeClass('active'); | |
$(to).addClass('active'); | |
} | |
jQuery.fn.showState = function(page) { | |
if (settings.stateFunction) { | |
return settings.stateFunction(id+"_nav .multipage_state",page,settings.pages.length); | |
} | |
var state = ''; | |
for (x = 1; x <= settings.pages.length; x++) { | |
if(x==page) { | |
state = state + settings.activeDot; | |
} else { | |
state = state + settings.inactiveDot; | |
} | |
} | |
$(id+"_nav .multipage_state").html(state); | |
} | |
jQuery.fn.gotopage = function(page) { | |
$(id + '_nav .multipage_next').html('Next'); | |
if (isNaN(page)) { | |
q = page; | |
page = 1; | |
$(id+' fieldset').each(function(index) { | |
if ('#'+$(this).attr('id')==q) { | |
curpage = page = index+1; | |
} | |
}); | |
} | |
var np = null; | |
var cp = $(id+' fieldset.active'); | |
// show the appropriate page. | |
$(id+' fieldset').each(function(index) { | |
index++; | |
if (index==page) { | |
np = this; | |
} | |
}); | |
$(this).transitionPage(cp,np); | |
$(this).showState(page); | |
$(id + '_nav .multipage_next').removeClass('submit'); | |
// is there a legend tag for this fieldset? | |
// if so, pull it out. | |
page_title = settings.pages[page-1].title; | |
if (settings.stayLinkable) { | |
hashtag = '#' + settings.pages[page-1].id; | |
document.location.hash = hashtag; | |
} | |
if (page==1) { | |
// set up for first page | |
$(id + '_nav .multipage_back').hide(); | |
$(id + '_nav .multipage_next').hide(); | |
if (settings.pages[page].title) { | |
$(id + '_nav .multipage_next').html(': ' + settings.pages[page].title); | |
} else { | |
$(id + '_nav .multipage_next').html(''); | |
} | |
} else if (page==settings.pages.length) { | |
// set up for last page | |
$(id + '_nav .multipage_back').show(); | |
$(id + '_nav .multipage_next').show(); | |
if (settings.pages[page-2].title) { | |
$(id + '_nav .multipage_back').html(': ' + settings.pages[page-2].title); | |
} else { | |
$(id + '_nav .multipage_back').html(''); | |
} | |
$(id + '_nav .multipage_next').addClass('submit'); | |
$(id + '_nav .multipage_next').html(settings.submitLabel); | |
} else { | |
if (settings.pages[page-2].title) { | |
$(id + '_nav .multipage_back').html(': ' + settings.pages[page-2].title); | |
} else { | |
$(id + '_nav .multipage_back').html(''); | |
} | |
if (settings.pages[page].title) { | |
$(id + '_nav .multipage_next').html(': ' + settings.pages[page].title); | |
} else { | |
$(id + '_nav .multipage_next').html(''); | |
} | |
$(id + '_nav .multipage_back').show(); | |
$(id + '_nav .multipage_next').show(); | |
} | |
$(id + ' fieldset.active input:first').focus(); | |
curpage=page; | |
return false; | |
} | |
jQuery.fn.validatePage = function(page) { | |
return true; | |
} | |
jQuery.fn.validateAll = function() { | |
for (x = 1; x <= settings.pages.length; x++) { | |
if (!$(this).validatePage(x)) { | |
$(this).gotopage(x); | |
return false; | |
} | |
} | |
return true; | |
} | |
jQuery.fn.gotofirst = function() { | |
curpage = 1; | |
$(this).gotopage(curpage); | |
return false; | |
} | |
jQuery.fn.gotolast = function() { | |
curpage = settings.pages.length; | |
$(this).gotopage(curpage); | |
return false; | |
} | |
jQuery.fn.nextpage = function() { | |
// validate the current page | |
if ($(this).validatePage(curpage)) { | |
curpage++; | |
if (curpage > settings.pages.length) { | |
// submit! | |
formSubmit(); | |
curpage = settings.pages.length; | |
return false; | |
} | |
$(this).gotopage(curpage); | |
} | |
return false; | |
} | |
jQuery.fn.getPages = function() { | |
return settings.pages; | |
} | |
jQuery.fn.prevpage = function() { | |
curpage--; | |
if (curpage < 1) { | |
curpage = 1; | |
} | |
$(this).gotopage(curpage); | |
return false; | |
} | |
jQuery.fn.multipage = function(options) { | |
settings = jQuery.extend({stayLinkable:false,submitLabel:'Submit',hideLegend:false,hideSubmit:true,generateNavigation:true,activeDot:' ●',inactiveDot:' ·'},options); | |
id = '#' + $(this).attr('id'); | |
var form = $(this); | |
form.addClass('multipage'); | |
form.submit(function(e) { | |
if (!$(this).validateAll()) { | |
e.preventDefault() | |
}; | |
}); | |
// hide all the pages | |
$(id +' fieldset').hide(); | |
if (settings.hideSubmit) { | |
$(id+' input[type="submit"]').hide(); | |
} | |
if ($(id+' input[type="submit"]').val()!='') { | |
settings.submitLabel = $(id+' input[type="submit"]').val(); | |
} | |
settings.pages = new Array(); | |
$(this).children('fieldset').each(function(index) { | |
label = $(this).children('legend').html(); | |
settings.pages[index] = {number:index+1,title:label,id:$(this).attr('id')}; | |
}); | |
if (settings.hideLegend) { | |
// hide legend tags | |
$(id+' fieldset legend').hide(); | |
} | |
// show the first page. | |
$(id+' fieldset:first').addClass('active'); | |
$(id+' fieldset:first').show(); | |
if (settings.generateNavigation) { | |
if (settings.navigationFunction) { | |
settings.navigationFunction($(this).getPages()); | |
} else { | |
// insert navigation | |
var id_name = $(this).attr('id'); | |
$('<div class="multipage_nav" id="'+id_name+'_nav"><a href="#" class="multipage_back" onclick="return $(\''+id+'\').prevpage();">Back</a><a href="#" class="multipage_next" onclick="return $(\''+id+'\').nextpage();">Next</a><span class="multipage_state"></span><div class="clearer"></div></div>').insertAfter(this); | |
} | |
} | |
if (document.location.hash) { | |
$(this).gotopage('#'+document.location.hash.substring(1,document.location.hash.length)); | |
} else { | |
$(this).gotopage(1); | |
} | |
return false; | |
} | |
})(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment