properly handle on-the-fly adding of labels

This commit is contained in:
Andrew Dolgov 2010-11-09 13:14:59 +03:00
parent 3acc0da647
commit 10249c41b7
4 changed files with 42 additions and 13 deletions

View File

@ -2250,18 +2250,47 @@ function labelSelectOnChange(elem) {
elem.selectedIndex = 0; elem.selectedIndex = 0;
addLabel(elem, function(transport) { addLabel(elem, function(transport) {
var response = transport.responseXML;
var payload = response.getElementsByTagName("payload")[0]; try {
if (payload) var response = transport.responseXML;
elem.innerHTML = payload.firstChild.nodeValue; var select = response.getElementsByTagName("select")[0];
var options = select.getElementsByTagName("option");
dropbox_replace_options(elem, options);
notify('');
} catch (e) {
exception_error("addLabel", e);
}
}); });
} }
} catch (e) { } catch (e) {
exception_error("catSelectOnChange", e); exception_error("labelSelectOnChange", e);
} }
} }
function dropbox_replace_options(elem, options) {
try {
while (elem.hasChildNodes())
elem.removeChild(elem.firstChild);
var sel_idx = -1;
for (var i = 0; i < options.length; i++) {
var text = options[i].firstChild.nodeValue;
var value = options[i].getAttribute("value");
var issel = options[i].getAttribute("selected") == "1";
elem.insert(new Option(text, value, issel));
if (issel) sel_idx = i;
}
// Chrome doesn't seem to just select stuff when you pass new Option(x, y, true)
if (sel_idx >= 0) elem.selectedIndex = sel_idx;
} catch (e) {
exception_error("dropbox_replace_options", e);
}
}

View File

@ -3020,7 +3020,7 @@
while ($line = db_fetch_assoc($result)) { while ($line = db_fetch_assoc($result)) {
if ($line["id"] == $default_id) { if ($line["id"] == $default_id) {
$is_selected = "selected"; $is_selected = "selected=\"1\"";
} else { } else {
$is_selected = ""; $is_selected = "";
} }
@ -3052,7 +3052,7 @@
while ($line = db_fetch_assoc($result)) { while ($line = db_fetch_assoc($result)) {
if ($line["id"] == $default_id) { if ($line["id"] == $default_id) {
$is_selected = "selected"; $is_selected = "selected=\"1\"";
} else { } else {
$is_selected = ""; $is_selected = "";
} }

View File

@ -523,14 +523,14 @@
$result = db_query($link, "SELECT caption FROM ttrss_labels2 $result = db_query($link, "SELECT caption FROM ttrss_labels2
WHERE owner_uid = '".$_SESSION["uid"]."' ORDER BY caption"); WHERE owner_uid = '".$_SESSION["uid"]."' ORDER BY caption");
print "<select default=\"$value\" name=\"$name\" style=\"$style\" print "<select default=\"$value\" name=\"" . htmlspecialchars($name) .
onchange=\"labelSelectOnChange(this)\" >"; "\" style=\"$style\" onchange=\"labelSelectOnChange(this)\" >";
while ($line = db_fetch_assoc($result)) { while ($line = db_fetch_assoc($result)) {
$issel = ($line["caption"] == $value) ? "selected" : ""; $issel = ($line["caption"] == $value) ? "selected=\"1\"" : "";
print "<option $issel>" . $line["caption"] . "</option>"; print "<option $issel>" . htmlspecialchars($line["caption"]) . "</option>";
} }

View File

@ -107,12 +107,12 @@
if ($output == "select") { if ($output == "select") {
header("Content-Type: text/xml"); header("Content-Type: text/xml");
print "<rpc-reply><payload><![CDATA["; print "<rpc-reply><payload>";
print_label_select($link, "select_label", print_label_select($link, "select_label",
$caption, ""); $caption, "");
print "]]></payload></rpc-reply>"; print "</payload></rpc-reply>";
} }
} }