-ใใใซใกใฏ*้ก*ๅไบบใซๆใๆฏใฃใฆ็ฌ้กใงใ
-ใฏใฆ๏ผ *ๅคงใใ้ใใ็ฎใงๆใใ่ผใใง*ใขใทใฃใใฐใใใๅฐ็ใใพใใ๏ผ
-ใฏใใ็งใฏใใชใใฎใใใซๆฐใใใใจใ่ฉฑใๆใฃใฆใใพใ*ๅบงใฃใฆใ่
ใง่ตคใกใใใ้ฃใใฆ่กใใพใใ*่ใใใใงใใ๏ผ
-ใใกใใ๏ผ *ๅฐใๆฅใใใใใฆ็ฎใใใใใ*ๅ็ถใฏ็งใซใใฎใใใชๆใใใ่ฉฑใ่จใฃใ...
-ใพใใ็งใฎ่ฉฑใใใชใใๆใใใชใใใจใ้กใฃใฆใใพใ*ๅฝผใฎ้ซชใ่ปฝใใใใใพใใ*ๅฝผๅฅณใฏใใชใใซใใฟใผใณๅใใใๆนๆณใง่ใใๆนๆณใๆใใในใใงใใ
-ใ๏ผ *่ชค่งฃใใใญใใใ้ก*ใฉใ๏ผ
-M ...ไปใใใชใใฏ็ฅใฃใฆใใพใ*ใฆใฃใณใฏใใฆใใใๆพใใพใใ*ใใใงๅคๆฐใๆๅญๅใซๆฟๅ
ฅใใๅฟ
่ฆใใใใจใ-ใใชใใฏไฝใใใพใใ๏ผ
-ใใฆ... *่ฟใใซๆจชใใใฃใฆใใ็ดใซ้็ญใจใใซใซใใซใๅใใพใใ*ใใฎใใใชใใฎ๏ผ
var query= 'xxx'
var resultCount= 512
var message= ' <kbd>' + query + '</kbd> : ' + resultCount
โ ? * *
โ โฆ * , *
โ , โฆ * *
<iframe src="javascript:alert('ahtung')"></iframe>
โ , * *
var message= ' <kbd>' + query.escapeHTML() + '</kbd> : ' + resultCount
โ โฆ * * โ , .., ?
โ โฆ * * :
var texts= [ ' <kbd>', '</kbd> : ' ]
var message= texts[0] + query.escapeHTML() + texts[1] + resultCount
โ texts[n], ? * , , * , :
var template= TT.template( ' <kbd>{0}</kbd> : {1}' )
var message= template([ query.escapeHTML(), resultCount ])
โ * * โฆ
โ โ * * :
var template= TT.template( ' <kbd>{query}</kbd> : {count}' )
var message= template({ query: query.escapeHTML(), count: resultCount })
โ ! * * !
โ ! * * :
var template= TT.html( ' <kbd>{query}</kbd> : {count}' )
var message= template({ query: query, count: resultCount })
โ โฆ * * ?!7
โ ! * * , , :
var message= template({ query: TT.value( highLightedQuery ), count: resultCount })
โ * * TT.value?
โ * , * :
TT.value= function( data ){
return function( ){
return data
}
}
โ , , , , ? * , * ?
โ ! * * , , :
TT.pipe= function( list ){
if( !list ) list= []
var len= list.length
return function( data ){
for( var i= 0; i < len; ++i ) data= list[ i ]( data )
return data
}
}
โ ? * *
โ *, * , , :
var text= decodeURIComponent( encodeURIComponent( text ) )
var text= TT.pipe([ encodeURIComponent, decodeURIComponent ])( text )
โ * * -!
โ ! ** :
TT.template= new function( ){
var searcher= /((?:[^\{\}]|\{\{|\}\})*)(?:\{|$)|([^\{\}]*)(?:\})/g
return function( str, filter ){
if( !filter ) filter= TT.pipe()
var parts= []
String( str ).replace
( searcher
, function( str, val, sel ){
if( sel !== void 0 ){
parts.push( function( data ){
data= data[ sel ]
switch( typeof data ){
case 'undefined': return '{' + sel + '}'
case 'function': return data()
default: return filter( data )
}
})
} else if( val ){
val= val.split( '{{' ).join( '{' ).split( '}}' ).join( '}' )
parts.push( TT.value( val ) )
}
}
)
return TT.concater( parts )
}
}
โ * * !
โ ! * * :
TT.uri= function( tpl ){
return TT.template( tpl, TT.uri.encoder() )
}
TT.uri.encoder= TT.value( encodeURIComponent )
TT.uri.decoder= TT.value( decodeURIComponent )
โ ? *, *
โ URI * * :
var searchURI= TT.uri( '/search/?q={query}&count={count}' )
location.href= searchURI({ query: '&&&', count: 10 })
โ โฆ * * html?
โ :
TT.html= function( tpl ){
return TT.template( tpl, TT.html.encoder() )
}
TT.html.encoder= new function( ){
var parent= document.createElement('div')
var child= parent.appendChild( document.createTextNode( '' ) )
return TT.value( function( data ){
child.nodeValue= data
return parent.innerHTML.split( '"' ).join( '"' ).split( "'" ).join( ''' )
})
}
TT.html.decoder= new function( ){
var parent= document.createElement('div')
return TT.value( function( data ){
parent.innerHTML= data
return parent.firstChild.nodeValue
})
}
โ !
โ ! * * html , HTMLNode :
TT.dom= function( tpl ){
return TT.pipe([ TT.html( tpl ), TT.dom.parser() ])
}
TT.dom.parser= new function(){
var parent= document.createElement( 'div' )
return TT.value( function( html ){
parent.innerHTML= html
var childs= parent.childNodes
if( childs.length === 1 ) return childs[0]
var fragment= document.createDocumentFragment()
while( childs[0] ) fragment.appendChild( childs[0] )
return fragment
})
}
TT.dom.serializer= new function(){
var parent= document.createElement( 'div' )
var child= parent.appendChild( document.createTextNode( '' ) )
return TT.value( function( node ){
parent.replaceChild( node.cloneNode( true ), parent.firstChild )
return parent.innerHTML
})
}
โ ? * *
โ * *
var link= TT.dom( '<a href="{uri}">{title}</a>' )({ uri: '/', title: ' ' }) // HTMLAnchorElement
var userName= TT.dom( '<b>{head}</b>{tail}' )({ head: 'T', tail: 'enshi' }) // HTMLFragment
โ โฆ *
* โฆ
______________________
ยฉ SoftCoder.ru