<!DOCTYPE html>
[# This is the part of header.ezt used by both the legacy
   Monorail UI, and the new Polymer pages.
]
<html lang="en">
<head>
  <link rel="icon" type="image/vnd.microsoft.icon" href="/static/images/monorail.ico">
  [if-any link_rel_canonical]
    <link rel="canonical" href="[link_rel_canonical]">
  [end]

  <script type="text/javascript" nonce="[nonce]">
   [# Javascript object containing basic page data. ]
   window.CS_env = {
     'absoluteBaseUrl': '[format "js"][absolute_base_url][end]',
     'app_version': '[format "js"][app_version][end]',
     'token': '[format "js"][xhr_token][end]',
     'tokenExpiresSec': [format "js"][token_expires_sec][end],
     'loggedInUserEmail':
       [if-any logged_in_user]
         '[format "js"][logged_in_user.email][end]'
       [else]
         null
       [end],
     'login_url': '[format "js"][login_url][end]',
     'logout_url': '[format "js"][logout_url][end]',
     'profileUrl':
       [if-any logged_in_user]
         '[format "js"][logged_in_user.profile_url][end]'
       [else]
         null
       [end],
     'projectName': '[format "js"][projectname][end]',
     'projectIsRestricted': [if-any project_is_restricted]true[else]false[end],
     'is_member': '[format "js"][is_member][end]',
     'gapi_client_id': '[format "js"][gapi_client_id][end]',
   };
  </script>

  [# Improve the snippet that appears in search]
  [if-any show_search_metadata]
    <meta name="Description" content="Monorail is simple, reliable, and flexible issue tracking tool.">
    <meta name="robots" content="NOODP">
  [end]

    <title>
      [if-any title][title] - [end]
      [if-any title_summary][title_summary] - [end]
      [if-any projectname]
        [projectname] -
      [else]
        [if-any viewing_user_page][viewed_user.display_name] - [end]
      [end]
      [if-any title_summary][else]
        [if-any project_summary][project_summary] - [end]
      [end]
      [site_name]
    </title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="referrer" content="no-referrer">
    [if-any robots_no_index]
     <meta name="ROBOTS" content="NOINDEX,NOARCHIVE">
    [else]
     <meta name="ROBOTS" content="NOARCHIVE">
    [end]
    <meta name="viewport" content="width=device-width, minimum-scale=1.0">
    <link type="text/css" rel="stylesheet" href="[version_base]/static/css/chopsui-normal.css">

    [if-any is_ezt]
      <link type="text/css" rel="stylesheet" href="[version_base]/static/css/ph_core.css">
      <link type="text/css" rel="stylesheet" media="(max-width:425px)"
            href="[version_base]/static/css/ph_mobile.css">

      [if-any category_css]
        <link type="text/css" rel="stylesheet" href="[version_base]/static/[category_css]">
      [end]
      [if-any category2_css]
        <link type="text/css" rel="stylesheet" href="[version_base]/static/[category2_css]">
      [end]
      [if-any page_css]
        <link type="text/css" rel="stylesheet" href="[version_base]/static/[page_css]">
      [end]
    [end]

    <!-- Lazy load icons. -->
    <link rel="stylesheet"
      href="https://fonts.googleapis.com/icon?family=Material+Icons"
      media="none"
      id="icons-stylesheet">
    <script type="module" async defer nonce="[nonce]">
      document.getElementById('icons-stylesheet').media = 'all';
    </script>
    [# NO MORE SCRIPTS IN HEAD, it makes page loading too slow.]
</head>

[# Tiny script used sitewide. ]
<script type="text/javascript" nonce="[nonce]">
   function _go(url, newWindow) {
     if (newWindow)
       window.open(url, '_blank');
     else
       document.location = url;
   }
   function $(id) { return document.getElementById(id); }

   var loadQueue = [];
   function runOnLoad(fn) { loadQueue.push(fn); }

   window.onload = function() {
     for (var i = 0; i < loadQueue.length; i++)
       loadQueue[[]i]();
     delete loadQueue;
   };
</script>
