2010-04-13 05:45:29 +00:00
( function ( $ ) {
var entwine _prepend = '__entwine!' ;
var getEntwineData = function ( el , namespace , property ) {
return el . data ( entwine _prepend + namespace + '!' + property ) ;
} ;
var setEntwineData = function ( el , namespace , property , value ) {
return el . data ( entwine _prepend + namespace + '!' + property , value ) ;
} ;
var getEntwineDataAsHash = function ( el , namespace ) {
var hash = { } ;
var id = jQuery . data ( el [ 0 ] ) ;
var matchstr = entwine _prepend + namespace + '!' ;
var matchlen = matchstr . length ;
var cache = jQuery . cache [ id ] ;
for ( var k in cache ) {
if ( k . substr ( 0 , matchlen ) == matchstr ) hash [ k . substr ( matchlen ) ] = cache [ k ] ;
}
return hash ;
} ;
var setEntwineDataFromHash = function ( el , namespace , hash ) {
for ( var k in hash ) setEntwineData ( namespace , k , hash [ k ] ) ;
} ;
var entwineData = function ( el , namespace , args ) {
switch ( args . length ) {
case 0 :
return getEntwineDataAsHash ( el , namespace ) ;
case 1 :
if ( typeof args [ 0 ] == 'string' ) return getEntwineData ( el , namespace , args [ 0 ] ) ;
else return setEntwineDataFromHash ( el , namespace , args [ 0 ] ) ;
default :
return setEntwineData ( el , namespace , args [ 0 ] , args [ 1 ] ) ;
}
} ;
$ . extend ( $ . fn , {
entwineData : function ( ) {
return entwineData ( this , '__base' , arguments ) ;
}
} ) ;
$ . entwine . Namespace . addHandler ( {
order : 60 ,
bind : function ( selector , k , v ) {
if ( k . charAt ( 0 ) != k . charAt ( 0 ) . toUpperCase ( ) ) $ . entwine . warn ( 'Entwine property ' + k + ' does not start with a capital letter' , $ . entwine . WARN _LEVEL _BESTPRACTISE ) ;
// Create the getters and setters
var getterName = 'get' + k ;
var setterName = 'set' + k ;
2011-05-12 18:11:41 +12:00
this . bind _proxy ( selector , getterName , function ( ) { var r = this . entwineData ( k ) ; return r === undefined ? v : r ; } ) ;
2010-04-13 05:45:29 +00:00
this . bind _proxy ( selector , setterName , function ( v ) { return this . entwineData ( k , v ) ; } ) ;
// Get the get and set proxies we just created
var getter = this . injectee [ getterName ] ;
var setter = this . injectee [ setterName ] ;
// And bind in the jQuery-style accessor
this . bind _proxy ( selector , k , function ( v ) { return ( arguments . length == 1 ? setter : getter ) . call ( this , v ) ; } ) ;
return true ;
} ,
namespaceMethodOverrides : function ( namespace ) {
return {
entwineData : function ( ) {
return entwineData ( this , namespace . name , arguments ) ;
}
} ;
}
} ) ;
} ) ( jQuery ) ;