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

system.verbs.builtins.radio.shortcuts.editor

on editor () {
	<<Changes
		<<9/17/04; 1:53:28 PM by SK
			<<Bug fix to name the form and allow better compatibility with the WYSIWYG text editor
		<<10/12/02; 3:06:24 AM by JES
			<<Localized user interface elements.
		<<4/7/02; 6:29:22 PM by DW
			<<Latin-to-Mac stuff.
		<<4/2/02; 6:59:23 PM by DW
			<<Created.
	local (adrdata = radio.weblog.init ());
	
	local (pta = html.getpagetableaddress ());
	pta^.editingToolName = adrdata^.prefs.editingToolName;
	pta^.title = radio.string.getlocalizedstring ("shortcuts.title");
	<<scratchpad.params = pta^
	
	local (htmltext = "", indentlevel = 0);
	on add (s) {
		htmltext = htmltext + (string.filledstring ("\t", indentlevel) + s + "\r\n");};
	
	local (adrtable = @adrdata^.shortcuts.personal, ctperpage = 25);
	local (initialname = "", initialvalue = "", buttonname = "shortcuts.newButton", nameitembeingedited = "");
	
	on delatinize (s) {
		if system.environment.isMac {
			return (string.latinToMac (s))}
		else {
			return (s)}};
	if pta^.method == "POST" {
		local (args = pta^.radioresponder.postargs);
		<<scratchpad.args = args; edit (@scratchpad.args)
		if defined (args.deleteShortcuts) {
			local (adr);
			delete (@args.deleteShortcuts);
			for adr in @args {
				delete (@adrtable^.[string.urldecode (delatinize (nameof (adr^)))])}}
		else {
			local (flchanged = false);
			if system.environment.isMac { //convert from Latin to Mac
				args.initialName = string.latinToMac (args.initialName);
				args.shortcutName = string.latinToMac (args.shortcutName);
				args.itemtext = string.latinToMac (args.itemtext)};
			if args.shortcutName != args.initialName {
				if args.initialName != "" {
					if defined (adrtable^.[args.initialName]) {
						delete (@adrtable^.[args.initialName]);
						flchanged = true}}};
			if args.shortcutName != "" {
				adrtable^.[args.shortcutName] = args.itemtext; //args.shortcutValue
				flchanged = true};
			if flchanged {
				radio.shortcuts.merge ()}}};
	if pta^.method == "GET" {
		if defined (pta^.radioresponder.getargs.itemToEdit) {
			initialname = pta^.radioresponder.getargs.itemToEdit;
			initialvalue = delatinize (adrtable^.[initialname]);
			buttonname = "shortcuts.editButton";
			nameitembeingedited = initialname}};
	
	bundle { //add intro, helplink
		local (helplink = radio.userInterface.helpLink ("The Shortcuts command"));
		add ("<p>" + radio.string.getlocalizedstring ("shortcuts.intro") + " " + helplink + "</p>")};
	bundle { //add new shortcut form
		<<add ("<form method=\"POST\">"); indentlevel++
		add (html.editor.formStart ("itemtext", pta:pta, name:"editPostForm")); indentlevel++;
		add ("<input type=\"hidden\" name=\"initialName\" value=\"" + initialname + "\">");
		
		add ("<table cellspacing=\"0\" cellpadding=\"5\">"); indentlevel++;
		add ("<tr><td>" + radio.string.getLocalizedString ("shortcuts.namePrompt") + "</td><td><input name=\"shortcutName\" size=\"60\" value=\"" + initialname + "\"></td></tr>");
		<<add ("<tr><td valign=\"top\">Value:</td><td><textarea name=\"shortcutValue\" rows=\"7\" cols=\"55\">" + initialvalue + "</textarea></td></tr>")
		add ("<tr><td valign=\"top\">" + radio.string.getLocalizedString ("shortcuts.valuePrompt") + "</td><td width=\"550\">" + radio.userInterface.editorbox (radio.html.translateToEntities (initialvalue), ctcols:40) + "</td></tr>");
		add ("<tr><td> </td><td valign=\"top\"><input type=\"submit\" value=\"" + radio.string.getlocalizedstring (buttonname) + "\"></td></tr>");
		add ("</table>"); indentlevel--;
		add ("</form>"); indentlevel--};
	bundle { //list the existing shortcuts
		add ("<p>" + radio.string.getlocalizedstring ("shortcuts.shortcutListIntro") + "</p>");
		if sizeof (adrtable^) > 0 {
			local (editbuttonimg = radio.images.systemImageRef ("icons/editbutton", flFileUrl:pta^.radioResponder.flSameMachine));
			
			local (ctpages);
			bundle { //set ctpages
				ctpages = sizeof (adrtable^) / ctperpage;
				if sizeof (adrtable^) > (ctpages * ctperpage) {
					ctpages++}};
			
			local (pagenum);
			bundle { //set pagenum
				pagenum = 1;
				try {pagenum = number (pta^.radioResponder.getArgs.page)};
				if pagenum < 1 {
					pagenum = 1}};
			
			local (pagenumstring = "");
			bundle { //set pagenumstring
				if ctpages > 1 {
					local (s = "<b>Pages:</b> ", i);
					for i = 1 to ctpages {
						if i == pagenum {
							s = s + "<b>" + i + "</b> "}
						else {
							s = s + "<a href=\"?page=" + i + "\">" + i + "</a> "}};
					pagenumstring = s}};
			add ("<p>" + pagenumstring + "</p>");
			
			local (i);
			add ("<form method=\"POST\">"); indentlevel++;
			add ("<table cellspacing=\"0\" cellpadding=\"0\"><tr bgcolor=\"" + radio.data.htmlColors.framecolor + "\"><td>"); indentlevel++;
			add ("<table cellpadding=\"5\" cellspacing=\"1\" border=\"0\">"); indentlevel++;
			bundle { //add column headers
				add ("<tr bgcolor=\"#" + gainsboro + "\"><td> </td><td><b>" + radio.string.getLocalizedString ("shortcuts.whatYouType") + "</b></td><td><b>" + radio.string.getLocalizedString ("shortcuts.whatYouGet") + string.filledstring (" ", 65) + "</b></td><td> </td></tr>")};
			local (ixlast = (pagenum * ctperpage));
			if ixlast > sizeof (adrtable^) {
				ixlast = sizeof (adrtable^)};
			local (ixfirst = ((pagenum - 1) * ctperpage) + 1);
			if ixfirst < 1 {
				ixfirst = 1};
			local (adritem, name, checkbox, urlencodedname);
			for i = ixfirst to ixlast {
				adritem = @adrtable^ [i];
				name = nameof (adritem^);
				urlencodedname = string.urlencode (name);
				
				if name == nameitembeingedited {
					add ("<tr bgcolor=\"#" + radio.data.htmlColors.highlightColor + "\">"); indentlevel++}
				else {
					add ("<tr bgcolor=\"#" + radio.data.htmlColors.cellBgColor + "\">"); indentlevel++};
				
				bundle { //set checkbox
					checkbox = "<input type=\"checkbox\" name=\"" + urlencodedname + "\" value=xxx>"};
				editurl = "?itemToEdit=" + urlencodedname + "&page=" + pagenum + "&cacheConfuser=" + random (1, 32767);
				add ("<td valign=\"top\">" + checkbox + "</td><td valign=\"top\" nowrap>\"" + name + "\" </td><td valign=\"top\">" + adritem^ + " </td><td valign=\"top\"><a href=\"" + editurl + "\">" + editbuttonimg + "</a></td>");
				add ("</tr>"); indentlevel--};
			
			add ("</table>"); indentlevel--;
			add ("</td></tr></table>"); indentlevel--;
			add ("<br><input type=\"submit\" name=\"deleteShortcuts\" value=\"" + radio.string.getlocalizedstring ("shortcuts.deleteButton") + "\">");
			add ("</form>"); indentlevel--}
		else {
			add ("<p><i>" + radio.string.getlocalizedstring ("shortcuts.personalTableIsEmpty") + "</i></p>")}};
	
	return (htmltext)}
<<bundle //test code
	<<html.setpagetableaddress (@scratchpad.params)
	<<editor ()



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.