diff --git a/Site/2012-07/MasterPassword_PressKit.zip b/Site/2012-07/MasterPassword_PressKit.zip index cfce9285..679d31ce 120000 --- a/Site/2012-07/MasterPassword_PressKit.zip +++ b/Site/2012-07/MasterPassword_PressKit.zip @@ -1 +1 @@ -../Press/./MasterPassword_PressKit.zip \ No newline at end of file +../../Press/MasterPassword_PressKit.zip \ No newline at end of file diff --git a/Site/2013-05/MasterPassword_PressKit.zip b/Site/2013-05/MasterPassword_PressKit.zip new file mode 100644 index 00000000..c9cd0f3c Binary files /dev/null and b/Site/2013-05/MasterPassword_PressKit.zip differ diff --git a/Site/2013-05/algorithm.html b/Site/2013-05/algorithm.html index 5bd9b82c..69d21c13 100644 --- a/Site/2013-05/algorithm.html +++ b/Site/2013-05/algorithm.html @@ -19,89 +19,6 @@ - - - - - - - - - - - - - - - - @@ -131,24 +48,30 @@ -
+
+ +
- + -

The Master Password Algorithm

- -
+
+

The Master Password Algorithm

+
+ +
+
-
+

Master Password is an algorithm used to generate unique passwords for websites, email accounts, or anything else based only on easily reproducible input.
The goal is a process that avoids all the problems involved with other password solutions.

+

The Master Password algorithm is open: this page describes its inner workings in detail. We believe the following is an important lesson we should all learn: Regardless of how much encryption a solution claims, if you don't know how it works, you cannot assume it is secure (at least, not the kind of secure you care about).

The Password Problem

@@ -187,7 +110,7 @@

-
+

How Does It Work?

The user is expected to remember the following information: @@ -219,14 +142,14 @@

The purpose of this process is to deter any attempts at brute-forcing a user's master password from a known site password. The key derivation is done using the scrypt algorithm, which guarantees that the process sufficiently time- and resource-consuming to make brute-forcing an infeasible attack.

The key derivation is salted by the user's full name to prevent the generation of rainbow tables on the algorithm. This salt is not secret, and the user's full name is chosen because it is an input of sufficiently high entropy while being (hopefully) impossible to forget by the user.

-
key   = scrypt( P, S, N, r, p, dkLen )
-                     where
-                     P     = master password
-                     S     = "com.lyndir.masterpassword" . name length . name
-                     N     = 32768
-                     r     = 8
-                     p     = 2
-                     dkLen = 64
+
key   = scrypt( P, S, N, r, p, dkLen )
+where
+P     = master password
+S     = "com.lyndir.masterpassword" . name length . name
+N     = 32768
+r     = 8
+p     = 2
+dkLen = 64

The Template Seed

With the master key known, we can proceed to calculate a template seed for the site. The template seed is essentially the site-specific secret in binary form.

@@ -248,8 +171,8 @@ To create the output password, the bytes in the template seed are encoded according to the template. The first seed byte is used to determine which of the type's templates to use for encoding an output password. We take the byte value of the first seed byte modulo the amount of templates set for the chosen password type and use the result as a zero-based index in the templates list for the password type.

-
templates = [ "CvcvCvcvnoCvcv", "CvcvnoCvcvCvcv", "CvcvCvcvCvcvno", ... ]
-                     template  = templates[ seed[0] % count( templates ) ]
+
templates = [ "CvcvCvcvnoCvcv", "CvcvnoCvcvCvcv", "CvcvCvcvCvcvno", ... ]
+template  = templates[ seed[0] % count( templates ) ]

Now that we know what template to use for building our output password, all that's left is to iterate the template, and produce a character of password output for each step. When we iterate the template (index i), we look in the character group identified by the character (string passChars) in the template at index i. @@ -258,8 +181,8 @@ We use the seed's byte value at index i + 1 modulo the amount of characters in the character class to determine which character (passChar) in the class to use for the output password at index i.

-
passChar    = passChars[ seed[i + 1] % count( passChars ) ]
-                     passWord[i] = passChar
+
passChar    = passChars[ seed[i + 1] % count( passChars ) ]
+passWord[i] = passChar

