| [%# 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 %][%# " – $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 %] |