Astro Classes

This commit is contained in:
2015-08-14 21:06:23 +08:00
parent d3f924adf3
commit 0a25f87965
157 changed files with 11676 additions and 2 deletions
@@ -0,0 +1,235 @@
(function(){
var ns = __namespace( "Astro.Blog.Components.Notification" );
/** @type {System.Debug} */
var debug = __import( "System.Debug" );
/** @type {System.Cycle} */
var Cycle = __import( "System.Cycle" );
/** @type {Dandelion.IDOMElement} */
var IDOMElement = __import( "Dandelion.IDOMElement" );
/** @type {System.utils.IKey} */
var IKey = __import( "System.utils.IKey" );
/** @type {System.utils.DataKey} */
var DataKey = __import( "System.utils.DataKey" );
/** @type {System.utils.EventKey} */
var EventKey = __import( "System.utils.EventKey" );
/** @type {Dandelion} */
var Dand = __import( "Dandelion" );
/** @type {Components.MessageBox} */
var MessageBox = __import( "Components.MessageBox" );
/** @type {Components.Mouse.ContextMenu} */
var ContextMenu = __import( "Components.Mouse.ContextMenu" );
/** @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" );
var postData = __import( "System.Net.postData" );
var smstamp = __import( "Astro.utils.Date.smstamp" );
var init = function ()
{
var stage = Dand.id( "notifications" );
var bodyStyle = Dand.id( "nt_body" ).style;
var conf = Config.get( "Notification" );
var base_path = Config.get( "BasePath" );
var processor = base_path + conf.paths.get_mesg;
var contextMenu;
var itemsMenu;
var nError = function( e ) {
// TODO: Do something on error
debug.Info( e );
};
var followLink = function(e)
{
window.location = base_path + this.link;
};
var toggleFollow = function(e)
{
var _action = "enable";
if( this.item.getAttribute( "active" ) )
{
_action = "disable";
if(
0 < IDOMElement( this.count ).getDAttribute( "count" )
&& !confirm( "All followed notifications of this type will be unfollowed. Continue?" )
) return;
}
postData(
processor
, {
"action": _action
, "tid": IDOMElement( this.item ).getDAttribute( "tid" )
, "cid": 0
}
, toggleSuccess.bind(this)
, nError
);
};
var toggleSuccess = function(e)
{
if( this.item.getAttribute( "active" ) )
{
this.item.removeAttribute( "active" );
this.count.innerHTML = "N/A";
}
else
{
this.item.setAttribute( "active", 1 );
this.count.innerHTML = "0";
}
};
var showSettings = function( e )
{
// Create list <ul> <li> ... </ul>
var ul = Dand.wrap("ul", "nt_imenu", "nt_smenu");
for( var i in e.data )
{
var li
, li_s = [
// On/off toggle
Dand.wrap( "span", null, "nt_switch" )
, Dand.wrap( "span", null, "nt_tname", e.data[i].name )
]
, keys = [ new DataKey( "tid", i ) ]
;
if( e.data[i].hasOwnProperty("count") )
{
// type count
li_s[2] = Dand.wrap(
"span"
, null
, "nt_tcount"
, e.data[i].count + ""
, new DataKey( "count", e.data[i].count )
);
// Active
keys[ keys.length ] = new IKey( "active", 1 );
}
else
{
li_s[2] = Dand.wrap( "span", null, "nt_tcount", "N/A" );
}
// Create li element
li = Dand.wrapne( "li", li_s, keys );
ul.appendChild( li );
IDOMElement( li ).addEventListener(
"Click"
, toggleFollow.bind({ item: li, count: li_s[2] })
);
}
var msgBox = new MessageBox( "Notification Settings", ul, "Close" ).show();
};
var popupSettings = function()
{
postData( processor, { action: "getSettings" }, showSettings, nError );
};
var readNotification = function(e)
{
postData( processor, { action: "read", id: this.id }, followLink.bind( this ), nError );
};
// functions
var createContextMenu = function(e)
{
var items = [], menuShow = false;
for( var n in e.data )
{
// Create items
items[items.length] = new IKey(
e.data[n].message
, new EventKey(
"m_" + e.data[n].id
, readNotification.bind( e.data[n] )
)
);
}
items[ items.length ] = new EventKey( "Settings", popupSettings );
contextMenu = new ContextMenu(
stage
, items
, "LMB"
, nt_body
// showMenu/hideMenu overrides style settings
, {
"class": "nt_container"
, "showMenu": function(stage, event)
{
if( stage.className == "nt_date" ) return;
if( menuShow ) return;
bodyStyle.marginLeft = "1em";
bodyStyle.marginRight = "-1em";
bodyStyle.opacity = 0;
bodyStyle.display = "block";
Cycle.next(function()
{
bodyStyle.marginLeft
= bodyStyle.marginRight = 0;
bodyStyle.opacity = 1;
menuShow = true;
});
}
, "hideMenu": function(stage)
{
if( stage.className == "nt_date" ) return;
if( !menuShow ) return;
bodyStyle.marginLeft = "1em";
bodyStyle.marginRight = "-1em";
bodyStyle.opacity = 0;
Cycle.delay(function()
{
bodyStyle.display = "none";
// cubic 200, we set delay to 200
menuShow = false;
}, 200);
}
// Prevent default subnode chaining
, "chainHide": function( stage ) { }
, "chainShow": function( stage ) { }
}
);
for( n in e.data )
{
var li = contextMenu.getItemByKey( "m_" + e.data[n].id ).stage;
li.appendChild(
Dand.wrapc(
"nt_date"
, smstamp( new Date( Number( e.data[n].date ) * 1000 ) )
)
);
}
contextMenu.getItemByKey("Settings").stage.className = "nt_icon_settings";
};
postData( processor, { action: "get" }, createContextMenu );
};
Bootstrap.regInit( init );
})();