diff options
Diffstat (limited to 'ncp-web/wizard/JS/jquery.bootstrap.wizard.js')
-rw-r--r-- | ncp-web/wizard/JS/jquery.bootstrap.wizard.js | 347 |
1 files changed, 347 insertions, 0 deletions
diff --git a/ncp-web/wizard/JS/jquery.bootstrap.wizard.js b/ncp-web/wizard/JS/jquery.bootstrap.wizard.js new file mode 100644 index 00000000..c1bfd2c8 --- /dev/null +++ b/ncp-web/wizard/JS/jquery.bootstrap.wizard.js @@ -0,0 +1,347 @@ +/*! + * jQuery twitter bootstrap wizard plugin + * Examples and documentation at: http://github.com/VinceG/twitter-bootstrap-wizard + * version 1.4.2 + * Requires jQuery v1.3.2 or later + * Supports Bootstrap 2.2.x, 2.3.x, 3.0 + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Authors: Vadim Vincent Gabriel (http://vadimg.com), Jason Gill (www.gilluminate.com) + */ +;(function($) { +var bootstrapWizardCreate = function(element, options) { + var element = $(element); + var obj = this; + + // selector skips any 'li' elements that do not contain a child with a tab data-toggle + var baseItemSelector = 'li:has([data-toggle="tab"])'; + var historyStack = []; + + // Merge options with defaults + var $settings = $.extend({}, $.fn.bootstrapWizard.defaults, options); + var $activeTab = null; + var $navigation = null; + + this.rebindClick = function(selector, fn) + { + selector.unbind('click', fn).bind('click', fn); + } + + this.fixNavigationButtons = function() { + // Get the current active tab + if(!$activeTab.length) { + // Select first one + $navigation.find('a:first').tab('show'); + $activeTab = $navigation.find(baseItemSelector + ':first'); + } + + // See if we're currently in the first/last then disable the previous and last buttons + $($settings.previousSelector, element).toggleClass('disabled', (obj.firstIndex() >= obj.currentIndex())); + $($settings.nextSelector, element).toggleClass('disabled', (obj.currentIndex() >= obj.navigationLength())); + $($settings.nextSelector, element).toggleClass('hidden', (obj.currentIndex() >= obj.navigationLength() && $($settings.finishSelector, element).length > 0)); + $($settings.lastSelector, element).toggleClass('hidden', (obj.currentIndex() >= obj.navigationLength() && $($settings.finishSelector, element).length > 0)); + $($settings.finishSelector, element).toggleClass('hidden', (obj.currentIndex() < obj.navigationLength())); + $($settings.backSelector, element).toggleClass('disabled', (historyStack.length == 0)); + $($settings.backSelector, element).toggleClass('hidden', (obj.currentIndex() >= obj.navigationLength() && $($settings.finishSelector, element).length > 0)); + + // We are unbinding and rebinding to ensure single firing and no double-click errors + obj.rebindClick($($settings.nextSelector, element), obj.next); + obj.rebindClick($($settings.previousSelector, element), obj.previous); + obj.rebindClick($($settings.lastSelector, element), obj.last); + obj.rebindClick($($settings.firstSelector, element), obj.first); + obj.rebindClick($($settings.finishSelector, element), obj.finish); + obj.rebindClick($($settings.backSelector, element), obj.back); + + if($settings.onTabShow && typeof $settings.onTabShow === 'function' && $settings.onTabShow($activeTab, $navigation, obj.currentIndex())===false){ + return false; + } + }; + + this.next = function(e) { + // If we clicked the last then dont activate this + if(element.hasClass('last')) { + return false; + } + + if($settings.onNext && typeof $settings.onNext === 'function' && $settings.onNext($activeTab, $navigation, obj.nextIndex())===false){ + return false; + } + + var formerIndex = obj.currentIndex(); + var $index = obj.nextIndex(); + + // Did we click the last button + if($index > obj.navigationLength()) { + } else { + historyStack.push(formerIndex); + $navigation.find(baseItemSelector + ($settings.withVisible ? ':visible' : '') + ':eq(' + $index + ') a').tab('show'); + } + }; + + this.previous = function(e) { + // If we clicked the first then dont activate this + if(element.hasClass('first')) { + return false; + } + + if($settings.onPrevious && typeof $settings.onPrevious === 'function' && $settings.onPrevious($activeTab, $navigation, obj.previousIndex())===false){ + return false; + } + + var formerIndex = obj.currentIndex(); + var $index = obj.previousIndex(); + + if($index < 0) { + } else { + historyStack.push(formerIndex); + $navigation.find(baseItemSelector + ($settings.withVisible ? ':visible' : '') + ':eq(' + $index + ') a').tab('show'); + } + }; + + this.first = function (e) { + if($settings.onFirst && typeof $settings.onFirst === 'function' && $settings.onFirst($activeTab, $navigation, obj.firstIndex())===false){ + return false; + } + + // If the element is disabled then we won't do anything + if(element.hasClass('disabled')) { + return false; + } + + + historyStack.push(obj.currentIndex()); + $navigation.find(baseItemSelector + ':eq(0) a').tab('show'); + }; + + this.last = function(e) { + if($settings.onLast && typeof $settings.onLast === 'function' && $settings.onLast($activeTab, $navigation, obj.lastIndex())===false){ + return false; + } + + // If the element is disabled then we won't do anything + if(element.hasClass('disabled')) { + return false; + } + + historyStack.push(obj.currentIndex()); + $navigation.find(baseItemSelector + ':eq(' + obj.navigationLength() + ') a').tab('show'); + }; + + this.finish = function (e) { + if ($settings.onFinish && typeof $settings.onFinish === 'function') { + $settings.onFinish($activeTab, $navigation, obj.lastIndex()); + } + }; + + this.back = function () { + if (historyStack.length == 0) { + return null; + } + + var formerIndex = historyStack.pop(); + if ($settings.onBack && typeof $settings.onBack === 'function' && $settings.onBack($activeTab, $navigation, formerIndex) === false) { + historyStack.push(formerIndex); + return false; + } + + element.find(baseItemSelector + ':eq(' + formerIndex + ') a').tab('show'); + }; + + this.currentIndex = function() { + return $navigation.find(baseItemSelector + ($settings.withVisible ? ':visible' : '')).index($activeTab); + }; + + this.firstIndex = function() { + return 0; + }; + + this.lastIndex = function() { + return obj.navigationLength(); + }; + + this.getIndex = function(e) { + return $navigation.find(baseItemSelector + ($settings.withVisible ? ':visible' : '')).index(e); + }; + + this.nextIndex = function() { + var nextIndexCandidate=this.currentIndex(); + var nextTabCandidate=null; + do { + nextIndexCandidate++; + nextTabCandidate = $navigation.find(baseItemSelector + ($settings.withVisible ? ':visible' : '') + ":eq(" + nextIndexCandidate + ")"); + } while ((nextTabCandidate)&&(nextTabCandidate.hasClass("disabled"))); + return nextIndexCandidate; + }; + this.previousIndex = function() { + var prevIndexCandidate=this.currentIndex(); + var prevTabCandidate=null; + do { + prevIndexCandidate--; + prevTabCandidate = $navigation.find(baseItemSelector + ($settings.withVisible ? ':visible' : '') + ":eq(" + prevIndexCandidate + ")"); + } while ((prevTabCandidate)&&(prevTabCandidate.hasClass("disabled"))); + return prevIndexCandidate; + }; + this.navigationLength = function() { + return $navigation.find(baseItemSelector + ($settings.withVisible ? ':visible' : '')).length - 1; + }; + this.activeTab = function() { + return $activeTab; + }; + this.nextTab = function() { + return $navigation.find(baseItemSelector + ':eq('+(obj.currentIndex()+1)+')').length ? $navigation.find(baseItemSelector + ':eq('+(obj.currentIndex()+1)+')') : null; + }; + this.previousTab = function() { + if(obj.currentIndex() <= 0) { + return null; + } + return $navigation.find(baseItemSelector + ':eq('+parseInt(obj.currentIndex()-1)+')'); + }; + this.show = function(index) { + var tabToShow = isNaN(index) ? + element.find(baseItemSelector + ' a[href="#' + index + '"]') : + element.find(baseItemSelector + ':eq(' + index + ') a'); + if (tabToShow.length > 0) { + historyStack.push(obj.currentIndex()); + tabToShow.tab('show'); + } + }; + this.disable = function (index) { + $navigation.find(baseItemSelector + ':eq('+index+')').addClass('disabled'); + }; + this.enable = function(index) { + $navigation.find(baseItemSelector + ':eq('+index+')').removeClass('disabled'); + }; + this.hide = function(index) { + $navigation.find(baseItemSelector + ':eq('+index+')').hide(); + }; + this.display = function(index) { + $navigation.find(baseItemSelector + ':eq('+index+')').show(); + }; + this.remove = function(args) { + var $index = args[0]; + var $removeTabPane = typeof args[1] != 'undefined' ? args[1] : false; + var $item = $navigation.find(baseItemSelector + ':eq('+$index+')'); + + // Remove the tab pane first if needed + if($removeTabPane) { + var $href = $item.find('a').attr('href'); + $($href).remove(); + } + + // Remove menu item + $item.remove(); + }; + + var innerTabClick = function (e) { + // Get the index of the clicked tab + var $ul = $navigation.find(baseItemSelector); + var clickedIndex = $ul.index($(e.currentTarget).parent(baseItemSelector)); + var $clickedTab = $( $ul[clickedIndex] ); + if($settings.onTabClick && typeof $settings.onTabClick === 'function' && $settings.onTabClick($activeTab, $navigation, obj.currentIndex(), clickedIndex, $clickedTab)===false){ + return false; + } + }; + + var innerTabShown = function (e) { + var $element = $(e.target).parent(); + var nextTab = $navigation.find(baseItemSelector).index($element); + + // If it's disabled then do not change + if($element.hasClass('disabled')) { + return false; + } + + if($settings.onTabChange && typeof $settings.onTabChange === 'function' && $settings.onTabChange($activeTab, $navigation, obj.currentIndex(), nextTab)===false){ + return false; + } + + $activeTab = $element; // activated tab + obj.fixNavigationButtons(); + }; + + this.resetWizard = function() { + + // remove the existing handlers + $('a[data-toggle="tab"]', $navigation).off('click', innerTabClick); + $('a[data-toggle="tab"]', $navigation).off('show show.bs.tab', innerTabShown); + + // reset elements based on current state of the DOM + $navigation = element.find('ul:first', element); + $activeTab = $navigation.find(baseItemSelector + '.active', element); + + // re-add handlers + $('a[data-toggle="tab"]', $navigation).on('click', innerTabClick); + $('a[data-toggle="tab"]', $navigation).on('show show.bs.tab', innerTabShown); + + obj.fixNavigationButtons(); + }; + + $navigation = element.find('ul:first', element); + $activeTab = $navigation.find(baseItemSelector + '.active', element); + + if(!$navigation.hasClass($settings.tabClass)) { + $navigation.addClass($settings.tabClass); + } + + // Load onInit + if($settings.onInit && typeof $settings.onInit === 'function'){ + $settings.onInit($activeTab, $navigation, 0); + } + + // Load onShow + if($settings.onShow && typeof $settings.onShow === 'function'){ + $settings.onShow($activeTab, $navigation, obj.nextIndex()); + } + + $('a[data-toggle="tab"]', $navigation).on('click', innerTabClick); + + // attach to both show and show.bs.tab to support Bootstrap versions 2.3.2 and 3.0.0 + $('a[data-toggle="tab"]', $navigation).on('show show.bs.tab', innerTabShown); +}; +$.fn.bootstrapWizard = function(options) { + //expose methods + if (typeof options == 'string') { + var args = Array.prototype.slice.call(arguments, 1) + if(args.length === 1) { + args.toString(); + } + return this.data('bootstrapWizard')[options](args); + } + return this.each(function(index){ + var element = $(this); + // Return early if this element already has a plugin instance + if (element.data('bootstrapWizard')) return; + // pass options to plugin constructor + var wizard = new bootstrapWizardCreate(element, options); + // Store plugin object in this element's data + element.data('bootstrapWizard', wizard); + // and then trigger initial change + wizard.fixNavigationButtons(); + }); +}; + +// expose options +$.fn.bootstrapWizard.defaults = { + withVisible: true, + tabClass: 'nav nav-pills', + nextSelector: '.wizard li.next', + previousSelector: '.wizard li.previous', + firstSelector: '.wizard li.first', + lastSelector: '.wizard li.last', + finishSelector: '.wizard li.finish', + backSelector: '.wizard li.back', + onShow: null, + onInit: null, + onNext: null, + onPrevious: null, + onLast: null, + onFirst: null, + onFinish: null, + onBack: null, + onTabChange: null, + onTabClick: null, + onTabShow: null +}; + +})(jQuery); |