blob: c3c1924671926a37e47c9002b4e44b155442bc08 [file] [log] [blame]
[%# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.
#%]
[%# INTERFACE:
# (All the below interface elements are optional.)
# title: string. Page title.
# header: string. Main page header.
# subheader: string. Page subheader.
# header_addl_info: string. Additional header information.
# bodyclasses: array of extra CSS classes for the <body>
# onload: string. JavaScript code to run when the page finishes loading.
# javascript: string. Javascript to go in the header.
# javascript_urls: list. List of URLs to Javascript.
# style: string. CSS style.
# style_urls: list. List of URLs to CSS style sheets.
# message: string. A message to display to the user. May contain HTML.
# rsslink: RSS link URL, May contain HTML (WEBKIT_CHANGES)
# hide_content: boolean. Turns off content if not being used. (WEBKIT_CHANGES)
# generate_api_token: generate a token which can be used to make authenticated webservice calls
#%]
[% IF message %]
[% PROCESS global/messages.html.tmpl %]
[% END %]
[% DEFAULT
subheader = ""
header_addl_info = ""
onload = ""
style_urls = []
javascript_urls = []
yui = []
generate_api_token = 0
favicon_url = "images/favicon.ico"
%]
[% SET yui_css = {
autocomplete => 1,
calendar => 1,
datatable => 1,
button => 1,
} %]
[%# Note: This is simple dependency resolution--you can't have dependencies
# that depend on each other. You have to specify all of a module's deps,
# if that module is going to be specified in "yui".
#%]
[% SET yui_deps = {
autocomplete => ['json', 'connection', 'datasource'],
datatable => ['json', 'connection', 'datasource', 'element'],
} %]
[%# When using certain YUI modules, we need to process certain
# extra JS templates.
#%]
[% SET yui_templates = {
datatable => ['global/value-descs.js.tmpl'],
} %]
[%# These are JS URLs that are *always* on the page and come before
# every other JS URL.
#%]
[% SET starting_js_urls = [
"js/yui/yahoo-dom-event/yahoo-dom-event.js",
"js/yui/cookie/cookie-min.js",
] %]
[%# We should be able to set the default value of the header variable
# to the value of the title variable using the DEFAULT directive,
# but that doesn't work if a caller sets header to the empty string
# to avoid header inheriting the value of title, since DEFAULT
# mistakenly treats empty strings as undefined and gives header the
# value of title anyway. To get around that problem we explicitly
# set header's default value here only if it is undefined. %]
[% IF !header.defined %][% header = title %][% END %]
<!DOCTYPE html>
<html lang="en">
<head>
[% Hook.process("start") %]
<title>[% title %]</title>
[% IF Param('utf8') %]
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
[% END %]
[% SET yui = yui_resolve_deps(yui, yui_deps) %]
[% SET css_sets = css_files(style_urls, yui, yui_css) %]
[% IF constants.CONCATENATE_ASSETS %]
[% PROCESS format_css_link asset_url = css_sets.unified_standard_skin %]
[% ELSE %]
[% FOREACH asset_url = css_sets.standard %]
[% PROCESS format_css_link %]
[% END %]
[% FOREACH asset_url = css_sets.skin %]
[% PROCESS format_css_link %]
[% END %]
[% END %]
[% IF style %]
<style type="text/css">
[% style %]
</style>
[% END %]
[% IF css_sets.unified_custom %]
[% IF constants.CONCATENATE_ASSETS %]
[% PROCESS format_css_link asset_url = css_sets.unified_custom %]
[% ELSE %]
[% FOREACH asset_url = css_sets.custom %]
[% PROCESS format_css_link %]
[% END %]
[% END %]
[% END %]
[%# YUI Scripts %]
[% FOREACH yui_name = yui %]
[% starting_js_urls.push("js/yui/$yui_name/${yui_name}-min.js") %]
[% END %]
[% starting_js_urls.push('js/global.js') %]
[% FOREACH asset_url = concatenate_js(starting_js_urls) %]
[% PROCESS format_js_link %]
[% END %]
<script type="text/javascript">
<!--
YAHOO.namespace('bugzilla');
YAHOO.util.Event.addListener = function (el, sType, fn, obj, overrideContext) {
if ( ("onpagehide" in window || YAHOO.env.ua.gecko) && sType === "unload") { sType = "pagehide"; };
var capture = ((sType == "focusin" || sType == "focusout") && !YAHOO.env.ua.ie) ? true : false;
return this._addListener(el, this._getType(sType), fn, obj, overrideContext, capture);
};
if ( "onpagehide" in window || YAHOO.env.ua.gecko) {
YAHOO.util.Event._simpleRemove(window, "unload",
YAHOO.util.Event._unload);
}
[%# The language selector needs javascript to set its cookie,
# so it is hidden in HTML/CSS by the "bz_default_hidden" class.
# If the browser can run javascript, it will then "unhide"
# the language selector using the following code.
#%]
function unhide_language_selector() {
YAHOO.util.Dom.removeClass(
'lang_links_container', 'bz_default_hidden'
);
}
YAHOO.util.Event.onDOMReady(unhide_language_selector);
[%# Make some Bugzilla information available to all scripts.
# We don't import every parameter and constant because we
# don't want to add a lot of uncached JS to every page.
#%]
var BUGZILLA = {
param: {
cookiepath: '[% Param('cookiepath') FILTER js %]',
maxusermatches: [% Param('maxusermatches') FILTER js %]
},
constant: {
COMMENT_COLS: [% constants.COMMENT_COLS FILTER js %]
},
string: {
[%# Please keep these in alphabetical order. %]
attach_desc_required:
"You must enter a Description for this attachment.",
component_required:
"You must select a Component for this [% terms.bug %].",
description_required:
"You must enter a Description for this [% terms.bug %].",
short_desc_required:
"You must enter a Summary for this [% terms.bug %].",
version_required:
"You must select a Version for this [% terms.bug %]."
}
[% IF generate_api_token %]
, api_token: '[% get_api_token FILTER js FILTER html %]'
[% END %]
};
[% FOREACH yui_name = yui %]
[% FOREACH yui_template = yui_templates.$yui_name %]
[% INCLUDE $yui_template %]
[% END %]
[% END %]
[% IF javascript %]
[% javascript %]
[% END %]
// -->
</script>
[% FOREACH asset_url = concatenate_js(javascript_urls) %]
[% PROCESS format_js_link %]
[% END %]
[%# if WEBKIT_CHANGES #%]
[%# this puts the live bookmark up on firefox for the RSS feed %]
[% IF rsslink %]
<link rel="alternate"
type="application/rss+xml" title="RSS 1.0"
href="[% rsslink FILTER html %]">
[% END %]
[%# endif // WEBKIT_CHANGES #%]
[%# Required for the 'Autodiscovery' feature in Firefox 2 and IE 7. %]
<link rel="search" type="application/opensearchdescription+xml"
title="[% terms.Bugzilla %]" href="./search_plugin.cgi">
<link rel="shortcut icon" href="[% favicon_url FILTER html %]">
[% Hook.process("additional_header") %]
</head>
<body [% IF onload %] onload="[% onload %]"[% END %]
class="[% urlbase.replace('^https?://','').replace('/$','').replace('[-~@:/.]+','-') FILTER css_class_quote %]
[% FOREACH class = bodyclasses %]
[%+ class FILTER css_class_quote %]
[% END %] yui-skin-sam">
[% IF !hide_content %][%# WEBKIT_CHANGES #%]
<div id="header">
[%# if WEBKIT_CHANGES #%]
[%# INCLUDE global/banner.html.tmpl #%]
[%# endif // WEBKIT_CHANGES #%]
<div id="titles">
[%# if WEBKIT_CHANGES #%]
<span id="title"> WebKit [% terms.Bugzilla %][%# " &ndash; $header" IF header #%]</span>
[%# endif // WEBKIT_CHANGES #%]
[%# WEBKIT_CHANGES: Removed subheader and header_addl_info output #%]
</div>
[% USE Bugzilla %]
[% IF Bugzilla.languages.size > 1 %]
<div id="lang_links_container" class="bz_default_hidden">
<ul class="links">
[% FOREACH lang = Bugzilla.languages.sort %]
<li>
[% IF NOT loop.first %]<span class="separator"> | </span>[% END %]
[% IF lang == current_language %]
<span class="lang_current">[% lang FILTER html FILTER upper %]</span>
[% ELSE %]
<a href="#" onclick="set_language('[% lang FILTER none %]');">
[%- lang FILTER html FILTER upper %]</a>
[% END %]
</li>
[% END %]
</ul>
</div>
[% END %]
[%# if WEBKIT_CHANGES #%]
[% IF header || subheader %]
<div id="bug_title">[% header %][% ": $subheader" IF subheader %]</div>
[% END %]
[%# endif // WEBKIT_CHANGES #%]
<div id="common_links">
[% PROCESS "global/common-links.html.tmpl" qs_suffix = "_top" %]
</div>
</div>
[% END %][%# !hide_content #%][%# WEBKIT_CHANGES #%]
<div id="bugzilla-body">
[% IF Param('announcehtml') %]
[% Param('announcehtml') FILTER none %]
[% END %]
[% IF message %]
<div id="message">[% message %]</div>
[% END %]
[% BLOCK format_css_link %]
<link href="[% asset_url FILTER html %]" rel="stylesheet" type="text/css">
[% END %]
[% BLOCK format_js_link %]
<script type="text/javascript" src="[% asset_url FILTER mtime FILTER html %]"></script>
[% END %]