~launchpad-pqm/launchpad/devel

8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
1
<macros
4939.2.15 by Curtis Hovey
Added namespaces to main* templates and fixed markup.
2
  xmlns="http://www.w3.org/1999/xhtml"
3
  xmlns:tal="http://xml.zope.org/namespaces/tal"
4
  xmlns:metal="http://xml.zope.org/namespaces/metal"
5
  xmlns:i18n="http://xml.zope.org/namespaces/i18n"
6
  i18n:domain="launchpad"
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
7
  tal:omit-tag=""
4939.2.15 by Curtis Hovey
Added namespaces to main* templates and fixed markup.
8
>
2770.1.43 by Guilherme Salgado
Fix shipit to report OOPSes, some wording fixes (replacing order with request) and added a footer on all shipit pages with a link to the FAQ.
9
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
10
<metal:notifications define-macro="notifications"
11
  tal:define="notifications notifications|request/notifications">
2770.1.43 by Guilherme Salgado
Fix shipit to report OOPSes, some wording fixes (replacing order with request) and added a footer on all shipit pages with a link to the FAQ.
12
  <tal:comment replace="nothing">
13
    This macro expects the following variables:
14
    :notifications: An object implementing INotificationList.
15
  </tal:comment>
16
3283.4.5 by Matthew Paul Thomas
Replaces 'notice-notification' and 'info-notification' with 'informational message', and 'debug-notification' with 'debug message'. Fixes nasty problem with bugtask validation, with help from Brad Bollenbach.
17
  <div class="error message"
2770.1.43 by Guilherme Salgado
Fix shipit to report OOPSes, some wording fixes (replacing order with request) and added a footer on all shipit pages with a link to the FAQ.
18
    tal:repeat="notification notifications/error"
19
    tal:content="structure notification/message"
20
  >An error notification message</div>
3283.4.5 by Matthew Paul Thomas
Replaces 'notice-notification' and 'info-notification' with 'informational message', and 'debug-notification' with 'debug message'. Fixes nasty problem with bugtask validation, with help from Brad Bollenbach.
21
  <div class="warning message"
2770.1.43 by Guilherme Salgado
Fix shipit to report OOPSes, some wording fixes (replacing order with request) and added a footer on all shipit pages with a link to the FAQ.
22
    tal:repeat="notification notifications/warning"
23
    tal:content="structure notification/message"
24
  >A warning notification message</div>
3283.4.5 by Matthew Paul Thomas
Replaces 'notice-notification' and 'info-notification' with 'informational message', and 'debug-notification' with 'debug message'. Fixes nasty problem with bugtask validation, with help from Brad Bollenbach.
25
  <div class="informational message"
2770.1.43 by Guilherme Salgado
Fix shipit to report OOPSes, some wording fixes (replacing order with request) and added a footer on all shipit pages with a link to the FAQ.
26
    tal:repeat="notification notifications/info"
27
    tal:content="structure notification/message"
28
  >An info notification message</div>
3283.4.5 by Matthew Paul Thomas
Replaces 'notice-notification' and 'info-notification' with 'informational message', and 'debug-notification' with 'debug message'. Fixes nasty problem with bugtask validation, with help from Brad Bollenbach.
29
  <div class="debug message"
2770.1.43 by Guilherme Salgado
Fix shipit to report OOPSes, some wording fixes (replacing order with request) and added a footer on all shipit pages with a link to the FAQ.
30
    tal:repeat="notification notifications/debug"
31
    tal:content="structure notification/message"
32
  >A debug notification message, only displayed for developers.</div>
33
</metal:notifications>
34
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
35
8524.1.1 by Edwin Grubbs
Refactored loading js in main-template.pt.
36
<metal:load-javascript define-macro="load-javascript"
37
  tal:define="
12046.2.1 by Danilo Segan
Move versioninfo to lp.app.versioninfo.
38
      revno modules/lp.app.versioninfo/revno | string:unknown;
10576.1.3 by Maris Fogels
Make all of the on-page JavaScript load from the host domain using a relative URL. Speeds up IE a good deal by making it cache even more resources.
39
      icingroot string:/+icing/rev${revno};
14605.1.1 by Curtis Hovey
Moved canonical.config to lp.services.
40
      devmode modules/lp.services.config/config/devmode;
7675.438.1 by Guilherme Salgado
Upgrade to latest lazr-js
41
      yui string:${icingroot}/yui;
