Bivio::UI::XHTML::Widget::SearchSuggestAddon
# Copyright (c) 2014 Bivio Software, Inc. All Rights Reserved.
# $Id$
package Bivio::UI::XHTML::Widget::SearchSuggestAddon;
use strict;
use Bivio::Base 'XHTMLWidget.Join';
b_use('UI.ViewLanguageAUTOLOAD');
sub initialize {
my($self) = @_;
$self->put_unless_exists(values => [
LocalFileAggregator({
widget_values => [
'jquery-ui/jquery-ui.min.css',
],
}),
LocalFileAggregator({
widget_values => [
'jquery-ui/jquery-ui.min.js',
],
}),
LocalFileAggregator({
widget_values => [
InlineJavaScript(Join([
<<'EOF',
(function($, search_field_id, source_uri) {
$("#" + search_field_id).autocomplete({
focus: function(event, ui) {
return false;
},
position: {
my: "right top",
at: "right bottom",
collision: "flipfit none",
},
source: source_uri,
select: function(event, ui) {
window.location = ui.item.value;
return false;
}
});
var proto = $.ui.autocomplete.prototype;
$.extend(proto, {
_renderItem: function(ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append($("<a></a>")["html"](item.label))
.appendTo(ul);
},
_renderMenu: function(ul, items) {
var that = this;
$.each(items, function(index, item) {
that._renderItemData(ul, item);
});
$(ul).addClass("dropdown-menu");
},
_resizeMenu: function() {
this.menu.element.outerWidth(
Math.min(738, $(window).width() - 30)
);
}
});
})(jQuery,
EOF
JavaScriptString($self->get('search_field_id')),
',',
JavaScriptString(
URI({
task_id => [sub {
return shift->req('auth_realm')->has_owner
? 'GROUP_SEARCH_SUGGEST_LIST_JSON'
: 'SEARCH_SUGGEST_LIST_JSON';
}],
}),
),
");\n",
])),
],
}),
]);
return shift->SUPER::initialize(@_);
}
sub internal_new_args {
my(undef, $search_field_id, $attributes) = @_;
return {
search_field_id => $search_field_id,
($attributes ? %$attributes: ()),
};
}
1;