From: ewinslow Date: Tue, 15 Feb 2011 00:38:06 +0000 (+0000) Subject: Refs #2102: Replace input/userpicker with jQuery UI autocomplete X-Git-Url: https://gitweb.fluxo.info/?a=commitdiff_plain;h=a13409117dad65a263cd98963aec5156b6b8e068;p=lorea%2Felgg.git Refs #2102: Replace input/userpicker with jQuery UI autocomplete git-svn-id: http://code.elgg.org/elgg/trunk@8242 36083f99-b078-4883-b0ff-0f9b5a30f544 --- diff --git a/js/lib/userpicker.js b/js/lib/userpicker.js new file mode 100644 index 000000000..d978b9c82 --- /dev/null +++ b/js/lib/userpicker.js @@ -0,0 +1,90 @@ +elgg.userpicker.init = function() { + // binding autocomplete. + // doing this as an each so we can past this to functions. + $('.elgg-input-user-picker').each(function() { + + var params = elgg.userpicker.getSearchParams(this); + + $(this).autocomplete({ + source: function(request, response) { + elgg.get('pg/livesearch', { + data: params, + dataType: 'json', + success: function(data) { + response(data); + } + }); + } + minLength: 2, + select: elgg.userpicker.addUser + }) + + //@todo This seems convoluted + .data("autocomplete")._renderItem = elgg.userpicker.formatItem; + }); + + + // changing friends vs all users. + $('.elgg-user-picker [name=match_on]').live('click', function() { + // update the extra params for the autocomplete. + var e = $(this).closest('.elgg-user-picker').find('.elgg-input-user-picker'); + var params = elgg.userpicker.getSearchParams(e); + e.setOptions({extraParams: params}); + e.flushCache(); + }); +}; + +elgg.userpicker.formatItem = 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 $("
  • ") + .data("item.autocomplete", item) + .append(r) + .appendTo(ul); +}; + +elgg.userpicker.addUser = function(event, ui) { + var info = ui.item; + + // do not allow users to be added multiple times + if (!(info.guid in elgg.userpicker.userList)) { + elgg.userpicker.userList[info.guid] = true; + + var picker = $(this).closest('.elgg-user-picker'); + var users = picker.find('.elgg-user-picker-entries'); + var internalName = users.find('[type=hidden]').attr('name'); + + // not sure why formatted isn't. + var formatted = elgg.userpicker.formatItem(data); + + // add guid as hidden input and to list. + var li = formatted + ' ' + + ''; + $('
  • ').html(li).appendTo(users); + + $(this).val(''); + } +} + +function elgg.userpicker.removeUser(link, guid) { + $(link).closest('.elgg-user-picker-entries > li').remove(); +} + +elgg.userpicker.getSearchParams = function(e) { + if ($(e).closest('.elgg-user-picker').find('[name=match_on]').attr('checked')) { + return {'match_on[]': 'friends'}; + } else { + return {'match_on[]': 'users'}; + } +} + +elgg.register_event_handler('init', 'system', elgg.userpicker.init); \ No newline at end of file diff --git a/views/default/input/userpicker.php b/views/default/input/userpicker.php index c6ecb1688..18c71a7f3 100644 --- a/views/default/input/userpicker.php +++ b/views/default/input/userpicker.php @@ -18,7 +18,7 @@ * */ -global $user_picker_js_sent; +elgg_register_js('js/lib/userpicker.js', 'userpicker', 'footer'); function user_picker_add_user($user_id) { $user = get_entity($user_id); @@ -28,13 +28,13 @@ function user_picker_add_user($user_id) { $icon = $user->getIconURL('tiny'); - $code = '
  • '; - $code .= ""; + $code = '
  • '; + $code .= "
    "; + $code .= ""; + $code .= "
    "; $code .= "$user->name - $user->username"; - $code .= '
    '; - $code .= "X"; - $code .= '
    '; $code .= ""; + $code .= "
    "; $code .= '
  • '; return $code; @@ -52,124 +52,6 @@ foreach ($vars['value'] as $value) { // convert the values to a json-encoded list $json_values = json_encode($values); -if (!$user_picker_js_sent) { -?> - - - - - -
    - - - - - -
    - -
    - +
    + + +
    + \ No newline at end of file