mirror of
				https://github.com/arsenetar/pelican-red.git
				synced 2025-09-11 19:58:18 +00:00 
			
		
		
		
	Restructure javascript directory, update zepto.js and jquery.js
This commit is contained in:
		
							parent
							
								
									1e38b42edd
								
							
						
					
					
						commit
						148b5b602a
					
				
							
								
								
									
										18
									
								
								static/js/vendor/README.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								static/js/vendor/README.md
									
									
									
									
										vendored
									
									
								
							| @ -1,18 +0,0 @@ | ||||
| Vendor JavaScript Files | ||||
| ======================== | ||||
| 
 | ||||
| This directory contains the following scripts which are used by pelican-red. | ||||
| 
 | ||||
| * jQuery 1.10.0 compressed | ||||
| * Zepto.js 1.0 compressed | ||||
| * Foundation 4 JavaScript | ||||
|   *  Custom Modernizer from Foundation 4 | ||||
|   *  Foundation.js | ||||
|   *  foundation.alerts | ||||
|   *  foundation.clearing | ||||
|   *  foundation.dropdown | ||||
|   *  foundation.forms | ||||
|   *  foundation.magellan | ||||
|   *  foundation.orbit | ||||
|   *  foundation.reveal | ||||
|   *  foundation.section | ||||
							
								
								
									
										429
									
								
								static/js/vendor/foundation.forms.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										429
									
								
								static/js/vendor/foundation.forms.js
									
									
									
									
										vendored
									
									
								
							| @ -1,429 +0,0 @@ | ||||
| /*jslint unparam: true, browser: true, indent: 2 */ | ||||
| 
 | ||||
