search dialog improvements, main toolbar overhaul

This commit is contained in:
Andrew Dolgov 2006-05-21 05:28:51 +01:00
parent ea0e4caf80
commit 86b682ce2f
7 changed files with 223 additions and 124 deletions

View File

@ -146,7 +146,9 @@
$script_dt_add = get_script_dt_add(); $script_dt_add = get_script_dt_add();
print "<script type=\"text/javascript\" src=\"functions.js?$script_dt_add\"></script> print "
<script type=\"text/javascript\" src=\"prototype.js\"></script>
<script type=\"text/javascript\" src=\"functions.js?$script_dt_add\"></script>
<script type=\"text/javascript\" src=\"feedlist.js?$script_dt_add\"></script> <script type=\"text/javascript\" src=\"feedlist.js?$script_dt_add\"></script>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
<!--[if gte IE 5.5000]> <!--[if gte IE 5.5000]>
@ -552,7 +554,9 @@
$script_dt_add = get_script_dt_add(); $script_dt_add = get_script_dt_add();
print "<script type=\"text/javascript\" src=\"functions.js?$script_dt_add\"></script> print "
<script type=\"text/javascript\" src=\"prototype.js\"></script>
<script type=\"text/javascript\" src=\"functions.js?$script_dt_add\"></script>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
</head><body $rtl_tag>"; </head><body $rtl_tag>";
@ -673,15 +677,12 @@
if ($op == "viewfeed") { if ($op == "viewfeed") {
$feed = db_escape_string($_GET["feed"]); $feed = db_escape_string($_GET["feed"]);
$skip = db_escape_string($_GET["skip"]);
$subop = db_escape_string($_GET["subop"]); $subop = db_escape_string($_GET["subop"]);
$view_mode = db_escape_string($_GET["view"]); $view_mode = db_escape_string($_GET["view_mode"]);
$limit = db_escape_string($_GET["limit"]); $limit = db_escape_string($_GET["limit"]);
$cat_view = db_escape_string($_GET["cat"]); $cat_view = db_escape_string($_GET["cat"]);
$next_unread_feed = db_escape_string($_GET["nuf"]); $next_unread_feed = db_escape_string($_GET["nuf"]);
if (!$skip) $skip = 0;
if ($subop == "undefined") $subop = ""; if ($subop == "undefined") $subop = "";
print "<html><head> print "<html><head>
@ -741,6 +742,7 @@
$script_dt_add = get_script_dt_add(); $script_dt_add = get_script_dt_add();
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
<script type=\"text/javascript\" src=\"prototype.js\"></script>
<script type=\"text/javascript\" src=\"functions.js?$script_dt_add\"></script> <script type=\"text/javascript\" src=\"functions.js?$script_dt_add\"></script>
<script type=\"text/javascript\" src=\"viewfeed.js?$script_dt_add\"></script> <script type=\"text/javascript\" src=\"viewfeed.js?$script_dt_add\"></script>
<!--[if gte IE 5.5000]> <!--[if gte IE 5.5000]>
@ -755,19 +757,33 @@
window.onload = init; window.onload = init;
</script>"; </script>";
$search = db_escape_string($_GET["search"]); // print_r($_GET);
$search_mode = db_escape_string($_GET["smode"]);
$search = db_escape_string($_GET["query"]);
$search_mode = db_escape_string($_GET["search_mode"]);
$match_on = db_escape_string($_GET["match_on"]);
if (!$match_on) {
$match_on = "both";
}
if ($search) { if ($search) {
if ($match_on == "both") {
$search_query_part = "(upper(ttrss_entries.title) LIKE upper('%$search%') $search_query_part = "(upper(ttrss_entries.title) LIKE upper('%$search%')
OR ttrss_entries.content LIKE '%$search%') AND"; OR upper(ttrss_entries.content) LIKE '%$search%') AND";
} else if ($match_on == "title") {
$search_query_part = "upper(ttrss_entries.title) LIKE upper('%$search%')
AND";
} else if ($match_on == "content") {
$search_query_part = "upper(ttrss_entries.content) LIKE upper('%$search%') AND";
}
} else { } else {
$search_query_part = ""; $search_query_part = "";
} }
$view_query_part = ""; $view_query_part = "";
if ($view_mode == "Adaptive") { if ($view_mode == "adaptive") {
if ($search) { if ($search) {
$view_query_part = " "; $view_query_part = " ";
} else if ($feed != -1) { } else if ($feed != -1) {
@ -778,29 +794,29 @@
} }
} }
if ($view_mode == "Starred") { if ($view_mode == "marked") {
$view_query_part = " marked = true AND "; $view_query_part = " marked = true AND ";
} }
if ($view_mode == "Unread") { if ($view_mode == "unread") {
$view_query_part = " unread = true AND "; $view_query_part = " unread = true AND ";
} }
if ($limit && $limit != "All") { if ($limit > 0) {
$limit_query_part = "LIMIT " . $limit; $limit_query_part = "LIMIT " . $limit;
} }
$vfeed_query_part = ""; $vfeed_query_part = "";
// override query strategy and enable feed display when searching globally // override query strategy and enable feed display when searching globally
if ($search && $search_mode == "All feeds") { if ($search && $search_mode == "all_feeds") {
$query_strategy_part = "ttrss_entries.id > 0"; $query_strategy_part = "ttrss_entries.id > 0";
$vfeed_query_part = "ttrss_feeds.title AS feed_title,"; $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
} else if (preg_match("/^-?[0-9][0-9]*$/", $feed) == false) { } else if (preg_match("/^-?[0-9][0-9]*$/", $feed) == false) {
$query_strategy_part = "ttrss_entries.id > 0"; $query_strategy_part = "ttrss_entries.id > 0";
$vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE $vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
id = feed_id) as feed_title,"; id = feed_id) as feed_title,";
} else if ($feed >= 0 && $search && $search_mode == "This category") { } else if ($feed >= 0 && $search && $search_mode == "this_cat") {
$vfeed_query_part = "ttrss_feeds.title AS feed_title,"; $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
@ -878,7 +894,7 @@
$feed_title = ""; $feed_title = "";
if ($search && $search_mode == "All feeds") { if ($search && $search_mode == "all_feeds") {
$feed_title = "Global search results ($search)"; $feed_title = "Global search results ($search)";
} else if ($search && preg_match('/^-?[0-9][0-9]*$/', $feed) == false) { } else if ($search && preg_match('/^-?[0-9][0-9]*$/', $feed) == false) {
$feed_title = "Feed search results ($search, $feed)"; $feed_title = "Feed search results ($search, $feed)";
@ -1360,7 +1376,7 @@
} }
if ($subop == "editfeed") { if ($subop == "editfeed") {
$feed_id = db_escape_string($_GET["id"]); $feed_id = db_escape_string($_REQUEST["id"]);
$result = db_query($link, $result = db_query($link,
"SELECT * FROM ttrss_feeds WHERE id = '$feed_id' AND "SELECT * FROM ttrss_feeds WHERE id = '$feed_id' AND
@ -2581,6 +2597,7 @@
print "<html><head> print "<html><head>
<title>Tiny Tiny RSS : Help</title> <title>Tiny Tiny RSS : Help</title>
<link rel=\"stylesheet\" href=\"tt-rss.css\" type=\"text/css\"> <link rel=\"stylesheet\" href=\"tt-rss.css\" type=\"text/css\">
<script type=\"text/javascript\" src=\"prototype.js\"></script>
<script type=\"text/javascript\" src=\"functions.js?$script_dt_add\"></script> <script type=\"text/javascript\" src=\"functions.js?$script_dt_add\"></script>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
</head><body>"; </head><body>";
@ -2655,39 +2672,63 @@
print "<div id=\"infoBoxTitle\">Search</div>"; print "<div id=\"infoBoxTitle\">Search</div>";
print "<div class=\"infoBoxContents\">"; print "<div class=\"infoBoxContents\">";
print "<form id='search_form'>";
$active_feed_id = db_escape_string($_GET["param"]); $active_feed_id = db_escape_string($_GET["param"]);
print "<table width='100%'><tr><td>Search:</td><td>"; print "<table width='100%'><tr><td>Search:</td><td>";
print "<input id=\"searchbox\" class=\"extSearch\" print "<input name=\"query\" class=\"iedit\"
onblur=\"javascript:enableHotkeys()\" onkeypress=\"return filterCR(event)\"
onfocus=\"javascript:disableHotkeys()\"
onkeyup=\"toggleSubmitNotEmpty(this, 'search_submit_btn')\" onkeyup=\"toggleSubmitNotEmpty(this, 'search_submit_btn')\"
onchange=\"javascript:search()\"> value=\"\">
</td></tr><tr><td>Where:</td><td> </td></tr>";
<select id=\"searchmodebox\">
<option selected>All feeds</option>"; print "<tr><td>Where:</td><td>";
print "<select name=\"search_mode\">
<option value=\"all_feeds\">All feeds</option>";
$feed_title = getFeedTitle($link, $active_feed_id);
$feed_cat_title = getFeedCatTitle($link, $active_feed_id);
if ($active_feed_id) { if ($active_feed_id) {
print "<option>This feed</option>"; print "<option selected value=\"this_feed\">This feed ($feed_title)</option>";
} else { } else {
print "<option disabled>This feed</option>"; print "<option disabled>This feed</option>";
} }
if (get_pref($link, 'ENABLE_FEED_CATS')) { if (get_pref($link, 'ENABLE_FEED_CATS') && $active_feed_id && $active_feed_id > 0) {
print "<option>This category</option>"; print "<option value=\"this_cat\">This category ($feed_cat_title)</option>";
} else {
print "<option disabled>This category</option>";
} }
print "</select></td></tr> print "</select></td></tr>";
<tr><td colspan='2' align='right'> print "<tr><td>Match on:</td><td>";
$search_fields = array(
"title" => "Title",
"content" => "Content",
"both" => "Title or content");
print_select_hash("match_on", 3, $search_fields);
print "</td></tr></table>";
print "</form>";
print "<div align=\"right\">
<input type=\"submit\" <input type=\"submit\"
class=\"button\" onclick=\"javascript:search()\" class=\"button\" onclick=\"javascript:search()\"
id=\"search_submit_btn\" disabled=\"true\" id=\"search_submit_btn\" disabled=\"true\"
value=\"Search\"> value=\"Search\">
<input class=\"button\" <input class=\"button\"
type=\"submit\" onclick=\"javascript:closeInfoBox()\" type=\"submit\" onclick=\"javascript:searchCancel()\"
value=\"Cancel\"></td></tr></table>"; value=\"Cancel\"></div>";
print "</div>";
} }
@ -2717,7 +2758,8 @@
print "<table width='100%'>"; print "<table width='100%'>";
print "<tr><td>Match:</td> print "<tr><td>Match:</td>
<td><input onkeyup=\"toggleSubmitNotEmpty(this, 'infobox_submit')\" <td><input onkeypress=\"return filterCR(event)\"
onkeyup=\"toggleSubmitNotEmpty(this, 'infobox_submit')\"
name=\"reg_exp\" size=\"30\">&nbsp;"; name=\"reg_exp\" size=\"30\">&nbsp;";
print_select_hash("match_id", 1, $filter_types); print_select_hash("match_id", 1, $filter_types);

View File

@ -35,12 +35,13 @@ function viewfeed(feed, skip, subop, doc, is_cat, subop_param) {
enableHotkeys(); enableHotkeys();
var searchbox = doc.getElementById("searchbox"); /* var searchbox = doc.getElementById("searchbox");
var search_query = "";
var search_mode = "";
if (searchbox) { if (searchbox) {
search_query = searchbox.value; search_query = searchbox.value;
} else {
search_query = "";
} }
var searchmodebox = doc.getElementById("searchmodebox"); var searchmodebox = doc.getElementById("searchmodebox");
@ -49,12 +50,8 @@ function viewfeed(feed, skip, subop, doc, is_cat, subop_param) {
if (searchmodebox) { if (searchmodebox) {
search_mode = searchmodebox[searchmodebox.selectedIndex].text; search_mode = searchmodebox[searchmodebox.selectedIndex].text;
} else {
search_mode = "";
} }
setCookie("ttrss_vf_smode", search_mode);
var viewbox = doc.getElementById("viewbox"); var viewbox = doc.getElementById("viewbox");
var view_mode; var view_mode;
@ -78,7 +75,18 @@ function viewfeed(feed, skip, subop, doc, is_cat, subop_param) {
limit = "All"; limit = "All";
} }
// document.getElementById("ACTFEEDID").innerHTML = feed; // document.getElementById("ACTFEEDID").innerHTML = feed; */
var toolbar_query = parent.Form.serialize("main_toolbar_form");
var query = "backend.php?op=viewfeed&feed=" + feed + "&" +
toolbar_query + "&subop=" + param_escape(subop);
if (parent.document.getElementById("search_form")) {
var search_query = parent.Form.serialize("search_form");
query = query + "&" + search_query;
parent.closeInfoBox(true);
}
if (getActiveFeedId() != feed) { if (getActiveFeedId() != feed) {
cat_view_mode = is_cat; cat_view_mode = is_cat;
@ -92,10 +100,10 @@ function viewfeed(feed, skip, subop, doc, is_cat, subop_param) {
setActiveFeedId(feed); setActiveFeedId(feed);
var query = "backend.php?op=viewfeed&feed=" + param_escape(feed) + /* var query = "backend.php?op=viewfeed&feed=" + param_escape(feed) +
"&skip=" + param_escape(skip) + "&subop=" + param_escape(subop) + "&skip=" + param_escape(skip) + "&subop=" + param_escape(subop) +
"&view=" + param_escape(view_mode) + "&limit=" + limit + "&view=" + param_escape(view_mode) + "&limit=" + limit +
"&smode=" + param_escape(search_mode); "&smode=" + param_escape(search_mode); */
if (subop == "MarkAllRead") { if (subop == "MarkAllRead") {
@ -122,10 +130,10 @@ function viewfeed(feed, skip, subop, doc, is_cat, subop_param) {
} }
} }
if (search_query != "") { // if (search_query != "") {
query = query + "&search=" + param_escape(search_query); // query = query + "&search=" + param_escape(search_query);
// searchbox.value = ""; // searchbox.value = "";
} // }
if (cat_view_mode) { if (cat_view_mode) {
query = query + "&cat=1"; query = query + "&cat=1";
@ -133,8 +141,6 @@ function viewfeed(feed, skip, subop, doc, is_cat, subop_param) {
var headlines_frame = parent.frames["headlines-frame"]; var headlines_frame = parent.frames["headlines-frame"];
// alert(headlines_frame)
if (navigator.userAgent.match("Opera")) { if (navigator.userAgent.match("Opera")) {
var date = new Date(); var date = new Date();
var timestamp = Math.round(date.getTime() / 1000); var timestamp = Math.round(date.getTime() / 1000);
@ -152,14 +158,9 @@ function viewfeed(feed, skip, subop, doc, is_cat, subop_param) {
feedr.className = feedr.className + "Selected"; feedr.className = feedr.className + "Selected";
} }
disableContainerChildren("headlinesToolbar", false, doc); parent.disableContainerChildren("headlinesToolbar", false);
parent.Form.enable("main_toolbar_form");
/* var btnMarkAsRead = doc.getElementById("btnMarkFeedAsRead");
if (btnMarkAsRead && !isNumeric(feed)) {
btnMarkAsRead.disabled = true;
btnMarkAsRead.className = "disabledButton";
} */
// notify(""); // notify("");
} catch (e) { } catch (e) {

View File

@ -920,7 +920,7 @@ function leading_zero(p) {
return s; return s;
} }
function closeInfoBox() { function closeInfoBox(cleanup) {
var box = document.getElementById('infoBox'); var box = document.getElementById('infoBox');
var shadow = document.getElementById('infoBoxShadow'); var shadow = document.getElementById('infoBoxShadow');
@ -930,6 +930,8 @@ function closeInfoBox() {
box.style.display = "none"; box.style.display = "none";
} }
if (cleanup) box.innerHTML = "&nbsp;";
enableHotkeys(); enableHotkeys();
} }
@ -1032,3 +1034,18 @@ function qafAdd() {
xmlhttp.send(null); xmlhttp.send(null);
} }
function filterCR(e)
{
var key;
if(window.event)
key = window.event.keyCode; //IE
else
key = e.which; //firefox
if(key == 13)
return false;
else
return true;
}

View File

@ -1639,4 +1639,49 @@
function checkbox_to_sql_bool($val) { function checkbox_to_sql_bool($val) {
return ($val == "on") ? "true" : "false"; return ($val == "on") ? "true" : "false";
} }
function getFeedCatTitle($link, $id) {
if ($id == -1) {
return "Special";
} else if ($id < -10) {
return "Labels";
} else if ($id > 0) {
$result = db_query($link, "SELECT ttrss_feed_categories.title
FROM ttrss_feeds, ttrss_feed_categories WHERE ttrss_feeds.id = '$id' AND
cat_id = ttrss_feed_categories.id");
if (db_num_rows($result) == 1) {
return db_fetch_result($result, 0, "title");
} else {
return "Unknown category ($id)";
}
} else {
return "getFeedCatTitle($id) failed";
}
}
function getFeedTitle($link, $id) {
if ($id == -1) {
return "Starred articles";
} else if ($id < -10) {
$label_id = -10 - $id;
$result = db_query($link, "SELECT description FROM ttrss_labels WHERE id = '$label_id'");
if (db_num_rows($result) == 1) {
return db_fetch_result($result, 0, "description");
} else {
return "Unknown label ($label_id)";
}
} else if ($id > 0) {
$result = db_query($link, "SELECT title FROM ttrss_feeds WHERE id = '$id'");
if (db_num_rows($result) == 1) {
return db_fetch_result($result, 0, "title");
} else {
return "Unknown feed ($id)";
}
} else {
return "getFeedTitle($id) failed";
}
}
?> ?>

View File

@ -1107,3 +1107,7 @@ form {
margin : 0px; margin : 0px;
padding : 0px; padding : 0px;
} }
#main_toolbar_form {
display : inline;
}

View File

@ -274,6 +274,10 @@ function resetSearch() {
} }
} }
function searchCancel() {
closeInfoBox(true);
}
function search() { function search() {
closeInfoBox(); closeInfoBox();
viewCurrentFeed(0, ""); viewCurrentFeed(0, "");
@ -375,6 +379,8 @@ function init() {
disableContainerChildren("headlinesToolbar", true); disableContainerChildren("headlinesToolbar", true);
Form.disable("main_toolbar_form");
if (!genericSanityCheck()) if (!genericSanityCheck())
return; return;
@ -414,11 +420,11 @@ function init_second_stage() {
updateFeedList(false, false); updateFeedList(false, false);
document.onkeydown = hotkey_handler; document.onkeydown = hotkey_handler;
var viewbox = document.getElementById("viewbox"); /* var viewbox = document.getElementById("viewbox");
var limitbox = document.getElementById("limitbox"); var limitbox = document.getElementById("limitbox");
dropboxSelect(viewbox, getCookie("ttrss_vf_vmode")); dropboxSelect(viewbox, getCookie("ttrss_vf_vmode"));
dropboxSelect(limitbox, getCookie("ttrss_vf_limit")); dropboxSelect(limitbox, getCookie("ttrss_vf_limit")); */
daemon_enabled = getCookie("ttrss_vf_daemon"); daemon_enabled = getCookie("ttrss_vf_daemon");
@ -449,7 +455,7 @@ function init_second_stage() {
function quickMenuChange() { function quickMenuChange() {
var chooser = document.getElementById("quickMenuChooser"); var chooser = document.getElementById("quickMenuChooser");
var opid = chooser[chooser.selectedIndex].id; var opid = chooser[chooser.selectedIndex].value;
chooser.selectedIndex = 0; chooser.selectedIndex = 0;
quickMenuGo(opid); quickMenuGo(opid);

View File

@ -150,16 +150,16 @@ window.onload = init;
<tr><td class="headlinesToolbar" id="headlinesToolbar"> <tr><td class="headlinesToolbar" id="headlinesToolbar">
<? if (get_pref($link, 'ENABLE_SEARCH_TOOLBAR')) { ?> <!-- <? if (get_pref($link, 'ENABLE_SEARCH_TOOLBAR')) { ?>
<input id="searchbox" <input id="searchbox"
onblur="javascript:enableHotkeys();" onfocus="javascript:disableHotkeys();"> onblur="javascript:enableHotkeys();" onfocus="javascript:disableHotkeys();">
<select id="searchmodebox"> <select id="searchmodebox">
<option>This feed</option> <option value="all_feeds">All feeds</option>
<option value="this_feed" selected>This feed</option>
<? if (get_pref($link, 'ENABLE_FEED_CATS')) { ?> <? if (get_pref($link, 'ENABLE_FEED_CATS')) { ?>
<option>This category</option> <option value="this_cat">This category</option>
<? } ?> <? } ?>
<option>All feeds</option>
</select> </select>
<input type="submit" <input type="submit"
@ -167,23 +167,19 @@ window.onload = init;
&nbsp; &nbsp;
<? } ?> <? } ?> -->
<form id="main_toolbar_form">
View: View:
<select name="view_mode" onchange="viewCurrentFeed(0, '')">
<select id="viewbox" onchange="javascript:viewCurrentFeed(0, '')"> <option selected value="adaptive">Adaptive</option>
<option selected>Adaptive</option> <option value="all_articles">All Articles</option>
<option>All Articles</option> <option value="marked">Starred</option>
<option>Starred</option> <option value="unread">Unread</option>
<option>Unread</option>
</select> </select>
&nbsp;Limit: &nbsp;Limit:
<select id="limitbox" onchange="javascript:viewCurrentFeed(0, '')">
<? <?
$limits = array(15 => 15, 30 => 30, 60 => 60); $limits = array(15 => 15, 30 => 30, 60 => 60, 0 => "All");
$def_art_limit = get_pref($link, 'DEFAULT_ARTICLE_LIMIT'); $def_art_limit = get_pref($link, 'DEFAULT_ARTICLE_LIMIT');
@ -192,59 +188,47 @@ window.onload = init;
} }
asort($limits); asort($limits);
array_push($limits, 0);
if (!$def_art_limit) { if (!$def_art_limit) {
$def_art_limit = 30; $def_art_limit = 30;
} }
foreach ($limits as $key) { print_select_hash("limit", $def_art_limit, $limits,
print "<option"; 'onchange="viewCurrentFeed(0, \'\')"');
if ($key == $def_art_limit) { print " selected"; }
print ">";
if ($limits[$key] == 0) { print "All"; } else { print $limits[$key]; } ?>
</form>
print "</option>"; <!-- &nbsp;<input class="button" type="submit"
} ?> onclick="quickMenuGo('qmcSearch')" value="Search (tmp)"> -->
</select> &nbsp;<input class="button" type="submit"
onclick="viewCurrentFeed(0, 'ForceUpdate')" value="Update">
<!-- &nbsp;Selection: <input class="button" type="submit"
onclick="viewCurrentFeed(0, 'MarkAllRead')" value="Mark as read">
<select id="headopbox">
<option id="hopToggleRead">Toggle (un)read</option>
</select>
<input class="button" type="submit" onclick="headopGo()" value="Go"> -->
&nbsp;Feed: <input class="button" type="submit"
onclick="javascript:viewCurrentFeed(0, 'ForceUpdate')" value="Update">
<input class="button" type="submit" id="btnMarkFeedAsRead"
onclick="javascript:viewCurrentFeed(0, 'MarkAllRead')" value="Mark as read">
</td> </td>
<td align="right"> <td align="right">
<select id="quickMenuChooser" onchange="quickMenuChange()"> <select id="quickMenuChooser" onchange="quickMenuChange()">
<option id="qmcDefault" selected>Actions...</option> <option value="qmcDefault" selected>Actions...</option>
<option id="qmcPrefs">Preferences</option> <option value="qmcPrefs">Preferences</option>
<option id="qmcSearch">Search</option> <option value="qmcSearch">Search</option>
<option disabled>--------</option> <option disabled>--------</option>
<option style="color : #5050aa" disabled>Feed actions:</option> <option style="color : #5050aa" disabled>Feed actions:</option>
<option id="qmcAddFeed">&nbsp;&nbsp;Subscribe to feed</option> <option value="qmcAddFeed">&nbsp;&nbsp;Subscribe to feed</option>
<option id="qmcRemoveFeed">&nbsp;&nbsp;Unsubscribe</option> <option value="qmcRemoveFeed">&nbsp;&nbsp;Unsubscribe</option>
<!-- <option>Edit this feed</option> --> <!-- <option>Edit this feed</option> -->
<option disabled>--------</option> <option disabled>--------</option>
<option style="color : #5050aa" disabled>All feeds:</option> <option style="color : #5050aa" disabled>All feeds:</option>
<? if (!ENABLE_UPDATE_DAEMON) { ?> <? if (!ENABLE_UPDATE_DAEMON) { ?>
<option id="qmcUpdateFeeds">&nbsp;&nbsp;Update</option> <option value="qmcUpdateFeeds">&nbsp;&nbsp;Update</option>
<? } ?> <? } ?>
<option id="qmcCatchupAll">&nbsp;&nbsp;Mark as read</option> <option value="qmcCatchupAll">&nbsp;&nbsp;Mark as read</option>
<option id="qmcShowOnlyUnread">&nbsp;&nbsp;Show only unread</option> <option value="qmcShowOnlyUnread">&nbsp;&nbsp;Show only unread</option>
<option disabled>--------</option> <option disabled>--------</option>
<option style="color : #5050aa" disabled>Other actions:</option> <option style="color : #5050aa" disabled>Other actions:</option>
<option id="qmcAddFilter">&nbsp;&nbsp;Create filter</option> <option value="qmcAddFilter">&nbsp;&nbsp;Create filter</option>
</select> </select>
</td> </td>
</tr> </tr>