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

system.verbs.builtins.radio.weblog.viewCategories

on viewCategories () {
	<<Changes
		<<1/15/02; 12:11:24 AM by JES
			<<Only add the last upload date if the category has been uploaded (published) at least once.
		<<1/6/02; 4:38:12 AM by JES
			<<Added table css classes.
		<<12/8/01; 5:36:23 PM by JES
			<<Use a fully-qualified URL for the referer searchArg, since some browsers won't redirect properly with only the path.
		<<12/2/01; 10:58:11 PM by JES
			<<Changed help link to link to the correct page.
		<<11/14/01; 10:08:00 AM by DW
			<<Localized.
		<<2/24/01; 8:49:25 PM by PBS
			<<Help link.
			<<Terminology: stories, not items.
		<<1/21/01; 5:30:06 PM by DW
			<<Allow the user to delete categories from this page.
		<<1/19/01; 3:27:47 PM by PBS
			<<Change site URL from /myUserLand/ to /UserLand/.
		<<1/13/01; 8:21:55 PM by DW
			<<Change link on XML icon, point to the local viewXmlSource page, use local resources.
		<<1/11/01; 5:47:43 PM by PBS
			<<Add a link for creating a new category.
		<<1/11/01; 4:48:10 PM by PBS
			<<No more Edit With Radio button for editing categories.
			<<The description changed -- it doesn't mention the outliner. It tells how to edit a category (by clicking on its name).
			<<Get the category's display name, which may not be the same as the table's name.
	local (pta = html.getpagetableaddress ());
	pta^.title = radio.string.getlocalizedstring ("categories.title");
	local (xmlImg = radio.images.systemImageRef ("icons/xml"));
	local (helplink = radio.userinterface.helplink ("The Categories page"));
	local (adrdata = radio.weblog.init ());
	local (now = clock.now ());
	local (htmltext = "", indentlevel = 0);
	on add (s) {
		htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"};
	if pta^.method == "POST" {
		local (args);
		new (tabletype, @args);
		webserver.parseargs (pta^.requestBody, @args);
		<<scratchpad.args = args; edit (@scratchpad.args)
		local (adr, catname);
		for adr in @args {
			catname = nameof (adr^);
			adrcat = @adrdata^.categories.[catname];
			if defined (adrcat^) {
				adrdata^.trash.[catname] = adrcat^;
				delete (adrcat)}}};
	add ("<form method=\"POST\">"); indentlevel++;
	bundle { //add the Delete button
		add ("<table align=\"right\" cellspacing=\"0\" cellpadding=\"1\"><tr><td valign=\"top\">  <input type=\"submit\" value=\"" + radio.string.getlocalizedstring ("categories.deleteButton") + "\"></td></tr></table>")};
	bundle { //add intro
		local (args);
		new (tabletype, @args);
		args.referer = "http://" + pta^.host + pta^.uri;
		local (t);
		new (tabletype, @t);
		t.newcategoryurl = "editCategory?" + webserver.encodeargs (@args);
		add ("<p>" + radio.string.getlocalizedstring ("categories.intro", @t) + " " + helplink + "<p>")};
	add ("<table class=\"dwsFrameTable\" cellspacing=\"0\" cellpadding=\"0\"><tr bgcolor=\"" + radio.data.htmlColors.framecolor + "\"><td>"); indentlevel++;
	add ("<table class=\"dwsTableCell\" border=\"0\" cellspacing=\"1\" cellpadding=\"5\">"); indentlevel++;
	local (adr);
	for adr in @adrdata^.categories {
		local (catname = nameOf (adr^));
		add ("<tr bgcolor=\"" + radio.data.htmlColors.cellbgcolor + "\">"); indentlevel++;
		bundle { //add checkbox
			add ("<td class=\"dwsTableCell\" valign=\"top\"><input type=\"checkbox\" name=\"" + catname + "\" value=" + "xxx " + "></td>")};
		local (url);
		bundle { //set url
			local (args);
			new (tabletype, @args);
			args.catname = catname;
			args.referer = "http://" + pta^.host + pta^.uri;
			url = "editCategory" + "?" + webserver.encodeArgs (@args)};
		add ("<td class=\"dwsTableCell\" valign=\"top\" nowrap><a href=\"" + url + "\">" + adr^.displayName + "</a></td>");
		add ("<td class=\"dwsTableCell\" valign=\"top\">" + adr^.description + "</td>");
		bundle { //add last update
			local (s = " ");
			if defined (adr^.dateLastUpload) {
				if adr^.dateLastUpload != date (0) { //1/15/02 JES: only add the date if the category has been uploaded at least once
					local (day, month, year, hour, minute, second, nowday, nowmonth, nowyear);
					date.get (adr^.dateLastUpload, @day, @month, @year, @hour, @minute, @second);
					date.get (now, @nowday, @nowmonth, @nowyear, @hour, @minute, @second);
					if (day == nowday) and (month == nowmonth) and (year == nowyear) {
						s = date.timestring (adr^.dateLastUpload)}
					else {
						s = date.shortstring (adr^.dateLastUpload)}}};
			add ("<td class=\"dwsTableCell\" nowrap valign=\"top\"><center>" + s + "</center></td>")};
		bundle { //add item count
			local (s = " ");
			if defined (adr^.storyList) {
				s = sizeof (adr^.storyList)};
			add ("<td class=\"dwsTableCell\" nowrap valign=\"top\" align=\"right\">" + s + "</td>")};
		bundle { //add XML button
			local (s = " ");
			if defined (adr^.rssUrl) {
				<<local (args); new (tabletype, @args); args.catname = nameof (adr^)
				<<local (url = "viewXmlSource.wsf?" + webserver.encodeargs (@args))
				s = "<a href=\"" + adr^.rssUrl + "\" title=\"" + radio.data.strings.xmlToolTip + "\">" + xmlImg + "</a>"};
			add ("<td class=\"dwsTableCell\" nowrap valign=\"top\">" + s + "</td>")};
		add ("</tr>"); indentlevel--};
	add ("</table>"); indentlevel--;
	add ("</table>"); indentlevel--;
	add ("</form>"); indentlevel--;
	return (htmltext)}
<<bundle //test code
	<<viewCategories ()



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.