// ==UserScript== // @name newLISP-Documentation-Search // @namespace http://lambda.que.jp/ // @version 20141001 // @description Provide keyword search interface in newLISP documentation // @grant GM_addStyle // @grant GM_getResourceText // @match http://www.newlisp.org/*/newlisp_manual.html // @require http://code.jquery.com/jquery-2.1.1.js // @require http://code.jquery.com/ui/1.11.1/jquery-ui.js // @resource jquery-ui.css http://code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css // @author KOBAYASHI Shigeru (kosh) // @license Public domain // @downloadURL none // ==/UserScript== GM_addStyle([ GM_getResourceText("jquery-ui.css"), ".search-control {", " position: fixed;", " top: 10px;", " right: 20px;", "}", ".ui-autocomplete {", " max-height: 100px;", " overflow-x: hidden;", " overflow-y: auto;", "}", ].join("\n")); $("body").prepend([ "
", ].join("\n")); function create_keywords() { var keywords = [], grep = function(obj, key, value) { return $.grep(obj, function(e) { return e[key] === value; }); }; $("a[href]").each(function(i, a) { var hash = a.hash.slice(1), // #hash -> hash href = a.href; if (hash.length == 0 || grep(keywords, "href", href).length > 0) { return; } keywords.push({ "label": hash, "href": href }); }); return keywords; } $("#keyword").autocomplete({ source: create_keywords(), select: function(event, ui) { window.location.replace(ui.item.href); } });