diff options
-rw-r--r-- | js/lib/autocomplete.js | 39 | ||||
-rw-r--r-- | views/default/input/autocomplete.php | 86 |
2 files changed, 50 insertions, 75 deletions
diff --git a/js/lib/autocomplete.js b/js/lib/autocomplete.js new file mode 100644 index 000000000..eb59f51aa --- /dev/null +++ b/js/lib/autocomplete.js @@ -0,0 +1,39 @@ +/** + * + */ +elgg.provide('elgg.autocomplete'); + +elgg.autocomplete.init = function() { + $('.elgg-input-autocomplete').autocomplete({ + source: elgg.autocomplete.url, //gets set by input/autocomplete + minLength: 1, + select: function(event, ui) { + var item = ui.item; + $(this).val(item.name); + + var hidden = $(this).next(); + hidden.val(item.guid); + } + }) + + //@todo This seems convoluted + .data("autocomplete")._renderItem = function(ul, item) { + switch (item.type) { + case 'user': + case 'group': + r = item.icon + item.name + ' - ' + item.desc; + break; + + default: + r = item.name + ' - ' + item.desc; + break; + } + + return $("<li/>") + .data("item.autocomplete", item) + .append(r) + .appendTo(ul); + }; +}; + +elgg.register_event_handler('init', 'system', elgg.autocomplete.init);
\ No newline at end of file diff --git a/views/default/input/autocomplete.php b/views/default/input/autocomplete.php index 1b2652c16..8fe5ab664 100644 --- a/views/default/input/autocomplete.php +++ b/views/default/input/autocomplete.php @@ -7,95 +7,31 @@ * * @todo This currently only works for ONE AUTOCOMPLETE TEXT FIELD on a page. * - * @uses $vars['value'] The current value, if any - * @uses $vars['js'] Any Javascript to enter into the input tag - * @uses $vars['internalname'] The name of the input field * @uses $vars['match_on'] Array | str What to match on. all|array(groups|users|friends|subtype) * @uses $vars['match_owner'] Bool. Match only entities that are owned by logged in user. * */ -global $autocomplete_js_loaded; +$defaults = array( + 'class' => '', + 'value' => '', +); -$internalname = $vars['internalname']; -$value = $vars['value']; +$vars = array_merge($defaults, $vars); -if(!$value) { - $value= ''; -} - -if($vars['internal_id']) { - $id_autocomplete = $vars['internal_id']; -} +$vars['class'] = trim("elgg-input-autocomplete {$vars['class']}"); $ac_url_params = http_build_query(array( 'match_on' => $vars['match_on'], 'match_owner' => $vars['match_owner'], )); -$ac_url = elgg_get_site_url() . 'pg/livesearch?' . $ac_url_params; -if (!isset($autocomplete_js_loaded)) { - $autocomplete_js_loaded = false; -} +elgg_register_js('js/lib/autocomplete.js', 'autocomplete', 'footer'); ?> -<!-- show the input --> -<input type="text" class='autocomplete' name ='<?php echo $internalname; ?>_autocomplete' value='<?php echo $value?>' /> -<input type="hidden" name="<?php echo $internalname; ?>" value='<?php echo $value; ?>' /> - -<?php -if (!$autocomplete_js_loaded) { - ?> -<?php //@todo JS 1.8: no ?> - <!-- include autocomplete --> - <script type="text/javascript" src="<?php echo elgg_get_site_url(); ?>vendors/jquery/jquery.autocomplete.min.js"></script> - <script type="text/javascript"> - function bindAutocomplete() { - $('input[type=text].autocomplete').autocomplete("<?php echo $ac_url; ?>", { - minChars: 1, - matchContains: true, - autoFill: false, - formatItem: function(row, i, max, term) { - eval("var info = " + row + ";"); - var r = ''; - - switch (info.type) { - case 'user': - case 'group': - r = info.icon + info.name + ' - ' + info.desc; - break; - - default: - r = info.name + ' - ' + info.desc; - break; - } - return r.replace(new RegExp("(" + term + ")", "gi"), "<b>$1</b>"); - } - }); - - $('input[type=text].autocomplete').result(function(event, data, formatted) { - eval("var info = " + data + ";"); - $(this).val(info.name); - - var hidden = $(this).next(); - hidden.val(info.guid); - }); - } - - $(document).ready(function() { - bindAutocomplete(); - }); - - </script> - - <?php +<script type="text/javascript"> +elgg.autocomplete.url = "<?php elgg_get_site_url() . 'pg/livesearch?' . $ac_url_params; ?>"; +</script> +<input type="text" <?php echo elgg_format_attributes($vars); ?> /> - $autocomplete_js_loaded = true; -} else { - ?> - <!-- rebind autocomplete --> - <?php //@todo JS 1.8: no ?> - <script type="text/javascript">bindAutocomplete();</script> - <?php -}
\ No newline at end of file |