if ($options !== null) {
return (is_array($options)
? "<select$attrs>" . optionlist($options, $value, true) . "</select>"
- : "<input value='" . h($value) . "'$attrs class='hidden'><input value='" . h($options) . "' class='jsonly' oninput=\"whisper.call(this, '" . h(ME . "script=complete&source=" . urlencode($table) . "&field=" . urlencode($field["field"])) . "&value=');\"><div onclick='return whisperClick(event, this.previousSibling);'></div>"
+ : "<input value='" . h($value) . "'$attrs class='hidden'>"
+ . "<input value='" . h($options) . "' class='jsonly'>"
+ . "<div></div>"
+ . script("qsl('input').oninput = partial(whisper, '" . ME . "script=complete&source=" . urlencode($table) . "&field=" . urlencode($field["field"]) . "&value=');
+qsl('div').onclick = whisperClick;", "")
);
}
if (like_bool($field)) {
function helpMouseout() {
}
-function whisperClick(event, field) {
+/** Display typeahead
+* @param string
+* @this HTMLInputElement
+*/
+function whisper(url) {
+ var field = this;
+ field.orig = field.value;
+ field.previousSibling.value = field.value; // accept number, reject string
+ return ajax(url + encodeURIComponent(field.value), function (xmlhttp) {
+ if (xmlhttp.status && field.orig == field.value) { // ignore old responses
+ field.nextSibling.innerHTML = xmlhttp.responseText;
+ field.nextSibling.style.display = '';
+ var a = field.nextSibling.firstChild;
+ if (a && a.firstChild.data == field.value) {
+ field.previousSibling.value = decodeURIComponent(a.href.replace(/.*=/, ''));
+ a.className = 'active';
+ }
+ }
+ });
+}
+
+/** Select typeahead value
+* @param MouseEvent
+* @return boolean false for success
+* @this HTMLDivElement
+*/
+function whisperClick(event) {
+ var field = this.previousSibling;
var el = getTarget(event);
if (isTag(el, 'a') && !(event.button || event.shiftKey || event.altKey || isCtrl(event))) {
field.value = el.firstChild.data;
}
}
-function whisper(url) {
- var field = this;
- if (field.orig != field.value) { // ignore arrows, Shift, ...
- field.orig = field.value;
- field.previousSibling.value = field.value; // accept number, reject string
- return ajax(url + encodeURIComponent(field.value), function (xmlhttp) {
- if (xmlhttp.status && field.orig == field.value) { // ignore old responses
- field.nextSibling.innerHTML = xmlhttp.responseText;
- field.nextSibling.style.display = '';
- var a = field.nextSibling.firstChild;
- if (a && a.firstChild.data == field.value) {
- field.previousSibling.value = decodeURIComponent(a.href.replace(/.*=/, ''));
- a.className = 'active';
- }
- }
- });
- }
-}
-
/** Add new attachment field
* @this HTMLInputElement
*/