diff --git a/NT/elogd.vcproj b/NT/elogd.vcproj index 93b07fb4..dee18e65 100755 --- a/NT/elogd.vcproj +++ b/NT/elogd.vcproj @@ -175,6 +175,12 @@ + + + diff --git a/src/elogd.c b/src/elogd.c index aebb0f82..c0145ddd 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -9270,8 +9270,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL preset_text = getcfg(lbs->name, "Preset text", str, sizeof(str)); if (preset_text) { - /* don't use preset text if editing */ - if (bedit || bduplicate) + /* don't use preset text if editing or replying */ + if (bedit || bduplicate || breply) preset_text = FALSE; /* user preset on reedit only if preset is under condition */ @@ -14173,7 +14173,8 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode, char attrib[MAX_N_ATTR][NAME_LENGTH], int n_attr, char *text, BOOL show_text, char attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], char *encoding, - BOOL select, int *n_display, char *locked_by, int highlight, regex_t * re_buf) + BOOL select, int *n_display, char *locked_by, int highlight, regex_t * re_buf, + int highlight_mid) { char str[NAME_LENGTH], ref[256], thumb_name[256], *nowrap, sclass[80], format[256], file_name[MAX_PATH_LENGTH], *slist, *svalue; @@ -14192,10 +14193,17 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode, sprintf(ref + strlen(ref), "%s/%d", lbs->name_enc, message_id); if (strieq(mode, "Summary")) { - if (number % 2 == 1) - strcpy(sclass, "list1"); - else - strcpy(sclass, "list2"); + if (highlight_mid == message_id) { + if (number % 2 == 1) + strcpy(sclass, "list1h"); + else + strcpy(sclass, "list2h"); + } else { + if (number % 2 == 1) + strcpy(sclass, "list1"); + else + strcpy(sclass, "list2"); + } } else if (strieq(mode, "Full")) strcpy(sclass, "list1"); else if (strieq(mode, "Threaded")) { @@ -14205,10 +14213,17 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode, else strcpy(sclass, "threadreply"); } else { - if (level == 0) - strcpy(sclass, "thread"); - else - strcpy(sclass, "threadreply"); + if (highlight_mid == message_id) { + if (level == 0) + strcpy(sclass, "threadh"); + else + strcpy(sclass, "threadreplyh"); + } else { + if (level == 0) + strcpy(sclass, "thread"); + else + strcpy(sclass, "threadreply"); + } } } @@ -14777,7 +14792,7 @@ void display_line(LOGBOOK * lbs, int message_id, int number, char *mode, void display_reply(LOGBOOK * lbs, int message_id, int printable, int expand, int n_line, int n_attr_disp, char disp_attr[MAX_N_ATTR + 4][NAME_LENGTH], BOOL show_text, - int level, int highlight, regex_t * re_buf) + int level, int highlight, regex_t * re_buf, int highlight_mid) { char *date, *text, *in_reply_to, *reply_to, *encoding, *locked_by, *attachment, *attrib, *p; int status, size; @@ -14815,13 +14830,14 @@ void display_reply(LOGBOOK * lbs, int message_id, int printable, display_line(lbs, message_id, 0, "threaded", expand, level, printable, n_line, FALSE, date, in_reply_to, reply_to, n_attr_disp, disp_attr, NULL, (void *) attrib, lbs->n_attr, text, show_text, - NULL, encoding, 0, NULL, locked_by, highlight, &re_buf[0]); + NULL, encoding, 0, NULL, locked_by, highlight, &re_buf[0], + highlight_mid); if (reply_to[0]) { p = reply_to; do { display_reply(lbs, atoi(p), printable, expand, n_line, n_attr_disp, - disp_attr, show_text, level + 1, highlight, &re_buf[0]); + disp_attr, show_text, level + 1, highlight, &re_buf[0], highlight_mid); while (*p && isdigit(*p)) p++; @@ -15946,10 +15962,10 @@ void highlight_searchtext(regex_t * re_buf, char *src, char *dst, int hidden) void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, BOOL default_page, char *info) { - int i, j, n, index, size, status, d1, m1, y1, d2, m2, y2, n_line, flags; - int current_year, current_month, current_day, printable, n_logbook, + int i, j, n, index, size, status, d1, m1, y1, d2, m2, y2, n_line, flags, + current_year, current_month, current_day, printable, n_logbook, n_display, reverse, n_attr_disp, total_n_msg, n_msg, search_all, message_id, - n_page, i_start, i_stop, in_reply_to_id; + n_page, i_start, i_stop, in_reply_to_id, page_mid; char date[80], attrib[MAX_N_ATTR][NAME_LENGTH], disp_attr[MAX_N_ATTR + 4][NAME_LENGTH], *list, *text, *text1, in_reply_to[80], reply_to[MAX_REPLY_TO * 10], attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], encoding[80], locked_by[256], @@ -16090,11 +16106,17 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, BOOL defa reverse = atoi(str); } + /* get message ID from "list" command */ + if (isparam("id")) + page_mid = atoi(getparam("id")); + else + page_mid = 0; + /* default mode */ strcpy(mode, "Summary"); show_attachments = FALSE; - if (past_n || last_n || page_n || default_page) { + if (past_n || last_n || page_n || page_mid || default_page) { /* for page display, get mode from config file */ if (getcfg(lbs->name, "Display Mode", str, sizeof(str))) strcpy(mode, str); @@ -16638,20 +16660,32 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, BOOL defa qsort(msg_list, n_msg, sizeof(MSG_LIST), reverse ? msg_compare_reverse : msg_compare); + /*---- search page for specific message ----*/ + + if (getcfg(lbs->name, "Entries per page", str, sizeof(str))) + n_page = atoi(str); + else + n_page = 20; + if (isparam("npp")) + n_page = atoi(getparam("npp")); + + if (page_mid) { + default_page = 0; + + for (i = 0; i < n_msg; i++) + if (msg_list[i].lbs->el_index[msg_list[i].index].message_id == page_mid) + break; + + if (iname, "Entries per page", str, sizeof(str))) - n_page = atoi(str); - else - n_page = 20; - if (isparam("npp")) - n_page = atoi(getparam("npp")); - if (default_page) page_n = reverse ? 1 : (n_msg - 1) / n_page + 1; @@ -17393,16 +17427,6 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, BOOL defa /*---- add highlighting for searched subtext ----*/ if (isparam("subtext")) { - /* - strcpy(str, getparam("subtext")); - for (i = 0; i < (int) strlen(str); i++) - str[i] = toupper(str[i]); - - for (i = 0; i < (int) strlen(text); i++) - text1[i] = toupper(text[i]); - text1[i] = 0; - */ - highlight_searchtext(re_buf, text, text1, strieq(encoding, "plain") || strieq(encoding, "ELCode") || !strieq(mode, "Full")); strlcpy(text, text1, TEXT_SIZE); @@ -17424,14 +17448,14 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, BOOL defa show_attachments, date, in_reply_to, reply_to, n_attr_disp, disp_attr, disp_attr_link, attrib, lbs->n_attr, text, show_text, attachment, encoding, isparam("select") ? atoi(getparam("select")) : 0, - &n_display, locked_by, 0, re_buf); + &n_display, locked_by, 0, re_buf, page_mid); if (threaded) { if (reply_to[0] && expand > 0) { p = reply_to; do { display_reply(msg_list[index].lbs, atoi(p), printable, expand, n_line, - n_attr_disp, disp_attr, show_text, 1, 0, re_buf); + n_attr_disp, disp_attr, show_text, 1, 0, re_buf, page_mid); while (*p && isdigit(*p)) p++; @@ -17484,7 +17508,7 @@ void show_elog_list(LOGBOOK * lbs, INT past_n, INT last_n, INT page_n, BOOL defa /*------------------------------------------------------------------*/ -void show_elog_thread(LOGBOOK * lbs, int message_id) +void show_elog_thread(LOGBOOK * lbs, int message_id, int highlight_mid) { int i, size, status, in_reply_to_id, head_id, n_display, n_attr_disp; char date[80], attrib[MAX_N_ATTR][NAME_LENGTH], *text, in_reply_to[80], @@ -17538,12 +17562,12 @@ void show_elog_thread(LOGBOOK * lbs, int message_id) 0, "Threaded", 1, 0, FALSE, 0, FALSE, date, in_reply_to, reply_to, n_attr_disp, disp_attr, NULL, attrib, lbs->n_attr, text, FALSE, - attachment, encoding, 0, &n_display, locked_by, message_id, NULL); + attachment, encoding, 0, &n_display, locked_by, message_id, NULL, highlight_mid); if (reply_to[0]) { p = reply_to; do { - display_reply(lbs, atoi(p), FALSE, 1, 0, n_attr_disp, disp_attr, FALSE, 1, message_id, NULL); + display_reply(lbs, atoi(p), FALSE, 1, 0, n_attr_disp, disp_attr, FALSE, 1, message_id, NULL, highlight_mid); while (*p && isdigit(*p)) p++; @@ -19472,17 +19496,15 @@ void show_elog_entry(LOGBOOK * lbs, char *dec_path, char *command) strcpy(str, loc(menu_item[i])); url_encode(str, sizeof(str)); - if (i < n - 1) { - if (strieq(menu_item[i], "list")) - rsprintf(" %s |\n", loc(menu_item[i])); - else - rsprintf(" %s |\n", message_id, str, loc(menu_item[i])); - } else { - if (strieq(menu_item[i], "list")) - rsprintf(" %s \n", loc(menu_item[i])); - else - rsprintf(" %s \n", message_id, str, loc(menu_item[i])); - } + if (strieq(menu_item[i], "list")) + rsprintf(" %s \n", message_id, loc(menu_item[i])); + else + rsprintf(" %s \n", message_id, str, loc(menu_item[i])); + + if (i < n - 1) + rsprintf("|\n"); + else + rsprintf("\n"); } } @@ -19565,7 +19587,7 @@ void show_elog_entry(LOGBOOK * lbs, char *dec_path, char *command) /*---- message ----*/ if (reply_tag[0] || orig_tag[0]) - show_elog_thread(lbs, message_id); + show_elog_thread(lbs, message_id, 0); if (message_error == EL_EMPTY) rsprintf("%s\n", loc("Logbook is empty")); diff --git a/themes/default/default.css b/themes/default/default.css index 71eccb32..29cc2302 100755 --- a/themes/default/default.css +++ b/themes/default/default.css @@ -282,6 +282,24 @@ td { text-align:center; } +.list1h { + border:1px solid #308000; + border-top:1px solid white; + border-left:1px solid white; + background-color:#DDEEBB; + text-align:center; + font-weight:bold; +} + +.list2h { + border:1px solid #808040; + border-top:1px solid white; + border-left:1px solid white; + background-color:#FFFFB0; + text-align:center; + font-weight:bold; +} + /* attachment line */ .attachment { @@ -309,6 +327,24 @@ td { text-align:left; } +.threadh { + border:1px solid #308000; + border-top:1px solid white; + border-left:1px solid white; + background-color:#DDEEBB; + text-align:left; + font-weight:bold +} + +.threadreplyh { + border:1px solid #808040; + border-top:1px solid white; + border-left:1px solid white; + background-color:#FFFFB0; + text-align:left; + font-weight:bold +} + /* attribute names and values on single message page */ .attribhead { background-color:#E0E0A0;