Oddly, exactly 6 years after the last version, I've added a feature to Ido Magal's "TrashPlugin". Now the Delete button won't do anything on Tiddlers tagged with "dontDelete".
This is a great way to prevent critical Tiddlers (system, themes, css, etc.) from getting accidentally wiped! Enjoy, David Szego /*** |''Name:''|TrashPlugin| |''Version:''|1.1.1 (Feb 12, 2012) | |''Source:''|http://ido-xp.tiddlyspot.com/#TrashPlugin| |''Author:''|Ido Magal (idoXatXidomagalXdotXcom)| |''Licence:''|[[BSD open source license]]| |''CoreVersion:''|2.1.0| |''Browser:''|??| !Description This plugin provides trash bin functionality. Instead of being permanently removed, deleted tiddlers are tagged with "Trash." Empty the trash by clicking on the <<emptyTrash>> button in the [[Trash]] tiddler. Holding down CTRL while clicking on "delete" will bypass the trash. !Installation instructions Create a new tiddler in your wiki and copy the contents of this tiddler into it. Name it the same and tag it with "[[systemConfig]]". Save and reload your wiki. !Uninstallation instructions 1. Empty the [[Trash]] ( <<emptyTrash>> ) 2. Delete this tiddler. !Revision history * V1.1.1 (Feb. 12, 2012) ** Added "dontDelete" as an exception tag to prevent things from being trashed * V1.1.0 (Dec 12, 2006) ** added movedMsg (feedback when tiddler is tagged as Trash) ** make sure tiddler actually exists before tagging it with "Trash" ** fetch correct tiddler before checking for "systemConfig" tag * V1.0.3TT.1 (TiddlyTools variant) (Dec 11, 2006) ** don't create Trash tiddler until needed ** remove Trash tiddler when no trash remains ** don't tag Trash tiddler with "TrashPlugin" ** moved all user-visible strings to variables so they can be translated by 'lingo' plugins ** use displayMessage() instead of alert() * v1.0.3 (Dec 11, 2006) ** Fixed broken reference to core deleteTiddler. ** Now storing reference to core deleteTiddler in emptyTrash macro. ** Reduced deleteTiddler hijacking to only the handler. * v1.0.2 (Dec 11, 2006) ** EmptyTrash now uses removeTiddler instead of deleteTiddler. ** Supports trashing systemConfig tiddlers (adds systemConfigDisable tag). * v1.0.1 (Dec 10, 2006) ** Replaced TW version with proper Core reference. ** Now properly hijacking deleteTiddler command. * v1.0.0 (Dec 10, 2006) ** First draft. !To Do * Make trash keep only n days worth of garbage. * Add undo. * rename deleted tiddlers? !Code ***/ //{{{ config.macros.emptyTrash = { tag: "Trash", preventionTag: "dontDelete", movedMsg: "'%0' has been tagged as '%1'", label: "empty trash", tooltip: "Delete items tagged as %0 that are older than %1 days old", emptyMsg: "The trash is empty.", noneToDeleteMsg: "There are no items in the trash older than %0 days.", confirmMsg: "The following tiddlers will be deleted:\n\n'%0'\n\nIs it OK to proceed?", deletedMsg: "Deleted '%0'", handler: function ( place,macroName,params,wikifier,paramString,tiddler ) { var namedParams = (paramString.parseParams(daysOld))[0]; var daysOld = namedParams['daysOld'] ? namedParams['daysOld'][0] : 0; // default var buttonTitle = namedParams['title'] ? namedParams['title'][0] : this.label; createTiddlyButton ( place, buttonTitle, this.tooltip.format([ config.macros.emptyTrash.tag,daysOld ]), this.emptyTrash( daysOld )); }, emptyTrash: function( daysOld ) { return function() { var collected = []; var compareDate = new Date(); compareDate.setDate( compareDate.getDate() - daysOld ); store.forEachTiddler(function ( title,tiddler ) { if ( tiddler.tags.contains( config.macros.emptyTrash.tag ) && tiddler.modified < compareDate ) collected.push( title ); }); if ( collected.length == 0 ) { if ( daysOld == 0 ) displayMessage( config.macros.emptyTrash.emptyMsg ); else displayMessage( config.macros.emptyTrash.emptyMsg.format( [daysOld] ) ); } else { if ( confirm( config.macros.emptyTrash.confirmMsg.format( [collected.join( "', '" )] ) ) ) { for ( var i=0;i<collected.length;i++ ) { store.removeTiddler( collected[i] ); displayMessage( config.macros.emptyTrash.deletedMsg.format( [collected[i]] ) ); } } } // remove Trash tiddler if no trash remains if ( store.getTaggedTiddlers( config.macros.emptyTrash.tag ).length == 0 ) { story.closeTiddler( config.macros.emptyTrash.tag,true,false); store.removeTiddler( config.macros.emptyTrash.tag ); } else story.refreshTiddler( config.macros.emptyTrash.tag,false,true ); store.setDirty( true ); } } } ////////////////// hijack delete command config.macros.emptyTrash.orig_deleteTiddler_handler = config.commands.deleteTiddler.handler; config.commands.deleteTiddler.handler = function( event,src,title ) { // if tiddler exists (i.e., not a NEW, unsaved tiddler in edit mode) and not bypassing Trash (holding CTRL key) and not tagged with the prevention tag ("dontDelete" by default) if ( store.tiddlerExists( title ) && !event.ctrlKey ) { var tiddler=store.fetchTiddler(title); if (! tiddler.tags.contains( config.macros.emptyTrash.preventionTag ) ) { // if Trash tiddler doesn't exist yet, create it now... if (!store.tiddlerExists( config.macros.emptyTrash.tag )) store.saveTiddler( config.macros.emptyTrash.tag,config.macros.emptyTrash.tag, "<<emptyTrash>>","TrashPlugin",new Date(),null ); // set tags on tiddler store.setTiddlerTag( title,1,config.macros.emptyTrash.tag ); store.setTiddlerTag( title,1,"excludeLists" ); store.setTiddlerTag( title,1,"excludeMissing" ); if (tiddler.tags.contains( "systemConfig" )) store.setTiddlerTag( title,1,"systemConfigDisable" ); // close tiddler, autosave file (if set), and give user feedback story.closeTiddler( title,true,event.shiftKey || event.altKey ); if( config.options.chkAutoSave ) saveChanges(); displayMessage(config.macros.emptyTrash.movedMsg.format( [ title,config.macros.emptyTrash.tag ] )); } } else { config.macros.emptyTrash.orig_deleteTiddler_handler.apply( this, arguments ); } story.refreshTiddler( config.macros.emptyTrash.tag,false,true ); return false; }; //}}} -- You received this message because you are subscribed to the Google Groups "GTD TiddlyWiki" group. To post to this group, send email to gtd-tiddlywiki@googlegroups.com. To unsubscribe from this group, send email to gtd-tiddlywiki+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/gtd-tiddlywiki?hl=en.