From 87ce0243e55f9b1171c00b710737da2b462b4762 Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Mon, 11 Aug 2014 17:12:27 +0200 Subject: [PATCH] Version 1.2 Updated to version 1.2 from the github tag. Change-Id: I4096fba7573f5c8626a7d38252bff3529d5b00b9 --- .../pkg/jquery_bootstrap_wizard/__init__.py | 4 +- .../data/jquery.bootstrap.wizard.js | 117 +++++++++++------- 2 files changed, 73 insertions(+), 48 deletions(-) diff --git a/xstatic/pkg/jquery_bootstrap_wizard/__init__.py b/xstatic/pkg/jquery_bootstrap_wizard/__init__.py index 69ad7e5..d8c9aa1 100644 --- a/xstatic/pkg/jquery_bootstrap_wizard/__init__.py +++ b/xstatic/pkg/jquery_bootstrap_wizard/__init__.py @@ -11,9 +11,9 @@ NAME = __name__.split('.')[-1] # package name (e.g. 'foo' or 'foo_bar') # please use a all-lowercase valid python # package name -VERSION = '1.0.0' # version of the packaged files, please use the upstream +VERSION = '1.2.0' # version of the packaged files, please use the upstream # version number -BUILD = '1' # our package build number, so we can release new builds +BUILD = '0' # our package build number, so we can release new builds # with fixes for xstatic stuff. PACKAGE_VERSION = VERSION + '.' + BUILD # version used for PyPi diff --git a/xstatic/pkg/jquery_bootstrap_wizard/data/jquery.bootstrap.wizard.js b/xstatic/pkg/jquery_bootstrap_wizard/data/jquery.bootstrap.wizard.js index fd9ffc0..b556ba8 100755 --- a/xstatic/pkg/jquery_bootstrap_wizard/data/jquery.bootstrap.wizard.js +++ b/xstatic/pkg/jquery_bootstrap_wizard/data/jquery.bootstrap.wizard.js @@ -3,6 +3,7 @@ * Examples and documentation at: http://github.com/VinceG/twitter-bootstrap-wizard * version 1.0 * 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 @@ -12,12 +13,15 @@ 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"])'; // 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); @@ -28,7 +32,7 @@ var bootstrapWizardCreate = function(element, options) { if(!$activeTab.length) { // Select first one $navigation.find('a:first').tab('show'); - $activeTab = $navigation.find('li:first'); + $activeTab = $navigation.find(baseItemSelector + ':first'); } // See if we're currently in the first/last then disable the previous and last buttons @@ -61,7 +65,7 @@ var bootstrapWizardCreate = function(element, options) { $index = obj.nextIndex(); if($index > obj.navigationLength()) { } else { - $navigation.find('li:eq('+$index+') a').tab('show'); + $navigation.find(baseItemSelector + ':eq('+$index+') a').tab('show'); } }; @@ -79,7 +83,7 @@ var bootstrapWizardCreate = function(element, options) { $index = obj.previousIndex(); if($index < 0) { } else { - $navigation.find('li:eq('+$index+') a').tab('show'); + $navigation.find(baseItemSelector + ':eq('+$index+') a').tab('show'); } }; @@ -92,7 +96,7 @@ var bootstrapWizardCreate = function(element, options) { if(element.hasClass('disabled')) { return false; } - $navigation.find('li:eq(0) a').tab('show'); + $navigation.find(baseItemSelector + ':eq(0) a').tab('show'); }; this.last = function(e) { @@ -104,10 +108,10 @@ var bootstrapWizardCreate = function(element, options) { if(element.hasClass('disabled')) { return false; } - $navigation.find('li:eq('+obj.navigationLength()+') a').tab('show'); + $navigation.find(baseItemSelector + ':eq('+obj.navigationLength()+') a').tab('show'); }; this.currentIndex = function() { - return $navigation.find('li').index($activeTab); + return $navigation.find(baseItemSelector).index($activeTab); }; this.firstIndex = function() { return 0; @@ -116,48 +120,48 @@ var bootstrapWizardCreate = function(element, options) { return obj.navigationLength(); }; this.getIndex = function(e) { - return $navigation.find('li').index(e); + return $navigation.find(baseItemSelector).index(e); }; this.nextIndex = function() { - return $navigation.find('li').index($activeTab) + 1; + return $navigation.find(baseItemSelector).index($activeTab) + 1; }; this.previousIndex = function() { - return $navigation.find('li').index($activeTab) - 1; + return $navigation.find(baseItemSelector).index($activeTab) - 1; }; this.navigationLength = function() { - return $navigation.find('li').length - 1; + return $navigation.find(baseItemSelector).length - 1; }; this.activeTab = function() { return $activeTab; }; this.nextTab = function() { - return $navigation.find('li:eq('+(obj.currentIndex()+1)+')').length ? $navigation.find('li:eq('+(obj.currentIndex()+1)+')') : null; + 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('li:eq('+parseInt(obj.currentIndex()-1)+')'); + return $navigation.find(baseItemSelector + ':eq('+parseInt(obj.currentIndex()-1)+')'); }; this.show = function(index) { - return element.find('li:eq(' + index + ') a').tab('show'); + return element.find(baseItemSelector + ':eq(' + index + ') a').tab('show'); }; this.disable = function(index) { - $navigation.find('li:eq('+index+')').addClass('disabled'); + $navigation.find(baseItemSelector + ':eq('+index+')').addClass('disabled'); }; this.enable = function(index) { - $navigation.find('li:eq('+index+')').removeClass('disabled'); + $navigation.find(baseItemSelector + ':eq('+index+')').removeClass('disabled'); }; this.hide = function(index) { - $navigation.find('li:eq('+index+')').hide(); + $navigation.find(baseItemSelector + ':eq('+index+')').hide(); }; this.display = function(index) { - $navigation.find('li:eq('+index+')').show(); + $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('li:eq('+$index+')'); + var $item = $navigation.find(baseItemSelector + ':eq('+$index+')'); // Remove the tab pane first if needed if($removeTabPane) { @@ -168,9 +172,51 @@ var bootstrapWizardCreate = function(element, options) { // Remove menu item $item.remove(); }; + + var innerTabClick = function (e) { + // Get the index of the clicked tab + var clickedIndex = $navigation.find(baseItemSelector).index($(e.currentTarget).parent(baseItemSelector)); + if($settings.onTabClick && typeof $settings.onTabClick === 'function' && $settings.onTabClick($activeTab, $navigation, obj.currentIndex(), clickedIndex)===false){ + return false; + } + }; + + var innerTabShown = function (e) { // use shown instead of show to help prevent double firing + $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('shown shown.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('shown shown.bs.tab', innerTabShown); + + obj.fixNavigationButtons(); + }; $navigation = element.find('ul:first', element); - $activeTab = $navigation.find('li.active', element); + $activeTab = $navigation.find(baseItemSelector + '.active', element); if(!$navigation.hasClass($settings.tabClass)) { $navigation.addClass($settings.tabClass); @@ -186,33 +232,12 @@ var bootstrapWizardCreate = function(element, options) { $settings.onShow($activeTab, $navigation, obj.nextIndex()); } - // Work the next/previous buttons - obj.fixNavigationButtons(); + $('a[data-toggle="tab"]', $navigation).on('click', innerTabClick); - $('a[data-toggle="tab"]', $navigation).on('click', function (e) { - // Get the index of the clicked tab - var clickedIndex = $navigation.find('li').index($(e.currentTarget).parent('li')); - if($settings.onTabClick && typeof $settings.onTabClick === 'function' && $settings.onTabClick($activeTab, $navigation, obj.currentIndex(), clickedIndex)===false){ - return false; - } - }); + // attach to both shown and shown.bs.tab to support Bootstrap versions 2.3.2 and 3.0.0 + $('a[data-toggle="tab"]', $navigation).on('shown shown.bs.tab', innerTabShown); - $('a[data-toggle="tab"]', $navigation).on('shown', function (e) { // use shown instead of show to help prevent double firing - $element = $(e.target).parent(); - var nextTab = $navigation.find('li').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.fixNavigationButtons(); }; $.fn.bootstrapWizard = function(options) { //expose methods @@ -247,7 +272,7 @@ $.fn.bootstrapWizard.defaults = { onPrevious: null, onLast: null, onFirst: null, - onTabChange: null, + onTabChange: null, onTabClick: null, onTabShow: null };