New theme and structure
This commit is contained in:
		
					parent
					
						
							
								28a99a0e04
							
						
					
				
			
			
				commit
				
					
						e4bafbb361
					
				
			
		
					 108 changed files with 9391 additions and 0 deletions
				
			
		
							
								
								
									
										255
									
								
								assets/js/plugins/jquery.dlmenu.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										255
									
								
								assets/js/plugins/jquery.dlmenu.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,255 @@ | |||
| /** | ||||
|  * jquery.dlmenu.js v1.0.1 | ||||
|  * http://www.codrops.com
 | ||||
|  * | ||||
|  * Licensed under the MIT license. | ||||
|  * http://www.opensource.org/licenses/mit-license.php
 | ||||
|  *  | ||||
|  * Copyright 2013, Codrops | ||||
|  * http://www.codrops.com
 | ||||
|  */ | ||||
| ;( function( $, window, undefined ) { | ||||
| 
 | ||||
| 	'use strict'; | ||||
| 
 | ||||
| 	// global
 | ||||
| 	var Modernizr = window.Modernizr, $body = $( 'body' ); | ||||
| 
 | ||||
| 	$.DLMenu = function( options, element ) { | ||||
| 		this.$el = $( element ); | ||||
| 		this._init( options ); | ||||
| 	}; | ||||
| 
 | ||||
| 	// the options
 | ||||
| 	$.DLMenu.defaults = { | ||||
| 		// classes for the animation effects
 | ||||
| 		animationClasses : { classin : 'dl-animate-in-1', classout : 'dl-animate-out-1' }, | ||||
| 		// callback: click a link that has a sub menu
 | ||||
| 		// el is the link element (li); name is the level name
 | ||||
| 		onLevelClick : function( el, name ) { return false; }, | ||||
| 		// callback: click a link that does not have a sub menu
 | ||||
| 		// el is the link element (li); ev is the event obj
 | ||||
| 		onLinkClick : function( el, ev ) { return false; } | ||||
| 	}; | ||||
| 
 | ||||
| 	$.DLMenu.prototype = { | ||||
| 		_init : function( options ) { | ||||
| 
 | ||||
| 			// options
 | ||||
| 			this.options = $.extend( true, {}, $.DLMenu.defaults, options ); | ||||
| 			// cache some elements and initialize some variables
 | ||||
| 			this._config(); | ||||
| 			 | ||||
| 			var animEndEventNames = { | ||||
| 					'WebkitAnimation' : 'webkitAnimationEnd', | ||||
| 					'OAnimation' : 'oAnimationEnd', | ||||
| 					'msAnimation' : 'MSAnimationEnd', | ||||
| 					'animation' : 'animationend' | ||||
| 				}, | ||||
| 				transEndEventNames = { | ||||
| 					'WebkitTransition' : 'webkitTransitionEnd', | ||||
| 					'MozTransition' : 'transitionend', | ||||
| 					'OTransition' : 'oTransitionEnd', | ||||
| 					'msTransition' : 'MSTransitionEnd', | ||||
| 					'transition' : 'transitionend' | ||||
| 				}; | ||||
| 			// animation end event name
 | ||||
| 			this.animEndEventName = animEndEventNames[ Modernizr.prefixed( 'animation' ) ] + '.dlmenu'; | ||||
| 			// transition end event name
 | ||||
| 			this.transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ] + '.dlmenu', | ||||
| 			// support for css animations and css transitions
 | ||||
| 			this.supportAnimations = Modernizr.cssanimations, | ||||
| 			this.supportTransitions = Modernizr.csstransitions; | ||||
| 
 | ||||
| 			this._initEvents(); | ||||
| 
 | ||||
| 		}, | ||||
| 		_config : function() { | ||||
| 			this.open = false; | ||||
| 			this.$trigger = this.$el.children( '.dl-trigger' ); | ||||
| 			this.$menu = this.$el.children( 'ul.dl-menu' ); | ||||
| 			this.$menuitems = this.$menu.find( 'li:not(.dl-back)' ); | ||||
| 			this.$el.find( 'ul.dl-submenu' ).prepend( '<li class="dl-back"><a href="#">back</a></li>' ); | ||||
| 			this.$back = this.$menu.find( 'li.dl-back' ); | ||||
| 		}, | ||||
| 		_initEvents : function() { | ||||
| 
 | ||||
| 			var self = this; | ||||
| 
 | ||||
| 			this.$trigger.on( 'click.dlmenu', function() { | ||||
| 				 | ||||
| 				if( self.open ) { | ||||
| 					self._closeMenu(); | ||||
| 				}  | ||||
| 				else { | ||||
| 					self._openMenu(); | ||||
| 				} | ||||
| 				return false; | ||||
| 
 | ||||
| 			} ); | ||||
| 
 | ||||
| 			this.$menuitems.on( 'click.dlmenu', function( event ) { | ||||
| 				 | ||||
| 				event.stopPropagation(); | ||||
| 
 | ||||
| 				var $item = $(this), | ||||
| 					$submenu = $item.children( 'ul.dl-submenu' ); | ||||
| 
 | ||||
| 				if( $submenu.length > 0 ) { | ||||
| 
 | ||||
| 					var $flyin = $submenu.clone().css({ | ||||
| 						opacity: 0, | ||||
| 						margin: 0 | ||||
| 					}).insertAfter( self.$menu ), | ||||
| 						onAnimationEndFn = function() { | ||||
| 							self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classout ).addClass( 'dl-subview' ); | ||||
| 							$item.addClass( 'dl-subviewopen' ).parents( '.dl-subviewopen:first' ).removeClass( 'dl-subviewopen' ).addClass( 'dl-subview' ); | ||||
| 							$flyin.remove(); | ||||
| 						}; | ||||
| 
 | ||||
| 					setTimeout( function() { | ||||
| 						$flyin.addClass( self.options.animationClasses.classin ); | ||||
| 						self.$menu.addClass( self.options.animationClasses.classout ); | ||||
| 						if( self.supportAnimations ) { | ||||
| 							self.$menu.on( self.animEndEventName, onAnimationEndFn ); | ||||
| 						} | ||||
| 						else { | ||||
| 							onAnimationEndFn.call(); | ||||
| 						} | ||||
| 
 | ||||
| 						self.options.onLevelClick( $item, $item.children( 'a:first' ).text() ); | ||||
| 					} ); | ||||
| 
 | ||||
| 					return false; | ||||
| 
 | ||||
| 				} | ||||
| 				else { | ||||
| 					self.options.onLinkClick( $item, event ); | ||||
| 				} | ||||
| 
 | ||||
| 			} ); | ||||
| 
 | ||||
| 			this.$back.on( 'click.dlmenu', function( event ) { | ||||
| 				 | ||||
| 				var $this = $( this ), | ||||
| 					$submenu = $this.parents( 'ul.dl-submenu:first' ), | ||||
| 					$item = $submenu.parent(), | ||||
| 
 | ||||
| 					$flyin = $submenu.clone().insertAfter( self.$menu ); | ||||
| 
 | ||||
| 				var onAnimationEndFn = function() { | ||||
| 					self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classin ); | ||||
| 					$flyin.remove(); | ||||
| 				}; | ||||
| 
 | ||||
| 				setTimeout( function() { | ||||
| 					$flyin.addClass( self.options.animationClasses.classout ); | ||||
| 					self.$menu.addClass( self.options.animationClasses.classin ); | ||||
| 					if( self.supportAnimations ) { | ||||
| 						self.$menu.on( self.animEndEventName, onAnimationEndFn ); | ||||
| 					} | ||||
| 					else { | ||||
| 						onAnimationEndFn.call(); | ||||
| 					} | ||||
| 
 | ||||
| 					$item.removeClass( 'dl-subviewopen' ); | ||||
| 					 | ||||
| 					var $subview = $this.parents( '.dl-subview:first' ); | ||||
| 					if( $subview.is( 'li' ) ) { | ||||
| 						$subview.addClass( 'dl-subviewopen' ); | ||||
| 					} | ||||
| 					$subview.removeClass( 'dl-subview' ); | ||||
| 				} ); | ||||
| 
 | ||||
| 				return false; | ||||
| 
 | ||||
| 			} ); | ||||
| 			 | ||||
| 		}, | ||||
| 		closeMenu : function() { | ||||
| 			if( this.open ) { | ||||
| 				this._closeMenu(); | ||||
| 			} | ||||
| 		}, | ||||
| 		_closeMenu : function() { | ||||
| 			var self = this, | ||||
| 				onTransitionEndFn = function() { | ||||
| 					self.$menu.off( self.transEndEventName ); | ||||
| 					self._resetMenu(); | ||||
| 				}; | ||||
| 			 | ||||
| 			this.$menu.removeClass( 'dl-menuopen' ); | ||||
| 			this.$menu.addClass( 'dl-menu-toggle' ); | ||||
| 			this.$trigger.removeClass( 'dl-active' ); | ||||
| 			 | ||||
| 			if( this.supportTransitions ) { | ||||
| 				this.$menu.on( this.transEndEventName, onTransitionEndFn ); | ||||
| 			} | ||||
| 			else { | ||||
| 				onTransitionEndFn.call(); | ||||
| 			} | ||||
| 
 | ||||
| 			this.open = false; | ||||
| 		}, | ||||
| 		openMenu : function() { | ||||
| 			if( !this.open ) { | ||||
| 				this._openMenu(); | ||||
| 			} | ||||
| 		}, | ||||
| 		_openMenu : function() { | ||||
| 			var self = this; | ||||
| 			// clicking somewhere else makes the menu close
 | ||||
| 			$body.off( 'click' ).on( 'click.dlmenu', function() { | ||||
| 				self._closeMenu() ; | ||||
| 			} ); | ||||
| 			this.$menu.addClass( 'dl-menuopen dl-menu-toggle' ).on( this.transEndEventName, function() { | ||||
| 				$( this ).removeClass( 'dl-menu-toggle' ); | ||||
| 			} ); | ||||
| 			this.$trigger.addClass( 'dl-active' ); | ||||
| 			this.open = true; | ||||
| 		}, | ||||
| 		// resets the menu to its original state (first level of options)
 | ||||