9778.2.1 by Guilherme Salgado
Undo changes to base-layout.pt
42
      lazr_js string:${icingroot}/lazr/build;
8524.1.1 by Edwin Grubbs
Refactored loading js in main-template.pt.
43
      lp_js string:${icingroot}/build"
44
  >
45
  <tal:comment replace="nothing">
46
    This macro just loads javascript files. It doesn't
47
    do any initialization.
10576.1.7 by Maris Fogels
Updated the page comments based on reviewer feedback.
48
49
    We load all of the script files from the same host that served the HTML in
50
    order to optimize IE caching over SSL. This is inefficient when you cross
51
    subdomains (from bugs to code for example) but luckily most users stay
52
    within one or two domains.
53
54
    XXX mars 2010-04-08
55
    We can revisit this IE-only optimization if we remove SSL.  Any changes that
56
    affect IE should be tested using webpagetest.org. (See the dev.launchpad.net
57
    wiki for details.)
58
10200.6.2 by Maris Fogels
Pulled MochiKit out of the Launchpad JavaScript rollup.
59
    XXX mars 2010-01-21
60
    We have to load MochiKit outside of the main javascript rollup so that the
61
    rollup's size does not exceed 512Kb.  That magic number triggers a bug
62
    somewhere in the automated test system that will prevent Windmill from
63
    executing.
64
  </tal:comment>
12421.1.30 by Tim Penhey
Move the LP creation to the load-javascript macro to fix the timeline graph.
65
  <script type="text/javascript">
66
    var LP = {
67
        cache: {},
68
        links: {}
69
    };
70
  </script>
10200.6.2 by Maris Fogels
Pulled MochiKit out of the Launchpad JavaScript rollup.
71
  <script type="text/javascript"
72
          tal:attributes="src string:${icingroot}/MochiKit.js"></script>
73
12126.7.1 by Deryck Hodge
Remove yui file links from base template for devmode.
74
  <script type="text/javascript"
75
          tal:attributes="src string:${icingroot}/build/launchpad.js"></script>
8524.1.1 by Edwin Grubbs
Refactored loading js in main-template.pt.
76
77
  <script type="text/javascript"
78
      tal:content="string:var cookie_scope = '${request/lp:cookie_scope}';"></script>
7675.351.228 by Guilherme Salgado
Move the LPS creation from the page-javascript macro into the load-javascript one so that it is available to pages that only use the latter (e.g. object-timeline-graph.pt)
79
  <script type="text/javascript">
80
    // Define a global YUI sandbox that should be used by everyone.
11666.5.46 by Deryck Hodge
Add combine: false YUI config option to global YUI object.
81
    var LPS = YUI({
11666.5.54 by Deryck Hodge
Comment the YUI config options in the base template.
82
      // Don't try to fetch CSS files.
11666.5.46 by Deryck Hodge
Add combine: false YUI config option to global YUI object.
83
      fetchCSS: false,
11666.5.54 by Deryck Hodge
Comment the YUI config options in the base template.
84
      // For paranoia, set a low timeout to not wait on loading a resource.
11666.5.47 by Deryck Hodge
Add few YUI config params, which are educated but blind guesses at what might help prevent failing windmill tests.
85
      timeout: 50
11666.5.46 by Deryck Hodge
Add combine: false YUI config option to global YUI object.
86
      });
7675.351.228 by Guilherme Salgado
Move the LPS creation from the page-javascript macro into the load-javascript one so that it is available to pages that only use the latter (e.g. object-timeline-graph.pt)
87
  </script>
8752.2.4 by Curtis Hovey
Separated page-javascript from load-javascript because the former is only used by full pages.
88
</metal:load-javascript>
89
90
91
<metal:page-javascript define-macro="page-javascript"
92
  tal:define="
12046.2.1 by Danilo Segan
Move versioninfo to lp.app.versioninfo.
93
      revno modules/lp.app.versioninfo/revno | string:unknown;
14605.1.1 by Curtis Hovey
Moved canonical.config to lp.services.
94
      devmode modules/lp.services.config/config/devmode;
95
      map_query string:&amp;file=api&amp;v=2&amp;key=${modules/lp.services.config/config/google/maps_api_key};">
8752.2.4 by Curtis Hovey
Separated page-javascript from load-javascript because the former is only used by full pages.
96
  <tal:comment replace="nothing">
97
    Load and initialize the common script used by all pages.
98
  </tal:comment>
