2017-10-31 05:50:48 +00:00
var keys = keys ;
2017-10-31 05:39:21 +00:00
if ( ! keys && typeof require === 'function' ) {
2017-10-31 05:50:48 +00:00
keys = require ( "./conf.priv.js" ) ;
2017-10-31 05:39:21 +00:00
}
2017-10-31 05:55:59 +00:00
// This is a base64-encoded image used as a placeholder for
// the crunchbase Omnibar results if they don't have an image
const blank = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAAAAAByaaZbAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAACYktHRAD/h4/MvwAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAAd0SU1FB+EICxEMErRVWUQAAABOdEVYdFJhdyBwcm9maWxlIHR5cGUgZXhpZgAKZXhpZgogICAgICAyMAo0NTc4Njk2NjAwMDA0OTQ5MmEwMDA4MDAwMDAwMDAwMDAwMDAwMDAwCnwMkD0AAAGXSURBVEjH1ZRvc4IwDMb7/T8dbVr/sEPlPJQd3g22GzJdmxVOHaQa8N2WN7wwvyZ5Eh/hngzxTwDr0If/TAK67POxbqxnpgCIx9dkrkEvswYnAFiutFSgtQapS4ejwFYqbXQXBmC+QxawuI/MJb0LiCq0DICNHoZRKQdYLKQZEhATcQmwDYD5GR8DDtfqaYAMActvTiVMaUvqhZPVYhYAK2SBAwGMTHngnc4wVmFPW9L6k1PJxbSCkfvhqolKSQhsWSClizNyxwAWdzIADixQRXRmdWSHthsg+TknaztFMZgC3vh/nG/qo68TLAKrCSrUg1ulp3cH+BpItBp3DZf0lFXVOIDnBdwKkLO4D5Q3QMO6HJ+hUb1NKNWMGJn3jf4ejPKn99CXOtsuyab95obGL/rpdZ7oIJK87iPiumG01drbdggoCZuq/f0XaB8/FbG62Ta5cD97XJwuZUT7ONbZTIK5m94hBuQs8535MsL5xxPw6ZoNj0DiyzhhcyMf9BJ0Jk1uRRpNyb4y0UaM9UI7E8+kt/EHgR/R6042JzmiwgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNy0wOC0xMVQxNzoxMjoxOC0wNDowMLy29LgAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTctMDgtMTFUMTc6MTI6MTgtMDQ6MDDN60wEAAAAAElFTkSuQmCC" ;
2017-11-14 07:22:07 +00:00
var completions = { } ;
2017-11-17 14:30:47 +00:00
// ****** Arch Linux ****** //
// Arch Linux official repos
2017-11-14 07:22:07 +00:00
completions . al = {
2017-11-17 14:30:47 +00:00
alias : 'al' ,
name : 'archlinux' ,
search : 'https://www.archlinux.org/packages/?arch=x86_64&q=' ,
compl : google _cx _url ( 'al' ) ,
callback : google _cx _callback ,
2017-11-14 07:22:07 +00:00
} ;
2017-11-17 14:30:47 +00:00
// Arch Linux AUR
2017-11-14 07:22:07 +00:00
completions . au = {
2017-11-14 07:29:26 +00:00
alias : 'au' ,
name : 'AUR' ,
search : 'https://aur.archlinux.org/packages/?O=0&SeB=nd&outdated=&SB=v&SO=d&PP=100&do_Search=Go&K=' ,
compl : 'https://aur.archlinux.org/rpc?type=suggest&arg=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . au . callback = function ( response ) {
var res = JSON . parse ( response . text ) ;
Omnibar . listResults ( res , function ( s ) {
return Omnibar . createURLItem ( {
title : s ,
url : "https://aur.archlinux.org/packages/" + s
} ) ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// Arch Linux Wiki
2017-11-14 07:22:07 +00:00
completions . aw = {
2017-11-14 07:29:26 +00:00
alias : 'aw' ,
name : 'archwiki' ,
search : 'https://wiki.archlinux.org/index.php?go=go&search=' ,
compl : 'https://wiki.archlinux.org/api.php?action=opensearch&format=json&formatversion=2&namespace=0&limit=10&suggest=true&search=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . aw . callback = function ( response ) {
Omnibar . listWords ( JSON . parse ( response . text ) [ 1 ] ) ;
} ;
2017-11-17 14:30:47 +00:00
// Arch Linux Forums
completions . af = {
alias : 'af' ,
name : 'archforums' ,
search : google _cx _publicurl ( 'af' ) ,
compl : google _cx _url ( 'af' ) ,
callback : google _cx _callback ,
} ;
// ****** Technical Resources ****** //
// Chrome Webstore
completions . cs = {
alias : 'cs' ,
name : 'chromestore' ,
search : 'https://chrome.google.com/webstore/search/' ,
compl : google _cx _url ( 'cs' ) ,
callback : google _cx _callback ,
} ;
// OWASP Wiki
2017-11-14 07:22:07 +00:00
completions . ow = {
2017-11-14 07:29:26 +00:00
alias : 'ow' ,
name : 'owasp' ,
search : 'https://www.owasp.org/index.php?go=go&search=' ,
compl : 'https://www.owasp.org/api.php?action=opensearch&format=json&formatversion=2&namespace=0&limit=10&suggest=true&search=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . ow . callback = function ( response ) {
Omnibar . listWords ( JSON . parse ( response . text ) [ 1 ] ) ;
} ;
2017-11-17 14:30:47 +00:00
// StackOverflow
completions . so = {
alias : 'so' ,
name : 'stackoverflow' ,
search : 'https://stackoverflow.com/search?q=' ,
compl : 'https://api.stackexchange.com/2.2/search/advanced?pagesize=10&order=desc&sort=relevance&site=stackoverflow&q=' ,
} ;
completions . so . callback = function ( response ) {
var res = JSON . parse ( response . text ) . items ;
Omnibar . listResults ( res , function ( s ) {
return Omnibar . createURLItem ( {
title : "[" + s . score + "] " + s . title ,
url : s . link
} ) ;
} ) ;
} ;
// DockerHub repo search
completions . dh = {
alias : 'dh' ,
name : 'dockerhub' ,
search : 'https://hub.docker.com/search/?page=1&q=' ,
compl : 'https://hub.docker.com/v2/search/repositories/?page_size=20&query=' ,
} ;
completions . dh . callback = function ( response ) {
var res = JSON . parse ( response . text ) ;
Omnibar . listResults ( res . results , function ( s ) {
var meta = ""
, repo = s . repo _name ;
meta += "[★" + s . star _count + "] " ;
meta += "[↓" + s . pull _count + "] " ;
if ( repo . indexOf ( "/" ) === - 1 ) {
repo = "_/" + repo ;
}
var li = $ ( '<li/>' ) . html ( `
< div >
< div class = "title" > < strong > $ { s . repo _name } < / s t r o n g > < / d i v >
< div > $ { meta } < / d i v >
< div > $ { s . short _description } < / d i v >
< / d i v >
` );
li . data ( 'url' , "https://hub.docker.com/r/" + repo ) ;
return li ;
} ) ;
} ;
// GitHub
completions . gh = {
alias : 'gh' ,
name : 'github' ,
search : 'https://github.com/search?q=' ,
compl : 'https://api.github.com/search/repositories?sort=stars&order=desc&q=' ,
} ;
completions . gh . callback = function ( response ) {
var res = JSON . parse ( response . text ) . items ;
Omnibar . listResults ( res , function ( s ) {
var prefix = "" ;
if ( s . stargazers _count ) {
prefix += "[★" + s . stargazers _count + "] " ;
}
return Omnibar . createURLItem ( {
title : prefix + s . full _name ,
url : s . html _url
} ) ;
} ) ;
} ;
// Domainr domain search
completions . do = {
alias : 'do' ,
name : 'domainr' ,
search : 'https://domainr.com/?q=' ,
compl : ` https://api.domainr.com/v2/search?client_id= ${ keys . domainr } &query=%s ` ,
} ;
completions . do . callback = function ( response ) {
var res = JSON . parse ( response . text ) . results ;
var domains = [ ] ;
res . map ( function ( r ) {
var d = {
id : r . domain . replace ( '.' , '-' ) ,
domain : r . domain
} ;
domains . push ( d ) ;
} ) ;
var domainQuery = domains . map ( function ( d ) { return d . domain ; } ) . join ( ',' ) ;
runtime . command ( {
action : 'request' ,
method : 'get' ,
url : ` https://api.domainr.com/v2/status?client_id= ${ keys . domainr } &domain= ${ domainQuery } `
} , function ( sresponse ) {
var sres = JSON . parse ( sresponse . text ) . status ;
sres . map ( function ( s ) {
var id = "#sk-domain-" + s . domain . replace ( '.' , '-' )
, available = s . summary === "inactive"
, color = available ? "#23b000" : "#ff4d00"
, symbol = available ? "✔ " : "✘ " ;
$ ( id ) . text ( symbol + $ ( id ) . text ( ) ) . css ( "color" , color ) ;
} ) ;
} ) ;
Omnibar . listResults ( domains , function ( d ) {
var li = $ ( '<li/>' ) . html ( `
< div id = "sk-domain-${d.id}" >
< div class = "title" > < strong > $ { d . domain } < / s t r o n g > < / d i v >
< / d i v >
` );
li . data ( 'url' , ` https://domainr.com/ ${ d . domain } ` ) ;
return li ;
} ) ;
} ;
// Vim Wiki
2017-11-14 07:22:07 +00:00
completions . vw = {
2017-11-14 07:29:26 +00:00
alias : 'vw' ,
name : 'vimwikia' ,
search : 'https://vim.wikia.com/wiki/Special:Search?query=' ,
compl : 'https://vim.wikia.com/api.php?action=opensearch&format=json&formatversion=2&namespace=0&limit=10&suggest=true&search=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . vw . callback = function ( response ) {
Omnibar . listWords ( JSON . parse ( response . text ) [ 1 ] ) ;
} ;
2017-11-17 14:30:47 +00:00
// ****** Shopping & Food ****** //
// Amazon
2017-11-14 07:22:07 +00:00
completions . az = {
2017-11-14 07:29:26 +00:00
alias : 'az' ,
name : 'amazon' ,
search : 'https://smile.amazon.com/s/?field-keywords=' ,
compl : 'https://completion.amazon.com/search/complete?method=completion&mkt=1&search-alias=aps&q=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . az . callback = function ( response ) {
var res = JSON . parse ( response . text ) [ 1 ] ;
Omnibar . listWords ( res ) ;
} ;
2017-11-17 14:30:47 +00:00
// Craigslist
2017-11-14 07:22:07 +00:00
completions . cl = {
2017-11-14 07:29:26 +00:00
alias : 'cl' ,
name : 'craigslist' ,
search : 'https://craigslist.org/search/sss?query=' ,
compl : 'https://craigslist.org/suggest?v=12&type=search&cat=sss&area=1&term=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . cl . callback = function ( response ) {
Omnibar . listWords ( JSON . parse ( response . text ) ) ;
} ;
2017-11-17 14:30:47 +00:00
// Yelp
completions . yp = {
alias : 'yp' ,
name : 'yelp' ,
search : 'https://www.yelp.com/search?find_desc=' ,
compl : 'https://www.yelp.com/search_suggest/v2/prefetch?prefix=' ,
} ;
completions . yp . callback = function ( response ) {
var res = JSON . parse ( response . text ) . response ;
var words = [ ] ;
res . map ( function ( r ) {
r . suggestions . map ( function ( s ) {
var w = s . query ;
if ( words . indexOf ( w ) === - 1 ) {
words . push ( w ) ;
}
} ) ;
} ) ;
Omnibar . listWords ( words ) ;
} ;
// ****** General References, Calculators & Utilities ****** //
// Dictionary
completions . de = {
alias : 'de' ,
name : 'define' ,
search : 'http://onelook.com/?w=' ,
compl : 'https://api.datamuse.com/words?md=d&sp=%s*' ,
} ;
completions . de . callback = function ( response ) {
var res = JSON . parse ( response . text ) ;
var defs = [ ] ;
res . map ( function ( r ) {
if ( ! r . defs || r . defs . length === 0 ) {
defs . push ( [ r . word , "" , "" ] ) ;
return ;
}
r . defs . map ( function ( d ) {
d = d . split ( "\t" ) ;
var sp = "(" + d [ 0 ] + ")" ,
def = d [ 1 ] ;
defs . push ( [ r . word , sp , def ] ) ;
} ) ;
} ) ;
Omnibar . listResults ( defs , function ( d ) {
var li = $ ( '<li/>' ) . html ( ` <div class="title"><strong> ${ d [ 0 ] } </strong> <em> ${ d [ 1 ] } </em> ${ d [ 2 ] } </div> ` ) ;
li . data ( 'url' , "http://onelook.com/?w=" + d [ 0 ] ) ;
return li ;
} ) ;
} ;
// Thesaurus
completions . th = {
alias : 'th' ,
name : 'thesaurus' ,
search : 'https://www.onelook.com/reverse-dictionary.shtml?s=' ,
compl : 'https://api.datamuse.com/words?md=d&ml=%s' ,
} ;
completions . th . callback = function ( response ) {
var res = JSON . parse ( response . text ) ;
var defs = [ ] ;
res . map ( function ( r ) {
if ( ! r . defs || r . defs . length === 0 ) {
defs . push ( [ r . word , "" , "" ] ) ;
return ;
}
r . defs . map ( function ( d ) {
d = d . split ( "\t" ) ;
var sp = "(" + d [ 0 ] + ")" ,
def = d [ 1 ] ;
defs . push ( [ r . word , sp , def ] ) ;
} ) ;
} ) ;
Omnibar . listResults ( defs , function ( d ) {
var li = $ ( '<li/>' ) . html ( ` <div class="title"><strong> ${ d [ 0 ] } </strong> <em> ${ d [ 1 ] } </em> ${ d [ 2 ] } </div> ` ) ;
li . data ( 'url' , "http://onelook.com/?w=" + d [ 0 ] ) ;
return li ;
} ) ;
} ;
// Wikipedia
completions . wp = {
alias : 'wp' ,
name : 'wikipedia' ,
search : 'https://en.wikipedia.org/w/index.php?search=' ,
compl : 'https://en.wikipedia.org/w/api.php?action=query&format=json&list=prefixsearch&utf8&pssearch=' ,
} ;
completions . wp . callback = function ( response ) {
var res = JSON . parse ( response . text ) . query . prefixsearch
. map ( function ( r ) {
return r . title ;
} ) ;
Omnibar . listWords ( res ) ;
} ;
// WolframAlpha
2017-11-14 07:22:07 +00:00
completions . wa = {
2017-11-14 07:29:26 +00:00
alias : 'wa' ,
name : 'wolframalpha' ,
search : 'http://www.wolframalpha.com/input/?i=' ,
compl : ` http://api.wolframalpha.com/v2/query?appid= ${ keys . wolframalpha } &format=plaintext&output=json&reinterpret=true&input=%s ` ,
2017-11-14 07:22:07 +00:00
} ;
2017-10-31 05:39:21 +00:00
2017-11-14 07:22:07 +00:00
completions . wa . callback = function ( response ) {
var res = JSON . parse ( response . text ) . queryresult ;
if ( res . error ) {
Omnibar . listResults ( [ "" ] , function ( ) {
var li = $ ( '<li/>' ) . html ( `
< div >
< div class = "title" > < strong > Error < / s t r o n g > ( C o d e $ { r e s . e r r o r . c o d e } ) < / d i v >
< div class = "title" > $ { res . error . msg } < / d i v >
< / d i v >
` );
return li ;
} ) ;
return ;
}
if ( ! res . success ) {
if ( res . tips ) {
Omnibar . listResults ( [ "" ] , function ( ) {
var li = $ ( '<li/>' ) . html ( `
< div >
< div class = "title" > < strong > No Results < / s t r o n g > < / d i v >
< div class = "title" > $ { res . tips . text } < / d i v >
< / d i v >
` );
return li ;
} ) ;
}
if ( res . didyoumeans ) {
Omnibar . listResults ( res . didyoumeans , function ( s ) {
var li = $ ( '<li/>' ) . html ( `
< div >
< div class = "title" > < strong > Did you mean ... ? < / s t r o n g > < / d i v >
< div class = "title" > $ { s . val } < / d i v >
< / d i v >
` );
return li ;
} ) ;
}
return ;
}
var results = [ ] ;
res . pods . map ( function ( p ) {
var result = {
title : p . title ,
values : [ ] ,
url : "http://www.wolframalpha.com/input/?i=" ,
} ;
if ( p . numsubpods > 0 ) {
result . url += encodeURIComponent ( p . subpods [ 0 ] . plaintext ) ;
p . subpods . map ( function ( sp ) {
if ( ! sp . plaintext ) return ;
var v = "" ;
if ( sp . title ) {
v += ` <strong> ${ sp . title } </strong>: ` ;
}
v += sp . plaintext ;
result . values . push ( ` <div class="title"> ${ v } </div> ` ) ;
} ) ;
2017-10-31 05:39:21 +00:00
}
2017-11-14 07:22:07 +00:00
if ( result . values . length > 0 ) {
results . push ( result ) ;
}
} ) ;
Omnibar . listResults ( results , function ( r ) {
var li = $ ( '<li/>' ) . html ( `
< div >
< div class = "title" > < strong > $ { r . title } < / s t r o n g > < / d i v >
$ { r . values . join ( "\n" ) }
< / d i v >
` );
li . data ( 'url' , r . url ) ;
return li ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// ****** Business Utilities & References ****** //
// Crunchbase Organization Search
2017-11-14 07:22:07 +00:00
completions . co = {
2017-11-14 07:29:26 +00:00
alias : 'co' ,
name : 'crunchbase-orgs' ,
search : 'https://www.crunchbase.com/app/search/?q=' ,
compl : ` https://api.crunchbase.com/v/3/odm_organizations?user_key= ${ keys . crunchbase } &query=%s ` ,
2017-11-14 07:22:07 +00:00
} ;
2017-10-31 05:39:21 +00:00
2017-11-14 07:22:07 +00:00
completions . co . callback = function ( response ) {
var res = JSON . parse ( response . text ) . data . items ;
var orgs = [ ] ;
res . map ( function ( rr ) {
var r = rr . properties ;
var p = {
name : r . name ,
domain : r . domain ,
desc : r . short _description ,
role : r . primary _role ,
img : blank ,
loc : "" ,
url : "https://www.crunchbase.com/" + r . web _path
} ;
2017-10-31 05:39:21 +00:00
2017-11-14 07:22:07 +00:00
p . loc += ( r . city _name !== null ) ? r . city _name : "" ;
p . loc += ( r . region _name !== null && p . loc !== "" ) ? ", " : "" ;
p . loc += ( r . region _name !== null ) ? r . region _name : "" ;
p . loc += ( r . country _code !== null && p . loc !== "" ) ? ", " : "" ;
p . loc += ( r . country _code !== null ) ? r . country _code : "" ;
p . loc += ( p . loc === "" ) ? "Earth" : "" ;
if ( r . profile _image _url !== null ) {
var url = r . profile _image _url
, path = url . split ( '/' )
, img = path [ path . length - 1 ] ;
p . img = "http://public.crunchbase.com/t_api_images/v1402944794/c_pad,h_50,w_50/" + img ;
}
orgs . push ( p ) ;
} ) ;
Omnibar . listResults ( orgs , function ( p ) {
var li = $ ( '<li/>' ) . html ( `
< div style = "width:100%;height:6em;display:block;" >
< div style = "float:left;" >
< img style = "width:4em;height:4em;max-width:4em;max-height:4em;overflow:hidden;" src = "${p.img}" alt = "${p.name}" >
< / d i v >
< div style = "float:left;height:100%;margin-left:10px;" >
< div class = "title" > < strong > $ { p . name } < / s t r o n g > < / d i v >
< div class = "title" > Type : < em > $ { p . role } < / e m > , D o m a i n : < e m > $ { p . d o m a i n } < / e m > < / d i v >
< div class = "title" > $ { p . desc } < / d i v >
< div class = "title" > < em > $ { p . loc } < / e m > < / d i v >
< / d i v >
< / d i v >
` );
li . data ( 'url' , p . url ) ;
return li ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// Crunchbase People Search
2017-11-14 07:22:07 +00:00
completions . cp = {
2017-11-14 07:29:26 +00:00
alias : 'cp' ,
name : 'crunchbase-people' ,
search : 'https://www.crunchbase.com/app/search/?q=' ,
compl : ` https://api.crunchbase.com/v/3/odm_people?user_key= ${ keys . crunchbase } &query=%s ` ,
2017-11-14 07:22:07 +00:00
} ;
2017-10-31 05:39:21 +00:00
2017-11-14 07:22:07 +00:00
completions . cp . callback = function ( response ) {
var res = JSON . parse ( response . text ) . data . items ;
var people = [ ] ;
res . map ( function ( rr ) {
var r = rr . properties ;
var p = {
name : r . first _name + " " + r . last _name ,
desc : "" ,
img : blank ,
loc : "" ,
url : "https://www.crunchbase.com/" + r . web _path
} ;
2017-10-31 05:39:21 +00:00
2017-11-14 07:22:07 +00:00
p . desc += ( r . title !== null ) ? r . title : "" ;
p . desc += ( r . organization _name !== null && p . desc !== "" ) ? ", " : "" ;
p . desc += ( r . organization _name !== null ) ? r . organization _name : "" ;
p . desc += ( p . desc === "" ) ? "Human" : "" ;
p . loc += ( r . city _name !== null ) ? r . city _name : "" ;
p . loc += ( r . region _name !== null && p . loc !== "" ) ? ", " : "" ;
p . loc += ( r . region _name !== null ) ? r . region _name : "" ;
p . loc += ( r . country _code !== null && p . loc !== "" ) ? ", " : "" ;
p . loc += ( r . country _code !== null ) ? r . country _code : "" ;
p . loc += ( p . loc === "" ) ? "Earth" : "" ;
if ( r . profile _image _url !== null ) {
var url = r . profile _image _url
, path = url . split ( '/' )
, img = path [ path . length - 1 ] ;
p . img = "http://public.crunchbase.com/t_api_images/v1402944794/c_pad,h_50,w_50/" + img ;
}
people . push ( p ) ;
} ) ;
Omnibar . listResults ( people , function ( p ) {
var li = $ ( '<li/>' ) . html ( `
< div style = "width:100%;height:6em;display:block;" >
< div style = "float:left;" >
< img style = "width:4em;height:4em;max-width:4em;max-height:4em;overflow:hidden;" src = "${p.img}" alt = "${p.name}" >
< / d i v >
< div style = "float:left;height:100%;margin-left:10px;" >
< div class = "title" > < strong > $ { p . name } < / s t r o n g > < / d i v >
< div class = "title" > $ { p . desc } < / d i v >
< div class = "title" > < em > $ { p . loc } < / e m > < / d i v >
< / d i v >
< / d i v >
` );
li . data ( 'url' , p . url ) ;
return li ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// ****** Search Engines ****** //
// DuckDuckGo
completions . dg = {
alias : 'dg' ,
name : 'duckduckgo' ,
search : 'https://duckduckgo.com/?q=' ,
compl : 'https://duckduckgo.com/ac/?q=' ,
2017-11-14 07:22:07 +00:00
} ;
2017-11-17 14:30:47 +00:00
completions . dg . callback = function ( response ) {
var res = JSON . parse ( response . text ) . map ( function ( r ) {
return r . phrase ;
} ) ;
Omnibar . listWords ( res ) ;
} ;
2017-11-14 07:22:07 +00:00
2017-11-17 14:30:47 +00:00
// Google
completions . go = {
alias : 'go' ,
name : 'google' ,
search : 'https://www.google.com/search?q=' ,
compl : 'https://www.google.com/complete/search?client=chrome-omni&gs_ri=chrome-ext&oit=1&cp=1&pgcl=7&q=' ,
2017-11-14 07:22:07 +00:00
} ;
2017-11-17 14:30:47 +00:00
completions . go . callback = function ( response ) {
Omnibar . listWords ( JSON . parse ( response . text ) [ 1 ] ) ;
2017-11-14 07:22:07 +00:00
} ;
2017-11-17 14:30:47 +00:00
// Google - I'm Feeling Lucky
completions . gl = {
alias : 'gl' ,
name : 'google-lucky' ,
search : 'https://www.google.com/search?btnI=1&q=' ,
compl : 'https://www.google.com/complete/search?client=chrome-omni&gs_ri=chrome-ext&oit=1&cp=1&pgcl=7&q=' ,
2017-11-14 07:22:07 +00:00
} ;
2017-11-17 14:30:47 +00:00
completions . gl . callback = function ( response ) {
Omnibar . listWords ( JSON . parse ( response . text ) [ 1 ] ) ;
2017-11-14 07:22:07 +00:00
} ;
2017-11-17 14:30:47 +00:00
// ****** Elixir ****** //
2017-11-14 07:22:07 +00:00
2017-11-17 14:30:47 +00:00
// Hex.pm
completions . hx = {
alias : 'hx' ,
name : 'hex' ,
search : 'https://hex.pm/packages?sort=downloads&search=' ,
compl : 'https://hex.pm/api/packages?sort=downloads&search=' ,
2017-11-14 07:22:07 +00:00
} ;
2017-11-17 14:30:47 +00:00
completions . hx . callback = function ( response ) {
2017-11-14 07:22:07 +00:00
var res = JSON . parse ( response . text ) ;
2017-11-17 14:30:47 +00:00
Omnibar . listResults ( res , function ( s ) {
var dls = ""
, desc = ""
, liscs = "" ;
if ( s . downloads && s . downloads . all ) {
dls = "[↓" + s . downloads . all + "] " ;
}
if ( s . meta ) {
if ( s . meta . description ) {
desc = s . meta . description ;
}
if ( s . meta . licenses ) {
s . meta . licenses . forEach ( function ( l ) {
liscs += "[©" + l + "] " ;
} ) ;
}
2017-11-14 07:22:07 +00:00
}
var li = $ ( '<li/>' ) . html ( `
< div >
2017-11-17 14:30:47 +00:00
< div class = "title" > $ { s . repository } / < strong > $ { s . name } < / s t r o n g > < / d i v >
< div > $ { dls } $ { liscs } < / d i v >
< div > $ { desc } < / d i v >
2017-11-14 07:22:07 +00:00
< / d i v >
` );
2017-11-17 14:30:47 +00:00
li . data ( 'url' , s . html _url ) ;
2017-11-14 07:22:07 +00:00
return li ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// hexdocs
// Same as hex but links to documentation pages
completions . hd = {
alias : 'hd' ,
name : 'hexdocs' ,
search : 'https://hex.pm/packages?sort=downloads&search=' ,
compl : 'https://hex.pm/api/packages?sort=downloads&search=' ,
2017-11-14 07:22:07 +00:00
} ;
2017-10-31 05:39:21 +00:00
2017-11-17 14:30:47 +00:00
completions . hd . callback = function ( response ) {
var res = JSON . parse ( response . text ) ;
Omnibar . listResults ( res , function ( s ) {
var dls = ""
, desc = ""
, liscs = "" ;
if ( s . downloads && s . downloads . all ) {
dls = "[↓" + s . downloads . all + "]" ;
}
if ( s . meta ) {
if ( s . meta . description ) {
desc = s . meta . description ;
}
if ( s . meta . licenses ) {
s . meta . licenses . forEach ( function ( l ) {
liscs += "[©" + l + "] " ;
} ) ;
}
}
2017-11-14 07:22:07 +00:00
var li = $ ( '<li/>' ) . html ( `
2017-11-17 14:30:47 +00:00
< div >
< div class = "title" > $ { s . repository } / < strong > $ { s . name } < / s t r o n g > < / d i v >
< div > $ { dls } $ { liscs } < / d i v >
< div > $ { desc } < / d i v >
2017-11-14 07:22:07 +00:00
< / d i v >
` );
2017-11-17 14:30:47 +00:00
li . data ( 'url' , "https://hexdocs.pm/" + s . name ) ;
2017-11-14 07:22:07 +00:00
return li ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// Exdocs
// Similar to `hd` but searches inside docs using Google Custom Search
2017-11-14 07:22:07 +00:00
completions . ex = {
2017-11-17 14:30:47 +00:00
alias : 'ex' ,
2017-11-14 07:29:26 +00:00
name : 'exdocs' ,
search : 'https://hex.pm/packages?sort=downloads&search=' ,
2017-11-17 14:30:47 +00:00
compl : google _cx _url ( 'ex' ) ,
2017-11-14 07:22:07 +00:00
} ;
completions . ex . callback = function ( response ) {
var res = JSON . parse ( response . text ) . items ;
Omnibar . listResults ( res , function ( s ) {
var snippet = s . htmlSnippet ;
var hash = "" ;
// Hacky way to extract the desired function's
// signature to use as an anchor because
// Google Custom Search doesn't link to the appropriate
// section of the documentation page
// A regex would probably work better.
( function ( ) {
var openTag = "<b>"
, closeTag = "</b>"
, openArgs = "("
, closeArgs = ")" ;
var f1 = snippet . indexOf ( openTag ) ;
if ( f1 === - 1 ) {
return ;
}
var f2 = snippet . indexOf ( closeTag ) ;
if ( f2 === - 1 ) {
return ;
2017-10-31 05:39:21 +00:00
}
2017-11-14 07:22:07 +00:00
f1 += openTag . length ;
f3 = f2 + closeTag . length ;
fname = snippet . slice ( f1 , f2 ) ;
snippetEnd = snippet . slice ( f3 ) ;
var a1 = snippetEnd . indexOf ( openArgs ) ;
if ( a1 !== 0 ) {
return ;
}
var a2 = snippetEnd . indexOf ( closeArgs ) ;
if ( a2 === - 1 ) {
return ;
}
a2 += closeArgs . length ;
var fargs = snippetEnd . slice ( a1 , a2 ) ;
var fary = fargs . replace ( new RegExp ( openArgs + closeArgs ) , '' ) . split ( ',' ) . length ;
hash = fname + '/' + fary ;
} ) ( ) ;
var moduleName = s . title . split ( ' – ' ) [ 0 ] ;
var subtitle = "" ;
if ( hash ) {
subtitle = `
< div style = "font-size:1.1em; line-height:1.25em" >
< em > $ { moduleName } < / e m > . < s t r o n g > $ { h a s h } < / s t r o n g >
< / d i v > ` ;
}
var li = $ ( '<li/>' ) . html ( `
< div >
< div class = "title" > < strong > $ { s . htmlTitle } < / s t r o n g > < / d i v >
$ { subtitle }
< div > $ { s . htmlSnippet } < / d i v >
< / d i v >
` );
li . data ( 'url' , s . link + "#" + hash ) ;
return li ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// ****** Golang ****** //
// Godoc
2017-11-14 07:22:07 +00:00
completions . gd = {
2017-11-14 07:29:26 +00:00
alias : 'gd' ,
name : 'godoc' ,
search : 'https://godoc.org/?q=' ,
compl : 'https://api.godoc.org/search?q=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . gd . callback = function ( response ) {
var res = JSON . parse ( response . text ) . results ;
Omnibar . listResults ( res , function ( s ) {
var prefix = "" ;
if ( s . import _count ) {
prefix += "[↓" + s . import _count + "] " ;
}
if ( s . stars ) {
prefix += "[★" + s . stars + "] " ;
}
return Omnibar . createURLItem ( {
title : prefix + s . path ,
url : "https://godoc.org/" + s . path
} ) ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// Go-Search
2017-11-14 07:22:07 +00:00
completions . gs = {
2017-11-14 07:29:26 +00:00
alias : 'gs' ,
name : 'go-search' ,
search : 'http://go-search.org/search?q=' ,
compl : 'http://go-search.org/api?action=search&q=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . gs . callback = function ( response ) {
var res = JSON . parse ( response . text ) . hits
. map ( function ( r ) {
return r . package ;
} ) ;
Omnibar . listWords ( res ) ;
} ;
2017-11-17 14:30:47 +00:00
// ****** Haskell ****** //
// Hackage
2017-11-14 07:22:07 +00:00
completions . ha = {
2017-11-14 07:29:26 +00:00
alias : 'ha' ,
name : 'hackage' ,
search : 'https://hackage.haskell.org/packages/search?terms=' ,
compl : 'https://hackage.haskell.org/packages/search.json?terms=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . ha . callback = function ( response ) {
var res = JSON . parse ( response . text ) ;
Omnibar . listResults ( res , function ( s ) {
return Omnibar . createURLItem ( {
title : s . name ,
url : 'https://hackage.haskell.org/package/' + s . name
} ) ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// Hoogle
2017-11-14 07:22:07 +00:00
completions . ho = {
2017-11-14 07:29:26 +00:00
alias : 'ho' ,
name : 'hoogle' ,
search : 'https://www.haskell.org/hoogle/?hoogle=' +
encodeURIComponent ( "+platform +xmonad +xmonad-contrib " ) , // This tells Hoogle to include these modules in the search - encodeURIComponent is only used for better readability
compl : 'https://www.haskell.org/hoogle/?mode=json&hoogle=' +
encodeURIComponent ( "+platform +xmonad +xmonad-contrib " ) ,
2017-11-14 07:22:07 +00:00
} ;
completions . ho . callback = function ( response ) {
var res = JSON . parse ( response . text ) . results ;
Omnibar . listResults ( res , function ( s ) {
return Omnibar . createURLItem ( {
title : s . self ,
url : s . location
} ) ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// Haskell Wiki
2017-11-14 07:22:07 +00:00
completions . hw = {
2017-11-14 07:29:26 +00:00
alias : 'hw' ,
name : 'haskellwiki' ,
search : 'https://wiki.haskell.org/index.php?go=go&search=' ,
compl : 'https://wiki.haskell.org/api.php?action=opensearch&format=json&formatversion=2&namespace=0&limit=10&suggest=true&search=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . hw . callback = function ( response ) {
Omnibar . listWords ( JSON . parse ( response . text ) [ 1 ] ) ;
} ;
2017-11-17 14:30:47 +00:00
// Hayoo
2017-11-14 07:22:07 +00:00
completions . hy = {
2017-11-14 07:29:26 +00:00
alias : 'hy' ,
name : 'hayoo' ,
search : 'http://hayoo.fh-wedel.de/?query=' ,
compl : 'http://hayoo.fh-wedel.de/json?query=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . hy . callback = function ( response ) {
var res = JSON . parse ( response . text ) . result ;
Omnibar . listResults ( res , function ( s ) {
return Omnibar . createURLItem ( {
title : "[" + s . resultType + "] " + s . resultName ,
url : s . resultUri
} ) ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// ****** HTML, CSS, JavaScript, NodeJS, ... ****** //
2017-11-17 15:46:51 +00:00
// jQuery API documentation
completions . jq = {
alias : 'jq' ,
name : 'jquery' ,
search : google _cx _publicurl ( 'jq' ) ,
compl : google _cx _url ( 'jq' ) ,
callback : google _cx _callback ,
} ;
2017-11-17 14:30:47 +00:00
// NodeJS standard library documentation
completions . no = {
alias : 'no' ,
name : 'node' ,
search : google _cx _publicurl ( 'no' ) ,
compl : google _cx _url ( 'no' ) ,
callback : google _cx _callback ,
} ;
// Mozilla Developer Network (MDN)
2017-11-14 07:22:07 +00:00
completions . md = {
2017-11-14 07:29:26 +00:00
alias : 'md' ,
name : 'mdn' ,
search : 'https://developer.mozilla.org/en-US/search?q=' ,
compl : 'https://developer.mozilla.org/en-US/search.json?q=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . md . callback = function ( response ) {
var res = JSON . parse ( response . text ) ;
Omnibar . listResults ( res . documents , function ( s ) {
var excerpt = s . excerpt ;
if ( excerpt . length > 240 ) {
excerpt = excerpt . slice ( 0 , 240 ) + '…' ;
}
res . query . split ( " " ) . forEach ( function ( q ) {
excerpt = excerpt . replace ( new RegExp ( q , 'gi' ) , "<strong>$&</strong>" ) ;
} ) ;
var li = $ ( '<li/>' ) . html ( `
< div >
< div class = "title" > < strong > $ { s . title } < / s t r o n g > < / d i v >
< div style = "font-size:0.8em" > < em > $ { s . slug } < / e m > < / d i v >
< div > $ { excerpt } < / d i v >
< / d i v >
` );
li . data ( 'url' , s . url ) ;
return li ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// NPM registry search
2017-11-14 07:22:07 +00:00
completions . np = {
2017-11-14 07:29:26 +00:00
alias : 'np' ,
name : 'npm' ,
search : 'https://www.npmjs.com/search?q=' ,
compl : 'https://api.npms.io/v2/search/suggestions?size=20&q=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . np . callback = function ( response ) {
var res = JSON . parse ( response . text ) ;
Omnibar . listResults ( res , function ( s ) {
var flags = ""
, desc = ""
, stars = "" ;
if ( s . package . description ) {
desc = s . package . description ;
}
if ( s . score ) {
if ( s . score . final ) {
score = Math . round ( s . score . final * 5 ) ;
stars = "★" . repeat ( score ) + "☆" . repeat ( 5 - score ) ;
}
}
if ( s . flags ) {
Object . keys ( s . flags ) . forEach ( function ( f ) {
flags += "[<span style='color:#ff4d00'>⚑</span> " + f + "] " ;
} ) ;
}
var li = $ ( '<li/>' ) . html ( `
< div >
< style >
. title > em {
font - weight : bold ;
2017-10-31 05:39:21 +00:00
}
2017-11-14 07:22:07 +00:00
< / s t y l e >
< div class = "title" > $ { s . highlight } < / d i v >
< div >
< span style = "font-size:2em;line-height:0.5em" > $ { stars } < / s p a n >
< span > $ { flags } < / s p a n >
< / d i v >
< div > $ { desc } < / d i v >
< / d i v >
` );
li . data ( 'url' , s . package . links . npm ) ;
return li ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// ****** Social Media & Entertainment ****** //
// Hacker News (YCombinator)
completions . hn = {
alias : 'hn' ,
name : 'hackernews' ,
search : 'https://hn.algolia.com/?query=' ,
compl : 'https://hn.algolia.com/api/v1/search?tags=(story,comment)&query=' ,
} ;
completions . hn . callback = function ( response ) {
var res = JSON . parse ( response . text ) . hits ;
Omnibar . listResults ( res , function ( s ) {
var title = "" ;
var prefix = "" ;
if ( s . points ) {
prefix += "[↑" + s . points + "] " ;
}
if ( s . num _comments ) {
prefix += "[↲" + s . num _comments + "] " ;
}
switch ( s . _tags [ 0 ] ) {
case "story" :
title = s . title ;
break ;
case "comment" :
title = s . comment _text ;
break ;
default :
title = s . objectID ;
}
return Omnibar . createURLItem ( {
title : prefix + title ,
url : "https://news.ycombinator.com/item?id=" + s . objectID
} ) ;
} ) ;
} ;
// Reddit
2017-11-14 07:22:07 +00:00
completions . re = {
2017-11-14 07:29:26 +00:00
alias : 're' ,
name : 'reddit' ,
search : 'https://www.reddit.com/search?sort=relevance&t=all&q=' ,
compl : 'https://api.reddit.com/search?syntax=plain&sort=relevance&limit=20&q=' ,
2017-11-14 07:22:07 +00:00
} ;
completions . re . callback = function ( response ) {
var res = JSON . parse ( response . text ) . data . children ;
Omnibar . listResults ( res , function ( s ) {
var d = s . data ;
return Omnibar . createURLItem ( {
title : "[" + d . score + "] " + d . title ,
url : "https://reddit.com" + d . permalink
} ) ;
} ) ;
} ;
2017-11-17 14:30:47 +00:00
// YouTube
2017-11-14 07:22:07 +00:00
completions . yt = {
2017-11-14 07:29:26 +00:00
alias : 'yt' ,
name : 'youtube' ,
search : 'https://www.youtube.com/search?q=' ,
compl : ` https://www.googleapis.com/youtube/v3/search?maxResults=20&part=snippet&type=video,channel&key= ${ keys . google _yt } &safeSearch=none&q= ` ,
2017-11-14 07:22:07 +00:00
} ;
completions . yt . callback = function ( response ) {
var res = JSON . parse ( response . text ) . items ;
Omnibar . listResults ( res , function ( s ) {
switch ( s . id . kind ) {
case "youtube#channel" :
return Omnibar . createURLItem ( {
title : s . snippet . channelTitle + ": " + s . snippet . description ,
url : "https://youtube.com/channel/" + s . id . channelId
2017-10-31 05:39:21 +00:00
} ) ;
2017-11-14 07:22:07 +00:00
case "youtube#video" :
return Omnibar . createURLItem ( {
title : " ▶ " + s . snippet . title ,
url : "https://youtu.be/" + s . id . videoId
} ) ;
}
} ) ;
} ;
2017-10-31 05:39:21 +00:00
2017-11-17 14:30:47 +00:00
// ****** Helper Functions ****** //
function google _cx _callback ( response ) {
var res = JSON . parse ( response . text ) . items ;
Omnibar . listResults ( res , function ( s ) {
var li = $ ( '<li/>' ) . html ( `
< div >
< div class = "title" > < strong > $ { s . htmlTitle } < / s t r o n g > < / d i v >
< div > $ { s . htmlSnippet } < / d i v >
< / d i v >
` );
li . data ( 'url' , s . link ) ;
return li ;
} ) ;
}
function google _cx _url ( alias ) {
var key = ` google_cx_ ${ alias } ` ;
return ` https://www.googleapis.com/customsearch/v1?key= ${ keys . google _cs } &cx= ${ keys [ key ] } &q= ` ;
}
function google _cx _publicurl ( alias ) {
var key = ` google_cx_ ${ alias } ` ;
return ` https://cse.google.com/cse/publicurl?cx= ${ keys [ key ] } &q= ` ;
}
2017-10-31 05:39:21 +00:00
if ( typeof module !== 'undefined' && typeof module . exports !== 'undefined' ) {
module . exports = completions ;
}
2017-11-14 07:22:07 +00:00