Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.adminSite.prefs.mimeTypes
on mimeTypes () {
<<Changes
<<8/21/02; 2:17:21 AM by JES
<<Made the table look good in the admin site. Use alternating table row colors, and smaller fonts in the table.
<<12/7/01; 2:42:24 PM by PBS
<<Configure MIME types for serving files from disk.
local (pta = html.getPageTableAddress ());
local (adrTable = @user.webserver.prefs.ext2Mime);
local (htmlText = "");
local (indentLevel = 0);
local (flPost = (pta^.method == "POST"));
local (flEditing = false);
local (adrItemToEdit);
local (nameItemToEdit);
on add (s) {
htmlText = htmlText + (string.filledString ('\t', indentLevel) + s + "\r");};
on addSeparator (s) {
add ("<p><b>" + s + "</b></p>")};
<<bundle //original code
<<add ("<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\"><tr>")
<<add ("<td bgcolor=\"#DCDCFF\" colspan=\"6\"><b>" + s + "</td>")
<<add ("</tr></table>")
bundle { //handle POSTed form
if flPost {
if defined (pta^.postArgs.delete) { //deleting?
local (adrItem);
for adrItem in @pta^.postArgs {
local (itemName = string.lower (nameOf (adrItem^)));
if itemName == "delete" {
continue};
if defined (adrTable^.[itemName]) {
delete (@adrTable^.[itemName])}}}
else { //must be adding or editing
local (name = string.trimWhiteSpace (pta^.postArgs.suffix));
if name != "" {
name = string.lower (name);
name = string.popLeading (name, '.'); //be forgiving
local (type = string.trimWhiteSpace (pta^.postArgs.type));
adrTable^.[name] = type}};
<<add ("<font color=\"blue\">." + name + " has been set to " + type + ".</font><p>")
local (args = pta^.searchArgTable);
try {delete (@args.itemToEdit)};
mainResponder.redirect ("http://" + pta^.host + pta^.uri + "?" + webserver.encodeArgs (@args));
return ("")}};
bundle { //editing?
if not flPost {
if pta^.searchArgs != "" {
local (t);
new (tableType, @t);
webserver.parseArgs (pta^.searchArgs, @t);
if defined (t.itemToEdit) {
if string.trimWhiteSpace (t.itemToEdit) != "" {
if defined (adrTable^.[t.itemToEdit]) {
flEditing = true;
adrItemToEdit = @adrTable^.[t.itemToEdit];
nameItemToEdit = nameOf (adrItemToEdit^)}}}}}};
bundle { //Create New or edit
local (defaultName = "", defaultValue = "");
if flEditing {
addSeparator ("Edit type for ." + nameItemToEdit + ":");
defaultName = nameItemToEdit;
defaultValue = adrItemToEdit^}
else {
addSeparator ("Add new type:")};
add ("<form method=\"post\" action=\"" + pta^.uri + "\">"); indentLevel++;
add ("<table border=\"0\" cellpadding=\"7\" cellspacing=\"0\">"); indentLevel++;
add ("<tr>"); indentLevel++;
add ("<td>Suffix:</td>");
if flEditing {
add ("<td>." + defaultName + "<input name=\"suffix\" type=\"hidden\" value=\"" + defaultName + "\"></td>")}
else {
add ("<td><input size=\"5\" name=\"suffix\" value=\"\"></td>")};
add ("</tr>"); indentLevel--;
add ("<tr>"); indentLevel++;
add ("<td>Type:</td>");
add ("<td><input size=\"30\" name=\"type\" value=\"" + defaultValue + "\"></td>");
add ("</tr>"); indentLevel--;
add ("<tr>"); indentLevel++;
add ("<td> </td>");
if flEditing {
add ("<td><input type=\"submit\" value=\"Submit\" name=\"editSubmit\"></td>")}
else {
add ("<td><input type=\"submit\" value=\"Add New Type\" name=\"newTypeSubmit\"></td>")};
add ("</tr>"); indentLevel--;
add ("</table>"); indentLevel--;
add ("</form>"); indentLevel--};
if not flEditing {
bundle { //top of form
addSeparator ("Current types:");
add ("<form method=\"post\" action=\"" + "http://" + pta^.host + pta^.uri + "?" + pta^.searchArgs + "\">");
indentLevel++};
bundle { //top of table
add ("<table border=\"0\" cellpadding=\"5\" cellspacing=\"0\">");
indentLevel++;
add ("<tr>"); indentLevel++;
add ("<td> </td><td> </td><td align=\"left\"><b>Suffix</b></td><td align=\"left\"><b>Type</b></td><td> </td><td> </td>");
add ("</tr>"); indentLevel--};
local (bgcolors = {pta^.trbg2, pta^.trbg1});
local (adr, flDidSpacers = false, cttypes=0);
for adr in adrTable { //build table
local (extension = nameOf (adr^));
local (value = adr^);
add ("<tr bgcolor=\"" + bgcolors [ (++cttypes % 2) + 1] + "\">"); indentLevel++;
<<Delete checkbox.
add ("<td><input type=\"checkbox\" name=\"" + extension+ "\" value=\"delete\"></td>");
if not flDidSpacers {
add ("<td> </td>")} //spacer
else {
add ("<td></td>")};
add ("<td class=\"small\" align=\"left\">." + extension + "</td>"); //extension
add ("<td class=\"small\" align=\"left\">" + value + "</td>"); //MIME type
if not flDidSpacers {
add ("<td> </td>"); //spacer
flDidSpacers = true}
else {
add ("<td></td>")};
add ("<td class=\"small\"><a href=\"" + pta^.uri + "?" + pta^.searchArgs + "&itemToEdit=" + extension + "\">edit</a></td>"); //edit button
add ("</tr>"); indentLevel--};
bundle { //buttons and bottom of table
add ("<tr>"); indentLevel++;
add ("<td colspan=\"6\"><input type=\"Submit\" name=\"Delete\" value=\"Delete\"></td>");
add ("</tr>"); indentLevel--;
add ("</table>");
indentLevel--};
bundle { //bottom of form
add ("</form>");
indentLevel--}};
bundle { //neuter macros
htmlText = string.replaceAll (htmlText, "<%", "<")};
pta^.flAddSubmitButton = false; //suppress the default submit button
return (htmltext)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.