[if-any cue account_cue]

[# Do not show cue if there is an alert shown on the page.]
[if-any alerts.show][else]


[# Dialog box for privacy settings.]
[is cue "privacy_click_through"]
  <div class="scrim cue">
    <div id="privacy_dialog">
      <h2>Email display settings</h2>

      <p>There is a <a href="/hosting/settings" title="Settings"
      class="dismiss_cue">setting</a> to control how your email
      address appears on comments and issues that you post.

      [if-any is_privileged_domain_user]
        Since you are an integral part of this community, that setting
        defaults to showing your full email address.</p>

        <p>Also, you are being trusted to view email addresses of
        non-members who post comments in your projects.  Please use
        those addresses only to request additional information about
        the posted comments, and do not share other users' email
        addresses beyond the site.</p>
      [else]
        Project members will always see your full email address.  By
        default, other users who visit the site will see an
        abbreviated version of your email address.</p>
      [end]

      <div class="actions">
        <a href="#" title="Got it" class="dismiss_cue">GOT IT</a>
      </div>
    </div>
  </div>

[else][if-any account_cue]

  <table id="alert-table" align="center" border="0" cellspacing="0" cellpadding="0">
   <tr><td class="notice" id="notice">
    [# Cue card to warn users who are using a child account.]
    [is account_cue "switch_to_parent_account"]
        <div>You are signed in to a linked account.</div>
	<a href="[login_url]">Switch to [parent_email]</a>.
    [end]
  </td></tr>
 </table>

[else][is cue "code_of_conduct"]
 [# Note: code-of-conduct cue card is implemented in cues-conduct.ezt which is
    included from forms where users post text.]

[else]

 <table align="center" border="0" cellspacing="0" cellpadding="0" class="cue">
  <tr><td><span>
    [# Cue cards to teach users how to join a project.]
    [is cue "how_to_join_project"]
      <b>How-to:</b>
      Join this project by contacting the project owners.
    [end]

    [# Cue card to teach users how to search for numbers in the issue tracker.]
    [is cue "search_for_numbers"]
     [if-any jump_local_id]
       <b>Tip:</b>
       To find issues containing "[jump_local_id]", use quotes.
     [end]
    [end]

    [# Cue card to teach users how to search for numbers in the issue tracker.]
    [is cue "dit_keystrokes"]
      <b>Tip:</b>
      Press <b>Esc</b> then <b style="font-size:130%"><tt>?</tt></b> for keyboard shortcuts.
    [end]

    [# Cue card to teach users that italics mean derived values in the issue tracker.]
    [is cue "italics_mean_derived"]
      <b>Note:</b>
      <i>Italics</i> mean that a value was derived by a filter rule.
      <a href="http://code.google.com/p/monorail/wiki/FilterRules">Learn more</a>
    [end]

    [# Teach users that color blocks mean that an issue participant may not be available.]
    [is cue "availability_msgs"]
      <b>Note:</b>
      Color blocks (like <span class="availability_unsure" style="padding:0">&#9608;</span> or
      <span class="availability_never" style="padding:0">&#9608;</span>)
      mean that a user may not be available.  Tooltip shows the reason.
    [end]

    [# Cue card to teach users that full-text indexing takes time.]
    [is cue "stale_fulltext"]
      <b>Note:</b>
      Searching for text in issues may show results that are a few minutes out of date.
    [end]

    [# Cue cards to improve discoverability of people roles.]
    [is cue "document_team_duties"]
     [if-any read_only][else]
       <b>Tip:</b>
       Document <a href="people/list">each teammate's project duties</a>.
     [end]
    [end]

    [# Cue cards to explain grid mode.]
    [is cue "showing_ids_instead_of_tiles"]
       <b>Note:</b>
       Grid mode automatically switches to displaying IDs when there are many results.
    [end]

    [# Cue cards to explain ownermodified, statusmodified, and componentmodified.]
    [is cue "issue_timestamps"]
       <b>Note:</b>
       ownermodified, statusmodified, and componentmodified are the times at which
       an issue's owner, status or component were changed.
    [end]

    [# Cue card to remind the user that they have set a vacation message.]
    [is cue "you_are_on_vacation"]
       <b>Note:</b>
       Your <a href="/hosting/settings">vacation message</a> is set to:
       "[logged_in_user.avail_message_short]".
    [end]

    [# Cue card to inform user that email to them bounced and that they must reset.]
    [is cue "your_email_bounced"]
       <b>Action required:</b>
       An email to you bounced.  Once you can reliably receive email, clear the
       <a href="[logged_in_user.profile_url]">bouncing status</a>.
    [end]

    [# Cue card to tell users what it means to star a hotlist]
    [is cue "explain_hotlist_starring"]
        <b>Note:</b>
        Starring a hotlist will not cc you on any updates.
        It simply adds the hotlist to your Starred hotlists category on this
        page so that you can conveniently revisit it.
    [end]

   </span>
    [# Link to dismiss the cue card.]
    [if-any logged_in_user]
     [if-any read_only][else]
      <a href="#" title="Don't show this message again" style="margin-left: 1em" class="dismiss_cue x_icon"></a>
     [end]
    [end]
  </td></tr>
 </table>
[end]
[end]
[end]


 <script type="text/javascript" nonce="[nonce]">
runOnLoad(function() {
  var dismissLinks = document.querySelectorAll(".dismiss_cue");
  for (var i = 0; i < dismissLinks.length; ++i) {
   var dismissCue = dismissLinks[[]i];
     dismissCue.addEventListener("click", function(event) {
         _CS_dismissCue("[format "js"][cue][end]");
         if (this.getAttribute("href") === "#")
           event.preventDefault();
     });
  }
});
 </script>

[end]
[end]
