forked from Botanical/BotanJS
Astro Classes
This commit is contained in:
154
botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Spoiler.js
Normal file
154
botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Spoiler.js
Normal file
@@ -0,0 +1,154 @@
|
||||
(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 spoiler = function(insertSnippet, snippetWrap, createContext, override)
|
||||
{
|
||||
var temp, i, j
|
||||
|
||||
, handler = function ()
|
||||
{
|
||||
// Input fields
|
||||
var v_snippetInput = Dand.wrap('textarea', null, "v_snippet_input")
|
||||
, input_title = Dand.wrap('input', null, "v_snippet_input_single", null, new IKey("type", "text"))
|
||||
, input_expanded = Dand.wrapna('input', new IKey("type", "checkbox"))
|
||||
|
||||
if (this._stage)
|
||||
{
|
||||
v_snippetInput.value = this._content;
|
||||
input_title.value = this._title;
|
||||
input_expanded.checked = (this._expanded == "on");
|
||||
}
|
||||
|
||||
// Popup MessageBox
|
||||
new MessageBox("Insert spoiler content"
|
||||
, Dand.wrape([
|
||||
Dand.wrapc("v_instruction flsf", "Title")
|
||||
, input_title
|
||||
|
||||
, Dand.wrapc("v_instruction flsf", "Content")
|
||||
, v_snippetInput
|
||||
|
||||
, Dand.wrape([ input_expanded, Dand.textNode( "Expanded" ) ])
|
||||
]
|
||||
)
|
||||
, "OK", "Cancel", visualizer.bind({title: input_title, content:v_snippetInput, expanded: input_expanded, stage: this._stage})).show();
|
||||
}
|
||||
|
||||
, visualizer = function (submitted, override)
|
||||
{
|
||||
var content, title, expanded
|
||||
, stage = this.stage;
|
||||
|
||||
if (override)
|
||||
{
|
||||
content = override.value;
|
||||
title = override.title;
|
||||
expanded = override.expanded ? "on" : "";
|
||||
}
|
||||
else
|
||||
{
|
||||
content = this.content.value;
|
||||
title = this.title.value;
|
||||
expanded = this.expanded.checked ? "on" : "";
|
||||
}
|
||||
|
||||
if (submitted && content)
|
||||
{
|
||||
// Shared Clause
|
||||
i = Dand.textNode(title || "Spoiler");
|
||||
if (!stage)
|
||||
{
|
||||
if (!content) return;
|
||||
|
||||
// Visualize component
|
||||
temp = Dand.wrapc('v_box',
|
||||
[
|
||||
// caption
|
||||
Dand.wrapc('v_caption', i)
|
||||
, Dand.textNode(content)
|
||||
],
|
||||
[
|
||||
new DataKey("value", content)
|
||||
, new DataKey("title", title)
|
||||
, new DataKey("expanded", expanded)
|
||||
]
|
||||
);
|
||||
insertSnippet(j = snippetWrap("Spoiler", temp), Boolean(override));
|
||||
}
|
||||
else
|
||||
{
|
||||
IDOMElement(stage).setAttribute
|
||||
(
|
||||
[
|
||||
new DataKey("value", content)
|
||||
, new DataKey("title", title)
|
||||
, new DataKey("expanded", expanded)
|
||||
]
|
||||
);
|
||||
|
||||
temp = stage.firstChild;
|
||||
temp.removeChild(temp.firstChild);
|
||||
temp.appendChild(i);
|
||||
|
||||
stage.removeChild(stage.lastChild);
|
||||
stage.appendChild(Dand.textNode(content));
|
||||
|
||||
// set temp back to stage
|
||||
temp = stage;
|
||||
}
|
||||
|
||||
i = {
|
||||
_title: title
|
||||
, _content: content
|
||||
, _expanded: expanded || "off"
|
||||
, _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 )
|
||||
{
|
||||
var element = IDOMElement( stage )
|
||||
, props = ["title", "expanded"];
|
||||
|
||||
return "[spoiler"
|
||||
+ compileProp( element, props )
|
||||
+ "]"
|
||||
+ element.getDAttribute( "value" )
|
||||
+ "[/spoiler]";
|
||||
};
|
||||
|
||||
__static_method( spoiler, "compile", compile );
|
||||
|
||||
ns[ NS_EXPORT ]( EX_CLASS, "Spoiler", spoiler );
|
||||
})();
|
Reference in New Issue
Block a user