| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  | /* ============================================================= | 
					
						
							| 
									
										
										
										
											2012-12-11 10:31:04 +08:00
										 |  |  |  * bootstrap-scrollspy.js v2.2.3 | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |  * http://twitter.github.com/bootstrap/javascript.html#scrollspy
 | 
					
						
							|  |  |  |  * ============================================================= | 
					
						
							| 
									
										
										
										
											2012-01-15 15:28:48 +08:00
										 |  |  |  * Copyright 2012 Twitter, Inc. | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  |  * you may not use this file except in compliance with the License. | 
					
						
							|  |  |  |  * You may obtain a copy of the License at | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  |  * See the License for the specific language governing permissions and | 
					
						
							|  |  |  |  * limitations under the License. | 
					
						
							| 
									
										
										
										
											2011-09-11 13:24:31 +08:00
										 |  |  |  * ============================================================== */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-25 09:59:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-15 07:29:53 +08:00
										 |  |  | !function ($) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   "use strict"; // jshint ;_;
 | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-23 09:28:39 +08:00
										 |  |  |  /* SCROLLSPY CLASS DEFINITION | 
					
						
							|  |  |  |   * ========================== */ | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-23 09:28:39 +08:00
										 |  |  |   function ScrollSpy(element, options) { | 
					
						
							| 
									
										
										
										
											2011-10-20 14:12:50 +08:00
										 |  |  |     var process = $.proxy(this.process, this) | 
					
						
							| 
									
										
										
										
											2012-01-25 14:33:33 +08:00
										 |  |  |       , $element = $(element).is('body') ? $(window) : $(element) | 
					
						
							| 
									
										
										
										
											2012-01-28 17:35:13 +08:00
										 |  |  |       , href | 
					
						
							| 
									
										
										
										
											2012-01-22 13:35:20 +08:00
										 |  |  |     this.options = $.extend({}, $.fn.scrollspy.defaults, options) | 
					
						
							| 
									
										
										
										
											2012-07-23 09:28:39 +08:00
										 |  |  |     this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) | 
					
						
							| 
									
										
										
										
											2012-01-25 14:33:33 +08:00
										 |  |  |     this.selector = (this.options.target | 
					
						
							| 
									
										
										
										
											2012-01-28 17:35:13 +08:00
										 |  |  |       || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
 | 
					
						
							| 
									
										
										
										
											2011-11-28 09:04:55 +08:00
										 |  |  |       || '') + ' .nav li > a' | 
					
						
							| 
									
										
										
										
											2012-04-26 12:52:05 +08:00
										 |  |  |     this.$body = $('body') | 
					
						
							| 
									
										
										
										
											2011-09-12 11:08:43 +08:00
										 |  |  |     this.refresh() | 
					
						
							| 
									
										
										
										
											2011-10-20 14:12:50 +08:00
										 |  |  |     this.process() | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ScrollSpy.prototype = { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-01 14:42:22 +08:00
										 |  |  |       constructor: ScrollSpy | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     , refresh: function () { | 
					
						
							| 
									
										
										
										
											2012-03-22 14:45:58 +08:00
										 |  |  |         var self = this | 
					
						
							|  |  |  |           , $targets | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-25 09:20:09 +08:00
										 |  |  |         this.offsets = $([]) | 
					
						
							|  |  |  |         this.targets = $([]) | 
					
						
							| 
									
										
										
										
											2012-03-22 14:45:58 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $targets = this.$body | 
					
						
							| 
									
										
										
										
											2011-11-21 12:58:04 +08:00
										 |  |  |           .find(this.selector) | 
					
						
							|  |  |  |           .map(function () { | 
					
						
							| 
									
										
										
										
											2012-04-19 04:35:14 +08:00
										 |  |  |             var $el = $(this) | 
					
						
							|  |  |  |               , href = $el.data('target') || $el.attr('href') | 
					
						
							| 
									
										
										
										
											2012-03-22 14:51:32 +08:00
										 |  |  |               , $href = /^#\w/.test(href) && $(href) | 
					
						
							| 
									
										
										
										
											2012-03-22 14:59:27 +08:00
										 |  |  |             return ( $href | 
					
						
							| 
									
										
										
										
											2012-06-03 09:15:23 +08:00
										 |  |  |               && $href.length | 
					
						
							| 
									
										
										
										
											2012-12-22 12:27:53 +08:00
										 |  |  |               && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null | 
					
						
							| 
									
										
										
										
											2012-03-22 14:45:58 +08:00
										 |  |  |           }) | 
					
						
							|  |  |  |           .sort(function (a, b) { return a[0] - b[0] }) | 
					
						
							|  |  |  |           .each(function () { | 
					
						
							|  |  |  |             self.offsets.push(this[0]) | 
					
						
							|  |  |  |             self.targets.push(this[1]) | 
					
						
							| 
									
										
										
										
											2011-11-21 12:58:04 +08:00
										 |  |  |           }) | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-20 14:12:50 +08:00
										 |  |  |     , process: function () { | 
					
						
							| 
									
										
										
										
											2012-01-22 13:35:20 +08:00
										 |  |  |         var scrollTop = this.$scrollElement.scrollTop() + this.options.offset | 
					
						
							| 
									
										
										
										
											2012-03-20 06:18:00 +08:00
										 |  |  |           , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight | 
					
						
							|  |  |  |           , maxScroll = scrollHeight - this.$scrollElement.height() | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |           , offsets = this.offsets | 
					
						
							|  |  |  |           , targets = this.targets | 
					
						
							|  |  |  |           , activeTarget = this.activeTarget | 
					
						
							|  |  |  |           , i | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-20 06:18:00 +08:00
										 |  |  |         if (scrollTop >= maxScroll) { | 
					
						
							|  |  |  |           return activeTarget != (i = targets.last()[0]) | 
					
						
							| 
									
										
										
										
											2012-03-20 06:19:01 +08:00
										 |  |  |             && this.activate ( i ) | 
					
						
							| 
									
										
										
										
											2012-03-20 06:18:00 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |         for (i = offsets.length; i--;) { | 
					
						
							|  |  |  |           activeTarget != targets[i] | 
					
						
							|  |  |  |             && scrollTop >= offsets[i] | 
					
						
							|  |  |  |             && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) | 
					
						
							| 
									
										
										
										
											2011-10-20 14:12:50 +08:00
										 |  |  |             && this.activate( targets[i] ) | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-20 14:12:50 +08:00
										 |  |  |     , activate: function (target) { | 
					
						
							|  |  |  |         var active | 
					
						
							| 
									
										
										
										
											2012-04-19 04:35:14 +08:00
										 |  |  |           , selector | 
					
						
							| 
									
										
										
										
											2011-10-20 14:12:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |         this.activeTarget = target | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-15 14:24:19 +08:00
										 |  |  |         $(this.selector) | 
					
						
							|  |  |  |           .parent('.active') | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |           .removeClass('active') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-19 04:35:14 +08:00
										 |  |  |         selector = this.selector | 
					
						
							|  |  |  |           + '[data-target="' + target + '"],' | 
					
						
							|  |  |  |           + this.selector + '[href="' + target + '"]' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         active = $(selector) | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |           .parent('li') | 
					
						
							|  |  |  |           .addClass('active') | 
					
						
							| 
									
										
										
										
											2011-10-20 14:12:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-03 10:02:30 +08:00
										 |  |  |         if (active.parent('.dropdown-menu').length)  { | 
					
						
							| 
									
										
										
										
											2012-03-20 07:09:08 +08:00
										 |  |  |           active = active.closest('li.dropdown').addClass('active') | 
					
						
							| 
									
										
										
										
											2011-10-20 14:12:50 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-03-20 07:09:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-20 11:24:46 +08:00
										 |  |  |         active.trigger('activate') | 
					
						
							| 
									
										
										
										
											2011-09-11 13:14:57 +08:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  /* SCROLLSPY PLUGIN DEFINITION | 
					
						
							|  |  |  |   * =========================== */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-08 06:06:01 +08:00
										 |  |  |   var old = $.fn.scrollspy | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-23 09:28:39 +08:00
										 |  |  |   $.fn.scrollspy = function (option) { | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  |     return this.each(function () { | 
					
						
							|  |  |  |       var $this = $(this) | 
					
						
							|  |  |  |         , data = $this.data('scrollspy') | 
					
						
							| 
									
										
										
										
											2012-01-22 13:35:20 +08:00
										 |  |  |         , options = typeof option == 'object' && option | 
					
						
							|  |  |  |       if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  |       if (typeof option == 'string') data[option]() | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-21 15:28:48 +08:00
										 |  |  |   $.fn.scrollspy.Constructor = ScrollSpy | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-22 13:35:20 +08:00
										 |  |  |   $.fn.scrollspy.defaults = { | 
					
						
							|  |  |  |     offset: 10 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-08 06:06:01 +08:00
										 |  |  |  /* SCROLLSPY NO CONFLICT | 
					
						
							|  |  |  |   * ===================== */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $.fn.scrollspy.noConflict = function () { | 
					
						
							|  |  |  |     $.fn.scrollspy = old | 
					
						
							|  |  |  |     return this | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  |  /* SCROLLSPY DATA-API | 
					
						
							| 
									
										
										
										
											2012-01-25 14:33:33 +08:00
										 |  |  |   * ================== */ | 
					
						
							| 
									
										
										
										
											2011-11-25 12:27:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-23 09:28:39 +08:00
										 |  |  |   $(window).on('load', function () { | 
					
						
							| 
									
										
										
										
											2012-01-25 14:33:33 +08:00
										 |  |  |     $('[data-spy="scroll"]').each(function () { | 
					
						
							|  |  |  |       var $spy = $(this) | 
					
						
							|  |  |  |       $spy.scrollspy($spy.data()) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2012-01-22 13:35:20 +08:00
										 |  |  |   }) | 
					
						
							| 
									
										
										
										
											2011-09-12 11:08:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-15 07:29:53 +08:00
										 |  |  | }(window.jQuery); |