mast.jsp revision 6fd168587048fe0e2cb37acdcc9ae9764c83b2d2
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen<%--
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenCDDL HEADER START
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenThe contents of this file are subject to the terms of the
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenCommon Development and Distribution License (the "License").
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenYou may not use this file except in compliance with the License.
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenSee LICENSE.txt included in this distribution for the specific
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenlanguage governing permissions and limitations under the License.
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenWhen distributing Covered Code, include this CDDL HEADER in each
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenfile and include the License file at LICENSE.txt.
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenIf applicable, add the following below this CDDL HEADER, with the
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainenfields enclosed by brackets "[]" replaced with your own identifying
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Siraineninformation: Portions Copyright [yyyy] [name of copyright owner]
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainen
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo SirainenCDDL HEADER END
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainen
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo SirainenCopyright 2005 Sun Microsystems, Inc. All rights reserved.
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo SirainenUse is subject to license terms.
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainen--%><%@ page import = "javax.servlet.*,
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainenjava.lang.*,
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainenjavax.servlet.http.*,
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainenjava.util.*,
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainenjava.io.*,
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainenjava.net.URLDecoder,
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainenorg.opensolaris.opengrok.index.*,
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainenorg.opensolaris.opengrok.configuration.*
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainen"
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo Sirainen%><%@ page session="false" %><%@ page errorPage="error.jsp"%><%
f16c114c20bbd7d292d93415d1e56c8dd6abd3e7Timo SirainenString context = request.getContextPath();
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenString servlet = request.getServletPath();
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenString reqURI = request.getRequestURI();
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenString path = request.getPathInfo();
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainenif (path == null) path = "";
16f816d3f3c32ae3351834253f52ddd0212bcbf3Timo Sirainenelse {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen try {
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo Sirainen path = URLDecoder.decode(path, "ISO-8859-1");
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen } catch (UnsupportedEncodingException e) {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen}
84e1634acc701d14e358e27f1beff5ad74f5004aTimo SirainenRuntimeEnvironment environment = RuntimeEnvironment.getInstance();
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenenvironment.setUrlPrefix(context + "/s?");
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo Sirainenenvironment.register();
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenString rawSource = environment.getSourceRootPath();
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo SirainenString resourcePath = rawSource + path;
022412398e56a8f31ef111cfd7271498d64af9a9Timo SirainenFile resourceFile = new File(resourcePath);
1a073dd6184645b026583274e05afba10dcc20bbTimo SirainenresourcePath = resourceFile.getAbsolutePath();
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo Sirainenboolean valid = true;
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainenboolean noHistory = true;
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainenboolean noAnnotation = true;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenboolean annotate = false;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo SirainenString basename = resourceFile.getName();
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainenboolean isDir = false;
e05ea8311ae16687295048e88ca205dfe29fbcbfTimo SirainenEftarFileReader ef = null;
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo SirainenString parent = null;
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo SirainenString parentBasename = resourceFile.getParentFile().getName();
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo SirainenIgnoredNames ignoredNames = environment.getIgnoredNames();
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo SirainenString uriEncodedName = Util.URIEncodePath(path);
f7d43647acc6dc80064c8c4cacf5bf86f754c530Timo Sirainen
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo Sirainenif(resourcePath.length() < rawSource.length()
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo Sirainen|| ignoredNames.ignore(path)
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo Sirainen|| ignoredNames.ignore(parentBasename)
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo Sirainen|| !resourcePath.startsWith(rawSource)) {
98c1cf256927e254f0c092acd2ddcd7ea50bd009Timo Sirainen valid = false;
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen response.sendError(404);
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen return;
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen} else if (!resourceFile.canRead() && resourcePath.startsWith(rawSource)) {
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen String newPath = rawSource + "/on/" + path;
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen File newFile = new File(newPath);
b6d817f0effeff645aadc01fd468a7d4084ba1f2Timo Sirainen if(newFile.canRead()) {
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen if(newFile.isDirectory() && servlet.startsWith("/xref") && !path.endsWith("/")) {
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen response.sendRedirect(context + servlet + "/on" + path + "/");
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen } else {
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen response.sendRedirect(context + servlet + "/on" + path);
ca98892a6b8a30ffc1fe26fcf02c7d59e3204e7eTimo Sirainen }
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen }
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen valid = false;
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen response.sendError(404);
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen return;
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen} else {
ca98892a6b8a30ffc1fe26fcf02c7d59e3204e7eTimo Sirainen valid = true;
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen path = resourcePath.substring(rawSource.length());
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen if ("".equals(path)) {
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen path = "/";
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen }
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainen if (File.separatorChar == '\\') {
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainen path = path.replace('\\','/');
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainen }
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen isDir = resourceFile.isDirectory();
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen if (isDir && !servlet.startsWith("/xref") && !servlet.startsWith("/hist")) { //if it is an existing directory perhaps people wanted directory xref
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen if(!reqURI.endsWith("/")) {
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainen response.sendRedirect(context + "/xref" + path + "/");
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainen } else {
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainen response.sendRedirect(context + "/xref" + path);
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainen }
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainen } if (isDir && !reqURI.endsWith("/")) {
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen response.sendRedirect(context + servlet + path +"/");
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen } else {
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen long flast = resourceFile.lastModified();
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen String dtag = "";
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen if (request.getDateHeader("If-Modified-Since") >= flast ) {
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen valid = false;
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen } else {
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen response.setDateHeader("Last-Modified", flast);
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen int lastSlash = path.lastIndexOf('/');
6288d3611eda14a017dae9927b73f46afb646c96Timo Sirainen parent = (lastSlash != -1) ? path.substring(0, lastSlash) : "";
a2637488c8d514ec1ac3914811deee814f9761b3Timo Sirainen int pLastSlash = parent.lastIndexOf('/');
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen parentBasename = pLastSlash != -1 ? parent.substring(pLastSlash+1) : parent;
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen noHistory = !HistoryGuru.getInstance().hasHistory(resourceFile);
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen noAnnotation = isDir ||
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen !HistoryGuru.getInstance().hasAnnotation(resourceFile);
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen annotate = !noAnnotation &&
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen Boolean.parseBoolean(request.getParameter("a"));
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen try{
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen ef = new EftarFileReader(environment.getDataRootPath() + "/index/dtags.eftar");
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen dtag = ef.get(path);
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen if(servlet.startsWith("/xr")) {
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen } else {
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen if(ef != null) {
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen try {
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen ef.close();
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen } catch (IOException e) {
299183fbb6ec5d0828a0880da372540421ac4665Timo Sirainen } finally {
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen ef = null;
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen }
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen }
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen }
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen } catch (Exception e) {
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen dtag = "";
9e59a1f3f095b3099478562cf3f3970a24736970Timo Sirainen }
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen String pageTitle="Cross Reference: " + path;
178511b57faa7c3f8203dd8b7e4059d00cbfc23aTimo Sirainen
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen%><%@ include file="httpheader.jspf" %>
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen<body><div id="page">
2e937ed8585299b2e879a28314902a5f644813d2Timo Sirainen<form action="<%=context%>/search">
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen <div id="header"><%@ include file="pageheader.jspf" %>
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen <div id="pagetitle"><b id="filename">Cross Reference: <%=basename%></b><br/><%=dtag%></div>
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen </div>
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen<div id="Masthead"><tt><a href="<%=context%>/xref/">xref</a>: <%=org.opensolaris.opengrok.web.Util.breadcrumbPath(context + "/xref", path)%></tt></div>
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen<div id="bar"><a href="<%=context%>" id="home">Home</a> |
4d25408732be27e91f0430f71e87242760c2517cTimo Sirainen<%
e68309fcfa2eaa88217fd51e7b4900fc9c20ef5dTimo Sirainen
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainenif (noHistory || servlet.startsWith("/hi")) {
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen %> <span class="c" id="history">History</span><%
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen} else {
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen %><a id="history" href="<%=context%>/history<%=path%>">History</a><%
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen}
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainenif (noAnnotation) {
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen%> | <span class="c" id="annotate">Annotate</span><%
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen} else {
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen String rev = request.getParameter("r");
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen if (rev == null) {
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen rev = "";
4d25408732be27e91f0430f71e87242760c2517cTimo Sirainen } else if (rev.length() > 0) {
c3412ddeb9abc13f99d3caf50faf76cd99f7e9d2Timo Sirainen rev = "&r=" + rev;
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen }
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen if (Boolean.parseBoolean(request.getParameter("a"))) {
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen %> | <span id="toggle-annotate-by-javascript" style="display: none">
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen<a href="#" onClick="javascript:toggle_annotations(); return false;">Annotate</a>
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen</span>
6f25019b337e27600159b596824da08732965576Timo Sirainen<span id="toggle-annotate">
3063bd8ff05d3d8cd33156f4366b36890e501436Timo Sirainen<a href="<%=context%>/xref<%=path%><%
02b79f9c2636da1829eee5b92753602bba8b67edTimo Sirainenif (rev.length() > 0) {
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen %>?<%=rev%><%
1e76a5b92f9d82d557f81f080f3dfad1c9d8f200Timo Sirainen} %>">Annotate</a></span>
1e76a5b92f9d82d557f81f080f3dfad1c9d8f200Timo Sirainen<script type="text/javascript">
ced118ac5caf6fe83d34339c2c65c63b2aa768acTimo Sirainen<!--
9a06cabdfdf4d5e2f19a07e506c3c7d08a7e7038Timo Sirainenvar toggle_js = document.getElementById('toggle-annotate-by-javascript');
9a06cabdfdf4d5e2f19a07e506c3c7d08a7e7038Timo Sirainenvar toggle_ss = document.getElementById('toggle-annotate');
9a06cabdfdf4d5e2f19a07e506c3c7d08a7e7038Timo Sirainen
e8a35266a5ceacdfafeeffd6bddae77931ff97ebTimo Sirainentoggle_js.style.display = 'inline';
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainentoggle_ss.style.display = 'none';
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen// -->
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen</script> <%
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen } else {
b08b33d1f5ce3721dc2d83586c9cb0ca141331fdTimo Sirainen %> | <a href="<%=context%>/xref<%=path%>?a=true<%=rev%>">Annotate</a><%
b08b33d1f5ce3721dc2d83586c9cb0ca141331fdTimo Sirainen }
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen}
de62ce819d59a529530da4b57be1b8d6dad13d6bTimo Sirainen if (!isDir) {
0c909e3461607eadcd66f4eac69b7f34e37fccf1Timo Sirainen String rev = request.getParameter("r");
f6699a08521aacc4c2bb5b6175691dad5f715f8cTimo Sirainen if (rev == null || rev.equals("")) {
6843896c40bee4f9b6680ca7ced598c446e9f999Timo Sirainen%> | <a id="download" href="<%=context%>/raw<%=path%>">Download</a><%
6843896c40bee4f9b6680ca7ced598c446e9f999Timo Sirainen } else {
6843896c40bee4f9b6680ca7ced598c446e9f999Timo Sirainen%> | <a id="download" href="<%=context%>/raw<%=path%>?r=<%=rev%>">Download</a><%
6843896c40bee4f9b6680ca7ced598c446e9f999Timo Sirainen }
0c909e3461607eadcd66f4eac69b7f34e37fccf1Timo Sirainen }
0c909e3461607eadcd66f4eac69b7f34e37fccf1Timo Sirainen
f140f88a5ab3e2194f214c11f9f418559e949c83Timo Sirainen Project proj = Project.getProject(resourceFile);
022412398e56a8f31ef111cfd7271498d64af9a9Timo Sirainen if (proj != null || !environment.hasProjects()) {
022412398e56a8f31ef111cfd7271498d64af9a9Timo Sirainen%> | <input id="search" name="q" class="q"/>
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen<input type="submit" value="Search" class="submit"/>
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen<%
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen if (proj != null) {
73b50eecfc31750a312e2f940023f522eb07178cTimo Sirainen %><input type="hidden" name="project" value="<%=proj.getId()%>"/><%
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen }
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen if(isDir) {
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen if(path.length() > 0) {
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen %><input type="checkbox" name="path" value="<%=path%>"/> only in <b><%=path%></b><%
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen }
73b50eecfc31750a312e2f940023f522eb07178cTimo Sirainen } else {
dda2c506c8fc8ac2f88272de4523ded42baa0aa0Timo Sirainen %><input type="checkbox" name="path" value="<%=parent%>"/> only in <b><%=parentBasename%></b><%
f6699a08521aacc4c2bb5b6175691dad5f715f8cTimo Sirainen }
f6699a08521aacc4c2bb5b6175691dad5f715f8cTimo Sirainen%></div></form><%
73b50eecfc31750a312e2f940023f522eb07178cTimo Sirainen }
f6699a08521aacc4c2bb5b6175691dad5f715f8cTimo Sirainen} // date check
f6699a08521aacc4c2bb5b6175691dad5f715f8cTimo Sirainen } // not a directory redirect
df4018ae2f0a95be602f724ca70df7e0e3bd6a7dTimo Sirainen}
df4018ae2f0a95be602f724ca70df7e0e3bd6a7dTimo Sirainen%>
a393d9d6dabdc46cf724f8cb004a652b4036d53dTimo Sirainen