Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.controlPanel.mimeTypes
on mimeTypes () { <<Configure MIME types for serving files from disk. <<12/7/01; 2:42:24 PM by PBS 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); pta^.title = "MIME Types"; on add (s) { htmlText = htmlText + string.filledString ('\t', indentLevel) + s + "\r"}; on addSeparator (s) { 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>") 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 { //introduction text if flEditing { add ("To change the MIME type associated with the ." + nameItemToEdit + " extension, fill in the Type input box and click the Submit button.")} else { add ("To add a new MIME type, fill in the suffix and its MIME type, then click the Add New Type button. To delete one or more types, check one or more checkboxes and click the Delete button at the bottom of the page. To edit a type, click an Edit link on the right.")}; add ("<p>")}; 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=\"" + pta^.uri + "\">"); 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 (adr, flDidSpacers = false); for adr in adrTable { //build table local (extension = nameOf (adr^)); local (value = adr^); add ("<tr>"); 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 align=\"left\">." + extension + "</td>"); //extension add ("<td align=\"left\">" + value + "</td>"); //MIME type if not flDidSpacers { add ("<td> </td>"); //spacer flDidSpacers = true} else { add ("<td></td>")}; add ("<td><a href=\"" + pta^.uri + "?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--}}; return (string.replaceAll (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.