99
100
  <metal:load-lavascript use-macro="context/@@+base-layout-macros/load-javascript" />
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
101
13599.3.2 by j.c.sackett
Moved all setup and display of the privacy notification into the base-layout.
102
    <script type="text/javascript">
14266.1.1 by Abel Deuring
Infrastructure to show a banner about enabled beta features on a page; property BugTaskSearchListingView.beta_features
103
      LPS.use('base', 'node', 'oop', 'event', 'lp.app.beta_features',
104
              'lp.bugs.bugtask_index', 'lp.bugs.subscribers',
13599.3.2 by j.c.sackett
Moved all setup and display of the privacy notification into the base-layout.
105
                'lp.code.branchmergeproposal.diff', 'lp.comments.hide',
106
                function(Y) {
107
          Y.on("domready", function () {
108
              if (Y.one(document.body).hasClass('private')) {
109
                  Y.lp.app.privacy.setup_privacy_notification();
110
                  Y.lp.app.privacy.display_privacy_notification();
111
              }
14266.1.1 by Abel Deuring
Infrastructure to show a banner about enabled beta features on a page; property BugTaskSearchListingView.beta_features
112
              Y.lp.app.beta_features.display_beta_notification();
13599.3.2 by j.c.sackett
Moved all setup and display of the privacy notification into the base-layout.
113
          });
114
      });
115
    </script>
13500.3.2 by j.c.sackett
Moved feature flag guard for privacy notifications into base-layout-macros
116
11134.7.10 by Curtis Hovey
Moved doctests into unittest.
117
  <script id="base-layout-load-scripts" type="text/javascript">
13371.3.1 by Raphael Badin
Add js infrastructure for long polling.
118
    LPS.use('node', 'event-delegate', 'lp', 'lp.app.links', 'lp.app.longpoll', function(Y) {
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
119
        Y.on('load', function(e) {
120
            sortables_init();
121
            initInlineHelp();
8762.2.16 by Graham Binns
Merged mainline.
122
            Y.lp.activate_collapsibles();
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
123
            activateFoldables();
124
            activateConstrainBugExpiration();
14515.1.1 by Rick Harding
Add a call to the inline help init function whenever we update the buglisting
125
            Y.lp.app.links.check_valid_lp_links();
13371.3.1 by Raphael Badin
Add js infrastructure for long polling.
126
            // Longpolling will only start if
14090.2.4 by Raphael Badin
Revert changes to lib/lp/app/templates/base-layout-macros.pt.
127
            // LP.cache.longpoll is populated.
128
            // We use Y.later to work around a Safari/Chrome 'feature':
129
            // The mouse cursor stays 'busy' until all the requests started during
130
            // page load are finished.  Hence we want the long poll request to start
131
            // right *after* the page has loaded.
132
            Y.later(0, Y.lp.app.longpoll, Y.lp.app.longpoll.setupLongPollManager);
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
133
        }, window);
134
135
        // Hook up the function that dismisses the help window if we click
136
        // anywhere outside of it.
137
        Y.on('click', handleClickOnPage, window);
11644.2.4 by Ian Booth
Link checking js loaded on every page
138
12421.1.17 by Tim Penhey
Add field level events as well.
139
        Y.on('lp:context:web_link:changed', function(e) {
140
            window.location = e.new_value;
141
        });
11644.2.4 by Ian Booth
Link checking js loaded on every page
142
    });
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
143
  </script>
8752.2.4 by Curtis Hovey
Separated page-javascript from load-javascript because the former is only used by full pages.
144
</metal:page-javascript>
8524.1.1 by Edwin Grubbs
Refactored loading js in main-template.pt.
145
146
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
147
<metal:launchpad-stylesheet-3-0 define-macro="launchpad-stylesheet-3-0"
148
  tal:define="
12046.2.1 by Danilo Segan
Move versioninfo to lp.app.versioninfo.
149
    revno modules/lp.app.versioninfo/revno | string:unknown;
10576.1.2 by Maris Fogels
Change the CSS resource hostname to match the current host. This increases cache hits in IE, at the cost of downloading more resources from a single domain.
150
    icingroot string:/+icing/rev${revno}">
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
151
  <tal:comment replace="nothing">
7675.438.2 by Guilherme Salgado
Combine all the css files we need in a single combo.css, which is now the only one included in our base template
152
    This macro loads a single css file containing all our stylesheets.
153
    If you need to include a new css file here, add it to
154
    buildout-templates/bin/combine-css.in instead.
