351 lines
13 KiB
Cheetah
351 lines
13 KiB
Cheetah
[%# The contents of this file are subject to the Mozilla Public
|
||
# License Version 1.1 (the "License"); you may not use this file
|
||
# except in compliance with the License. You may obtain a copy of
|
||
# the License at http://www.mozilla.org/MPL/
|
||
#
|
||
# Software distributed under the License is distributed on an "AS
|
||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||
# implied. See the License for the specific language governing
|
||
# rights and limitations under the License.
|
||
#
|
||
# The Original Code is the Bugzilla Bug Tracking System.
|
||
#
|
||
# The Initial Developer of the Original Code is Netscape Communications
|
||
# Corporation. Portions created by Netscape are
|
||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||
# Rights Reserved.
|
||
#
|
||
# Contributor(s): Gervase Markham <gerv@gerv.net>
|
||
# Vaskin Kissoyan <vkissoyan@yahoo.com>
|
||
# Vitaly Harisov <vitaly@rathedg.com>
|
||
# Svetlana Harisova <light@rathedg.com>
|
||
#%]
|
||
|
||
[%# 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.
|
||
# atomlink: Atom link URL, May contain HTML
|
||
#%]
|
||
|
||
[% IF message %]
|
||
[% message = BLOCK %][% PROCESS global/messages.html.tmpl %][% END %]
|
||
[% END %]
|
||
|
||
[% IF Bugzilla.session_data.title %]
|
||
[% title = Bugzilla.session_data.title %]
|
||
[% do_save_session = 1 %]
|
||
[% END %]
|
||
[% IF Bugzilla.session_data.header %]
|
||
[% header = Bugzilla.session_data.header %]
|
||
[% do_save_session = 1 %]
|
||
[% END %]
|
||
|
||
[% DEFAULT
|
||
subheader = ""
|
||
header_addl_info = ""
|
||
onload = ""
|
||
style_urls = []
|
||
%]
|
||
|
||
[%# 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||
"http://www.w3.org/TR/html4/loose.dtd">
|
||
<html>
|
||
<head>
|
||
[% Hook.process("start") %]
|
||
<title>[% title %]</title>
|
||
|
||
[%# Migration note: contents of the old Param 'headerhtml' would go here %]
|
||
|
||
[% PROCESS "global/site-navigation.html.tmpl" %]
|
||
|
||
[%# Set up the skin CSS cascade:
|
||
# 1. Standard Bugzilla stylesheet set (persistent)
|
||
# 2. Standard Bugzilla stylesheet set (selectable)
|
||
# 3. All third-party "skin" stylesheet sets (selectable)
|
||
# 4. Page-specific styles
|
||
# 5. Custom Bugzilla stylesheet set (persistent)
|
||
# "Selectable" skin file sets may be either preferred or alternate.
|
||
# Exactly one is preferred, determined by the "skin" user preference.
|
||
#%]
|
||
[% IF user.settings.skin.value != 'standard' %]
|
||
[% user_skin = user.settings.skin.value %]
|
||
[% END %]
|
||
[% style_urls.unshift('skins/standard/global.css') %]
|
||
|
||
[%# CSS cascade, part 1: Standard Bugzilla stylesheet set (persistent).
|
||
# Always present.
|
||
#%]
|
||
[% FOREACH style_url = style_urls %]
|
||
<link href="[% style_url FILTER html %]"
|
||
rel="stylesheet"
|
||
type="text/css">
|
||
[% END %]
|
||
<!--[if lte IE 7]>
|
||
[%# Internet Explorer treats [if IE] HTML comments as uncommented.
|
||
# Use it to import CSS fixes so that Bugzilla looks decent on IE 7
|
||
# and below.
|
||
#%]
|
||
<link href="skins/standard/IE-fixes.css"
|
||
rel="stylesheet"
|
||
type="text/css">
|
||
<![endif]-->
|
||
|
||
[%# CSS cascade, part 2: Standard Bugzilla stylesheet set (selectable)
|
||
# Present if skin selection is enabled.
|
||
#%]
|
||
[%# Зачем стандартные стили упоминать дважды? То есть понятно, зачем -
|
||
# чтобы выбрать можно было. Но это не дело, оно ломает Opera 10.6.
|
||
# Причём в Bugzilla 4 их указывают в другом порядке, и получается нормально. O_o %]
|
||
[% IF 0 # user.settings.skin.is_enabled %]
|
||
[% FOREACH style_url = style_urls %]
|
||
<link href="[% style_url FILTER html %]"
|
||
rel="[% 'alternate ' IF user_skin %]stylesheet"
|
||
title="[% lc_messages.setting_descs.standard FILTER html %]"
|
||
type="text/css">
|
||
[% END %]
|
||
<!--[if lte IE 7]>
|
||
[%# Internet Explorer treats [if IE] HTML comments as uncommented.
|
||
# Use it to import CSS fixes so that Bugzilla looks decent on IE 7
|
||
# and below.
|
||
#%]
|
||
<link href="skins/standard/IE-fixes.css"
|
||
rel="[% 'alternate ' IF user_skin %]stylesheet"
|
||
title="[% lc_messages.setting_descs.standard FILTER html %]"
|
||
type="text/css">
|
||
<![endif]-->
|
||
[% END %]
|
||
|
||
[%# CSS cascade, part 3: Third-party stylesheet set (selectable).
|
||
# All third-party skins are present if skin selection is enabled.
|
||
# The admin-selected skin is always present.
|
||
#%]
|
||
[% FOREACH contrib_skin = user.settings.skin.legal_values %]
|
||
[% NEXT IF contrib_skin == 'standard' %]
|
||
[% NEXT UNLESS contrib_skin == user_skin
|
||
OR user.settings.skin.is_enabled %]
|
||
[% contrib_skin = contrib_skin FILTER url_quote %]
|
||
[% IF contrib_skin.match('\.css$') %]
|
||
[%# 1st skin variant: single-file stylesheet %]
|
||
<link href="[% "skins/contrib/$contrib_skin" %]"
|
||
rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
|
||
title="[% contrib_skin FILTER html %]"
|
||
type="text/css">
|
||
[% ELSE %]
|
||
[%# 2nd skin variant: stylesheet set %]
|
||
[% FOREACH style_url = style_urls %]
|
||
[% IF style_url.match('^skins/standard/') %]
|
||
<link href="[% style_url.replace('^skins/standard/',
|
||
"skins/contrib/$contrib_skin/") %]"
|
||
rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
|
||
title="[% contrib_skin FILTER html %]"
|
||
type="text/css">
|
||
[% END %]
|
||
[% END %]
|
||
<!--[if lte IE 7]>
|
||
[%# Internet Explorer treats [if IE] HTML comments as uncommented.
|
||
# Use it to import CSS fixes so that Bugzilla looks decent on IE 7
|
||
# and below.
|
||
#%]
|
||
<link href="skins/contrib/[% contrib_skin FILTER html %]/IE-fixes.css"
|
||
rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
|
||
title="[% contrib_skin FILTER html %]"
|
||
type="text/css" />
|
||
<![endif]-->
|
||
[% END %]
|
||
[% END %]
|
||
|
||
[%# CSS cascade, part 4: page-specific styles.
|
||
#%]
|
||
[% IF style %]
|
||
<style type="text/css">
|
||
[% style %]
|
||
</style>
|
||
[% END %]
|
||
|
||
[%# CSS cascade, part 5: Custom Bugzilla stylesheet set (persistent).
|
||
# Always present. Site administrators may override all other style
|
||
# definitions, including skins, using custom stylesheets.
|
||
#%]
|
||
[% FOREACH style_url = style_urls %]
|
||
[% IF style_url.match('^skins/standard/') %]
|
||
<link href="[% style_url.replace('^skins/standard/', "skins/custom/")
|
||
FILTER html %]" rel="stylesheet" type="text/css" />
|
||
[% END %]
|
||
[% END %]
|
||
<!--[if lte IE 7]>
|
||
[%# Internet Explorer treats [if IE] HTML comments as uncommented.
|
||
# Use it to import CSS fixes so that Bugzilla looks decent on IE 7
|
||
# and below.
|
||
#%]
|
||
<link href="skins/custom/IE-fixes.css"
|
||
rel="stylesheet"
|
||
type="text/css" />
|
||
<![endif]-->
|
||
|
||
<script src="js/util.js" type="text/javascript"></script>
|
||
<script src="js/global.js" type="text/javascript"></script>
|
||
<script src="js/hinter.js" type="text/javascript"></script>
|
||
<script type="text/javascript">
|
||
<!--
|
||
[%# 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() {
|
||
removeClass('lang_links_container', 'bz_default_hidden');
|
||
}
|
||
addListener(window, 'load', 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 %]'
|
||
},
|
||
string: {
|
||
attach_desc_required: 'You must enter a Description for this attachment.'
|
||
}
|
||
};
|
||
[% IF javascript %]
|
||
[% javascript %]
|
||
[% END %]
|
||
// -->
|
||
</script>
|
||
|
||
[% IF javascript_urls %]
|
||
[% FOREACH javascript_url = javascript_urls %]
|
||
<script src="[% javascript_url FILTER html %]" type="text/javascript"></script>
|
||
[% END %]
|
||
[% END %]
|
||
|
||
[%# this puts the live bookmark up on firefox for the Atom feed %]
|
||
[% IF atomlink %]
|
||
<link rel="alternate"
|
||
type="application/atom+xml" title="Atom feed"
|
||
href="[% atomlink FILTER html %]">
|
||
[% END %]
|
||
|
||
[%# 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="images/favicon.ico" >
|
||
[% Hook.process("additional_header") %]
|
||
</head>
|
||
|
||
[%# Migration note: contents of the old Param 'bodyhtml' go in the body tag,
|
||
# but set the onload attribute in the DEFAULT directive above.
|
||
#%]
|
||
|
||
<body onload="[% onload %]"
|
||
class="[% urlbase.replace('^https?://','').replace('/$','').replace('[-~@:/.]+','-') %]
|
||
[% FOREACH class = bodyclasses %]
|
||
[% ' ' %][% class FILTER css_class_quote %]
|
||
[% END %]">
|
||
|
||
[%# Migration note: the following file corresponds to the old Param
|
||
# 'bannerhtml'
|
||
#%]
|
||
|
||
<div id="header">
|
||
|
||
[% INCLUDE global/banner.html.tmpl %]
|
||
|
||
<table border="0" cellspacing="0" cellpadding="0" id="titles">
|
||
<tr>
|
||
<td id="title">
|
||
<p>[% terms.Bugzilla %]
|
||
[% " – $header" IF header %]</p>
|
||
</td>
|
||
|
||
[% IF subheader %]
|
||
<td id="subtitle">
|
||
<p class="subheader">[% subheader %]</p>
|
||
</td>
|
||
[% END %]
|
||
|
||
[% IF header_addl_info %]
|
||
<td id="information">
|
||
<p class="header_addl_info">[% header_addl_info %]</p>
|
||
</td>
|
||
[% END %]
|
||
</tr>
|
||
</table>
|
||
|
||
[% IF Bugzilla.languages.size > 1 %]
|
||
<table id="lang_links_container" cellpadding="0" cellspacing="0"
|
||
class="bz_default_hidden"><tr><td>
|
||
<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>
|
||
</td></tr></table>
|
||
[% END %]
|
||
|
||
[% IF user.id AND user.settings.saved_searches_position.value == "footer" %]
|
||
[% PROCESS "global/common-links.html.tmpl" qs_suffix = "top" standalone = 1 %]
|
||
[% ELSE %]
|
||
[% PROCESS "global/useful-links.html.tmpl" qs_suffix = "top" %]
|
||
[% END %]
|
||
</div> [%# header %]
|
||
|
||
<div id="bugzilla-body">
|
||
[%# Used to workaround table sizing inside div, see also skins/contrib/Dusk/global.css#bugzilla-body %]
|
||
<div id="bugzilla-padding">
|
||
|
||
[% IF Param('announcehtml') %]
|
||
[% Param('announcehtml') FILTER none %]
|
||
[% END %]
|
||
|
||
[% IF Param('new_functionality_msg') && Param('new_functionality_tsp') && user.read_new_functionality %]
|
||
<div id="new_functionality">
|
||
<div class="close-link"><a href="javascript:void(0)" onclick="return readNewFunctionality();" title="Mark news as read">Close</a></div>
|
||
<div>[% Param('new_functionality_msg') FILTER none %]</div>
|
||
</div>
|
||
[% END %]
|
||
|
||
[% IF message %]
|
||
<div id="message" class="message">[% message %]</div>
|
||
[% END %]
|
||
|
||
[% Hook.process('aftermessage') %]
|
||
|
||
[%# Show result messages from the session and delete them %]
|
||
[% IF Bugzilla.result_messages.size %]
|
||
[% FOR m = Bugzilla.result_messages %]
|
||
[% "global/messages.html.tmpl" FILTER process(m) %]
|
||
[% END %]
|
||
[% do_save_session = 1 %]
|
||
[% END %]
|
||
|
||
[% IF do_save_session; x = Bugzilla.delete_session_data('result_messages', 'title', 'header'); END %]
|