Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.userInterface.categoryCheckboxes
on categoryCheckboxes (adrdata, adrpost, bgcolor=radio.data.htmlColors.cellBgColor) {
<<Changes:
<<2/4/02; 3:38:04 PM by JES
<<Changed the mag-glass to a New link.
<<12/10/01; 1:51:43 PM by JES
<<Localized.
<<11/7/01; 1:06:18 PM by DW
<<Changed the Edit button to a spyglass and moved it adjacent to the word "Categories" to make its purpose more clear.
<<10/29/01; 5:01:42 PM by JES
<<Added optional parameter, bgcolor.
<<10/29/01; 12:29:11 PM by DW
<<Add an EDIT button to the category checkboxes, linked to the Categories page.
<<10/28/01; 9:22:20 AM by DW
<<Change cellspacing on table to 0 to tighten up the display of categories on the "Status Center" home page.
<<10/9/01; 5:05:32 PM by JES
<<Add categories to posts in radio.macros.weblogPostForm, instead of here. This fixes a bug where categories could not be added for new posts.
<<8/30/01; 4:42:33 AM by JES
<<Adapted to work with data stored at @weblogData^, and with the weblog posting form script at radio.macros.weblogPostForm.
local (pta = html.getPageTableAddress ());
local (htmltext, indentlevel = 0);
on add (s) {
htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"};
<<if pta^.method == "POST"
<<workspace.pt = pta^; edit (@workspace.pt)
<<on addCatsTo (adrpost)
<<local (adrarg, name, adrcats = @adrpost^.categories)
<<if defined (adrcats^)
<<local (adr)
<<local (id = number (nameof (adrpost^)))
<<for adr in @adrdata^.categories
<<if adr^.storyList contains id
<<adr^.storyList = adr^.storyList - {id}
<<adr^.flDirty = true
<<delete (adrcats)
<<for adrarg in @pta^.radioResponder.postArgs
<<name = nameof (adrarg^)
<<if name beginswith "cat:"
<<local (catname = string.nthfield (name, ":", 2))
<<if not defined (adrcats^)
<<new (tabletype, adrcats)
<<adrcats^.[catname] = true
<<bundle //see which RSS files need to be rebuilt
<<local (adr)
<<for adr in @adrdata^.categories
<<local (fldirty = false)
<<local (id = number (nameof (adrpost^)))
<<if defined (adrcats^.[nameof (adr^)]) //it's part of the category
<<if not (adr^.storyList contains id)
<<adr^.storyList = adr^.storyList + {id}
<<fldirty = true
<<else //it's not part of the category
<<if adr^.storyList contains id
<<adr^.storyList = adr^.storyList - {id}
<<fldirty = true
<<if fldirty //don't clear it here
<<adr^.flDirty = true
<<system.temp.radio.flPublishCategoryRss = true
<<if adrpost != nil
<<addCatsTo (adrpost)
if adrdata^.prefs.flCategoryCheckboxes {
<<bundle //Edit/Create buttons version
<<local (editbuttonimg = radio.images.systemImageRef ("icons/edit2", flFileUrl:pta^.radioResponder.flSameMachine))
<<local (createbuttonimg = radio.images.systemImageRef ("icons/create", flFileUrl:pta^.radioResponder.flSameMachine))
<<local (editbuttontext = "<a href=\"" + radio.data.systemUrls.categories + "\" title=\"" + radio.string.getlocalizedstring ("weblogPostForm.editCategoryToolTip") + "\">" + editbuttonimg + "</a>")
<<local (createbuttontext = "<a href=\"" + radio.data.systemUrls.newCategory + "?referer=" + string.urlEncode ("http://" + pta^.host + pta^.uri) + "\" title=\"" + radio.string.getlocalizedstring ("weblogPostForm.createCategoryToolTip") + "\">" + createbuttonimg + "</a>")
<<add ("<table style=\"padding-top:4\" cellspacing=\"0\" border=\"0\"><tr><td valign=\"middle\" class=\"small\"><b>" + radio.string.getlocalizedstring ("weblogPostForm.categoriesPrompt") + "</b></td><td> " + editbuttontext + " " + createbuttontext + "</td></tr></table>")
<<local (spyglassimg = radio.images.systemImageRef ("qbullet/search", flFileUrl:pta^.radioResponder.flSameMachine))
<<local (spyglasstext = "<a href=\"" + radio.data.systemUrls.categories + "\" title=\"" + radio.string.getlocalizedstring ("weblogPostForm.categorySpyglassToolTip") + "\">" + spyglassimg + "</a>")
local (newurl);
bundle { //get newurl
local (args);
new (tabletype, @args);
args.referer = "http://" + pta^.host + pta^.uri;
newurl = radio.data.systemUrls.newCategory + "?" + webserver.encodeargs (@args)};
local (newlink = "<a href=\"" + newurl + "\" title=\"" + radio.string.getlocalizedstring ("weblogPostForm.newCategoryLinkToolTip") + "\">" + radio.string.getlocalizedstring ("weblogPostForm.newCategoryLinkText") + "</a>");
add ("<div class=\"small\"><b>" + radio.string.getlocalizedstring ("weblogPostForm.categoriesPrompt") + "</b> (" + newlink + ")<br></div>");
add ("<table cellpadding=\"0\" cellspacing=\"5\" border=\"0\">"); indentlevel++;
add ("<tr><td>"); indentlevel++;
add ("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"); indentlevel++;
add ("<tr>"); indentlevel++;
add ("<td><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"); indentlevel++;
add (radio.html.addCategoryCheckboxes (adrdata, adrpost, bgcolor));
add ("</td></table>"); indentlevel--;
<<add ("<td valign=\"bottom\"><div class=\"small\"><b> " + spyglasstext + "</b></div></td>")
add ("</tr>"); indentlevel--;
add ("</table>"); indentlevel--;
add ("</td></tr>"); indentlevel++;
add ("</table>"); indentlevel--};
return (htmltext)}
<<bundle //testing
<<local (adrdata = radio.weblog.init ())
<<local (adrpost = @adrdata^.posts.["00000008"])
<<categoryCheckboxes (adrdata, adrpost)
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.