mirror of
https://github.com/yacy/yacy_search_server.git
synced 2025-01-23 05:18:43 -05:00
4d7ae76017
- update to jquery-ui 1.8.16 (includes themes) - introduced new portalsearch (as default) - old portalsearch is still available and accessible, but will eventually be removed - jquery and portal search is now loaded by special header templates for maintenance reasons - update to new autocomplete, solves bug: http://bugs.yacy.net/view.php?id=29 - many improvements to YMarks GUI and API...more to come anytime soon Sorry, this is a rather large commit, I hope it doesn't break anything essential, but I need to consolidate some of my efforts in order to move ahead. Especially the update to the portalsearch widget might not be welcomed, but the old one is simply incompatible with newer jquery and jquery-ui libraries, sorry. The code tree /yacy/ui/... is obsolete and will be removed in the future. At that point all productive portalsearches should have migrated to the new version. git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@8014 6c8d7289-2bf4-0310-a012-ef5d649a1542
101 lines
2.9 KiB
JavaScript
101 lines
2.9 KiB
JavaScript
(function( $ ) {
|
|
$.widget( "ui.combobox", {
|
|
_create: function() {
|
|
var self = this,
|
|
select = this.element.hide(),
|
|
selected = select.children( ":selected" ),
|
|
value = selected.val() ? selected.text() : "";
|
|
var input = this.input = $( "<input>" )
|
|
.insertAfter( select )
|
|
.val( value )
|
|
.autocomplete({
|
|
delay: 0,
|
|
minLength: 0,
|
|
source: function( request, response ) {
|
|
var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
|
|
response( select.children( "option" ).map(function() {
|
|
var text = $( this ).text();
|
|
if ( this.value && ( !request.term || matcher.test(text) ) )
|
|
return {
|
|
label: text.replace(
|
|
new RegExp(
|
|
"(?![^&;]+;)(?!<[^<>]*)(" +
|
|
$.ui.autocomplete.escapeRegex(request.term) +
|
|
")(?![^<>]*>)(?![^&;]+;)", "gi"
|
|
), "<strong>$1</strong>" ),
|
|
value: text,
|
|
option: this
|
|
};
|
|
}) );
|
|
},
|
|
select: function( event, ui ) {
|
|
ui.item.option.selected = true;
|
|
self._trigger( "selected", event, {
|
|
item: ui.item.option
|
|
});
|
|
},
|
|
change: function( event, ui ) {
|
|
if ( !ui.item ) {
|
|
var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
|
|
valid = false;
|
|
select.children( "option" ).each(function() {
|
|
if ( $( this ).text().match( matcher ) ) {
|
|
this.selected = valid = true;
|
|
return false;
|
|
}
|
|
});
|
|
if ( !valid ) {
|
|
// remove invalid value, as it didn't match anything
|
|
$( this ).val( "" );
|
|
select.val( "" );
|
|
input.data( "autocomplete" ).term = "";
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
})
|
|
.addClass( "ui-widget ui-widget-content ui-corner-left" );
|
|
|
|
input.data( "autocomplete" )._renderItem = function( ul, item ) {
|
|
return $( "<li></li>" )
|
|
.data( "item.autocomplete", item )
|
|
.append( "<a>" + item.label + "</a>" )
|
|
.appendTo( ul );
|
|
};
|
|
|
|
this.button = $( "<button type='button'> </button>" )
|
|
.attr( "tabIndex", -1 )
|
|
.attr( "title", "Show All Items" )
|
|
.insertAfter( input )
|
|
.button({
|
|
icons: {
|
|
primary: "ui-icon-triangle-1-s"
|
|
},
|
|
text: false
|
|
})
|
|
.removeClass( "ui-corner-all" )
|
|
.addClass( "ui-corner-right ui-button-icon" )
|
|
.click(function() {
|
|
// close if already visible
|
|
if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
|
|
input.autocomplete( "close" );
|
|
return;
|
|
}
|
|
|
|
// work around a bug (likely same cause as #5265)
|
|
$( this ).blur();
|
|
|
|
// pass empty string as value to search for, displaying all results
|
|
input.autocomplete( "search", "" );
|
|
input.focus();
|
|
});
|
|
},
|
|
|
|
destroy: function() {
|
|
this.input.remove();
|
|
this.button.remove();
|
|
this.element.show();
|
|
$.Widget.prototype.destroy.call( this );
|
|
}
|
|
});
|
|
})( jQuery ); |