Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.html.viewThemes
<<Changes
<<2/1/02; 10:35:16 PM by JES
<<Added a link to the Create Theme page.
<<1/27/02; 4:47:29 PM by JES
<<After applying a Theme, publish the home page, so the new Theme will be visible on the public site right away.
<<1/14/02; 11:20:11 AM by JES
<<Add each Theme to the list within a try block, so that if the .fttb file is corrupt, or doesn't contain the data that we expect, you won't get a macro error.
<<1/1/02; 10:18:32 PM by JES
<<Added a warning below the Themes list, before the Apply Theme button. Added a help link.
<<Don't render the confirmation page as a box. No Yes/No buttons -- use an Apply Theme button instead. Changed the title of the confirm page to "Themes: Confirm".
<<12/31/01; 3:01:01 AM by JES
<<Created. Render a page that lists the available Themes, and allows the user to apply a Theme to their website.
local (htmltext, indentlevel=0);
on add (s) {
htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r"};
local (pta = html.getpagetableaddress ());
local (adrblog = radio.weblog.init ());
pta^.title = radio.string.getLocalizedString ("viewThemes.title");
if pta^.method == "POST" {
<<scratchpad.params = pta^.radioResponder.postArgs; edit (@scratchpad.params)
local (adrargs = @pta^.radioResponder.postArgs);
if defined (adrargs^.applyTheme) { //the user clicked the Apply Theme button -- render confirm page
pta^.title = radio.string.getlocalizedstring ("viewThemes.confirmPageTitle");
local (shortName = adrargs^.theme);
local (f = radio.theme.getThemeFilePath (shortName));
local (theme);
radio.theme.importThemeFile (f, @theme);
bundle { //render the confirm form
<<bundle //start the table
<<add ("<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"" + radio.data.htmlColors.frameColor + "\" width=\"350\">"); indentlevel++
<<bundle //confirm heading
<<add ("<tr bgcolor=\"" + radio.data.htmlColors.highlightColor + "\"><td align=\"left\"><b>" + radio.string.getlocalizedString ("viewThemes.confirm") + "</b></td></tr>")
<<add ("<tr bgcolor=\"" + radio.data.htmlColors.cellBgColor + "\"><td>"); indentlevel++
add ("<form method=\"POST\">");
local (t); new (tableType, @t);
t.theme = theme.info.name;
add (radio.string.getLocalizedString ("viewThemes.confirmText", @t));
add ("<input type=\"hidden\" name=\"theme\" value=\"" + shortName +"\">");
add ("<p>");
bundle { //apply theme button
add ("<input type=\"submit\" name=\"confirmApplyTheme\" value=\" " + radio.string.getlocalizedstring ("viewThemes.applyTheme") + " \"> </p></form>")}};
<<bundle //yes and no buttons
<<add ("<input type=\"submit\" name=\"dontApplyTheme\" value=\" " + radio.string.getlocalizedstring ("viewThemes.noButton") + " \"> ")
<<add ("<input type=\"submit\" name=\"confirmApplyTheme\" value=\" " + radio.string.getlocalizedstring ("viewThemes.yesButton") + " \"> </p></form>")
<<add ("</td></tr>"); indentlevel--
<<add ("</table>"); indentlevel--
return (htmltext)};
if defined (adrargs^.confirmApplyTheme) { //the user approved application of the Theme
local (shortName = adrargs^.theme);
local (f = radio.theme.getThemeFilePath (shortName));
local (theme);
radio.theme.importThemeFile (f, @theme);
radio.theme.apply.main (@theme);
radio.weblog.publish ();
adrblog^.prefs.lastThemeApplied = shortName;
local (t); new (tableType, @t);
t.theme = theme.info.name;
bundle { //set confirm message
temp.radio.misc.themeAppliedConfirmMessage = radio.string.getlocalizedstring ("viewThemes.themeAppliedConfirm", @t)};
radio.webserver.redirect (pta^.uri);
return ("")}};
bundle { //list Themes
local (lastThemeApplied = "default");
if defined (adrblog^.prefs.lastThemeApplied) {
lastThemeApplied = adrblog^.prefs.lastThemeApplied};
bundle { //add explanatory text
local (t); new (tableType, @t);
t.createThemeUrl = radio.data.systemUrls.createTheme;
add (radio.string.getlocalizedstring ("viewThemes.explanation", @t) + " " + radio.userInterface.helpLink ("The Themes command") + "<p>")};
bundle { //possibly add a confirm message
if defined (temp.radio.misc.themeAppliedConfirmMessage) {
add ("<br><font color=\"navy\">" + temp.radio.misc.themeAppliedConfirmMessage + "</font><br>");
delete (@temp.radio.misc.themeAppliedConfirmMessage)}};
add ("<form method=\"POST\">"); indentlevel++;
bundle { //start the table
add ("<table cellspacing=\"0\" cellpadding=\"6\" border=\"0\">"); indentlevel++};
bundle { //add the themes
local (folder = radio.theme.getThemesFolder ());
local (floop);
fileloop (floop in folder) {
try { //1/14/02 JES: don't fail if the .fttb doesn't contain what we expect
local (fname = file.fileFromPath (floop));
if not (string.lower (fname) endsWith ".fttb") {
continue};
local (themeTable);
radio.theme.importThemeFile (floop, @themeTable);
add ("<tr>"); indentlevel++;
local (adrinfo = @themeTable.info);
local (author = adrinfo^.author);
local (authorEmail = adrinfo^.authorEmail);
local (createDate = adrinfo^.creationDate);
local (description = adrinfo^.description);
local (name = adrinfo^.name);
local (siteUrl = adrinfo^.siteUrl);
local (shortName = radio.theme.getShortName (name));
bundle { //radio button
add ("<td valign=\"top\">"); indentlevel++;
if string.lower (shortName) == string.lower (lastThemeApplied) {
add ("<input type=\"radio\" name=\"theme\" value=\"" + shortName + "\" checked>")}
else {
add ("<input type=\"radio\" name=\"theme\" value=\"" + shortName + "\">")};
add ("</td>"); indentlevel--};
bundle { //theme link, description and credits
add ("<td valign=\"top\">"); indentlevel++;
add ("<b><a href=\"" + siteUrl + "\">" + name + "</a></b><br>");
add ("<font size=\"-1\" class=\"small\">" + description + "</font><br>");
bundle { //add credits
local (t); new (tableType, @t);
t.author = "<a href=\"mailto:" + authorEmail + "\">" + author + "</a>";
t.date = createDate;
add ("<font size=\"-1\" class=\"small\">" + radio.string.getlocalizedstring ("viewThemes.createdBy", @t) + "</font>")};
add ("</td>"); indentlevel--};
add ("</tr>"); indentlevel--}}};
add ("</table>"); indentlevel--;
bundle { //warning text
add ("<p>" + radio.string.getlocalizedstring ("viewThemes.warning") + "</p>")};
bundle { //add submit button
add ("<p><input type=\"submit\" name=\"applyTheme\" value=\"" + radio.string.getlocalizedstring ("viewThemes.applyTheme") + "\"></p>")};
add ("</form>"); indentlevel--};
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.