mirror of
https://github.com/scrapy/scrapy.git
synced 2025-02-27 17:24:12 +00:00
--HG-- rename : sites/dev.scrapy.org/htdocs/asc.png => sites/static.scrapy.org/asc.png rename : sites/dev.scrapy.org/htdocs/attachment.png => sites/static.scrapy.org/attachment.png rename : sites/dev.scrapy.org/htdocs/changeset.png => sites/static.scrapy.org/changeset.png rename : sites/dev.scrapy.org/htdocs/closedticket.png => sites/static.scrapy.org/closedticket.png rename : sites/dev.scrapy.org/htdocs/collapsed.png => sites/static.scrapy.org/collapsed.png rename : sites/dev.scrapy.org/htdocs/css/about.css => sites/static.scrapy.org/css/about.css rename : sites/dev.scrapy.org/htdocs/css/admin.css => sites/static.scrapy.org/css/admin.css rename : sites/dev.scrapy.org/htdocs/css/browser.css => sites/static.scrapy.org/css/browser.css rename : sites/dev.scrapy.org/htdocs/css/changeset.css => sites/static.scrapy.org/css/changeset.css rename : sites/dev.scrapy.org/htdocs/css/code.css => sites/static.scrapy.org/css/code.css rename : sites/dev.scrapy.org/htdocs/css/diff.css => sites/static.scrapy.org/css/diff.css rename : sites/dev.scrapy.org/htdocs/css/prefs.css => sites/static.scrapy.org/css/prefs.css rename : sites/dev.scrapy.org/htdocs/css/report.css => sites/static.scrapy.org/css/report.css rename : sites/dev.scrapy.org/htdocs/css/roadmap.css => sites/static.scrapy.org/css/roadmap.css rename : sites/dev.scrapy.org/htdocs/css/search.css => sites/static.scrapy.org/css/search.css rename : sites/dev.scrapy.org/htdocs/css/ticket.css => sites/static.scrapy.org/css/ticket.css rename : sites/dev.scrapy.org/htdocs/css/timeline.css => sites/static.scrapy.org/css/timeline.css rename : sites/dev.scrapy.org/htdocs/css/trac-0.11rc2.css.diff => sites/static.scrapy.org/css/trac-0.11rc2.css.diff rename : sites/dev.scrapy.org/htdocs/css/trac.css => sites/static.scrapy.org/css/trac.css rename : sites/dev.scrapy.org/htdocs/css/wiki.css => sites/static.scrapy.org/css/wiki.css rename : sites/dev.scrapy.org/htdocs/desc.png => sites/static.scrapy.org/desc.png rename : sites/dev.scrapy.org/htdocs/dots.gif => sites/static.scrapy.org/dots.gif rename : sites/dev.scrapy.org/htdocs/draft.png => sites/static.scrapy.org/draft.png rename : sites/dev.scrapy.org/htdocs/edit_toolbar.png => sites/static.scrapy.org/edit_toolbar.png rename : sites/dev.scrapy.org/htdocs/editedticket.png => sites/static.scrapy.org/editedticket.png rename : sites/dev.scrapy.org/htdocs/envelope.png => sites/static.scrapy.org/envelope.png rename : sites/dev.scrapy.org/htdocs/expanded.png => sites/static.scrapy.org/expanded.png rename : sites/dev.scrapy.org/htdocs/expander_normal.png => sites/static.scrapy.org/expander_normal.png rename : sites/dev.scrapy.org/htdocs/expander_normal_hover.png => sites/static.scrapy.org/expander_normal_hover.png rename : sites/dev.scrapy.org/htdocs/expander_open.png => sites/static.scrapy.org/expander_open.png rename : sites/dev.scrapy.org/htdocs/expander_open_hover.png => sites/static.scrapy.org/expander_open_hover.png rename : sites/dev.scrapy.org/htdocs/extlink.gif => sites/static.scrapy.org/extlink.gif rename : sites/dev.scrapy.org/htdocs/feed.png => sites/static.scrapy.org/feed.png rename : sites/dev.scrapy.org/htdocs/file.png => sites/static.scrapy.org/file.png rename : sites/dev.scrapy.org/htdocs/folder.png => sites/static.scrapy.org/folder.png rename : sites/dev.scrapy.org/htdocs/guide/basic-workflow.png => sites/static.scrapy.org/guide/basic-workflow.png rename : sites/dev.scrapy.org/htdocs/guide/original-workflow.png => sites/static.scrapy.org/guide/original-workflow.png rename : sites/dev.scrapy.org/htdocs/ics.png => sites/static.scrapy.org/ics.png rename : sites/dev.scrapy.org/htdocs/imggrid.png => sites/static.scrapy.org/imggrid.png rename : sites/dev.scrapy.org/htdocs/js/blame.js => sites/static.scrapy.org/js/blame.js rename : sites/dev.scrapy.org/htdocs/js/diff.js => sites/static.scrapy.org/js/diff.js rename : sites/dev.scrapy.org/htdocs/js/expand_dir.js => sites/static.scrapy.org/js/expand_dir.js rename : sites/dev.scrapy.org/htdocs/js/folding.js => sites/static.scrapy.org/js/folding.js rename : sites/dev.scrapy.org/htdocs/js/ie_pre7_hacks.js => sites/static.scrapy.org/js/ie_pre7_hacks.js rename : sites/dev.scrapy.org/htdocs/js/jquery.js => sites/static.scrapy.org/js/jquery.js rename : sites/dev.scrapy.org/htdocs/js/keyboard_nav.js => sites/static.scrapy.org/js/keyboard_nav.js rename : sites/dev.scrapy.org/htdocs/js/noconflict.js => sites/static.scrapy.org/js/noconflict.js rename : sites/dev.scrapy.org/htdocs/js/query.js => sites/static.scrapy.org/js/query.js rename : sites/dev.scrapy.org/htdocs/js/search.js => sites/static.scrapy.org/js/search.js rename : sites/dev.scrapy.org/htdocs/js/suggest.js => sites/static.scrapy.org/js/suggest.js rename : sites/dev.scrapy.org/htdocs/js/trac.js => sites/static.scrapy.org/js/trac.js rename : sites/dev.scrapy.org/htdocs/js/wikitoolbar.js => sites/static.scrapy.org/js/wikitoolbar.js rename : sites/dev.scrapy.org/htdocs/loading.gif => sites/static.scrapy.org/loading.gif rename : sites/dev.scrapy.org/htdocs/lock-locked.png => sites/static.scrapy.org/lock-locked.png rename : sites/dev.scrapy.org/htdocs/logo.jpg => sites/static.scrapy.org/logo.jpg rename : sites/dev.scrapy.org/htdocs/main-bg.jpg => sites/static.scrapy.org/main-bg.jpg rename : sites/dev.scrapy.org/htdocs/milestone.png => sites/static.scrapy.org/milestone.png rename : sites/dev.scrapy.org/htdocs/newticket.png => sites/static.scrapy.org/newticket.png rename : sites/dev.scrapy.org/htdocs/parent.png => sites/static.scrapy.org/parent.png rename : sites/dev.scrapy.org/htdocs/python.png => sites/static.scrapy.org/python.png rename : sites/dev.scrapy.org/htdocs/topbar_gradient.png => sites/static.scrapy.org/topbar_gradient.png rename : sites/dev.scrapy.org/htdocs/topbar_gradient2.png => sites/static.scrapy.org/topbar_gradient2.png rename : sites/dev.scrapy.org/htdocs/trac.ico => sites/static.scrapy.org/trac.ico rename : sites/dev.scrapy.org/htdocs/trac_banner.png => sites/static.scrapy.org/trac_banner.png rename : sites/dev.scrapy.org/htdocs/trac_logo_mini.png => sites/static.scrapy.org/trac_logo_mini.png rename : sites/dev.scrapy.org/htdocs/vgradient.png => sites/static.scrapy.org/vgradient.png rename : sites/dev.scrapy.org/htdocs/wiki.png => sites/static.scrapy.org/wiki.png extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%4023
145 lines
4.1 KiB
JavaScript
145 lines
4.1 KiB
JavaScript
|
|
(function($){
|
|
|
|
|
|
/*
|
|
Text field auto-completion plugin for jQuery.
|
|
Based on http://www.dyve.net/jquery/?autocomplete by Dylan Verheul.
|
|
*/
|
|
$.suggest = function(input, url, paramName, minChars, delay) {
|
|
var input = $(input).addClass("suggest").attr("autocomplete", "off");
|
|
var timeout = null;
|
|
var prev = "";
|
|
var selectedIndex = -1;
|
|
var results = null;
|
|
|
|
input.keydown(function(e) {
|
|
switch(e.keyCode) {
|
|
case 27: // escape
|
|
hide();
|
|
break;
|
|
case 38: // up
|
|
case 40: // down
|
|
e.preventDefault();
|
|
if (results) {
|
|
var items = $("li", results);
|
|
if (!items) return;
|
|
var index = selectedIndex + (e.keyCode == 38 ? -1 : 1);
|
|
if (index >= 0 && index < items.length) {
|
|
move(index);
|
|
}
|
|
} else {
|
|
show();
|
|
}
|
|
break;
|
|
case 9: // tab
|
|
case 13: // return
|
|
case 39: // right
|
|
if (results) {
|
|
var li = $("li.selected", results);
|
|
if (li.length) {
|
|
select(li);
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
if (timeout) clearTimeout(timeout);
|
|
timeout = setTimeout(show, delay);
|
|
break;
|
|
}
|
|
});
|
|
input.blur(function() {
|
|
if (timeout) clearTimeout(timeout);
|
|
timeout = setTimeout(hide, 200);
|
|
});
|
|
|
|
function hide() {
|
|
if (timeout) clearTimeout(timeout);
|
|
input.removeClass("loading");
|
|
if (results) {
|
|
results.fadeOut("fast").remove();
|
|
results = null;
|
|
}
|
|
$("iframe.iefix").remove();
|
|
selectedIndex = -1;
|
|
}
|
|
|
|
function move(index) {
|
|
if (!results) return;
|
|
items = $("li", results);
|
|
items.removeClass("selected");
|
|
$(items[index]).addClass("selected");
|
|
selectedIndex = index;
|
|
}
|
|
|
|
function select(li) {
|
|
if (!li) li = $("<li>");
|
|
else li = $(li);
|
|
var val = $.trim(li.text());
|
|
prev = val;
|
|
input.val(val);
|
|
hide();
|
|
selectedIndex = -1;
|
|
}
|
|
|
|
function show() {
|
|
var val = input.val();
|
|
if (val == prev) return;
|
|
prev = val;
|
|
if (val.length < minChars) { hide(); return; }
|
|
input.addClass("loading");
|
|
var params = {};
|
|
params[paramName] = val;
|
|
$.get(url, params, function(data) {
|
|
if (!data) { hide(); return; }
|
|
if (!results) {
|
|
var offset = input.offset();
|
|
results = $("<div>").addClass("suggestions").css({
|
|
position: "absolute",
|
|
minWidth: input.get(0).offsetWidth + "px",
|
|
top: (offset.top + input.get(0).offsetHeight) + "px",
|
|
left: offset.left + "px",
|
|
zIndex: 2
|
|
}).appendTo("body");
|
|
if ($.browser.msie) {
|
|
var iframe = $("<iframe style='display:none;position:absolute;" +
|
|
"filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);'" +
|
|
" class='iefix' src='javascript:false;' frameborder='0'" +
|
|
" scrolling='no'></iframe>").insertAfter(results);
|
|
setTimeout(function() {
|
|
var offset = getOffset(results);
|
|
iframe.css({
|
|
top: offset.top + "px",
|
|
right: (offset.left + results.get(0).offsetWidth) + "px",
|
|
bottom: (offset.top + results.get(0).offsetHeight) + "px",
|
|
left: offset.left + "px",
|
|
zIndex: 1
|
|
});
|
|
iframe.show();
|
|
}, 10);
|
|
}
|
|
}
|
|
results.html(data).fadeTo("fast", 0.92);
|
|
items = $("li", results);
|
|
items
|
|
.hover(function() { move(items.index(this)) },
|
|
function() { $(this).removeClass("selected") })
|
|
.click(function() { select(this); input.get(0).focus() });
|
|
move(0);
|
|
});
|
|
}
|
|
}
|
|
|
|
$.fn.suggest = function(url, paramName, minChars, delay) {
|
|
url = url || window.location.pathname;
|
|
paramName = paramName || 'q';
|
|
minChars = minChars || 1;
|
|
delay = delay || 400;
|
|
return this.each(function() {
|
|
new $.suggest(this, url, paramName, minChars, delay);
|
|
});
|
|
}
|
|
|
|
})(jQuery);
|