| 		_resetMenu : function() { | ||||
| 			this.$menu.removeClass( 'dl-subview' ); | ||||
| 			this.$menuitems.removeClass( 'dl-subview dl-subviewopen' ); | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
| 	var logError = function( message ) { | ||||
| 		if ( window.console ) { | ||||
| 			window.console.error( message ); | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
| 	$.fn.dlmenu = function( options ) { | ||||
| 		if ( typeof options === 'string' ) { | ||||
| 			var args = Array.prototype.slice.call( arguments, 1 ); | ||||
| 			this.each(function() { | ||||
| 				var instance = $.data( this, 'dlmenu' ); | ||||
| 				if ( !instance ) { | ||||
| 					logError( "cannot call methods on dlmenu prior to initialization; " + | ||||
| 					"attempted to call method '" + options + "'" ); | ||||
| 					return; | ||||
| 				} | ||||
| 				if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) { | ||||
| 					logError( "no such method '" + options + "' for dlmenu instance" ); | ||||
| 					return; | ||||
| 				} | ||||
| 				instance[ options ].apply( instance, args ); | ||||
| 			}); | ||||
| 		}  | ||||
| 		else { | ||||
| 			this.each(function() {	 | ||||
| 				var instance = $.data( this, 'dlmenu' ); | ||||
| 				if ( instance ) { | ||||
| 					instance._init(); | ||||
| 				} | ||||
| 				else { | ||||
| 					instance = $.data( this, 'dlmenu', new $.DLMenu( options, this ) ); | ||||
| 				} | ||||
| 			}); | ||||
| 		} | ||||
| 		return this; | ||||
| 	}; | ||||
| 
 | ||||
| } )( jQuery, window ); | ||||
							
								
								
									
										81
									
								
								assets/js/plugins/jquery.fitvids.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								assets/js/plugins/jquery.fitvids.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,81 @@ | |||
