Index: appengine/monorail/templates/framework/master-header.ezt |
diff --git a/appengine/monorail/templates/framework/master-header.ezt b/appengine/monorail/templates/framework/master-header.ezt |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c0ae57eb6e529b07923ecb475b0984d71a57bed9 |
--- /dev/null |
+++ b/appengine/monorail/templates/framework/master-header.ezt |
@@ -0,0 +1,101 @@ |
+<!DOCTYPE html> |
+[# This is the master header file that is included in all Monrail servlets that render a page. |
+ |
+ Args: |
+ arg0: Can be "showtabs", "showusertabs" or "showusergrouptabs" to select which top-plevel tabs are shown. |
+ arg1: String like "t1", "t2", "t3" to identify the currently active tab. |
+] |
+<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. ] |
+ var CS_env = { |
+ 'absoluteBaseUrl': '[format "js"][absolute_base_url][end]', |
+ 'app_version': '[format "js"][app_version][end]', |
+ 'token': '[format "js"][xhr_token][end]', |
+ [if-any logged_in_user] |
+ 'tokenExpiresSec': [format "js"][token_expires_sec][end], |
+ [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]', |
+ }; |
+ </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 projectname] |
+ [projectname] - |
+ [else] |
+ [if-any viewing_user_page][viewed_user.display_name] - [end] |
+ [end] |
+ [if-any title_summary][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"> |
+ <link type="text/css" rel="stylesheet" href="/static/css/ph_core.css?version=[app_version]"> |
+ <link type="text/css" rel="stylesheet" href="/static/css/ph_mobile.css?version=[app_version]"> |
+ [if-any category_css] |
+ <link type="text/css" rel="stylesheet" href="/static/[category_css]?version=[app_version]"> |
+ [end] |
+ [if-any page_css] |
+ <link type="text/css" rel="stylesheet" href="/static/[page_css]?version=[app_version]"> |
+ [end] |
+ [# NO MORE SCRIPTS IN HEAD, it makes page loading too slow.] |
+</head> |
+ |
+<body class="[main_tab_mode] [if-any perms.EditIssue]perms_EditIssue[end]"> |
+ |
+[# Tiny script used sitewide. ] |
+<script type="text/javascript" nonce="[nonce]"> |
+ function _go(url) { document.location = url; } |
+ function $(id) { return document.getElementById(id); } |
+ |
+ var loadQueue = []; |
+ function runOnLoad(fn) { loadQueue.push(fn); } |
+ |
+ window.onload = function() { |
+ for (var fn of loadQueue) |
+ fn(); |
+ delete loadQueue; |
+ }; |
+</script> |
+ |
+[include "maintabs.ezt" arg0 arg1] |
+ |
+[include "banner_message.ezt"] |
+ |
+<div id="maincol"> |
+[include "alert.ezt"] |