| ;(function ($, window, document, undefined) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   Foundation.libs.forms = { | ||||
|     name : 'forms', | ||||
| 
 | ||||
|     version : '4.0.4', | ||||
| 
 | ||||
|     settings : { | ||||
|       disable_class: 'no-custom' | ||||
|     }, | ||||
| 
 | ||||
|     init : function (scope, method, options) { | ||||
|       this.scope = scope || this.scope; | ||||
| 
 | ||||
|       if (typeof method === 'object') { | ||||
|         $.extend(true, this.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method != 'string') { | ||||
|         if (!this.settings.init) { | ||||
|           this.events(); | ||||
|         } | ||||
| 
 | ||||
|         this.assemble(); | ||||
| 
 | ||||
|         return this.settings.init; | ||||
|       } else { | ||||
|         return this[method].call(this, options); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     assemble : function () { | ||||
|       $('form.custom input[type="radio"]', $(this.scope)).not('[data-customforms="disabled"]') | ||||
|         .each(this.append_custom_markup); | ||||
|       $('form.custom input[type="checkbox"]', $(this.scope)).not('[data-customforms="disabled"]') | ||||
|         .each(this.append_custom_markup); | ||||
|       $('form.custom select', $(this.scope)) | ||||
|           .not('[data-customforms="disabled"]') | ||||
|           .not('[multiple=multiple]') | ||||
|         .each(this.append_custom_select); | ||||
|     }, | ||||
| 
 | ||||
|     events : function () { | ||||
|       var self = this; | ||||
| 
 | ||||
|       $(this.scope) | ||||
|         .on('click.fndtn.forms', 'form.custom span.custom.checkbox', function (e) { | ||||
|           e.preventDefault(); | ||||
|           e.stopPropagation(); | ||||
|           self.toggle_checkbox($(this)); | ||||
|         }) | ||||
|         .on('click.fndtn.forms', 'form.custom span.custom.radio', function (e) { | ||||
|           e.preventDefault(); | ||||
|           e.stopPropagation(); | ||||
|           self.toggle_radio($(this)); | ||||
|         }) | ||||
|         .on('change.fndtn.forms', 'form.custom select:not([data-customforms="disabled"])', function (e) { | ||||
|           self.refresh_custom_select($(this)); | ||||
|         }) | ||||
|         .on('click.fndtn.forms', 'form.custom label', function (e) { | ||||
|           var $associatedElement = $('#' + self.escape($(this).attr('for')) + ':not([data-customforms="disabled"])'), | ||||
|               $customCheckbox, | ||||
|               $customRadio; | ||||
|           if ($associatedElement.length !== 0) { | ||||
|             if ($associatedElement.attr('type') === 'checkbox') { | ||||
|               e.preventDefault(); | ||||
|               $customCheckbox = $(this).find('span.custom.checkbox'); | ||||
|               //the checkbox might be outside after the label or inside of another element
 | ||||
|               if ($customCheckbox.length == 0) { | ||||
|                 $customCheckbox = $associatedElement.add(this).siblings('span.custom.checkbox').first(); | ||||
|               } | ||||
|               self.toggle_checkbox($customCheckbox); | ||||
|             } else if ($associatedElement.attr('type') === 'radio') { | ||||
|               e.preventDefault(); | ||||
|               $customRadio = $(this).find('span.custom.radio'); | ||||
|               //the radio might be outside after the label or inside of another element
 | ||||
|               if ($customRadio.length == 0) { | ||||
|                 $customRadio = $associatedElement.add(this).siblings('span.custom.radio').first(); | ||||
|               } | ||||
|               self.toggle_radio($customRadio); | ||||
|             } | ||||
|           } | ||||
|         }) | ||||
|         .on('click.fndtn.forms', 'form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector', function (e) { | ||||
|           var $this = $(this), | ||||
|               $dropdown = $this.closest('div.custom.dropdown'), | ||||
|               $select = $dropdown.prev(); | ||||
| 
 | ||||
|           // make sure other dropdowns close
 | ||||
|           if(!$dropdown.hasClass('open')) | ||||
|             $(self.scope).trigger('click'); | ||||
| 
 | ||||
|           e.preventDefault(); | ||||
|           if (false === $select.is(':disabled')) { | ||||
|             $dropdown.toggleClass('open'); | ||||
| 
 | ||||
|             if ($dropdown.hasClass('open')) { | ||||
|               $(self.scope).on('click.fndtn.forms.customdropdown', function () { | ||||
|                 $dropdown.removeClass('open'); | ||||
|                 $(self.scope).off('.fndtn.forms.customdropdown'); | ||||
|               }); | ||||
|             } else { | ||||
|               $(self.scope).on('.fndtn.forms.customdropdown'); | ||||
|             } | ||||
|             return false; | ||||
|           } | ||||
|         }) | ||||
|         .on('click.fndtn.forms touchend.fndtn.forms', 'form.custom div.custom.dropdown li', function (e) { | ||||
|           var $this = $(this), | ||||
|               $customDropdown = $this.closest('div.custom.dropdown'), | ||||
|               $select = $customDropdown.prev(), | ||||
|               selectedIndex = 0; | ||||
| 
 | ||||
|           e.preventDefault(); | ||||
|           e.stopPropagation(); | ||||
| 
 | ||||
|           if ( ! $(this).hasClass('disabled')) { | ||||
|             $('div.dropdown').not($customDropdown).removeClass('open'); | ||||
| 
 | ||||
|             var $oldThis= $this | ||||
|               .closest('ul') | ||||
|               .find('li.selected'); | ||||
|             $oldThis.removeClass('selected'); | ||||
| 
 | ||||
|             $this.addClass('selected'); | ||||
| 
 | ||||
|             $customDropdown | ||||
|               .removeClass('open') | ||||
|               .find('a.current') | ||||
|               .html($this.html()); | ||||
| 
 | ||||
|             $this.closest('ul').find('li').each(function (index) { | ||||
|               if ($this[0] == this) { | ||||
|                 selectedIndex = index; | ||||
|               } | ||||
| 
 | ||||
|             }); | ||||
|             $select[0].selectedIndex = selectedIndex; | ||||
| 
 | ||||
|             //store the old value in data
 | ||||
|             $select.data('prevalue', $oldThis.html()); | ||||
|             $select.trigger('change'); | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|       $(window).on('keydown', function (e) { | ||||
|         var focus = document.activeElement, | ||||
|             dropdown = $('.custom.dropdown.open'); | ||||
| 
 | ||||
|         if (dropdown.length > 0) { | ||||
|           e.preventDefault(); | ||||
| 
 | ||||
|           if (e.which === 13) { | ||||
|             dropdown.find('li.selected').trigger('click'); | ||||
|           } | ||||
| 
 | ||||
|           if (e.which === 38) { | ||||
|             var current = dropdown.find('li.selected'), | ||||
|                 prev = current.prev(':not(.disabled)'); | ||||
| 
 | ||||
|             if (prev.length > 0) { | ||||
|               current.removeClass('selected'); | ||||
|               prev.addClass('selected'); | ||||
|             } | ||||
|           } else if (e.which === 40) { | ||||
|             var current = dropdown.find('li.selected'), | ||||
|                 next = current.next(':not(.disabled)'); | ||||
| 
 | ||||
|             if (next.length > 0) { | ||||
|               current.removeClass('selected'); | ||||
|               next.addClass('selected'); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
| 
 | ||||
|       this.settings.init = true; | ||||
|     }, | ||||
| 
 | ||||
|     append_custom_markup : function (idx, sel) { | ||||
|       var $this = $(sel).addClass('hidden-field'), | ||||
|           type  = $this.attr('type'), | ||||
|           $span = $this.next('span.custom.' + type); | ||||
| 
 | ||||
|       if ($span.length === 0) { | ||||
|         $span = $('<span class="custom ' + type + '"></span>').insertAfter($this); | ||||
|       } | ||||
| 
 | ||||
|       $span.toggleClass('checked', $this.is(':checked')); | ||||
|       $span.toggleClass('disabled', $this.is(':disabled')); | ||||
|     }, | ||||
| 
 | ||||
|     append_custom_select : function (idx, sel) { | ||||
|       var self = Foundation.libs.forms, | ||||
|           $this = $( sel ), | ||||
|           $customSelect = $this.next( 'div.custom.dropdown' ), | ||||
|           $customList = $customSelect.find( 'ul' ), | ||||
|           $selectCurrent = $customSelect.find( ".current" ), | ||||
|           $selector = $customSelect.find( ".selector" ), | ||||
|           $options = $this.find( 'option' ), | ||||
|           $selectedOption = $options.filter( ':selected' ), | ||||
|           copyClasses = $this.attr('class') ? $this.attr('class').split(' ') : [], | ||||
|           maxWidth = 0, | ||||
|           liHtml = '', | ||||
|           $listItems, | ||||
|           $currentSelect = false; | ||||
| 
 | ||||
|       if ($this.hasClass(self.settings.disable_class)) return; | ||||
| 
 | ||||
|       if ($customSelect.length === 0) { | ||||
|         var customSelectSize = $this.hasClass( 'small' )   ? 'small'   : | ||||
|                                $this.hasClass( 'medium' )  ? 'medium'  : | ||||
|                                $this.hasClass( 'large' )   ? 'large'   : | ||||
|                                $this.hasClass( 'expand' )  ? 'expand'  : ''; | ||||
| 
 | ||||
|         $customSelect = $('<div class="' + ['custom', 'dropdown', customSelectSize ].concat(copyClasses).filter(function(item, idx,arr){ if(item == '') return false; return arr.indexOf(item) == idx; }).join( ' ' ) + '"><a href="#" class="selector"></a><ul /></div>'); | ||||
|         $selector = $customSelect.find(".selector"); | ||||
|         $customList = $customSelect.find("ul"); | ||||
|         liHtml = $options.map(function() { return "<li>" + $( this ).html() + "</li>"; } ).get().join( '' ); | ||||
|         $customList.append(liHtml); | ||||
|         $currentSelect = $customSelect.prepend('<a href="#" class="current">' + $selectedOption.html() + '</a>' ).find( ".current" ); | ||||
|         $this | ||||
|           .after( $customSelect ) | ||||
|           .addClass('hidden-field'); | ||||
| 
 | ||||
|       } else { | ||||
|         liHtml = $options.map(function() { | ||||
|             return "<li>" + $( this ).html() + "</li>"; | ||||
|           }) | ||||
|           .get().join(''); | ||||
|         $customList | ||||
|           .html('') | ||||
|           .append(liHtml); | ||||
| 
 | ||||
|       } // endif $customSelect.length === 0
 | ||||
|       $customSelect.toggleClass('disabled', $this.is( ':disabled' ) ); | ||||
|       $listItems = $customList.find( 'li' ); | ||||
| 
 | ||||
|       $options.each( function ( index ) { | ||||
|         if ( this.selected ) { | ||||
|           $listItems.eq( index ).addClass( 'selected' ); | ||||
| 
 | ||||
|           if ($currentSelect) { | ||||
|             $currentSelect.html( $( this ).html() ); | ||||
|           } | ||||
| 
 | ||||
|         } | ||||
|         if ($(this).is(':disabled')) { | ||||
|           $listItems.eq( index ).addClass( 'disabled' ); | ||||
|         } | ||||
|       }); | ||||
| 
 | ||||
|       //
 | ||||
|       // If we're not specifying a predetermined form size.
 | ||||
|       //
 | ||||
|       if (!$customSelect.is('.small, .medium, .large, .expand')) { | ||||
| 
 | ||||
|         // ------------------------------------------------------------------------------------
 | ||||
|         // This is a work-around for when elements are contained within hidden parents.
 | ||||
|         // For example, when custom-form elements are inside of a hidden reveal modal.
 | ||||
|         //
 | ||||
|         // We need to display the current custom list element as well as hidden parent elements
 | ||||
|         // in order to properly calculate the list item element's width property.
 | ||||
|         // -------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|         $customSelect.addClass( 'open' ); | ||||
|         //
 | ||||
|         // Quickly, display all parent elements.
 | ||||
|         // This should help us calcualate the width of the list item's within the drop down.
 | ||||
|         //
 | ||||
|         var self = Foundation.libs.forms; | ||||
|         self.hidden_fix.adjust( $customList ); | ||||
| 
 | ||||
|         maxWidth = ( self.outerWidth($listItems) > maxWidth ) ? self.outerWidth($listItems) : maxWidth; | ||||
| 
 | ||||
|         Foundation.libs.forms.hidden_fix.reset(); | ||||
| 
 | ||||
|         $customSelect.removeClass( 'open' ); | ||||
| 
 | ||||
|       } // endif
 | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     refresh_custom_select : function ($select) { | ||||
|       var self = this; | ||||
|       var maxWidth = 0, | ||||
|         $customSelect = $select.next(), | ||||
|         $options = $select.find('option'); | ||||
| 
 | ||||
|       $customSelect.find('ul').html(''); | ||||
| 
 | ||||
|       $options.each(function () { | ||||
|         var $li = $('<li>' + $(this).html() + '</li>'); | ||||
|         $customSelect.find('ul').append($li); | ||||
|       }); | ||||
| 
 | ||||
|       // re-populate
 | ||||
|       $options.each(function (index) { | ||||
|         if (this.selected) { | ||||
|           $customSelect.find('li').eq(index).addClass('selected'); | ||||
|           $customSelect.find('.current').html($(this).html()); | ||||
|         } | ||||
|         if ($(this).is(':disabled')) { | ||||
|           $customSelect.find('li').eq(index).addClass('disabled'); | ||||
|         } | ||||
|       }); | ||||
| 
 | ||||
|       // fix width
 | ||||
|       $customSelect.removeAttr('style') | ||||
|         .find('ul').removeAttr('style'); | ||||
|       $customSelect.find('li').each(function () { | ||||
|         $customSelect.addClass('open'); | ||||
|         if (self.outerWidth($(this)) > maxWidth) { | ||||
|           maxWidth = self.outerWidth($(this)); | ||||
|         } | ||||
|         $customSelect.removeClass('open'); | ||||
|       }); | ||||
|     }, | ||||
| 
 | ||||
|     toggle_checkbox : function ($element) { | ||||
|       var $input = $element.prev(), | ||||
|           input = $input[0]; | ||||
| 
 | ||||
|       if (false === $input.is(':disabled')) { | ||||
|         input.checked = ((input.checked) ? false : true); | ||||
|         $element.toggleClass('checked'); | ||||
| 
 | ||||
|         $input.trigger('change'); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     toggle_radio : function ($element) { | ||||
|       var $input = $element.prev(), | ||||
|           $form = $input.closest('form.custom'), | ||||
|           input = $input[0]; | ||||
| 
 | ||||
|       if (false === $input.is(':disabled')) { | ||||
|         $form.find('input[type="radio"][name="' + this.escape($input.attr('name')) + '"]').next().not($element).removeClass('checked'); | ||||
|         if ( !$element.hasClass('checked') ) { | ||||
|           $element.toggleClass('checked'); | ||||
|         } | ||||
|         input.checked = $element.hasClass('checked'); | ||||
| 
 | ||||
|         $input.trigger('change'); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     escape : function (text) { | ||||
|       return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); | ||||
|     }, | ||||
| 
 | ||||
|     hidden_fix : { | ||||
|       /** | ||||
|        * Sets all hidden parent elements and self to visibile. | ||||
|        * | ||||
|        * @method adjust | ||||
|        * @param {jQuery Object} $child | ||||
|        */ | ||||
| 
 | ||||
|       // We'll use this to temporarily store style properties.
 | ||||
|       tmp : [], | ||||
| 
 | ||||
|       // We'll use this to set hidden parent elements.
 | ||||
|       hidden : null, | ||||
| 
 | ||||
|       adjust : function( $child ) { | ||||
|         // Internal reference.
 | ||||
|         var _self = this; | ||||
| 
 | ||||
|         // Set all hidden parent elements, including this element.
 | ||||
|         _self.hidden = $child.parents().andSelf().filter( ":hidden" ); | ||||
| 
 | ||||
|         // Loop through all hidden elements.
 | ||||
|         _self.hidden.each( function() { | ||||
| 
 | ||||
|           // Cache the element.
 | ||||
|           var $elem = $( this ); | ||||
| 
 | ||||
|           // Store the style attribute.
 | ||||
|           // Undefined if element doesn't have a style attribute.
 | ||||
|           _self.tmp.push( $elem.attr( 'style' ) ); | ||||
| 
 | ||||
|           // Set the element's display property to block,
 | ||||
|           // but ensure it's visibility is hidden.
 | ||||
|           $elem.css( { 'visibility' : 'hidden', 'display' : 'block' } ); | ||||
|         }); | ||||
| 
 | ||||
|       }, // end adjust
 | ||||
| 
 | ||||
|       /** | ||||
|        * Resets the elements previous state. | ||||
|        * | ||||
|        * @method reset | ||||
|        */ | ||||
|       reset : function() { | ||||
|         // Internal reference.
 | ||||
|         var _self = this; | ||||
|         // Loop through our hidden element collection.
 | ||||
|         _self.hidden.each( function( i ) { | ||||
|           // Cache this element.
 | ||||
|           var $elem = $( this ), | ||||
|               _tmp = _self.tmp[ i ]; // Get the stored 'style' value for this element.
 | ||||
| 
 | ||||
|           // If the stored value is undefined.
 | ||||
|           if( _tmp === undefined ) | ||||
|             // Remove the style attribute.
 | ||||
|             $elem.removeAttr( 'style' ); | ||||
|           else | ||||
|             // Otherwise, reset the element style attribute.
 | ||||
|             $elem.attr( 'style', _tmp ); | ||||
| 
 | ||||
|         }); | ||||
|         // Reset the tmp array.
 | ||||
|         _self.tmp = []; | ||||
|         // Reset the hidden elements variable.
 | ||||
|         _self.hidden = null; | ||||
| 
 | ||||
|       } // end reset
 | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     off : function () { | ||||
|       $(this.scope).off('.fndtn.forms'); | ||||
|     } | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
| @ -6,7 +6,7 @@ | ||||
|   Foundation.libs.alerts = { | ||||
|     name : 'alerts', | ||||
| 
 | ||||
|     version : '4.0.0', | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     settings : { | ||||
|       speed: 300, // fade out speed
 | ||||
| @ -20,8 +20,8 @@ | ||||
|         $.extend(true, this.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method != 'string') { | ||||
|         if (!this.settings.init) this.events(); | ||||
|       if (typeof method !== 'string') { | ||||
|         if (!this.settings.init) { this.events(); } | ||||
| 
 | ||||
|         return this.settings.init; | ||||
|       } else { | ||||
| @ -45,6 +45,8 @@ | ||||
| 
 | ||||
|     off : function () { | ||||
|       $(this.scope).off('.fndtn.alerts'); | ||||
|     } | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () {} | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
| @ -6,7 +6,7 @@ | ||||
|   Foundation.libs.clearing = { | ||||
|     name : 'clearing', | ||||
| 
 | ||||
|     version : '4.1.3', | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     settings : { | ||||
|       templates : { | ||||
| @ -33,7 +33,7 @@ | ||||
|         options = $.extend(true, this.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method != 'string') { | ||||
|       if (typeof method !== 'string') { | ||||
|         $(this.scope).find('ul[data-clearing]').each(function () { | ||||
|           var $el = $(this), | ||||
|               options = options || {}, | ||||
| @ -79,9 +79,9 @@ | ||||
| 
 | ||||
|             // if clearing is open and the current image is
 | ||||
|             // clicked, go to the next image in sequence
 | ||||
|             if (target.hasClass('visible')  | ||||
|               && current[0] === target[0]  | ||||
|               && next.length > 0 && self.is_open(current)) { | ||||
|             if (target.hasClass('visible') &&  | ||||
|               current[0] === target[0] &&  | ||||
|               next.length > 0 && self.is_open(current)) { | ||||
|               target = next; | ||||
|               image = target.find('img'); | ||||
|             } | ||||
| @ -388,7 +388,7 @@ | ||||
| 
 | ||||
|       if (caption) { | ||||
|         container | ||||
|           .text(caption) | ||||
|           .html(caption) | ||||
|           .show(); | ||||
|       } else { | ||||
|         container | ||||
							
								
								
									
										74
									
								
								static/js/vendor/foundation/foundation.cookie.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								static/js/vendor/foundation/foundation.cookie.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | ||||
| /*! | ||||
|  * jQuery Cookie Plugin v1.3 | ||||
|  * https://github.com/carhartl/jquery-cookie
 | ||||
|  * | ||||
|  * Copyright 2011, Klaus Hartl | ||||
|  * Dual licensed under the MIT or GPL Version 2 licenses. | ||||
|  * http://www.opensource.org/licenses/mit-license.php
 | ||||
|  * http://www.opensource.org/licenses/GPL-2.0
 | ||||
|  * | ||||
|  * Modified to work with Zepto.js by ZURB | ||||
|  */ | ||||
| (function ($, document, undefined) { | ||||
| 
 | ||||
|   var pluses = /\+/g; | ||||
| 
 | ||||
|   function raw(s) { | ||||
|     return s; | ||||
|   } | ||||
| 
 | ||||
|   function decoded(s) { | ||||
|     return decodeURIComponent(s.replace(pluses, ' ')); | ||||
|   } | ||||
| 
 | ||||
|   var config = $.cookie = function (key, value, options) { | ||||
| 
 | ||||
|     // write
 | ||||
|     if (value !== undefined) { | ||||
|       options = $.extend({}, config.defaults, options); | ||||
| 
 | ||||
|       if (value === null) { | ||||
|         options.expires = -1; | ||||
|       } | ||||
| 
 | ||||
|       if (typeof options.expires === 'number') { | ||||
|         var days = options.expires, t = options.expires = new Date(); | ||||
|         t.setDate(t.getDate() + days); | ||||
|       } | ||||
| 
 | ||||
|       value = config.json ? JSON.stringify(value) : String(value); | ||||
| 
 | ||||
|       return (document.cookie = [ | ||||
|         encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), | ||||
|         options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
 | ||||
|         options.path    ? '; path=' + options.path : '', | ||||
|         options.domain  ? '; domain=' + options.domain : '', | ||||
|         options.secure  ? '; secure' : '' | ||||
|       ].join('')); | ||||
|     } | ||||
| 
 | ||||
|     // read
 | ||||
|     var decode = config.raw ? raw : decoded; | ||||
|     var cookies = document.cookie.split('; '); | ||||
|     for (var i = 0, l = cookies.length; i < l; i++) { | ||||
|       var parts = cookies[i].split('='); | ||||
|       if (decode(parts.shift()) === key) { | ||||
|         var cookie = decode(parts.join('=')); | ||||
|         return config.json ? JSON.parse(cookie) : cookie; | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     return null; | ||||
|   }; | ||||
| 
 | ||||
|   config.defaults = {}; | ||||
| 
 | ||||
|   $.removeCookie = function (key, options) { | ||||
|     if ($.cookie(key) !== null) { | ||||
|       $.cookie(key, null, options); | ||||
|       return true; | ||||
|     } | ||||
|     return false; | ||||
|   }; | ||||
| 
 | ||||
| })(Foundation.zj, document); | ||||
| @ -6,23 +6,24 @@ | ||||
|   Foundation.libs.dropdown = { | ||||
|     name : 'dropdown', | ||||
| 
 | ||||
|     version : '4.1.3', | ||||
|     version : '4.2.0', | ||||
| 
 | ||||
|     settings : { | ||||
|       activeClass: 'open', | ||||
|       is_hover: false, | ||||
|       opened: function(){}, | ||||
|       closed: function(){} | ||||
|     }, | ||||
| 
 | ||||
|     init : function (scope, method, options) { | ||||
|       this.scope = scope || this.scope; | ||||
|       Foundation.inherit(this, 'throttle scrollLeft'); | ||||
|       Foundation.inherit(this, 'throttle scrollLeft data_options'); | ||||
| 
 | ||||
|       if (typeof method === 'object') { | ||||
|         $.extend(true, this.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method != 'string') { | ||||
|       if (typeof method !== 'string') { | ||||
| 
 | ||||
|         if (!this.settings.init) { | ||||
|           this.events(); | ||||
| @ -39,8 +40,19 @@ | ||||
| 
 | ||||
|       $(this.scope) | ||||
|         .on('click.fndtn.dropdown', '[data-dropdown]', function (e) { | ||||
|             e.preventDefault(); | ||||
|             self.toggle($(this)); | ||||
|           var settings = $.extend({}, self.settings, self.data_options($(this))); | ||||
|           e.preventDefault(); | ||||
| 
 | ||||
|           if (!settings.is_hover) self.toggle($(this)); | ||||
|         }) | ||||
|         .on('mouseenter', '[data-dropdown]', function (e) { | ||||
|           var settings = $.extend({}, self.settings, self.data_options($(this))); | ||||
|           if (settings.is_hover) self.toggle($(this)); | ||||
|         }) | ||||
|         .on('mouseleave', '[data-dropdown-content]', function (e) { | ||||
|           var target = $('[data-dropdown="' + $(this).attr('id') + '"]'), | ||||
|               settings = $.extend({}, self.settings, self.data_options(target)); | ||||
|           if (settings.is_hover) self.close.call(self, $(this)); | ||||
|         }) | ||||
|         .on('opened.fndtn.dropdown', '[data-dropdown-content]', this.settings.opened) | ||||
|         .on('closed.fndtn.dropdown', '[data-dropdown-content]', this.settings.closed); | ||||
| @ -93,6 +105,7 @@ | ||||
|       if (dropdown.hasClass(this.settings.activeClass)) { | ||||
|         this.close.call(this, dropdown); | ||||
|       } else { | ||||
|         this.close.call(this, $('[data-dropdown-content]')) | ||||
|         this.open.call(this, dropdown, target); | ||||
|       } | ||||
|     }, | ||||
| @ -107,8 +120,9 @@ | ||||
|     }, | ||||
| 
 | ||||
|     css : function (dropdown, target) { | ||||
|       var offset_parent = dropdown.offsetParent(); | ||||
|       // temporary workaround until 4.2
 | ||||
|       if (/body/i.test(dropdown.offsetParent()[0].nodeName)) { | ||||
|       if (offset_parent.length > 0 && /body/i.test(dropdown.offsetParent()[0].nodeName)) { | ||||
|         var position = target.offset(); | ||||
|         position.top -= dropdown.offsetParent().offset().top; | ||||
|         position.left -= dropdown.offsetParent().offset().left; | ||||
| @ -127,6 +141,9 @@ | ||||
|       } else { | ||||
|         if (!Foundation.rtl && $(window).width() > this.outerWidth(dropdown) + target.offset().left) { | ||||
|           var left = position.left; | ||||
|           if (dropdown.hasClass('right')) { | ||||
|             dropdown.removeClass('right'); | ||||
|           } | ||||
|         } else { | ||||
|           if (!dropdown.hasClass('right')) { | ||||
|             dropdown.addClass('right'); | ||||
| @ -154,6 +171,8 @@ | ||||
|       $(window).off('.fndtn.dropdown'); | ||||
|       $('[data-dropdown-content]').off('.fndtn.dropdown'); | ||||
|       this.settings.init = false; | ||||
|     } | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () {} | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
							
								
								
									
										525
									
								
								static/js/vendor/foundation/foundation.forms.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										525
									
								
								static/js/vendor/foundation/foundation.forms.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,525 @@ | ||||
| (function ($, window, document, undefined) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   Foundation.libs.forms = { | ||||
|     name: 'forms', | ||||
| 
 | ||||
|     version: '4.2.2', | ||||
| 
 | ||||
|     cache: {}, | ||||
| 
 | ||||
|     settings: { | ||||
|       disable_class: 'no-custom', | ||||
|       last_combo : null | ||||
|     }, | ||||
| 
 | ||||
|     init: function (scope, method, options) { | ||||
| 
 | ||||
|       if (typeof method === 'object') { | ||||
|         $.extend(true, this.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method !== 'string') { | ||||
|         if (!this.settings.init) { | ||||
|           this.events(); | ||||
|         } | ||||
| 
 | ||||
|         this.assemble(); | ||||
| 
 | ||||
|         return this.settings.init; | ||||
|       } else { | ||||
|         return this[method].call(this, options); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     assemble: function () { | ||||
|       $('form.custom input[type="radio"]', $(this.scope)) | ||||
|         .not('[data-customforms="disabled"]') | ||||
|         .not('.' + this.settings.disable_class) | ||||
|         .each(this.append_custom_markup); | ||||
|       $('form.custom input[type="checkbox"]', $(this.scope)) | ||||
|         .not('[data-customforms="disabled"]') | ||||
|         .not('.' + this.settings.disable_class) | ||||
|         .each(this.append_custom_markup); | ||||
|       $('form.custom select', $(this.scope)) | ||||
|         .not('[data-customforms="disabled"]') | ||||
|         .not('.' + this.settings.disable_class) | ||||
|         .not('[multiple=multiple]') | ||||
|         .each(this.append_custom_select); | ||||
|     }, | ||||
| 
 | ||||
|     events: function () { | ||||
|       var self = this; | ||||
| 
 | ||||
|       $(this.scope) | ||||
|         .on('click.fndtn.forms', 'form.custom span.custom.checkbox', function (e) { | ||||
|           e.preventDefault(); | ||||
|           e.stopPropagation(); | ||||
|           self.toggle_checkbox($(this)); | ||||
|         }) | ||||
|         .on('click.fndtn.forms', 'form.custom span.custom.radio', function (e) { | ||||
|           e.preventDefault(); | ||||
|           e.stopPropagation(); | ||||
|           self.toggle_radio($(this)); | ||||
|         }) | ||||
|         .on('change.fndtn.forms', 'form.custom select', function (e, force_refresh) { | ||||
|           if ($(this).is('[data-customforms="disabled"]')) return; | ||||
|           self.refresh_custom_select($(this), force_refresh); | ||||
|         }) | ||||
|         .on('click.fndtn.forms', 'form.custom label', function (e) { | ||||
|           if ($(e.target).is('label')) { | ||||
|             var $associatedElement = $('#' + self.escape($(this).attr('for'))).not('[data-customforms="disabled"]'), | ||||
|               $customCheckbox, | ||||
|               $customRadio; | ||||
| 
 | ||||
|             if ($associatedElement.length !== 0) { | ||||
|               if ($associatedElement.attr('type') === 'checkbox') { | ||||
|                 e.preventDefault(); | ||||
|                 $customCheckbox = $(this).find('span.custom.checkbox'); | ||||
|                 //the checkbox might be outside after the label or inside of another element
 | ||||
|                 if ($customCheckbox.length === 0) { | ||||
|                   $customCheckbox = $associatedElement.add(this).siblings('span.custom.checkbox').first(); | ||||
|                 } | ||||
|                 self.toggle_checkbox($customCheckbox); | ||||
|               } else if ($associatedElement.attr('type') === 'radio') { | ||||
|                 e.preventDefault(); | ||||
|                 $customRadio = $(this).find('span.custom.radio'); | ||||
|                 //the radio might be outside after the label or inside of another element
 | ||||
|                 if ($customRadio.length === 0) { | ||||
|                   $customRadio = $associatedElement.add(this).siblings('span.custom.radio').first(); | ||||
|                 } | ||||
|                 self.toggle_radio($customRadio); | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         }) | ||||
|         .on('mousedown.fndtn.forms', 'form.custom div.custom.dropdown', function () { | ||||
|           return false; | ||||
|         }) | ||||
|         .on('click.fndtn.forms', 'form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector', function (e) { | ||||
|           var $this = $(this), | ||||
|               $dropdown = $this.closest('div.custom.dropdown'), | ||||
|               $select = getFirstPrevSibling($dropdown, 'select'); | ||||
| 
 | ||||
|           // make sure other dropdowns close
 | ||||
|           if (!$dropdown.hasClass('open')) $(self.scope).trigger('click'); | ||||
| 
 | ||||
|           e.preventDefault(); | ||||
|           if (false === $select.is(':disabled')) { | ||||
|             $dropdown.toggleClass('open'); | ||||
| 
 | ||||
|             if ($dropdown.hasClass('open')) { | ||||
|               $(self.scope).on('click.fndtn.forms.customdropdown', function () { | ||||
|                 $dropdown.removeClass('open'); | ||||
|                 $(self.scope).off('.fndtn.forms.customdropdown'); | ||||
|               }); | ||||
|             } else { | ||||
|               $(self.scope).on('.fndtn.forms.customdropdown'); | ||||
|             } | ||||
|             return false; | ||||
|           } | ||||
|         }) | ||||
|         .on('click.fndtn.forms touchend.fndtn.forms', 'form.custom div.custom.dropdown li', function (e) { | ||||
|           var $this = $(this), | ||||
|               $customDropdown = $this.closest('div.custom.dropdown'), | ||||
|               $select = getFirstPrevSibling($customDropdown, 'select'), | ||||
|               selectedIndex = 0; | ||||
| 
 | ||||
|           e.preventDefault(); | ||||
|           e.stopPropagation(); | ||||
| 
 | ||||
|           if (!$(this).hasClass('disabled')) { | ||||
|             $('div.dropdown').not($customDropdown).removeClass('open'); | ||||
| 
 | ||||
|             var $oldThis = $this.closest('ul') | ||||
|               .find('li.selected'); | ||||
|             $oldThis.removeClass('selected'); | ||||
| 
 | ||||
|             $this.addClass('selected'); | ||||
| 
 | ||||
|             $customDropdown.removeClass('open') | ||||
|               .find('a.current') | ||||
|               .text($this.text()); | ||||
| 
 | ||||
|             $this.closest('ul').find('li').each(function (index) { | ||||
|               if ($this[0] === this) { | ||||
|                 selectedIndex = index; | ||||
|               } | ||||
|             }); | ||||
|             $select[0].selectedIndex = selectedIndex; | ||||
| 
 | ||||
|             //store the old value in data
 | ||||
|             $select.data('prevalue', $oldThis.html()); | ||||
|             $select.trigger('change'); | ||||
|           } | ||||
|       }); | ||||
| 
 | ||||
|       $(window).on('keydown', function (e) { | ||||
|         var focus = document.activeElement, | ||||
|             self = Foundation.libs.forms, | ||||
|             dropdown = $('.custom.dropdown.open'); | ||||
| 
 | ||||
|         if (dropdown.length > 0) { | ||||
|           e.preventDefault(); | ||||
| 
 | ||||
|           if (e.which === 13) { | ||||
|             dropdown.find('li.selected').trigger('click'); | ||||
|           } | ||||
| 
 | ||||
|           if (e.which === 27) { | ||||
|             dropdown.removeClass('open'); | ||||
|           } | ||||
| 
 | ||||
|           if (e.which >= 65 && e.which <= 90) { | ||||
|             var next = self.go_to(dropdown, e.which), | ||||
|                 current = dropdown.find('li.selected'); | ||||
| 
 | ||||
|             if (next) { | ||||
|               current.removeClass('selected'); | ||||
|               self.scrollTo(next.addClass('selected'), 300); | ||||
|             } | ||||
|           } | ||||
| 
 | ||||
|           if (e.which === 38) { | ||||
|             var current = dropdown.find('li.selected'), | ||||
|                 prev = current.prev(':not(.disabled)'); | ||||
| 
 | ||||
|             if (prev.length > 0) { | ||||
|               prev.parent()[0].scrollTop = prev.parent().scrollTop() - self.outerHeight(prev); | ||||
|               current.removeClass('selected'); | ||||
|               prev.addClass('selected'); | ||||
|             } | ||||
|           } else if (e.which === 40) { | ||||
|             var current = dropdown.find('li.selected'), | ||||
|                 next = current.next(':not(.disabled)'); | ||||
| 
 | ||||
|             if (next.length > 0) { | ||||
|               next.parent()[0].scrollTop = next.parent().scrollTop() + self.outerHeight(next); | ||||
|               current.removeClass('selected'); | ||||
|               next.addClass('selected'); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
| 
 | ||||
|       this.settings.init = true; | ||||
|     }, | ||||
| 
 | ||||
|     go_to: function (dropdown, character) { | ||||
|       var lis = dropdown.find('li'), | ||||
|           count = lis.length; | ||||
| 
 | ||||
|       if (count > 0) { | ||||
|         for (var i = 0; i < count; i++) { | ||||
|           var first_letter = lis.eq(i).text().charAt(0).toLowerCase(); | ||||
|           if (first_letter === String.fromCharCode(character).toLowerCase()) return lis.eq(i); | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     scrollTo: function (el, duration) { | ||||
|       if (duration < 0) return; | ||||
|       var parent = el.parent(); | ||||
|       var li_height = this.outerHeight(el); | ||||
|       var difference = (li_height * (el.index())) - parent.scrollTop(); | ||||
|       var perTick = difference / duration * 10; | ||||
| 
 | ||||
|       this.scrollToTimerCache = setTimeout(function () { | ||||
|         if (!isNaN(parseInt(perTick, 10))) { | ||||
|           parent[0].scrollTop = parent.scrollTop() + perTick; | ||||
|           this.scrollTo(el, duration - 10); | ||||
|         } | ||||
|       }.bind(this), 10); | ||||
|     }, | ||||
| 
 | ||||
|     append_custom_markup: function (idx, sel) { | ||||
|       var $this = $(sel), | ||||
|           type = $this.attr('type'), | ||||
|           $span = $this.next('span.custom.' + type); | ||||
|            | ||||
|       if (!$this.parent().hasClass('switch')) { | ||||
|         $this.addClass('hidden-field'); | ||||
|       } | ||||
| 
 | ||||
|       if ($span.length === 0) { | ||||
|         $span = $('<span class="custom ' + type + '"></span>').insertAfter($this); | ||||
|       } | ||||
| 
 | ||||
|       $span.toggleClass('checked', $this.is(':checked')); | ||||
|       $span.toggleClass('disabled', $this.is(':disabled')); | ||||
|     }, | ||||
| 
 | ||||
|     append_custom_select: function (idx, sel) { | ||||
|         var self = Foundation.libs.forms, | ||||
|             $this = $(sel), | ||||
|             $customSelect = $this.next('div.custom.dropdown'), | ||||
|             $customList = $customSelect.find('ul'), | ||||
|             $selectCurrent = $customSelect.find(".current"), | ||||
|             $selector = $customSelect.find(".selector"), | ||||
|             $options = $this.find('option'), | ||||
|             $selectedOption = $options.filter(':selected'), | ||||
|             copyClasses = $this.attr('class') ? $this.attr('class').split(' ') : [], | ||||
|             maxWidth = 0, | ||||
|             liHtml = '', | ||||
|             $listItems, | ||||
|             $currentSelect = false; | ||||
| 
 | ||||
|         if ($customSelect.length === 0) { | ||||
|           var customSelectSize = $this.hasClass('small') ? 'small' : $this.hasClass('medium') ? 'medium' : $this.hasClass('large') ? 'large' : $this.hasClass('expand') ? 'expand' : ''; | ||||
| 
 | ||||
|           $customSelect = $('<div class="' + ['custom', 'dropdown', customSelectSize].concat(copyClasses).filter(function (item, idx, arr) { | ||||
|             if (item === '') return false; | ||||
|             return arr.indexOf(item) === idx; | ||||
|           }).join(' ') + '"><a href="#" class="selector"></a><ul /></div>'); | ||||
| 
 | ||||
|           $selector = $customSelect.find(".selector"); | ||||
|           $customList = $customSelect.find("ul"); | ||||
| 
 | ||||
|           liHtml = $options.map(function () { | ||||
|             var copyClasses = $(this).attr('class') ? $(this).attr('class') : ''; | ||||
|             return "<li class='" + copyClasses + "'>" + $(this).html() + "</li>"; | ||||
|           }).get().join(''); | ||||
| 
 | ||||
|           $customList.append(liHtml); | ||||
| 
 | ||||
|           $currentSelect = $customSelect | ||||
|             .prepend('<a href="#" class="current">' + $selectedOption.html() + '</a>') | ||||
|             .find(".current"); | ||||
| 
 | ||||
|           $this.after($customSelect) | ||||
|             .addClass('hidden-field'); | ||||
|         } else { | ||||
|           liHtml = $options.map(function () { | ||||
|               return "<li>" + $(this).html() + "</li>"; | ||||
|             }) | ||||
|             .get().join(''); | ||||
| 
 | ||||
|           $customList.html('') | ||||
|             .append(liHtml); | ||||
| 
 | ||||
|         } // endif $customSelect.length === 0
 | ||||
| 
 | ||||
|         self.assign_id($this, $customSelect); | ||||
|         $customSelect.toggleClass('disabled', $this.is(':disabled')); | ||||
|         $listItems = $customList.find('li'); | ||||
| 
 | ||||
|         // cache list length
 | ||||
|         self.cache[$customSelect.data('id')] = $listItems.length; | ||||
| 
 | ||||
|         $options.each(function (index) { | ||||
|           if (this.selected) { | ||||
|             $listItems.eq(index).addClass('selected'); | ||||
| 
 | ||||
|             if ($currentSelect) { | ||||
|               $currentSelect.html($(this).html()); | ||||
|             } | ||||
|           } | ||||
|           if ($(this).is(':disabled')) { | ||||
|             $listItems.eq(index).addClass('disabled'); | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|         //
 | ||||
|         // If we're not specifying a predetermined form size.
 | ||||
|         //
 | ||||
|         if (!$customSelect.is('.small, .medium, .large, .expand')) { | ||||
| 
 | ||||
|           // ------------------------------------------------------------------------------------
 | ||||
|           // This is a work-around for when elements are contained within hidden parents.
 | ||||
|           // For example, when custom-form elements are inside of a hidden reveal modal.
 | ||||
|           //
 | ||||
|           // We need to display the current custom list element as well as hidden parent elements
 | ||||
|           // in order to properly calculate the list item element's width property.
 | ||||
|           // -------------------------------------------------------------------------------------
 | ||||
| 
 | ||||
|           $customSelect.addClass('open'); | ||||
|           //
 | ||||
|           // Quickly, display all parent elements.
 | ||||
|           // This should help us calcualate the width of the list item's within the drop down.
 | ||||
|           //
 | ||||
|           var self = Foundation.libs.forms; | ||||
|           self.hidden_fix.adjust($customList); | ||||
| 
 | ||||
|           maxWidth = (self.outerWidth($listItems) > maxWidth) ? self.outerWidth($listItems) : maxWidth; | ||||
| 
 | ||||
|           Foundation.libs.forms.hidden_fix.reset(); | ||||
| 
 | ||||
|           $customSelect.removeClass('open'); | ||||
| 
 | ||||
|         } // endif
 | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     assign_id: function ($select, $customSelect) { | ||||
|       var id = [+new Date(), Foundation.random_str(5)].join('-'); | ||||
|       $select.attr('data-id', id); | ||||
|       $customSelect.attr('data-id', id); | ||||
|     }, | ||||
| 
 | ||||
|     refresh_custom_select: function ($select, force_refresh) { | ||||
|       var self = this; | ||||
|       var maxWidth = 0, | ||||
|           $customSelect = $select.next(), | ||||
|           $options = $select.find('option'), | ||||
|           $listItems = $customSelect.find('li'); | ||||
| 
 | ||||
|       if ($listItems.length !== this.cache[$customSelect.data('id')] || force_refresh) { | ||||
|         $customSelect.find('ul').html(''); | ||||
| 
 | ||||
|         $options.each(function () { | ||||
|           var $li = $('<li>' + $(this).html() + '</li>'); | ||||
|           $customSelect.find('ul').append($li); | ||||
|         }); | ||||
| 
 | ||||
|         // re-populate
 | ||||
|         $options.each(function (index) { | ||||
|           if (this.selected) { | ||||
|             $customSelect.find('li').eq(index).addClass('selected'); | ||||
|             $customSelect.find('.current').html($(this).html()); | ||||
|           } | ||||
|           if ($(this).is(':disabled')) { | ||||
|             $customSelect.find('li').eq(index).addClass('disabled'); | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|         // fix width
 | ||||
|         $customSelect.removeAttr('style') | ||||
|           .find('ul').removeAttr('style'); | ||||
|         $customSelect.find('li').each(function () { | ||||
|           $customSelect.addClass('open'); | ||||
|           if (self.outerWidth($(this)) > maxWidth) { | ||||
|             maxWidth = self.outerWidth($(this)); | ||||
|           } | ||||
|           $customSelect.removeClass('open'); | ||||
|         }); | ||||
| 
 | ||||
|         $listItems = $customSelect.find('li'); | ||||
|         // cache list length
 | ||||
|         this.cache[$customSelect.data('id')] = $listItems.length; | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     toggle_checkbox: function ($element) { | ||||
|       var $input = $element.prev(), | ||||
|           input = $input[0]; | ||||
| 
 | ||||
|       if (false === $input.is(':disabled')) { | ||||
|         input.checked = ((input.checked) ? false : true); | ||||
|         $element.toggleClass('checked'); | ||||
| 
 | ||||
|         $input.trigger('change'); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     toggle_radio: function ($element) { | ||||
|         var $input = $element.prev(), | ||||
|             $form = $input.closest('form.custom'), | ||||
|             input = $input[0]; | ||||
| 
 | ||||
|         if (false === $input.is(':disabled')) { | ||||
|           $form.find('input[type="radio"][name="' + this.escape($input.attr('name')) + '"]') | ||||
|             .next().not($element).removeClass('checked'); | ||||
| 
 | ||||
|           if (!$element.hasClass('checked')) { | ||||
|             $element.toggleClass('checked'); | ||||
|           } | ||||
| 
 | ||||
|           input.checked = $element.hasClass('checked'); | ||||
| 
 | ||||
|           $input.trigger('change'); | ||||
|         } | ||||
|     }, | ||||
| 
 | ||||
|     escape: function (text) { | ||||
|       if (!text) return ''; | ||||
|       return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); | ||||
|     }, | ||||
| 
 | ||||
|     hidden_fix: { | ||||
|         /** | ||||
|          * Sets all hidden parent elements and self to visibile. | ||||
|          * | ||||
|          * @method adjust | ||||
|          * @param {jQuery Object} $child | ||||
|          */ | ||||
| 
 | ||||
|         // We'll use this to temporarily store style properties.
 | ||||
|         tmp: [], | ||||
| 
 | ||||
|         // We'll use this to set hidden parent elements.
 | ||||
|         hidden: null, | ||||
| 
 | ||||
|         adjust: function ($child) { | ||||
|           // Internal reference.
 | ||||
|           var _self = this; | ||||
| 
 | ||||
|           // Set all hidden parent elements, including this element.
 | ||||
|           _self.hidden = $child.parents(); | ||||
|           _self.hidden = _self.hidden.add($child).filter(":hidden"); | ||||
| 
 | ||||
|           // Loop through all hidden elements.
 | ||||
|           _self.hidden.each(function () { | ||||
| 
 | ||||
|             // Cache the element.
 | ||||
|             var $elem = $(this); | ||||
| 
 | ||||
|             // Store the style attribute.
 | ||||
|             // Undefined if element doesn't have a style attribute.
 | ||||
|             _self.tmp.push($elem.attr('style')); | ||||
| 
 | ||||
|             // Set the element's display property to block,
 | ||||
|             // but ensure it's visibility is hidden.
 | ||||
|             $elem.css({ | ||||
|                 'visibility': 'hidden', | ||||
|                 'display': 'block' | ||||
|             }); | ||||
|           }); | ||||
| 
 | ||||
|         }, // end adjust
 | ||||
| 
 | ||||
|         /** | ||||
|          * Resets the elements previous state. | ||||
|          * | ||||
|          * @method reset | ||||
|          */ | ||||
|         reset: function () { | ||||
|           // Internal reference.
 | ||||
|           var _self = this; | ||||
|           // Loop through our hidden element collection.
 | ||||
|           _self.hidden.each(function (i) { | ||||
|             // Cache this element.
 | ||||
|             var $elem = $(this), | ||||
|                 _tmp = _self.tmp[i]; // Get the stored 'style' value for this element.
 | ||||
| 
 | ||||
|             // If the stored value is undefined.
 | ||||
|             if (_tmp === undefined) | ||||
|             // Remove the style attribute.
 | ||||
|             $elem.removeAttr('style'); | ||||
|             else | ||||
|             // Otherwise, reset the element style attribute.
 | ||||
|             $elem.attr('style', _tmp); | ||||
|           }); | ||||
|           // Reset the tmp array.
 | ||||
|           _self.tmp = []; | ||||
|           // Reset the hidden elements variable.
 | ||||
|           _self.hidden = null; | ||||
| 
 | ||||
|         } // end reset
 | ||||
|     }, | ||||
| 
 | ||||
|     off: function () { | ||||
|       $(this.scope).off('.fndtn.forms'); | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () {} | ||||
|   }; | ||||
| 
 | ||||
|   var getFirstPrevSibling = function($el, selector) { | ||||
|     var $el = $el.prev(); | ||||
|     while ($el.length) { | ||||
|       if ($el.is(selector)) return $el; | ||||
|       $el = $el.prev(); | ||||
|     } | ||||
|     return $(); | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
							
								
								
									
										271
									
								
								static/js/vendor/foundation/foundation.interchange.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										271
									
								
								static/js/vendor/foundation/foundation.interchange.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,271 @@ | ||||
| /*jslint unparam: true, browser: true, indent: 2 */ | ||||
| 
 | ||||
| ;(function ($, window, document, undefined) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   Foundation.libs.interchange = { | ||||
|     name : 'interchange', | ||||
| 
 | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     cache : {}, | ||||
| 
 | ||||
|     settings : { | ||||
|       load_attr : 'interchange', | ||||
| 
 | ||||
|       named_queries : { | ||||
|         'default' : 'only screen and (min-width: 1px)', | ||||
|         small : 'only screen and (min-width: 768px)', | ||||
|         medium : 'only screen and (min-width: 1280px)', | ||||
|         large : 'only screen and (min-width: 1440px)', | ||||
|         landscape : 'only screen and (orientation: landscape)', | ||||
|         portrait : 'only screen and (orientation: portrait)', | ||||
|         retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +  | ||||
|           'only screen and (min--moz-device-pixel-ratio: 2),' +  | ||||
|           'only screen and (-o-min-device-pixel-ratio: 2/1),' +  | ||||
|           'only screen and (min-device-pixel-ratio: 2),' +  | ||||
|           'only screen and (min-resolution: 192dpi),' +  | ||||
|           'only screen and (min-resolution: 2dppx)' | ||||
|       }, | ||||
| 
 | ||||
|       directives : { | ||||
|         replace : function (el, path) { | ||||
|           if (/IMG/.test(el[0].nodeName)) { | ||||
|             var path_parts = path.split('/'), | ||||
|                 path_file = path_parts[path_parts.length - 1], | ||||
|                 orig_path = el[0].src; | ||||
| 
 | ||||
|             if (new RegExp(path_file, 'i').test(el[0].src)) return; | ||||
| 
 | ||||
|             el[0].src = path; | ||||
| 
 | ||||
|             return el.trigger('replace', [el[0].src, orig_path]); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     init : function (scope, method, options) { | ||||
|       Foundation.inherit(this, 'throttle'); | ||||
| 
 | ||||
|       if (typeof method === 'object') { | ||||
|         $.extend(true, this.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       this.events(); | ||||
|       this.images(); | ||||
| 
 | ||||
|       if (typeof method !== 'string') { | ||||
|         return this.settings.init; | ||||
|       } else { | ||||
|         return this[method].call(this, options); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     events : function () { | ||||
|       var self = this; | ||||
| 
 | ||||
|       $(window).on('resize.fndtn.interchange', self.throttle(function () { | ||||
|         self.resize.call(self); | ||||
|       }, 50)); | ||||
|     }, | ||||
| 
 | ||||
|     resize : function () { | ||||
|       var cache = this.cache; | ||||
| 
 | ||||
|       for (var uuid in cache) { | ||||
|         if (cache.hasOwnProperty(uuid)) { | ||||
|           var passed = this.results(uuid, cache[uuid]); | ||||
| 
 | ||||
|           if (passed) { | ||||
|             this.settings.directives[passed | ||||
|               .scenario[1]](passed.el, passed.scenario[0]); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     results : function (uuid, scenarios) { | ||||
|       var count = scenarios.length, | ||||
|           results_arr = []; | ||||
| 
 | ||||
|       if (count > 0) { | ||||
|         var el = $('[data-uuid="' + uuid + '"]'); | ||||
| 
 | ||||
|         for (var i = count - 1; i >= 0; i--) { | ||||
|           var rule = scenarios[i][2]; | ||||
|           if (this.settings.named_queries.hasOwnProperty(rule)) { | ||||
|             var mq = matchMedia(this.settings.named_queries[rule]); | ||||
|           } else { | ||||
|             var mq = matchMedia(scenarios[i][2]); | ||||
|           } | ||||
|           if (mq.matches) { | ||||
|             return {el: el, scenario: scenarios[i]}; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       return false; | ||||
|     }, | ||||
| 
 | ||||
|     images : function (force_update) { | ||||
|       if (typeof this.cached_images === 'undefined' || force_update) { | ||||
|         return this.update_images(); | ||||
|       } | ||||
| 
 | ||||
|       return this.cached_images; | ||||
|     }, | ||||
| 
 | ||||
|     update_images : function () { | ||||
|       var images = document.getElementsByTagName('img'), | ||||
|           count = images.length, | ||||
|           data_attr = 'data-' + this.settings.load_attr; | ||||
| 
 | ||||
|       this.cached_images = []; | ||||
| 
 | ||||
|       for (var i = count - 1; i >= 0; i--) { | ||||
|         this.loaded($(images[i]), (i === 0), function (image, last) { | ||||
|           if (image) { | ||||
|             var str = image.getAttribute(data_attr) || ''; | ||||
| 
 | ||||
|             if (str.length > 0) { | ||||
|               this.cached_images.push(image); | ||||
|             } | ||||
|           } | ||||
| 
 | ||||
|           if (last) this.enhance(); | ||||
| 
 | ||||
|         }.bind(this)); | ||||
|       } | ||||
| 
 | ||||
|       return 'deferred'; | ||||
|     }, | ||||
| 
 | ||||
|     // based on jquery.imageready.js
 | ||||
|     // @weblinc, @jsantell, (c) 2012
 | ||||
| 
 | ||||
|     loaded : function (image, last, callback) { | ||||
|       function loaded () { | ||||
|         callback(image[0], last); | ||||
|       } | ||||
| 
 | ||||
|       function bindLoad () { | ||||
|         this.one('load', loaded); | ||||
| 
 | ||||
|         if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { | ||||
|           var src = this.attr( 'src' ), | ||||
|               param = src.match( /\?/ ) ? '&' : '?'; | ||||
| 
 | ||||
|           param += 'random=' + (new Date()).getTime(); | ||||
|           this.attr('src', src + param); | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (!image.attr('src')) { | ||||
|         loaded(); | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
|       if (image[0].complete || image[0].readyState === 4) { | ||||
|         loaded(); | ||||
|       } else { | ||||
|         bindLoad.call(image); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     enhance : function () { | ||||
|       var count = this.images().length; | ||||
| 
 | ||||
|       for (var i = count - 1; i >= 0; i--) { | ||||
|         this._object($(this.images()[i])); | ||||
|       } | ||||
| 
 | ||||
|       return $(window).trigger('resize'); | ||||
|     }, | ||||
| 
 | ||||
|     parse_params : function (path, directive, mq) { | ||||
|       return [this.trim(path), this.convert_directive(directive), this.trim(mq)]; | ||||
|     }, | ||||
| 
 | ||||
|     convert_directive : function (directive) { | ||||
|       var trimmed = this.trim(directive); | ||||
| 
 | ||||
|       if (trimmed.length > 0) { | ||||
|         return trimmed; | ||||
|       } | ||||
| 
 | ||||
|       return 'replace'; | ||||
|     }, | ||||
| 
 | ||||
|     _object : function(el) { | ||||
|       var raw_arr = this.parse_data_attr(el), | ||||
|           scenarios = [], count = raw_arr.length; | ||||
| 
 | ||||
|       if (count > 0) { | ||||
|         for (var i = count - 1; i >= 0; i--) { | ||||
|           var split = raw_arr[i].split(/\((.*?)(\))$/); | ||||
| 
 | ||||
|           if (split.length > 1) { | ||||
|             var cached_split = split[0].split(','), | ||||
|                 params = this.parse_params(cached_split[0], | ||||
|                   cached_split[1], split[1]); | ||||
| 
 | ||||
|             scenarios.push(params); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       return this.store(el, scenarios); | ||||
|     }, | ||||
| 
 | ||||
|     uuid : function (separator) { | ||||
|       var delim = separator || "-"; | ||||
| 
 | ||||
|       function S4() { | ||||
|         return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); | ||||
|       } | ||||
| 
 | ||||
|       return (S4() + S4() + delim + S4() + delim + S4() | ||||
|         + delim + S4() + delim + S4() + S4() + S4()); | ||||
|     }, | ||||
| 
 | ||||
|     store : function (el, scenarios) { | ||||
|       var uuid = this.uuid(), | ||||
|           current_uuid = el.data('uuid'); | ||||
| 
 | ||||
|       if (current_uuid) return this.cache[current_uuid]; | ||||
| 
 | ||||
|       el.attr('data-uuid', uuid); | ||||
| 
 | ||||
|       return this.cache[uuid] = scenarios; | ||||
|     }, | ||||
| 
 | ||||
|     trim : function(str) { | ||||
|       if (typeof str === 'string') { | ||||
|         return $.trim(str); | ||||
|       } | ||||
| 
 | ||||
|       return str; | ||||
|     }, | ||||
| 
 | ||||
|     parse_data_attr : function (el) { | ||||
|       var raw = el.data(this.settings.load_attr).split(/\[(.*?)\]/), | ||||
|           count = raw.length, output = []; | ||||
| 
 | ||||
|       for (var i = count - 1; i >= 0; i--) { | ||||
|         if (raw[i].replace(/[\W\d]+/, '').length > 4) { | ||||
|           output.push(raw[i]); | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       return output; | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () { | ||||
|       this.images(true); | ||||
|     } | ||||
| 
 | ||||
|   }; | ||||
| 
 | ||||
| }(Foundation.zj, this, this.document)); | ||||
							
								
								
									
										844
									
								
								static/js/vendor/foundation/foundation.joyride.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										844
									
								
								static/js/vendor/foundation/foundation.joyride.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,844 @@ | ||||
| /*jslint unparam: true, browser: true, indent: 2 */ | ||||
| 
 | ||||
| (function ($, window, document, undefined) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   Foundation.libs.joyride = { | ||||
|     name: 'joyride', | ||||
| 
 | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     defaults : { | ||||
|       expose               : false,      // turn on or off the expose feature
 | ||||
|       modal                : false,      // Whether to cover page with modal during the tour
 | ||||
|       tipLocation          : 'bottom',  // 'top' or 'bottom' in relation to parent
 | ||||
|       nubPosition          : 'auto',    // override on a per tooltip bases
 | ||||
|       scrollSpeed          : 300,       // Page scrolling speed in milliseconds, 0 = no scroll animation
 | ||||
|       timer                : 0,         // 0 = no timer , all other numbers = timer in milliseconds
 | ||||
|       startTimerOnClick    : true,      // true or false - true requires clicking the first button start the timer
 | ||||
|       startOffset          : 0,         // the index of the tooltip you want to start on (index of the li)
 | ||||
|       nextButton           : true,      // true or false to control whether a next button is used
 | ||||
|       tipAnimation         : 'fade',    // 'pop' or 'fade' in each tip
 | ||||
|       pauseAfter           : [],        // array of indexes where to pause the tour after
 | ||||
|       exposed              : [],        // array of expose elements
 | ||||
|       tipAnimationFadeSpeed: 300,       // when tipAnimation = 'fade' this is speed in milliseconds for the transition
 | ||||
|       cookieMonster        : false,     // true or false to control whether cookies are used
 | ||||
|       cookieName           : 'joyride', // Name the cookie you'll use
 | ||||
|       cookieDomain         : false,     // Will this cookie be attached to a domain, ie. '.notableapp.com'
 | ||||
|       cookieExpires        : 365,       // set when you would like the cookie to expire.
 | ||||
|       tipContainer         : 'body',    // Where will the tip be attached
 | ||||
|       postRideCallback     : function (){},    // A method to call once the tour closes (canceled or complete)
 | ||||
|       postStepCallback     : function (){},    // A method to call after each step
 | ||||
|       preStepCallback      : function (){},    // A method to call before each step
 | ||||
|       preRideCallback      : function (){},    // A method to call before the tour starts (passed index, tip, and cloned exposed element)
 | ||||
|       postExposeCallback   : function (){},    // A method to call after an element has been exposed
 | ||||
|       template : { // HTML segments for tip layout
 | ||||
|         link    : '<a href="#close" class="joyride-close-tip">×</a>', | ||||
|         timer   : '<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>', | ||||
|         tip     : '<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>', | ||||
|         wrapper : '<div class="joyride-content-wrapper"></div>', | ||||
|         button  : '<a href="#" class="small button joyride-next-tip"></a>', | ||||
|         modal   : '<div class="joyride-modal-bg"></div>', | ||||
|         expose  : '<div class="joyride-expose-wrapper"></div>', | ||||
|         exposeCover: '<div class="joyride-expose-cover"></div>' | ||||
|       }, | ||||
|       exposeAddClass  	: ''		// One or more space-separated class names to be added to exposed element
 | ||||
|     }, | ||||
| 
 | ||||
|     settings : {}, | ||||
| 
 | ||||
|     init : function (scope, method, options) { | ||||
|       this.scope = scope || this.scope; | ||||
|       Foundation.inherit(this, 'throttle data_options scrollTo scrollLeft delay'); | ||||
| 
 | ||||
|       if (typeof method === 'object') { | ||||
|         $.extend(true, this.settings, this.defaults, method); | ||||
|       } else { | ||||
|         $.extend(true, this.settings, this.defaults, options); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method !== 'string') { | ||||
|         if (!this.settings.init) this.events(); | ||||
| 
 | ||||
|         return this.settings.init; | ||||
|       } else { | ||||
|         return this[method].call(this, options); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     events : function () { | ||||
|       var self = this; | ||||
| 
 | ||||
|       $(this.scope) | ||||
|         .on('click.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) { | ||||
|           e.preventDefault(); | ||||
| 
 | ||||
|           if (this.settings.$li.next().length < 1) { | ||||
|             this.end(); | ||||
|           } else if (this.settings.timer > 0) { | ||||
|             clearTimeout(this.settings.automate); | ||||
|             this.hide(); | ||||
|             this.show(); | ||||
|             this.startTimer(); | ||||
|           } else { | ||||
|             this.hide(); | ||||
|             this.show(); | ||||
|           } | ||||
| 
 | ||||
|         }.bind(this)) | ||||
| 
 | ||||
|         .on('click.joyride', '.joyride-close-tip', function (e) { | ||||
|           e.preventDefault(); | ||||
|           this.end(); | ||||
|         }.bind(this)); | ||||
| 
 | ||||
|       $(window).on('resize.fndtn.joyride', self.throttle(function () { | ||||
|         if ($('[data-joyride]').length > 0 && self.settings.$next_tip) { | ||||
|           if (self.settings.exposed.length > 0) { | ||||
|             var $els = $(self.settings.exposed); | ||||
| 
 | ||||
|             $els.each(function () { | ||||
|               var $this = $(this); | ||||
|               self.un_expose($this); | ||||
|               self.expose($this); | ||||
|             }); | ||||
|           } | ||||
| 
 | ||||
|           if (self.is_phone()) { | ||||
|             self.pos_phone(); | ||||
|           } else { | ||||
|             self.pos_default(false, true); | ||||
|           } | ||||
|         } | ||||
|       }, 100)); | ||||
| 
 | ||||
|       this.settings.init = true; | ||||
|     }, | ||||
| 
 | ||||
|     start : function () { | ||||
|       var self = this, | ||||
|           $this = $(this.scope).find('[data-joyride]'), | ||||
|           integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'], | ||||
|           int_settings_count = integer_settings.length; | ||||
| 
 | ||||
|       if (!this.settings.init) this.init(); | ||||
| 
 | ||||
|       // non configureable settings
 | ||||
|       this.settings.$content_el = $this; | ||||
|       this.settings.$body = $(this.settings.tipContainer); | ||||
|       this.settings.body_offset = $(this.settings.tipContainer).position(); | ||||
|       this.settings.$tip_content = this.settings.$content_el.find('> li'); | ||||
|       this.settings.paused = false; | ||||
|       this.settings.attempts = 0; | ||||
| 
 | ||||
|       this.settings.tipLocationPatterns = { | ||||
|         top: ['bottom'], | ||||
|         bottom: [], // bottom should not need to be repositioned
 | ||||
|         left: ['right', 'top', 'bottom'], | ||||
|         right: ['left', 'top', 'bottom'] | ||||
|       }; | ||||
| 
 | ||||
|       // can we create cookies?
 | ||||
|       if (typeof $.cookie !== 'function') { | ||||
|         this.settings.cookieMonster = false; | ||||
|       } | ||||
| 
 | ||||
|       // generate the tips and insert into dom.
 | ||||
|       if (!this.settings.cookieMonster || this.settings.cookieMonster && $.cookie(this.settings.cookieName) === null) { | ||||
|         this.settings.$tip_content.each(function (index) { | ||||
|           var $this = $(this); | ||||
|           $.extend(true, self.settings, self.data_options($this)); | ||||
|           // Make sure that settings parsed from data_options are integers where necessary
 | ||||
|           for (var i = int_settings_count - 1; i >= 0; i--) { | ||||
|             self.settings[integer_settings[i]] = parseInt(self.settings[integer_settings[i]], 10); | ||||
|           } | ||||
|           self.create({$li : $this, index : index}); | ||||
|         }); | ||||
| 
 | ||||
|         // show first tip
 | ||||
|         if (!this.settings.startTimerOnClick && this.settings.timer > 0) { | ||||
|           this.show('init'); | ||||
|           this.startTimer(); | ||||
|         } else { | ||||
|           this.show('init'); | ||||
|         } | ||||
| 
 | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     resume : function () { | ||||
|       this.set_li(); | ||||
|       this.show(); | ||||
|     }, | ||||
| 
 | ||||
|     tip_template : function (opts) { | ||||
|       var $blank, content; | ||||
| 
 | ||||
|       opts.tip_class = opts.tip_class || ''; | ||||
| 
 | ||||
|       $blank = $(this.settings.template.tip).addClass(opts.tip_class); | ||||
|       content = $.trim($(opts.li).html()) + | ||||
|         this.button_text(opts.button_text) + | ||||
|         this.settings.template.link + | ||||
|         this.timer_instance(opts.index); | ||||
| 
 | ||||
|       $blank.append($(this.settings.template.wrapper)); | ||||
|       $blank.first().attr('data-index', opts.index); | ||||
|       $('.joyride-content-wrapper', $blank).append(content); | ||||
| 
 | ||||
|       return $blank[0]; | ||||
|     }, | ||||
| 
 | ||||
|     timer_instance : function (index) { | ||||
|       var txt; | ||||
| 
 | ||||
|       if ((index === 0 && this.settings.startTimerOnClick && this.settings.timer > 0) || this.settings.timer === 0) { | ||||
|         txt = ''; | ||||
|       } else { | ||||
|         txt = this.outerHTML($(this.settings.template.timer)[0]); | ||||
|       } | ||||
|       return txt; | ||||
|     }, | ||||
| 
 | ||||
|     button_text : function (txt) { | ||||
|       if (this.settings.nextButton) { | ||||
|         txt = $.trim(txt) || 'Next'; | ||||
|         txt = this.outerHTML($(this.settings.template.button).append(txt)[0]); | ||||
|       } else { | ||||
|         txt = ''; | ||||
|       } | ||||
|       return txt; | ||||
|     }, | ||||
| 
 | ||||
|     create : function (opts) { | ||||
|       var buttonText = opts.$li.attr('data-button') || opts.$li.attr('data-text'), | ||||
|         tipClass = opts.$li.attr('class'), | ||||
|         $tip_content = $(this.tip_template({ | ||||
|           tip_class : tipClass, | ||||
|           index : opts.index, | ||||
|           button_text : buttonText, | ||||
|           li : opts.$li | ||||
|         })); | ||||
| 
 | ||||
|       $(this.settings.tipContainer).append($tip_content); | ||||
|     }, | ||||
| 
 | ||||
|     show : function (init) { | ||||
|       var $timer = null; | ||||
| 
 | ||||
|       // are we paused?
 | ||||
|       if (this.settings.$li === undefined | ||||
|         || ($.inArray(this.settings.$li.index(), this.settings.pauseAfter) === -1)) { | ||||
| 
 | ||||
|         // don't go to the next li if the tour was paused
 | ||||
|         if (this.settings.paused) { | ||||
|           this.settings.paused = false; | ||||
|         } else { | ||||
|           this.set_li(init); | ||||
|         } | ||||
| 
 | ||||
|         this.settings.attempts = 0; | ||||
| 
 | ||||
|         if (this.settings.$li.length && this.settings.$target.length > 0) { | ||||
|           if (init) { //run when we first start
 | ||||
|             this.settings.preRideCallback(this.settings.$li.index(), this.settings.$next_tip); | ||||
|             if (this.settings.modal) { | ||||
|               this.show_modal(); | ||||
|             } | ||||
|           } | ||||
| 
 | ||||
|           this.settings.preStepCallback(this.settings.$li.index(), this.settings.$next_tip); | ||||
| 
 | ||||
|           if (this.settings.modal && this.settings.expose) { | ||||
|             this.expose(); | ||||
|           } | ||||
| 
 | ||||
|           this.settings.tipSettings = $.extend(this.settings, this.data_options(this.settings.$li)); | ||||
| 
 | ||||
|           this.settings.timer = parseInt(this.settings.timer, 10); | ||||
| 
 | ||||
|           this.settings.tipSettings.tipLocationPattern = this.settings.tipLocationPatterns[this.settings.tipSettings.tipLocation]; | ||||
| 
 | ||||
|           // scroll if not modal
 | ||||
|           if (!/body/i.test(this.settings.$target.selector)) { | ||||
|             this.scroll_to(); | ||||
|           } | ||||
| 
 | ||||
|           if (this.is_phone()) { | ||||
|             this.pos_phone(true); | ||||
|           } else { | ||||
|             this.pos_default(true); | ||||
|           } | ||||
| 
 | ||||
|           $timer = this.settings.$next_tip.find('.joyride-timer-indicator'); | ||||
| 
 | ||||
|           if (/pop/i.test(this.settings.tipAnimation)) { | ||||
| 
 | ||||
|             $timer.width(0); | ||||
| 
 | ||||
|             if (this.settings.timer > 0) { | ||||
| 
 | ||||
|               this.settings.$next_tip.show(); | ||||
| 
 | ||||
|               this.delay(function () { | ||||
|                 $timer.animate({ | ||||
|                   width: $timer.parent().width() | ||||
|                 }, this.settings.timer, 'linear'); | ||||
|               }.bind(this), this.settings.tipAnimationFadeSpeed); | ||||
| 
 | ||||
|             } else { | ||||
|               this.settings.$next_tip.show(); | ||||
| 
 | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
|           } else if (/fade/i.test(this.settings.tipAnimation)) { | ||||
| 
 | ||||
|             $timer.width(0); | ||||
| 
 | ||||
|             if (this.settings.timer > 0) { | ||||
| 
 | ||||
|               this.settings.$next_tip | ||||
|                 .fadeIn(this.settings.tipAnimationFadeSpeed) | ||||
|                 .show(); | ||||
| 
 | ||||
|               this.delay(function () { | ||||
|                 $timer.animate({ | ||||
|                   width: $timer.parent().width() | ||||
|                 }, this.settings.timer, 'linear'); | ||||
|               }.bind(this), this.settings.tipAnimationFadeSpeed); | ||||
| 
 | ||||
|             } else { | ||||
|               this.settings.$next_tip.fadeIn(this.settings.tipAnimationFadeSpeed); | ||||
| 
 | ||||
|             } | ||||
|           } | ||||
| 
 | ||||
|           this.settings.$current_tip = this.settings.$next_tip; | ||||
| 
 | ||||
|         // skip non-existant targets
 | ||||
|         } else if (this.settings.$li && this.settings.$target.length < 1) { | ||||
| 
 | ||||
|           this.show(); | ||||
| 
 | ||||
|         } else { | ||||
| 
 | ||||
|           this.end(); | ||||
| 
 | ||||
|         } | ||||
|       } else { | ||||
| 
 | ||||
|         this.settings.paused = true; | ||||
| 
 | ||||
|       } | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     is_phone : function () { | ||||
|       if (Modernizr) { | ||||
|         return Modernizr.mq('only screen and (max-width: 767px)') || $('.lt-ie9').length > 0; | ||||
|       } | ||||
| 
 | ||||
|       return (this.settings.$window.width() < 767); | ||||
|     }, | ||||
| 
 | ||||
|     hide : function () { | ||||
|       if (this.settings.modal && this.settings.expose) { | ||||
|         this.un_expose(); | ||||
|       } | ||||
| 
 | ||||
|       if (!this.settings.modal) { | ||||
|         $('.joyride-modal-bg').hide(); | ||||
|       } | ||||
|       this.settings.$current_tip.hide(); | ||||
|       this.settings.postStepCallback(this.settings.$li.index(), | ||||
|         this.settings.$current_tip); | ||||
|     }, | ||||
| 
 | ||||
|     set_li : function (init) { | ||||
|       if (init) { | ||||
|         this.settings.$li = this.settings.$tip_content.eq(this.settings.startOffset); | ||||
|         this.set_next_tip(); | ||||
|         this.settings.$current_tip = this.settings.$next_tip; | ||||
|       } else { | ||||
|         this.settings.$li = this.settings.$li.next(); | ||||
|         this.set_next_tip(); | ||||
|       } | ||||
| 
 | ||||
|       this.set_target(); | ||||
|     }, | ||||
| 
 | ||||
|     set_next_tip : function () { | ||||
|       this.settings.$next_tip = $(".joyride-tip-guide[data-index='" + this.settings.$li.index() + "']"); | ||||
|       this.settings.$next_tip.data('closed', ''); | ||||
|     }, | ||||
| 
 | ||||
|     set_target : function () { | ||||
|       var cl = this.settings.$li.attr('data-class'), | ||||
|           id = this.settings.$li.attr('data-id'), | ||||
|           $sel = function () { | ||||
|             if (id) { | ||||
|               return $(document.getElementById(id)); | ||||
|             } else if (cl) { | ||||
|               return $('.' + cl).first(); | ||||
|             } else { | ||||
|               return $('body'); | ||||
|             } | ||||
|           }; | ||||
| 
 | ||||
|       this.settings.$target = $sel(); | ||||
|     }, | ||||
| 
 | ||||
|     scroll_to : function () { | ||||
|       var window_half, tipOffset; | ||||
| 
 | ||||
|       window_half = $(window).height() / 2; | ||||
|       tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.outerHeight(this.settings.$next_tip)); | ||||
|       if (tipOffset > 0) { | ||||
|         this.scrollTo($('html, body'), tipOffset, this.settings.scrollSpeed); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     paused : function () { | ||||
|       return ($.inArray((this.settings.$li.index() + 1), this.settings.pauseAfter) === -1); | ||||
|     }, | ||||
| 
 | ||||
|     restart : function () { | ||||
|       this.hide(); | ||||
|       this.settings.$li = undefined; | ||||
|       this.show('init'); | ||||
|     }, | ||||
| 
 | ||||
|     pos_default : function (init, resizing) { | ||||
|       var half_fold = Math.ceil($(window).height() / 2), | ||||
|           tip_position = this.settings.$next_tip.offset(), | ||||
|           $nub = this.settings.$next_tip.find('.joyride-nub'), | ||||
|           nub_width = Math.ceil(this.outerWidth($nub) / 2), | ||||
|           nub_height = Math.ceil(this.outerHeight($nub) / 2), | ||||
|           toggle = init || false; | ||||
| 
 | ||||
|       // tip must not be "display: none" to calculate position
 | ||||
|       if (toggle) { | ||||
|         this.settings.$next_tip.css('visibility', 'hidden'); | ||||
|         this.settings.$next_tip.show(); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof resizing === 'undefined') { | ||||
|         resizing = false; | ||||
|       } | ||||
| 
 | ||||
|       if (!/body/i.test(this.settings.$target.selector)) { | ||||
| 
 | ||||
|           if (this.bottom()) { | ||||
|             var leftOffset = this.settings.$target.offset().left; | ||||
|             if (Foundation.rtl) { | ||||
|               leftOffset = this.settings.$target.offset().width - this.settings.$next_tip.width() + leftOffset; | ||||
|             } | ||||
|             this.settings.$next_tip.css({ | ||||
|               top: (this.settings.$target.offset().top + nub_height + this.outerHeight(this.settings.$target)), | ||||
|               left: leftOffset}); | ||||
| 
 | ||||
|             this.nub_position($nub, this.settings.tipSettings.nubPosition, 'top'); | ||||
| 
 | ||||
|           } else if (this.top()) { | ||||
|             var leftOffset = this.settings.$target.offset().left; | ||||
|             if (Foundation.rtl) { | ||||
|               leftOffset = this.settings.$target.offset().width - this.settings.$next_tip.width() + leftOffset; | ||||
|             } | ||||
|             this.settings.$next_tip.css({ | ||||
|               top: (this.settings.$target.offset().top - this.outerHeight(this.settings.$next_tip) - nub_height), | ||||
|               left: leftOffset}); | ||||
| 
 | ||||
|             this.nub_position($nub, this.settings.tipSettings.nubPosition, 'bottom'); | ||||
| 
 | ||||
|           } else if (this.right()) { | ||||
| 
 | ||||
|             this.settings.$next_tip.css({ | ||||
|               top: this.settings.$target.offset().top, | ||||
|               left: (this.outerWidth(this.settings.$target) + this.settings.$target.offset().left + nub_width)}); | ||||
| 
 | ||||
|             this.nub_position($nub, this.settings.tipSettings.nubPosition, 'left'); | ||||
| 
 | ||||
|           } else if (this.left()) { | ||||
| 
 | ||||
|             this.settings.$next_tip.css({ | ||||
|               top: this.settings.$target.offset().top, | ||||
|               left: (this.settings.$target.offset().left - this.outerWidth(this.settings.$next_tip) - nub_width)}); | ||||
| 
 | ||||
|             this.nub_position($nub, this.settings.tipSettings.nubPosition, 'right'); | ||||
| 
 | ||||
|           } | ||||
| 
 | ||||
|           if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tipSettings.tipLocationPattern.length) { | ||||
| 
 | ||||
|             $nub.removeClass('bottom') | ||||
|               .removeClass('top') | ||||
|               .removeClass('right') | ||||
|               .removeClass('left'); | ||||
| 
 | ||||
|             this.settings.tipSettings.tipLocation = this.settings.tipSettings.tipLocationPattern[this.settings.attempts]; | ||||
| 
 | ||||
|             this.settings.attempts++; | ||||
| 
 | ||||
|             this.pos_default(); | ||||
| 
 | ||||
|           } | ||||
| 
 | ||||
|       } else if (this.settings.$li.length) { | ||||
| 
 | ||||
|         this.pos_modal($nub); | ||||
| 
 | ||||
|       } | ||||
| 
 | ||||
|       if (toggle) { | ||||
|         this.settings.$next_tip.hide(); | ||||
|         this.settings.$next_tip.css('visibility', 'visible'); | ||||
|       } | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     pos_phone : function (init) { | ||||
|       var tip_height = this.outerHeight(this.settings.$next_tip), | ||||
|           tip_offset = this.settings.$next_tip.offset(), | ||||
|           target_height = this.outerHeight(this.settings.$target), | ||||
|           $nub = $('.joyride-nub', this.settings.$next_tip), | ||||
|           nub_height = Math.ceil(this.outerHeight($nub) / 2), | ||||
|           toggle = init || false; | ||||
| 
 | ||||
|       $nub.removeClass('bottom') | ||||
|         .removeClass('top') | ||||
|         .removeClass('right') | ||||
|         .removeClass('left'); | ||||
| 
 | ||||
|       if (toggle) { | ||||
|         this.settings.$next_tip.css('visibility', 'hidden'); | ||||
|         this.settings.$next_tip.show(); | ||||
|       } | ||||
| 
 | ||||
|       if (!/body/i.test(this.settings.$target.selector)) { | ||||
| 
 | ||||
|         if (this.top()) { | ||||
| 
 | ||||
|             this.settings.$next_tip.offset({top: this.settings.$target.offset().top - tip_height - nub_height}); | ||||
|             $nub.addClass('bottom'); | ||||
| 
 | ||||
|         } else { | ||||
| 
 | ||||
|           this.settings.$next_tip.offset({top: this.settings.$target.offset().top + target_height + nub_height}); | ||||
|           $nub.addClass('top'); | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|       } else if (this.settings.$li.length) { | ||||
|         this.pos_modal($nub); | ||||
|       } | ||||
| 
 | ||||
|       if (toggle) { | ||||
|         this.settings.$next_tip.hide(); | ||||
|         this.settings.$next_tip.css('visibility', 'visible'); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     pos_modal : function ($nub) { | ||||
|       this.center(); | ||||
|       $nub.hide(); | ||||
| 
 | ||||
|       this.show_modal(); | ||||
|     }, | ||||
| 
 | ||||
|     show_modal : function () { | ||||
|       if (!this.settings.$next_tip.data('closed')) { | ||||
|         var joyridemodalbg =  $('.joyride-modal-bg'); | ||||
|         if (joyridemodalbg.length < 1) { | ||||
|           $('body').append(this.settings.template.modal).show(); | ||||
|         } | ||||
| 
 | ||||
|         if (/pop/i.test(this.settings.tipAnimation)) { | ||||
|             joyridemodalbg.show(); | ||||
|         } else { | ||||
|             joyridemodalbg.fadeIn(this.settings.tipAnimationFadeSpeed); | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     expose : function () { | ||||
|       var expose, | ||||
|           exposeCover, | ||||
|           el, | ||||
|           origCSS, | ||||
|           origClasses, | ||||
|           randId = 'expose-'+Math.floor(Math.random()*10000); | ||||
| 
 | ||||
|       if (arguments.length > 0 && arguments[0] instanceof $) { | ||||
|         el = arguments[0]; | ||||
|       } else if(this.settings.$target && !/body/i.test(this.settings.$target.selector)){ | ||||
|         el = this.settings.$target; | ||||
|       }  else { | ||||
|         return false; | ||||
|       } | ||||
| 
 | ||||
|       if(el.length < 1){ | ||||
|         if(window.console){ | ||||
|           console.error('element not valid', el); | ||||
|         } | ||||
|         return false; | ||||
|       } | ||||
| 
 | ||||
|       expose = $(this.settings.template.expose); | ||||
|       this.settings.$body.append(expose); | ||||
|       expose.css({ | ||||
|         top: el.offset().top, | ||||
|         left: el.offset().left, | ||||
|         width: this.outerWidth(el, true), | ||||
|         height: this.outerHeight(el, true) | ||||
|       }); | ||||
| 
 | ||||
|       exposeCover = $(this.settings.template.exposeCover); | ||||
| 
 | ||||
|       origCSS = { | ||||
|         zIndex: el.css('z-index'), | ||||
|         position: el.css('position') | ||||
|       }; | ||||
|        | ||||
|       origClasses = el.attr('class') == null ? '' : el.attr('class'); | ||||
| 
 | ||||
|       el.css('z-index',parseInt(expose.css('z-index'))+1); | ||||
| 
 | ||||
|       if (origCSS.position == 'static') { | ||||
|         el.css('position','relative'); | ||||
|       } | ||||
| 
 | ||||
|       el.data('expose-css',origCSS); | ||||
|       el.data('orig-class', origClasses); | ||||
|       el.attr('class', origClasses + ' ' + this.settings.exposeAddClass); | ||||
| 
 | ||||
|       exposeCover.css({ | ||||
|         top: el.offset().top, | ||||
|         left: el.offset().left, | ||||
|         width: this.outerWidth(el, true), | ||||
|         height: this.outerHeight(el, true) | ||||
|       }); | ||||
| 
 | ||||
|       this.settings.$body.append(exposeCover); | ||||
|       expose.addClass(randId); | ||||
|       exposeCover.addClass(randId); | ||||
|       el.data('expose', randId); | ||||
|       this.settings.postExposeCallback(this.settings.$li.index(), this.settings.$next_tip, el); | ||||
|       this.add_exposed(el); | ||||
|     }, | ||||
| 
 | ||||
|     un_expose : function () { | ||||
|       var exposeId, | ||||
|           el, | ||||
|           expose , | ||||
|           origCSS, | ||||
|           origClasses, | ||||
|           clearAll = false; | ||||
| 
 | ||||
|       if (arguments.length > 0 && arguments[0] instanceof $) { | ||||
|         el = arguments[0]; | ||||
|       } else if(this.settings.$target && !/body/i.test(this.settings.$target.selector)){ | ||||
|         el = this.settings.$target; | ||||
|       }  else { | ||||
|         return false; | ||||
|       } | ||||
| 
 | ||||
|       if(el.length < 1){ | ||||
|         if (window.console) { | ||||
|           console.error('element not valid', el); | ||||
|         } | ||||
|         return false; | ||||
|       } | ||||
| 
 | ||||
|       exposeId = el.data('expose'); | ||||
|       expose = $('.' + exposeId); | ||||
| 
 | ||||
|       if (arguments.length > 1) { | ||||
|         clearAll = arguments[1]; | ||||
|       } | ||||
| 
 | ||||
|       if (clearAll === true) { | ||||
|         $('.joyride-expose-wrapper,.joyride-expose-cover').remove(); | ||||
|       } else { | ||||
|         expose.remove(); | ||||
|       } | ||||
| 
 | ||||
|       origCSS = el.data('expose-css'); | ||||
| 
 | ||||
|       if (origCSS.zIndex == 'auto') { | ||||
|         el.css('z-index', ''); | ||||
|       } else { | ||||
|         el.css('z-index', origCSS.zIndex); | ||||
|       } | ||||
| 
 | ||||
|       if (origCSS.position != el.css('position')) { | ||||
|         if(origCSS.position == 'static') {// this is default, no need to set it.
 | ||||
|           el.css('position', ''); | ||||
|         } else { | ||||
|           el.css('position', origCSS.position); | ||||
|         } | ||||
|       } | ||||
|        | ||||
|       origClasses = el.data('orig-class'); | ||||
|       el.attr('class', origClasses); | ||||
|       el.removeData('orig-classes'); | ||||
| 
 | ||||
|       el.removeData('expose'); | ||||
|       el.removeData('expose-z-index'); | ||||
|       this.remove_exposed(el); | ||||
|     }, | ||||
| 
 | ||||
|     add_exposed: function(el){ | ||||
|       this.settings.exposed = this.settings.exposed || []; | ||||
|       if (el instanceof $ || typeof el === 'object') { | ||||
|         this.settings.exposed.push(el[0]); | ||||
|       } else if (typeof el == 'string') { | ||||
|         this.settings.exposed.push(el); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     remove_exposed: function(el){ | ||||
|       var search, count; | ||||
|       if (el instanceof $) { | ||||
|         search = el[0] | ||||
|       } else if (typeof el == 'string'){ | ||||
|         search = el; | ||||
|       } | ||||
| 
 | ||||
|       this.settings.exposed = this.settings.exposed || []; | ||||
|       count = this.settings.exposed.length; | ||||
| 
 | ||||
|       for (var i=0; i < count; i++) { | ||||
|         if (this.settings.exposed[i] == search) { | ||||
|           this.settings.exposed.splice(i, 1); | ||||
|           return; | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     center : function () { | ||||
|       var $w = $(window); | ||||
| 
 | ||||
|       this.settings.$next_tip.css({ | ||||
|         top : ((($w.height() - this.outerHeight(this.settings.$next_tip)) / 2) + $w.scrollTop()), | ||||
|         left : ((($w.width() - this.outerWidth(this.settings.$next_tip)) / 2) + this.scrollLeft($w)) | ||||
|       }); | ||||
| 
 | ||||
|       return true; | ||||
|     }, | ||||
| 
 | ||||
|     bottom : function () { | ||||
|       return /bottom/i.test(this.settings.tipSettings.tipLocation); | ||||
|     }, | ||||
| 
 | ||||
|     top : function () { | ||||
|       return /top/i.test(this.settings.tipSettings.tipLocation); | ||||
|     }, | ||||
| 
 | ||||
|     right : function () { | ||||
|       return /right/i.test(this.settings.tipSettings.tipLocation); | ||||
|     }, | ||||
| 
 | ||||
|     left : function () { | ||||
|       return /left/i.test(this.settings.tipSettings.tipLocation); | ||||
|     }, | ||||
| 
 | ||||
|     corners : function (el) { | ||||
|       var w = $(window), | ||||
|           window_half = w.height() / 2, | ||||
|           //using this to calculate since scroll may not have finished yet.
 | ||||
|           tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight()), | ||||
|           right = w.width() + this.scrollLeft(w), | ||||
|           offsetBottom =  w.height() + tipOffset, | ||||
|           bottom = w.height() + w.scrollTop(), | ||||
|           top = w.scrollTop(); | ||||
| 
 | ||||
|       if (tipOffset < top) { | ||||
|         if (tipOffset < 0) { | ||||
|           top = 0; | ||||
|         } else { | ||||
|           top = tipOffset; | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (offsetBottom > bottom) { | ||||
|         bottom = offsetBottom; | ||||
|       } | ||||
| 
 | ||||
|       return [ | ||||
|         el.offset().top < top, | ||||
|         right < el.offset().left + el.outerWidth(), | ||||
|         bottom < el.offset().top + el.outerHeight(), | ||||
|         this.scrollLeft(w) > el.offset().left | ||||
|       ]; | ||||
|     }, | ||||
| 
 | ||||
|     visible : function (hidden_corners) { | ||||
|       var i = hidden_corners.length; | ||||
| 
 | ||||
|       while (i--) { | ||||
|         if (hidden_corners[i]) return false; | ||||
|       } | ||||
| 
 | ||||
|       return true; | ||||
|     }, | ||||
| 
 | ||||
|     nub_position : function (nub, pos, def) { | ||||
|       if (pos === 'auto') { | ||||
|         nub.addClass(def); | ||||
|       } else { | ||||
|         nub.addClass(pos); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     startTimer : function () { | ||||
|       if (this.settings.$li.length) { | ||||
|         this.settings.automate = setTimeout(function () { | ||||
|           this.hide(); | ||||
|           this.show(); | ||||
|           this.startTimer(); | ||||
|         }.bind(this), this.settings.timer); | ||||
|       } else { | ||||
|         clearTimeout(this.settings.automate); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     end : function () { | ||||
|       if (this.settings.cookieMonster) { | ||||
|         $.cookie(this.settings.cookieName, 'ridden', { expires: this.settings.cookieExpires, domain: this.settings.cookieDomain }); | ||||
|       } | ||||
| 
 | ||||
|       if (this.settings.timer > 0) { | ||||
|         clearTimeout(this.settings.automate); | ||||
|       } | ||||
| 
 | ||||
|       if (this.settings.modal && this.settings.expose) { | ||||
|         this.un_expose(); | ||||
|       } | ||||
| 
 | ||||
|       this.settings.$next_tip.data('closed', true); | ||||
| 
 | ||||
|       $('.joyride-modal-bg').hide(); | ||||
|       this.settings.$current_tip.hide(); | ||||
|       this.settings.postStepCallback(this.settings.$li.index(), this.settings.$current_tip); | ||||
|       this.settings.postRideCallback(this.settings.$li.index(), this.settings.$current_tip); | ||||
|       $('.joyride-tip-guide').remove(); | ||||
|     }, | ||||
| 
 | ||||
|     outerHTML : function (el) { | ||||
|       // support FireFox < 11
 | ||||
|       return el.outerHTML || new XMLSerializer().serializeToString(el); | ||||
|     }, | ||||
| 
 | ||||
|     off : function () { | ||||
|       $(this.scope).off('.joyride'); | ||||
|       $(window).off('.joyride'); | ||||
|       $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride'); | ||||
|       $('.joyride-tip-guide, .joyride-modal-bg').remove(); | ||||
|       clearTimeout(this.settings.automate); | ||||
|       this.settings = {}; | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () {} | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
| @ -29,6 +29,48 @@ if (typeof jQuery === "undefined" && | ||||
| (function ($, window, document, undefined) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   /* | ||||
|     matchMedia() polyfill - Test a CSS media  | ||||
|     type/query in JS. Authors & copyright (c) 2012:  | ||||
|     Scott Jehl, Paul Irish, Nicholas Zakas.  | ||||
|     Dual MIT/BSD license | ||||
| 
 | ||||
|     https://github.com/paulirish/matchMedia.js
 | ||||
|   */ | ||||
| 
 | ||||
|   window.matchMedia = window.matchMedia || (function( doc, undefined ) { | ||||
| 
 | ||||
|     "use strict"; | ||||
| 
 | ||||
|     var bool, | ||||
|         docElem = doc.documentElement, | ||||
|         refNode = docElem.firstElementChild || docElem.firstChild, | ||||
|         // fakeBody required for <FF4 when executed in <head>
 | ||||
|         fakeBody = doc.createElement( "body" ), | ||||
|         div = doc.createElement( "div" ); | ||||
| 
 | ||||
|     div.id = "mq-test-1"; | ||||
|     div.style.cssText = "position:absolute;top:-100em"; | ||||
|     fakeBody.style.background = "none"; | ||||
|     fakeBody.appendChild(div); | ||||
| 
 | ||||
|     return function(q){ | ||||
| 
 | ||||
|       div.innerHTML = "­<style media=\"" + q + "\"> #mq-test-1 { width: 42px; }</style>"; | ||||
| 
 | ||||
|       docElem.insertBefore( fakeBody, refNode ); | ||||
|       bool = div.offsetWidth === 42; | ||||
|       docElem.removeChild( fakeBody ); | ||||
| 
 | ||||
|       return { | ||||
|         matches: bool, | ||||
|         media: q | ||||
|       }; | ||||
| 
 | ||||
|     }; | ||||
| 
 | ||||
|   }( document )); | ||||
| 
 | ||||
|   // add dusty browser stuff
 | ||||
|   if (!Array.prototype.filter) { | ||||
|     Array.prototype.filter = function(fun /*, thisp */) { | ||||
| @ -40,7 +82,7 @@ if (typeof jQuery === "undefined" && | ||||
| 
 | ||||
|       var t = Object(this), | ||||
|           len = t.length >>> 0; | ||||
|       if (typeof fun != "function") { | ||||
|       if (typeof fun !== "function") { | ||||
|           return; | ||||
|       } | ||||
| 
 | ||||
| @ -124,9 +166,8 @@ if (typeof jQuery === "undefined" && | ||||
|   window.Foundation = { | ||||
|     name : 'Foundation', | ||||
| 
 | ||||
|     version : '4.1.5', | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     // global Foundation cache object
 | ||||
|     cache : {}, | ||||
| 
 | ||||
|     init : function (scope, libraries, method, options, response, /* internal */ nc) { | ||||
| @ -145,7 +186,7 @@ if (typeof jQuery === "undefined" && | ||||
|       // set foundation global scope
 | ||||
|       this.scope = scope || this.scope; | ||||
| 
 | ||||
|       if (libraries && typeof libraries === 'string') { | ||||
|       if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) { | ||||
|         if (/off/i.test(libraries)) return this.off(); | ||||
| 
 | ||||
|         library_arr = libraries.split(' '); | ||||
| @ -156,6 +197,8 @@ if (typeof jQuery === "undefined" && | ||||
|           } | ||||
|         } | ||||
|       } else { | ||||
|         if (/reflow/i.test(libraries)) args[1] = 'reflow'; | ||||
| 
 | ||||
|         for (var lib in this.libs) { | ||||
|           responses.push(this.init_lib(lib, args)); | ||||
|         } | ||||
| @ -189,6 +232,9 @@ if (typeof jQuery === "undefined" && | ||||
|           this.patch(this.libs[lib]); | ||||
|           return this.libs[lib].init.apply(this.libs[lib], args); | ||||
|         } | ||||
|         else { | ||||
|           return function () {}; | ||||
|         } | ||||
|       }.bind(this), lib); | ||||
|     }, | ||||
| 
 | ||||
| @ -221,15 +267,15 @@ if (typeof jQuery === "undefined" && | ||||
|     }, | ||||
| 
 | ||||
|     random_str : function (length) { | ||||
|       var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(''); | ||||
|       var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); | ||||
| 
 | ||||
|       if (!length) { | ||||
|           length = Math.floor(Math.random() * chars.length); | ||||
|         length = Math.floor(Math.random() * chars.length); | ||||
|       } | ||||
| 
 | ||||
|       var str = ''; | ||||
|       for (var i = 0; i < length; i++) { | ||||
|           str += chars[Math.floor(Math.random() * chars.length)]; | ||||
|         str += chars[Math.floor(Math.random() * chars.length)]; | ||||
|       } | ||||
|       return str; | ||||
|     }, | ||||
| @ -381,9 +427,9 @@ if (typeof jQuery === "undefined" && | ||||
|     }, | ||||
| 
 | ||||
|     zj : function () { | ||||
|       try { | ||||
|       if (typeof Zepto !== 'undefined') { | ||||
|         return Zepto; | ||||
|       } catch (e) { | ||||
|       } else { | ||||
|         return jQuery; | ||||
|       } | ||||
|     }() | ||||
| @ -6,7 +6,7 @@ | ||||
|   Foundation.libs.magellan = { | ||||
|     name : 'magellan', | ||||
| 
 | ||||
|     version : '4.0.0', | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     settings : { | ||||
|       activeClass: 'active' | ||||
| @ -20,7 +20,7 @@ | ||||
|         $.extend(true, this.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method != 'string') { | ||||
|       if (typeof method !== 'string') { | ||||
|         if (!this.settings.init) { | ||||
|           this.fixed_magellan = $("[data-magellan-expedition]"); | ||||
|           this.set_threshold(); | ||||
| @ -54,7 +54,7 @@ | ||||
|         .on('update-position.fndtn.magellan', function(){ | ||||
|           var $el = $(this); | ||||
|           // $el.data("magellan-fixed-position","");
 | ||||
|           //$el.data("magellan-top-offset", "");
 | ||||
|           // $el.data("magellan-top-offset", "");
 | ||||
|         }) | ||||
|         .trigger('update-position'); | ||||
| 
 | ||||
| @ -79,8 +79,10 @@ | ||||
|             if ($expedition.data("magellan-fixed-position") != fixed_position) { | ||||
|               $expedition.data("magellan-fixed-position", fixed_position); | ||||
|               if (fixed_position) { | ||||
|                 $expedition.addClass('fixed'); | ||||
|                 $expedition.css({position:"fixed", top:0}); | ||||
|               } else { | ||||
|                 $expedition.removeClass('fixed'); | ||||
|                 $expedition.css({position:"", top:""}); | ||||
|               } | ||||
|               if (fixed_position && typeof attr != 'undefined' && attr != false) { | ||||
| @ -125,6 +127,8 @@ | ||||
| 
 | ||||
|     off : function () { | ||||
|       $(this.scope).off('.fndtn.magellan'); | ||||
|     } | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () {} | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
| @ -6,10 +6,12 @@ | ||||
|   Foundation.libs.orbit = { | ||||
|     name: 'orbit', | ||||
| 
 | ||||
|     version: '4.1.0', | ||||
|     version: '4.2.0', | ||||
| 
 | ||||
|     settings: { | ||||
|       timer_speed: 10000, | ||||
|       pause_on_hover: true, | ||||
|       resume_on_mouseout: false, | ||||
|       animation_speed: 500, | ||||
|       bullets: true, | ||||
|       stack_on_small: true, | ||||
| @ -39,6 +41,11 @@ | ||||
|         $.extend(true, self.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       if ($(scope).is('[data-orbit]')) { | ||||
|         var scoped_self = $.extend(true, {}, self); | ||||
|         scoped_self._init(idx, el); | ||||
|       } | ||||
| 
 | ||||
|       $('[data-orbit]', scope).each(function(idx, el) { | ||||
|         var scoped_self = $.extend(true, {}, self); | ||||
|         scoped_self._init(idx, el); | ||||
| @ -119,7 +126,7 @@ | ||||
|       $slides_container.append($slides.first().clone().attr('data-orbit-slide','')); | ||||
|       $slides_container.prepend($slides.last().clone().attr('data-orbit-slide','')); | ||||
|       // Make the first "real" slide active
 | ||||
|       $slides_container.css('marginLeft', '-100%'); | ||||
|       $slides_container.css(Foundation.rtl ? 'marginRight' : 'marginLeft', '-100%'); | ||||
|       $slides.first().addClass(self.settings.active_slide_class); | ||||
| 
 | ||||
|       self._init_events($slides_container); | ||||
| @ -161,6 +168,16 @@ | ||||
|         }); | ||||
| 
 | ||||
|       $container | ||||
|         .on('mouseenter.fndtn.orbit', function(e) { | ||||
|           if (self.settings.pause_on_hover) { | ||||
|             self._stop_timer($slides_container); | ||||
|           } | ||||
|         }) | ||||
|         .on('mouseleave.fndtn.orbit', function(e) { | ||||
|           if (self.settings.resume_on_mouseout) { | ||||
|             self._start_timer($slides_container); | ||||
|           } | ||||
|         }) | ||||
|         .on('orbit:after-slide-change.fndtn.orbit', function(e, orbit) { | ||||
|           var $slide_number = $container.find('.' + self.settings.slide_number_class); | ||||
| 
 | ||||
| @ -168,12 +185,12 @@ | ||||
|             $slide_number.replaceWith(self._slide_number_html(orbit.slide_number, orbit.total_slides)); | ||||
|           } | ||||
|         }) | ||||
|         .on('orbit:next-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.next_class, function(e) { | ||||
|         .on('orbit:next-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.next_class.split(" ").join("."), function(e) { | ||||
|           e.preventDefault(); | ||||
|           self._reset_timer($slides_container, true); | ||||
|           self._goto($slides_container, 'next', function() {}); | ||||
|         }) | ||||
|         .on('orbit:prev-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.prev_class, function(e) { | ||||
|         .on('orbit:prev-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.prev_class.split(" ").join("."), function(e) { | ||||
|           e.preventDefault(); | ||||
|           self._reset_timer($slides_container, true); | ||||
|           self._goto($slides_container, 'prev', function() {}); | ||||
							
								
								
									
										179
									
								
								static/js/vendor/foundation/foundation.placeholder.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								static/js/vendor/foundation/foundation.placeholder.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,179 @@ | ||||
| /*! http://mths.be/placeholder v2.0.7 by @mathias  | ||||
| 	Modified to work with Zepto.js by ZURB | ||||
| */ | ||||
| ;(function(window, document, $) { | ||||
| 
 | ||||
| 	var isInputSupported = 'placeholder' in document.createElement('input'), | ||||
| 	    isTextareaSupported = 'placeholder' in document.createElement('textarea'), | ||||
| 	    prototype = $.fn, | ||||
| 	    valHooks = $.valHooks, | ||||
| 	    hooks, | ||||
| 	    placeholder; | ||||
| 
 | ||||
| 	if (isInputSupported && isTextareaSupported) { | ||||
| 
 | ||||
| 		placeholder = prototype.placeholder = function() { | ||||
| 			return this; | ||||
| 		}; | ||||
| 
 | ||||
| 		placeholder.input = placeholder.textarea = true; | ||||
| 
 | ||||
| 	} else { | ||||
| 
 | ||||
| 		placeholder = prototype.placeholder = function() { | ||||
| 			var $this = this; | ||||
| 			$this | ||||
| 				.filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]') | ||||
| 				.not('.placeholder') | ||||
| 				.bind({ | ||||
| 					'focus.placeholder': clearPlaceholder, | ||||
| 					'blur.placeholder': setPlaceholder | ||||
| 				}) | ||||
| 				.data('placeholder-enabled', true) | ||||
| 				.trigger('blur.placeholder'); | ||||
| 			return $this; | ||||
| 		}; | ||||
| 
 | ||||
| 		placeholder.input = isInputSupported; | ||||
| 		placeholder.textarea = isTextareaSupported; | ||||
| 
 | ||||
| 		hooks = { | ||||
| 			'get': function(element) { | ||||
| 				var $element = $(element); | ||||
| 				return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value; | ||||
| 			}, | ||||
| 			'set': function(element, value) { | ||||
| 				var $element = $(element); | ||||
| 				if (!$element.data('placeholder-enabled')) { | ||||
| 					return element.value = value; | ||||
| 				} | ||||
| 				if (value == '') { | ||||
| 					element.value = value; | ||||
| 					// Issue #56: Setting the placeholder causes problems if the element continues to have focus.
 | ||||
| 					if (element != document.activeElement) { | ||||
| 						// We can't use `triggerHandler` here because of dummy text/password inputs :(
 | ||||
| 						setPlaceholder.call(element); | ||||
| 					} | ||||
| 				} else if ($element.hasClass('placeholder')) { | ||||
| 					clearPlaceholder.call(element, true, value) || (element.value = value); | ||||
| 				} else { | ||||
| 					element.value = value; | ||||
| 				} | ||||
| 				// `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363
 | ||||
| 				return $element; | ||||
| 			} | ||||
| 		}; | ||||
| 
 | ||||
| 		isInputSupported || (valHooks.input = hooks); | ||||
| 		isTextareaSupported || (valHooks.textarea = hooks); | ||||
| 
 | ||||
| 		$(function() { | ||||
| 			// Look for forms
 | ||||
| 			$(document).delegate('form', 'submit.placeholder', function() { | ||||
| 				// Clear the placeholder values so they don't get submitted
 | ||||
| 				var $inputs = $('.placeholder', this).each(clearPlaceholder); | ||||
| 				setTimeout(function() { | ||||
| 					$inputs.each(setPlaceholder); | ||||
| 				}, 10); | ||||
| 			}); | ||||
| 		}); | ||||
| 
 | ||||
| 		// Clear placeholder values upon page reload
 | ||||
| 		$(window).bind('beforeunload.placeholder', function() { | ||||
| 			$('.placeholder').each(function() { | ||||
| 				this.value = ''; | ||||
| 			}); | ||||
| 		}); | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	function args(elem) { | ||||
| 		// Return an object of element attributes
 | ||||
| 		var newAttrs = {}, | ||||
| 		    rinlinejQuery = /^jQuery\d+$/; | ||||
| 		$.each(elem.attributes, function(i, attr) { | ||||
| 			if (attr.specified && !rinlinejQuery.test(attr.name)) { | ||||
| 				newAttrs[attr.name] = attr.value; | ||||
| 			} | ||||
| 		}); | ||||
| 		return newAttrs; | ||||
| 	} | ||||
| 
 | ||||
| 	function clearPlaceholder(event, value) { | ||||
| 		var input = this, | ||||
| 		    $input = $(input); | ||||
| 		if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) { | ||||
| 			if ($input.data('placeholder-password')) { | ||||
| 				$input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id')); | ||||
| 				// If `clearPlaceholder` was called from `$.valHooks.input.set`
 | ||||
| 				if (event === true) { | ||||
| 					return $input[0].value = value; | ||||
| 				} | ||||
| 				$input.focus(); | ||||
| 			} else { | ||||
| 				input.value = ''; | ||||
| 				$input.removeClass('placeholder'); | ||||
| 				input == document.activeElement && input.select(); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function setPlaceholder() { | ||||
| 		var $replacement, | ||||
| 		    input = this, | ||||
| 		    $input = $(input), | ||||
| 		    $origInput = $input, | ||||
| 		    id = this.id; | ||||
| 		if (input.value == '') { | ||||
| 			if (input.type == 'password') { | ||||
| 				if (!$input.data('placeholder-textinput')) { | ||||
| 					try { | ||||
| 						$replacement = $input.clone().attr({ 'type': 'text' }); | ||||
| 					} catch(e) { | ||||
| 						$replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' })); | ||||
| 					} | ||||
| 					$replacement | ||||
| 						.removeAttr('name') | ||||
| 						.data({ | ||||
| 							'placeholder-password': true, | ||||
| 							'placeholder-id': id | ||||
| 						}) | ||||
| 						.bind('focus.placeholder', clearPlaceholder); | ||||
| 					$input | ||||
| 						.data({ | ||||
| 							'placeholder-textinput': $replacement, | ||||
| 							'placeholder-id': id | ||||
| 						}) | ||||
| 						.before($replacement); | ||||
| 				} | ||||
| 				$input = $input.removeAttr('id').hide().prev().attr('id', id).show(); | ||||
| 				// Note: `$input[0] != input` now!
 | ||||
| 			} | ||||
| 			$input.addClass('placeholder'); | ||||
| 			$input[0].value = $input.attr('placeholder'); | ||||
| 		} else { | ||||
| 			$input.removeClass('placeholder'); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| }(this, document, Foundation.zj)); | ||||
| 
 | ||||
| ;(function ($, window, document, undefined) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   Foundation.libs.placeholder = { | ||||
|     name : 'placeholder', | ||||
| 
 | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     init : function (scope, method, options) { | ||||
|       this.scope = scope || this.scope; | ||||
| 
 | ||||
|       if (typeof method !== 'string') { | ||||
|         window.onload = function () { | ||||
|         	$('input, textarea').placeholder(); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
| @ -6,7 +6,7 @@ | ||||
|   Foundation.libs.reveal = { | ||||
|     name: 'reveal', | ||||
| 
 | ||||
|     version : '4.1.3', | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     locked : false, | ||||
| 
 | ||||
| @ -14,6 +14,7 @@ | ||||
|       animation: 'fadeAndPop', | ||||
|       animationSpeed: 250, | ||||
|       closeOnBackgroundClick: true, | ||||
|       closeOnEsc: true, | ||||
|       dismissModalClass: 'close-reveal-modal', | ||||
|       bgClass: 'reveal-modal-bg', | ||||
|       open: function(){}, | ||||
| @ -36,7 +37,6 @@ | ||||
|     }, | ||||
| 
 | ||||
|     init : function (scope, method, options) { | ||||
|       this.scope = scope || this.scope; | ||||
|       Foundation.inherit(this, 'data_options delay'); | ||||
| 
 | ||||
|       if (typeof method === 'object') { | ||||
| @ -45,7 +45,7 @@ | ||||
|         $.extend(true, this.settings, options); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method != 'string') { | ||||
|       if (typeof method !== 'string') { | ||||
|         this.events(); | ||||
| 
 | ||||
|         return this.settings.init; | ||||
| @ -61,12 +61,23 @@ | ||||
|         .off('.fndtn.reveal') | ||||
|         .on('click.fndtn.reveal', '[data-reveal-id]', function (e) { | ||||
|           e.preventDefault(); | ||||
| 
 | ||||
|           if (!self.locked) { | ||||
|             var element = $(this), | ||||
|                 ajax = element.data('reveal-ajax'); | ||||
| 
 | ||||
|             self.locked = true; | ||||
|             self.open.call(self, $(this)); | ||||
| 
 | ||||
|             if (typeof ajax === 'undefined') { | ||||
|               self.open.call(self, element); | ||||
|             } else { | ||||
|               var url = ajax === true ? element.attr('href') : ajax; | ||||
| 
 | ||||
|               self.open.call(self, element, {url: url}); | ||||
|             } | ||||
|           } | ||||
|         }) | ||||
|         .on('click.fndtn.reveal touchend.click.fndtn.reveal', this.close_targets(), function (e) { | ||||
|         .on('click.fndtn.reveal', this.close_targets(), function (e) { | ||||
|           e.preventDefault(); | ||||
|           if (!self.locked) { | ||||
|             var settings = $.extend({}, self.settings, self.data_options($('.reveal-modal.open'))); | ||||
| @ -85,12 +96,26 @@ | ||||
|         .on('closed.fndtn.reveal', '.reveal-modal', this.settings.closed) | ||||
|         .on('closed.fndtn.reveal', '.reveal-modal', this.close_video); | ||||
| 
 | ||||
|       $( 'body' ).bind( 'keyup.reveal', function ( event ) { | ||||
|         var open_modal = $('.reveal-modal.open'), | ||||
|             settings = $.extend({}, self.settings, self.data_options(open_modal)); | ||||
|         if ( event.which === 27  && settings.closeOnEsc) { // 27 is the keycode for the Escape key
 | ||||
|           open_modal.foundation('reveal', 'close'); | ||||
|         } | ||||
|       }); | ||||
| 
 | ||||
|       return true; | ||||
|     }, | ||||
| 
 | ||||
|     open : function (target) { | ||||
|     open : function (target, ajax_settings) { | ||||
|       if (target) { | ||||
|         var modal = $('#' + target.data('reveal-id')); | ||||
|         if (typeof target.selector !== 'undefined') { | ||||
|           var modal = $('#' + target.data('reveal-id')); | ||||
|         } else { | ||||
|           var modal = $(this.scope); | ||||
| 
 | ||||
|           ajax_settings = target; | ||||
|         } | ||||
|       } else { | ||||
|         var modal = $(this.scope); | ||||
|       } | ||||
| @ -108,14 +133,36 @@ | ||||
|         if (open_modal.length < 1) { | ||||
|           this.toggle_bg(modal); | ||||
|         } | ||||
|         this.hide(open_modal, this.settings.css.close); | ||||
|         this.show(modal, this.settings.css.open); | ||||
| 
 | ||||
|         if (typeof ajax_settings === 'undefined' || !ajax_settings.url) { | ||||
|           this.hide(open_modal, this.settings.css.close); | ||||
|           this.show(modal, this.settings.css.open); | ||||
|         } else { | ||||
|           var self = this, | ||||
|               old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null; | ||||
| 
 | ||||
|           $.extend(ajax_settings, { | ||||
|             success: function (data, textStatus, jqXHR) { | ||||
|               if ( $.isFunction(old_success) ) { | ||||
|                 old_success(data, textStatus, jqXHR); | ||||
|               } | ||||
| 
 | ||||
|               modal.html(data); | ||||
|               $(modal).foundation('section', 'reflow'); | ||||
| 
 | ||||
|               self.hide(open_modal, self.settings.css.close); | ||||
|               self.show(modal, self.settings.css.open); | ||||
|             } | ||||
|           }); | ||||
| 
 | ||||
|           $.ajax(ajax_settings); | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     close : function (modal) { | ||||
| 
 | ||||
|       var modal = modal || $(this.scope), | ||||
|       var modal = modal && modal.length ? modal : $(this.scope), | ||||
|           open_modals = $('.reveal-modal.open'); | ||||
| 
 | ||||
|       if (open_modals.length > 0) { | ||||
| @ -245,7 +292,7 @@ | ||||
|       if (iframe.length > 0) { | ||||
|         iframe.attr('data-src', iframe[0].src); | ||||
|         iframe.attr('src', 'about:blank'); | ||||
|         video.fadeOut(100).hide(); | ||||
|         video.hide(); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
| @ -257,8 +304,12 @@ | ||||
|         var data_src = iframe.attr('data-src'); | ||||
|         if (typeof data_src === 'string') { | ||||
|           iframe[0].src = iframe.attr('data-src'); | ||||
|         } else { | ||||
|           var src = iframe[0].src; | ||||
|           iframe[0].src = undefined; | ||||
|           iframe[0].src = src; | ||||
|         } | ||||
|         video.show().fadeIn(100); | ||||
|         video.show(); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
| @ -272,6 +323,8 @@ | ||||
| 
 | ||||
|     off : function () { | ||||
|       $(this.scope).off('.fndtn.reveal'); | ||||
|     } | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () {} | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
| @ -6,10 +6,11 @@ | ||||
|   Foundation.libs.section = { | ||||
|     name: 'section', | ||||
| 
 | ||||
|     version : '4.1.3', | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     settings : { | ||||
|       deep_linking: false, | ||||
|       small_breakpoint: 768, | ||||
|       one_up: true, | ||||
|       section_selector : '[data-section]', | ||||
|       region_selector : 'section, .section, [data-section-region]', | ||||
| @ -28,7 +29,7 @@ | ||||
|         $.extend(true, self.settings, method); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method != 'string') { | ||||
|       if (typeof method !== 'string') { | ||||
|         this.set_active_from_hash(); | ||||
|         this.events(); | ||||
| 
 | ||||
| @ -44,10 +45,12 @@ | ||||
|       $(this.scope) | ||||
|         .on('click.fndtn.section', '[data-section] .title, [data-section] [data-section-title]', function (e) { | ||||
|           var $this = $(this), | ||||
|               section = $this.closest(self.settings.section_selector); | ||||
|               section = $this.closest(self.settings.region_selector); | ||||
| 
 | ||||
|           self.toggle_active.call(this, e, self); | ||||
|           self.reflow(); | ||||
|           if (section.children(self.settings.content_selector).length > 0) { | ||||
|             self.toggle_active.call(this, e, self); | ||||
|             self.reflow(); | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|       $(window) | ||||
| @ -197,7 +200,7 @@ | ||||
|         self.position_titles($this); | ||||
| 
 | ||||
|         if ( (self.is_horizontal_nav($this) && !self.small($this)) | ||||
|           || self.is_vertical_tabs($this)) { | ||||
|           || self.is_vertical_tabs($this) && !self.small($this)) { | ||||
|           self.position_content($this); | ||||
|         } else { | ||||
|           self.position_content($this, false); | ||||
| @ -229,7 +232,6 @@ | ||||
|       var hash = window.location.hash.substring(1), | ||||
|           sections = $('[data-section]'), | ||||
|           self = this; | ||||
| 
 | ||||
|       sections.each(function () { | ||||
|         var section = $(this), | ||||
|             settings = $.extend({}, self.settings, self.data_options(section)); | ||||
| @ -239,12 +241,21 @@ | ||||
|             .children(self.settings.region_selector) | ||||
|             .attr('style', '') | ||||
|             .removeClass('active'); | ||||
|           regions | ||||
|             .map(function () { | ||||
|               return $(this).children('.content[data-slug="' + hash + '"], [data-section-content][data-slug="' + hash + '"]'); | ||||
|             }) | ||||
|             .parent() | ||||
|             .addClass('active'); | ||||
| 
 | ||||
|           var hash_regions = regions.map(function () { | ||||
|               var content = $(self.settings.content_selector, this), | ||||
|                   content_slug = content.data('slug'); | ||||
| 
 | ||||
|               if (new RegExp(content_slug, 'i').test(hash))  | ||||
|                 return content; | ||||
|             }); | ||||
| 
 | ||||
| 
 | ||||
|           var count = hash_regions.length; | ||||
| 
 | ||||
|           for (var i = count - 1; i >= 0; i--) { | ||||
|             $(hash_regions[i]).parent().addClass('active'); | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
| @ -295,6 +306,11 @@ | ||||
|       if (typeof off === 'boolean') { | ||||
|         content.attr('style', ''); | ||||
|         section.attr('style', ''); | ||||
| 
 | ||||
|         // Reset the minHeight and maxWidth values (only applicable to
 | ||||
|         // vertical tabs)
 | ||||
|         content.css('minHeight', ''); | ||||
|         content.css('maxWidth', ''); | ||||
|       } else { | ||||
|         if (self.is_vertical_tabs(section) | ||||
|             && !self.small(section)) { | ||||
| @ -310,6 +326,7 @@ | ||||
| 
 | ||||
|             title_width = self.outerWidth(title); | ||||
|             content_width = self.outerWidth(section) - title_width; | ||||
| 
 | ||||
|             if (content_width < content_min_width) { | ||||
|               content_min_width = content_width; | ||||
|             } | ||||
| @ -335,9 +352,6 @@ | ||||
|             content.css('maxWidth', content_min_width - 2); | ||||
|           }); | ||||
| 
 | ||||
|           // Adjust the outer section container width to match
 | ||||
|           // the width of the title and content
 | ||||
|           section.css('maxWidth', title_width + content_min_width); | ||||
|         } else { | ||||
|           regions.each(function () { | ||||
|             var region = $(this), | ||||
| @ -356,9 +370,9 @@ | ||||
| 
 | ||||
|           // temporary work around for Zepto outerheight calculation issues.
 | ||||
|           if (typeof Zepto === 'function') { | ||||
|             section.height(this.outerHeight(titles.first())); | ||||
|             section.height(this.outerHeight($(titles[0]))); | ||||
|           } else { | ||||
|             section.height(this.outerHeight(titles.first()) - 2); | ||||
|             section.height(this.outerHeight($(titles[0])) - 2); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| @ -383,6 +397,7 @@ | ||||
| 
 | ||||
|     small : function (el) { | ||||
|       var settings = $.extend({}, this.settings, this.data_options(el)); | ||||
| 
 | ||||
|       if (this.is_horizontal_tabs(el)) { | ||||
|         return false; | ||||
|       } | ||||
| @ -395,7 +410,7 @@ | ||||
|       if ($('html').hasClass('ie8compat')) { | ||||
|         return true; | ||||
|       } | ||||
|       return $(this.scope).width() < 768; | ||||
|       return $(this.scope).width() < settings.small_breakpoint; | ||||
|     }, | ||||
| 
 | ||||
|     off : function () { | ||||
							
								
								
									
										208
									
								
								static/js/vendor/foundation/foundation.tooltips.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								static/js/vendor/foundation/foundation.tooltips.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,208 @@ | ||||
| /*jslint unparam: true, browser: true, indent: 2 */ | ||||
| 
 | ||||
| ;(function ($, window, document, undefined) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   Foundation.libs.tooltips = { | ||||
|     name: 'tooltips', | ||||
| 
 | ||||
|     version : '4.2.2', | ||||
| 
 | ||||
|     settings : { | ||||
|       selector : '.has-tip', | ||||
|       additionalInheritableClasses : [], | ||||
|       tooltipClass : '.tooltip', | ||||
|       appendTo: 'body', | ||||
|       'disable-for-touch': false, | ||||
|       tipTemplate : function (selector, content) { | ||||
|         return '<span data-selector="' + selector + '" class="'  | ||||
|           + Foundation.libs.tooltips.settings.tooltipClass.substring(1)  | ||||
|           + '">' + content + '<span class="nub"></span></span>'; | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     cache : {}, | ||||
| 
 | ||||
|     init : function (scope, method, options) { | ||||
|       Foundation.inherit(this, 'data_options'); | ||||
|       var self = this; | ||||
| 
 | ||||
|       if (typeof method === 'object') { | ||||
|         $.extend(true, this.settings, method); | ||||
|       } else if (typeof options !== 'undefined') { | ||||
|         $.extend(true, this.settings, options); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method !== 'string') { | ||||
|         if (Modernizr.touch) { | ||||
|           $(this.scope) | ||||
|             .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip',  | ||||
|               '[data-tooltip]', function (e) { | ||||
|               var settings = $.extend({}, self.settings, self.data_options($(this))); | ||||
|               if (!settings['disable-for-touch']) { | ||||
|                 e.preventDefault(); | ||||
|                 $(settings.tooltipClass).hide(); | ||||
|                 self.showOrCreateTip($(this)); | ||||
|               } | ||||
|             }) | ||||
|             .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip',  | ||||
|               this.settings.tooltipClass, function (e) { | ||||
|               e.preventDefault(); | ||||
|               $(this).fadeOut(150); | ||||
|             }); | ||||
|         } else { | ||||
|           $(this.scope) | ||||
|             .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip',  | ||||
|               '[data-tooltip]', function (e) { | ||||
|               var $this = $(this); | ||||
| 
 | ||||
|               if (/enter|over/i.test(e.type)) { | ||||
|                 self.showOrCreateTip($this); | ||||
|               } else if (e.type === 'mouseout' || e.type === 'mouseleave') { | ||||
|                 self.hide($this); | ||||
|               } | ||||
|             }); | ||||
|         } | ||||
| 
 | ||||
|         // $(this.scope).data('fndtn-tooltips', true);
 | ||||
|       } else { | ||||
|         return this[method].call(this, options); | ||||
|       } | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     showOrCreateTip : function ($target) { | ||||
|       var $tip = this.getTip($target); | ||||
| 
 | ||||
|       if ($tip && $tip.length > 0) { | ||||
|         return this.show($target); | ||||
|       } | ||||
| 
 | ||||
|       return this.create($target); | ||||
|     }, | ||||
| 
 | ||||
|     getTip : function ($target) { | ||||
|       var selector = this.selector($target), | ||||
|           tip = null; | ||||
| 
 | ||||
|       if (selector) { | ||||
|         tip = $('span[data-selector="' + selector + '"]' + this.settings.tooltipClass); | ||||
|       } | ||||
| 
 | ||||
|       return (typeof tip === 'object') ? tip : false; | ||||
|     }, | ||||
| 
 | ||||
|     selector : function ($target) { | ||||
|       var id = $target.attr('id'), | ||||
|           dataSelector = $target.attr('data-tooltip') || $target.attr('data-selector'); | ||||
| 
 | ||||
|       if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') { | ||||
|         dataSelector = 'tooltip' + Math.random().toString(36).substring(7); | ||||
|         $target.attr('data-selector', dataSelector); | ||||
|       } | ||||
| 
 | ||||
|       return (id && id.length > 0) ? id : dataSelector; | ||||
|     }, | ||||
| 
 | ||||
|     create : function ($target) { | ||||
|       var $tip = $(this.settings.tipTemplate(this.selector($target), $('<div></div>').html($target.attr('title')).html())), | ||||
|           classes = this.inheritable_classes($target); | ||||
| 
 | ||||
|       $tip.addClass(classes).appendTo(this.settings.appendTo); | ||||
|       if (Modernizr.touch) { | ||||
|         $tip.append('<span class="tap-to-close">tap to close </span>'); | ||||
|       } | ||||
|       $target.removeAttr('title').attr('title',''); | ||||
|       this.show($target); | ||||
|     }, | ||||
| 
 | ||||
|     reposition : function (target, tip, classes) { | ||||
|       var width, nub, nubHeight, nubWidth, column, objPos; | ||||
| 
 | ||||
|       tip.css('visibility', 'hidden').show(); | ||||
| 
 | ||||
|       width = target.data('width'); | ||||
|       nub = tip.children('.nub'); | ||||
|       nubHeight = this.outerHeight(nub); | ||||
|       nubWidth = this.outerHeight(nub); | ||||
| 
 | ||||
|       objPos = function (obj, top, right, bottom, left, width) { | ||||
|         return obj.css({ | ||||
|           'top' : (top) ? top : 'auto', | ||||
|           'bottom' : (bottom) ? bottom : 'auto', | ||||
|           'left' : (left) ? left : 'auto', | ||||
|           'right' : (right) ? right : 'auto', | ||||
|           'width' : (width) ? width : 'auto' | ||||
|         }).end(); | ||||
|       }; | ||||
| 
 | ||||
|       objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', target.offset().left, width); | ||||
| 
 | ||||
|       if ($(window).width() < 767) { | ||||
|         objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', 12.5, $(this.scope).width()); | ||||
|         tip.addClass('tip-override'); | ||||
|         objPos(nub, -nubHeight, 'auto', 'auto', target.offset().left); | ||||
|       } else { | ||||
|         var left = target.offset().left; | ||||
|         if (Foundation.rtl) { | ||||
|           left = target.offset().left + target.offset().width - this.outerWidth(tip); | ||||
|         } | ||||
|         objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', left, width); | ||||
|         tip.removeClass('tip-override'); | ||||
|         if (classes && classes.indexOf('tip-top') > -1) { | ||||
|           objPos(tip, (target.offset().top - this.outerHeight(tip)), 'auto', 'auto', left, width) | ||||
|             .removeClass('tip-override'); | ||||
|         } else if (classes && classes.indexOf('tip-left') > -1) { | ||||
|           objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left - this.outerWidth(tip) - nubHeight), width) | ||||
|             .removeClass('tip-override'); | ||||
|         } else if (classes && classes.indexOf('tip-right') > -1) { | ||||
|           objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left + this.outerWidth(target) + nubHeight), width) | ||||
|             .removeClass('tip-override'); | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       tip.css('visibility', 'visible').hide(); | ||||
|     }, | ||||
| 
 | ||||
|     inheritable_classes : function (target) { | ||||
|       var inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'noradius'].concat(this.settings.additionalInheritableClasses), | ||||
|           classes = target.attr('class'), | ||||
|           filtered = classes ? $.map(classes.split(' '), function (el, i) { | ||||
|             if ($.inArray(el, inheritables) !== -1) { | ||||
|               return el; | ||||
|             } | ||||
|           }).join(' ') : ''; | ||||
| 
 | ||||
|       return $.trim(filtered); | ||||
|     }, | ||||
| 
 | ||||
|     show : function ($target) { | ||||
|       var $tip = this.getTip($target); | ||||
| 
 | ||||
|       this.reposition($target, $tip, $target.attr('class')); | ||||
|       $tip.fadeIn(150); | ||||
|     }, | ||||
| 
 | ||||
|     hide : function ($target) { | ||||
|       var $tip = this.getTip($target); | ||||
| 
 | ||||
|       $tip.fadeOut(150); | ||||
|     }, | ||||
| 
 | ||||
|     // deprecate reload
 | ||||
|     reload : function () { | ||||
|       var $self = $(this); | ||||
| 
 | ||||
|       return ($self.data('fndtn-tooltips')) ? $self.foundationTooltips('destroy').foundationTooltips('init') : $self.foundationTooltips('init'); | ||||
|     }, | ||||
| 
 | ||||
|     off : function () { | ||||
|       $(this.scope).off('.fndtn.tooltip'); | ||||
|       $(this.settings.tooltipClass).each(function (i) { | ||||
|         $('[data-tooltip]').get(i).attr('title', $(this).text()); | ||||
|       }).remove(); | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () {} | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
							
								
								
									
										304
									
								
								static/js/vendor/foundation/foundation.topbar.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										304
									
								
								static/js/vendor/foundation/foundation.topbar.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,304 @@ | ||||
| /*jslint unparam: true, browser: true, indent: 2 */ | ||||
| 
 | ||||
| ;(function ($, window, document, undefined) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   Foundation.libs.topbar = { | ||||
|     name : 'topbar', | ||||
| 
 | ||||
|     version : '4.2.3', | ||||
| 
 | ||||
|     settings : { | ||||
|       index : 0, | ||||
|       stickyClass : 'sticky', | ||||
|       custom_back_text: true, | ||||
|       back_text: 'Back', | ||||
|       is_hover: true, | ||||
|       scrolltop : true, // jump to top when sticky nav menu toggle is clicked
 | ||||
|       init : false | ||||
|     }, | ||||
| 
 | ||||
|     init : function (section, method, options) { | ||||
|       Foundation.inherit(this, 'data_options'); | ||||
|       var self = this; | ||||
| 
 | ||||
|       if (typeof method === 'object') { | ||||
|         $.extend(true, this.settings, method); | ||||
|       } else if (typeof options !== 'undefined') { | ||||
|         $.extend(true, this.settings, options); | ||||
|       } | ||||
| 
 | ||||
|       if (typeof method !== 'string') { | ||||
| 
 | ||||
|         $('.top-bar, [data-topbar]').each(function () { | ||||
|           $.extend(true, self.settings, self.data_options($(this))); | ||||
|           self.settings.$w = $(window); | ||||
|           self.settings.$topbar = $(this); | ||||
|           self.settings.$section = self.settings.$topbar.find('section'); | ||||
|           self.settings.$titlebar = self.settings.$topbar.children('ul').first(); | ||||
|           self.settings.$topbar.data('index', 0); | ||||
| 
 | ||||
|           var breakpoint = $("<div class='top-bar-js-breakpoint'/>").insertAfter(self.settings.$topbar); | ||||
|           self.settings.breakPoint = breakpoint.width(); | ||||
|           breakpoint.remove(); | ||||
| 
 | ||||
|           self.assemble(); | ||||
| 
 | ||||
|           if (self.settings.$topbar.parent().hasClass('fixed')) { | ||||
|             $('body').css('padding-top', self.outerHeight(self.settings.$topbar)); | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|         if (!self.settings.init) { | ||||
|           this.events(); | ||||
|         } | ||||
| 
 | ||||
|         return this.settings.init; | ||||
|       } else { | ||||
|         // fire method
 | ||||
|         return this[method].call(this, options); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     events : function () { | ||||
|       var self = this; | ||||
|       var offst = this.outerHeight($('.top-bar, [data-topbar]')); | ||||
|       $(this.scope) | ||||
|         .off('.fndtn.topbar') | ||||
|         .on('click.fndtn.topbar', '.top-bar .toggle-topbar, [data-topbar] .toggle-topbar', function (e) { | ||||
|           var topbar = $(this).closest('.top-bar, [data-topbar]'), | ||||
|               section = topbar.find('section, .section'), | ||||
|               titlebar = topbar.children('ul').first(); | ||||
| 
 | ||||
|           e.preventDefault(); | ||||
| 
 | ||||
|           if (self.breakpoint()) { | ||||
|             if (!self.rtl) { | ||||
|               section.css({left: '0%'}); | ||||
|               section.find('>.name').css({left: '100%'}); | ||||
|             } else { | ||||
|               section.css({right: '0%'}); | ||||
|               section.find('>.name').css({right: '100%'}); | ||||
|             } | ||||
| 
 | ||||
|             section.find('li.moved').removeClass('moved'); | ||||
|             topbar.data('index', 0); | ||||
| 
 | ||||
|             topbar | ||||
|               .toggleClass('expanded') | ||||
|               .css('height', ''); | ||||
|           } | ||||
| 
 | ||||
|           if (!topbar.hasClass('expanded')) { | ||||
|             if (topbar.hasClass('fixed')) { | ||||
|               topbar.parent().addClass('fixed'); | ||||
|               topbar.removeClass('fixed'); | ||||
|               $('body').css('padding-top',offst); | ||||
|             } | ||||
|           } else if (topbar.parent().hasClass('fixed')) { | ||||
|             topbar.parent().removeClass('fixed'); | ||||
|             topbar.addClass('fixed'); | ||||
|             $('body').css('padding-top','0'); | ||||
| 
 | ||||
|             if (self.settings.scrolltop) { | ||||
|               window.scrollTo(0,0); | ||||
|             } | ||||
|           } | ||||
|         }) | ||||
| 
 | ||||
|         .on('mouseenter mouseleave', '.top-bar li', function (e) { | ||||
|           if (!self.settings.is_hover) return; | ||||
| 
 | ||||
|           if (/enter|over/i.test(e.type)) { | ||||
|             $(this).addClass('hover'); | ||||
|           } else { | ||||
|             $(this).removeClass('hover'); | ||||
|           } | ||||
|         }) | ||||
| 
 | ||||
|         .on('click.fndtn.topbar', '.top-bar li.has-dropdown', function (e) { | ||||
|           if (self.breakpoint()) return; | ||||
| 
 | ||||
|           var li = $(this), | ||||
|               target = $(e.target), | ||||
|               topbar = li.closest('[data-topbar], .top-bar'), | ||||
|               is_hover = topbar.data('topbar'); | ||||
| 
 | ||||
|           if (self.settings.is_hover && !Modernizr.touch) return; | ||||
| 
 | ||||
|           e.stopImmediatePropagation(); | ||||
| 
 | ||||
|           if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) { | ||||
|             e.preventDefault(); | ||||
|           } | ||||
| 
 | ||||
|           if (li.hasClass('hover')) { | ||||
|             li | ||||
|               .removeClass('hover') | ||||
|               .find('li') | ||||
|               .removeClass('hover'); | ||||
|           } else { | ||||
|             li.addClass('hover'); | ||||
|           } | ||||
|         }) | ||||
| 
 | ||||
|         .on('click.fndtn.topbar', '.top-bar .has-dropdown>a, [data-topbar] .has-dropdown>a', function (e) { | ||||
|           if (self.breakpoint()) { | ||||
|             e.preventDefault(); | ||||
| 
 | ||||
|             var $this = $(this), | ||||
|                 topbar = $this.closest('.top-bar, [data-topbar]'), | ||||
|                 section = topbar.find('section, .section'), | ||||
|                 titlebar = topbar.children('ul').first(), | ||||
|                 dropdownHeight = $this.next('.dropdown').outerHeight(), | ||||
|                 $selectedLi = $this.closest('li'); | ||||
| 
 | ||||
|             topbar.data('index', topbar.data('index') + 1); | ||||
|             $selectedLi.addClass('moved'); | ||||
| 
 | ||||
|             if (!self.rtl) { | ||||
|               section.css({left: -(100 * topbar.data('index')) + '%'}); | ||||
|               section.find('>.name').css({left: 100 * topbar.data('index') + '%'}); | ||||
|             } else { | ||||
|               section.css({right: -(100 * topbar.data('index')) + '%'}); | ||||
|               section.find('>.name').css({right: 100 * topbar.data('index') + '%'}); | ||||
|             } | ||||
| 
 | ||||
|             topbar.css('height', self.outerHeight($this.siblings('ul'), true) + self.outerHeight(titlebar, true)); | ||||
|           } | ||||
|         }); | ||||
| 
 | ||||
|       $(window).on('resize.fndtn.topbar', function () { | ||||
|         if (!self.breakpoint()) { | ||||
|           $('.top-bar, [data-topbar]') | ||||
|             .css('height', '') | ||||
|             .removeClass('expanded') | ||||
|             .find('li') | ||||
|             .removeClass('hover'); | ||||
|         } | ||||
|       }.bind(this)); | ||||
| 
 | ||||
|       $('body').on('click.fndtn.topbar', function (e) { | ||||
|         var parent = $(e.target).closest('[data-topbar], .top-bar'); | ||||
| 
 | ||||
|         if (parent.length > 0) { | ||||
|           return; | ||||
|         } | ||||
| 
 | ||||
|         $('.top-bar li, [data-topbar] li').removeClass('hover'); | ||||
|       }); | ||||
| 
 | ||||
|       // Go up a level on Click
 | ||||
|       $(this.scope).on('click.fndtn', '.top-bar .has-dropdown .back, [data-topbar] .has-dropdown .back', function (e) { | ||||
|         e.preventDefault(); | ||||
| 
 | ||||
|         var $this = $(this), | ||||
|             topbar = $this.closest('.top-bar, [data-topbar]'), | ||||
|             titlebar = topbar.children('ul').first(), | ||||
|             section = topbar.find('section, .section'), | ||||
|             $movedLi = $this.closest('li.moved'), | ||||
|             $previousLevelUl = $movedLi.parent(); | ||||
| 
 | ||||
|         topbar.data('index', topbar.data('index') - 1); | ||||
| 
 | ||||
|         if (!self.rtl) { | ||||
|           section.css({left: -(100 * topbar.data('index')) + '%'}); | ||||
|           section.find('>.name').css({left: 100 * topbar.data('index') + '%'}); | ||||
|         } else { | ||||
|           section.css({right: -(100 * topbar.data('index')) + '%'}); | ||||
|           section.find('>.name').css({right: 100 * topbar.data('index') + '%'}); | ||||
|         } | ||||
| 
 | ||||
|         if (topbar.data('index') === 0) { | ||||
|           topbar.css('height', ''); | ||||
|         } else { | ||||
|           topbar.css('height', self.outerHeight($previousLevelUl, true) + self.outerHeight(titlebar, true)); | ||||
|         } | ||||
| 
 | ||||
|         setTimeout(function () { | ||||
|           $movedLi.removeClass('moved'); | ||||
|         }, 300); | ||||
|       }); | ||||
|     }, | ||||
| 
 | ||||
|     breakpoint : function () { | ||||
|       return $(document).width() <= this.settings.breakPoint || $('html').hasClass('lt-ie9'); | ||||
|     }, | ||||
| 
 | ||||
|     assemble : function () { | ||||
|       var self = this; | ||||
|       // Pull element out of the DOM for manipulation
 | ||||
|       this.settings.$section.detach(); | ||||
| 
 | ||||
|       this.settings.$section.find('.has-dropdown>a').each(function () { | ||||
|         var $link = $(this), | ||||
|             $dropdown = $link.siblings('.dropdown'), | ||||
|             url = $link.attr('href'); | ||||
| 
 | ||||
|         if (url && url.length > 1) { | ||||
|           var $titleLi = $('<li class="title back js-generated"><h5><a href="#"></a></h5></li><li><a class="parent-link js-generated" href="' + url + '">' + $link.text() +'</a></li>'); | ||||
|         } else { | ||||
|           var $titleLi = $('<li class="title back js-generated"><h5><a href="#"></a></h5></li>'); | ||||
|         } | ||||
| 
 | ||||
|         // Copy link to subnav
 | ||||
|         if (self.settings.custom_back_text == true) { | ||||
|           $titleLi.find('h5>a').html('« ' + self.settings.back_text); | ||||
|         } else { | ||||
|           $titleLi.find('h5>a').html('« ' + $link.html()); | ||||
|         } | ||||
|         $dropdown.prepend($titleLi); | ||||
|       }); | ||||
| 
 | ||||
|       // Put element back in the DOM
 | ||||
|       this.settings.$section.appendTo(this.settings.$topbar); | ||||
| 
 | ||||
|       // check for sticky
 | ||||
|       this.sticky(); | ||||
|     }, | ||||
| 
 | ||||
|     height : function (ul) { | ||||
|       var total = 0, | ||||
|           self = this; | ||||
| 
 | ||||
|       ul.find('> li').each(function () { total += self.outerHeight($(this), true); }); | ||||
| 
 | ||||
|       return total; | ||||
|     }, | ||||
| 
 | ||||
|     sticky : function () { | ||||
|       var klass = '.' + this.settings.stickyClass; | ||||
|       if ($(klass).length > 0) { | ||||
|         var distance = $(klass).length ? $(klass).offset().top: 0, | ||||
|             $window = $(window), | ||||
|             offst = this.outerHeight($('.top-bar')), | ||||
|             t_top; | ||||
|         //Whe resize elements of the page on windows resize. Must recalculate distance
 | ||||
| 		$(window).resize(function() { | ||||
|             clearTimeout(t_top); | ||||
| 			t_top = setTimeout (function() { | ||||
| 				distance = $(klass).offset().top; | ||||
| 			},105); | ||||
| 		}); | ||||
|           $window.scroll(function() { | ||||
|             if ($window.scrollTop() > (distance)) { | ||||
|               $(klass).addClass("fixed"); | ||||
|               $('body').css('padding-top',offst); | ||||
|             } | ||||
| 
 | ||||
|             else if ($window.scrollTop() <= distance) { | ||||
|               $(klass).removeClass("fixed"); | ||||
|               $('body').css('padding-top','0'); | ||||
|             } | ||||
|         }); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     off : function () { | ||||
|       $(this.scope).off('.fndtn.topbar'); | ||||
|       $(window).off('.fndtn.topbar'); | ||||
|     }, | ||||
| 
 | ||||
|     reflow : function () {} | ||||
|   }; | ||||
| }(Foundation.zj, this, this.document)); | ||||
							
								
								
									
										17
									
								
								static/js/vendor/foundation/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								static/js/vendor/foundation/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| /* | ||||
| =require foundation/foundation | ||||
| =require foundation/foundation.alerts | ||||
| =require foundation/foundation.clearing | ||||
| =require foundation/foundation.cookie | ||||
| =require foundation/foundation.dropdown | ||||
| =require foundation/foundation.forms | ||||
| =require foundation/foundation.joyride | ||||
| =require foundation/foundation.magellan | ||||
| =require foundation/foundation.orbit | ||||
| =require foundation/foundation.reveal | ||||
| =require foundation/foundation.section | ||||
| =require foundation/foundation.tooltips | ||||
| =require foundation/foundation.topbar | ||||
| =require foundation/foundation.interchange | ||||
| =require foundation/foundation.placeholder | ||||
| */ | ||||
							
								
								
									
										9807
									
								
								static/js/vendor/jquery.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9807
									
								
								static/js/vendor/jquery.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6
									
								
								static/js/vendor/jquery.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								static/js/vendor/jquery.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2000
									
								
								static/js/vendor/zepto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2000
									
								
								static/js/vendor/zepto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2
									
								
								static/js/vendor/zepto.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								static/js/vendor/zepto.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user