| 1 | <?cs include "header.cs" ?>
|
|---|
| 2 | <?cs include "macros.cs" ?>
|
|---|
| 3 |
|
|---|
| 4 | <div id="ctxtnav" class="nav">
|
|---|
| 5 | <h2>Ticket Navigation</h2><?cs
|
|---|
| 6 | with:links = chrome.links ?><?cs
|
|---|
| 7 | if:len(links.prev) || len(links.up) || len(links.next) ?><ul><?cs
|
|---|
| 8 | if:len(links.prev) ?>
|
|---|
| 9 | <li class="first<?cs if:!len(links.up) && !len(links.next) ?> last<?cs /if ?>">
|
|---|
| 10 | ← <a href="<?cs var:links.prev.0.href ?>" title="<?cs
|
|---|
| 11 | var:links.prev.0.title ?>">Previous Ticket</a>
|
|---|
| 12 | </li><?cs
|
|---|
| 13 | /if ?><?cs
|
|---|
| 14 | if:len(links.up) ?>
|
|---|
| 15 | <li class="<?cs if:!len(links.prev) ?>first<?cs /if ?><?cs
|
|---|
| 16 | if:!len(links.next) ?> last<?cs /if ?>">
|
|---|
| 17 | <a href="<?cs var:links.up.0.href ?>" title="<?cs
|
|---|
| 18 | var:links.up.0.title ?>">Back to Query</a>
|
|---|
| 19 | </li><?cs
|
|---|
| 20 | /if ?><?cs
|
|---|
| 21 | if:len(links.next) ?>
|
|---|
| 22 | <li class="<?cs if:!len(links.prev) && !len(links.up) ?>first <?cs /if ?>last">
|
|---|
| 23 | <a href="<?cs var:links.next.0.href ?>" title="<?cs
|
|---|
| 24 | var:links.next.0.title ?>">Next Ticket</a> →
|
|---|
| 25 | </li><?cs
|
|---|
| 26 | /if ?></ul><?cs
|
|---|
| 27 | /if ?><?cs
|
|---|
| 28 | /with ?>
|
|---|
| 29 | </div>
|
|---|
| 30 |
|
|---|
| 31 | <div id="content" class="ticket">
|
|---|
| 32 |
|
|---|
| 33 | <h1>Ticket #<?cs var:ticket.id ?> <span class="status">(<?cs
|
|---|
| 34 | var:ticket.status ?><?cs
|
|---|
| 35 | if:ticket.type ?> <?cs var:ticket.type ?><?cs
|
|---|
| 36 | /if ?><?cs
|
|---|
| 37 | if:ticket.resolution ?>: <?cs var:ticket.resolution ?><?cs
|
|---|
| 38 | /if ?>)</span></h1>
|
|---|
| 39 |
|
|---|
| 40 | <div id="searchable">
|
|---|
| 41 | <div id="ticket">
|
|---|
| 42 | <div class="date">
|
|---|
| 43 | <p title="<?cs var:ticket.opened ?>">Opened <?cs var:ticket.opened_delta ?> ago</p><?cs
|
|---|
| 44 | if:ticket.lastmod ?>
|
|---|
| 45 | <p title="<?cs var:ticket.lastmod ?>">Last modified <?cs var:ticket.lastmod_delta ?> ago</p>
|
|---|
| 46 | <?cs /if ?>
|
|---|
| 47 | </div>
|
|---|
| 48 | <h2 class="summary"><?cs var:ticket.summary ?></h2>
|
|---|
| 49 | <table class="properties">
|
|---|
| 50 | <tr>
|
|---|
| 51 | <th id="h_reporter">Reported by:</th>
|
|---|
| 52 | <td headers="h_reporter"><?cs var:ticket.reporter ?></td>
|
|---|
| 53 | <th id="h_owner">Assigned to:</th>
|
|---|
| 54 | <td headers="h_owner"><?cs var:ticket.owner ?><?cs
|
|---|
| 55 | if:ticket.status == 'assigned' ?> (accepted)<?cs /if ?></td>
|
|---|
| 56 | </tr><tr><?cs
|
|---|
| 57 | each:field = ticket.fields ?><?cs
|
|---|
| 58 | if:!field.skip ?><?cs
|
|---|
| 59 | set:num_fields = num_fields + 1 ?><?cs
|
|---|
| 60 | /if ?><?cs
|
|---|
| 61 | /each ?><?cs
|
|---|
| 62 | set:idx = 0 ?><?cs
|
|---|
| 63 | each:field = ticket.fields ?><?cs
|
|---|
| 64 | if:!field.skip ?><?cs set:fullrow = field.type == 'textarea' ?><?cs
|
|---|
| 65 | if:fullrow && idx % 2 ?><th></th><td></td></tr><tr><?cs /if ?>
|
|---|
| 66 | <th id="h_<?cs var:name(field) ?>"><?cs var:field.label ?>:</th>
|
|---|
| 67 | <td<?cs if:fullrow ?> colspan="3"<?cs /if ?> headers="h_<?cs
|
|---|
| 68 | var:name(field) ?>"><?cs var:ticket[name(field)] ?></td><?cs
|
|---|
| 69 | if:idx % 2 || fullrow ?></tr><tr><?cs
|
|---|
| 70 | elif:idx == num_fields - 1 ?><th></th><td></td><?cs
|
|---|
| 71 | /if ?><?cs set:idx = idx + #fullrow + 1 ?><?cs
|
|---|
| 72 | /if ?><?cs
|
|---|
| 73 | /each ?></tr>
|
|---|
| 74 | </table><?cs
|
|---|
| 75 | if:ticket.description ?>
|
|---|
| 76 | <form method="get" action="<?cs var:ticket.href ?>#comment" class="printableform">
|
|---|
| 77 | <div class="description">
|
|---|
| 78 | <h3 id="comment:description"><?cs
|
|---|
| 79 | if:trac.acl.TICKET_APPEND ?>
|
|---|
| 80 | <span class="inlinebuttons">
|
|---|
| 81 | <input type="hidden" name="replyto" value="description" />
|
|---|
| 82 | <input type="submit" value="Reply" title="Reply, quoting this description" />
|
|---|
| 83 | </span><?cs
|
|---|
| 84 | /if ?>
|
|---|
| 85 | Description <?cs
|
|---|
| 86 | if:ticket.description.lastmod ?><span class="lastmod" title="<?cs var:ticket.description.lastmod ?>">(Last modified by <?cs var:ticket.description.author ?>)</span><?cs
|
|---|
| 87 | /if ?>
|
|---|
| 88 | </h3>
|
|---|
| 89 | <?cs var:ticket.description.formatted ?>
|
|---|
| 90 | </div>
|
|---|
| 91 | </form><?cs
|
|---|
| 92 | /if ?>
|
|---|
| 93 | </div>
|
|---|
| 94 |
|
|---|
| 95 | <?cs if:ticket.attach_href || len(ticket.attachments) ?>
|
|---|
| 96 | <?cs call:list_of_attachments(ticket.attachments, ticket.attach_href) ?>
|
|---|
| 97 | <?cs /if ?>
|
|---|
| 98 |
|
|---|
| 99 | <?cs def:commentref(prefix, cnum) ?>
|
|---|
| 100 | <a href="#comment:<?cs var:cnum ?>"><small><?cs var:prefix ?><?cs var:cnum ?></small></a>
|
|---|
| 101 | <?cs /def ?>
|
|---|
| 102 |
|
|---|
| 103 | <?cs if:len(ticket.changes) ?><h2>Change History</h2>
|
|---|
| 104 | <div id="changelog"><?cs
|
|---|
| 105 | each:change = ticket.changes ?>
|
|---|
| 106 | <form method="get" action="<?cs var:ticket.href ?>#comment" class="printableform">
|
|---|
| 107 | <div class="change">
|
|---|
| 108 | <h3 <?cs if:change.cnum ?>id="comment:<?cs var:change.cnum ?>"<?cs /if ?>><?cs
|
|---|
| 109 | if:change.cnum ?><?cs
|
|---|
| 110 | if:trac.acl.TICKET_APPEND ?>
|
|---|
| 111 | <span class="inlinebuttons">
|
|---|
| 112 | <input type="hidden" name="replyto" value="<?cs var:change.cnum ?>" />
|
|---|
| 113 | <input type="submit" value="Reply" title="Reply to comment <?cs var:change.cnum ?>" />
|
|---|
| 114 | </span><?cs
|
|---|
| 115 | /if ?>
|
|---|
| 116 | <span class="threading"><?cs
|
|---|
| 117 | set:nreplies = len(ticket.replies[change.cnum]) ?><?cs
|
|---|
| 118 | if:nreplies || change.replyto ?>(<?cs
|
|---|
| 119 | if:change.replyto ?>in reply to: <?cs
|
|---|
| 120 | call:commentref('↑ ', change.replyto) ?><?cs if nreplies ?>; <?cs /if ?><?cs
|
|---|
| 121 | /if ?><?cs
|
|---|
| 122 | if nreplies ?><?cs
|
|---|
| 123 | call:plural('follow-up', nreplies) ?>: <?cs
|
|---|
| 124 | each:reply = ticket.replies[change.cnum] ?><?cs
|
|---|
| 125 | call:commentref('↓ ', reply) ?><?cs
|
|---|
| 126 | /each ?><?cs
|
|---|
| 127 | /if ?>)<?cs
|
|---|
| 128 | /if ?>
|
|---|
| 129 | </span><?cs
|
|---|
| 130 | /if ?><?cs
|
|---|
| 131 | var:change.date ?> changed by <?cs var:change.author ?>
|
|---|
| 132 | </h3><?cs
|
|---|
| 133 | if:len(change.fields) ?>
|
|---|
| 134 | <ul class="changes"><?cs
|
|---|
| 135 | each:field = change.fields ?>
|
|---|
| 136 | <li><strong><?cs var:name(field) ?></strong> <?cs
|
|---|
| 137 | if:name(field) == 'attachment' ?><em><?cs var:field.new ?></em> added<?cs
|
|---|
| 138 | elif:field.old && field.new ?>changed from <em><?cs
|
|---|
| 139 | var:field.old ?></em> to <em><?cs var:field.new ?></em><?cs
|
|---|
| 140 | elif:!field.old && field.new ?>set to <em><?cs var:field.new ?></em><?cs
|
|---|
| 141 | elif:field.old && !field.new ?>deleted<?cs
|
|---|
| 142 | else ?>changed<?cs
|
|---|
| 143 | /if ?>.</li>
|
|---|
| 144 | <?cs
|
|---|
| 145 | /each ?>
|
|---|
| 146 | </ul><?cs
|
|---|
| 147 | /if ?>
|
|---|
| 148 | <div class="comment"><?cs var:change.comment ?></div>
|
|---|
| 149 | </div>
|
|---|
| 150 | </form><?cs
|
|---|
| 151 | /each ?>
|
|---|
| 152 | </div><?cs
|
|---|
| 153 | /if ?>
|
|---|
| 154 |
|
|---|
| 155 | <?cs if:trac.acl.TICKET_CHGPROP || trac.acl.TICKET_APPEND ?>
|
|---|
| 156 | <form action="<?cs var:ticket.href ?>#preview" method="post">
|
|---|
| 157 | <hr />
|
|---|
| 158 | <h3><a name="edit" onfocus="document.getElementById('comment').focus()">Add/Change #<?cs
|
|---|
| 159 | var:ticket.id ?> (<?cs var:ticket.summary ?>)</a></h3>
|
|---|
| 160 |
|
|---|
| 161 | <p><a href="<?cs var:trac.href.wiki?>/HowToSubmitBugreport">Указания за попълване</a></p>
|
|---|
| 162 |
|
|---|
| 163 | <?cs if:trac.authname == "anonymous" ?>
|
|---|
| 164 | <div class="field">
|
|---|
| 165 | <label for="author">Your email or username:</label><br />
|
|---|
| 166 | <input type="text" id="author" name="author" size="40"
|
|---|
| 167 | value="<?cs var:ticket.reporter_id ?>" /><br />
|
|---|
| 168 | </div>
|
|---|
| 169 | <?cs /if ?>
|
|---|
| 170 | <div class="field">
|
|---|
| 171 | <label for="sezam">За да извършите действието, попълнете в полето GTP:</label><br />
|
|---|
| 172 | <input type="text" id="sezam" name="sezam" size="40" /><br /> <!-- FIXME: Da se prenasia stojnostta -->
|
|---|
| 173 | </div>
|
|---|
| 174 | <div class="field">
|
|---|
| 175 | <fieldset class="iefix">
|
|---|
| 176 | <label for="comment">Comment (you may use <a tabindex="42" href="<?cs
|
|---|
| 177 | var:trac.href.wiki ?>/WikiFormatting">WikiFormatting</a> here):</label><br />
|
|---|
| 178 | <p><textarea id="comment" name="comment" class="wikitext" rows="10" cols="78">
|
|---|
| 179 | <?cs var:ticket.comment ?></textarea></p>
|
|---|
| 180 | </fieldset><?cs
|
|---|
| 181 | if ticket.comment_preview ?>
|
|---|
| 182 | <fieldset id="preview">
|
|---|
| 183 | <legend>Comment Preview</legend>
|
|---|
| 184 | <?cs var:ticket.comment_preview ?>
|
|---|
| 185 | </fieldset><?cs
|
|---|
| 186 | /if ?>
|
|---|
| 187 | </div>
|
|---|
| 188 |
|
|---|
| 189 | <?cs if:trac.acl.TICKET_CHGPROP ?><fieldset id="properties">
|
|---|
| 190 | <legend>Change Properties</legend>
|
|---|
| 191 | <table><tr>
|
|---|
| 192 | <th><label for="summary">Summary:</label></th>
|
|---|
| 193 | <td class="fullrow" colspan="3"><input type="text" id="summary" name="summary" value="<?cs
|
|---|
| 194 | var:ticket.summary ?>" size="70" /></td>
|
|---|
| 195 | </tr><?cs
|
|---|
| 196 | if:len(ticket.fields.type.options) ?>
|
|---|
| 197 | <tr>
|
|---|
| 198 | <th><label for="type">Type:</label></th>
|
|---|
| 199 | <td><?cs
|
|---|
| 200 | call:hdf_select(ticket.fields.type.options, 'type', ticket.type, 0) ?>
|
|---|
| 201 | </td>
|
|---|
| 202 | </tr><?cs
|
|---|
| 203 | /if ?><?cs
|
|---|
| 204 | if:trac.acl.TICKET_ADMIN ?><tr>
|
|---|
| 205 | <th><label for="description">Description:</label></th>
|
|---|
| 206 | <td class="fullrow" colspan="3">
|
|---|
| 207 | <textarea id="description" name="description" class="wikitext" rows="10" cols="68">
|
|---|
| 208 | <?cs var:ticket.description ?></textarea>
|
|---|
| 209 | </td>
|
|---|
| 210 | </tr><tr>
|
|---|
| 211 | <th><label for="reporter">Reporter:</label></th>
|
|---|
| 212 | <td class="fullrow" colspan="3"><input type="text" value="<?cs
|
|---|
| 213 | var:ticket.reporter ?>" id="reporter" name="reporter" size="70" /></td>
|
|---|
| 214 | </tr><?cs
|
|---|
| 215 | /if ?>
|
|---|
| 216 | <tr><?cs set:num_fields = 0 ?><?cs
|
|---|
| 217 | each:field = ticket.fields ?><?cs
|
|---|
| 218 | if:!field.skip ?><?cs
|
|---|
| 219 | set:num_fields = num_fields + 1 ?><?cs
|
|---|
| 220 | /if ?><?cs
|
|---|
| 221 | /each ?><?cs set:idx = 0 ?><?cs
|
|---|
| 222 | each:field = ticket.fields ?><?cs
|
|---|
| 223 | if:!field.skip ?><?cs set:fullrow = field.type == 'textarea' ?><?cs
|
|---|
| 224 | if:fullrow && idx % 2 ?><?cs set:idx = idx + 1 ?><th class="col2"></th><td></td></tr><tr><?cs /if ?>
|
|---|
| 225 | <th class="col<?cs var:idx % 2 + 1 ?>"><?cs
|
|---|
| 226 | if:field.type != 'radio' ?><label for="<?cs var:name(field) ?>"><?cs
|
|---|
| 227 | /if ?><?cs alt:field.label ?><?cs var:field.name ?><?cs /alt ?>:<?cs
|
|---|
| 228 | if:field.type != 'radio' ?></label><?cs /if ?></th>
|
|---|
| 229 | <td<?cs if:fullrow ?> colspan="3"<?cs /if ?>><?cs
|
|---|
| 230 | if:field.type == 'text' ?><input type="text" id="<?cs
|
|---|
| 231 | var:name(field) ?>" name="<?cs
|
|---|
| 232 | var:name(field) ?>" value="<?cs var:ticket[name(field)] ?>" /><?cs
|
|---|
| 233 | elif:field.type == 'select' ?><select id="<?cs
|
|---|
| 234 | var:name(field) ?>" name="<?cs
|
|---|
| 235 | var:name(field) ?>"><?cs
|
|---|
| 236 | if:field.optional ?><option></option><?cs /if ?><?cs
|
|---|
| 237 | each:option = field.options ?><option<?cs
|
|---|
| 238 | if:option == ticket[name(field)] ?> selected="selected"<?cs /if ?>><?cs
|
|---|
| 239 | var:option ?></option><?cs
|
|---|
| 240 | /each ?></select><?cs
|
|---|
| 241 | elif:field.type == 'checkbox' ?><input type="hidden" name="checkbox_<?cs
|
|---|
| 242 | var:name(field) ?>" /><input type="checkbox" id="<?cs
|
|---|
| 243 | var:name(field) ?>" name="<?cs
|
|---|
| 244 | var:name(field) ?>" value="1"<?cs
|
|---|
| 245 | if:ticket[name(field)] ?> checked="checked"<?cs /if ?> /><?cs
|
|---|
| 246 | elif:field.type == 'textarea' ?><textarea id="<?cs
|
|---|
| 247 | var:name(field) ?>" name="<?cs
|
|---|
| 248 | var:name(field) ?>"<?cs
|
|---|
| 249 | if:field.height ?> rows="<?cs var:field.height ?>"<?cs /if ?><?cs
|
|---|
| 250 | if:field.width ?> cols="<?cs var:field.width ?>"<?cs /if ?>>
|
|---|
| 251 | <?cs var:ticket[name(field)] ?></textarea><?cs
|
|---|
| 252 | elif:field.type == 'radio' ?><?cs set:optidx = 0 ?><?cs
|
|---|
| 253 | each:option = field.options ?><label><input type="radio" id="<?cs
|
|---|
| 254 | var:name(field) ?>" name="<?cs
|
|---|
| 255 | var:name(field) ?>" value="<?cs var:option ?>"<?cs
|
|---|
| 256 | if:ticket[name(field)] == option ?> checked="checked"<?cs /if ?> /> <?cs
|
|---|
| 257 | var:option ?></label> <?cs set:optidx = optidx + 1 ?><?cs
|
|---|
| 258 | /each ?><?cs
|
|---|
| 259 | /if ?></td><?cs
|
|---|
| 260 | if:idx % 2 || fullrow ?><?cs
|
|---|
| 261 | if:idx < num_fields - 1 ?></tr><tr><?cs
|
|---|
| 262 | /if ?><?cs
|
|---|
| 263 | elif:idx == num_fields - 1 ?><th class="col2"></th><td></td><?cs
|
|---|
| 264 | /if ?><?cs set:idx = idx + #fullrow + 1 ?><?cs
|
|---|
| 265 | /if ?><?cs
|
|---|
| 266 | /each ?></tr>
|
|---|
| 267 | </table>
|
|---|
| 268 | </fieldset><?cs /if ?>
|
|---|
| 269 |
|
|---|
| 270 | <?cs if:ticket.actions.accept || ticket.actions.reopen ||
|
|---|
| 271 | ticket.actions.resolve || ticket.actions.reassign ?>
|
|---|
| 272 | <fieldset id="action">
|
|---|
| 273 | <legend>Action</legend><?cs
|
|---|
| 274 | if:!ticket.action ?><?cs set:ticket.action = 'leave' ?><?cs
|
|---|
| 275 | /if ?><?cs
|
|---|
| 276 | def:action_radio(id) ?>
|
|---|
| 277 | <input type="radio" id="<?cs var:id ?>" name="action" value="<?cs
|
|---|
| 278 | var:id ?>"<?cs if:ticket.action == id ?> checked="checked"<?cs
|
|---|
| 279 | /if ?> /><?cs
|
|---|
| 280 | /def ?>
|
|---|
| 281 | <?cs call:action_radio('leave') ?>
|
|---|
| 282 | <label for="leave">leave as <?cs var:ticket.status ?></label><br /><?cs
|
|---|
| 283 | if:ticket.actions.accept ?><?cs
|
|---|
| 284 | call:action_radio('accept') ?>
|
|---|
| 285 | <label for="accept">accept ticket</label><br /><?cs
|
|---|
| 286 | /if ?><?cs
|
|---|
| 287 | if:ticket.actions.reopen ?><?cs
|
|---|
| 288 | call:action_radio('reopen') ?>
|
|---|
| 289 | <label for="reopen">reopen ticket</label><br /><?cs
|
|---|
| 290 | /if ?><?cs
|
|---|
| 291 | if:ticket.actions.resolve ?><?cs
|
|---|
| 292 | call:action_radio('resolve') ?>
|
|---|
| 293 | <label for="resolve">resolve</label><?cs
|
|---|
| 294 | if:len(ticket.fields.resolution.options) ?>
|
|---|
| 295 | <label for="resolve_resolution">as:</label>
|
|---|
| 296 | <?cs call:hdf_select(ticket.fields.resolution.options, "resolve_resolution",
|
|---|
| 297 | ticket.resolve_resolution, 0) ?><br /><?cs
|
|---|
| 298 | /if ?><?cs
|
|---|
| 299 | /if ?><?cs
|
|---|
| 300 | if:ticket.actions.reassign ?><?cs
|
|---|
| 301 | call:action_radio('reassign') ?>
|
|---|
| 302 | <label for="reassign">reassign</label>
|
|---|
| 303 | <label>to:<?cs
|
|---|
| 304 | if:len(ticket.fields.owner.options) ?><?cs
|
|---|
| 305 | call:hdf_select(ticket.fields.owner.options, "reassign_owner",
|
|---|
| 306 | ticket.reassign_owner, 1) ?><?cs
|
|---|
| 307 | else ?>
|
|---|
| 308 | <input type="text" id="reassign_owner" name="reassign_owner" size="40" value="<?cs
|
|---|
| 309 | var:ticket.reassign_owner ?>" /><?cs
|
|---|
| 310 | /if ?></label><?cs
|
|---|
| 311 | /if ?><?cs
|
|---|
| 312 | if ticket.actions.resolve || ticket.actions.reassign ?>
|
|---|
| 313 | <script type="text/javascript"><?cs
|
|---|
| 314 | each:action = ticket.actions ?>
|
|---|
| 315 | var <?cs var:name(action) ?> = document.getElementById("<?cs var:name(action) ?>");<?cs
|
|---|
| 316 | /each ?>
|
|---|
| 317 | var updateActionFields = function() {
|
|---|
| 318 | <?cs if:ticket.actions.resolve ?> enableControl('resolve_resolution', resolve.checked);<?cs /if ?>
|
|---|
| 319 | <?cs if:ticket.actions.reassign ?> enableControl('reassign_owner', reassign.checked);<?cs /if ?>
|
|---|
| 320 | };
|
|---|
| 321 | addEvent(window, 'load', updateActionFields);<?cs
|
|---|
| 322 | each:action = ticket.actions ?>
|
|---|
| 323 | addEvent(<?cs var:name(action) ?>, 'click', updateActionFields);<?cs
|
|---|
| 324 | /each ?>
|
|---|
| 325 | </script><?cs
|
|---|
| 326 | /if ?>
|
|---|
| 327 | </fieldset><?cs
|
|---|
| 328 | else ?>
|
|---|
| 329 | <input type="hidden" name="action" value="leave" /><?cs
|
|---|
| 330 | /if ?>
|
|---|
| 331 |
|
|---|
| 332 | <script type="text/javascript" src="<?cs
|
|---|
| 333 | var:htdocs_location ?>js/wikitoolbar.js"></script>
|
|---|
| 334 |
|
|---|
| 335 | <div class="buttons">
|
|---|
| 336 | <input type="hidden" name="ts" value="<?cs var:ticket.ts ?>" />
|
|---|
| 337 | <input type="hidden" name="replyto" value="<?cs var:ticket.replyto ?>" />
|
|---|
| 338 | <input type="hidden" name="cnum" value="<?cs var:ticket.cnum ?>" />
|
|---|
| 339 | <input type="submit" name="preview" value="Preview" accesskey="r" />
|
|---|
| 340 | <input type="submit" value="Submit changes" />
|
|---|
| 341 | </div>
|
|---|
| 342 | </form>
|
|---|
| 343 | <?cs /if ?>
|
|---|
| 344 |
|
|---|
| 345 | </div>
|
|---|
| 346 | <script type="text/javascript">
|
|---|
| 347 | addHeadingLinks(document.getElementById("searchable"), "Permalink to $id");
|
|---|
| 348 | </script>
|
|---|
| 349 | </div>
|
|---|
| 350 | <?cs include "footer.cs"?>
|
|---|