(function(){ var ns = __namespace( "Astro.Blog.AstroEdit" ); /** @type {System.Debug} */ var debug = __import( "System.Debug" ); /** @type {Components.MessageBox} */ var MessageBox = __import( "Components.MessageBox" ); /** @type {Dandelion} */ var Dand = __import( "Dandelion" ); /** @type {Dandelion.IDOMElement} */ var IDOMElement = __import( "Dandelion.IDOMElement" ); /** @type {Astro.Blog.Config} */ var Config = __import( "Astro.Blog.Config" ); var postData = __import( "System.Net.postData" ); /* @type {AstroEdit.IPlugins} */ var Flag = function ( id, target, flagConf ) { this.id = id; var stage = Dand.id( target ); var ae_addFlag = Dand.glass( "ae_flag_add" , true, stage )[0]; var ae_flags = Dand.glass( "ae_flags" , false, stage )[0]; // Store flags for future use var flags = {}; ////// Handlers ae_addFlag.addEventListener( "Click", function ( e ) { e.stopPropagation(); // Input fields var ae_flagInput; // Popup MessageBox new MessageBox( "Add new flag(s)" , Dand.wrape([ Dand.wrapc( "v_instruction flsf" , "Flags are separated by \\n. (existing flags will be ignored.)" ) , ae_flagInput = Dand.wrap( "textarea", null, "v_snippet_input" ) ]) , "OK", "Cancel" , parseFlags.bind( ae_flagInput ) ).show(); } ); var deleteFlag = function (e) { e.stopPropagation(); var p = { stage: this.parentNode }; p[ id ] = this.nodeValue; p[ "id" ] = id; postData( flagConf.URICount, p, confirmDelete.bind( p ), serverFailed ); }; var confirmDelete = function (obj) { new MessageBox( "Delete Flag" , [ Dand.wrapc("ae_blockswitch", [ Dand.textNode( "Are you sure you want to delete " ) , Dand.wrap( "span", null, "flag_active", Dand.textNode( this[ id ] ) ) , Dand.textNode( " ?." ) ] ) , obj.count > 0 ? Dand.wrape([ Dand.textNode( "This will affect " ) , Dand.wrap( "span", null, "ae_affected_count", Dand.textNode( obj.count ) ) , Dand.textNode(" article(s).") ]) : null ] , "Delete", "No" , doDelete.bind( this ) ).show(); }; var doDelete = function( confirmed ) { if ( confirmed ) { this[ "del" ] = 1; postData( flagConf.URISet , this , deleteSuccess.bind( this ) , serverFailed ); } }; var deleteSuccess = function(obj) { // Remove element this.stage.parentNode.removeChild( this.stage ); // Delete reference delete flags[ this[ id ] ]; }; var parseFlags = function () { // Filter invalid flags var nflags = this.value.trim().match(/[^\n]+/g), d, e; for (var i in nflags) { if(!flags[(i = nflags[i]).toLowerCase()]) { flags[i] = Dand.wrap("span", null, "flag_active", [d = Dand.wrap("span", null, "ae_flag_delete", "\u00D7"), e = Dand.textNode(i)] ); // Seperator ae_flags.appendChild(Dand.textNode(" ")); ae_flags.appendChild(flags[i]); flags[i].onclick = function() { toggleFlag(this) }.bind(flags[i]); d.onclick = deleteFlag.bind(e); } else { debug.Info("Flag exist: " + i); // Hightlight these flags flags[i.toLowerCase()].className = "flag_active"; } } }; var toggleFlag = function (flag) { var isEnabled = flag.className == "flag_active" ? true : false; flag.className = isEnabled ? "ae_disabled" : "flag_active"; }; var serverFailed = function (obj) { }; var cflag, ae_children = ae_flags.childNodes; for (var i in ae_children) { if((cflag = ae_children[i]).nodeType == 1) { flags[cflag.lastChild.nodeValue.toLowerCase()] = cflag; IDOMElement( cflag ).addEventListener( "Click", function() { toggleFlag( this ); }.bind( cflag ) ); // Bind the last child (x button) to firstChild (textNode: flagname) IDOMElement( cflag.firstChild ).addEventListener( "Click", deleteFlag.bind( cflag.lastChild ) ); } } this.getData = function () { // Compile flag list var tlist = []; // Return names for (var i in flags) { if(flags[i].className == "flag_active") tlist[tlist.length] = flags[i].lastChild.nodeValue; } return tlist.join("\n"); } this.setForView = function ( flagList ) { // Disable all flags first for ( var i in flags ) flags[i].className = "ae_disabled"; // Set flags from flagList for ( i in flagList ) if ( flagList[i] ) flags[flagList[i].toLowerCase()].className = "flag_active"; } } Flag.prototype.getSetData = function () { }; Flag.prototype.setForView = function ( flagList ) { }; ns[ NS_EXPORT ]( EX_CLASS, "Flag", Flag ); })();