Only in .: .30_Tombloo.Service.js.swp
diff -EbBw --strip-trailing-cr --exclude=CVS --exclude='*.o' --exclude=.svn -uw /Users/kuma/Tombloo-0.1.14/chrome/content/library/30_Tombloo.Service.js ./30_Tombloo.Service.js
--- /Users/kuma/Tombloo-0.1.14/chrome/content/library/30_Tombloo.Service.js	2008-04-03 00:24:54.000000000 +0900
+++ ./30_Tombloo.Service.js	2008-04-05 16:40:12.000000000 +0900
@@ -57,12 +57,85 @@
 					var ds = {};
 					var filter = new RegExp(getPref('posterFilter'), 'i');
 					var posters = Tombloo.Service.posters;
+
+					if ( ctx.event.shiftKey ) {
+						// fx3 has browser object in ctx. fx2 does not.
+						var tabbrowser = ctx.browser || ctx.menu.ownerDocument.defaultView.getBrowser();
+						var browser = tabbrowser.selectedBrowser;
+						var box = tabbrowser.getNotificationBox( browser );
+
+						var buttons = [];
+						for(var name in posters) {
+							if ( 1 ) {
+								// if a poster is called on non-support object,
+								// (ex. flickr poster called on non-flickr image)
+								// it returns already fired deferred object.
+								//if ( poster.fired != -1 ) {
+								//	continue;
+								//}
+								var d = new Deferred().addCallback( let(name=name) function () {
+									return posters[name](ctx, params);
+								} );
+								// FIXME: no way to determine the poster
+								// actually posts a post or just mark it as favorite.
+								var buttonLabelPrefix = "post to ";
+								if ( name.match( /^flickr$/i ) ) {
+									buttonLabelPrefix = 'fav on ';
+								}
+
+								var label = buttonLabelPrefix + name;
+							 	var notificationTarget = {
+							 		label: label,
+							 		callback: let(d = d, label=label) function () {
+										log(box);
+										var postedToAll = flattenArray(
+											box.getElementsByTagName('button')
+										).map( function (b) {
+											if ( b.label == label ) {
+												b.disabled = true;
+											}
+											return b.disabled;
+										} ).every( function (b) { return b } );
+										d.callback();
+										if ( postedToAll ) {
+											box.removeNotification(widget);
+										}
+							 			return true;
+							 		}
+							 	};
+
+									buttons.push( notificationTarget );
+									ds[name] = d.addErrback(errback);
+							 }
+						}
+
+
+						var notificationName = "tombloo-notification-posters";
+
+						// old one can be present.
+						var n = box.getNotificationWithValue( notificationName );
+						if ( n ) {
+							box.removeNotification( n );
+						}
+
+						var widget =  box.appendNotification(
+									"Push buttons you want to post.", notificationName,
+									null /*noimage*/,
+									box.PRIORITY_WARNING_MEDIUM,
+									buttons );
+						widget.persistence = 0;
+						ctx.window.addEventListener( 'unload', function () {
+							box.removeNotification(widget);
+						}, false);
+
+						return new DeferredHash(ds);
+					} else {
 					for(var name in posters){
 						if((name + ': ' + params.type).match(filter))
 							ds[name] = posters[name](ctx, params);
 					}
-					
 					return new DeferredHash(ds);
+					}
 				}).addCallback(function(ress){
 					log(ress);
 					
Only in .: 30_Tombloo.Service.js.20080405.diff
Only in .: 90_Hatena.js

