From 68a07bf03b7624c9924065cce9ffa45497225834 Mon Sep 17 00:00:00 2001 From: Akinori Ito Date: Thu, 8 Nov 2001 05:14:08 +0000 Subject: Initial revision --- map.c | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 map.c (limited to 'map.c') diff --git a/map.c b/map.c new file mode 100644 index 0000000..906d3ba --- /dev/null +++ b/map.c @@ -0,0 +1,222 @@ +/* + * client-side image maps + */ +#include "fm.h" + +#ifdef MENU_MAP +char * +follow_map_menu(Buffer * buf, struct parsed_tagarg *arg, int x, int y) +{ + MapList *ml; + char *name; + TextListItem *t, *s; + int i, n, selected = -1; + char **label; + + name = tag_get_value(arg, "link"); + if (name == NULL) + return NULL; + + for (ml = buf->maplist; ml != NULL; ml = ml->next) { + if (!Strcmp_charp(ml->name, name)) + break; + } + if (ml == NULL) + return NULL; + + for (n = 0, t = ml->urls->first; t != NULL; n++, t = t->next); + if (n == 0) + return NULL; + label = New_N(char *, n + 1); + for (i = 0, t = ml->urls->first, s = ml->alts->first; t != NULL; + i++, t = t->next, s = s->next) + label[i] = *s->ptr ? s->ptr : t->ptr; + label[n] = NULL; + + optionMenu(x, y, label, &selected, 0, NULL); + + if (selected >= 0) { + for (i = 0, t = ml->urls->first; t != NULL; i++, t = t->next) + if (i == selected) + return t->ptr; + } + return NULL; +} + +#else +char *map1 = "Image map links\ +

Image map links

"; + +Buffer * +follow_map_panel(Buffer * buf, struct parsed_tagarg *arg) +{ + Str mappage; + MapList *ml; + char *name; + TextListItem *t, *s; + ParsedURL pu; + + name = tag_get_value(arg, "link"); + if (name == NULL) + return NULL; + + for (ml = buf->maplist; ml != NULL; ml = ml->next) { + if (!Strcmp_charp(ml->name, name)) + break; + } + if (ml == NULL) + return NULL; + + mappage = Strnew_charp(map1); + for (t = ml->urls->first, s = ml->alts->first; t != NULL; + t = t->next, s = s->next) { + parseURL2(t->ptr, &pu, baseURL(buf)); + Strcat_charp(mappage, "ptr)); + Strcat_charp(mappage, "\">"); + Strcat_charp(mappage, htmlquote_str(s->ptr)); + Strcat_charp(mappage, " "); + Strcat_charp(mappage, htmlquote_str(t->ptr)); + Strcat_charp(mappage, "
\n"); + } + Strcat_charp(mappage, ""); + + return loadHTMLString(mappage); +} +#endif + +/* append frame URL */ +static void +append_frame_info(Str html, struct frameset *set, int level) +{ + char *q; + int i, j; + + if (!set) + return; + + for (i = 0; i < set->col * set->row; i++) { + union frameset_element frame = set->frame[i]; + if (frame.element != NULL) { + switch (frame.element->attr) { + case F_UNLOADED: + case F_BODY: + if (frame.body->url == NULL) + break; + for (j = 0; j < level; j++) + Strcat_charp(html, " "); + q = htmlquote_str(frame.body->url); + Strcat_charp(html, ""); + Strcat_charp(html, htmlquote_str(frame.body->name)); + Strcat_charp(html, " "); + Strcat_charp(html, q); + Strcat_charp(html, "\n"); + break; + case F_FRAMESET: + append_frame_info(html, frame.set, level + 1); + break; + } + } + } +} + +/* + * information of current page and link + */ +Buffer * +page_info_panel(Buffer * buf) +{ + Str tmp = Strnew_size(1024); + Anchor *a; + Str s; + ParsedURL pu; + TextListItem *ti; + struct frameset *f_set = NULL; + int all; + + Strcat_charp(tmp, "Information about current page"); + Strcat_charp(tmp, "

Information about current page

"); + if (buf == NULL) + goto end; + Strcat_charp(tmp, "
Title"); + Strcat_charp(tmp, htmlquote_str(buf->buffername)); + Strcat_charp(tmp, "
Current URL"); + Strcat_charp(tmp, htmlquote_str(parsedURL2Str(&buf->currentURL)->ptr)); + Strcat_charp(tmp, "
Document Type"); + if (buf->real_type) + Strcat_charp(tmp, buf->real_type); + else + Strcat_charp(tmp, "unknown"); + Strcat_charp(tmp, "
Last Modified"); + Strcat_charp(tmp, htmlquote_str(last_modified(buf))); +#ifdef JP_CHARSET + Strcat_charp(tmp, "
Document Code"); + Strcat_charp(tmp, code_to_str(buf->document_code)); +#endif /* JP_CHARSET */ + Strcat_charp(tmp, "
Number of line"); + all = buf->allLine; + if (all == 0 && buf->lastLine) + all = buf->lastLine->linenumber; + Strcat(tmp, Sprintf("%d", all)); + Strcat_charp(tmp, "
Transferred byte"); + Strcat(tmp, Sprintf("%d", buf->trbyte)); + + a = retrieveCurrentAnchor(buf); + if (a != NULL) { + parseURL2(a->url, &pu, baseURL(buf)); + s = parsedURL2Str(&pu); + Strcat_charp(tmp, "
URL of current anchor"); + Strcat_charp(tmp, htmlquote_str(s->ptr)); + } + a = retrieveCurrentImg(buf); + if (a != NULL) { + parseURL2(a->url, &pu, baseURL(buf)); + s = parsedURL2Str(&pu); + Strcat_charp(tmp, "
URL of current image"); + Strcat_charp(tmp, "ptr)); + Strcat_charp(tmp, "\">"); + Strcat_charp(tmp, htmlquote_str(s->ptr)); + Strcat_charp(tmp, ""); + } + a = retrieveCurrentForm(buf); + if (a != NULL) { + s = Strnew_charp(form2str((FormItemList *) a->url)); + Strcat_charp(tmp, "
Method/type of current form"); + Strcat_charp(tmp, htmlquote_str(s->ptr)); + } + Strcat_charp(tmp, "
\n"); + if (buf->document_header != NULL) { + Strcat_charp(tmp, "
\n"); + Strcat_charp(tmp, "

Header information

\n"); + for (ti = buf->document_header->first; ti != NULL; ti = ti->next) { + Strcat_charp(tmp, htmlquote_str(ti->ptr)); + Strcat_charp(tmp, "
"); + } + } + if (buf->frameset != NULL) + f_set = buf->frameset; + else if (buf->bufferprop & BP_FRAME && + buf->nextBuffer != NULL && + buf->nextBuffer->frameset != NULL) + f_set = buf->nextBuffer->frameset; + + if (f_set) { + Strcat_charp(tmp, "

Frame information

");
+	append_frame_info(tmp, f_set, 0);
+	Strcat_charp(tmp, "
"); + } +#ifdef USE_SSL + if (buf->ssl_certificate == NULL) + goto end; + Strcat_charp(tmp, "

SSL certificate

\n"); + Strcat_charp(tmp, "
\n");
+    Strcat_charp(tmp, buf->ssl_certificate);
+    Strcat_charp(tmp, "
\n"); +#endif + end: + Strcat_charp(tmp, ""); + return loadHTMLString(tmp); +} -- cgit v1.2.3