AstroJS/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Sound.js
2015-08-14 21:06:23 +08:00

147 lines
3.7 KiB
JavaScript

(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" );
var compileProp = ns[ NS_INVOKE ]( "compileProp" );
var sound = function (insertSnippet, snippetWrap, createContext, override)
{
var temp, i, j
, defaultArt = "http://file.astropenguin.net/blog/layout-images/disc_s.png"
, handler = function ()
{
// Input fields
var input_url = Dand.wrap('input', null, "v_snippet_input_single", null, new IKey("type", "text"))
, input_albumArt = Dand.wrap('input', null, "v_snippet_input_single", null, new IKey("type", "text"))
, input_lrc = Dand.wrap('input', null, "v_snippet_input_single", null, new IKey("type", "text"))
;
if (this._stage)
{
input_url.value = this._url;
input_albumArt.value = this._albumArt;
input_lrc.value = this._lrc;
}
new MessageBox(
(this._stage ? "Edit" : "Insert") + " sound snippet"
, Dand.wrape([
Dand.wrapc("v_instruction flsf", "Link to sound:")
, input_url
, Dand.wrapc("v_instruction flsf", "Link to album art(optional):")
, input_albumArt
, Dand.wrapc("v_instruction flsf", "Link to lrc(optional):")
, input_lrc
]
)
, "OK", "Cancel", visualizer.bind({url:input_url, albumArt:input_albumArt, lrc:input_lrc, stage: this._stage})).show();
}
, visualizer = function (submitted)
{
var src, albumArt , lrc
, stage = this.stage;
if (override)
{
src = override.url;
albumArt = override.albumArt;
lrc = override.lrc;
}
else
{
src = this.url.value;
albumArt = this.albumArt.value;
lrc = this.lrc.value;
}
if (submitted && src)
{
if (!stage)
{
// Visualize component
temp = Dand.wrapc('v_box'
, [
Dand.wrape(null, new IKey
(
"style", "height: 75px; background-size: auto 75px; background-repeat: no-repeat;"
+ "background-image: url(" + (albumArt ? albumArt : defaultArt) + ")"
)
)
, Dand.wrapc('v_description', "Sound snippet")
]
, [
new DataKey("value", "")
, new DataKey("url", src)
, new DataKey("albumArt", albumArt)
, new DataKey("lrc", lrc)
]
);
insertSnippet(j = snippetWrap("Sound", temp), Boolean(override));
}
else
{
// Edit properties
stage.firstChild.style.backgroundImage = "url(" + (albumArt ? albumArt : defaultArt) + ")" ;
IDOMElement(stage).setAttribute
(
[
new DataKey("url", src)
, new DataKey("albumArt", albumArt)
, new DataKey("lrc", lrc)
]
);
}
i = {_url: src, _albumArt: albumArt, _lrc: lrc, _stage: temp};
// Set context menu
createContext(i, j, handler);
}
}
;
if (override)
{
visualizer(true, override);
override = false;
}
else
{
return handler;
}
return true;
};
var compile = function (stage)
{
// [sound url="" albumArt="" lrc="" ][/sound]");
var element = IDOMElement(stage)
, props = ["url", "albumArt", "lrc"];
return "[sound" + compileProp( element, props ) + "][/sound]";
};
__static_method( sound, "compile", compile );
ns[ NS_EXPORT ]( EX_CLASS, "Sound", sound );
})();