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.