forked from Botanical/BotanJS
Astro Classes
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
(function ()
|
||||
{
|
||||
var ns = __namespace( "Astro.Blog.AstroEdit.Visualizer.Snippet" );
|
||||
|
||||
/** @type {System.utils.IKey} */
|
||||
var IKey = __import( "System.utils.IKey" );
|
||||
/** @type {System.utils.DataKey} */
|
||||
var DataKey = __import( "System.utils.DataKey" );
|
||||
/** @type {Dandelion.IDOMElement} */
|
||||
var IDOMElement = __import( "Dandelion.IDOMElement" );
|
||||
/** @type {Dandelion} */
|
||||
var Dand = __import( "Dandelion" );
|
||||
/** @type {Components.MessageBox} */
|
||||
var MessageBox = __import( "Components.MessageBox" );
|
||||
/** @type {Astro.Blog.Config} */
|
||||
var Config = __import( "Astro.Blog.Config" );
|
||||
/** @type {System.utils.Perf} */
|
||||
var Perf = __import( "System.utils.Perf" );
|
||||
/** @type {Astro.utils.Date} */
|
||||
var XDate = __import( "Astro.utils.Date" );
|
||||
|
||||
|
||||
var escapeStr = ns[ NS_INVOKE ]( "escapeStr" );
|
||||
|
||||
var getData = __import( "System.Net.getData" );
|
||||
|
||||
/** @type {_AstConf_.SiteFile} */
|
||||
var config = null;
|
||||
|
||||
var sitefile = function ( insertSnippet, snippetWrap, createContext, override )
|
||||
{
|
||||
config = Config.get( "SiteFile" );
|
||||
if( !config ) throw new Error( "config is not defined" );
|
||||
|
||||
var temp, i, j
|
||||
|
||||
, handler = function ()
|
||||
{
|
||||
// Input fields
|
||||
var v_snippetInput = Dand.wrap("input", null, "v_snippet_input_single", null, new IKey("type", "text"));
|
||||
|
||||
// Popup MessageBox
|
||||
new MessageBox("Insert site file", v_snippetInput, "OK", "Cancel", visualizer.bind({code: v_snippetInput})).show();
|
||||
}
|
||||
|
||||
, __applyData = function (e)
|
||||
{
|
||||
var finfo = JSON.parse(e).file, s, m, l
|
||||
, content = this.stage.firstChild
|
||||
, desc = this.stage.lastChild
|
||||
, _hash = this.hash;
|
||||
|
||||
switch ( finfo.type )
|
||||
{
|
||||
case "image":
|
||||
|
||||
this.stage.removeChild(content);
|
||||
// Default size is large
|
||||
var _image = Dand.wrapna("img", new IKey("src", config.path.image.large + _hash + ".jpg"))
|
||||
, _stage = IDOMElement(this.stage)
|
||||
, keys = [ new IKey( "type", "radio" ), new IKey( "name", "size_grp" + Perf.uuid ) ]
|
||||
, sid
|
||||
, selectionChanged = function ()
|
||||
{
|
||||
_stage.setAttribute(new DataKey("size", this.size));
|
||||
//// Handles the size selection
|
||||
switch(this.size)
|
||||
{
|
||||
case "small":
|
||||
_image.setAttribute("src", config.path.image.small + _hash + ".jpg");
|
||||
break;
|
||||
case "medium":
|
||||
_image.setAttribute("src", config.path.image.medium + _hash + ".jpg");
|
||||
break;
|
||||
case "large":
|
||||
_image.setAttribute("src", config.path.image.large + _hash + ".jpg");
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
this.stage.insertBefore(_image, desc);
|
||||
|
||||
desc.removeChild(desc.firstChild);
|
||||
desc.appendChild(
|
||||
Dand.wrape([
|
||||
Dand.textNode("Size: ")
|
||||
, s = Dand.wrapna("input", keys.concat( new IKey("id", sid = "size_" + Perf.uuid) ))
|
||||
, Dand.wrapne("label", "small", new IKey("for", sid))
|
||||
, m = Dand.wrapna("input", keys.concat( new IKey("id", sid = "size_" + Perf.uuid) ))
|
||||
, Dand.wrapne("label", "medium", new IKey("for", sid))
|
||||
, l = Dand.wrapna("input", keys.concat( new IKey("checked", "1"), new IKey("id", sid = "size_" + Perf.uuid) ))
|
||||
, Dand.wrapne("label", "large (default)", new IKey("for", sid))
|
||||
])
|
||||
);
|
||||
|
||||
// ad handlers to handles size change event
|
||||
IDOMElement(s).addEventListener("Change", selectionChanged.bind({size: "small"}));
|
||||
IDOMElement(m).addEventListener("Change", selectionChanged.bind({size: "medium"}));
|
||||
IDOMElement(l).addEventListener("Change", selectionChanged.bind({size: "large"}));
|
||||
break;
|
||||
case "audio":
|
||||
// TODO
|
||||
break;
|
||||
default:
|
||||
content.firstChild.nodeValue = "Regular file: " + finfo.name;
|
||||
content.style.paddingBottom = "2em";
|
||||
content.appendChild( Dand.wrap( "br" ) );
|
||||
content.appendChild( Dand.textNode( "Date: " + XDate.pretty( new Date( finfo.date_created ), true ) ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
, loadFailed = function (e) { }
|
||||
|
||||
, visualizer = function (submitted, override)
|
||||
{
|
||||
|
||||
var hash = override ? override.value : this.code.value
|
||||
, _obj = {file: hash};
|
||||
|
||||
if ( submitted && hash )
|
||||
{
|
||||
// Visualize component
|
||||
|
||||
temp = Dand.wrapc("v_box"
|
||||
, [
|
||||
Dand.wrape("Getting information from Server ...")
|
||||
, Dand.wrapc("v_description", "Site file (hash): " + hash)
|
||||
]
|
||||
, [
|
||||
new DataKey("value", hash)
|
||||
, new DataKey("size", "large")
|
||||
, new IKey("style", "max-height: 150px;")
|
||||
]
|
||||
);
|
||||
|
||||
// Get data from site library
|
||||
getData( config.path.info + hash, __applyData.bind({stage: temp, hash: hash}), loadFailed );
|
||||
|
||||
insertSnippet(j = snippetWrap("SiteFile", temp), Boolean(override));
|
||||
|
||||
// Set context menu
|
||||
createContext(null, j);
|
||||
}
|
||||
};
|
||||
|
||||
if (override)
|
||||
{
|
||||
visualizer(true, override);
|
||||
override = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return handler;
|
||||
}
|
||||
return true;
|
||||
|
||||
};
|
||||
|
||||
var compile = function ( stage )
|
||||
{
|
||||
stage = IDOMElement( stage );
|
||||
// [html][/html]
|
||||
return "[sitefile"
|
||||
+ " size=\"" + stage.getDAttribute( "size" ) + "\"" + "]"
|
||||
+ escapeStr( stage.getDAttribute( "value" ) )
|
||||
+ "[/sitefile]";
|
||||
};
|
||||
|
||||
__static_method( sitefile, "compile", compile );
|
||||
|
||||
ns[ NS_EXPORT ]( EX_CLASS, "SiteFile", sitefile );
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user