Monday, November 08, 2010 at 12:05 AM.

	<<6/21/02; 2:32:21 PM by JES
		<<Added a help link, which links to the How to create a Theme page.
	<<12/31/01; 3:01:25 AM by JES
		<<Created. Render a page that allows the user to turn their site into a Theme.

local (htmltext, indentlevel=0);
on add (s) {
	htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r"};

local (pta = html.getPageTableAddress ());
pta^.title = radio.string.getLocalizedString ("createTheme.title");
local (adrblog = radio.weblog.init ());

local (confirmMessage = "");
if pta^.method == "POST" {
	local (adrargs = @pta^.radioResponder.postArgs);
	<<scratchpad.args = adrargs^; edit (@scratchpad.args)
	if defined (adrargs^.createTheme) { //create the theme file, and save it in the Themes folder
		local (name = adrargs^.themeName);
		local (author = adrargs^.author);
		local (authorEmail = adrargs^.authorEmail);
		local (description = adrargs^.description);
		local (siteUrl = radio.weblog.getUrl ());
		if defined (adrargs^.siteUrl) {
			siteUrl = adrargs^.siteUrl};
		local (theme);
		radio.theme.create.main (@theme, name, author:author, authorEmail:authorEmail, description:description, siteurl:siteUrl);
		local (f = radio.theme.getThemeFilePath (name));
		radio.theme.exportThemeFile (f, @theme);
		local (t); new (tableType, @t); = name;
		confirmMessage = radio.string.getlocalizedstring ("createTheme.themeCreatedConfirm", @t)}};

bundle { //render the Create Theme form
	local (helplink = radio.userInterface.helpLink ("How to create a Theme"));
	bundle { //description
		add ("<p>" + radio.string.getlocalizedstring ("createTheme.description") + " " + helplink + "</p>")};
	bundle { //confirmation message
		if sizeOf (confirmMessage) > 0 {
			add ("<font color=\"navy\">" + confirmMessage + "</font><br><br>")}};
	bundle { //the form
		add ("<form method=\"POST\">");
		add ("<table border=\"0\" cellpadding=\"5\" cellspacing=\"0\">");
		bundle { //name field
			add ("<tr><td>" + radio.string.getlocalizedstring ("createTheme.themeNamePrompt") + "</td>");
			add ("<td><input type=\"text\" name=\"themeName\" size=\"50\" maxlength=\"50\" value=\"" + adrblog^.prefs.title + "\"></td></tr>")};
		bundle { //author field
			add ("<tr><td>" + radio.string.getlocalizedstring ("createTheme.authorPrompt") + "</td>");
			add ("<td><input type=\"text\" name=\"author\" size=\"50\" maxlength=\"50\" value=\"" + + "\"></td></tr>")};
		bundle { //author email field
			add ("<tr><td>" + radio.string.getlocalizedstring ("createTheme.authorEmailPrompt") + "</td>");
			add ("<td><input type=\"text\" name=\"authorEmail\" size=\"50\" maxlength=\"50\" value=\"" + user.prefs.mailAddress + "\"></td></tr>")};
		bundle { //if you're a system editor, you also get a siteUrl field
			if {
				add ("<tr><td>" + radio.string.getlocalizedstring ("createTheme.siteUrlPrompt") + "</td>");
				add ("<td><input type=\"text\" name=\"siteUrl\" size=\"50\" maxlength=\"255\" value=\"" + radio.weblog.getUrl () + "\"></td></tr>")}};
		bundle { //description textarea
			add ("<tr><td>" + radio.string.getlocalizedstring ("createTheme.descriptionPrompt") + "</td>");
			add ("<td><textarea name=\"description\" cols=\"50\" rows=\"5\"></textarea></td></tr>")};
		bundle { //create theme button
			add ("<tr><td> </td><td style=\"padding-top:14px\"><input type=\"submit\" name=\"createTheme\" value=\"" + radio.string.getlocalizedstring ("createTheme.createThemeButton") + "\"></td></tr>")};
		add ("</table>");
		add ("</form>")}};

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.