meme_captain 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -1
- data/ChangeLog +33 -0
- data/README.md +4 -0
- data/bin/memecaptain +68 -0
- data/config.ru +13 -0
- data/lib/meme_captain/caption_choice.rb +12 -5
- data/lib/meme_captain/draw.rb +7 -5
- data/lib/meme_captain/image_list/cache.rb +49 -0
- data/lib/meme_captain/image_list/fetch.rb +26 -0
- data/lib/meme_captain/image_list/source_image.rb +28 -0
- data/lib/meme_captain/image_list/watermark.rb +24 -0
- data/lib/meme_captain/image_list.rb +5 -0
- data/lib/meme_captain/meme.rb +3 -2
- data/lib/meme_captain/meme_data.rb +34 -0
- data/lib/meme_captain/server.rb +124 -41
- data/lib/meme_captain/version.rb +1 -1
- data/lib/meme_captain.rb +2 -2
- data/meme_captain.gemspec +4 -0
- data/public/source_images.json +142 -0
- data/public/thumbs.jpg +0 -0
- data/script/thumb_sprites.rb +17 -4
- data/views/404.erb +17 -0
- data/views/index.erb +100 -83
- data/watermark.png +0 -0
- metadata +64 -15
- data/img_cache/source/.gitignore +0 -0
- data/lib/meme_captain/filesystem_cache.rb +0 -70
- data/lib/meme_captain/mime_type.rb +0 -20
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
{
|
|
2
|
+
"thumbHeight": 50,
|
|
3
|
+
"thumbSpritesUrl": "http://memecaptain.com/thumbs.jpg",
|
|
4
|
+
"images": [
|
|
5
|
+
{
|
|
6
|
+
"url": "http://memecaptain.com/all_the_things.jpg",
|
|
7
|
+
"thumbWidth": 67
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"url": "http://memecaptain.com/all_the_things2.jpg",
|
|
11
|
+
"thumbWidth": 67
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"url": "http://memecaptain.com/aw_yeah.png",
|
|
15
|
+
"thumbWidth": 50
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"url": "http://memecaptain.com/bear_grylls.jpg",
|
|
19
|
+
"thumbWidth": 45
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"url": "http://memecaptain.com/boromir.jpg",
|
|
23
|
+
"thumbWidth": 85
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"url": "http://memecaptain.com/business_cat.jpg",
|
|
27
|
+
"thumbWidth": 50
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"url": "http://memecaptain.com/cool_story_bro.jpg",
|
|
31
|
+
"thumbWidth": 72
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"url": "http://memecaptain.com/courage_wolf.jpg",
|
|
35
|
+
"thumbWidth": 50
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"url": "http://memecaptain.com/dwight_schrute.jpg",
|
|
39
|
+
"thumbWidth": 73
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"url": "http://memecaptain.com/fry.png",
|
|
43
|
+
"thumbWidth": 67
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"url": "http://memecaptain.com/good_guy_greg.jpg",
|
|
47
|
+
"thumbWidth": 51
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"url": "http://memecaptain.com/grandma.jpg",
|
|
51
|
+
"thumbWidth": 68
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"url": "http://memecaptain.com/insanity_wolf.jpg",
|
|
55
|
+
"thumbWidth": 50
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"url": "http://memecaptain.com/internet_husband.jpg",
|
|
59
|
+
"thumbWidth": 45
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"url": "http://memecaptain.com/joseph_ducreux.jpg",
|
|
63
|
+
"thumbWidth": 38
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"url": "http://memecaptain.com/me_gusta.png",
|
|
67
|
+
"thumbWidth": 50
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"url": "http://memecaptain.com/most_interesting.jpg",
|
|
71
|
+
"thumbWidth": 40
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"url": "http://memecaptain.com/ned_stark.jpg",
|
|
75
|
+
"thumbWidth": 55
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"url": "http://memecaptain.com/ok.png",
|
|
79
|
+
"thumbWidth": 50
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"url": "http://memecaptain.com/philosoraptor.jpg",
|
|
83
|
+
"thumbWidth": 50
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"url": "http://memecaptain.com/rage.png",
|
|
87
|
+
"thumbWidth": 50
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"url": "http://memecaptain.com/sap.jpg",
|
|
91
|
+
"thumbWidth": 50
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"url": "http://memecaptain.com/scumbag_steve.jpg",
|
|
95
|
+
"thumbWidth": 50
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"url": "http://memecaptain.com/seriously.png",
|
|
99
|
+
"thumbWidth": 50
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"url": "http://memecaptain.com/slowpoke.jpg",
|
|
103
|
+
"thumbWidth": 50
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"url": "http://memecaptain.com/success_kid.jpg",
|
|
107
|
+
"thumbWidth": 50
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"url": "http://memecaptain.com/town_crier.jpg",
|
|
111
|
+
"thumbWidth": 75
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"url": "http://memecaptain.com/troll_face.jpg",
|
|
115
|
+
"thumbWidth": 55
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"url": "http://memecaptain.com/trolldad.png",
|
|
119
|
+
"thumbWidth": 50
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"url": "http://memecaptain.com/trolldad_dancing.png",
|
|
123
|
+
"thumbWidth": 50
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"url": "http://memecaptain.com/tyler_durden.jpg",
|
|
127
|
+
"thumbWidth": 50
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"url": "http://memecaptain.com/xzibit.jpg",
|
|
131
|
+
"thumbWidth": 77
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"url": "http://memecaptain.com/y_u_no.jpg",
|
|
135
|
+
"thumbWidth": 67
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"url": "http://memecaptain.com/yao_ming.jpg",
|
|
139
|
+
"thumbWidth": 42
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
data/public/thumbs.jpg
CHANGED
|
Binary file
|
data/script/thumb_sprites.rb
CHANGED
|
@@ -1,20 +1,33 @@
|
|
|
1
|
+
require 'json'
|
|
1
2
|
require 'RMagick'
|
|
2
3
|
|
|
3
4
|
# make a combined thumbnail image from a list of images for use in CSS sprites
|
|
5
|
+
# generate source images description json
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
url_prefix = 'http://memecaptain.com/'
|
|
8
|
+
|
|
9
|
+
data = {
|
|
10
|
+
:thumbHeight => 50,
|
|
11
|
+
:thumbSpritesUrl => "#{url_prefix}thumbs.jpg",
|
|
12
|
+
:images => [],
|
|
13
|
+
}
|
|
6
14
|
|
|
7
15
|
thumbs = Magick::ImageList.new
|
|
8
16
|
|
|
9
17
|
ARGV.sort.each do |file|
|
|
10
18
|
image = Magick::ImageList.new(file)
|
|
11
|
-
image.resize_to_fit!(0,
|
|
19
|
+
image.resize_to_fit!(0, data[:thumbHeight])
|
|
12
20
|
image.each do |frame|
|
|
13
21
|
thumbs.push frame
|
|
14
|
-
|
|
22
|
+
data[:images] << {
|
|
23
|
+
:url => "#{url_prefix}#{File.basename(file)}",
|
|
24
|
+
:thumbWidth => frame.columns
|
|
25
|
+
}
|
|
15
26
|
end
|
|
16
27
|
end
|
|
17
28
|
|
|
18
|
-
|
|
29
|
+
open('source_images.json', 'w') do |f|
|
|
30
|
+
f.write(JSON.pretty_generate(data))
|
|
31
|
+
end
|
|
19
32
|
|
|
20
33
|
thumbs.append(false).write('thumbs.jpg')
|
data/views/404.erb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
|
+
<title>Meme Captain meme generator - Not Found</title>
|
|
7
|
+
</head>
|
|
8
|
+
|
|
9
|
+
<body>
|
|
10
|
+
|
|
11
|
+
<h1>Not Found</h1>
|
|
12
|
+
|
|
13
|
+
<p><a href="<%= h @root_url %>"><%= h @root_url %></a></p>
|
|
14
|
+
|
|
15
|
+
</body>
|
|
16
|
+
|
|
17
|
+
</html>
|
data/views/index.erb
CHANGED
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html
|
|
2
|
+
<html lang="en" xmlns:fb="https://www.facebook.com/2008/fbml">
|
|
3
3
|
|
|
4
4
|
<head>
|
|
5
|
-
<title>Meme Captain</title>
|
|
6
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
|
+
<title>Meme Captain meme generator</title>
|
|
7
7
|
<style type="text/css">
|
|
8
|
+
body {
|
|
9
|
+
font-family : verdana, helvetica, arial, sans-serif;
|
|
10
|
+
}
|
|
11
|
+
|
|
8
12
|
#sourceImages {
|
|
9
13
|
background-color : #eee;
|
|
10
|
-
border
|
|
11
|
-
border-bottom : 1px solid #ccc;
|
|
14
|
+
border : 1px solid #ccc;
|
|
12
15
|
padding : 0em 1em 0.5em 1em;
|
|
13
16
|
margin : 1em 0em 1em 0em;
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
img.thumb {
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
margin : 2px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#heading {
|
|
24
|
+
font-size : 1em;
|
|
25
|
+
font-weight : normal;
|
|
19
26
|
}
|
|
20
27
|
</style>
|
|
21
28
|
</head>
|
|
22
29
|
|
|
23
30
|
<body>
|
|
24
31
|
|
|
25
|
-
<
|
|
32
|
+
<h1 id="heading"><a href="<%= h @root_url %>">Meme Captain</a> - make memes with images and text</h1>
|
|
26
33
|
|
|
27
34
|
<div id="img"></div>
|
|
28
35
|
|
|
@@ -31,17 +38,17 @@ img.thumb {
|
|
|
31
38
|
<table>
|
|
32
39
|
|
|
33
40
|
<tr>
|
|
34
|
-
<td><label for="u"
|
|
41
|
+
<td><label for="u">Source image URL: </label></td>
|
|
35
42
|
<td><input type="text" id="u" name="u" size="64" value="<%= h @u %>"/></td>
|
|
36
43
|
</tr>
|
|
37
44
|
|
|
38
45
|
<tr>
|
|
39
|
-
<td><label for="tt"
|
|
46
|
+
<td><label for="tt">Top text: </label></td>
|
|
40
47
|
<td><input type="text" id="tt" name="tt" size="64" value="<%= h @tt %>" /></td>
|
|
41
48
|
</tr>
|
|
42
49
|
|
|
43
50
|
<tr>
|
|
44
|
-
<td><label for="tb"
|
|
51
|
+
<td><label for="tb">Bottom text: </label></td>
|
|
45
52
|
<td><input type="text" id="tb" name="tb" size="64" value="<%= h @tb %>" /></td>
|
|
46
53
|
</tr>
|
|
47
54
|
|
|
@@ -56,73 +63,31 @@ img.thumb {
|
|
|
56
63
|
|
|
57
64
|
<div id="sourceImages">
|
|
58
65
|
|
|
59
|
-
<p>Locally hosted source images or search
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
images = [
|
|
64
|
-
['all_the_things.jpg', 67],
|
|
65
|
-
['bear_grylls.jpg', 45],
|
|
66
|
-
['business_cat.jpg', 50],
|
|
67
|
-
['courage_wolf.jpg', 50],
|
|
68
|
-
['dwight_schrute.jpg', 73],
|
|
69
|
-
['fry.png', 67],
|
|
70
|
-
['good_guy_greg.jpg', 51],
|
|
71
|
-
['grandma.jpg', 68],
|
|
72
|
-
['insanity_wolf.jpg', 50],
|
|
73
|
-
['internet_husband.jpg', 45],
|
|
74
|
-
['joseph_ducreux.jpg', 38],
|
|
75
|
-
['me_gusta.png', 50],
|
|
76
|
-
['most_interesting.jpg', 40],
|
|
77
|
-
['ok.png', 50],
|
|
78
|
-
['philosoraptor.jpg', 50],
|
|
79
|
-
['rage.png', 50],
|
|
80
|
-
['sap.jpg', 50],
|
|
81
|
-
['scumbag_steve.jpg', 50],
|
|
82
|
-
['seriously.png', 50],
|
|
83
|
-
['slowpoke.jpg', 50],
|
|
84
|
-
['success_kid.jpg', 50],
|
|
85
|
-
['town_crier.jpg', 75],
|
|
86
|
-
['troll_face.jpg', 55],
|
|
87
|
-
['trolldad.png', 50],
|
|
88
|
-
['trolldad_dancing.png', 50],
|
|
89
|
-
['tyler_durden.jpg', 50],
|
|
90
|
-
['xzibit.jpg', 77],
|
|
91
|
-
['y_u_no.jpg', 67],
|
|
92
|
-
['yao_ming.jpg', 42],
|
|
93
|
-
]
|
|
94
|
-
|
|
95
|
-
pos = 0
|
|
96
|
-
images.each do |name, offset|
|
|
97
|
-
%>
|
|
98
|
-
<img src="1.gif" class="thumb" style="width : <%= offset %>px; background-position : <%= pos %>px 0px;" onClick="$('#u').val('http://memecaptain.com/<%= name %>'); return false;" />
|
|
99
|
-
<%
|
|
100
|
-
pos -= offset
|
|
101
|
-
end
|
|
102
|
-
%>
|
|
103
|
-
|
|
104
|
-
<div id="bingImageResults"></div>
|
|
66
|
+
<p>Locally hosted source images or search for source images (click thumbnail to use):</p>
|
|
67
|
+
|
|
68
|
+
<div id="imageSearchResults"></div>
|
|
105
69
|
|
|
106
70
|
<form action="" method="get">
|
|
107
|
-
<input type="text" id="
|
|
108
|
-
<input type="button" id="
|
|
71
|
+
<input type="text" id="imageSearch" />
|
|
72
|
+
<input type="button" id="imageSearchButton" value="Image Search" /> powered by Bing and Google
|
|
109
73
|
</form>
|
|
110
74
|
|
|
111
75
|
</div>
|
|
112
76
|
|
|
113
|
-
<p>
|
|
77
|
+
<p>
|
|
78
|
+
Contact: Matthew M. Boedicker <a href="mailto:matthewm@boedicker.org">matthewm@boedicker.org</a> |
|
|
79
|
+
<a href="http://twitter.com/memecaptain">@memecaptain</a>
|
|
80
|
+
</p>
|
|
114
81
|
|
|
115
82
|
<p><a href="https://github.com/mmb/meme_captain">source code and API</a></p>
|
|
116
83
|
|
|
117
|
-
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.
|
|
84
|
+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
|
|
118
85
|
<script>
|
|
119
86
|
function showBingImages(resp) {
|
|
120
|
-
var div = $('#
|
|
87
|
+
var div = $('#imageSearchResults'),
|
|
121
88
|
searchResponse = resp.SearchResponse,
|
|
122
89
|
image = searchResponse.Image;
|
|
123
90
|
|
|
124
|
-
div.empty();
|
|
125
|
-
|
|
126
91
|
if (image.Total > 0) {
|
|
127
92
|
$.each(image.Results, function (i, img) {
|
|
128
93
|
div.append($('<img />').attr('src', img.Thumbnail.Url).click(
|
|
@@ -131,23 +96,39 @@ function showBingImages(resp) {
|
|
|
131
96
|
});
|
|
132
97
|
} else {
|
|
133
98
|
div.append($('<p />').append(
|
|
134
|
-
'No results for "' + searchResponse.Query.SearchTerms + '".'));
|
|
99
|
+
'No Bing results for "' + searchResponse.Query.SearchTerms + '".'));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function showGoogleImages(resp) {
|
|
104
|
+
var div = $('#imageSearchResults'),
|
|
105
|
+
searchResults = resp.responseData.results;
|
|
106
|
+
|
|
107
|
+
if (searchResults.length > 0) {
|
|
108
|
+
$.each(searchResults, function (i, img) {
|
|
109
|
+
div.append($('<img />').attr('src', img.tbUrl).click(
|
|
110
|
+
function () { $('#u').val(img.url); }
|
|
111
|
+
));
|
|
112
|
+
});
|
|
113
|
+
} else {
|
|
114
|
+
div.append($('<p />').append('No Google results.'));
|
|
135
115
|
}
|
|
136
116
|
}
|
|
137
117
|
|
|
138
|
-
function
|
|
139
|
-
var
|
|
140
|
-
|
|
118
|
+
function imageSearch() {
|
|
119
|
+
var imageSearch = $('#imageSearch'),
|
|
120
|
+
imageSearchVal = imageSearch.val();
|
|
141
121
|
|
|
142
|
-
if (
|
|
143
|
-
|
|
122
|
+
if (imageSearchVal.match(/[^\s]/)) {
|
|
123
|
+
imageSearch.val('');
|
|
124
|
+
$('#imageSearchResults').empty();
|
|
144
125
|
|
|
145
126
|
$.ajax({
|
|
146
127
|
type : 'GET',
|
|
147
128
|
url : 'http://api.bing.net/json.aspx',
|
|
148
129
|
data : {
|
|
149
130
|
AppId : 'A120380275E87F0071F163210211F0592D0E964C',
|
|
150
|
-
Query :
|
|
131
|
+
Query : imageSearchVal + ' imagesize:Medium',
|
|
151
132
|
Sources : 'Image',
|
|
152
133
|
Version : '2.0',
|
|
153
134
|
Market : 'en-us',
|
|
@@ -159,14 +140,49 @@ function bingImageSearch() {
|
|
|
159
140
|
jsonpCallback : 'showBingImages',
|
|
160
141
|
jsonp : 'JsonCallback'
|
|
161
142
|
});
|
|
143
|
+
|
|
144
|
+
$.ajax({
|
|
145
|
+
type : 'GET',
|
|
146
|
+
url : 'http://ajax.googleapis.com/ajax/services/search/images',
|
|
147
|
+
data : {
|
|
148
|
+
imgsz : 'large',
|
|
149
|
+
key : 'ABQIAAAA-E0uJIHoMJX6M6atCgYANRS1DzXPXMqKnKNRJm2Z_PRWxvtqGBSOvBqyXOwxGZU5jLxExg_5ym69rw',
|
|
150
|
+
q : imageSearchVal,
|
|
151
|
+
rsz : '5',
|
|
152
|
+
v : '1.0',
|
|
153
|
+
},
|
|
154
|
+
dataType : 'jsonp',
|
|
155
|
+
jsonpCallback : 'showGoogleImages',
|
|
156
|
+
});
|
|
162
157
|
}
|
|
163
158
|
}
|
|
164
159
|
|
|
160
|
+
function loadSourceImages() {
|
|
161
|
+
$.get('source_images.json', function(data) {
|
|
162
|
+
var pos = 0,
|
|
163
|
+
div = $('#imageSearchResults');
|
|
164
|
+
|
|
165
|
+
$.each(data.images, function (i, img) {
|
|
166
|
+
div.before($('<img />').attr('src', '1.gif').addClass('thumb').css({
|
|
167
|
+
'background-image' : 'url(' + data.thumbSpritesUrl + ')',
|
|
168
|
+
'background-position' : pos + 'px 0px',
|
|
169
|
+
height : data.thumbHeight,
|
|
170
|
+
width : img.thumbWidth + 'px',
|
|
171
|
+
}).click(function() {
|
|
172
|
+
$('#u').val(img.url);
|
|
173
|
+
}));
|
|
174
|
+
|
|
175
|
+
pos -= img.thumbWidth;
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
165
180
|
$(function () {
|
|
166
|
-
var
|
|
167
|
-
bingSearchVal,
|
|
181
|
+
var image,
|
|
168
182
|
imgDiv;
|
|
169
183
|
|
|
184
|
+
loadSourceImages();
|
|
185
|
+
|
|
170
186
|
if (window.location.search.match(/u=[^&$]/)) {
|
|
171
187
|
$('#tt').focus();
|
|
172
188
|
|
|
@@ -175,9 +191,10 @@ $(function () {
|
|
|
175
191
|
imgDiv.append($('<p />').append('Creating image ...'));
|
|
176
192
|
|
|
177
193
|
$.get('/g' + window.location.search, function (data) {
|
|
178
|
-
var img = $('<img />').attr('src', data.
|
|
179
|
-
|
|
180
|
-
|
|
194
|
+
var img = $('<img />').attr('src', data.permUrl),
|
|
195
|
+
imgLink = $('<a />').attr('href', data.permUrl).append(data.permUrl),
|
|
196
|
+
templateLink = $('<a />').attr('href', data.templateUrl).append(
|
|
197
|
+
data.templateUrl),
|
|
181
198
|
tweetLink = $('<a />').attr({
|
|
182
199
|
href : 'http://twitter.com/share',
|
|
183
200
|
'class' : 'twitter-share-button',
|
|
@@ -188,9 +205,9 @@ $(function () {
|
|
|
188
205
|
|
|
189
206
|
imgDiv.empty().append(
|
|
190
207
|
img).append(
|
|
191
|
-
$('<p />').append('
|
|
192
|
-
$('<p />').append('
|
|
193
|
-
|
|
208
|
+
$('<p />').append('Image: ').append(imgLink)).append(
|
|
209
|
+
$('<p />').append('Template: ').append(
|
|
210
|
+
templateLink)).append(
|
|
194
211
|
$('<p />').append(tweetLink).append($('<script />').attr('src',
|
|
195
212
|
'http://platform.twitter.com/widgets.js')));
|
|
196
213
|
|
|
@@ -198,7 +215,7 @@ $(function () {
|
|
|
198
215
|
imgDiv.append(
|
|
199
216
|
$('<div />').attr('id', 'fb-root')).append(
|
|
200
217
|
$('<fb:like />').attr({
|
|
201
|
-
href : data.
|
|
218
|
+
href : data.permUrl,
|
|
202
219
|
send : 'true',
|
|
203
220
|
width : '450',
|
|
204
221
|
show_faces : 'true',
|
|
@@ -223,14 +240,14 @@ $(function () {
|
|
|
223
240
|
$('#u').focus();
|
|
224
241
|
}
|
|
225
242
|
|
|
226
|
-
$('#
|
|
227
|
-
if (event.which
|
|
243
|
+
$('#imageSearch').keypress(function (event) {
|
|
244
|
+
if (event.which === 13) {
|
|
228
245
|
event.preventDefault();
|
|
229
|
-
|
|
246
|
+
imageSearch();
|
|
230
247
|
}
|
|
231
248
|
});
|
|
232
249
|
|
|
233
|
-
$('#
|
|
250
|
+
$('#imageSearchButton').click(imageSearch);
|
|
234
251
|
});
|
|
235
252
|
</script>
|
|
236
253
|
|
data/watermark.png
ADDED
|
Binary file
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: meme_captain
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 13
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 0
|
|
9
|
-
-
|
|
10
|
-
version: 0.0.
|
|
9
|
+
- 9
|
|
10
|
+
version: 0.0.9
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Matthew M. Boedicker
|
|
@@ -15,11 +15,11 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date:
|
|
18
|
+
date: 2012-01-19 00:00:00 -05:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
22
|
-
name:
|
|
22
|
+
name: bson_ext
|
|
23
23
|
prerelease: false
|
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
25
25
|
none: false
|
|
@@ -33,7 +33,7 @@ dependencies:
|
|
|
33
33
|
type: :runtime
|
|
34
34
|
version_requirements: *id001
|
|
35
35
|
- !ruby/object:Gem::Dependency
|
|
36
|
-
name:
|
|
36
|
+
name: curb
|
|
37
37
|
prerelease: false
|
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
@@ -47,7 +47,7 @@ dependencies:
|
|
|
47
47
|
type: :runtime
|
|
48
48
|
version_requirements: *id002
|
|
49
49
|
- !ruby/object:Gem::Dependency
|
|
50
|
-
name:
|
|
50
|
+
name: json
|
|
51
51
|
prerelease: false
|
|
52
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
|
53
53
|
none: false
|
|
@@ -61,7 +61,7 @@ dependencies:
|
|
|
61
61
|
type: :runtime
|
|
62
62
|
version_requirements: *id003
|
|
63
63
|
- !ruby/object:Gem::Dependency
|
|
64
|
-
name:
|
|
64
|
+
name: mime-types
|
|
65
65
|
prerelease: false
|
|
66
66
|
requirement: &id004 !ruby/object:Gem::Requirement
|
|
67
67
|
none: false
|
|
@@ -75,7 +75,7 @@ dependencies:
|
|
|
75
75
|
type: :runtime
|
|
76
76
|
version_requirements: *id004
|
|
77
77
|
- !ruby/object:Gem::Dependency
|
|
78
|
-
name:
|
|
78
|
+
name: mongo
|
|
79
79
|
prerelease: false
|
|
80
80
|
requirement: &id005 !ruby/object:Gem::Requirement
|
|
81
81
|
none: false
|
|
@@ -89,7 +89,7 @@ dependencies:
|
|
|
89
89
|
type: :runtime
|
|
90
90
|
version_requirements: *id005
|
|
91
91
|
- !ruby/object:Gem::Dependency
|
|
92
|
-
name:
|
|
92
|
+
name: mongo_mapper
|
|
93
93
|
prerelease: false
|
|
94
94
|
requirement: &id006 !ruby/object:Gem::Requirement
|
|
95
95
|
none: false
|
|
@@ -102,11 +102,53 @@ dependencies:
|
|
|
102
102
|
version: "0"
|
|
103
103
|
type: :runtime
|
|
104
104
|
version_requirements: *id006
|
|
105
|
+
- !ruby/object:Gem::Dependency
|
|
106
|
+
name: rack
|
|
107
|
+
prerelease: false
|
|
108
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
109
|
+
none: false
|
|
110
|
+
requirements:
|
|
111
|
+
- - ">="
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
hash: 3
|
|
114
|
+
segments:
|
|
115
|
+
- 0
|
|
116
|
+
version: "0"
|
|
117
|
+
type: :runtime
|
|
118
|
+
version_requirements: *id007
|
|
119
|
+
- !ruby/object:Gem::Dependency
|
|
120
|
+
name: rmagick
|
|
121
|
+
prerelease: false
|
|
122
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
|
123
|
+
none: false
|
|
124
|
+
requirements:
|
|
125
|
+
- - ">="
|
|
126
|
+
- !ruby/object:Gem::Version
|
|
127
|
+
hash: 3
|
|
128
|
+
segments:
|
|
129
|
+
- 0
|
|
130
|
+
version: "0"
|
|
131
|
+
type: :runtime
|
|
132
|
+
version_requirements: *id008
|
|
133
|
+
- !ruby/object:Gem::Dependency
|
|
134
|
+
name: sinatra
|
|
135
|
+
prerelease: false
|
|
136
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
|
137
|
+
none: false
|
|
138
|
+
requirements:
|
|
139
|
+
- - ">="
|
|
140
|
+
- !ruby/object:Gem::Version
|
|
141
|
+
hash: 3
|
|
142
|
+
segments:
|
|
143
|
+
- 0
|
|
144
|
+
version: "0"
|
|
145
|
+
type: :runtime
|
|
146
|
+
version_requirements: *id009
|
|
105
147
|
description: create meme images
|
|
106
148
|
email:
|
|
107
149
|
- matthewm@boedicker.org
|
|
108
|
-
executables:
|
|
109
|
-
|
|
150
|
+
executables:
|
|
151
|
+
- memecaptain
|
|
110
152
|
extensions: []
|
|
111
153
|
|
|
112
154
|
extra_rdoc_files: []
|
|
@@ -116,24 +158,31 @@ files:
|
|
|
116
158
|
- COPYING
|
|
117
159
|
- ChangeLog
|
|
118
160
|
- README.md
|
|
161
|
+
- bin/memecaptain
|
|
119
162
|
- config.ru
|
|
120
|
-
- img_cache/source/.gitignore
|
|
121
163
|
- lib/meme_captain.rb
|
|
122
164
|
- lib/meme_captain/caption.rb
|
|
123
165
|
- lib/meme_captain/caption_choice.rb
|
|
124
166
|
- lib/meme_captain/draw.rb
|
|
125
167
|
- lib/meme_captain/file_body.rb
|
|
126
|
-
- lib/meme_captain/
|
|
168
|
+
- lib/meme_captain/image_list.rb
|
|
169
|
+
- lib/meme_captain/image_list/cache.rb
|
|
170
|
+
- lib/meme_captain/image_list/fetch.rb
|
|
171
|
+
- lib/meme_captain/image_list/source_image.rb
|
|
172
|
+
- lib/meme_captain/image_list/watermark.rb
|
|
127
173
|
- lib/meme_captain/meme.rb
|
|
128
|
-
- lib/meme_captain/
|
|
174
|
+
- lib/meme_captain/meme_data.rb
|
|
129
175
|
- lib/meme_captain/server.rb
|
|
130
176
|
- lib/meme_captain/version.rb
|
|
131
177
|
- meme_captain.gemspec
|
|
132
178
|
- public/1.gif
|
|
179
|
+
- public/source_images.json
|
|
133
180
|
- public/thumbs.jpg
|
|
134
181
|
- public/tmp/.gitignore
|
|
135
182
|
- script/thumb_sprites.rb
|
|
183
|
+
- views/404.erb
|
|
136
184
|
- views/index.erb
|
|
185
|
+
- watermark.png
|
|
137
186
|
has_rdoc: true
|
|
138
187
|
homepage: https://github.com/mmb/meme_captain
|
|
139
188
|
licenses: []
|
data/img_cache/source/.gitignore
DELETED
|
File without changes
|