| /*global jQuery */ | ||||
| /*jshint multistr:true, browser:true */ | ||||
| /*! | ||||
| * FitVids 1.0 | ||||
| * | ||||
| * Copyright 2011, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
 | ||||
| * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
 | ||||
| * Released under the WTFPL license - http://sam.zoy.org/wtfpl/
 | ||||
| * | ||||
| * Date: Thu Sept 01 18:00:00 2011 -0500 | ||||
| */ | ||||
| 
 | ||||
| (function( $ ){ | ||||
| 
 | ||||
|   "use strict"; | ||||
| 
 | ||||
|   $.fn.fitVids = function( options ) { | ||||
|     var settings = { | ||||
|       customSelector: null | ||||
|     }; | ||||
| 
 | ||||
|     var div = document.createElement('div'), | ||||
|         ref = document.getElementsByTagName('base')[0] || document.getElementsByTagName('script')[0]; | ||||
| 
 | ||||
|     div.className = 'fit-vids-style'; | ||||
|     div.innerHTML = '­<style>         \ | ||||
|       .fluid-width-video-wrapper {        \ | ||||
|          width: 100%;                     \ | ||||
|          position: relative;              \ | ||||
|          padding: 0;                      \ | ||||
|       }                                   \ | ||||
|                                           \ | ||||
|       .fluid-width-video-wrapper iframe,  \ | ||||
|       .fluid-width-video-wrapper object,  \ | ||||
|       .fluid-width-video-wrapper embed {  \ | ||||
|          position: absolute;              \ | ||||
|          top: 0;                          \ | ||||
|          left: 0;                         \ | ||||
|          width: 100%;                     \ | ||||
|          height: 100%;                    \ | ||||
|       }                                   \ | ||||
|     </style>'; | ||||
| 
 | ||||
|     ref.parentNode.insertBefore(div,ref); | ||||
| 
 | ||||
|     if ( options ) { | ||||
|       $.extend( settings, options ); | ||||
|     } | ||||
| 
 | ||||
|     return this.each(function(){ | ||||
|       var selectors = [ | ||||
|         "iframe[src*='player.vimeo.com']", | ||||
|         "iframe[src*='www.youtube.com']", | ||||
|         "iframe[src*='www.youtube-nocookie.com']", | ||||
|         "iframe[src*='www.kickstarter.com']", | ||||
|         "object", | ||||
|         "embed" | ||||
|       ]; | ||||
| 
 | ||||
|       if (settings.customSelector) { | ||||
|         selectors.push(settings.customSelector); | ||||
|       } | ||||
| 
 | ||||
|       var $allVideos = $(this).find(selectors.join(',')); | ||||
| 
 | ||||
|       $allVideos.each(function(){ | ||||
|         var $this = $(this); | ||||
|         if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } | ||||
|         var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), | ||||
|             width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), | ||||
|             aspectRatio = height / width; | ||||
|         if(!$this.attr('id')){ | ||||
|           var videoID = 'fitvid' + Math.floor(Math.random()*999999); | ||||
|           $this.attr('id', videoID); | ||||
|         } | ||||
|         $this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%"); | ||||
|         $this.removeAttr('height').removeAttr('width'); | ||||
|       }); | ||||
|     }); | ||||
|   }; | ||||
| })( jQuery ); | ||||
							
								
								
									
										2026
									
								
								assets/js/plugins/jquery.magnific-popup.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2026
									
								
								assets/js/plugins/jquery.magnific-popup.js
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										342
									
								
								assets/js/plugins/respond.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										342
									
								
								assets/js/plugins/respond.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,342 @@ | |||
