mirror of https://github.com/metafizzy/isotope
4 changed files with 247 additions and 242 deletions
@ -0,0 +1,91 @@ |
|||||||
|
// ========================= jQuery transform extensions ===============================
|
||||||
|
(function($){
|
||||||
|
|
||||||
|
|
||||||
|
// if props.transform hasn't been set, do it already
|
||||||
|
$.props.transform = getStyleProperty('transform'); |
||||||
|
|
||||||
|
// console.log( getStyleProperty('transform') )
|
||||||
|
|
||||||
|
var transformFnUtilsDimensional = { |
||||||
|
'2d' : { |
||||||
|
translate : function ( position ) { |
||||||
|
return 'translate(' + position[0] + 'px, ' + position[1] + 'px)'; |
||||||
|
}, |
||||||
|
scale : function ( scale ) { |
||||||
|
return 'scale(' + scale[0] + ')'; |
||||||
|
}, |
||||||
|
}, |
||||||
|
'3d' : { |
||||||
|
translate : function ( position ) { |
||||||
|
return 'translate3d(' + position[0] + 'px, ' + position[1] + 'px, 0)'; |
||||||
|
}, |
||||||
|
scale : function ( scale ) { |
||||||
|
return 'scale3d(' + scale[0] + ', ' + scale[0] + ', 1)'; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}, |
||||||
|
dimensions = Modernizr.csstransforms3d ? '3d' : '2d', |
||||||
|
// usingTransforms = false,
|
||||||
|
transformFnUtils = transformFnUtilsDimensional[ dimensions ]; |
||||||
|
|
||||||
|
|
||||||
|
var _jQueryStyle = $.style; |
||||||
|
$.style = function ( elem, name, value ) { |
||||||
|
|
||||||
|
switch ( name ) { |
||||||
|
case 'scale' : |
||||||
|
case 'translate' : |
||||||
|
// console.log( name )
|
||||||
|
// unpack current transform data
|
||||||
|
var data = $( elem ).data('transform') || {}; |
||||||
|
// extend new value over current data
|
||||||
|
var newData = {}; |
||||||
|
newData[ name ] = value; |
||||||
|
$.extend( data, newData ); |
||||||
|
|
||||||
|
var valueFns = []; |
||||||
|
|
||||||
|
for ( var fnName in data ) { |
||||||
|
var transformValue = data[ fnName ], |
||||||
|
getFn = transformFnUtils[ fnName ], |
||||||
|
valueFn = getFn( transformValue ); |
||||||
|
valueFns.push( valueFn ); |
||||||
|
} |
||||||
|
|
||||||
|
// set data back in elem
|
||||||
|
$( elem ).data('transform', data ); |
||||||
|
|
||||||
|
value = valueFns.join(' '); |
||||||
|
// console.log( value )
|
||||||
|
|
||||||
|
// set name to vendor specific property
|
||||||
|
name = $.props.transform; |
||||||
|
|
||||||
|
break |
||||||
|
} |
||||||
|
|
||||||
|
// if ( name === 'transform') {
|
||||||
|
// }
|
||||||
|
return _jQueryStyle.apply( this, arguments ); |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
var _fxCur = $.fx.prototype.cur; |
||||||
|
$.fx.prototype.cur = function () { |
||||||
|
if ( this.prop === 'scale' ) { |
||||||
|
var data = $( this.elem ).data('transform'), |
||||||
|
currentScale = data && data[ this.prop ] ? data[ this.prop ] : [ 1 ]; |
||||||
|
// scale value is saved as a 1 item array
|
||||||
|
return currentScale[0] |
||||||
|
} |
||||||
|
|
||||||
|
return _fxCur.apply(this, arguments); |
||||||
|
} |
||||||
|
|
||||||
|
$.fx.step.scale = function (fx) { |
||||||
|
$( fx.elem ).css({ scale: [ fx.now ] }); |
||||||
|
}; |
||||||
|
|
||||||
|
})( jQuery ); |
@ -0,0 +1,41 @@ |
|||||||
|
/*! |
||||||
|
* smartresize: debounced resize event for jQuery |
||||||
|
* http://github.com/lrbabe/jquery-smartresize
|
||||||
|
* |
||||||
|
* Copyright (c) 2009 Louis-Remi Babe |
||||||
|
* Licensed under the GPL license. |
||||||
|
* http://docs.jquery.com/License
|
||||||
|
* |
||||||
|
*/ |
||||||
|
(function($){
|
||||||
|
|
||||||
|
var $event = $.event, |
||||||
|
resizeTimeout; |
||||||
|
|
||||||
|
$event.special.smartresize = { |
||||||
|
setup: function() { |
||||||
|
$(this).bind( "resize", $event.special.smartresize.handler ); |
||||||
|
}, |
||||||
|
teardown: function() { |
||||||
|
$(this).unbind( "resize", $event.special.smartresize.handler ); |
||||||
|
}, |
||||||
|
handler: function( event, execAsap ) { |
||||||
|
// Save the context
|
||||||
|
var context = this, |
||||||
|
args = arguments; |
||||||
|
|
||||||
|
// set correct event type
|
||||||
|
event.type = "smartresize"; |
||||||
|
|
||||||
|
if ( resizeTimeout ) { clearTimeout( resizeTimeout ); } |
||||||
|
resizeTimeout = setTimeout(function() { |
||||||
|
jQuery.event.handle.apply( context, args ); |
||||||
|
}, execAsap === "execAsap"? 0 : 100 ); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
$.fn.smartresize = function( fn ) { |
||||||
|
return fn ? this.bind( "smartresize", fn ) : this.trigger( "smartresize", ["execAsap"] ); |
||||||
|
}; |
||||||
|
|
||||||
|
})( jQuery ); |
@ -0,0 +1,107 @@ |
|||||||
|
// ========================= getStyleProperty by kangax ===============================
|
||||||
|
|
||||||
|
var getStyleProperty = (function(){ |
||||||
|
|
||||||
|
var prefixes = ['Moz', 'Webkit', 'Khtml', 'O', 'Ms']; |
||||||
|
var _cache = { }; |
||||||
|
|
||||||
|
function getStyleProperty(propName, element) { |
||||||
|
element = element || document.documentElement; |
||||||
|
var style = element.style, |
||||||
|
prefixed, |
||||||
|
uPropName; |
||||||
|
|
||||||
|
// check cache only when no element is given
|
||||||
|
if (arguments.length == 1 && typeof _cache[propName] == 'string') { |
||||||
|
return _cache[propName]; |
||||||
|
} |
||||||
|
// test standard property first
|
||||||
|
if (typeof style[propName] == 'string') { |
||||||
|
return (_cache[propName] = propName); |
||||||
|
} |
||||||
|
|
||||||
|
// console.log('getting prop', propName)
|
||||||
|
|
||||||
|
// capitalize
|
||||||
|
uPropName = propName.charAt(0).toUpperCase() + propName.slice(1); |
||||||
|
|
||||||
|
// test vendor specific properties
|
||||||
|
for (var i=0, l=prefixes.length; i<l; i++) { |
||||||
|
prefixed = prefixes[i] + uPropName; |
||||||
|
if (typeof style[prefixed] == 'string') { |
||||||
|
return (_cache[propName] = prefixed); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return getStyleProperty; |
||||||
|
})(); |
||||||
|
|
||||||
|
// ========================= miniModernizr ===============================
|
||||||
|
// <3<3<3 and thanks to Faruk and Paul for doing the heavy lifting
|
||||||
|
if ( !window.Modernizr ) { |
||||||
|
|
||||||
|
var miniModernizr = {}, |
||||||
|
vendorCSSPrefixes = ' -o- -moz- -ms- -webkit- -khtml- '.split(' '), |
||||||
|
classes = [], |
||||||
|
docElement = document.documentElement, |
||||||
|
tests = { |
||||||
|
csstransforms : function() { |
||||||
|
return !!getStyleProperty('transform'); |
||||||
|
}, |
||||||
|
csstransforms3d : function() { |
||||||
|
var ret = !!getStyleProperty('perspective'); |
||||||
|
|
||||||
|
if (ret){ |
||||||
|
var st = document.createElement('style'), |
||||||
|
div = document.createElement('div'); |
||||||
|
|
||||||
|
st.textContent = '@media ('+vendorCSSPrefixes.join('transform-3d),(') +
|
||||||
|
'modernizr){#modernizr{height:3px}}'; |
||||||
|
document.getElementsByTagName('head')[0].appendChild(st); |
||||||
|
div.id = 'modernizr'; |
||||||
|
docElement.appendChild(div); |
||||||
|
|
||||||
|
ret = div.offsetHeight === 3; |
||||||
|
|
||||||
|
st.parentNode.removeChild(st); |
||||||
|
div.parentNode.removeChild(div); |
||||||
|
} |
||||||
|
return ret; |
||||||
|
}, |
||||||
|
csstransitions : function() { |
||||||
|
return !!getStyleProperty('transitionProperty'); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
// hasOwnProperty shim by kangax needed for Safari 2.0 support
|
||||||
|
var _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty; |
||||||
|
if (typeof _hasOwnProperty !== 'undefined' && typeof _hasOwnProperty.call !== 'undefined') { |
||||||
|
hasOwnProperty = function (object, property) { |
||||||
|
return _hasOwnProperty.call(object, property); |
||||||
|
}; |
||||||
|
} |
||||||
|
else { |
||||||
|
hasOwnProperty = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */ |
||||||
|
return ((property in object) && typeof object.constructor.prototype[property] === 'undefined'); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
// Run through all tests and detect their support in the current UA.
|
||||||
|
for ( var feature in tests ) { |
||||||
|
if ( hasOwnProperty( tests, feature ) ) { |
||||||
|
// run the test, throw the return value into the Modernizr,
|
||||||
|
// then based on that boolean, define an appropriate className
|
||||||
|
// and push it into an array of classes we'll join later.
|
||||||
|
var test = tests[ feature ](); |
||||||
|
miniModernizr[ feature.toLowerCase() ] = test; |
||||||
|
var className = ( test ? '' : 'no-' ) + feature.toLowerCase() |
||||||
|
classes.push( className ); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Add the new classes to the <html> element.
|
||||||
|
docElement.className += ' ' + classes.join( ' ' ); |
||||||
|
|
||||||
|
window.Modernizr = miniModernizr; |
||||||
|
} |
Loading…
Reference in new issue