10576.1.7 by Maris Fogels
Updated the page comments based on reviewer feedback.
155
156
    We load the CSS from the same host that served the HTML in order to optimize
157
    IE caching over SSL. This is inefficient when you cross subdomains (from
158
    bugs to code for example) but luckily most users stay within one or two
159
    domains.
160
161
    XXX mars 2010-04-08
162
    We can revisit this IE-only optimization if we remove SSL.  Any changes that
163
    affect IE should be tested using webpagetest.org. (See the dev.launchpad.net
164
    wiki for details.)
13851.2.3 by Nigel Babu
Moving the entry to the macro file
165
    </tal:comment>
166
  <link
167
        type="text/css"
168
        rel="stylesheet"
169
        media="screen, print"
10576.1.1 by Maris Fogels
Change the @import CSS definition to use a <link> instead.
170
        tal:attributes="href string:${icingroot}/combo.css" />
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
171
</metal:launchpad-stylesheet-3-0>
172
173
8524.1.1 by Edwin Grubbs
Refactored loading js in main-template.pt.
174
<metal:lp-client-cache define-macro="lp-client-cache">
12510.7.4 by Aaron Bentley
Avoid exposing email addresses to anonymous users vi LP.cache (bug #740208)
175
  <tal:cache condition="view/user|nothing"
176
              define="cache request/webservicerequest:cache;
177
                      links cache/links;
178
                      objects cache/objects;">
179
    <script tal:repeat="key links"
180
      tal:content="string:LP.links['${key}'] =
181
                   '${links/?key/fmt:api_url}';">
182
    </script>
8524.1.1 by Edwin Grubbs
Refactored loading js in main-template.pt.
183
  </tal:cache>
14096.1.2 by Gary Poster
add integration tests, working except for one blocked by oneiric librarian issues, for lp client
184
  <tal:comment condition="nothing">
185
    The id of the script block below is used to determine whether this
186
    page is loaded by test_lp_client_integration.js.
187
  </tal:comment>
188
  <script id="json-cache-script"
189
          tal:content="string:LP.cache = ${view/getCacheJSON};">
13023.6.8 by Henning Eggers
The cache stays in.
190
  </script>
8524.1.1 by Edwin Grubbs
Refactored loading js in main-template.pt.
191
</metal:lp-client-cache>
192
9010.5.2 by Michael Nelson
Added logo and aligned h1/menu with logo etc.
193
9152.4.2 by Michael Nelson
Renamed location-tabs to application-buttons.
194
<metal:application-buttons define-macro="application-buttons">
9010.5.10 by Michael Nelson
Moved part of macro back into base-layout.pt template so that fill-slot works.
195
  <!-- Application Menu -->
9621.1.1 by Barry Warsaw
Hacks to the registering slot and the facet menu (a.k.a. app tabs) to not look
196
  <ul class="facetmenu"
197
      tal:define="facetmenu view/menu:facet">
9010.5.10 by Michael Nelson
Moved part of macro back into base-layout.pt template so that fill-slot works.
198
    <tal:facet repeat="link facetmenu">
199
      <li
200
        tal:condition="python: link.enabled and link.selected"
201
        tal:attributes="title link/summary; class string:${link/name} active"
9010.5.21 by Michael Nelson
Fixed a bug where non-linked tabs were not displayed.
202
        ><span
203
          tal:condition="not:link/linked"
204
          tal:content="structure link/escapedtext"
205
          /><a
9010.5.10 by Michael Nelson
Moved part of macro back into base-layout.pt template so that fill-slot works.
206
          tal:condition="link/linked"
207
          tal:attributes="href link/url"
208
          tal:content="structure link/escapedtext" /></li>
209
      <li
210
        tal:condition="python: link.enabled and not link.selected"
211
        tal:attributes="title link/summary; class link/name"
212
        ><a
213
          tal:condition="link/enabled"
214
          tal:attributes="href link/url"
215
          tal:content="structure link/escapedtext"
216
          /></li>
217
      <li
218
        tal:condition="not:link/enabled"
219
        tal:attributes="class string:${link/name} disabled-tab"
9055.1.1 by Michael Nelson
Fixed two small issues with application tabs.
220
        ><span
9010.5.10 by Michael Nelson
Moved part of macro back into base-layout.pt template so that fill-slot works.
221
           tal:content="link/escapedtext" /></li>
222
    </tal:facet>
223
  </ul>
9152.4.2 by Michael Nelson
Renamed location-tabs to application-buttons.
224
</metal:application-buttons>
9010.5.2 by Michael Nelson
Added logo and aligned h1/menu with logo etc.
225
9101.2.2 by Curtis Hovey
Extracted the footer to a macro.
226
227
<metal:footer define-macro="footer">
228
  <div id="footer" class="footer">
10129.5.5 by Francis J. Lacoste
Don't display the lp-arcana on the front page.
229
    <div class="lp-arcana" tal:condition="not:view/is_root_page|nothing">
9511.1.2 by Michael Nelson
Updated formatting of footer so the branding is always undisturbed, while the site-message wraps.
230
        <div class="lp-branding">
9443.6.14 by Michael Nelson
Merged RF and resolved one conflict.
231
          <a tal:attributes="href string:${rooturl}"><img src="/@@/launchpad-logo-and-name-hierarchy.png" alt="Launchpad"/></a>
9443.6.10 by Michael Nelson
Updated style as per Martin's request.
232
          &nbsp;&bull;&nbsp;
10427.7.3 by Curtis Hovey
Fix the links in the footer to always use the mainsite.
233
          <a tal:attributes="href string:${rooturl}+tour">Take the tour</a>
9443.6.10 by Michael Nelson
Updated style as per Martin's request.
234
          &nbsp;&bull;&nbsp;
235
          <a href="https://help.launchpad.net/">Read the guide</a>
236
          &nbsp;
237
          <form id="globalsearch" method="get" accept-charset="UTF-8"
238
            tal:condition="view/macro:pagehas/globalsearch"
239
            tal:attributes="action string:${rooturl}+search">
240
            <input type="search" id="search-text" name="field.text" />
14050.1.1 by j.c.sackett
Replaced input with no value with friendlier image type input
241
            <input type="image" src="/@@/search" style="vertical-align:5%" alt="Search Launchpad"/>
9443.6.10 by Michael Nelson
Updated style as per Martin's request.
242
          </form>
243
        </div>
244
        <metal:site-message
245
          use-macro="context/@@+base-layout-macros/site-message"/>
9101.2.2 by Curtis Hovey
Extracted the footer to a macro.
246
    </div>
247
248
    <div class="colophon">
14617.2.1 by William Grant
Update copyright notices to 2004-2012.
249
      &copy; 2004-2012
9101.2.2 by Curtis Hovey
Extracted the footer to a macro.
250
      <a href="http://canonical.com/">Canonical&nbsp;Ltd.</a>
251
      &nbsp;&bull;&nbsp;
10427.7.3 by Curtis Hovey
Fix the links in the footer to always use the mainsite.
252
      <a tal:attributes="href string:${rooturl}legal">Terms of use</a>
9101.2.2 by Curtis Hovey
Extracted the footer to a macro.
253
      &nbsp;&bull;&nbsp;
11626.4.1 by Curtis Hovey
Save spike for switch from feedback@ to /support. There are open questions about the criteria for showing suppot--anonymous or cannot login. Should /support not be reused.
254
      <a tal:condition="not: view/user|nothing"
11626.4.3 by Curtis Hovey
Updated templates to used /support (logged in) or /feedback (anonymous) for
255
        href="/feedback">Contact Launchpad Support</a>
11626.4.1 by Curtis Hovey
Save spike for switch from feedback@ to /support. There are open questions about the criteria for showing suppot--anonymous or cannot login. Should /support not be reused.
256
      <a tal:condition="view/user|nothing"
257
        href="/support">Contact Launchpad Support</a>
9653.1.1 by matthew.revell at canonical
Adds a 'System status' link to base-layout-macros.pt, which links to http://identi.ca/status -- Launchpad's off-site system status page. (Bug 446189)
258
      &nbsp;&bull;&nbsp;
14024.3.2 by mbp at canonical
Also add the blog to the footer
259
      <a href="http://blog.launchpad.net/"
260
	>Blog</a>
14266.1.4 by Abel Deuring
test failure fixed
261
      <tal:careers_link condition="not: features/baselayout.careers_link.disabled">
262
	&nbsp;&bull;&nbsp;
263
	<a href="http://www.canonical.com/about-canonical/careers"
264
		>Careers</a>
265
      </tal:careers_link>
14024.3.2 by mbp at canonical
Also add the blog to the footer
266
      &nbsp;&bull;&nbsp;
9653.1.1 by matthew.revell at canonical
Adds a 'System status' link to base-layout-macros.pt, which links to http://identi.ca/status -- Launchpad's off-site system status page. (Bug 446189)
267
      <a href="http://identi.ca/launchpadstatus"
268
        >System status</a>
11677.3.2 by Robert Collins
Reduce use of is_edge.
269
      <span id="lp-version">
9101.2.2 by Curtis Hovey
Extracted the footer to a macro.
270
      &nbsp;&bull;&nbsp;
11014.1.1 by Curtis Hovey
Restore revision number to footer.
271
        r<tal:revno replace="revno" />
9101.2.2 by Curtis Hovey
Extracted the footer to a macro.
272
        <tal:devmode condition="devmode">devmode</tal:devmode>
273
        <tal:demo condition="is_demo">demo site</tal:demo>
14024.3.1 by mbp at canonical
'get the code' footer link points to https://dev.launchpad.net, and gets a capital and exclamation mark to celebrate
274
        (<a href="https://dev.launchpad.net/"
275
             >Get the code!</a>)
9101.2.2 by Curtis Hovey
Extracted the footer to a macro.
276
      </span>
277
    </div>
278
  </div>
279
</metal:footer>
9443.6.6 by Michael Nelson
Moved the site-message snippet to a macro.
280
281
<metal:site-message define-macro="site-message">
9511.1.2 by Michael Nelson
Updated formatting of footer so the branding is always undisturbed, while the site-message wraps.
282
  <div class="sitemessage" tal:condition="site_message">
9443.6.6 by Michael Nelson
Moved the site-message snippet to a macro.
283
    <tal:site_message tal:content="structure site_message">
284
      This site is running pre-release code.
285
    </tal:site_message>
286
  </div>
287
</metal:site-message>
288
14180.2.10 by mbp at canonical
Split out debug timeline into base-template-macros
289
290
<metal:debug-timeline define-macro="debug-timeline">
14564.4.1 by Jeroen Vermeulen
Lint.
291
  <a name="debug_timeline"
14180.2.10 by mbp at canonical
Split out debug timeline into base-template-macros
292
    id="debug_timeline"
293
    class="hidden"
294
    >
14564.4.1 by Jeroen Vermeulen
Lint.
295
    <table
14180.2.10 by mbp at canonical
Split out debug timeline into base-template-macros
296
      tal:condition="request/features/visible_render_time"
14600.2.2 by Curtis Hovey
Moved webapp to lp.services.
297
      tal:define="timeline_actions modules/lp.services.webapp.adapter/get_timeline_actions"
14180.2.10 by mbp at canonical
Split out debug timeline into base-template-macros
298
      class="debug-timeline listing"
299
      >
300
      <thead>
301
	<th>Duration</th>
302
	<th>Action</th>
303
      </thead>
304
      <tr tal:repeat="action timeline_actions">
14564.4.1 by Jeroen Vermeulen
Lint.
305
	<td class="amount" tal:content="action/duration/fmt:millisecondduration"/>
14180.2.10 by mbp at canonical
Split out debug timeline into base-template-macros
306
	<td style="font-family: monospace; text-align: left;">
307
          <pre class="wrap"><span class="action-category" tal:content="action/category"/>: <span class="action-details" tal:content="action/detail"/></pre>
308
	</td>
309
      </tr>
310
    </table>
311
  </a>
312
</metal:debug-timeline>
313
314
10212.1.5 by Brad Crittenden
Create a pluralized message macro.
315
<metal:plural-msg define-macro="plural-message">
316
  <tal:comment condition="nothing">
317
    Expected variables to be defined in a containing tag or global:
318
    count - value to check to determine plural form
319
    singluar - string to use when count == 1
320
    plural - string to use when count > 1.  If no plural is given it defaults
321
    to the singular value + 's'.
322
  </tal:comment>
323
  <tal:singular
324
    condition="python: count == 1"
10754.4.5 by Curtis Hovey
Use plural-message macro to fix team membership portlet.
325
    replace="singular" /><tal:plural
10212.1.5 by Brad Crittenden
Create a pluralized message macro.
326
     define="l_default string:s;
327
             l_plural plural | string:$singular$l_default;"
328
    condition="python: count != 1"
10754.4.5 by Curtis Hovey
Use plural-message macro to fix team membership portlet.
329
    replace="l_plural" /></metal:plural-msg>
8752.2.1 by Curtis Hovey
Added base-layout macros to replace main-template-macros.
330
</macros>
14180.2.10 by mbp at canonical
Split out debug timeline into base-template-macros
331