| /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ | ||||
| /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ | ||||
| 
 | ||||
| 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 )); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs  */ | ||||
| (function( win ){ | ||||
| 
 | ||||
| 	"use strict"; | ||||
| 
 | ||||
| 	//exposed namespace
 | ||||
| 	var respond = {}; | ||||
| 	win.respond = respond; | ||||
| 	 | ||||
| 	//define update even in native-mq-supporting browsers, to avoid errors
 | ||||
| 	respond.update = function(){}; | ||||
| 	 | ||||
| 	//expose media query support flag for external use
 | ||||
| 	respond.mediaQueriesSupported	= win.matchMedia && win.matchMedia( "only all" ).matches; | ||||
| 	 | ||||
| 	//if media queries are supported, exit here
 | ||||
| 	if( respond.mediaQueriesSupported ){ | ||||
| 		return; | ||||
| 	} | ||||
| 	 | ||||
| 	//define vars
 | ||||
| 	var doc = win.document, | ||||
| 		docElem = doc.documentElement, | ||||
| 		mediastyles = [], | ||||
| 		rules = [], | ||||
| 		appendedEls = [], | ||||
| 		parsedSheets = {}, | ||||
| 		resizeThrottle = 30, | ||||
| 		head = doc.getElementsByTagName( "head" )[0] || docElem, | ||||
| 		base = doc.getElementsByTagName( "base" )[0], | ||||
| 		links = head.getElementsByTagName( "link" ), | ||||
| 		requestQueue = [], | ||||
| 		 | ||||
| 		//loop stylesheets, send text content to translate
 | ||||
| 		ripCSS = function(){ | ||||
| 
 | ||||
| 			for( var i = 0; i < links.length; i++ ){ | ||||
| 				var sheet = links[ i ], | ||||
| 				href = sheet.href, | ||||
| 				media = sheet.media, | ||||
| 				isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; | ||||
| 
 | ||||
| 				//only links plz and prevent re-parsing
 | ||||
| 				if( !!href && isCSS && !parsedSheets[ href ] ){ | ||||
| 					// selectivizr exposes css through the rawCssText expando
 | ||||
| 					if (sheet.styleSheet && sheet.styleSheet.rawCssText) { | ||||
| 						translate( sheet.styleSheet.rawCssText, href, media ); | ||||
| 						parsedSheets[ href ] = true; | ||||
| 					} else { | ||||
| 						if( (!/^([a-zA-Z:]*\/\/)/.test( href ) && !base) || | ||||
| 							href.replace( RegExp.$1, "" ).split( "/" )[0] === win.location.host ){ | ||||
| 							requestQueue.push( { | ||||
| 								href: href, | ||||
| 								media: media | ||||
| 							} ); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			makeRequests(); | ||||
| 		}, | ||||
| 		 | ||||
| 		//recurse through request queue, get css text
 | ||||
| 		makeRequests	= function(){ | ||||
| 			if( requestQueue.length ){ | ||||
| 				var thisRequest = requestQueue.shift(); | ||||
| 				 | ||||
| 				ajax( thisRequest.href, function( styles ){ | ||||
| 					translate( styles, thisRequest.href, thisRequest.media ); | ||||
| 					parsedSheets[ thisRequest.href ] = true; | ||||
| 
 | ||||
| 					// by wrapping recursive function call in setTimeout 
 | ||||
| 					// we prevent "Stack overflow" error in IE7
 | ||||
| 					win.setTimeout(function(){ makeRequests(); },0); | ||||
| 				} ); | ||||
| 			} | ||||
| 		}, | ||||
| 		 | ||||
| 		//find media blocks in css text, convert to style blocks
 | ||||
| 		translate = function( styles, href, media ){ | ||||
| 			var qs = styles.match(  /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi ), | ||||
| 				ql = qs && qs.length || 0; | ||||
| 
 | ||||
| 			//try to get CSS path
 | ||||
| 			href = href.substring( 0, href.lastIndexOf( "/" ) ); | ||||
| 
 | ||||
| 			var repUrls	= function( css ){ | ||||
| 					return css.replace( /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, "$1" + href + "$2$3" ); | ||||
| 				}, | ||||
| 				useMedia = !ql && media; | ||||
| 
 | ||||
| 			//if path exists, tack on trailing slash
 | ||||
| 			if( href.length ){ href += "/"; }	 | ||||
| 				 | ||||
| 			//if no internal queries exist, but media attr does, use that	
 | ||||
| 			//note: this currently lacks support for situations where a media attr is specified on a link AND
 | ||||
| 				//its associated stylesheet has internal CSS media queries.
 | ||||
| 				//In those cases, the media attribute will currently be ignored.
 | ||||
| 			if( useMedia ){ | ||||
| 				ql = 1; | ||||
| 			} | ||||
| 
 | ||||
| 			for( var i = 0; i < ql; i++ ){ | ||||
| 				var fullq, thisq, eachq, eql; | ||||
| 
 | ||||
| 				//media attr
 | ||||
| 				if( useMedia ){ | ||||
| 					fullq = media; | ||||
| 					rules.push( repUrls( styles ) ); | ||||
| 				} | ||||
| 				//parse for styles
 | ||||
| 				else{ | ||||
| 					fullq = qs[ i ].match( /@media *([^\{]+)\{([\S\s]+?)$/ ) && RegExp.$1; | ||||
| 					rules.push( RegExp.$2 && repUrls( RegExp.$2 ) ); | ||||
| 				} | ||||
| 				 | ||||
| 				eachq = fullq.split( "," ); | ||||
| 				eql	= eachq.length; | ||||
| 					 | ||||
| 				for( var j = 0; j < eql; j++ ){ | ||||
| 					thisq = eachq[ j ]; | ||||
| 					mediastyles.push( {  | ||||
| 						media : thisq.split( "(" )[ 0 ].match( /(only\s+)?([a-zA-Z]+)\s?/ ) && RegExp.$2 || "all", | ||||
| 						rules : rules.length - 1, | ||||
| 						hasquery : thisq.indexOf("(") > -1, | ||||
| 						minw : thisq.match( /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/ ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ),  | ||||
| 						maxw : thisq.match( /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/ ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ) | ||||
| 					} ); | ||||
| 				}	 | ||||
| 			} | ||||
| 
 | ||||
| 			applyMedia(); | ||||
| 		}, | ||||
|          | ||||
| 		lastCall, | ||||
| 		 | ||||
| 		resizeDefer, | ||||
| 		 | ||||
| 		// returns the value of 1em in pixels
 | ||||
| 		getEmValue = function() { | ||||
| 			var ret, | ||||
| 				div = doc.createElement('div'), | ||||
| 				body = doc.body, | ||||
| 				fakeUsed = false; | ||||
| 									 | ||||
| 			div.style.cssText = "position:absolute;font-size:1em;width:1em"; | ||||
| 					 | ||||
| 			if( !body ){ | ||||
| 				body = fakeUsed = doc.createElement( "body" ); | ||||
| 				body.style.background = "none"; | ||||
| 			} | ||||
| 					 | ||||
| 			body.appendChild( div ); | ||||
| 								 | ||||
| 			docElem.insertBefore( body, docElem.firstChild ); | ||||
| 								 | ||||
| 			ret = div.offsetWidth; | ||||
| 								 | ||||
| 			if( fakeUsed ){ | ||||
| 				docElem.removeChild( body ); | ||||
| 			} | ||||
| 			else { | ||||
| 				body.removeChild( div ); | ||||
| 			} | ||||
| 			 | ||||
| 			//also update eminpx before returning
 | ||||
| 			ret = eminpx = parseFloat(ret); | ||||
| 								 | ||||
| 			return ret; | ||||
| 		}, | ||||
| 		 | ||||
| 		//cached container for 1em value, populated the first time it's needed 
 | ||||
| 		eminpx, | ||||
| 		 | ||||
| 		//enable/disable styles
 | ||||
| 		applyMedia = function( fromResize ){ | ||||
| 			var name = "clientWidth", | ||||
| 				docElemProp = docElem[ name ], | ||||
| 				currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp, | ||||
| 				styleBlocks	= {}, | ||||
| 				lastLink = links[ links.length-1 ], | ||||
| 				now = (new Date()).getTime(); | ||||
| 
 | ||||
| 			//throttle resize calls	
 | ||||
| 			if( fromResize && lastCall && now - lastCall < resizeThrottle ){ | ||||
| 				win.clearTimeout( resizeDefer ); | ||||
| 				resizeDefer = win.setTimeout( applyMedia, resizeThrottle ); | ||||
| 				return; | ||||
| 			} | ||||
| 			else { | ||||
| 				lastCall = now; | ||||
| 			} | ||||
| 										 | ||||
| 			for( var i in mediastyles ){ | ||||
| 				if( mediastyles.hasOwnProperty( i ) ){ | ||||
| 					var thisstyle = mediastyles[ i ], | ||||
| 						min = thisstyle.minw, | ||||
| 						max = thisstyle.maxw, | ||||
| 						minnull = min === null, | ||||
| 						maxnull = max === null, | ||||
| 						em = "em"; | ||||
| 					 | ||||
| 					if( !!min ){ | ||||
| 						min = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); | ||||
| 					} | ||||
| 					if( !!max ){ | ||||
| 						max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); | ||||
| 					} | ||||
| 					 | ||||
| 					// if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true
 | ||||
| 					if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){ | ||||
| 						if( !styleBlocks[ thisstyle.media ] ){ | ||||
| 							styleBlocks[ thisstyle.media ] = []; | ||||
| 						} | ||||
| 						styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] ); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			//remove any existing respond style element(s)
 | ||||
| 			for( var j in appendedEls ){ | ||||
| 				if( appendedEls.hasOwnProperty( j ) ){ | ||||
| 					if( appendedEls[ j ] && appendedEls[ j ].parentNode === head ){ | ||||
| 						head.removeChild( appendedEls[ j ] ); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			//inject active styles, grouped by media type
 | ||||
| 			for( var k in styleBlocks ){ | ||||
| 				if( styleBlocks.hasOwnProperty( k ) ){ | ||||
| 					var ss = doc.createElement( "style" ), | ||||
| 						css = styleBlocks[ k ].join( "\n" ); | ||||
| 					 | ||||
| 					ss.type = "text/css";	 | ||||
| 					ss.media = k; | ||||
| 					 | ||||
| 					//originally, ss was appended to a documentFragment and sheets were appended in bulk.
 | ||||
| 					//this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one!
 | ||||
| 					head.insertBefore( ss, lastLink.nextSibling ); | ||||
| 					 | ||||
| 					if ( ss.styleSheet ){  | ||||
| 						ss.styleSheet.cssText = css; | ||||
| 					} | ||||
| 					else { | ||||
| 						ss.appendChild( doc.createTextNode( css ) ); | ||||
| 					} | ||||
| 
 | ||||
| 					//push to appendedEls to track for later removal
 | ||||
| 					appendedEls.push( ss ); | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		//tweaked Ajax functions from Quirksmode
 | ||||
| 		ajax = function( url, callback ) { | ||||
| 			var req = xmlHttp(); | ||||
| 			if (!req){ | ||||
| 				return; | ||||
| 			}	 | ||||
| 			req.open( "GET", url, true ); | ||||
| 			req.onreadystatechange = function () { | ||||
| 				if ( req.readyState !== 4 || req.status !== 200 && req.status !== 304 ){ | ||||
| 					return; | ||||
| 				} | ||||
| 				callback( req.responseText ); | ||||
| 			}; | ||||
| 			if ( req.readyState === 4 ){ | ||||
| 				return; | ||||
| 			} | ||||
| 			req.send( null ); | ||||
| 		}, | ||||
| 		//define ajax obj 
 | ||||
| 		xmlHttp = (function() { | ||||
| 			var xmlhttpmethod = false;	 | ||||
| 			try { | ||||
| 				xmlhttpmethod = new win.XMLHttpRequest(); | ||||
| 			} | ||||
| 			catch( e ){ | ||||
| 				xmlhttpmethod = new win.ActiveXObject( "Microsoft.XMLHTTP" ); | ||||
| 			} | ||||
| 			return function(){ | ||||
| 				return xmlhttpmethod; | ||||
| 			}; | ||||
| 		})(); | ||||
| 	 | ||||
| 	//translate CSS
 | ||||
| 	ripCSS(); | ||||
| 	 | ||||
| 	//expose update for re-running respond later on
 | ||||
| 	respond.update = ripCSS; | ||||
| 	 | ||||
| 	//adjust on resize
 | ||||
| 	function callMedia(){ | ||||
| 		applyMedia( true ); | ||||
| 	} | ||||
| 	if( win.addEventListener ){ | ||||
| 		win.addEventListener( "resize", callMedia, false ); | ||||
| 	} | ||||
| 	else if( win.attachEvent ){ | ||||
| 		win.attachEvent( "onresize", callMedia ); | ||||
| 	} | ||||
| })(this); | ||||
		Reference in a new issue