Here is the incremental diff that addresses both Salgado's and Martin's comments. {{{ === modified file 'lib/canonical/launchpad/javascript/lp/errors.js' --- lib/canonical/launchpad/javascript/lp/errors.js 2009-11-23 19:29:02 +0000 +++ lib/canonical/launchpad/javascript/lp/errors.js 2009-12-21 20:33:38 +0000 @@ -69,7 +69,7 @@ * @param flash_node {Node} The node to red flash. * @param msg {String} The message to display. */ -var display_error = function(flash_node, msg) { +Y.lp.display_error = function(flash_node, msg) { create_error_overlay(); maybe_red_flash(flash_node, function(){ error_overlay.showError(msg); @@ -77,5 +77,36 @@ }); }; -Y.lp.display_error = display_error; -}, "0.1", {"requires":["lazr.formoverlay"]}); + +var info_overlay; +/* + * Display the form overlay for non-error informational messages. + * + * @method display_info + * @param msg {String} The message to display. +*/ +Y.lp.display_info = function(msg) { + if (info_overlay === undefined) { + info_overlay = new Y.lazr.PrettyOverlay({ + //headerContent: '

Notice

', + centered: true, + visible: false + }); + info_overlay.render(); + } + var content = Y.Node.create( + '
'); + content.appendChild(Y.Node.create(msg)); + var button_div = Y.Node.create('
'); + var ok_button = Y.Node.create(''); + ok_button.on('click', function(e) { + info_overlay.fire('cancel'); + }); + button_div.appendChild(ok_button); + content.appendChild(button_div); + info_overlay.set('bodyContent', content); + info_overlay.show(); +}; + +}, "0.1", {"requires":["lazr.formoverlay", "lazr.overlay"]}); === modified file 'lib/canonical/launchpad/javascript/registry/team.js' --- lib/canonical/launchpad/javascript/registry/team.js 2009-12-18 06:06:30 +0000 +++ lib/canonical/launchpad/javascript/registry/team.js 2009-12-21 20:35:57 +0000 @@ -54,13 +54,14 @@ var members_section, members_ul, count_elem; if (did_status_change === false) { disable_spinner(); - Y.lp.display_error( - addmember_link, + Y.lp.display_info( selected_person.title + ' is already ' + - current_status + '.'); + current_status.toLowerCase() + + ' as a member of the team.'); return; } var is_team = false; + current_status = 'foo'; if (current_status == 'Invited') { is_team = true; members_section = box.query('#recently-invited'); @@ -79,6 +80,7 @@ Y.lp.display_error( addmember_link, 'Unexpected status: ' + current_status); + return; } var first_node = members_ul.get('firstChild'); === modified file 'lib/lp/registry/browser/tests/mailinglist-views.txt' --- lib/lp/registry/browser/tests/mailinglist-views.txt 2009-12-18 06:04:44 +0000 +++ lib/lp/registry/browser/tests/mailinglist-views.txt 2009-12-21 19:55:45 +0000 @@ -33,8 +33,7 @@ No Privileges Person is added as a member of the Aardvarks. >>> no_priv = person_set.getByEmail('