penguin/AstroJS

Javascript framework for my blog

botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Footnote.js

raw ยท 2267 bytes

(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 escapeStr = ns[ NS_INVOKE ]( "escapeStr" );

	var footnote = function (insertSnippet, snippetWrap, createContext, override)
	{
		var temp, i, j
		
		, handler = function ()
		{
			// Input fields
			var v_snippetInput = Dand.wrap( "textarea", null, "v_snippet_input" );
			
			if ( this._stage )
			{
				v_snippetInput.value = this._mText;
			}
			
			// Popup MessageBox
			new MessageBox(
				"Insert Footnote"
				, v_snippetInput
				, "OK", "Cancel"
				, visualizer.bind({ mText: v_snippetInput, stage: this._stage })
			).show();
		}
		
		, visualizer = function (submitted, override)
		{
			
			var mText, stage = this.stage;
			
			mText = override ? override.value : this.mText.value;
			
			if (submitted && mText)
			{
				if (!stage)
				{
					// Visualize component
					temp = Dand.wrapne( "span", "^", [
						new DataKey( "value", mText )
					]);

					insertSnippet(
						j = snippetWrap( "Footnote", temp, false, "span" )
						, Boolean( override )
					);
				}
				else
				{
					IDOMElement( stage ).setAttribute(new DataKey( "value", mText ));
					temp = stage;
				}
				
				i = { _mText: mText, _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)
	{
		// [footnote][/footnote]
		return "[footnote]" + escapeStr( IDOMElement(stage).getDAttribute("value") ) + "[/footnote]";
	};

	__static_method( footnote, "compile", compile );

	ns[ NS_EXPORT ]( EX_CLASS, "Footnote", footnote );
})();