botanjs/src/Astro/Blog/Components/VerticalNote.js
raw ยท 2117 bytes
(function(){
var ns = __namespace( "Astro.Blog.Components.VerticalNote" );
/** @type {Dandelion} */
var Dand = __import( "Dandelion" );
/** @type {Dandelion.IDOMElement} */
var IDOMElement = __import( "Dandelion.IDOMElement" );
/** @type {Astro.Bootstrap} */
var Bootstrap = __import( "Astro.Bootstrap" );
/** @type {Astro.Blog.Config} */
var Config = __import( "Astro.Blog.Config" );
/** @type {Astro.utils.Date} */
var XDate = __import( "Astro.utils.Date" );
/** @param {Dandelion.IDOMElement} elem */
var VerticalNote = function( elem )
{
var relem = elem.element;
var maxHeight = relem.clientHeight;
// Break for elements that are too long
var formatted = Dand.wrapc( relem.className.replace( / *source */, " " ) );
elem.foreach( 1, function( child )
{
var ichild = IDOMElement( child );
switch( ichild.getDAttribute( "flag" ) )
{
case "date":
child.innerHTML = XDate.chinese( new Date( child.innerHTML ) );
break;
case "anchor":
case "image":
formatted.appendChild( child );
child.style.display = null;
return;
}
var content = child.innerHTML;
var len = content.length;
var blockh = Math.ceil( child.clientHeight / len );
var opLen = Math.floor( maxHeight / blockh );
var i = 0;
var doBreak = function( i )
{
var nLine = Dand.wrapne(
child.nodeName
, content.substr( opLen * i, opLen )
, ichild.aKeys()
);
formatted.appendChild( nLine );
formatted.addEventListener(
"click"
, function( e ) {
window.location = this.loc;
}.bind({ loc: elem.getDAttribute( "href" ) })
);
len -= opLen;
};
for( var i = 0; opLen < len; i ++ ) doBreak( i );
if( 0 < len ) doBreak( i );
} );
relem.style.display = "none";
relem.parentNode.insertBefore( formatted, relem.nextSibling );
};
Bootstrap.regInit(function() {
Dand.glass( "vertical-text", true )
.forEach( function( e ) { new VerticalNote( e ); } );
});
})();