The result is an encoded passWord string that contains the password generated for the site, such as:

CuzaSasy3*Rimo

@@ -386,8 +309,98 @@
+ + + + + + + + + + + + + + + + + + + diff --git a/Site/2013-05/css/screen.css b/Site/2013-05/css/screen.css index 229b29bf..67a4c3e0 100644 --- a/Site/2013-05/css/screen.css +++ b/Site/2013-05/css/screen.css @@ -21,7 +21,7 @@ h1, h2, h3, h4 { .content { padding-top: 100px; - width: 900px; + width: 940px; margin: auto; } .box { @@ -33,7 +33,7 @@ h1, h2, h3, h4 { border: 1px solid white; } -.thumb.container { +.thumb { clear: both; border-bottom: 2px ridge white; margin-bottom: 4em; @@ -62,29 +62,53 @@ h1, h2, h3, h4 { header { position: relative; + overflow: hidden; color: white; - text-shadow: black 0 1px 50px, black 0 1px 50px, black 0 1px 50px; + background: black; + text-shadow: black 0 1px 50px; box-shadow: 0 1px 5px #000; } +header .container { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + + background: radial-gradient(70% 50% at 30% 50%, rgba(0,0,0,0.3) 50%, rgba(0,0,0,0.8) 100%); +} +header .background { + position: absolute; + width: 100%; + height: 100%; +} #app header { height: 80%; - /*background: radial-gradient(ellipse at center, rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.5) 100%), black url("../img/shot-laptop-leaning-iphone.png") center top / cover no-repeat;*/ - /*background: radial-gradient(ellipse at center, rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.5) 100%), black url("../img/shot-laptop-standing-iphone-separate.png") center top / cover no-repeat;*/ - /*background: radial-gradient(ellipse at center, rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.5) 100%), black url("../img/shot-laptop-standing-iphone-facing.png") center center / cover no-repeat;*/ - background: radial-gradient(ellipse at 30% 50%, rgba(0,0,0,0.3) 50%,rgba(0,0,0,1) 100%), black url("../img/shot-laptop-standing-iphone-angled-flipped.png") center center / cover no-repeat; +} +#app header .background { + background: url('../img/shot-laptop-standing-iphone-angled-flipped.png') center center; + background-size: cover; } #algorithm header { height: 40%; - background: radial-gradient(ellipse at 30% 50%, rgba(0,0,0,0.3) 50%,rgba(0,0,0,1) 100%), url("../img/mp-process-angled.png") 40% center / contain no-repeat, linear-gradient( to top, #272727, #222222 ); - background-attachment: fixed; + + background: #272727; +} +#algorithm header .background { + width: 940px; + height: auto; + left: 50%; + top: -10%; + margin-left: -470px; +} +#algorithm header .container { + background: radial-gradient(50% 50% at 50% 30%, rgba(0,0,0,0.3) 50%, rgba(0,0,0,0.8) 100%); } header .content { position: absolute; - width: 900px; bottom: 5px; left: 50%; - margin-left: -450px; + margin-left: -470px; text-align: right; @@ -115,4 +139,4 @@ footer .content { } footer .column { text-align: left; -} \ No newline at end of file +} diff --git a/Site/2013-05/img/thumb-authenticate.png b/Site/2013-05/img/thumb-authenticate.png index cea024ae..a03b30cf 100644 Binary files a/Site/2013-05/img/thumb-authenticate.png and b/Site/2013-05/img/thumb-authenticate.png differ diff --git a/Site/2013-05/img/thumb-authenticate@2x.png b/Site/2013-05/img/thumb-authenticate@2x.png index 54f9c8e2..8b61acfd 100644 Binary files a/Site/2013-05/img/thumb-authenticate@2x.png and b/Site/2013-05/img/thumb-authenticate@2x.png differ diff --git a/Site/2013-05/index.html b/Site/2013-05/index.html index d4088cda..1f9fda41 100644 --- a/Site/2013-05/index.html +++ b/Site/2013-05/index.html @@ -20,6 +20,111 @@ + + + + + + + +
+
+
+ + + +
+

Master Password

+

Secure your life, forget your passwords.

+
+ +
+
+ +
+ +
+ + +

Impossible To Lose

+

Master Password is based on an ingenious password generation algorithm that guarantees your passwords can never be lost.

+

While password managers generally save your passwords in an encrypted vault or upload them to the cloud for safe-keeping, they make you dependant on syncing, backups or Internet access.

+

Master Password has none of these downsides. Its passwords aren't stored: they are generated on-demand from your name, the site and your master password; even on a brand-new iPhone.

+
+ +
+ + +

Security Without Worries

+

Coming up with good passwords is hard. Remembering them, even harder. Passwords deter and distract us from what we really want to do.

+

Master Password gives you secure passwords to use, and the assurances that you cannot lose them. Now you can stop worrying about how to make your new account secure, forget about passwords, and get on with what you wanted to get done in the first place.

+
+ +
+ + +

Syncs Seamlessly

+

Contrary to other password solutions, Master Password doesn't need to send your passwords over the network to make them ubiquitously available.

+

Master Password does however integrate iCloud, allowing you to keep the site names you've used in-sync across your devices.

+

This gives you all the conveniences of sync with none of the reliability downsides.

+
+ +
+ + +

Passwords For Any Purpose

+

Master Password comes with a variety of built-in password types. These types make your site's password look different, become more secure or more compatible with a site's password policy.

+

The default password is a great balance between security, compatibility and convenience. It is designed to provide great entropy (security) whilst still being easy to manually enter or remember if needed.

+

You can generate a more secure password, or switch it to a PIN type to use for your bank card or cell phone's SIM lock.

+
+ +
+ + + + + + + + + - - - - - - -
- - - -

Master Password

-

Secure your life, forget your passwords.

- -
- -
- -
- - -

Impossible To Lose

-

Master Password is based on an ingenious password generation algorithm that guarantees your passwords can never be lost.

-

While password managers generally save your passwords in an encrypted vault or upload them to the cloud for safe-keeping, they make you dependant on syncing, backups or Internet access.

-

Master Password has none of these downsides. Its passwords aren't stored: they are generated on-demand from your name, the site and your master password; even on a brand-new iPhone.

-
- -
- - -

Security Without Worries

-

Coming up with good passwords is hard. Remembering them, even harder. Passwords deter and distract us from what we really want to do.

-

Master Password gives you secure passwords to use, and the assurances that you cannot lose them. Now you can stop worrying about how to make your new account secure, forget about passwords, and get on with what you wanted to get done in the first place.

-
- -
- - -

Syncs Seamlessly

-

Contrary to other password solutions, Master Password doesn't need to send your passwords over the network to make them ubiquitously available.

-

Master Password does however integrate iCloud, allowing you to keep the site names you've used in-sync across your devices.

-

This gives you all the conveniences of sync with none of the reliability downsides.

-
- -
- - -

Passwords For Any Purpose

-

Master Password comes with a variety of built-in password types. These types make your site's password look different, become more secure or more compatible with a site's password policy.

-

The default password is a great balance between security, compatibility and convenience. It is designed to provide great entropy (security) whilst still being easy to manually enter or remember if needed.

-

You can generate a more secure password, or switch it to a PIN type to use for your bank card or cell phone's SIM lock.

-
- -
- - - - - diff --git a/Site/2013-05/js/jquery.stellar.min.js b/Site/2013-05/js/jquery.stellar.min.js new file mode 100644 index 00000000..dd7827ad --- /dev/null +++ b/Site/2013-05/js/jquery.stellar.min.js @@ -0,0 +1,2 @@ +/*! Stellar.js v0.6.2 | Copyright 2013, Mark Dalgleish | http://markdalgleish.com/projects/stellar.js | http://markdalgleish.mit-license.org */ +(function(e,t,n,r){function d(t,n){this.element=t,this.options=e.extend({},s,n),this._defaults=s,this._name=i,this.init()}var i="stellar",s={scrollProperty:"scroll",positionProperty:"position",horizontalScrolling:!0,verticalScrolling:!0,horizontalOffset:0,verticalOffset:0,responsive:!1,parallaxBackgrounds:!0,parallaxElements:!0,hideDistantElements:!0,hideElement:function(e){e.hide()},showElement:function(e){e.show()}},o={scroll:{getLeft:function(e){return e.scrollLeft()},setLeft:function(e,t){e.scrollLeft(t)},getTop:function(e){return e.scrollTop()},setTop:function(e,t){e.scrollTop(t)}},position:{getLeft:function(e){return parseInt(e.css("left"),10)*-1},getTop:function(e){return parseInt(e.css("top"),10)*-1}},margin:{getLeft:function(e){return parseInt(e.css("margin-left"),10)*-1},getTop:function(e){return parseInt(e.css("margin-top"),10)*-1}},transform:{getLeft:function(e){var t=getComputedStyle(e[0])[f];return t!=="none"?parseInt(t.match(/(-?[0-9]+)/g)[4],10)*-1:0},getTop:function(e){var t=getComputedStyle(e[0])[f];return t!=="none"?parseInt(t.match(/(-?[0-9]+)/g)[5],10)*-1:0}}},u={position:{setLeft:function(e,t){e.css("left",t)},setTop:function(e,t){e.css("top",t)}},transform:{setPosition:function(e,t,n,r,i){e[0].style[f]="translate3d("+(t-n)+"px, "+(r-i)+"px, 0)"}}},a=function(){var t=/^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/,n=e("script")[0].style,r="",i;for(i in n)if(t.test(i)){r=i.match(t)[0];break}return"WebkitOpacity"in n&&(r="Webkit"),"KhtmlOpacity"in n&&(r="Khtml"),function(e){return r+(r.length>0?e.charAt(0).toUpperCase()+e.slice(1):e)}}(),f=a("transform"),l=e("
",{style:"background:#fff"}).css("background-position-x")!==r,c=l?function(e,t,n){e.css({"background-position-x":t,"background-position-y":n})}:function(e,t,n){e.css("background-position",t+" "+n)},h=l?function(e){return[e.css("background-position-x"),e.css("background-position-y")]}:function(e){return e.css("background-position").split(" ")},p=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)};d.prototype={init:function(){this.options.name=i+"_"+Math.floor(Math.random()*1e9),this._defineElements(),this._defineGetters(),this._defineSetters(),this._handleWindowLoadAndResize(),this._detectViewport(),this.refresh({firstLoad:!0}),this.options.scrollProperty==="scroll"?this._handleScrollEvent():this._startAnimationLoop()},_defineElements:function(){this.element===n.body&&(this.element=t),this.$scrollElement=e(this.element),this.$element=this.element===t?e("body"):this.$scrollElement,this.$viewportElement=this.options.viewportElement!==r?e(this.options.viewportElement):this.$scrollElement[0]===t||this.options.scrollProperty==="scroll"?this.$scrollElement:this.$scrollElement.parent()},_defineGetters:function(){var e=this,t=o[e.options.scrollProperty];this._getScrollLeft=function(){return t.getLeft(e.$scrollElement)},this._getScrollTop=function(){return t.getTop(e.$scrollElement)}},_defineSetters:function(){var t=this,n=o[t.options.scrollProperty],r=u[t.options.positionProperty],i=n.setLeft,s=n.setTop;this._setScrollLeft=typeof i=="function"?function(e){i(t.$scrollElement,e)}:e.noop,this._setScrollTop=typeof s=="function"?function(e){s(t.$scrollElement,e)}:e.noop,this._setPosition=r.setPosition||function(e,n,i,s,o){t.options.horizontalScrolling&&r.setLeft(e,n,i),t.options.verticalScrolling&&r.setTop(e,s,o)}},_handleWindowLoadAndResize:function(){var n=this,r=e(t);n.options.responsive&&r.bind("load."+this.name,function(){n.refresh()}),r.bind("resize."+this.name,function(){n._detectViewport(),n.options.responsive&&n.refresh()})},refresh:function(n){var r=this,i=r._getScrollLeft(),s=r._getScrollTop();(!n||!n.firstLoad)&&this._reset(),this._setScrollLeft(0),this._setScrollTop(0),this._setOffsets(),this._findParticles(),this._findBackgrounds(),n&&n.firstLoad&&/WebKit/.test(navigator.userAgent)&&e(t).load(function(){var e=r._getScrollLeft(),t=r._getScrollTop();r._setScrollLeft(e+1),r._setScrollTop(t+1),r._setScrollLeft(e),r._setScrollTop(t)}),this._setScrollLeft(i),this._setScrollTop(s)},_detectViewport:function(){var e=this.$viewportElement.offset(),t=e!==null&&e!==r;this.viewportWidth=this.$viewportElement.width(),this.viewportHeight=this.$viewportElement.height(),this.viewportOffsetTop=t?e.top:0,this.viewportOffsetLeft=t?e.left:0},_findParticles:function(){var t=this,n=this._getScrollLeft(),i=this._getScrollTop();if(this.particles!==r)for(var s=this.particles.length-1;s>=0;s--)this.particles[s].$element.data("stellar-elementIsActive",r);this.particles=[];if(!this.options.parallaxElements)return;this.$element.find("[data-stellar-ratio]").each(function(n){var i=e(this),s,o,u,a,f,l,c,h,p,d=0,v=0,m=0,g=0;if(!i.data("stellar-elementIsActive"))i.data("stellar-elementIsActive",this);else if(i.data("stellar-elementIsActive")!==this)return;t.options.showElement(i),i.data("stellar-startingLeft")?(i.css("left",i.data("stellar-startingLeft")),i.css("top",i.data("stellar-startingTop"))):(i.data("stellar-startingLeft",i.css("left")),i.data("stellar-startingTop",i.css("top"))),u=i.position().left,a=i.position().top,f=i.css("margin-left")==="auto"?0:parseInt(i.css("margin-left"),10),l=i.css("margin-top")==="auto"?0:parseInt(i.css("margin-top"),10),h=i.offset().left-f,p=i.offset().top-l,i.parents().each(function(){var t=e(this);if(t.data("stellar-offset-parent")===!0)return d=m,v=g,c=t,!1;m+=t.position().left,g+=t.position().top}),s=i.data("stellar-horizontal-offset")!==r?i.data("stellar-horizontal-offset"):c!==r&&c.data("stellar-horizontal-offset")!==r?c.data("stellar-horizontal-offset"):t.horizontalOffset,o=i.data("stellar-vertical-offset")!==r?i.data("stellar-vertical-offset"):c!==r&&c.data("stellar-vertical-offset")!==r?c.data("stellar-vertical-offset"):t.verticalOffset,t.particles.push({$element:i,$offsetParent:c,isFixed:i.css("position")==="fixed",horizontalOffset:s,verticalOffset:o,startingPositionLeft:u,startingPositionTop:a,startingOffsetLeft:h,startingOffsetTop:p,parentOffsetLeft:d,parentOffsetTop:v,stellarRatio:i.data("stellar-ratio")!==r?i.data("stellar-ratio"):1,width:i.outerWidth(!0),height:i.outerHeight(!0),isHidden:!1})})},_findBackgrounds:function(){var t=this,n=this._getScrollLeft(),i=this._getScrollTop(),s;this.backgrounds=[];if(!this.options.parallaxBackgrounds)return;s=this.$element.find("[data-stellar-background-ratio]"),this.$element.data("stellar-background-ratio")&&(s=s.add(this.$element)),s.each(function(){var s=e(this),o=h(s),u,a,f,l,p,d,v,m,g,y=0,b=0,w=0,E=0;if(!s.data("stellar-backgroundIsActive"))s.data("stellar-backgroundIsActive",this);else if(s.data("stellar-backgroundIsActive")!==this)return;s.data("stellar-backgroundStartingLeft")?c(s,s.data("stellar-backgroundStartingLeft"),s.data("stellar-backgroundStartingTop")):(s.data("stellar-backgroundStartingLeft",o[0]),s.data("stellar-backgroundStartingTop",o[1])),p=s.css("margin-left")==="auto"?0:parseInt(s.css("margin-left"),10),d=s.css("margin-top")==="auto"?0:parseInt(s.css("margin-top"),10),v=s.offset().left-p-n,m=s.offset().top-d-i,s.parents().each(function(){var t=e(this);if(t.data("stellar-offset-parent")===!0)return y=w,b=E,g=t,!1;w+=t.position().left,E+=t.position().top}),u=s.data("stellar-horizontal-offset")!==r?s.data("stellar-horizontal-offset"):g!==r&&g.data("stellar-horizontal-offset")!==r?g.data("stellar-horizontal-offset"):t.horizontalOffset,a=s.data("stellar-vertical-offset")!==r?s.data("stellar-vertical-offset"):g!==r&&g.data("stellar-vertical-offset")!==r?g.data("stellar-vertical-offset"):t.verticalOffset,t.backgrounds.push({$element:s,$offsetParent:g,isFixed:s.css("background-attachment")==="fixed",horizontalOffset:u,verticalOffset:a,startingValueLeft:o[0],startingValueTop:o[1],startingBackgroundPositionLeft:isNaN(parseInt(o[0],10))?0:parseInt(o[0],10),startingBackgroundPositionTop:isNaN(parseInt(o[1],10))?0:parseInt(o[1],10),startingPositionLeft:s.position().left,startingPositionTop:s.position().top,startingOffsetLeft:v,startingOffsetTop:m,parentOffsetLeft:y,parentOffsetTop:b,stellarRatio:s.data("stellar-background-ratio")===r?1:s.data("stellar-background-ratio")})})},_reset:function(){var e,t,n,r,i;for(i=this.particles.length-1;i>=0;i--)e=this.particles[i],t=e.$element.data("stellar-startingLeft"),n=e.$element.data("stellar-startingTop"),this._setPosition(e.$element,t,t,n,n),this.options.showElement(e.$element),e.$element.data("stellar-startingLeft",null).data("stellar-elementIsActive",null).data("stellar-backgroundIsActive",null);for(i=this.backgrounds.length-1;i>=0;i--)r=this.backgrounds[i],r.$element.data("stellar-backgroundStartingLeft",null).data("stellar-backgroundStartingTop",null),c(r.$element,r.startingValueLeft,r.startingValueTop)},destroy:function(){this._reset(),this.$scrollElement.unbind("resize."+this.name).unbind("scroll."+this.name),this._animationLoop=e.noop,e(t).unbind("load."+this.name).unbind("resize."+this.name)},_setOffsets:function(){var n=this,r=e(t);r.unbind("resize.horizontal-"+this.name).unbind("resize.vertical-"+this.name),typeof this.options.horizontalOffset=="function"?(this.horizontalOffset=this.options.horizontalOffset(),r.bind("resize.horizontal-"+this.name,function(){n.horizontalOffset=n.options.horizontalOffset()})):this.horizontalOffset=this.options.horizontalOffset,typeof this.options.verticalOffset=="function"?(this.verticalOffset=this.options.verticalOffset(),r.bind("resize.vertical-"+this.name,function(){n.verticalOffset=n.options.verticalOffset()})):this.verticalOffset=this.options.verticalOffset},_repositionElements:function(){var e=this._getScrollLeft(),t=this._getScrollTop(),n,r,i,s,o,u,a,f=!0,l=!0,h,p,d,v,m;if(this.currentScrollLeft===e&&this.currentScrollTop===t&&this.currentWidth===this.viewportWidth&&this.currentHeight===this.viewportHeight)return;this.currentScrollLeft=e,this.currentScrollTop=t,this.currentWidth=this.viewportWidth,this.currentHeight=this.viewportHeight;for(m=this.particles.length-1;m>=0;m--)i=this.particles[m],s=i.isFixed?1:0,this.options.horizontalScrolling?(h=(e+i.horizontalOffset+this.viewportOffsetLeft+i.startingPositionLeft-i.startingOffsetLeft+i.parentOffsetLeft)*-(i.stellarRatio+s-1)+i.startingPositionLeft,d=h-i.startingPositionLeft+i.startingOffsetLeft):(h=i.startingPositionLeft,d=i.startingOffsetLeft),this.options.verticalScrolling?(p=(t+i.verticalOffset+this.viewportOffsetTop+i.startingPositionTop-i.startingOffsetTop+i.parentOffsetTop)*-(i.stellarRatio+s-1)+i.startingPositionTop,v=p-i.startingPositionTop+i.startingOffsetTop):(p=i.startingPositionTop,v=i.startingOffsetTop),this.options.hideDistantElements&&(l=!this.options.horizontalScrolling||d+i.width>(i.isFixed?0:e)&&d<(i.isFixed?0:e)+this.viewportWidth+this.viewportOffsetLeft,f=!this.options.verticalScrolling||v+i.height>(i.isFixed?0:t)&&v<(i.isFixed?0:t)+this.viewportHeight+this.viewportOffsetTop),l&&f?(i.isHidden&&(this.options.showElement(i.$element),i.isHidden=!1),this._setPosition(i.$element,h,i.startingPositionLeft,p,i.startingPositionTop)):i.isHidden||(this.options.hideElement(i.$element),i.isHidden=!0);for(m=this.backgrounds.length-1;m>=0;m--)o=this.backgrounds[m],s=o.isFixed?0:1,u=this.options.horizontalScrolling?(e+o.horizontalOffset-this.viewportOffsetLeft-o.startingOffsetLeft+o.parentOffsetLeft-o.startingBackgroundPositionLeft)*(s-o.stellarRatio)+"px":o.startingValueLeft,a=this.options.verticalScrolling?(t+o.verticalOffset-this.viewportOffsetTop-o.startingOffsetTop+o.parentOffsetTop-o.startingBackgroundPositionTop)*(s-o.stellarRatio)+"px":o.startingValueTop,c(o.$element,u,a)},_handleScrollEvent:function(){var e=this,t=!1,n=function(){e._repositionElements(),t=!1},r=function(){t||(p(n),t=!0)};this.$scrollElement.bind("scroll."+this.name,r),r()},_startAnimationLoop:function(){var e=this;this._animationLoop=function(){p(e._animationLoop),e._repositionElements()},this._animationLoop()}},e.fn[i]=function(t){var n=arguments;if(t===r||typeof t=="object")return this.each(function(){e.data(this,"plugin_"+i)||e.data(this,"plugin_"+i,new d(this,t))});if(typeof t=="string"&&t[0]!=="_"&&t!=="init")return this.each(function(){var r=e.data(this,"plugin_"+i);r instanceof d&&typeof r[t]=="function"&&r[t].apply(r,Array.prototype.slice.call(n,1)),t==="destroy"&&e.data(this,"plugin_"+i,null)})},e[i]=function(n){var r=e(t);return r.stellar.apply(r,Array.prototype.slice.call(arguments,0))},e[i].scrollProperty=o,e[i].positionProperty=u,t.Stellar=d})(jQuery,this,document); \ No newline at end of file diff --git a/Site/2013-05/js/prefixfree.min.js b/Site/2013-05/js/prefixfree.min.js new file mode 100644 index 00000000..d18054e0 --- /dev/null +++ b/Site/2013-05/js/prefixfree.min.js @@ -0,0 +1,5 @@ +/** + * StyleFix 1.0.3 & PrefixFree 1.0.7 + * @author Lea Verou + * MIT license + */(function(){function t(e,t){return[].slice.call((t||document).querySelectorAll(e))}if(!window.addEventListener)return;var e=window.StyleFix={link:function(t){try{if(t.rel!=="stylesheet"||t.hasAttribute("data-noprefix"))return}catch(n){return}var r=t.href||t.getAttribute("data-href"),i=r.replace(/[^\/]+$/,""),s=(/^[a-z]{3,10}:/.exec(i)||[""])[0],o=(/^[a-z]{3,10}:\/\/[^\/]+/.exec(i)||[""])[0],u=/^([^?]*)\??/.exec(r)[1],a=t.parentNode,f=new XMLHttpRequest,l;f.onreadystatechange=function(){f.readyState===4&&l()};l=function(){var n=f.responseText;if(n&&t.parentNode&&(!f.status||f.status<400||f.status>600)){n=e.fix(n,!0,t);if(i){n=n.replace(/url\(\s*?((?:"|')?)(.+?)\1\s*?\)/gi,function(e,t,n){return/^([a-z]{3,10}:|#)/i.test(n)?e:/^\/\//.test(n)?'url("'+s+n+'")':/^\//.test(n)?'url("'+o+n+'")':/^\?/.test(n)?'url("'+u+n+'")':'url("'+i+n+'")'});var r=i.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,"\\$1");n=n.replace(RegExp("\\b(behavior:\\s*?url\\('?\"?)"+r,"gi"),"$1")}var l=document.createElement("style");l.textContent=n;l.media=t.media;l.disabled=t.disabled;l.setAttribute("data-href",t.getAttribute("href"));a.insertBefore(l,t);a.removeChild(t);l.media=t.media}};try{f.open("GET",r);f.send(null)}catch(n){if(typeof XDomainRequest!="undefined"){f=new XDomainRequest;f.onerror=f.onprogress=function(){};f.onload=l;f.open("GET",r);f.send(null)}}t.setAttribute("data-inprogress","")},styleElement:function(t){if(t.hasAttribute("data-noprefix"))return;var n=t.disabled;t.textContent=e.fix(t.textContent,!0,t);t.disabled=n},styleAttribute:function(t){var n=t.getAttribute("style");n=e.fix(n,!1,t);t.setAttribute("style",n)},process:function(){t('link[rel="stylesheet"]:not([data-inprogress])').forEach(StyleFix.link);t("style").forEach(StyleFix.styleElement);t("[style]").forEach(StyleFix.styleAttribute)},register:function(t,n){(e.fixers=e.fixers||[]).splice(n===undefined?e.fixers.length:n,0,t)},fix:function(t,n,r){for(var i=0;i-1&&(e=e.replace(/(\s|:|,)(repeating-)?linear-gradient\(\s*(-?\d*\.?\d*)deg/ig,function(e,t,n,r){return t+(n||"")+"linear-gradient("+(90-r)+"deg"}));e=t("functions","(\\s|:|,)","\\s*\\(","$1"+s+"$2(",e);e=t("keywords","(\\s|:)","(\\s|;|\\}|$)","$1"+s+"$2$3",e);e=t("properties","(^|\\{|\\s|;)","\\s*:","$1"+s+"$2:",e);if(n.properties.length){var o=RegExp("\\b("+n.properties.join("|")+")(?!:)","gi");e=t("valueProperties","\\b",":(.+?);",function(e){return e.replace(o,s+"$1")},e)}if(r){e=t("selectors","","\\b",n.prefixSelector,e);e=t("atrules","@","\\b","@"+s+"$1",e)}e=e.replace(RegExp("-"+s,"g"),"-");e=e.replace(/-\*-(?=[a-z]+)/gi,n.prefix);return e},property:function(e){return(n.properties.indexOf(e)?n.prefix:"")+e},value:function(e,r){e=t("functions","(^|\\s|,)","\\s*\\(","$1"+n.prefix+"$2(",e);e=t("keywords","(^|\\s)","(\\s|$)","$1"+n.prefix+"$2$3",e);return e},prefixSelector:function(e){return e.replace(/^:{1,2}/,function(e){return e+n.prefix})},prefixProperty:function(e,t){var r=n.prefix+e;return t?StyleFix.camelCase(r):r}};(function(){var e={},t=[],r={},i=getComputedStyle(document.documentElement,null),s=document.createElement("div").style,o=function(n){if(n.charAt(0)==="-"){t.push(n);var r=n.split("-"),i=r[1];e[i]=++e[i]||1;while(r.length>3){r.pop();var s=r.join("-");u(s)&&t.indexOf(s)===-1&&t.push(s)}}},u=function(e){return StyleFix.camelCase(e)in s};if(i.length>0)for(var a=0;a