urban 0.1.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +0 -5
- data/HISTORY.rdoc +25 -0
- data/README.rdoc +32 -8
- data/Rakefile +24 -0
- data/bin/urban +0 -1
- data/lib/urban/cli.rb +75 -31
- data/lib/urban/dictionary.rb +21 -17
- data/lib/urban/version.rb +1 -1
- data/lib/urban/web.rb +19 -5
- data/test/data/missing.html +272 -0
- data/test/minitest/stop_light.rb +57 -0
- data/test/test_helper.rb +11 -17
- data/test/urban/cli_test.rb +175 -64
- data/test/urban/dictionary_test.rb +22 -6
- data/test/urban/web_test.rb +45 -10
- data/urban.gemspec +4 -5
- metadata +80 -47
data/.travis.yml
CHANGED
data/HISTORY.rdoc
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
=== 1.0.0
|
2
|
+
|
3
|
+
* Major enhancements:
|
4
|
+
|
5
|
+
* Change `list` flag to the `all` flag for more clarity
|
6
|
+
* Remove query from Urban::Web replace with random and search
|
7
|
+
* Add `url` flag to print the url of the definition
|
8
|
+
|
9
|
+
* Minor enhancements:
|
10
|
+
|
11
|
+
* Add this history file
|
12
|
+
* Add Urban::Web#fetch for fetching pages from urban dictionary
|
13
|
+
* Add examples to help
|
14
|
+
* Remove require 'rubygems' from program and lib
|
15
|
+
* Test now only stubs singleton instead of class
|
16
|
+
* Use ~> instead of >= on dependencies
|
17
|
+
* Replace OpenStruct in Urban::Dictionary with plain Struct
|
18
|
+
* Move Nokogiri call to Dictionary#process
|
19
|
+
|
20
|
+
* Bug fix:
|
21
|
+
|
22
|
+
* Passing -v or --version no longer prints help
|
23
|
+
* Undefined words now show a clean error
|
24
|
+
* No internet connection now shows a clean error
|
25
|
+
* Invalid options now show a clean error
|
data/README.rdoc
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
= Urban
|
2
|
-
{https://secure.travis-ci.org/tmiller/urban.png}[http://travis-ci.org/tmiller/urban]
|
2
|
+
{<img src="https://secure.travis-ci.org/tmiller/urban.png"/>}[http://travis-ci.org/tmiller/urban]
|
3
3
|
|
4
4
|
Urban is a command line tool that allows you to look up definitions or pull a
|
5
5
|
random definition from {Urban Dictionary}[http://www.urbandictionary.com].
|
@@ -23,7 +23,7 @@ With git and local working copy
|
|
23
23
|
$ cd urban
|
24
24
|
$ sudo rake install
|
25
25
|
|
26
|
-
== Usage
|
26
|
+
== CLI Usage
|
27
27
|
|
28
28
|
=== 1. Look up a definition
|
29
29
|
|
@@ -32,21 +32,45 @@ With git and local working copy
|
|
32
32
|
=== 2. Random definition
|
33
33
|
|
34
34
|
$ urban -r
|
35
|
+
$ urban --random
|
35
36
|
|
36
37
|
=== 3. Print all definitons
|
37
38
|
|
38
|
-
$ urban -
|
39
|
+
$ urban -a cookie monster
|
40
|
+
$ urban -ra
|
39
41
|
|
40
|
-
=== 4. Print
|
42
|
+
=== 4. Print the url of the definition at the end of the output
|
43
|
+
|
44
|
+
$ urban -u cookie monster
|
45
|
+
$ urban -ru
|
46
|
+
|
47
|
+
=== 5. Print help and version
|
41
48
|
|
42
49
|
$ urban --help
|
43
50
|
$ urban --version
|
44
|
-
|
51
|
+
|
52
|
+
== API Ussage
|
53
|
+
|
54
|
+
requre 'urban'
|
55
|
+
|
56
|
+
# Search for a word
|
57
|
+
entry = Urban::Dictionary.search('impromtpu')
|
58
|
+
|
59
|
+
# Get a random word
|
60
|
+
entry = Urban::Dictionary.random
|
61
|
+
|
62
|
+
|
63
|
+
puts entry.phrase # print the phrase
|
64
|
+
puts entry.url # print the url of the phrase
|
65
|
+
|
66
|
+
# print all of the definitions
|
67
|
+
entry.definitions.each do |definition|
|
68
|
+
puts definition
|
69
|
+
end
|
70
|
+
|
45
71
|
== To Do
|
46
72
|
|
47
|
-
*
|
48
|
-
* Document with {YARD}[http://yardoc.org]
|
49
|
-
* Print better looking output
|
73
|
+
* Add YARD documentation for API
|
50
74
|
|
51
75
|
---
|
52
76
|
|
data/Rakefile
CHANGED
@@ -12,3 +12,27 @@ Rake::TestTask.new do |t|
|
|
12
12
|
t.verbose = true
|
13
13
|
t.warning = true
|
14
14
|
end
|
15
|
+
|
16
|
+
Rake::TestTask.new do |t|
|
17
|
+
t.name = 'test:cli'
|
18
|
+
t.libs << "test"
|
19
|
+
t.test_files = FileList['test/**/cli_test.rb']
|
20
|
+
t.verbose = true
|
21
|
+
t.warning = true
|
22
|
+
end
|
23
|
+
|
24
|
+
Rake::TestTask.new do |t|
|
25
|
+
t.name = 'test:dictionary'
|
26
|
+
t.libs << "test"
|
27
|
+
t.test_files = FileList['test/**/dictionary_test.rb']
|
28
|
+
t.verbose = true
|
29
|
+
t.warning = true
|
30
|
+
end
|
31
|
+
|
32
|
+
Rake::TestTask.new do |t|
|
33
|
+
t.name = 'test:web'
|
34
|
+
t.libs << "test"
|
35
|
+
t.test_files = FileList['test/**/web_test.rb']
|
36
|
+
t.verbose = true
|
37
|
+
t.warning = true
|
38
|
+
end
|
data/bin/urban
CHANGED
data/lib/urban/cli.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'optparse'
|
2
2
|
require 'ostruct'
|
3
|
+
require 'socket'
|
3
4
|
require 'urban/dictionary'
|
4
5
|
|
5
6
|
module Urban
|
@@ -8,65 +9,108 @@ module Urban
|
|
8
9
|
attr_accessor :dictionary
|
9
10
|
|
10
11
|
def initialize
|
11
|
-
@dictionary = Urban::Dictionary
|
12
|
+
@dictionary = Urban::Dictionary
|
12
13
|
end
|
13
14
|
|
14
15
|
def run(args = ARGV)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
begin
|
17
|
+
options = parse(args)
|
18
|
+
output = case
|
19
|
+
when options.help ; options.help_screen
|
20
|
+
when options.version ; "Urban #{Urban::VERSION} (c) Thomas Miller"
|
21
|
+
when options.random ; dictionary.random
|
22
|
+
when !options.phrase.empty? ; dictionary.search(options.phrase)
|
23
|
+
else ; options.help_screen
|
24
|
+
end
|
25
|
+
|
26
|
+
if output.respond_to?(:phrase)
|
27
|
+
if output.definitions
|
28
|
+
print_entry(output, options)
|
29
|
+
else
|
30
|
+
$stderr.puts "urban: no definitions found for #{entry.phrase.upcase}."
|
31
|
+
end
|
32
|
+
else
|
33
|
+
puts output
|
34
|
+
end
|
35
|
+
|
36
|
+
rescue SocketError
|
37
|
+
$stderr.puts 'urban: no internet connection available.'
|
38
|
+
rescue OptionParser::InvalidOption => e
|
39
|
+
$stderr.puts "urban: #{e.message}\nTry `urban --help' for more information."
|
40
|
+
rescue Exception => e
|
41
|
+
$stderr.puts e.message
|
20
42
|
end
|
21
|
-
output_results(results, options.list)
|
22
43
|
end
|
23
44
|
|
24
45
|
private
|
25
46
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
47
|
+
def print_error(entry)
|
48
|
+
end
|
49
|
+
|
50
|
+
def print_entry(entry, options)
|
51
|
+
puts "WARNING: --list and -l are deprecated please use --all or -a instead" if options.list
|
52
|
+
puts "\n#{entry.phrase.upcase}\n\n"
|
53
|
+
if options.all
|
54
|
+
entry.definitions.each { |definition| puts "#{definition}\n\n" }
|
30
55
|
else
|
31
|
-
puts "#{
|
56
|
+
puts "#{entry.definitions.first}\n\n"
|
32
57
|
end
|
58
|
+
puts "URL: #{entry.url}\n\n" if options.url
|
33
59
|
end
|
34
60
|
|
35
61
|
def parse(args)
|
36
62
|
options = OpenStruct.new
|
37
|
-
options.random = false
|
38
|
-
|
39
|
-
options.phrase = ''
|
63
|
+
options.random = options.all = options.version = options.help = false
|
64
|
+
|
40
65
|
opts = OptionParser.new do |o|
|
41
|
-
o.banner =
|
42
|
-
|
66
|
+
o.banner = <<-EOB
|
67
|
+
Usage: urban [OPTION]... [PHRASE]
|
68
|
+
Search http://urbandictionary.com for definitions of phrases
|
43
69
|
|
44
|
-
|
45
|
-
|
46
|
-
|
70
|
+
EOB
|
71
|
+
|
72
|
+
o.separator "Options:"
|
73
|
+
o.on('-a', '--all', 'List all definitions') do
|
74
|
+
options.all = true
|
47
75
|
end
|
48
76
|
|
49
|
-
o.on('-r', '--random', '
|
77
|
+
o.on('-r', '--random', 'Return a random phrase and definition') do
|
50
78
|
options.random = true
|
51
79
|
end
|
52
80
|
|
81
|
+
o.on('-u', '--url', "Print the definition's url after the definition") do
|
82
|
+
options.url = true
|
83
|
+
end
|
84
|
+
|
53
85
|
o.on('-h', '--help', 'Show this message') do
|
54
|
-
options.
|
86
|
+
options.help = true
|
55
87
|
end
|
56
88
|
|
57
|
-
o.on('--version', 'Show version') do
|
58
|
-
|
59
|
-
options.exit = true
|
89
|
+
o.on('-v', '--version', 'Show version information') do
|
90
|
+
options.version = true
|
60
91
|
end
|
61
|
-
end
|
62
|
-
opts.parse!(args)
|
63
|
-
options.phrase = args.join(' ')
|
64
92
|
|
65
|
-
|
66
|
-
|
67
|
-
|
93
|
+
o.on('-l', '--list', 'DEPRECATED please use --all or -a instead') do
|
94
|
+
options.list = true
|
95
|
+
options.all = true
|
96
|
+
end
|
68
97
|
end
|
69
98
|
|
99
|
+
examples = <<-EOE
|
100
|
+
|
101
|
+
Examples:
|
102
|
+
urban cookie monster Search for "cookie monster" and print its
|
103
|
+
first definition
|
104
|
+
urban -a cookie monster Search for "cookie monster" and print all of
|
105
|
+
its available definitions
|
106
|
+
urban -r Print a random phrase and its first definition
|
107
|
+
urban -ra Print a random phrase and all of its available
|
108
|
+
definitions
|
109
|
+
|
110
|
+
EOE
|
111
|
+
opts.parse!(args)
|
112
|
+
options.phrase = args.join(' ')
|
113
|
+
options.help_screen = opts.help + examples
|
70
114
|
options
|
71
115
|
end
|
72
116
|
end
|
data/lib/urban/dictionary.rb
CHANGED
@@ -1,40 +1,44 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'nokogiri'
|
3
|
-
require 'ostruct'
|
4
2
|
require 'urban/version'
|
5
3
|
require 'urban/web'
|
6
4
|
|
7
5
|
module Urban
|
8
|
-
|
6
|
+
module Dictionary
|
7
|
+
extend self
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
def initialize
|
13
|
-
@web_service = Urban::Web.new
|
14
|
-
end
|
9
|
+
Entry = Struct.new(:phrase, :definitions, :url)
|
10
|
+
attr_writer :web_service
|
15
11
|
|
16
12
|
def random
|
17
|
-
|
18
|
-
process(document)
|
13
|
+
process(web_service.random)
|
19
14
|
end
|
20
15
|
|
21
16
|
def search(phrase)
|
22
|
-
|
23
|
-
|
17
|
+
process(web_service.search(phrase))
|
18
|
+
end
|
19
|
+
|
20
|
+
def web_service
|
21
|
+
@web_service ||= Urban::Web
|
24
22
|
end
|
25
23
|
|
26
24
|
private
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
|
26
|
+
def process(response)
|
27
|
+
document = Nokogiri::HTML(response.stream)
|
28
|
+
if not_defined = document.at_xpath('//div[@id="not_defined_yet"]/i')
|
29
|
+
Entry.new(not_defined.content.strip, nil, nil)
|
30
|
+
else
|
31
|
+
Entry.new( document.at_xpath('//td[@class="word"][1]').content.strip ,
|
32
|
+
parse_definitions(document),
|
33
|
+
response.url)
|
34
|
+
end
|
31
35
|
end
|
32
36
|
|
33
37
|
def parse_definitions(document)
|
34
38
|
definitions = document.xpath('//td/div[@class="definition"]').map do |node|
|
35
39
|
node.xpath('//br').each { |br| br.replace(Nokogiri::XML::Text.new("\n", node.document)) };
|
36
40
|
node.content.strip
|
37
|
-
end
|
41
|
+
end
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
data/lib/urban/version.rb
CHANGED
data/lib/urban/web.rb
CHANGED
@@ -1,13 +1,27 @@
|
|
1
|
-
require 'urban/version'
|
2
1
|
require 'open-uri'
|
2
|
+
require 'urban/version'
|
3
3
|
|
4
4
|
module Urban
|
5
|
-
|
5
|
+
module Web
|
6
|
+
extend self
|
7
|
+
|
8
|
+
Response = Struct.new(:url, :stream)
|
9
|
+
|
6
10
|
URL = 'http://www.urbandictionary.com'
|
7
11
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
12
|
+
def search(phrase)
|
13
|
+
result = fetch "define.php", :term => phrase
|
14
|
+
Response.new(result.base_uri.to_s, result)
|
15
|
+
end
|
16
|
+
|
17
|
+
def random
|
18
|
+
result = fetch "random.php"
|
19
|
+
Response.new(result.base_uri.to_s, result)
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch(page, parameters = {})
|
23
|
+
params = '?' + parameters.map { |k,v| "#{k}=#{v}" }.join('&') unless parameters.empty?
|
24
|
+
open(escape_uri("#{URL}/#{page}#{params}"))
|
11
25
|
end
|
12
26
|
|
13
27
|
private
|
@@ -0,0 +1,272 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html lang='en-US' xml:lang='en-US' xmlns='http://www.w3.org/1999/xhtml'>
|
3
|
+
<head>
|
4
|
+
<title>Urban Dictionary: gubble</title>
|
5
|
+
<script type='text/javascript'>
|
6
|
+
//<![CDATA[
|
7
|
+
var MobileDetector={redirect:function(b,a){if(b&&b.match(/(iPhone|iPod|Android|webOS|Opera Mini|PlayStation Portable)/)){this.go(a)}},go:function(a){window.location=a}};
|
8
|
+
MobileDetector.redirect(navigator.userAgent, "/iphone/#define?term=gubble");
|
9
|
+
//]]>
|
10
|
+
</script>
|
11
|
+
|
12
|
+
|
13
|
+
<!--[if (!IE)|(gte IE 8)]><!-->
|
14
|
+
<link href="http://static0.urbandictionary.com/rel-d5ca9bc/assets/base-datauri.css" media="screen" rel="stylesheet" type="text/css" />
|
15
|
+
<!--<![endif]-->
|
16
|
+
<!--[if lte IE 7]>
|
17
|
+
<link href="http://static2.urbandictionary.com/rel-d5ca9bc/assets/base.css" media="screen" rel="stylesheet" type="text/css" />
|
18
|
+
<![endif]-->
|
19
|
+
<link href="http://feeds.urbandictionary.com/UrbanWordOfTheDay" rel="alternate" title="Urban Word of the Day" type="application/rss+xml" />
|
20
|
+
<link href="http://static0.urbandictionary.com/rel-d5ca9bc/favicon.ico" rel="shortcut icon" /><link href="http://static0.urbandictionary.com/rel-d5ca9bc/favicon.ico" rel="icon" />
|
21
|
+
|
22
|
+
|
23
|
+
<link href='http://static2.urbandictionary.com/rel-d5ca9bc/osd.xml' rel='search' title='Urban Dictionary Search' type='application/opensearchdescription+xml' />
|
24
|
+
<meta content='gubble' property='og:title' />
|
25
|
+
<meta content="http://static1.urbandictionary.com/rel-d5ca9bc/images/og_image.png" property="og:image" />
|
26
|
+
<script type="text/javascript">
|
27
|
+
//<![CDATA[
|
28
|
+
var Record={setRecordingCookie:function(a){document.cookie="recording="+a},getRecordingCookie:function(){var a=document.cookie.match("recording=(true|false)");return a?(a[1]=="true"):null},start:function(a){if(Record.getRecordingCookie()===null){Record.setRecordingCookie(Math.random()<a/100)}if(Record.getRecordingCookie()){document.write(unescape("%3Cscript src='"+(("https:"==document.location.protocol)?"https":"http")+"://c.mouseflow.com/projects/38f33478-b73a-4335-a2df-b0f221197471.js' type='text/javascript'%3E%3C/script%3E"))}}};
|
29
|
+
//]]>
|
30
|
+
</script>
|
31
|
+
<script type='text/javascript'>
|
32
|
+
//<![CDATA[
|
33
|
+
Record.start(0.001);
|
34
|
+
//]]>
|
35
|
+
</script>
|
36
|
+
<meta content='Urban Dictionary' property='og:site_name' />
|
37
|
+
</head>
|
38
|
+
<body class='define_controller'>
|
39
|
+
<div id='header_background'>
|
40
|
+
<div id='header_width'>
|
41
|
+
<div id='header'>
|
42
|
+
<a href="/" id="logo_anchor"><img alt="" id="logo" src="http://static1.urbandictionary.com/rel-d5ca9bc/images/logo-holiday.png" /></a>
|
43
|
+
<div id='like_button'>
|
44
|
+
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ffacebook.com%2Furbandictionary&send=false&layout=button_count&width=100&show_faces=false&action=like&colorscheme=light&font&height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe>
|
45
|
+
</div>
|
46
|
+
<div id='form'>
|
47
|
+
<form action="/define.php" method="get">
|
48
|
+
<table>
|
49
|
+
<tr>
|
50
|
+
<td></td>
|
51
|
+
<td class='look_up'>look up anything, like <a href="/local.php">your city</a>:</td>
|
52
|
+
</tr>
|
53
|
+
<tr>
|
54
|
+
<td>
|
55
|
+
<div id='autocompleter_spinner' style='display: none'></div>
|
56
|
+
</td>
|
57
|
+
<td><input id="term" name="term" tabindex="1" type="text" value="gubble" /></td>
|
58
|
+
<td>
|
59
|
+
<input type='submit' value='search' />
|
60
|
+
</td>
|
61
|
+
</tr>
|
62
|
+
</table>
|
63
|
+
</form>
|
64
|
+
</div>
|
65
|
+
<div id='topnav'>
|
66
|
+
<a href="/">word of the day</a> <a class="active" href="/popular.php?character=A">dictionary</a> <a href="/thesaurus.php">thesaurus</a> <a href="/names.php">names</a> <a href="/video.list.php">media</a> <a href="/products.php">store</a> <a href="/add.php">add</a> <a href="/editor/staygo.php">edit</a> <a href="http://blog.urbandictionary.com/">blog</a>
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
<div class='autocomplete' id='term_list' style='display:none'></div>
|
72
|
+
|
73
|
+
<div id='outer'>
|
74
|
+
<div class='' id='whole'>
|
75
|
+
<div class='innernav' id='subnav'>
|
76
|
+
<a accesskey="1" href="/random.php" title="hot key + 1">random</a> <a href="/popular.php?character=A">A</a> <a href="/popular.php?character=B">B</a> <a href="/popular.php?character=C">C</a> <a href="/popular.php?character=D">D</a> <a href="/popular.php?character=E">E</a> <a href="/popular.php?character=F">F</a> <a href="/popular.php?character=G">G</a> <a href="/popular.php?character=H">H</a> <a href="/popular.php?character=I">I</a> <a class="active" href="/browse.php?word=gubble">J</a> <a href="/popular.php?character=K">K</a> <a href="/popular.php?character=L">L</a> <a href="/popular.php?character=M">M</a> <a href="/popular.php?character=N">N</a> <a href="/popular.php?character=O">O</a> <a href="/popular.php?character=P">P</a> <a href="/popular.php?character=Q">Q</a> <a href="/popular.php?character=R">R</a> <a href="/popular.php?character=S">S</a> <a href="/popular.php?character=T">T</a> <a href="/popular.php?character=U">U</a> <a href="/popular.php?character=V">V</a> <a href="/popular.php?character=W">W</a> <a href="/popular.php?character=X">X</a> <a href="/popular.php?character=Y">Y</a> <a href="/popular.php?character=Z">Z</a> <a href="/browse.php?character=%2A">#</a> <a href="/yesterday.php?date=2011-09-09">new</a> <a href="/favorites.php">favorites</a>
|
77
|
+
</div>
|
78
|
+
<table cellpadding='0' cellspacing='0' id='tablist'>
|
79
|
+
<tr>
|
80
|
+
<td id='leftist'>
|
81
|
+
<div class='prev_next_buttons'>
|
82
|
+
<a href="#" id="prev_titles" onclick="nearby.go('prev'); return false;" onmouseout="$(this).down().src = "http://static3.urbandictionary.com/rel-d5ca9bc/images/uparrow.gif"" onmouseover="$(this).down().src = "http://static3.urbandictionary.com/rel-d5ca9bc/images/uparrow_dark.gif""><img src="http://static3.urbandictionary.com/rel-d5ca9bc/images/uparrow.gif" /></a>
|
83
|
+
<a href="#" id="next_titles" onclick="nearby.go('next'); return false;" onmouseout="$(this).down().src = "http://static2.urbandictionary.com/rel-d5ca9bc/images/downarrow.gif"" onmouseover="$(this).down().src = "http://static2.urbandictionary.com/rel-d5ca9bc/images/downarrow_dark.gif""><img src="http://static2.urbandictionary.com/rel-d5ca9bc/images/downarrow.gif" /></a>
|
84
|
+
</div>
|
85
|
+
<ul id='nearby_titles'>
|
86
|
+
<li><a href="/define.php?term=Jeron" class="urbantip">Jeron</a></li><li><a href="/define.php?term=jeronder" class="urbantip">jeronder</a></li><li><a href="/define.php?term=jeronimo" class="urbantip">jeronimo</a></li><li><a href="/define.php?term=Jeroo" class="urbantip">Jeroo</a></li><li><a href="/define.php?term=Jeropa" class="urbantip">Jeropa</a></li><li><a href="/define.php?term=Jerott" class="urbantip">Jerott</a></li><li><a href="/define.php?term=jerowz" class="urbantip">jerowz</a></li><li><a href="/define.php?term=jeroyd" class="urbantip">jeroyd</a></li><li><a href="/define.php?term=Jeroz" class="urbantip">Jeroz</a></li><li><b><a href="/define.php?term=jerp" class="urbantip">jerp</a></b></li><li><a href="/define.php?term=Jerper" class="urbantip">Jerper</a></li><li><a href="/define.php?term=Jerpes" class="urbantip">Jerpes</a></li><li><a href="/define.php?term=jerph" class="urbantip">jerph</a></li><li><a href="/define.php?term=Jerpies" class="urbantip">Jerpies</a></li><li><a href="/define.php?term=JERPIN" class="urbantip">JERPIN</a></li><li class="active"><b>gubble</b></li><li><a href="/define.php?term=Jerquan" class="urbantip">Jerquan</a></li><li><a href="/define.php?term=Jerque%20du%20Soleil" class="urbantip">Jerque du Soleil</a></li><li><a href="/define.php?term=jerr" class="urbantip">jerr</a></li><li><a href="/define.php?term=Jerra" class="urbantip">Jerra</a></li><li><a href="/define.php?term=Jerrad" class="urbantip">Jerrad</a></li><li><a href="/define.php?term=Jerrael" class="urbantip">Jerrael</a></li><li><a href="/define.php?term=Jerralise" class="urbantip">Jerralise</a></li><li><a href="/define.php?term=Jerramy%20Stevens" class="urbantip">Jerramy Stevens</a></li><li><a href="/define.php?term=Jerred" class="urbantip">Jerred</a></li><li><a href="/define.php?term=Jerrel" class="urbantip">Jerrel</a></li><li><a href="/define.php?term=Jerrell" class="urbantip">Jerrell</a></li><li><a href="/define.php?term=Jerremy" class="urbantip">Jerremy</a></li><li><a href="/define.php?term=jerrera" class="urbantip">jerrera</a></li><li><a href="/define.php?term=Jerreth" class="urbantip">Jerreth</a></li><li><a href="/define.php?term=Jerrett" class="urbantip">Jerrett</a></li><li><a href="/define.php?term=Jerri" class="urbantip">Jerri</a></li><li><a href="/define.php?term=Jerri%27" class="urbantip">Jerri'</a></li><li><a href="/define.php?term=Jerrian" class="urbantip">Jerrian</a></li><li><a href="/define.php?term=Jerric" class="urbantip">Jerric</a></li><li><b><a href="/define.php?term=JERRICA" class="urbantip">JERRICA</a></b></li><li><a href="/define.php?term=Jerrican" class="urbantip">Jerrican</a></li><li><a href="/define.php?term=Jerricca" class="urbantip">Jerricca</a></li><li><a href="/define.php?term=Jerrick" class="urbantip">Jerrick</a></li><li><a href="/define.php?term=jerries" class="urbantip">jerries</a></li><li><a href="/define.php?term=jerrihogoil" class="urbantip">jerrihogoil</a></li>
|
87
|
+
</ul>
|
88
|
+
<script type='text/javascript'>
|
89
|
+
//<![CDATA[
|
90
|
+
window.onDomLoaded = window.onDomLoaded || [];
|
91
|
+
window.onDomLoaded.push(function() {
|
92
|
+
window.nearby = new Nearby(new NearbyView(), "Jeron", "jerrihogoil");
|
93
|
+
});
|
94
|
+
//]]>
|
95
|
+
</script>
|
96
|
+
|
97
|
+
<div class='prev_next_buttons'>
|
98
|
+
<a href="#" id="prev_titles_bottom" onclick="nearby.go('prev'); return false;" onmouseout="$(this).down().src = "http://static3.urbandictionary.com/rel-d5ca9bc/images/uparrow.gif"" onmouseover="$(this).down().src = "http://static3.urbandictionary.com/rel-d5ca9bc/images/uparrow_dark.gif""><img src="http://static3.urbandictionary.com/rel-d5ca9bc/images/uparrow.gif" /></a>
|
99
|
+
<a href="#" id="next_titles_bottom" onclick="nearby.go('next'); return false;" onmouseout="$(this).down().src = "http://static2.urbandictionary.com/rel-d5ca9bc/images/downarrow.gif"" onmouseover="$(this).down().src = "http://static2.urbandictionary.com/rel-d5ca9bc/images/downarrow_dark.gif""><img src="http://static2.urbandictionary.com/rel-d5ca9bc/images/downarrow.gif" /></a>
|
100
|
+
</div>
|
101
|
+
|
102
|
+
</td>
|
103
|
+
<td>
|
104
|
+
<div id='content'><div id='not_defined_yet'>
|
105
|
+
<i>gubble</i> isn't defined <a href="/add.php?word=gubble">yet</a>.
|
106
|
+
</div>
|
107
|
+
<div style='margin: 50px auto 0 auto; width: 300px; height: 250px'>
|
108
|
+
<script type="text/javascript">
|
109
|
+
//<![CDATA[
|
110
|
+
var googletag = googletag || {};
|
111
|
+
googletag.cmd = googletag.cmd || [];
|
112
|
+
googletag.cmd.push(function() {
|
113
|
+
googletag.defineUnit('/1031683/ca-pub-4733233155277872/HP_ATF_300x250', [300, 250], 'dfp_homepage_medium_rectangle').addService(googletag.pubads());
|
114
|
+
googletag.defineUnit('/1031683/ca-pub-4733233155277872/HP_BTF_300x250', [300, 250], 'dfp_homepage_medium_rectangle_below').addService(googletag.pubads());
|
115
|
+
googletag.defineUnit('/1031683/ca-pub-4733233155277872/ROS_BTF_728x90', [728, 90], 'dfp_every_page_leaderboard').addService(googletag.pubads());
|
116
|
+
googletag.defineUnit('/1031683/ca-pub-4733233155277872/ROS_Right_160x60', [160, 600], 'dfp_skyscraper').addService(googletag.pubads());
|
117
|
+
googletag.defineUnit('/1031683/ca-pub-4733233155277872/Define_300x250', [300, 250], 'dfp_define_rectangle').addService(googletag.pubads());
|
118
|
+
googletag.defineUnit('/1031683/ca-pub-4733233155277872/ROS_500x250', [475, 250], 'dfp_define_double_rectangle').addService(googletag.pubads());
|
119
|
+
|
120
|
+
googletag.pubads().set("alternate_ad_url", "http://www.urbandictionary.com/google_alternate_ad.html");
|
121
|
+
googletag.pubads().setTargeting("safe_word", "false");
|
122
|
+
|
123
|
+
googletag.pubads().enableSingleRequest();
|
124
|
+
googletag.enableServices();
|
125
|
+
});
|
126
|
+
|
127
|
+
(function() {
|
128
|
+
var gads = document.createElement('script');
|
129
|
+
gads.async = true;
|
130
|
+
gads.type = 'text/javascript';
|
131
|
+
gads.src = "http://www.googletagservices.com/tag/js/gpt.js";
|
132
|
+
var node = document.getElementsByTagName('script')[0];
|
133
|
+
node.parentNode.insertBefore(gads, node);
|
134
|
+
})();
|
135
|
+
|
136
|
+
//]]>
|
137
|
+
</script><div id="dfp_define_rectangle" style="width: 300px; height: 250px"><script type="text/javascript">
|
138
|
+
//<![CDATA[
|
139
|
+
googletag.cmd.push(function() { googletag.display('dfp_define_rectangle'); });
|
140
|
+
//]]>
|
141
|
+
</script></div>
|
142
|
+
</div>
|
143
|
+
</div>
|
144
|
+
</td>
|
145
|
+
<td id='rightist'>
|
146
|
+
<div id="dfp_skyscraper" style="width: 160px; height: 600px"><script type="text/javascript">
|
147
|
+
//<![CDATA[
|
148
|
+
googletag.cmd.push(function() { googletag.display('dfp_skyscraper'); });
|
149
|
+
//]]>
|
150
|
+
</script></div>
|
151
|
+
</td>
|
152
|
+
</tr>
|
153
|
+
</table>
|
154
|
+
|
155
|
+
<div id='bottomad'>
|
156
|
+
<div id="dfp_every_page_leaderboard" style="width: 728px; height: 90px; margin: 0 auto"><script type="text/javascript">
|
157
|
+
//<![CDATA[
|
158
|
+
googletag.cmd.push(function() { googletag.display('dfp_every_page_leaderboard'); });
|
159
|
+
//]]>
|
160
|
+
</script></div>
|
161
|
+
</div>
|
162
|
+
</div>
|
163
|
+
<div id='copyright'>
|
164
|
+
<a href="/">Urban Dictionary</a>
|
165
|
+
<span id='years'>
|
166
|
+
©1999-2011
|
167
|
+
</span>
|
168
|
+
<a href='/tos.php'>terms of service</a>
|
169
|
+
<a href='/privacy.php'>privacy</a>
|
170
|
+
<a href='/feedback.php'>feedback</a>
|
171
|
+
<a href='/editor/remove.php'>remove</a>
|
172
|
+
<a href='/ads.php'>advertise</a>
|
173
|
+
<a href='/poweredby.php'>technology</a>
|
174
|
+
<a href='http://jobs.urbandictionary.com/'>jobs</a>
|
175
|
+
<a href="/live_support.php" id="live_support" onclick="popAndFocus("/live_support.php", "live support"); return false;" style="display: none">live support</a>
|
176
|
+
</div>
|
177
|
+
|
178
|
+
<table class='offsite'>
|
179
|
+
<tr>
|
180
|
+
<td>
|
181
|
+
<table class='facebook'>
|
182
|
+
<tr>
|
183
|
+
<td>
|
184
|
+
<a href="http://feeds.urbandictionary.com/UrbanWordOfTheDay" onclick="urchinTracker("/outgoing/http_feeds_urbandictionary_com_UrbanWordOfTheDay")"><div class="rss_image"></div></a>
|
185
|
+
</td>
|
186
|
+
<td>
|
187
|
+
<a href="http://feeds.urbandictionary.com/UrbanWordOfTheDay" onclick="urchinTracker("/outgoing/http_feeds_urbandictionary_com_UrbanWordOfTheDay")">add via <b>rss</b></a>
|
188
|
+
<br />
|
189
|
+
<a href="http://www.google.com/calendar/render?cid=http%3A%2F%2Fwww.urbandictionary.com%2Fdaily.ics" onclick="urchinTracker("/outgoing/http_www_google_com_calendar_render_cid_http_A_F_Fwww_urbandictionary_com_Fdaily_ics")">or <b>google calendar</b></a>
|
190
|
+
</td>
|
191
|
+
</tr>
|
192
|
+
</table>
|
193
|
+
</td>
|
194
|
+
<td>
|
195
|
+
<table class='facebook'>
|
196
|
+
<tr>
|
197
|
+
<td>
|
198
|
+
<a href="http://www.facebook.com/profile.php?id=6295613171" onclick="urchinTracker("/outgoing/http_www_facebook_com_profile_php_id")"><div class="facebook_image"></div></a>
|
199
|
+
</td>
|
200
|
+
<td>
|
201
|
+
<a href="http://www.facebook.com/profile.php?id=6295613171" onclick="urchinTracker("/outgoing/http_www_facebook_com_profile_php_id")">add <b>urban dictionary</b><br/>on <b>facebook</b></a>
|
202
|
+
</td>
|
203
|
+
</tr>
|
204
|
+
</table>
|
205
|
+
</td>
|
206
|
+
<td>
|
207
|
+
<table class='facebook'>
|
208
|
+
<tr>
|
209
|
+
<td>
|
210
|
+
<div class='iphone_image'></div>
|
211
|
+
</td>
|
212
|
+
<td>
|
213
|
+
search ud
|
214
|
+
<br />
|
215
|
+
<a href="http://iphone.urbandictionary.com/" onclick="urchinTracker("/outgoing/http_iphone_urbandictionary_com")">from your <b>phone</b></a>
|
216
|
+
<br />
|
217
|
+
<a href="/sms.php" onclick="urchinTracker("/outgoing/sms_php")">or via <b>txt</b></a>
|
218
|
+
</td>
|
219
|
+
</tr>
|
220
|
+
</table>
|
221
|
+
</td>
|
222
|
+
<td>
|
223
|
+
<table class='facebook'>
|
224
|
+
<tr>
|
225
|
+
<td>
|
226
|
+
<a href="http://twitter.com/urbandaily/" onclick="urchinTracker("/outgoing/http_twitter_com_urbandaily")"><div class="twitter_image"></div></a>
|
227
|
+
</td>
|
228
|
+
<td>
|
229
|
+
<a href="http://twitter.com/urbandaily/" onclick="urchinTracker("/outgoing/http_twitter_com_urbandaily")"><b>follow urbandaily</b><br/>on twitter</a>
|
230
|
+
</td>
|
231
|
+
</tr>
|
232
|
+
</table>
|
233
|
+
</td>
|
234
|
+
</tr>
|
235
|
+
</table>
|
236
|
+
|
237
|
+
</div>
|
238
|
+
<script src="http://static3.urbandictionary.com/rel-d5ca9bc/assets/base.js" type="text/javascript"></script>
|
239
|
+
<script type='text/javascript'>
|
240
|
+
//<![CDATA[
|
241
|
+
var host_env = new HostEnv(document.location.hostname);
|
242
|
+
Uncacheable.instance.load([], host_env.uncacheableUrl());
|
243
|
+
//]]>
|
244
|
+
</script>
|
245
|
+
|
246
|
+
|
247
|
+
|
248
|
+
<script type="text/javascript">
|
249
|
+
|
250
|
+
var _gaq = _gaq || [];
|
251
|
+
_gaq.push(['_setAccount', "UA-31805-1"]);
|
252
|
+
_gaq.push(['_trackPageview']);
|
253
|
+
|
254
|
+
(function() {
|
255
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
256
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
257
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
258
|
+
})();
|
259
|
+
|
260
|
+
</script>
|
261
|
+
|
262
|
+
<!-- Start Quantcast tag -->
|
263
|
+
<script type="text/javascript" src="http://edge.quantserve.com/quant.js"></script>
|
264
|
+
<script type="text/javascript">
|
265
|
+
_qacct="p-77H27_lnOeCCI";quantserve();</script>
|
266
|
+
<noscript>
|
267
|
+
<img src="http://pixel.quantserve.com/pixel/p-77H27_lnOeCCI.gif" style="display: none" height="1" width="1" alt=""/></noscript>
|
268
|
+
<!-- End Quantcast tag -->
|
269
|
+
|
270
|
+
|
271
|
+
</body>
|
272
|
+
</html>
|